diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..9fe93ed --- /dev/null +++ b/.editorconfig @@ -0,0 +1,15 @@ +; EditorConfig file: https://EditorConfig.org +; Install the "EditorConfig" plugin into your editor to use + +root = true + +[*] +charset = utf-8 +end_of_line = lf +insert_final_newline = true +indent_style = space +indent_size = 4 +trim_trailing_whitespace = true + +[package.json] +indent_size = 2 diff --git a/.eslintrc.js b/.eslintrc.js index d630828..2dce241 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -86,6 +86,7 @@ module.exports = { "unicorn/no-zero-fractions": "off", "require-unicode-regexp": "off", "yoda": "off", - "valid-jsdoc": 0 + 'jsdoc/require-returns': ['error', {forceRequireReturn: false}], + "jsdoc/match-description": 0 } }; diff --git a/dist/index-esm.js b/dist/index-esm.js index 208cfb5..8fce4cc 100644 --- a/dist/index-esm.js +++ b/dist/index-esm.js @@ -2421,57 +2421,94 @@ var parser = function () { return _o; }, $V0 = [1, 6], - $V1 = [1, 17], + $V1 = [1, 19], $V2 = [1, 7], $V3 = [1, 10], $V4 = [1, 13], - $V5 = [1, 28], + $V5 = [1, 32], $V6 = [1, 14], - $V7 = [1, 34], + $V7 = [1, 38], $V8 = [1, 15], - $V9 = [1, 33], - $Va = [1, 21], - $Vb = [1, 24], - $Vc = [1, 25], + $V9 = [1, 22], + $Va = [1, 37], + $Vb = [1, 25], + $Vc = [1, 28], $Vd = [1, 29], - $Ve = [1, 30], - $Vf = [1, 32], - $Vg = [1, 31], - $Vh = [1, 5], - $Vi = [1, 5, 14, 16, 24, 28, 41], - $Vj = [1, 57], - $Vk = [1, 59], - $Vl = [1, 58], - $Vm = [1, 46], - $Vn = [1, 52], - $Vo = [1, 41], - $Vp = [1, 42], - $Vq = [1, 43], - $Vr = [1, 44], - $Vs = [1, 45], - $Vt = [1, 47], - $Vu = [1, 49], - $Vv = [1, 50], - $Vw = [1, 55], - $Vx = [1, 56], - $Vy = [1, 5, 14, 16, 24, 28, 41, 54], - $Vz = [1, 5, 14, 16, 24, 28, 31, 32, 33, 34, 41, 54], - $VA = [1, 5, 14, 16, 24, 28, 31, 32, 33, 34, 38, 40, 41, 54], - $VB = [1, 5, 14, 16, 24, 28, 31, 32, 33, 34, 38, 40, 41, 54, 58], - $VC = [1, 5, 14, 16, 24, 28, 41, 58], - $VD = [1, 93], - $VE = [1, 98], - $VF = [1, 112], - $VG = [1, 115], - $VH = [14, 41], - $VI = [14, 28], - $VJ = [1, 127], - $VK = [14, 24, 41], - $VL = [14, 24, 41, 58], - $VM = [14, 28, 58], - $VN = [14, 24], - $VO = [1, 5, 14, 28, 41], - $VP = [1, 151]; + $Ve = [1, 33], + $Vf = [1, 34], + $Vg = [1, 36], + $Vh = [1, 35], + $Vi = [1, 5], + $Vj = [1, 5, 14, 16, 24, 28, 56], + $Vk = [1, 61], + $Vl = [1, 63], + $Vm = [1, 62], + $Vn = [1, 50], + $Vo = [1, 56], + $Vp = [1, 45], + $Vq = [1, 46], + $Vr = [1, 47], + $Vs = [1, 48], + $Vt = [1, 49], + $Vu = [1, 51], + $Vv = [1, 53], + $Vw = [1, 54], + $Vx = [1, 59], + $Vy = [1, 60], + $Vz = [1, 5, 14, 16, 24, 28, 56, 69], + $VA = [1, 69], + $VB = [1, 70], + $VC = [1, 71], + $VD = [1, 72], + $VE = [1, 73], + $VF = [1, 74], + $VG = [1, 5, 14, 16, 24, 28, 31, 32, 34, 35, 36, 37, 38, 39, 56, 69], + $VH = [1, 75], + $VI = [1, 76], + $VJ = [1, 77], + $VK = [1, 78], + $VL = [1, 79], + $VM = [1, 80], + $VN = [1, 5, 14, 16, 24, 28, 31, 32, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 56, 69], + $VO = [1, 5, 14, 16, 24, 28, 31, 32, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 52, 55, 56, 69], + $VP = [2, 51], + $VQ = [1, 5, 14, 16, 24, 28, 31, 32, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 52, 55, 56, 69, 73], + $VR = [1, 5, 14, 16, 24, 28, 56, 73], + $VS = [1, 109], + $VT = [1, 125], + $VU = [1, 115], + $VV = [1, 122], + $VW = [1, 126], + $VX = [1, 133], + $VY = [1, 135], + $VZ = [1, 117], + $V_ = [1, 129], + $V$ = [1, 127], + $V01 = [1, 134], + $V11 = [1, 128], + $V21 = [1, 130], + $V31 = [1, 138], + $V41 = [1, 120], + $V51 = [1, 118], + $V61 = [1, 119], + $V71 = [1, 121], + $V81 = [1, 137], + $V91 = [1, 124], + $Va1 = [1, 131], + $Vb1 = [1, 132], + $Vc1 = [1, 136], + $Vd1 = [1, 123], + $Ve1 = [1, 162], + $Vf1 = [1, 165], + $Vg1 = [14, 56], + $Vh1 = [14, 28], + $Vi1 = [1, 177], + $Vj1 = [14, 24, 56], + $Vk1 = [14, 24, 56, 73], + $Vl1 = [14, 28, 73], + $Vm1 = [14, 24], + $Vn1 = [1, 5, 14, 28, 56], + $Vo1 = [1, 201]; var parser = { trace: function trace() {}, @@ -2496,7 +2533,7 @@ var parser = function () { "=~": 18, "namedPattern": 19, "expression": 20, - "mathExpression": 21, + "booleanExpression": 21, "MAP": 22, "(": 23, ")": 24, @@ -2505,59 +2542,72 @@ var parser = function () { "patterns": 27, "}": 28, "SEQUENCES": 29, - "callExpression": 30, - "+": 31, - "-": 32, - "*": 33, - "/": 34, - "argumentList": 35, - "memberExpression": 36, - "primaryExpression": 37, - ".": 38, - "integer": 39, - "[": 40, - "]": 41, - "boolean": 42, - "NULL_TYPE": 43, - "float": 44, - "string": 45, - "UNDEFINED_TYPE": 46, - "$": 47, - "arrayExpression": 48, - "objectExpression": 49, - "expressionElements": 50, - "expressionElement": 51, - "expressionProperties": 52, - "expressionProperty": 53, - ":": 54, - "argument": 55, - "...": 56, - "pattern": 57, - "AS": 58, - "ANY_TYPE": 59, - "ARRAY_TYPE": 60, - "BOOLEAN_TYPE": 61, - "TRUE": 62, - "FALSE": 63, - "NUMBER_TYPE": 64, - "OBJECT_TYPE": 65, - "STRING_TYPE": 66, - "arrayPattern": 67, - "objectPattern": 68, - "PATTERN": 69, - "ENUMERATION": 70, - "patternElements": 71, - "namedPatternElement": 72, - "patternElement": 73, - "range": 74, - "..": 75, - "patternProperties": 76, - "namedPatternProperty": 77, - "namedProperty": 78, - "STRING": 79, - "NUMBER": 80, - "stringOrIdentifier": 81, - "identifiers": 82, + "relationalExpression": 30, + "AND": 31, + "OR": 32, + "mathExpression": 33, + "<": 34, + "<=": 35, + "==": 36, + "!=": 37, + ">=": 38, + ">": 39, + "callExpression": 40, + "+": 41, + "-": 42, + "*": 43, + "/": 44, + "MOD": 45, + "POW": 46, + "argumentList": 47, + "unaryExpression": 48, + "memberExpression": 49, + "NOT": 50, + "primaryExpression": 51, + ".": 52, + "name": 53, + "integer": 54, + "[": 55, + "]": 56, + "boolean": 57, + "NULL_TYPE": 58, + "float": 59, + "string": 60, + "UNDEFINED_TYPE": 61, + "$": 62, + "arrayExpression": 63, + "objectExpression": 64, + "expressionElements": 65, + "expressionElement": 66, + "expressionProperties": 67, + "expressionProperty": 68, + ":": 69, + "argument": 70, + "...": 71, + "pattern": 72, + "AS": 73, + "ANY_TYPE": 74, + "ARRAY_TYPE": 75, + "BOOLEAN_TYPE": 76, + "TRUE": 77, + "FALSE": 78, + "NUMBER_TYPE": 79, + "OBJECT_TYPE": 80, + "STRING_TYPE": 81, + "arrayPattern": 82, + "objectPattern": 83, + "PATTERN": 84, + "ENUMERATION": 85, + "patternElements": 86, + "namedPatternElement": 87, + "patternElement": 88, + "range": 89, + "..": 90, + "patternProperties": 91, + "namedPatternProperty": 92, + "patternProperty": 93, + "STRING": 94, + "NUMBER": 95, "$accept": 0, "$end": 1 }, @@ -2578,34 +2628,45 @@ var parser = function () { 26: "{", 28: "}", 29: "SEQUENCES", - 31: "+", - 32: "-", - 33: "*", - 34: "/", - 38: ".", - 40: "[", - 41: "]", - 43: "NULL_TYPE", - 46: "UNDEFINED_TYPE", - 47: "$", - 54: ":", - 56: "...", - 58: "AS", - 59: "ANY_TYPE", - 60: "ARRAY_TYPE", - 61: "BOOLEAN_TYPE", - 62: "TRUE", - 63: "FALSE", - 64: "NUMBER_TYPE", - 65: "OBJECT_TYPE", - 66: "STRING_TYPE", - 69: "PATTERN", - 70: "ENUMERATION", - 75: "..", - 79: "STRING", - 80: "NUMBER" + 31: "AND", + 32: "OR", + 34: "<", + 35: "<=", + 36: "==", + 37: "!=", + 38: ">=", + 39: ">", + 41: "+", + 42: "-", + 43: "*", + 44: "/", + 45: "MOD", + 46: "POW", + 50: "NOT", + 52: ".", + 55: "[", + 56: "]", + 58: "NULL_TYPE", + 61: "UNDEFINED_TYPE", + 62: "$", + 69: ":", + 71: "...", + 73: "AS", + 74: "ANY_TYPE", + 75: "ARRAY_TYPE", + 76: "BOOLEAN_TYPE", + 77: "TRUE", + 78: "FALSE", + 79: "NUMBER_TYPE", + 80: "OBJECT_TYPE", + 81: "STRING_TYPE", + 84: "PATTERN", + 85: "ENUMERATION", + 90: "..", + 94: "STRING", + 95: "NUMBER" }, - productions_: [0, [3, 1], [3, 2], [4, 3], [4, 1], [6, 1], [6, 1], [7, 4], [7, 4], [13, 3], [13, 1], [8, 1], [15, 3], [15, 1], [17, 2], [17, 1], [20, 1], [20, 6], [20, 4], [20, 4], [21, 1], [21, 3], [21, 3], [21, 3], [21, 3], [30, 3], [30, 4], [30, 1], [36, 1], [36, 3], [36, 3], [36, 4], [37, 1], [37, 1], [37, 1], [37, 1], [37, 1], [37, 1], [37, 1], [37, 1], [37, 1], [37, 3], [48, 2], [48, 3], [50, 3], [50, 1], [51, 1], [51, 1], [49, 2], [49, 3], [52, 3], [52, 1], [53, 3], [53, 1], [53, 1], [35, 3], [35, 1], [55, 1], [55, 2], [27, 3], [27, 1], [19, 1], [19, 3], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 2], [57, 2], [57, 1], [67, 2], [67, 3], [71, 3], [71, 1], [72, 1], [72, 3], [73, 1], [73, 3], [73, 3], [73, 5], [74, 3], [74, 2], [74, 2], [74, 1], [68, 2], [68, 3], [76, 3], [76, 1], [77, 1], [77, 3], [78, 3], [78, 1], [42, 1], [42, 1], [45, 1], [39, 1], [44, 1], [81, 1], [81, 1], [82, 3], [82, 1]], + productions_: [0, [3, 1], [3, 2], [4, 3], [4, 1], [6, 1], [6, 1], [7, 4], [7, 4], [13, 3], [13, 1], [8, 1], [15, 3], [15, 1], [17, 2], [17, 1], [20, 1], [20, 6], [20, 4], [20, 4], [21, 1], [21, 3], [21, 3], [30, 1], [30, 3], [30, 3], [30, 3], [30, 3], [30, 3], [30, 3], [33, 1], [33, 3], [33, 3], [33, 3], [33, 3], [33, 3], [33, 3], [40, 3], [40, 4], [40, 1], [48, 1], [48, 2], [49, 1], [49, 3], [49, 3], [49, 4], [51, 1], [51, 1], [51, 1], [51, 1], [51, 1], [51, 1], [51, 1], [51, 1], [51, 1], [51, 3], [63, 2], [63, 3], [65, 3], [65, 1], [66, 1], [66, 1], [64, 2], [64, 3], [67, 3], [67, 1], [68, 3], [68, 1], [68, 1], [47, 3], [47, 1], [70, 1], [70, 2], [27, 3], [27, 1], [19, 1], [19, 3], [72, 1], [72, 1], [72, 1], [72, 1], [72, 1], [72, 1], [72, 1], [72, 1], [72, 1], [72, 1], [72, 1], [72, 1], [72, 1], [72, 1], [72, 2], [72, 2], [72, 1], [82, 2], [82, 3], [86, 3], [86, 1], [87, 1], [87, 3], [88, 1], [88, 3], [88, 3], [88, 5], [89, 3], [89, 2], [89, 2], [89, 1], [83, 2], [83, 3], [91, 3], [91, 1], [92, 1], [92, 3], [93, 3], [93, 1], [57, 1], [57, 1], [60, 1], [54, 1], [59, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1]], performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */ , $$ @@ -2626,13 +2687,12 @@ var parser = function () { case 3: case 9: case 12: - case 44: - case 50: - case 55: - case 59: - case 82: + case 58: + case 64: + case 69: + case 73: case 96: - case 109: + case 110: $$[$0 - 2].push($$[$0]); this.$ = $$[$0 - 2]; break; @@ -2640,13 +2700,12 @@ var parser = function () { case 4: case 10: case 13: - case 45: - case 51: - case 56: - case 60: - case 83: + case 59: + case 65: + case 70: + case 74: case 97: - case 110: + case 111: this.$ = [$$[$0]]; break; @@ -2656,16 +2715,42 @@ var parser = function () { case 15: case 16: case 20: - case 27: - case 28: + case 23: + case 30: case 39: case 40: - case 46: - case 47: + case 42: + case 53: case 54: - case 57: - case 98: - case 107: + case 60: + case 61: + case 68: + case 71: + case 112: + case 121: + case 122: + case 123: + case 124: + case 125: + case 126: + case 127: + case 128: + case 129: + case 130: + case 131: + case 132: + case 133: + case 134: + case 135: + case 136: + case 137: + case 138: + case 139: + case 140: + case 141: + case 142: + case 143: + case 144: this.$ = $$[$0]; break; @@ -2715,13 +2800,77 @@ var parser = function () { case 21: this.$ = { - type: 'add', + type: 'and', left: $$[$0 - 2], right: $$[$0] }; break; case 22: + this.$ = { + type: 'or', + left: $$[$0 - 2], + right: $$[$0] + }; + break; + + case 24: + this.$ = { + type: 'less_than', + left: $$[$0 - 2], + right: $$[$0] + }; + break; + + case 25: + this.$ = { + type: 'less_equal', + left: $$[$0 - 2], + right: $$[$0] + }; + break; + + case 26: + this.$ = { + type: 'equal', + left: $$[$0 - 2], + right: $$[$0] + }; + break; + + case 27: + this.$ = { + type: 'not_equal', + left: $$[$0 - 2], + right: $$[$0] + }; + break; + + case 28: + this.$ = { + type: 'greater_equal', + left: $$[$0 - 2], + right: $$[$0] + }; + break; + + case 29: + this.$ = { + type: 'greater_than', + left: $$[$0 - 2], + right: $$[$0] + }; + break; + + case 31: + this.$ = { + type: 'add', + left: $$[$0 - 2], + right: $$[$0] + }; + break; + + case 32: this.$ = { type: 'subtract', left: $$[$0 - 2], @@ -2729,7 +2878,7 @@ var parser = function () { }; break; - case 23: + case 33: this.$ = { type: 'multiply', left: $$[$0 - 2], @@ -2737,7 +2886,7 @@ var parser = function () { }; break; - case 24: + case 34: this.$ = { type: 'divide', left: $$[$0 - 2], @@ -2745,7 +2894,23 @@ var parser = function () { }; break; - case 25: + case 35: + this.$ = { + type: 'modulus', + left: $$[$0 - 2], + right: $$[$0] + }; + break; + + case 36: + this.$ = { + type: 'power', + left: $$[$0 - 2], + right: $$[$0] + }; + break; + + case 37: this.$ = { type: 'invoke', name: $$[$0 - 2], @@ -2753,7 +2918,7 @@ var parser = function () { }; break; - case 26: + case 38: this.$ = { type: 'invoke', name: $$[$0 - 3], @@ -2761,7 +2926,14 @@ var parser = function () { }; break; - case 29: + case 41: + this.$ = { + type: 'not', + value: $$[$0] + }; + break; + + case 43: this.$ = { type: 'get-property', left: $$[$0 - 2], @@ -2769,7 +2941,7 @@ var parser = function () { }; break; - case 30: + case 44: this.$ = { type: 'get-index', left: $$[$0 - 2], @@ -2777,7 +2949,7 @@ var parser = function () { }; break; - case 31: + case 45: this.$ = { type: 'get-index', left: $$[$0 - 3], @@ -2785,87 +2957,87 @@ var parser = function () { }; break; - case 32: + case 46: this.$ = { type: 'boolean', value: $$[$0] }; break; - case 33: + case 47: this.$ = { type: 'boolean', value: null }; break; - case 34: + case 48: this.$ = { type: 'number', value: $$[$0] }; break; - case 35: + case 49: this.$ = { type: 'string', value: $$[$0] }; break; - case 36: + case 50: this.$ = { type: 'undefined', value: undefined }; break; - case 37: + case 51: this.$ = { type: 'get-value', name: $$[$0] }; break; - case 38: + case 52: this.$ = { type: 'get-structure' }; break; - case 41: + case 55: this.$ = $$[$0 - 1]; break; - case 42: + case 56: this.$ = { type: 'array', value: [] }; break; - case 43: + case 57: this.$ = { type: 'array', value: $$[$0 - 1] }; break; - case 48: + case 62: this.$ = { type: 'object', value: [] }; break; - case 49: + case 63: this.$ = { type: 'object', value: $$[$0 - 1] }; break; - case 52: + case 66: this.$ = { type: 'property', name: $$[$0 - 2], @@ -2873,7 +3045,7 @@ var parser = function () { }; break; - case 53: + case 67: this.$ = { type: 'property', name: $$[$0], @@ -2881,27 +3053,27 @@ var parser = function () { }; break; - case 58: + case 72: this.$ = { type: 'spread', expression: $$[$0] }; break; - case 61: - case 84: + case 75: + case 98: $$[$0].assignTo = null; this.$ = $$[$0]; break; - case 62: - case 85: + case 76: case 99: + case 113: $$[$0 - 2].assignTo = $$[$0]; this.$ = $$[$0 - 2]; break; - case 63: + case 77: this.$ = { type: 'pattern', patternType: 'any', @@ -2909,7 +3081,7 @@ var parser = function () { }; break; - case 64: + case 78: this.$ = { type: 'pattern', patternType: 'array', @@ -2917,7 +3089,7 @@ var parser = function () { }; break; - case 65: + case 79: this.$ = { type: 'pattern', patternType: 'boolean', @@ -2925,7 +3097,7 @@ var parser = function () { }; break; - case 66: + case 80: this.$ = { type: 'pattern', patternType: 'boolean', @@ -2933,7 +3105,7 @@ var parser = function () { }; break; - case 67: + case 81: this.$ = { type: 'pattern', patternType: 'boolean', @@ -2941,7 +3113,7 @@ var parser = function () { }; break; - case 68: + case 82: this.$ = { type: 'pattern', patternType: 'null', @@ -2949,7 +3121,7 @@ var parser = function () { }; break; - case 69: + case 83: this.$ = { type: 'pattern', patternType: 'number', @@ -2957,7 +3129,7 @@ var parser = function () { }; break; - case 70: + case 84: this.$ = { type: 'pattern', patternType: 'number', @@ -2965,7 +3137,7 @@ var parser = function () { }; break; - case 71: + case 85: this.$ = { type: 'pattern', patternType: 'object', @@ -2973,7 +3145,7 @@ var parser = function () { }; break; - case 72: + case 86: this.$ = { type: 'pattern', patternType: 'string', @@ -2981,7 +3153,7 @@ var parser = function () { }; break; - case 73: + case 87: this.$ = { type: 'pattern', patternType: 'string', @@ -2989,7 +3161,7 @@ var parser = function () { }; break; - case 74: + case 88: this.$ = { type: 'pattern', patternType: 'undefined', @@ -2997,26 +3169,26 @@ var parser = function () { }; break; - case 75: - case 76: + case 89: + case 90: this.$ = $$[$0]; break; - case 77: + case 91: this.$ = { type: 'pattern-reference', name: $$[$0] }; break; - case 78: + case 92: this.$ = { type: 'enumeration-reference', name: $$[$0] }; break; - case 79: + case 93: this.$ = { type: 'pattern', patternType: 'reference', @@ -3024,7 +3196,7 @@ var parser = function () { }; break; - case 80: + case 94: this.$ = { type: 'pattern', patternType: 'array-pattern', @@ -3032,7 +3204,7 @@ var parser = function () { }; break; - case 81: + case 95: this.$ = { type: 'pattern', patternType: 'array-pattern', @@ -3040,7 +3212,7 @@ var parser = function () { }; break; - case 86: + case 100: this.$ = { type: 'element', pattern: $$[$0], @@ -3052,7 +3224,7 @@ var parser = function () { }; break; - case 87: + case 101: this.$ = { type: 'element', pattern: $$[$0 - 2], @@ -3060,7 +3232,7 @@ var parser = function () { }; break; - case 88: + case 102: this.$ = { type: 'element-group', elements: $$[$0 - 1], @@ -3072,7 +3244,7 @@ var parser = function () { }; break; - case 89: + case 103: this.$ = { type: 'element-group', elements: $$[$0 - 3], @@ -3080,7 +3252,7 @@ var parser = function () { }; break; - case 90: + case 104: this.$ = { type: 'range', start: $$[$0 - 2], @@ -3088,7 +3260,7 @@ var parser = function () { }; break; - case 91: + case 105: this.$ = { type: 'range', start: 0, @@ -3096,7 +3268,7 @@ var parser = function () { }; break; - case 92: + case 106: this.$ = { type: 'range', start: $$[$0 - 1], @@ -3104,7 +3276,7 @@ var parser = function () { }; break; - case 93: + case 107: this.$ = { type: 'range', start: $$[$0], @@ -3112,7 +3284,7 @@ var parser = function () { }; break; - case 94: + case 108: this.$ = { type: 'pattern', patternType: 'object', @@ -3120,7 +3292,7 @@ var parser = function () { }; break; - case 95: + case 109: this.$ = { type: 'pattern', patternType: 'object-pattern', @@ -3128,7 +3300,7 @@ var parser = function () { }; break; - case 100: + case 114: this.$ = { type: 'property', name: $$[$0 - 2], @@ -3136,7 +3308,7 @@ var parser = function () { }; break; - case 101: + case 115: this.$ = { type: 'property', name: $$[$0], @@ -3148,24 +3320,23 @@ var parser = function () { }; break; - case 102: + case 116: this.$ = true; break; - case 103: + case 117: this.$ = false; break; - case 104: - case 108: + case 118: this.$ = $$[$0].substring(1, $$[$0].length - 1); break; - case 105: + case 119: this.$ = parseInt($$[$0]); break; - case 106: + case 120: this.$ = parseFloat($$[$0]); break; } @@ -3190,75 +3361,111 @@ var parser = function () { 26: $V7, 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { 1: [3] }, { 1: [2, 1], - 5: [1, 35] - }, o($Vh, [2, 4]), o($Vh, [2, 5]), o($Vh, [2, 6]), { - 10: [1, 36] + 5: [1, 39] + }, o($Vi, [2, 4]), o($Vi, [2, 5]), o($Vi, [2, 6]), { + 10: [1, 40] }, { - 10: [1, 37] - }, o([1, 5, 14, 24, 28, 41], [2, 11], { - 16: [1, 38] - }), o($Vi, [2, 13]), { - 10: $Vj, - 19: 39, - 26: $Vk, - 40: $Vl, - 43: $Vm, - 44: 48, - 45: 51, - 46: $Vn, - 57: 40, - 59: $Vo, - 60: $Vp, - 61: $Vq, - 62: $Vr, - 63: $Vs, - 64: $Vt, - 65: $Vu, - 66: $Vv, - 67: 53, - 68: 54, - 69: $Vw, - 70: $Vx, - 79: $Vf, - 80: $Vg - }, o($Vi, [2, 15]), o($Vy, [2, 16], { - 31: [1, 60], - 32: [1, 61], - 33: [1, 62], - 34: [1, 63] - }), { + 10: [1, 41] + }, o([1, 5, 14, 24, 28, 56], [2, 11], { + 16: [1, 42] + }), o($Vj, [2, 13]), { + 10: $Vk, + 19: 43, + 26: $Vl, + 55: $Vm, + 58: $Vn, + 59: 52, + 60: 55, + 61: $Vo, + 72: 44, + 74: $Vp, + 75: $Vq, + 76: $Vr, + 77: $Vs, + 78: $Vt, + 79: $Vu, + 80: $Vv, + 81: $Vw, + 82: 57, + 83: 58, + 84: $Vx, + 85: $Vy, + 94: $Vg, + 95: $Vh + }, o($Vj, [2, 15]), o($Vz, [2, 16]), { 23: [1, 64] }, { 26: [1, 65] }, { 26: [1, 66] - }, o($Vz, [2, 20]), o($VA, [2, 37], { - 23: [1, 67] - }), o($Vz, [2, 27], { - 38: [1, 68], - 40: [1, 69] - }), o($VA, [2, 28]), o($VA, [2, 32]), o($VA, [2, 33]), o($VA, [2, 34]), o($VA, [2, 35]), o($VA, [2, 36]), o($VA, [2, 38]), o($VA, [2, 39]), o($VA, [2, 40]), { + }, o($Vz, [2, 20], { + 31: [1, 67], + 32: [1, 68], + 34: $VA, + 35: $VB, + 36: $VC, + 37: $VD, + 38: $VE, + 39: $VF + }), o($VG, [2, 23], { + 41: $VH, + 42: $VI, + 43: $VJ, + 44: $VK, + 45: $VL, + 46: $VM + }), o($VN, [2, 30]), o($VO, $VP, { + 23: [1, 81] + }), o($VN, [2, 39]), o($VN, [2, 40], { + 52: [1, 82], + 55: [1, 83] + }), { + 10: [1, 85], + 23: $V5, + 26: $V7, + 48: 84, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, + 62: $Vd, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, o($VO, [2, 42]), o($VO, [2, 46]), o($VO, [2, 47]), o($VO, [2, 48]), o($VO, [2, 49]), o($VO, [2, 50]), o($VO, [2, 52]), o($VO, [2, 53]), o($VO, [2, 54]), { 10: $V1, - 20: 70, + 20: 86, 21: 12, 22: $V4, 23: $V5, @@ -3266,27 +3473,31 @@ var parser = function () { 26: $V7, 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg - }, o($VA, [2, 102]), o($VA, [2, 103]), o($VB, [2, 106]), o($VB, [2, 104]), { - 7: 75, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, o($VO, [2, 116]), o($VO, [2, 117]), o($VQ, [2, 120]), o($VQ, [2, 118]), { + 7: 91, 9: $V0, 10: $V1, 12: $V2, - 20: 74, + 20: 90, 21: 12, 22: $V4, 23: $V5, @@ -3294,58 +3505,66 @@ var parser = function () { 26: $V7, 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 41: [1, 71], - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, - 50: 72, - 51: 73, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 56: [1, 87], + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 65: 88, + 66: 89, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { - 7: 80, + 7: 96, 9: $V0, 10: $V1, 12: $V2, - 20: 79, + 20: 95, 21: 12, 22: $V4, 23: $V5, 25: $V6, 26: $V7, - 28: [1, 76], + 28: [1, 92], 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, - 52: 77, - 53: 78, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 67: 93, + 68: 94, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { 1: [2, 2], - 6: 81, + 6: 97, 7: 4, 8: 5, 9: $V0, @@ -3358,304 +3577,612 @@ var parser = function () { 21: 12, 22: $V4, 23: $V5, - 25: $V6, + 25: $V6, + 26: $V7, + 29: $V8, + 30: 16, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, + 62: $Vd, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, { + 11: [1, 98] + }, { + 11: [1, 99] + }, { + 10: $V1, + 17: 100, + 18: $V3, + 20: 11, + 21: 12, + 22: $V4, + 23: $V5, + 25: $V6, + 26: $V7, + 29: $V8, + 30: 16, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, + 62: $Vd, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, o($Vj, [2, 14]), o($Vj, [2, 75], { + 73: [1, 101] + }), o($VR, [2, 77]), o($VR, [2, 78]), o($VR, [2, 79]), o($VR, [2, 80]), o($VR, [2, 81]), o($VR, [2, 82]), o($VR, [2, 83]), o($VR, [2, 84]), o($VR, [2, 85]), o($VR, [2, 86]), o($VR, [2, 87]), o($VR, [2, 88]), o($VR, [2, 89]), o($VR, [2, 90]), { + 10: [1, 102] + }, { + 10: [1, 103] + }, o($VR, [2, 93]), { + 10: $Vk, + 23: $VS, + 26: $Vl, + 55: $Vm, + 56: [1, 104], + 58: $Vn, + 59: 52, + 60: 55, + 61: $Vo, + 72: 108, + 74: $Vp, + 75: $Vq, + 76: $Vr, + 77: $Vs, + 78: $Vt, + 79: $Vu, + 80: $Vv, + 81: $Vw, + 82: 57, + 83: 58, + 84: $Vx, + 85: $Vy, + 86: 105, + 87: 106, + 88: 107, + 94: $Vg, + 95: $Vh + }, { + 9: $VT, + 10: $VU, + 12: $VV, + 22: $VW, + 25: $VX, + 28: [1, 110], + 29: $VY, + 31: $VZ, + 32: $V_, + 45: $V$, + 46: $V01, + 50: $V11, + 53: 114, + 58: $V21, + 60: 116, + 61: $V31, + 73: $V41, + 74: $V51, + 75: $V61, + 76: $V71, + 77: $V81, + 78: $V91, + 79: $Va1, + 80: $Vb1, + 81: $Vc1, + 85: $Vd1, + 91: 111, + 92: 112, + 93: 113, + 94: $Vg + }, { + 10: $V1, + 20: 139, + 21: 12, + 22: $V4, + 23: $V5, + 25: $V6, + 26: $V7, + 29: $V8, + 30: 16, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, + 62: $Vd, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, { + 10: $Vk, + 19: 141, + 26: $Vl, + 27: 140, + 55: $Vm, + 58: $Vn, + 59: 52, + 60: 55, + 61: $Vo, + 72: 44, + 74: $Vp, + 75: $Vq, + 76: $Vr, + 77: $Vs, + 78: $Vt, + 79: $Vu, + 80: $Vv, + 81: $Vw, + 82: 57, + 83: 58, + 84: $Vx, + 85: $Vy, + 94: $Vg, + 95: $Vh + }, { + 8: 143, + 10: $V1, + 13: 142, + 15: 8, + 17: 9, + 18: $V3, + 20: 11, + 21: 12, + 22: $V4, + 23: $V5, + 25: $V6, + 26: $V7, + 29: $V8, + 30: 16, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, + 62: $Vd, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, { + 10: $V1, + 23: $V5, + 26: $V7, + 30: 144, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, + 62: $Vd, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, { + 10: $V1, + 23: $V5, + 26: $V7, + 30: 145, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, + 62: $Vd, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, { + 10: $V1, + 23: $V5, + 26: $V7, + 33: 146, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, + 62: $Vd, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, { + 10: $V1, + 23: $V5, + 26: $V7, + 33: 147, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, + 62: $Vd, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, { + 10: $V1, + 23: $V5, 26: $V7, - 29: $V8, - 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 33: 148, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg - }, { - 11: [1, 82] - }, { - 11: [1, 83] + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { 10: $V1, - 17: 84, - 18: $V3, - 20: 11, - 21: 12, - 22: $V4, 23: $V5, - 25: $V6, 26: $V7, - 29: $V8, - 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 33: 149, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg - }, o($Vi, [2, 14]), o($Vi, [2, 61], { - 58: [1, 85] - }), o($VC, [2, 63]), o($VC, [2, 64]), o($VC, [2, 65]), o($VC, [2, 66]), o($VC, [2, 67]), o($VC, [2, 68]), o($VC, [2, 69]), o($VC, [2, 70]), o($VC, [2, 71]), o($VC, [2, 72]), o($VC, [2, 73]), o($VC, [2, 74]), o($VC, [2, 75]), o($VC, [2, 76]), { - 10: [1, 86] - }, { - 10: [1, 87] - }, o($VC, [2, 79]), { - 10: $Vj, - 23: $VD, - 26: $Vk, - 40: $Vl, - 41: [1, 88], - 43: $Vm, - 44: 48, - 45: 51, - 46: $Vn, - 57: 92, - 59: $Vo, - 60: $Vp, - 61: $Vq, - 62: $Vr, - 63: $Vs, - 64: $Vt, - 65: $Vu, - 66: $Vv, - 67: 53, - 68: 54, - 69: $Vw, - 70: $Vx, - 71: 89, - 72: 90, - 73: 91, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { - 10: $VE, - 28: [1, 94], - 76: 95, - 77: 96, - 78: 97 + 10: $V1, + 23: $V5, + 26: $V7, + 33: 150, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, + 62: $Vd, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { 10: $V1, 23: $V5, 26: $V7, - 30: 99, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 33: 151, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { 10: $V1, 23: $V5, 26: $V7, - 30: 100, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 40: 152, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { 10: $V1, 23: $V5, 26: $V7, - 30: 101, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 40: 153, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { 10: $V1, 23: $V5, 26: $V7, - 30: 102, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 40: 154, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { 10: $V1, - 20: 103, - 21: 12, - 22: $V4, 23: $V5, - 25: $V6, 26: $V7, - 29: $V8, - 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 40: 155, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { - 10: $Vj, - 19: 105, - 26: $Vk, - 27: 104, - 40: $Vl, - 43: $Vm, - 44: 48, - 45: 51, - 46: $Vn, - 57: 40, - 59: $Vo, - 60: $Vp, - 61: $Vq, - 62: $Vr, - 63: $Vs, - 64: $Vt, - 65: $Vu, - 66: $Vv, - 67: 53, - 68: 54, - 69: $Vw, - 70: $Vx, - 79: $Vf, - 80: $Vg + 10: $V1, + 23: $V5, + 26: $V7, + 40: 156, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, + 62: $Vd, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { - 8: 107, 10: $V1, - 13: 106, - 15: 8, - 17: 9, - 18: $V3, - 20: 11, - 21: 12, - 22: $V4, 23: $V5, - 25: $V6, 26: $V7, - 29: $V8, - 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 40: 157, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { 10: $V1, - 20: 111, + 20: 161, 21: 12, 22: $V4, 23: $V5, - 24: [1, 108], + 24: [1, 158], 25: $V6, 26: $V7, 29: $V8, 30: 16, - 35: 109, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, - 55: 110, - 56: $VF, + 33: 17, + 40: 18, + 47: 159, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 70: 160, + 71: $Ve1, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { - 10: [1, 113], - 39: 114, - 80: $VG + 9: $VT, + 10: $VU, + 12: $VV, + 22: $VW, + 25: $VX, + 29: $VY, + 31: $VZ, + 32: $V_, + 45: $V$, + 46: $V01, + 50: $V11, + 53: 163, + 54: 164, + 58: $V21, + 60: 116, + 61: $V31, + 73: $V41, + 74: $V51, + 75: $V61, + 76: $V71, + 77: $V81, + 78: $V91, + 79: $Va1, + 80: $Vb1, + 81: $Vc1, + 85: $Vd1, + 94: $Vg, + 95: $Vf1 }, { - 39: 116, - 80: $VG - }, { - 24: [1, 117] - }, o($VA, [2, 42]), { - 14: [1, 119], - 41: [1, 118] - }, o($VH, [2, 45]), o($VH, [2, 46]), o($VH, [2, 47]), o($VA, [2, 48]), { - 14: [1, 121], - 28: [1, 120] - }, o($VI, [2, 51]), o($VI, [2, 53], { - 54: [1, 122] - }), o($VI, [2, 54]), o($Vh, [2, 3]), { - 8: 123, + 54: 166, + 95: $Vf1 + }, o($VN, [2, 41]), o($VO, $VP), { + 24: [1, 167] + }, o($VO, [2, 56]), { + 14: [1, 169], + 56: [1, 168] + }, o($Vg1, [2, 59]), o($Vg1, [2, 60]), o($Vg1, [2, 61]), o($VO, [2, 62]), { + 14: [1, 171], + 28: [1, 170] + }, o($Vh1, [2, 65]), o($Vh1, [2, 67], { + 69: [1, 172] + }), o($Vh1, [2, 68]), o($Vi, [2, 3]), { + 8: 173, 10: $V1, 15: 8, 17: 9, @@ -3668,23 +4195,27 @@ var parser = function () { 26: $V7, 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { - 8: 124, + 8: 174, 10: $V1, 15: 8, 17: 9, @@ -3697,78 +4228,138 @@ var parser = function () { 26: $V7, 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg - }, o($Vi, [2, 12]), { - 10: [1, 125] - }, o($VC, [2, 77]), o($VC, [2, 78]), o($VC, [2, 80]), { - 14: $VJ, - 41: [1, 126] - }, o($VK, [2, 83]), o($VK, [2, 84], { - 58: [1, 128] - }), o($VL, [2, 86], { - 5: [1, 129] + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, o($Vj, [2, 12]), { + 10: [1, 175] + }, o($VR, [2, 91]), o($VR, [2, 92]), o($VR, [2, 94]), { + 14: $Vi1, + 56: [1, 176] + }, o($Vj1, [2, 97]), o($Vj1, [2, 98], { + 73: [1, 178] + }), o($Vk1, [2, 100], { + 5: [1, 179] }), { - 10: $Vj, - 23: $VD, - 26: $Vk, - 40: $Vl, - 43: $Vm, - 44: 48, - 45: 51, - 46: $Vn, - 57: 92, - 59: $Vo, - 60: $Vp, - 61: $Vq, - 62: $Vr, - 63: $Vs, - 64: $Vt, - 65: $Vu, - 66: $Vv, - 67: 53, - 68: 54, - 69: $Vw, - 70: $Vx, - 71: 130, - 72: 90, - 73: 91, - 79: $Vf, - 80: $Vg - }, o($VC, [2, 94]), { - 14: [1, 132], - 28: [1, 131] - }, o($VI, [2, 97]), o($VI, [2, 98], { - 58: [1, 133] - }), o($VM, [2, 101], { - 54: [1, 134] - }), o($Vz, [2, 21]), o($Vz, [2, 22]), o($Vz, [2, 23]), o($Vz, [2, 24]), { - 14: [1, 135] + 10: $Vk, + 23: $VS, + 26: $Vl, + 55: $Vm, + 58: $Vn, + 59: 52, + 60: 55, + 61: $Vo, + 72: 108, + 74: $Vp, + 75: $Vq, + 76: $Vr, + 77: $Vs, + 78: $Vt, + 79: $Vu, + 80: $Vv, + 81: $Vw, + 82: 57, + 83: 58, + 84: $Vx, + 85: $Vy, + 86: 180, + 87: 106, + 88: 107, + 94: $Vg, + 95: $Vh + }, o($VR, [2, 108]), { + 14: [1, 182], + 28: [1, 181] + }, o($Vh1, [2, 111]), o($Vh1, [2, 112], { + 73: [1, 183] + }), o($Vl1, [2, 115], { + 69: [1, 184] + }), o($VQ, [2, 121]), o($VQ, [2, 122]), o($VQ, [2, 123]), o($VQ, [2, 124]), o($VQ, [2, 125]), o($VQ, [2, 126]), o($VQ, [2, 127]), o($VQ, [2, 128]), o($VQ, [2, 129]), o($VQ, [2, 130]), o($VQ, [2, 131]), o($VQ, [2, 132]), o($VQ, [2, 133]), o($VQ, [2, 134]), o($VQ, [2, 135]), o($VQ, [2, 136]), o($VQ, [2, 137]), o($VQ, [2, 138]), o($VQ, [2, 139]), o($VQ, [2, 140]), o($VQ, [2, 141]), o($VQ, [2, 142]), o($VQ, [2, 143]), o($VQ, [2, 144]), { + 14: [1, 185] }, { - 14: [1, 137], - 28: [1, 136] - }, o($VI, [2, 60]), { - 14: [1, 139], - 28: [1, 138] - }, o($VI, [2, 10]), o($Vz, [2, 25]), { - 14: [1, 141], - 24: [1, 140] - }, o($VN, [2, 56]), o($VN, [2, 57]), { + 14: [1, 187], + 28: [1, 186] + }, o($Vh1, [2, 74]), { + 14: [1, 189], + 28: [1, 188] + }, o($Vh1, [2, 10]), o($Vz, [2, 21], { + 34: $VA, + 35: $VB, + 36: $VC, + 37: $VD, + 38: $VE, + 39: $VF + }), o($Vz, [2, 22], { + 34: $VA, + 35: $VB, + 36: $VC, + 37: $VD, + 38: $VE, + 39: $VF + }), o($VG, [2, 24], { + 41: $VH, + 42: $VI, + 43: $VJ, + 44: $VK, + 45: $VL, + 46: $VM + }), o($VG, [2, 25], { + 41: $VH, + 42: $VI, + 43: $VJ, + 44: $VK, + 45: $VL, + 46: $VM + }), o($VG, [2, 26], { + 41: $VH, + 42: $VI, + 43: $VJ, + 44: $VK, + 45: $VL, + 46: $VM + }), o($VG, [2, 27], { + 41: $VH, + 42: $VI, + 43: $VJ, + 44: $VK, + 45: $VL, + 46: $VM + }), o($VG, [2, 28], { + 41: $VH, + 42: $VI, + 43: $VJ, + 44: $VK, + 45: $VL, + 46: $VM + }), o($VG, [2, 29], { + 41: $VH, + 42: $VI, + 43: $VJ, + 44: $VK, + 45: $VL, + 46: $VM + }), o($VN, [2, 31]), o($VN, [2, 32]), o($VN, [2, 33]), o($VN, [2, 34]), o($VN, [2, 35]), o($VN, [2, 36]), o($VN, [2, 37]), { + 14: [1, 191], + 24: [1, 190] + }, o($Vm1, [2, 70]), o($Vm1, [2, 71]), { 10: $V1, - 20: 142, + 20: 192, 21: 12, 22: $V4, 23: $V5, @@ -3776,29 +4367,33 @@ var parser = function () { 26: $V7, 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg - }, o($VA, [2, 29]), o($VA, [2, 30]), o([1, 5, 14, 16, 24, 28, 31, 32, 33, 34, 38, 40, 41, 54, 58, 75], [2, 105]), { - 41: [1, 143] - }, o($VA, [2, 41]), o($VA, [2, 43]), { - 7: 75, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, o($VO, [2, 43]), o($VO, [2, 44]), o([1, 5, 14, 16, 24, 28, 31, 32, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 52, 55, 56, 69, 73, 90], [2, 119]), { + 56: [1, 193] + }, o($VO, [2, 55]), o($VO, [2, 57]), { + 7: 91, 9: $V0, 10: $V1, 12: $V2, - 20: 74, + 20: 90, 21: 12, 22: $V4, 23: $V5, @@ -3806,28 +4401,32 @@ var parser = function () { 26: $V7, 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, - 51: 144, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg - }, o($VA, [2, 49]), { - 7: 80, + 63: 30, + 64: 31, + 66: 194, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, o($VO, [2, 63]), { + 7: 96, 9: $V0, 10: $V1, 12: $V2, - 20: 79, + 20: 95, 21: 12, 22: $V4, 23: $V5, @@ -3835,24 +4434,28 @@ var parser = function () { 26: $V7, 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, - 53: 145, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 68: 195, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { - 8: 146, + 8: 196, 10: $V1, 15: 8, 17: 9, @@ -3865,88 +4468,117 @@ var parser = function () { 26: $V7, 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg - }, o($VO, [2, 7]), o($VO, [2, 8]), o($Vi, [2, 62]), o($VC, [2, 81]), { - 10: $Vj, - 23: $VD, - 26: $Vk, - 40: $Vl, - 43: $Vm, - 44: 48, - 45: 51, - 46: $Vn, - 57: 92, - 59: $Vo, - 60: $Vp, - 61: $Vq, - 62: $Vr, - 63: $Vs, - 64: $Vt, - 65: $Vu, - 66: $Vv, - 67: 53, - 68: 54, - 69: $Vw, - 70: $Vx, - 72: 147, - 73: 91, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, o($Vn1, [2, 7]), o($Vn1, [2, 8]), o($Vj, [2, 76]), o($VR, [2, 95]), { + 10: $Vk, + 23: $VS, + 26: $Vl, + 55: $Vm, + 58: $Vn, + 59: 52, + 60: 55, + 61: $Vo, + 72: 108, + 74: $Vp, + 75: $Vq, + 76: $Vr, + 77: $Vs, + 78: $Vt, + 79: $Vu, + 80: $Vv, + 81: $Vw, + 82: 57, + 83: 58, + 84: $Vx, + 85: $Vy, + 87: 197, + 88: 107, + 94: $Vg, + 95: $Vh }, { - 10: [1, 148] + 10: [1, 198] }, { - 39: 150, - 74: 149, - 75: $VP, - 80: $VG + 54: 200, + 89: 199, + 90: $Vo1, + 95: $Vf1 }, { - 14: $VJ, - 24: [1, 152] - }, o($VC, [2, 95]), { - 10: $VE, - 77: 153, - 78: 97 + 14: $Vi1, + 24: [1, 202] + }, o($VR, [2, 109]), { + 9: $VT, + 10: $VU, + 12: $VV, + 22: $VW, + 25: $VX, + 29: $VY, + 31: $VZ, + 32: $V_, + 45: $V$, + 46: $V01, + 50: $V11, + 53: 114, + 58: $V21, + 60: 116, + 61: $V31, + 73: $V41, + 74: $V51, + 75: $V61, + 76: $V71, + 77: $V81, + 78: $V91, + 79: $Va1, + 80: $Vb1, + 81: $Vc1, + 85: $Vd1, + 92: 203, + 93: 113, + 94: $Vg }, { - 10: [1, 154] + 10: [1, 204] }, { - 10: $Vj, - 26: $Vk, - 40: $Vl, - 43: $Vm, - 44: 48, - 45: 51, - 46: $Vn, - 57: 155, - 59: $Vo, - 60: $Vp, - 61: $Vq, - 62: $Vr, - 63: $Vs, - 64: $Vt, - 65: $Vu, - 66: $Vv, - 67: 53, - 68: 54, - 69: $Vw, - 70: $Vx, - 79: $Vf, - 80: $Vg + 10: $Vk, + 26: $Vl, + 55: $Vm, + 58: $Vn, + 59: 52, + 60: 55, + 61: $Vo, + 72: 205, + 74: $Vp, + 75: $Vq, + 76: $Vr, + 77: $Vs, + 78: $Vt, + 79: $Vu, + 80: $Vv, + 81: $Vw, + 82: 57, + 83: 58, + 84: $Vx, + 85: $Vy, + 94: $Vg, + 95: $Vh }, { - 8: 156, + 8: 206, 10: $V1, 15: 8, 17: 9, @@ -3959,47 +4591,51 @@ var parser = function () { 26: $V7, 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg - }, o($Vy, [2, 18]), { - 10: $Vj, - 19: 157, - 26: $Vk, - 40: $Vl, - 43: $Vm, - 44: 48, - 45: 51, - 46: $Vn, - 57: 40, - 59: $Vo, - 60: $Vp, - 61: $Vq, - 62: $Vr, - 63: $Vs, - 64: $Vt, - 65: $Vu, - 66: $Vv, - 67: 53, - 68: 54, - 69: $Vw, - 70: $Vx, - 79: $Vf, - 80: $Vg - }, o($Vy, [2, 19]), { - 8: 158, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, o($Vz, [2, 18]), { + 10: $Vk, + 19: 207, + 26: $Vl, + 55: $Vm, + 58: $Vn, + 59: 52, + 60: 55, + 61: $Vo, + 72: 44, + 74: $Vp, + 75: $Vq, + 76: $Vr, + 77: $Vs, + 78: $Vt, + 79: $Vu, + 80: $Vv, + 81: $Vw, + 82: 57, + 83: 58, + 84: $Vx, + 85: $Vy, + 94: $Vg, + 95: $Vh + }, o($Vz, [2, 19]), { + 8: 208, 10: $V1, 15: 8, 17: 9, @@ -4012,24 +4648,28 @@ var parser = function () { 26: $V7, 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg - }, o($Vz, [2, 26]), { + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, o($VN, [2, 38]), { 10: $V1, - 20: 111, + 20: 161, 21: 12, 22: $V4, 23: $V5, @@ -4037,41 +4677,45 @@ var parser = function () { 26: $V7, 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, - 55: 159, - 56: $VF, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg - }, o($VN, [2, 58]), o($VA, [2, 31]), o($VH, [2, 44]), o($VI, [2, 50]), o($VI, [2, 52]), o($VK, [2, 82]), o($VK, [2, 85]), o($VL, [2, 87]), o($VL, [2, 93], { - 75: [1, 160] + 63: 30, + 64: 31, + 70: 209, + 71: $Ve1, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, o($Vm1, [2, 72]), o($VO, [2, 45]), o($Vg1, [2, 58]), o($Vh1, [2, 64]), o($Vh1, [2, 66]), o($Vj1, [2, 96]), o($Vj1, [2, 99]), o($Vk1, [2, 101]), o($Vk1, [2, 107], { + 90: [1, 210] }), { - 39: 161, - 80: $VG - }, o($VL, [2, 88], { - 5: [1, 162] - }), o($VI, [2, 96]), o($VI, [2, 99]), o($VM, [2, 100]), { - 24: [1, 163] - }, o($VI, [2, 59]), o($VI, [2, 9]), o($VN, [2, 55]), o($VL, [2, 92], { - 39: 164, - 80: $VG - }), o($VL, [2, 91]), { - 39: 150, - 74: 165, - 75: $VP, - 80: $VG - }, o($Vy, [2, 17]), o($VL, [2, 90]), o($VL, [2, 89])], + 54: 211, + 95: $Vf1 + }, o($Vk1, [2, 102], { + 5: [1, 212] + }), o($Vh1, [2, 110]), o($Vh1, [2, 113]), o($Vl1, [2, 114]), { + 24: [1, 213] + }, o($Vh1, [2, 73]), o($Vh1, [2, 9]), o($Vm1, [2, 69]), o($Vk1, [2, 106], { + 54: 214, + 95: $Vf1 + }), o($Vk1, [2, 105]), { + 54: 200, + 89: 215, + 90: $Vo1, + 95: $Vf1 + }, o($Vz, [2, 17]), o($Vk1, [2, 104]), o($Vk1, [2, 103])], defaultActions: {}, parseError: function parseError(str, hash) { if (hash.recoverable) { @@ -4585,139 +5229,169 @@ var parser = function () { break; case 2: - return 59; + return 31; case 3: - return 60; + return 74; case 4: - return 58; + return 75; case 5: - return 61; + return 73; case 6: - return 12; + return 76; case 7: - return 70; + return 12; case 8: - return 63; + return 85; case 9: - return 9; + return 78; case 10: - return 22; + return 9; case 11: - return 25; + return 22; case 12: - return 43; + return 45; case 13: - return 64; + return 50; case 14: - return 65; + return 32; case 15: - return 29; + return 58; case 16: - return 66; + return 79; case 17: - return 62; + return 80; case 18: - return 46; + return 25; case 19: - return 80; + return 46; case 20: - return 79; + return 29; case 21: - return 23; + return 81; case 22: - return 24; + return 77; case 23: - return 26; + return 61; case 24: - return 28; + return 95; case 25: - return 40; + return 94; case 26: - return 41; + return 23; case 27: - return 16; + return 24; case 28: - return '|'; + return 26; case 29: - return 14; + return 28; case 30: - return 54; + return 55; case 31: - return 5; + return 56; case 32: - return 18; + return 16; case 33: - return 11; + return '|'; case 34: - return '<='; + return 14; case 35: - return 56; + return 69; case 36: - return 75; + return 5; case 37: - return 38; + return 35; case 38: - return '_'; + return 38; case 39: - return 31; + return 18; case 40: - return 32; + return 36; case 41: - return 33; + return 37; case 42: return 34; case 43: - return 47; + return 39; case 44: + return 11; + + case 45: + return 71; + + case 46: + return 90; + + case 47: + return 52; + + case 48: + return '_'; + + case 49: + return 41; + + case 50: + return 42; + + case 51: + return 43; + + case 52: + return 44; + + case 53: + return 62; + + case 54: return 10; } }, - rules: [/^(?:\s+)/, /^(?:\/\/.*)/, /^(?:any\b)/, /^(?:array\b)/, /^(?:as\b)/, /^(?:boolean\b)/, /^(?:def\b)/, /^(?:enum\b)/, /^(?:false\b)/, /^(?:let\b)/, /^(?:map\b)/, /^(?:patterns\b)/, /^(?:null\b)/, /^(?:number\b)/, /^(?:object\b)/, /^(?:sequences\b)/, /^(?:string\b)/, /^(?:true\b)/, /^(?:undefined\b)/, /^(?:[-+]?(0|[1-9]\d*)(\.\d+)?)/, /^(?:"[^"\r\n]*")/, /^(?:\()/, /^(?:\))/, /^(?:{)/, /^(?:})/, /^(?:\[)/, /^(?:\])/, /^(?:\|>)/, /^(?:\|)/, /^(?:,)/, /^(?::)/, /^(?:;)/, /^(?:=~)/, /^(?:=)/, /^(?:<=)/, /^(?:\.{3})/, /^(?:\.{2})/, /^(?:\.)/, /^(?:_)/, /^(?:\+)/, /^(?:-)/, /^(?:\*)/, /^(?:\/)/, /^(?:\$)/, /^(?:[a-zA-Z_][a-zA-Z0-9_]*)/], + rules: [/^(?:\s+)/, /^(?:\/\/.*)/, /^(?:and\b)/, /^(?:any\b)/, /^(?:array\b)/, /^(?:as\b)/, /^(?:boolean\b)/, /^(?:def\b)/, /^(?:enum\b)/, /^(?:false\b)/, /^(?:let\b)/, /^(?:map\b)/, /^(?:mod\b)/, /^(?:not\b)/, /^(?:or\b)/, /^(?:null\b)/, /^(?:number\b)/, /^(?:object\b)/, /^(?:patterns\b)/, /^(?:pow\b)/, /^(?:sequences\b)/, /^(?:string\b)/, /^(?:true\b)/, /^(?:undefined\b)/, /^(?:[-+]?(0|[1-9]\d*)(\.\d+)?)/, /^(?:"[^"\r\n]*")/, /^(?:\()/, /^(?:\))/, /^(?:{)/, /^(?:})/, /^(?:\[)/, /^(?:\])/, /^(?:\|>)/, /^(?:\|)/, /^(?:,)/, /^(?::)/, /^(?:;)/, /^(?:<=)/, /^(?:>=)/, /^(?:=~)/, /^(?:==)/, /^(?:!=)/, /^(?:<)/, /^(?:>)/, /^(?:=)/, /^(?:\.{3})/, /^(?:\.{2})/, /^(?:\.)/, /^(?:_)/, /^(?:\+)/, /^(?:-)/, /^(?:\*)/, /^(?:\/)/, /^(?:\$)/, /^(?:[a-zA-Z_][a-zA-Z0-9_]*)/], conditions: { "INITIAL": { - "rules": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44], + "rules": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "inclusive": true } } @@ -5159,6 +5833,11 @@ function () { case "sequence": { result = this.executeExpression(statement, structure, this.symbolTable); + + if (result === FAILURE_VALUE) { + return FAILURE_VALUE; + } + break; } @@ -5197,13 +5876,17 @@ function () { value: function executeExpression(expression, structure, symbolTable) { var _this = this; - var getNumbers = function getNumbers(operation) { + var binOp = function binOp(typeName, operation) { var left = _this.executeExpression(expression.left, structure, symbolTable); + /* eslint-disable-next-line valid-typeof */ + - if (left !== FAILURE_VALUE && typeof left === "number") { + if (left !== FAILURE_VALUE && _typeof(left) === typeName) { var right = _this.executeExpression(expression.right, structure, symbolTable); + /* eslint-disable-next-line valid-typeof */ - if (right !== FAILURE_VALUE && typeof right === "number") { + + if (right !== FAILURE_VALUE && _typeof(right) === typeName) { return operation(left, right); } } @@ -5220,6 +5903,13 @@ function () { this.addError("Unable to evaluate assignment value for ".concat(expression.name)); return FAILURE_VALUE; } + /* eslint-disable-next-line no-prototype-builtins */ + + + if (symbolTable.hasOwnProperty(expression.name)) { + this.addError("A symbol in current scope was assigned more than once: ".concat(expression.name)); + return FAILURE_VALUE; + } symbolTable[expression.name] = value; return value; @@ -5350,11 +6040,6 @@ function () { return currentObject; } - case "add": - return getNumbers(function (a, b) { - return a + b; - }); - case "map": { var _expression$value = _slicedToArray(expression.value, 2), @@ -5414,32 +6099,98 @@ function () { return _result; } + case "and": + return binOp("boolean", function (a, b) { + return a && b; + }); + + case "or": + return binOp("boolean", function (a, b) { + return a || b; + }); + + case "not": + { + var _value2 = this.executeExpression(expression.value, structure, symbolTable); + + if (_value2 !== FAILURE_VALUE && typeof _value2 === "boolean") { + return !_value2; + } + + return FAILURE_VALUE; + } + + case "less_than": + return binOp("number", function (a, b) { + return a < b; + }); + + case "less_equal": + return binOp("number", function (a, b) { + return a <= b; + }); + + case "equal": + return binOp("number", function (a, b) { + return a === b; + }); + + case "not_equal": + return binOp("number", function (a, b) { + return a !== b; + }); + + case "greater_equal": + return binOp("number", function (a, b) { + return a >= b; + }); + + case "greater_than": + return binOp("number", function (a, b) { + return a > b; + }); + + case "add": + return binOp("number", function (a, b) { + return a + b; + }); + case "subtract": - return getNumbers(function (a, b) { + return binOp("number", function (a, b) { return a - b; }); case "multiply": - return getNumbers(function (a, b) { + return binOp("number", function (a, b) { return a * b; }); case "divide": - return getNumbers(function (a, b) { + return binOp("number", function (a, b) { return a / b; }); + case "modulus": + return binOp("number", function (a, b) { + return a % b; + }); + + case "power": + return binOp("number", function (a, b) { + return Math.pow(a, b); + }); + case "invoke": { var args = expression.args.reduce(function (accum, arg) { if (arg.type === "spread") { - var _value2 = _this.executeExpression(arg.expression, structure, symbolTable); // const value = arg.name !== null ? symbolTable[arg.name] : structure; + var _value3 = _this.executeExpression(arg.expression, structure, symbolTable); // const value = arg.name !== null ? symbolTable[arg.name] : structure; - if (Array.isArray(_value2)) { - accum = accum.concat(_value2); + if (Array.isArray(_value3)) { + accum = accum.concat(_value3); } else { - accum.push(_value2); + accum.push(_value3); } } else { accum.push(_this.executeExpression(arg, structure, symbolTable)); @@ -5470,13 +6221,13 @@ function () { if (element.type === "assignment") { this.executeExpression(element, structure, symbolTable); } else { - var _value3 = this.executeExpression(element, structure, symbolTable); + var _value4 = this.executeExpression(element, structure, symbolTable); - if (_value3 === FAILURE_VALUE) { + if (_value4 === FAILURE_VALUE) { return FAILURE_VALUE; } - results.push(_value3); + results.push(_value4); } } } catch (err) { @@ -5559,9 +6310,9 @@ function () { case "assignment": { - var _value4 = this.executeExpression(element, structure, objectSymbolTable); + var _value5 = this.executeExpression(element, structure, objectSymbolTable); - if (_value4 === FAILURE_VALUE) { + if (_value5 === FAILURE_VALUE) { return FAILURE_VALUE; } @@ -6422,6 +7173,16 @@ function normalizeAngle(radians) { var normal = radians % TWO_PI; return normal < 0.0 ? normal + TWO_PI : normal; } +/** +* @typedef {GenericArray} EllipticalArc +* @property {number} 0 x +* @property {number} 1 y +* @property {number} 2 rx +* @property {number} 3 ry +* @property {number} 4 theta +* @property {number} 5 thetaWithDelta +*/ + /** * Based on the SVG 1.1 specification, Appendix F: Implementation Requirements, * Section F.6 "Elliptical arc implementation notes" @@ -6434,7 +7195,7 @@ function normalizeAngle(radians) { * @param {number} angle * @param {boolean} arcFlag * @param {boolean} sweepFlag - * @returns {Array} + * @returns {EllipticalArc} */ @@ -6918,7 +7679,7 @@ function () { return PathHandler; }(); -var source = "\ndef Center =\n patterns {\n { center: { x: number as x, y: number as y } },\n { center: [ number as x, number as y ] },\n { cx: number as x, cy: number as y },\n { centerX: number as x, centerY: number as y }\n } |> Point2D(x, y);\n\ndef Radii =\n patterns {\n { radii: { x: number as rx, y: number as ry } },\n { radii: [ number as rx, number as ry ] },\n { rx: number as rx, ry: number as ry },\n { radiusX: number as rx, radiusY: number as ry }\n } |> { \"rx\", \"ry\" };\n\ndef P1 =\n patterns {\n { p1: { x: number as x, y: number as y } },\n { p1: [ number as x, number as y ] },\n { p1x: number as x, p1y: number as y }\n } |> Point2D(x, y);\n \ndef P2 =\n patterns {\n { p1: { x: number as x, y: number as y } },\n { p1: [ number as x, number as y ] },\n { p1x: number as x, p1y: number as y }\n } |> Point2D(x, y);\n \ndef P3 =\n patterns {\n { p1: { x: number as x, y: number as y } },\n { p1: [ number as x, number as y ] },\n { p1x: number as x, p1y: number as y }\n } |> Point2D(x, y);\n \ndef P4 =\n patterns {\n { p1: { x: number as x, y: number as y } },\n { p1: [ number as x, number as y ] },\n { p1x: number as x, p1y: number as y }\n } |> Point2D(x, y);\n\n \ndef Arc = {\n let radii = Radii,\n\n \"center\": Center,\n \"radiusX\": radii.rx,\n \"radiusY\": radii.ry,\n \"startRadians\": =~ number,\n \"endRadians\": =~ number\n};\n\ndef ArcArgs = {\n let elements =\n patterns {\n [ number as centerX, number as centerY, number as radiusX, number as radiusY, number as startRadians, number as endRadians ],\n [ { x: number as centerX, y: number as centerY }, number as radiusX, number as radiusY, number as startRadians, number as endRadians ]\n } |> { \"centerX\", \"centerY\", \"radiusX\", \"radiusY\", \"startRadians\", \"endRadians\" },\n \n \"center\": Point2D(elements.centerX, elements.centerY),\n \"radiusX\": elements.radiusX,\n \"radiusY\": elements.radiusY,\n \"startRadians\": elements.startRadians,\n \"endRadians\": elements.endRadians\n};\n\ndef Bezier2 = {\n \"p1\": P1,\n \"p2\": P2,\n \"p3\": P3\n};\n\ndef Bezier2Args = {\n let elements =\n patterns {\n [ number as p1x, number as p1y, number as p2x, number as p2y, number as p3x, number as p3y ],\n [ { x: number as p1x, y: number as p1y }, { x: number as p2x, y: number as p2y }, { x: number as p3x, y: number as p3y }]\n } |> { \"p1x\", \"p1y\", \"p2x\", \"p2y\", \"p3x\", \"p3y\" },\n \n \"p1\": Point2D(elements.p1x, elements.p1y),\n \"p2\": Point2D(elements.p2x, elements.p2y),\n \"p3\": Point2D(elements.p3x, elements.p3y)\n};\n\ndef Bezier3 = {\n \"p1\": P1,\n \"p2\": P2,\n \"p3\": P3,\n \"p4\": P4\n};\n\ndef Bezier3Args = {\n let elements =\n patterns {\n [ number as p1x, number as p1y, number as p2x, number as p2y, number as p3x, number as p3y, number as p4x, number as p4y ],\n [ { x: number as p1x, y: number as p1y }, { x: number as p2x, y: number as p2y }, { x: number as p3x, y: number as p3y }, { x: number as p4x, y: number as p4y }]\n } |> { \"p1x\", \"p1y\", \"p2x\", \"p2y\", \"p3x\", \"p3y\", \"p4x\", \"p4y\" },\n \n \"p1\": Point2D(elements.p1x, elements.p1y),\n \"p2\": Point2D(elements.p2x, elements.p2y),\n \"p3\": Point2D(elements.p3x, elements.p3y),\n \"p4\": Point2D(elements.p4x, elements.p4y)\n};\n\ndef Circle = {\n \"center\": Center,\n \"radius\":\n patterns {\n { r: number as radius},\n { radius: number as radius }\n } |> radius\n};\n\ndef CircleArgs = {\n let elements =\n patterns {\n [ number as centerX, number as centerY, number as radius ],\n [ { x: number as centerX, y: number as centerY }, number as radius ]\n } |> { \"centerX\", \"centerY\", \"radius\" },\n \n \"center\": Point2D(elements.centerX, elements.centerY),\n \"radius\": elements.radius\n};\n\ndef Ellipse = {\n let radii = Radii,\n\n \"center\": Center,\n \"radiusX\": radii.rx,\n \"radiusY\": radii.ry\n};\n\ndef EllipseArgs = {\n let elements =\n patterns {\n [ number as centerX, number as centerY, number as radiusX, number as radiusY ],\n [ { x: number as centerX, y: number as centerY }, number as radiusX, number as radiusY ]\n } |> { \"centerX\", \"centerY\", \"radiusX\", \"radiusY\" },\n \n \"center\": Point2D(elements.centerX, elements.centerY),\n \"radiusX\": elements.radiusX,\n \"radiusY\": elements.radiusY\n};\n\ndef Line = {\n \"p1\": P1,\n \"p2\": P2\n};\n\ndef LineArgs = {\n let elements =\n patterns {\n [ number as p1x, number as p1y, number as p2x, number as p2y ],\n [ { x: number as p1x, y: number as p1y }, { x: number as p2x, y: number as p2y } ]\n } |> { \"p1x\", \"p1y\", \"p2x\", \"p2y\" },\n \n \"p1\": Point2D(elements.p1x, elements.p1y),\n \"p2\": Point2D(elements.p2x, elements.p2y)\n};\n\ndef Path = {\n \"segments\":\n =~ { d: string as data } |> PathData(data)\n};\n\ndef PathArgs = {\n \"segments\":\n =~ string as data |> PathData(data)\n};\n\ndef Polygon = {\n \"points\":\n sequences {\n =~ { points: [ (number, number); 0.. as coords ] }\n |> [ map(coords, Point2D(...$)) ],\n\n =~ { points: [ { x: number, y: number }; 0.. ] as points }\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef PolygonArgs = {\n \"points\":\n sequences {\n =~ [ (number, number); 0.. as coords ]\n |> [ map(coords, Point2D(...$)) ],\n\n =~ [ { x: number, y: number }; 0.. ] as points\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef Polyline = {\n \"points\":\n sequences {\n =~ { points: [ (number, number); 0.. as coords ] }\n |> [ map(coords, Point2D(...$)) ],\n\n =~ { points: [ { x: number, y: number }; 0.. ] as points }\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef PolylineArgs = {\n \"points\":\n sequences {\n =~ [ (number, number); 0.. as coords ]\n |> [ map(coords, Point2D(...$)) ],\n\n =~ [ { x: number, y: number }; 0.. ] as points\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef Rectangle = {\n let topLeft =\n patterns {\n { topLeft: { x: number as x, y: number as y } },\n { topLeft: [ number as x, number as y ] },\n { x: number as x, y: number as y },\n { top: number as x, left: number as y }\n } |> { \"x\", \"y\" },\n\n \"topLeft\":\n Point2D(topLeft.x, topLeft.y),\n\n \"bottomRight\":\n sequences {\n patterns {\n { bottomRight: { x: number as x, y: number as y } },\n { bottomRight: [ number as x, number as y ] }\n } |> Point2D(x, y),\n patterns {\n { w: number as w, h: number as h },\n { width: number as w, height: number as h },\n { size: { x: number as w, y: number as h } },\n { size: [ number as w, number as h ] }\n } |> Point2D(topLeft.x + w, topLeft.y + h)\n },\n\n \"rx\":\n sequences {\n =~ { rx: number as rx } |> rx,\n =~ any |> 0\n },\n \"ry\":\n sequences {\n =~ { ry: number as ry } |> ry,\n =~ any |> 0\n }\n};\n\ndef RectangleArgs = {\n let elements =\n patterns {\n [ number as x, number as y, number as width, number as height ],\n [ number as x, number as y, number as width, number as height, number as rx, number as ry ],\n [ { x: number as x, y: number as y }, { x: number as width, y: number as height } ],\n [ { x: number as x, y: number as y }, { x: number as width, y: number as height }, { rx: number as rx, ry: number as ry } ],\n [ { x: number as x, y: number as y }, { x: number as width, y: number as height }, { radiusX: number as rx, radiusY: number as ry } ]\n } |> { \"x\", \"y\", \"width\", \"height\", \"rx\", \"ry\" },\n\n \"topLeft\": Point2D(elements.x, elements.y),\n \"bottomRight\": Point2D(elements.x + elements.width, elements.y + elements.height),\n \"rx\": elements.rx,\n \"ry\": elements.ry\n}\n"; +var source = "\ndef Center =\n patterns {\n { center: { x: number as x, y: number as y } },\n { center: [ number as x, number as y ] },\n { cx: number as x, cy: number as y },\n { centerX: number as x, centerY: number as y }\n } |> Point2D(x, y);\n\ndef Radii =\n patterns {\n { radii: { x: number as rx, y: number as ry } },\n { radii: [ number as rx, number as ry ] },\n { rx: number as rx, ry: number as ry },\n { radiusX: number as rx, radiusY: number as ry }\n } |> { \"rx\", \"ry\" };\n\ndef P1 =\n patterns {\n { p1: { x: number as x, y: number as y } },\n { p1: [ number as x, number as y ] },\n { p1x: number as x, p1y: number as y }\n } |> Point2D(x, y);\n \ndef P2 =\n patterns {\n { p2: { x: number as x, y: number as y } },\n { p2: [ number as x, number as y ] },\n { p2x: number as x, p2y: number as y }\n } |> Point2D(x, y);\n \ndef P3 =\n patterns {\n { p3: { x: number as x, y: number as y } },\n { p3: [ number as x, number as y ] },\n { p3x: number as x, p3y: number as y }\n } |> Point2D(x, y);\n \ndef P4 =\n patterns {\n { p4: { x: number as x, y: number as y } },\n { p4: [ number as x, number as y ] },\n { p4x: number as x, p4y: number as y }\n } |> Point2D(x, y);\n\n \ndef Arc = {\n let radii = Radii,\n\n \"center\": Center,\n \"radiusX\": radii.rx,\n \"radiusY\": radii.ry,\n \"startRadians\": =~ number,\n \"endRadians\": =~ number\n};\n\ndef ArcArgs = {\n let elements =\n patterns {\n [ number as centerX, number as centerY, number as radiusX, number as radiusY, number as startRadians, number as endRadians ],\n [ { x: number as centerX, y: number as centerY }, number as radiusX, number as radiusY, number as startRadians, number as endRadians ]\n } |> { \"centerX\", \"centerY\", \"radiusX\", \"radiusY\", \"startRadians\", \"endRadians\" },\n \n \"center\": Point2D(elements.centerX, elements.centerY),\n \"radiusX\": elements.radiusX,\n \"radiusY\": elements.radiusY,\n \"startRadians\": elements.startRadians,\n \"endRadians\": elements.endRadians\n};\n\ndef Bezier2 = {\n \"p1\": P1,\n \"p2\": P2,\n \"p3\": P3\n};\n\ndef Bezier2Args = {\n let elements =\n patterns {\n [ number as p1x, number as p1y, number as p2x, number as p2y, number as p3x, number as p3y ],\n [ { x: number as p1x, y: number as p1y }, { x: number as p2x, y: number as p2y }, { x: number as p3x, y: number as p3y }]\n } |> { \"p1x\", \"p1y\", \"p2x\", \"p2y\", \"p3x\", \"p3y\" },\n \n \"p1\": Point2D(elements.p1x, elements.p1y),\n \"p2\": Point2D(elements.p2x, elements.p2y),\n \"p3\": Point2D(elements.p3x, elements.p3y)\n};\n\ndef Bezier3 = {\n \"p1\": P1,\n \"p2\": P2,\n \"p3\": P3,\n \"p4\": P4\n};\n\ndef Bezier3Args = {\n let elements =\n patterns {\n [ number as p1x, number as p1y, number as p2x, number as p2y, number as p3x, number as p3y, number as p4x, number as p4y ],\n [ { x: number as p1x, y: number as p1y }, { x: number as p2x, y: number as p2y }, { x: number as p3x, y: number as p3y }, { x: number as p4x, y: number as p4y }]\n } |> { \"p1x\", \"p1y\", \"p2x\", \"p2y\", \"p3x\", \"p3y\", \"p4x\", \"p4y\" },\n \n \"p1\": Point2D(elements.p1x, elements.p1y),\n \"p2\": Point2D(elements.p2x, elements.p2y),\n \"p3\": Point2D(elements.p3x, elements.p3y),\n \"p4\": Point2D(elements.p4x, elements.p4y)\n};\n\ndef Circle = {\n \"center\": Center,\n \"radius\":\n patterns {\n { r: number as radius},\n { radius: number as radius }\n } |> radius\n};\n\ndef CircleArgs = {\n let elements =\n patterns {\n [ number as centerX, number as centerY, number as radius ],\n [ { x: number as centerX, y: number as centerY }, number as radius ]\n } |> { \"centerX\", \"centerY\", \"radius\" },\n \n \"center\": Point2D(elements.centerX, elements.centerY),\n \"radius\": elements.radius\n};\n\ndef Ellipse = {\n let radii = Radii,\n\n \"center\": Center,\n \"radiusX\": radii.rx,\n \"radiusY\": radii.ry\n};\n\ndef EllipseArgs = {\n let elements =\n patterns {\n [ number as centerX, number as centerY, number as radiusX, number as radiusY ],\n [ { x: number as centerX, y: number as centerY }, number as radiusX, number as radiusY ]\n } |> { \"centerX\", \"centerY\", \"radiusX\", \"radiusY\" },\n \n \"center\": Point2D(elements.centerX, elements.centerY),\n \"radiusX\": elements.radiusX,\n \"radiusY\": elements.radiusY\n};\n\ndef Line = {\n \"p1\": P1,\n \"p2\": P2\n};\n\ndef LineArgs = {\n let elements =\n patterns {\n [ number as p1x, number as p1y, number as p2x, number as p2y ],\n [ { x: number as p1x, y: number as p1y }, { x: number as p2x, y: number as p2y } ]\n } |> { \"p1x\", \"p1y\", \"p2x\", \"p2y\" },\n \n \"p1\": Point2D(elements.p1x, elements.p1y),\n \"p2\": Point2D(elements.p2x, elements.p2y)\n};\n\ndef Path = {\n \"segments\":\n =~ { d: string as data } |> PathData(data)\n};\n\ndef PathArgs = {\n \"segments\":\n =~ string as data |> PathData(data)\n};\n\ndef Polygon = {\n \"points\":\n sequences {\n =~ { points: [ (number, number); 0.. as coords ] }\n |> [ map(coords, Point2D(...$)) ],\n\n =~ { points: [ { x: number, y: number }; 0.. ] as points }\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef PolygonArgs = {\n \"points\":\n sequences {\n =~ [ (number, number); 0.. as coords ]\n |> [ map(coords, Point2D(...$)) ],\n\n =~ [ { x: number, y: number }; 0.. ] as points\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef Polyline = {\n \"points\":\n sequences {\n =~ { points: [ (number, number); 0.. as coords ] }\n |> [ map(coords, Point2D(...$)) ],\n\n =~ { points: [ { x: number, y: number }; 0.. ] as points }\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef PolylineArgs = {\n \"points\":\n sequences {\n =~ [ (number, number); 0.. as coords ]\n |> [ map(coords, Point2D(...$)) ],\n\n =~ [ { x: number, y: number }; 0.. ] as points\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef Rectangle = {\n let topLeft =\n patterns {\n { topLeft: { x: number as x, y: number as y } },\n { topLeft: [ number as x, number as y ] },\n { x: number as x, y: number as y },\n { top: number as x, left: number as y }\n } |> { \"x\", \"y\" },\n\n \"topLeft\":\n Point2D(topLeft.x, topLeft.y),\n\n \"bottomRight\":\n sequences {\n patterns {\n { bottomRight: { x: number as x, y: number as y } },\n { bottomRight: [ number as x, number as y ] }\n } |> Point2D(x, y),\n patterns {\n { w: number as w, h: number as h },\n { width: number as w, height: number as h },\n { size: { x: number as w, y: number as h } },\n { size: [ number as w, number as h ] }\n } |> Point2D(topLeft.x + w, topLeft.y + h)\n },\n\n \"rx\":\n sequences {\n =~ { rx: number as rx } |> rx,\n =~ any |> 0\n },\n \"ry\":\n sequences {\n =~ { ry: number as ry } |> ry,\n =~ any |> 0\n }\n};\n\ndef RectangleArgs = {\n let elements =\n patterns {\n [ number as x, number as y, number as width, number as height ],\n [ number as x, number as y, number as width, number as height, number as rx, number as ry ],\n [ { x: number as x, y: number as y }, { x: number as width, y: number as height } ],\n [ { x: number as x, y: number as y }, { x: number as width, y: number as height }, { rx: number as rx, ry: number as ry } ],\n [ { x: number as x, y: number as y }, { x: number as width, y: number as height }, { radiusX: number as rx, radiusY: number as ry } ]\n } |> { \"x\", \"y\", \"width\", \"height\", \"rx\", \"ry\" },\n\n \"topLeft\": Point2D(elements.x, elements.y),\n \"bottomRight\": Point2D(elements.x + elements.width, elements.y + elements.height),\n \"rx\": elements.rx,\n \"ry\": elements.ry\n}\n"; var degree90 = Math.PI * 0.5; /** @@ -6931,7 +7692,7 @@ var ShapeInfo = function () { /** * @param {string} name - * @param {Array} args + * @param {GenericArray} args * @returns {module:kld-intersections.ShapeInfo} */ function ShapeInfo(name, args) { @@ -7138,7 +7899,7 @@ var TWO_PI$1 = 2.0 * Math.PI; var UNIT_X = new Vector2D(1, 0); /** * @memberof module:kld-intersections.Intersection - * @param {*} o + * @param {any} o * @returns {boolean} */ @@ -7281,7 +8042,6 @@ function () { * init * * @param {string} status - * @returns {module:kld-intersections.Intersection} */ @@ -7492,10 +8252,31 @@ function () { var xRoot = _step4.value; if (0 <= xRoot && xRoot <= 1) { - for (var k = 0; k < yRoots.length; k++) { - if (Math.abs(xRoot - yRoots[k]) < TOLERANCE) { - result.points.push(c22.multiply(s * s).add(c21.multiply(s).add(c20))); - break checkRoots; + var _iteratorNormalCompletion5 = true; + var _didIteratorError5 = false; + var _iteratorError5 = undefined; + + try { + for (var _iterator5 = yRoots[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { + var yRoot = _step5.value; + + if (Math.abs(xRoot - yRoot) < TOLERANCE) { + result.points.push(c22.multiply(s * s).add(c21.multiply(s).add(c20))); + break checkRoots; + } + } + } catch (err) { + _didIteratorError5 = true; + _iteratorError5 = err; + } finally { + try { + if (!_iteratorNormalCompletion5 && _iterator5["return"] != null) { + _iterator5["return"](); + } + } finally { + if (_didIteratorError5) { + throw _iteratorError5; + } } } } @@ -7593,62 +8374,83 @@ function () { var c23y2 = c23.y * c23.y; var poly = new Polynomial(-2 * c12.x * c12.y * c23.x * c23.y + c12x2 * c23y2 + c12y2 * c23x2, -2 * c12.x * c12.y * c22.x * c23.y - 2 * c12.x * c12.y * c22.y * c23.x + 2 * c12y2 * c22.x * c23.x + 2 * c12x2 * c22.y * c23.y, -2 * c12.x * c21.x * c12.y * c23.y - 2 * c12.x * c12.y * c21.y * c23.x - 2 * c12.x * c12.y * c22.x * c22.y + 2 * c21.x * c12y2 * c23.x + c12y2 * c22x2 + c12x2 * (2 * c21.y * c23.y + c22y2), 2 * c10.x * c12.x * c12.y * c23.y + 2 * c10.y * c12.x * c12.y * c23.x + c11.x * c11.y * c12.x * c23.y + c11.x * c11.y * c12.y * c23.x - 2 * c20.x * c12.x * c12.y * c23.y - 2 * c12.x * c20.y * c12.y * c23.x - 2 * c12.x * c21.x * c12.y * c22.y - 2 * c12.x * c12.y * c21.y * c22.x - 2 * c10.x * c12y2 * c23.x - 2 * c10.y * c12x2 * c23.y + 2 * c20.x * c12y2 * c23.x + 2 * c21.x * c12y2 * c22.x - c11y2 * c12.x * c23.x - c11x2 * c12.y * c23.y + c12x2 * (2 * c20.y * c23.y + 2 * c21.y * c22.y), 2 * c10.x * c12.x * c12.y * c22.y + 2 * c10.y * c12.x * c12.y * c22.x + c11.x * c11.y * c12.x * c22.y + c11.x * c11.y * c12.y * c22.x - 2 * c20.x * c12.x * c12.y * c22.y - 2 * c12.x * c20.y * c12.y * c22.x - 2 * c12.x * c21.x * c12.y * c21.y - 2 * c10.x * c12y2 * c22.x - 2 * c10.y * c12x2 * c22.y + 2 * c20.x * c12y2 * c22.x - c11y2 * c12.x * c22.x - c11x2 * c12.y * c22.y + c21x2 * c12y2 + c12x2 * (2 * c20.y * c22.y + c21y2), 2 * c10.x * c12.x * c12.y * c21.y + 2 * c10.y * c12.x * c21.x * c12.y + c11.x * c11.y * c12.x * c21.y + c11.x * c11.y * c21.x * c12.y - 2 * c20.x * c12.x * c12.y * c21.y - 2 * c12.x * c20.y * c21.x * c12.y - 2 * c10.x * c21.x * c12y2 - 2 * c10.y * c12x2 * c21.y + 2 * c20.x * c21.x * c12y2 - c11y2 * c12.x * c21.x - c11x2 * c12.y * c21.y + 2 * c12x2 * c20.y * c21.y, -2 * c10.x * c10.y * c12.x * c12.y - c10.x * c11.x * c11.y * c12.y - c10.y * c11.x * c11.y * c12.x + 2 * c10.x * c12.x * c20.y * c12.y + 2 * c10.y * c20.x * c12.x * c12.y + c11.x * c20.x * c11.y * c12.y + c11.x * c11.y * c12.x * c20.y - 2 * c20.x * c12.x * c20.y * c12.y - 2 * c10.x * c20.x * c12y2 + c10.x * c11y2 * c12.x + c10.y * c11x2 * c12.y - 2 * c10.y * c12x2 * c20.y - c20.x * c11y2 * c12.x - c11x2 * c20.y * c12.y + c10x2 * c12y2 + c10y2 * c12x2 + c20x2 * c12y2 + c12x2 * c20y2); var roots = poly.getRootsInInterval(0, 1); - var _iteratorNormalCompletion5 = true; - var _didIteratorError5 = false; - var _iteratorError5 = undefined; + var _iteratorNormalCompletion6 = true; + var _didIteratorError6 = false; + var _iteratorError6 = undefined; try { - for (var _iterator5 = roots[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { - var s = _step5.value; + for (var _iterator6 = roots[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) { + var s = _step6.value; var xRoots = new Polynomial(c12.x, c11.x, c10.x - c20.x - s * c21.x - s * s * c22.x - s * s * s * c23.x).getRoots(); var yRoots = new Polynomial(c12.y, c11.y, c10.y - c20.y - s * c21.y - s * s * c22.y - s * s * s * c23.y).getRoots(); if (xRoots.length > 0 && yRoots.length > 0) { var TOLERANCE = 1e-4; - var _iteratorNormalCompletion6 = true; - var _didIteratorError6 = false; - var _iteratorError6 = undefined; + var _iteratorNormalCompletion7 = true; + var _didIteratorError7 = false; + var _iteratorError7 = undefined; try { - checkRoots: for (var _iterator6 = xRoots[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) { - var xRoot = _step6.value; + checkRoots: for (var _iterator7 = xRoots[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) { + var xRoot = _step7.value; if (0 <= xRoot && xRoot <= 1) { - for (var k = 0; k < yRoots.length; k++) { - if (Math.abs(xRoot - yRoots[k]) < TOLERANCE) { - result.points.push(c23.multiply(s * s * s).add(c22.multiply(s * s).add(c21.multiply(s).add(c20)))); - break checkRoots; + var _iteratorNormalCompletion8 = true; + var _didIteratorError8 = false; + var _iteratorError8 = undefined; + + try { + for (var _iterator8 = yRoots[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) { + var yRoot = _step8.value; + + if (Math.abs(xRoot - yRoot) < TOLERANCE) { + result.points.push(c23.multiply(s * s * s).add(c22.multiply(s * s).add(c21.multiply(s).add(c20)))); + break checkRoots; + } + } + } catch (err) { + _didIteratorError8 = true; + _iteratorError8 = err; + } finally { + try { + if (!_iteratorNormalCompletion8 && _iterator8["return"] != null) { + _iterator8["return"](); + } + } finally { + if (_didIteratorError8) { + throw _iteratorError8; + } } } } } } catch (err) { - _didIteratorError6 = true; - _iteratorError6 = err; + _didIteratorError7 = true; + _iteratorError7 = err; } finally { try { - if (!_iteratorNormalCompletion6 && _iterator6["return"] != null) { - _iterator6["return"](); + if (!_iteratorNormalCompletion7 && _iterator7["return"] != null) { + _iterator7["return"](); } } finally { - if (_didIteratorError6) { - throw _iteratorError6; + if (_didIteratorError7) { + throw _iteratorError7; } } } } } } catch (err) { - _didIteratorError5 = true; - _iteratorError5 = err; + _didIteratorError6 = true; + _iteratorError6 = err; } finally { try { - if (!_iteratorNormalCompletion5 && _iterator5["return"] != null) { - _iterator5["return"](); + if (!_iteratorNormalCompletion6 && _iterator6["return"] != null) { + _iterator6["return"](); } } finally { - if (_didIteratorError5) { - throw _iteratorError5; + if (_didIteratorError6) { + throw _iteratorError6; } } } @@ -7703,29 +8505,29 @@ function () { var rxrx = rx * rx; var ryry = ry * ry; var roots = new Polynomial(ryry * c2.x * c2.x + rxrx * c2.y * c2.y, 2 * (ryry * c2.x * c1.x + rxrx * c2.y * c1.y), ryry * (2 * c2.x * c0.x + c1.x * c1.x) + rxrx * (2 * c2.y * c0.y + c1.y * c1.y) - 2 * (ryry * ec.x * c2.x + rxrx * ec.y * c2.y), 2 * (ryry * c1.x * (c0.x - ec.x) + rxrx * c1.y * (c0.y - ec.y)), ryry * (c0.x * c0.x + ec.x * ec.x) + rxrx * (c0.y * c0.y + ec.y * ec.y) - 2 * (ryry * ec.x * c0.x + rxrx * ec.y * c0.y) - rxrx * ryry).getRoots(); - var _iteratorNormalCompletion7 = true; - var _didIteratorError7 = false; - var _iteratorError7 = undefined; + var _iteratorNormalCompletion9 = true; + var _didIteratorError9 = false; + var _iteratorError9 = undefined; try { - for (var _iterator7 = roots[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) { - var t = _step7.value; + for (var _iterator9 = roots[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) { + var t = _step9.value; if (0 <= t && t <= 1) { result.points.push(c2.multiply(t * t).add(c1.multiply(t).add(c0))); } } } catch (err) { - _didIteratorError7 = true; - _iteratorError7 = err; + _didIteratorError9 = true; + _iteratorError9 = err; } finally { try { - if (!_iteratorNormalCompletion7 && _iterator7["return"] != null) { - _iterator7["return"](); + if (!_iteratorNormalCompletion9 && _iterator9["return"] != null) { + _iterator9["return"](); } } finally { - if (_didIteratorError7) { - throw _iteratorError7; + if (_didIteratorError9) { + throw _iteratorError9; } } } @@ -7777,13 +8579,13 @@ function () { // might not be on the line segment. // Find intersections and calculate point coordinates - var _iteratorNormalCompletion8 = true; - var _didIteratorError8 = false; - var _iteratorError8 = undefined; + var _iteratorNormalCompletion10 = true; + var _didIteratorError10 = false; + var _iteratorError10 = undefined; try { - for (var _iterator8 = roots[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) { - var t = _step8.value; + for (var _iterator10 = roots[Symbol.iterator](), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) { + var t = _step10.value; if (0 <= t && t <= 1) { // We're within the Bezier curve @@ -7811,16 +8613,16 @@ function () { } } } catch (err) { - _didIteratorError8 = true; - _iteratorError8 = err; + _didIteratorError10 = true; + _iteratorError10 = err; } finally { try { - if (!_iteratorNormalCompletion8 && _iterator8["return"] != null) { - _iterator8["return"](); + if (!_iteratorNormalCompletion10 && _iterator10["return"] != null) { + _iterator10["return"](); } } finally { - if (_didIteratorError8) { - throw _iteratorError8; + if (_didIteratorError10) { + throw _iteratorError10; } } } @@ -7990,13 +8792,13 @@ function () { var poly = new Polynomial(-c3 * e3 * g3, -c3 * e3 * g2 - c3 * e2 * g3 - c2 * e3 * g3, -c3 * e3 * g1 - c3 * e2 * g2 - c2 * e3 * g2 - c3 * e1 * g3 - c2 * e2 * g3 - c1 * e3 * g3, -c3 * e3 * g0 - c3 * e2 * g1 - c2 * e3 * g1 - c3 * e1 * g2 - c2 * e2 * g2 - c1 * e3 * g2 - c3 * e0 * g3 - c2 * e1 * g3 - c1 * e2 * g3 - c0 * e3 * g3 + b * f3 * g3 + c3 * d * h3 - a * f3 * h3 + a * e3 * i3, -c3 * e2 * g0 - c2 * e3 * g0 - c3 * e1 * g1 - c2 * e2 * g1 - c1 * e3 * g1 - c3 * e0 * g2 - c2 * e1 * g2 - c1 * e2 * g2 - c0 * e3 * g2 + b * f3 * g2 - c2 * e0 * g3 - c1 * e1 * g3 - c0 * e2 * g3 + b * f2 * g3 + c3 * d * h2 - a * f3 * h2 + c2 * d * h3 - a * f2 * h3 + a * e3 * i2 + a * e2 * i3, -c3 * e1 * g0 - c2 * e2 * g0 - c1 * e3 * g0 - c3 * e0 * g1 - c2 * e1 * g1 - c1 * e2 * g1 - c0 * e3 * g1 + b * f3 * g1 - c2 * e0 * g2 - c1 * e1 * g2 - c0 * e2 * g2 + b * f2 * g2 - c1 * e0 * g3 - c0 * e1 * g3 + b * f1 * g3 + c3 * d * h1 - a * f3 * h1 + c2 * d * h2 - a * f2 * h2 + c1 * d * h3 - a * f1 * h3 + a * e3 * i1 + a * e2 * i2 + a * e1 * i3, -c3 * e0 * g0 - c2 * e1 * g0 - c1 * e2 * g0 - c0 * e3 * g0 + b * f3 * g0 - c2 * e0 * g1 - c1 * e1 * g1 - c0 * e2 * g1 + b * f2 * g1 - c1 * e0 * g2 - c0 * e1 * g2 + b * f1 * g2 - c0 * e0 * g3 + b * f0 * g3 + c3 * d * h0 - a * f3 * h0 + c2 * d * h1 - a * f2 * h1 + c1 * d * h2 - a * f1 * h2 + c0 * d * h3 - a * f0 * h3 + a * e3 * i0 + a * e2 * i1 + a * e1 * i2 - b * d * i3 + a * e0 * i3, -c2 * e0 * g0 - c1 * e1 * g0 - c0 * e2 * g0 + b * f2 * g0 - c1 * e0 * g1 - c0 * e1 * g1 + b * f1 * g1 - c0 * e0 * g2 + b * f0 * g2 + c2 * d * h0 - a * f2 * h0 + c1 * d * h1 - a * f1 * h1 + c0 * d * h2 - a * f0 * h2 + a * e2 * i0 + a * e1 * i1 - b * d * i2 + a * e0 * i2, -c1 * e0 * g0 - c0 * e1 * g0 + b * f1 * g0 - c0 * e0 * g1 + b * f0 * g1 + c1 * d * h0 - a * f1 * h0 + c0 * d * h1 - a * f0 * h1 + a * e1 * i0 - b * d * i1 + a * e0 * i1, -c0 * e0 * g0 + b * f0 * g0 + c0 * d * h0 - a * f0 * h0 - b * d * i0 + a * e0 * i0); poly.simplifyEquals(); var roots = poly.getRootsInInterval(0, 1); - var _iteratorNormalCompletion9 = true; - var _didIteratorError9 = false; - var _iteratorError9 = undefined; + var _iteratorNormalCompletion11 = true; + var _didIteratorError11 = false; + var _iteratorError11 = undefined; try { - for (var _iterator9 = roots[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) { - var s = _step9.value; + for (var _iterator11 = roots[Symbol.iterator](), _step11; !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next()).done); _iteratorNormalCompletion11 = true) { + var s = _step11.value; var xp = new Polynomial(c13.x, c12.x, c11.x, c10.x - c20.x - s * c21.x - s * s * c22.x - s * s * s * c23.x); xp.simplifyEquals(); var xRoots = xp.getRoots(); @@ -8006,50 +8808,71 @@ function () { if (xRoots.length > 0 && yRoots.length > 0) { var TOLERANCE = 1e-4; - var _iteratorNormalCompletion10 = true; - var _didIteratorError10 = false; - var _iteratorError10 = undefined; + var _iteratorNormalCompletion12 = true; + var _didIteratorError12 = false; + var _iteratorError12 = undefined; try { - checkRoots: for (var _iterator10 = xRoots[Symbol.iterator](), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) { - var xRoot = _step10.value; + checkRoots: for (var _iterator12 = xRoots[Symbol.iterator](), _step12; !(_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done); _iteratorNormalCompletion12 = true) { + var xRoot = _step12.value; if (0 <= xRoot && xRoot <= 1) { - for (var k = 0; k < yRoots.length; k++) { - if (Math.abs(xRoot - yRoots[k]) < TOLERANCE) { - result.points.push(c23.multiply(s * s * s).add(c22.multiply(s * s).add(c21.multiply(s).add(c20)))); - break checkRoots; + var _iteratorNormalCompletion13 = true; + var _didIteratorError13 = false; + var _iteratorError13 = undefined; + + try { + for (var _iterator13 = yRoots[Symbol.iterator](), _step13; !(_iteratorNormalCompletion13 = (_step13 = _iterator13.next()).done); _iteratorNormalCompletion13 = true) { + var yRoot = _step13.value; + + if (Math.abs(xRoot - yRoot) < TOLERANCE) { + result.points.push(c23.multiply(s * s * s).add(c22.multiply(s * s).add(c21.multiply(s).add(c20)))); + break checkRoots; + } + } + } catch (err) { + _didIteratorError13 = true; + _iteratorError13 = err; + } finally { + try { + if (!_iteratorNormalCompletion13 && _iterator13["return"] != null) { + _iterator13["return"](); + } + } finally { + if (_didIteratorError13) { + throw _iteratorError13; + } } } } } } catch (err) { - _didIteratorError10 = true; - _iteratorError10 = err; + _didIteratorError12 = true; + _iteratorError12 = err; } finally { try { - if (!_iteratorNormalCompletion10 && _iterator10["return"] != null) { - _iterator10["return"](); + if (!_iteratorNormalCompletion12 && _iterator12["return"] != null) { + _iterator12["return"](); } } finally { - if (_didIteratorError10) { - throw _iteratorError10; + if (_didIteratorError12) { + throw _iteratorError12; } } } } } } catch (err) { - _didIteratorError9 = true; - _iteratorError9 = err; + _didIteratorError11 = true; + _iteratorError11 = err; } finally { try { - if (!_iteratorNormalCompletion9 && _iterator9["return"] != null) { - _iterator9["return"](); + if (!_iteratorNormalCompletion11 && _iterator11["return"] != null) { + _iterator11["return"](); } } finally { - if (_didIteratorError9) { - throw _iteratorError9; + if (_didIteratorError11) { + throw _iteratorError11; } } } @@ -8117,26 +8940,26 @@ function () { var ryry = ry * ry; var poly = new Polynomial(c3.x * c3.x * ryry + c3.y * c3.y * rxrx, 2 * (c3.x * c2.x * ryry + c3.y * c2.y * rxrx), 2 * (c3.x * c1.x * ryry + c3.y * c1.y * rxrx) + c2.x * c2.x * ryry + c2.y * c2.y * rxrx, 2 * c3.x * ryry * (c0.x - ec.x) + 2 * c3.y * rxrx * (c0.y - ec.y) + 2 * (c2.x * c1.x * ryry + c2.y * c1.y * rxrx), 2 * c2.x * ryry * (c0.x - ec.x) + 2 * c2.y * rxrx * (c0.y - ec.y) + c1.x * c1.x * ryry + c1.y * c1.y * rxrx, 2 * c1.x * ryry * (c0.x - ec.x) + 2 * c1.y * rxrx * (c0.y - ec.y), c0.x * c0.x * ryry - 2 * c0.y * ec.y * rxrx - 2 * c0.x * ec.x * ryry + c0.y * c0.y * rxrx + ec.x * ec.x * ryry + ec.y * ec.y * rxrx - rxrx * ryry); var roots = poly.getRootsInInterval(0, 1); - var _iteratorNormalCompletion11 = true; - var _didIteratorError11 = false; - var _iteratorError11 = undefined; + var _iteratorNormalCompletion14 = true; + var _didIteratorError14 = false; + var _iteratorError14 = undefined; try { - for (var _iterator11 = roots[Symbol.iterator](), _step11; !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next()).done); _iteratorNormalCompletion11 = true) { - var t = _step11.value; + for (var _iterator14 = roots[Symbol.iterator](), _step14; !(_iteratorNormalCompletion14 = (_step14 = _iterator14.next()).done); _iteratorNormalCompletion14 = true) { + var t = _step14.value; result.points.push(c3.multiply(t * t * t).add(c2.multiply(t * t).add(c1.multiply(t).add(c0)))); } } catch (err) { - _didIteratorError11 = true; - _iteratorError11 = err; + _didIteratorError14 = true; + _iteratorError14 = err; } finally { try { - if (!_iteratorNormalCompletion11 && _iterator11["return"] != null) { - _iterator11["return"](); + if (!_iteratorNormalCompletion14 && _iterator14["return"] != null) { + _iterator14["return"](); } } finally { - if (_didIteratorError11) { - throw _iteratorError11; + if (_didIteratorError14) { + throw _iteratorError14; } } } @@ -8212,13 +9035,13 @@ function () { // might not be on the line segment. // Find intersections and calculate point coordinates - var _iteratorNormalCompletion12 = true; - var _didIteratorError12 = false; - var _iteratorError12 = undefined; + var _iteratorNormalCompletion15 = true; + var _didIteratorError15 = false; + var _iteratorError15 = undefined; try { - for (var _iterator12 = roots[Symbol.iterator](), _step12; !(_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done); _iteratorNormalCompletion12 = true) { - var t = _step12.value; + for (var _iterator15 = roots[Symbol.iterator](), _step15; !(_iteratorNormalCompletion15 = (_step15 = _iterator15.next()).done); _iteratorNormalCompletion15 = true) { + var t = _step15.value; if (0 <= t && t <= 1) { // We're within the Bezier curve @@ -8249,16 +9072,16 @@ function () { } } } catch (err) { - _didIteratorError12 = true; - _iteratorError12 = err; + _didIteratorError15 = true; + _iteratorError15 = err; } finally { try { - if (!_iteratorNormalCompletion12 && _iterator12["return"] != null) { - _iterator12["return"](); + if (!_iteratorNormalCompletion15 && _iterator15["return"] != null) { + _iterator15["return"](); } } finally { - if (_didIteratorError12) { - throw _iteratorError12; + if (_didIteratorError15) { + throw _iteratorError15; } } } @@ -8556,22 +9379,60 @@ function () { var norm0 = (a[0] * a[0] + 2 * a[1] * a[1] + a[2] * a[2]) * epsilon; var norm1 = (b[0] * b[0] + 2 * b[1] * b[1] + b[2] * b[2]) * epsilon; var result = new Intersection("No Intersection"); + var _iteratorNormalCompletion16 = true; + var _didIteratorError16 = false; + var _iteratorError16 = undefined; - for (var y = 0; y < yRoots.length; y++) { - var xPoly = new Polynomial(a[0], a[3] + yRoots[y] * a[1], a[5] + yRoots[y] * (a[4] + yRoots[y] * a[2])); - var xRoots = xPoly.getRoots(); + try { + for (var _iterator16 = yRoots[Symbol.iterator](), _step16; !(_iteratorNormalCompletion16 = (_step16 = _iterator16.next()).done); _iteratorNormalCompletion16 = true) { + var yRoot = _step16.value; + var xPoly = new Polynomial(a[0], a[3] + yRoot * a[1], a[5] + yRoot * (a[4] + yRoot * a[2])); + var xRoots = xPoly.getRoots(); + var _iteratorNormalCompletion17 = true; + var _didIteratorError17 = false; + var _iteratorError17 = undefined; - for (var x = 0; x < xRoots.length; x++) { - var tst = (a[0] * xRoots[x] + a[1] * yRoots[y] + a[3]) * xRoots[x] + (a[2] * yRoots[y] + a[4]) * yRoots[y] + a[5]; + try { + for (var _iterator17 = xRoots[Symbol.iterator](), _step17; !(_iteratorNormalCompletion17 = (_step17 = _iterator17.next()).done); _iteratorNormalCompletion17 = true) { + var xRoot = _step17.value; + var tst = (a[0] * xRoot + a[1] * yRoot + a[3]) * xRoot + (a[2] * yRoot + a[4]) * yRoot + a[5]; - if (Math.abs(tst) < norm0) { - tst = (b[0] * xRoots[x] + b[1] * yRoots[y] + b[3]) * xRoots[x] + (b[2] * yRoots[y] + b[4]) * yRoots[y] + b[5]; + if (Math.abs(tst) < norm0) { + tst = (b[0] * xRoot + b[1] * yRoot + b[3]) * xRoot + (b[2] * yRoot + b[4]) * yRoot + b[5]; - if (Math.abs(tst) < norm1) { - result.appendPoint(new Point2D(xRoots[x], yRoots[y])); + if (Math.abs(tst) < norm1) { + result.appendPoint(new Point2D(xRoot, yRoot)); + } + } + } + } catch (err) { + _didIteratorError17 = true; + _iteratorError17 = err; + } finally { + try { + if (!_iteratorNormalCompletion17 && _iterator17["return"] != null) { + _iterator17["return"](); + } + } finally { + if (_didIteratorError17) { + throw _iteratorError17; + } } } } + } catch (err) { + _didIteratorError16 = true; + _iteratorError16 = err; + } finally { + try { + if (!_iteratorNormalCompletion16 && _iterator16["return"] != null) { + _iterator16["return"](); + } + } finally { + if (_didIteratorError16) { + throw _iteratorError16; + } + } } if (result.points.length > 0) { @@ -9578,6 +10439,7 @@ IntersectionQuery.pointInEllipse = function (point, center, radiusX, radiusY) { * * @param {module:kld-intersections.Point2D} point * @param {Array} points + * @returns {boolean} */ diff --git a/dist/index-esm.min.js b/dist/index-esm.min.js index ae70f1e..1a4f885 100644 --- a/dist/index-esm.min.js +++ b/dist/index-esm.min.js @@ -1,2 +1,2 @@ -function e(t){return(e="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(t)}function t(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function n(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:0,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;t(this,e),this.x=n,this.y=r}return r(e,[{key:"clone",value:function(){return new this.constructor(this.x,this.y)}},{key:"add",value:function(e){return new this.constructor(this.x+e.x,this.y+e.y)}},{key:"subtract",value:function(e){return new this.constructor(this.x-e.x,this.y-e.y)}},{key:"multiply",value:function(e){return new this.constructor(this.x*e,this.y*e)}},{key:"divide",value:function(e){return new this.constructor(this.x/e,this.y/e)}},{key:"equals",value:function(e){return this.x===e.x&&this.y===e.y}},{key:"precisionEquals",value:function(e,t){return Math.abs(this.x-e.x)0&&void 0!==arguments[0]?arguments[0]:0,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;t(this,e),this.x=n,this.y=r}return r(e,[{key:"length",value:function(){return Math.sqrt(this.x*this.x+this.y*this.y)}},{key:"magnitude",value:function(){return this.x*this.x+this.y*this.y}},{key:"dot",value:function(e){return this.x*e.x+this.y*e.y}},{key:"cross",value:function(e){return this.x*e.y-this.y*e.x}},{key:"determinant",value:function(e){return this.x*e.y-this.y*e.x}},{key:"unit",value:function(){return this.divide(this.length())}},{key:"add",value:function(e){return new this.constructor(this.x+e.x,this.y+e.y)}},{key:"subtract",value:function(e){return new this.constructor(this.x-e.x,this.y-e.y)}},{key:"multiply",value:function(e){return new this.constructor(this.x*e,this.y*e)}},{key:"divide",value:function(e){return new this.constructor(this.x/e,this.y/e)}},{key:"angleBetween",value:function(e){var t=this.dot(e)/(this.length()*e.length());t=Math.max(-1,Math.min(t,1));var n=Math.acos(t);return this.cross(e)<0?-n:n}},{key:"perp",value:function(){return new this.constructor(-this.y,this.x)}},{key:"perpendicular",value:function(e){return this.subtract(this.project(e))}},{key:"project",value:function(e){var t=this.dot(e)/e.dot(e);return e.multiply(t)}},{key:"transform",value:function(e){return new this.constructor(e.a*this.x+e.c*this.y,e.b*this.x+e.d*this.y)}},{key:"equals",value:function(e){return this.x===e.x&&this.y===e.y}},{key:"precisionEquals",value:function(e,t){return Math.abs(this.x-e.x)0&&void 0!==arguments[0]?arguments[0]:1,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;t(this,e),this.a=n,this.b=r,this.c=s,this.d=a,this.e=i,this.f=o}return r(e,[{key:"multiply",value:function(e){return this.isIdentity()?e:e.isIdentity()?this:new this.constructor(this.a*e.a+this.c*e.b,this.b*e.a+this.d*e.b,this.a*e.c+this.c*e.d,this.b*e.c+this.d*e.d,this.a*e.e+this.c*e.f+this.e,this.b*e.e+this.d*e.f+this.f)}},{key:"inverse",value:function(){if(this.isIdentity())return this;var e=this.a*this.d-this.b*this.c;if(0===e)throw new Error("Matrix is not invertible");var t=1/e,n=this.f*this.c-this.e*this.d,r=this.e*this.b-this.f*this.a;return new this.constructor(this.d*t,-this.b*t,-this.c*t,this.a*t,n*t,r*t)}},{key:"translate",value:function(e,t){return new this.constructor(this.a,this.b,this.c,this.d,this.a*e+this.c*t+this.e,this.b*e+this.d*t+this.f)}},{key:"scale",value:function(e){return new this.constructor(this.a*e,this.b*e,this.c*e,this.d*e,this.e,this.f)}},{key:"scaleAt",value:function(e,t){var n=t.x-e*t.x,r=t.y-e*t.y;return new this.constructor(this.a*e,this.b*e,this.c*e,this.d*e,this.a*n+this.c*r+this.e,this.b*n+this.d*r+this.f)}},{key:"scaleNonUniform",value:function(e,t){return new this.constructor(this.a*e,this.b*e,this.c*t,this.d*t,this.e,this.f)}},{key:"scaleNonUniformAt",value:function(e,t,n){var r=n.x-e*n.x,s=n.y-t*n.y;return new this.constructor(this.a*e,this.b*e,this.c*t,this.d*t,this.a*r+this.c*s+this.e,this.b*r+this.d*s+this.f)}},{key:"rotate",value:function(e){var t=Math.cos(e),n=Math.sin(e);return new this.constructor(this.a*t+this.c*n,this.b*t+this.d*n,this.a*-n+this.c*t,this.b*-n+this.d*t,this.e,this.f)}},{key:"rotateAt",value:function(e,t){var n=Math.cos(e),r=Math.sin(e),s=t.x,a=t.y,i=this.a*n+this.c*r,o=this.b*n+this.d*r,u=this.c*n-this.a*r,l=this.d*n-this.b*r;return new this.constructor(i,o,u,l,(this.a-i)*s+(this.c-u)*a+this.e,(this.b-o)*s+(this.d-l)*a+this.f)}},{key:"rotateFromVector",value:function(e){var t=e.unit(),n=t.x,r=t.y;return new this.constructor(this.a*n+this.c*r,this.b*n+this.d*r,this.a*-r+this.c*n,this.b*-r+this.d*n,this.e,this.f)}},{key:"flipX",value:function(){return new this.constructor(-this.a,-this.b,this.c,this.d,this.e,this.f)}},{key:"flipY",value:function(){return new this.constructor(this.a,this.b,-this.c,-this.d,this.e,this.f)}},{key:"skewX",value:function(e){var t=Math.tan(e);return new this.constructor(this.a,this.b,this.c+this.a*t,this.d+this.b*t,this.e,this.f)}},{key:"skewY",value:function(e){var t=Math.tan(e);return new this.constructor(this.a+this.c*t,this.b+this.d*t,this.c,this.d,this.e,this.f)}},{key:"isIdentity",value:function(){return 1===this.a&&0===this.b&&0===this.c&&1===this.d&&0===this.e&&0===this.f}},{key:"isInvertible",value:function(){return this.a*this.d-this.b*this.c!=0}},{key:"getScale",value:function(){return{scaleX:Math.sqrt(this.a*this.a+this.c*this.c),scaleY:Math.sqrt(this.b*this.b+this.d*this.d)}}},{key:"getDecomposition",value:function(){var e=.5*(this.a+this.d),t=.5*(this.a-this.d),n=.5*(this.b+this.c),r=.5*(this.b-this.c),s=Math.sqrt(e*e+r*r),a=Math.sqrt(t*t+n*n),i=s+a,o=s-a,u=Math.atan2(n,t),l=Math.atan2(r,e),c=.5*(l-u),h=.5*(l+u);return{translation:this.constructor.translation(this.e,this.f),rotation:this.constructor.rotation(h),scale:this.constructor.nonUniformScaling(i,o),rotation0:this.constructor.rotation(c)}}},{key:"equals",value:function(e){return this.a===e.a&&this.b===e.b&&this.c===e.c&&this.d===e.d&&this.e===e.e&&this.f===e.f}},{key:"precisionEquals",value:function(e,t){return Math.abs(this.a-e.a)=0;n--)this.coefs.push(n<0||arguments.length<=n?void 0:arguments[n]);this._variable="t",this._s=0}return r(e,[{key:"clone",value:function(){var t=new e;return t.coefs=this.coefs.slice(),t}},{key:"eval",value:function(e){if(isNaN(e))throw new TypeError("Parameter must be a number. Found '".concat(e,"'"));for(var t=0,n=this.coefs.length-1;n>=0;n--)t=t*e+this.coefs[n];return t}},{key:"add",value:function(t){for(var n=new e,r=this.getDegree(),s=t.getDegree(),a=Math.max(r,s),i=0;i<=a;i++){var o=i<=r?this.coefs[i]:0,u=i<=s?t.coefs[i]:0;n.coefs[i]=o+u}return n}},{key:"multiply",value:function(t){for(var n=new e,r=0;r<=this.getDegree()+t.getDegree();r++)n.coefs.push(0);for(var s=0;s<=this.getDegree();s++)for(var a=0;a<=t.getDegree();a++)n.coefs[s+a]+=this.coefs[s]*t.coefs[a];return n}},{key:"divideEqualsScalar",value:function(e){for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:1e-12,t=this.getDegree();t>=0&&Math.abs(this.coefs[t])<=e;t--)this.coefs.pop()}},{key:"removeZerosEquals",value:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1e-15,t=this.coefs,n=10*e*Math.abs(t.reduce(function(e,t){return Math.abs(t)>Math.abs(e)?t:e})),r=0;r=0;n--){var r=Math.round(1e3*this.coefs[n])/1e3;if(0!==r){var s=r<0?" - ":" + ";r=Math.abs(r),n>0&&(1===r?r=this._variable:r+=this._variable),n>1&&(r+="^"+n),t.push(s),e.push(r)}}t[0]=" + "===t[0]?"":"-";for(var a="",i=0;i2&&void 0!==arguments[2]?arguments[2]:1e-6,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:15,a=this.eval(e),i=this.eval(t);if(Math.abs(a)<=r)n=e;else if(Math.abs(i)<=r)n=t;else if(a*i<=0)for(var o=Math.log(t-e),u=Math.LN10*s,l=Math.ceil((o+u)/Math.LN2),c=0;c=3&&(a=e.interpolate(s,r,3,i-3,0),Math.abs(a.dy)<=1e-6*a.y)));i++)r[i]=r[i-1],s[i]=.25*s[i-1];return a.y}},{key:"zeroErrorEstimate",value:function(e){if(void 0===e){var t=this.bounds();e=Math.max(Math.abs(t.minX),Math.abs(t.maxX))}if(e<.001)return 2*Math.abs(this.eval(1e-15));var n=this.coefs.length-1,r=this.coefs[n];return 10*1e-15*this.coefs.reduce(function(t,n,s){var a=n/r*Math.pow(e,s);return a>t?a:t},0)}},{key:"boundsUpperRealFujiwara",value:function(){var e=this.coefs,t=e.length-1,n=e[t];1!==n&&(e=this.coefs.map(function(e){return e/n}));var r,s=e.map(function(e,n){return n0)},{negX:-2*s.reduce(a,{max:0,nearmax:0}).max,posX:2*i.max}}},{key:"boundsLowerRealFujiwara",value:function(){var t=new e;t.coefs=this.coefs.slice().reverse();var n=t.boundsUpperRealFujiwara();return n.negX=1/n.negX,n.posX=1/n.posX,n}},{key:"bounds",value:function(){var e=this.boundsUpperRealFujiwara(),t={minX:e.negX,maxX:e.posX};return 0===e.negX&&0===e.posX?t:(0===e.negX?t.minX=this.boundsLowerRealFujiwara().posX:0===e.posX&&(t.maxX=this.boundsLowerRealFujiwara().negX),t.minX>t.maxX&&(t.minX=t.maxX=0),t)}},{key:"boundUpperAbsRouche",value:function(){var e=this.coefs,t=e.length-1;return 1+e.reduce(function(e,n,r){return r!==t&&e<(n=Math.abs(n))?n:e},0)/Math.abs(e[t])}},{key:"boundLowerAbsRouche",value:function(){var e=this.coefs,t=e.reduce(function(e,t,n){return 0!==n&&e<(t=Math.abs(t))?t:e},0);return Math.abs(e[0])/(Math.abs(e[0])+t)}},{key:"boundsRealLaguerre",value:function(){var e=this.coefs,t=e.length-1,n=-e[t-1]/(t*e[t]),r=e[t-1]*e[t-1]-2*t/(t-1)*e[t]*e[t-2],s=(t-1)/(t*e[t])*Math.sqrt(r);return s<0&&(s=-s),{minX:n-s,maxX:n+s}}},{key:"countRootsDescartes",value:function(){var e=this.coefs,t=e.length-1,n=e.reduce(function(e,t,n){return 0!==e.prev_a&&0!==t&&(e.prev_a<0==t>0&&e.pos++,n%2==0!=e.prev_a<0==(n%2==1!=t>0)&&e.neg++),e.prev_a=t,e},{pos:0,neg:0,prev_a:0});return{maxRealPos:n.pos,maxRealNeg:n.neg,minComplex:t-(n.pos+n.neg)}}},{key:"getDegree",value:function(){return this.coefs.length-1}},{key:"getDerivative",value:function(){for(var t=new e,n=1;n0){r(this.bisection(e,s[0]));for(var a=0;a<=s.length-2;a++)r(this.bisection(s[a],s[a+1]));r(this.bisection(s[s.length-1],t))}else r(this.bisection(e,t))}return n}},{key:"getLinearRoot",value:function(){var e=[],t=this.coefs[1];return 0!==t&&e.push(-this.coefs[0]/t),e}},{key:"getQuadraticRoots",value:function(){var e=[];if(2===this.getDegree()){var t=this.coefs[2],n=this.coefs[1]/t,r=n*n-4*(this.coefs[0]/t);if(r>0){var s=Math.sqrt(r);e.push(.5*(-n+s)),e.push(.5*(-n-s))}else 0===r&&e.push(.5*-n)}return e}},{key:"getCubicRoots",value:function(){var e=[];if(3===this.getDegree()){var t=this.coefs[3],n=this.coefs[2]/t,r=this.coefs[1]/t,s=(3*r-n*n)/3,a=(2*n*n*n-9*r*n+27*(this.coefs[0]/t))/27,i=n/3,o=a*a/4+s*s*s/27,u=a/2,l=this.zeroErrorEstimate();if(Math.abs(o)<=l&&(o=0),o>0){var c,h=Math.sqrt(o),y=-u+h;c=y>=0?Math.pow(y,1/3):-Math.pow(-y,1/3),(y=-u-h)>=0?c+=Math.pow(y,1/3):c-=Math.pow(-y,1/3),e.push(c-i)}else if(o<0){var p=Math.sqrt(-s/3),f=Math.atan2(Math.sqrt(-o),-u)/3,x=Math.cos(f),v=Math.sin(f),m=Math.sqrt(3);e.push(2*p*x-i),e.push(-p*(x+m*v)-i),e.push(-p*(x-m*v)-i)}else{var d;d=u>=0?-Math.pow(u,1/3):Math.pow(-u,1/3),e.push(2*d-i),e.push(-d-i)}}return e}},{key:"getQuarticRoots",value:function(){var t=[],n=this.getDegree();if(4===n){var r=new e;r.coefs=this.coefs.slice(),r.divideEqualsScalar(r.coefs[n]);Math.abs(r.coefs[0])<10*1e-15*Math.abs(r.coefs[3])&&(r.coefs[0]=0);for(var s=r.getDerivative(),a=s.getRoots().sort(function(e,t){return e-t}),i=[],o=a.length-1,u=this.bounds(),c=Math.max(Math.abs(u.minX),Math.abs(u.maxX)),h=this.zeroErrorEstimate(c),y=0;y<=o;y++)i.push(r.eval(a[y]));for(var p=0;p<=o;p++)Math.abs(i[p])-1){for(0!==i[0]?l(i[0])!==l(r.eval(a[0]-x)-i[0])&&(v.push(a[0]-x),m.push([u.minX,a[0]])):(t.push(a[0],a[0]),f++);f0)for(f=0;fa)throw new RangeError("Min must be greater than max");if(y=t(s),p=t(a),l(y)===l(p))throw new RangeError("Y values of bounds must be of opposite sign")}for(var d=function(){return Math.abs(u)<=v*Math.abs(i)||x===i-u-i},b=0;ba){if(l(y)===l(p))break;var g=p-y,w=a-s;if(u=0===g?i-(s+.5*w):Math.abs(g/Math.min(y,p))>50?i-(s+w*(.5+(Math.abs(y)":16,step:17,"=~":18,namedPattern:19,expression:20,mathExpression:21,MAP:22,"(":23,")":24,PATTERNS:25,"{":26,patterns:27,"}":28,SEQUENCES:29,callExpression:30,"+":31,"-":32,"*":33,"/":34,argumentList:35,memberExpression:36,primaryExpression:37,".":38,integer:39,"[":40,"]":41,boolean:42,NULL_TYPE:43,float:44,string:45,UNDEFINED_TYPE:46,$:47,arrayExpression:48,objectExpression:49,expressionElements:50,expressionElement:51,expressionProperties:52,expressionProperty:53,":":54,argument:55,"...":56,pattern:57,AS:58,ANY_TYPE:59,ARRAY_TYPE:60,BOOLEAN_TYPE:61,TRUE:62,FALSE:63,NUMBER_TYPE:64,OBJECT_TYPE:65,STRING_TYPE:66,arrayPattern:67,objectPattern:68,PATTERN:69,ENUMERATION:70,patternElements:71,namedPatternElement:72,patternElement:73,range:74,"..":75,patternProperties:76,namedPatternProperty:77,namedProperty:78,STRING:79,NUMBER:80,stringOrIdentifier:81,identifiers:82,$accept:0,$end:1},terminals_:{2:"error",5:";",9:"LET",10:"IDENTIFIER",11:"=",12:"DEF",14:",",16:"|>",18:"=~",22:"MAP",23:"(",24:")",25:"PATTERNS",26:"{",28:"}",29:"SEQUENCES",31:"+",32:"-",33:"*",34:"/",38:".",40:"[",41:"]",43:"NULL_TYPE",46:"UNDEFINED_TYPE",47:"$",54:":",56:"...",58:"AS",59:"ANY_TYPE",60:"ARRAY_TYPE",61:"BOOLEAN_TYPE",62:"TRUE",63:"FALSE",64:"NUMBER_TYPE",65:"OBJECT_TYPE",66:"STRING_TYPE",69:"PATTERN",70:"ENUMERATION",75:"..",79:"STRING",80:"NUMBER"},productions_:[0,[3,1],[3,2],[4,3],[4,1],[6,1],[6,1],[7,4],[7,4],[13,3],[13,1],[8,1],[15,3],[15,1],[17,2],[17,1],[20,1],[20,6],[20,4],[20,4],[21,1],[21,3],[21,3],[21,3],[21,3],[30,3],[30,4],[30,1],[36,1],[36,3],[36,3],[36,4],[37,1],[37,1],[37,1],[37,1],[37,1],[37,1],[37,1],[37,1],[37,1],[37,3],[48,2],[48,3],[50,3],[50,1],[51,1],[51,1],[49,2],[49,3],[52,3],[52,1],[53,3],[53,1],[53,1],[35,3],[35,1],[55,1],[55,2],[27,3],[27,1],[19,1],[19,3],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,2],[57,2],[57,1],[67,2],[67,3],[71,3],[71,1],[72,1],[72,3],[73,1],[73,3],[73,3],[73,5],[74,3],[74,2],[74,2],[74,1],[68,2],[68,3],[76,3],[76,1],[77,1],[77,3],[78,3],[78,1],[42,1],[42,1],[45,1],[39,1],[44,1],[81,1],[81,1],[82,3],[82,1]],performAction:function(e,t,n,r,s,a,i){var o=a.length-1;switch(s){case 1:return a[o];case 2:return a[o-1];case 3:case 9:case 12:case 44:case 50:case 55:case 59:case 82:case 96:case 109:a[o-2].push(a[o]),this.$=a[o-2];break;case 4:case 10:case 13:case 45:case 51:case 56:case 60:case 83:case 97:case 110:this.$=[a[o]];break;case 5:case 6:case 14:case 15:case 16:case 20:case 27:case 28:case 39:case 40:case 46:case 47:case 54:case 57:case 98:case 107:this.$=a[o];break;case 7:this.$={type:"assignment",name:a[o-2],value:a[o]};break;case 8:this.$={type:"def",name:a[o-2],value:a[o]};break;case 11:this.$={type:"sequence",steps:a[o]};break;case 17:this.$={type:"map",value:[a[o-3],a[o-1]]};break;case 18:this.$={type:"patterns",patterns:a[o-1]};break;case 19:this.$={type:"sequences",sequences:a[o-1]};break;case 21:this.$={type:"add",left:a[o-2],right:a[o]};break;case 22:this.$={type:"subtract",left:a[o-2],right:a[o]};break;case 23:this.$={type:"multiply",left:a[o-2],right:a[o]};break;case 24:this.$={type:"divide",left:a[o-2],right:a[o]};break;case 25:this.$={type:"invoke",name:a[o-2],args:[]};break;case 26:this.$={type:"invoke",name:a[o-3],args:a[o-1]};break;case 29:this.$={type:"get-property",left:a[o-2],right:a[o]};break;case 30:this.$={type:"get-index",left:a[o-2],right:a[o]};break;case 31:this.$={type:"get-index",left:a[o-3],right:a[o-1]};break;case 32:this.$={type:"boolean",value:a[o]};break;case 33:this.$={type:"boolean",value:null};break;case 34:this.$={type:"number",value:a[o]};break;case 35:this.$={type:"string",value:a[o]};break;case 36:this.$={type:"undefined",value:void 0};break;case 37:this.$={type:"get-value",name:a[o]};break;case 38:this.$={type:"get-structure"};break;case 41:this.$=a[o-1];break;case 42:this.$={type:"array",value:[]};break;case 43:this.$={type:"array",value:a[o-1]};break;case 48:this.$={type:"object",value:[]};break;case 49:this.$={type:"object",value:a[o-1]};break;case 52:this.$={type:"property",name:a[o-2],value:a[o]};break;case 53:this.$={type:"property",name:a[o],value:null};break;case 58:this.$={type:"spread",expression:a[o]};break;case 61:case 84:a[o].assignTo=null,this.$=a[o];break;case 62:case 85:case 99:a[o-2].assignTo=a[o],this.$=a[o-2];break;case 63:this.$={type:"pattern",patternType:"any",value:null};break;case 64:this.$={type:"pattern",patternType:"array",value:null};break;case 65:this.$={type:"pattern",patternType:"boolean",value:null};break;case 66:this.$={type:"pattern",patternType:"boolean",value:!0};break;case 67:this.$={type:"pattern",patternType:"boolean",value:!1};break;case 68:this.$={type:"pattern",patternType:"null",value:null};break;case 69:this.$={type:"pattern",patternType:"number",value:null};break;case 70:this.$={type:"pattern",patternType:"number",value:a[o]};break;case 71:this.$={type:"pattern",patternType:"object",value:null};break;case 72:this.$={type:"pattern",patternType:"string",value:null};break;case 73:this.$={type:"pattern",patternType:"string",value:a[o]};break;case 74:this.$={type:"pattern",patternType:"undefined",value:null};break;case 75:case 76:this.$=a[o];break;case 77:this.$={type:"pattern-reference",name:a[o]};break;case 78:this.$={type:"enumeration-reference",name:a[o]};break;case 79:this.$={type:"pattern",patternType:"reference",value:a[o]};break;case 80:this.$={type:"pattern",patternType:"array-pattern",value:[]};break;case 81:this.$={type:"pattern",patternType:"array-pattern",value:a[o-1]};break;case 86:this.$={type:"element",pattern:a[o],range:{type:"range",start:1,stop:1}};break;case 87:this.$={type:"element",pattern:a[o-2],range:a[o]};break;case 88:this.$={type:"element-group",elements:a[o-1],range:{type:"range",start:1,stop:1}};break;case 89:this.$={type:"element-group",elements:a[o-3],range:a[o]};break;case 90:this.$={type:"range",start:a[o-2],stop:a[o]};break;case 91:this.$={type:"range",start:0,stop:a[o]};break;case 92:this.$={type:"range",start:a[o-1],stop:1/0};break;case 93:this.$={type:"range",start:a[o],stop:a[o]};break;case 94:this.$={type:"pattern",patternType:"object",value:null};break;case 95:this.$={type:"pattern",patternType:"object-pattern",value:a[o-1]};break;case 100:this.$={type:"property",name:a[o-2],pattern:a[o]};break;case 101:this.$={type:"property",name:a[o],pattern:{type:"pattern",patternType:"any",value:null}};break;case 102:this.$=!0;break;case 103:this.$=!1;break;case 104:case 108:this.$=a[o].substring(1,a[o].length-1);break;case 105:this.$=parseInt(a[o]);break;case 106:this.$=parseFloat(a[o])}},table:[{3:1,4:2,6:3,7:4,8:5,9:t,10:n,12:r,15:8,17:9,18:s,20:11,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},{1:[3]},{1:[2,1],5:[1,35]},e(d,[2,4]),e(d,[2,5]),e(d,[2,6]),{10:[1,36]},{10:[1,37]},e([1,5,14,24,28,41],[2,11],{16:[1,38]}),e(b,[2,13]),{10:g,19:39,26:w,40:k,43:E,44:48,45:51,46:P,57:40,59:A,60:M,61:R,62:S,63:I,64:T,65:_,66:X,67:53,68:54,69:N,70:Y,79:v,80:m},e(b,[2,15]),e(C,[2,16],{31:[1,60],32:[1,61],33:[1,62],34:[1,63]}),{23:[1,64]},{26:[1,65]},{26:[1,66]},e(L,[2,20]),e($,[2,37],{23:[1,67]}),e(L,[2,27],{38:[1,68],40:[1,69]}),e($,[2,28]),e($,[2,32]),e($,[2,33]),e($,[2,34]),e($,[2,35]),e($,[2,36]),e($,[2,38]),e($,[2,39]),e($,[2,40]),{10:n,20:70,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},e($,[2,102]),e($,[2,103]),e(z,[2,106]),e(z,[2,104]),{7:75,9:t,10:n,12:r,20:74,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,41:[1,71],42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,50:72,51:73,62:f,63:x,79:v,80:m},{7:80,9:t,10:n,12:r,20:79,21:12,22:a,23:i,25:o,26:u,28:[1,76],29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,52:77,53:78,62:f,63:x,79:v,80:m},{1:[2,2],6:81,7:4,8:5,9:t,10:n,12:r,15:8,17:9,18:s,20:11,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},{11:[1,82]},{11:[1,83]},{10:n,17:84,18:s,20:11,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},e(b,[2,14]),e(b,[2,61],{58:[1,85]}),e(D,[2,63]),e(D,[2,64]),e(D,[2,65]),e(D,[2,66]),e(D,[2,67]),e(D,[2,68]),e(D,[2,69]),e(D,[2,70]),e(D,[2,71]),e(D,[2,72]),e(D,[2,73]),e(D,[2,74]),e(D,[2,75]),e(D,[2,76]),{10:[1,86]},{10:[1,87]},e(D,[2,79]),{10:g,23:B,26:w,40:k,41:[1,88],43:E,44:48,45:51,46:P,57:92,59:A,60:M,61:R,62:S,63:I,64:T,65:_,66:X,67:53,68:54,69:N,70:Y,71:89,72:90,73:91,79:v,80:m},{10:O,28:[1,94],76:95,77:96,78:97},{10:n,23:i,26:u,30:99,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},{10:n,23:i,26:u,30:100,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},{10:n,23:i,26:u,30:101,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},{10:n,23:i,26:u,30:102,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},{10:n,20:103,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},{10:g,19:105,26:w,27:104,40:k,43:E,44:48,45:51,46:P,57:40,59:A,60:M,61:R,62:S,63:I,64:T,65:_,66:X,67:53,68:54,69:N,70:Y,79:v,80:m},{8:107,10:n,13:106,15:8,17:9,18:s,20:11,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},{10:n,20:111,21:12,22:a,23:i,24:[1,108],25:o,26:u,29:l,30:16,35:109,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,55:110,56:q,62:f,63:x,79:v,80:m},{10:[1,113],39:114,80:j},{39:116,80:j},{24:[1,117]},e($,[2,42]),{14:[1,119],41:[1,118]},e(U,[2,45]),e(U,[2,46]),e(U,[2,47]),e($,[2,48]),{14:[1,121],28:[1,120]},e(V,[2,51]),e(V,[2,53],{54:[1,122]}),e(V,[2,54]),e(d,[2,3]),{8:123,10:n,15:8,17:9,18:s,20:11,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},{8:124,10:n,15:8,17:9,18:s,20:11,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},e(b,[2,12]),{10:[1,125]},e(D,[2,77]),e(D,[2,78]),e(D,[2,80]),{14:F,41:[1,126]},e(G,[2,83]),e(G,[2,84],{58:[1,128]}),e(Q,[2,86],{5:[1,129]}),{10:g,23:B,26:w,40:k,43:E,44:48,45:51,46:P,57:92,59:A,60:M,61:R,62:S,63:I,64:T,65:_,66:X,67:53,68:54,69:N,70:Y,71:130,72:90,73:91,79:v,80:m},e(D,[2,94]),{14:[1,132],28:[1,131]},e(V,[2,97]),e(V,[2,98],{58:[1,133]}),e(H,[2,101],{54:[1,134]}),e(L,[2,21]),e(L,[2,22]),e(L,[2,23]),e(L,[2,24]),{14:[1,135]},{14:[1,137],28:[1,136]},e(V,[2,60]),{14:[1,139],28:[1,138]},e(V,[2,10]),e(L,[2,25]),{14:[1,141],24:[1,140]},e(Z,[2,56]),e(Z,[2,57]),{10:n,20:142,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},e($,[2,29]),e($,[2,30]),e([1,5,14,16,24,28,31,32,33,34,38,40,41,54,58,75],[2,105]),{41:[1,143]},e($,[2,41]),e($,[2,43]),{7:75,9:t,10:n,12:r,20:74,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,51:144,62:f,63:x,79:v,80:m},e($,[2,49]),{7:80,9:t,10:n,12:r,20:79,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,53:145,62:f,63:x,79:v,80:m},{8:146,10:n,15:8,17:9,18:s,20:11,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},e(J,[2,7]),e(J,[2,8]),e(b,[2,62]),e(D,[2,81]),{10:g,23:B,26:w,40:k,43:E,44:48,45:51,46:P,57:92,59:A,60:M,61:R,62:S,63:I,64:T,65:_,66:X,67:53,68:54,69:N,70:Y,72:147,73:91,79:v,80:m},{10:[1,148]},{39:150,74:149,75:W,80:j},{14:F,24:[1,152]},e(D,[2,95]),{10:O,77:153,78:97},{10:[1,154]},{10:g,26:w,40:k,43:E,44:48,45:51,46:P,57:155,59:A,60:M,61:R,62:S,63:I,64:T,65:_,66:X,67:53,68:54,69:N,70:Y,79:v,80:m},{8:156,10:n,15:8,17:9,18:s,20:11,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},e(C,[2,18]),{10:g,19:157,26:w,40:k,43:E,44:48,45:51,46:P,57:40,59:A,60:M,61:R,62:S,63:I,64:T,65:_,66:X,67:53,68:54,69:N,70:Y,79:v,80:m},e(C,[2,19]),{8:158,10:n,15:8,17:9,18:s,20:11,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},e(L,[2,26]),{10:n,20:111,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,55:159,56:q,62:f,63:x,79:v,80:m},e(Z,[2,58]),e($,[2,31]),e(U,[2,44]),e(V,[2,50]),e(V,[2,52]),e(G,[2,82]),e(G,[2,85]),e(Q,[2,87]),e(Q,[2,93],{75:[1,160]}),{39:161,80:j},e(Q,[2,88],{5:[1,162]}),e(V,[2,96]),e(V,[2,99]),e(H,[2,100]),{24:[1,163]},e(V,[2,59]),e(V,[2,9]),e(Z,[2,55]),e(Q,[2,92],{39:164,80:j}),e(Q,[2,91]),{39:150,74:165,75:W,80:j},e(C,[2,17]),e(Q,[2,90]),e(Q,[2,89])],defaultActions:{},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],r=[null],s=[],a=this.table,i="",o=0,u=0,l=s.slice.call(arguments,1),c=Object.create(this.lexer),h={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(h.yy[y]=this.yy[y]);c.setInput(e,h.yy),h.yy.lexer=c,h.yy.parser=this,void 0===c.yylloc&&(c.yylloc={});var p=c.yylloc;s.push(p);var f=c.options&&c.options.ranges;"function"==typeof h.yy.parseError?this.parseError=h.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,v,m,d,b,g,w,k,E,P,A={};;){if(m=n[n.length-1],this.defaultActions[m]?d=this.defaultActions[m]:(null==x&&(P=void 0,"number"!=typeof(P=c.lex()||1)&&(P=t.symbols_[P]||P),x=P),d=a[m]&&a[m][x]),void 0===d||!d.length||!d[0]){var M="";for(g in E=[],a[m])this.terminals_[g]&&g>2&&E.push("'"+this.terminals_[g]+"'");M=c.showPosition?"Parse error on line "+(o+1)+":\n"+c.showPosition()+"\nExpecting "+E.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==x?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(M,{text:c.match,token:this.terminals_[x]||x,line:c.yylineno,loc:p,expected:E})}if(d[0]instanceof Array&&d.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+x);switch(d[0]){case 1:n.push(x),r.push(c.yytext),s.push(c.yylloc),n.push(d[1]),x=null,v?(x=v,v=null):(u=c.yyleng,i=c.yytext,o=c.yylineno,p=c.yylloc);break;case 2:if(w=this.productions_[d[1]][1],A.$=r[r.length-w],A._$={first_line:s[s.length-(w||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(w||1)].first_column,last_column:s[s.length-1].last_column},f&&(A._$.range=[s[s.length-(w||1)].range[0],s[s.length-1].range[1]]),void 0!==(b=this.performAction.apply(A,[i,u,o,h.yy,d[1],r,s].concat(l))))return b;w&&(n=n.slice(0,-1*w*2),r=r.slice(0,-1*w),s=s.slice(0,-1*w)),n.push(this.productions_[d[1]][0]),r.push(A.$),s.push(A._$),k=a[n[n.length-2]][n[n.length-1]],n.push(k);break;case 3:return!0}}return!0}},ee={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in s)this[a]=s[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),a=0;at[0].length)){if(t=n,r=a,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,s[a])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,s[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(e,t,n,r){switch(n){case 0:case 1:break;case 2:return 59;case 3:return 60;case 4:return 58;case 5:return 61;case 6:return 12;case 7:return 70;case 8:return 63;case 9:return 9;case 10:return 22;case 11:return 25;case 12:return 43;case 13:return 64;case 14:return 65;case 15:return 29;case 16:return 66;case 17:return 62;case 18:return 46;case 19:return 80;case 20:return 79;case 21:return 23;case 22:return 24;case 23:return 26;case 24:return 28;case 25:return 40;case 26:return 41;case 27:return 16;case 28:return"|";case 29:return 14;case 30:return 54;case 31:return 5;case 32:return 18;case 33:return 11;case 34:return"<=";case 35:return 56;case 36:return 75;case 37:return 38;case 38:return"_";case 39:return 31;case 40:return 32;case 41:return 33;case 42:return 34;case 43:return 47;case 44:return 10}},rules:[/^(?:\s+)/,/^(?:\/\/.*)/,/^(?:any\b)/,/^(?:array\b)/,/^(?:as\b)/,/^(?:boolean\b)/,/^(?:def\b)/,/^(?:enum\b)/,/^(?:false\b)/,/^(?:let\b)/,/^(?:map\b)/,/^(?:patterns\b)/,/^(?:null\b)/,/^(?:number\b)/,/^(?:object\b)/,/^(?:sequences\b)/,/^(?:string\b)/,/^(?:true\b)/,/^(?:undefined\b)/,/^(?:[-+]?(0|[1-9]\d*)(\.\d+)?)/,/^(?:"[^"\r\n]*")/,/^(?:\()/,/^(?:\))/,/^(?:{)/,/^(?:})/,/^(?:\[)/,/^(?:\])/,/^(?:\|>)/,/^(?:\|)/,/^(?:,)/,/^(?::)/,/^(?:;)/,/^(?:=~)/,/^(?:=)/,/^(?:<=)/,/^(?:\.{3})/,/^(?:\.{2})/,/^(?:\.)/,/^(?:_)/,/^(?:\+)/,/^(?:-)/,/^(?:\*)/,/^(?:\/)/,/^(?:\$)/,/^(?:[a-zA-Z_][a-zA-Z0-9_]*)/],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],inclusive:!0}}};function te(){this.yy={}}return K.lexer=ee,te.prototype=K,K.Parser=te,new te}();function y(t){return null!==t&&"object"===e(t)}var p=Object.freeze({__proto__:null,typeName:function(t){switch(t){case null:return"null";case void 0:return"undefined";default:return Array.isArray(t)?"array":e(t)}},length:function(e){return Array.isArray(e)?e.length:0},zip:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,n=[];if(Array.isArray(e)&&e.length>0&&e.every(function(e){return Array.isArray(e)}))for(var r=Math.max.apply(Math,a(e.map(function(e){return e.length}))),s=0;s3&&void 0!==arguments[3]?arguments[3]:void 0,s=e.length,a=[];n=void 0===n?t:n,t=Math.max(1,t),n=Math.max(1,n);for(var i=0;i=2){var l=s(u,2),c=l[0],h=l[1];t[c]=h}}}catch(e){r=!0,a=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw a}}}return t},merge:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&Array.isArray(t[0])?(r=t[0]).concat.apply(r,a(t.slice(1))):t.every(function(e){return y(e)})?Object.assign.apply(Object,[{}].concat(t)):void 0}}),f={};function x(t){return null!==t&&"object"===e(t)}var v=function(){function e(){for(var n in t(this,e),this.symbolTable={},this.functions={},this.messages=[],this.verbose=!1,p)this.functions[n]=p[n]}return r(e,[{key:"addFunction",value:function(e,t){this.functions[e]=t}},{key:"addInfo",value:function(e){this.verbose&&this.messages.push({type:"message",level:"info",message:e})}},{key:"addWarning",value:function(e){this.messages.push({type:"message",level:"warning",message:e})}},{key:"addError",value:function(e){this.messages.push({type:"message",level:"error",message:e})}},{key:"execute",value:function(e,t){var n,r=h.parse(e);this.messages=[];var s=!0,a=!1,i=void 0;try{for(var o,u=r[Symbol.iterator]();!(s=(o=u.next()).done);s=!0){var l=o.value;switch(l.type){case"assignment":case"def":case"sequence":n=this.executeExpression(l,t,this.symbolTable);break;default:return this.addError("unknown statement type: ".concat(l.type)),f}}}catch(e){a=!0,i=e}finally{try{s||null==u.return||u.return()}finally{if(a)throw i}}return n}},{key:"executeExpression",value:function(e,t,n){var r=this,a=function(s){var a=r.executeExpression(e.left,t,n);if(a!==f&&"number"==typeof a){var i=r.executeExpression(e.right,t,n);if(i!==f&&"number"==typeof i)return s(a,i)}return f};switch(e.type){case"assignment":var i=this.executeExpression(e.value,t,n);return i===f?(this.addError("Unable to evaluate assignment value for ".concat(e.name)),f):(n[e.name]=i,i);case"def":return void(n[e.name]=e.value);case"get-value":if(e.name in n){var o=n[e.name];if(x(o)&&"sequence"===o.type){var u=this.executeExpression(o,t,n);return u===f?(this.addError("Unable to evaluate sequence ".concat(e.name)),f):u}return o}return e.name in this.functions?this.invokeFunction(e.name,[t]):(this.addError("Tried to access unbound symbol: ".concat(e.name)),f);case"get-property":var l=this.executeExpression(e.left,t,n);return x(l)?l[e.right]:f;case"get-index":var c=e.left,h=e.right,y=this.executeExpression(c,t,n);if(Array.isArray(y)){var p=h<0?y.length+h:h;return 0<=p&&p=i)break;return f}o>1?this.pushAssign(r,e.assignTo,h):this.assign(r,e.assignTo,h),u.push(h)}return u}},{key:"executeArrayElementGroupPattern",value:function(e,t,n,r){for(var s=e.elements,a=e.range,i=a.start,o=a.stop,u=[],l=0;l1?this.pushAssign(r,m.assignTo,d[m.assignTo]):this.assign(r,m.assignTo,d[m.assignTo])),u=u.concat(b),t+=b.length,c=c.concat(b)}}catch(e){y=!0,p=e}finally{try{h||null==v.return||v.return()}finally{if(y)throw p}}if(c===f){if(l>=i){if(0===l){this.assign(r,e.assignTo,[]);var g=!0,w=!1,k=void 0;try{for(var E,P=s[Symbol.iterator]();!(g=(E=P.next()).done);g=!0){var A=E.value;this.assign(r,A.assignTo,[])}}catch(e){w=!0,k=e}finally{try{g||null==P.return||P.return()}finally{if(w)throw k}}}return u}return f}o>1?this.pushAssign(r,e.assignTo,c):this.assign(r,e.assignTo,c)}return u}},{key:"invokeFunction",value:function(e,t){var n;return e in this.functions?(n=this.functions)[e].apply(n,a(t)):f}},{key:"assign",value:function(e,t,n){null!=t&&(e.hasOwnProperty(t)&&this.addWarning("Overwriting ".concat(t," with value: ").concat(n)),e[t]=n)}},{key:"pushAssign",value:function(e,t,n){if(null!=t){var r=e.hasOwnProperty(t)?e[t]:[];Array.isArray(r)?(r.push(n),e[t]=r):this.addWarning("Unable to push to ".concat(t," because it is not an array: ").concat(r))}}}]),e}(),m=function(){function e(n,r){t(this,e),this.type=n,this.text=r}return r(e,[{key:"typeis",value:function(e){return this.type===e}}]),e}();m.UNDEFINED=0,m.COMMAND=1,m.NUMBER=2,m.EOD=3;var d=function(){function e(n){t(this,e),null==n&&(n=""),this.setPathData(n)}return r(e,[{key:"setPathData",value:function(e){if("string"!=typeof e)throw new TypeError("The first parameter must be a string");this._pathData=e}},{key:"getNextToken",value:function(){for(var e=null,t=this._pathData;null===e;)if(null===t||""===t)e=new m(m.EOD,"");else if(t.match(/^([ \t\r\n,]+)/))t=t.substr(RegExp.$1.length);else if(t.match(/^([AaCcHhLlMmQqSsTtVvZz])/))e=new m(m.COMMAND,RegExp.$1),t=t.substr(RegExp.$1.length);else{if(!t.match(/^(([-+]?\d+(\.\d*)?|[-+]?\.\d+)([eE][-+]?\d+)?)/))throw new SyntaxError("Unrecognized path data: ".concat(t));e=new m(m.NUMBER,RegExp.$1),t=t.substr(RegExp.$1.length)}return this._pathData=t,e}}]),e}(),b=function(){function e(){t(this,e),this._lexer=new d,this._handler=null}return r(e,[{key:"parseData",value:function(t){if("string"!=typeof t)throw new TypeError("The first parameter must be a string: ".concat(t));null!==this._handler&&"function"==typeof this._handler.beginParse&&this._handler.beginParse();var n=this._lexer;n.setPathData(t);for(var r="BOP",s=null,a=n.getNextToken();!1===a.typeis(m.EOD);){var i=void 0,o=[];switch(a.type){case m.COMMAND:if("BOP"===r&&"M"!==a.text&&"m"!==a.text)throw new SyntaxError("New paths must begin with a moveto command. Found '".concat(a.text,"'"));r=a.text,i=e.PARAMCOUNT[a.text.toUpperCase()],a=n.getNextToken();break;case m.NUMBER:if("BOP"===r)throw new SyntaxError("New paths must begin with a moveto command. Found '".concat(a.text,"'"));i=e.PARAMCOUNT[r.toUpperCase()];break;default:throw new SyntaxError("Unrecognized command type: ".concat(a.type))}for(var u=0;u1){var v=Math.sqrt(x);n*=v,r*=v}var m=n*n,d=r*r,b=m*f,w=d*p,k=(m*d-b-w)/(b+w);Math.abs(k)<1e-6&&(k=0);var E=Math.sqrt(k);a===i&&(E=-E);var P,A,M=e.add(t).multiply(.5),R=E*n*y/r,S=E*-r*h/n,I=(h-R)/n,T=(h+R)/n,_=(y-S)/r,X=(y+S)/r,N=new o(1,0).angleBetween(new o(I,_)),Y=(P=new o(I,_).angleBetween(new o(-T,-X)),(A=P%g)<0?A+g:A);return!1===i&&(Y-=g),[R*u-S*l+M.x,R*l+S*u+M.y,n,r,N,N+Y]}var k=function(){function e(n){t(this,e),this.shapeCreator=n,this.shapes=[],this.firstX=null,this.firstY=null,this.lastX=null,this.lastY=null,this.lastCommand=null}return r(e,[{key:"beginParse",value:function(){this.shapes=[],this.firstX=null,this.firstY=null,this.lastX=null,this.lastY=null,this.lastCommand=null}},{key:"addShape",value:function(e){this.shapes.push(e)}},{key:"arcAbs",value:function(e,t,n,r,s,o,u){if(0===e||0===t)this.addShape(this.shapeCreator.line(this.lastX,this.lastY,o,u));else{var l,c=w(new i(this.lastX,this.lastY),new i(o,u),e,t,n,r,s);this.addShape((l=this.shapeCreator).arc.apply(l,a(c)))}this.lastCommand="A",this.lastX=o,this.lastY=u}},{key:"arcRel",value:function(e,t,n,r,s,o,u){if(0===e||0===t)this.addShape(this.shapeCreator.line(this.lastX,this.lastY,this.lastX+o,this.lastY+u));else{var l,c=w(new i(this.lastX,this.lastY),new i(this.lastX+o,this.lastY+u),e,t,n,r,s);this.addShape((l=this.shapeCreator).arc.apply(l,a(c)))}this.lastCommand="a",this.lastX+=o,this.lastY+=u}},{key:"curvetoCubicAbs",value:function(e,t,n,r,s,a){this.addShape(this.shapeCreator.cubicBezier(this.lastX,this.lastY,e,t,n,r,s,a)),this.lastX=s,this.lastY=a,this.lastCommand="C"}},{key:"curvetoCubicRel",value:function(e,t,n,r,s,a){this.addShape(this.shapeCreator.cubicBezier(this.lastX,this.lastY,this.lastX+e,this.lastY+t,this.lastX+n,this.lastY+r,this.lastX+s,this.lastY+a)),this.lastX+=s,this.lastY+=a,this.lastCommand="c"}},{key:"linetoHorizontalAbs",value:function(e){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,e,this.lastY)),this.lastX=e,this.lastCommand="H"}},{key:"linetoHorizontalRel",value:function(e){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,this.lastX+e,this.lastY)),this.lastX+=e,this.lastCommand="h"}},{key:"linetoAbs",value:function(e,t){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,e,t)),this.lastX=e,this.lastY=t,this.lastCommand="L"}},{key:"linetoRel",value:function(e,t){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,this.lastX+e,this.lastY+t)),this.lastX+=e,this.lastY+=t,this.lastCommand="l"}},{key:"movetoAbs",value:function(e,t){this.firstX=e,this.firstY=t,this.lastX=e,this.lastY=t,this.lastCommand="M"}},{key:"movetoRel",value:function(e,t){this.firstX+=e,this.firstY+=t,this.lastX+=e,this.lastY+=t,this.lastCommand="m"}},{key:"curvetoQuadraticAbs",value:function(e,t,n,r){this.addShape(this.shapeCreator.quadraticBezier(this.lastX,this.lastY,e,t,n,r)),this.lastX=n,this.lastY=r,this.lastCommand="Q"}},{key:"curvetoQuadraticRel",value:function(e,t,n,r){this.addShape(this.shapeCreator.quadraticBezier(this.lastX,this.lastY,this.lastX+e,this.lastY+t,this.lastX+n,this.lastY+r)),this.lastX+=n,this.lastY+=r,this.lastCommand="q"}},{key:"curvetoCubicSmoothAbs",value:function(e,t,n,r){var s,a;if(this.lastCommand.match(/^[SsCc]$/)){var i=this.shapes[this.shapes.length-1].args[2];s=2*this.lastX-i.x,a=2*this.lastY-i.y}else s=this.lastX,a=this.lastY;this.addShape(this.shapeCreator.cubicBezier(this.lastX,this.lastY,s,a,e,t,n,r)),this.lastX=n,this.lastY=r,this.lastCommand="S"}},{key:"curvetoCubicSmoothRel",value:function(e,t,n,r){var s,a;if(this.lastCommand.match(/^[SsCc]$/)){var i=this.shapes[this.shapes.length-1].args[2];s=2*this.lastX-i.x,a=2*this.lastY-i.y}else s=this.lastX,a=this.lastY;this.addShape(this.shapeCreator.cubicBezier(this.lastX,this.lastY,s,a,this.lastX+e,this.lastY+t,this.lastX+n,this.lastY+r)),this.lastX+=n,this.lastY+=r,this.lastCommand="s"}},{key:"curvetoQuadraticSmoothAbs",value:function(e,t){var n,r;if(this.lastCommand.match(/^[QqTt]$/)){var s=this.shapes[this.shapes.length-1].args[1];n=2*this.lastX-s.x,r=2*this.lastY-s.y}else n=this.lastX,r=this.lastY;this.addShape(this.shapeCreator.quadraticBezier(this.lastX,this.lastY,n,r,e,t)),this.lastX=e,this.lastY=t,this.lastCommand="T"}},{key:"curvetoQuadraticSmoothRel",value:function(e,t){var n,r;if(this.lastCommand.match(/^[QqTt]$/)){var s=this.shapes[this.shapes.length-1].args[1];n=2*this.lastX-s.x,r=2*this.lastY-s.y}else n=this.lastX,r=this.lastY;this.addShape(this.shapeCreator.quadraticBezier(this.lastX,this.lastY,n,r,this.lastX+e,this.lastY+t)),this.lastX+=e,this.lastY+=t,this.lastCommand="t"}},{key:"linetoVerticalAbs",value:function(e){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,this.lastX,e)),this.lastY=e,this.lastCommand="V"}},{key:"linetoVerticalRel",value:function(e){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,this.lastX,this.lastY+e)),this.lastY+=e,this.lastCommand="v"}},{key:"closePath",value:function(){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,this.firstX,this.firstY)),this.lastX=this.firstX,this.lastY=this.firstY,this.lastCommand="z"}}]),e}(),E=.5*Math.PI,P=function(){function e(n,r){t(this,e),this.name=n,this.args=r}return r(e,null,[{key:"arc",value:function(){for(var t=arguments.length,n=new Array(t),r=0;r.5*p&&(i=.5*p),a>.5*f&&(a=.5*f);var x=u,v=l,m=u+i,d=l+a,b=h-i,g=y-a,w=h,k=y,P=[e.arc(m,d,i,a,2*E,3*E),e.line(m,v,b,v),e.arc(b,d,i,a,3*E,4*E),e.line(w,d,w,g),e.arc(b,g,i,a,0,E),e.line(b,k,m,k),e.arc(m,g,i,a,E,2*E),e.line(x,g,x,d)];return new e(e.PATH,P)}}]),e}();function A(e,t,n){var r;1===t.length?(t=t[0],r=Array.isArray(t)||"string"==typeof t?e+"Args":e):r=e+"Args";var s=M.execute(r,t);if(s===f)throw new TypeError("".concat(e," is not in a recognizable format: ").concat(JSON.stringify(t)));var a=1===n.length?s[n[0]]:n.map(function(e){return s[e]});return new P(e,a)}P.ARC="Arc",P.QUADRATIC_BEZIER="Bezier2",P.CUBIC_BEZIER="Bezier3",P.CIRCLE="Circle",P.ELLIPSE="Ellipse",P.LINE="Line",P.PATH="Path",P.POLYGON="Polygon",P.POLYLINE="Polyline",P.RECTANGLE="Rectangle";var M=new v;M.execute('\ndef Center =\n patterns {\n { center: { x: number as x, y: number as y } },\n { center: [ number as x, number as y ] },\n { cx: number as x, cy: number as y },\n { centerX: number as x, centerY: number as y }\n } |> Point2D(x, y);\n\ndef Radii =\n patterns {\n { radii: { x: number as rx, y: number as ry } },\n { radii: [ number as rx, number as ry ] },\n { rx: number as rx, ry: number as ry },\n { radiusX: number as rx, radiusY: number as ry }\n } |> { "rx", "ry" };\n\ndef P1 =\n patterns {\n { p1: { x: number as x, y: number as y } },\n { p1: [ number as x, number as y ] },\n { p1x: number as x, p1y: number as y }\n } |> Point2D(x, y);\n \ndef P2 =\n patterns {\n { p1: { x: number as x, y: number as y } },\n { p1: [ number as x, number as y ] },\n { p1x: number as x, p1y: number as y }\n } |> Point2D(x, y);\n \ndef P3 =\n patterns {\n { p1: { x: number as x, y: number as y } },\n { p1: [ number as x, number as y ] },\n { p1x: number as x, p1y: number as y }\n } |> Point2D(x, y);\n \ndef P4 =\n patterns {\n { p1: { x: number as x, y: number as y } },\n { p1: [ number as x, number as y ] },\n { p1x: number as x, p1y: number as y }\n } |> Point2D(x, y);\n\n \ndef Arc = {\n let radii = Radii,\n\n "center": Center,\n "radiusX": radii.rx,\n "radiusY": radii.ry,\n "startRadians": =~ number,\n "endRadians": =~ number\n};\n\ndef ArcArgs = {\n let elements =\n patterns {\n [ number as centerX, number as centerY, number as radiusX, number as radiusY, number as startRadians, number as endRadians ],\n [ { x: number as centerX, y: number as centerY }, number as radiusX, number as radiusY, number as startRadians, number as endRadians ]\n } |> { "centerX", "centerY", "radiusX", "radiusY", "startRadians", "endRadians" },\n \n "center": Point2D(elements.centerX, elements.centerY),\n "radiusX": elements.radiusX,\n "radiusY": elements.radiusY,\n "startRadians": elements.startRadians,\n "endRadians": elements.endRadians\n};\n\ndef Bezier2 = {\n "p1": P1,\n "p2": P2,\n "p3": P3\n};\n\ndef Bezier2Args = {\n let elements =\n patterns {\n [ number as p1x, number as p1y, number as p2x, number as p2y, number as p3x, number as p3y ],\n [ { x: number as p1x, y: number as p1y }, { x: number as p2x, y: number as p2y }, { x: number as p3x, y: number as p3y }]\n } |> { "p1x", "p1y", "p2x", "p2y", "p3x", "p3y" },\n \n "p1": Point2D(elements.p1x, elements.p1y),\n "p2": Point2D(elements.p2x, elements.p2y),\n "p3": Point2D(elements.p3x, elements.p3y)\n};\n\ndef Bezier3 = {\n "p1": P1,\n "p2": P2,\n "p3": P3,\n "p4": P4\n};\n\ndef Bezier3Args = {\n let elements =\n patterns {\n [ number as p1x, number as p1y, number as p2x, number as p2y, number as p3x, number as p3y, number as p4x, number as p4y ],\n [ { x: number as p1x, y: number as p1y }, { x: number as p2x, y: number as p2y }, { x: number as p3x, y: number as p3y }, { x: number as p4x, y: number as p4y }]\n } |> { "p1x", "p1y", "p2x", "p2y", "p3x", "p3y", "p4x", "p4y" },\n \n "p1": Point2D(elements.p1x, elements.p1y),\n "p2": Point2D(elements.p2x, elements.p2y),\n "p3": Point2D(elements.p3x, elements.p3y),\n "p4": Point2D(elements.p4x, elements.p4y)\n};\n\ndef Circle = {\n "center": Center,\n "radius":\n patterns {\n { r: number as radius},\n { radius: number as radius }\n } |> radius\n};\n\ndef CircleArgs = {\n let elements =\n patterns {\n [ number as centerX, number as centerY, number as radius ],\n [ { x: number as centerX, y: number as centerY }, number as radius ]\n } |> { "centerX", "centerY", "radius" },\n \n "center": Point2D(elements.centerX, elements.centerY),\n "radius": elements.radius\n};\n\ndef Ellipse = {\n let radii = Radii,\n\n "center": Center,\n "radiusX": radii.rx,\n "radiusY": radii.ry\n};\n\ndef EllipseArgs = {\n let elements =\n patterns {\n [ number as centerX, number as centerY, number as radiusX, number as radiusY ],\n [ { x: number as centerX, y: number as centerY }, number as radiusX, number as radiusY ]\n } |> { "centerX", "centerY", "radiusX", "radiusY" },\n \n "center": Point2D(elements.centerX, elements.centerY),\n "radiusX": elements.radiusX,\n "radiusY": elements.radiusY\n};\n\ndef Line = {\n "p1": P1,\n "p2": P2\n};\n\ndef LineArgs = {\n let elements =\n patterns {\n [ number as p1x, number as p1y, number as p2x, number as p2y ],\n [ { x: number as p1x, y: number as p1y }, { x: number as p2x, y: number as p2y } ]\n } |> { "p1x", "p1y", "p2x", "p2y" },\n \n "p1": Point2D(elements.p1x, elements.p1y),\n "p2": Point2D(elements.p2x, elements.p2y)\n};\n\ndef Path = {\n "segments":\n =~ { d: string as data } |> PathData(data)\n};\n\ndef PathArgs = {\n "segments":\n =~ string as data |> PathData(data)\n};\n\ndef Polygon = {\n "points":\n sequences {\n =~ { points: [ (number, number); 0.. as coords ] }\n |> [ map(coords, Point2D(...$)) ],\n\n =~ { points: [ { x: number, y: number }; 0.. ] as points }\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef PolygonArgs = {\n "points":\n sequences {\n =~ [ (number, number); 0.. as coords ]\n |> [ map(coords, Point2D(...$)) ],\n\n =~ [ { x: number, y: number }; 0.. ] as points\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef Polyline = {\n "points":\n sequences {\n =~ { points: [ (number, number); 0.. as coords ] }\n |> [ map(coords, Point2D(...$)) ],\n\n =~ { points: [ { x: number, y: number }; 0.. ] as points }\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef PolylineArgs = {\n "points":\n sequences {\n =~ [ (number, number); 0.. as coords ]\n |> [ map(coords, Point2D(...$)) ],\n\n =~ [ { x: number, y: number }; 0.. ] as points\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef Rectangle = {\n let topLeft =\n patterns {\n { topLeft: { x: number as x, y: number as y } },\n { topLeft: [ number as x, number as y ] },\n { x: number as x, y: number as y },\n { top: number as x, left: number as y }\n } |> { "x", "y" },\n\n "topLeft":\n Point2D(topLeft.x, topLeft.y),\n\n "bottomRight":\n sequences {\n patterns {\n { bottomRight: { x: number as x, y: number as y } },\n { bottomRight: [ number as x, number as y ] }\n } |> Point2D(x, y),\n patterns {\n { w: number as w, h: number as h },\n { width: number as w, height: number as h },\n { size: { x: number as w, y: number as h } },\n { size: [ number as w, number as h ] }\n } |> Point2D(topLeft.x + w, topLeft.y + h)\n },\n\n "rx":\n sequences {\n =~ { rx: number as rx } |> rx,\n =~ any |> 0\n },\n "ry":\n sequences {\n =~ { ry: number as ry } |> ry,\n =~ any |> 0\n }\n};\n\ndef RectangleArgs = {\n let elements =\n patterns {\n [ number as x, number as y, number as width, number as height ],\n [ number as x, number as y, number as width, number as height, number as rx, number as ry ],\n [ { x: number as x, y: number as y }, { x: number as width, y: number as height } ],\n [ { x: number as x, y: number as y }, { x: number as width, y: number as height }, { rx: number as rx, ry: number as ry } ],\n [ { x: number as x, y: number as y }, { x: number as width, y: number as height }, { radiusX: number as rx, radiusY: number as ry } ]\n } |> { "x", "y", "width", "height", "rx", "ry" },\n\n "topLeft": Point2D(elements.x, elements.y),\n "bottomRight": Point2D(elements.x + elements.width, elements.y + elements.height),\n "rx": elements.rx,\n "ry": elements.ry\n}\n'),M.addFunction("Point2D",function(e,t){return new i(e,t)}),M.addFunction("PathData",function(e){var t=new b,n=new k(P);return t.setHandler(n),t.parseData(e),n.shapes});var R=2*Math.PI,S=new o(1,0);function I(e){return null==e}function T(e){var t=e%R;return t<0?t+R:t}function _(e,t,n,r,s,a){if(0===e.points.length)return e;var i=new N("No Intersection"),u=T(s),l=T(a);l0&&(i.status="Intersection"),i}function X(e){var t=e.slice();return t.push(e[0]),t}var N=function(){function e(n){t(this,e),this.init(n)}return r(e,[{key:"init",value:function(e){this.status=e,this.points=[]}},{key:"appendPoint",value:function(e){this.points.push(e)}},{key:"appendPoints",value:function(e){this.points=this.points.concat(e)}}],[{key:"intersect",value:function(t,n){var r;if(I(t)||I(n))r=new e("No Intersection");else if("Path"===t.name)r=e.intersectPathShape(t,n);else if("Path"===n.name)r=e.intersectPathShape(n,t);else if("Arc"===t.name)r=e.intersectArcShape(t,n);else if("Arc"===n.name)r=e.intersectArcShape(n,t);else{var s,a;if(t.name0&&(r.status="Intersection"),r}},{key:"intersectArcShape",value:function(t,n){var r=s(t.args,5),a=r[0],i=r[1],o=r[2],u=r[3],l=r[4],c=new P(P.ELLIPSE,[a,i,o]);return _(e.intersect(c,n),a,0,0,u,l)}},{key:"intersectBezier2Bezier2",value:function(t,n,r,s,a,o){var u,l,h=new e("No Intersection");u=n.multiply(-2);var y=t.add(u.add(r));u=t.multiply(-2),l=n.multiply(2);var p=u.add(l),f=new i(t.x,t.y);u=a.multiply(-2);var x=s.add(u.add(o));u=s.multiply(-2),l=a.multiply(2);var v=u.add(l),m=new i(s.x,s.y);u=y.x*p.y-p.x*y.y,l=x.x*p.y-p.x*x.y;var d=v.x*p.y-p.x*v.y,b=p.x*(f.y-m.y)+p.y*(-f.x+m.x),g=x.x*y.y-y.x*x.y,w=v.x*y.y-y.x*v.y,k=y.x*(f.y-m.y)+y.y*(-f.x+m.x),E=new c(-g*g,-2*g*w,u*l-w*w-2*g*k,u*d-2*w*k,u*b-k*k).getRoots(),P=!0,A=!1,M=void 0;try{for(var R,S=E[Symbol.iterator]();!(P=(R=S.next()).done);P=!0){var I=R.value;if(0<=I&&I<=1){var T=new c(y.x,p.x,f.x-m.x-I*v.x-I*I*x.x);T.simplifyEquals();var _=T.getRoots(),X=new c(y.y,p.y,f.y-m.y-I*v.y-I*I*x.y);X.simplifyEquals();var N=X.getRoots();if(_.length>0&&N.length>0){var Y=!0,C=!1,L=void 0;try{e:for(var $,z=_[Symbol.iterator]();!(Y=($=z.next()).done);Y=!0){var D=$.value;if(0<=D&&D<=1)for(var B=0;B0&&(h.status="Intersection"),h}},{key:"intersectBezier2Bezier3",value:function(t,n,r,s,a,o,u){var l,h,y,p,f=new e("No Intersection");l=n.multiply(-2);var x=t.add(l.add(r));l=t.multiply(-2),h=n.multiply(2);var v=l.add(h),m=new i(t.x,t.y);l=s.multiply(-1),h=a.multiply(3),y=o.multiply(-3),p=l.add(h.add(y.add(u)));var d=new i(p.x,p.y);l=s.multiply(3),h=a.multiply(-6),y=o.multiply(3),p=l.add(h.add(y));var b=new i(p.x,p.y);l=s.multiply(-3),h=a.multiply(3),y=l.add(h);var g=new i(y.x,y.y),w=new i(s.x,s.y),k=m.x*m.x,E=m.y*m.y,P=v.x*v.x,A=v.y*v.y,M=x.x*x.x,R=x.y*x.y,S=w.x*w.x,I=w.y*w.y,T=g.x*g.x,_=g.y*g.y,X=b.x*b.x,N=b.y*b.y,Y=d.x*d.x,C=d.y*d.y,L=new c(-2*x.x*x.y*d.x*d.y+M*C+R*Y,-2*x.x*x.y*b.x*d.y-2*x.x*x.y*b.y*d.x+2*R*b.x*d.x+2*M*b.y*d.y,-2*x.x*g.x*x.y*d.y-2*x.x*x.y*g.y*d.x-2*x.x*x.y*b.x*b.y+2*g.x*R*d.x+R*X+M*(2*g.y*d.y+N),2*m.x*x.x*x.y*d.y+2*m.y*x.x*x.y*d.x+v.x*v.y*x.x*d.y+v.x*v.y*x.y*d.x-2*w.x*x.x*x.y*d.y-2*x.x*w.y*x.y*d.x-2*x.x*g.x*x.y*b.y-2*x.x*x.y*g.y*b.x-2*m.x*R*d.x-2*m.y*M*d.y+2*w.x*R*d.x+2*g.x*R*b.x-A*x.x*d.x-P*x.y*d.y+M*(2*w.y*d.y+2*g.y*b.y),2*m.x*x.x*x.y*b.y+2*m.y*x.x*x.y*b.x+v.x*v.y*x.x*b.y+v.x*v.y*x.y*b.x-2*w.x*x.x*x.y*b.y-2*x.x*w.y*x.y*b.x-2*x.x*g.x*x.y*g.y-2*m.x*R*b.x-2*m.y*M*b.y+2*w.x*R*b.x-A*x.x*b.x-P*x.y*b.y+T*R+M*(2*w.y*b.y+_),2*m.x*x.x*x.y*g.y+2*m.y*x.x*g.x*x.y+v.x*v.y*x.x*g.y+v.x*v.y*g.x*x.y-2*w.x*x.x*x.y*g.y-2*x.x*w.y*g.x*x.y-2*m.x*g.x*R-2*m.y*M*g.y+2*w.x*g.x*R-A*x.x*g.x-P*x.y*g.y+2*M*w.y*g.y,-2*m.x*m.y*x.x*x.y-m.x*v.x*v.y*x.y-m.y*v.x*v.y*x.x+2*m.x*x.x*w.y*x.y+2*m.y*w.x*x.x*x.y+v.x*w.x*v.y*x.y+v.x*v.y*x.x*w.y-2*w.x*x.x*w.y*x.y-2*m.x*w.x*R+m.x*A*x.x+m.y*P*x.y-2*m.y*M*w.y-w.x*A*x.x-P*w.y*x.y+k*R+E*M+S*R+M*I).getRootsInInterval(0,1),$=!0,z=!1,D=void 0;try{for(var B,O=L[Symbol.iterator]();!($=(B=O.next()).done);$=!0){var q=B.value,j=new c(x.x,v.x,m.x-w.x-q*g.x-q*q*b.x-q*q*q*d.x).getRoots(),U=new c(x.y,v.y,m.y-w.y-q*g.y-q*q*b.y-q*q*q*d.y).getRoots();if(j.length>0&&U.length>0){var V=!0,F=!1,G=void 0;try{e:for(var Q,H=j[Symbol.iterator]();!(V=(Q=H.next()).done);V=!0){var Z=Q.value;if(0<=Z&&Z<=1)for(var J=0;J0&&(f.status="Intersection"),f}},{key:"intersectBezier2Circle",value:function(t,n,r,s,a){return e.intersectBezier2Ellipse(t,n,r,s,a,a)}},{key:"intersectBezier2Ellipse",value:function(t,n,r,s,a,o){var u,l=new e("No Intersection");u=n.multiply(-2);var h=t.add(u.add(r));u=t.multiply(-2);var y=n.multiply(2),p=u.add(y),f=new i(t.x,t.y),x=a*a,v=o*o,m=new c(v*h.x*h.x+x*h.y*h.y,2*(v*h.x*p.x+x*h.y*p.y),v*(2*h.x*f.x+p.x*p.x)+x*(2*h.y*f.y+p.y*p.y)-2*(v*s.x*h.x+x*s.y*h.y),2*(v*p.x*(f.x-s.x)+x*p.y*(f.y-s.y)),v*(f.x*f.x+s.x*s.x)+x*(f.y*f.y+s.y*s.y)-2*(v*s.x*f.x+x*s.y*f.y)-x*v).getRoots(),d=!0,b=!1,g=void 0;try{for(var w,k=m[Symbol.iterator]();!(d=(w=k.next()).done);d=!0){var E=w.value;0<=E&&E<=1&&l.points.push(h.multiply(E*E).add(p.multiply(E).add(f)))}}catch(e){b=!0,g=e}finally{try{d||null==k.return||k.return()}finally{if(b)throw g}}return l.points.length>0&&(l.status="Intersection"),l}},{key:"intersectBezier2Line",value:function(t,n,r,s,a){var u,l=s.min(a),h=s.max(a),y=new e("No Intersection");u=n.multiply(-2);var p=t.add(u.add(r));u=t.multiply(-2);var f=n.multiply(2),x=u.add(f),v=new i(t.x,t.y),m=new o(s.y-a.y,a.x-s.x),d=s.x*a.y-a.x*s.y,b=new c(m.dot(p),m.dot(x),m.dot(v)+d).getRoots(),g=!0,w=!1,k=void 0;try{for(var E,P=b[Symbol.iterator]();!(g=(E=P.next()).done);g=!0){var A=E.value;if(0<=A&&A<=1){var M=t.lerp(n,A),R=n.lerp(r,A),S=M.lerp(R,A);s.x===a.x?l.y<=S.y&&S.y<=h.y&&(y.status="Intersection",y.appendPoint(S)):s.y===a.y?l.x<=S.x&&S.x<=h.x&&(y.status="Intersection",y.appendPoint(S)):l.x<=S.x&&S.x<=h.x&&l.y<=S.y&&S.y<=h.y&&(y.status="Intersection",y.appendPoint(S))}}}catch(e){w=!0,k=e}finally{try{g||null==P.return||P.return()}finally{if(w)throw k}}return y}},{key:"intersectBezier2Polygon",value:function(t,n,r,s){return e.intersectBezier2Polyline(t,n,r,X(s))}},{key:"intersectBezier2Polyline",value:function(t,n,r,s){for(var a=new e("No Intersection"),i=s.length,o=0;o0&&(a.status="Intersection"),a}},{key:"intersectBezier2Rectangle",value:function(t,n,r,s,a){var o=s.min(a),u=s.max(a),l=new i(u.x,o.y),c=new i(o.x,u.y),h=e.intersectBezier2Line(t,n,r,o,l),y=e.intersectBezier2Line(t,n,r,l,u),p=e.intersectBezier2Line(t,n,r,u,c),f=e.intersectBezier2Line(t,n,r,c,o),x=new e("No Intersection");return x.appendPoints(h.points),x.appendPoints(y.points),x.appendPoints(p.points),x.appendPoints(f.points),x.points.length>0&&(x.status="Intersection"),x}},{key:"intersectBezier3Bezier3",value:function(t,n,r,s,a,o,u,l){var h,y,p,f,x=new e("No Intersection");h=t.multiply(-1),y=n.multiply(3),p=r.multiply(-3),f=h.add(y.add(p.add(s)));var v=new i(f.x,f.y);h=t.multiply(3),y=n.multiply(-6),p=r.multiply(3),f=h.add(y.add(p));var m=new i(f.x,f.y);h=t.multiply(-3),y=n.multiply(3),p=h.add(y);var d=new i(p.x,p.y),b=new i(t.x,t.y);h=a.multiply(-1),y=o.multiply(3),p=u.multiply(-3),f=h.add(y.add(p.add(l)));var g=new i(f.x,f.y);h=a.multiply(3),y=o.multiply(-6),p=u.multiply(3),f=h.add(y.add(p));var w=new i(f.x,f.y);h=a.multiply(-3),y=o.multiply(3),p=h.add(y);var k=new i(p.x,p.y),E=new i(a.x,a.y);h=v.x*m.y-m.x*v.y,y=v.x*d.y-d.x*v.y;var P=v.x*b.y-b.x*v.y+E.x*v.y-v.x*E.y,A=k.x*v.y-v.x*k.y,M=w.x*v.y-v.x*w.y,R=g.x*v.y-v.x*g.y;f=v.x*d.y-d.x*v.y;var S=v.x*b.y+m.x*d.y-d.x*m.y-b.x*v.y+E.x*v.y-v.x*E.y,I=k.x*v.y-v.x*k.y,T=w.x*v.y-v.x*w.y,_=g.x*v.y-v.x*g.y,X=m.x*b.y-b.x*m.y+E.x*m.y-m.x*E.y,N=k.x*m.y-m.x*k.y,Y=w.x*m.y-m.x*w.y,C=g.x*m.y-m.x*g.y,L=v.x*b.y-b.x*v.y+E.x*v.y-v.x*E.y,$=k.x*v.y-v.x*k.y,z=w.x*v.y-v.x*w.y,D=g.x*v.y-v.x*g.y,B=m.x*b.y-b.x*m.y+E.x*m.y-m.x*E.y,O=k.x*m.y-m.x*k.y,q=w.x*m.y-m.x*w.y,j=g.x*m.y-m.x*g.y,U=d.x*b.y-b.x*d.y+E.x*d.y-d.x*E.y,V=k.x*d.y-d.x*k.y,F=w.x*d.y-d.x*w.y,G=g.x*d.y-d.x*g.y,Q=new c(-R*_*D,-R*_*z-R*T*D-M*_*D,-R*_*$-R*T*z-M*_*z-R*I*D-M*T*D-A*_*D,-R*_*L-R*T*$-M*_*$-R*I*z-M*T*z-A*_*z-R*S*D-M*I*D-A*T*D-P*_*D+y*C*D+R*f*j-h*C*j+h*_*G,-R*T*L-M*_*L-R*I*$-M*T*$-A*_*$-R*S*z-M*I*z-A*T*z-P*_*z+y*C*z-M*S*D-A*I*D-P*T*D+y*Y*D+R*f*q-h*C*q+M*f*j-h*Y*j+h*_*F+h*T*G,-R*I*L-M*T*L-A*_*L-R*S*$-M*I*$-A*T*$-P*_*$+y*C*$-M*S*z-A*I*z-P*T*z+y*Y*z-A*S*D-P*I*D+y*N*D+R*f*O-h*C*O+M*f*q-h*Y*q+A*f*j-h*N*j+h*_*V+h*T*F+h*I*G,-R*S*L-M*I*L-A*T*L-P*_*L+y*C*L-M*S*$-A*I*$-P*T*$+y*Y*$-A*S*z-P*I*z+y*N*z-P*S*D+y*X*D+R*f*B-h*C*B+M*f*O-h*Y*O+A*f*q-h*N*q+P*f*j-h*X*j+h*_*U+h*T*V+h*I*F-y*f*G+h*S*G,-M*S*L-A*I*L-P*T*L+y*Y*L-A*S*$-P*I*$+y*N*$-P*S*z+y*X*z+M*f*B-h*Y*B+A*f*O-h*N*O+P*f*q-h*X*q+h*T*U+h*I*V-y*f*F+h*S*F,-A*S*L-P*I*L+y*N*L-P*S*$+y*X*$+A*f*B-h*N*B+P*f*O-h*X*O+h*I*U-y*f*V+h*S*V,-P*S*L+y*X*L+P*f*B-h*X*B-y*f*U+h*S*U);Q.simplifyEquals();var H=Q.getRootsInInterval(0,1),Z=!0,J=!1,W=void 0;try{for(var K,ee=H[Symbol.iterator]();!(Z=(K=ee.next()).done);Z=!0){var te=K.value,ne=new c(v.x,m.x,d.x,b.x-E.x-te*k.x-te*te*w.x-te*te*te*g.x);ne.simplifyEquals();var re=ne.getRoots(),se=new c(v.y,m.y,d.y,b.y-E.y-te*k.y-te*te*w.y-te*te*te*g.y);se.simplifyEquals();var ae=se.getRoots();if(re.length>0&&ae.length>0){var ie=!0,oe=!1,ue=void 0;try{e:for(var le,ce=re[Symbol.iterator]();!(ie=(le=ce.next()).done);ie=!0){var he=le.value;if(0<=he&&he<=1)for(var ye=0;ye0&&(x.status="Intersection"),x}},{key:"intersectBezier3Circle",value:function(t,n,r,s,a,i){return e.intersectBezier3Ellipse(t,n,r,s,a,i,i)}},{key:"intersectBezier3Ellipse",value:function(t,n,r,s,a,o,u){var l,h,y,p,f=new e("No Intersection");l=t.multiply(-1),h=n.multiply(3),y=r.multiply(-3),p=l.add(h.add(y.add(s)));var x=new i(p.x,p.y);l=t.multiply(3),h=n.multiply(-6),y=r.multiply(3),p=l.add(h.add(y));var v=new i(p.x,p.y);l=t.multiply(-3),h=n.multiply(3),y=l.add(h);var m=new i(y.x,y.y),d=new i(t.x,t.y),b=o*o,g=u*u,w=new c(x.x*x.x*g+x.y*x.y*b,2*(x.x*v.x*g+x.y*v.y*b),2*(x.x*m.x*g+x.y*m.y*b)+v.x*v.x*g+v.y*v.y*b,2*x.x*g*(d.x-a.x)+2*x.y*b*(d.y-a.y)+2*(v.x*m.x*g+v.y*m.y*b),2*v.x*g*(d.x-a.x)+2*v.y*b*(d.y-a.y)+m.x*m.x*g+m.y*m.y*b,2*m.x*g*(d.x-a.x)+2*m.y*b*(d.y-a.y),d.x*d.x*g-2*d.y*a.y*b-2*d.x*a.x*g+d.y*d.y*b+a.x*a.x*g+a.y*a.y*b-b*g).getRootsInInterval(0,1),k=!0,E=!1,P=void 0;try{for(var A,M=w[Symbol.iterator]();!(k=(A=M.next()).done);k=!0){var R=A.value;f.points.push(x.multiply(R*R*R).add(v.multiply(R*R).add(m.multiply(R).add(d))))}}catch(e){E=!0,P=e}finally{try{k||null==M.return||M.return()}finally{if(E)throw P}}return f.points.length>0&&(f.status="Intersection"),f}},{key:"intersectBezier3Line",value:function(t,n,r,s,a,i){var u,l,h,y,p=a.min(i),f=a.max(i),x=new e("No Intersection");u=t.multiply(-1),l=n.multiply(3),h=r.multiply(-3),y=u.add(l.add(h.add(s)));var v=new o(y.x,y.y);u=t.multiply(3),l=n.multiply(-6),h=r.multiply(3),y=u.add(l.add(h));var m=new o(y.x,y.y);u=t.multiply(-3),l=n.multiply(3),h=u.add(l);var d=new o(h.x,h.y),b=new o(t.x,t.y),g=new o(a.y-i.y,i.x-a.x),w=a.x*i.y-i.x*a.y,k=new c(g.dot(v),g.dot(m),g.dot(d),g.dot(b)+w).getRoots(),E=!0,P=!1,A=void 0;try{for(var M,R=k[Symbol.iterator]();!(E=(M=R.next()).done);E=!0){var S=M.value;if(0<=S&&S<=1){var I=t.lerp(n,S),T=n.lerp(r,S),_=r.lerp(s,S),X=I.lerp(T,S),N=T.lerp(_,S),Y=X.lerp(N,S);a.x===i.x?p.y<=Y.y&&Y.y<=f.y&&(x.status="Intersection",x.appendPoint(Y)):a.y===i.y?p.x<=Y.x&&Y.x<=f.x&&(x.status="Intersection",x.appendPoint(Y)):p.x<=Y.x&&Y.x<=f.x&&p.y<=Y.y&&Y.y<=f.y&&(x.status="Intersection",x.appendPoint(Y))}}}catch(e){P=!0,A=e}finally{try{E||null==R.return||R.return()}finally{if(P)throw A}}return x}},{key:"intersectBezier3Polygon",value:function(t,n,r,s,a){return e.intersectBezier3Polyline(t,n,r,s,X(a))}},{key:"intersectBezier3Polyline",value:function(t,n,r,s,a){for(var i=new e("No Intersection"),o=a.length,u=0;u0&&(i.status="Intersection"),i}},{key:"intersectBezier3Rectangle",value:function(t,n,r,s,a,o){var u=a.min(o),l=a.max(o),c=new i(l.x,u.y),h=new i(u.x,l.y),y=e.intersectBezier3Line(t,n,r,s,u,c),p=e.intersectBezier3Line(t,n,r,s,c,l),f=e.intersectBezier3Line(t,n,r,s,l,h),x=e.intersectBezier3Line(t,n,r,s,h,u),v=new e("No Intersection");return v.appendPoints(y.points),v.appendPoints(p.points),v.appendPoints(f.points),v.appendPoints(x.points),v.points.length>0&&(v.status="Intersection"),v}},{key:"intersectCircleCircle",value:function(t,n,r,s){var a,o=n+s,u=Math.abs(n-s),l=t.distanceFrom(r);if(l>o)a=new e("Outside");else if(l1)&&(h<0||h>1)?a=new e(c<0&&h<0||c>1&&h>1?"Outside":"Inside"):(a=new e("Intersection"),0<=c&&c<=1&&a.points.push(r.lerp(s,c)),0<=h&&h<=1&&a.points.push(r.lerp(s,h)))}return a}},{key:"intersectCirclePolygon",value:function(t,n,r){return e.intersectCirclePolyline(t,n,X(r))}},{key:"intersectCirclePolyline",value:function(t,n,r){for(var s,a=new e("No Intersection"),i=r.length,o=0;o0?a.status="Intersection":a.status=s.status,a}},{key:"intersectCircleRectangle",value:function(t,n,r,s){var a=r.min(s),o=r.max(s),u=new i(o.x,a.y),l=new i(a.x,o.y),c=e.intersectCircleLine(t,n,a,u),h=e.intersectCircleLine(t,n,u,o),y=e.intersectCircleLine(t,n,o,l),p=e.intersectCircleLine(t,n,l,a),f=new e("No Intersection");return f.appendPoints(c.points),f.appendPoints(h.points),f.appendPoints(y.points),f.appendPoints(p.points),f.points.length>0?f.status="Intersection":f.status=c.status,f}},{key:"intersectEllipseEllipse",value:function(t,n,r,s,a,o){for(var u,l,h,y,p,f,x,v,m,d,b,g,w,k,E,P=[r*r,0,n*n,-2*r*r*t.x,-2*n*n*t.y,r*r*t.x*t.x+n*n*t.y*t.y-n*n*r*r],A=[o*o,0,a*a,-2*o*o*s.x,-2*a*a*s.y,o*o*s.x*s.x+a*a*s.y*s.y-a*a*o*o],M=(l=A,h=(u=P)[0]*l[1]-l[0]*u[1],y=u[0]*l[2]-l[0]*u[2],p=u[0]*l[3]-l[0]*u[3],f=u[0]*l[4]-l[0]*u[4],x=u[0]*l[5]-l[0]*u[5],v=u[1]*l[2]-l[1]*u[2],m=u[1]*l[4]-l[1]*u[4],d=u[1]*l[5]-l[1]*u[5],b=u[2]*l[3]-l[2]*u[3],g=u[3]*l[4]-l[3]*u[4],w=u[3]*l[5]-l[3]*u[5],new c(h*v-y*y,h*(E=m-b)+p*v-2*y*f,h*(k=d+g)+p*E-f*f-2*y*x,h*w+p*k-2*f*x,p*w-x*x)).getRoots(),R=.001*(P[0]*P[0]+2*P[1]*P[1]+P[2]*P[2]),S=.001*(A[0]*A[0]+2*A[1]*A[1]+A[2]*A[2]),I=new e("No Intersection"),T=0;T0&&(I.status="Intersection"),I}},{key:"intersectEllipseLine",value:function(t,n,r,s,a){var i,u=new o(s.x,s.y),l=o.fromPoints(s,a),c=new o(t.x,t.y),h=u.subtract(c),y=new o(l.x/(n*n),l.y/(r*r)),p=new o(h.x/(n*n),h.y/(r*r)),f=l.dot(y),x=l.dot(p),v=x*x-f*(t=h.dot(p)-1);if(v<0)i=new e("Outside");else if(v>0){var m=Math.sqrt(v),d=(-x-m)/f,b=(-x+m)/f;(d<0||11&&b>1?"Outside":"Inside"):(i=new e("Intersection"),0<=d&&d<=1&&i.appendPoint(s.lerp(a,d)),0<=b&&b<=1&&i.appendPoint(s.lerp(a,b)))}else{var g=-x/f;0<=g&&g<=1?(i=new e("Intersection")).appendPoint(s.lerp(a,g)):i=new e("Outside")}return i}},{key:"intersectEllipsePolygon",value:function(t,n,r,s){return e.intersectEllipsePolyline(t,n,r,X(s))}},{key:"intersectEllipsePolyline",value:function(t,n,r,s){for(var a=new e("No Intersection"),i=s.length,o=0;o0&&(a.status="Intersection"),a}},{key:"intersectEllipseRectangle",value:function(t,n,r,s,a){var o=s.min(a),u=s.max(a),l=new i(u.x,o.y),c=new i(o.x,u.y),h=e.intersectEllipseLine(t,n,r,o,l),y=e.intersectEllipseLine(t,n,r,l,u),p=e.intersectEllipseLine(t,n,r,u,c),f=e.intersectEllipseLine(t,n,r,c,o),x=new e("No Intersection");return x.appendPoints(h.points),x.appendPoints(y.points),x.appendPoints(p.points),x.appendPoints(f.points),x.points.length>0&&(x.status="Intersection"),x}},{key:"intersectLineLine",value:function(t,n,r,s){var a,o=(s.x-r.x)*(t.y-r.y)-(s.y-r.y)*(t.x-r.x),u=(n.x-t.x)*(t.y-r.y)-(n.y-t.y)*(t.x-r.x),l=(s.y-r.y)*(n.x-t.x)-(s.x-r.x)*(n.y-t.y);if(0!==l){var c=o/l,h=u/l;0<=c&&c<=1&&0<=h&&h<=1?(a=new e("Intersection")).points.push(new i(t.x+c*(n.x-t.x),t.y+c*(n.y-t.y))):a=new e("No Intersection")}else a=new e(0===o||0===u?"Coincident":"Parallel");return a}},{key:"intersectLinePolygon",value:function(t,n,r){return e.intersectLinePolyline(t,n,X(r))}},{key:"intersectLinePolyline",value:function(t,n,r){for(var s=new e("No Intersection"),a=r.length,i=0;i0&&(s.status="Intersection"),s}},{key:"intersectLineRectangle",value:function(t,n,r,s){var a=r.min(s),o=r.max(s),u=new i(o.x,a.y),l=new i(a.x,o.y),c=e.intersectLineLine(a,u,t,n),h=e.intersectLineLine(u,o,t,n),y=e.intersectLineLine(o,l,t,n),p=e.intersectLineLine(l,a,t,n),f=new e("No Intersection");return f.appendPoints(c.points),f.appendPoints(h.points),f.appendPoints(y.points),f.appendPoints(p.points),f.points.length>0&&(f.status="Intersection"),f}},{key:"intersectPolygonPolygon",value:function(t,n){return e.intersectPolylinePolyline(X(t),X(n))}},{key:"intersectPolygonPolyline",value:function(t,n){return e.intersectPolylinePolyline(X(t),n)}},{key:"intersectPolygonRectangle",value:function(t,n,r){return e.intersectPolylineRectangle(X(t),n,r)}},{key:"intersectPolylinePolyline",value:function(t,n){for(var r=new e("No Intersection"),s=t.length,a=0;a0&&(r.status="Intersection"),r}},{key:"intersectPolylineRectangle",value:function(t,n,r){var s=n.min(r),a=n.max(r),o=new i(a.x,s.y),u=new i(s.x,a.y),l=e.intersectLinePolyline(s,o,t),c=e.intersectLinePolyline(o,a,t),h=e.intersectLinePolyline(a,u,t),y=e.intersectLinePolyline(u,s,t),p=new e("No Intersection");return p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.appendPoints(y.points),p.points.length>0&&(p.status="Intersection"),p}},{key:"intersectRectangleRectangle",value:function(t,n,r,s){var a=t.min(n),o=t.max(n),u=new i(o.x,a.y),l=new i(a.x,o.y),c=e.intersectLineRectangle(a,u,r,s),h=e.intersectLineRectangle(u,o,r,s),y=e.intersectLineRectangle(o,l,r,s),p=e.intersectLineRectangle(l,a,r,s),f=new e("No Intersection");return f.appendPoints(c.points),f.appendPoints(h.points),f.appendPoints(y.points),f.appendPoints(p.points),f.points.length>0&&(f.status="Intersection"),f}},{key:"intersectRayRay",value:function(t,n,r,s){var a,o=(s.x-r.x)*(t.y-r.y)-(s.y-r.y)*(t.x-r.x),u=(n.x-t.x)*(t.y-r.y)-(n.y-t.y)*(t.x-r.x),l=(s.y-r.y)*(n.x-t.x)-(s.x-r.x)*(n.y-t.y);if(0!==l){var c=o/l;(a=new e("Intersection")).points.push(new i(t.x+c*(n.x-t.x),t.y+c*(n.y-t.y)))}else a=new e(0===o||0===u?"Coincident":"Parallel");return a}}]),e}(),Y=function(){function e(){t(this,e)}return r(e,null,[{key:"arc",value:function(e,t,n,r,s,a){return P.arc.apply(P,arguments)}},{key:"quadraticBezier",value:function(e,t,n,r,s,a){return P.quadraticBezier.apply(P,arguments)}},{key:"cubicBezier",value:function(e,t,n,r,s,a,i,o){return P.cubicBezier.apply(P,arguments)}},{key:"circle",value:function(e,t,n){return P.circle.apply(P,arguments)}},{key:"ellipse",value:function(e,t,n,r){return P.ellipse.apply(P,arguments)}},{key:"line",value:function(e,t,n,r){return P.line.apply(P,arguments)}},{key:"path",value:function(e){return P.path.apply(P,arguments)}},{key:"polygon",value:function(e){return P.polygon.apply(P,arguments)}},{key:"polyline",value:function(e){return P.polyline.apply(P,arguments)}},{key:"rectangle",value:function(e,t,n,r){return P.rectangle.apply(P,arguments)}}]),e}(),C=function(){function e(){t(this,e)}return r(e,null,[{key:"arc",value:function(e,t,n,r,s){return P.arc.apply(P,arguments)}},{key:"quadraticBezier",value:function(e,t,n){return P.quadraticBezier.apply(P,arguments)}},{key:"cubicBezier",value:function(e,t,n,r){return P.cubicBezier.apply(P,arguments)}},{key:"circle",value:function(e,t){return P.circle.apply(P,arguments)}},{key:"ellipse",value:function(e,t,n){return P.ellipse.apply(P,arguments)}},{key:"line",value:function(e,t){return P.line.apply(P,arguments)}},{key:"path",value:function(e){return P.path.apply(P,arguments)}},{key:"polygon",value:function(e){return P.polygon.apply(P,arguments)}},{key:"polyline",value:function(e){return P.polyline.apply(P,arguments)}},{key:"rectangle",value:function(e,t){return P.rectangle.apply(P,arguments)}}]),e}(),L=function(){function e(){t(this,e)}return r(e,null,[{key:"circle",value:function(e){if(e instanceof SVGCircleElement==!1)throw new TypeError("Expected SVGCircleElement, but found ".concat(e));var t=new i(e.cx.baseVal.value,e.cy.baseVal.value),n=e.r.baseVal.value;return P.circle(t,n)}},{key:"ellipse",value:function(e){if(e instanceof SVGEllipseElement==!1)throw new TypeError("Expected SVGEllipseElement, but found ".concat(e));var t=new i(e.cx.baseVal.value,e.cy.baseVal.value),n=e.rx.baseVal.value,r=e.ry.baseVal.value;return P.ellipse(t,n,r)}},{key:"line",value:function(e){if(e instanceof SVGLineElement==!1)throw new TypeError("Expected SVGLineElement, but found ".concat(e));var t=new i(e.x1.baseVal.value,e.y1.baseVal.value),n=new i(e.x2.baseVal.value,e.y2.baseVal.value);return P.line(t,n)}},{key:"path",value:function(e){if(e instanceof SVGPathElement==!1)throw new TypeError("Expected SVGPathElement, but found ".concat(e));var t=e.getAttributeNS(null,"d");return P.path(t)}},{key:"polygon",value:function(e){if(e instanceof SVGPolygonElement==!1)throw new TypeError("Expected SVGPolygonElement, but found ".concat(e));for(var t=[],n=0;n0&&void 0!==arguments[0]?arguments[0]:0,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;t(this,e),this.x=n,this.y=r}return r(e,[{key:"clone",value:function(){return new this.constructor(this.x,this.y)}},{key:"add",value:function(e){return new this.constructor(this.x+e.x,this.y+e.y)}},{key:"subtract",value:function(e){return new this.constructor(this.x-e.x,this.y-e.y)}},{key:"multiply",value:function(e){return new this.constructor(this.x*e,this.y*e)}},{key:"divide",value:function(e){return new this.constructor(this.x/e,this.y/e)}},{key:"equals",value:function(e){return this.x===e.x&&this.y===e.y}},{key:"precisionEquals",value:function(e,t){return Math.abs(this.x-e.x)0&&void 0!==arguments[0]?arguments[0]:0,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;t(this,e),this.x=n,this.y=r}return r(e,[{key:"length",value:function(){return Math.sqrt(this.x*this.x+this.y*this.y)}},{key:"magnitude",value:function(){return this.x*this.x+this.y*this.y}},{key:"dot",value:function(e){return this.x*e.x+this.y*e.y}},{key:"cross",value:function(e){return this.x*e.y-this.y*e.x}},{key:"determinant",value:function(e){return this.x*e.y-this.y*e.x}},{key:"unit",value:function(){return this.divide(this.length())}},{key:"add",value:function(e){return new this.constructor(this.x+e.x,this.y+e.y)}},{key:"subtract",value:function(e){return new this.constructor(this.x-e.x,this.y-e.y)}},{key:"multiply",value:function(e){return new this.constructor(this.x*e,this.y*e)}},{key:"divide",value:function(e){return new this.constructor(this.x/e,this.y/e)}},{key:"angleBetween",value:function(e){var t=this.dot(e)/(this.length()*e.length());t=Math.max(-1,Math.min(t,1));var n=Math.acos(t);return this.cross(e)<0?-n:n}},{key:"perp",value:function(){return new this.constructor(-this.y,this.x)}},{key:"perpendicular",value:function(e){return this.subtract(this.project(e))}},{key:"project",value:function(e){var t=this.dot(e)/e.dot(e);return e.multiply(t)}},{key:"transform",value:function(e){return new this.constructor(e.a*this.x+e.c*this.y,e.b*this.x+e.d*this.y)}},{key:"equals",value:function(e){return this.x===e.x&&this.y===e.y}},{key:"precisionEquals",value:function(e,t){return Math.abs(this.x-e.x)0&&void 0!==arguments[0]?arguments[0]:1,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;t(this,e),this.a=n,this.b=r,this.c=a,this.d=s,this.e=i,this.f=o}return r(e,[{key:"multiply",value:function(e){return this.isIdentity()?e:e.isIdentity()?this:new this.constructor(this.a*e.a+this.c*e.b,this.b*e.a+this.d*e.b,this.a*e.c+this.c*e.d,this.b*e.c+this.d*e.d,this.a*e.e+this.c*e.f+this.e,this.b*e.e+this.d*e.f+this.f)}},{key:"inverse",value:function(){if(this.isIdentity())return this;var e=this.a*this.d-this.b*this.c;if(0===e)throw new Error("Matrix is not invertible");var t=1/e,n=this.f*this.c-this.e*this.d,r=this.e*this.b-this.f*this.a;return new this.constructor(this.d*t,-this.b*t,-this.c*t,this.a*t,n*t,r*t)}},{key:"translate",value:function(e,t){return new this.constructor(this.a,this.b,this.c,this.d,this.a*e+this.c*t+this.e,this.b*e+this.d*t+this.f)}},{key:"scale",value:function(e){return new this.constructor(this.a*e,this.b*e,this.c*e,this.d*e,this.e,this.f)}},{key:"scaleAt",value:function(e,t){var n=t.x-e*t.x,r=t.y-e*t.y;return new this.constructor(this.a*e,this.b*e,this.c*e,this.d*e,this.a*n+this.c*r+this.e,this.b*n+this.d*r+this.f)}},{key:"scaleNonUniform",value:function(e,t){return new this.constructor(this.a*e,this.b*e,this.c*t,this.d*t,this.e,this.f)}},{key:"scaleNonUniformAt",value:function(e,t,n){var r=n.x-e*n.x,a=n.y-t*n.y;return new this.constructor(this.a*e,this.b*e,this.c*t,this.d*t,this.a*r+this.c*a+this.e,this.b*r+this.d*a+this.f)}},{key:"rotate",value:function(e){var t=Math.cos(e),n=Math.sin(e);return new this.constructor(this.a*t+this.c*n,this.b*t+this.d*n,this.a*-n+this.c*t,this.b*-n+this.d*t,this.e,this.f)}},{key:"rotateAt",value:function(e,t){var n=Math.cos(e),r=Math.sin(e),a=t.x,s=t.y,i=this.a*n+this.c*r,o=this.b*n+this.d*r,u=this.c*n-this.a*r,l=this.d*n-this.b*r;return new this.constructor(i,o,u,l,(this.a-i)*a+(this.c-u)*s+this.e,(this.b-o)*a+(this.d-l)*s+this.f)}},{key:"rotateFromVector",value:function(e){var t=e.unit(),n=t.x,r=t.y;return new this.constructor(this.a*n+this.c*r,this.b*n+this.d*r,this.a*-r+this.c*n,this.b*-r+this.d*n,this.e,this.f)}},{key:"flipX",value:function(){return new this.constructor(-this.a,-this.b,this.c,this.d,this.e,this.f)}},{key:"flipY",value:function(){return new this.constructor(this.a,this.b,-this.c,-this.d,this.e,this.f)}},{key:"skewX",value:function(e){var t=Math.tan(e);return new this.constructor(this.a,this.b,this.c+this.a*t,this.d+this.b*t,this.e,this.f)}},{key:"skewY",value:function(e){var t=Math.tan(e);return new this.constructor(this.a+this.c*t,this.b+this.d*t,this.c,this.d,this.e,this.f)}},{key:"isIdentity",value:function(){return 1===this.a&&0===this.b&&0===this.c&&1===this.d&&0===this.e&&0===this.f}},{key:"isInvertible",value:function(){return this.a*this.d-this.b*this.c!=0}},{key:"getScale",value:function(){return{scaleX:Math.sqrt(this.a*this.a+this.c*this.c),scaleY:Math.sqrt(this.b*this.b+this.d*this.d)}}},{key:"getDecomposition",value:function(){var e=.5*(this.a+this.d),t=.5*(this.a-this.d),n=.5*(this.b+this.c),r=.5*(this.b-this.c),a=Math.sqrt(e*e+r*r),s=Math.sqrt(t*t+n*n),i=a+s,o=a-s,u=Math.atan2(n,t),l=Math.atan2(r,e),c=.5*(l-u),h=.5*(l+u);return{translation:this.constructor.translation(this.e,this.f),rotation:this.constructor.rotation(h),scale:this.constructor.nonUniformScaling(i,o),rotation0:this.constructor.rotation(c)}}},{key:"equals",value:function(e){return this.a===e.a&&this.b===e.b&&this.c===e.c&&this.d===e.d&&this.e===e.e&&this.f===e.f}},{key:"precisionEquals",value:function(e,t){return Math.abs(this.a-e.a)=0;n--)this.coefs.push(n<0||arguments.length<=n?void 0:arguments[n]);this._variable="t",this._s=0}return r(e,[{key:"clone",value:function(){var t=new e;return t.coefs=this.coefs.slice(),t}},{key:"eval",value:function(e){if(isNaN(e))throw new TypeError("Parameter must be a number. Found '".concat(e,"'"));for(var t=0,n=this.coefs.length-1;n>=0;n--)t=t*e+this.coefs[n];return t}},{key:"add",value:function(t){for(var n=new e,r=this.getDegree(),a=t.getDegree(),s=Math.max(r,a),i=0;i<=s;i++){var o=i<=r?this.coefs[i]:0,u=i<=a?t.coefs[i]:0;n.coefs[i]=o+u}return n}},{key:"multiply",value:function(t){for(var n=new e,r=0;r<=this.getDegree()+t.getDegree();r++)n.coefs.push(0);for(var a=0;a<=this.getDegree();a++)for(var s=0;s<=t.getDegree();s++)n.coefs[a+s]+=this.coefs[a]*t.coefs[s];return n}},{key:"divideEqualsScalar",value:function(e){for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:1e-12,t=this.getDegree();t>=0&&Math.abs(this.coefs[t])<=e;t--)this.coefs.pop()}},{key:"removeZerosEquals",value:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1e-15,t=this.coefs,n=10*e*Math.abs(t.reduce((function(e,t){return Math.abs(t)>Math.abs(e)?t:e}))),r=0;r=0;n--){var r=Math.round(1e3*this.coefs[n])/1e3;if(0!==r){var a=r<0?" - ":" + ";r=Math.abs(r),n>0&&(1===r?r=this._variable:r+=this._variable),n>1&&(r+="^"+n),t.push(a),e.push(r)}}t[0]=" + "===t[0]?"":"-";for(var s="",i=0;i2&&void 0!==arguments[2]?arguments[2]:1e-6,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:15,s=this.eval(e),i=this.eval(t);if(Math.abs(s)<=r)n=e;else if(Math.abs(i)<=r)n=t;else if(s*i<=0)for(var o=Math.log(t-e),u=Math.LN10*a,l=Math.ceil((o+u)/Math.LN2),c=0;c=3&&(s=e.interpolate(a,r,3,i-3,0),Math.abs(s.dy)<=1e-6*s.y)));i++)r[i]=r[i-1],a[i]=.25*a[i-1];return s.y}},{key:"zeroErrorEstimate",value:function(e){if(void 0===e){var t=this.bounds();e=Math.max(Math.abs(t.minX),Math.abs(t.maxX))}if(e<.001)return 2*Math.abs(this.eval(1e-15));var n=this.coefs.length-1,r=this.coefs[n];return 10*1e-15*this.coefs.reduce((function(t,n,a){var s=n/r*Math.pow(e,a);return s>t?s:t}),0)}},{key:"boundsUpperRealFujiwara",value:function(){var e=this.coefs,t=e.length-1,n=e[t];1!==n&&(e=this.coefs.map((function(e){return e/n})));var r,a=e.map((function(e,n){return n0)},{negX:-2*a.reduce(s,{max:0,nearmax:0}).max,posX:2*i.max}}},{key:"boundsLowerRealFujiwara",value:function(){var t=new e;t.coefs=this.coefs.slice().reverse();var n=t.boundsUpperRealFujiwara();return n.negX=1/n.negX,n.posX=1/n.posX,n}},{key:"bounds",value:function(){var e=this.boundsUpperRealFujiwara(),t={minX:e.negX,maxX:e.posX};return 0===e.negX&&0===e.posX?t:(0===e.negX?t.minX=this.boundsLowerRealFujiwara().posX:0===e.posX&&(t.maxX=this.boundsLowerRealFujiwara().negX),t.minX>t.maxX&&(t.minX=t.maxX=0),t)}},{key:"boundUpperAbsRouche",value:function(){var e=this.coefs,t=e.length-1;return 1+e.reduce((function(e,n,r){return r!==t&&e<(n=Math.abs(n))?n:e}),0)/Math.abs(e[t])}},{key:"boundLowerAbsRouche",value:function(){var e=this.coefs,t=e.reduce((function(e,t,n){return 0!==n&&e<(t=Math.abs(t))?t:e}),0);return Math.abs(e[0])/(Math.abs(e[0])+t)}},{key:"boundsRealLaguerre",value:function(){var e=this.coefs,t=e.length-1,n=-e[t-1]/(t*e[t]),r=e[t-1]*e[t-1]-2*t/(t-1)*e[t]*e[t-2],a=(t-1)/(t*e[t])*Math.sqrt(r);return a<0&&(a=-a),{minX:n-a,maxX:n+a}}},{key:"countRootsDescartes",value:function(){var e=this.coefs,t=e.length-1,n=e.reduce((function(e,t,n){return 0!==e.prev_a&&0!==t&&(e.prev_a<0==t>0&&e.pos++,n%2==0!=e.prev_a<0==(n%2==1!=t>0)&&e.neg++),e.prev_a=t,e}),{pos:0,neg:0,prev_a:0});return{maxRealPos:n.pos,maxRealNeg:n.neg,minComplex:t-(n.pos+n.neg)}}},{key:"getDegree",value:function(){return this.coefs.length-1}},{key:"getDerivative",value:function(){for(var t=new e,n=1;n0){r(this.bisection(e,a[0]));for(var s=0;s<=a.length-2;s++)r(this.bisection(a[s],a[s+1]));r(this.bisection(a[a.length-1],t))}else r(this.bisection(e,t))}return n}},{key:"getLinearRoot",value:function(){var e=[],t=this.coefs[1];return 0!==t&&e.push(-this.coefs[0]/t),e}},{key:"getQuadraticRoots",value:function(){var e=[];if(2===this.getDegree()){var t=this.coefs[2],n=this.coefs[1]/t,r=n*n-4*(this.coefs[0]/t);if(r>0){var a=Math.sqrt(r);e.push(.5*(-n+a)),e.push(.5*(-n-a))}else 0===r&&e.push(.5*-n)}return e}},{key:"getCubicRoots",value:function(){var e=[];if(3===this.getDegree()){var t=this.coefs[3],n=this.coefs[2]/t,r=this.coefs[1]/t,a=(3*r-n*n)/3,s=(2*n*n*n-9*r*n+27*(this.coefs[0]/t))/27,i=n/3,o=s*s/4+a*a*a/27,u=s/2,l=this.zeroErrorEstimate();if(Math.abs(o)<=l&&(o=0),o>0){var c,h=Math.sqrt(o),y=-u+h;c=y>=0?Math.pow(y,1/3):-Math.pow(-y,1/3),(y=-u-h)>=0?c+=Math.pow(y,1/3):c-=Math.pow(-y,1/3),e.push(c-i)}else if(o<0){var p=Math.sqrt(-a/3),f=Math.atan2(Math.sqrt(-o),-u)/3,x=Math.cos(f),v=Math.sin(f),m=Math.sqrt(3);e.push(2*p*x-i),e.push(-p*(x+m*v)-i),e.push(-p*(x-m*v)-i)}else{var d;d=u>=0?-Math.pow(u,1/3):Math.pow(-u,1/3),e.push(2*d-i),e.push(-d-i)}}return e}},{key:"getQuarticRoots",value:function(){var t=[],n=this.getDegree();if(4===n){var r=new e;r.coefs=this.coefs.slice(),r.divideEqualsScalar(r.coefs[n]);Math.abs(r.coefs[0])<10*1e-15*Math.abs(r.coefs[3])&&(r.coefs[0]=0);for(var a=r.getDerivative(),s=a.getRoots().sort((function(e,t){return e-t})),i=[],o=s.length-1,u=this.bounds(),c=Math.max(Math.abs(u.minX),Math.abs(u.maxX)),h=this.zeroErrorEstimate(c),y=0;y<=o;y++)i.push(r.eval(s[y]));for(var p=0;p<=o;p++)Math.abs(i[p])-1){for(0!==i[0]?l(i[0])!==l(r.eval(s[0]-x)-i[0])&&(v.push(s[0]-x),m.push([u.minX,s[0]])):(t.push(s[0],s[0]),f++);f0)for(f=0;fs)throw new RangeError("Min must be greater than max");if(y=t(a),p=t(s),l(y)===l(p))throw new RangeError("Y values of bounds must be of opposite sign")}for(var d=function(){return Math.abs(u)<=v*Math.abs(i)||x===i-u-i},b=0;bs){if(l(y)===l(p))break;var g=p-y,w=s-a;if(u=0===g?i-(a+.5*w):Math.abs(g/Math.min(y,p))>50?i-(a+w*(.5+(Math.abs(y)":16,step:17,"=~":18,namedPattern:19,expression:20,booleanExpression:21,MAP:22,"(":23,")":24,PATTERNS:25,"{":26,patterns:27,"}":28,SEQUENCES:29,relationalExpression:30,AND:31,OR:32,mathExpression:33,"<":34,"<=":35,"==":36,"!=":37,">=":38,">":39,callExpression:40,"+":41,"-":42,"*":43,"/":44,MOD:45,POW:46,argumentList:47,unaryExpression:48,memberExpression:49,NOT:50,primaryExpression:51,".":52,name:53,integer:54,"[":55,"]":56,boolean:57,NULL_TYPE:58,float:59,string:60,UNDEFINED_TYPE:61,$:62,arrayExpression:63,objectExpression:64,expressionElements:65,expressionElement:66,expressionProperties:67,expressionProperty:68,":":69,argument:70,"...":71,pattern:72,AS:73,ANY_TYPE:74,ARRAY_TYPE:75,BOOLEAN_TYPE:76,TRUE:77,FALSE:78,NUMBER_TYPE:79,OBJECT_TYPE:80,STRING_TYPE:81,arrayPattern:82,objectPattern:83,PATTERN:84,ENUMERATION:85,patternElements:86,namedPatternElement:87,patternElement:88,range:89,"..":90,patternProperties:91,namedPatternProperty:92,patternProperty:93,STRING:94,NUMBER:95,$accept:0,$end:1},terminals_:{2:"error",5:";",9:"LET",10:"IDENTIFIER",11:"=",12:"DEF",14:",",16:"|>",18:"=~",22:"MAP",23:"(",24:")",25:"PATTERNS",26:"{",28:"}",29:"SEQUENCES",31:"AND",32:"OR",34:"<",35:"<=",36:"==",37:"!=",38:">=",39:">",41:"+",42:"-",43:"*",44:"/",45:"MOD",46:"POW",50:"NOT",52:".",55:"[",56:"]",58:"NULL_TYPE",61:"UNDEFINED_TYPE",62:"$",69:":",71:"...",73:"AS",74:"ANY_TYPE",75:"ARRAY_TYPE",76:"BOOLEAN_TYPE",77:"TRUE",78:"FALSE",79:"NUMBER_TYPE",80:"OBJECT_TYPE",81:"STRING_TYPE",84:"PATTERN",85:"ENUMERATION",90:"..",94:"STRING",95:"NUMBER"},productions_:[0,[3,1],[3,2],[4,3],[4,1],[6,1],[6,1],[7,4],[7,4],[13,3],[13,1],[8,1],[15,3],[15,1],[17,2],[17,1],[20,1],[20,6],[20,4],[20,4],[21,1],[21,3],[21,3],[30,1],[30,3],[30,3],[30,3],[30,3],[30,3],[30,3],[33,1],[33,3],[33,3],[33,3],[33,3],[33,3],[33,3],[40,3],[40,4],[40,1],[48,1],[48,2],[49,1],[49,3],[49,3],[49,4],[51,1],[51,1],[51,1],[51,1],[51,1],[51,1],[51,1],[51,1],[51,1],[51,3],[63,2],[63,3],[65,3],[65,1],[66,1],[66,1],[64,2],[64,3],[67,3],[67,1],[68,3],[68,1],[68,1],[47,3],[47,1],[70,1],[70,2],[27,3],[27,1],[19,1],[19,3],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,2],[72,2],[72,1],[82,2],[82,3],[86,3],[86,1],[87,1],[87,3],[88,1],[88,3],[88,3],[88,5],[89,3],[89,2],[89,2],[89,1],[83,2],[83,3],[91,3],[91,1],[92,1],[92,3],[93,3],[93,1],[57,1],[57,1],[60,1],[54,1],[59,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1]],performAction:function(e,t,n,r,a,s,i){var o=s.length-1;switch(a){case 1:return s[o];case 2:return s[o-1];case 3:case 9:case 12:case 58:case 64:case 69:case 73:case 96:case 110:s[o-2].push(s[o]),this.$=s[o-2];break;case 4:case 10:case 13:case 59:case 65:case 70:case 74:case 97:case 111:this.$=[s[o]];break;case 5:case 6:case 14:case 15:case 16:case 20:case 23:case 30:case 39:case 40:case 42:case 53:case 54:case 60:case 61:case 68:case 71:case 112:case 121:case 122:case 123:case 124:case 125:case 126:case 127:case 128:case 129:case 130:case 131:case 132:case 133:case 134:case 135:case 136:case 137:case 138:case 139:case 140:case 141:case 142:case 143:case 144:this.$=s[o];break;case 7:this.$={type:"assignment",name:s[o-2],value:s[o]};break;case 8:this.$={type:"def",name:s[o-2],value:s[o]};break;case 11:this.$={type:"sequence",steps:s[o]};break;case 17:this.$={type:"map",value:[s[o-3],s[o-1]]};break;case 18:this.$={type:"patterns",patterns:s[o-1]};break;case 19:this.$={type:"sequences",sequences:s[o-1]};break;case 21:this.$={type:"and",left:s[o-2],right:s[o]};break;case 22:this.$={type:"or",left:s[o-2],right:s[o]};break;case 24:this.$={type:"less_than",left:s[o-2],right:s[o]};break;case 25:this.$={type:"less_equal",left:s[o-2],right:s[o]};break;case 26:this.$={type:"equal",left:s[o-2],right:s[o]};break;case 27:this.$={type:"not_equal",left:s[o-2],right:s[o]};break;case 28:this.$={type:"greater_equal",left:s[o-2],right:s[o]};break;case 29:this.$={type:"greater_than",left:s[o-2],right:s[o]};break;case 31:this.$={type:"add",left:s[o-2],right:s[o]};break;case 32:this.$={type:"subtract",left:s[o-2],right:s[o]};break;case 33:this.$={type:"multiply",left:s[o-2],right:s[o]};break;case 34:this.$={type:"divide",left:s[o-2],right:s[o]};break;case 35:this.$={type:"modulus",left:s[o-2],right:s[o]};break;case 36:this.$={type:"power",left:s[o-2],right:s[o]};break;case 37:this.$={type:"invoke",name:s[o-2],args:[]};break;case 38:this.$={type:"invoke",name:s[o-3],args:s[o-1]};break;case 41:this.$={type:"not",value:s[o]};break;case 43:this.$={type:"get-property",left:s[o-2],right:s[o]};break;case 44:this.$={type:"get-index",left:s[o-2],right:s[o]};break;case 45:this.$={type:"get-index",left:s[o-3],right:s[o-1]};break;case 46:this.$={type:"boolean",value:s[o]};break;case 47:this.$={type:"boolean",value:null};break;case 48:this.$={type:"number",value:s[o]};break;case 49:this.$={type:"string",value:s[o]};break;case 50:this.$={type:"undefined",value:void 0};break;case 51:this.$={type:"get-value",name:s[o]};break;case 52:this.$={type:"get-structure"};break;case 55:this.$=s[o-1];break;case 56:this.$={type:"array",value:[]};break;case 57:this.$={type:"array",value:s[o-1]};break;case 62:this.$={type:"object",value:[]};break;case 63:this.$={type:"object",value:s[o-1]};break;case 66:this.$={type:"property",name:s[o-2],value:s[o]};break;case 67:this.$={type:"property",name:s[o],value:null};break;case 72:this.$={type:"spread",expression:s[o]};break;case 75:case 98:s[o].assignTo=null,this.$=s[o];break;case 76:case 99:case 113:s[o-2].assignTo=s[o],this.$=s[o-2];break;case 77:this.$={type:"pattern",patternType:"any",value:null};break;case 78:this.$={type:"pattern",patternType:"array",value:null};break;case 79:this.$={type:"pattern",patternType:"boolean",value:null};break;case 80:this.$={type:"pattern",patternType:"boolean",value:!0};break;case 81:this.$={type:"pattern",patternType:"boolean",value:!1};break;case 82:this.$={type:"pattern",patternType:"null",value:null};break;case 83:this.$={type:"pattern",patternType:"number",value:null};break;case 84:this.$={type:"pattern",patternType:"number",value:s[o]};break;case 85:this.$={type:"pattern",patternType:"object",value:null};break;case 86:this.$={type:"pattern",patternType:"string",value:null};break;case 87:this.$={type:"pattern",patternType:"string",value:s[o]};break;case 88:this.$={type:"pattern",patternType:"undefined",value:null};break;case 89:case 90:this.$=s[o];break;case 91:this.$={type:"pattern-reference",name:s[o]};break;case 92:this.$={type:"enumeration-reference",name:s[o]};break;case 93:this.$={type:"pattern",patternType:"reference",value:s[o]};break;case 94:this.$={type:"pattern",patternType:"array-pattern",value:[]};break;case 95:this.$={type:"pattern",patternType:"array-pattern",value:s[o-1]};break;case 100:this.$={type:"element",pattern:s[o],range:{type:"range",start:1,stop:1}};break;case 101:this.$={type:"element",pattern:s[o-2],range:s[o]};break;case 102:this.$={type:"element-group",elements:s[o-1],range:{type:"range",start:1,stop:1}};break;case 103:this.$={type:"element-group",elements:s[o-3],range:s[o]};break;case 104:this.$={type:"range",start:s[o-2],stop:s[o]};break;case 105:this.$={type:"range",start:0,stop:s[o]};break;case 106:this.$={type:"range",start:s[o-1],stop:1/0};break;case 107:this.$={type:"range",start:s[o],stop:s[o]};break;case 108:this.$={type:"pattern",patternType:"object",value:null};break;case 109:this.$={type:"pattern",patternType:"object-pattern",value:s[o-1]};break;case 114:this.$={type:"property",name:s[o-2],pattern:s[o]};break;case 115:this.$={type:"property",name:s[o],pattern:{type:"pattern",patternType:"any",value:null}};break;case 116:this.$=!0;break;case 117:this.$=!1;break;case 118:this.$=s[o].substring(1,s[o].length-1);break;case 119:this.$=parseInt(s[o]);break;case 120:this.$=parseFloat(s[o])}},table:[{3:1,4:2,6:3,7:4,8:5,9:t,10:n,12:r,15:8,17:9,18:a,20:11,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{1:[3]},{1:[2,1],5:[1,39]},e(b,[2,4]),e(b,[2,5]),e(b,[2,6]),{10:[1,40]},{10:[1,41]},e([1,5,14,24,28,56],[2,11],{16:[1,42]}),e(g,[2,13]),{10:w,19:43,26:k,55:E,58:P,59:52,60:55,61:A,72:44,74:M,75:S,76:R,77:_,78:I,79:T,80:N,81:X,82:57,83:58,84:Y,85:C,94:m,95:d},e(g,[2,15]),e(L,[2,16]),{23:[1,64]},{26:[1,65]},{26:[1,66]},e(L,[2,20],{31:[1,67],32:[1,68],34:$,35:D,36:z,37:B,38:O,39:q}),e(j,[2,23],{41:U,42:V,43:F,44:G,45:Q,46:H}),e(Z,[2,30]),e(W,J,{23:[1,81]}),e(Z,[2,39]),e(Z,[2,40],{52:[1,82],55:[1,83]}),{10:[1,85],23:i,26:u,48:84,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},e(W,[2,42]),e(W,[2,46]),e(W,[2,47]),e(W,[2,48]),e(W,[2,49]),e(W,[2,50]),e(W,[2,52]),e(W,[2,53]),e(W,[2,54]),{10:n,20:86,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},e(W,[2,116]),e(W,[2,117]),e(K,[2,120]),e(K,[2,118]),{7:91,9:t,10:n,12:r,20:90,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,56:[1,87],57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,65:88,66:89,77:x,78:v,94:m,95:d},{7:96,9:t,10:n,12:r,20:95,21:12,22:s,23:i,25:o,26:u,28:[1,92],29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,67:93,68:94,77:x,78:v,94:m,95:d},{1:[2,2],6:97,7:4,8:5,9:t,10:n,12:r,15:8,17:9,18:a,20:11,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{11:[1,98]},{11:[1,99]},{10:n,17:100,18:a,20:11,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},e(g,[2,14]),e(g,[2,75],{73:[1,101]}),e(ee,[2,77]),e(ee,[2,78]),e(ee,[2,79]),e(ee,[2,80]),e(ee,[2,81]),e(ee,[2,82]),e(ee,[2,83]),e(ee,[2,84]),e(ee,[2,85]),e(ee,[2,86]),e(ee,[2,87]),e(ee,[2,88]),e(ee,[2,89]),e(ee,[2,90]),{10:[1,102]},{10:[1,103]},e(ee,[2,93]),{10:w,23:te,26:k,55:E,56:[1,104],58:P,59:52,60:55,61:A,72:108,74:M,75:S,76:R,77:_,78:I,79:T,80:N,81:X,82:57,83:58,84:Y,85:C,86:105,87:106,88:107,94:m,95:d},{9:ne,10:re,12:ae,22:se,25:ie,28:[1,110],29:oe,31:ue,32:le,45:ce,46:he,50:ye,53:114,58:pe,60:116,61:fe,73:xe,74:ve,75:me,76:de,77:be,78:ge,79:we,80:ke,81:Ee,85:Pe,91:111,92:112,93:113,94:m},{10:n,20:139,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:w,19:141,26:k,27:140,55:E,58:P,59:52,60:55,61:A,72:44,74:M,75:S,76:R,77:_,78:I,79:T,80:N,81:X,82:57,83:58,84:Y,85:C,94:m,95:d},{8:143,10:n,13:142,15:8,17:9,18:a,20:11,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,30:144,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,30:145,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,33:146,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,33:147,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,33:148,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,33:149,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,33:150,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,33:151,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,40:152,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,40:153,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,40:154,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,40:155,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,40:156,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,40:157,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,20:161,21:12,22:s,23:i,24:[1,158],25:o,26:u,29:l,30:16,33:17,40:18,47:159,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,70:160,71:Ae,77:x,78:v,94:m,95:d},{9:ne,10:re,12:ae,22:se,25:ie,29:oe,31:ue,32:le,45:ce,46:he,50:ye,53:163,54:164,58:pe,60:116,61:fe,73:xe,74:ve,75:me,76:de,77:be,78:ge,79:we,80:ke,81:Ee,85:Pe,94:m,95:Me},{54:166,95:Me},e(Z,[2,41]),e(W,J),{24:[1,167]},e(W,[2,56]),{14:[1,169],56:[1,168]},e(Se,[2,59]),e(Se,[2,60]),e(Se,[2,61]),e(W,[2,62]),{14:[1,171],28:[1,170]},e(Re,[2,65]),e(Re,[2,67],{69:[1,172]}),e(Re,[2,68]),e(b,[2,3]),{8:173,10:n,15:8,17:9,18:a,20:11,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{8:174,10:n,15:8,17:9,18:a,20:11,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},e(g,[2,12]),{10:[1,175]},e(ee,[2,91]),e(ee,[2,92]),e(ee,[2,94]),{14:_e,56:[1,176]},e(Ie,[2,97]),e(Ie,[2,98],{73:[1,178]}),e(Te,[2,100],{5:[1,179]}),{10:w,23:te,26:k,55:E,58:P,59:52,60:55,61:A,72:108,74:M,75:S,76:R,77:_,78:I,79:T,80:N,81:X,82:57,83:58,84:Y,85:C,86:180,87:106,88:107,94:m,95:d},e(ee,[2,108]),{14:[1,182],28:[1,181]},e(Re,[2,111]),e(Re,[2,112],{73:[1,183]}),e(Ne,[2,115],{69:[1,184]}),e(K,[2,121]),e(K,[2,122]),e(K,[2,123]),e(K,[2,124]),e(K,[2,125]),e(K,[2,126]),e(K,[2,127]),e(K,[2,128]),e(K,[2,129]),e(K,[2,130]),e(K,[2,131]),e(K,[2,132]),e(K,[2,133]),e(K,[2,134]),e(K,[2,135]),e(K,[2,136]),e(K,[2,137]),e(K,[2,138]),e(K,[2,139]),e(K,[2,140]),e(K,[2,141]),e(K,[2,142]),e(K,[2,143]),e(K,[2,144]),{14:[1,185]},{14:[1,187],28:[1,186]},e(Re,[2,74]),{14:[1,189],28:[1,188]},e(Re,[2,10]),e(L,[2,21],{34:$,35:D,36:z,37:B,38:O,39:q}),e(L,[2,22],{34:$,35:D,36:z,37:B,38:O,39:q}),e(j,[2,24],{41:U,42:V,43:F,44:G,45:Q,46:H}),e(j,[2,25],{41:U,42:V,43:F,44:G,45:Q,46:H}),e(j,[2,26],{41:U,42:V,43:F,44:G,45:Q,46:H}),e(j,[2,27],{41:U,42:V,43:F,44:G,45:Q,46:H}),e(j,[2,28],{41:U,42:V,43:F,44:G,45:Q,46:H}),e(j,[2,29],{41:U,42:V,43:F,44:G,45:Q,46:H}),e(Z,[2,31]),e(Z,[2,32]),e(Z,[2,33]),e(Z,[2,34]),e(Z,[2,35]),e(Z,[2,36]),e(Z,[2,37]),{14:[1,191],24:[1,190]},e(Xe,[2,70]),e(Xe,[2,71]),{10:n,20:192,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},e(W,[2,43]),e(W,[2,44]),e([1,5,14,16,24,28,31,32,34,35,36,37,38,39,41,42,43,44,45,46,52,55,56,69,73,90],[2,119]),{56:[1,193]},e(W,[2,55]),e(W,[2,57]),{7:91,9:t,10:n,12:r,20:90,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,66:194,77:x,78:v,94:m,95:d},e(W,[2,63]),{7:96,9:t,10:n,12:r,20:95,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,68:195,77:x,78:v,94:m,95:d},{8:196,10:n,15:8,17:9,18:a,20:11,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},e(Ye,[2,7]),e(Ye,[2,8]),e(g,[2,76]),e(ee,[2,95]),{10:w,23:te,26:k,55:E,58:P,59:52,60:55,61:A,72:108,74:M,75:S,76:R,77:_,78:I,79:T,80:N,81:X,82:57,83:58,84:Y,85:C,87:197,88:107,94:m,95:d},{10:[1,198]},{54:200,89:199,90:Ce,95:Me},{14:_e,24:[1,202]},e(ee,[2,109]),{9:ne,10:re,12:ae,22:se,25:ie,29:oe,31:ue,32:le,45:ce,46:he,50:ye,53:114,58:pe,60:116,61:fe,73:xe,74:ve,75:me,76:de,77:be,78:ge,79:we,80:ke,81:Ee,85:Pe,92:203,93:113,94:m},{10:[1,204]},{10:w,26:k,55:E,58:P,59:52,60:55,61:A,72:205,74:M,75:S,76:R,77:_,78:I,79:T,80:N,81:X,82:57,83:58,84:Y,85:C,94:m,95:d},{8:206,10:n,15:8,17:9,18:a,20:11,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},e(L,[2,18]),{10:w,19:207,26:k,55:E,58:P,59:52,60:55,61:A,72:44,74:M,75:S,76:R,77:_,78:I,79:T,80:N,81:X,82:57,83:58,84:Y,85:C,94:m,95:d},e(L,[2,19]),{8:208,10:n,15:8,17:9,18:a,20:11,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},e(Z,[2,38]),{10:n,20:161,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,70:209,71:Ae,77:x,78:v,94:m,95:d},e(Xe,[2,72]),e(W,[2,45]),e(Se,[2,58]),e(Re,[2,64]),e(Re,[2,66]),e(Ie,[2,96]),e(Ie,[2,99]),e(Te,[2,101]),e(Te,[2,107],{90:[1,210]}),{54:211,95:Me},e(Te,[2,102],{5:[1,212]}),e(Re,[2,110]),e(Re,[2,113]),e(Ne,[2,114]),{24:[1,213]},e(Re,[2,73]),e(Re,[2,9]),e(Xe,[2,69]),e(Te,[2,106],{54:214,95:Me}),e(Te,[2,105]),{54:200,89:215,90:Ce,95:Me},e(L,[2,17]),e(Te,[2,104]),e(Te,[2,103])],defaultActions:{},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],r=[null],a=[],s=this.table,i="",o=0,u=0,l=2,c=1,h=a.slice.call(arguments,1),y=Object.create(this.lexer),p={yy:{}};for(var f in this.yy)Object.prototype.hasOwnProperty.call(this.yy,f)&&(p.yy[f]=this.yy[f]);y.setInput(e,p.yy),p.yy.lexer=y,p.yy.parser=this,void 0===y.yylloc&&(y.yylloc={});var x=y.yylloc;a.push(x);var v=y.options&&y.options.ranges;"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,d,b,g,w,k,E,P,A,M=function(){var e;return"number"!=typeof(e=y.lex()||c)&&(e=t.symbols_[e]||e),e},S={};;){if(b=n[n.length-1],this.defaultActions[b]?g=this.defaultActions[b]:(null==m&&(m=M()),g=s[b]&&s[b][m]),void 0===g||!g.length||!g[0]){var R="";for(k in A=[],s[b])this.terminals_[k]&&k>l&&A.push("'"+this.terminals_[k]+"'");R=y.showPosition?"Parse error on line "+(o+1)+":\n"+y.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(o+1)+": Unexpected "+(m==c?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(R,{text:y.match,token:this.terminals_[m]||m,line:y.yylineno,loc:x,expected:A})}if(g[0]instanceof Array&&g.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(g[0]){case 1:n.push(m),r.push(y.yytext),a.push(y.yylloc),n.push(g[1]),m=null,d?(m=d,d=null):(u=y.yyleng,i=y.yytext,o=y.yylineno,x=y.yylloc);break;case 2:if(E=this.productions_[g[1]][1],S.$=r[r.length-E],S._$={first_line:a[a.length-(E||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(E||1)].first_column,last_column:a[a.length-1].last_column},v&&(S._$.range=[a[a.length-(E||1)].range[0],a[a.length-1].range[1]]),void 0!==(w=this.performAction.apply(S,[i,u,o,p.yy,g[1],r,a].concat(h))))return w;E&&(n=n.slice(0,-1*E*2),r=r.slice(0,-1*E),a=a.slice(0,-1*E)),n.push(this.productions_[g[1]][0]),r.push(S.$),a.push(S._$),P=s[n[n.length-2]][n[n.length-1]],n.push(P);break;case 3:return!0}}return!0}},$e={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var a=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[a[0],a[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,a;if(this.options.backtrack_lexer&&(a={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(a.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var s in a)this[s]=a[s];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var a=this._currentRules(),s=0;st[0].length)){if(t=n,r=s,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,a[s])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,a[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(e,t,n,r){switch(n){case 0:case 1:break;case 2:return 31;case 3:return 74;case 4:return 75;case 5:return 73;case 6:return 76;case 7:return 12;case 8:return 85;case 9:return 78;case 10:return 9;case 11:return 22;case 12:return 45;case 13:return 50;case 14:return 32;case 15:return 58;case 16:return 79;case 17:return 80;case 18:return 25;case 19:return 46;case 20:return 29;case 21:return 81;case 22:return 77;case 23:return 61;case 24:return 95;case 25:return 94;case 26:return 23;case 27:return 24;case 28:return 26;case 29:return 28;case 30:return 55;case 31:return 56;case 32:return 16;case 33:return"|";case 34:return 14;case 35:return 69;case 36:return 5;case 37:return 35;case 38:return 38;case 39:return 18;case 40:return 36;case 41:return 37;case 42:return 34;case 43:return 39;case 44:return 11;case 45:return 71;case 46:return 90;case 47:return 52;case 48:return"_";case 49:return 41;case 50:return 42;case 51:return 43;case 52:return 44;case 53:return 62;case 54:return 10}},rules:[/^(?:\s+)/,/^(?:\/\/.*)/,/^(?:and\b)/,/^(?:any\b)/,/^(?:array\b)/,/^(?:as\b)/,/^(?:boolean\b)/,/^(?:def\b)/,/^(?:enum\b)/,/^(?:false\b)/,/^(?:let\b)/,/^(?:map\b)/,/^(?:mod\b)/,/^(?:not\b)/,/^(?:or\b)/,/^(?:null\b)/,/^(?:number\b)/,/^(?:object\b)/,/^(?:patterns\b)/,/^(?:pow\b)/,/^(?:sequences\b)/,/^(?:string\b)/,/^(?:true\b)/,/^(?:undefined\b)/,/^(?:[-+]?(0|[1-9]\d*)(\.\d+)?)/,/^(?:"[^"\r\n]*")/,/^(?:\()/,/^(?:\))/,/^(?:{)/,/^(?:})/,/^(?:\[)/,/^(?:\])/,/^(?:\|>)/,/^(?:\|)/,/^(?:,)/,/^(?::)/,/^(?:;)/,/^(?:<=)/,/^(?:>=)/,/^(?:=~)/,/^(?:==)/,/^(?:!=)/,/^(?:<)/,/^(?:>)/,/^(?:=)/,/^(?:\.{3})/,/^(?:\.{2})/,/^(?:\.)/,/^(?:_)/,/^(?:\+)/,/^(?:-)/,/^(?:\*)/,/^(?:\/)/,/^(?:\$)/,/^(?:[a-zA-Z_][a-zA-Z0-9_]*)/],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54],inclusive:!0}}};function De(){this.yy={}}return Le.lexer=$e,De.prototype=Le,Le.Parser=De,new De}();function y(t){return null!==t&&"object"===e(t)}var p=Object.freeze({__proto__:null,typeName:function(t){switch(t){case null:return"null";case void 0:return"undefined";default:return Array.isArray(t)?"array":e(t)}},length:function(e){return Array.isArray(e)?e.length:0},zip:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,n=[];if(Array.isArray(e)&&e.length>0&&e.every((function(e){return Array.isArray(e)})))for(var r=Math.max.apply(Math,s(e.map((function(e){return e.length})))),a=0;a3&&void 0!==arguments[3]?arguments[3]:void 0,a=e.length,s=[];n=void 0===n?t:n,t=Math.max(1,t),n=Math.max(1,n);for(var i=0;i=2){var l=a(u,2),c=l[0],h=l[1];t[c]=h}}}catch(e){r=!0,s=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw s}}}return t},merge:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&Array.isArray(t[0])?(r=t[0]).concat.apply(r,s(t.slice(1))):t.every((function(e){return y(e)}))?Object.assign.apply(Object,[{}].concat(t)):void 0}}),f={};function x(t){return null!==t&&"object"===e(t)}var v=function(){function n(){for(var e in t(this,n),this.symbolTable={},this.functions={},this.messages=[],this.verbose=!1,p)this.functions[e]=p[e]}return r(n,[{key:"addFunction",value:function(e,t){this.functions[e]=t}},{key:"addInfo",value:function(e){this.verbose&&this.messages.push({type:"message",level:"info",message:e})}},{key:"addWarning",value:function(e){this.messages.push({type:"message",level:"warning",message:e})}},{key:"addError",value:function(e){this.messages.push({type:"message",level:"error",message:e})}},{key:"execute",value:function(e,t){var n,r=h.parse(e);this.messages=[];var a=!0,s=!1,i=void 0;try{for(var o,u=r[Symbol.iterator]();!(a=(o=u.next()).done);a=!0){var l=o.value;switch(l.type){case"assignment":case"def":case"sequence":if((n=this.executeExpression(l,t,this.symbolTable))===f)return f;break;default:return this.addError("unknown statement type: ".concat(l.type)),f}}}catch(e){s=!0,i=e}finally{try{a||null==u.return||u.return()}finally{if(s)throw i}}return n}},{key:"executeExpression",value:function(t,n,r){var s=this,i=function(a,i){var o=s.executeExpression(t.left,n,r);if(o!==f&&e(o)===a){var u=s.executeExpression(t.right,n,r);if(u!==f&&e(u)===a)return i(o,u)}return f};switch(t.type){case"assignment":var o=this.executeExpression(t.value,n,r);return o===f?(this.addError("Unable to evaluate assignment value for ".concat(t.name)),f):r.hasOwnProperty(t.name)?(this.addError("A symbol in current scope was assigned more than once: ".concat(t.name)),f):(r[t.name]=o,o);case"def":return void(r[t.name]=t.value);case"get-value":if(t.name in r){var u=r[t.name];if(x(u)&&"sequence"===u.type){var l=this.executeExpression(u,n,r);return l===f?(this.addError("Unable to evaluate sequence ".concat(t.name)),f):l}return u}return t.name in this.functions?this.invokeFunction(t.name,[n]):(this.addError("Tried to access unbound symbol: ".concat(t.name)),f);case"get-property":var c=this.executeExpression(t.left,n,r);return x(c)?c[t.right]:f;case"get-index":var h=t.left,y=t.right,p=this.executeExpression(h,n,r);if(Array.isArray(p)){var v=y<0?p.length+y:y;return 0<=v&&v=t}));case"greater_than":return i("number",(function(e,t){return e>t}));case"add":return i("number",(function(e,t){return e+t}));case"subtract":return i("number",(function(e,t){return e-t}));case"multiply":return i("number",(function(e,t){return e*t}));case"divide":return i("number",(function(e,t){return e/t}));case"modulus":return i("number",(function(e,t){return e%t}));case"power":return i("number",(function(e,t){return Math.pow(e,t)}));case"invoke":var F=t.args.reduce((function(e,t){if("spread"===t.type){var a=s.executeExpression(t.expression,n,r);Array.isArray(a)?e=e.concat(a):e.push(a)}else e.push(s.executeExpression(t,n,r));return e}),[]);return t.name in this.functions?this.invokeFunction(t.name,F):(this.addError("Tried to access unbound symbol: ".concat(t.name)),f);case"array":var G=[],Q=!0,H=!1,Z=void 0;try{for(var W,J=t.value[Symbol.iterator]();!(Q=(W=J.next()).done);Q=!0){var K=W.value;if("assignment"===K.type)this.executeExpression(K,n,r);else{var ee=this.executeExpression(K,n,r);if(ee===f)return f;G.push(ee)}}}catch(e){H=!0,Z=e}finally{try{Q||null==J.return||J.return()}finally{if(H)throw Z}}return G;case"boolean":case"null":case"number":case"string":case"undefined":return t.value;case"object":return this.executeObjectExpression(t,n,r);default:return this.addError("Unrecognized expression type: '".concat(t.type,"'")),f}}},{key:"executeObjectExpression",value:function(e,t,n){var r=Object.create(n),a={},s=!0,i=!1,o=void 0;try{for(var u,l=e.value[Symbol.iterator]();!(s=(u=l.next()).done);s=!0){var c=u.value;switch(c.type){case"property":var h=this.executeExpression(c.name,t,r);if(h===f)return f;if("string"!=typeof h)return this.addError("Property names must be string types: ".concat(h)),f;var y=null!==c.value?this.executeExpression(c.value,t,r):n[h];if(y===f)return this.addError("Unable to evaluate value for property ".concat(h)),f;a[h]=y;break;case"assignment":if(this.executeExpression(c,t,r)===f)return f;break;default:return this.addError("Unrecognized object expression element type: ".concat(c.type)),f}}}catch(e){i=!0,o=e}finally{try{s||null==l.return||l.return()}finally{if(i)throw o}}return a}},{key:"executePattern",value:function(e,t,n){switch(e.patternType){case"any":return this.assign(n,e.assignTo,t),t;case"array":return Array.isArray(t)?(this.assign(n,e.assignTo,t),t):f;case"array-pattern":return this.executeArrayPattern(e,t,n)===f?f:n;case"boolean":return"boolean"!=typeof t||null!==e.value&&e.value!==t?f:(this.assign(n,e.assignTo,t),t);case"null":return null===t?(this.assign(n,e.assignTo,t),t):f;case"number":return"number"!=typeof t||null!==e.value&&e.value!==t?f:(this.assign(n,e.assignTo,t),t);case"object":return x(t)?(this.assign(n,e.assignTo,t),t):f;case"object-pattern":if(!1===x(t))return f;var r={},a=!0,s=!1,i=void 0;try{for(var o,u=e.value[Symbol.iterator]();!(a=(o=u.next()).done);a=!0){var l=o.value,c=l.name,h=l.pattern,y=l.assignTo;if(!(c in t))return f;var p=this.executePattern(h,t[c],n);if(p===f)return f;this.assign(n,y,t[c]),this.assign(r,y,p)}}catch(e){s=!0,i=e}finally{try{a||null==u.return||u.return()}finally{if(s)throw i}}return this.assign(n,e.assignTo,t),r;case"reference":if(e.value in this.patterns){var v=this.patterns[e.value],m=this.executePattern(v,t,n);return m!==f&&this.assign(n,e.assignTo,m),m}return f;case"string":return"string"!=typeof t||null!==e.value&&e.value!==t?f:(this.assign(n,e.assignTo,t),t);case"undefined":return void 0===t?(this.assign(n,e.assignTo,t),t):f;default:throw new TypeError("unrecognized pattern type: '".concat(e.type,"'"))}}},{key:"executeArrayPattern",value:function(e,t,n){if(!1===Array.isArray(t))return f;var r=[],a=0,s=!0,i=!1,o=void 0;try{for(var u,l=e.value[Symbol.iterator]();!(s=(u=l.next()).done);s=!0){var c=u.value,h=this.executeArrayPatternElement(c,a,t,n);if(h===f)return f;r=r.concat(h),a+=h.length}}catch(e){i=!0,o=e}finally{try{s||null==l.return||l.return()}finally{if(i)throw o}}return a===t.length?(this.assign(n,e.assignTo,t),r):f}},{key:"executeArrayPatternElement",value:function(e,t,n,r){var a=[];switch(e.type){case"element":var s=this.executeArrayElementPattern(e,t,n,r);if(s===f)return f;a=a.concat(s),t+=s.length;break;case"element-group":var i=this.executeArrayElementGroupPattern(e,t,n,r);if(i===f)return f;a=a.concat(i),t+=i.length;break;default:return this.addError("Unrecognized array pattern element type: '".concat(e.type,"'")),f}return a}},{key:"executeArrayElementPattern",value:function(e,t,n,r){for(var a=e.pattern,s=e.range,i=s.start,o=s.stop,u=[],l=0;l=i)break;return f}o>1?this.pushAssign(r,e.assignTo,h):this.assign(r,e.assignTo,h),u.push(h)}return u}},{key:"executeArrayElementGroupPattern",value:function(e,t,n,r){for(var a=e.elements,s=e.range,i=s.start,o=s.stop,u=[],l=0;l1?this.pushAssign(r,m.assignTo,d[m.assignTo]):this.assign(r,m.assignTo,d[m.assignTo])),u=u.concat(b),t+=b.length,c=c.concat(b)}}catch(e){y=!0,p=e}finally{try{h||null==v.return||v.return()}finally{if(y)throw p}}if(c===f){if(l>=i){if(0===l){this.assign(r,e.assignTo,[]);var g=!0,w=!1,k=void 0;try{for(var E,P=a[Symbol.iterator]();!(g=(E=P.next()).done);g=!0){var A=E.value;this.assign(r,A.assignTo,[])}}catch(e){w=!0,k=e}finally{try{g||null==P.return||P.return()}finally{if(w)throw k}}}return u}return f}o>1?this.pushAssign(r,e.assignTo,c):this.assign(r,e.assignTo,c)}return u}},{key:"invokeFunction",value:function(e,t){var n;return e in this.functions?(n=this.functions)[e].apply(n,s(t)):f}},{key:"assign",value:function(e,t,n){null!=t&&(e.hasOwnProperty(t)&&this.addWarning("Overwriting ".concat(t," with value: ").concat(n)),e[t]=n)}},{key:"pushAssign",value:function(e,t,n){if(null!=t){var r=e.hasOwnProperty(t)?e[t]:[];Array.isArray(r)?(r.push(n),e[t]=r):this.addWarning("Unable to push to ".concat(t," because it is not an array: ").concat(r))}}}]),n}(),m=function(){function e(n,r){t(this,e),this.type=n,this.text=r}return r(e,[{key:"typeis",value:function(e){return this.type===e}}]),e}();m.UNDEFINED=0,m.COMMAND=1,m.NUMBER=2,m.EOD=3;var d=function(){function e(n){t(this,e),null==n&&(n=""),this.setPathData(n)}return r(e,[{key:"setPathData",value:function(e){if("string"!=typeof e)throw new TypeError("The first parameter must be a string");this._pathData=e}},{key:"getNextToken",value:function(){for(var e=null,t=this._pathData;null===e;)if(null===t||""===t)e=new m(m.EOD,"");else if(t.match(/^([ \t\r\n,]+)/))t=t.substr(RegExp.$1.length);else if(t.match(/^([AaCcHhLlMmQqSsTtVvZz])/))e=new m(m.COMMAND,RegExp.$1),t=t.substr(RegExp.$1.length);else{if(!t.match(/^(([-+]?\d+(\.\d*)?|[-+]?\.\d+)([eE][-+]?\d+)?)/))throw new SyntaxError("Unrecognized path data: ".concat(t));e=new m(m.NUMBER,RegExp.$1),t=t.substr(RegExp.$1.length)}return this._pathData=t,e}}]),e}(),b=function(){function e(){t(this,e),this._lexer=new d,this._handler=null}return r(e,[{key:"parseData",value:function(t){if("string"!=typeof t)throw new TypeError("The first parameter must be a string: ".concat(t));null!==this._handler&&"function"==typeof this._handler.beginParse&&this._handler.beginParse();var n=this._lexer;n.setPathData(t);for(var r="BOP",a=null,s=n.getNextToken();!1===s.typeis(m.EOD);){var i=void 0,o=[];switch(s.type){case m.COMMAND:if("BOP"===r&&"M"!==s.text&&"m"!==s.text)throw new SyntaxError("New paths must begin with a moveto command. Found '".concat(s.text,"'"));r=s.text,i=e.PARAMCOUNT[s.text.toUpperCase()],s=n.getNextToken();break;case m.NUMBER:if("BOP"===r)throw new SyntaxError("New paths must begin with a moveto command. Found '".concat(s.text,"'"));i=e.PARAMCOUNT[r.toUpperCase()];break;default:throw new SyntaxError("Unrecognized command type: ".concat(s.type))}for(var u=0;u1){var v=Math.sqrt(x);n*=v,r*=v}var m=n*n,d=r*r,b=m*f,w=d*p,k=(m*d-b-w)/(b+w);Math.abs(k)<1e-6&&(k=0);var E=Math.sqrt(k);s===i&&(E=-E);var P,A,M=e.add(t).multiply(.5),S=E*n*y/r,R=E*-r*h/n,_=(h-S)/n,I=(h+S)/n,T=(y-R)/r,N=(y+R)/r,X=new o(1,0).angleBetween(new o(_,T)),Y=(P=new o(_,T).angleBetween(new o(-I,-N)),(A=P%g)<0?A+g:A);return!1===i&&(Y-=g),[S*u-R*l+M.x,S*l+R*u+M.y,n,r,X,X+Y]}var k=function(){function e(n){t(this,e),this.shapeCreator=n,this.shapes=[],this.firstX=null,this.firstY=null,this.lastX=null,this.lastY=null,this.lastCommand=null}return r(e,[{key:"beginParse",value:function(){this.shapes=[],this.firstX=null,this.firstY=null,this.lastX=null,this.lastY=null,this.lastCommand=null}},{key:"addShape",value:function(e){this.shapes.push(e)}},{key:"arcAbs",value:function(e,t,n,r,a,o,u){if(0===e||0===t)this.addShape(this.shapeCreator.line(this.lastX,this.lastY,o,u));else{var l,c=w(new i(this.lastX,this.lastY),new i(o,u),e,t,n,r,a);this.addShape((l=this.shapeCreator).arc.apply(l,s(c)))}this.lastCommand="A",this.lastX=o,this.lastY=u}},{key:"arcRel",value:function(e,t,n,r,a,o,u){if(0===e||0===t)this.addShape(this.shapeCreator.line(this.lastX,this.lastY,this.lastX+o,this.lastY+u));else{var l,c=w(new i(this.lastX,this.lastY),new i(this.lastX+o,this.lastY+u),e,t,n,r,a);this.addShape((l=this.shapeCreator).arc.apply(l,s(c)))}this.lastCommand="a",this.lastX+=o,this.lastY+=u}},{key:"curvetoCubicAbs",value:function(e,t,n,r,a,s){this.addShape(this.shapeCreator.cubicBezier(this.lastX,this.lastY,e,t,n,r,a,s)),this.lastX=a,this.lastY=s,this.lastCommand="C"}},{key:"curvetoCubicRel",value:function(e,t,n,r,a,s){this.addShape(this.shapeCreator.cubicBezier(this.lastX,this.lastY,this.lastX+e,this.lastY+t,this.lastX+n,this.lastY+r,this.lastX+a,this.lastY+s)),this.lastX+=a,this.lastY+=s,this.lastCommand="c"}},{key:"linetoHorizontalAbs",value:function(e){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,e,this.lastY)),this.lastX=e,this.lastCommand="H"}},{key:"linetoHorizontalRel",value:function(e){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,this.lastX+e,this.lastY)),this.lastX+=e,this.lastCommand="h"}},{key:"linetoAbs",value:function(e,t){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,e,t)),this.lastX=e,this.lastY=t,this.lastCommand="L"}},{key:"linetoRel",value:function(e,t){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,this.lastX+e,this.lastY+t)),this.lastX+=e,this.lastY+=t,this.lastCommand="l"}},{key:"movetoAbs",value:function(e,t){this.firstX=e,this.firstY=t,this.lastX=e,this.lastY=t,this.lastCommand="M"}},{key:"movetoRel",value:function(e,t){this.firstX+=e,this.firstY+=t,this.lastX+=e,this.lastY+=t,this.lastCommand="m"}},{key:"curvetoQuadraticAbs",value:function(e,t,n,r){this.addShape(this.shapeCreator.quadraticBezier(this.lastX,this.lastY,e,t,n,r)),this.lastX=n,this.lastY=r,this.lastCommand="Q"}},{key:"curvetoQuadraticRel",value:function(e,t,n,r){this.addShape(this.shapeCreator.quadraticBezier(this.lastX,this.lastY,this.lastX+e,this.lastY+t,this.lastX+n,this.lastY+r)),this.lastX+=n,this.lastY+=r,this.lastCommand="q"}},{key:"curvetoCubicSmoothAbs",value:function(e,t,n,r){var a,s;if(this.lastCommand.match(/^[SsCc]$/)){var i=this.shapes[this.shapes.length-1].args[2];a=2*this.lastX-i.x,s=2*this.lastY-i.y}else a=this.lastX,s=this.lastY;this.addShape(this.shapeCreator.cubicBezier(this.lastX,this.lastY,a,s,e,t,n,r)),this.lastX=n,this.lastY=r,this.lastCommand="S"}},{key:"curvetoCubicSmoothRel",value:function(e,t,n,r){var a,s;if(this.lastCommand.match(/^[SsCc]$/)){var i=this.shapes[this.shapes.length-1].args[2];a=2*this.lastX-i.x,s=2*this.lastY-i.y}else a=this.lastX,s=this.lastY;this.addShape(this.shapeCreator.cubicBezier(this.lastX,this.lastY,a,s,this.lastX+e,this.lastY+t,this.lastX+n,this.lastY+r)),this.lastX+=n,this.lastY+=r,this.lastCommand="s"}},{key:"curvetoQuadraticSmoothAbs",value:function(e,t){var n,r;if(this.lastCommand.match(/^[QqTt]$/)){var a=this.shapes[this.shapes.length-1].args[1];n=2*this.lastX-a.x,r=2*this.lastY-a.y}else n=this.lastX,r=this.lastY;this.addShape(this.shapeCreator.quadraticBezier(this.lastX,this.lastY,n,r,e,t)),this.lastX=e,this.lastY=t,this.lastCommand="T"}},{key:"curvetoQuadraticSmoothRel",value:function(e,t){var n,r;if(this.lastCommand.match(/^[QqTt]$/)){var a=this.shapes[this.shapes.length-1].args[1];n=2*this.lastX-a.x,r=2*this.lastY-a.y}else n=this.lastX,r=this.lastY;this.addShape(this.shapeCreator.quadraticBezier(this.lastX,this.lastY,n,r,this.lastX+e,this.lastY+t)),this.lastX+=e,this.lastY+=t,this.lastCommand="t"}},{key:"linetoVerticalAbs",value:function(e){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,this.lastX,e)),this.lastY=e,this.lastCommand="V"}},{key:"linetoVerticalRel",value:function(e){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,this.lastX,this.lastY+e)),this.lastY+=e,this.lastCommand="v"}},{key:"closePath",value:function(){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,this.firstX,this.firstY)),this.lastX=this.firstX,this.lastY=this.firstY,this.lastCommand="z"}}]),e}(),E=.5*Math.PI,P=function(){function e(n,r){t(this,e),this.name=n,this.args=r}return r(e,null,[{key:"arc",value:function(){for(var t=arguments.length,n=new Array(t),r=0;r.5*p&&(i=.5*p),s>.5*f&&(s=.5*f);var x=u,v=l,m=u+i,d=l+s,b=h-i,g=y-s,w=h,k=y,P=[e.arc(m,d,i,s,2*E,3*E),e.line(m,v,b,v),e.arc(b,d,i,s,3*E,4*E),e.line(w,d,w,g),e.arc(b,g,i,s,0,E),e.line(b,k,m,k),e.arc(m,g,i,s,E,2*E),e.line(x,g,x,d)];return new e(e.PATH,P)}}]),e}();function A(e,t,n){var r;1===t.length?(t=t[0],r=Array.isArray(t)||"string"==typeof t?e+"Args":e):r=e+"Args";var a=M.execute(r,t);if(a===f)throw new TypeError("".concat(e," is not in a recognizable format: ").concat(JSON.stringify(t)));var s=1===n.length?a[n[0]]:n.map((function(e){return a[e]}));return new P(e,s)}P.ARC="Arc",P.QUADRATIC_BEZIER="Bezier2",P.CUBIC_BEZIER="Bezier3",P.CIRCLE="Circle",P.ELLIPSE="Ellipse",P.LINE="Line",P.PATH="Path",P.POLYGON="Polygon",P.POLYLINE="Polyline",P.RECTANGLE="Rectangle";var M=new v;M.execute('\ndef Center =\n patterns {\n { center: { x: number as x, y: number as y } },\n { center: [ number as x, number as y ] },\n { cx: number as x, cy: number as y },\n { centerX: number as x, centerY: number as y }\n } |> Point2D(x, y);\n\ndef Radii =\n patterns {\n { radii: { x: number as rx, y: number as ry } },\n { radii: [ number as rx, number as ry ] },\n { rx: number as rx, ry: number as ry },\n { radiusX: number as rx, radiusY: number as ry }\n } |> { "rx", "ry" };\n\ndef P1 =\n patterns {\n { p1: { x: number as x, y: number as y } },\n { p1: [ number as x, number as y ] },\n { p1x: number as x, p1y: number as y }\n } |> Point2D(x, y);\n \ndef P2 =\n patterns {\n { p2: { x: number as x, y: number as y } },\n { p2: [ number as x, number as y ] },\n { p2x: number as x, p2y: number as y }\n } |> Point2D(x, y);\n \ndef P3 =\n patterns {\n { p3: { x: number as x, y: number as y } },\n { p3: [ number as x, number as y ] },\n { p3x: number as x, p3y: number as y }\n } |> Point2D(x, y);\n \ndef P4 =\n patterns {\n { p4: { x: number as x, y: number as y } },\n { p4: [ number as x, number as y ] },\n { p4x: number as x, p4y: number as y }\n } |> Point2D(x, y);\n\n \ndef Arc = {\n let radii = Radii,\n\n "center": Center,\n "radiusX": radii.rx,\n "radiusY": radii.ry,\n "startRadians": =~ number,\n "endRadians": =~ number\n};\n\ndef ArcArgs = {\n let elements =\n patterns {\n [ number as centerX, number as centerY, number as radiusX, number as radiusY, number as startRadians, number as endRadians ],\n [ { x: number as centerX, y: number as centerY }, number as radiusX, number as radiusY, number as startRadians, number as endRadians ]\n } |> { "centerX", "centerY", "radiusX", "radiusY", "startRadians", "endRadians" },\n \n "center": Point2D(elements.centerX, elements.centerY),\n "radiusX": elements.radiusX,\n "radiusY": elements.radiusY,\n "startRadians": elements.startRadians,\n "endRadians": elements.endRadians\n};\n\ndef Bezier2 = {\n "p1": P1,\n "p2": P2,\n "p3": P3\n};\n\ndef Bezier2Args = {\n let elements =\n patterns {\n [ number as p1x, number as p1y, number as p2x, number as p2y, number as p3x, number as p3y ],\n [ { x: number as p1x, y: number as p1y }, { x: number as p2x, y: number as p2y }, { x: number as p3x, y: number as p3y }]\n } |> { "p1x", "p1y", "p2x", "p2y", "p3x", "p3y" },\n \n "p1": Point2D(elements.p1x, elements.p1y),\n "p2": Point2D(elements.p2x, elements.p2y),\n "p3": Point2D(elements.p3x, elements.p3y)\n};\n\ndef Bezier3 = {\n "p1": P1,\n "p2": P2,\n "p3": P3,\n "p4": P4\n};\n\ndef Bezier3Args = {\n let elements =\n patterns {\n [ number as p1x, number as p1y, number as p2x, number as p2y, number as p3x, number as p3y, number as p4x, number as p4y ],\n [ { x: number as p1x, y: number as p1y }, { x: number as p2x, y: number as p2y }, { x: number as p3x, y: number as p3y }, { x: number as p4x, y: number as p4y }]\n } |> { "p1x", "p1y", "p2x", "p2y", "p3x", "p3y", "p4x", "p4y" },\n \n "p1": Point2D(elements.p1x, elements.p1y),\n "p2": Point2D(elements.p2x, elements.p2y),\n "p3": Point2D(elements.p3x, elements.p3y),\n "p4": Point2D(elements.p4x, elements.p4y)\n};\n\ndef Circle = {\n "center": Center,\n "radius":\n patterns {\n { r: number as radius},\n { radius: number as radius }\n } |> radius\n};\n\ndef CircleArgs = {\n let elements =\n patterns {\n [ number as centerX, number as centerY, number as radius ],\n [ { x: number as centerX, y: number as centerY }, number as radius ]\n } |> { "centerX", "centerY", "radius" },\n \n "center": Point2D(elements.centerX, elements.centerY),\n "radius": elements.radius\n};\n\ndef Ellipse = {\n let radii = Radii,\n\n "center": Center,\n "radiusX": radii.rx,\n "radiusY": radii.ry\n};\n\ndef EllipseArgs = {\n let elements =\n patterns {\n [ number as centerX, number as centerY, number as radiusX, number as radiusY ],\n [ { x: number as centerX, y: number as centerY }, number as radiusX, number as radiusY ]\n } |> { "centerX", "centerY", "radiusX", "radiusY" },\n \n "center": Point2D(elements.centerX, elements.centerY),\n "radiusX": elements.radiusX,\n "radiusY": elements.radiusY\n};\n\ndef Line = {\n "p1": P1,\n "p2": P2\n};\n\ndef LineArgs = {\n let elements =\n patterns {\n [ number as p1x, number as p1y, number as p2x, number as p2y ],\n [ { x: number as p1x, y: number as p1y }, { x: number as p2x, y: number as p2y } ]\n } |> { "p1x", "p1y", "p2x", "p2y" },\n \n "p1": Point2D(elements.p1x, elements.p1y),\n "p2": Point2D(elements.p2x, elements.p2y)\n};\n\ndef Path = {\n "segments":\n =~ { d: string as data } |> PathData(data)\n};\n\ndef PathArgs = {\n "segments":\n =~ string as data |> PathData(data)\n};\n\ndef Polygon = {\n "points":\n sequences {\n =~ { points: [ (number, number); 0.. as coords ] }\n |> [ map(coords, Point2D(...$)) ],\n\n =~ { points: [ { x: number, y: number }; 0.. ] as points }\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef PolygonArgs = {\n "points":\n sequences {\n =~ [ (number, number); 0.. as coords ]\n |> [ map(coords, Point2D(...$)) ],\n\n =~ [ { x: number, y: number }; 0.. ] as points\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef Polyline = {\n "points":\n sequences {\n =~ { points: [ (number, number); 0.. as coords ] }\n |> [ map(coords, Point2D(...$)) ],\n\n =~ { points: [ { x: number, y: number }; 0.. ] as points }\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef PolylineArgs = {\n "points":\n sequences {\n =~ [ (number, number); 0.. as coords ]\n |> [ map(coords, Point2D(...$)) ],\n\n =~ [ { x: number, y: number }; 0.. ] as points\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef Rectangle = {\n let topLeft =\n patterns {\n { topLeft: { x: number as x, y: number as y } },\n { topLeft: [ number as x, number as y ] },\n { x: number as x, y: number as y },\n { top: number as x, left: number as y }\n } |> { "x", "y" },\n\n "topLeft":\n Point2D(topLeft.x, topLeft.y),\n\n "bottomRight":\n sequences {\n patterns {\n { bottomRight: { x: number as x, y: number as y } },\n { bottomRight: [ number as x, number as y ] }\n } |> Point2D(x, y),\n patterns {\n { w: number as w, h: number as h },\n { width: number as w, height: number as h },\n { size: { x: number as w, y: number as h } },\n { size: [ number as w, number as h ] }\n } |> Point2D(topLeft.x + w, topLeft.y + h)\n },\n\n "rx":\n sequences {\n =~ { rx: number as rx } |> rx,\n =~ any |> 0\n },\n "ry":\n sequences {\n =~ { ry: number as ry } |> ry,\n =~ any |> 0\n }\n};\n\ndef RectangleArgs = {\n let elements =\n patterns {\n [ number as x, number as y, number as width, number as height ],\n [ number as x, number as y, number as width, number as height, number as rx, number as ry ],\n [ { x: number as x, y: number as y }, { x: number as width, y: number as height } ],\n [ { x: number as x, y: number as y }, { x: number as width, y: number as height }, { rx: number as rx, ry: number as ry } ],\n [ { x: number as x, y: number as y }, { x: number as width, y: number as height }, { radiusX: number as rx, radiusY: number as ry } ]\n } |> { "x", "y", "width", "height", "rx", "ry" },\n\n "topLeft": Point2D(elements.x, elements.y),\n "bottomRight": Point2D(elements.x + elements.width, elements.y + elements.height),\n "rx": elements.rx,\n "ry": elements.ry\n}\n'),M.addFunction("Point2D",(function(e,t){return new i(e,t)})),M.addFunction("PathData",(function(e){var t=new b,n=new k(P);return t.setHandler(n),t.parseData(e),n.shapes}));var S=2*Math.PI,R=new o(1,0);function _(e){return null==e}function I(e){var t=e%S;return t<0?t+S:t}function T(e,t,n,r,a,s){if(0===e.points.length)return e;var i=new X("No Intersection"),u=I(a),l=I(s);l0&&(i.status="Intersection"),i}function N(e){var t=e.slice();return t.push(e[0]),t}var X=function(){function e(n){t(this,e),this.init(n)}return r(e,[{key:"init",value:function(e){this.status=e,this.points=[]}},{key:"appendPoint",value:function(e){this.points.push(e)}},{key:"appendPoints",value:function(e){this.points=this.points.concat(e)}}],[{key:"intersect",value:function(t,n){var r;if(_(t)||_(n))r=new e("No Intersection");else if("Path"===t.name)r=e.intersectPathShape(t,n);else if("Path"===n.name)r=e.intersectPathShape(n,t);else if("Arc"===t.name)r=e.intersectArcShape(t,n);else if("Arc"===n.name)r=e.intersectArcShape(n,t);else{var a,s;if(t.name0&&(r.status="Intersection"),r}},{key:"intersectArcShape",value:function(t,n){var r=a(t.args,5),s=r[0],i=r[1],o=r[2],u=r[3],l=r[4],c=new P(P.ELLIPSE,[s,i,o]);return T(e.intersect(c,n),s,0,0,u,l)}},{key:"intersectBezier2Bezier2",value:function(t,n,r,a,s,o){var u,l,h=new e("No Intersection");u=n.multiply(-2);var y=t.add(u.add(r));u=t.multiply(-2),l=n.multiply(2);var p=u.add(l),f=new i(t.x,t.y);u=s.multiply(-2);var x=a.add(u.add(o));u=a.multiply(-2),l=s.multiply(2);var v=u.add(l),m=new i(a.x,a.y);u=y.x*p.y-p.x*y.y,l=x.x*p.y-p.x*x.y;var d=v.x*p.y-p.x*v.y,b=p.x*(f.y-m.y)+p.y*(-f.x+m.x),g=x.x*y.y-y.x*x.y,w=v.x*y.y-y.x*v.y,k=y.x*(f.y-m.y)+y.y*(-f.x+m.x),E=new c(-g*g,-2*g*w,u*l-w*w-2*g*k,u*d-2*w*k,u*b-k*k).getRoots(),P=!0,A=!1,M=void 0;try{for(var S,R=E[Symbol.iterator]();!(P=(S=R.next()).done);P=!0){var _=S.value;if(0<=_&&_<=1){var I=new c(y.x,p.x,f.x-m.x-_*v.x-_*_*x.x);I.simplifyEquals();var T=I.getRoots(),N=new c(y.y,p.y,f.y-m.y-_*v.y-_*_*x.y);N.simplifyEquals();var X=N.getRoots();if(T.length>0&&X.length>0){var Y=!0,C=!1,L=void 0;try{e:for(var $,D=T[Symbol.iterator]();!(Y=($=D.next()).done);Y=!0){var z=$.value;if(0<=z&&z<=1){var B=!0,O=!1,q=void 0;try{for(var j,U=X[Symbol.iterator]();!(B=(j=U.next()).done);B=!0){var V=j.value;if(Math.abs(z-V)<1e-4){h.points.push(x.multiply(_*_).add(v.multiply(_).add(m)));break e}}}catch(e){O=!0,q=e}finally{try{B||null==U.return||U.return()}finally{if(O)throw q}}}}}catch(e){C=!0,L=e}finally{try{Y||null==D.return||D.return()}finally{if(C)throw L}}}}}}catch(e){A=!0,M=e}finally{try{P||null==R.return||R.return()}finally{if(A)throw M}}return h.points.length>0&&(h.status="Intersection"),h}},{key:"intersectBezier2Bezier3",value:function(t,n,r,a,s,o,u){var l,h,y,p,f=new e("No Intersection");l=n.multiply(-2);var x=t.add(l.add(r));l=t.multiply(-2),h=n.multiply(2);var v=l.add(h),m=new i(t.x,t.y);l=a.multiply(-1),h=s.multiply(3),y=o.multiply(-3),p=l.add(h.add(y.add(u)));var d=new i(p.x,p.y);l=a.multiply(3),h=s.multiply(-6),y=o.multiply(3),p=l.add(h.add(y));var b=new i(p.x,p.y);l=a.multiply(-3),h=s.multiply(3),y=l.add(h);var g=new i(y.x,y.y),w=new i(a.x,a.y),k=m.x*m.x,E=m.y*m.y,P=v.x*v.x,A=v.y*v.y,M=x.x*x.x,S=x.y*x.y,R=w.x*w.x,_=w.y*w.y,I=g.x*g.x,T=g.y*g.y,N=b.x*b.x,X=b.y*b.y,Y=d.x*d.x,C=d.y*d.y,L=new c(-2*x.x*x.y*d.x*d.y+M*C+S*Y,-2*x.x*x.y*b.x*d.y-2*x.x*x.y*b.y*d.x+2*S*b.x*d.x+2*M*b.y*d.y,-2*x.x*g.x*x.y*d.y-2*x.x*x.y*g.y*d.x-2*x.x*x.y*b.x*b.y+2*g.x*S*d.x+S*N+M*(2*g.y*d.y+X),2*m.x*x.x*x.y*d.y+2*m.y*x.x*x.y*d.x+v.x*v.y*x.x*d.y+v.x*v.y*x.y*d.x-2*w.x*x.x*x.y*d.y-2*x.x*w.y*x.y*d.x-2*x.x*g.x*x.y*b.y-2*x.x*x.y*g.y*b.x-2*m.x*S*d.x-2*m.y*M*d.y+2*w.x*S*d.x+2*g.x*S*b.x-A*x.x*d.x-P*x.y*d.y+M*(2*w.y*d.y+2*g.y*b.y),2*m.x*x.x*x.y*b.y+2*m.y*x.x*x.y*b.x+v.x*v.y*x.x*b.y+v.x*v.y*x.y*b.x-2*w.x*x.x*x.y*b.y-2*x.x*w.y*x.y*b.x-2*x.x*g.x*x.y*g.y-2*m.x*S*b.x-2*m.y*M*b.y+2*w.x*S*b.x-A*x.x*b.x-P*x.y*b.y+I*S+M*(2*w.y*b.y+T),2*m.x*x.x*x.y*g.y+2*m.y*x.x*g.x*x.y+v.x*v.y*x.x*g.y+v.x*v.y*g.x*x.y-2*w.x*x.x*x.y*g.y-2*x.x*w.y*g.x*x.y-2*m.x*g.x*S-2*m.y*M*g.y+2*w.x*g.x*S-A*x.x*g.x-P*x.y*g.y+2*M*w.y*g.y,-2*m.x*m.y*x.x*x.y-m.x*v.x*v.y*x.y-m.y*v.x*v.y*x.x+2*m.x*x.x*w.y*x.y+2*m.y*w.x*x.x*x.y+v.x*w.x*v.y*x.y+v.x*v.y*x.x*w.y-2*w.x*x.x*w.y*x.y-2*m.x*w.x*S+m.x*A*x.x+m.y*P*x.y-2*m.y*M*w.y-w.x*A*x.x-P*w.y*x.y+k*S+E*M+R*S+M*_).getRootsInInterval(0,1),$=!0,D=!1,z=void 0;try{for(var B,O=L[Symbol.iterator]();!($=(B=O.next()).done);$=!0){var q=B.value,j=new c(x.x,v.x,m.x-w.x-q*g.x-q*q*b.x-q*q*q*d.x).getRoots(),U=new c(x.y,v.y,m.y-w.y-q*g.y-q*q*b.y-q*q*q*d.y).getRoots();if(j.length>0&&U.length>0){var V=!0,F=!1,G=void 0;try{e:for(var Q,H=j[Symbol.iterator]();!(V=(Q=H.next()).done);V=!0){var Z=Q.value;if(0<=Z&&Z<=1){var W=!0,J=!1,K=void 0;try{for(var ee,te=U[Symbol.iterator]();!(W=(ee=te.next()).done);W=!0){var ne=ee.value;if(Math.abs(Z-ne)<1e-4){f.points.push(d.multiply(q*q*q).add(b.multiply(q*q).add(g.multiply(q).add(w))));break e}}}catch(e){J=!0,K=e}finally{try{W||null==te.return||te.return()}finally{if(J)throw K}}}}}catch(e){F=!0,G=e}finally{try{V||null==H.return||H.return()}finally{if(F)throw G}}}}}catch(e){D=!0,z=e}finally{try{$||null==O.return||O.return()}finally{if(D)throw z}}return f.points.length>0&&(f.status="Intersection"),f}},{key:"intersectBezier2Circle",value:function(t,n,r,a,s){return e.intersectBezier2Ellipse(t,n,r,a,s,s)}},{key:"intersectBezier2Ellipse",value:function(t,n,r,a,s,o){var u,l=new e("No Intersection");u=n.multiply(-2);var h=t.add(u.add(r));u=t.multiply(-2);var y=n.multiply(2),p=u.add(y),f=new i(t.x,t.y),x=s*s,v=o*o,m=new c(v*h.x*h.x+x*h.y*h.y,2*(v*h.x*p.x+x*h.y*p.y),v*(2*h.x*f.x+p.x*p.x)+x*(2*h.y*f.y+p.y*p.y)-2*(v*a.x*h.x+x*a.y*h.y),2*(v*p.x*(f.x-a.x)+x*p.y*(f.y-a.y)),v*(f.x*f.x+a.x*a.x)+x*(f.y*f.y+a.y*a.y)-2*(v*a.x*f.x+x*a.y*f.y)-x*v).getRoots(),d=!0,b=!1,g=void 0;try{for(var w,k=m[Symbol.iterator]();!(d=(w=k.next()).done);d=!0){var E=w.value;0<=E&&E<=1&&l.points.push(h.multiply(E*E).add(p.multiply(E).add(f)))}}catch(e){b=!0,g=e}finally{try{d||null==k.return||k.return()}finally{if(b)throw g}}return l.points.length>0&&(l.status="Intersection"),l}},{key:"intersectBezier2Line",value:function(t,n,r,a,s){var u,l=a.min(s),h=a.max(s),y=new e("No Intersection");u=n.multiply(-2);var p=t.add(u.add(r));u=t.multiply(-2);var f=n.multiply(2),x=u.add(f),v=new i(t.x,t.y),m=new o(a.y-s.y,s.x-a.x),d=a.x*s.y-s.x*a.y,b=new c(m.dot(p),m.dot(x),m.dot(v)+d).getRoots(),g=!0,w=!1,k=void 0;try{for(var E,P=b[Symbol.iterator]();!(g=(E=P.next()).done);g=!0){var A=E.value;if(0<=A&&A<=1){var M=t.lerp(n,A),S=n.lerp(r,A),R=M.lerp(S,A);a.x===s.x?l.y<=R.y&&R.y<=h.y&&(y.status="Intersection",y.appendPoint(R)):a.y===s.y?l.x<=R.x&&R.x<=h.x&&(y.status="Intersection",y.appendPoint(R)):l.x<=R.x&&R.x<=h.x&&l.y<=R.y&&R.y<=h.y&&(y.status="Intersection",y.appendPoint(R))}}}catch(e){w=!0,k=e}finally{try{g||null==P.return||P.return()}finally{if(w)throw k}}return y}},{key:"intersectBezier2Polygon",value:function(t,n,r,a){return e.intersectBezier2Polyline(t,n,r,N(a))}},{key:"intersectBezier2Polyline",value:function(t,n,r,a){for(var s=new e("No Intersection"),i=a.length,o=0;o0&&(s.status="Intersection"),s}},{key:"intersectBezier2Rectangle",value:function(t,n,r,a,s){var o=a.min(s),u=a.max(s),l=new i(u.x,o.y),c=new i(o.x,u.y),h=e.intersectBezier2Line(t,n,r,o,l),y=e.intersectBezier2Line(t,n,r,l,u),p=e.intersectBezier2Line(t,n,r,u,c),f=e.intersectBezier2Line(t,n,r,c,o),x=new e("No Intersection");return x.appendPoints(h.points),x.appendPoints(y.points),x.appendPoints(p.points),x.appendPoints(f.points),x.points.length>0&&(x.status="Intersection"),x}},{key:"intersectBezier3Bezier3",value:function(t,n,r,a,s,o,u,l){var h,y,p,f,x=new e("No Intersection");h=t.multiply(-1),y=n.multiply(3),p=r.multiply(-3),f=h.add(y.add(p.add(a)));var v=new i(f.x,f.y);h=t.multiply(3),y=n.multiply(-6),p=r.multiply(3),f=h.add(y.add(p));var m=new i(f.x,f.y);h=t.multiply(-3),y=n.multiply(3),p=h.add(y);var d=new i(p.x,p.y),b=new i(t.x,t.y);h=s.multiply(-1),y=o.multiply(3),p=u.multiply(-3),f=h.add(y.add(p.add(l)));var g=new i(f.x,f.y);h=s.multiply(3),y=o.multiply(-6),p=u.multiply(3),f=h.add(y.add(p));var w=new i(f.x,f.y);h=s.multiply(-3),y=o.multiply(3),p=h.add(y);var k=new i(p.x,p.y),E=new i(s.x,s.y);h=v.x*m.y-m.x*v.y,y=v.x*d.y-d.x*v.y;var P=v.x*b.y-b.x*v.y+E.x*v.y-v.x*E.y,A=k.x*v.y-v.x*k.y,M=w.x*v.y-v.x*w.y,S=g.x*v.y-v.x*g.y;f=v.x*d.y-d.x*v.y;var R=v.x*b.y+m.x*d.y-d.x*m.y-b.x*v.y+E.x*v.y-v.x*E.y,_=k.x*v.y-v.x*k.y,I=w.x*v.y-v.x*w.y,T=g.x*v.y-v.x*g.y,N=m.x*b.y-b.x*m.y+E.x*m.y-m.x*E.y,X=k.x*m.y-m.x*k.y,Y=w.x*m.y-m.x*w.y,C=g.x*m.y-m.x*g.y,L=v.x*b.y-b.x*v.y+E.x*v.y-v.x*E.y,$=k.x*v.y-v.x*k.y,D=w.x*v.y-v.x*w.y,z=g.x*v.y-v.x*g.y,B=m.x*b.y-b.x*m.y+E.x*m.y-m.x*E.y,O=k.x*m.y-m.x*k.y,q=w.x*m.y-m.x*w.y,j=g.x*m.y-m.x*g.y,U=d.x*b.y-b.x*d.y+E.x*d.y-d.x*E.y,V=k.x*d.y-d.x*k.y,F=w.x*d.y-d.x*w.y,G=g.x*d.y-d.x*g.y,Q=new c(-S*T*z,-S*T*D-S*I*z-M*T*z,-S*T*$-S*I*D-M*T*D-S*_*z-M*I*z-A*T*z,-S*T*L-S*I*$-M*T*$-S*_*D-M*I*D-A*T*D-S*R*z-M*_*z-A*I*z-P*T*z+y*C*z+S*f*j-h*C*j+h*T*G,-S*I*L-M*T*L-S*_*$-M*I*$-A*T*$-S*R*D-M*_*D-A*I*D-P*T*D+y*C*D-M*R*z-A*_*z-P*I*z+y*Y*z+S*f*q-h*C*q+M*f*j-h*Y*j+h*T*F+h*I*G,-S*_*L-M*I*L-A*T*L-S*R*$-M*_*$-A*I*$-P*T*$+y*C*$-M*R*D-A*_*D-P*I*D+y*Y*D-A*R*z-P*_*z+y*X*z+S*f*O-h*C*O+M*f*q-h*Y*q+A*f*j-h*X*j+h*T*V+h*I*F+h*_*G,-S*R*L-M*_*L-A*I*L-P*T*L+y*C*L-M*R*$-A*_*$-P*I*$+y*Y*$-A*R*D-P*_*D+y*X*D-P*R*z+y*N*z+S*f*B-h*C*B+M*f*O-h*Y*O+A*f*q-h*X*q+P*f*j-h*N*j+h*T*U+h*I*V+h*_*F-y*f*G+h*R*G,-M*R*L-A*_*L-P*I*L+y*Y*L-A*R*$-P*_*$+y*X*$-P*R*D+y*N*D+M*f*B-h*Y*B+A*f*O-h*X*O+P*f*q-h*N*q+h*I*U+h*_*V-y*f*F+h*R*F,-A*R*L-P*_*L+y*X*L-P*R*$+y*N*$+A*f*B-h*X*B+P*f*O-h*N*O+h*_*U-y*f*V+h*R*V,-P*R*L+y*N*L+P*f*B-h*N*B-y*f*U+h*R*U);Q.simplifyEquals();var H=Q.getRootsInInterval(0,1),Z=!0,W=!1,J=void 0;try{for(var K,ee=H[Symbol.iterator]();!(Z=(K=ee.next()).done);Z=!0){var te=K.value,ne=new c(v.x,m.x,d.x,b.x-E.x-te*k.x-te*te*w.x-te*te*te*g.x);ne.simplifyEquals();var re=ne.getRoots(),ae=new c(v.y,m.y,d.y,b.y-E.y-te*k.y-te*te*w.y-te*te*te*g.y);ae.simplifyEquals();var se=ae.getRoots();if(re.length>0&&se.length>0){var ie=!0,oe=!1,ue=void 0;try{e:for(var le,ce=re[Symbol.iterator]();!(ie=(le=ce.next()).done);ie=!0){var he=le.value;if(0<=he&&he<=1){var ye=!0,pe=!1,fe=void 0;try{for(var xe,ve=se[Symbol.iterator]();!(ye=(xe=ve.next()).done);ye=!0){var me=xe.value;if(Math.abs(he-me)<1e-4){x.points.push(g.multiply(te*te*te).add(w.multiply(te*te).add(k.multiply(te).add(E))));break e}}}catch(e){pe=!0,fe=e}finally{try{ye||null==ve.return||ve.return()}finally{if(pe)throw fe}}}}}catch(e){oe=!0,ue=e}finally{try{ie||null==ce.return||ce.return()}finally{if(oe)throw ue}}}}}catch(e){W=!0,J=e}finally{try{Z||null==ee.return||ee.return()}finally{if(W)throw J}}return x.points.length>0&&(x.status="Intersection"),x}},{key:"intersectBezier3Circle",value:function(t,n,r,a,s,i){return e.intersectBezier3Ellipse(t,n,r,a,s,i,i)}},{key:"intersectBezier3Ellipse",value:function(t,n,r,a,s,o,u){var l,h,y,p,f=new e("No Intersection");l=t.multiply(-1),h=n.multiply(3),y=r.multiply(-3),p=l.add(h.add(y.add(a)));var x=new i(p.x,p.y);l=t.multiply(3),h=n.multiply(-6),y=r.multiply(3),p=l.add(h.add(y));var v=new i(p.x,p.y);l=t.multiply(-3),h=n.multiply(3),y=l.add(h);var m=new i(y.x,y.y),d=new i(t.x,t.y),b=o*o,g=u*u,w=new c(x.x*x.x*g+x.y*x.y*b,2*(x.x*v.x*g+x.y*v.y*b),2*(x.x*m.x*g+x.y*m.y*b)+v.x*v.x*g+v.y*v.y*b,2*x.x*g*(d.x-s.x)+2*x.y*b*(d.y-s.y)+2*(v.x*m.x*g+v.y*m.y*b),2*v.x*g*(d.x-s.x)+2*v.y*b*(d.y-s.y)+m.x*m.x*g+m.y*m.y*b,2*m.x*g*(d.x-s.x)+2*m.y*b*(d.y-s.y),d.x*d.x*g-2*d.y*s.y*b-2*d.x*s.x*g+d.y*d.y*b+s.x*s.x*g+s.y*s.y*b-b*g).getRootsInInterval(0,1),k=!0,E=!1,P=void 0;try{for(var A,M=w[Symbol.iterator]();!(k=(A=M.next()).done);k=!0){var S=A.value;f.points.push(x.multiply(S*S*S).add(v.multiply(S*S).add(m.multiply(S).add(d))))}}catch(e){E=!0,P=e}finally{try{k||null==M.return||M.return()}finally{if(E)throw P}}return f.points.length>0&&(f.status="Intersection"),f}},{key:"intersectBezier3Line",value:function(t,n,r,a,s,i){var u,l,h,y,p=s.min(i),f=s.max(i),x=new e("No Intersection");u=t.multiply(-1),l=n.multiply(3),h=r.multiply(-3),y=u.add(l.add(h.add(a)));var v=new o(y.x,y.y);u=t.multiply(3),l=n.multiply(-6),h=r.multiply(3),y=u.add(l.add(h));var m=new o(y.x,y.y);u=t.multiply(-3),l=n.multiply(3),h=u.add(l);var d=new o(h.x,h.y),b=new o(t.x,t.y),g=new o(s.y-i.y,i.x-s.x),w=s.x*i.y-i.x*s.y,k=new c(g.dot(v),g.dot(m),g.dot(d),g.dot(b)+w).getRoots(),E=!0,P=!1,A=void 0;try{for(var M,S=k[Symbol.iterator]();!(E=(M=S.next()).done);E=!0){var R=M.value;if(0<=R&&R<=1){var _=t.lerp(n,R),I=n.lerp(r,R),T=r.lerp(a,R),N=_.lerp(I,R),X=I.lerp(T,R),Y=N.lerp(X,R);s.x===i.x?p.y<=Y.y&&Y.y<=f.y&&(x.status="Intersection",x.appendPoint(Y)):s.y===i.y?p.x<=Y.x&&Y.x<=f.x&&(x.status="Intersection",x.appendPoint(Y)):p.x<=Y.x&&Y.x<=f.x&&p.y<=Y.y&&Y.y<=f.y&&(x.status="Intersection",x.appendPoint(Y))}}}catch(e){P=!0,A=e}finally{try{E||null==S.return||S.return()}finally{if(P)throw A}}return x}},{key:"intersectBezier3Polygon",value:function(t,n,r,a,s){return e.intersectBezier3Polyline(t,n,r,a,N(s))}},{key:"intersectBezier3Polyline",value:function(t,n,r,a,s){for(var i=new e("No Intersection"),o=s.length,u=0;u0&&(i.status="Intersection"),i}},{key:"intersectBezier3Rectangle",value:function(t,n,r,a,s,o){var u=s.min(o),l=s.max(o),c=new i(l.x,u.y),h=new i(u.x,l.y),y=e.intersectBezier3Line(t,n,r,a,u,c),p=e.intersectBezier3Line(t,n,r,a,c,l),f=e.intersectBezier3Line(t,n,r,a,l,h),x=e.intersectBezier3Line(t,n,r,a,h,u),v=new e("No Intersection");return v.appendPoints(y.points),v.appendPoints(p.points),v.appendPoints(f.points),v.appendPoints(x.points),v.points.length>0&&(v.status="Intersection"),v}},{key:"intersectCircleCircle",value:function(t,n,r,a){var s,o=n+a,u=Math.abs(n-a),l=t.distanceFrom(r);if(l>o)s=new e("Outside");else if(l1)&&(h<0||h>1)?s=new e(c<0&&h<0||c>1&&h>1?"Outside":"Inside"):(s=new e("Intersection"),0<=c&&c<=1&&s.points.push(r.lerp(a,c)),0<=h&&h<=1&&s.points.push(r.lerp(a,h)))}return s}},{key:"intersectCirclePolygon",value:function(t,n,r){return e.intersectCirclePolyline(t,n,N(r))}},{key:"intersectCirclePolyline",value:function(t,n,r){for(var a,s=new e("No Intersection"),i=r.length,o=0;o0?s.status="Intersection":s.status=a.status,s}},{key:"intersectCircleRectangle",value:function(t,n,r,a){var s=r.min(a),o=r.max(a),u=new i(o.x,s.y),l=new i(s.x,o.y),c=e.intersectCircleLine(t,n,s,u),h=e.intersectCircleLine(t,n,u,o),y=e.intersectCircleLine(t,n,o,l),p=e.intersectCircleLine(t,n,l,s),f=new e("No Intersection");return f.appendPoints(c.points),f.appendPoints(h.points),f.appendPoints(y.points),f.appendPoints(p.points),f.points.length>0?f.status="Intersection":f.status=c.status,f}},{key:"intersectEllipseEllipse",value:function(t,n,r,a,s,o){var u,l,h,y,p,f,x,v,m,d,b,g,w,k,E,P=[r*r,0,n*n,-2*r*r*t.x,-2*n*n*t.y,r*r*t.x*t.x+n*n*t.y*t.y-n*n*r*r],A=[o*o,0,s*s,-2*o*o*a.x,-2*s*s*a.y,o*o*a.x*a.x+s*s*a.y*a.y-s*s*o*o],M=(l=A,h=(u=P)[0]*l[1]-l[0]*u[1],y=u[0]*l[2]-l[0]*u[2],p=u[0]*l[3]-l[0]*u[3],f=u[0]*l[4]-l[0]*u[4],x=u[0]*l[5]-l[0]*u[5],v=u[1]*l[2]-l[1]*u[2],m=u[1]*l[4]-l[1]*u[4],d=u[1]*l[5]-l[1]*u[5],b=u[2]*l[3]-l[2]*u[3],g=u[3]*l[4]-l[3]*u[4],w=u[3]*l[5]-l[3]*u[5],new c(h*v-y*y,h*(E=m-b)+p*v-2*y*f,h*(k=d+g)+p*E-f*f-2*y*x,h*w+p*k-2*f*x,p*w-x*x)).getRoots(),S=.001*(P[0]*P[0]+2*P[1]*P[1]+P[2]*P[2]),R=.001*(A[0]*A[0]+2*A[1]*A[1]+A[2]*A[2]),_=new e("No Intersection"),I=!0,T=!1,N=void 0;try{for(var X,Y=M[Symbol.iterator]();!(I=(X=Y.next()).done);I=!0){var C=X.value,L=new c(P[0],P[3]+C*P[1],P[5]+C*(P[4]+C*P[2])).getRoots(),$=!0,D=!1,z=void 0;try{for(var B,O=L[Symbol.iterator]();!($=(B=O.next()).done);$=!0){var q=B.value,j=(P[0]*q+P[1]*C+P[3])*q+(P[2]*C+P[4])*C+P[5];Math.abs(j)0&&(_.status="Intersection"),_}},{key:"intersectEllipseLine",value:function(t,n,r,a,s){var i,u=new o(a.x,a.y),l=o.fromPoints(a,s),c=new o(t.x,t.y),h=u.subtract(c),y=new o(l.x/(n*n),l.y/(r*r)),p=new o(h.x/(n*n),h.y/(r*r)),f=l.dot(y),x=l.dot(p),v=x*x-f*(t=h.dot(p)-1);if(v<0)i=new e("Outside");else if(v>0){var m=Math.sqrt(v),d=(-x-m)/f,b=(-x+m)/f;(d<0||11&&b>1?"Outside":"Inside"):(i=new e("Intersection"),0<=d&&d<=1&&i.appendPoint(a.lerp(s,d)),0<=b&&b<=1&&i.appendPoint(a.lerp(s,b)))}else{var g=-x/f;0<=g&&g<=1?(i=new e("Intersection")).appendPoint(a.lerp(s,g)):i=new e("Outside")}return i}},{key:"intersectEllipsePolygon",value:function(t,n,r,a){return e.intersectEllipsePolyline(t,n,r,N(a))}},{key:"intersectEllipsePolyline",value:function(t,n,r,a){for(var s=new e("No Intersection"),i=a.length,o=0;o0&&(s.status="Intersection"),s}},{key:"intersectEllipseRectangle",value:function(t,n,r,a,s){var o=a.min(s),u=a.max(s),l=new i(u.x,o.y),c=new i(o.x,u.y),h=e.intersectEllipseLine(t,n,r,o,l),y=e.intersectEllipseLine(t,n,r,l,u),p=e.intersectEllipseLine(t,n,r,u,c),f=e.intersectEllipseLine(t,n,r,c,o),x=new e("No Intersection");return x.appendPoints(h.points),x.appendPoints(y.points),x.appendPoints(p.points),x.appendPoints(f.points),x.points.length>0&&(x.status="Intersection"),x}},{key:"intersectLineLine",value:function(t,n,r,a){var s,o=(a.x-r.x)*(t.y-r.y)-(a.y-r.y)*(t.x-r.x),u=(n.x-t.x)*(t.y-r.y)-(n.y-t.y)*(t.x-r.x),l=(a.y-r.y)*(n.x-t.x)-(a.x-r.x)*(n.y-t.y);if(0!==l){var c=o/l,h=u/l;0<=c&&c<=1&&0<=h&&h<=1?(s=new e("Intersection")).points.push(new i(t.x+c*(n.x-t.x),t.y+c*(n.y-t.y))):s=new e("No Intersection")}else s=new e(0===o||0===u?"Coincident":"Parallel");return s}},{key:"intersectLinePolygon",value:function(t,n,r){return e.intersectLinePolyline(t,n,N(r))}},{key:"intersectLinePolyline",value:function(t,n,r){for(var a=new e("No Intersection"),s=r.length,i=0;i0&&(a.status="Intersection"),a}},{key:"intersectLineRectangle",value:function(t,n,r,a){var s=r.min(a),o=r.max(a),u=new i(o.x,s.y),l=new i(s.x,o.y),c=e.intersectLineLine(s,u,t,n),h=e.intersectLineLine(u,o,t,n),y=e.intersectLineLine(o,l,t,n),p=e.intersectLineLine(l,s,t,n),f=new e("No Intersection");return f.appendPoints(c.points),f.appendPoints(h.points),f.appendPoints(y.points),f.appendPoints(p.points),f.points.length>0&&(f.status="Intersection"),f}},{key:"intersectPolygonPolygon",value:function(t,n){return e.intersectPolylinePolyline(N(t),N(n))}},{key:"intersectPolygonPolyline",value:function(t,n){return e.intersectPolylinePolyline(N(t),n)}},{key:"intersectPolygonRectangle",value:function(t,n,r){return e.intersectPolylineRectangle(N(t),n,r)}},{key:"intersectPolylinePolyline",value:function(t,n){for(var r=new e("No Intersection"),a=t.length,s=0;s0&&(r.status="Intersection"),r}},{key:"intersectPolylineRectangle",value:function(t,n,r){var a=n.min(r),s=n.max(r),o=new i(s.x,a.y),u=new i(a.x,s.y),l=e.intersectLinePolyline(a,o,t),c=e.intersectLinePolyline(o,s,t),h=e.intersectLinePolyline(s,u,t),y=e.intersectLinePolyline(u,a,t),p=new e("No Intersection");return p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.appendPoints(y.points),p.points.length>0&&(p.status="Intersection"),p}},{key:"intersectRectangleRectangle",value:function(t,n,r,a){var s=t.min(n),o=t.max(n),u=new i(o.x,s.y),l=new i(s.x,o.y),c=e.intersectLineRectangle(s,u,r,a),h=e.intersectLineRectangle(u,o,r,a),y=e.intersectLineRectangle(o,l,r,a),p=e.intersectLineRectangle(l,s,r,a),f=new e("No Intersection");return f.appendPoints(c.points),f.appendPoints(h.points),f.appendPoints(y.points),f.appendPoints(p.points),f.points.length>0&&(f.status="Intersection"),f}},{key:"intersectRayRay",value:function(t,n,r,a){var s,o=(a.x-r.x)*(t.y-r.y)-(a.y-r.y)*(t.x-r.x),u=(n.x-t.x)*(t.y-r.y)-(n.y-t.y)*(t.x-r.x),l=(a.y-r.y)*(n.x-t.x)-(a.x-r.x)*(n.y-t.y);if(0!==l){var c=o/l;(s=new e("Intersection")).points.push(new i(t.x+c*(n.x-t.x),t.y+c*(n.y-t.y)))}else s=new e(0===o||0===u?"Coincident":"Parallel");return s}}]),e}(),Y=function(){function e(){t(this,e)}return r(e,null,[{key:"arc",value:function(e,t,n,r,a,s){return P.arc.apply(P,arguments)}},{key:"quadraticBezier",value:function(e,t,n,r,a,s){return P.quadraticBezier.apply(P,arguments)}},{key:"cubicBezier",value:function(e,t,n,r,a,s,i,o){return P.cubicBezier.apply(P,arguments)}},{key:"circle",value:function(e,t,n){return P.circle.apply(P,arguments)}},{key:"ellipse",value:function(e,t,n,r){return P.ellipse.apply(P,arguments)}},{key:"line",value:function(e,t,n,r){return P.line.apply(P,arguments)}},{key:"path",value:function(e){return P.path.apply(P,arguments)}},{key:"polygon",value:function(e){return P.polygon.apply(P,arguments)}},{key:"polyline",value:function(e){return P.polyline.apply(P,arguments)}},{key:"rectangle",value:function(e,t,n,r){return P.rectangle.apply(P,arguments)}}]),e}(),C=function(){function e(){t(this,e)}return r(e,null,[{key:"arc",value:function(e,t,n,r,a){return P.arc.apply(P,arguments)}},{key:"quadraticBezier",value:function(e,t,n){return P.quadraticBezier.apply(P,arguments)}},{key:"cubicBezier",value:function(e,t,n,r){return P.cubicBezier.apply(P,arguments)}},{key:"circle",value:function(e,t){return P.circle.apply(P,arguments)}},{key:"ellipse",value:function(e,t,n){return P.ellipse.apply(P,arguments)}},{key:"line",value:function(e,t){return P.line.apply(P,arguments)}},{key:"path",value:function(e){return P.path.apply(P,arguments)}},{key:"polygon",value:function(e){return P.polygon.apply(P,arguments)}},{key:"polyline",value:function(e){return P.polyline.apply(P,arguments)}},{key:"rectangle",value:function(e,t){return P.rectangle.apply(P,arguments)}}]),e}(),L=function(){function e(){t(this,e)}return r(e,null,[{key:"circle",value:function(e){if(e instanceof SVGCircleElement==!1)throw new TypeError("Expected SVGCircleElement, but found ".concat(e));var t=new i(e.cx.baseVal.value,e.cy.baseVal.value),n=e.r.baseVal.value;return P.circle(t,n)}},{key:"ellipse",value:function(e){if(e instanceof SVGEllipseElement==!1)throw new TypeError("Expected SVGEllipseElement, but found ".concat(e));var t=new i(e.cx.baseVal.value,e.cy.baseVal.value),n=e.rx.baseVal.value,r=e.ry.baseVal.value;return P.ellipse(t,n,r)}},{key:"line",value:function(e){if(e instanceof SVGLineElement==!1)throw new TypeError("Expected SVGLineElement, but found ".concat(e));var t=new i(e.x1.baseVal.value,e.y1.baseVal.value),n=new i(e.x2.baseVal.value,e.y2.baseVal.value);return P.line(t,n)}},{key:"path",value:function(e){if(e instanceof SVGPathElement==!1)throw new TypeError("Expected SVGPathElement, but found ".concat(e));var t=e.getAttributeNS(null,"d");return P.path(t)}},{key:"polygon",value:function(e){if(e instanceof SVGPolygonElement==!1)throw new TypeError("Expected SVGPolygonElement, but found ".concat(e));for(var t=[],n=0;n\n * [a c e]
\n * [b d f]
\n * [0 0 1]
\n *\n * @param {number} a\n * @param {number} b\n * @param {number} c\n * @param {number} d\n * @param {number} e\n * @param {number} f\n * @returns {module:kld-affine.Matrix2D}\n */\n constructor(a = 1, b = 0, c = 0, d = 1, e = 0, f = 0) {\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n }\n\n /**\n * translation\n *\n * @param {number} tx\n * @param {number} ty\n * @returns {module:kld-affine.Matrix2D}\n */\n static translation(tx, ty) {\n return new Matrix2D(1, 0, 0, 1, tx, ty);\n }\n\n /**\n * scaling\n *\n * @param {number} scale\n * @returns {module:kld-affine.Matrix2D}\n */\n static scaling(scale) {\n return new Matrix2D(scale, 0, 0, scale, 0, 0);\n }\n\n /**\n * scalingAt\n *\n * @param {number} scale\n * @param {module:kld-affine.Point2D} center\n * @returns {module:kld-affine.Matrix2D}\n */\n static scalingAt(scale, center) {\n return new Matrix2D(\n scale,\n 0,\n 0,\n scale,\n center.x - center.x * scale,\n center.y - center.y * scale\n );\n }\n\n /**\n * nonUniformScaling\n *\n * @param {number} scaleX\n * @param {number} scaleY\n * @returns {module:kld-affine.Matrix2D}\n */\n static nonUniformScaling(scaleX, scaleY) {\n return new Matrix2D(scaleX, 0, 0, scaleY, 0, 0);\n }\n\n /**\n * nonUniformScalingAt\n *\n * @param {number} scaleX\n * @param {number} scaleY\n * @param {module:kld-affine.Point2D} center\n * @returns {module:kld-affine.Matrix2D}\n */\n static nonUniformScalingAt(scaleX, scaleY, center) {\n return new Matrix2D(\n scaleX,\n 0,\n 0,\n scaleY,\n center.x - center.x * scaleX,\n center.y - center.y * scaleY\n );\n }\n\n /**\n * rotation\n *\n * @param {number} radians\n * @returns {module:kld-affine.Matrix2D}\n */\n static rotation(radians) {\n const c = Math.cos(radians);\n const s = Math.sin(radians);\n\n return new Matrix2D(c, s, -s, c, 0, 0);\n }\n\n /**\n * rotationAt\n *\n * @param {number} radians\n * @param {module:kld-affine.Point2D} center\n * @returns {module:kld-affine.Matrix2D}\n */\n static rotationAt(radians, center) {\n const c = Math.cos(radians);\n const s = Math.sin(radians);\n\n return new Matrix2D(\n c,\n s,\n -s,\n c,\n center.x - center.x * c + center.y * s,\n center.y - center.y * c - center.x * s\n );\n }\n\n /**\n * rotationFromVector\n *\n * @param {module:kld-affine.Vector2D} vector\n * @returns {module:kld-affine.Matrix2D}\n */\n static rotationFromVector(vector) {\n const unit = vector.unit();\n const c = unit.x; // cos\n const s = unit.y; // sin\n\n return new Matrix2D(c, s, -s, c, 0, 0);\n }\n\n /**\n * xFlip\n *\n * @returns {module:kld-affine.Matrix2D}\n */\n static xFlip() {\n return new Matrix2D(-1, 0, 0, 1, 0, 0);\n }\n\n /**\n * yFlip\n *\n * @returns {module:kld-affine.Matrix2D}\n */\n static yFlip() {\n return new Matrix2D(1, 0, 0, -1, 0, 0);\n }\n\n /**\n * xSkew\n *\n * @param {number} radians\n * @returns {module:kld-affine.Matrix2D}\n */\n static xSkew(radians) {\n const t = Math.tan(radians);\n\n return new Matrix2D(1, 0, t, 1, 0, 0);\n }\n\n /**\n * ySkew\n *\n * @param {number} radians\n * @returns {module:kld-affine.Matrix2D}\n */\n static ySkew(radians) {\n const t = Math.tan(radians);\n\n return new Matrix2D(1, t, 0, 1, 0, 0);\n }\n\n /**\n * multiply\n *\n * @param {module:kld-affine.Matrix2D} that\n * @returns {module:kld-affine.Matrix2D}\n */\n multiply(that) {\n if (this.isIdentity()) {\n return that;\n }\n\n if (that.isIdentity()) {\n return this;\n }\n\n return new this.constructor(\n this.a * that.a + this.c * that.b,\n this.b * that.a + this.d * that.b,\n this.a * that.c + this.c * that.d,\n this.b * that.c + this.d * that.d,\n this.a * that.e + this.c * that.f + this.e,\n this.b * that.e + this.d * that.f + this.f\n );\n }\n\n /**\n * inverse\n *\n * @returns {module:kld-affine.Matrix2D}\n */\n inverse() {\n if (this.isIdentity()) {\n return this;\n }\n\n const det1 = this.a * this.d - this.b * this.c;\n\n if (det1 === 0.0) {\n throw new Error(\"Matrix is not invertible\");\n }\n\n const idet = 1.0 / det1;\n const det2 = this.f * this.c - this.e * this.d;\n const det3 = this.e * this.b - this.f * this.a;\n\n return new this.constructor(\n this.d * idet,\n -this.b * idet,\n -this.c * idet,\n this.a * idet,\n det2 * idet,\n det3 * idet\n );\n }\n\n /**\n * translate\n *\n * @param {number} tx\n * @param {number} ty\n * @returns {module:kld-affine.Matrix2D}\n */\n translate(tx, ty) {\n return new this.constructor(\n this.a,\n this.b,\n this.c,\n this.d,\n this.a * tx + this.c * ty + this.e,\n this.b * tx + this.d * ty + this.f\n );\n }\n\n /**\n * scale\n *\n * @param {number} scale\n * @returns {module:kld-affine.Matrix2D}\n */\n scale(scale) {\n return new this.constructor(\n this.a * scale,\n this.b * scale,\n this.c * scale,\n this.d * scale,\n this.e,\n this.f\n );\n }\n\n /**\n * scaleAt\n *\n * @param {number} scale\n * @param {module:kld-affine.Point2D} center\n * @returns {module:kld-affine.Matrix2D}\n */\n scaleAt(scale, center) {\n const dx = center.x - scale * center.x;\n const dy = center.y - scale * center.y;\n\n return new this.constructor(\n this.a * scale,\n this.b * scale,\n this.c * scale,\n this.d * scale,\n this.a * dx + this.c * dy + this.e,\n this.b * dx + this.d * dy + this.f\n );\n }\n\n /**\n * scaleNonUniform\n *\n * @param {number} scaleX\n * @param {number} scaleY\n * @returns {module:kld-affine.Matrix2D}\n */\n scaleNonUniform(scaleX, scaleY) {\n return new this.constructor(\n this.a * scaleX,\n this.b * scaleX,\n this.c * scaleY,\n this.d * scaleY,\n this.e,\n this.f\n );\n }\n\n /**\n * scaleNonUniformAt\n *\n * @param {number} scaleX\n * @param {number} scaleY\n * @param {module:kld-affine.Point2D} center\n * @returns {module:kld-affine.Matrix2D}\n */\n scaleNonUniformAt(scaleX, scaleY, center) {\n const dx = center.x - scaleX * center.x;\n const dy = center.y - scaleY * center.y;\n\n return new this.constructor(\n this.a * scaleX,\n this.b * scaleX,\n this.c * scaleY,\n this.d * scaleY,\n this.a * dx + this.c * dy + this.e,\n this.b * dx + this.d * dy + this.f\n );\n }\n\n /**\n * rotate\n *\n * @param {number} radians\n * @returns {module:kld-affine.Matrix2D}\n */\n rotate(radians) {\n const c = Math.cos(radians);\n const s = Math.sin(radians);\n\n return new this.constructor(\n this.a * c + this.c * s,\n this.b * c + this.d * s,\n this.a * -s + this.c * c,\n this.b * -s + this.d * c,\n this.e,\n this.f\n );\n }\n\n /**\n * rotateAt\n *\n * @param {number} radians\n * @param {module:kld-affine.Point2D} center\n * @returns {module:kld-affine.Matrix2D}\n */\n rotateAt(radians, center) {\n const cos = Math.cos(radians);\n const sin = Math.sin(radians);\n const cx = center.x;\n const cy = center.y;\n\n const a = this.a * cos + this.c * sin;\n const b = this.b * cos + this.d * sin;\n const c = this.c * cos - this.a * sin;\n const d = this.d * cos - this.b * sin;\n\n return new this.constructor(\n a,\n b,\n c,\n d,\n (this.a - a) * cx + (this.c - c) * cy + this.e,\n (this.b - b) * cx + (this.d - d) * cy + this.f\n );\n }\n\n /**\n * rotateFromVector\n *\n * @param {module:kld-affine.Vector2D} vector\n * @returns {module:kld-affine.Matrix2D}\n */\n rotateFromVector(vector) {\n const unit = vector.unit();\n const c = unit.x; // cos\n const s = unit.y; // sin\n\n return new this.constructor(\n this.a * c + this.c * s,\n this.b * c + this.d * s,\n this.a * -s + this.c * c,\n this.b * -s + this.d * c,\n this.e,\n this.f\n );\n }\n\n /**\n * flipX\n *\n * @returns {module:kld-affine.Matrix2D}\n */\n flipX() {\n return new this.constructor(\n -this.a,\n -this.b,\n this.c,\n this.d,\n this.e,\n this.f\n );\n }\n\n /**\n * flipY\n *\n * @returns {module:kld-affine.Matrix2D}\n */\n flipY() {\n return new this.constructor(\n this.a,\n this.b,\n -this.c,\n -this.d,\n this.e,\n this.f\n );\n }\n\n /**\n * skewX\n *\n * @param {number} radians\n * @returns {module:kld-affine.Matrix2D}\n */\n skewX(radians) {\n const t = Math.tan(radians);\n\n return new this.constructor(\n this.a,\n this.b,\n this.c + this.a * t,\n this.d + this.b * t,\n this.e,\n this.f\n );\n }\n\n // TODO: skewXAt\n\n /**\n * skewY\n *\n * @param {number} radians\n * @returns {module:kld-affine.Matrix2D}\n */\n skewY(radians) {\n const t = Math.tan(radians);\n\n return new this.constructor(\n this.a + this.c * t,\n this.b + this.d * t,\n this.c,\n this.d,\n this.e,\n this.f\n );\n }\n\n // TODO: skewYAt\n\n /**\n * isIdentity\n *\n * @returns {boolean}\n */\n isIdentity() {\n return (\n this.a === 1.0 &&\n this.b === 0.0 &&\n this.c === 0.0 &&\n this.d === 1.0 &&\n this.e === 0.0 &&\n this.f === 0.0\n );\n }\n\n /**\n * isInvertible\n *\n * @returns {boolean}\n */\n isInvertible() {\n return this.a * this.d - this.b * this.c !== 0.0;\n }\n\n /**\n * getScale\n *\n * @returns {{ scaleX: number, scaleY: number }}\n */\n getScale() {\n return {\n scaleX: Math.sqrt(this.a * this.a + this.c * this.c),\n scaleY: Math.sqrt(this.b * this.b + this.d * this.d)\n };\n }\n\n /**\n * Calculates matrix Singular Value Decomposition\n *\n * The resulting matrices — translation, rotation, scale, and rotation0 — return\n * this matrix when they are multiplied together in the listed order\n *\n * @see Jim Blinn's article {@link http://dx.doi.org/10.1109/38.486688}\n * @see {@link http://math.stackexchange.com/questions/861674/decompose-a-2d-arbitrary-transform-into-only-scaling-and-rotation}\n *\n * @returns {{\n * translation: module:kld-affine.Matrix2D,\n * rotation: module:kld-affine.Matrix2D,\n * scale: module:kld-affine.Matrix2D,\n * rotation0: module:kld-affine.Matrix2D\n * }}\n */\n getDecomposition() {\n const E = (this.a + this.d) * 0.5;\n const F = (this.a - this.d) * 0.5;\n const G = (this.b + this.c) * 0.5;\n const H = (this.b - this.c) * 0.5;\n\n const Q = Math.sqrt(E * E + H * H);\n const R = Math.sqrt(F * F + G * G);\n const scaleX = Q + R;\n const scaleY = Q - R;\n\n const a1 = Math.atan2(G, F);\n const a2 = Math.atan2(H, E);\n const theta = (a2 - a1) * 0.5;\n const phi = (a2 + a1) * 0.5;\n\n return {\n translation: this.constructor.translation(this.e, this.f),\n rotation: this.constructor.rotation(phi),\n scale: this.constructor.nonUniformScaling(scaleX, scaleY),\n rotation0: this.constructor.rotation(theta)\n };\n }\n\n /**\n * equals\n *\n * @param {module:kld-affine.Matrix2D} that\n * @returns {boolean}\n */\n equals(that) {\n return (\n this.a === that.a &&\n this.b === that.b &&\n this.c === that.c &&\n this.d === that.d &&\n this.e === that.e &&\n this.f === that.f\n );\n }\n\n /**\n * precisionEquals\n *\n * @param {module:kld-affine.Matrix2D} that\n * @param {number} precision\n * @returns {boolean}\n */\n precisionEquals(that, precision) {\n return (\n Math.abs(this.a - that.a) < precision &&\n Math.abs(this.b - that.b) < precision &&\n Math.abs(this.c - that.c) < precision &&\n Math.abs(this.d - that.d) < precision &&\n Math.abs(this.e - that.e) < precision &&\n Math.abs(this.f - that.f) < precision\n );\n }\n\n /**\n * toString\n *\n * @returns {string}\n */\n toString() {\n return `matrix(${this.a},${this.b},${this.c},${this.d},${this.e},${this.f})`;\n }\n}\n\n/**\n * Identity matrix\n *\n * @returns {module:kld-affine.Matrix2D}\n */\nMatrix2D.IDENTITY = new Matrix2D();\nMatrix2D.IDENTITY.isIdentity = () => true;\n\n\nexport default Matrix2D;\n","/* eslint-disable camelcase */\n/**\n * Polynomial.js\n *\n * @module Polynomial\n * @copyright 2002-2019 Kevin Lindsey
\n * -
\n * Contribution {@link http://github.com/Quazistax/kld-polynomial}
\n * copyright 2015 Robert Benko (Quazistax)
\n * MIT license\n */\n\n/**\n * Sign of a number (+1, -1, +0, -0).\n *\n * @param {number} x\n * @returns {number}\n */\nfunction sign(x) {\n // eslint-disable-next-line no-self-compare\n return typeof x === \"number\" ? x ? x < 0 ? -1 : 1 : x === x ? x : NaN : NaN;\n}\n\n/**\n * Polynomial\n *\n * @memberof module:kld-polynomial\n */\nclass Polynomial {\n /**\n * Polynomial\n *\n * @param {Array} coefs\n * @returns {module:kld-polynomial.Polynomial}\n */\n constructor(...coefs) {\n this.coefs = [];\n\n for (let i = coefs.length - 1; i >= 0; i--) {\n this.coefs.push(coefs[i]);\n }\n\n this._variable = \"t\";\n this._s = 0;\n }\n\n /**\n * Based on polint in \"Numerical Recipes in C, 2nd Edition\", pages 109-110\n *\n * @param {Array} xs\n * @param {Array} ys\n * @param {number} n\n * @param {number} offset\n * @param {number} x\n *\n * @returns {{y: number, dy: number}}\n */\n static interpolate(xs, ys, n, offset, x) {\n if (xs.constructor !== Array || ys.constructor !== Array) {\n throw new TypeError(\"xs and ys must be arrays\");\n }\n if (isNaN(n) || isNaN(offset) || isNaN(x)) {\n throw new TypeError(\"n, offset, and x must be numbers\");\n }\n\n let i, y;\n let dy = 0;\n const c = new Array(n);\n const d = new Array(n);\n let ns = 0;\n\n let diff = Math.abs(x - xs[offset]);\n\n for (i = 0; i < n; i++) {\n const dift = Math.abs(x - xs[offset + i]);\n\n if (dift < diff) {\n ns = i;\n diff = dift;\n }\n c[i] = d[i] = ys[offset + i];\n }\n\n y = ys[offset + ns];\n ns--;\n\n for (let m = 1; m < n; m++) {\n for (i = 0; i < n - m; i++) {\n const ho = xs[offset + i] - x;\n const hp = xs[offset + i + m] - x;\n const w = c[i + 1] - d[i];\n let den = ho - hp;\n\n if (den === 0.0) {\n throw new RangeError(\"Unable to interpolate polynomial. Two numbers in n were identical (to within roundoff)\");\n }\n\n den = w / den;\n d[i] = hp * den;\n c[i] = ho * den;\n }\n\n dy = (2 * (ns + 1) < (n - m)) ? c[ns + 1] : d[ns--];\n y += dy;\n }\n\n return {y, dy};\n }\n\n /**\n * Newton's (Newton-Raphson) method for finding Real roots on univariate function.
\n * When using bounds, algorithm falls back to secant if newton goes out of range.\n * Bisection is fallback for secant when determined secant is not efficient enough.\n * @see {@link http://en.wikipedia.org/wiki/Newton%27s_method}\n * @see {@link http://en.wikipedia.org/wiki/Secant_method}\n * @see {@link http://en.wikipedia.org/wiki/Bisection_method}\n *\n * @param {number} x0 - Initial root guess\n * @param {Function} f - Function which root we are trying to find\n * @param {Function} df - Derivative of function f\n * @param {number} max_iterations - Maximum number of algorithm iterations\n * @param {number} [min] - Left bound value\n * @param {number} [max] - Right bound value\n * @returns {number} root\n */\n static newtonSecantBisection(x0, f, df, max_iterations, min, max) {\n let x, prev_dfx = 0, dfx, prev_x_ef_correction = 0, x_correction, x_new;\n let y, y_atmin, y_atmax;\n\n x = x0;\n\n const ACCURACY = 14;\n const min_correction_factor = Math.pow(10, -ACCURACY);\n const isBounded = (typeof min === \"number\" && typeof max === \"number\");\n\n if (isBounded) {\n if (min > max) {\n throw new RangeError(\"Min must be greater than max\");\n }\n\n y_atmin = f(min);\n y_atmax = f(max);\n\n if (sign(y_atmin) === sign(y_atmax)) {\n throw new RangeError(\"Y values of bounds must be of opposite sign\");\n }\n }\n\n const isEnoughCorrection = function() {\n // stop if correction is too small or if correction is in simple loop\n return (Math.abs(x_correction) <= min_correction_factor * Math.abs(x)) ||\n (prev_x_ef_correction === (x - x_correction) - x);\n };\n\n for (let i = 0; i < max_iterations; i++) {\n dfx = df(x);\n\n if (dfx === 0) {\n if (prev_dfx === 0) {\n // error\n throw new RangeError(\"df(x) is zero\");\n }\n else {\n // use previous derivation value\n dfx = prev_dfx;\n }\n // or move x a little?\n // dfx = df(x != 0 ? x + x * 1e-15 : 1e-15);\n }\n\n prev_dfx = dfx;\n y = f(x);\n x_correction = y / dfx;\n x_new = x - x_correction;\n\n if (isEnoughCorrection()) {\n break;\n }\n\n if (isBounded) {\n if (sign(y) === sign(y_atmax)) {\n max = x;\n y_atmax = y;\n }\n else if (sign(y) === sign(y_atmin)) {\n min = x;\n y_atmin = y;\n }\n else {\n x = x_new;\n break;\n }\n\n if ((x_new < min) || (x_new > max)) {\n if (sign(y_atmin) === sign(y_atmax)) {\n break;\n }\n\n const RATIO_LIMIT = 50;\n const AIMED_BISECT_OFFSET = 0.25; // [0, 0.5)\n const dy = y_atmax - y_atmin;\n const dx = max - min;\n\n if (dy === 0) {\n x_correction = x - (min + dx * 0.5);\n }\n else if (Math.abs(dy / Math.min(y_atmin, y_atmax)) > RATIO_LIMIT) {\n x_correction = x - (min + dx * (0.5 + (Math.abs(y_atmin) < Math.abs(y_atmax) ? -AIMED_BISECT_OFFSET : AIMED_BISECT_OFFSET)));\n }\n else {\n x_correction = x - (min - y_atmin / dy * dx);\n }\n x_new = x - x_correction;\n\n if (isEnoughCorrection()) {\n break;\n }\n }\n }\n\n prev_x_ef_correction = x - x_new;\n x = x_new;\n }\n\n return x;\n }\n\n /**\n * Clones this polynomial and return the clone.\n *\n * @returns {module:kld-polynomial.Polynomial}\n */\n clone() {\n const poly = new Polynomial();\n\n poly.coefs = this.coefs.slice();\n\n return poly;\n }\n\n /**\n * eval\n *\n * @param {number} x\n */\n eval(x) {\n if (isNaN(x)) {\n throw new TypeError(`Parameter must be a number. Found '${x}'`);\n }\n\n let result = 0;\n\n for (let i = this.coefs.length - 1; i >= 0; i--) {\n result = result * x + this.coefs[i];\n }\n\n return result;\n }\n\n /**\n * add\n *\n * @param {module:kld-polynomial.Polynomial} that\n * @returns {module:kld-polynomial.Polynomial}\n */\n add(that) {\n const result = new Polynomial();\n const d1 = this.getDegree();\n const d2 = that.getDegree();\n const dmax = Math.max(d1, d2);\n\n for (let i = 0; i <= dmax; i++) {\n const v1 = (i <= d1) ? this.coefs[i] : 0;\n const v2 = (i <= d2) ? that.coefs[i] : 0;\n\n result.coefs[i] = v1 + v2;\n }\n\n return result;\n }\n\n /**\n * multiply\n *\n * @param {module:kld-polynomial.Polynomial} that\n * @returns {module:kld-polynomial.Polynomial}\n */\n multiply(that) {\n const result = new Polynomial();\n\n for (let i = 0; i <= this.getDegree() + that.getDegree(); i++) {\n result.coefs.push(0);\n }\n\n for (let i = 0; i <= this.getDegree(); i++) {\n for (let j = 0; j <= that.getDegree(); j++) {\n result.coefs[i + j] += this.coefs[i] * that.coefs[j];\n }\n }\n\n return result;\n }\n\n /**\n * divideEqualsScalar\n *\n * @deprecated To be replaced by divideScalar\n * @param {number} scalar\n */\n divideEqualsScalar(scalar) {\n for (let i = 0; i < this.coefs.length; i++) {\n this.coefs[i] /= scalar;\n }\n }\n\n /**\n * simplifyEquals\n *\n * @deprecated To be replaced by simplify\n * @param {number} TOLERANCE\n */\n simplifyEquals(TOLERANCE = 1e-12) {\n for (let i = this.getDegree(); i >= 0; i--) {\n if (Math.abs(this.coefs[i]) <= TOLERANCE) {\n this.coefs.pop();\n }\n else {\n break;\n }\n }\n }\n\n /**\n * Sets small coefficients to zero.\n *\n * @deprecated To be replaced by removeZeros\n * @param {number} TOLERANCE\n * @returns {module:kld-polynomial.Polynomial}\n */\n removeZerosEquals(TOLERANCE = 1e-15) {\n const c = this.coefs;\n const err = 10 * TOLERANCE * Math.abs(\n c.reduce((pv, cv) => {\n return Math.abs(cv) > Math.abs(pv) ? cv : pv;\n })\n );\n\n for (let i = 0; i < c.length - 1; i++) {\n if (Math.abs(c[i]) < err) {\n c[i] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * Scales polynomial so that leading coefficient becomes 1.\n *\n * @deprecated To be replaced by getMonic\n * @returns {module:kld-polynomial.Polynomial}\n */\n monicEquals() {\n const c = this.coefs;\n\n if (c[c.length - 1] !== 1) {\n this.divideEqualsScalar(c[c.length - 1]);\n }\n\n return this;\n }\n\n /**\n * toString\n *\n * @returns {string}\n */\n toString() {\n const coefs = [];\n const signs = [];\n\n for (let i = this.coefs.length - 1; i >= 0; i--) {\n let value = Math.round(this.coefs[i] * 1000) / 1000;\n\n if (value !== 0) {\n const signString = (value < 0) ? \" - \" : \" + \";\n\n value = Math.abs(value);\n\n if (i > 0) {\n if (value === 1) {\n value = this._variable;\n }\n else {\n value += this._variable;\n }\n }\n\n if (i > 1) {\n value += \"^\" + i;\n }\n\n signs.push(signString);\n coefs.push(value);\n }\n }\n\n signs[0] = (signs[0] === \" + \") ? \"\" : \"-\";\n\n let result = \"\";\n\n for (let i = 0; i < coefs.length; i++) {\n result += signs[i] + coefs[i];\n }\n\n return result;\n }\n\n /**\n * bisection\n *\n * @param {number} min\n * @param {number} max\n * @param {number} [TOLERANCE]\n * @param {number} [ACCURACY]\n * @returns {number}\n */\n bisection(min, max, TOLERANCE = 1e-6, ACCURACY = 15) {\n let minValue = this.eval(min);\n let maxValue = this.eval(max);\n let result;\n\n if (Math.abs(minValue) <= TOLERANCE) {\n result = min;\n }\n else if (Math.abs(maxValue) <= TOLERANCE) {\n result = max;\n }\n else if (minValue * maxValue <= 0) {\n const tmp1 = Math.log(max - min);\n const tmp2 = Math.LN10 * ACCURACY;\n const maxIterations = Math.ceil((tmp1 + tmp2) / Math.LN2);\n\n for (let i = 0; i < maxIterations; i++) {\n result = 0.5 * (min + max);\n const value = this.eval(result);\n\n if (Math.abs(value) <= TOLERANCE) {\n break;\n }\n\n if (value * minValue < 0) {\n max = result;\n maxValue = value;\n }\n else {\n min = result;\n minValue = value;\n }\n }\n }\n\n return result;\n }\n\n /**\n * Based on trapzd in \"Numerical Recipes in C, 2nd Edition\", page 137\n *\n * @param {number} min\n * @param {number} max\n * @param {number} n\n * @returns {number}\n */\n trapezoid(min, max, n) {\n if (isNaN(min) || isNaN(max) || isNaN(n)) {\n throw new TypeError(\"Parameters must be numbers\");\n }\n\n const range = max - min;\n\n if (n === 1) {\n const minValue = this.eval(min);\n const maxValue = this.eval(max);\n\n this._s = 0.5 * range * (minValue + maxValue);\n }\n else {\n const iter = 1 << (n - 2);\n const delta = range / iter;\n let x = min + 0.5 * delta;\n let sum = 0;\n\n for (let i = 0; i < iter; i++) {\n sum += this.eval(x);\n x += delta;\n }\n\n this._s = 0.5 * (this._s + range * sum / iter);\n }\n\n if (isNaN(this._s)) {\n throw new TypeError(\"this._s is NaN\");\n }\n\n return this._s;\n }\n\n /**\n * Based on trapzd in \"Numerical Recipes in C, 2nd Edition\", page 139\n *\n * @param {number} min\n * @param {number} max\n * @returns {number}\n */\n simpson(min, max) {\n if (isNaN(min) || isNaN(max)) {\n throw new TypeError(\"Parameters must be numbers\");\n }\n\n const range = max - min;\n let st = 0.5 * range * (this.eval(min) + this.eval(max));\n let t = st;\n let s = 4.0 * st / 3.0;\n let os = s;\n let ost = st;\n const TOLERANCE = 1e-7;\n\n let iter = 1;\n\n for (let n = 2; n <= 20; n++) {\n const delta = range / iter;\n let x = min + 0.5 * delta;\n let sum = 0;\n\n for (let i = 1; i <= iter; i++) {\n sum += this.eval(x);\n x += delta;\n }\n\n t = 0.5 * (t + range * sum / iter);\n st = t;\n s = (4.0 * st - ost) / 3.0;\n\n if (Math.abs(s - os) < TOLERANCE * Math.abs(os)) {\n break;\n }\n\n os = s;\n ost = st;\n iter <<= 1;\n }\n\n return s;\n }\n\n /**\n * romberg\n *\n * @param {number} min\n * @param {number} max\n * @returns {number}\n */\n romberg(min, max) {\n if (isNaN(min) || isNaN(max)) {\n throw new TypeError(\"Parameters must be numbers\");\n }\n\n const MAX = 20;\n const K = 3;\n const TOLERANCE = 1e-6;\n const s = new Array(MAX + 1);\n const h = new Array(MAX + 1);\n let result = {y: 0, dy: 0};\n\n h[0] = 1.0;\n\n for (let j = 1; j <= MAX; j++) {\n s[j - 1] = this.trapezoid(min, max, j);\n\n if (j >= K) {\n result = Polynomial.interpolate(h, s, K, j - K, 0.0);\n if (Math.abs(result.dy) <= TOLERANCE * result.y) {\n break;\n }\n }\n\n s[j] = s[j - 1];\n h[j] = 0.25 * h[j - 1];\n }\n\n return result.y;\n }\n\n /**\n * Estimate what is the maximum polynomial evaluation error value under which polynomial evaluation could be in fact 0.\n *\n * @param {number} maxAbsX\n * @returns {number}\n */\n zeroErrorEstimate(maxAbsX) {\n const poly = this;\n const ERRF = 1e-15;\n\n if (typeof maxAbsX === \"undefined\") {\n const rb = poly.bounds();\n\n maxAbsX = Math.max(Math.abs(rb.minX), Math.abs(rb.maxX));\n }\n\n if (maxAbsX < 0.001) {\n return 2 * Math.abs(poly.eval(ERRF));\n }\n\n const n = poly.coefs.length - 1;\n const an = poly.coefs[n];\n\n return 10 * ERRF * poly.coefs.reduce((m, v, i) => {\n const nm = v / an * Math.pow(maxAbsX, i);\n return nm > m ? nm : m;\n }, 0);\n }\n\n /**\n * Calculates upper Real roots bounds.
\n * Real roots are in interval [negX, posX]. Determined by Fujiwara method.\n * @see {@link http://en.wikipedia.org/wiki/Properties_of_polynomial_roots}\n *\n * @returns {{ negX: number, posX: number }}\n */\n boundsUpperRealFujiwara() {\n let a = this.coefs;\n const n = a.length - 1;\n const an = a[n];\n\n if (an !== 1) {\n a = this.coefs.map(v => v / an);\n }\n\n const b = a.map((v, i) => {\n return (i < n)\n ? Math.pow(Math.abs((i === 0) ? v / 2 : v), 1 / (n - i))\n : v;\n });\n\n let coefSelectionFunc;\n const find2Max = function(acc, bi, i) {\n if (coefSelectionFunc(i)) {\n if (acc.max < bi) {\n acc.nearmax = acc.max;\n acc.max = bi;\n }\n else if (acc.nearmax < bi) {\n acc.nearmax = bi;\n }\n }\n return acc;\n };\n\n coefSelectionFunc = function(i) {\n return i < n && a[i] < 0;\n };\n\n // eslint-disable-next-line unicorn/no-fn-reference-in-iterator\n const max_nearmax_pos = b.reduce(find2Max, {max: 0, nearmax: 0});\n\n coefSelectionFunc = function(i) {\n return i < n && ((n % 2 === i % 2) ? a[i] < 0 : a[i] > 0);\n };\n\n // eslint-disable-next-line unicorn/no-fn-reference-in-iterator\n const max_nearmax_neg = b.reduce(find2Max, {max: 0, nearmax: 0});\n\n return {\n negX: -2 * max_nearmax_neg.max,\n posX: 2 * max_nearmax_pos.max\n };\n }\n\n /**\n * Calculates lower Real roots bounds.
\n * There are no Real roots in interval . Determined by Fujiwara method.\n * @see {@link http://en.wikipedia.org/wiki/Properties_of_polynomial_roots}\n *\n * @returns {{ negX: number, posX: number }}\n */\n boundsLowerRealFujiwara() {\n const poly = new Polynomial();\n\n poly.coefs = this.coefs.slice().reverse();\n\n const res = poly.boundsUpperRealFujiwara();\n\n res.negX = 1 / res.negX;\n res.posX = 1 / res.posX;\n\n return res;\n }\n\n /**\n * Calculates left and right Real roots bounds.
\n * Real roots are in interval [minX, maxX]. Combines Fujiwara lower and upper bounds to get minimal interval.\n * @see {@link http://en.wikipedia.org/wiki/Properties_of_polynomial_roots}\n *\n * @returns {{ minX: number, maxX: number }}\n */\n bounds() {\n const urb = this.boundsUpperRealFujiwara();\n const rb = {minX: urb.negX, maxX: urb.posX};\n\n if (urb.negX === 0 && urb.posX === 0) {\n return rb;\n }\n\n if (urb.negX === 0) {\n rb.minX = this.boundsLowerRealFujiwara().posX;\n }\n else if (urb.posX === 0) {\n rb.maxX = this.boundsLowerRealFujiwara().negX;\n }\n\n if (rb.minX > rb.maxX) {\n rb.minX = rb.maxX = 0;\n }\n\n return rb;\n // TODO: if sure that there are no complex roots\n // (maybe by using Sturm's theorem) use:\n // return this.boundsRealLaguerre();\n }\n\n /**\n * Calculates absolute upper roots bound.
\n * All (Complex and Real) roots magnitudes are <= result. Determined by Rouche method.\n * @see {@link http://en.wikipedia.org/wiki/Properties_of_polynomial_roots}\n *\n * @returns {number}\n */\n boundUpperAbsRouche() {\n const a = this.coefs;\n const n = a.length - 1;\n const max = a.reduce((prev, curr, i) => {\n if (i !== n) {\n curr = Math.abs(curr);\n return (prev < curr) ? curr : prev;\n }\n return prev;\n }, 0);\n\n return 1 + max / Math.abs(a[n]);\n }\n\n /**\n * Calculates absolute lower roots bound.
\n * All (Complex and Real) roots magnitudes are >= result. Determined by Rouche method.\n * @see {@link http://en.wikipedia.org/wiki/Properties_of_polynomial_roots}\n *\n * @returns {number}\n */\n boundLowerAbsRouche() {\n const a = this.coefs;\n const max = a.reduce((prev, curr, i) => {\n if (i !== 0) {\n curr = Math.abs(curr);\n return (prev < curr) ? curr : prev;\n }\n return prev;\n }, 0);\n\n return Math.abs(a[0]) / (Math.abs(a[0]) + max);\n }\n\n /**\n * Calculates left and right Real roots bounds.
\n * WORKS ONLY if all polynomial roots are Real.\n * Real roots are in interval [minX, maxX]. Determined by Laguerre method.\n * @see {@link http://en.wikipedia.org/wiki/Properties_of_polynomial_roots}\n *\n * @returns {{ minX: number, maxX: number }}\n */\n boundsRealLaguerre() {\n const a = this.coefs;\n const n = a.length - 1;\n const p1 = -a[n - 1] / (n * a[n]);\n const undersqrt = a[n - 1] * a[n - 1] - 2 * n / (n - 1) * a[n] * a[n - 2];\n let p2 = (n - 1) / (n * a[n]) * Math.sqrt(undersqrt);\n\n if (p2 < 0) {\n p2 = -p2;\n }\n\n return {\n minX: p1 - p2,\n maxX: p1 + p2\n };\n }\n\n /**\n * Root count by Descartes rule of signs.
\n * Returns maximum number of positive and negative real roots and minimum number of complex roots.\n * @see {@link http://en.wikipedia.org/wiki/Descartes%27_rule_of_signs}\n *\n * @returns {{maxRealPos: number, maxRealNeg: number, minComplex: number}}\n */\n countRootsDescartes() {\n const a = this.coefs;\n const n = a.length - 1;\n const accum = a.reduce((acc, ai, i) => {\n if (acc.prev_a !== 0 && ai !== 0) {\n if ((acc.prev_a < 0) === (ai > 0)) {\n acc.pos++;\n }\n if (((i % 2 === 0) !== (acc.prev_a < 0)) === ((i % 2 === 1) !== (ai > 0))) {\n acc.neg++;\n }\n }\n acc.prev_a = ai;\n return acc;\n }, {pos: 0, neg: 0, prev_a: 0});\n\n return {\n maxRealPos: accum.pos,\n maxRealNeg: accum.neg,\n minComplex: n - (accum.pos + accum.neg)\n };\n }\n\n // getters and setters\n\n /**\n * get degree\n *\n * @returns {number}\n */\n getDegree() {\n return this.coefs.length - 1;\n }\n\n /**\n * getDerivative\n *\n * @returns {module:kld-polynomial.Polynomial}\n */\n getDerivative() {\n const derivative = new Polynomial();\n\n for (let i = 1; i < this.coefs.length; i++) {\n derivative.coefs.push(i * this.coefs[i]);\n }\n\n return derivative;\n }\n\n /**\n * getRoots\n *\n * @returns {Array}\n */\n getRoots() {\n let result;\n\n this.simplifyEquals();\n\n switch (this.getDegree()) {\n case 0: result = []; break;\n case 1: result = this.getLinearRoot(); break;\n case 2: result = this.getQuadraticRoots(); break;\n case 3: result = this.getCubicRoots(); break;\n case 4: result = this.getQuarticRoots(); break;\n default:\n result = [];\n }\n\n return result;\n }\n\n /**\n * getRootsInInterval\n *\n * @param {number} min\n * @param {number} max\n * @returns {Array}\n */\n getRootsInInterval(min, max) {\n const roots = [];\n\n /**\n * @param {number} value\n */\n function push(value) {\n if (typeof value === \"number\") {\n roots.push(value);\n }\n }\n\n if (this.getDegree() === 0) {\n throw new RangeError(\"Unexpected empty polynomial\");\n }\n else if (this.getDegree() === 1) {\n push(this.bisection(min, max));\n }\n else {\n // get roots of derivative\n const deriv = this.getDerivative();\n const droots = deriv.getRootsInInterval(min, max);\n\n if (droots.length > 0) {\n // find root on [min, droots[0]]\n push(this.bisection(min, droots[0]));\n\n // find root on [droots[i],droots[i+1]] for 0 <= i <= count-2\n for (let i = 0; i <= droots.length - 2; i++) {\n push(this.bisection(droots[i], droots[i + 1]));\n }\n\n // find root on [droots[count-1],xmax]\n push(this.bisection(droots[droots.length - 1], max));\n }\n else {\n // polynomial is monotone on [min,max], has at most one root\n push(this.bisection(min, max));\n }\n }\n\n return roots;\n }\n\n /**\n * getLinearRoot\n *\n * @returns {number}\n */\n getLinearRoot() {\n const result = [];\n const a = this.coefs[1];\n\n if (a !== 0) {\n result.push(-this.coefs[0] / a);\n }\n\n return result;\n }\n\n /**\n * getQuadraticRoots\n *\n * @returns {Array}\n */\n getQuadraticRoots() {\n const results = [];\n\n if (this.getDegree() === 2) {\n const a = this.coefs[2];\n const b = this.coefs[1] / a;\n const c = this.coefs[0] / a;\n const d = b * b - 4 * c;\n\n if (d > 0) {\n const e = Math.sqrt(d);\n\n results.push(0.5 * (-b + e));\n results.push(0.5 * (-b - e));\n }\n else if (d === 0) {\n // really two roots with same value, but we only return one\n results.push(0.5 * -b);\n }\n // else imaginary results\n }\n\n return results;\n }\n\n /**\n * getCubicRoots\n *\n * This code is based on MgcPolynomial.cpp written by David Eberly. His\n * code along with many other excellent examples are avaiable at his site:\n * http://www.geometrictools.com\n *\n * @returns {Array}\n */\n getCubicRoots() {\n const results = [];\n\n if (this.getDegree() === 3) {\n const c3 = this.coefs[3];\n const c2 = this.coefs[2] / c3;\n const c1 = this.coefs[1] / c3;\n const c0 = this.coefs[0] / c3;\n\n const a = (3 * c1 - c2 * c2) / 3;\n const b = (2 * c2 * c2 * c2 - 9 * c1 * c2 + 27 * c0) / 27;\n const offset = c2 / 3;\n let discrim = b * b / 4 + a * a * a / 27;\n const halfB = b / 2;\n\n const ZEROepsilon = this.zeroErrorEstimate();\n\n if (Math.abs(discrim) <= ZEROepsilon) {\n discrim = 0;\n }\n\n if (discrim > 0) {\n const e = Math.sqrt(discrim);\n let root; // eslint-disable-line no-shadow\n\n let tmp = -halfB + e;\n\n if (tmp >= 0) {\n root = Math.pow(tmp, 1 / 3);\n }\n else {\n root = -Math.pow(-tmp, 1 / 3);\n }\n\n tmp = -halfB - e;\n\n if (tmp >= 0) {\n root += Math.pow(tmp, 1 / 3);\n }\n else {\n root -= Math.pow(-tmp, 1 / 3);\n }\n\n results.push(root - offset);\n }\n else if (discrim < 0) {\n const distance = Math.sqrt(-a / 3);\n const angle = Math.atan2(Math.sqrt(-discrim), -halfB) / 3;\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const sqrt3 = Math.sqrt(3);\n\n results.push(2 * distance * cos - offset);\n results.push(-distance * (cos + sqrt3 * sin) - offset);\n results.push(-distance * (cos - sqrt3 * sin) - offset);\n }\n else {\n let tmp;\n\n if (halfB >= 0) {\n tmp = -Math.pow(halfB, 1 / 3);\n }\n else {\n tmp = Math.pow(-halfB, 1 / 3);\n }\n\n results.push(2 * tmp - offset);\n // really should return next root twice, but we return only one\n results.push(-tmp - offset);\n }\n }\n\n return results;\n }\n\n /**\n * Calculates roots of quartic polynomial.
\n * First, derivative roots are found, then used to split quartic polynomial\n * into segments, each containing one root of quartic polynomial.\n * Segments are then passed to newton's method to find roots.\n *\n * @returns {Array} roots\n */\n getQuarticRoots() {\n let results = [];\n const n = this.getDegree();\n\n if (n === 4) {\n const poly = new Polynomial();\n\n poly.coefs = this.coefs.slice();\n poly.divideEqualsScalar(poly.coefs[n]);\n\n const ERRF = 1e-15;\n\n if (Math.abs(poly.coefs[0]) < 10 * ERRF * Math.abs(poly.coefs[3])) {\n poly.coefs[0] = 0;\n }\n\n const poly_d = poly.getDerivative();\n const derrt = poly_d.getRoots().sort((a, b) => a - b);\n const dery = [];\n const nr = derrt.length - 1;\n const rb = this.bounds();\n\n const maxabsX = Math.max(Math.abs(rb.minX), Math.abs(rb.maxX));\n const ZEROepsilon = this.zeroErrorEstimate(maxabsX);\n\n for (let i = 0; i <= nr; i++) {\n dery.push(poly.eval(derrt[i]));\n }\n\n for (let i = 0; i <= nr; i++) {\n if (Math.abs(dery[i]) < ZEROepsilon) {\n dery[i] = 0;\n }\n }\n\n let i = 0;\n const dx = Math.max(0.1 * (rb.maxX - rb.minX) / n, ERRF);\n const guesses = [];\n const minmax = [];\n\n if (nr > -1) {\n if (dery[0] !== 0) {\n if (sign(dery[0]) !== sign(poly.eval(derrt[0] - dx) - dery[0])) {\n guesses.push(derrt[0] - dx);\n minmax.push([rb.minX, derrt[0]]);\n }\n }\n else {\n results.push(derrt[0], derrt[0]);\n i++;\n }\n\n for (; i < nr; i++) {\n if (dery[i + 1] === 0) {\n results.push(derrt[i + 1], derrt[i + 1]);\n i++;\n }\n else if (sign(dery[i]) !== sign(dery[i + 1])) {\n guesses.push((derrt[i] + derrt[i + 1]) / 2);\n minmax.push([derrt[i], derrt[i + 1]]);\n }\n }\n if (dery[nr] !== 0 && sign(dery[nr]) !== sign(poly.eval(derrt[nr] + dx) - dery[nr])) {\n guesses.push(derrt[nr] + dx);\n minmax.push([derrt[nr], rb.maxX]);\n }\n }\n\n /**\n * @param {number} x\n * @returns {number}\n */\n const f = function(x) {\n return poly.eval(x);\n };\n\n /**\n * @param {number} x\n * @returns {number}\n */\n const df = function(x) {\n return poly_d.eval(x);\n };\n\n if (guesses.length > 0) {\n for (i = 0; i < guesses.length; i++) {\n guesses[i] = Polynomial.newtonSecantBisection(guesses[i], f, df, 32, minmax[i][0], minmax[i][1]);\n }\n }\n\n results = results.concat(guesses);\n }\n\n return results;\n }\n}\n\nexport default Polynomial;\n","/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,6],$V1=[1,17],$V2=[1,7],$V3=[1,10],$V4=[1,13],$V5=[1,28],$V6=[1,14],$V7=[1,34],$V8=[1,15],$V9=[1,33],$Va=[1,21],$Vb=[1,24],$Vc=[1,25],$Vd=[1,29],$Ve=[1,30],$Vf=[1,32],$Vg=[1,31],$Vh=[1,5],$Vi=[1,5,14,16,24,28,41],$Vj=[1,57],$Vk=[1,59],$Vl=[1,58],$Vm=[1,46],$Vn=[1,52],$Vo=[1,41],$Vp=[1,42],$Vq=[1,43],$Vr=[1,44],$Vs=[1,45],$Vt=[1,47],$Vu=[1,49],$Vv=[1,50],$Vw=[1,55],$Vx=[1,56],$Vy=[1,5,14,16,24,28,41,54],$Vz=[1,5,14,16,24,28,31,32,33,34,41,54],$VA=[1,5,14,16,24,28,31,32,33,34,38,40,41,54],$VB=[1,5,14,16,24,28,31,32,33,34,38,40,41,54,58],$VC=[1,5,14,16,24,28,41,58],$VD=[1,93],$VE=[1,98],$VF=[1,112],$VG=[1,115],$VH=[14,41],$VI=[14,28],$VJ=[1,127],$VK=[14,24,41],$VL=[14,24,41,58],$VM=[14,28,58],$VN=[14,24],$VO=[1,5,14,28,41],$VP=[1,151];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"program\":3,\"statements\":4,\";\":5,\"statement\":6,\"assignment\":7,\"sequence\":8,\"LET\":9,\"IDENTIFIER\":10,\"=\":11,\"DEF\":12,\"sequences\":13,\",\":14,\"steps\":15,\"|>\":16,\"step\":17,\"=~\":18,\"namedPattern\":19,\"expression\":20,\"mathExpression\":21,\"MAP\":22,\"(\":23,\")\":24,\"PATTERNS\":25,\"{\":26,\"patterns\":27,\"}\":28,\"SEQUENCES\":29,\"callExpression\":30,\"+\":31,\"-\":32,\"*\":33,\"/\":34,\"argumentList\":35,\"memberExpression\":36,\"primaryExpression\":37,\".\":38,\"integer\":39,\"[\":40,\"]\":41,\"boolean\":42,\"NULL_TYPE\":43,\"float\":44,\"string\":45,\"UNDEFINED_TYPE\":46,\"$\":47,\"arrayExpression\":48,\"objectExpression\":49,\"expressionElements\":50,\"expressionElement\":51,\"expressionProperties\":52,\"expressionProperty\":53,\":\":54,\"argument\":55,\"...\":56,\"pattern\":57,\"AS\":58,\"ANY_TYPE\":59,\"ARRAY_TYPE\":60,\"BOOLEAN_TYPE\":61,\"TRUE\":62,\"FALSE\":63,\"NUMBER_TYPE\":64,\"OBJECT_TYPE\":65,\"STRING_TYPE\":66,\"arrayPattern\":67,\"objectPattern\":68,\"PATTERN\":69,\"ENUMERATION\":70,\"patternElements\":71,\"namedPatternElement\":72,\"patternElement\":73,\"range\":74,\"..\":75,\"patternProperties\":76,\"namedPatternProperty\":77,\"namedProperty\":78,\"STRING\":79,\"NUMBER\":80,\"stringOrIdentifier\":81,\"identifiers\":82,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\";\",9:\"LET\",10:\"IDENTIFIER\",11:\"=\",12:\"DEF\",14:\",\",16:\"|>\",18:\"=~\",22:\"MAP\",23:\"(\",24:\")\",25:\"PATTERNS\",26:\"{\",28:\"}\",29:\"SEQUENCES\",31:\"+\",32:\"-\",33:\"*\",34:\"/\",38:\".\",40:\"[\",41:\"]\",43:\"NULL_TYPE\",46:\"UNDEFINED_TYPE\",47:\"$\",54:\":\",56:\"...\",58:\"AS\",59:\"ANY_TYPE\",60:\"ARRAY_TYPE\",61:\"BOOLEAN_TYPE\",62:\"TRUE\",63:\"FALSE\",64:\"NUMBER_TYPE\",65:\"OBJECT_TYPE\",66:\"STRING_TYPE\",69:\"PATTERN\",70:\"ENUMERATION\",75:\"..\",79:\"STRING\",80:\"NUMBER\"},\nproductions_: [0,[3,1],[3,2],[4,3],[4,1],[6,1],[6,1],[7,4],[7,4],[13,3],[13,1],[8,1],[15,3],[15,1],[17,2],[17,1],[20,1],[20,6],[20,4],[20,4],[21,1],[21,3],[21,3],[21,3],[21,3],[30,3],[30,4],[30,1],[36,1],[36,3],[36,3],[36,4],[37,1],[37,1],[37,1],[37,1],[37,1],[37,1],[37,1],[37,1],[37,1],[37,3],[48,2],[48,3],[50,3],[50,1],[51,1],[51,1],[49,2],[49,3],[52,3],[52,1],[53,3],[53,1],[53,1],[35,3],[35,1],[55,1],[55,2],[27,3],[27,1],[19,1],[19,3],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,2],[57,2],[57,1],[67,2],[67,3],[71,3],[71,1],[72,1],[72,3],[73,1],[73,3],[73,3],[73,5],[74,3],[74,2],[74,2],[74,1],[68,2],[68,3],[76,3],[76,1],[77,1],[77,3],[78,3],[78,1],[42,1],[42,1],[45,1],[39,1],[44,1],[81,1],[81,1],[82,3],[82,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\nreturn $$[$0];\nbreak;\ncase 2:\nreturn $$[$0-1];\nbreak;\ncase 3: case 9: case 12: case 44: case 50: case 55: case 59: case 82: case 96: case 109:\n$$[$0-2].push($$[$0]); this.$ = $$[$0-2]\nbreak;\ncase 4: case 10: case 13: case 45: case 51: case 56: case 60: case 83: case 97: case 110:\nthis.$ = [ $$[$0] ];\nbreak;\ncase 5: case 6: case 14: case 15: case 16: case 20: case 27: case 28: case 39: case 40: case 46: case 47: case 54: case 57: case 98: case 107:\nthis.$ = $$[$0]\nbreak;\ncase 7:\nthis.$ = { type: 'assignment', name: $$[$0-2], value: $$[$0] };\nbreak;\ncase 8:\nthis.$ = { type: 'def', name: $$[$0-2], value: $$[$0] };\nbreak;\ncase 11:\nthis.$ = { type: 'sequence', steps: $$[$0] };\nbreak;\ncase 17:\nthis.$ = { type: 'map', value: [ $$[$0-3], $$[$0-1] ] };\nbreak;\ncase 18:\nthis.$ = { type: 'patterns', patterns: $$[$0-1] };\nbreak;\ncase 19:\nthis.$ = { type: 'sequences', sequences: $$[$0-1] };\nbreak;\ncase 21:\nthis.$ = { type: 'add', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 22:\nthis.$ = { type: 'subtract', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 23:\nthis.$ = { type: 'multiply', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 24:\nthis.$ = { type: 'divide', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 25:\nthis.$ = { type: 'invoke', name: $$[$0-2], args: [] };\nbreak;\ncase 26:\nthis.$ = { type: 'invoke', name: $$[$0-3], args: $$[$0-1] };\nbreak;\ncase 29:\nthis.$ = { type: 'get-property', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 30:\nthis.$ = { type: 'get-index', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 31:\nthis.$ = { type: 'get-index', left: $$[$0-3], right: $$[$0-1] };\nbreak;\ncase 32:\nthis.$ = { type: 'boolean', value: $$[$0] };\nbreak;\ncase 33:\nthis.$ = { type: 'boolean', value: null };\nbreak;\ncase 34:\nthis.$ = { type: 'number', value: $$[$0] };\nbreak;\ncase 35:\nthis.$ = { type: 'string', value: $$[$0] };\nbreak;\ncase 36:\nthis.$ = { type: 'undefined', value: undefined };\nbreak;\ncase 37:\nthis.$ = { type: 'get-value', name: $$[$0] };\nbreak;\ncase 38:\nthis.$ = { type: 'get-structure' };\nbreak;\ncase 41:\nthis.$ = $$[$0-1];\nbreak;\ncase 42:\nthis.$ = { type: 'array', value: [] };\nbreak;\ncase 43:\nthis.$ = { type: 'array', value: $$[$0-1] };\nbreak;\ncase 48:\nthis.$ = { type: 'object', value: [] };\nbreak;\ncase 49:\nthis.$ = { type: 'object', value: $$[$0-1] };\nbreak;\ncase 52:\nthis.$ = { type: 'property', name: $$[$0-2], value: $$[$0] };\nbreak;\ncase 53:\nthis.$ = { type: 'property', name: $$[$0], value: null };\nbreak;\ncase 58:\nthis.$ = { type: 'spread', expression: $$[$0] };\nbreak;\ncase 61: case 84:\n$$[$0].assignTo = null; this.$ = $$[$0];\nbreak;\ncase 62: case 85: case 99:\n$$[$0-2].assignTo = $$[$0]; this.$ = $$[$0-2];\nbreak;\ncase 63:\nthis.$ = { type: 'pattern', patternType: 'any', value: null };\nbreak;\ncase 64:\nthis.$ = { type: 'pattern', patternType: 'array', value: null };\nbreak;\ncase 65:\nthis.$ = { type: 'pattern', patternType: 'boolean', value: null };\nbreak;\ncase 66:\nthis.$ = { type: 'pattern', patternType: 'boolean', value: true };\nbreak;\ncase 67:\nthis.$ = { type: 'pattern', patternType: 'boolean', value: false };\nbreak;\ncase 68:\nthis.$ = { type: 'pattern', patternType: 'null', value: null };\nbreak;\ncase 69:\nthis.$ = { type: 'pattern', patternType: 'number', value: null };\nbreak;\ncase 70:\nthis.$ = { type: 'pattern', patternType: 'number', value: $$[$0] };\nbreak;\ncase 71:\nthis.$ = { type: 'pattern', patternType: 'object', value: null };\nbreak;\ncase 72:\nthis.$ = { type: 'pattern', patternType: 'string', value: null };\nbreak;\ncase 73:\nthis.$ = { type: 'pattern', patternType: 'string', value: $$[$0] };\nbreak;\ncase 74:\nthis.$ = { type: 'pattern', patternType: 'undefined', value: null };\nbreak;\ncase 75: case 76:\nthis.$ = $$[$0];\nbreak;\ncase 77:\nthis.$ = { type: 'pattern-reference', name: $$[$0] };\nbreak;\ncase 78:\nthis.$ = { type: 'enumeration-reference', name: $$[$0] };\nbreak;\ncase 79:\nthis.$ = { type: 'pattern', patternType: 'reference', value: $$[$0] };\nbreak;\ncase 80:\nthis.$ = { type: 'pattern', patternType: 'array-pattern', value: [] };\nbreak;\ncase 81:\nthis.$ = { type: 'pattern', patternType: 'array-pattern', value: $$[$0-1] };\nbreak;\ncase 86:\nthis.$ = { type: 'element', pattern: $$[$0], range: { type: 'range', start: 1, stop: 1 } };\nbreak;\ncase 87:\nthis.$ = { type: 'element', pattern: $$[$0-2], range: $$[$0] };\nbreak;\ncase 88:\nthis.$ = { type: 'element-group', elements: $$[$0-1], range: { type: 'range', start: 1, stop: 1 } };\nbreak;\ncase 89:\nthis.$ = { type: 'element-group', elements: $$[$0-3], range: $$[$0] };\nbreak;\ncase 90:\nthis.$ = { type: 'range', start: $$[$0-2], stop: $$[$0] };\nbreak;\ncase 91:\nthis.$ = { type: 'range', start: 0, stop: $$[$0] };\nbreak;\ncase 92:\nthis.$ = { type: 'range', start: $$[$0-1], stop: Infinity };\nbreak;\ncase 93:\nthis.$ = { type: 'range', start: $$[$0], stop: $$[$0] };\nbreak;\ncase 94:\nthis.$ = { type: 'pattern', patternType: 'object', value: null };\nbreak;\ncase 95:\nthis.$ = { type: 'pattern', patternType: 'object-pattern', value: $$[$0-1] };\nbreak;\ncase 100:\nthis.$ = { type: 'property', name: $$[$0-2], pattern: $$[$0] };\nbreak;\ncase 101:\nthis.$ = { type: 'property', name: $$[$0], pattern: { type: 'pattern', patternType: 'any', value: null } };\nbreak;\ncase 102:\nthis.$ = true;\nbreak;\ncase 103:\nthis.$ = false;\nbreak;\ncase 104: case 108:\nthis.$ = $$[$0].substring(1, $$[$0].length - 1);\nbreak;\ncase 105:\nthis.$ = parseInt($$[$0]);\nbreak;\ncase 106:\nthis.$ = parseFloat($$[$0]);\nbreak;\n}\n},\ntable: [{3:1,4:2,6:3,7:4,8:5,9:$V0,10:$V1,12:$V2,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{1:[3]},{1:[2,1],5:[1,35]},o($Vh,[2,4]),o($Vh,[2,5]),o($Vh,[2,6]),{10:[1,36]},{10:[1,37]},o([1,5,14,24,28,41],[2,11],{16:[1,38]}),o($Vi,[2,13]),{10:$Vj,19:39,26:$Vk,40:$Vl,43:$Vm,44:48,45:51,46:$Vn,57:40,59:$Vo,60:$Vp,61:$Vq,62:$Vr,63:$Vs,64:$Vt,65:$Vu,66:$Vv,67:53,68:54,69:$Vw,70:$Vx,79:$Vf,80:$Vg},o($Vi,[2,15]),o($Vy,[2,16],{31:[1,60],32:[1,61],33:[1,62],34:[1,63]}),{23:[1,64]},{26:[1,65]},{26:[1,66]},o($Vz,[2,20]),o($VA,[2,37],{23:[1,67]}),o($Vz,[2,27],{38:[1,68],40:[1,69]}),o($VA,[2,28]),o($VA,[2,32]),o($VA,[2,33]),o($VA,[2,34]),o($VA,[2,35]),o($VA,[2,36]),o($VA,[2,38]),o($VA,[2,39]),o($VA,[2,40]),{10:$V1,20:70,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},o($VA,[2,102]),o($VA,[2,103]),o($VB,[2,106]),o($VB,[2,104]),{7:75,9:$V0,10:$V1,12:$V2,20:74,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,41:[1,71],42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,50:72,51:73,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{7:80,9:$V0,10:$V1,12:$V2,20:79,21:12,22:$V4,23:$V5,25:$V6,26:$V7,28:[1,76],29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,52:77,53:78,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{1:[2,2],6:81,7:4,8:5,9:$V0,10:$V1,12:$V2,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{11:[1,82]},{11:[1,83]},{10:$V1,17:84,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},o($Vi,[2,14]),o($Vi,[2,61],{58:[1,85]}),o($VC,[2,63]),o($VC,[2,64]),o($VC,[2,65]),o($VC,[2,66]),o($VC,[2,67]),o($VC,[2,68]),o($VC,[2,69]),o($VC,[2,70]),o($VC,[2,71]),o($VC,[2,72]),o($VC,[2,73]),o($VC,[2,74]),o($VC,[2,75]),o($VC,[2,76]),{10:[1,86]},{10:[1,87]},o($VC,[2,79]),{10:$Vj,23:$VD,26:$Vk,40:$Vl,41:[1,88],43:$Vm,44:48,45:51,46:$Vn,57:92,59:$Vo,60:$Vp,61:$Vq,62:$Vr,63:$Vs,64:$Vt,65:$Vu,66:$Vv,67:53,68:54,69:$Vw,70:$Vx,71:89,72:90,73:91,79:$Vf,80:$Vg},{10:$VE,28:[1,94],76:95,77:96,78:97},{10:$V1,23:$V5,26:$V7,30:99,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{10:$V1,23:$V5,26:$V7,30:100,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{10:$V1,23:$V5,26:$V7,30:101,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{10:$V1,23:$V5,26:$V7,30:102,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{10:$V1,20:103,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{10:$Vj,19:105,26:$Vk,27:104,40:$Vl,43:$Vm,44:48,45:51,46:$Vn,57:40,59:$Vo,60:$Vp,61:$Vq,62:$Vr,63:$Vs,64:$Vt,65:$Vu,66:$Vv,67:53,68:54,69:$Vw,70:$Vx,79:$Vf,80:$Vg},{8:107,10:$V1,13:106,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{10:$V1,20:111,21:12,22:$V4,23:$V5,24:[1,108],25:$V6,26:$V7,29:$V8,30:16,35:109,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,55:110,56:$VF,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{10:[1,113],39:114,80:$VG},{39:116,80:$VG},{24:[1,117]},o($VA,[2,42]),{14:[1,119],41:[1,118]},o($VH,[2,45]),o($VH,[2,46]),o($VH,[2,47]),o($VA,[2,48]),{14:[1,121],28:[1,120]},o($VI,[2,51]),o($VI,[2,53],{54:[1,122]}),o($VI,[2,54]),o($Vh,[2,3]),{8:123,10:$V1,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{8:124,10:$V1,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},o($Vi,[2,12]),{10:[1,125]},o($VC,[2,77]),o($VC,[2,78]),o($VC,[2,80]),{14:$VJ,41:[1,126]},o($VK,[2,83]),o($VK,[2,84],{58:[1,128]}),o($VL,[2,86],{5:[1,129]}),{10:$Vj,23:$VD,26:$Vk,40:$Vl,43:$Vm,44:48,45:51,46:$Vn,57:92,59:$Vo,60:$Vp,61:$Vq,62:$Vr,63:$Vs,64:$Vt,65:$Vu,66:$Vv,67:53,68:54,69:$Vw,70:$Vx,71:130,72:90,73:91,79:$Vf,80:$Vg},o($VC,[2,94]),{14:[1,132],28:[1,131]},o($VI,[2,97]),o($VI,[2,98],{58:[1,133]}),o($VM,[2,101],{54:[1,134]}),o($Vz,[2,21]),o($Vz,[2,22]),o($Vz,[2,23]),o($Vz,[2,24]),{14:[1,135]},{14:[1,137],28:[1,136]},o($VI,[2,60]),{14:[1,139],28:[1,138]},o($VI,[2,10]),o($Vz,[2,25]),{14:[1,141],24:[1,140]},o($VN,[2,56]),o($VN,[2,57]),{10:$V1,20:142,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},o($VA,[2,29]),o($VA,[2,30]),o([1,5,14,16,24,28,31,32,33,34,38,40,41,54,58,75],[2,105]),{41:[1,143]},o($VA,[2,41]),o($VA,[2,43]),{7:75,9:$V0,10:$V1,12:$V2,20:74,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,51:144,62:$Vd,63:$Ve,79:$Vf,80:$Vg},o($VA,[2,49]),{7:80,9:$V0,10:$V1,12:$V2,20:79,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,53:145,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{8:146,10:$V1,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},o($VO,[2,7]),o($VO,[2,8]),o($Vi,[2,62]),o($VC,[2,81]),{10:$Vj,23:$VD,26:$Vk,40:$Vl,43:$Vm,44:48,45:51,46:$Vn,57:92,59:$Vo,60:$Vp,61:$Vq,62:$Vr,63:$Vs,64:$Vt,65:$Vu,66:$Vv,67:53,68:54,69:$Vw,70:$Vx,72:147,73:91,79:$Vf,80:$Vg},{10:[1,148]},{39:150,74:149,75:$VP,80:$VG},{14:$VJ,24:[1,152]},o($VC,[2,95]),{10:$VE,77:153,78:97},{10:[1,154]},{10:$Vj,26:$Vk,40:$Vl,43:$Vm,44:48,45:51,46:$Vn,57:155,59:$Vo,60:$Vp,61:$Vq,62:$Vr,63:$Vs,64:$Vt,65:$Vu,66:$Vv,67:53,68:54,69:$Vw,70:$Vx,79:$Vf,80:$Vg},{8:156,10:$V1,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},o($Vy,[2,18]),{10:$Vj,19:157,26:$Vk,40:$Vl,43:$Vm,44:48,45:51,46:$Vn,57:40,59:$Vo,60:$Vp,61:$Vq,62:$Vr,63:$Vs,64:$Vt,65:$Vu,66:$Vv,67:53,68:54,69:$Vw,70:$Vx,79:$Vf,80:$Vg},o($Vy,[2,19]),{8:158,10:$V1,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},o($Vz,[2,26]),{10:$V1,20:111,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,55:159,56:$VF,62:$Vd,63:$Ve,79:$Vf,80:$Vg},o($VN,[2,58]),o($VA,[2,31]),o($VH,[2,44]),o($VI,[2,50]),o($VI,[2,52]),o($VK,[2,82]),o($VK,[2,85]),o($VL,[2,87]),o($VL,[2,93],{75:[1,160]}),{39:161,80:$VG},o($VL,[2,88],{5:[1,162]}),o($VI,[2,96]),o($VI,[2,99]),o($VM,[2,100]),{24:[1,163]},o($VI,[2,59]),o($VI,[2,9]),o($VN,[2,55]),o($VL,[2,92],{39:164,80:$VG}),o($VL,[2,91]),{39:150,74:165,75:$VP,80:$VG},o($Vy,[2,17]),o($VL,[2,90]),o($VL,[2,89])],\ndefaultActions: {},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n _token_stack:\n var lex = function () {\n var token;\n token = lexer.lex() || EOF;\n if (typeof token !== 'number') {\n token = self.symbols_[token] || token;\n }\n return token;\n };\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:/* skip whitespace */\nbreak;\ncase 1:/* skip comment */\nbreak;\ncase 2:return 59\nbreak;\ncase 3:return 60\nbreak;\ncase 4:return 58\nbreak;\ncase 5:return 61\nbreak;\ncase 6:return 12\nbreak;\ncase 7:return 70\nbreak;\ncase 8:return 63\nbreak;\ncase 9:return 9\nbreak;\ncase 10:return 22\nbreak;\ncase 11:return 25\nbreak;\ncase 12:return 43\nbreak;\ncase 13:return 64\nbreak;\ncase 14:return 65\nbreak;\ncase 15:return 29\nbreak;\ncase 16:return 66\nbreak;\ncase 17:return 62\nbreak;\ncase 18:return 46\nbreak;\ncase 19:return 80\nbreak;\ncase 20:return 79\nbreak;\ncase 21:return 23\nbreak;\ncase 22:return 24\nbreak;\ncase 23:return 26\nbreak;\ncase 24:return 28\nbreak;\ncase 25:return 40\nbreak;\ncase 26:return 41\nbreak;\ncase 27:return 16\nbreak;\ncase 28:return '|'\nbreak;\ncase 29:return 14\nbreak;\ncase 30:return 54\nbreak;\ncase 31:return 5\nbreak;\ncase 32:return 18\nbreak;\ncase 33:return 11\nbreak;\ncase 34:return '<='\nbreak;\ncase 35:return 56\nbreak;\ncase 36:return 75\nbreak;\ncase 37:return 38\nbreak;\ncase 38:return '_'\nbreak;\ncase 39:return 31\nbreak;\ncase 40:return 32\nbreak;\ncase 41:return 33\nbreak;\ncase 42:return 34\nbreak;\ncase 43:return 47\nbreak;\ncase 44:return 10\nbreak;\n}\n},\nrules: [/^(?:\\s+)/,/^(?:\\/\\/.*)/,/^(?:any\\b)/,/^(?:array\\b)/,/^(?:as\\b)/,/^(?:boolean\\b)/,/^(?:def\\b)/,/^(?:enum\\b)/,/^(?:false\\b)/,/^(?:let\\b)/,/^(?:map\\b)/,/^(?:patterns\\b)/,/^(?:null\\b)/,/^(?:number\\b)/,/^(?:object\\b)/,/^(?:sequences\\b)/,/^(?:string\\b)/,/^(?:true\\b)/,/^(?:undefined\\b)/,/^(?:[-+]?(0|[1-9]\\d*)(\\.\\d+)?)/,/^(?:\"[^\"\\r\\n]*\")/,/^(?:\\()/,/^(?:\\))/,/^(?:{)/,/^(?:})/,/^(?:\\[)/,/^(?:\\])/,/^(?:\\|>)/,/^(?:\\|)/,/^(?:,)/,/^(?::)/,/^(?:;)/,/^(?:=~)/,/^(?:=)/,/^(?:<=)/,/^(?:\\.{3})/,/^(?:\\.{2})/,/^(?:\\.)/,/^(?:_)/,/^(?:\\+)/,/^(?:-)/,/^(?:\\*)/,/^(?:\\/)/,/^(?:\\$)/,/^(?:[a-zA-Z_][a-zA-Z0-9_]*)/],\nconditions: {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\nexport default parser;\n","// General functions\n\n/**\n * Return the type name of the specified item\n *\n * @param {*} item\n * @returns {string}\n */\nexport function typeName(item) {\n switch (item) {\n case null:\n return \"null\";\n case undefined:\n return \"undefined\";\n default:\n if (Array.isArray(item)) {\n return \"array\";\n }\n\n return typeof item;\n }\n}\n\n// Array related functions\n\n/**\n * Return the length of an array\n *\n * @param {Array} list\n * @returns {number}\n */\nexport function length(list) { /* eslint-disable-line no-shadow */\n return (Array.isArray(list)) ? list.length : 0;\n}\n\n/**\n * Combine multiple arrays into a single array\n *\n * @param {Array} lists\n * @param {*} [missing=undefined]\n * @returns {Array}\n */\nexport function zip(lists, missing = undefined) {\n const result = [];\n\n if (Array.isArray(lists) && lists.length > 0 && lists.every(l => Array.isArray(l))) {\n const maxLength = Math.max(...lists.map(l => l.length));\n\n for (let i = 0; i < maxLength; i++) {\n const part = [];\n\n for (const list of lists) {\n part.push(i < list.length ? list[i] : missing);\n }\n\n result.push(part);\n }\n }\n\n\n return result;\n}\n\n/**\n * Partition an array into multiple arrays\n *\n * @param {Array} items\n * @param {number} count\n * @param {number} advance\n * @param {*} [missing=undefined]\n */\nexport function partition(items, count, advance, missing = undefined) {\n /* eslint-disable-next-line no-shadow */\n const {length} = items;\n const result = [];\n\n // default advance to count, if its not defined\n advance = advance === undefined ? count : advance;\n\n // we can't advance backwards and we always need to advance\n count = Math.max(1, count);\n advance = Math.max(1, advance);\n\n for (let i = 0; i < length; i += advance) {\n const part = [];\n let index = i;\n\n for (let j = 0; j < count; j++, index++) {\n part.push(index < length ? items[index] : missing);\n }\n\n result.push(part);\n }\n\n return result;\n}\n\n/**\n * Return a new array with the original array's content reversed\n *\n * @param {Array} items\n * @returns {Array|undefined}\n */\nexport function reverse(items) {\n return Array.isArray(items)\n ? items.slice().reverse()\n : undefined;\n}\n\n/**\n * Return a new sorted array\n *\n * @param {Array} items\n * @param {Function} comparator\n * @returns {Array|undefined}\n */\nexport function sort(items, comparator) {\n return Array.isArray(items)\n ? items.slice().sort(comparator)\n : undefined;\n}\n\n/**\n * Return a string by concatenating a list of strings, delimiting each with another string\n *\n * @param {Array} items\n * @param {string} delimiter\n * @returns {string}\n */\nexport function join(items, delimiter) {\n return items.join(delimiter);\n}\n\n// Object related functions\n\n/**\n * Predicate to determine if an item is an object\n *\n * @param {*} item\n * @returns {boolean}\n */\nfunction isObject(item) {\n return item !== null && typeof item === \"object\";\n}\n\n/**\n * Return a list of keys from an object\n *\n * @param {Object} item\n * @returns {string[]}\n */\nexport function keys(item) {\n /* eslint-disable-next-line compat/compat */\n return isObject(item) ? Object.keys(item) : [];\n}\n\n/**\n * Return a list of values from an object\n *\n * @param {Object} item\n * @returns {any[]}\n */\nexport function values(item) {\n /* eslint-disable-next-line compat/compat */\n return isObject(item) ? Object.values(item) : [];\n}\n\n/**\n * Return a list of key/value pairs from an object. Each element in the result is a 2-element array\n * where the first element is the key and the second element is the value\n *\n * @param {Object} item\n * @returns {Array}\n */\nexport function pairs(item) {\n /* eslint-disable-next-line compat/compat */\n return isObject(item) ? Object.entries(item) : [];\n}\n\n/**\n * Convert a list of key/value pairs into an object. This is the reverse of pairs\n *\n * @param {Array} pairs\n * @returns {Object}\n */\nexport function fromPairs(pairs) { /* eslint-disable-line no-shadow */\n const result = {};\n\n if (Array.isArray(pairs)) {\n for (const pair of pairs) {\n if (pair.length >= 2) {\n const [key, value] = pair;\n\n result[key] = value;\n }\n }\n }\n\n return result;\n}\n\n// Array and Object related\n\n/**\n * If all items are objects, a new object with all the properties of all objects will be merged. If the same property\n * exists on multiple objects, the last object with that property wins.\n *\n * If the first item is an array, a new array will be created by appending all non-array items and concatenating all\n * array items.\n *\n * @param {Object|Array} items\n * @returns {Object|Array|undefined}\n */\nexport function merge(...items) {\n if (items.length > 0 && Array.isArray(items[0])) {\n return items[0].concat(...items.slice(1));\n }\n else if (items.every(item => isObject(item))) {\n return Object.assign({}, ...items);\n }\n\n return undefined;\n}\n","/**\n * Transformer.jss\n *\n * @copyright 2019, Kevin Lindsey\n * @module Transformer\n */\n\n// import util from \"util\";\n// import Parser from \"./Parser.js\";\nimport Parser from \"./GeneratedParser.js\";\nimport * as StdLib from \"./StandardLibrary.js\";\n\nconst FAILURE_VALUE = {};\nexport {FAILURE_VALUE};\n\n/**\n * Determine if object is something that can have properties\n *\n * @param {*} obj\n * @returns {boolean}\n */\nfunction isObject(obj) {\n return obj !== null && typeof obj === \"object\";\n}\n\n/**\n * Transformer\n */\nexport default class Transformer {\n /**\n * Create a new empty Transformer. Normalizers can be used to validate and transform data. However, when a new\n * Transformer has been created, it needs to be populated with one or more type descriptions. The easiest way to do\n * this is with the static method fromSource.\n */\n constructor() {\n this.symbolTable = {};\n this.functions = {};\n this.messages = [];\n this.verbose = false;\n\n // add standard library\n /* eslint-disable-next-line guard-for-in */\n for (const name in StdLib) {\n /* eslint-disable-next-line import/namespace */\n this.functions[name] = StdLib[name];\n }\n }\n\n /**\n * Add function\n *\n * @param {string} name\n * @param {Function} reference\n */\n addFunction(name, reference) {\n // TODO: type check\n this.functions[name] = reference;\n }\n\n /**\n * Add information\n *\n * @param {string} message\n */\n addInfo(message) {\n if (this.verbose) {\n this.messages.push({type: \"message\", level: \"info\", message});\n }\n }\n\n /**\n * Add a warning\n *\n * @param {string} message\n */\n addWarning(message) {\n this.messages.push({type: \"message\", level: \"warning\", message});\n }\n\n /**\n * Add an error\n *\n * @param {string} message\n */\n addError(message) {\n this.messages.push({type: \"message\", level: \"error\", message});\n }\n\n /**\n * Compile and execute the source against the specfied structure\n *\n * @param {string} source\n * @param {*} structure\n * @returns {*}\n */\n execute(source, structure) {\n // TODO: cache results using source or source hash as key\n // parse source\n const statements = Parser.parse(source);\n\n // clear any previous messages\n this.messages = [];\n\n // process statements\n let result;\n\n for (const statement of statements) {\n switch (statement.type) {\n case \"assignment\":\n case \"def\":\n case \"sequence\": {\n result = this.executeExpression(statement, structure, this.symbolTable);\n break;\n }\n\n default:\n this.addError(`unknown statement type: ${statement.type}`);\n return FAILURE_VALUE;\n }\n }\n\n return result;\n }\n\n /*\n * Execute a method and return its value\n *\n * @param {object} expression\n * @param {object} symbolTable\n * @returns {*}\n */\n executeExpression(expression, structure, symbolTable) {\n const getNumbers = operation => {\n const left = this.executeExpression(expression.left, structure, symbolTable);\n\n if (left !== FAILURE_VALUE && typeof left === \"number\") {\n const right = this.executeExpression(expression.right, structure, symbolTable);\n\n if (right !== FAILURE_VALUE && typeof right === \"number\") {\n return operation(left, right);\n }\n }\n\n return FAILURE_VALUE;\n };\n\n switch (expression.type) {\n case \"assignment\": {\n const value = this.executeExpression(expression.value, structure, symbolTable);\n\n if (value === FAILURE_VALUE) {\n this.addError(`Unable to evaluate assignment value for ${expression.name}`);\n return FAILURE_VALUE;\n }\n\n symbolTable[expression.name] = value;\n\n return value;\n }\n\n case \"def\":\n symbolTable[expression.name] = expression.value;\n return undefined;\n\n case \"get-value\":\n if (expression.name in symbolTable) {\n const value = symbolTable[expression.name];\n\n if (isObject(value) && value.type === \"sequence\") {\n const seqValue = this.executeExpression(value, structure, symbolTable);\n\n if (seqValue === FAILURE_VALUE) {\n this.addError(`Unable to evaluate sequence ${expression.name}`);\n return FAILURE_VALUE;\n }\n\n return seqValue;\n }\n\n return value;\n }\n else if (expression.name in this.functions) {\n return this.invokeFunction(expression.name, [structure]);\n }\n\n this.addError(`Tried to access unbound symbol: ${expression.name}`);\n return FAILURE_VALUE;\n\n case \"get-property\": {\n const object = this.executeExpression(expression.left, structure, symbolTable);\n\n return (isObject(object)) ? object[expression.right] : FAILURE_VALUE;\n }\n\n case \"get-index\": {\n const {left, right} = expression;\n const array = this.executeExpression(left, structure, symbolTable);\n\n if (Array.isArray(array)) {\n const index = (right < 0) ? array.length + right : right;\n\n return 0 <= index && index < array.length ? array[index] : FAILURE_VALUE;\n }\n\n return FAILURE_VALUE;\n }\n\n case \"get-structure\":\n return structure;\n\n case \"sequences\": {\n let result = FAILURE_VALUE;\n\n for (const sequence of expression.sequences) {\n const sequenceSymbolTable = Object.create(symbolTable);\n\n result = this.executeExpression(sequence, structure, sequenceSymbolTable);\n\n if (result !== FAILURE_VALUE) {\n Object.assign(symbolTable, sequenceSymbolTable);\n break;\n }\n }\n\n return result;\n }\n\n case \"sequence\": {\n let currentObject = structure;\n\n for (const step of expression.steps) {\n if (step.type === \"pattern\") {\n currentObject = this.executePattern(step, currentObject, symbolTable);\n }\n else {\n currentObject = this.executeExpression(step, currentObject, symbolTable);\n }\n\n if (currentObject === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n }\n\n return currentObject;\n }\n\n case \"add\":\n return getNumbers((a, b) => a + b);\n\n case \"map\": {\n const [valueGenerator, transform] = expression.value;\n const values = this.executeExpression(valueGenerator, structure, symbolTable);\n\n if (values !== FAILURE_VALUE) {\n if (Array.isArray(values) === false) {\n this.addError(\"First argument of map must evaluate to an array\");\n return FAILURE_VALUE;\n }\n\n const mapSymbolTable = Object.create(symbolTable);\n\n return values.map(value => this.executeExpression(transform, value, mapSymbolTable));\n }\n\n return FAILURE_VALUE;\n }\n\n case \"patterns\": {\n let result = FAILURE_VALUE;\n\n for (const pattern of expression.patterns) {\n const patternSymbolTable = Object.create(symbolTable);\n\n result = this.executePattern(pattern, structure, patternSymbolTable);\n\n if (result !== FAILURE_VALUE) {\n Object.assign(symbolTable, patternSymbolTable);\n break;\n }\n }\n\n return result;\n }\n\n case \"subtract\":\n return getNumbers((a, b) => a - b);\n\n case \"multiply\":\n return getNumbers((a, b) => a * b);\n\n case \"divide\":\n return getNumbers((a, b) => a / b);\n\n case \"invoke\": {\n const args = expression.args.reduce((accum, arg) => {\n if (arg.type === \"spread\") {\n const value = this.executeExpression(arg.expression, structure, symbolTable);\n // const value = arg.name !== null ? symbolTable[arg.name] : structure;\n\n if (Array.isArray(value)) {\n accum = accum.concat(value);\n }\n else {\n accum.push(value);\n }\n }\n else {\n accum.push(this.executeExpression(arg, structure, symbolTable));\n }\n\n return accum;\n }, []);\n\n if (expression.name in this.functions) {\n return this.invokeFunction(expression.name, args);\n }\n\n this.addError(`Tried to access unbound symbol: ${expression.name}`);\n return FAILURE_VALUE;\n }\n\n case \"array\": {\n const results = [];\n\n for (const element of expression.value) {\n if (element.type === \"assignment\") {\n this.executeExpression(element, structure, symbolTable);\n }\n else {\n const value = this.executeExpression(element, structure, symbolTable);\n\n if (value === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n\n results.push(value);\n }\n }\n\n return results;\n }\n\n case \"boolean\":\n case \"null\":\n case \"number\":\n case \"string\":\n case \"undefined\":\n return expression.value;\n\n case \"object\":\n return this.executeObjectExpression(expression, structure, symbolTable);\n\n default:\n this.addError(`Unrecognized expression type: '${expression.type}'`);\n return FAILURE_VALUE;\n }\n }\n\n /**\n * Execute an object pattern\n *\n * @param {Object} pattern\n * @param {*} structure\n * @param {Object} symbolTable\n * @returns {*}\n */\n executeObjectExpression(pattern, structure, symbolTable) {\n const objectSymbolTable = Object.create(symbolTable);\n const result = {};\n\n for (const element of pattern.value) {\n switch (element.type) {\n case \"property\": {\n const name = this.executeExpression(element.name, structure, objectSymbolTable);\n\n if (name === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n else if (typeof name !== \"string\") {\n this.addError(`Property names must be string types: ${name}`);\n return FAILURE_VALUE;\n }\n\n const value = element.value !== null\n ? this.executeExpression(element.value, structure, objectSymbolTable)\n : symbolTable[name];\n\n if (value === FAILURE_VALUE) {\n this.addError(`Unable to evaluate value for property ${name}`);\n return FAILURE_VALUE;\n }\n\n result[name] = value;\n break;\n }\n\n case \"assignment\": {\n const value = this.executeExpression(element, structure, objectSymbolTable);\n\n if (value === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n break;\n }\n\n default:\n this.addError(`Unrecognized object expression element type: ${element.type}`);\n return FAILURE_VALUE;\n }\n }\n\n return result;\n }\n\n /*\n * Acquire the value of a type pattern from the specified structure. Any named entities will be populated in the\n * specified symbolTable\n *\n * @param {object} pattern\n * @param {*} structure\n * @param {object} symbolTable\n * @returns {*}\n */\n executePattern(pattern, structure, symbolTable) {\n switch (pattern.patternType) {\n case \"any\":\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n\n case \"array\":\n if (Array.isArray(structure)) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n\n return FAILURE_VALUE;\n\n case \"array-pattern\": {\n const result = this.executeArrayPattern(pattern, structure, symbolTable);\n\n return result === FAILURE_VALUE ? FAILURE_VALUE : symbolTable;\n }\n\n case \"boolean\":\n if (typeof structure === \"boolean\") {\n if (pattern.value === null || pattern.value === structure) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n }\n\n return FAILURE_VALUE;\n\n case \"null\":\n if (structure === null) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n\n return FAILURE_VALUE;\n\n case \"number\":\n if (typeof structure === \"number\") {\n if (pattern.value === null || pattern.value === structure) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n }\n\n return FAILURE_VALUE;\n\n case \"object\":\n if (isObject(structure)) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n\n return FAILURE_VALUE;\n\n case \"object-pattern\": {\n if (isObject(structure) === false) {\n return FAILURE_VALUE;\n }\n\n const result = {};\n\n for (const property of pattern.value) {\n const {name, pattern: propertyPattern, assignTo} = property;\n\n if (name in structure) {\n const value = this.executePattern(propertyPattern, structure[name], symbolTable);\n\n if (value === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n\n this.assign(symbolTable, assignTo, structure[name]);\n this.assign(result, assignTo, value);\n }\n else {\n return FAILURE_VALUE;\n }\n }\n\n this.assign(symbolTable, pattern.assignTo, structure);\n return result;\n }\n\n case \"reference\":\n if (pattern.value in this.patterns) {\n const referencedPattern = this.patterns[pattern.value];\n const result = this.executePattern(referencedPattern, structure, symbolTable);\n\n if (result !== FAILURE_VALUE) {\n this.assign(symbolTable, pattern.assignTo, result);\n }\n\n return result;\n }\n\n return FAILURE_VALUE;\n\n case \"string\":\n if (typeof structure === \"string\") {\n if (pattern.value === null || pattern.value === structure) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n }\n\n return FAILURE_VALUE;\n\n case \"undefined\":\n // NOTE: Our current failure value is undefined, so this will be treated as an error. I can change\n // FAILURE_VALUE to be a sigil. I'll just have to be careful to return undefined at the top-most level.\n // I'm leaving this for now as this is probably not going to be used much\n if (structure === undefined) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n\n return FAILURE_VALUE;\n\n default:\n throw new TypeError(`unrecognized pattern type: '${pattern.type}'`);\n }\n }\n\n /*\n * Execute an array pattern\n *\n * @param {Object} pattern\n * @param {*} structure\n * @param {Object} symbolTable\n * @returns {*}\n */\n executeArrayPattern(pattern, structure, symbolTable) {\n if (Array.isArray(structure) === false) {\n return FAILURE_VALUE;\n }\n\n let result = [];\n let index = 0;\n\n for (const element of pattern.value) {\n const results = this.executeArrayPatternElement(element, index, structure, symbolTable);\n\n if (results === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n\n result = result.concat(results);\n index += results.length;\n }\n\n if (index === structure.length) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return result;\n }\n\n return FAILURE_VALUE;\n }\n\n /*\n * Execute an element from an array pattern\n *\n * @param {Object} element\n * @param {number} index\n * @param {*} structure\n * @param {Object} symbolTable\n * @returns {Array|undefined}\n */\n executeArrayPatternElement(element, index, structure, symbolTable) {\n let result = [];\n\n switch (element.type) {\n case \"element\": {\n const results = this.executeArrayElementPattern(element, index, structure, symbolTable);\n\n if (results === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n\n result = result.concat(results);\n index += results.length;\n break;\n }\n\n case \"element-group\": {\n const results = this.executeArrayElementGroupPattern(element, index, structure, symbolTable);\n\n if (results === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n\n result = result.concat(results);\n index += results.length;\n break;\n }\n\n default:\n this.addError(`Unrecognized array pattern element type: '${element.type}'`);\n return FAILURE_VALUE;\n }\n\n return result;\n }\n\n /*\n * Execute array element pattern\n *\n * @param {Object} element\n * @param {number} index\n * @param {*} structure\n * @param {Object} symbolTable\n * @returns {Array|undefined}\n */\n executeArrayElementPattern(element, index, structure, symbolTable) {\n const {pattern, range: {start, stop}} = element;\n const result = [];\n\n for (let i = 0; i < stop; i++) {\n const actualIndex = index + i;\n\n // treat out-of-bounds like a failure\n const value = (actualIndex < structure.length)\n ? this.executePattern(pattern, structure[actualIndex], symbolTable)\n : FAILURE_VALUE;\n\n // if we processed enough, continue, else failure\n if (value === FAILURE_VALUE) {\n if (i >= start) {\n break;\n }\n\n return FAILURE_VALUE;\n }\n\n // save result\n if (stop > 1) {\n this.pushAssign(symbolTable, element.assignTo, value);\n }\n else {\n this.assign(symbolTable, element.assignTo, value);\n }\n result.push(value);\n }\n\n return result;\n }\n\n /*\n * Execute array element group pattern\n *\n * @param {Object} element\n * @param {number} index\n * @param {*} structure\n * @param {Object} symbolTable\n * @returns {Array|undefined}\n */\n executeArrayElementGroupPattern(group, index, structure, symbolTable) {\n const {elements, range: {start, stop}} = group;\n let result = [];\n\n for (let i = 0; i < stop; i++) {\n let groupResults = [];\n\n // all elements must be successful\n for (const element of elements) {\n const elementSymbolTable = Object.create(symbolTable);\n const results = this.executeArrayPatternElement(element, index, structure, elementSymbolTable);\n\n if (results === FAILURE_VALUE) {\n groupResults = FAILURE_VALUE;\n break;\n }\n\n // copy result into main symbol table\n if (element.assignTo !== null && element.assignTo !== undefined && element.assignTo in elementSymbolTable) {\n if (stop > 1) {\n // this.pushAssign(symbolTable, element.assignTo, results);\n this.pushAssign(symbolTable, element.assignTo, elementSymbolTable[element.assignTo]);\n }\n else {\n // this.assign(symbolTable, element.assignTo, results);\n this.assign(symbolTable, element.assignTo, elementSymbolTable[element.assignTo]);\n }\n }\n\n // collect everything that matched and advance to the next item to match\n result = result.concat(results);\n index += results.length;\n\n // collect what we've matched in this group so far\n groupResults = groupResults.concat(results);\n }\n\n if (groupResults === FAILURE_VALUE) {\n // make sure we met our lower bounds criteria\n if (i >= start) {\n // if we didn't process any elements, then we haven't created arrays in the symbol table for this\n // group or its elements.\n if (i === 0) {\n this.assign(symbolTable, group.assignTo, []);\n\n for (const element of elements) {\n this.assign(symbolTable, element.assignTo, []);\n }\n }\n\n return result;\n }\n\n return FAILURE_VALUE;\n }\n\n if (stop > 1) {\n this.pushAssign(symbolTable, group.assignTo, groupResults);\n }\n else {\n this.assign(symbolTable, group.assignTo, groupResults);\n }\n }\n\n return result;\n }\n\n /*\n * Invoke a user-defined method and return its value\n *\n * @param {string} type\n * @param {Array} args\n * @returns {*}\n */\n invokeFunction(type, args) {\n if (type in this.functions) {\n return this.functions[type](...args);\n }\n\n return FAILURE_VALUE;\n }\n\n /**\n * Add a symbol/value to the symbol table, warning if an overwrite is occurring\n *\n * @param {Object} symbolTable\n * @param {string} name\n * @param {*} value\n */\n assign(symbolTable, name, value) {\n if (name !== null && name !== undefined) {\n /* eslint-disable-next-line no-prototype-builtins */\n if (symbolTable.hasOwnProperty(name)) {\n this.addWarning(`Overwriting ${name} with value: ${value}`);\n }\n\n symbolTable[name] = value;\n }\n }\n\n /**\n * Push a value onto the array at the name in the symbol table. If the name is not in the table already, an array will\n * be created and then the value will be pushed to it. This is used for grouped elements.\n *\n * @param {Object} symbolTable\n * @param {string} name\n * @param {*} value\n */\n pushAssign(symbolTable, name, value) {\n if (name !== null && name !== undefined) {\n /* eslint-disable-next-line no-prototype-builtins */\n const items = symbolTable.hasOwnProperty(name)\n ? symbolTable[name]\n : [];\n\n if (Array.isArray(items)) {\n items.push(value);\n\n symbolTable[name] = items;\n }\n else {\n this.addWarning(`Unable to push to ${name} because it is not an array: ${items}`);\n }\n }\n }\n}\n","/**\n * PathLexeme.js\n *\n * @copyright 2002, 2013 Kevin Lindsey\n * @module PathLexeme\n */\n\n/**\n * PathLexeme\n */\nclass PathLexeme {\n /**\n * PathLexeme\n *\n * @param {number} type\n * @param {string} text\n */\n constructor(type, text) {\n this.type = type;\n this.text = text;\n }\n\n /**\n * Determine if this lexeme is of the given type\n *\n * @param {number} type\n * @returns {boolean}\n */\n typeis(type) {\n return this.type === type;\n }\n}\n\n/*\n * token type enumerations\n */\nPathLexeme.UNDEFINED = 0;\nPathLexeme.COMMAND = 1;\nPathLexeme.NUMBER = 2;\nPathLexeme.EOD = 3;\n\nexport default PathLexeme;\n","/**\n * PathLexer.js\n *\n * @copyright 2003, 2013 Kevin Lindsey\n * @module PathLexer\n */\n\nimport PathLexeme from \"./PathLexeme.js\";\n\n/**\n * Create a new instance of PathLexer\n */\nclass PathLexer {\n /**\n * @param {string} [pathData]\n */\n constructor(pathData) {\n if (pathData === null || pathData === undefined) {\n pathData = \"\";\n }\n\n this.setPathData(pathData);\n }\n\n /**\n * setPathData\n *\n * @param {string} pathData\n */\n setPathData(pathData) {\n if (typeof pathData !== \"string\") {\n throw new TypeError(\"The first parameter must be a string\");\n }\n\n this._pathData = pathData;\n }\n\n /**\n * getNextToken\n *\n * @returns {PathLexeme}\n */\n getNextToken() {\n let result = null;\n let d = this._pathData;\n\n while (result === null) {\n if (d === null || d === \"\") {\n result = new PathLexeme(PathLexeme.EOD, \"\");\n }\n else if (d.match(/^([ \\t\\r\\n,]+)/)) {\n d = d.substr(RegExp.$1.length);\n }\n else if (d.match(/^([AaCcHhLlMmQqSsTtVvZz])/)) {\n result = new PathLexeme(PathLexeme.COMMAND, RegExp.$1);\n d = d.substr(RegExp.$1.length);\n }\n /* eslint-disable-next-line unicorn/no-unsafe-regex */\n else if (d.match(/^(([-+]?\\d+(\\.\\d*)?|[-+]?\\.\\d+)([eE][-+]?\\d+)?)/)) {\n result = new PathLexeme(PathLexeme.NUMBER, RegExp.$1);\n d = d.substr(RegExp.$1.length);\n }\n else {\n throw new SyntaxError(`Unrecognized path data: ${d}`);\n }\n }\n\n this._pathData = d;\n\n return result;\n }\n}\n\nexport default PathLexer;\n","/**\n * PathParser.js\n *\n * @copyright 2003, 2017 Kevin Lindsey\n * @module PathParser\n */\n\nimport PathLexer from \"./PathLexer.js\";\nimport PathLexeme from \"./PathLexeme.js\";\n\nconst BOP = \"BOP\";\n\n/**\n * PathParser\n */\nclass PathParser {\n /**\n * constructor\n */\n constructor() {\n this._lexer = new PathLexer();\n this._handler = null;\n }\n\n /**\n * parseData\n *\n * @param {string} pathData\n * @throws {Error}\n */\n parseData(pathData) {\n if (typeof pathData !== \"string\") {\n throw new TypeError(`The first parameter must be a string: ${pathData}`);\n }\n\n // begin parse\n if (this._handler !== null && typeof this._handler.beginParse === \"function\") {\n this._handler.beginParse();\n }\n\n // pass the pathData to the lexer\n const lexer = this._lexer;\n\n lexer.setPathData(pathData);\n\n // set mode to signify new path - Beginning Of Path\n let mode = BOP;\n\n // Process all tokens\n let lastToken = null;\n let token = lexer.getNextToken();\n\n while (token.typeis(PathLexeme.EOD) === false) {\n let parameterCount;\n const params = [];\n\n // process current token\n switch (token.type) {\n case PathLexeme.COMMAND:\n if (mode === BOP && token.text !== \"M\" && token.text !== \"m\") {\n throw new SyntaxError(`New paths must begin with a moveto command. Found '${token.text}'`);\n }\n\n // Set new parsing mode\n mode = token.text;\n\n // Get count of numbers that must follow this command\n parameterCount = PathParser.PARAMCOUNT[token.text.toUpperCase()];\n\n // Advance past command token\n token = lexer.getNextToken();\n break;\n\n case PathLexeme.NUMBER:\n // Most commands allow you to keep repeating parameters\n // without specifying the command again. We just assume\n // that is the case and do nothing since the mode remains\n // the same\n\n if (mode === BOP) {\n throw new SyntaxError(`New paths must begin with a moveto command. Found '${token.text}'`);\n }\n else {\n parameterCount = PathParser.PARAMCOUNT[mode.toUpperCase()];\n }\n break;\n\n default:\n throw new SyntaxError(`Unrecognized command type: ${token.type}`);\n }\n\n // Get parameters\n for (let i = 0; i < parameterCount; i++) {\n switch (token.type) {\n case PathLexeme.COMMAND:\n throw new SyntaxError(`Parameter must be a number. Found '${token.text}'`);\n\n case PathLexeme.NUMBER:\n // convert current parameter to a float and add to\n // parameter list\n params[i] = parseFloat(token.text);\n break;\n\n case PathLexeme.EOD:\n throw new SyntaxError(\"Unexpected end of string\");\n\n default:\n throw new SyntaxError(`Unrecognized parameter type. Found type '${token.type}'`);\n }\n\n token = lexer.getNextToken();\n }\n\n // fire handler\n if (this._handler !== null) {\n const handler = this._handler;\n const methodName = PathParser.METHODNAME[mode];\n\n // convert types for arcs\n if (mode === \"a\" || mode === \"A\") {\n params[3] = params[3] !== 0;\n params[4] = params[4] !== 0;\n }\n\n if (handler !== null && typeof handler[methodName] === \"function\") {\n handler[methodName](...params);\n }\n }\n\n // Lineto's follow moveto when no command follows moveto params. Go\n // ahead and set the mode just in case no command follows the moveto\n // command\n switch (mode) {\n case \"M\":\n mode = \"L\";\n break;\n case \"m\":\n mode = \"l\";\n break;\n case \"Z\":\n case \"z\":\n mode = \"BOP\";\n break;\n default:\n // ignore for now\n }\n\n if (token === lastToken) {\n throw new SyntaxError(`Parser stalled on '${token.text}'`);\n }\n else {\n lastToken = token;\n }\n }\n\n // end parse\n if (this._handler !== null && typeof this._handler.endParse === \"function\") {\n this._handler.endParse();\n }\n }\n\n /**\n * setHandler\n *\n * @param {Object} handler\n */\n setHandler(handler) {\n this._handler = handler;\n }\n}\n\n/*\n * class constants\n */\nPathParser.PARAMCOUNT = {\n A: 7,\n C: 6,\n H: 1,\n L: 2,\n M: 2,\n Q: 4,\n S: 4,\n T: 2,\n V: 1,\n Z: 0\n};\nPathParser.METHODNAME = {\n A: \"arcAbs\",\n a: \"arcRel\",\n C: \"curvetoCubicAbs\",\n c: \"curvetoCubicRel\",\n H: \"linetoHorizontalAbs\",\n h: \"linetoHorizontalRel\",\n L: \"linetoAbs\",\n l: \"linetoRel\",\n M: \"movetoAbs\",\n m: \"movetoRel\",\n Q: \"curvetoQuadraticAbs\",\n q: \"curvetoQuadraticRel\",\n S: \"curvetoCubicSmoothAbs\",\n s: \"curvetoCubicSmoothRel\",\n T: \"curvetoQuadraticSmoothAbs\",\n t: \"curvetoQuadraticSmoothRel\",\n V: \"linetoVerticalAbs\",\n v: \"linetoVerticalRel\",\n Z: \"closePath\",\n z: \"closePath\"\n};\n\nexport default PathParser;\n","/**\n * PathHandler.js\n *\n * @copyright 2017 Kevin Lindsey\n */\n\nimport {Point2D, Vector2D} from \"kld-affine\";\n\nconst TWO_PI = 2.0 * Math.PI;\n\n/**\n * normalizeAngle\n *\n * @param {number} radians\n * @returns {number}\n */\nfunction normalizeAngle(radians) {\n const normal = radians % TWO_PI;\n\n return normal < 0.0 ? normal + TWO_PI : normal;\n}\n\n/**\n * Based on the SVG 1.1 specification, Appendix F: Implementation Requirements,\n * Section F.6 \"Elliptical arc implementation notes\"\n * {@see https://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes}\n *\n * @param {module:kld-affine.Point2D} startPoint\n * @param {module:kld-affine.Point2D} endPoint\n * @param {number} rx\n * @param {number} ry\n * @param {number} angle\n * @param {boolean} arcFlag\n * @param {boolean} sweepFlag\n * @returns {Array}\n */\nfunction getArcParameters(startPoint, endPoint, rx, ry, angle, arcFlag, sweepFlag) {\n angle = angle * Math.PI / 180;\n\n const c = Math.cos(angle);\n const s = Math.sin(angle);\n const TOLERANCE = 1e-6;\n\n // Section (F.6.5.1)\n const halfDiff = startPoint.subtract(endPoint).multiply(0.5);\n const x1p = halfDiff.x * c + halfDiff.y * s;\n const y1p = halfDiff.x * -s + halfDiff.y * c;\n\n // Section (F.6.6.1)\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n\n // Section (F.6.6.2)\n const x1px1p = x1p * x1p;\n const y1py1p = y1p * y1p;\n const lambda = (x1px1p / (rx * rx)) + (y1py1p / (ry * ry));\n\n // Section (F.6.6.3)\n if (lambda > 1) {\n const factor = Math.sqrt(lambda);\n\n rx *= factor;\n ry *= factor;\n }\n\n // Section (F.6.5.2)\n const rxrx = rx * rx;\n const ryry = ry * ry;\n const rxy1 = rxrx * y1py1p;\n const ryx1 = ryry * x1px1p;\n\n let factor = (rxrx * ryry - rxy1 - ryx1) / (rxy1 + ryx1);\n\n if (Math.abs(factor) < TOLERANCE) {\n factor = 0;\n }\n\n let sq = Math.sqrt(factor);\n\n if (arcFlag === sweepFlag) {\n sq = -sq;\n }\n\n // Section (F.6.5.3)\n const mid = startPoint.add(endPoint).multiply(0.5);\n const cxp = sq * rx * y1p / ry;\n const cyp = sq * -ry * x1p / rx;\n\n // Section (F.6.5.5 - F.6.5.6)\n const xcr1 = (x1p - cxp) / rx;\n const xcr2 = (x1p + cxp) / rx;\n const ycr1 = (y1p - cyp) / ry;\n const ycr2 = (y1p + cyp) / ry;\n\n const theta1 = new Vector2D(1, 0).angleBetween(new Vector2D(xcr1, ycr1));\n let deltaTheta = normalizeAngle(new Vector2D(xcr1, ycr1).angleBetween(new Vector2D(-xcr2, -ycr2)));\n\n if (sweepFlag === false) {\n deltaTheta -= TWO_PI;\n }\n\n return [\n cxp * c - cyp * s + mid.x,\n cxp * s + cyp * c + mid.y,\n rx,\n ry,\n theta1,\n theta1 + deltaTheta\n ];\n}\n\n/**\n * PathHandler\n */\nclass PathHandler {\n /**\n * PathHandler\n *\n * @param {ShapeInfo} shapeCreator\n */\n constructor(shapeCreator) {\n this.shapeCreator = shapeCreator;\n this.shapes = [];\n this.firstX = null;\n this.firstY = null;\n this.lastX = null;\n this.lastY = null;\n this.lastCommand = null;\n }\n\n /**\n * beginParse\n */\n beginParse() {\n // zero out the sub-path array\n this.shapes = [];\n\n // clear firstX, firstY, lastX, and lastY\n this.firstX = null;\n this.firstY = null;\n this.lastX = null;\n this.lastY = null;\n\n // need to remember last command type to determine how to handle the\n // relative Bezier commands\n this.lastCommand = null;\n }\n\n /**\n * addShape\n *\n * @param {ShapeInfo} shape\n */\n addShape(shape) {\n this.shapes.push(shape);\n }\n\n /**\n * arcAbs - A\n *\n * @param {number} rx\n * @param {number} ry\n * @param {number} xAxisRotation\n * @param {boolean} arcFlag\n * @param {boolean} sweepFlag\n * @param {number} x\n * @param {number} y\n */\n arcAbs(rx, ry, xAxisRotation, arcFlag, sweepFlag, x, y) {\n if (rx === 0 || ry === 0) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n x, y\n ));\n }\n else {\n const arcParameters = getArcParameters(\n new Point2D(this.lastX, this.lastY),\n new Point2D(x, y),\n rx, ry,\n xAxisRotation,\n arcFlag, sweepFlag\n );\n\n this.addShape(this.shapeCreator.arc(...arcParameters));\n }\n\n this.lastCommand = \"A\";\n this.lastX = x;\n this.lastY = y;\n }\n\n /**\n * arcRel - a\n *\n * @param {number} rx\n * @param {number} ry\n * @param {number} xAxisRotation\n * @param {boolean} arcFlag\n * @param {boolean} sweepFlag\n * @param {number} x\n * @param {number} y\n */\n arcRel(rx, ry, xAxisRotation, arcFlag, sweepFlag, x, y) {\n if (rx === 0 || ry === 0) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n this.lastX + x, this.lastY + y\n ));\n }\n else {\n const arcParameters = getArcParameters(\n new Point2D(this.lastX, this.lastY),\n new Point2D(this.lastX + x, this.lastY + y),\n rx, ry,\n xAxisRotation,\n arcFlag, sweepFlag\n );\n\n this.addShape(this.shapeCreator.arc(...arcParameters));\n }\n\n this.lastCommand = \"a\";\n this.lastX += x;\n this.lastY += y;\n }\n\n /**\n * curvetoCubicAbs - C\n *\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x\n * @param {number} y\n */\n curvetoCubicAbs(x1, y1, x2, y2, x, y) {\n this.addShape(this.shapeCreator.cubicBezier(\n this.lastX, this.lastY,\n x1, y1,\n x2, y2,\n x, y\n ));\n\n this.lastX = x;\n this.lastY = y;\n this.lastCommand = \"C\";\n }\n\n /**\n * curvetoCubicRel - c\n *\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x\n * @param {number} y\n */\n curvetoCubicRel(x1, y1, x2, y2, x, y) {\n this.addShape(this.shapeCreator.cubicBezier(\n this.lastX, this.lastY,\n this.lastX + x1, this.lastY + y1,\n this.lastX + x2, this.lastY + y2,\n this.lastX + x, this.lastY + y\n ));\n\n this.lastX += x;\n this.lastY += y;\n this.lastCommand = \"c\";\n }\n\n /**\n * linetoHorizontalAbs - H\n *\n * @param {number} x\n */\n linetoHorizontalAbs(x) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n x, this.lastY\n ));\n\n this.lastX = x;\n this.lastCommand = \"H\";\n }\n\n /**\n * linetoHorizontalRel - h\n *\n * @param {number} x\n */\n linetoHorizontalRel(x) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n this.lastX + x, this.lastY\n ));\n\n this.lastX += x;\n this.lastCommand = \"h\";\n }\n\n /**\n * linetoAbs - L\n *\n * @param {number} x\n * @param {number} y\n */\n linetoAbs(x, y) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n x, y\n ));\n\n this.lastX = x;\n this.lastY = y;\n this.lastCommand = \"L\";\n }\n\n /**\n * linetoRel - l\n *\n * @param {number} x\n * @param {number} y\n */\n linetoRel(x, y) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n this.lastX + x, this.lastY + y\n ));\n\n this.lastX += x;\n this.lastY += y;\n this.lastCommand = \"l\";\n }\n\n /**\n * movetoAbs - M\n *\n * @param {number} x\n * @param {number} y\n */\n movetoAbs(x, y) {\n this.firstX = x;\n this.firstY = y;\n this.lastX = x;\n this.lastY = y;\n this.lastCommand = \"M\";\n }\n\n /**\n * movetoRel - m\n *\n * @param {number} x\n * @param {number} y\n */\n movetoRel(x, y) {\n this.firstX += x;\n this.firstY += y;\n this.lastX += x;\n this.lastY += y;\n this.lastCommand = \"m\";\n }\n\n /**\n * curvetoQuadraticAbs - Q\n *\n * @param {number} x1\n * @param {number} y1\n * @param {number} x\n * @param {number} y\n */\n curvetoQuadraticAbs(x1, y1, x, y) {\n this.addShape(this.shapeCreator.quadraticBezier(\n this.lastX, this.lastY,\n x1, y1,\n x, y\n ));\n\n this.lastX = x;\n this.lastY = y;\n this.lastCommand = \"Q\";\n }\n\n /**\n * curvetoQuadraticRel - q\n *\n * @param {number} x1\n * @param {number} y1\n * @param {number} x\n * @param {number} y\n */\n curvetoQuadraticRel(x1, y1, x, y) {\n this.addShape(this.shapeCreator.quadraticBezier(\n this.lastX, this.lastY,\n this.lastX + x1, this.lastY + y1,\n this.lastX + x, this.lastY + y\n ));\n\n this.lastX += x;\n this.lastY += y;\n this.lastCommand = \"q\";\n }\n\n /**\n * curvetoCubicSmoothAbs - S\n *\n * @param {number} x2\n * @param {number} y2\n * @param {number} x\n * @param {number} y\n */\n curvetoCubicSmoothAbs(x2, y2, x, y) {\n let controlX, controlY;\n\n if (this.lastCommand.match(/^[SsCc]$/)) {\n const secondToLast = this.shapes[this.shapes.length - 1].args[2];\n\n controlX = 2 * this.lastX - secondToLast.x;\n controlY = 2 * this.lastY - secondToLast.y;\n }\n else {\n controlX = this.lastX;\n controlY = this.lastY;\n }\n\n this.addShape(this.shapeCreator.cubicBezier(\n this.lastX, this.lastY,\n controlX, controlY,\n x2, y2,\n x, y\n ));\n\n this.lastX = x;\n this.lastY = y;\n this.lastCommand = \"S\";\n }\n\n /**\n * curvetoCubicSmoothRel - s\n *\n * @param {number} x2\n * @param {number} y2\n * @param {number} x\n * @param {number} y\n */\n curvetoCubicSmoothRel(x2, y2, x, y) {\n let controlX, controlY;\n\n if (this.lastCommand.match(/^[SsCc]$/)) {\n const secondToLast = this.shapes[this.shapes.length - 1].args[2];\n\n controlX = 2 * this.lastX - secondToLast.x;\n controlY = 2 * this.lastY - secondToLast.y;\n }\n else {\n controlX = this.lastX;\n controlY = this.lastY;\n }\n\n this.addShape(this.shapeCreator.cubicBezier(\n this.lastX, this.lastY,\n controlX, controlY,\n this.lastX + x2, this.lastY + y2,\n this.lastX + x, this.lastY + y\n ));\n\n this.lastX += x;\n this.lastY += y;\n this.lastCommand = \"s\";\n }\n\n /**\n * curvetoQuadraticSmoothAbs - T\n *\n * @param {number} x\n * @param {number} y\n */\n curvetoQuadraticSmoothAbs(x, y) {\n let controlX, controlY;\n\n if (this.lastCommand.match(/^[QqTt]$/)) {\n const secondToLast = this.shapes[this.shapes.length - 1].args[1];\n\n controlX = 2 * this.lastX - secondToLast.x;\n controlY = 2 * this.lastY - secondToLast.y;\n }\n else {\n controlX = this.lastX;\n controlY = this.lastY;\n }\n\n this.addShape(this.shapeCreator.quadraticBezier(\n this.lastX, this.lastY,\n controlX, controlY,\n x, y\n ));\n\n this.lastX = x;\n this.lastY = y;\n this.lastCommand = \"T\";\n }\n\n /**\n * curvetoQuadraticSmoothRel - t\n *\n * @param {number} x\n * @param {number} y\n */\n curvetoQuadraticSmoothRel(x, y) {\n let controlX, controlY;\n\n if (this.lastCommand.match(/^[QqTt]$/)) {\n const secondToLast = this.shapes[this.shapes.length - 1].args[1];\n\n controlX = 2 * this.lastX - secondToLast.x;\n controlY = 2 * this.lastY - secondToLast.y;\n }\n else {\n controlX = this.lastX;\n controlY = this.lastY;\n }\n\n this.addShape(this.shapeCreator.quadraticBezier(\n this.lastX, this.lastY,\n controlX, controlY,\n this.lastX + x, this.lastY + y\n ));\n\n this.lastX += x;\n this.lastY += y;\n this.lastCommand = \"t\";\n }\n\n /**\n * linetoVerticalAbs - V\n *\n * @param {number} y\n */\n linetoVerticalAbs(y) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n this.lastX, y\n ));\n\n this.lastY = y;\n\n this.lastCommand = \"V\";\n }\n\n /**\n * linetoVerticalRel - v\n *\n * @param {number} y\n */\n linetoVerticalRel(y) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n this.lastX, this.lastY + y\n ));\n\n this.lastY += y;\n\n this.lastCommand = \"v\";\n }\n\n /**\n * closePath - z or Z\n */\n closePath() {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n this.firstX, this.firstY\n ));\n\n this.lastX = this.firstX;\n this.lastY = this.firstY;\n this.lastCommand = \"z\";\n }\n}\n\nexport default PathHandler;\n","/**\n * ShapeInfo.js\n * @copyright 2002, 2017 Kevin Lindsey\n */\n\nimport {Point2D} from \"kld-affine\";\nimport {Transformer, FAILURE_VALUE} from \"gp-data-transformer\";\nimport {PathParser} from \"kld-path-parser\";\nimport PathHandler from \"./PathHandler.js\";\nimport transformSource from \"./TransformSource.js\";\n\nconst degree90 = Math.PI * 0.5;\n\n/**\n * ShapeInfo\n * @memberof module:kld-intersections\n */\nexport default class ShapeInfo {\n /**\n * @param {string} name\n * @param {Array} args\n * @returns {module:kld-intersections.ShapeInfo}\n */\n constructor(name, args) {\n this.name = name;\n this.args = args;\n }\n\n static arc(...args) {\n return create(ShapeInfo.ARC, args, [\"center\", \"radiusX\", \"radiusY\", \"startRadians\", \"endRadians\"]);\n }\n\n static quadraticBezier(...args) {\n return create(ShapeInfo.QUADRATIC_BEZIER, args, [\"p1\", \"p2\", \"p3\"]);\n }\n\n static cubicBezier(...args) {\n return create(ShapeInfo.CUBIC_BEZIER, args, [\"p1\", \"p2\", \"p3\", \"p4\"]);\n }\n\n static circle(...args) {\n return create(ShapeInfo.CIRCLE, args, [\"center\", \"radius\"]);\n }\n\n static ellipse(...args) {\n return create(ShapeInfo.ELLIPSE, args, [\"center\", \"radiusX\", \"radiusY\"]);\n }\n\n static line(...args) {\n return create(ShapeInfo.LINE, args, [\"p1\", \"p2\"]);\n }\n\n static path(...args) {\n return create(ShapeInfo.PATH, args, [\"segments\"]);\n }\n\n static polygon(...args) {\n return create(ShapeInfo.POLYGON, args, [\"points\"]);\n }\n\n static polyline(...args) {\n return create(ShapeInfo.POLYLINE, args, [\"points\"]);\n }\n\n static rectangle(...args) {\n const result = create(ShapeInfo.RECTANGLE, args, [\"topLeft\", \"bottomRight\", \"rx\", \"ry\"]);\n\n let ry = result.args.pop();\n let rx = result.args.pop();\n\n rx = rx === undefined ? 0 : rx;\n ry = ry === undefined ? 0 : ry;\n\n if (rx === 0 && ry === 0) {\n return result;\n }\n\n const {x: p1x, y: p1y} = result.args[0];\n const {x: p2x, y: p2y} = result.args[1];\n const width = p2x - p1x;\n const height = p2y - p1y;\n\n if (rx === 0) {\n rx = ry;\n }\n if (ry === 0) {\n ry = rx;\n }\n if (rx > width * 0.5) {\n rx = width * 0.5;\n }\n if (ry > height * 0.5) {\n ry = height * 0.5;\n }\n\n const x0 = p1x;\n const y0 = p1y;\n const x1 = p1x + rx;\n const y1 = p1y + ry;\n const x2 = p2x - rx;\n const y2 = p2y - ry;\n const x3 = p2x;\n const y3 = p2y;\n\n const segments = [\n ShapeInfo.arc(x1, y1, rx, ry, 2 * degree90, 3 * degree90),\n ShapeInfo.line(x1, y0, x2, y0),\n ShapeInfo.arc(x2, y1, rx, ry, 3 * degree90, 4 * degree90),\n ShapeInfo.line(x3, y1, x3, y2),\n ShapeInfo.arc(x2, y2, rx, ry, 0, degree90),\n ShapeInfo.line(x2, y3, x1, y3),\n ShapeInfo.arc(x1, y2, rx, ry, degree90, 2 * degree90),\n ShapeInfo.line(x0, y2, x0, y1)\n ];\n\n return new ShapeInfo(ShapeInfo.PATH, segments);\n }\n}\n\n/**\n * Create a shape\n *\n * @param {string} type\n * @param {Object} object\n * @param {Array} properties\n * @returns {ShapeInfo}\n */\nfunction create(type, object, properties) {\n let transformType;\n\n if (object.length === 1) {\n object = object[0];\n\n transformType = Array.isArray(object) || typeof object === \"string\"\n ? type + \"Args\"\n : type;\n }\n else {\n transformType = type + \"Args\";\n }\n\n // normalize the data\n const data = transformer.execute(transformType, object);\n\n if (data === FAILURE_VALUE) {\n // for (const message of transformer.messages) {\n // console.log(message);\n // }\n\n throw new TypeError(`${type} is not in a recognizable format: ${JSON.stringify(object)}`);\n }\n\n // pull out the arguments\n const args = properties.length === 1\n ? data[properties[0]]\n : properties.map(name => data[name]);\n\n // return a new ShapeInfo\n return new ShapeInfo(type, args);\n}\n\n// define shape name constants\nShapeInfo.ARC = \"Arc\";\nShapeInfo.QUADRATIC_BEZIER = \"Bezier2\";\nShapeInfo.CUBIC_BEZIER = \"Bezier3\";\nShapeInfo.CIRCLE = \"Circle\";\nShapeInfo.ELLIPSE = \"Ellipse\";\nShapeInfo.LINE = \"Line\";\nShapeInfo.PATH = \"Path\";\nShapeInfo.POLYGON = \"Polygon\";\nShapeInfo.POLYLINE = \"Polyline\";\nShapeInfo.RECTANGLE = \"Rectangle\";\n\n// create shape argument normalizer\nconst transformer = new Transformer();\ntransformer.execute(transformSource);\n\n// attach custom generators\ntransformer.addFunction(\"Point2D\", (x, y) => new Point2D(x, y));\ntransformer.addFunction(\"PathData\", pathData => {\n const parser = new PathParser();\n const handler = new PathHandler(ShapeInfo);\n\n parser.setHandler(handler);\n parser.parseData(pathData);\n\n return handler.shapes;\n});\n","/* eslint-disable camelcase, no-labels */\n/**\n *\n * Intersection.js\n *\n * copyright 2002, 2013 Kevin Lindsey\n */\n\nimport {Point2D, Vector2D} from \"kld-affine\";\nimport {Polynomial} from \"kld-polynomial\";\nimport ShapeInfo from \"./ShapeInfo.js\";\n\nconst TWO_PI = 2.0 * Math.PI;\nconst UNIT_X = new Vector2D(1, 0);\n\n/**\n * @memberof module:kld-intersections.Intersection\n * @param {*} o\n * @returns {boolean}\n */\nfunction isNullish(o) {\n return o === null || o === undefined;\n}\n\n/**\n * bezout\n *\n * This code is based on MgcIntr2DElpElp.cpp written by David Eberly. His\n * code along with many other excellent examples are avaiable at his site:\n * http://www.magic-software.com\n *\n * @param {Array} e1\n * @param {Array} e2\n * @returns {external:Polynomial}\n */\nfunction bezout(e1, e2) {\n const AB = e1[0] * e2[1] - e2[0] * e1[1];\n const AC = e1[0] * e2[2] - e2[0] * e1[2];\n const AD = e1[0] * e2[3] - e2[0] * e1[3];\n const AE = e1[0] * e2[4] - e2[0] * e1[4];\n const AF = e1[0] * e2[5] - e2[0] * e1[5];\n const BC = e1[1] * e2[2] - e2[1] * e1[2];\n const BE = e1[1] * e2[4] - e2[1] * e1[4];\n const BF = e1[1] * e2[5] - e2[1] * e1[5];\n const CD = e1[2] * e2[3] - e2[2] * e1[3];\n const DE = e1[3] * e2[4] - e2[3] * e1[4];\n const DF = e1[3] * e2[5] - e2[3] * e1[5];\n const BFpDE = BF + DE;\n const BEmCD = BE - CD;\n\n return new Polynomial(\n AB * BC - AC * AC,\n AB * BEmCD + AD * BC - 2 * AC * AE,\n AB * BFpDE + AD * BEmCD - AE * AE - 2 * AC * AF,\n AB * DF + AD * BFpDE - 2 * AE * AF,\n AD * DF - AF * AF\n );\n}\n\n/**\n * normalizeAngle\n *\n * @param {number} radians\n * @returns {number}\n */\nfunction normalizeAngle(radians) {\n const normal = radians % TWO_PI;\n\n return normal < 0.0 ? normal + TWO_PI : normal;\n}\n\n/**\n * restrictPointsToArc\n *\n * @param {module:kld-intersections.Intersection} intersections\n * @param {module:kld-intersections.Point2D} center\n * @param {number} radiusX\n * @param {number} radiusY\n * @param {number} startRadians\n * @param {number} endRadians\n * @returns {module:kld-intersections.Intersection}\n */\nfunction restrictPointsToArc(intersections, center, radiusX, radiusY, startRadians, endRadians) {\n if (intersections.points.length === 0) {\n return intersections;\n }\n\n const result = new Intersection(\"No Intersection\");\n const startNormal = normalizeAngle(startRadians);\n let endNormal = normalizeAngle(endRadians);\n\n // Advance end angle one turn if it's lower than the start angle so our interval test will work correctly\n if (endNormal < startNormal) {\n endNormal += TWO_PI;\n }\n\n for (const p of intersections.points) {\n const a = normalizeAngle(UNIT_X.angleBetween(Vector2D.fromPoints(center, p)));\n\n if (startNormal <= a && a <= endNormal) {\n result.appendPoint(p);\n }\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n}\n\n/**\n * closePolygon\n * @memberof module:kld-intersections.Intersection\n * @param {Array} points\n * @returns {Array}\n */\nfunction closePolygon(points) {\n const copy = points.slice();\n\n copy.push(points[0]);\n\n return copy;\n}\n\n/**\n * Intersection\n * @memberof module:kld-intersections\n */\nclass Intersection {\n /**\n * @param {string} status\n * @returns {module:kld-intersections.Intersection}\n */\n constructor(status) {\n this.init(status);\n }\n\n\n /**\n * init\n *\n * @param {string} status\n * @returns {module:kld-intersections.Intersection}\n */\n init(status) {\n this.status = status;\n this.points = [];\n }\n\n /**\n * intersect\n *\n * @param {module:kld-intersections.ShapeInfo} shape1\n * @param {module:kld-intersections.ShapeInfo} shape2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersect(shape1, shape2) {\n let result;\n\n if (!isNullish(shape1) && !isNullish(shape2)) {\n if (shape1.name === \"Path\") {\n result = Intersection.intersectPathShape(shape1, shape2);\n }\n else if (shape2.name === \"Path\") {\n result = Intersection.intersectPathShape(shape2, shape1);\n }\n else if (shape1.name === \"Arc\") {\n result = Intersection.intersectArcShape(shape1, shape2);\n }\n else if (shape2.name === \"Arc\") {\n result = Intersection.intersectArcShape(shape2, shape1);\n }\n else {\n let method;\n let args;\n\n if (shape1.name < shape2.name) {\n method = \"intersect\" + shape1.name + shape2.name;\n args = shape1.args.concat(shape2.args);\n }\n else {\n method = \"intersect\" + shape2.name + shape1.name;\n args = shape2.args.concat(shape1.args);\n }\n\n if (!(method in Intersection)) {\n throw new TypeError(\"Intersection not available: \" + method);\n }\n\n result = Intersection[method].apply(null, args);\n }\n }\n else {\n result = new Intersection(\"No Intersection\");\n }\n\n return result;\n }\n\n /**\n * intersectPathShape\n *\n * @param {module:kld-intersections.ShapeInfo} path\n * @param {module:kld-intersections.ShapeInfo} shape\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectPathShape(path, shape) {\n const result = new Intersection(\"No Intersection\");\n\n for (const segment of path.args) {\n const inter = Intersection.intersect(segment, shape);\n\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectArcShape\n *\n * @param {module:kld-intersections.ShapeInfo} arc\n * @param {module:kld-intersections.ShapeInfo} shape\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectArcShape(arc, shape) {\n const [center, radiusX, radiusY, startRadians, endRadians] = arc.args;\n const ellipse = new ShapeInfo(ShapeInfo.ELLIPSE, [center, radiusX, radiusY]);\n const ellipse_result = Intersection.intersect(ellipse, shape);\n\n // return ellipse_result;\n return restrictPointsToArc(ellipse_result, center, radiusX, radiusY, startRadians, endRadians);\n }\n\n /**\n * intersectBezier2Bezier2\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} a3\n * @param {module:kld-intersections.Point2D} b1\n * @param {module:kld-intersections.Point2D} b2\n * @param {module:kld-intersections.Point2D} b3\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Bezier2(a1, a2, a3, b1, b2, b3) {\n let a, b;\n const result = new Intersection(\"No Intersection\");\n\n a = a2.multiply(-2);\n const c12 = a1.add(a.add(a3));\n\n a = a1.multiply(-2);\n b = a2.multiply(2);\n const c11 = a.add(b);\n\n const c10 = new Point2D(a1.x, a1.y);\n\n a = b2.multiply(-2);\n const c22 = b1.add(a.add(b3));\n\n a = b1.multiply(-2);\n b = b2.multiply(2);\n const c21 = a.add(b);\n\n const c20 = new Point2D(b1.x, b1.y);\n\n // bezout\n a = c12.x * c11.y - c11.x * c12.y;\n b = c22.x * c11.y - c11.x * c22.y;\n const c = c21.x * c11.y - c11.x * c21.y;\n const d = c11.x * (c10.y - c20.y) + c11.y * (-c10.x + c20.x);\n const e = c22.x * c12.y - c12.x * c22.y;\n const f = c21.x * c12.y - c12.x * c21.y;\n const g = c12.x * (c10.y - c20.y) + c12.y * (-c10.x + c20.x);\n\n // determinant\n const poly = new Polynomial(\n -e * e,\n -2 * e * f,\n a * b - f * f - 2 * e * g,\n a * c - 2 * f * g,\n a * d - g * g\n );\n\n const roots = poly.getRoots();\n\n for (const s of roots) {\n if (0 <= s && s <= 1) {\n const xp = new Polynomial(\n c12.x,\n c11.x,\n c10.x - c20.x - s * c21.x - s * s * c22.x\n );\n xp.simplifyEquals();\n const xRoots = xp.getRoots();\n const yp = new Polynomial(\n c12.y,\n c11.y,\n c10.y - c20.y - s * c21.y - s * s * c22.y\n );\n yp.simplifyEquals();\n const yRoots = yp.getRoots();\n\n if (xRoots.length > 0 && yRoots.length > 0) {\n const TOLERANCE = 1e-4;\n\n checkRoots:\n for (const xRoot of xRoots) {\n if (0 <= xRoot && xRoot <= 1) {\n for (let k = 0; k < yRoots.length; k++) {\n if (Math.abs(xRoot - yRoots[k]) < TOLERANCE) {\n result.points.push(c22.multiply(s * s).add(c21.multiply(s).add(c20)));\n break checkRoots;\n }\n }\n }\n }\n }\n }\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier2Bezier3\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} a3\n * @param {module:kld-intersections.Point2D} b1\n * @param {module:kld-intersections.Point2D} b2\n * @param {module:kld-intersections.Point2D} b3\n * @param {module:kld-intersections.Point2D} b4\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Bezier3(a1, a2, a3, b1, b2, b3, b4) {\n let a, b, c, d;\n const result = new Intersection(\"No Intersection\");\n\n a = a2.multiply(-2);\n const c12 = a1.add(a.add(a3));\n\n a = a1.multiply(-2);\n b = a2.multiply(2);\n const c11 = a.add(b);\n\n const c10 = new Point2D(a1.x, a1.y);\n\n a = b1.multiply(-1);\n b = b2.multiply(3);\n c = b3.multiply(-3);\n d = a.add(b.add(c.add(b4)));\n const c23 = new Point2D(d.x, d.y);\n\n a = b1.multiply(3);\n b = b2.multiply(-6);\n c = b3.multiply(3);\n d = a.add(b.add(c));\n const c22 = new Point2D(d.x, d.y);\n\n a = b1.multiply(-3);\n b = b2.multiply(3);\n c = a.add(b);\n const c21 = new Point2D(c.x, c.y);\n\n const c20 = new Point2D(b1.x, b1.y);\n\n const c10x2 = c10.x * c10.x;\n const c10y2 = c10.y * c10.y;\n const c11x2 = c11.x * c11.x;\n const c11y2 = c11.y * c11.y;\n const c12x2 = c12.x * c12.x;\n const c12y2 = c12.y * c12.y;\n const c20x2 = c20.x * c20.x;\n const c20y2 = c20.y * c20.y;\n const c21x2 = c21.x * c21.x;\n const c21y2 = c21.y * c21.y;\n const c22x2 = c22.x * c22.x;\n const c22y2 = c22.y * c22.y;\n const c23x2 = c23.x * c23.x;\n const c23y2 = c23.y * c23.y;\n\n const poly = new Polynomial(\n -2 * c12.x * c12.y * c23.x * c23.y + c12x2 * c23y2 + c12y2 * c23x2,\n -2 * c12.x * c12.y * c22.x * c23.y - 2 * c12.x * c12.y * c22.y * c23.x + 2 * c12y2 * c22.x * c23.x +\n 2 * c12x2 * c22.y * c23.y,\n -2 * c12.x * c21.x * c12.y * c23.y - 2 * c12.x * c12.y * c21.y * c23.x - 2 * c12.x * c12.y * c22.x * c22.y +\n 2 * c21.x * c12y2 * c23.x + c12y2 * c22x2 + c12x2 * (2 * c21.y * c23.y + c22y2),\n 2 * c10.x * c12.x * c12.y * c23.y + 2 * c10.y * c12.x * c12.y * c23.x + c11.x * c11.y * c12.x * c23.y +\n c11.x * c11.y * c12.y * c23.x - 2 * c20.x * c12.x * c12.y * c23.y - 2 * c12.x * c20.y * c12.y * c23.x -\n 2 * c12.x * c21.x * c12.y * c22.y - 2 * c12.x * c12.y * c21.y * c22.x - 2 * c10.x * c12y2 * c23.x -\n 2 * c10.y * c12x2 * c23.y + 2 * c20.x * c12y2 * c23.x + 2 * c21.x * c12y2 * c22.x -\n c11y2 * c12.x * c23.x - c11x2 * c12.y * c23.y + c12x2 * (2 * c20.y * c23.y + 2 * c21.y * c22.y),\n 2 * c10.x * c12.x * c12.y * c22.y + 2 * c10.y * c12.x * c12.y * c22.x + c11.x * c11.y * c12.x * c22.y +\n c11.x * c11.y * c12.y * c22.x - 2 * c20.x * c12.x * c12.y * c22.y - 2 * c12.x * c20.y * c12.y * c22.x -\n 2 * c12.x * c21.x * c12.y * c21.y - 2 * c10.x * c12y2 * c22.x - 2 * c10.y * c12x2 * c22.y +\n 2 * c20.x * c12y2 * c22.x - c11y2 * c12.x * c22.x - c11x2 * c12.y * c22.y + c21x2 * c12y2 +\n c12x2 * (2 * c20.y * c22.y + c21y2),\n 2 * c10.x * c12.x * c12.y * c21.y + 2 * c10.y * c12.x * c21.x * c12.y + c11.x * c11.y * c12.x * c21.y +\n c11.x * c11.y * c21.x * c12.y - 2 * c20.x * c12.x * c12.y * c21.y - 2 * c12.x * c20.y * c21.x * c12.y -\n 2 * c10.x * c21.x * c12y2 - 2 * c10.y * c12x2 * c21.y + 2 * c20.x * c21.x * c12y2 -\n c11y2 * c12.x * c21.x - c11x2 * c12.y * c21.y + 2 * c12x2 * c20.y * c21.y,\n -2 * c10.x * c10.y * c12.x * c12.y - c10.x * c11.x * c11.y * c12.y - c10.y * c11.x * c11.y * c12.x +\n 2 * c10.x * c12.x * c20.y * c12.y + 2 * c10.y * c20.x * c12.x * c12.y + c11.x * c20.x * c11.y * c12.y +\n c11.x * c11.y * c12.x * c20.y - 2 * c20.x * c12.x * c20.y * c12.y - 2 * c10.x * c20.x * c12y2 +\n c10.x * c11y2 * c12.x + c10.y * c11x2 * c12.y - 2 * c10.y * c12x2 * c20.y -\n c20.x * c11y2 * c12.x - c11x2 * c20.y * c12.y + c10x2 * c12y2 + c10y2 * c12x2 +\n c20x2 * c12y2 + c12x2 * c20y2\n );\n const roots = poly.getRootsInInterval(0, 1);\n\n for (const s of roots) {\n const xRoots = new Polynomial(\n c12.x,\n c11.x,\n c10.x - c20.x - s * c21.x - s * s * c22.x - s * s * s * c23.x\n ).getRoots();\n const yRoots = new Polynomial(\n c12.y,\n c11.y,\n c10.y - c20.y - s * c21.y - s * s * c22.y - s * s * s * c23.y\n ).getRoots();\n\n if (xRoots.length > 0 && yRoots.length > 0) {\n const TOLERANCE = 1e-4;\n\n checkRoots:\n for (const xRoot of xRoots) {\n if (0 <= xRoot && xRoot <= 1) {\n for (let k = 0; k < yRoots.length; k++) {\n if (Math.abs(xRoot - yRoots[k]) < TOLERANCE) {\n result.points.push(\n c23.multiply(s * s * s).add(c22.multiply(s * s).add(c21.multiply(s).add(c20)))\n );\n break checkRoots;\n }\n }\n }\n }\n }\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier2Circle\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} c\n * @param {number} r\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Circle(p1, p2, p3, c, r) {\n return Intersection.intersectBezier2Ellipse(p1, p2, p3, c, r, r);\n }\n\n /**\n * intersectBezier2Ellipse\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} ec\n * @param {number} rx\n * @param {number} ry\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Ellipse(p1, p2, p3, ec, rx, ry) {\n let a; // temporary variables\n // c2, c1, c0; // coefficients of quadratic\n const result = new Intersection(\"No Intersection\");\n\n a = p2.multiply(-2);\n const c2 = p1.add(a.add(p3));\n\n a = p1.multiply(-2);\n const b = p2.multiply(2);\n const c1 = a.add(b);\n\n const c0 = new Point2D(p1.x, p1.y);\n\n const rxrx = rx * rx;\n const ryry = ry * ry;\n const roots = new Polynomial(\n ryry * c2.x * c2.x + rxrx * c2.y * c2.y,\n 2 * (ryry * c2.x * c1.x + rxrx * c2.y * c1.y),\n ryry * (2 * c2.x * c0.x + c1.x * c1.x) + rxrx * (2 * c2.y * c0.y + c1.y * c1.y) -\n 2 * (ryry * ec.x * c2.x + rxrx * ec.y * c2.y),\n 2 * (ryry * c1.x * (c0.x - ec.x) + rxrx * c1.y * (c0.y - ec.y)),\n ryry * (c0.x * c0.x + ec.x * ec.x) + rxrx * (c0.y * c0.y + ec.y * ec.y) -\n 2 * (ryry * ec.x * c0.x + rxrx * ec.y * c0.y) - rxrx * ryry\n ).getRoots();\n\n for (const t of roots) {\n if (0 <= t && t <= 1) {\n result.points.push(c2.multiply(t * t).add(c1.multiply(t).add(c0)));\n }\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier2Line\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Line(p1, p2, p3, a1, a2) {\n let a; // temporary variables\n // let c2, c1, c0; // coefficients of quadratic\n // cl; // c coefficient for normal form of line\n // n; // normal for normal form of line\n const min = a1.min(a2); // used to determine if point is on line segment\n const max = a1.max(a2); // used to determine if point is on line segment\n const result = new Intersection(\"No Intersection\");\n\n a = p2.multiply(-2);\n const c2 = p1.add(a.add(p3));\n\n a = p1.multiply(-2);\n const b = p2.multiply(2);\n const c1 = a.add(b);\n\n const c0 = new Point2D(p1.x, p1.y);\n\n // Convert line to normal form: ax + by + c = 0\n // Find normal to line: negative inverse of original line's slope\n const n = new Vector2D(a1.y - a2.y, a2.x - a1.x);\n\n // Determine new c coefficient\n const cl = a1.x * a2.y - a2.x * a1.y;\n\n // Transform cubic coefficients to line's coordinate system and find roots\n // of cubic\n const roots = new Polynomial(\n n.dot(c2),\n n.dot(c1),\n n.dot(c0) + cl\n ).getRoots();\n\n // Any roots in closed interval [0,1] are intersections on Bezier, but\n // might not be on the line segment.\n // Find intersections and calculate point coordinates\n for (const t of roots) {\n if (0 <= t && t <= 1) {\n // We're within the Bezier curve\n // Find point on Bezier\n const p4 = p1.lerp(p2, t);\n const p5 = p2.lerp(p3, t);\n\n const p6 = p4.lerp(p5, t);\n\n // See if point is on line segment\n // Had to make special cases for vertical and horizontal lines due\n // to slight errors in calculation of p6\n if (a1.x === a2.x) {\n if (min.y <= p6.y && p6.y <= max.y) {\n result.status = \"Intersection\";\n result.appendPoint(p6);\n }\n }\n else if (a1.y === a2.y) {\n if (min.x <= p6.x && p6.x <= max.x) {\n result.status = \"Intersection\";\n result.appendPoint(p6);\n }\n }\n else if (min.x <= p6.x && p6.x <= max.x && min.y <= p6.y && p6.y <= max.y) {\n result.status = \"Intersection\";\n result.appendPoint(p6);\n }\n }\n }\n\n return result;\n }\n\n /**\n * intersectBezier2Polygon\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Polygon(p1, p2, p3, points) {\n return Intersection.intersectBezier2Polyline(p1, p2, p3, closePolygon(points));\n }\n\n /**\n * intersectBezier2Polyline\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Polyline(p1, p2, p3, points) {\n const result = new Intersection(\"No Intersection\");\n const {length: len} = points;\n\n for (let i = 0; i < len - 1; i++) {\n const a1 = points[i];\n const a2 = points[i + 1];\n const inter = Intersection.intersectBezier2Line(p1, p2, p3, a1, a2);\n\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier2Rectangle\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Rectangle(p1, p2, p3, r1, r2) {\n const min = r1.min(r2);\n const max = r1.max(r2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectBezier2Line(p1, p2, p3, min, topRight);\n const inter2 = Intersection.intersectBezier2Line(p1, p2, p3, topRight, max);\n const inter3 = Intersection.intersectBezier2Line(p1, p2, p3, max, bottomLeft);\n const inter4 = Intersection.intersectBezier2Line(p1, p2, p3, bottomLeft, min);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier3Bezier3\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} a3\n * @param {module:kld-intersections.Point2D} a4\n * @param {module:kld-intersections.Point2D} b1\n * @param {module:kld-intersections.Point2D} b2\n * @param {module:kld-intersections.Point2D} b3\n * @param {module:kld-intersections.Point2D} b4\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Bezier3(a1, a2, a3, a4, b1, b2, b3, b4) {\n let a, b, c, d; // temporary variables\n // c13, c12, c11, c10; // coefficients of cubic\n // c23, c22, c21, c20; // coefficients of cubic\n const result = new Intersection(\"No Intersection\");\n\n // Calculate the coefficients of cubic polynomial\n a = a1.multiply(-1);\n b = a2.multiply(3);\n c = a3.multiply(-3);\n d = a.add(b.add(c.add(a4)));\n const c13 = new Point2D(d.x, d.y);\n\n a = a1.multiply(3);\n b = a2.multiply(-6);\n c = a3.multiply(3);\n d = a.add(b.add(c));\n const c12 = new Point2D(d.x, d.y);\n\n a = a1.multiply(-3);\n b = a2.multiply(3);\n c = a.add(b);\n const c11 = new Point2D(c.x, c.y);\n\n const c10 = new Point2D(a1.x, a1.y);\n\n a = b1.multiply(-1);\n b = b2.multiply(3);\n c = b3.multiply(-3);\n d = a.add(b.add(c.add(b4)));\n const c23 = new Point2D(d.x, d.y);\n\n a = b1.multiply(3);\n b = b2.multiply(-6);\n c = b3.multiply(3);\n d = a.add(b.add(c));\n const c22 = new Point2D(d.x, d.y);\n\n a = b1.multiply(-3);\n b = b2.multiply(3);\n c = a.add(b);\n const c21 = new Point2D(c.x, c.y);\n\n const c20 = new Point2D(b1.x, b1.y);\n\n // bezout\n a = c13.x * c12.y - c12.x * c13.y;\n b = c13.x * c11.y - c11.x * c13.y;\n const c0 = c13.x * c10.y - c10.x * c13.y + c20.x * c13.y - c13.x * c20.y;\n const c1 = c21.x * c13.y - c13.x * c21.y;\n const c2 = c22.x * c13.y - c13.x * c22.y;\n const c3 = c23.x * c13.y - c13.x * c23.y;\n d = c13.x * c11.y - c11.x * c13.y;\n const e0 = c13.x * c10.y + c12.x * c11.y - c11.x * c12.y - c10.x * c13.y + c20.x * c13.y - c13.x * c20.y;\n const e1 = c21.x * c13.y - c13.x * c21.y;\n const e2 = c22.x * c13.y - c13.x * c22.y;\n const e3 = c23.x * c13.y - c13.x * c23.y;\n const f0 = c12.x * c10.y - c10.x * c12.y + c20.x * c12.y - c12.x * c20.y;\n const f1 = c21.x * c12.y - c12.x * c21.y;\n const f2 = c22.x * c12.y - c12.x * c22.y;\n const f3 = c23.x * c12.y - c12.x * c23.y;\n const g0 = c13.x * c10.y - c10.x * c13.y + c20.x * c13.y - c13.x * c20.y;\n const g1 = c21.x * c13.y - c13.x * c21.y;\n const g2 = c22.x * c13.y - c13.x * c22.y;\n const g3 = c23.x * c13.y - c13.x * c23.y;\n const h0 = c12.x * c10.y - c10.x * c12.y + c20.x * c12.y - c12.x * c20.y;\n const h1 = c21.x * c12.y - c12.x * c21.y;\n const h2 = c22.x * c12.y - c12.x * c22.y;\n const h3 = c23.x * c12.y - c12.x * c23.y;\n const i0 = c11.x * c10.y - c10.x * c11.y + c20.x * c11.y - c11.x * c20.y;\n const i1 = c21.x * c11.y - c11.x * c21.y;\n const i2 = c22.x * c11.y - c11.x * c22.y;\n const i3 = c23.x * c11.y - c11.x * c23.y;\n\n // determinant\n const poly = new Polynomial(\n -c3 * e3 * g3,\n -c3 * e3 * g2 - c3 * e2 * g3 - c2 * e3 * g3,\n -c3 * e3 * g1 - c3 * e2 * g2 - c2 * e3 * g2 - c3 * e1 * g3 - c2 * e2 * g3 - c1 * e3 * g3,\n -c3 * e3 * g0 - c3 * e2 * g1 - c2 * e3 * g1 - c3 * e1 * g2 - c2 * e2 * g2 - c1 * e3 * g2 - c3 * e0 * g3 - c2 * e1 * g3 - c1 * e2 * g3 - c0 * e3 * g3 + b * f3 * g3 + c3 * d * h3 - a * f3 * h3 + a * e3 * i3,\n -c3 * e2 * g0 - c2 * e3 * g0 - c3 * e1 * g1 - c2 * e2 * g1 - c1 * e3 * g1 - c3 * e0 * g2 - c2 * e1 * g2 - c1 * e2 * g2 - c0 * e3 * g2 + b * f3 * g2 - c2 * e0 * g3 - c1 * e1 * g3 - c0 * e2 * g3 + b * f2 * g3 + c3 * d * h2 - a * f3 * h2 + c2 * d * h3 - a * f2 * h3 + a * e3 * i2 + a * e2 * i3,\n -c3 * e1 * g0 - c2 * e2 * g0 - c1 * e3 * g0 - c3 * e0 * g1 - c2 * e1 * g1 - c1 * e2 * g1 - c0 * e3 * g1 + b * f3 * g1 - c2 * e0 * g2 - c1 * e1 * g2 - c0 * e2 * g2 + b * f2 * g2 - c1 * e0 * g3 - c0 * e1 * g3 + b * f1 * g3 + c3 * d * h1 - a * f3 * h1 + c2 * d * h2 - a * f2 * h2 + c1 * d * h3 - a * f1 * h3 + a * e3 * i1 + a * e2 * i2 + a * e1 * i3,\n -c3 * e0 * g0 - c2 * e1 * g0 - c1 * e2 * g0 - c0 * e3 * g0 + b * f3 * g0 - c2 * e0 * g1 - c1 * e1 * g1 - c0 * e2 * g1 + b * f2 * g1 - c1 * e0 * g2 - c0 * e1 * g2 + b * f1 * g2 - c0 * e0 * g3 + b * f0 * g3 + c3 * d * h0 - a * f3 * h0 + c2 * d * h1 - a * f2 * h1 + c1 * d * h2 - a * f1 * h2 + c0 * d * h3 - a * f0 * h3 + a * e3 * i0 + a * e2 * i1 + a * e1 * i2 - b * d * i3 + a * e0 * i3,\n -c2 * e0 * g0 - c1 * e1 * g0 - c0 * e2 * g0 + b * f2 * g0 - c1 * e0 * g1 - c0 * e1 * g1 + b * f1 * g1 - c0 * e0 * g2 + b * f0 * g2 + c2 * d * h0 - a * f2 * h0 + c1 * d * h1 - a * f1 * h1 + c0 * d * h2 - a * f0 * h2 + a * e2 * i0 + a * e1 * i1 - b * d * i2 + a * e0 * i2,\n -c1 * e0 * g0 - c0 * e1 * g0 + b * f1 * g0 - c0 * e0 * g1 + b * f0 * g1 + c1 * d * h0 - a * f1 * h0 + c0 * d * h1 - a * f0 * h1 + a * e1 * i0 - b * d * i1 + a * e0 * i1,\n -c0 * e0 * g0 + b * f0 * g0 + c0 * d * h0 - a * f0 * h0 - b * d * i0 + a * e0 * i0\n );\n poly.simplifyEquals();\n const roots = poly.getRootsInInterval(0, 1);\n\n for (const s of roots) {\n const xp = new Polynomial(\n c13.x,\n c12.x,\n c11.x,\n c10.x - c20.x - s * c21.x - s * s * c22.x - s * s * s * c23.x\n );\n xp.simplifyEquals();\n const xRoots = xp.getRoots();\n const yp = new Polynomial(\n c13.y,\n c12.y,\n c11.y,\n c10.y - c20.y - s * c21.y - s * s * c22.y - s * s * s * c23.y\n );\n yp.simplifyEquals();\n const yRoots = yp.getRoots();\n\n if (xRoots.length > 0 && yRoots.length > 0) {\n const TOLERANCE = 1e-4;\n\n checkRoots:\n for (const xRoot of xRoots) {\n if (0 <= xRoot && xRoot <= 1) {\n for (let k = 0; k < yRoots.length; k++) {\n if (Math.abs(xRoot - yRoots[k]) < TOLERANCE) {\n result.points.push(\n c23.multiply(s * s * s).add(c22.multiply(s * s).add(c21.multiply(s).add(c20)))\n );\n break checkRoots;\n }\n }\n }\n }\n }\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier3Circle\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @param {module:kld-intersections.Point2D} c\n * @param {number} r\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Circle(p1, p2, p3, p4, c, r) {\n return Intersection.intersectBezier3Ellipse(p1, p2, p3, p4, c, r, r);\n }\n\n /**\n * intersectBezier3Ellipse\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @param {module:kld-intersections.Point2D} ec\n * @param {number} rx\n * @param {number} ry\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Ellipse(p1, p2, p3, p4, ec, rx, ry) {\n let a, b, c, d; // temporary variables\n // c3, c2, c1, c0; // coefficients of cubic\n const result = new Intersection(\"No Intersection\");\n\n // Calculate the coefficients of cubic polynomial\n a = p1.multiply(-1);\n b = p2.multiply(3);\n c = p3.multiply(-3);\n d = a.add(b.add(c.add(p4)));\n const c3 = new Point2D(d.x, d.y);\n\n a = p1.multiply(3);\n b = p2.multiply(-6);\n c = p3.multiply(3);\n d = a.add(b.add(c));\n const c2 = new Point2D(d.x, d.y);\n\n a = p1.multiply(-3);\n b = p2.multiply(3);\n c = a.add(b);\n const c1 = new Point2D(c.x, c.y);\n\n const c0 = new Point2D(p1.x, p1.y);\n\n const rxrx = rx * rx;\n const ryry = ry * ry;\n const poly = new Polynomial(\n c3.x * c3.x * ryry + c3.y * c3.y * rxrx,\n 2 * (c3.x * c2.x * ryry + c3.y * c2.y * rxrx),\n 2 * (c3.x * c1.x * ryry + c3.y * c1.y * rxrx) + c2.x * c2.x * ryry + c2.y * c2.y * rxrx,\n 2 * c3.x * ryry * (c0.x - ec.x) + 2 * c3.y * rxrx * (c0.y - ec.y) +\n 2 * (c2.x * c1.x * ryry + c2.y * c1.y * rxrx),\n 2 * c2.x * ryry * (c0.x - ec.x) + 2 * c2.y * rxrx * (c0.y - ec.y) +\n c1.x * c1.x * ryry + c1.y * c1.y * rxrx,\n 2 * c1.x * ryry * (c0.x - ec.x) + 2 * c1.y * rxrx * (c0.y - ec.y),\n c0.x * c0.x * ryry - 2 * c0.y * ec.y * rxrx - 2 * c0.x * ec.x * ryry +\n c0.y * c0.y * rxrx + ec.x * ec.x * ryry + ec.y * ec.y * rxrx - rxrx * ryry\n );\n const roots = poly.getRootsInInterval(0, 1);\n\n for (const t of roots) {\n result.points.push(\n c3.multiply(t * t * t).add(c2.multiply(t * t).add(c1.multiply(t).add(c0)))\n );\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier3Line\n *\n * Many thanks to Dan Sunday at SoftSurfer.com. He gave me a very thorough\n * sketch of the algorithm used here. Without his help, I'm not sure when I\n * would have figured out this intersection problem.\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Line(p1, p2, p3, p4, a1, a2) {\n let a, b, c, d; // temporary variables\n // c3, c2, c1, c0; // coefficients of cubic\n // cl; // c coefficient for normal form of line\n // n; // normal for normal form of line\n const min = a1.min(a2); // used to determine if point is on line segment\n const max = a1.max(a2); // used to determine if point is on line segment\n const result = new Intersection(\"No Intersection\");\n\n // Start with Bezier using Bernstein polynomials for weighting functions:\n // (1-t^3)P1 + 3t(1-t)^2P2 + 3t^2(1-t)P3 + t^3P4\n //\n // Expand and collect terms to form linear combinations of original Bezier\n // controls. This ends up with a vector cubic in t:\n // (-P1+3P2-3P3+P4)t^3 + (3P1-6P2+3P3)t^2 + (-3P1+3P2)t + P1\n // /\\ /\\ /\\ /\\\n // || || || ||\n // c3 c2 c1 c0\n\n // Calculate the coefficients\n a = p1.multiply(-1);\n b = p2.multiply(3);\n c = p3.multiply(-3);\n d = a.add(b.add(c.add(p4)));\n const c3 = new Vector2D(d.x, d.y);\n\n a = p1.multiply(3);\n b = p2.multiply(-6);\n c = p3.multiply(3);\n d = a.add(b.add(c));\n const c2 = new Vector2D(d.x, d.y);\n\n a = p1.multiply(-3);\n b = p2.multiply(3);\n c = a.add(b);\n const c1 = new Vector2D(c.x, c.y);\n\n const c0 = new Vector2D(p1.x, p1.y);\n\n // Convert line to normal form: ax + by + c = 0\n // Find normal to line: negative inverse of original line's slope\n const n = new Vector2D(a1.y - a2.y, a2.x - a1.x);\n\n // Determine new c coefficient\n const cl = a1.x * a2.y - a2.x * a1.y;\n\n // ?Rotate each cubic coefficient using line for new coordinate system?\n // Find roots of rotated cubic\n const roots = new Polynomial(\n n.dot(c3),\n n.dot(c2),\n n.dot(c1),\n n.dot(c0) + cl\n ).getRoots();\n\n // Any roots in closed interval [0,1] are intersections on Bezier, but\n // might not be on the line segment.\n // Find intersections and calculate point coordinates\n for (const t of roots) {\n if (0 <= t && t <= 1) {\n // We're within the Bezier curve\n // Find point on Bezier\n const p5 = p1.lerp(p2, t);\n const p6 = p2.lerp(p3, t);\n const p7 = p3.lerp(p4, t);\n\n const p8 = p5.lerp(p6, t);\n const p9 = p6.lerp(p7, t);\n\n const p10 = p8.lerp(p9, t);\n\n // See if point is on line segment\n // Had to make special cases for vertical and horizontal lines due\n // to slight errors in calculation of p10\n if (a1.x === a2.x) {\n if (min.y <= p10.y && p10.y <= max.y) {\n result.status = \"Intersection\";\n result.appendPoint(p10);\n }\n }\n else if (a1.y === a2.y) {\n if (min.x <= p10.x && p10.x <= max.x) {\n result.status = \"Intersection\";\n result.appendPoint(p10);\n }\n }\n else if (min.x <= p10.x && p10.x <= max.x && min.y <= p10.y && p10.y <= max.y) {\n result.status = \"Intersection\";\n result.appendPoint(p10);\n }\n }\n }\n\n return result;\n }\n\n /**\n * intersectBezier3Polygon\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Polygon(p1, p2, p3, p4, points) {\n return Intersection.intersectBezier3Polyline(p1, p2, p3, p4, closePolygon(points));\n }\n\n /**\n * intersectBezier3Polyline\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Polyline(p1, p2, p3, p4, points) {\n const result = new Intersection(\"No Intersection\");\n const {length: len} = points;\n\n for (let i = 0; i < len - 1; i++) {\n const a1 = points[i];\n const a2 = points[i + 1];\n const inter = Intersection.intersectBezier3Line(p1, p2, p3, p4, a1, a2);\n\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier3Rectangle\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Rectangle(p1, p2, p3, p4, r1, r2) {\n const min = r1.min(r2);\n const max = r1.max(r2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectBezier3Line(p1, p2, p3, p4, min, topRight);\n const inter2 = Intersection.intersectBezier3Line(p1, p2, p3, p4, topRight, max);\n const inter3 = Intersection.intersectBezier3Line(p1, p2, p3, p4, max, bottomLeft);\n const inter4 = Intersection.intersectBezier3Line(p1, p2, p3, p4, bottomLeft, min);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectCircleCircle\n *\n * @param {module:kld-intersections.Point2D} c1\n * @param {number} r1\n * @param {module:kld-intersections.Point2D} c2\n * @param {number} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectCircleCircle(c1, r1, c2, r2) {\n let result;\n\n // Determine minimum and maximum radii where circles can intersect\n const r_max = r1 + r2;\n const r_min = Math.abs(r1 - r2);\n\n // Determine actual distance between circle circles\n const c_dist = c1.distanceFrom(c2);\n\n if (c_dist > r_max) {\n result = new Intersection(\"Outside\");\n }\n else if (c_dist < r_min) {\n result = new Intersection(\"Inside\");\n }\n else {\n result = new Intersection(\"Intersection\");\n\n const a = (r1 * r1 - r2 * r2 + c_dist * c_dist) / (2 * c_dist);\n const h = Math.sqrt(r1 * r1 - a * a);\n const p = c1.lerp(c2, a / c_dist);\n const b = h / c_dist;\n\n result.points.push(\n new Point2D(\n p.x - b * (c2.y - c1.y),\n p.y + b * (c2.x - c1.x)\n )\n );\n result.points.push(\n new Point2D(\n p.x + b * (c2.y - c1.y),\n p.y - b * (c2.x - c1.x)\n )\n );\n }\n\n return result;\n }\n\n /**\n * intersectCircleEllipse\n *\n * @param {module:kld-intersections.Point2D} cc\n * @param {number} r\n * @param {module:kld-intersections.Point2D} ec\n * @param {number} rx\n * @param {number} ry\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectCircleEllipse(cc, r, ec, rx, ry) {\n return Intersection.intersectEllipseEllipse(cc, r, r, ec, rx, ry);\n }\n\n /**\n * intersectCircleLine\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} r\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectCircleLine(c, r, a1, a2) {\n let result;\n const a = (a2.x - a1.x) * (a2.x - a1.x) +\n (a2.y - a1.y) * (a2.y - a1.y);\n const b = 2 * ((a2.x - a1.x) * (a1.x - c.x) +\n (a2.y - a1.y) * (a1.y - c.y));\n const cc = c.x * c.x + c.y * c.y + a1.x * a1.x + a1.y * a1.y -\n 2 * (c.x * a1.x + c.y * a1.y) - r * r;\n const deter = b * b - 4 * a * cc;\n\n if (deter < 0) {\n result = new Intersection(\"Outside\");\n }\n else if (deter === 0) {\n result = new Intersection(\"Tangent\");\n // NOTE: should calculate this point\n }\n else {\n const e = Math.sqrt(deter);\n const u1 = (-b + e) / (2 * a);\n const u2 = (-b - e) / (2 * a);\n\n if ((u1 < 0 || u1 > 1) && (u2 < 0 || u2 > 1)) {\n if ((u1 < 0 && u2 < 0) || (u1 > 1 && u2 > 1)) {\n result = new Intersection(\"Outside\");\n }\n else {\n result = new Intersection(\"Inside\");\n }\n }\n else {\n result = new Intersection(\"Intersection\");\n\n if (0 <= u1 && u1 <= 1) {\n result.points.push(a1.lerp(a2, u1));\n }\n\n if (0 <= u2 && u2 <= 1) {\n result.points.push(a1.lerp(a2, u2));\n }\n }\n }\n\n return result;\n }\n\n /**\n * intersectCirclePolygon\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} r\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectCirclePolygon(c, r, points) {\n return Intersection.intersectCirclePolyline(c, r, closePolygon(points));\n }\n\n /**\n * intersectCirclePolyline\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} r\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectCirclePolyline(c, r, points) {\n const result = new Intersection(\"No Intersection\");\n const {length: len} = points;\n let inter;\n\n for (let i = 0; i < len - 1; i++) {\n const a1 = points[i];\n const a2 = points[i + 1];\n\n inter = Intersection.intersectCircleLine(c, r, a1, a2);\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n else {\n result.status = inter.status;\n }\n\n return result;\n }\n\n /**\n * intersectCircleRectangle\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} r\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectCircleRectangle(c, r, r1, r2) {\n const min = r1.min(r2);\n const max = r1.max(r2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectCircleLine(c, r, min, topRight);\n const inter2 = Intersection.intersectCircleLine(c, r, topRight, max);\n const inter3 = Intersection.intersectCircleLine(c, r, max, bottomLeft);\n const inter4 = Intersection.intersectCircleLine(c, r, bottomLeft, min);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n else {\n result.status = inter1.status;\n }\n\n return result;\n }\n\n /**\n * intersectEllipseEllipse\n *\n * This code is based on MgcIntr2DElpElp.cpp written by David Eberly. His\n * code along with many other excellent examples are avaiable at his site:\n * http://www.magic-software.com\n *\n * NOTE: Rotation will need to be added to this function\n *\n * @param {module:kld-intersections.Point2D} c1\n * @param {number} rx1\n * @param {number} ry1\n * @param {module:kld-intersections.Point2D} c2\n * @param {number} rx2\n * @param {number} ry2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectEllipseEllipse(c1, rx1, ry1, c2, rx2, ry2) {\n const a = [\n ry1 * ry1, 0, rx1 * rx1, -2 * ry1 * ry1 * c1.x, -2 * rx1 * rx1 * c1.y,\n ry1 * ry1 * c1.x * c1.x + rx1 * rx1 * c1.y * c1.y - rx1 * rx1 * ry1 * ry1\n ];\n const b = [\n ry2 * ry2, 0, rx2 * rx2, -2 * ry2 * ry2 * c2.x, -2 * rx2 * rx2 * c2.y,\n ry2 * ry2 * c2.x * c2.x + rx2 * rx2 * c2.y * c2.y - rx2 * rx2 * ry2 * ry2\n ];\n\n const yPoly = bezout(a, b);\n const yRoots = yPoly.getRoots();\n const epsilon = 1e-3;\n const norm0 = (a[0] * a[0] + 2 * a[1] * a[1] + a[2] * a[2]) * epsilon;\n const norm1 = (b[0] * b[0] + 2 * b[1] * b[1] + b[2] * b[2]) * epsilon;\n const result = new Intersection(\"No Intersection\");\n\n for (let y = 0; y < yRoots.length; y++) {\n const xPoly = new Polynomial(\n a[0],\n a[3] + yRoots[y] * a[1],\n a[5] + yRoots[y] * (a[4] + yRoots[y] * a[2])\n );\n const xRoots = xPoly.getRoots();\n\n for (let x = 0; x < xRoots.length; x++) {\n let tst =\n (a[0] * xRoots[x] + a[1] * yRoots[y] + a[3]) * xRoots[x] +\n (a[2] * yRoots[y] + a[4]) * yRoots[y] + a[5];\n if (Math.abs(tst) < norm0) {\n tst =\n (b[0] * xRoots[x] + b[1] * yRoots[y] + b[3]) * xRoots[x] +\n (b[2] * yRoots[y] + b[4]) * yRoots[y] + b[5];\n if (Math.abs(tst) < norm1) {\n result.appendPoint(new Point2D(xRoots[x], yRoots[y]));\n }\n }\n }\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectEllipseLine\n *\n * NOTE: Rotation will need to be added to this function\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} rx\n * @param {number} ry\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectEllipseLine(c, rx, ry, a1, a2) {\n let result;\n const orign = new Vector2D(a1.x, a1.y);\n const dir = Vector2D.fromPoints(a1, a2);\n const center = new Vector2D(c.x, c.y);\n const diff = orign.subtract(center);\n const mDir = new Vector2D(dir.x / (rx * rx), dir.y / (ry * ry));\n const mDiff = new Vector2D(diff.x / (rx * rx), diff.y / (ry * ry));\n\n const a = dir.dot(mDir);\n const b = dir.dot(mDiff);\n c = diff.dot(mDiff) - 1.0;\n const d = b * b - a * c;\n\n if (d < 0) {\n result = new Intersection(\"Outside\");\n }\n else if (d > 0) {\n const root = Math.sqrt(d); // eslint-disable-line no-shadow\n const t_a = (-b - root) / a;\n const t_b = (-b + root) / a;\n\n if ((t_a < 0 || 1 < t_a) && (t_b < 0 || 1 < t_b)) {\n if ((t_a < 0 && t_b < 0) || (t_a > 1 && t_b > 1)) {\n result = new Intersection(\"Outside\");\n }\n else {\n result = new Intersection(\"Inside\");\n }\n }\n else {\n result = new Intersection(\"Intersection\");\n if (0 <= t_a && t_a <= 1) {\n result.appendPoint(a1.lerp(a2, t_a));\n }\n if (0 <= t_b && t_b <= 1) {\n result.appendPoint(a1.lerp(a2, t_b));\n }\n }\n }\n else {\n const t = -b / a;\n\n if (0 <= t && t <= 1) {\n result = new Intersection(\"Intersection\");\n result.appendPoint(a1.lerp(a2, t));\n }\n else {\n result = new Intersection(\"Outside\");\n }\n }\n\n return result;\n }\n\n /**\n * intersectEllipsePolygon\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} rx\n * @param {number} ry\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectEllipsePolygon(c, rx, ry, points) {\n return Intersection.intersectEllipsePolyline(c, rx, ry, closePolygon(points));\n }\n\n /**\n * intersectEllipsePolyline\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} rx\n * @param {number} ry\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectEllipsePolyline(c, rx, ry, points) {\n const result = new Intersection(\"No Intersection\");\n const {length: len} = points;\n\n for (let i = 0; i < len - 1; i++) {\n const b1 = points[i];\n const b2 = points[i + 1];\n const inter = Intersection.intersectEllipseLine(c, rx, ry, b1, b2);\n\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectEllipseRectangle\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} rx\n * @param {number} ry\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectEllipseRectangle(c, rx, ry, r1, r2) {\n const min = r1.min(r2);\n const max = r1.max(r2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectEllipseLine(c, rx, ry, min, topRight);\n const inter2 = Intersection.intersectEllipseLine(c, rx, ry, topRight, max);\n const inter3 = Intersection.intersectEllipseLine(c, rx, ry, max, bottomLeft);\n const inter4 = Intersection.intersectEllipseLine(c, rx, ry, bottomLeft, min);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectLineLine\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} b1\n * @param {module:kld-intersections.Point2D} b2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectLineLine(a1, a2, b1, b2) {\n let result;\n\n const ua_t = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x);\n const ub_t = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x);\n const u_b = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y);\n\n if (u_b !== 0) {\n const ua = ua_t / u_b;\n const ub = ub_t / u_b;\n\n if (0 <= ua && ua <= 1 && 0 <= ub && ub <= 1) {\n result = new Intersection(\"Intersection\");\n result.points.push(\n new Point2D(\n a1.x + ua * (a2.x - a1.x),\n a1.y + ua * (a2.y - a1.y)\n )\n );\n }\n else {\n result = new Intersection(\"No Intersection\");\n }\n }\n else if (ua_t === 0 || ub_t === 0) {\n result = new Intersection(\"Coincident\");\n }\n else {\n result = new Intersection(\"Parallel\");\n }\n\n return result;\n }\n\n /**\n * intersectLinePolygon\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectLinePolygon(a1, a2, points) {\n return Intersection.intersectLinePolyline(a1, a2, closePolygon(points));\n }\n\n /**\n * intersectLinePolyline\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectLinePolyline(a1, a2, points) {\n const result = new Intersection(\"No Intersection\");\n const {length: len} = points;\n\n for (let i = 0; i < len - 1; i++) {\n const b1 = points[i];\n const b2 = points[i + 1];\n const inter = Intersection.intersectLineLine(a1, a2, b1, b2);\n\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectLineRectangle\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectLineRectangle(a1, a2, r1, r2) {\n const min = r1.min(r2);\n const max = r1.max(r2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectLineLine(min, topRight, a1, a2);\n const inter2 = Intersection.intersectLineLine(topRight, max, a1, a2);\n const inter3 = Intersection.intersectLineLine(max, bottomLeft, a1, a2);\n const inter4 = Intersection.intersectLineLine(bottomLeft, min, a1, a2);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectPolygonPolygon\n *\n * @param {Array} points1\n * @param {Array} points2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectPolygonPolygon(points1, points2) {\n return Intersection.intersectPolylinePolyline(closePolygon(points1), closePolygon(points2));\n }\n\n /**\n * intersectPolygonPolyline\n *\n * @param {Array} points1\n * @param {Array} points2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectPolygonPolyline(points1, points2) {\n return Intersection.intersectPolylinePolyline(closePolygon(points1), points2);\n }\n\n /**\n * intersectPolygonRectangle\n *\n * @param {Array} points\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectPolygonRectangle(points, r1, r2) {\n return Intersection.intersectPolylineRectangle(closePolygon(points), r1, r2);\n }\n\n /**\n * intersectPolylinePolyline\n *\n * @param {Array} points1\n * @param {Array} points2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectPolylinePolyline(points1, points2) {\n const result = new Intersection(\"No Intersection\");\n const {length: len} = points1;\n\n for (let i = 0; i < len - 1; i++) {\n const a1 = points1[i];\n const a2 = points1[i + 1];\n const inter = Intersection.intersectLinePolyline(a1, a2, points2);\n\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectPolylineRectangle\n *\n * @param {Array} points\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectPolylineRectangle(points, r1, r2) {\n const min = r1.min(r2);\n const max = r1.max(r2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectLinePolyline(min, topRight, points);\n const inter2 = Intersection.intersectLinePolyline(topRight, max, points);\n const inter3 = Intersection.intersectLinePolyline(max, bottomLeft, points);\n const inter4 = Intersection.intersectLinePolyline(bottomLeft, min, points);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectRectangleRectangle\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} b1\n * @param {module:kld-intersections.Point2D} b2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectRectangleRectangle(a1, a2, b1, b2) {\n const min = a1.min(a2);\n const max = a1.max(a2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectLineRectangle(min, topRight, b1, b2);\n const inter2 = Intersection.intersectLineRectangle(topRight, max, b1, b2);\n const inter3 = Intersection.intersectLineRectangle(max, bottomLeft, b1, b2);\n const inter4 = Intersection.intersectLineRectangle(bottomLeft, min, b1, b2);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectRayRay\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} b1\n * @param {module:kld-intersections.Point2D} b2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectRayRay(a1, a2, b1, b2) {\n let result;\n\n const ua_t = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x);\n const ub_t = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x);\n const u_b = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y);\n\n if (u_b !== 0) {\n const ua = ua_t / u_b;\n\n result = new Intersection(\"Intersection\");\n result.points.push(\n new Point2D(\n a1.x + ua * (a2.x - a1.x),\n a1.y + ua * (a2.y - a1.y)\n )\n );\n }\n else if (ua_t === 0 || ub_t === 0) {\n result = new Intersection(\"Coincident\");\n }\n else {\n result = new Intersection(\"Parallel\");\n }\n\n return result;\n }\n\n /**\n * appendPoint\n *\n * @param {module:kld-intersections.Point2D} point\n */\n appendPoint(point) {\n this.points.push(point);\n }\n\n\n /**\n * appendPoints\n *\n * @param {Array} points\n */\n appendPoints(points) {\n this.points = this.points.concat(points);\n }\n}\n\nexport default Intersection;\n","/* eslint-disable prefer-rest-params */\n/**\n * Shapes\n *\n * @copyright 2017, Kevin Lindsey\n * @module Shapes\n * @deprecated use ShapeInfo\n */\n\nimport ShapeInfo from \"./ShapeInfo.js\";\n\n/**\n * Build shapes for intersection\n */\nclass Shapes {\n /**\n * arc\n *\n * @deprecated use ShapeInfo.arc\n * @param {number} centerX\n * @param {number} centerY\n * @param {number} radiusX\n * @param {number} radiusY\n * @param {number} startRadians\n * @param {number} endRadians\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static arc(centerX, centerY, radiusX, radiusY, startRadians, endRadians) {\n return ShapeInfo.arc(...arguments);\n }\n\n /**\n * quadraticBezier\n *\n * @deprecated use ShapeInfo.quadraticBezier\n * @param {number} p1x\n * @param {number} p1y\n * @param {number} p2x\n * @param {number} p2y\n * @param {number} p3x\n * @param {number} p3y\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static quadraticBezier(p1x, p1y, p2x, p2y, p3x, p3y) {\n return ShapeInfo.quadraticBezier(...arguments);\n }\n\n /**\n * cubicBezier\n *\n * @deprecated use ShapeInfo.cubicBezier\n * @param {number} p1x\n * @param {number} p1y\n * @param {number} p2x\n * @param {number} p2y\n * @param {number} p3x\n * @param {number} p3y\n * @param {number} p4x\n * @param {number} p4y\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static cubicBezier(p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y) {\n return ShapeInfo.cubicBezier(...arguments);\n }\n\n /**\n * circle\n *\n * @deprecated use ShapeInfo.circle\n * @param {number} centerX\n * @param {number} centerY\n * @param {number} radius\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static circle(centerX, centerY, radius) {\n return ShapeInfo.circle(...arguments);\n }\n\n /**\n * ellipse\n *\n * @deprecated use ShapeInfo.ellipse\n * @param {number} centerX\n * @param {number} centerY\n * @param {number} radiusX\n * @param {number} radiusY\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static ellipse(centerX, centerY, radiusX, radiusY) {\n return ShapeInfo.ellipse(...arguments);\n }\n\n /**\n * line\n *\n * @deprecated use ShapeInfo.line\n * @param {number} p1x\n * @param {number} p1y\n * @param {number} p2x\n * @param {number} p2y\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static line(p1x, p1y, p2x, p2y) {\n return ShapeInfo.line(...arguments);\n }\n\n /**\n * path\n *\n * @deprecated use ShapeInfo.path\n * @param {string} pathData\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static path(pathData) {\n return ShapeInfo.path(...arguments);\n }\n\n /**\n * polygon\n *\n * @deprecated use ShapeInfo.polygon\n * @param {Array} coords\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static polygon(coords) {\n return ShapeInfo.polygon(...arguments);\n }\n\n /**\n * polyline\n *\n * @deprecated use ShapeInfo.polyline\n * @param {Array} coords\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static polyline(coords) {\n return ShapeInfo.polyline(...arguments);\n }\n\n /**\n * rectangle\n *\n * @deprecated use ShapeInfo.rectangle\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} [rx]\n * @param {number} [ry]\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static rectangle(x, y, width, height, rx = 0, ry = 0) {\n return ShapeInfo.rectangle(...arguments);\n }\n}\n\nexport default Shapes;\n","/* eslint-disable prefer-rest-params */\n/**\n * AffineShapes\n *\n * @copyright 2017-2019, Kevin Lindsey\n * @module AffineShapes\n * @deprecated use ShapeInfo\n */\n\nimport ShapeInfo from \"./ShapeInfo.js\";\n\n/**\n * Build shapes for intersection\n */\nclass AffineShapes {\n /**\n * arc\n *\n * @deprecated use ShapeInfo.arc\n * @param {module:kld-intersections.Point2D} center\n * @param {number} radiusX\n * @param {number} radiusY\n * @param {number} startRadians\n * @param {number} endRadians\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static arc(center, radiusX, radiusY, startRadians, endRadians) {\n return ShapeInfo.arc(...arguments);\n }\n\n /**\n * quadraticBezier\n *\n * @deprecated use ShapeInfo.quadraticBezier\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static quadraticBezier(p1, p2, p3) {\n return ShapeInfo.quadraticBezier(...arguments);\n }\n\n /**\n * cubicBezier\n *\n * @deprecated use ShapeInfo.cubicBezier\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static cubicBezier(p1, p2, p3, p4) {\n return ShapeInfo.cubicBezier(...arguments);\n }\n\n /**\n * circle\n *\n * @deprecated use ShapeInfo.circle\n * @param {module:kld-intersections.Point2D} center\n * @param {number} radius\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static circle(center, radius) {\n return ShapeInfo.circle(...arguments);\n }\n\n /**\n * ellipse\n *\n * @deprecated use ShapeInfo.ellipse\n * @param {module:kld-intersections.Point2D} center\n * @param {number} radiusX\n * @param {number} radiusY\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static ellipse(center, radiusX, radiusY) {\n return ShapeInfo.ellipse(...arguments);\n }\n\n /**\n * line\n *\n * @deprecated use ShapeInfo.line\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static line(p1, p2) {\n return ShapeInfo.line(...arguments);\n }\n\n /**\n * path\n *\n * @deprecated use ShapeInfo.path\n * @param {string} pathData\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static path(pathData) {\n return ShapeInfo.path(...arguments);\n }\n\n /**\n * polygon\n *\n * @deprecated use ShapeInfo.polygon\n * @param {Array} points\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static polygon(points) {\n return ShapeInfo.polygon(...arguments);\n }\n\n /**\n * polyline\n *\n * @deprecated use ShapeInfo.polyline\n * @param {Array} points\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static polyline(points) {\n return ShapeInfo.polyline(...arguments);\n }\n\n /**\n * rectangle\n *\n * @deprecated use ShapeInfo.rectangle\n * @param {module:kld-intersections.Point2D} topLeft\n * @param {module:kld-intersections.Vector2D} size\n * @param {number} [rx]\n * @param {number} [ry]\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static rectangle(topLeft, size, rx = 0, ry = 0) {\n return ShapeInfo.rectangle(...arguments);\n }\n}\n\nexport default AffineShapes;\n","/* eslint-disable no-restricted-syntax */\nimport {Point2D} from \"kld-affine\";\nimport ShapeInfo from \"./ShapeInfo.js\";\n\nclass SvgShapes {\n /**\n * circle\n *\n * @param {SVGCircleElement} circle\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static circle(circle) {\n if (circle instanceof SVGCircleElement === false) {\n throw new TypeError(`Expected SVGCircleElement, but found ${circle}`);\n }\n\n const center = new Point2D(\n circle.cx.baseVal.value,\n circle.cy.baseVal.value\n );\n const radius = circle.r.baseVal.value;\n\n return ShapeInfo.circle(center, radius);\n }\n\n /**\n * ellipse\n *\n * @param {SVGEllipseElement} ellipse\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static ellipse(ellipse) {\n if (ellipse instanceof SVGEllipseElement === false) {\n throw new TypeError(`Expected SVGEllipseElement, but found ${ellipse}`);\n }\n\n const center = new Point2D(\n ellipse.cx.baseVal.value,\n ellipse.cy.baseVal.value\n );\n const radiusX = ellipse.rx.baseVal.value;\n const radiusY = ellipse.ry.baseVal.value;\n\n return ShapeInfo.ellipse(center, radiusX, radiusY);\n }\n\n /**\n * line\n *\n * @param {SVGLineElement} line\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static line(line) {\n if (line instanceof SVGLineElement === false) {\n throw new TypeError(`Expected SVGLineElement, but found ${line}`);\n }\n\n const p1 = new Point2D(\n line.x1.baseVal.value,\n line.y1.baseVal.value\n );\n const p2 = new Point2D(\n line.x2.baseVal.value,\n line.y2.baseVal.value\n );\n\n return ShapeInfo.line(p1, p2);\n }\n\n /**\n * path\n *\n * @param {SVGPathElement} path\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static path(path) {\n if (path instanceof SVGPathElement === false) {\n throw new TypeError(`Expected SVGPathElement, but found ${path}`);\n }\n\n const pathData = path.getAttributeNS(null, \"d\");\n\n return ShapeInfo.path(pathData);\n }\n\n /**\n * polygon\n *\n * @param {SVGPolygonElement} polygon\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static polygon(polygon) {\n if (polygon instanceof SVGPolygonElement === false) {\n throw new TypeError(`Expected SVGPolygonElement, but found ${polygon}`);\n }\n\n const points = [];\n\n for (let i = 0; i < polygon.points.numberOfItems; i++) {\n const point = polygon.points.getItem(i);\n\n points.push(new Point2D(point.x, point.y));\n }\n\n return ShapeInfo.polygon(points);\n }\n\n /**\n * polyline\n *\n * @param {SVGPolylineElement} polyline\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static polyline(polyline) {\n if (polyline instanceof SVGPolylineElement === false) {\n throw new TypeError(`Expected SVGPolylineElement, but found ${polyline}`);\n }\n\n const points = [];\n\n for (let i = 0; i < polyline.points.numberOfItems; i++) {\n const point = polyline.points.getItem(i);\n\n points.push(new Point2D(point.x, point.y));\n }\n\n return ShapeInfo.polyline(points);\n }\n\n /**\n * rect\n *\n * @param {SVGRectElement} rect\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static rect(rect) {\n if (rect instanceof SVGRectElement === false) {\n throw new TypeError(`Expected SVGRectElement, but found ${rect}`);\n }\n\n return ShapeInfo.rectangle(\n rect.x.baseVal.value,\n rect.y.baseVal.value,\n rect.width.baseVal.value,\n rect.height.baseVal.value,\n rect.rx.baseVal.value,\n rect.ry.baseVal.value\n );\n }\n\n /**\n * element\n *\n * @param {SVGElement} element\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static element(element) {\n if (element instanceof SVGElement === false) {\n throw new TypeError(`Expected SVGElement, but found ${element}`);\n }\n\n /* eslint-disable-next-line prefer-destructuring */\n const tagName = element.tagName;\n\n switch (tagName) {\n case \"circle\":\n return SvgShapes.circle(element);\n case \"ellipse\":\n return SvgShapes.ellipse(element);\n case \"line\":\n return SvgShapes.line(element);\n case \"path\":\n return SvgShapes.path(element);\n case \"polygon\":\n return SvgShapes.polygon(element);\n case \"polyline\":\n return SvgShapes.polyline(element);\n case \"rect\":\n return SvgShapes.rect(element);\n default:\n throw new TypeError(`Unrecognized element type: '${tagName}'`);\n }\n }\n}\n\nexport default SvgShapes;\n","/**\n *\n * IntersectionQuery.js\n *\n * @copyright 2017 Kevin Lindsey\n * @module IntersectionQuery\n */\n\nimport {Vector2D} from \"kld-affine\";\n\n/**\n * @namespace\n */\nconst IntersectionQuery = {};\n\n\n/**\n * pointInCircle\n *\n * @param {module:kld-intersections.Point2D} point\n * @param {module:kld-intersections.Point2D} center\n * @param {number} radius\n * @returns {boolean}\n */\nIntersectionQuery.pointInCircle = function(point, center, radius) {\n const v = Vector2D.fromPoints(center, point);\n\n return v.length() <= radius;\n};\n\n\n/**\n * pointInEllipse\n *\n * @param {module:kld-intersections.Point2D} point\n * @param {module:kld-intersections.Point2D} center\n * @param {number} radiusX\n * @param {number} radiusY\n * @returns {boolean}\n */\nIntersectionQuery.pointInEllipse = function(point, center, radiusX, radiusY) {\n const len = point.subtract(center);\n\n return (len.x * len.x) / (radiusX * radiusX) + (len.y * len.y) / (radiusY * radiusY) <= 1;\n};\n\n\n/**\n * pointInPolyline\n *\n * @param {module:kld-intersections.Point2D} point\n * @param {Array} points\n */\nIntersectionQuery.pointInPolyline = function(point, points) {\n const {length: len} = points;\n let counter = 0;\n let xInter;\n\n let p1 = points[0];\n\n for (let i = 1; i <= len; i++) {\n const p2 = points[i % len];\n const minY = Math.min(p1.y, p2.y);\n const maxY = Math.max(p1.y, p2.y);\n const maxX = Math.max(p1.x, p2.x);\n\n if (p1.y !== p2.y && minY < point.y && point.y <= maxY && point.x <= maxX) {\n xInter = (point.y - p1.y) * (p2.x - p1.x) / (p2.y - p1.y) + p1.x;\n\n if (p1.x === p2.x || point.x <= xInter) {\n counter++;\n }\n }\n\n p1 = p2;\n }\n\n return (counter % 2 === 1);\n};\n\n\n/**\n * pointInPolyline\n *\n * @param {module:kld-intersections.Point2D} point\n * @param {Array} points\n */\nIntersectionQuery.pointInPolygon = IntersectionQuery.pointInPolyline;\n\n\n/**\n * pointInRectangle\n *\n * @param {module:kld-intersections.Point2D} point\n * @param {module:kld-intersections.Point2D} topLeft\n * @param {module:kld-intersections.Point2D} bottomRight\n * @returns {boolean}\n */\nIntersectionQuery.pointInRectangle = function(point, topLeft, bottomRight) {\n return (\n topLeft.x <= point.x && point.x < bottomRight.x &&\n topLeft.y <= point.y && point.y < bottomRight.y\n );\n};\n\n\nexport default IntersectionQuery;\n"],"names":["Point2D","x","y","this","constructor","that","scalar","precision","Math","abs","t","omt","dx","dy","sqrt","min","max","matrix","a","c","e","b","d","f","Vector2D","divide","length","cos","dot","radians","acos","cross","subtract","project","percent","multiply","p1","p2","Matrix2D","isIdentity","det1","Error","idet","det2","det3","tx","ty","scale","center","scaleX","scaleY","s","sin","cx","cy","vector","unit","tan","E","F","G","H","Q","R","a1","atan2","a2","theta","phi","translation","rotation","nonUniformScaling","rotation0","sign","NaN","IDENTITY","Polynomial","coefs","i","arguments","push","_variable","_s","poly","slice","isNaN","TypeError","result","d1","getDegree","d2","dmax","v1","v2","j","TOLERANCE","pop","err","reduce","pv","cv","divideEqualsScalar","signs","value","round","signString","ACCURACY","minValue","eval","maxValue","tmp1","log","tmp2","LN10","maxIterations","ceil","LN2","n","range","iter","delta","sum","st","os","ost","Array","MAX","h","trapezoid","interpolate","maxAbsX","rb","bounds","minX","maxX","an","m","v","nm","pow","map","coefSelectionFunc","find2Max","acc","bi","nearmax","max_nearmax_pos","negX","posX","reverse","res","boundsUpperRealFujiwara","urb","boundsLowerRealFujiwara","prev","curr","undersqrt","accum","ai","prev_a","pos","neg","maxRealPos","maxRealNeg","minComplex","derivative","simplifyEquals","getLinearRoot","getQuadraticRoots","getCubicRoots","getQuarticRoots","roots","RangeError","bisection","droots","getDerivative","getRootsInInterval","results","c3","c2","c1","offset","discrim","halfB","ZEROepsilon","zeroErrorEstimate","root","tmp","distance","angle","sqrt3","poly_d","derrt","getRoots","sort","dery","nr","maxabsX","guesses","minmax","df","newtonSecantBisection","concat","xs","ys","ns","diff","dift","ho","hp","w","den","x0","max_iterations","dfx","x_correction","x_new","y_atmin","y_atmax","prev_dfx","prev_x_ef_correction","min_correction_factor","isBounded","isEnoughCorrection","parser","o","k","l","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","$Vp","$Vq","$Vr","$Vs","$Vt","$Vu","$Vv","$Vw","$Vx","$Vy","$Vz","$VA","$VB","$VC","$VD","$VE","$VF","$VG","$VH","$VI","$VJ","$VK","$VL","$VM","$VN","$VO","$VP","trace","yy","symbols_","terminals_","productions_","performAction","yytext","yyleng","yylineno","yystate","$$","_$","$0","$","type","name","steps","patterns","sequences","left","right","args","undefined","expression","assignTo","patternType","pattern","start","stop","elements","Infinity","substring","parseInt","parseFloat","table","defaultActions","parseError","str","hash","recoverable","error","parse","input","self","stack","vstack","lstack","call","lexer","Object","create","sharedState","prototype","hasOwnProperty","setInput","yylloc","yyloc","ranges","options","getPrototypeOf","symbol","preErrorSymbol","state","action","r","p","len","newState","expected","token","yyval","lex","errStr","showPosition","join","text","match","line","loc","first_line","last_line","first_column","last_column","apply","EOF","_input","_more","_backtrack","done","matched","conditionStack","ch","unput","lines","split","substr","oldLines","more","reject","backtrack_lexer","less","pastInput","past","replace","upcomingInput","next","pre","test_match","indexed_rule","backup","matches","tempMatch","index","rules","_currentRules","flex","begin","condition","popState","conditions","topState","pushState","stateStackSize","yy_","$avoiding_name_collisions","YY_START","Parser","isObject","item","_typeof","isArray","list","lists","missing","every","maxLength","part","items","count","advance","comparator","delimiter","keys","values","entries","pairs","pair","key","assign","FAILURE_VALUE","obj","Transformer","symbolTable","functions","messages","verbose","StdLib","reference","message","level","source","structure","statements","statement","executeExpression","addError","getNumbers","operation","_this","seqValue","invokeFunction","object","array","sequence","sequenceSymbolTable","currentObject","step","executePattern","valueGenerator","transform","mapSymbolTable","patternSymbolTable","arg","element","executeObjectExpression","objectSymbolTable","executeArrayPattern","property","propertyPattern","referencedPattern","executeArrayPatternElement","executeArrayElementPattern","executeArrayElementGroupPattern","actualIndex","pushAssign","group","groupResults","elementSymbolTable","addWarning","PathLexeme","UNDEFINED","COMMAND","NUMBER","EOD","PathLexer","pathData","setPathData","_pathData","RegExp","$1","SyntaxError","PathParser","_lexer","_handler","beginParse","mode","lastToken","getNextToken","typeis","parameterCount","params","PARAMCOUNT","toUpperCase","handler","methodName","METHODNAME","endParse","A","C","L","M","S","T","V","Z","q","z","TWO_PI","PI","getArcParameters","startPoint","endPoint","rx","ry","arcFlag","sweepFlag","halfDiff","x1p","y1p","x1px1p","y1py1p","lambda","factor","rxrx","ryry","rxy1","ryx1","sq","normal","mid","add","cxp","cyp","xcr1","xcr2","ycr1","ycr2","theta1","angleBetween","deltaTheta","PathHandler","shapeCreator","shapes","firstX","firstY","lastX","lastY","lastCommand","shape","xAxisRotation","addShape","arcParameters","arc","x1","y1","x2","y2","cubicBezier","quadraticBezier","controlX","controlY","secondToLast","degree90","ShapeInfo","ARC","QUADRATIC_BEZIER","CUBIC_BEZIER","CIRCLE","ELLIPSE","LINE","PATH","POLYGON","POLYLINE","RECTANGLE","p1x","p1y","p2x","p2y","width","height","y0","x3","y3","segments","properties","transformType","data","transformer","execute","JSON","stringify","addFunction","setHandler","parseData","UNIT_X","isNullish","normalizeAngle","restrictPointsToArc","intersections","radiusX","radiusY","startRadians","endRadians","points","Intersection","startNormal","endNormal","fromPoints","appendPoint","status","closePolygon","copy","init","point","shape1","shape2","intersectPathShape","intersectArcShape","method","path","segment","inter","intersect","appendPoints","ellipse","a3","b1","b2","b3","c12","c11","c10","c22","c21","c20","g","xp","xRoots","yp","yRoots","checkRoots","xRoot","b4","c23","c10x2","c10y2","c11x2","c11y2","c12x2","c12y2","c20x2","c20y2","c21x2","c21y2","c22x2","c22y2","c23x2","c23y2","p3","intersectBezier2Ellipse","ec","c0","cl","p4","lerp","p5","p6","intersectBezier2Polyline","intersectBezier2Line","r1","r2","topRight","bottomLeft","inter1","inter2","inter3","inter4","a4","c13","e0","e1","e2","e3","f0","f1","f2","f3","g0","g1","g2","g3","h0","h1","h2","h3","i0","i1","i2","i3","intersectBezier3Ellipse","p7","p8","p9","p10","intersectBezier3Polyline","intersectBezier3Line","r_max","r_min","c_dist","distanceFrom","cc","intersectEllipseEllipse","deter","u1","u2","intersectCirclePolyline","intersectCircleLine","rx1","ry1","rx2","ry2","AB","AC","AD","AE","AF","BC","BE","BF","CD","DE","DF","BFpDE","BEmCD","norm0","norm1","tst","orign","dir","mDir","mDiff","t_a","t_b","intersectEllipsePolyline","intersectEllipseLine","ua_t","ub_t","u_b","ua","ub","intersectLinePolyline","intersectLineLine","points1","points2","intersectPolylinePolyline","intersectPolylineRectangle","intersectLineRectangle","Shapes","centerX","centerY","p3x","p3y","p4x","p4y","radius","circle","coords","polygon","polyline","rectangle","AffineShapes","topLeft","size","SvgShapes","SVGCircleElement","baseVal","SVGEllipseElement","SVGLineElement","SVGPathElement","getAttributeNS","SVGPolygonElement","numberOfItems","getItem","SVGPolylineElement","rect","SVGRectElement","SVGElement","tagName","IntersectionQuery","xInter","counter","minY","maxY","pointInPolygon","pointInPolyline","pointInRectangle","bottomRight"],"mappings":"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CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,GAAGC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,KAAKC,EAAI,CAAC,EAAE,KAAKC,EAAI,CAAC,GAAG,IAAIC,EAAI,CAAC,GAAG,IAAIC,EAAI,CAAC,EAAE,KAAKC,EAAI,CAAC,GAAG,GAAG,IAAIC,EAAI,CAAC,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,GAAG,GAAG,IAAIC,EAAI,CAAC,GAAG,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,KAC5yBvD,EAAS,CAACwD,MAAO,aACrBC,GAAI,GACJC,SAAU,OAAS,UAAY,aAAe,MAAM,YAAc,aAAe,WAAa,MAAQ,aAAe,OAAO,OAAS,aAAe,OAAO,SAAW,QAAQ,QAAU,QAAQ,gBAAkB,cAAgB,kBAAoB,OAAS,OAAO,OAAO,YAAc,OAAO,YAAc,OAAO,aAAe,kBAAoB,OAAO,OAAO,OAAO,OAAO,gBAAkB,oBAAsB,qBAAuB,OAAO,WAAa,OAAO,OAAO,WAAa,aAAe,SAAW,UAAY,kBAAoB,KAAO,mBAAqB,oBAAsB,sBAAwB,qBAAuB,wBAA0B,sBAAwB,OAAO,YAAc,SAAS,WAAa,MAAQ,YAAc,cAAgB,gBAAkB,QAAU,SAAW,eAAiB,eAAiB,eAAiB,gBAAkB,iBAAmB,WAAa,eAAiB,mBAAqB,uBAAyB,kBAAoB,SAAW,QAAQ,qBAAuB,wBAA0B,iBAAmB,UAAY,UAAY,sBAAwB,eAAiB,WAAa,OAAS,GAC/oCC,WAAY,GAAG,UAAU,MAAM,SAAS,gBAAgB,OAAO,SAAS,OAAO,QAAQ,QAAQ,SAAS,OAAO,OAAO,cAAc,OAAO,OAAO,eAAe,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,eAAe,oBAAoB,OAAO,OAAO,SAAS,QAAQ,cAAc,gBAAgB,kBAAkB,UAAU,WAAW,iBAAiB,iBAAiB,iBAAiB,aAAa,iBAAiB,QAAQ,YAAY,UAC9bC,aAAc,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GA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"} \ No newline at end of file +{"version":3,"file":"index-esm.min.js","sources":["../node_modules/kld-affine/lib/Point2D.js","../node_modules/kld-affine/lib/Vector2D.js","../node_modules/kld-affine/lib/Matrix2D.js","../node_modules/kld-polynomial/lib/Polynomial.js","../node_modules/gp-data-transformer/lib/GeneratedParser.js","../node_modules/gp-data-transformer/lib/StandardLibrary.js","../node_modules/gp-data-transformer/lib/Transformer.js","../node_modules/kld-path-parser/lib/PathLexeme.js","../node_modules/kld-path-parser/lib/PathLexer.js","../node_modules/kld-path-parser/lib/PathParser.js","../lib/PathHandler.js","../lib/ShapeInfo.js","../lib/Intersection.js","../lib/Shapes.js","../lib/AffineShapes.js","../lib/SvgShapes.js","../lib/IntersectionQuery.js"],"sourcesContent":["/**\n * Point2D.js\n * @module Point2D\n * @copyright 2001-2019 Kevin Lindsey\n */\n\n/**\n * Point2D\n *\n * @memberof module:kld-affine\n */\nclass Point2D {\n /**\n * Point2D\n *\n * @param {number} x\n * @param {number} y\n * @returns {module:kld-affine.Point2D}\n */\n constructor(x = 0, y = 0) {\n this.x = x;\n this.y = y;\n }\n\n /**\n * clone\n *\n * @returns {module:kld-affine.Point2D}\n */\n clone() {\n return new this.constructor(this.x, this.y);\n }\n\n /**\n * add\n *\n * @param {module:kld-affine.Point2D} that\n * @returns {module:kld-affine.Point2D}\n */\n add(that) {\n return new this.constructor(this.x + that.x, this.y + that.y);\n }\n\n /**\n * subtract\n *\n * @param {module:kld-affine.Point2D} that\n * @returns {module:kld-affine.Point2D}\n */\n subtract(that) {\n return new this.constructor(this.x - that.x, this.y - that.y);\n }\n\n /**\n * multiply\n *\n * @param {number} scalar\n * @returns {module:kld-affine.Point2D}\n */\n multiply(scalar) {\n return new this.constructor(this.x * scalar, this.y * scalar);\n }\n\n /**\n * divide\n *\n * @param {number} scalar\n * @returns {module:kld-affine.Point2D}\n */\n divide(scalar) {\n return new this.constructor(this.x / scalar, this.y / scalar);\n }\n\n /**\n * equals\n *\n * @param {module:kld-affine.Point2D} that\n * @returns {boolean}\n */\n equals(that) {\n return (this.x === that.x && this.y === that.y);\n }\n\n /**\n * precisionEquals\n *\n * @param {module:kld-affine.Point2D} that\n * @param {number} precision\n * @returns {boolean}\n */\n precisionEquals(that, precision) {\n return (\n Math.abs(this.x - that.x) < precision &&\n Math.abs(this.y - that.y) < precision\n );\n }\n\n // utility methods\n\n /**\n * lerp\n *\n * @param {module:kld-affine.Point2D} that\n * @param {number} t\n * @returns {module:kld-affine.Point2D}\n */\n lerp(that, t) {\n const omt = 1.0 - t;\n\n return new this.constructor(\n this.x * omt + that.x * t,\n this.y * omt + that.y * t\n );\n }\n\n /**\n * distanceFrom\n *\n * @param {module:kld-affine.Point2D} that\n * @returns {number}\n */\n distanceFrom(that) {\n const dx = this.x - that.x;\n const dy = this.y - that.y;\n\n return Math.sqrt(dx * dx + dy * dy);\n }\n\n /**\n * min\n *\n * @param {module:kld-affine.Point2D} that\n * @returns {number}\n */\n min(that) {\n return new this.constructor(\n Math.min(this.x, that.x),\n Math.min(this.y, that.y)\n );\n }\n\n /**\n * max\n *\n * @param {module:kld-affine.Point2D} that\n * @returns {number}\n */\n max(that) {\n return new this.constructor(\n Math.max(this.x, that.x),\n Math.max(this.y, that.y)\n );\n }\n\n /**\n * transform\n *\n * @param {module:kld-affine.Matrix2D} matrix\n * @returns {module:kld-affine.Point2D}\n */\n transform(matrix) {\n return new this.constructor(\n matrix.a * this.x + matrix.c * this.y + matrix.e,\n matrix.b * this.x + matrix.d * this.y + matrix.f\n );\n }\n\n /**\n * toString\n *\n * @returns {string}\n */\n toString() {\n return `point(${this.x},${this.y})`;\n }\n}\n\nexport default Point2D;\n","/**\n * Vector2D.js\n * @module Vector2D\n * @copyright 2001-2019 Kevin Lindsey\n */\n\n/**\n * Vector2D\n *\n * @memberof module:kld-affine\n */\nclass Vector2D {\n /**\n * Vector2D\n *\n * @param {number} x\n * @param {number} y\n * @returns {module:kld-affine.Vector2D}\n */\n constructor(x = 0, y = 0) {\n this.x = x;\n this.y = y;\n }\n\n /**\n * fromPoints\n *\n * @param {module:kld-affine.Point2D} p1\n * @param {module:kld-affine.Point2D} p2\n * @returns {module:kld-affine.Vector2D}\n */\n static fromPoints(p1, p2) {\n return new Vector2D(\n p2.x - p1.x,\n p2.y - p1.y\n );\n }\n\n /**\n * length\n *\n * @returns {number}\n */\n length() {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n }\n\n /**\n * magnitude\n *\n * @returns {number}\n */\n magnitude() {\n return this.x * this.x + this.y * this.y;\n }\n\n /**\n * dot\n *\n * @param {module:kld-affine.Vector2D} that\n * @returns {number}\n */\n dot(that) {\n return this.x * that.x + this.y * that.y;\n }\n\n /**\n * cross\n *\n * @param {module:kld-affine.Vector2D} that\n * @returns {number}\n */\n cross(that) {\n return this.x * that.y - this.y * that.x;\n }\n\n /**\n * determinant\n *\n * @param {module:kld-affine.Vector2D} that\n * @returns {number}\n */\n determinant(that) {\n return this.x * that.y - this.y * that.x;\n }\n\n /**\n * unit\n *\n * @returns {module:kld-affine.Vector2D}\n */\n unit() {\n return this.divide(this.length());\n }\n\n /**\n * add\n *\n * @param {module:kld-affine.Vector2D} that\n * @returns {module:kld-affine.Vector2D}\n */\n add(that) {\n return new this.constructor(this.x + that.x, this.y + that.y);\n }\n\n /**\n * subtract\n *\n * @param {module:kld-affine.Vector2D} that\n * @returns {module:kld-affine.Vector2D}\n */\n subtract(that) {\n return new this.constructor(this.x - that.x, this.y - that.y);\n }\n\n /**\n * multiply\n *\n * @param {number} scalar\n * @returns {module:kld-affine.Vector2D}\n */\n multiply(scalar) {\n return new this.constructor(this.x * scalar, this.y * scalar);\n }\n\n /**\n * divide\n *\n * @param {number} scalar\n * @returns {module:kld-affine.Vector2D}\n */\n divide(scalar) {\n return new this.constructor(this.x / scalar, this.y / scalar);\n }\n\n /**\n * angleBetween\n *\n * @param {module:kld-affine.Vector2D} that\n * @returns {number}\n */\n angleBetween(that) {\n let cos = this.dot(that) / (this.length() * that.length());\n cos = Math.max(-1, Math.min(cos, 1));\n const radians = Math.acos(cos);\n\n return (this.cross(that) < 0.0) ? -radians : radians;\n }\n\n /**\n * Find a vector is that is perpendicular to this vector\n *\n * @returns {module:kld-affine.Vector2D}\n */\n perp() {\n return new this.constructor(-this.y, this.x);\n }\n\n /**\n * Find the component of the specified vector that is perpendicular to\n * this vector\n *\n * @param {module:kld-affine.Vector2D} that\n * @returns {module:kld-affine.Vector2D}\n */\n perpendicular(that) {\n return this.subtract(this.project(that));\n }\n\n /**\n * project\n *\n * @param {module:kld-affine.Vector2D} that\n * @returns {module:kld-affine.Vector2D}\n */\n project(that) {\n const percent = this.dot(that) / that.dot(that);\n\n return that.multiply(percent);\n }\n\n /**\n * transform\n *\n * @param {module:kld-affine.Matrix2D} matrix\n * @returns {module:kld-affine.Vector2D}\n */\n transform(matrix) {\n return new this.constructor(\n matrix.a * this.x + matrix.c * this.y,\n matrix.b * this.x + matrix.d * this.y\n );\n }\n\n /**\n * equals\n *\n * @param {module:kld-affine.Vector2D} that\n * @returns {boolean}\n */\n equals(that) {\n return (\n this.x === that.x &&\n this.y === that.y\n );\n }\n\n /**\n * precisionEquals\n *\n * @param {module:kld-affine.Vector2D} that\n * @param {number} precision\n * @returns {boolean}\n */\n precisionEquals(that, precision) {\n return (\n Math.abs(this.x - that.x) < precision &&\n Math.abs(this.y - that.y) < precision\n );\n }\n\n /**\n * toString\n *\n * @returns {string}\n */\n toString() {\n return `vector(${this.x},${this.y})`;\n }\n}\n\nexport default Vector2D;\n","/**\n * Matrix2D.js\n * @module Matrix2D\n * @copyright 2001-2019 Kevin Lindsey\n */\n\n/**\n * Matrix2D\n *\n * @memberof module:kld-affine\n */\nclass Matrix2D {\n /**\n * A 2D Matrix of the form:
\n * [a c e]
\n * [b d f]
\n * [0 0 1]
\n *\n * @param {number} a\n * @param {number} b\n * @param {number} c\n * @param {number} d\n * @param {number} e\n * @param {number} f\n * @returns {module:kld-affine.Matrix2D}\n */\n constructor(a = 1, b = 0, c = 0, d = 1, e = 0, f = 0) {\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n }\n\n /**\n * translation\n *\n * @param {number} tx\n * @param {number} ty\n * @returns {module:kld-affine.Matrix2D}\n */\n static translation(tx, ty) {\n return new Matrix2D(1, 0, 0, 1, tx, ty);\n }\n\n /**\n * scaling\n *\n * @param {number} scale\n * @returns {module:kld-affine.Matrix2D}\n */\n static scaling(scale) {\n return new Matrix2D(scale, 0, 0, scale, 0, 0);\n }\n\n /**\n * scalingAt\n *\n * @param {number} scale\n * @param {module:kld-affine.Point2D} center\n * @returns {module:kld-affine.Matrix2D}\n */\n static scalingAt(scale, center) {\n return new Matrix2D(\n scale,\n 0,\n 0,\n scale,\n center.x - center.x * scale,\n center.y - center.y * scale\n );\n }\n\n /**\n * nonUniformScaling\n *\n * @param {number} scaleX\n * @param {number} scaleY\n * @returns {module:kld-affine.Matrix2D}\n */\n static nonUniformScaling(scaleX, scaleY) {\n return new Matrix2D(scaleX, 0, 0, scaleY, 0, 0);\n }\n\n /**\n * nonUniformScalingAt\n *\n * @param {number} scaleX\n * @param {number} scaleY\n * @param {module:kld-affine.Point2D} center\n * @returns {module:kld-affine.Matrix2D}\n */\n static nonUniformScalingAt(scaleX, scaleY, center) {\n return new Matrix2D(\n scaleX,\n 0,\n 0,\n scaleY,\n center.x - center.x * scaleX,\n center.y - center.y * scaleY\n );\n }\n\n /**\n * rotation\n *\n * @param {number} radians\n * @returns {module:kld-affine.Matrix2D}\n */\n static rotation(radians) {\n const c = Math.cos(radians);\n const s = Math.sin(radians);\n\n return new Matrix2D(c, s, -s, c, 0, 0);\n }\n\n /**\n * rotationAt\n *\n * @param {number} radians\n * @param {module:kld-affine.Point2D} center\n * @returns {module:kld-affine.Matrix2D}\n */\n static rotationAt(radians, center) {\n const c = Math.cos(radians);\n const s = Math.sin(radians);\n\n return new Matrix2D(\n c,\n s,\n -s,\n c,\n center.x - center.x * c + center.y * s,\n center.y - center.y * c - center.x * s\n );\n }\n\n /**\n * rotationFromVector\n *\n * @param {module:kld-affine.Vector2D} vector\n * @returns {module:kld-affine.Matrix2D}\n */\n static rotationFromVector(vector) {\n const unit = vector.unit();\n const c = unit.x; // cos\n const s = unit.y; // sin\n\n return new Matrix2D(c, s, -s, c, 0, 0);\n }\n\n /**\n * xFlip\n *\n * @returns {module:kld-affine.Matrix2D}\n */\n static xFlip() {\n return new Matrix2D(-1, 0, 0, 1, 0, 0);\n }\n\n /**\n * yFlip\n *\n * @returns {module:kld-affine.Matrix2D}\n */\n static yFlip() {\n return new Matrix2D(1, 0, 0, -1, 0, 0);\n }\n\n /**\n * xSkew\n *\n * @param {number} radians\n * @returns {module:kld-affine.Matrix2D}\n */\n static xSkew(radians) {\n const t = Math.tan(radians);\n\n return new Matrix2D(1, 0, t, 1, 0, 0);\n }\n\n /**\n * ySkew\n *\n * @param {number} radians\n * @returns {module:kld-affine.Matrix2D}\n */\n static ySkew(radians) {\n const t = Math.tan(radians);\n\n return new Matrix2D(1, t, 0, 1, 0, 0);\n }\n\n /**\n * multiply\n *\n * @param {module:kld-affine.Matrix2D} that\n * @returns {module:kld-affine.Matrix2D}\n */\n multiply(that) {\n if (this.isIdentity()) {\n return that;\n }\n\n if (that.isIdentity()) {\n return this;\n }\n\n return new this.constructor(\n this.a * that.a + this.c * that.b,\n this.b * that.a + this.d * that.b,\n this.a * that.c + this.c * that.d,\n this.b * that.c + this.d * that.d,\n this.a * that.e + this.c * that.f + this.e,\n this.b * that.e + this.d * that.f + this.f\n );\n }\n\n /**\n * inverse\n *\n * @returns {module:kld-affine.Matrix2D}\n */\n inverse() {\n if (this.isIdentity()) {\n return this;\n }\n\n const det1 = this.a * this.d - this.b * this.c;\n\n if (det1 === 0.0) {\n throw new Error(\"Matrix is not invertible\");\n }\n\n const idet = 1.0 / det1;\n const det2 = this.f * this.c - this.e * this.d;\n const det3 = this.e * this.b - this.f * this.a;\n\n return new this.constructor(\n this.d * idet,\n -this.b * idet,\n -this.c * idet,\n this.a * idet,\n det2 * idet,\n det3 * idet\n );\n }\n\n /**\n * translate\n *\n * @param {number} tx\n * @param {number} ty\n * @returns {module:kld-affine.Matrix2D}\n */\n translate(tx, ty) {\n return new this.constructor(\n this.a,\n this.b,\n this.c,\n this.d,\n this.a * tx + this.c * ty + this.e,\n this.b * tx + this.d * ty + this.f\n );\n }\n\n /**\n * scale\n *\n * @param {number} scale\n * @returns {module:kld-affine.Matrix2D}\n */\n scale(scale) {\n return new this.constructor(\n this.a * scale,\n this.b * scale,\n this.c * scale,\n this.d * scale,\n this.e,\n this.f\n );\n }\n\n /**\n * scaleAt\n *\n * @param {number} scale\n * @param {module:kld-affine.Point2D} center\n * @returns {module:kld-affine.Matrix2D}\n */\n scaleAt(scale, center) {\n const dx = center.x - scale * center.x;\n const dy = center.y - scale * center.y;\n\n return new this.constructor(\n this.a * scale,\n this.b * scale,\n this.c * scale,\n this.d * scale,\n this.a * dx + this.c * dy + this.e,\n this.b * dx + this.d * dy + this.f\n );\n }\n\n /**\n * scaleNonUniform\n *\n * @param {number} scaleX\n * @param {number} scaleY\n * @returns {module:kld-affine.Matrix2D}\n */\n scaleNonUniform(scaleX, scaleY) {\n return new this.constructor(\n this.a * scaleX,\n this.b * scaleX,\n this.c * scaleY,\n this.d * scaleY,\n this.e,\n this.f\n );\n }\n\n /**\n * scaleNonUniformAt\n *\n * @param {number} scaleX\n * @param {number} scaleY\n * @param {module:kld-affine.Point2D} center\n * @returns {module:kld-affine.Matrix2D}\n */\n scaleNonUniformAt(scaleX, scaleY, center) {\n const dx = center.x - scaleX * center.x;\n const dy = center.y - scaleY * center.y;\n\n return new this.constructor(\n this.a * scaleX,\n this.b * scaleX,\n this.c * scaleY,\n this.d * scaleY,\n this.a * dx + this.c * dy + this.e,\n this.b * dx + this.d * dy + this.f\n );\n }\n\n /**\n * rotate\n *\n * @param {number} radians\n * @returns {module:kld-affine.Matrix2D}\n */\n rotate(radians) {\n const c = Math.cos(radians);\n const s = Math.sin(radians);\n\n return new this.constructor(\n this.a * c + this.c * s,\n this.b * c + this.d * s,\n this.a * -s + this.c * c,\n this.b * -s + this.d * c,\n this.e,\n this.f\n );\n }\n\n /**\n * rotateAt\n *\n * @param {number} radians\n * @param {module:kld-affine.Point2D} center\n * @returns {module:kld-affine.Matrix2D}\n */\n rotateAt(radians, center) {\n const cos = Math.cos(radians);\n const sin = Math.sin(radians);\n const cx = center.x;\n const cy = center.y;\n\n const a = this.a * cos + this.c * sin;\n const b = this.b * cos + this.d * sin;\n const c = this.c * cos - this.a * sin;\n const d = this.d * cos - this.b * sin;\n\n return new this.constructor(\n a,\n b,\n c,\n d,\n (this.a - a) * cx + (this.c - c) * cy + this.e,\n (this.b - b) * cx + (this.d - d) * cy + this.f\n );\n }\n\n /**\n * rotateFromVector\n *\n * @param {module:kld-affine.Vector2D} vector\n * @returns {module:kld-affine.Matrix2D}\n */\n rotateFromVector(vector) {\n const unit = vector.unit();\n const c = unit.x; // cos\n const s = unit.y; // sin\n\n return new this.constructor(\n this.a * c + this.c * s,\n this.b * c + this.d * s,\n this.a * -s + this.c * c,\n this.b * -s + this.d * c,\n this.e,\n this.f\n );\n }\n\n /**\n * flipX\n *\n * @returns {module:kld-affine.Matrix2D}\n */\n flipX() {\n return new this.constructor(\n -this.a,\n -this.b,\n this.c,\n this.d,\n this.e,\n this.f\n );\n }\n\n /**\n * flipY\n *\n * @returns {module:kld-affine.Matrix2D}\n */\n flipY() {\n return new this.constructor(\n this.a,\n this.b,\n -this.c,\n -this.d,\n this.e,\n this.f\n );\n }\n\n /**\n * skewX\n *\n * @param {number} radians\n * @returns {module:kld-affine.Matrix2D}\n */\n skewX(radians) {\n const t = Math.tan(radians);\n\n return new this.constructor(\n this.a,\n this.b,\n this.c + this.a * t,\n this.d + this.b * t,\n this.e,\n this.f\n );\n }\n\n // TODO: skewXAt\n\n /**\n * skewY\n *\n * @param {number} radians\n * @returns {module:kld-affine.Matrix2D}\n */\n skewY(radians) {\n const t = Math.tan(radians);\n\n return new this.constructor(\n this.a + this.c * t,\n this.b + this.d * t,\n this.c,\n this.d,\n this.e,\n this.f\n );\n }\n\n // TODO: skewYAt\n\n /**\n * isIdentity\n *\n * @returns {boolean}\n */\n isIdentity() {\n return (\n this.a === 1.0 &&\n this.b === 0.0 &&\n this.c === 0.0 &&\n this.d === 1.0 &&\n this.e === 0.0 &&\n this.f === 0.0\n );\n }\n\n /**\n * isInvertible\n *\n * @returns {boolean}\n */\n isInvertible() {\n return this.a * this.d - this.b * this.c !== 0.0;\n }\n\n /**\n * getScale\n *\n * @returns {{ scaleX: number, scaleY: number }}\n */\n getScale() {\n return {\n scaleX: Math.sqrt(this.a * this.a + this.c * this.c),\n scaleY: Math.sqrt(this.b * this.b + this.d * this.d)\n };\n }\n\n /**\n * Calculates matrix Singular Value Decomposition\n *\n * The resulting matrices — translation, rotation, scale, and rotation0 — return\n * this matrix when they are multiplied together in the listed order\n *\n * @see Jim Blinn's article {@link http://dx.doi.org/10.1109/38.486688}\n * @see {@link http://math.stackexchange.com/questions/861674/decompose-a-2d-arbitrary-transform-into-only-scaling-and-rotation}\n *\n * @returns {{\n * translation: module:kld-affine.Matrix2D,\n * rotation: module:kld-affine.Matrix2D,\n * scale: module:kld-affine.Matrix2D,\n * rotation0: module:kld-affine.Matrix2D\n * }}\n */\n getDecomposition() {\n const E = (this.a + this.d) * 0.5;\n const F = (this.a - this.d) * 0.5;\n const G = (this.b + this.c) * 0.5;\n const H = (this.b - this.c) * 0.5;\n\n const Q = Math.sqrt(E * E + H * H);\n const R = Math.sqrt(F * F + G * G);\n const scaleX = Q + R;\n const scaleY = Q - R;\n\n const a1 = Math.atan2(G, F);\n const a2 = Math.atan2(H, E);\n const theta = (a2 - a1) * 0.5;\n const phi = (a2 + a1) * 0.5;\n\n return {\n translation: this.constructor.translation(this.e, this.f),\n rotation: this.constructor.rotation(phi),\n scale: this.constructor.nonUniformScaling(scaleX, scaleY),\n rotation0: this.constructor.rotation(theta)\n };\n }\n\n /**\n * equals\n *\n * @param {module:kld-affine.Matrix2D} that\n * @returns {boolean}\n */\n equals(that) {\n return (\n this.a === that.a &&\n this.b === that.b &&\n this.c === that.c &&\n this.d === that.d &&\n this.e === that.e &&\n this.f === that.f\n );\n }\n\n /**\n * precisionEquals\n *\n * @param {module:kld-affine.Matrix2D} that\n * @param {number} precision\n * @returns {boolean}\n */\n precisionEquals(that, precision) {\n return (\n Math.abs(this.a - that.a) < precision &&\n Math.abs(this.b - that.b) < precision &&\n Math.abs(this.c - that.c) < precision &&\n Math.abs(this.d - that.d) < precision &&\n Math.abs(this.e - that.e) < precision &&\n Math.abs(this.f - that.f) < precision\n );\n }\n\n /**\n * toString\n *\n * @returns {string}\n */\n toString() {\n return `matrix(${this.a},${this.b},${this.c},${this.d},${this.e},${this.f})`;\n }\n}\n\n/**\n * Identity matrix\n *\n * @returns {module:kld-affine.Matrix2D}\n */\nMatrix2D.IDENTITY = new Matrix2D();\nMatrix2D.IDENTITY.isIdentity = () => true;\n\n\nexport default Matrix2D;\n","/* eslint-disable camelcase */\n/**\n * Polynomial.js\n *\n * @module Polynomial\n * @copyright 2002-2019 Kevin Lindsey
\n * -
\n * Contribution {@link http://github.com/Quazistax/kld-polynomial}
\n * copyright 2015 Robert Benko (Quazistax)
\n * MIT license\n */\n\n/**\n * Sign of a number (+1, -1, +0, -0).\n *\n * @param {number} x\n * @returns {number}\n */\nfunction sign(x) {\n // eslint-disable-next-line no-self-compare\n return typeof x === \"number\" ? x ? x < 0 ? -1 : 1 : x === x ? x : NaN : NaN;\n}\n\n/**\n * Polynomial\n *\n * @memberof module:kld-polynomial\n */\nclass Polynomial {\n /**\n * Polynomial\n *\n * @param {Array} coefs\n * @returns {module:kld-polynomial.Polynomial}\n */\n constructor(...coefs) {\n this.coefs = [];\n\n for (let i = coefs.length - 1; i >= 0; i--) {\n this.coefs.push(coefs[i]);\n }\n\n this._variable = \"t\";\n this._s = 0;\n }\n\n /**\n * Based on polint in \"Numerical Recipes in C, 2nd Edition\", pages 109-110\n *\n * @param {Array} xs\n * @param {Array} ys\n * @param {number} n\n * @param {number} offset\n * @param {number} x\n *\n * @returns {{y: number, dy: number}}\n */\n static interpolate(xs, ys, n, offset, x) {\n if (xs.constructor !== Array || ys.constructor !== Array) {\n throw new TypeError(\"xs and ys must be arrays\");\n }\n if (isNaN(n) || isNaN(offset) || isNaN(x)) {\n throw new TypeError(\"n, offset, and x must be numbers\");\n }\n\n let i, y;\n let dy = 0;\n const c = new Array(n);\n const d = new Array(n);\n let ns = 0;\n\n let diff = Math.abs(x - xs[offset]);\n\n for (i = 0; i < n; i++) {\n const dift = Math.abs(x - xs[offset + i]);\n\n if (dift < diff) {\n ns = i;\n diff = dift;\n }\n c[i] = d[i] = ys[offset + i];\n }\n\n y = ys[offset + ns];\n ns--;\n\n for (let m = 1; m < n; m++) {\n for (i = 0; i < n - m; i++) {\n const ho = xs[offset + i] - x;\n const hp = xs[offset + i + m] - x;\n const w = c[i + 1] - d[i];\n let den = ho - hp;\n\n if (den === 0.0) {\n throw new RangeError(\"Unable to interpolate polynomial. Two numbers in n were identical (to within roundoff)\");\n }\n\n den = w / den;\n d[i] = hp * den;\n c[i] = ho * den;\n }\n\n dy = (2 * (ns + 1) < (n - m)) ? c[ns + 1] : d[ns--];\n y += dy;\n }\n\n return {y, dy};\n }\n\n /**\n * Newton's (Newton-Raphson) method for finding Real roots on univariate function.
\n * When using bounds, algorithm falls back to secant if newton goes out of range.\n * Bisection is fallback for secant when determined secant is not efficient enough.\n * @see {@link http://en.wikipedia.org/wiki/Newton%27s_method}\n * @see {@link http://en.wikipedia.org/wiki/Secant_method}\n * @see {@link http://en.wikipedia.org/wiki/Bisection_method}\n *\n * @param {number} x0 - Initial root guess\n * @param {Function} f - Function which root we are trying to find\n * @param {Function} df - Derivative of function f\n * @param {number} max_iterations - Maximum number of algorithm iterations\n * @param {number} [min] - Left bound value\n * @param {number} [max] - Right bound value\n * @returns {number} root\n */\n static newtonSecantBisection(x0, f, df, max_iterations, min, max) {\n let x, prev_dfx = 0, dfx, prev_x_ef_correction = 0, x_correction, x_new;\n let y, y_atmin, y_atmax;\n\n x = x0;\n\n const ACCURACY = 14;\n const min_correction_factor = Math.pow(10, -ACCURACY);\n const isBounded = (typeof min === \"number\" && typeof max === \"number\");\n\n if (isBounded) {\n if (min > max) {\n throw new RangeError(\"Min must be greater than max\");\n }\n\n y_atmin = f(min);\n y_atmax = f(max);\n\n if (sign(y_atmin) === sign(y_atmax)) {\n throw new RangeError(\"Y values of bounds must be of opposite sign\");\n }\n }\n\n const isEnoughCorrection = function() {\n // stop if correction is too small or if correction is in simple loop\n return (Math.abs(x_correction) <= min_correction_factor * Math.abs(x)) ||\n (prev_x_ef_correction === (x - x_correction) - x);\n };\n\n for (let i = 0; i < max_iterations; i++) {\n dfx = df(x);\n\n if (dfx === 0) {\n if (prev_dfx === 0) {\n // error\n throw new RangeError(\"df(x) is zero\");\n }\n else {\n // use previous derivation value\n dfx = prev_dfx;\n }\n // or move x a little?\n // dfx = df(x != 0 ? x + x * 1e-15 : 1e-15);\n }\n\n prev_dfx = dfx;\n y = f(x);\n x_correction = y / dfx;\n x_new = x - x_correction;\n\n if (isEnoughCorrection()) {\n break;\n }\n\n if (isBounded) {\n if (sign(y) === sign(y_atmax)) {\n max = x;\n y_atmax = y;\n }\n else if (sign(y) === sign(y_atmin)) {\n min = x;\n y_atmin = y;\n }\n else {\n x = x_new;\n break;\n }\n\n if ((x_new < min) || (x_new > max)) {\n if (sign(y_atmin) === sign(y_atmax)) {\n break;\n }\n\n const RATIO_LIMIT = 50;\n const AIMED_BISECT_OFFSET = 0.25; // [0, 0.5)\n const dy = y_atmax - y_atmin;\n const dx = max - min;\n\n if (dy === 0) {\n x_correction = x - (min + dx * 0.5);\n }\n else if (Math.abs(dy / Math.min(y_atmin, y_atmax)) > RATIO_LIMIT) {\n x_correction = x - (min + dx * (0.5 + (Math.abs(y_atmin) < Math.abs(y_atmax) ? -AIMED_BISECT_OFFSET : AIMED_BISECT_OFFSET)));\n }\n else {\n x_correction = x - (min - y_atmin / dy * dx);\n }\n x_new = x - x_correction;\n\n if (isEnoughCorrection()) {\n break;\n }\n }\n }\n\n prev_x_ef_correction = x - x_new;\n x = x_new;\n }\n\n return x;\n }\n\n /**\n * Clones this polynomial and return the clone.\n *\n * @returns {module:kld-polynomial.Polynomial}\n */\n clone() {\n const poly = new Polynomial();\n\n poly.coefs = this.coefs.slice();\n\n return poly;\n }\n\n /**\n * eval\n *\n * @param {number} x\n */\n eval(x) {\n if (isNaN(x)) {\n throw new TypeError(`Parameter must be a number. Found '${x}'`);\n }\n\n let result = 0;\n\n for (let i = this.coefs.length - 1; i >= 0; i--) {\n result = result * x + this.coefs[i];\n }\n\n return result;\n }\n\n /**\n * add\n *\n * @param {module:kld-polynomial.Polynomial} that\n * @returns {module:kld-polynomial.Polynomial}\n */\n add(that) {\n const result = new Polynomial();\n const d1 = this.getDegree();\n const d2 = that.getDegree();\n const dmax = Math.max(d1, d2);\n\n for (let i = 0; i <= dmax; i++) {\n const v1 = (i <= d1) ? this.coefs[i] : 0;\n const v2 = (i <= d2) ? that.coefs[i] : 0;\n\n result.coefs[i] = v1 + v2;\n }\n\n return result;\n }\n\n /**\n * multiply\n *\n * @param {module:kld-polynomial.Polynomial} that\n * @returns {module:kld-polynomial.Polynomial}\n */\n multiply(that) {\n const result = new Polynomial();\n\n for (let i = 0; i <= this.getDegree() + that.getDegree(); i++) {\n result.coefs.push(0);\n }\n\n for (let i = 0; i <= this.getDegree(); i++) {\n for (let j = 0; j <= that.getDegree(); j++) {\n result.coefs[i + j] += this.coefs[i] * that.coefs[j];\n }\n }\n\n return result;\n }\n\n /**\n * divideEqualsScalar\n *\n * @deprecated To be replaced by divideScalar\n * @param {number} scalar\n */\n divideEqualsScalar(scalar) {\n for (let i = 0; i < this.coefs.length; i++) {\n this.coefs[i] /= scalar;\n }\n }\n\n /**\n * simplifyEquals\n *\n * @deprecated To be replaced by simplify\n * @param {number} TOLERANCE\n */\n simplifyEquals(TOLERANCE = 1e-12) {\n for (let i = this.getDegree(); i >= 0; i--) {\n if (Math.abs(this.coefs[i]) <= TOLERANCE) {\n this.coefs.pop();\n }\n else {\n break;\n }\n }\n }\n\n /**\n * Sets small coefficients to zero.\n *\n * @deprecated To be replaced by removeZeros\n * @param {number} TOLERANCE\n * @returns {module:kld-polynomial.Polynomial}\n */\n removeZerosEquals(TOLERANCE = 1e-15) {\n const c = this.coefs;\n const err = 10 * TOLERANCE * Math.abs(\n c.reduce((pv, cv) => {\n return Math.abs(cv) > Math.abs(pv) ? cv : pv;\n })\n );\n\n for (let i = 0; i < c.length - 1; i++) {\n if (Math.abs(c[i]) < err) {\n c[i] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * Scales polynomial so that leading coefficient becomes 1.\n *\n * @deprecated To be replaced by getMonic\n * @returns {module:kld-polynomial.Polynomial}\n */\n monicEquals() {\n const c = this.coefs;\n\n if (c[c.length - 1] !== 1) {\n this.divideEqualsScalar(c[c.length - 1]);\n }\n\n return this;\n }\n\n /**\n * toString\n *\n * @returns {string}\n */\n toString() {\n const coefs = [];\n const signs = [];\n\n for (let i = this.coefs.length - 1; i >= 0; i--) {\n let value = Math.round(this.coefs[i] * 1000) / 1000;\n\n if (value !== 0) {\n const signString = (value < 0) ? \" - \" : \" + \";\n\n value = Math.abs(value);\n\n if (i > 0) {\n if (value === 1) {\n value = this._variable;\n }\n else {\n value += this._variable;\n }\n }\n\n if (i > 1) {\n value += \"^\" + i;\n }\n\n signs.push(signString);\n coefs.push(value);\n }\n }\n\n signs[0] = (signs[0] === \" + \") ? \"\" : \"-\";\n\n let result = \"\";\n\n for (let i = 0; i < coefs.length; i++) {\n result += signs[i] + coefs[i];\n }\n\n return result;\n }\n\n /**\n * bisection\n *\n * @param {number} min\n * @param {number} max\n * @param {number} [TOLERANCE]\n * @param {number} [ACCURACY]\n * @returns {number}\n */\n bisection(min, max, TOLERANCE = 1e-6, ACCURACY = 15) {\n let minValue = this.eval(min);\n let maxValue = this.eval(max);\n let result;\n\n if (Math.abs(minValue) <= TOLERANCE) {\n result = min;\n }\n else if (Math.abs(maxValue) <= TOLERANCE) {\n result = max;\n }\n else if (minValue * maxValue <= 0) {\n const tmp1 = Math.log(max - min);\n const tmp2 = Math.LN10 * ACCURACY;\n const maxIterations = Math.ceil((tmp1 + tmp2) / Math.LN2);\n\n for (let i = 0; i < maxIterations; i++) {\n result = 0.5 * (min + max);\n const value = this.eval(result);\n\n if (Math.abs(value) <= TOLERANCE) {\n break;\n }\n\n if (value * minValue < 0) {\n max = result;\n maxValue = value;\n }\n else {\n min = result;\n minValue = value;\n }\n }\n }\n\n return result;\n }\n\n /**\n * Based on trapzd in \"Numerical Recipes in C, 2nd Edition\", page 137\n *\n * @param {number} min\n * @param {number} max\n * @param {number} n\n * @returns {number}\n */\n trapezoid(min, max, n) {\n if (isNaN(min) || isNaN(max) || isNaN(n)) {\n throw new TypeError(\"Parameters must be numbers\");\n }\n\n const range = max - min;\n\n if (n === 1) {\n const minValue = this.eval(min);\n const maxValue = this.eval(max);\n\n this._s = 0.5 * range * (minValue + maxValue);\n }\n else {\n const iter = 1 << (n - 2);\n const delta = range / iter;\n let x = min + 0.5 * delta;\n let sum = 0;\n\n for (let i = 0; i < iter; i++) {\n sum += this.eval(x);\n x += delta;\n }\n\n this._s = 0.5 * (this._s + range * sum / iter);\n }\n\n if (isNaN(this._s)) {\n throw new TypeError(\"this._s is NaN\");\n }\n\n return this._s;\n }\n\n /**\n * Based on trapzd in \"Numerical Recipes in C, 2nd Edition\", page 139\n *\n * @param {number} min\n * @param {number} max\n * @returns {number}\n */\n simpson(min, max) {\n if (isNaN(min) || isNaN(max)) {\n throw new TypeError(\"Parameters must be numbers\");\n }\n\n const range = max - min;\n let st = 0.5 * range * (this.eval(min) + this.eval(max));\n let t = st;\n let s = 4.0 * st / 3.0;\n let os = s;\n let ost = st;\n const TOLERANCE = 1e-7;\n\n let iter = 1;\n\n for (let n = 2; n <= 20; n++) {\n const delta = range / iter;\n let x = min + 0.5 * delta;\n let sum = 0;\n\n for (let i = 1; i <= iter; i++) {\n sum += this.eval(x);\n x += delta;\n }\n\n t = 0.5 * (t + range * sum / iter);\n st = t;\n s = (4.0 * st - ost) / 3.0;\n\n if (Math.abs(s - os) < TOLERANCE * Math.abs(os)) {\n break;\n }\n\n os = s;\n ost = st;\n iter <<= 1;\n }\n\n return s;\n }\n\n /**\n * romberg\n *\n * @param {number} min\n * @param {number} max\n * @returns {number}\n */\n romberg(min, max) {\n if (isNaN(min) || isNaN(max)) {\n throw new TypeError(\"Parameters must be numbers\");\n }\n\n const MAX = 20;\n const K = 3;\n const TOLERANCE = 1e-6;\n const s = new Array(MAX + 1);\n const h = new Array(MAX + 1);\n let result = {y: 0, dy: 0};\n\n h[0] = 1.0;\n\n for (let j = 1; j <= MAX; j++) {\n s[j - 1] = this.trapezoid(min, max, j);\n\n if (j >= K) {\n result = Polynomial.interpolate(h, s, K, j - K, 0.0);\n if (Math.abs(result.dy) <= TOLERANCE * result.y) {\n break;\n }\n }\n\n s[j] = s[j - 1];\n h[j] = 0.25 * h[j - 1];\n }\n\n return result.y;\n }\n\n /**\n * Estimate what is the maximum polynomial evaluation error value under which polynomial evaluation could be in fact 0.\n *\n * @param {number} maxAbsX\n * @returns {number}\n */\n zeroErrorEstimate(maxAbsX) {\n const poly = this;\n const ERRF = 1e-15;\n\n if (typeof maxAbsX === \"undefined\") {\n const rb = poly.bounds();\n\n maxAbsX = Math.max(Math.abs(rb.minX), Math.abs(rb.maxX));\n }\n\n if (maxAbsX < 0.001) {\n return 2 * Math.abs(poly.eval(ERRF));\n }\n\n const n = poly.coefs.length - 1;\n const an = poly.coefs[n];\n\n return 10 * ERRF * poly.coefs.reduce((m, v, i) => {\n const nm = v / an * Math.pow(maxAbsX, i);\n return nm > m ? nm : m;\n }, 0);\n }\n\n /**\n * Calculates upper Real roots bounds.
\n * Real roots are in interval [negX, posX]. Determined by Fujiwara method.\n * @see {@link http://en.wikipedia.org/wiki/Properties_of_polynomial_roots}\n *\n * @returns {{ negX: number, posX: number }}\n */\n boundsUpperRealFujiwara() {\n let a = this.coefs;\n const n = a.length - 1;\n const an = a[n];\n\n if (an !== 1) {\n a = this.coefs.map(v => v / an);\n }\n\n const b = a.map((v, i) => {\n return (i < n)\n ? Math.pow(Math.abs((i === 0) ? v / 2 : v), 1 / (n - i))\n : v;\n });\n\n let coefSelectionFunc;\n const find2Max = function(acc, bi, i) {\n if (coefSelectionFunc(i)) {\n if (acc.max < bi) {\n acc.nearmax = acc.max;\n acc.max = bi;\n }\n else if (acc.nearmax < bi) {\n acc.nearmax = bi;\n }\n }\n return acc;\n };\n\n coefSelectionFunc = function(i) {\n return i < n && a[i] < 0;\n };\n\n // eslint-disable-next-line unicorn/no-fn-reference-in-iterator\n const max_nearmax_pos = b.reduce(find2Max, {max: 0, nearmax: 0});\n\n coefSelectionFunc = function(i) {\n return i < n && ((n % 2 === i % 2) ? a[i] < 0 : a[i] > 0);\n };\n\n // eslint-disable-next-line unicorn/no-fn-reference-in-iterator\n const max_nearmax_neg = b.reduce(find2Max, {max: 0, nearmax: 0});\n\n return {\n negX: -2 * max_nearmax_neg.max,\n posX: 2 * max_nearmax_pos.max\n };\n }\n\n /**\n * Calculates lower Real roots bounds.
\n * There are no Real roots in interval . Determined by Fujiwara method.\n * @see {@link http://en.wikipedia.org/wiki/Properties_of_polynomial_roots}\n *\n * @returns {{ negX: number, posX: number }}\n */\n boundsLowerRealFujiwara() {\n const poly = new Polynomial();\n\n poly.coefs = this.coefs.slice().reverse();\n\n const res = poly.boundsUpperRealFujiwara();\n\n res.negX = 1 / res.negX;\n res.posX = 1 / res.posX;\n\n return res;\n }\n\n /**\n * Calculates left and right Real roots bounds.
\n * Real roots are in interval [minX, maxX]. Combines Fujiwara lower and upper bounds to get minimal interval.\n * @see {@link http://en.wikipedia.org/wiki/Properties_of_polynomial_roots}\n *\n * @returns {{ minX: number, maxX: number }}\n */\n bounds() {\n const urb = this.boundsUpperRealFujiwara();\n const rb = {minX: urb.negX, maxX: urb.posX};\n\n if (urb.negX === 0 && urb.posX === 0) {\n return rb;\n }\n\n if (urb.negX === 0) {\n rb.minX = this.boundsLowerRealFujiwara().posX;\n }\n else if (urb.posX === 0) {\n rb.maxX = this.boundsLowerRealFujiwara().negX;\n }\n\n if (rb.minX > rb.maxX) {\n rb.minX = rb.maxX = 0;\n }\n\n return rb;\n // TODO: if sure that there are no complex roots\n // (maybe by using Sturm's theorem) use:\n // return this.boundsRealLaguerre();\n }\n\n /**\n * Calculates absolute upper roots bound.
\n * All (Complex and Real) roots magnitudes are <= result. Determined by Rouche method.\n * @see {@link http://en.wikipedia.org/wiki/Properties_of_polynomial_roots}\n *\n * @returns {number}\n */\n boundUpperAbsRouche() {\n const a = this.coefs;\n const n = a.length - 1;\n const max = a.reduce((prev, curr, i) => {\n if (i !== n) {\n curr = Math.abs(curr);\n return (prev < curr) ? curr : prev;\n }\n return prev;\n }, 0);\n\n return 1 + max / Math.abs(a[n]);\n }\n\n /**\n * Calculates absolute lower roots bound.
\n * All (Complex and Real) roots magnitudes are >= result. Determined by Rouche method.\n * @see {@link http://en.wikipedia.org/wiki/Properties_of_polynomial_roots}\n *\n * @returns {number}\n */\n boundLowerAbsRouche() {\n const a = this.coefs;\n const max = a.reduce((prev, curr, i) => {\n if (i !== 0) {\n curr = Math.abs(curr);\n return (prev < curr) ? curr : prev;\n }\n return prev;\n }, 0);\n\n return Math.abs(a[0]) / (Math.abs(a[0]) + max);\n }\n\n /**\n * Calculates left and right Real roots bounds.
\n * WORKS ONLY if all polynomial roots are Real.\n * Real roots are in interval [minX, maxX]. Determined by Laguerre method.\n * @see {@link http://en.wikipedia.org/wiki/Properties_of_polynomial_roots}\n *\n * @returns {{ minX: number, maxX: number }}\n */\n boundsRealLaguerre() {\n const a = this.coefs;\n const n = a.length - 1;\n const p1 = -a[n - 1] / (n * a[n]);\n const undersqrt = a[n - 1] * a[n - 1] - 2 * n / (n - 1) * a[n] * a[n - 2];\n let p2 = (n - 1) / (n * a[n]) * Math.sqrt(undersqrt);\n\n if (p2 < 0) {\n p2 = -p2;\n }\n\n return {\n minX: p1 - p2,\n maxX: p1 + p2\n };\n }\n\n /**\n * Root count by Descartes rule of signs.
\n * Returns maximum number of positive and negative real roots and minimum number of complex roots.\n * @see {@link http://en.wikipedia.org/wiki/Descartes%27_rule_of_signs}\n *\n * @returns {{maxRealPos: number, maxRealNeg: number, minComplex: number}}\n */\n countRootsDescartes() {\n const a = this.coefs;\n const n = a.length - 1;\n const accum = a.reduce((acc, ai, i) => {\n if (acc.prev_a !== 0 && ai !== 0) {\n if ((acc.prev_a < 0) === (ai > 0)) {\n acc.pos++;\n }\n if (((i % 2 === 0) !== (acc.prev_a < 0)) === ((i % 2 === 1) !== (ai > 0))) {\n acc.neg++;\n }\n }\n acc.prev_a = ai;\n return acc;\n }, {pos: 0, neg: 0, prev_a: 0});\n\n return {\n maxRealPos: accum.pos,\n maxRealNeg: accum.neg,\n minComplex: n - (accum.pos + accum.neg)\n };\n }\n\n // getters and setters\n\n /**\n * get degree\n *\n * @returns {number}\n */\n getDegree() {\n return this.coefs.length - 1;\n }\n\n /**\n * getDerivative\n *\n * @returns {module:kld-polynomial.Polynomial}\n */\n getDerivative() {\n const derivative = new Polynomial();\n\n for (let i = 1; i < this.coefs.length; i++) {\n derivative.coefs.push(i * this.coefs[i]);\n }\n\n return derivative;\n }\n\n /**\n * getRoots\n *\n * @returns {Array}\n */\n getRoots() {\n let result;\n\n this.simplifyEquals();\n\n switch (this.getDegree()) {\n case 0: result = []; break;\n case 1: result = this.getLinearRoot(); break;\n case 2: result = this.getQuadraticRoots(); break;\n case 3: result = this.getCubicRoots(); break;\n case 4: result = this.getQuarticRoots(); break;\n default:\n result = [];\n }\n\n return result;\n }\n\n /**\n * getRootsInInterval\n *\n * @param {number} min\n * @param {number} max\n * @returns {Array}\n */\n getRootsInInterval(min, max) {\n const roots = [];\n\n /**\n * @param {number} value\n */\n function push(value) {\n if (typeof value === \"number\") {\n roots.push(value);\n }\n }\n\n if (this.getDegree() === 0) {\n throw new RangeError(\"Unexpected empty polynomial\");\n }\n else if (this.getDegree() === 1) {\n push(this.bisection(min, max));\n }\n else {\n // get roots of derivative\n const deriv = this.getDerivative();\n const droots = deriv.getRootsInInterval(min, max);\n\n if (droots.length > 0) {\n // find root on [min, droots[0]]\n push(this.bisection(min, droots[0]));\n\n // find root on [droots[i],droots[i+1]] for 0 <= i <= count-2\n for (let i = 0; i <= droots.length - 2; i++) {\n push(this.bisection(droots[i], droots[i + 1]));\n }\n\n // find root on [droots[count-1],xmax]\n push(this.bisection(droots[droots.length - 1], max));\n }\n else {\n // polynomial is monotone on [min,max], has at most one root\n push(this.bisection(min, max));\n }\n }\n\n return roots;\n }\n\n /**\n * getLinearRoot\n *\n * @returns {number}\n */\n getLinearRoot() {\n const result = [];\n const a = this.coefs[1];\n\n if (a !== 0) {\n result.push(-this.coefs[0] / a);\n }\n\n return result;\n }\n\n /**\n * getQuadraticRoots\n *\n * @returns {Array}\n */\n getQuadraticRoots() {\n const results = [];\n\n if (this.getDegree() === 2) {\n const a = this.coefs[2];\n const b = this.coefs[1] / a;\n const c = this.coefs[0] / a;\n const d = b * b - 4 * c;\n\n if (d > 0) {\n const e = Math.sqrt(d);\n\n results.push(0.5 * (-b + e));\n results.push(0.5 * (-b - e));\n }\n else if (d === 0) {\n // really two roots with same value, but we only return one\n results.push(0.5 * -b);\n }\n // else imaginary results\n }\n\n return results;\n }\n\n /**\n * getCubicRoots\n *\n * This code is based on MgcPolynomial.cpp written by David Eberly. His\n * code along with many other excellent examples are avaiable at his site:\n * http://www.geometrictools.com\n *\n * @returns {Array}\n */\n getCubicRoots() {\n const results = [];\n\n if (this.getDegree() === 3) {\n const c3 = this.coefs[3];\n const c2 = this.coefs[2] / c3;\n const c1 = this.coefs[1] / c3;\n const c0 = this.coefs[0] / c3;\n\n const a = (3 * c1 - c2 * c2) / 3;\n const b = (2 * c2 * c2 * c2 - 9 * c1 * c2 + 27 * c0) / 27;\n const offset = c2 / 3;\n let discrim = b * b / 4 + a * a * a / 27;\n const halfB = b / 2;\n\n const ZEROepsilon = this.zeroErrorEstimate();\n\n if (Math.abs(discrim) <= ZEROepsilon) {\n discrim = 0;\n }\n\n if (discrim > 0) {\n const e = Math.sqrt(discrim);\n let root; // eslint-disable-line no-shadow\n\n let tmp = -halfB + e;\n\n if (tmp >= 0) {\n root = Math.pow(tmp, 1 / 3);\n }\n else {\n root = -Math.pow(-tmp, 1 / 3);\n }\n\n tmp = -halfB - e;\n\n if (tmp >= 0) {\n root += Math.pow(tmp, 1 / 3);\n }\n else {\n root -= Math.pow(-tmp, 1 / 3);\n }\n\n results.push(root - offset);\n }\n else if (discrim < 0) {\n const distance = Math.sqrt(-a / 3);\n const angle = Math.atan2(Math.sqrt(-discrim), -halfB) / 3;\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const sqrt3 = Math.sqrt(3);\n\n results.push(2 * distance * cos - offset);\n results.push(-distance * (cos + sqrt3 * sin) - offset);\n results.push(-distance * (cos - sqrt3 * sin) - offset);\n }\n else {\n let tmp;\n\n if (halfB >= 0) {\n tmp = -Math.pow(halfB, 1 / 3);\n }\n else {\n tmp = Math.pow(-halfB, 1 / 3);\n }\n\n results.push(2 * tmp - offset);\n // really should return next root twice, but we return only one\n results.push(-tmp - offset);\n }\n }\n\n return results;\n }\n\n /**\n * Calculates roots of quartic polynomial.
\n * First, derivative roots are found, then used to split quartic polynomial\n * into segments, each containing one root of quartic polynomial.\n * Segments are then passed to newton's method to find roots.\n *\n * @returns {Array} roots\n */\n getQuarticRoots() {\n let results = [];\n const n = this.getDegree();\n\n if (n === 4) {\n const poly = new Polynomial();\n\n poly.coefs = this.coefs.slice();\n poly.divideEqualsScalar(poly.coefs[n]);\n\n const ERRF = 1e-15;\n\n if (Math.abs(poly.coefs[0]) < 10 * ERRF * Math.abs(poly.coefs[3])) {\n poly.coefs[0] = 0;\n }\n\n const poly_d = poly.getDerivative();\n const derrt = poly_d.getRoots().sort((a, b) => a - b);\n const dery = [];\n const nr = derrt.length - 1;\n const rb = this.bounds();\n\n const maxabsX = Math.max(Math.abs(rb.minX), Math.abs(rb.maxX));\n const ZEROepsilon = this.zeroErrorEstimate(maxabsX);\n\n for (let i = 0; i <= nr; i++) {\n dery.push(poly.eval(derrt[i]));\n }\n\n for (let i = 0; i <= nr; i++) {\n if (Math.abs(dery[i]) < ZEROepsilon) {\n dery[i] = 0;\n }\n }\n\n let i = 0;\n const dx = Math.max(0.1 * (rb.maxX - rb.minX) / n, ERRF);\n const guesses = [];\n const minmax = [];\n\n if (nr > -1) {\n if (dery[0] !== 0) {\n if (sign(dery[0]) !== sign(poly.eval(derrt[0] - dx) - dery[0])) {\n guesses.push(derrt[0] - dx);\n minmax.push([rb.minX, derrt[0]]);\n }\n }\n else {\n results.push(derrt[0], derrt[0]);\n i++;\n }\n\n for (; i < nr; i++) {\n if (dery[i + 1] === 0) {\n results.push(derrt[i + 1], derrt[i + 1]);\n i++;\n }\n else if (sign(dery[i]) !== sign(dery[i + 1])) {\n guesses.push((derrt[i] + derrt[i + 1]) / 2);\n minmax.push([derrt[i], derrt[i + 1]]);\n }\n }\n if (dery[nr] !== 0 && sign(dery[nr]) !== sign(poly.eval(derrt[nr] + dx) - dery[nr])) {\n guesses.push(derrt[nr] + dx);\n minmax.push([derrt[nr], rb.maxX]);\n }\n }\n\n /**\n * @param {number} x\n * @returns {number}\n */\n const f = function(x) {\n return poly.eval(x);\n };\n\n /**\n * @param {number} x\n * @returns {number}\n */\n const df = function(x) {\n return poly_d.eval(x);\n };\n\n if (guesses.length > 0) {\n for (i = 0; i < guesses.length; i++) {\n guesses[i] = Polynomial.newtonSecantBisection(guesses[i], f, df, 32, minmax[i][0], minmax[i][1]);\n }\n }\n\n results = results.concat(guesses);\n }\n\n return results;\n }\n}\n\nexport default Polynomial;\n","/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,6],$V1=[1,19],$V2=[1,7],$V3=[1,10],$V4=[1,13],$V5=[1,32],$V6=[1,14],$V7=[1,38],$V8=[1,15],$V9=[1,22],$Va=[1,37],$Vb=[1,25],$Vc=[1,28],$Vd=[1,29],$Ve=[1,33],$Vf=[1,34],$Vg=[1,36],$Vh=[1,35],$Vi=[1,5],$Vj=[1,5,14,16,24,28,56],$Vk=[1,61],$Vl=[1,63],$Vm=[1,62],$Vn=[1,50],$Vo=[1,56],$Vp=[1,45],$Vq=[1,46],$Vr=[1,47],$Vs=[1,48],$Vt=[1,49],$Vu=[1,51],$Vv=[1,53],$Vw=[1,54],$Vx=[1,59],$Vy=[1,60],$Vz=[1,5,14,16,24,28,56,69],$VA=[1,69],$VB=[1,70],$VC=[1,71],$VD=[1,72],$VE=[1,73],$VF=[1,74],$VG=[1,5,14,16,24,28,31,32,34,35,36,37,38,39,56,69],$VH=[1,75],$VI=[1,76],$VJ=[1,77],$VK=[1,78],$VL=[1,79],$VM=[1,80],$VN=[1,5,14,16,24,28,31,32,34,35,36,37,38,39,41,42,43,44,45,46,56,69],$VO=[1,5,14,16,24,28,31,32,34,35,36,37,38,39,41,42,43,44,45,46,52,55,56,69],$VP=[2,51],$VQ=[1,5,14,16,24,28,31,32,34,35,36,37,38,39,41,42,43,44,45,46,52,55,56,69,73],$VR=[1,5,14,16,24,28,56,73],$VS=[1,109],$VT=[1,125],$VU=[1,115],$VV=[1,122],$VW=[1,126],$VX=[1,133],$VY=[1,135],$VZ=[1,117],$V_=[1,129],$V$=[1,127],$V01=[1,134],$V11=[1,128],$V21=[1,130],$V31=[1,138],$V41=[1,120],$V51=[1,118],$V61=[1,119],$V71=[1,121],$V81=[1,137],$V91=[1,124],$Va1=[1,131],$Vb1=[1,132],$Vc1=[1,136],$Vd1=[1,123],$Ve1=[1,162],$Vf1=[1,165],$Vg1=[14,56],$Vh1=[14,28],$Vi1=[1,177],$Vj1=[14,24,56],$Vk1=[14,24,56,73],$Vl1=[14,28,73],$Vm1=[14,24],$Vn1=[1,5,14,28,56],$Vo1=[1,201];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"program\":3,\"statements\":4,\";\":5,\"statement\":6,\"assignment\":7,\"sequence\":8,\"LET\":9,\"IDENTIFIER\":10,\"=\":11,\"DEF\":12,\"sequences\":13,\",\":14,\"steps\":15,\"|>\":16,\"step\":17,\"=~\":18,\"namedPattern\":19,\"expression\":20,\"booleanExpression\":21,\"MAP\":22,\"(\":23,\")\":24,\"PATTERNS\":25,\"{\":26,\"patterns\":27,\"}\":28,\"SEQUENCES\":29,\"relationalExpression\":30,\"AND\":31,\"OR\":32,\"mathExpression\":33,\"<\":34,\"<=\":35,\"==\":36,\"!=\":37,\">=\":38,\">\":39,\"callExpression\":40,\"+\":41,\"-\":42,\"*\":43,\"/\":44,\"MOD\":45,\"POW\":46,\"argumentList\":47,\"unaryExpression\":48,\"memberExpression\":49,\"NOT\":50,\"primaryExpression\":51,\".\":52,\"name\":53,\"integer\":54,\"[\":55,\"]\":56,\"boolean\":57,\"NULL_TYPE\":58,\"float\":59,\"string\":60,\"UNDEFINED_TYPE\":61,\"$\":62,\"arrayExpression\":63,\"objectExpression\":64,\"expressionElements\":65,\"expressionElement\":66,\"expressionProperties\":67,\"expressionProperty\":68,\":\":69,\"argument\":70,\"...\":71,\"pattern\":72,\"AS\":73,\"ANY_TYPE\":74,\"ARRAY_TYPE\":75,\"BOOLEAN_TYPE\":76,\"TRUE\":77,\"FALSE\":78,\"NUMBER_TYPE\":79,\"OBJECT_TYPE\":80,\"STRING_TYPE\":81,\"arrayPattern\":82,\"objectPattern\":83,\"PATTERN\":84,\"ENUMERATION\":85,\"patternElements\":86,\"namedPatternElement\":87,\"patternElement\":88,\"range\":89,\"..\":90,\"patternProperties\":91,\"namedPatternProperty\":92,\"patternProperty\":93,\"STRING\":94,\"NUMBER\":95,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\";\",9:\"LET\",10:\"IDENTIFIER\",11:\"=\",12:\"DEF\",14:\",\",16:\"|>\",18:\"=~\",22:\"MAP\",23:\"(\",24:\")\",25:\"PATTERNS\",26:\"{\",28:\"}\",29:\"SEQUENCES\",31:\"AND\",32:\"OR\",34:\"<\",35:\"<=\",36:\"==\",37:\"!=\",38:\">=\",39:\">\",41:\"+\",42:\"-\",43:\"*\",44:\"/\",45:\"MOD\",46:\"POW\",50:\"NOT\",52:\".\",55:\"[\",56:\"]\",58:\"NULL_TYPE\",61:\"UNDEFINED_TYPE\",62:\"$\",69:\":\",71:\"...\",73:\"AS\",74:\"ANY_TYPE\",75:\"ARRAY_TYPE\",76:\"BOOLEAN_TYPE\",77:\"TRUE\",78:\"FALSE\",79:\"NUMBER_TYPE\",80:\"OBJECT_TYPE\",81:\"STRING_TYPE\",84:\"PATTERN\",85:\"ENUMERATION\",90:\"..\",94:\"STRING\",95:\"NUMBER\"},\nproductions_: [0,[3,1],[3,2],[4,3],[4,1],[6,1],[6,1],[7,4],[7,4],[13,3],[13,1],[8,1],[15,3],[15,1],[17,2],[17,1],[20,1],[20,6],[20,4],[20,4],[21,1],[21,3],[21,3],[30,1],[30,3],[30,3],[30,3],[30,3],[30,3],[30,3],[33,1],[33,3],[33,3],[33,3],[33,3],[33,3],[33,3],[40,3],[40,4],[40,1],[48,1],[48,2],[49,1],[49,3],[49,3],[49,4],[51,1],[51,1],[51,1],[51,1],[51,1],[51,1],[51,1],[51,1],[51,1],[51,3],[63,2],[63,3],[65,3],[65,1],[66,1],[66,1],[64,2],[64,3],[67,3],[67,1],[68,3],[68,1],[68,1],[47,3],[47,1],[70,1],[70,2],[27,3],[27,1],[19,1],[19,3],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,2],[72,2],[72,1],[82,2],[82,3],[86,3],[86,1],[87,1],[87,3],[88,1],[88,3],[88,3],[88,5],[89,3],[89,2],[89,2],[89,1],[83,2],[83,3],[91,3],[91,1],[92,1],[92,3],[93,3],[93,1],[57,1],[57,1],[60,1],[54,1],[59,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\nreturn $$[$0];\nbreak;\ncase 2:\nreturn $$[$0-1];\nbreak;\ncase 3: case 9: case 12: case 58: case 64: case 69: case 73: case 96: case 110:\n$$[$0-2].push($$[$0]); this.$ = $$[$0-2]\nbreak;\ncase 4: case 10: case 13: case 59: case 65: case 70: case 74: case 97: case 111:\nthis.$ = [ $$[$0] ];\nbreak;\ncase 5: case 6: case 14: case 15: case 16: case 20: case 23: case 30: case 39: case 40: case 42: case 53: case 54: case 60: case 61: case 68: case 71: case 112: case 121: case 122: case 123: case 124: case 125: case 126: case 127: case 128: case 129: case 130: case 131: case 132: case 133: case 134: case 135: case 136: case 137: case 138: case 139: case 140: case 141: case 142: case 143: case 144:\nthis.$ = $$[$0]\nbreak;\ncase 7:\nthis.$ = { type: 'assignment', name: $$[$0-2], value: $$[$0] };\nbreak;\ncase 8:\nthis.$ = { type: 'def', name: $$[$0-2], value: $$[$0] };\nbreak;\ncase 11:\nthis.$ = { type: 'sequence', steps: $$[$0] };\nbreak;\ncase 17:\nthis.$ = { type: 'map', value: [ $$[$0-3], $$[$0-1] ] };\nbreak;\ncase 18:\nthis.$ = { type: 'patterns', patterns: $$[$0-1] };\nbreak;\ncase 19:\nthis.$ = { type: 'sequences', sequences: $$[$0-1] };\nbreak;\ncase 21:\nthis.$ = { type: 'and', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 22:\nthis.$ = { type: 'or', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 24:\nthis.$ = { type: 'less_than', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 25:\nthis.$ = { type: 'less_equal', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 26:\nthis.$ = { type: 'equal', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 27:\nthis.$ = { type: 'not_equal', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 28:\nthis.$ = { type: 'greater_equal', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 29:\nthis.$ = { type: 'greater_than', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 31:\nthis.$ = { type: 'add', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 32:\nthis.$ = { type: 'subtract', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 33:\nthis.$ = { type: 'multiply', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 34:\nthis.$ = { type: 'divide', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 35:\nthis.$ = { type: 'modulus', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 36:\nthis.$ = { type: 'power', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 37:\nthis.$ = { type: 'invoke', name: $$[$0-2], args: [] };\nbreak;\ncase 38:\nthis.$ = { type: 'invoke', name: $$[$0-3], args: $$[$0-1] };\nbreak;\ncase 41:\nthis.$ = { type: 'not', value: $$[$0] };\nbreak;\ncase 43:\nthis.$ = { type: 'get-property', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 44:\nthis.$ = { type: 'get-index', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 45:\nthis.$ = { type: 'get-index', left: $$[$0-3], right: $$[$0-1] };\nbreak;\ncase 46:\nthis.$ = { type: 'boolean', value: $$[$0] };\nbreak;\ncase 47:\nthis.$ = { type: 'boolean', value: null };\nbreak;\ncase 48:\nthis.$ = { type: 'number', value: $$[$0] };\nbreak;\ncase 49:\nthis.$ = { type: 'string', value: $$[$0] };\nbreak;\ncase 50:\nthis.$ = { type: 'undefined', value: undefined };\nbreak;\ncase 51:\nthis.$ = { type: 'get-value', name: $$[$0] };\nbreak;\ncase 52:\nthis.$ = { type: 'get-structure' };\nbreak;\ncase 55:\nthis.$ = $$[$0-1];\nbreak;\ncase 56:\nthis.$ = { type: 'array', value: [] };\nbreak;\ncase 57:\nthis.$ = { type: 'array', value: $$[$0-1] };\nbreak;\ncase 62:\nthis.$ = { type: 'object', value: [] };\nbreak;\ncase 63:\nthis.$ = { type: 'object', value: $$[$0-1] };\nbreak;\ncase 66:\nthis.$ = { type: 'property', name: $$[$0-2], value: $$[$0] };\nbreak;\ncase 67:\nthis.$ = { type: 'property', name: $$[$0], value: null };\nbreak;\ncase 72:\nthis.$ = { type: 'spread', expression: $$[$0] };\nbreak;\ncase 75: case 98:\n$$[$0].assignTo = null; this.$ = $$[$0];\nbreak;\ncase 76: case 99: case 113:\n$$[$0-2].assignTo = $$[$0]; this.$ = $$[$0-2];\nbreak;\ncase 77:\nthis.$ = { type: 'pattern', patternType: 'any', value: null };\nbreak;\ncase 78:\nthis.$ = { type: 'pattern', patternType: 'array', value: null };\nbreak;\ncase 79:\nthis.$ = { type: 'pattern', patternType: 'boolean', value: null };\nbreak;\ncase 80:\nthis.$ = { type: 'pattern', patternType: 'boolean', value: true };\nbreak;\ncase 81:\nthis.$ = { type: 'pattern', patternType: 'boolean', value: false };\nbreak;\ncase 82:\nthis.$ = { type: 'pattern', patternType: 'null', value: null };\nbreak;\ncase 83:\nthis.$ = { type: 'pattern', patternType: 'number', value: null };\nbreak;\ncase 84:\nthis.$ = { type: 'pattern', patternType: 'number', value: $$[$0] };\nbreak;\ncase 85:\nthis.$ = { type: 'pattern', patternType: 'object', value: null };\nbreak;\ncase 86:\nthis.$ = { type: 'pattern', patternType: 'string', value: null };\nbreak;\ncase 87:\nthis.$ = { type: 'pattern', patternType: 'string', value: $$[$0] };\nbreak;\ncase 88:\nthis.$ = { type: 'pattern', patternType: 'undefined', value: null };\nbreak;\ncase 89: case 90:\nthis.$ = $$[$0];\nbreak;\ncase 91:\nthis.$ = { type: 'pattern-reference', name: $$[$0] };\nbreak;\ncase 92:\nthis.$ = { type: 'enumeration-reference', name: $$[$0] };\nbreak;\ncase 93:\nthis.$ = { type: 'pattern', patternType: 'reference', value: $$[$0] };\nbreak;\ncase 94:\nthis.$ = { type: 'pattern', patternType: 'array-pattern', value: [] };\nbreak;\ncase 95:\nthis.$ = { type: 'pattern', patternType: 'array-pattern', value: $$[$0-1] };\nbreak;\ncase 100:\nthis.$ = { type: 'element', pattern: $$[$0], range: { type: 'range', start: 1, stop: 1 } };\nbreak;\ncase 101:\nthis.$ = { type: 'element', pattern: $$[$0-2], range: $$[$0] };\nbreak;\ncase 102:\nthis.$ = { type: 'element-group', elements: $$[$0-1], range: { type: 'range', start: 1, stop: 1 } };\nbreak;\ncase 103:\nthis.$ = { type: 'element-group', elements: $$[$0-3], range: $$[$0] };\nbreak;\ncase 104:\nthis.$ = { type: 'range', start: $$[$0-2], stop: $$[$0] };\nbreak;\ncase 105:\nthis.$ = { type: 'range', start: 0, stop: $$[$0] };\nbreak;\ncase 106:\nthis.$ = { type: 'range', start: $$[$0-1], stop: Infinity };\nbreak;\ncase 107:\nthis.$ = { type: 'range', start: $$[$0], stop: $$[$0] };\nbreak;\ncase 108:\nthis.$ = { type: 'pattern', patternType: 'object', value: null };\nbreak;\ncase 109:\nthis.$ = { type: 'pattern', patternType: 'object-pattern', value: $$[$0-1] };\nbreak;\ncase 114:\nthis.$ = { type: 'property', name: $$[$0-2], pattern: $$[$0] };\nbreak;\ncase 115:\nthis.$ = { type: 'property', name: $$[$0], pattern: { type: 'pattern', patternType: 'any', value: null } };\nbreak;\ncase 116:\nthis.$ = true;\nbreak;\ncase 117:\nthis.$ = false;\nbreak;\ncase 118:\nthis.$ = $$[$0].substring(1, $$[$0].length - 1);\nbreak;\ncase 119:\nthis.$ = parseInt($$[$0]);\nbreak;\ncase 120:\nthis.$ = parseFloat($$[$0]);\nbreak;\n}\n},\ntable: [{3:1,4:2,6:3,7:4,8:5,9:$V0,10:$V1,12:$V2,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{1:[3]},{1:[2,1],5:[1,39]},o($Vi,[2,4]),o($Vi,[2,5]),o($Vi,[2,6]),{10:[1,40]},{10:[1,41]},o([1,5,14,24,28,56],[2,11],{16:[1,42]}),o($Vj,[2,13]),{10:$Vk,19:43,26:$Vl,55:$Vm,58:$Vn,59:52,60:55,61:$Vo,72:44,74:$Vp,75:$Vq,76:$Vr,77:$Vs,78:$Vt,79:$Vu,80:$Vv,81:$Vw,82:57,83:58,84:$Vx,85:$Vy,94:$Vg,95:$Vh},o($Vj,[2,15]),o($Vz,[2,16]),{23:[1,64]},{26:[1,65]},{26:[1,66]},o($Vz,[2,20],{31:[1,67],32:[1,68],34:$VA,35:$VB,36:$VC,37:$VD,38:$VE,39:$VF}),o($VG,[2,23],{41:$VH,42:$VI,43:$VJ,44:$VK,45:$VL,46:$VM}),o($VN,[2,30]),o($VO,$VP,{23:[1,81]}),o($VN,[2,39]),o($VN,[2,40],{52:[1,82],55:[1,83]}),{10:[1,85],23:$V5,26:$V7,48:84,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},o($VO,[2,42]),o($VO,[2,46]),o($VO,[2,47]),o($VO,[2,48]),o($VO,[2,49]),o($VO,[2,50]),o($VO,[2,52]),o($VO,[2,53]),o($VO,[2,54]),{10:$V1,20:86,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},o($VO,[2,116]),o($VO,[2,117]),o($VQ,[2,120]),o($VQ,[2,118]),{7:91,9:$V0,10:$V1,12:$V2,20:90,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,56:[1,87],57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,65:88,66:89,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{7:96,9:$V0,10:$V1,12:$V2,20:95,21:12,22:$V4,23:$V5,25:$V6,26:$V7,28:[1,92],29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,67:93,68:94,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{1:[2,2],6:97,7:4,8:5,9:$V0,10:$V1,12:$V2,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{11:[1,98]},{11:[1,99]},{10:$V1,17:100,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},o($Vj,[2,14]),o($Vj,[2,75],{73:[1,101]}),o($VR,[2,77]),o($VR,[2,78]),o($VR,[2,79]),o($VR,[2,80]),o($VR,[2,81]),o($VR,[2,82]),o($VR,[2,83]),o($VR,[2,84]),o($VR,[2,85]),o($VR,[2,86]),o($VR,[2,87]),o($VR,[2,88]),o($VR,[2,89]),o($VR,[2,90]),{10:[1,102]},{10:[1,103]},o($VR,[2,93]),{10:$Vk,23:$VS,26:$Vl,55:$Vm,56:[1,104],58:$Vn,59:52,60:55,61:$Vo,72:108,74:$Vp,75:$Vq,76:$Vr,77:$Vs,78:$Vt,79:$Vu,80:$Vv,81:$Vw,82:57,83:58,84:$Vx,85:$Vy,86:105,87:106,88:107,94:$Vg,95:$Vh},{9:$VT,10:$VU,12:$VV,22:$VW,25:$VX,28:[1,110],29:$VY,31:$VZ,32:$V_,45:$V$,46:$V01,50:$V11,53:114,58:$V21,60:116,61:$V31,73:$V41,74:$V51,75:$V61,76:$V71,77:$V81,78:$V91,79:$Va1,80:$Vb1,81:$Vc1,85:$Vd1,91:111,92:112,93:113,94:$Vg},{10:$V1,20:139,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$Vk,19:141,26:$Vl,27:140,55:$Vm,58:$Vn,59:52,60:55,61:$Vo,72:44,74:$Vp,75:$Vq,76:$Vr,77:$Vs,78:$Vt,79:$Vu,80:$Vv,81:$Vw,82:57,83:58,84:$Vx,85:$Vy,94:$Vg,95:$Vh},{8:143,10:$V1,13:142,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,30:144,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,30:145,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,33:146,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,33:147,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,33:148,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,33:149,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,33:150,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,33:151,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,40:152,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,40:153,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,40:154,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,40:155,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,40:156,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,40:157,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,20:161,21:12,22:$V4,23:$V5,24:[1,158],25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,47:159,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,70:160,71:$Ve1,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{9:$VT,10:$VU,12:$VV,22:$VW,25:$VX,29:$VY,31:$VZ,32:$V_,45:$V$,46:$V01,50:$V11,53:163,54:164,58:$V21,60:116,61:$V31,73:$V41,74:$V51,75:$V61,76:$V71,77:$V81,78:$V91,79:$Va1,80:$Vb1,81:$Vc1,85:$Vd1,94:$Vg,95:$Vf1},{54:166,95:$Vf1},o($VN,[2,41]),o($VO,$VP),{24:[1,167]},o($VO,[2,56]),{14:[1,169],56:[1,168]},o($Vg1,[2,59]),o($Vg1,[2,60]),o($Vg1,[2,61]),o($VO,[2,62]),{14:[1,171],28:[1,170]},o($Vh1,[2,65]),o($Vh1,[2,67],{69:[1,172]}),o($Vh1,[2,68]),o($Vi,[2,3]),{8:173,10:$V1,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{8:174,10:$V1,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},o($Vj,[2,12]),{10:[1,175]},o($VR,[2,91]),o($VR,[2,92]),o($VR,[2,94]),{14:$Vi1,56:[1,176]},o($Vj1,[2,97]),o($Vj1,[2,98],{73:[1,178]}),o($Vk1,[2,100],{5:[1,179]}),{10:$Vk,23:$VS,26:$Vl,55:$Vm,58:$Vn,59:52,60:55,61:$Vo,72:108,74:$Vp,75:$Vq,76:$Vr,77:$Vs,78:$Vt,79:$Vu,80:$Vv,81:$Vw,82:57,83:58,84:$Vx,85:$Vy,86:180,87:106,88:107,94:$Vg,95:$Vh},o($VR,[2,108]),{14:[1,182],28:[1,181]},o($Vh1,[2,111]),o($Vh1,[2,112],{73:[1,183]}),o($Vl1,[2,115],{69:[1,184]}),o($VQ,[2,121]),o($VQ,[2,122]),o($VQ,[2,123]),o($VQ,[2,124]),o($VQ,[2,125]),o($VQ,[2,126]),o($VQ,[2,127]),o($VQ,[2,128]),o($VQ,[2,129]),o($VQ,[2,130]),o($VQ,[2,131]),o($VQ,[2,132]),o($VQ,[2,133]),o($VQ,[2,134]),o($VQ,[2,135]),o($VQ,[2,136]),o($VQ,[2,137]),o($VQ,[2,138]),o($VQ,[2,139]),o($VQ,[2,140]),o($VQ,[2,141]),o($VQ,[2,142]),o($VQ,[2,143]),o($VQ,[2,144]),{14:[1,185]},{14:[1,187],28:[1,186]},o($Vh1,[2,74]),{14:[1,189],28:[1,188]},o($Vh1,[2,10]),o($Vz,[2,21],{34:$VA,35:$VB,36:$VC,37:$VD,38:$VE,39:$VF}),o($Vz,[2,22],{34:$VA,35:$VB,36:$VC,37:$VD,38:$VE,39:$VF}),o($VG,[2,24],{41:$VH,42:$VI,43:$VJ,44:$VK,45:$VL,46:$VM}),o($VG,[2,25],{41:$VH,42:$VI,43:$VJ,44:$VK,45:$VL,46:$VM}),o($VG,[2,26],{41:$VH,42:$VI,43:$VJ,44:$VK,45:$VL,46:$VM}),o($VG,[2,27],{41:$VH,42:$VI,43:$VJ,44:$VK,45:$VL,46:$VM}),o($VG,[2,28],{41:$VH,42:$VI,43:$VJ,44:$VK,45:$VL,46:$VM}),o($VG,[2,29],{41:$VH,42:$VI,43:$VJ,44:$VK,45:$VL,46:$VM}),o($VN,[2,31]),o($VN,[2,32]),o($VN,[2,33]),o($VN,[2,34]),o($VN,[2,35]),o($VN,[2,36]),o($VN,[2,37]),{14:[1,191],24:[1,190]},o($Vm1,[2,70]),o($Vm1,[2,71]),{10:$V1,20:192,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},o($VO,[2,43]),o($VO,[2,44]),o([1,5,14,16,24,28,31,32,34,35,36,37,38,39,41,42,43,44,45,46,52,55,56,69,73,90],[2,119]),{56:[1,193]},o($VO,[2,55]),o($VO,[2,57]),{7:91,9:$V0,10:$V1,12:$V2,20:90,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,66:194,77:$Ve,78:$Vf,94:$Vg,95:$Vh},o($VO,[2,63]),{7:96,9:$V0,10:$V1,12:$V2,20:95,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,68:195,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{8:196,10:$V1,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},o($Vn1,[2,7]),o($Vn1,[2,8]),o($Vj,[2,76]),o($VR,[2,95]),{10:$Vk,23:$VS,26:$Vl,55:$Vm,58:$Vn,59:52,60:55,61:$Vo,72:108,74:$Vp,75:$Vq,76:$Vr,77:$Vs,78:$Vt,79:$Vu,80:$Vv,81:$Vw,82:57,83:58,84:$Vx,85:$Vy,87:197,88:107,94:$Vg,95:$Vh},{10:[1,198]},{54:200,89:199,90:$Vo1,95:$Vf1},{14:$Vi1,24:[1,202]},o($VR,[2,109]),{9:$VT,10:$VU,12:$VV,22:$VW,25:$VX,29:$VY,31:$VZ,32:$V_,45:$V$,46:$V01,50:$V11,53:114,58:$V21,60:116,61:$V31,73:$V41,74:$V51,75:$V61,76:$V71,77:$V81,78:$V91,79:$Va1,80:$Vb1,81:$Vc1,85:$Vd1,92:203,93:113,94:$Vg},{10:[1,204]},{10:$Vk,26:$Vl,55:$Vm,58:$Vn,59:52,60:55,61:$Vo,72:205,74:$Vp,75:$Vq,76:$Vr,77:$Vs,78:$Vt,79:$Vu,80:$Vv,81:$Vw,82:57,83:58,84:$Vx,85:$Vy,94:$Vg,95:$Vh},{8:206,10:$V1,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},o($Vz,[2,18]),{10:$Vk,19:207,26:$Vl,55:$Vm,58:$Vn,59:52,60:55,61:$Vo,72:44,74:$Vp,75:$Vq,76:$Vr,77:$Vs,78:$Vt,79:$Vu,80:$Vv,81:$Vw,82:57,83:58,84:$Vx,85:$Vy,94:$Vg,95:$Vh},o($Vz,[2,19]),{8:208,10:$V1,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},o($VN,[2,38]),{10:$V1,20:161,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,70:209,71:$Ve1,77:$Ve,78:$Vf,94:$Vg,95:$Vh},o($Vm1,[2,72]),o($VO,[2,45]),o($Vg1,[2,58]),o($Vh1,[2,64]),o($Vh1,[2,66]),o($Vj1,[2,96]),o($Vj1,[2,99]),o($Vk1,[2,101]),o($Vk1,[2,107],{90:[1,210]}),{54:211,95:$Vf1},o($Vk1,[2,102],{5:[1,212]}),o($Vh1,[2,110]),o($Vh1,[2,113]),o($Vl1,[2,114]),{24:[1,213]},o($Vh1,[2,73]),o($Vh1,[2,9]),o($Vm1,[2,69]),o($Vk1,[2,106],{54:214,95:$Vf1}),o($Vk1,[2,105]),{54:200,89:215,90:$Vo1,95:$Vf1},o($Vz,[2,17]),o($Vk1,[2,104]),o($Vk1,[2,103])],\ndefaultActions: {},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n _token_stack:\n var lex = function () {\n var token;\n token = lexer.lex() || EOF;\n if (typeof token !== 'number') {\n token = self.symbols_[token] || token;\n }\n return token;\n };\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:/* skip whitespace */\nbreak;\ncase 1:/* skip comment */\nbreak;\ncase 2:return 31\nbreak;\ncase 3:return 74\nbreak;\ncase 4:return 75\nbreak;\ncase 5:return 73\nbreak;\ncase 6:return 76\nbreak;\ncase 7:return 12\nbreak;\ncase 8:return 85\nbreak;\ncase 9:return 78\nbreak;\ncase 10:return 9\nbreak;\ncase 11:return 22\nbreak;\ncase 12:return 45\nbreak;\ncase 13:return 50\nbreak;\ncase 14:return 32\nbreak;\ncase 15:return 58\nbreak;\ncase 16:return 79\nbreak;\ncase 17:return 80\nbreak;\ncase 18:return 25\nbreak;\ncase 19:return 46\nbreak;\ncase 20:return 29\nbreak;\ncase 21:return 81\nbreak;\ncase 22:return 77\nbreak;\ncase 23:return 61\nbreak;\ncase 24:return 95\nbreak;\ncase 25:return 94\nbreak;\ncase 26:return 23\nbreak;\ncase 27:return 24\nbreak;\ncase 28:return 26\nbreak;\ncase 29:return 28\nbreak;\ncase 30:return 55\nbreak;\ncase 31:return 56\nbreak;\ncase 32:return 16\nbreak;\ncase 33:return '|'\nbreak;\ncase 34:return 14\nbreak;\ncase 35:return 69\nbreak;\ncase 36:return 5\nbreak;\ncase 37:return 35\nbreak;\ncase 38:return 38\nbreak;\ncase 39:return 18\nbreak;\ncase 40:return 36\nbreak;\ncase 41:return 37\nbreak;\ncase 42:return 34\nbreak;\ncase 43:return 39\nbreak;\ncase 44:return 11\nbreak;\ncase 45:return 71\nbreak;\ncase 46:return 90\nbreak;\ncase 47:return 52\nbreak;\ncase 48:return '_'\nbreak;\ncase 49:return 41\nbreak;\ncase 50:return 42\nbreak;\ncase 51:return 43\nbreak;\ncase 52:return 44\nbreak;\ncase 53:return 62\nbreak;\ncase 54:return 10\nbreak;\n}\n},\nrules: [/^(?:\\s+)/,/^(?:\\/\\/.*)/,/^(?:and\\b)/,/^(?:any\\b)/,/^(?:array\\b)/,/^(?:as\\b)/,/^(?:boolean\\b)/,/^(?:def\\b)/,/^(?:enum\\b)/,/^(?:false\\b)/,/^(?:let\\b)/,/^(?:map\\b)/,/^(?:mod\\b)/,/^(?:not\\b)/,/^(?:or\\b)/,/^(?:null\\b)/,/^(?:number\\b)/,/^(?:object\\b)/,/^(?:patterns\\b)/,/^(?:pow\\b)/,/^(?:sequences\\b)/,/^(?:string\\b)/,/^(?:true\\b)/,/^(?:undefined\\b)/,/^(?:[-+]?(0|[1-9]\\d*)(\\.\\d+)?)/,/^(?:\"[^\"\\r\\n]*\")/,/^(?:\\()/,/^(?:\\))/,/^(?:{)/,/^(?:})/,/^(?:\\[)/,/^(?:\\])/,/^(?:\\|>)/,/^(?:\\|)/,/^(?:,)/,/^(?::)/,/^(?:;)/,/^(?:<=)/,/^(?:>=)/,/^(?:=~)/,/^(?:==)/,/^(?:!=)/,/^(?:<)/,/^(?:>)/,/^(?:=)/,/^(?:\\.{3})/,/^(?:\\.{2})/,/^(?:\\.)/,/^(?:_)/,/^(?:\\+)/,/^(?:-)/,/^(?:\\*)/,/^(?:\\/)/,/^(?:\\$)/,/^(?:[a-zA-Z_][a-zA-Z0-9_]*)/],\nconditions: {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\nexport default parser;\n","// General functions\n\n/**\n * Return the type name of the specified item\n *\n * @param {*} item\n * @returns {string}\n */\nexport function typeName(item) {\n switch (item) {\n case null:\n return \"null\";\n case undefined:\n return \"undefined\";\n default:\n if (Array.isArray(item)) {\n return \"array\";\n }\n\n return typeof item;\n }\n}\n\n// Array related functions\n\n/**\n * Return the length of an array\n *\n * @param {Array} list\n * @returns {number}\n */\nexport function length(list) { /* eslint-disable-line no-shadow */\n return (Array.isArray(list)) ? list.length : 0;\n}\n\n/**\n * Combine multiple arrays into a single array\n *\n * @param {Array} lists\n * @param {*} [missing=undefined]\n * @returns {Array}\n */\nexport function zip(lists, missing = undefined) {\n const result = [];\n\n if (Array.isArray(lists) && lists.length > 0 && lists.every(l => Array.isArray(l))) {\n const maxLength = Math.max(...lists.map(l => l.length));\n\n for (let i = 0; i < maxLength; i++) {\n const part = [];\n\n for (const list of lists) {\n part.push(i < list.length ? list[i] : missing);\n }\n\n result.push(part);\n }\n }\n\n\n return result;\n}\n\n/**\n * Partition an array into multiple arrays\n *\n * @param {Array} items\n * @param {number} count\n * @param {number} advance\n * @param {*} [missing=undefined]\n */\nexport function partition(items, count, advance, missing = undefined) {\n /* eslint-disable-next-line no-shadow */\n const {length} = items;\n const result = [];\n\n // default advance to count, if its not defined\n advance = advance === undefined ? count : advance;\n\n // we can't advance backwards and we always need to advance\n count = Math.max(1, count);\n advance = Math.max(1, advance);\n\n for (let i = 0; i < length; i += advance) {\n const part = [];\n let index = i;\n\n for (let j = 0; j < count; j++, index++) {\n part.push(index < length ? items[index] : missing);\n }\n\n result.push(part);\n }\n\n return result;\n}\n\n/**\n * Return a new array with the original array's content reversed\n *\n * @param {Array} items\n * @returns {Array|undefined}\n */\nexport function reverse(items) {\n return Array.isArray(items)\n ? items.slice().reverse()\n : undefined;\n}\n\n/**\n * Return a new sorted array\n *\n * @param {Array} items\n * @param {Function} comparator\n * @returns {Array|undefined}\n */\nexport function sort(items, comparator) {\n return Array.isArray(items)\n ? items.slice().sort(comparator)\n : undefined;\n}\n\n/**\n * Return a string by concatenating a list of strings, delimiting each with another string\n *\n * @param {Array} items\n * @param {string} delimiter\n * @returns {string}\n */\nexport function join(items, delimiter) {\n return items.join(delimiter);\n}\n\n// Object related functions\n\n/**\n * Predicate to determine if an item is an object\n *\n * @param {*} item\n * @returns {boolean}\n */\nfunction isObject(item) {\n return item !== null && typeof item === \"object\";\n}\n\n/**\n * Return a list of keys from an object\n *\n * @param {Object} item\n * @returns {string[]}\n */\nexport function keys(item) {\n /* eslint-disable-next-line compat/compat */\n return isObject(item) ? Object.keys(item) : [];\n}\n\n/**\n * Return a list of values from an object\n *\n * @param {Object} item\n * @returns {any[]}\n */\nexport function values(item) {\n /* eslint-disable-next-line compat/compat */\n return isObject(item) ? Object.values(item) : [];\n}\n\n/**\n * Return a list of key/value pairs from an object. Each element in the result is a 2-element array\n * where the first element is the key and the second element is the value\n *\n * @param {Object} item\n * @returns {Array}\n */\nexport function pairs(item) {\n /* eslint-disable-next-line compat/compat */\n return isObject(item) ? Object.entries(item) : [];\n}\n\n/**\n * Convert a list of key/value pairs into an object. This is the reverse of pairs\n *\n * @param {Array} pairs\n * @returns {Object}\n */\nexport function fromPairs(pairs) { /* eslint-disable-line no-shadow */\n const result = {};\n\n if (Array.isArray(pairs)) {\n for (const pair of pairs) {\n if (pair.length >= 2) {\n const [key, value] = pair;\n\n result[key] = value;\n }\n }\n }\n\n return result;\n}\n\n// Array and Object related\n\n/**\n * If all items are objects, a new object with all the properties of all objects will be merged. If the same property\n * exists on multiple objects, the last object with that property wins.\n *\n * If the first item is an array, a new array will be created by appending all non-array items and concatenating all\n * array items.\n *\n * @param {Object|Array} items\n * @returns {Object|Array|undefined}\n */\nexport function merge(...items) {\n if (items.length > 0 && Array.isArray(items[0])) {\n return items[0].concat(...items.slice(1));\n }\n else if (items.every(item => isObject(item))) {\n return Object.assign({}, ...items);\n }\n\n return undefined;\n}\n","/**\n * Transformer.jss\n *\n * @copyright 2019, Kevin Lindsey\n * @module Transformer\n */\n\n// import util from \"util\";\n// import Parser from \"./Parser.js\";\nimport Parser from \"./GeneratedParser.js\";\nimport * as StdLib from \"./StandardLibrary.js\";\n\nconst FAILURE_VALUE = {};\nexport {FAILURE_VALUE};\n\n/**\n * Determine if object is something that can have properties\n *\n * @param {*} obj\n * @returns {boolean}\n */\nfunction isObject(obj) {\n return obj !== null && typeof obj === \"object\";\n}\n\n/**\n * Transformer\n */\nexport default class Transformer {\n /**\n * Create a new empty Transformer. Normalizers can be used to validate and transform data. However, when a new\n * Transformer has been created, it needs to be populated with one or more type descriptions. The easiest way to do\n * this is with the static method fromSource.\n */\n constructor() {\n this.symbolTable = {};\n this.functions = {};\n this.messages = [];\n this.verbose = false;\n\n // add standard library\n /* eslint-disable-next-line guard-for-in */\n for (const name in StdLib) {\n /* eslint-disable-next-line import/namespace */\n this.functions[name] = StdLib[name];\n }\n }\n\n /**\n * Add function\n *\n * @param {string} name\n * @param {Function} reference\n */\n addFunction(name, reference) {\n // TODO: type check\n this.functions[name] = reference;\n }\n\n /**\n * Add information\n *\n * @param {string} message\n */\n addInfo(message) {\n if (this.verbose) {\n this.messages.push({type: \"message\", level: \"info\", message});\n }\n }\n\n /**\n * Add a warning\n *\n * @param {string} message\n */\n addWarning(message) {\n this.messages.push({type: \"message\", level: \"warning\", message});\n }\n\n /**\n * Add an error\n *\n * @param {string} message\n */\n addError(message) {\n this.messages.push({type: \"message\", level: \"error\", message});\n }\n\n /**\n * Compile and execute the source against the specfied structure\n *\n * @param {string} source\n * @param {*} structure\n * @returns {*}\n */\n execute(source, structure) {\n // TODO: cache results using source or source hash as key\n // parse source\n const statements = Parser.parse(source);\n\n // clear any previous messages\n this.messages = [];\n\n // process statements\n let result;\n\n for (const statement of statements) {\n switch (statement.type) {\n case \"assignment\":\n case \"def\":\n case \"sequence\": {\n result = this.executeExpression(statement, structure, this.symbolTable);\n\n if (result === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n break;\n }\n\n default:\n this.addError(`unknown statement type: ${statement.type}`);\n return FAILURE_VALUE;\n }\n }\n\n return result;\n }\n\n /*\n * Execute a method and return its value\n *\n * @param {object} expression\n * @param {object} symbolTable\n * @returns {*}\n */\n executeExpression(expression, structure, symbolTable) {\n const binOp = (typeName, operation) => {\n const left = this.executeExpression(expression.left, structure, symbolTable);\n\n /* eslint-disable-next-line valid-typeof */\n if (left !== FAILURE_VALUE && typeof left === typeName) {\n const right = this.executeExpression(expression.right, structure, symbolTable);\n\n /* eslint-disable-next-line valid-typeof */\n if (right !== FAILURE_VALUE && typeof right === typeName) {\n return operation(left, right);\n }\n }\n\n return FAILURE_VALUE;\n };\n\n switch (expression.type) {\n case \"assignment\": {\n const value = this.executeExpression(expression.value, structure, symbolTable);\n\n if (value === FAILURE_VALUE) {\n this.addError(`Unable to evaluate assignment value for ${expression.name}`);\n return FAILURE_VALUE;\n }\n\n /* eslint-disable-next-line no-prototype-builtins */\n if (symbolTable.hasOwnProperty(expression.name)) {\n this.addError(`A symbol in current scope was assigned more than once: ${expression.name}`);\n return FAILURE_VALUE;\n }\n\n symbolTable[expression.name] = value;\n\n return value;\n }\n\n case \"def\":\n symbolTable[expression.name] = expression.value;\n return undefined;\n\n case \"get-value\":\n if (expression.name in symbolTable) {\n const value = symbolTable[expression.name];\n\n if (isObject(value) && value.type === \"sequence\") {\n const seqValue = this.executeExpression(value, structure, symbolTable);\n\n if (seqValue === FAILURE_VALUE) {\n this.addError(`Unable to evaluate sequence ${expression.name}`);\n return FAILURE_VALUE;\n }\n\n return seqValue;\n }\n\n return value;\n }\n else if (expression.name in this.functions) {\n return this.invokeFunction(expression.name, [structure]);\n }\n\n this.addError(`Tried to access unbound symbol: ${expression.name}`);\n return FAILURE_VALUE;\n\n case \"get-property\": {\n const object = this.executeExpression(expression.left, structure, symbolTable);\n\n return (isObject(object)) ? object[expression.right] : FAILURE_VALUE;\n }\n\n case \"get-index\": {\n const {left, right} = expression;\n const array = this.executeExpression(left, structure, symbolTable);\n\n if (Array.isArray(array)) {\n const index = (right < 0) ? array.length + right : right;\n\n return 0 <= index && index < array.length ? array[index] : FAILURE_VALUE;\n }\n\n return FAILURE_VALUE;\n }\n\n case \"get-structure\":\n return structure;\n\n case \"sequences\": {\n let result = FAILURE_VALUE;\n\n for (const sequence of expression.sequences) {\n const sequenceSymbolTable = Object.create(symbolTable);\n\n result = this.executeExpression(sequence, structure, sequenceSymbolTable);\n\n if (result !== FAILURE_VALUE) {\n Object.assign(symbolTable, sequenceSymbolTable);\n break;\n }\n }\n\n return result;\n }\n\n case \"sequence\": {\n let currentObject = structure;\n\n for (const step of expression.steps) {\n if (step.type === \"pattern\") {\n currentObject = this.executePattern(step, currentObject, symbolTable);\n }\n else {\n currentObject = this.executeExpression(step, currentObject, symbolTable);\n }\n\n if (currentObject === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n }\n\n return currentObject;\n }\n\n case \"map\": {\n const [valueGenerator, transform] = expression.value;\n const values = this.executeExpression(valueGenerator, structure, symbolTable);\n\n if (values !== FAILURE_VALUE) {\n if (Array.isArray(values) === false) {\n this.addError(\"First argument of map must evaluate to an array\");\n return FAILURE_VALUE;\n }\n\n const mapSymbolTable = Object.create(symbolTable);\n\n return values.map(value => this.executeExpression(transform, value, mapSymbolTable));\n }\n\n return FAILURE_VALUE;\n }\n\n case \"patterns\": {\n let result = FAILURE_VALUE;\n\n for (const pattern of expression.patterns) {\n const patternSymbolTable = Object.create(symbolTable);\n\n result = this.executePattern(pattern, structure, patternSymbolTable);\n\n if (result !== FAILURE_VALUE) {\n Object.assign(symbolTable, patternSymbolTable);\n break;\n }\n }\n\n return result;\n }\n\n case \"and\":\n return binOp(\"boolean\", (a, b) => a && b);\n\n case \"or\":\n return binOp(\"boolean\", (a, b) => a || b);\n\n case \"not\": {\n const value = this.executeExpression(expression.value, structure, symbolTable);\n\n if (value !== FAILURE_VALUE && typeof value === \"boolean\") {\n return !value;\n }\n\n return FAILURE_VALUE;\n }\n\n case \"less_than\":\n return binOp(\"number\", (a, b) => a < b);\n\n case \"less_equal\":\n return binOp(\"number\", (a, b) => a <= b);\n\n case \"equal\":\n return binOp(\"number\", (a, b) => a === b);\n\n case \"not_equal\":\n return binOp(\"number\", (a, b) => a !== b);\n\n case \"greater_equal\":\n return binOp(\"number\", (a, b) => a >= b);\n\n case \"greater_than\":\n return binOp(\"number\", (a, b) => a > b);\n\n case \"add\":\n return binOp(\"number\", (a, b) => a + b);\n\n case \"subtract\":\n return binOp(\"number\", (a, b) => a - b);\n\n case \"multiply\":\n return binOp(\"number\", (a, b) => a * b);\n\n case \"divide\":\n return binOp(\"number\", (a, b) => a / b);\n\n case \"modulus\":\n return binOp(\"number\", (a, b) => a % b);\n\n case \"power\":\n return binOp(\"number\", (a, b) => a ** b);\n\n case \"invoke\": {\n const args = expression.args.reduce((accum, arg) => {\n if (arg.type === \"spread\") {\n const value = this.executeExpression(arg.expression, structure, symbolTable);\n // const value = arg.name !== null ? symbolTable[arg.name] : structure;\n\n if (Array.isArray(value)) {\n accum = accum.concat(value);\n }\n else {\n accum.push(value);\n }\n }\n else {\n accum.push(this.executeExpression(arg, structure, symbolTable));\n }\n\n return accum;\n }, []);\n\n if (expression.name in this.functions) {\n return this.invokeFunction(expression.name, args);\n }\n\n this.addError(`Tried to access unbound symbol: ${expression.name}`);\n return FAILURE_VALUE;\n }\n\n case \"array\": {\n const results = [];\n\n for (const element of expression.value) {\n if (element.type === \"assignment\") {\n this.executeExpression(element, structure, symbolTable);\n }\n else {\n const value = this.executeExpression(element, structure, symbolTable);\n\n if (value === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n\n results.push(value);\n }\n }\n\n return results;\n }\n\n case \"boolean\":\n case \"null\":\n case \"number\":\n case \"string\":\n case \"undefined\":\n return expression.value;\n\n case \"object\":\n return this.executeObjectExpression(expression, structure, symbolTable);\n\n default:\n this.addError(`Unrecognized expression type: '${expression.type}'`);\n return FAILURE_VALUE;\n }\n }\n\n /**\n * Execute an object pattern\n *\n * @param {Object} pattern\n * @param {*} structure\n * @param {Object} symbolTable\n * @returns {*}\n */\n executeObjectExpression(pattern, structure, symbolTable) {\n const objectSymbolTable = Object.create(symbolTable);\n const result = {};\n\n for (const element of pattern.value) {\n switch (element.type) {\n case \"property\": {\n const name = this.executeExpression(element.name, structure, objectSymbolTable);\n\n if (name === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n else if (typeof name !== \"string\") {\n this.addError(`Property names must be string types: ${name}`);\n return FAILURE_VALUE;\n }\n\n const value = element.value !== null\n ? this.executeExpression(element.value, structure, objectSymbolTable)\n : symbolTable[name];\n\n if (value === FAILURE_VALUE) {\n this.addError(`Unable to evaluate value for property ${name}`);\n return FAILURE_VALUE;\n }\n\n result[name] = value;\n break;\n }\n\n case \"assignment\": {\n const value = this.executeExpression(element, structure, objectSymbolTable);\n\n if (value === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n break;\n }\n\n default:\n this.addError(`Unrecognized object expression element type: ${element.type}`);\n return FAILURE_VALUE;\n }\n }\n\n return result;\n }\n\n /*\n * Acquire the value of a type pattern from the specified structure. Any named entities will be populated in the\n * specified symbolTable\n *\n * @param {object} pattern\n * @param {*} structure\n * @param {object} symbolTable\n * @returns {*}\n */\n executePattern(pattern, structure, symbolTable) {\n switch (pattern.patternType) {\n case \"any\":\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n\n case \"array\":\n if (Array.isArray(structure)) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n\n return FAILURE_VALUE;\n\n case \"array-pattern\": {\n const result = this.executeArrayPattern(pattern, structure, symbolTable);\n\n return result === FAILURE_VALUE ? FAILURE_VALUE : symbolTable;\n }\n\n case \"boolean\":\n if (typeof structure === \"boolean\") {\n if (pattern.value === null || pattern.value === structure) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n }\n\n return FAILURE_VALUE;\n\n case \"null\":\n if (structure === null) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n\n return FAILURE_VALUE;\n\n case \"number\":\n if (typeof structure === \"number\") {\n if (pattern.value === null || pattern.value === structure) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n }\n\n return FAILURE_VALUE;\n\n case \"object\":\n if (isObject(structure)) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n\n return FAILURE_VALUE;\n\n case \"object-pattern\": {\n if (isObject(structure) === false) {\n return FAILURE_VALUE;\n }\n\n const result = {};\n\n for (const property of pattern.value) {\n const {name, pattern: propertyPattern, assignTo} = property;\n\n if (name in structure) {\n const value = this.executePattern(propertyPattern, structure[name], symbolTable);\n\n if (value === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n\n this.assign(symbolTable, assignTo, structure[name]);\n this.assign(result, assignTo, value);\n }\n else {\n return FAILURE_VALUE;\n }\n }\n\n this.assign(symbolTable, pattern.assignTo, structure);\n return result;\n }\n\n case \"reference\":\n if (pattern.value in this.patterns) {\n const referencedPattern = this.patterns[pattern.value];\n const result = this.executePattern(referencedPattern, structure, symbolTable);\n\n if (result !== FAILURE_VALUE) {\n this.assign(symbolTable, pattern.assignTo, result);\n }\n\n return result;\n }\n\n return FAILURE_VALUE;\n\n case \"string\":\n if (typeof structure === \"string\") {\n if (pattern.value === null || pattern.value === structure) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n }\n\n return FAILURE_VALUE;\n\n case \"undefined\":\n // NOTE: Our current failure value is undefined, so this will be treated as an error. I can change\n // FAILURE_VALUE to be a sigil. I'll just have to be careful to return undefined at the top-most level.\n // I'm leaving this for now as this is probably not going to be used much\n if (structure === undefined) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n\n return FAILURE_VALUE;\n\n default:\n throw new TypeError(`unrecognized pattern type: '${pattern.type}'`);\n }\n }\n\n /*\n * Execute an array pattern\n *\n * @param {Object} pattern\n * @param {*} structure\n * @param {Object} symbolTable\n * @returns {*}\n */\n executeArrayPattern(pattern, structure, symbolTable) {\n if (Array.isArray(structure) === false) {\n return FAILURE_VALUE;\n }\n\n let result = [];\n let index = 0;\n\n for (const element of pattern.value) {\n const results = this.executeArrayPatternElement(element, index, structure, symbolTable);\n\n if (results === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n\n result = result.concat(results);\n index += results.length;\n }\n\n if (index === structure.length) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return result;\n }\n\n return FAILURE_VALUE;\n }\n\n /*\n * Execute an element from an array pattern\n *\n * @param {Object} element\n * @param {number} index\n * @param {*} structure\n * @param {Object} symbolTable\n * @returns {Array|undefined}\n */\n executeArrayPatternElement(element, index, structure, symbolTable) {\n let result = [];\n\n switch (element.type) {\n case \"element\": {\n const results = this.executeArrayElementPattern(element, index, structure, symbolTable);\n\n if (results === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n\n result = result.concat(results);\n index += results.length;\n break;\n }\n\n case \"element-group\": {\n const results = this.executeArrayElementGroupPattern(element, index, structure, symbolTable);\n\n if (results === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n\n result = result.concat(results);\n index += results.length;\n break;\n }\n\n default:\n this.addError(`Unrecognized array pattern element type: '${element.type}'`);\n return FAILURE_VALUE;\n }\n\n return result;\n }\n\n /*\n * Execute array element pattern\n *\n * @param {Object} element\n * @param {number} index\n * @param {*} structure\n * @param {Object} symbolTable\n * @returns {Array|undefined}\n */\n executeArrayElementPattern(element, index, structure, symbolTable) {\n const {pattern, range: {start, stop}} = element;\n const result = [];\n\n for (let i = 0; i < stop; i++) {\n const actualIndex = index + i;\n\n // treat out-of-bounds like a failure\n const value = (actualIndex < structure.length)\n ? this.executePattern(pattern, structure[actualIndex], symbolTable)\n : FAILURE_VALUE;\n\n // if we processed enough, continue, else failure\n if (value === FAILURE_VALUE) {\n if (i >= start) {\n break;\n }\n\n return FAILURE_VALUE;\n }\n\n // save result\n if (stop > 1) {\n this.pushAssign(symbolTable, element.assignTo, value);\n }\n else {\n this.assign(symbolTable, element.assignTo, value);\n }\n result.push(value);\n }\n\n return result;\n }\n\n /*\n * Execute array element group pattern\n *\n * @param {Object} element\n * @param {number} index\n * @param {*} structure\n * @param {Object} symbolTable\n * @returns {Array|undefined}\n */\n executeArrayElementGroupPattern(group, index, structure, symbolTable) {\n const {elements, range: {start, stop}} = group;\n let result = [];\n\n for (let i = 0; i < stop; i++) {\n let groupResults = [];\n\n // all elements must be successful\n for (const element of elements) {\n const elementSymbolTable = Object.create(symbolTable);\n const results = this.executeArrayPatternElement(element, index, structure, elementSymbolTable);\n\n if (results === FAILURE_VALUE) {\n groupResults = FAILURE_VALUE;\n break;\n }\n\n // copy result into main symbol table\n if (element.assignTo !== null && element.assignTo !== undefined && element.assignTo in elementSymbolTable) {\n if (stop > 1) {\n // this.pushAssign(symbolTable, element.assignTo, results);\n this.pushAssign(symbolTable, element.assignTo, elementSymbolTable[element.assignTo]);\n }\n else {\n // this.assign(symbolTable, element.assignTo, results);\n this.assign(symbolTable, element.assignTo, elementSymbolTable[element.assignTo]);\n }\n }\n\n // collect everything that matched and advance to the next item to match\n result = result.concat(results);\n index += results.length;\n\n // collect what we've matched in this group so far\n groupResults = groupResults.concat(results);\n }\n\n if (groupResults === FAILURE_VALUE) {\n // make sure we met our lower bounds criteria\n if (i >= start) {\n // if we didn't process any elements, then we haven't created arrays in the symbol table for this\n // group or its elements.\n if (i === 0) {\n this.assign(symbolTable, group.assignTo, []);\n\n for (const element of elements) {\n this.assign(symbolTable, element.assignTo, []);\n }\n }\n\n return result;\n }\n\n return FAILURE_VALUE;\n }\n\n if (stop > 1) {\n this.pushAssign(symbolTable, group.assignTo, groupResults);\n }\n else {\n this.assign(symbolTable, group.assignTo, groupResults);\n }\n }\n\n return result;\n }\n\n /*\n * Invoke a user-defined method and return its value\n *\n * @param {string} type\n * @param {Array} args\n * @returns {*}\n */\n invokeFunction(type, args) {\n if (type in this.functions) {\n return this.functions[type](...args);\n }\n\n return FAILURE_VALUE;\n }\n\n /**\n * Add a symbol/value to the symbol table, warning if an overwrite is occurring\n *\n * @param {Object} symbolTable\n * @param {string} name\n * @param {*} value\n */\n assign(symbolTable, name, value) {\n if (name !== null && name !== undefined) {\n /* eslint-disable-next-line no-prototype-builtins */\n if (symbolTable.hasOwnProperty(name)) {\n this.addWarning(`Overwriting ${name} with value: ${value}`);\n }\n\n symbolTable[name] = value;\n }\n }\n\n /**\n * Push a value onto the array at the name in the symbol table. If the name is not in the table already, an array will\n * be created and then the value will be pushed to it. This is used for grouped elements.\n *\n * @param {Object} symbolTable\n * @param {string} name\n * @param {*} value\n */\n pushAssign(symbolTable, name, value) {\n if (name !== null && name !== undefined) {\n /* eslint-disable-next-line no-prototype-builtins */\n const items = symbolTable.hasOwnProperty(name)\n ? symbolTable[name]\n : [];\n\n if (Array.isArray(items)) {\n items.push(value);\n\n symbolTable[name] = items;\n }\n else {\n this.addWarning(`Unable to push to ${name} because it is not an array: ${items}`);\n }\n }\n }\n}\n","/**\n * PathLexeme.js\n *\n * @copyright 2002, 2013 Kevin Lindsey\n * @module PathLexeme\n */\n\n/**\n * PathLexeme\n */\nclass PathLexeme {\n /**\n * PathLexeme\n *\n * @param {number} type\n * @param {string} text\n */\n constructor(type, text) {\n this.type = type;\n this.text = text;\n }\n\n /**\n * Determine if this lexeme is of the given type\n *\n * @param {number} type\n * @returns {boolean}\n */\n typeis(type) {\n return this.type === type;\n }\n}\n\n/*\n * token type enumerations\n */\nPathLexeme.UNDEFINED = 0;\nPathLexeme.COMMAND = 1;\nPathLexeme.NUMBER = 2;\nPathLexeme.EOD = 3;\n\nexport default PathLexeme;\n","/**\n * PathLexer.js\n *\n * @copyright 2003, 2013 Kevin Lindsey\n * @module PathLexer\n */\n\nimport PathLexeme from \"./PathLexeme.js\";\n\n/**\n * Create a new instance of PathLexer\n */\nclass PathLexer {\n /**\n * @param {string} [pathData]\n */\n constructor(pathData) {\n if (pathData === null || pathData === undefined) {\n pathData = \"\";\n }\n\n this.setPathData(pathData);\n }\n\n /**\n * setPathData\n *\n * @param {string} pathData\n */\n setPathData(pathData) {\n if (typeof pathData !== \"string\") {\n throw new TypeError(\"The first parameter must be a string\");\n }\n\n this._pathData = pathData;\n }\n\n /**\n * getNextToken\n *\n * @returns {PathLexeme}\n */\n getNextToken() {\n let result = null;\n let d = this._pathData;\n\n while (result === null) {\n if (d === null || d === \"\") {\n result = new PathLexeme(PathLexeme.EOD, \"\");\n }\n else if (d.match(/^([ \\t\\r\\n,]+)/)) {\n d = d.substr(RegExp.$1.length);\n }\n else if (d.match(/^([AaCcHhLlMmQqSsTtVvZz])/)) {\n result = new PathLexeme(PathLexeme.COMMAND, RegExp.$1);\n d = d.substr(RegExp.$1.length);\n }\n /* eslint-disable-next-line unicorn/no-unsafe-regex */\n else if (d.match(/^(([-+]?\\d+(\\.\\d*)?|[-+]?\\.\\d+)([eE][-+]?\\d+)?)/)) {\n result = new PathLexeme(PathLexeme.NUMBER, RegExp.$1);\n d = d.substr(RegExp.$1.length);\n }\n else {\n throw new SyntaxError(`Unrecognized path data: ${d}`);\n }\n }\n\n this._pathData = d;\n\n return result;\n }\n}\n\nexport default PathLexer;\n","/**\n * PathParser.js\n *\n * @copyright 2003, 2017 Kevin Lindsey\n * @module PathParser\n */\n\nimport PathLexer from \"./PathLexer.js\";\nimport PathLexeme from \"./PathLexeme.js\";\n\nconst BOP = \"BOP\";\n\n/**\n * PathParser\n */\nclass PathParser {\n /**\n * constructor\n */\n constructor() {\n this._lexer = new PathLexer();\n this._handler = null;\n }\n\n /**\n * parseData\n *\n * @param {string} pathData\n * @throws {Error}\n */\n parseData(pathData) {\n if (typeof pathData !== \"string\") {\n throw new TypeError(`The first parameter must be a string: ${pathData}`);\n }\n\n // begin parse\n if (this._handler !== null && typeof this._handler.beginParse === \"function\") {\n this._handler.beginParse();\n }\n\n // pass the pathData to the lexer\n const lexer = this._lexer;\n\n lexer.setPathData(pathData);\n\n // set mode to signify new path - Beginning Of Path\n let mode = BOP;\n\n // Process all tokens\n let lastToken = null;\n let token = lexer.getNextToken();\n\n while (token.typeis(PathLexeme.EOD) === false) {\n let parameterCount;\n const params = [];\n\n // process current token\n switch (token.type) {\n case PathLexeme.COMMAND:\n if (mode === BOP && token.text !== \"M\" && token.text !== \"m\") {\n throw new SyntaxError(`New paths must begin with a moveto command. Found '${token.text}'`);\n }\n\n // Set new parsing mode\n mode = token.text;\n\n // Get count of numbers that must follow this command\n parameterCount = PathParser.PARAMCOUNT[token.text.toUpperCase()];\n\n // Advance past command token\n token = lexer.getNextToken();\n break;\n\n case PathLexeme.NUMBER:\n // Most commands allow you to keep repeating parameters\n // without specifying the command again. We just assume\n // that is the case and do nothing since the mode remains\n // the same\n\n if (mode === BOP) {\n throw new SyntaxError(`New paths must begin with a moveto command. Found '${token.text}'`);\n }\n else {\n parameterCount = PathParser.PARAMCOUNT[mode.toUpperCase()];\n }\n break;\n\n default:\n throw new SyntaxError(`Unrecognized command type: ${token.type}`);\n }\n\n // Get parameters\n for (let i = 0; i < parameterCount; i++) {\n switch (token.type) {\n case PathLexeme.COMMAND:\n throw new SyntaxError(`Parameter must be a number. Found '${token.text}'`);\n\n case PathLexeme.NUMBER:\n // convert current parameter to a float and add to\n // parameter list\n params[i] = parseFloat(token.text);\n break;\n\n case PathLexeme.EOD:\n throw new SyntaxError(\"Unexpected end of string\");\n\n default:\n throw new SyntaxError(`Unrecognized parameter type. Found type '${token.type}'`);\n }\n\n token = lexer.getNextToken();\n }\n\n // fire handler\n if (this._handler !== null) {\n const handler = this._handler;\n const methodName = PathParser.METHODNAME[mode];\n\n // convert types for arcs\n if (mode === \"a\" || mode === \"A\") {\n params[3] = params[3] !== 0;\n params[4] = params[4] !== 0;\n }\n\n if (handler !== null && typeof handler[methodName] === \"function\") {\n handler[methodName](...params);\n }\n }\n\n // Lineto's follow moveto when no command follows moveto params. Go\n // ahead and set the mode just in case no command follows the moveto\n // command\n switch (mode) {\n case \"M\":\n mode = \"L\";\n break;\n case \"m\":\n mode = \"l\";\n break;\n case \"Z\":\n case \"z\":\n mode = \"BOP\";\n break;\n default:\n // ignore for now\n }\n\n if (token === lastToken) {\n throw new SyntaxError(`Parser stalled on '${token.text}'`);\n }\n else {\n lastToken = token;\n }\n }\n\n // end parse\n if (this._handler !== null && typeof this._handler.endParse === \"function\") {\n this._handler.endParse();\n }\n }\n\n /**\n * setHandler\n *\n * @param {Object} handler\n */\n setHandler(handler) {\n this._handler = handler;\n }\n}\n\n/*\n * class constants\n */\nPathParser.PARAMCOUNT = {\n A: 7,\n C: 6,\n H: 1,\n L: 2,\n M: 2,\n Q: 4,\n S: 4,\n T: 2,\n V: 1,\n Z: 0\n};\nPathParser.METHODNAME = {\n A: \"arcAbs\",\n a: \"arcRel\",\n C: \"curvetoCubicAbs\",\n c: \"curvetoCubicRel\",\n H: \"linetoHorizontalAbs\",\n h: \"linetoHorizontalRel\",\n L: \"linetoAbs\",\n l: \"linetoRel\",\n M: \"movetoAbs\",\n m: \"movetoRel\",\n Q: \"curvetoQuadraticAbs\",\n q: \"curvetoQuadraticRel\",\n S: \"curvetoCubicSmoothAbs\",\n s: \"curvetoCubicSmoothRel\",\n T: \"curvetoQuadraticSmoothAbs\",\n t: \"curvetoQuadraticSmoothRel\",\n V: \"linetoVerticalAbs\",\n v: \"linetoVerticalRel\",\n Z: \"closePath\",\n z: \"closePath\"\n};\n\nexport default PathParser;\n","/**\n * PathHandler.js\n *\n * @copyright 2017 Kevin Lindsey\n */\n\nimport {Point2D, Vector2D} from \"kld-affine\";\n\nconst TWO_PI = 2.0 * Math.PI;\n\n/**\n * normalizeAngle\n *\n * @param {number} radians\n * @returns {number}\n */\nfunction normalizeAngle(radians) {\n const normal = radians % TWO_PI;\n\n return normal < 0.0 ? normal + TWO_PI : normal;\n}\n\n/**\n* @typedef {GenericArray} EllipticalArc\n* @property {number} 0 x\n* @property {number} 1 y\n* @property {number} 2 rx\n* @property {number} 3 ry\n* @property {number} 4 theta\n* @property {number} 5 thetaWithDelta\n*/\n\n/**\n * Based on the SVG 1.1 specification, Appendix F: Implementation Requirements,\n * Section F.6 \"Elliptical arc implementation notes\"\n * {@see https://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes}\n *\n * @param {module:kld-affine.Point2D} startPoint\n * @param {module:kld-affine.Point2D} endPoint\n * @param {number} rx\n * @param {number} ry\n * @param {number} angle\n * @param {boolean} arcFlag\n * @param {boolean} sweepFlag\n * @returns {EllipticalArc}\n */\nfunction getArcParameters(startPoint, endPoint, rx, ry, angle, arcFlag, sweepFlag) {\n angle = angle * Math.PI / 180;\n\n const c = Math.cos(angle);\n const s = Math.sin(angle);\n const TOLERANCE = 1e-6;\n\n // Section (F.6.5.1)\n const halfDiff = startPoint.subtract(endPoint).multiply(0.5);\n const x1p = halfDiff.x * c + halfDiff.y * s;\n const y1p = halfDiff.x * -s + halfDiff.y * c;\n\n // Section (F.6.6.1)\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n\n // Section (F.6.6.2)\n const x1px1p = x1p * x1p;\n const y1py1p = y1p * y1p;\n const lambda = (x1px1p / (rx * rx)) + (y1py1p / (ry * ry));\n\n // Section (F.6.6.3)\n if (lambda > 1) {\n const factor = Math.sqrt(lambda);\n\n rx *= factor;\n ry *= factor;\n }\n\n // Section (F.6.5.2)\n const rxrx = rx * rx;\n const ryry = ry * ry;\n const rxy1 = rxrx * y1py1p;\n const ryx1 = ryry * x1px1p;\n\n let factor = (rxrx * ryry - rxy1 - ryx1) / (rxy1 + ryx1);\n\n if (Math.abs(factor) < TOLERANCE) {\n factor = 0;\n }\n\n let sq = Math.sqrt(factor);\n\n if (arcFlag === sweepFlag) {\n sq = -sq;\n }\n\n // Section (F.6.5.3)\n const mid = startPoint.add(endPoint).multiply(0.5);\n const cxp = sq * rx * y1p / ry;\n const cyp = sq * -ry * x1p / rx;\n\n // Section (F.6.5.5 - F.6.5.6)\n const xcr1 = (x1p - cxp) / rx;\n const xcr2 = (x1p + cxp) / rx;\n const ycr1 = (y1p - cyp) / ry;\n const ycr2 = (y1p + cyp) / ry;\n\n const theta1 = new Vector2D(1, 0).angleBetween(new Vector2D(xcr1, ycr1));\n let deltaTheta = normalizeAngle(new Vector2D(xcr1, ycr1).angleBetween(new Vector2D(-xcr2, -ycr2)));\n\n if (sweepFlag === false) {\n deltaTheta -= TWO_PI;\n }\n\n return [\n cxp * c - cyp * s + mid.x,\n cxp * s + cyp * c + mid.y,\n rx,\n ry,\n theta1,\n theta1 + deltaTheta\n ];\n}\n\n/**\n * PathHandler\n */\nclass PathHandler {\n /**\n * PathHandler\n *\n * @param {ShapeInfo} shapeCreator\n */\n constructor(shapeCreator) {\n this.shapeCreator = shapeCreator;\n this.shapes = [];\n this.firstX = null;\n this.firstY = null;\n this.lastX = null;\n this.lastY = null;\n this.lastCommand = null;\n }\n\n /**\n * beginParse\n */\n beginParse() {\n // zero out the sub-path array\n this.shapes = [];\n\n // clear firstX, firstY, lastX, and lastY\n this.firstX = null;\n this.firstY = null;\n this.lastX = null;\n this.lastY = null;\n\n // need to remember last command type to determine how to handle the\n // relative Bezier commands\n this.lastCommand = null;\n }\n\n /**\n * addShape\n *\n * @param {ShapeInfo} shape\n */\n addShape(shape) {\n this.shapes.push(shape);\n }\n\n /**\n * arcAbs - A\n *\n * @param {number} rx\n * @param {number} ry\n * @param {number} xAxisRotation\n * @param {boolean} arcFlag\n * @param {boolean} sweepFlag\n * @param {number} x\n * @param {number} y\n */\n arcAbs(rx, ry, xAxisRotation, arcFlag, sweepFlag, x, y) {\n if (rx === 0 || ry === 0) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n x, y\n ));\n }\n else {\n const arcParameters = getArcParameters(\n new Point2D(this.lastX, this.lastY),\n new Point2D(x, y),\n rx, ry,\n xAxisRotation,\n arcFlag, sweepFlag\n );\n\n this.addShape(this.shapeCreator.arc(...arcParameters));\n }\n\n this.lastCommand = \"A\";\n this.lastX = x;\n this.lastY = y;\n }\n\n /**\n * arcRel - a\n *\n * @param {number} rx\n * @param {number} ry\n * @param {number} xAxisRotation\n * @param {boolean} arcFlag\n * @param {boolean} sweepFlag\n * @param {number} x\n * @param {number} y\n */\n arcRel(rx, ry, xAxisRotation, arcFlag, sweepFlag, x, y) {\n if (rx === 0 || ry === 0) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n this.lastX + x, this.lastY + y\n ));\n }\n else {\n const arcParameters = getArcParameters(\n new Point2D(this.lastX, this.lastY),\n new Point2D(this.lastX + x, this.lastY + y),\n rx, ry,\n xAxisRotation,\n arcFlag, sweepFlag\n );\n\n this.addShape(this.shapeCreator.arc(...arcParameters));\n }\n\n this.lastCommand = \"a\";\n this.lastX += x;\n this.lastY += y;\n }\n\n /**\n * curvetoCubicAbs - C\n *\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x\n * @param {number} y\n */\n curvetoCubicAbs(x1, y1, x2, y2, x, y) {\n this.addShape(this.shapeCreator.cubicBezier(\n this.lastX, this.lastY,\n x1, y1,\n x2, y2,\n x, y\n ));\n\n this.lastX = x;\n this.lastY = y;\n this.lastCommand = \"C\";\n }\n\n /**\n * curvetoCubicRel - c\n *\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x\n * @param {number} y\n */\n curvetoCubicRel(x1, y1, x2, y2, x, y) {\n this.addShape(this.shapeCreator.cubicBezier(\n this.lastX, this.lastY,\n this.lastX + x1, this.lastY + y1,\n this.lastX + x2, this.lastY + y2,\n this.lastX + x, this.lastY + y\n ));\n\n this.lastX += x;\n this.lastY += y;\n this.lastCommand = \"c\";\n }\n\n /**\n * linetoHorizontalAbs - H\n *\n * @param {number} x\n */\n linetoHorizontalAbs(x) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n x, this.lastY\n ));\n\n this.lastX = x;\n this.lastCommand = \"H\";\n }\n\n /**\n * linetoHorizontalRel - h\n *\n * @param {number} x\n */\n linetoHorizontalRel(x) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n this.lastX + x, this.lastY\n ));\n\n this.lastX += x;\n this.lastCommand = \"h\";\n }\n\n /**\n * linetoAbs - L\n *\n * @param {number} x\n * @param {number} y\n */\n linetoAbs(x, y) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n x, y\n ));\n\n this.lastX = x;\n this.lastY = y;\n this.lastCommand = \"L\";\n }\n\n /**\n * linetoRel - l\n *\n * @param {number} x\n * @param {number} y\n */\n linetoRel(x, y) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n this.lastX + x, this.lastY + y\n ));\n\n this.lastX += x;\n this.lastY += y;\n this.lastCommand = \"l\";\n }\n\n /**\n * movetoAbs - M\n *\n * @param {number} x\n * @param {number} y\n */\n movetoAbs(x, y) {\n this.firstX = x;\n this.firstY = y;\n this.lastX = x;\n this.lastY = y;\n this.lastCommand = \"M\";\n }\n\n /**\n * movetoRel - m\n *\n * @param {number} x\n * @param {number} y\n */\n movetoRel(x, y) {\n this.firstX += x;\n this.firstY += y;\n this.lastX += x;\n this.lastY += y;\n this.lastCommand = \"m\";\n }\n\n /**\n * curvetoQuadraticAbs - Q\n *\n * @param {number} x1\n * @param {number} y1\n * @param {number} x\n * @param {number} y\n */\n curvetoQuadraticAbs(x1, y1, x, y) {\n this.addShape(this.shapeCreator.quadraticBezier(\n this.lastX, this.lastY,\n x1, y1,\n x, y\n ));\n\n this.lastX = x;\n this.lastY = y;\n this.lastCommand = \"Q\";\n }\n\n /**\n * curvetoQuadraticRel - q\n *\n * @param {number} x1\n * @param {number} y1\n * @param {number} x\n * @param {number} y\n */\n curvetoQuadraticRel(x1, y1, x, y) {\n this.addShape(this.shapeCreator.quadraticBezier(\n this.lastX, this.lastY,\n this.lastX + x1, this.lastY + y1,\n this.lastX + x, this.lastY + y\n ));\n\n this.lastX += x;\n this.lastY += y;\n this.lastCommand = \"q\";\n }\n\n /**\n * curvetoCubicSmoothAbs - S\n *\n * @param {number} x2\n * @param {number} y2\n * @param {number} x\n * @param {number} y\n */\n curvetoCubicSmoothAbs(x2, y2, x, y) {\n let controlX, controlY;\n\n if (this.lastCommand.match(/^[SsCc]$/)) {\n const secondToLast = this.shapes[this.shapes.length - 1].args[2];\n\n controlX = 2 * this.lastX - secondToLast.x;\n controlY = 2 * this.lastY - secondToLast.y;\n }\n else {\n controlX = this.lastX;\n controlY = this.lastY;\n }\n\n this.addShape(this.shapeCreator.cubicBezier(\n this.lastX, this.lastY,\n controlX, controlY,\n x2, y2,\n x, y\n ));\n\n this.lastX = x;\n this.lastY = y;\n this.lastCommand = \"S\";\n }\n\n /**\n * curvetoCubicSmoothRel - s\n *\n * @param {number} x2\n * @param {number} y2\n * @param {number} x\n * @param {number} y\n */\n curvetoCubicSmoothRel(x2, y2, x, y) {\n let controlX, controlY;\n\n if (this.lastCommand.match(/^[SsCc]$/)) {\n const secondToLast = this.shapes[this.shapes.length - 1].args[2];\n\n controlX = 2 * this.lastX - secondToLast.x;\n controlY = 2 * this.lastY - secondToLast.y;\n }\n else {\n controlX = this.lastX;\n controlY = this.lastY;\n }\n\n this.addShape(this.shapeCreator.cubicBezier(\n this.lastX, this.lastY,\n controlX, controlY,\n this.lastX + x2, this.lastY + y2,\n this.lastX + x, this.lastY + y\n ));\n\n this.lastX += x;\n this.lastY += y;\n this.lastCommand = \"s\";\n }\n\n /**\n * curvetoQuadraticSmoothAbs - T\n *\n * @param {number} x\n * @param {number} y\n */\n curvetoQuadraticSmoothAbs(x, y) {\n let controlX, controlY;\n\n if (this.lastCommand.match(/^[QqTt]$/)) {\n const secondToLast = this.shapes[this.shapes.length - 1].args[1];\n\n controlX = 2 * this.lastX - secondToLast.x;\n controlY = 2 * this.lastY - secondToLast.y;\n }\n else {\n controlX = this.lastX;\n controlY = this.lastY;\n }\n\n this.addShape(this.shapeCreator.quadraticBezier(\n this.lastX, this.lastY,\n controlX, controlY,\n x, y\n ));\n\n this.lastX = x;\n this.lastY = y;\n this.lastCommand = \"T\";\n }\n\n /**\n * curvetoQuadraticSmoothRel - t\n *\n * @param {number} x\n * @param {number} y\n */\n curvetoQuadraticSmoothRel(x, y) {\n let controlX, controlY;\n\n if (this.lastCommand.match(/^[QqTt]$/)) {\n const secondToLast = this.shapes[this.shapes.length - 1].args[1];\n\n controlX = 2 * this.lastX - secondToLast.x;\n controlY = 2 * this.lastY - secondToLast.y;\n }\n else {\n controlX = this.lastX;\n controlY = this.lastY;\n }\n\n this.addShape(this.shapeCreator.quadraticBezier(\n this.lastX, this.lastY,\n controlX, controlY,\n this.lastX + x, this.lastY + y\n ));\n\n this.lastX += x;\n this.lastY += y;\n this.lastCommand = \"t\";\n }\n\n /**\n * linetoVerticalAbs - V\n *\n * @param {number} y\n */\n linetoVerticalAbs(y) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n this.lastX, y\n ));\n\n this.lastY = y;\n\n this.lastCommand = \"V\";\n }\n\n /**\n * linetoVerticalRel - v\n *\n * @param {number} y\n */\n linetoVerticalRel(y) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n this.lastX, this.lastY + y\n ));\n\n this.lastY += y;\n\n this.lastCommand = \"v\";\n }\n\n /**\n * closePath - z or Z\n */\n closePath() {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n this.firstX, this.firstY\n ));\n\n this.lastX = this.firstX;\n this.lastY = this.firstY;\n this.lastCommand = \"z\";\n }\n}\n\nexport default PathHandler;\n","/**\n * ShapeInfo.js\n * @copyright 2002, 2017 Kevin Lindsey\n */\n\nimport {Point2D} from \"kld-affine\";\nimport {Transformer, FAILURE_VALUE} from \"gp-data-transformer\";\nimport {PathParser} from \"kld-path-parser\";\nimport PathHandler from \"./PathHandler.js\";\nimport transformSource from \"./TransformSource.js\";\n\nconst degree90 = Math.PI * 0.5;\n\n/**\n * ShapeInfo\n * @memberof module:kld-intersections\n */\nexport default class ShapeInfo {\n /**\n * @param {string} name\n * @param {GenericArray} args\n * @returns {module:kld-intersections.ShapeInfo}\n */\n constructor(name, args) {\n this.name = name;\n this.args = args;\n }\n\n static arc(...args) {\n return create(ShapeInfo.ARC, args, [\"center\", \"radiusX\", \"radiusY\", \"startRadians\", \"endRadians\"]);\n }\n\n static quadraticBezier(...args) {\n return create(ShapeInfo.QUADRATIC_BEZIER, args, [\"p1\", \"p2\", \"p3\"]);\n }\n\n static cubicBezier(...args) {\n return create(ShapeInfo.CUBIC_BEZIER, args, [\"p1\", \"p2\", \"p3\", \"p4\"]);\n }\n\n static circle(...args) {\n return create(ShapeInfo.CIRCLE, args, [\"center\", \"radius\"]);\n }\n\n static ellipse(...args) {\n return create(ShapeInfo.ELLIPSE, args, [\"center\", \"radiusX\", \"radiusY\"]);\n }\n\n static line(...args) {\n return create(ShapeInfo.LINE, args, [\"p1\", \"p2\"]);\n }\n\n static path(...args) {\n return create(ShapeInfo.PATH, args, [\"segments\"]);\n }\n\n static polygon(...args) {\n return create(ShapeInfo.POLYGON, args, [\"points\"]);\n }\n\n static polyline(...args) {\n return create(ShapeInfo.POLYLINE, args, [\"points\"]);\n }\n\n static rectangle(...args) {\n const result = create(ShapeInfo.RECTANGLE, args, [\"topLeft\", \"bottomRight\", \"rx\", \"ry\"]);\n\n let ry = result.args.pop();\n let rx = result.args.pop();\n\n rx = rx === undefined ? 0 : rx;\n ry = ry === undefined ? 0 : ry;\n\n if (rx === 0 && ry === 0) {\n return result;\n }\n\n const {x: p1x, y: p1y} = result.args[0];\n const {x: p2x, y: p2y} = result.args[1];\n const width = p2x - p1x;\n const height = p2y - p1y;\n\n if (rx === 0) {\n rx = ry;\n }\n if (ry === 0) {\n ry = rx;\n }\n if (rx > width * 0.5) {\n rx = width * 0.5;\n }\n if (ry > height * 0.5) {\n ry = height * 0.5;\n }\n\n const x0 = p1x;\n const y0 = p1y;\n const x1 = p1x + rx;\n const y1 = p1y + ry;\n const x2 = p2x - rx;\n const y2 = p2y - ry;\n const x3 = p2x;\n const y3 = p2y;\n\n const segments = [\n ShapeInfo.arc(x1, y1, rx, ry, 2 * degree90, 3 * degree90),\n ShapeInfo.line(x1, y0, x2, y0),\n ShapeInfo.arc(x2, y1, rx, ry, 3 * degree90, 4 * degree90),\n ShapeInfo.line(x3, y1, x3, y2),\n ShapeInfo.arc(x2, y2, rx, ry, 0, degree90),\n ShapeInfo.line(x2, y3, x1, y3),\n ShapeInfo.arc(x1, y2, rx, ry, degree90, 2 * degree90),\n ShapeInfo.line(x0, y2, x0, y1)\n ];\n\n return new ShapeInfo(ShapeInfo.PATH, segments);\n }\n}\n\n/**\n * Create a shape\n *\n * @param {string} type\n * @param {GenericArray} object\n * @param {Array} properties\n * @returns {ShapeInfo}\n */\nfunction create(type, object, properties) {\n let transformType;\n\n if (object.length === 1) {\n object = object[0];\n\n transformType = Array.isArray(object) || typeof object === \"string\"\n ? type + \"Args\"\n : type;\n }\n else {\n transformType = type + \"Args\";\n }\n\n // normalize the data\n const data = transformer.execute(transformType, object);\n\n if (data === FAILURE_VALUE) {\n // for (const message of transformer.messages) {\n // console.log(message);\n // }\n\n throw new TypeError(`${type} is not in a recognizable format: ${JSON.stringify(object)}`);\n }\n\n // pull out the arguments\n const args = properties.length === 1\n ? data[properties[0]]\n : properties.map(name => data[name]);\n\n // return a new ShapeInfo\n return new ShapeInfo(type, args);\n}\n\n// define shape name constants\nShapeInfo.ARC = \"Arc\";\nShapeInfo.QUADRATIC_BEZIER = \"Bezier2\";\nShapeInfo.CUBIC_BEZIER = \"Bezier3\";\nShapeInfo.CIRCLE = \"Circle\";\nShapeInfo.ELLIPSE = \"Ellipse\";\nShapeInfo.LINE = \"Line\";\nShapeInfo.PATH = \"Path\";\nShapeInfo.POLYGON = \"Polygon\";\nShapeInfo.POLYLINE = \"Polyline\";\nShapeInfo.RECTANGLE = \"Rectangle\";\n\n// create shape argument normalizer\nconst transformer = new Transformer();\ntransformer.execute(transformSource);\n\n// attach custom generators\ntransformer.addFunction(\"Point2D\", (x, y) => new Point2D(x, y));\ntransformer.addFunction(\"PathData\", pathData => {\n const parser = new PathParser();\n const handler = new PathHandler(ShapeInfo);\n\n parser.setHandler(handler);\n parser.parseData(pathData);\n\n return handler.shapes;\n});\n","/* eslint-disable camelcase, no-labels */\n/**\n *\n * Intersection.js\n *\n * copyright 2002, 2013 Kevin Lindsey\n */\n\nimport {Point2D, Vector2D} from \"kld-affine\";\nimport {Polynomial} from \"kld-polynomial\";\nimport ShapeInfo from \"./ShapeInfo.js\";\n\nconst TWO_PI = 2.0 * Math.PI;\nconst UNIT_X = new Vector2D(1, 0);\n\n/**\n * @memberof module:kld-intersections.Intersection\n * @param {any} o\n * @returns {boolean}\n */\nfunction isNullish(o) {\n return o === null || o === undefined;\n}\n\n/**\n * bezout\n *\n * This code is based on MgcIntr2DElpElp.cpp written by David Eberly. His\n * code along with many other excellent examples are avaiable at his site:\n * http://www.magic-software.com\n *\n * @param {Array} e1\n * @param {Array} e2\n * @returns {external:Polynomial}\n */\nfunction bezout(e1, e2) {\n const AB = e1[0] * e2[1] - e2[0] * e1[1];\n const AC = e1[0] * e2[2] - e2[0] * e1[2];\n const AD = e1[0] * e2[3] - e2[0] * e1[3];\n const AE = e1[0] * e2[4] - e2[0] * e1[4];\n const AF = e1[0] * e2[5] - e2[0] * e1[5];\n const BC = e1[1] * e2[2] - e2[1] * e1[2];\n const BE = e1[1] * e2[4] - e2[1] * e1[4];\n const BF = e1[1] * e2[5] - e2[1] * e1[5];\n const CD = e1[2] * e2[3] - e2[2] * e1[3];\n const DE = e1[3] * e2[4] - e2[3] * e1[4];\n const DF = e1[3] * e2[5] - e2[3] * e1[5];\n const BFpDE = BF + DE;\n const BEmCD = BE - CD;\n\n return new Polynomial(\n AB * BC - AC * AC,\n AB * BEmCD + AD * BC - 2 * AC * AE,\n AB * BFpDE + AD * BEmCD - AE * AE - 2 * AC * AF,\n AB * DF + AD * BFpDE - 2 * AE * AF,\n AD * DF - AF * AF\n );\n}\n\n/**\n * normalizeAngle\n *\n * @param {number} radians\n * @returns {number}\n */\nfunction normalizeAngle(radians) {\n const normal = radians % TWO_PI;\n\n return normal < 0.0 ? normal + TWO_PI : normal;\n}\n\n/**\n * restrictPointsToArc\n *\n * @param {module:kld-intersections.Intersection} intersections\n * @param {module:kld-intersections.Point2D} center\n * @param {number} radiusX\n * @param {number} radiusY\n * @param {number} startRadians\n * @param {number} endRadians\n * @returns {module:kld-intersections.Intersection}\n */\nfunction restrictPointsToArc(intersections, center, radiusX, radiusY, startRadians, endRadians) {\n if (intersections.points.length === 0) {\n return intersections;\n }\n\n const result = new Intersection(\"No Intersection\");\n const startNormal = normalizeAngle(startRadians);\n let endNormal = normalizeAngle(endRadians);\n\n // Advance end angle one turn if it's lower than the start angle so our interval test will work correctly\n if (endNormal < startNormal) {\n endNormal += TWO_PI;\n }\n\n for (const p of intersections.points) {\n const a = normalizeAngle(UNIT_X.angleBetween(Vector2D.fromPoints(center, p)));\n\n if (startNormal <= a && a <= endNormal) {\n result.appendPoint(p);\n }\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n}\n\n/**\n * closePolygon\n * @memberof module:kld-intersections.Intersection\n * @param {Array} points\n * @returns {Array}\n */\nfunction closePolygon(points) {\n const copy = points.slice();\n\n copy.push(points[0]);\n\n return copy;\n}\n\n/**\n * Intersection\n * @memberof module:kld-intersections\n */\nclass Intersection {\n /**\n * @param {string} status\n * @returns {module:kld-intersections.Intersection}\n */\n constructor(status) {\n this.init(status);\n }\n\n\n /**\n * init\n *\n * @param {string} status\n */\n init(status) {\n this.status = status;\n this.points = [];\n }\n\n /**\n * intersect\n *\n * @param {module:kld-intersections.ShapeInfo} shape1\n * @param {module:kld-intersections.ShapeInfo} shape2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersect(shape1, shape2) {\n let result;\n\n if (!isNullish(shape1) && !isNullish(shape2)) {\n if (shape1.name === \"Path\") {\n result = Intersection.intersectPathShape(shape1, shape2);\n }\n else if (shape2.name === \"Path\") {\n result = Intersection.intersectPathShape(shape2, shape1);\n }\n else if (shape1.name === \"Arc\") {\n result = Intersection.intersectArcShape(shape1, shape2);\n }\n else if (shape2.name === \"Arc\") {\n result = Intersection.intersectArcShape(shape2, shape1);\n }\n else {\n let method;\n let args;\n\n if (shape1.name < shape2.name) {\n method = \"intersect\" + shape1.name + shape2.name;\n args = shape1.args.concat(shape2.args);\n }\n else {\n method = \"intersect\" + shape2.name + shape1.name;\n args = shape2.args.concat(shape1.args);\n }\n\n if (!(method in Intersection)) {\n throw new TypeError(\"Intersection not available: \" + method);\n }\n\n result = Intersection[method].apply(null, args);\n }\n }\n else {\n result = new Intersection(\"No Intersection\");\n }\n\n return result;\n }\n\n /**\n * intersectPathShape\n *\n * @param {module:kld-intersections.ShapeInfo} path\n * @param {module:kld-intersections.ShapeInfo} shape\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectPathShape(path, shape) {\n const result = new Intersection(\"No Intersection\");\n\n for (const segment of path.args) {\n const inter = Intersection.intersect(segment, shape);\n\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectArcShape\n *\n * @param {module:kld-intersections.ShapeInfo} arc\n * @param {module:kld-intersections.ShapeInfo} shape\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectArcShape(arc, shape) {\n const [center, radiusX, radiusY, startRadians, endRadians] = arc.args;\n const ellipse = new ShapeInfo(ShapeInfo.ELLIPSE, [center, radiusX, radiusY]);\n const ellipse_result = Intersection.intersect(ellipse, shape);\n\n // return ellipse_result;\n return restrictPointsToArc(ellipse_result, center, radiusX, radiusY, startRadians, endRadians);\n }\n\n /**\n * intersectBezier2Bezier2\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} a3\n * @param {module:kld-intersections.Point2D} b1\n * @param {module:kld-intersections.Point2D} b2\n * @param {module:kld-intersections.Point2D} b3\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Bezier2(a1, a2, a3, b1, b2, b3) {\n let a, b;\n const result = new Intersection(\"No Intersection\");\n\n a = a2.multiply(-2);\n const c12 = a1.add(a.add(a3));\n\n a = a1.multiply(-2);\n b = a2.multiply(2);\n const c11 = a.add(b);\n\n const c10 = new Point2D(a1.x, a1.y);\n\n a = b2.multiply(-2);\n const c22 = b1.add(a.add(b3));\n\n a = b1.multiply(-2);\n b = b2.multiply(2);\n const c21 = a.add(b);\n\n const c20 = new Point2D(b1.x, b1.y);\n\n // bezout\n a = c12.x * c11.y - c11.x * c12.y;\n b = c22.x * c11.y - c11.x * c22.y;\n const c = c21.x * c11.y - c11.x * c21.y;\n const d = c11.x * (c10.y - c20.y) + c11.y * (-c10.x + c20.x);\n const e = c22.x * c12.y - c12.x * c22.y;\n const f = c21.x * c12.y - c12.x * c21.y;\n const g = c12.x * (c10.y - c20.y) + c12.y * (-c10.x + c20.x);\n\n // determinant\n const poly = new Polynomial(\n -e * e,\n -2 * e * f,\n a * b - f * f - 2 * e * g,\n a * c - 2 * f * g,\n a * d - g * g\n );\n\n const roots = poly.getRoots();\n\n for (const s of roots) {\n if (0 <= s && s <= 1) {\n const xp = new Polynomial(\n c12.x,\n c11.x,\n c10.x - c20.x - s * c21.x - s * s * c22.x\n );\n xp.simplifyEquals();\n const xRoots = xp.getRoots();\n const yp = new Polynomial(\n c12.y,\n c11.y,\n c10.y - c20.y - s * c21.y - s * s * c22.y\n );\n yp.simplifyEquals();\n const yRoots = yp.getRoots();\n\n if (xRoots.length > 0 && yRoots.length > 0) {\n const TOLERANCE = 1e-4;\n\n checkRoots:\n for (const xRoot of xRoots) {\n if (0 <= xRoot && xRoot <= 1) {\n for (const yRoot of yRoots) {\n if (Math.abs(xRoot - yRoot) < TOLERANCE) {\n result.points.push(c22.multiply(s * s).add(c21.multiply(s).add(c20)));\n break checkRoots;\n }\n }\n }\n }\n }\n }\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier2Bezier3\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} a3\n * @param {module:kld-intersections.Point2D} b1\n * @param {module:kld-intersections.Point2D} b2\n * @param {module:kld-intersections.Point2D} b3\n * @param {module:kld-intersections.Point2D} b4\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Bezier3(a1, a2, a3, b1, b2, b3, b4) {\n let a, b, c, d;\n const result = new Intersection(\"No Intersection\");\n\n a = a2.multiply(-2);\n const c12 = a1.add(a.add(a3));\n\n a = a1.multiply(-2);\n b = a2.multiply(2);\n const c11 = a.add(b);\n\n const c10 = new Point2D(a1.x, a1.y);\n\n a = b1.multiply(-1);\n b = b2.multiply(3);\n c = b3.multiply(-3);\n d = a.add(b.add(c.add(b4)));\n const c23 = new Point2D(d.x, d.y);\n\n a = b1.multiply(3);\n b = b2.multiply(-6);\n c = b3.multiply(3);\n d = a.add(b.add(c));\n const c22 = new Point2D(d.x, d.y);\n\n a = b1.multiply(-3);\n b = b2.multiply(3);\n c = a.add(b);\n const c21 = new Point2D(c.x, c.y);\n\n const c20 = new Point2D(b1.x, b1.y);\n\n const c10x2 = c10.x * c10.x;\n const c10y2 = c10.y * c10.y;\n const c11x2 = c11.x * c11.x;\n const c11y2 = c11.y * c11.y;\n const c12x2 = c12.x * c12.x;\n const c12y2 = c12.y * c12.y;\n const c20x2 = c20.x * c20.x;\n const c20y2 = c20.y * c20.y;\n const c21x2 = c21.x * c21.x;\n const c21y2 = c21.y * c21.y;\n const c22x2 = c22.x * c22.x;\n const c22y2 = c22.y * c22.y;\n const c23x2 = c23.x * c23.x;\n const c23y2 = c23.y * c23.y;\n\n const poly = new Polynomial(\n -2 * c12.x * c12.y * c23.x * c23.y + c12x2 * c23y2 + c12y2 * c23x2,\n -2 * c12.x * c12.y * c22.x * c23.y - 2 * c12.x * c12.y * c22.y * c23.x + 2 * c12y2 * c22.x * c23.x +\n 2 * c12x2 * c22.y * c23.y,\n -2 * c12.x * c21.x * c12.y * c23.y - 2 * c12.x * c12.y * c21.y * c23.x - 2 * c12.x * c12.y * c22.x * c22.y +\n 2 * c21.x * c12y2 * c23.x + c12y2 * c22x2 + c12x2 * (2 * c21.y * c23.y + c22y2),\n 2 * c10.x * c12.x * c12.y * c23.y + 2 * c10.y * c12.x * c12.y * c23.x + c11.x * c11.y * c12.x * c23.y +\n c11.x * c11.y * c12.y * c23.x - 2 * c20.x * c12.x * c12.y * c23.y - 2 * c12.x * c20.y * c12.y * c23.x -\n 2 * c12.x * c21.x * c12.y * c22.y - 2 * c12.x * c12.y * c21.y * c22.x - 2 * c10.x * c12y2 * c23.x -\n 2 * c10.y * c12x2 * c23.y + 2 * c20.x * c12y2 * c23.x + 2 * c21.x * c12y2 * c22.x -\n c11y2 * c12.x * c23.x - c11x2 * c12.y * c23.y + c12x2 * (2 * c20.y * c23.y + 2 * c21.y * c22.y),\n 2 * c10.x * c12.x * c12.y * c22.y + 2 * c10.y * c12.x * c12.y * c22.x + c11.x * c11.y * c12.x * c22.y +\n c11.x * c11.y * c12.y * c22.x - 2 * c20.x * c12.x * c12.y * c22.y - 2 * c12.x * c20.y * c12.y * c22.x -\n 2 * c12.x * c21.x * c12.y * c21.y - 2 * c10.x * c12y2 * c22.x - 2 * c10.y * c12x2 * c22.y +\n 2 * c20.x * c12y2 * c22.x - c11y2 * c12.x * c22.x - c11x2 * c12.y * c22.y + c21x2 * c12y2 +\n c12x2 * (2 * c20.y * c22.y + c21y2),\n 2 * c10.x * c12.x * c12.y * c21.y + 2 * c10.y * c12.x * c21.x * c12.y + c11.x * c11.y * c12.x * c21.y +\n c11.x * c11.y * c21.x * c12.y - 2 * c20.x * c12.x * c12.y * c21.y - 2 * c12.x * c20.y * c21.x * c12.y -\n 2 * c10.x * c21.x * c12y2 - 2 * c10.y * c12x2 * c21.y + 2 * c20.x * c21.x * c12y2 -\n c11y2 * c12.x * c21.x - c11x2 * c12.y * c21.y + 2 * c12x2 * c20.y * c21.y,\n -2 * c10.x * c10.y * c12.x * c12.y - c10.x * c11.x * c11.y * c12.y - c10.y * c11.x * c11.y * c12.x +\n 2 * c10.x * c12.x * c20.y * c12.y + 2 * c10.y * c20.x * c12.x * c12.y + c11.x * c20.x * c11.y * c12.y +\n c11.x * c11.y * c12.x * c20.y - 2 * c20.x * c12.x * c20.y * c12.y - 2 * c10.x * c20.x * c12y2 +\n c10.x * c11y2 * c12.x + c10.y * c11x2 * c12.y - 2 * c10.y * c12x2 * c20.y -\n c20.x * c11y2 * c12.x - c11x2 * c20.y * c12.y + c10x2 * c12y2 + c10y2 * c12x2 +\n c20x2 * c12y2 + c12x2 * c20y2\n );\n const roots = poly.getRootsInInterval(0, 1);\n\n for (const s of roots) {\n const xRoots = new Polynomial(\n c12.x,\n c11.x,\n c10.x - c20.x - s * c21.x - s * s * c22.x - s * s * s * c23.x\n ).getRoots();\n const yRoots = new Polynomial(\n c12.y,\n c11.y,\n c10.y - c20.y - s * c21.y - s * s * c22.y - s * s * s * c23.y\n ).getRoots();\n\n if (xRoots.length > 0 && yRoots.length > 0) {\n const TOLERANCE = 1e-4;\n\n checkRoots:\n for (const xRoot of xRoots) {\n if (0 <= xRoot && xRoot <= 1) {\n for (const yRoot of yRoots) {\n if (Math.abs(xRoot - yRoot) < TOLERANCE) {\n result.points.push(\n c23.multiply(s * s * s).add(c22.multiply(s * s).add(c21.multiply(s).add(c20)))\n );\n break checkRoots;\n }\n }\n }\n }\n }\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier2Circle\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} c\n * @param {number} r\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Circle(p1, p2, p3, c, r) {\n return Intersection.intersectBezier2Ellipse(p1, p2, p3, c, r, r);\n }\n\n /**\n * intersectBezier2Ellipse\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} ec\n * @param {number} rx\n * @param {number} ry\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Ellipse(p1, p2, p3, ec, rx, ry) {\n let a; // temporary variables\n // c2, c1, c0; // coefficients of quadratic\n const result = new Intersection(\"No Intersection\");\n\n a = p2.multiply(-2);\n const c2 = p1.add(a.add(p3));\n\n a = p1.multiply(-2);\n const b = p2.multiply(2);\n const c1 = a.add(b);\n\n const c0 = new Point2D(p1.x, p1.y);\n\n const rxrx = rx * rx;\n const ryry = ry * ry;\n const roots = new Polynomial(\n ryry * c2.x * c2.x + rxrx * c2.y * c2.y,\n 2 * (ryry * c2.x * c1.x + rxrx * c2.y * c1.y),\n ryry * (2 * c2.x * c0.x + c1.x * c1.x) + rxrx * (2 * c2.y * c0.y + c1.y * c1.y) -\n 2 * (ryry * ec.x * c2.x + rxrx * ec.y * c2.y),\n 2 * (ryry * c1.x * (c0.x - ec.x) + rxrx * c1.y * (c0.y - ec.y)),\n ryry * (c0.x * c0.x + ec.x * ec.x) + rxrx * (c0.y * c0.y + ec.y * ec.y) -\n 2 * (ryry * ec.x * c0.x + rxrx * ec.y * c0.y) - rxrx * ryry\n ).getRoots();\n\n for (const t of roots) {\n if (0 <= t && t <= 1) {\n result.points.push(c2.multiply(t * t).add(c1.multiply(t).add(c0)));\n }\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier2Line\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Line(p1, p2, p3, a1, a2) {\n let a; // temporary variables\n // let c2, c1, c0; // coefficients of quadratic\n // cl; // c coefficient for normal form of line\n // n; // normal for normal form of line\n const min = a1.min(a2); // used to determine if point is on line segment\n const max = a1.max(a2); // used to determine if point is on line segment\n const result = new Intersection(\"No Intersection\");\n\n a = p2.multiply(-2);\n const c2 = p1.add(a.add(p3));\n\n a = p1.multiply(-2);\n const b = p2.multiply(2);\n const c1 = a.add(b);\n\n const c0 = new Point2D(p1.x, p1.y);\n\n // Convert line to normal form: ax + by + c = 0\n // Find normal to line: negative inverse of original line's slope\n const n = new Vector2D(a1.y - a2.y, a2.x - a1.x);\n\n // Determine new c coefficient\n const cl = a1.x * a2.y - a2.x * a1.y;\n\n // Transform cubic coefficients to line's coordinate system and find roots\n // of cubic\n const roots = new Polynomial(\n n.dot(c2),\n n.dot(c1),\n n.dot(c0) + cl\n ).getRoots();\n\n // Any roots in closed interval [0,1] are intersections on Bezier, but\n // might not be on the line segment.\n // Find intersections and calculate point coordinates\n for (const t of roots) {\n if (0 <= t && t <= 1) {\n // We're within the Bezier curve\n // Find point on Bezier\n const p4 = p1.lerp(p2, t);\n const p5 = p2.lerp(p3, t);\n\n const p6 = p4.lerp(p5, t);\n\n // See if point is on line segment\n // Had to make special cases for vertical and horizontal lines due\n // to slight errors in calculation of p6\n if (a1.x === a2.x) {\n if (min.y <= p6.y && p6.y <= max.y) {\n result.status = \"Intersection\";\n result.appendPoint(p6);\n }\n }\n else if (a1.y === a2.y) {\n if (min.x <= p6.x && p6.x <= max.x) {\n result.status = \"Intersection\";\n result.appendPoint(p6);\n }\n }\n else if (min.x <= p6.x && p6.x <= max.x && min.y <= p6.y && p6.y <= max.y) {\n result.status = \"Intersection\";\n result.appendPoint(p6);\n }\n }\n }\n\n return result;\n }\n\n /**\n * intersectBezier2Polygon\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Polygon(p1, p2, p3, points) {\n return Intersection.intersectBezier2Polyline(p1, p2, p3, closePolygon(points));\n }\n\n /**\n * intersectBezier2Polyline\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Polyline(p1, p2, p3, points) {\n const result = new Intersection(\"No Intersection\");\n const {length: len} = points;\n\n for (let i = 0; i < len - 1; i++) {\n const a1 = points[i];\n const a2 = points[i + 1];\n const inter = Intersection.intersectBezier2Line(p1, p2, p3, a1, a2);\n\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier2Rectangle\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Rectangle(p1, p2, p3, r1, r2) {\n const min = r1.min(r2);\n const max = r1.max(r2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectBezier2Line(p1, p2, p3, min, topRight);\n const inter2 = Intersection.intersectBezier2Line(p1, p2, p3, topRight, max);\n const inter3 = Intersection.intersectBezier2Line(p1, p2, p3, max, bottomLeft);\n const inter4 = Intersection.intersectBezier2Line(p1, p2, p3, bottomLeft, min);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier3Bezier3\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} a3\n * @param {module:kld-intersections.Point2D} a4\n * @param {module:kld-intersections.Point2D} b1\n * @param {module:kld-intersections.Point2D} b2\n * @param {module:kld-intersections.Point2D} b3\n * @param {module:kld-intersections.Point2D} b4\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Bezier3(a1, a2, a3, a4, b1, b2, b3, b4) {\n let a, b, c, d; // temporary variables\n // c13, c12, c11, c10; // coefficients of cubic\n // c23, c22, c21, c20; // coefficients of cubic\n const result = new Intersection(\"No Intersection\");\n\n // Calculate the coefficients of cubic polynomial\n a = a1.multiply(-1);\n b = a2.multiply(3);\n c = a3.multiply(-3);\n d = a.add(b.add(c.add(a4)));\n const c13 = new Point2D(d.x, d.y);\n\n a = a1.multiply(3);\n b = a2.multiply(-6);\n c = a3.multiply(3);\n d = a.add(b.add(c));\n const c12 = new Point2D(d.x, d.y);\n\n a = a1.multiply(-3);\n b = a2.multiply(3);\n c = a.add(b);\n const c11 = new Point2D(c.x, c.y);\n\n const c10 = new Point2D(a1.x, a1.y);\n\n a = b1.multiply(-1);\n b = b2.multiply(3);\n c = b3.multiply(-3);\n d = a.add(b.add(c.add(b4)));\n const c23 = new Point2D(d.x, d.y);\n\n a = b1.multiply(3);\n b = b2.multiply(-6);\n c = b3.multiply(3);\n d = a.add(b.add(c));\n const c22 = new Point2D(d.x, d.y);\n\n a = b1.multiply(-3);\n b = b2.multiply(3);\n c = a.add(b);\n const c21 = new Point2D(c.x, c.y);\n\n const c20 = new Point2D(b1.x, b1.y);\n\n // bezout\n a = c13.x * c12.y - c12.x * c13.y;\n b = c13.x * c11.y - c11.x * c13.y;\n const c0 = c13.x * c10.y - c10.x * c13.y + c20.x * c13.y - c13.x * c20.y;\n const c1 = c21.x * c13.y - c13.x * c21.y;\n const c2 = c22.x * c13.y - c13.x * c22.y;\n const c3 = c23.x * c13.y - c13.x * c23.y;\n d = c13.x * c11.y - c11.x * c13.y;\n const e0 = c13.x * c10.y + c12.x * c11.y - c11.x * c12.y - c10.x * c13.y + c20.x * c13.y - c13.x * c20.y;\n const e1 = c21.x * c13.y - c13.x * c21.y;\n const e2 = c22.x * c13.y - c13.x * c22.y;\n const e3 = c23.x * c13.y - c13.x * c23.y;\n const f0 = c12.x * c10.y - c10.x * c12.y + c20.x * c12.y - c12.x * c20.y;\n const f1 = c21.x * c12.y - c12.x * c21.y;\n const f2 = c22.x * c12.y - c12.x * c22.y;\n const f3 = c23.x * c12.y - c12.x * c23.y;\n const g0 = c13.x * c10.y - c10.x * c13.y + c20.x * c13.y - c13.x * c20.y;\n const g1 = c21.x * c13.y - c13.x * c21.y;\n const g2 = c22.x * c13.y - c13.x * c22.y;\n const g3 = c23.x * c13.y - c13.x * c23.y;\n const h0 = c12.x * c10.y - c10.x * c12.y + c20.x * c12.y - c12.x * c20.y;\n const h1 = c21.x * c12.y - c12.x * c21.y;\n const h2 = c22.x * c12.y - c12.x * c22.y;\n const h3 = c23.x * c12.y - c12.x * c23.y;\n const i0 = c11.x * c10.y - c10.x * c11.y + c20.x * c11.y - c11.x * c20.y;\n const i1 = c21.x * c11.y - c11.x * c21.y;\n const i2 = c22.x * c11.y - c11.x * c22.y;\n const i3 = c23.x * c11.y - c11.x * c23.y;\n\n // determinant\n const poly = new Polynomial(\n -c3 * e3 * g3,\n -c3 * e3 * g2 - c3 * e2 * g3 - c2 * e3 * g3,\n -c3 * e3 * g1 - c3 * e2 * g2 - c2 * e3 * g2 - c3 * e1 * g3 - c2 * e2 * g3 - c1 * e3 * g3,\n -c3 * e3 * g0 - c3 * e2 * g1 - c2 * e3 * g1 - c3 * e1 * g2 - c2 * e2 * g2 - c1 * e3 * g2 - c3 * e0 * g3 - c2 * e1 * g3 - c1 * e2 * g3 - c0 * e3 * g3 + b * f3 * g3 + c3 * d * h3 - a * f3 * h3 + a * e3 * i3,\n -c3 * e2 * g0 - c2 * e3 * g0 - c3 * e1 * g1 - c2 * e2 * g1 - c1 * e3 * g1 - c3 * e0 * g2 - c2 * e1 * g2 - c1 * e2 * g2 - c0 * e3 * g2 + b * f3 * g2 - c2 * e0 * g3 - c1 * e1 * g3 - c0 * e2 * g3 + b * f2 * g3 + c3 * d * h2 - a * f3 * h2 + c2 * d * h3 - a * f2 * h3 + a * e3 * i2 + a * e2 * i3,\n -c3 * e1 * g0 - c2 * e2 * g0 - c1 * e3 * g0 - c3 * e0 * g1 - c2 * e1 * g1 - c1 * e2 * g1 - c0 * e3 * g1 + b * f3 * g1 - c2 * e0 * g2 - c1 * e1 * g2 - c0 * e2 * g2 + b * f2 * g2 - c1 * e0 * g3 - c0 * e1 * g3 + b * f1 * g3 + c3 * d * h1 - a * f3 * h1 + c2 * d * h2 - a * f2 * h2 + c1 * d * h3 - a * f1 * h3 + a * e3 * i1 + a * e2 * i2 + a * e1 * i3,\n -c3 * e0 * g0 - c2 * e1 * g0 - c1 * e2 * g0 - c0 * e3 * g0 + b * f3 * g0 - c2 * e0 * g1 - c1 * e1 * g1 - c0 * e2 * g1 + b * f2 * g1 - c1 * e0 * g2 - c0 * e1 * g2 + b * f1 * g2 - c0 * e0 * g3 + b * f0 * g3 + c3 * d * h0 - a * f3 * h0 + c2 * d * h1 - a * f2 * h1 + c1 * d * h2 - a * f1 * h2 + c0 * d * h3 - a * f0 * h3 + a * e3 * i0 + a * e2 * i1 + a * e1 * i2 - b * d * i3 + a * e0 * i3,\n -c2 * e0 * g0 - c1 * e1 * g0 - c0 * e2 * g0 + b * f2 * g0 - c1 * e0 * g1 - c0 * e1 * g1 + b * f1 * g1 - c0 * e0 * g2 + b * f0 * g2 + c2 * d * h0 - a * f2 * h0 + c1 * d * h1 - a * f1 * h1 + c0 * d * h2 - a * f0 * h2 + a * e2 * i0 + a * e1 * i1 - b * d * i2 + a * e0 * i2,\n -c1 * e0 * g0 - c0 * e1 * g0 + b * f1 * g0 - c0 * e0 * g1 + b * f0 * g1 + c1 * d * h0 - a * f1 * h0 + c0 * d * h1 - a * f0 * h1 + a * e1 * i0 - b * d * i1 + a * e0 * i1,\n -c0 * e0 * g0 + b * f0 * g0 + c0 * d * h0 - a * f0 * h0 - b * d * i0 + a * e0 * i0\n );\n poly.simplifyEquals();\n const roots = poly.getRootsInInterval(0, 1);\n\n for (const s of roots) {\n const xp = new Polynomial(\n c13.x,\n c12.x,\n c11.x,\n c10.x - c20.x - s * c21.x - s * s * c22.x - s * s * s * c23.x\n );\n xp.simplifyEquals();\n const xRoots = xp.getRoots();\n const yp = new Polynomial(\n c13.y,\n c12.y,\n c11.y,\n c10.y - c20.y - s * c21.y - s * s * c22.y - s * s * s * c23.y\n );\n yp.simplifyEquals();\n const yRoots = yp.getRoots();\n\n if (xRoots.length > 0 && yRoots.length > 0) {\n const TOLERANCE = 1e-4;\n\n checkRoots:\n for (const xRoot of xRoots) {\n if (0 <= xRoot && xRoot <= 1) {\n for (const yRoot of yRoots) {\n if (Math.abs(xRoot - yRoot) < TOLERANCE) {\n result.points.push(\n c23.multiply(s * s * s).add(c22.multiply(s * s).add(c21.multiply(s).add(c20)))\n );\n break checkRoots;\n }\n }\n }\n }\n }\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier3Circle\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @param {module:kld-intersections.Point2D} c\n * @param {number} r\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Circle(p1, p2, p3, p4, c, r) {\n return Intersection.intersectBezier3Ellipse(p1, p2, p3, p4, c, r, r);\n }\n\n /**\n * intersectBezier3Ellipse\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @param {module:kld-intersections.Point2D} ec\n * @param {number} rx\n * @param {number} ry\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Ellipse(p1, p2, p3, p4, ec, rx, ry) {\n let a, b, c, d; // temporary variables\n // c3, c2, c1, c0; // coefficients of cubic\n const result = new Intersection(\"No Intersection\");\n\n // Calculate the coefficients of cubic polynomial\n a = p1.multiply(-1);\n b = p2.multiply(3);\n c = p3.multiply(-3);\n d = a.add(b.add(c.add(p4)));\n const c3 = new Point2D(d.x, d.y);\n\n a = p1.multiply(3);\n b = p2.multiply(-6);\n c = p3.multiply(3);\n d = a.add(b.add(c));\n const c2 = new Point2D(d.x, d.y);\n\n a = p1.multiply(-3);\n b = p2.multiply(3);\n c = a.add(b);\n const c1 = new Point2D(c.x, c.y);\n\n const c0 = new Point2D(p1.x, p1.y);\n\n const rxrx = rx * rx;\n const ryry = ry * ry;\n const poly = new Polynomial(\n c3.x * c3.x * ryry + c3.y * c3.y * rxrx,\n 2 * (c3.x * c2.x * ryry + c3.y * c2.y * rxrx),\n 2 * (c3.x * c1.x * ryry + c3.y * c1.y * rxrx) + c2.x * c2.x * ryry + c2.y * c2.y * rxrx,\n 2 * c3.x * ryry * (c0.x - ec.x) + 2 * c3.y * rxrx * (c0.y - ec.y) +\n 2 * (c2.x * c1.x * ryry + c2.y * c1.y * rxrx),\n 2 * c2.x * ryry * (c0.x - ec.x) + 2 * c2.y * rxrx * (c0.y - ec.y) +\n c1.x * c1.x * ryry + c1.y * c1.y * rxrx,\n 2 * c1.x * ryry * (c0.x - ec.x) + 2 * c1.y * rxrx * (c0.y - ec.y),\n c0.x * c0.x * ryry - 2 * c0.y * ec.y * rxrx - 2 * c0.x * ec.x * ryry +\n c0.y * c0.y * rxrx + ec.x * ec.x * ryry + ec.y * ec.y * rxrx - rxrx * ryry\n );\n const roots = poly.getRootsInInterval(0, 1);\n\n for (const t of roots) {\n result.points.push(\n c3.multiply(t * t * t).add(c2.multiply(t * t).add(c1.multiply(t).add(c0)))\n );\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier3Line\n *\n * Many thanks to Dan Sunday at SoftSurfer.com. He gave me a very thorough\n * sketch of the algorithm used here. Without his help, I'm not sure when I\n * would have figured out this intersection problem.\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Line(p1, p2, p3, p4, a1, a2) {\n let a, b, c, d; // temporary variables\n // c3, c2, c1, c0; // coefficients of cubic\n // cl; // c coefficient for normal form of line\n // n; // normal for normal form of line\n const min = a1.min(a2); // used to determine if point is on line segment\n const max = a1.max(a2); // used to determine if point is on line segment\n const result = new Intersection(\"No Intersection\");\n\n // Start with Bezier using Bernstein polynomials for weighting functions:\n // (1-t^3)P1 + 3t(1-t)^2P2 + 3t^2(1-t)P3 + t^3P4\n //\n // Expand and collect terms to form linear combinations of original Bezier\n // controls. This ends up with a vector cubic in t:\n // (-P1+3P2-3P3+P4)t^3 + (3P1-6P2+3P3)t^2 + (-3P1+3P2)t + P1\n // /\\ /\\ /\\ /\\\n // || || || ||\n // c3 c2 c1 c0\n\n // Calculate the coefficients\n a = p1.multiply(-1);\n b = p2.multiply(3);\n c = p3.multiply(-3);\n d = a.add(b.add(c.add(p4)));\n const c3 = new Vector2D(d.x, d.y);\n\n a = p1.multiply(3);\n b = p2.multiply(-6);\n c = p3.multiply(3);\n d = a.add(b.add(c));\n const c2 = new Vector2D(d.x, d.y);\n\n a = p1.multiply(-3);\n b = p2.multiply(3);\n c = a.add(b);\n const c1 = new Vector2D(c.x, c.y);\n\n const c0 = new Vector2D(p1.x, p1.y);\n\n // Convert line to normal form: ax + by + c = 0\n // Find normal to line: negative inverse of original line's slope\n const n = new Vector2D(a1.y - a2.y, a2.x - a1.x);\n\n // Determine new c coefficient\n const cl = a1.x * a2.y - a2.x * a1.y;\n\n // ?Rotate each cubic coefficient using line for new coordinate system?\n // Find roots of rotated cubic\n const roots = new Polynomial(\n n.dot(c3),\n n.dot(c2),\n n.dot(c1),\n n.dot(c0) + cl\n ).getRoots();\n\n // Any roots in closed interval [0,1] are intersections on Bezier, but\n // might not be on the line segment.\n // Find intersections and calculate point coordinates\n for (const t of roots) {\n if (0 <= t && t <= 1) {\n // We're within the Bezier curve\n // Find point on Bezier\n const p5 = p1.lerp(p2, t);\n const p6 = p2.lerp(p3, t);\n const p7 = p3.lerp(p4, t);\n\n const p8 = p5.lerp(p6, t);\n const p9 = p6.lerp(p7, t);\n\n const p10 = p8.lerp(p9, t);\n\n // See if point is on line segment\n // Had to make special cases for vertical and horizontal lines due\n // to slight errors in calculation of p10\n if (a1.x === a2.x) {\n if (min.y <= p10.y && p10.y <= max.y) {\n result.status = \"Intersection\";\n result.appendPoint(p10);\n }\n }\n else if (a1.y === a2.y) {\n if (min.x <= p10.x && p10.x <= max.x) {\n result.status = \"Intersection\";\n result.appendPoint(p10);\n }\n }\n else if (min.x <= p10.x && p10.x <= max.x && min.y <= p10.y && p10.y <= max.y) {\n result.status = \"Intersection\";\n result.appendPoint(p10);\n }\n }\n }\n\n return result;\n }\n\n /**\n * intersectBezier3Polygon\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Polygon(p1, p2, p3, p4, points) {\n return Intersection.intersectBezier3Polyline(p1, p2, p3, p4, closePolygon(points));\n }\n\n /**\n * intersectBezier3Polyline\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Polyline(p1, p2, p3, p4, points) {\n const result = new Intersection(\"No Intersection\");\n const {length: len} = points;\n\n for (let i = 0; i < len - 1; i++) {\n const a1 = points[i];\n const a2 = points[i + 1];\n const inter = Intersection.intersectBezier3Line(p1, p2, p3, p4, a1, a2);\n\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier3Rectangle\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Rectangle(p1, p2, p3, p4, r1, r2) {\n const min = r1.min(r2);\n const max = r1.max(r2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectBezier3Line(p1, p2, p3, p4, min, topRight);\n const inter2 = Intersection.intersectBezier3Line(p1, p2, p3, p4, topRight, max);\n const inter3 = Intersection.intersectBezier3Line(p1, p2, p3, p4, max, bottomLeft);\n const inter4 = Intersection.intersectBezier3Line(p1, p2, p3, p4, bottomLeft, min);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectCircleCircle\n *\n * @param {module:kld-intersections.Point2D} c1\n * @param {number} r1\n * @param {module:kld-intersections.Point2D} c2\n * @param {number} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectCircleCircle(c1, r1, c2, r2) {\n let result;\n\n // Determine minimum and maximum radii where circles can intersect\n const r_max = r1 + r2;\n const r_min = Math.abs(r1 - r2);\n\n // Determine actual distance between circle circles\n const c_dist = c1.distanceFrom(c2);\n\n if (c_dist > r_max) {\n result = new Intersection(\"Outside\");\n }\n else if (c_dist < r_min) {\n result = new Intersection(\"Inside\");\n }\n else {\n result = new Intersection(\"Intersection\");\n\n const a = (r1 * r1 - r2 * r2 + c_dist * c_dist) / (2 * c_dist);\n const h = Math.sqrt(r1 * r1 - a * a);\n const p = c1.lerp(c2, a / c_dist);\n const b = h / c_dist;\n\n result.points.push(\n new Point2D(\n p.x - b * (c2.y - c1.y),\n p.y + b * (c2.x - c1.x)\n )\n );\n result.points.push(\n new Point2D(\n p.x + b * (c2.y - c1.y),\n p.y - b * (c2.x - c1.x)\n )\n );\n }\n\n return result;\n }\n\n /**\n * intersectCircleEllipse\n *\n * @param {module:kld-intersections.Point2D} cc\n * @param {number} r\n * @param {module:kld-intersections.Point2D} ec\n * @param {number} rx\n * @param {number} ry\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectCircleEllipse(cc, r, ec, rx, ry) {\n return Intersection.intersectEllipseEllipse(cc, r, r, ec, rx, ry);\n }\n\n /**\n * intersectCircleLine\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} r\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectCircleLine(c, r, a1, a2) {\n let result;\n const a = (a2.x - a1.x) * (a2.x - a1.x) +\n (a2.y - a1.y) * (a2.y - a1.y);\n const b = 2 * ((a2.x - a1.x) * (a1.x - c.x) +\n (a2.y - a1.y) * (a1.y - c.y));\n const cc = c.x * c.x + c.y * c.y + a1.x * a1.x + a1.y * a1.y -\n 2 * (c.x * a1.x + c.y * a1.y) - r * r;\n const deter = b * b - 4 * a * cc;\n\n if (deter < 0) {\n result = new Intersection(\"Outside\");\n }\n else if (deter === 0) {\n result = new Intersection(\"Tangent\");\n // NOTE: should calculate this point\n }\n else {\n const e = Math.sqrt(deter);\n const u1 = (-b + e) / (2 * a);\n const u2 = (-b - e) / (2 * a);\n\n if ((u1 < 0 || u1 > 1) && (u2 < 0 || u2 > 1)) {\n if ((u1 < 0 && u2 < 0) || (u1 > 1 && u2 > 1)) {\n result = new Intersection(\"Outside\");\n }\n else {\n result = new Intersection(\"Inside\");\n }\n }\n else {\n result = new Intersection(\"Intersection\");\n\n if (0 <= u1 && u1 <= 1) {\n result.points.push(a1.lerp(a2, u1));\n }\n\n if (0 <= u2 && u2 <= 1) {\n result.points.push(a1.lerp(a2, u2));\n }\n }\n }\n\n return result;\n }\n\n /**\n * intersectCirclePolygon\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} r\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectCirclePolygon(c, r, points) {\n return Intersection.intersectCirclePolyline(c, r, closePolygon(points));\n }\n\n /**\n * intersectCirclePolyline\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} r\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectCirclePolyline(c, r, points) {\n const result = new Intersection(\"No Intersection\");\n const {length: len} = points;\n let inter;\n\n for (let i = 0; i < len - 1; i++) {\n const a1 = points[i];\n const a2 = points[i + 1];\n\n inter = Intersection.intersectCircleLine(c, r, a1, a2);\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n else {\n result.status = inter.status;\n }\n\n return result;\n }\n\n /**\n * intersectCircleRectangle\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} r\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectCircleRectangle(c, r, r1, r2) {\n const min = r1.min(r2);\n const max = r1.max(r2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectCircleLine(c, r, min, topRight);\n const inter2 = Intersection.intersectCircleLine(c, r, topRight, max);\n const inter3 = Intersection.intersectCircleLine(c, r, max, bottomLeft);\n const inter4 = Intersection.intersectCircleLine(c, r, bottomLeft, min);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n else {\n result.status = inter1.status;\n }\n\n return result;\n }\n\n /**\n * intersectEllipseEllipse\n *\n * This code is based on MgcIntr2DElpElp.cpp written by David Eberly. His\n * code along with many other excellent examples are avaiable at his site:\n * http://www.magic-software.com\n *\n * NOTE: Rotation will need to be added to this function\n *\n * @param {module:kld-intersections.Point2D} c1\n * @param {number} rx1\n * @param {number} ry1\n * @param {module:kld-intersections.Point2D} c2\n * @param {number} rx2\n * @param {number} ry2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectEllipseEllipse(c1, rx1, ry1, c2, rx2, ry2) {\n const a = [\n ry1 * ry1, 0, rx1 * rx1, -2 * ry1 * ry1 * c1.x, -2 * rx1 * rx1 * c1.y,\n ry1 * ry1 * c1.x * c1.x + rx1 * rx1 * c1.y * c1.y - rx1 * rx1 * ry1 * ry1\n ];\n const b = [\n ry2 * ry2, 0, rx2 * rx2, -2 * ry2 * ry2 * c2.x, -2 * rx2 * rx2 * c2.y,\n ry2 * ry2 * c2.x * c2.x + rx2 * rx2 * c2.y * c2.y - rx2 * rx2 * ry2 * ry2\n ];\n\n const yPoly = bezout(a, b);\n const yRoots = yPoly.getRoots();\n const epsilon = 1e-3;\n const norm0 = (a[0] * a[0] + 2 * a[1] * a[1] + a[2] * a[2]) * epsilon;\n const norm1 = (b[0] * b[0] + 2 * b[1] * b[1] + b[2] * b[2]) * epsilon;\n const result = new Intersection(\"No Intersection\");\n\n for (const yRoot of yRoots) {\n const xPoly = new Polynomial(\n a[0],\n a[3] + yRoot * a[1],\n a[5] + yRoot * (a[4] + yRoot * a[2])\n );\n const xRoots = xPoly.getRoots();\n\n for (const xRoot of xRoots) {\n let tst =\n (a[0] * xRoot + a[1] * yRoot + a[3]) * xRoot +\n (a[2] * yRoot + a[4]) * yRoot + a[5];\n if (Math.abs(tst) < norm0) {\n tst =\n (b[0] * xRoot + b[1] * yRoot + b[3]) * xRoot +\n (b[2] * yRoot + b[4]) * yRoot + b[5];\n if (Math.abs(tst) < norm1) {\n result.appendPoint(new Point2D(xRoot, yRoot));\n }\n }\n }\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectEllipseLine\n *\n * NOTE: Rotation will need to be added to this function\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} rx\n * @param {number} ry\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectEllipseLine(c, rx, ry, a1, a2) {\n let result;\n const orign = new Vector2D(a1.x, a1.y);\n const dir = Vector2D.fromPoints(a1, a2);\n const center = new Vector2D(c.x, c.y);\n const diff = orign.subtract(center);\n const mDir = new Vector2D(dir.x / (rx * rx), dir.y / (ry * ry));\n const mDiff = new Vector2D(diff.x / (rx * rx), diff.y / (ry * ry));\n\n const a = dir.dot(mDir);\n const b = dir.dot(mDiff);\n c = diff.dot(mDiff) - 1.0;\n const d = b * b - a * c;\n\n if (d < 0) {\n result = new Intersection(\"Outside\");\n }\n else if (d > 0) {\n const root = Math.sqrt(d); // eslint-disable-line no-shadow\n const t_a = (-b - root) / a;\n const t_b = (-b + root) / a;\n\n if ((t_a < 0 || 1 < t_a) && (t_b < 0 || 1 < t_b)) {\n if ((t_a < 0 && t_b < 0) || (t_a > 1 && t_b > 1)) {\n result = new Intersection(\"Outside\");\n }\n else {\n result = new Intersection(\"Inside\");\n }\n }\n else {\n result = new Intersection(\"Intersection\");\n if (0 <= t_a && t_a <= 1) {\n result.appendPoint(a1.lerp(a2, t_a));\n }\n if (0 <= t_b && t_b <= 1) {\n result.appendPoint(a1.lerp(a2, t_b));\n }\n }\n }\n else {\n const t = -b / a;\n\n if (0 <= t && t <= 1) {\n result = new Intersection(\"Intersection\");\n result.appendPoint(a1.lerp(a2, t));\n }\n else {\n result = new Intersection(\"Outside\");\n }\n }\n\n return result;\n }\n\n /**\n * intersectEllipsePolygon\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} rx\n * @param {number} ry\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectEllipsePolygon(c, rx, ry, points) {\n return Intersection.intersectEllipsePolyline(c, rx, ry, closePolygon(points));\n }\n\n /**\n * intersectEllipsePolyline\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} rx\n * @param {number} ry\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectEllipsePolyline(c, rx, ry, points) {\n const result = new Intersection(\"No Intersection\");\n const {length: len} = points;\n\n for (let i = 0; i < len - 1; i++) {\n const b1 = points[i];\n const b2 = points[i + 1];\n const inter = Intersection.intersectEllipseLine(c, rx, ry, b1, b2);\n\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectEllipseRectangle\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} rx\n * @param {number} ry\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectEllipseRectangle(c, rx, ry, r1, r2) {\n const min = r1.min(r2);\n const max = r1.max(r2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectEllipseLine(c, rx, ry, min, topRight);\n const inter2 = Intersection.intersectEllipseLine(c, rx, ry, topRight, max);\n const inter3 = Intersection.intersectEllipseLine(c, rx, ry, max, bottomLeft);\n const inter4 = Intersection.intersectEllipseLine(c, rx, ry, bottomLeft, min);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectLineLine\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} b1\n * @param {module:kld-intersections.Point2D} b2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectLineLine(a1, a2, b1, b2) {\n let result;\n\n const ua_t = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x);\n const ub_t = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x);\n const u_b = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y);\n\n if (u_b !== 0) {\n const ua = ua_t / u_b;\n const ub = ub_t / u_b;\n\n if (0 <= ua && ua <= 1 && 0 <= ub && ub <= 1) {\n result = new Intersection(\"Intersection\");\n result.points.push(\n new Point2D(\n a1.x + ua * (a2.x - a1.x),\n a1.y + ua * (a2.y - a1.y)\n )\n );\n }\n else {\n result = new Intersection(\"No Intersection\");\n }\n }\n else if (ua_t === 0 || ub_t === 0) {\n result = new Intersection(\"Coincident\");\n }\n else {\n result = new Intersection(\"Parallel\");\n }\n\n return result;\n }\n\n /**\n * intersectLinePolygon\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectLinePolygon(a1, a2, points) {\n return Intersection.intersectLinePolyline(a1, a2, closePolygon(points));\n }\n\n /**\n * intersectLinePolyline\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectLinePolyline(a1, a2, points) {\n const result = new Intersection(\"No Intersection\");\n const {length: len} = points;\n\n for (let i = 0; i < len - 1; i++) {\n const b1 = points[i];\n const b2 = points[i + 1];\n const inter = Intersection.intersectLineLine(a1, a2, b1, b2);\n\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectLineRectangle\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectLineRectangle(a1, a2, r1, r2) {\n const min = r1.min(r2);\n const max = r1.max(r2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectLineLine(min, topRight, a1, a2);\n const inter2 = Intersection.intersectLineLine(topRight, max, a1, a2);\n const inter3 = Intersection.intersectLineLine(max, bottomLeft, a1, a2);\n const inter4 = Intersection.intersectLineLine(bottomLeft, min, a1, a2);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectPolygonPolygon\n *\n * @param {Array} points1\n * @param {Array} points2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectPolygonPolygon(points1, points2) {\n return Intersection.intersectPolylinePolyline(closePolygon(points1), closePolygon(points2));\n }\n\n /**\n * intersectPolygonPolyline\n *\n * @param {Array} points1\n * @param {Array} points2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectPolygonPolyline(points1, points2) {\n return Intersection.intersectPolylinePolyline(closePolygon(points1), points2);\n }\n\n /**\n * intersectPolygonRectangle\n *\n * @param {Array} points\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectPolygonRectangle(points, r1, r2) {\n return Intersection.intersectPolylineRectangle(closePolygon(points), r1, r2);\n }\n\n /**\n * intersectPolylinePolyline\n *\n * @param {Array} points1\n * @param {Array} points2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectPolylinePolyline(points1, points2) {\n const result = new Intersection(\"No Intersection\");\n const {length: len} = points1;\n\n for (let i = 0; i < len - 1; i++) {\n const a1 = points1[i];\n const a2 = points1[i + 1];\n const inter = Intersection.intersectLinePolyline(a1, a2, points2);\n\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectPolylineRectangle\n *\n * @param {Array} points\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectPolylineRectangle(points, r1, r2) {\n const min = r1.min(r2);\n const max = r1.max(r2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectLinePolyline(min, topRight, points);\n const inter2 = Intersection.intersectLinePolyline(topRight, max, points);\n const inter3 = Intersection.intersectLinePolyline(max, bottomLeft, points);\n const inter4 = Intersection.intersectLinePolyline(bottomLeft, min, points);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectRectangleRectangle\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} b1\n * @param {module:kld-intersections.Point2D} b2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectRectangleRectangle(a1, a2, b1, b2) {\n const min = a1.min(a2);\n const max = a1.max(a2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectLineRectangle(min, topRight, b1, b2);\n const inter2 = Intersection.intersectLineRectangle(topRight, max, b1, b2);\n const inter3 = Intersection.intersectLineRectangle(max, bottomLeft, b1, b2);\n const inter4 = Intersection.intersectLineRectangle(bottomLeft, min, b1, b2);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectRayRay\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} b1\n * @param {module:kld-intersections.Point2D} b2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectRayRay(a1, a2, b1, b2) {\n let result;\n\n const ua_t = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x);\n const ub_t = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x);\n const u_b = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y);\n\n if (u_b !== 0) {\n const ua = ua_t / u_b;\n\n result = new Intersection(\"Intersection\");\n result.points.push(\n new Point2D(\n a1.x + ua * (a2.x - a1.x),\n a1.y + ua * (a2.y - a1.y)\n )\n );\n }\n else if (ua_t === 0 || ub_t === 0) {\n result = new Intersection(\"Coincident\");\n }\n else {\n result = new Intersection(\"Parallel\");\n }\n\n return result;\n }\n\n /**\n * appendPoint\n *\n * @param {module:kld-intersections.Point2D} point\n */\n appendPoint(point) {\n this.points.push(point);\n }\n\n\n /**\n * appendPoints\n *\n * @param {Array} points\n */\n appendPoints(points) {\n this.points = this.points.concat(points);\n }\n}\n\nexport default Intersection;\n","/* eslint-disable prefer-rest-params */\n/**\n * Shapes\n *\n * @copyright 2017, Kevin Lindsey\n * @module Shapes\n * @deprecated use ShapeInfo\n */\n\nimport ShapeInfo from \"./ShapeInfo.js\";\n\n/**\n * Build shapes for intersection\n */\nclass Shapes {\n /**\n * arc\n *\n * @deprecated use ShapeInfo.arc\n * @param {number} centerX\n * @param {number} centerY\n * @param {number} radiusX\n * @param {number} radiusY\n * @param {number} startRadians\n * @param {number} endRadians\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static arc(centerX, centerY, radiusX, radiusY, startRadians, endRadians) {\n return ShapeInfo.arc(...arguments);\n }\n\n /**\n * quadraticBezier\n *\n * @deprecated use ShapeInfo.quadraticBezier\n * @param {number} p1x\n * @param {number} p1y\n * @param {number} p2x\n * @param {number} p2y\n * @param {number} p3x\n * @param {number} p3y\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static quadraticBezier(p1x, p1y, p2x, p2y, p3x, p3y) {\n return ShapeInfo.quadraticBezier(...arguments);\n }\n\n /**\n * cubicBezier\n *\n * @deprecated use ShapeInfo.cubicBezier\n * @param {number} p1x\n * @param {number} p1y\n * @param {number} p2x\n * @param {number} p2y\n * @param {number} p3x\n * @param {number} p3y\n * @param {number} p4x\n * @param {number} p4y\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static cubicBezier(p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y) {\n return ShapeInfo.cubicBezier(...arguments);\n }\n\n /**\n * circle\n *\n * @deprecated use ShapeInfo.circle\n * @param {number} centerX\n * @param {number} centerY\n * @param {number} radius\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static circle(centerX, centerY, radius) {\n return ShapeInfo.circle(...arguments);\n }\n\n /**\n * ellipse\n *\n * @deprecated use ShapeInfo.ellipse\n * @param {number} centerX\n * @param {number} centerY\n * @param {number} radiusX\n * @param {number} radiusY\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static ellipse(centerX, centerY, radiusX, radiusY) {\n return ShapeInfo.ellipse(...arguments);\n }\n\n /**\n * line\n *\n * @deprecated use ShapeInfo.line\n * @param {number} p1x\n * @param {number} p1y\n * @param {number} p2x\n * @param {number} p2y\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static line(p1x, p1y, p2x, p2y) {\n return ShapeInfo.line(...arguments);\n }\n\n /**\n * path\n *\n * @deprecated use ShapeInfo.path\n * @param {string} pathData\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static path(pathData) {\n return ShapeInfo.path(...arguments);\n }\n\n /**\n * polygon\n *\n * @deprecated use ShapeInfo.polygon\n * @param {Array} coords\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static polygon(coords) {\n return ShapeInfo.polygon(...arguments);\n }\n\n /**\n * polyline\n *\n * @deprecated use ShapeInfo.polyline\n * @param {Array} coords\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static polyline(coords) {\n return ShapeInfo.polyline(...arguments);\n }\n\n /**\n * rectangle\n *\n * @deprecated use ShapeInfo.rectangle\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} [rx]\n * @param {number} [ry]\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static rectangle(x, y, width, height, rx = 0, ry = 0) {\n return ShapeInfo.rectangle(...arguments);\n }\n}\n\nexport default Shapes;\n","/* eslint-disable prefer-rest-params */\n/**\n * AffineShapes\n *\n * @copyright 2017-2019, Kevin Lindsey\n * @module AffineShapes\n * @deprecated use ShapeInfo\n */\n\nimport ShapeInfo from \"./ShapeInfo.js\";\n\n/**\n * Build shapes for intersection\n */\nclass AffineShapes {\n /**\n * arc\n *\n * @deprecated use ShapeInfo.arc\n * @param {module:kld-intersections.Point2D} center\n * @param {number} radiusX\n * @param {number} radiusY\n * @param {number} startRadians\n * @param {number} endRadians\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static arc(center, radiusX, radiusY, startRadians, endRadians) {\n return ShapeInfo.arc(...arguments);\n }\n\n /**\n * quadraticBezier\n *\n * @deprecated use ShapeInfo.quadraticBezier\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static quadraticBezier(p1, p2, p3) {\n return ShapeInfo.quadraticBezier(...arguments);\n }\n\n /**\n * cubicBezier\n *\n * @deprecated use ShapeInfo.cubicBezier\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static cubicBezier(p1, p2, p3, p4) {\n return ShapeInfo.cubicBezier(...arguments);\n }\n\n /**\n * circle\n *\n * @deprecated use ShapeInfo.circle\n * @param {module:kld-intersections.Point2D} center\n * @param {number} radius\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static circle(center, radius) {\n return ShapeInfo.circle(...arguments);\n }\n\n /**\n * ellipse\n *\n * @deprecated use ShapeInfo.ellipse\n * @param {module:kld-intersections.Point2D} center\n * @param {number} radiusX\n * @param {number} radiusY\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static ellipse(center, radiusX, radiusY) {\n return ShapeInfo.ellipse(...arguments);\n }\n\n /**\n * line\n *\n * @deprecated use ShapeInfo.line\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static line(p1, p2) {\n return ShapeInfo.line(...arguments);\n }\n\n /**\n * path\n *\n * @deprecated use ShapeInfo.path\n * @param {string} pathData\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static path(pathData) {\n return ShapeInfo.path(...arguments);\n }\n\n /**\n * polygon\n *\n * @deprecated use ShapeInfo.polygon\n * @param {Array} points\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static polygon(points) {\n return ShapeInfo.polygon(...arguments);\n }\n\n /**\n * polyline\n *\n * @deprecated use ShapeInfo.polyline\n * @param {Array} points\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static polyline(points) {\n return ShapeInfo.polyline(...arguments);\n }\n\n /**\n * rectangle\n *\n * @deprecated use ShapeInfo.rectangle\n * @param {module:kld-intersections.Point2D} topLeft\n * @param {module:kld-intersections.Vector2D} size\n * @param {number} [rx]\n * @param {number} [ry]\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static rectangle(topLeft, size, rx = 0, ry = 0) {\n return ShapeInfo.rectangle(...arguments);\n }\n}\n\nexport default AffineShapes;\n","/* eslint-disable no-restricted-syntax */\nimport {Point2D} from \"kld-affine\";\nimport ShapeInfo from \"./ShapeInfo.js\";\n\nclass SvgShapes {\n /**\n * circle\n *\n * @param {SVGCircleElement} circle\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static circle(circle) {\n if (circle instanceof SVGCircleElement === false) {\n throw new TypeError(`Expected SVGCircleElement, but found ${circle}`);\n }\n\n const center = new Point2D(\n circle.cx.baseVal.value,\n circle.cy.baseVal.value\n );\n const radius = circle.r.baseVal.value;\n\n return ShapeInfo.circle(center, radius);\n }\n\n /**\n * ellipse\n *\n * @param {SVGEllipseElement} ellipse\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static ellipse(ellipse) {\n if (ellipse instanceof SVGEllipseElement === false) {\n throw new TypeError(`Expected SVGEllipseElement, but found ${ellipse}`);\n }\n\n const center = new Point2D(\n ellipse.cx.baseVal.value,\n ellipse.cy.baseVal.value\n );\n const radiusX = ellipse.rx.baseVal.value;\n const radiusY = ellipse.ry.baseVal.value;\n\n return ShapeInfo.ellipse(center, radiusX, radiusY);\n }\n\n /**\n * line\n *\n * @param {SVGLineElement} line\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static line(line) {\n if (line instanceof SVGLineElement === false) {\n throw new TypeError(`Expected SVGLineElement, but found ${line}`);\n }\n\n const p1 = new Point2D(\n line.x1.baseVal.value,\n line.y1.baseVal.value\n );\n const p2 = new Point2D(\n line.x2.baseVal.value,\n line.y2.baseVal.value\n );\n\n return ShapeInfo.line(p1, p2);\n }\n\n /**\n * path\n *\n * @param {SVGPathElement} path\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static path(path) {\n if (path instanceof SVGPathElement === false) {\n throw new TypeError(`Expected SVGPathElement, but found ${path}`);\n }\n\n const pathData = path.getAttributeNS(null, \"d\");\n\n return ShapeInfo.path(pathData);\n }\n\n /**\n * polygon\n *\n * @param {SVGPolygonElement} polygon\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static polygon(polygon) {\n if (polygon instanceof SVGPolygonElement === false) {\n throw new TypeError(`Expected SVGPolygonElement, but found ${polygon}`);\n }\n\n const points = [];\n\n for (let i = 0; i < polygon.points.numberOfItems; i++) {\n const point = polygon.points.getItem(i);\n\n points.push(new Point2D(point.x, point.y));\n }\n\n return ShapeInfo.polygon(points);\n }\n\n /**\n * polyline\n *\n * @param {SVGPolylineElement} polyline\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static polyline(polyline) {\n if (polyline instanceof SVGPolylineElement === false) {\n throw new TypeError(`Expected SVGPolylineElement, but found ${polyline}`);\n }\n\n const points = [];\n\n for (let i = 0; i < polyline.points.numberOfItems; i++) {\n const point = polyline.points.getItem(i);\n\n points.push(new Point2D(point.x, point.y));\n }\n\n return ShapeInfo.polyline(points);\n }\n\n /**\n * rect\n *\n * @param {SVGRectElement} rect\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static rect(rect) {\n if (rect instanceof SVGRectElement === false) {\n throw new TypeError(`Expected SVGRectElement, but found ${rect}`);\n }\n\n return ShapeInfo.rectangle(\n rect.x.baseVal.value,\n rect.y.baseVal.value,\n rect.width.baseVal.value,\n rect.height.baseVal.value,\n rect.rx.baseVal.value,\n rect.ry.baseVal.value\n );\n }\n\n /**\n * element\n *\n * @param {SVGElement} element\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static element(element) {\n if (element instanceof SVGElement === false) {\n throw new TypeError(`Expected SVGElement, but found ${element}`);\n }\n\n /* eslint-disable-next-line prefer-destructuring */\n const tagName = element.tagName;\n\n switch (tagName) {\n case \"circle\":\n return SvgShapes.circle(element);\n case \"ellipse\":\n return SvgShapes.ellipse(element);\n case \"line\":\n return SvgShapes.line(element);\n case \"path\":\n return SvgShapes.path(element);\n case \"polygon\":\n return SvgShapes.polygon(element);\n case \"polyline\":\n return SvgShapes.polyline(element);\n case \"rect\":\n return SvgShapes.rect(element);\n default:\n throw new TypeError(`Unrecognized element type: '${tagName}'`);\n }\n }\n}\n\nexport default SvgShapes;\n","/**\n *\n * IntersectionQuery.js\n *\n * @copyright 2017 Kevin Lindsey\n * @module IntersectionQuery\n */\n\nimport {Vector2D} from \"kld-affine\";\n\n/**\n * @namespace\n */\nconst IntersectionQuery = {};\n\n\n/**\n * pointInCircle\n *\n * @param {module:kld-intersections.Point2D} point\n * @param {module:kld-intersections.Point2D} center\n * @param {number} radius\n * @returns {boolean}\n */\nIntersectionQuery.pointInCircle = function(point, center, radius) {\n const v = Vector2D.fromPoints(center, point);\n\n return v.length() <= radius;\n};\n\n\n/**\n * pointInEllipse\n *\n * @param {module:kld-intersections.Point2D} point\n * @param {module:kld-intersections.Point2D} center\n * @param {number} radiusX\n * @param {number} radiusY\n * @returns {boolean}\n */\nIntersectionQuery.pointInEllipse = function(point, center, radiusX, radiusY) {\n const len = point.subtract(center);\n\n return (len.x * len.x) / (radiusX * radiusX) + (len.y * len.y) / (radiusY * radiusY) <= 1;\n};\n\n\n/**\n * pointInPolyline\n *\n * @param {module:kld-intersections.Point2D} point\n * @param {Array} points\n * @returns {boolean}\n */\nIntersectionQuery.pointInPolyline = function(point, points) {\n const {length: len} = points;\n let counter = 0;\n let xInter;\n\n let p1 = points[0];\n\n for (let i = 1; i <= len; i++) {\n const p2 = points[i % len];\n const minY = Math.min(p1.y, p2.y);\n const maxY = Math.max(p1.y, p2.y);\n const maxX = Math.max(p1.x, p2.x);\n\n if (p1.y !== p2.y && minY < point.y && point.y <= maxY && point.x <= maxX) {\n xInter = (point.y - p1.y) * (p2.x - p1.x) / (p2.y - p1.y) + p1.x;\n\n if (p1.x === p2.x || point.x <= xInter) {\n counter++;\n }\n }\n\n p1 = p2;\n }\n\n return (counter % 2 === 1);\n};\n\n\n/**\n * pointInPolyline\n *\n * @param {module:kld-intersections.Point2D} point\n * @param {Array} points\n */\nIntersectionQuery.pointInPolygon = IntersectionQuery.pointInPolyline;\n\n\n/**\n * pointInRectangle\n *\n * @param {module:kld-intersections.Point2D} point\n * @param {module:kld-intersections.Point2D} topLeft\n * @param {module:kld-intersections.Point2D} bottomRight\n * @returns {boolean}\n */\nIntersectionQuery.pointInRectangle = function(point, topLeft, bottomRight) {\n return (\n topLeft.x <= point.x && point.x < bottomRight.x &&\n topLeft.y <= point.y && point.y < bottomRight.y\n );\n};\n\n\nexport default IntersectionQuery;\n"],"names":["Point2D","x","y","this","constructor","that","scalar","precision","Math","abs","t","omt","dx","dy","sqrt","min","max","matrix","a","c","e","b","d","f","Vector2D","divide","length","cos","dot","radians","acos","cross","subtract","project","percent","multiply","p1","p2","Matrix2D","isIdentity","det1","Error","idet","det2","det3","tx","ty","scale","center","scaleX","scaleY","s","sin","cx","cy","vector","unit","tan","E","F","G","H","Q","R","a1","atan2","a2","theta","phi","translation","rotation","nonUniformScaling","rotation0","sign","NaN","IDENTITY","Polynomial","coefs","i","arguments","push","_variable","_s","poly","slice","isNaN","TypeError","result","d1","getDegree","d2","dmax","v1","v2","j","TOLERANCE","pop","err","reduce","pv","cv","divideEqualsScalar","signs","value","round","signString","ACCURACY","minValue","eval","maxValue","tmp1","log","tmp2","LN10","maxIterations","ceil","LN2","n","range","iter","delta","sum","st","os","ost","Array","MAX","h","trapezoid","interpolate","maxAbsX","rb","bounds","minX","maxX","an","m","v","nm","pow","map","coefSelectionFunc","find2Max","acc","bi","nearmax","max_nearmax_pos","negX","posX","reverse","res","boundsUpperRealFujiwara","urb","boundsLowerRealFujiwara","prev","curr","undersqrt","accum","ai","prev_a","pos","neg","maxRealPos","maxRealNeg","minComplex","derivative","simplifyEquals","getLinearRoot","getQuadraticRoots","getCubicRoots","getQuarticRoots","roots","RangeError","bisection","droots","getDerivative","getRootsInInterval","results","c3","c2","c1","offset","discrim","halfB","ZEROepsilon","zeroErrorEstimate","root","tmp","distance","angle","sqrt3","poly_d","derrt","getRoots","sort","dery","nr","maxabsX","guesses","minmax","df","newtonSecantBisection","concat","xs","ys","ns","diff","dift","ho","hp","w","den","x0","max_iterations","dfx","x_correction","x_new","y_atmin","y_atmax","prev_dfx","prev_x_ef_correction","min_correction_factor","isBounded","isEnoughCorrection","parser","o","k","l","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","$Vp","$Vq","$Vr","$Vs","$Vt","$Vu","$Vv","$Vw","$Vx","$Vy","$Vz","$VA","$VB","$VC","$VD","$VE","$VF","$VG","$VH","$VI","$VJ","$VK","$VL","$VM","$VN","$VO","$VP","$VQ","$VR","$VS","$VT","$VU","$VV","$VW","$VX","$VY","$VZ","$V_","$V$","$V01","$V11","$V21","$V31","$V41","$V51","$V61","$V71","$V81","$V91","$Va1","$Vb1","$Vc1","$Vd1","$Ve1","$Vf1","$Vg1","$Vh1","$Vi1","$Vj1","$Vk1","$Vl1","$Vm1","$Vn1","$Vo1","trace","yy","symbols_","terminals_","productions_","performAction","yytext","yyleng","yylineno","yystate","$$","_$","$0","$","type","name","steps","patterns","sequences","left","right","args","undefined","expression","assignTo","patternType","pattern","start","stop","elements","Infinity","substring","parseInt","parseFloat","table","defaultActions","parseError","str","hash","recoverable","error","parse","input","self","stack","vstack","lstack","recovering","EOF","call","lexer","Object","create","sharedState","prototype","hasOwnProperty","setInput","yylloc","yyloc","ranges","options","getPrototypeOf","symbol","preErrorSymbol","state","action","r","p","len","newState","expected","lex","token","yyval","errStr","TERROR","showPosition","join","text","match","line","loc","first_line","last_line","first_column","last_column","apply","_input","_more","_backtrack","done","matched","conditionStack","ch","unput","lines","split","substr","oldLines","more","reject","backtrack_lexer","less","pastInput","past","replace","upcomingInput","next","pre","test_match","indexed_rule","backup","matches","tempMatch","index","rules","_currentRules","flex","begin","condition","popState","conditions","topState","pushState","stateStackSize","yy_","$avoiding_name_collisions","YY_START","Parser","isObject","item","_typeof","isArray","list","lists","missing","every","maxLength","part","items","count","advance","comparator","delimiter","keys","values","entries","pairs","pair","key","assign","FAILURE_VALUE","obj","Transformer","symbolTable","functions","messages","verbose","StdLib","reference","message","level","source","structure","statements","statement","executeExpression","addError","binOp","typeName","operation","_this","seqValue","invokeFunction","object","array","sequence","sequenceSymbolTable","currentObject","step","executePattern","valueGenerator","transform","mapSymbolTable","patternSymbolTable","arg","element","executeObjectExpression","objectSymbolTable","executeArrayPattern","property","propertyPattern","referencedPattern","executeArrayPatternElement","executeArrayElementPattern","executeArrayElementGroupPattern","actualIndex","pushAssign","group","groupResults","elementSymbolTable","addWarning","PathLexeme","UNDEFINED","COMMAND","NUMBER","EOD","PathLexer","pathData","setPathData","_pathData","RegExp","$1","SyntaxError","PathParser","_lexer","_handler","beginParse","mode","lastToken","getNextToken","typeis","parameterCount","params","PARAMCOUNT","toUpperCase","handler","methodName","METHODNAME","endParse","A","C","L","M","S","T","V","Z","q","z","TWO_PI","PI","getArcParameters","startPoint","endPoint","rx","ry","arcFlag","sweepFlag","halfDiff","x1p","y1p","x1px1p","y1py1p","lambda","factor","rxrx","ryry","rxy1","ryx1","sq","normal","mid","add","cxp","cyp","xcr1","xcr2","ycr1","ycr2","theta1","angleBetween","deltaTheta","PathHandler","shapeCreator","shapes","firstX","firstY","lastX","lastY","lastCommand","shape","xAxisRotation","addShape","arcParameters","arc","x1","y1","x2","y2","cubicBezier","quadraticBezier","controlX","controlY","secondToLast","degree90","ShapeInfo","ARC","QUADRATIC_BEZIER","CUBIC_BEZIER","CIRCLE","ELLIPSE","LINE","PATH","POLYGON","POLYLINE","RECTANGLE","p1x","p1y","p2x","p2y","width","height","y0","x3","y3","segments","properties","transformType","data","transformer","execute","JSON","stringify","addFunction","setHandler","parseData","UNIT_X","isNullish","normalizeAngle","restrictPointsToArc","intersections","radiusX","radiusY","startRadians","endRadians","points","Intersection","startNormal","endNormal","fromPoints","appendPoint","status","closePolygon","copy","init","point","shape1","shape2","intersectPathShape","intersectArcShape","method","path","segment","inter","intersect","appendPoints","ellipse","a3","b1","b2","b3","c12","c11","c10","c22","c21","c20","g","xp","xRoots","yp","yRoots","checkRoots","xRoot","yRoot","b4","c23","c10x2","c10y2","c11x2","c11y2","c12x2","c12y2","c20x2","c20y2","c21x2","c21y2","c22x2","c22y2","c23x2","c23y2","p3","intersectBezier2Ellipse","ec","c0","cl","p4","lerp","p5","p6","intersectBezier2Polyline","intersectBezier2Line","r1","r2","topRight","bottomLeft","inter1","inter2","inter3","inter4","a4","c13","e0","e1","e2","e3","f0","f1","f2","f3","g0","g1","g2","g3","h0","h1","h2","h3","i0","i1","i2","i3","intersectBezier3Ellipse","p7","p8","p9","p10","intersectBezier3Polyline","intersectBezier3Line","r_max","r_min","c_dist","distanceFrom","cc","intersectEllipseEllipse","deter","u1","u2","intersectCirclePolyline","intersectCircleLine","rx1","ry1","rx2","ry2","AB","AC","AD","AE","AF","BC","BE","BF","CD","DE","DF","BFpDE","BEmCD","norm0","norm1","tst","orign","dir","mDir","mDiff","t_a","t_b","intersectEllipsePolyline","intersectEllipseLine","ua_t","ub_t","u_b","ua","ub","intersectLinePolyline","intersectLineLine","points1","points2","intersectPolylinePolyline","intersectPolylineRectangle","intersectLineRectangle","Shapes","centerX","centerY","p3x","p3y","p4x","p4y","radius","circle","coords","polygon","polyline","rectangle","AffineShapes","topLeft","size","SvgShapes","SVGCircleElement","baseVal","SVGEllipseElement","SVGLineElement","SVGPathElement","getAttributeNS","SVGPolygonElement","numberOfItems","getItem","SVGPolylineElement","rect","SVGRectElement","SVGElement","tagName","IntersectionQuery","xInter","counter","minY","maxY","pointInPolygon","pointInPolyline","pointInRectangle","bottomRight"],"mappings":"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CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,GAAGC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,G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AAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,C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rlB,KAAK4kB,aAAagB,YAC5B5lB,KAAKglB,MAAOhlB,KAAKilB,MACjBO,EAAIC,EACJC,EAAIC,EACJ7lB,EAAGC,SAGFilB,MAAQllB,OACRmlB,MAAQllB,OACRmlB,YAAc,4CAaPM,EAAIC,EAAIC,EAAIC,EAAI7lB,EAAGC,QAC1BslB,SAASrlB,KAAK4kB,aAAagB,YAC5B5lB,KAAKglB,MAAOhlB,KAAKilB,MACjBjlB,KAAKglB,MAAQQ,EAAIxlB,KAAKilB,MAAQQ,EAC9BzlB,KAAKglB,MAAQU,EAAI1lB,KAAKilB,MAAQU,EAC9B3lB,KAAKglB,MAAQllB,EAAGE,KAAKilB,MAAQllB,SAG5BilB,OAASllB,OACTmlB,OAASllB,OACTmlB,YAAc,gDAQHplB,QACXulB,SAASrlB,KAAK4kB,aAAalM,KAC5B1Y,KAAKglB,MAAOhlB,KAAKilB,MACjBnlB,EAAGE,KAAKilB,aAGPD,MAAQllB,OACRolB,YAAc,gDAQHplB,QACXulB,SAASrlB,KAAK4kB,aAAalM,KAC5B1Y,KAAKglB,MAAOhlB,KAAKilB,MACjBjlB,KAAKglB,MAAQllB,EAAGE,KAAKilB,aAGpBD,OAASllB,OACTolB,YAAc,sCASbplB,EAAGC,QACJslB,SAASrlB,KAAK4kB,aAAalM,KAC5B1Y,KAAKglB,MAAOhlB,KAAKilB,MACjBnlB,EAAGC,SAGFilB,MAAQllB,OACRmlB,MAAQllB,OACRmlB,YAAc,sCASbplB,EAAGC,QACJslB,SAASrlB,KAAK4kB,aAAalM,KAC5B1Y,KAAKglB,MAAOhlB,KAAKilB,MACjBjlB,KAAKglB,MAAQllB,EAAGE,KAAKilB,MAAQllB,SAG5BilB,OAASllB,OACTmlB,OAASllB,OACTmlB,YAAc,sCASbplB,EAAGC,QACJ+kB,OAAShlB,OACTilB,OAAShlB,OACTilB,MAAQllB,OACRmlB,MAAQllB,OACRmlB,YAAc,sCASbplB,EAAGC,QACJ+kB,QAAUhlB,OACVilB,QAAUhlB,OACVilB,OAASllB,OACTmlB,OAASllB,OACTmlB,YAAc,gDAWHM,EAAIC,EAAI3lB,EA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"} \ No newline at end of file diff --git a/dist/index-umd.js b/dist/index-umd.js index 65f680f..9c75053 100644 --- a/dist/index-umd.js +++ b/dist/index-umd.js @@ -2427,57 +2427,94 @@ return _o; }, $V0 = [1, 6], - $V1 = [1, 17], + $V1 = [1, 19], $V2 = [1, 7], $V3 = [1, 10], $V4 = [1, 13], - $V5 = [1, 28], + $V5 = [1, 32], $V6 = [1, 14], - $V7 = [1, 34], + $V7 = [1, 38], $V8 = [1, 15], - $V9 = [1, 33], - $Va = [1, 21], - $Vb = [1, 24], - $Vc = [1, 25], + $V9 = [1, 22], + $Va = [1, 37], + $Vb = [1, 25], + $Vc = [1, 28], $Vd = [1, 29], - $Ve = [1, 30], - $Vf = [1, 32], - $Vg = [1, 31], - $Vh = [1, 5], - $Vi = [1, 5, 14, 16, 24, 28, 41], - $Vj = [1, 57], - $Vk = [1, 59], - $Vl = [1, 58], - $Vm = [1, 46], - $Vn = [1, 52], - $Vo = [1, 41], - $Vp = [1, 42], - $Vq = [1, 43], - $Vr = [1, 44], - $Vs = [1, 45], - $Vt = [1, 47], - $Vu = [1, 49], - $Vv = [1, 50], - $Vw = [1, 55], - $Vx = [1, 56], - $Vy = [1, 5, 14, 16, 24, 28, 41, 54], - $Vz = [1, 5, 14, 16, 24, 28, 31, 32, 33, 34, 41, 54], - $VA = [1, 5, 14, 16, 24, 28, 31, 32, 33, 34, 38, 40, 41, 54], - $VB = [1, 5, 14, 16, 24, 28, 31, 32, 33, 34, 38, 40, 41, 54, 58], - $VC = [1, 5, 14, 16, 24, 28, 41, 58], - $VD = [1, 93], - $VE = [1, 98], - $VF = [1, 112], - $VG = [1, 115], - $VH = [14, 41], - $VI = [14, 28], - $VJ = [1, 127], - $VK = [14, 24, 41], - $VL = [14, 24, 41, 58], - $VM = [14, 28, 58], - $VN = [14, 24], - $VO = [1, 5, 14, 28, 41], - $VP = [1, 151]; + $Ve = [1, 33], + $Vf = [1, 34], + $Vg = [1, 36], + $Vh = [1, 35], + $Vi = [1, 5], + $Vj = [1, 5, 14, 16, 24, 28, 56], + $Vk = [1, 61], + $Vl = [1, 63], + $Vm = [1, 62], + $Vn = [1, 50], + $Vo = [1, 56], + $Vp = [1, 45], + $Vq = [1, 46], + $Vr = [1, 47], + $Vs = [1, 48], + $Vt = [1, 49], + $Vu = [1, 51], + $Vv = [1, 53], + $Vw = [1, 54], + $Vx = [1, 59], + $Vy = [1, 60], + $Vz = [1, 5, 14, 16, 24, 28, 56, 69], + $VA = [1, 69], + $VB = [1, 70], + $VC = [1, 71], + $VD = [1, 72], + $VE = [1, 73], + $VF = [1, 74], + $VG = [1, 5, 14, 16, 24, 28, 31, 32, 34, 35, 36, 37, 38, 39, 56, 69], + $VH = [1, 75], + $VI = [1, 76], + $VJ = [1, 77], + $VK = [1, 78], + $VL = [1, 79], + $VM = [1, 80], + $VN = [1, 5, 14, 16, 24, 28, 31, 32, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 56, 69], + $VO = [1, 5, 14, 16, 24, 28, 31, 32, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 52, 55, 56, 69], + $VP = [2, 51], + $VQ = [1, 5, 14, 16, 24, 28, 31, 32, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 52, 55, 56, 69, 73], + $VR = [1, 5, 14, 16, 24, 28, 56, 73], + $VS = [1, 109], + $VT = [1, 125], + $VU = [1, 115], + $VV = [1, 122], + $VW = [1, 126], + $VX = [1, 133], + $VY = [1, 135], + $VZ = [1, 117], + $V_ = [1, 129], + $V$ = [1, 127], + $V01 = [1, 134], + $V11 = [1, 128], + $V21 = [1, 130], + $V31 = [1, 138], + $V41 = [1, 120], + $V51 = [1, 118], + $V61 = [1, 119], + $V71 = [1, 121], + $V81 = [1, 137], + $V91 = [1, 124], + $Va1 = [1, 131], + $Vb1 = [1, 132], + $Vc1 = [1, 136], + $Vd1 = [1, 123], + $Ve1 = [1, 162], + $Vf1 = [1, 165], + $Vg1 = [14, 56], + $Vh1 = [14, 28], + $Vi1 = [1, 177], + $Vj1 = [14, 24, 56], + $Vk1 = [14, 24, 56, 73], + $Vl1 = [14, 28, 73], + $Vm1 = [14, 24], + $Vn1 = [1, 5, 14, 28, 56], + $Vo1 = [1, 201]; var parser = { trace: function trace() {}, @@ -2502,7 +2539,7 @@ "=~": 18, "namedPattern": 19, "expression": 20, - "mathExpression": 21, + "booleanExpression": 21, "MAP": 22, "(": 23, ")": 24, @@ -2511,59 +2548,72 @@ "patterns": 27, "}": 28, "SEQUENCES": 29, - "callExpression": 30, - "+": 31, - "-": 32, - "*": 33, - "/": 34, - "argumentList": 35, - "memberExpression": 36, - "primaryExpression": 37, - ".": 38, - "integer": 39, - "[": 40, - "]": 41, - "boolean": 42, - "NULL_TYPE": 43, - "float": 44, - "string": 45, - "UNDEFINED_TYPE": 46, - "$": 47, - "arrayExpression": 48, - "objectExpression": 49, - "expressionElements": 50, - "expressionElement": 51, - "expressionProperties": 52, - "expressionProperty": 53, - ":": 54, - "argument": 55, - "...": 56, - "pattern": 57, - "AS": 58, - "ANY_TYPE": 59, - "ARRAY_TYPE": 60, - "BOOLEAN_TYPE": 61, - "TRUE": 62, - "FALSE": 63, - "NUMBER_TYPE": 64, - "OBJECT_TYPE": 65, - "STRING_TYPE": 66, - "arrayPattern": 67, - "objectPattern": 68, - "PATTERN": 69, - "ENUMERATION": 70, - "patternElements": 71, - "namedPatternElement": 72, - "patternElement": 73, - "range": 74, - "..": 75, - "patternProperties": 76, - "namedPatternProperty": 77, - "namedProperty": 78, - "STRING": 79, - "NUMBER": 80, - "stringOrIdentifier": 81, - "identifiers": 82, + "relationalExpression": 30, + "AND": 31, + "OR": 32, + "mathExpression": 33, + "<": 34, + "<=": 35, + "==": 36, + "!=": 37, + ">=": 38, + ">": 39, + "callExpression": 40, + "+": 41, + "-": 42, + "*": 43, + "/": 44, + "MOD": 45, + "POW": 46, + "argumentList": 47, + "unaryExpression": 48, + "memberExpression": 49, + "NOT": 50, + "primaryExpression": 51, + ".": 52, + "name": 53, + "integer": 54, + "[": 55, + "]": 56, + "boolean": 57, + "NULL_TYPE": 58, + "float": 59, + "string": 60, + "UNDEFINED_TYPE": 61, + "$": 62, + "arrayExpression": 63, + "objectExpression": 64, + "expressionElements": 65, + "expressionElement": 66, + "expressionProperties": 67, + "expressionProperty": 68, + ":": 69, + "argument": 70, + "...": 71, + "pattern": 72, + "AS": 73, + "ANY_TYPE": 74, + "ARRAY_TYPE": 75, + "BOOLEAN_TYPE": 76, + "TRUE": 77, + "FALSE": 78, + "NUMBER_TYPE": 79, + "OBJECT_TYPE": 80, + "STRING_TYPE": 81, + "arrayPattern": 82, + "objectPattern": 83, + "PATTERN": 84, + "ENUMERATION": 85, + "patternElements": 86, + "namedPatternElement": 87, + "patternElement": 88, + "range": 89, + "..": 90, + "patternProperties": 91, + "namedPatternProperty": 92, + "patternProperty": 93, + "STRING": 94, + "NUMBER": 95, "$accept": 0, "$end": 1 }, @@ -2584,34 +2634,45 @@ 26: "{", 28: "}", 29: "SEQUENCES", - 31: "+", - 32: "-", - 33: "*", - 34: "/", - 38: ".", - 40: "[", - 41: "]", - 43: "NULL_TYPE", - 46: "UNDEFINED_TYPE", - 47: "$", - 54: ":", - 56: "...", - 58: "AS", - 59: "ANY_TYPE", - 60: "ARRAY_TYPE", - 61: "BOOLEAN_TYPE", - 62: "TRUE", - 63: "FALSE", - 64: "NUMBER_TYPE", - 65: "OBJECT_TYPE", - 66: "STRING_TYPE", - 69: "PATTERN", - 70: "ENUMERATION", - 75: "..", - 79: "STRING", - 80: "NUMBER" + 31: "AND", + 32: "OR", + 34: "<", + 35: "<=", + 36: "==", + 37: "!=", + 38: ">=", + 39: ">", + 41: "+", + 42: "-", + 43: "*", + 44: "/", + 45: "MOD", + 46: "POW", + 50: "NOT", + 52: ".", + 55: "[", + 56: "]", + 58: "NULL_TYPE", + 61: "UNDEFINED_TYPE", + 62: "$", + 69: ":", + 71: "...", + 73: "AS", + 74: "ANY_TYPE", + 75: "ARRAY_TYPE", + 76: "BOOLEAN_TYPE", + 77: "TRUE", + 78: "FALSE", + 79: "NUMBER_TYPE", + 80: "OBJECT_TYPE", + 81: "STRING_TYPE", + 84: "PATTERN", + 85: "ENUMERATION", + 90: "..", + 94: "STRING", + 95: "NUMBER" }, - productions_: [0, [3, 1], [3, 2], [4, 3], [4, 1], [6, 1], [6, 1], [7, 4], [7, 4], [13, 3], [13, 1], [8, 1], [15, 3], [15, 1], [17, 2], [17, 1], [20, 1], [20, 6], [20, 4], [20, 4], [21, 1], [21, 3], [21, 3], [21, 3], [21, 3], [30, 3], [30, 4], [30, 1], [36, 1], [36, 3], [36, 3], [36, 4], [37, 1], [37, 1], [37, 1], [37, 1], [37, 1], [37, 1], [37, 1], [37, 1], [37, 1], [37, 3], [48, 2], [48, 3], [50, 3], [50, 1], [51, 1], [51, 1], [49, 2], [49, 3], [52, 3], [52, 1], [53, 3], [53, 1], [53, 1], [35, 3], [35, 1], [55, 1], [55, 2], [27, 3], [27, 1], [19, 1], [19, 3], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 1], [57, 2], [57, 2], [57, 1], [67, 2], [67, 3], [71, 3], [71, 1], [72, 1], [72, 3], [73, 1], [73, 3], [73, 3], [73, 5], [74, 3], [74, 2], [74, 2], [74, 1], [68, 2], [68, 3], [76, 3], [76, 1], [77, 1], [77, 3], [78, 3], [78, 1], [42, 1], [42, 1], [45, 1], [39, 1], [44, 1], [81, 1], [81, 1], [82, 3], [82, 1]], + productions_: [0, [3, 1], [3, 2], [4, 3], [4, 1], [6, 1], [6, 1], [7, 4], [7, 4], [13, 3], [13, 1], [8, 1], [15, 3], [15, 1], [17, 2], [17, 1], [20, 1], [20, 6], [20, 4], [20, 4], [21, 1], [21, 3], [21, 3], [30, 1], [30, 3], [30, 3], [30, 3], [30, 3], [30, 3], [30, 3], [33, 1], [33, 3], [33, 3], [33, 3], [33, 3], [33, 3], [33, 3], [40, 3], [40, 4], [40, 1], [48, 1], [48, 2], [49, 1], [49, 3], [49, 3], [49, 4], [51, 1], [51, 1], [51, 1], [51, 1], [51, 1], [51, 1], [51, 1], [51, 1], [51, 1], [51, 3], [63, 2], [63, 3], [65, 3], [65, 1], [66, 1], [66, 1], [64, 2], [64, 3], [67, 3], [67, 1], [68, 3], [68, 1], [68, 1], [47, 3], [47, 1], [70, 1], [70, 2], [27, 3], [27, 1], [19, 1], [19, 3], [72, 1], [72, 1], [72, 1], [72, 1], [72, 1], [72, 1], [72, 1], [72, 1], [72, 1], [72, 1], [72, 1], [72, 1], [72, 1], [72, 1], [72, 2], [72, 2], [72, 1], [82, 2], [82, 3], [86, 3], [86, 1], [87, 1], [87, 3], [88, 1], [88, 3], [88, 3], [88, 5], [89, 3], [89, 2], [89, 2], [89, 1], [83, 2], [83, 3], [91, 3], [91, 1], [92, 1], [92, 3], [93, 3], [93, 1], [57, 1], [57, 1], [60, 1], [54, 1], [59, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1], [53, 1]], performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */ , $$ @@ -2632,13 +2693,12 @@ case 3: case 9: case 12: - case 44: - case 50: - case 55: - case 59: - case 82: + case 58: + case 64: + case 69: + case 73: case 96: - case 109: + case 110: $$[$0 - 2].push($$[$0]); this.$ = $$[$0 - 2]; break; @@ -2646,13 +2706,12 @@ case 4: case 10: case 13: - case 45: - case 51: - case 56: - case 60: - case 83: + case 59: + case 65: + case 70: + case 74: case 97: - case 110: + case 111: this.$ = [$$[$0]]; break; @@ -2662,16 +2721,42 @@ case 15: case 16: case 20: - case 27: - case 28: + case 23: + case 30: case 39: case 40: - case 46: - case 47: + case 42: + case 53: case 54: - case 57: - case 98: - case 107: + case 60: + case 61: + case 68: + case 71: + case 112: + case 121: + case 122: + case 123: + case 124: + case 125: + case 126: + case 127: + case 128: + case 129: + case 130: + case 131: + case 132: + case 133: + case 134: + case 135: + case 136: + case 137: + case 138: + case 139: + case 140: + case 141: + case 142: + case 143: + case 144: this.$ = $$[$0]; break; @@ -2721,13 +2806,77 @@ case 21: this.$ = { - type: 'add', + type: 'and', left: $$[$0 - 2], right: $$[$0] }; break; case 22: + this.$ = { + type: 'or', + left: $$[$0 - 2], + right: $$[$0] + }; + break; + + case 24: + this.$ = { + type: 'less_than', + left: $$[$0 - 2], + right: $$[$0] + }; + break; + + case 25: + this.$ = { + type: 'less_equal', + left: $$[$0 - 2], + right: $$[$0] + }; + break; + + case 26: + this.$ = { + type: 'equal', + left: $$[$0 - 2], + right: $$[$0] + }; + break; + + case 27: + this.$ = { + type: 'not_equal', + left: $$[$0 - 2], + right: $$[$0] + }; + break; + + case 28: + this.$ = { + type: 'greater_equal', + left: $$[$0 - 2], + right: $$[$0] + }; + break; + + case 29: + this.$ = { + type: 'greater_than', + left: $$[$0 - 2], + right: $$[$0] + }; + break; + + case 31: + this.$ = { + type: 'add', + left: $$[$0 - 2], + right: $$[$0] + }; + break; + + case 32: this.$ = { type: 'subtract', left: $$[$0 - 2], @@ -2735,7 +2884,7 @@ }; break; - case 23: + case 33: this.$ = { type: 'multiply', left: $$[$0 - 2], @@ -2743,7 +2892,7 @@ }; break; - case 24: + case 34: this.$ = { type: 'divide', left: $$[$0 - 2], @@ -2751,7 +2900,23 @@ }; break; - case 25: + case 35: + this.$ = { + type: 'modulus', + left: $$[$0 - 2], + right: $$[$0] + }; + break; + + case 36: + this.$ = { + type: 'power', + left: $$[$0 - 2], + right: $$[$0] + }; + break; + + case 37: this.$ = { type: 'invoke', name: $$[$0 - 2], @@ -2759,7 +2924,7 @@ }; break; - case 26: + case 38: this.$ = { type: 'invoke', name: $$[$0 - 3], @@ -2767,7 +2932,14 @@ }; break; - case 29: + case 41: + this.$ = { + type: 'not', + value: $$[$0] + }; + break; + + case 43: this.$ = { type: 'get-property', left: $$[$0 - 2], @@ -2775,7 +2947,7 @@ }; break; - case 30: + case 44: this.$ = { type: 'get-index', left: $$[$0 - 2], @@ -2783,7 +2955,7 @@ }; break; - case 31: + case 45: this.$ = { type: 'get-index', left: $$[$0 - 3], @@ -2791,87 +2963,87 @@ }; break; - case 32: + case 46: this.$ = { type: 'boolean', value: $$[$0] }; break; - case 33: + case 47: this.$ = { type: 'boolean', value: null }; break; - case 34: + case 48: this.$ = { type: 'number', value: $$[$0] }; break; - case 35: + case 49: this.$ = { type: 'string', value: $$[$0] }; break; - case 36: + case 50: this.$ = { type: 'undefined', value: undefined }; break; - case 37: + case 51: this.$ = { type: 'get-value', name: $$[$0] }; break; - case 38: + case 52: this.$ = { type: 'get-structure' }; break; - case 41: + case 55: this.$ = $$[$0 - 1]; break; - case 42: + case 56: this.$ = { type: 'array', value: [] }; break; - case 43: + case 57: this.$ = { type: 'array', value: $$[$0 - 1] }; break; - case 48: + case 62: this.$ = { type: 'object', value: [] }; break; - case 49: + case 63: this.$ = { type: 'object', value: $$[$0 - 1] }; break; - case 52: + case 66: this.$ = { type: 'property', name: $$[$0 - 2], @@ -2879,7 +3051,7 @@ }; break; - case 53: + case 67: this.$ = { type: 'property', name: $$[$0], @@ -2887,27 +3059,27 @@ }; break; - case 58: + case 72: this.$ = { type: 'spread', expression: $$[$0] }; break; - case 61: - case 84: + case 75: + case 98: $$[$0].assignTo = null; this.$ = $$[$0]; break; - case 62: - case 85: + case 76: case 99: + case 113: $$[$0 - 2].assignTo = $$[$0]; this.$ = $$[$0 - 2]; break; - case 63: + case 77: this.$ = { type: 'pattern', patternType: 'any', @@ -2915,7 +3087,7 @@ }; break; - case 64: + case 78: this.$ = { type: 'pattern', patternType: 'array', @@ -2923,7 +3095,7 @@ }; break; - case 65: + case 79: this.$ = { type: 'pattern', patternType: 'boolean', @@ -2931,7 +3103,7 @@ }; break; - case 66: + case 80: this.$ = { type: 'pattern', patternType: 'boolean', @@ -2939,7 +3111,7 @@ }; break; - case 67: + case 81: this.$ = { type: 'pattern', patternType: 'boolean', @@ -2947,7 +3119,7 @@ }; break; - case 68: + case 82: this.$ = { type: 'pattern', patternType: 'null', @@ -2955,7 +3127,7 @@ }; break; - case 69: + case 83: this.$ = { type: 'pattern', patternType: 'number', @@ -2963,7 +3135,7 @@ }; break; - case 70: + case 84: this.$ = { type: 'pattern', patternType: 'number', @@ -2971,7 +3143,7 @@ }; break; - case 71: + case 85: this.$ = { type: 'pattern', patternType: 'object', @@ -2979,7 +3151,7 @@ }; break; - case 72: + case 86: this.$ = { type: 'pattern', patternType: 'string', @@ -2987,7 +3159,7 @@ }; break; - case 73: + case 87: this.$ = { type: 'pattern', patternType: 'string', @@ -2995,7 +3167,7 @@ }; break; - case 74: + case 88: this.$ = { type: 'pattern', patternType: 'undefined', @@ -3003,26 +3175,26 @@ }; break; - case 75: - case 76: + case 89: + case 90: this.$ = $$[$0]; break; - case 77: + case 91: this.$ = { type: 'pattern-reference', name: $$[$0] }; break; - case 78: + case 92: this.$ = { type: 'enumeration-reference', name: $$[$0] }; break; - case 79: + case 93: this.$ = { type: 'pattern', patternType: 'reference', @@ -3030,7 +3202,7 @@ }; break; - case 80: + case 94: this.$ = { type: 'pattern', patternType: 'array-pattern', @@ -3038,7 +3210,7 @@ }; break; - case 81: + case 95: this.$ = { type: 'pattern', patternType: 'array-pattern', @@ -3046,7 +3218,7 @@ }; break; - case 86: + case 100: this.$ = { type: 'element', pattern: $$[$0], @@ -3058,7 +3230,7 @@ }; break; - case 87: + case 101: this.$ = { type: 'element', pattern: $$[$0 - 2], @@ -3066,7 +3238,7 @@ }; break; - case 88: + case 102: this.$ = { type: 'element-group', elements: $$[$0 - 1], @@ -3078,7 +3250,7 @@ }; break; - case 89: + case 103: this.$ = { type: 'element-group', elements: $$[$0 - 3], @@ -3086,7 +3258,7 @@ }; break; - case 90: + case 104: this.$ = { type: 'range', start: $$[$0 - 2], @@ -3094,7 +3266,7 @@ }; break; - case 91: + case 105: this.$ = { type: 'range', start: 0, @@ -3102,7 +3274,7 @@ }; break; - case 92: + case 106: this.$ = { type: 'range', start: $$[$0 - 1], @@ -3110,7 +3282,7 @@ }; break; - case 93: + case 107: this.$ = { type: 'range', start: $$[$0], @@ -3118,7 +3290,7 @@ }; break; - case 94: + case 108: this.$ = { type: 'pattern', patternType: 'object', @@ -3126,7 +3298,7 @@ }; break; - case 95: + case 109: this.$ = { type: 'pattern', patternType: 'object-pattern', @@ -3134,7 +3306,7 @@ }; break; - case 100: + case 114: this.$ = { type: 'property', name: $$[$0 - 2], @@ -3142,7 +3314,7 @@ }; break; - case 101: + case 115: this.$ = { type: 'property', name: $$[$0], @@ -3154,24 +3326,23 @@ }; break; - case 102: + case 116: this.$ = true; break; - case 103: + case 117: this.$ = false; break; - case 104: - case 108: + case 118: this.$ = $$[$0].substring(1, $$[$0].length - 1); break; - case 105: + case 119: this.$ = parseInt($$[$0]); break; - case 106: + case 120: this.$ = parseFloat($$[$0]); break; } @@ -3196,75 +3367,111 @@ 26: $V7, 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { 1: [3] }, { 1: [2, 1], - 5: [1, 35] - }, o($Vh, [2, 4]), o($Vh, [2, 5]), o($Vh, [2, 6]), { - 10: [1, 36] + 5: [1, 39] + }, o($Vi, [2, 4]), o($Vi, [2, 5]), o($Vi, [2, 6]), { + 10: [1, 40] }, { - 10: [1, 37] - }, o([1, 5, 14, 24, 28, 41], [2, 11], { - 16: [1, 38] - }), o($Vi, [2, 13]), { - 10: $Vj, - 19: 39, - 26: $Vk, - 40: $Vl, - 43: $Vm, - 44: 48, - 45: 51, - 46: $Vn, - 57: 40, - 59: $Vo, - 60: $Vp, - 61: $Vq, - 62: $Vr, - 63: $Vs, - 64: $Vt, - 65: $Vu, - 66: $Vv, - 67: 53, - 68: 54, - 69: $Vw, - 70: $Vx, - 79: $Vf, - 80: $Vg - }, o($Vi, [2, 15]), o($Vy, [2, 16], { - 31: [1, 60], - 32: [1, 61], - 33: [1, 62], - 34: [1, 63] - }), { + 10: [1, 41] + }, o([1, 5, 14, 24, 28, 56], [2, 11], { + 16: [1, 42] + }), o($Vj, [2, 13]), { + 10: $Vk, + 19: 43, + 26: $Vl, + 55: $Vm, + 58: $Vn, + 59: 52, + 60: 55, + 61: $Vo, + 72: 44, + 74: $Vp, + 75: $Vq, + 76: $Vr, + 77: $Vs, + 78: $Vt, + 79: $Vu, + 80: $Vv, + 81: $Vw, + 82: 57, + 83: 58, + 84: $Vx, + 85: $Vy, + 94: $Vg, + 95: $Vh + }, o($Vj, [2, 15]), o($Vz, [2, 16]), { 23: [1, 64] }, { 26: [1, 65] }, { 26: [1, 66] - }, o($Vz, [2, 20]), o($VA, [2, 37], { - 23: [1, 67] - }), o($Vz, [2, 27], { - 38: [1, 68], - 40: [1, 69] - }), o($VA, [2, 28]), o($VA, [2, 32]), o($VA, [2, 33]), o($VA, [2, 34]), o($VA, [2, 35]), o($VA, [2, 36]), o($VA, [2, 38]), o($VA, [2, 39]), o($VA, [2, 40]), { + }, o($Vz, [2, 20], { + 31: [1, 67], + 32: [1, 68], + 34: $VA, + 35: $VB, + 36: $VC, + 37: $VD, + 38: $VE, + 39: $VF + }), o($VG, [2, 23], { + 41: $VH, + 42: $VI, + 43: $VJ, + 44: $VK, + 45: $VL, + 46: $VM + }), o($VN, [2, 30]), o($VO, $VP, { + 23: [1, 81] + }), o($VN, [2, 39]), o($VN, [2, 40], { + 52: [1, 82], + 55: [1, 83] + }), { + 10: [1, 85], + 23: $V5, + 26: $V7, + 48: 84, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, + 62: $Vd, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, o($VO, [2, 42]), o($VO, [2, 46]), o($VO, [2, 47]), o($VO, [2, 48]), o($VO, [2, 49]), o($VO, [2, 50]), o($VO, [2, 52]), o($VO, [2, 53]), o($VO, [2, 54]), { 10: $V1, - 20: 70, + 20: 86, 21: 12, 22: $V4, 23: $V5, @@ -3272,27 +3479,31 @@ 26: $V7, 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg - }, o($VA, [2, 102]), o($VA, [2, 103]), o($VB, [2, 106]), o($VB, [2, 104]), { - 7: 75, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, o($VO, [2, 116]), o($VO, [2, 117]), o($VQ, [2, 120]), o($VQ, [2, 118]), { + 7: 91, 9: $V0, 10: $V1, 12: $V2, - 20: 74, + 20: 90, 21: 12, 22: $V4, 23: $V5, @@ -3300,58 +3511,66 @@ 26: $V7, 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 41: [1, 71], - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, - 50: 72, - 51: 73, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 56: [1, 87], + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 65: 88, + 66: 89, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { - 7: 80, + 7: 96, 9: $V0, 10: $V1, 12: $V2, - 20: 79, + 20: 95, 21: 12, 22: $V4, 23: $V5, 25: $V6, 26: $V7, - 28: [1, 76], + 28: [1, 92], 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, - 52: 77, - 53: 78, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 67: 93, + 68: 94, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { 1: [2, 2], - 6: 81, + 6: 97, 7: 4, 8: 5, 9: $V0, @@ -3364,304 +3583,612 @@ 21: 12, 22: $V4, 23: $V5, - 25: $V6, + 25: $V6, + 26: $V7, + 29: $V8, + 30: 16, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, + 62: $Vd, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, { + 11: [1, 98] + }, { + 11: [1, 99] + }, { + 10: $V1, + 17: 100, + 18: $V3, + 20: 11, + 21: 12, + 22: $V4, + 23: $V5, + 25: $V6, + 26: $V7, + 29: $V8, + 30: 16, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, + 62: $Vd, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, o($Vj, [2, 14]), o($Vj, [2, 75], { + 73: [1, 101] + }), o($VR, [2, 77]), o($VR, [2, 78]), o($VR, [2, 79]), o($VR, [2, 80]), o($VR, [2, 81]), o($VR, [2, 82]), o($VR, [2, 83]), o($VR, [2, 84]), o($VR, [2, 85]), o($VR, [2, 86]), o($VR, [2, 87]), o($VR, [2, 88]), o($VR, [2, 89]), o($VR, [2, 90]), { + 10: [1, 102] + }, { + 10: [1, 103] + }, o($VR, [2, 93]), { + 10: $Vk, + 23: $VS, + 26: $Vl, + 55: $Vm, + 56: [1, 104], + 58: $Vn, + 59: 52, + 60: 55, + 61: $Vo, + 72: 108, + 74: $Vp, + 75: $Vq, + 76: $Vr, + 77: $Vs, + 78: $Vt, + 79: $Vu, + 80: $Vv, + 81: $Vw, + 82: 57, + 83: 58, + 84: $Vx, + 85: $Vy, + 86: 105, + 87: 106, + 88: 107, + 94: $Vg, + 95: $Vh + }, { + 9: $VT, + 10: $VU, + 12: $VV, + 22: $VW, + 25: $VX, + 28: [1, 110], + 29: $VY, + 31: $VZ, + 32: $V_, + 45: $V$, + 46: $V01, + 50: $V11, + 53: 114, + 58: $V21, + 60: 116, + 61: $V31, + 73: $V41, + 74: $V51, + 75: $V61, + 76: $V71, + 77: $V81, + 78: $V91, + 79: $Va1, + 80: $Vb1, + 81: $Vc1, + 85: $Vd1, + 91: 111, + 92: 112, + 93: 113, + 94: $Vg + }, { + 10: $V1, + 20: 139, + 21: 12, + 22: $V4, + 23: $V5, + 25: $V6, + 26: $V7, + 29: $V8, + 30: 16, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, + 62: $Vd, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, { + 10: $Vk, + 19: 141, + 26: $Vl, + 27: 140, + 55: $Vm, + 58: $Vn, + 59: 52, + 60: 55, + 61: $Vo, + 72: 44, + 74: $Vp, + 75: $Vq, + 76: $Vr, + 77: $Vs, + 78: $Vt, + 79: $Vu, + 80: $Vv, + 81: $Vw, + 82: 57, + 83: 58, + 84: $Vx, + 85: $Vy, + 94: $Vg, + 95: $Vh + }, { + 8: 143, + 10: $V1, + 13: 142, + 15: 8, + 17: 9, + 18: $V3, + 20: 11, + 21: 12, + 22: $V4, + 23: $V5, + 25: $V6, + 26: $V7, + 29: $V8, + 30: 16, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, + 62: $Vd, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, { + 10: $V1, + 23: $V5, + 26: $V7, + 30: 144, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, + 62: $Vd, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, { + 10: $V1, + 23: $V5, + 26: $V7, + 30: 145, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, + 62: $Vd, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, { + 10: $V1, + 23: $V5, + 26: $V7, + 33: 146, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, + 62: $Vd, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, { + 10: $V1, + 23: $V5, + 26: $V7, + 33: 147, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, + 62: $Vd, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, { + 10: $V1, + 23: $V5, 26: $V7, - 29: $V8, - 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 33: 148, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg - }, { - 11: [1, 82] - }, { - 11: [1, 83] + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { 10: $V1, - 17: 84, - 18: $V3, - 20: 11, - 21: 12, - 22: $V4, 23: $V5, - 25: $V6, 26: $V7, - 29: $V8, - 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 33: 149, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg - }, o($Vi, [2, 14]), o($Vi, [2, 61], { - 58: [1, 85] - }), o($VC, [2, 63]), o($VC, [2, 64]), o($VC, [2, 65]), o($VC, [2, 66]), o($VC, [2, 67]), o($VC, [2, 68]), o($VC, [2, 69]), o($VC, [2, 70]), o($VC, [2, 71]), o($VC, [2, 72]), o($VC, [2, 73]), o($VC, [2, 74]), o($VC, [2, 75]), o($VC, [2, 76]), { - 10: [1, 86] - }, { - 10: [1, 87] - }, o($VC, [2, 79]), { - 10: $Vj, - 23: $VD, - 26: $Vk, - 40: $Vl, - 41: [1, 88], - 43: $Vm, - 44: 48, - 45: 51, - 46: $Vn, - 57: 92, - 59: $Vo, - 60: $Vp, - 61: $Vq, - 62: $Vr, - 63: $Vs, - 64: $Vt, - 65: $Vu, - 66: $Vv, - 67: 53, - 68: 54, - 69: $Vw, - 70: $Vx, - 71: 89, - 72: 90, - 73: 91, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { - 10: $VE, - 28: [1, 94], - 76: 95, - 77: 96, - 78: 97 + 10: $V1, + 23: $V5, + 26: $V7, + 33: 150, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, + 62: $Vd, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { 10: $V1, 23: $V5, 26: $V7, - 30: 99, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 33: 151, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { 10: $V1, 23: $V5, 26: $V7, - 30: 100, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 40: 152, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { 10: $V1, 23: $V5, 26: $V7, - 30: 101, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 40: 153, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { 10: $V1, 23: $V5, 26: $V7, - 30: 102, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 40: 154, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { 10: $V1, - 20: 103, - 21: 12, - 22: $V4, 23: $V5, - 25: $V6, 26: $V7, - 29: $V8, - 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 40: 155, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { - 10: $Vj, - 19: 105, - 26: $Vk, - 27: 104, - 40: $Vl, - 43: $Vm, - 44: 48, - 45: 51, - 46: $Vn, - 57: 40, - 59: $Vo, - 60: $Vp, - 61: $Vq, - 62: $Vr, - 63: $Vs, - 64: $Vt, - 65: $Vu, - 66: $Vv, - 67: 53, - 68: 54, - 69: $Vw, - 70: $Vx, - 79: $Vf, - 80: $Vg + 10: $V1, + 23: $V5, + 26: $V7, + 40: 156, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, + 62: $Vd, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { - 8: 107, 10: $V1, - 13: 106, - 15: 8, - 17: 9, - 18: $V3, - 20: 11, - 21: 12, - 22: $V4, 23: $V5, - 25: $V6, 26: $V7, - 29: $V8, - 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 40: 157, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { 10: $V1, - 20: 111, + 20: 161, 21: 12, 22: $V4, 23: $V5, - 24: [1, 108], + 24: [1, 158], 25: $V6, 26: $V7, 29: $V8, 30: 16, - 35: 109, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, - 55: 110, - 56: $VF, + 33: 17, + 40: 18, + 47: 159, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 70: 160, + 71: $Ve1, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { - 10: [1, 113], - 39: 114, - 80: $VG + 9: $VT, + 10: $VU, + 12: $VV, + 22: $VW, + 25: $VX, + 29: $VY, + 31: $VZ, + 32: $V_, + 45: $V$, + 46: $V01, + 50: $V11, + 53: 163, + 54: 164, + 58: $V21, + 60: 116, + 61: $V31, + 73: $V41, + 74: $V51, + 75: $V61, + 76: $V71, + 77: $V81, + 78: $V91, + 79: $Va1, + 80: $Vb1, + 81: $Vc1, + 85: $Vd1, + 94: $Vg, + 95: $Vf1 }, { - 39: 116, - 80: $VG - }, { - 24: [1, 117] - }, o($VA, [2, 42]), { - 14: [1, 119], - 41: [1, 118] - }, o($VH, [2, 45]), o($VH, [2, 46]), o($VH, [2, 47]), o($VA, [2, 48]), { - 14: [1, 121], - 28: [1, 120] - }, o($VI, [2, 51]), o($VI, [2, 53], { - 54: [1, 122] - }), o($VI, [2, 54]), o($Vh, [2, 3]), { - 8: 123, + 54: 166, + 95: $Vf1 + }, o($VN, [2, 41]), o($VO, $VP), { + 24: [1, 167] + }, o($VO, [2, 56]), { + 14: [1, 169], + 56: [1, 168] + }, o($Vg1, [2, 59]), o($Vg1, [2, 60]), o($Vg1, [2, 61]), o($VO, [2, 62]), { + 14: [1, 171], + 28: [1, 170] + }, o($Vh1, [2, 65]), o($Vh1, [2, 67], { + 69: [1, 172] + }), o($Vh1, [2, 68]), o($Vi, [2, 3]), { + 8: 173, 10: $V1, 15: 8, 17: 9, @@ -3674,23 +4201,27 @@ 26: $V7, 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { - 8: 124, + 8: 174, 10: $V1, 15: 8, 17: 9, @@ -3703,78 +4234,138 @@ 26: $V7, 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg - }, o($Vi, [2, 12]), { - 10: [1, 125] - }, o($VC, [2, 77]), o($VC, [2, 78]), o($VC, [2, 80]), { - 14: $VJ, - 41: [1, 126] - }, o($VK, [2, 83]), o($VK, [2, 84], { - 58: [1, 128] - }), o($VL, [2, 86], { - 5: [1, 129] + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, o($Vj, [2, 12]), { + 10: [1, 175] + }, o($VR, [2, 91]), o($VR, [2, 92]), o($VR, [2, 94]), { + 14: $Vi1, + 56: [1, 176] + }, o($Vj1, [2, 97]), o($Vj1, [2, 98], { + 73: [1, 178] + }), o($Vk1, [2, 100], { + 5: [1, 179] }), { - 10: $Vj, - 23: $VD, - 26: $Vk, - 40: $Vl, - 43: $Vm, - 44: 48, - 45: 51, - 46: $Vn, - 57: 92, - 59: $Vo, - 60: $Vp, - 61: $Vq, - 62: $Vr, - 63: $Vs, - 64: $Vt, - 65: $Vu, - 66: $Vv, - 67: 53, - 68: 54, - 69: $Vw, - 70: $Vx, - 71: 130, - 72: 90, - 73: 91, - 79: $Vf, - 80: $Vg - }, o($VC, [2, 94]), { - 14: [1, 132], - 28: [1, 131] - }, o($VI, [2, 97]), o($VI, [2, 98], { - 58: [1, 133] - }), o($VM, [2, 101], { - 54: [1, 134] - }), o($Vz, [2, 21]), o($Vz, [2, 22]), o($Vz, [2, 23]), o($Vz, [2, 24]), { - 14: [1, 135] + 10: $Vk, + 23: $VS, + 26: $Vl, + 55: $Vm, + 58: $Vn, + 59: 52, + 60: 55, + 61: $Vo, + 72: 108, + 74: $Vp, + 75: $Vq, + 76: $Vr, + 77: $Vs, + 78: $Vt, + 79: $Vu, + 80: $Vv, + 81: $Vw, + 82: 57, + 83: 58, + 84: $Vx, + 85: $Vy, + 86: 180, + 87: 106, + 88: 107, + 94: $Vg, + 95: $Vh + }, o($VR, [2, 108]), { + 14: [1, 182], + 28: [1, 181] + }, o($Vh1, [2, 111]), o($Vh1, [2, 112], { + 73: [1, 183] + }), o($Vl1, [2, 115], { + 69: [1, 184] + }), o($VQ, [2, 121]), o($VQ, [2, 122]), o($VQ, [2, 123]), o($VQ, [2, 124]), o($VQ, [2, 125]), o($VQ, [2, 126]), o($VQ, [2, 127]), o($VQ, [2, 128]), o($VQ, [2, 129]), o($VQ, [2, 130]), o($VQ, [2, 131]), o($VQ, [2, 132]), o($VQ, [2, 133]), o($VQ, [2, 134]), o($VQ, [2, 135]), o($VQ, [2, 136]), o($VQ, [2, 137]), o($VQ, [2, 138]), o($VQ, [2, 139]), o($VQ, [2, 140]), o($VQ, [2, 141]), o($VQ, [2, 142]), o($VQ, [2, 143]), o($VQ, [2, 144]), { + 14: [1, 185] }, { - 14: [1, 137], - 28: [1, 136] - }, o($VI, [2, 60]), { - 14: [1, 139], - 28: [1, 138] - }, o($VI, [2, 10]), o($Vz, [2, 25]), { - 14: [1, 141], - 24: [1, 140] - }, o($VN, [2, 56]), o($VN, [2, 57]), { + 14: [1, 187], + 28: [1, 186] + }, o($Vh1, [2, 74]), { + 14: [1, 189], + 28: [1, 188] + }, o($Vh1, [2, 10]), o($Vz, [2, 21], { + 34: $VA, + 35: $VB, + 36: $VC, + 37: $VD, + 38: $VE, + 39: $VF + }), o($Vz, [2, 22], { + 34: $VA, + 35: $VB, + 36: $VC, + 37: $VD, + 38: $VE, + 39: $VF + }), o($VG, [2, 24], { + 41: $VH, + 42: $VI, + 43: $VJ, + 44: $VK, + 45: $VL, + 46: $VM + }), o($VG, [2, 25], { + 41: $VH, + 42: $VI, + 43: $VJ, + 44: $VK, + 45: $VL, + 46: $VM + }), o($VG, [2, 26], { + 41: $VH, + 42: $VI, + 43: $VJ, + 44: $VK, + 45: $VL, + 46: $VM + }), o($VG, [2, 27], { + 41: $VH, + 42: $VI, + 43: $VJ, + 44: $VK, + 45: $VL, + 46: $VM + }), o($VG, [2, 28], { + 41: $VH, + 42: $VI, + 43: $VJ, + 44: $VK, + 45: $VL, + 46: $VM + }), o($VG, [2, 29], { + 41: $VH, + 42: $VI, + 43: $VJ, + 44: $VK, + 45: $VL, + 46: $VM + }), o($VN, [2, 31]), o($VN, [2, 32]), o($VN, [2, 33]), o($VN, [2, 34]), o($VN, [2, 35]), o($VN, [2, 36]), o($VN, [2, 37]), { + 14: [1, 191], + 24: [1, 190] + }, o($Vm1, [2, 70]), o($Vm1, [2, 71]), { 10: $V1, - 20: 142, + 20: 192, 21: 12, 22: $V4, 23: $V5, @@ -3782,29 +4373,33 @@ 26: $V7, 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg - }, o($VA, [2, 29]), o($VA, [2, 30]), o([1, 5, 14, 16, 24, 28, 31, 32, 33, 34, 38, 40, 41, 54, 58, 75], [2, 105]), { - 41: [1, 143] - }, o($VA, [2, 41]), o($VA, [2, 43]), { - 7: 75, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, o($VO, [2, 43]), o($VO, [2, 44]), o([1, 5, 14, 16, 24, 28, 31, 32, 34, 35, 36, 37, 38, 39, 41, 42, 43, 44, 45, 46, 52, 55, 56, 69, 73, 90], [2, 119]), { + 56: [1, 193] + }, o($VO, [2, 55]), o($VO, [2, 57]), { + 7: 91, 9: $V0, 10: $V1, 12: $V2, - 20: 74, + 20: 90, 21: 12, 22: $V4, 23: $V5, @@ -3812,28 +4407,32 @@ 26: $V7, 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, - 51: 144, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg - }, o($VA, [2, 49]), { - 7: 80, + 63: 30, + 64: 31, + 66: 194, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, o($VO, [2, 63]), { + 7: 96, 9: $V0, 10: $V1, 12: $V2, - 20: 79, + 20: 95, 21: 12, 22: $V4, 23: $V5, @@ -3841,24 +4440,28 @@ 26: $V7, 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, - 53: 145, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 68: 195, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh }, { - 8: 146, + 8: 196, 10: $V1, 15: 8, 17: 9, @@ -3871,88 +4474,117 @@ 26: $V7, 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg - }, o($VO, [2, 7]), o($VO, [2, 8]), o($Vi, [2, 62]), o($VC, [2, 81]), { - 10: $Vj, - 23: $VD, - 26: $Vk, - 40: $Vl, - 43: $Vm, - 44: 48, - 45: 51, - 46: $Vn, - 57: 92, - 59: $Vo, - 60: $Vp, - 61: $Vq, - 62: $Vr, - 63: $Vs, - 64: $Vt, - 65: $Vu, - 66: $Vv, - 67: 53, - 68: 54, - 69: $Vw, - 70: $Vx, - 72: 147, - 73: 91, - 79: $Vf, - 80: $Vg + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, o($Vn1, [2, 7]), o($Vn1, [2, 8]), o($Vj, [2, 76]), o($VR, [2, 95]), { + 10: $Vk, + 23: $VS, + 26: $Vl, + 55: $Vm, + 58: $Vn, + 59: 52, + 60: 55, + 61: $Vo, + 72: 108, + 74: $Vp, + 75: $Vq, + 76: $Vr, + 77: $Vs, + 78: $Vt, + 79: $Vu, + 80: $Vv, + 81: $Vw, + 82: 57, + 83: 58, + 84: $Vx, + 85: $Vy, + 87: 197, + 88: 107, + 94: $Vg, + 95: $Vh }, { - 10: [1, 148] + 10: [1, 198] }, { - 39: 150, - 74: 149, - 75: $VP, - 80: $VG + 54: 200, + 89: 199, + 90: $Vo1, + 95: $Vf1 }, { - 14: $VJ, - 24: [1, 152] - }, o($VC, [2, 95]), { - 10: $VE, - 77: 153, - 78: 97 + 14: $Vi1, + 24: [1, 202] + }, o($VR, [2, 109]), { + 9: $VT, + 10: $VU, + 12: $VV, + 22: $VW, + 25: $VX, + 29: $VY, + 31: $VZ, + 32: $V_, + 45: $V$, + 46: $V01, + 50: $V11, + 53: 114, + 58: $V21, + 60: 116, + 61: $V31, + 73: $V41, + 74: $V51, + 75: $V61, + 76: $V71, + 77: $V81, + 78: $V91, + 79: $Va1, + 80: $Vb1, + 81: $Vc1, + 85: $Vd1, + 92: 203, + 93: 113, + 94: $Vg }, { - 10: [1, 154] + 10: [1, 204] }, { - 10: $Vj, - 26: $Vk, - 40: $Vl, - 43: $Vm, - 44: 48, - 45: 51, - 46: $Vn, - 57: 155, - 59: $Vo, - 60: $Vp, - 61: $Vq, - 62: $Vr, - 63: $Vs, - 64: $Vt, - 65: $Vu, - 66: $Vv, - 67: 53, - 68: 54, - 69: $Vw, - 70: $Vx, - 79: $Vf, - 80: $Vg + 10: $Vk, + 26: $Vl, + 55: $Vm, + 58: $Vn, + 59: 52, + 60: 55, + 61: $Vo, + 72: 205, + 74: $Vp, + 75: $Vq, + 76: $Vr, + 77: $Vs, + 78: $Vt, + 79: $Vu, + 80: $Vv, + 81: $Vw, + 82: 57, + 83: 58, + 84: $Vx, + 85: $Vy, + 94: $Vg, + 95: $Vh }, { - 8: 156, + 8: 206, 10: $V1, 15: 8, 17: 9, @@ -3965,47 +4597,51 @@ 26: $V7, 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg - }, o($Vy, [2, 18]), { - 10: $Vj, - 19: 157, - 26: $Vk, - 40: $Vl, - 43: $Vm, - 44: 48, - 45: 51, - 46: $Vn, - 57: 40, - 59: $Vo, - 60: $Vp, - 61: $Vq, - 62: $Vr, - 63: $Vs, - 64: $Vt, - 65: $Vu, - 66: $Vv, - 67: 53, - 68: 54, - 69: $Vw, - 70: $Vx, - 79: $Vf, - 80: $Vg - }, o($Vy, [2, 19]), { - 8: 158, + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, o($Vz, [2, 18]), { + 10: $Vk, + 19: 207, + 26: $Vl, + 55: $Vm, + 58: $Vn, + 59: 52, + 60: 55, + 61: $Vo, + 72: 44, + 74: $Vp, + 75: $Vq, + 76: $Vr, + 77: $Vs, + 78: $Vt, + 79: $Vu, + 80: $Vv, + 81: $Vw, + 82: 57, + 83: 58, + 84: $Vx, + 85: $Vy, + 94: $Vg, + 95: $Vh + }, o($Vz, [2, 19]), { + 8: 208, 10: $V1, 15: 8, 17: 9, @@ -4018,24 +4654,28 @@ 26: $V7, 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg - }, o($Vz, [2, 26]), { + 63: 30, + 64: 31, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, o($VN, [2, 38]), { 10: $V1, - 20: 111, + 20: 161, 21: 12, 22: $V4, 23: $V5, @@ -4043,41 +4683,45 @@ 26: $V7, 29: $V8, 30: 16, - 36: 18, - 37: 19, - 40: $V9, - 42: 20, - 43: $Va, - 44: 22, - 45: 23, - 46: $Vb, - 47: $Vc, - 48: 26, - 49: 27, - 55: 159, - 56: $VF, + 33: 17, + 40: 18, + 48: 20, + 49: 21, + 50: $V9, + 51: 23, + 55: $Va, + 57: 24, + 58: $Vb, + 59: 26, + 60: 27, + 61: $Vc, 62: $Vd, - 63: $Ve, - 79: $Vf, - 80: $Vg - }, o($VN, [2, 58]), o($VA, [2, 31]), o($VH, [2, 44]), o($VI, [2, 50]), o($VI, [2, 52]), o($VK, [2, 82]), o($VK, [2, 85]), o($VL, [2, 87]), o($VL, [2, 93], { - 75: [1, 160] + 63: 30, + 64: 31, + 70: 209, + 71: $Ve1, + 77: $Ve, + 78: $Vf, + 94: $Vg, + 95: $Vh + }, o($Vm1, [2, 72]), o($VO, [2, 45]), o($Vg1, [2, 58]), o($Vh1, [2, 64]), o($Vh1, [2, 66]), o($Vj1, [2, 96]), o($Vj1, [2, 99]), o($Vk1, [2, 101]), o($Vk1, [2, 107], { + 90: [1, 210] }), { - 39: 161, - 80: $VG - }, o($VL, [2, 88], { - 5: [1, 162] - }), o($VI, [2, 96]), o($VI, [2, 99]), o($VM, [2, 100]), { - 24: [1, 163] - }, o($VI, [2, 59]), o($VI, [2, 9]), o($VN, [2, 55]), o($VL, [2, 92], { - 39: 164, - 80: $VG - }), o($VL, [2, 91]), { - 39: 150, - 74: 165, - 75: $VP, - 80: $VG - }, o($Vy, [2, 17]), o($VL, [2, 90]), o($VL, [2, 89])], + 54: 211, + 95: $Vf1 + }, o($Vk1, [2, 102], { + 5: [1, 212] + }), o($Vh1, [2, 110]), o($Vh1, [2, 113]), o($Vl1, [2, 114]), { + 24: [1, 213] + }, o($Vh1, [2, 73]), o($Vh1, [2, 9]), o($Vm1, [2, 69]), o($Vk1, [2, 106], { + 54: 214, + 95: $Vf1 + }), o($Vk1, [2, 105]), { + 54: 200, + 89: 215, + 90: $Vo1, + 95: $Vf1 + }, o($Vz, [2, 17]), o($Vk1, [2, 104]), o($Vk1, [2, 103])], defaultActions: {}, parseError: function parseError(str, hash) { if (hash.recoverable) { @@ -4591,139 +5235,169 @@ break; case 2: - return 59; + return 31; case 3: - return 60; + return 74; case 4: - return 58; + return 75; case 5: - return 61; + return 73; case 6: - return 12; + return 76; case 7: - return 70; + return 12; case 8: - return 63; + return 85; case 9: - return 9; + return 78; case 10: - return 22; + return 9; case 11: - return 25; + return 22; case 12: - return 43; + return 45; case 13: - return 64; + return 50; case 14: - return 65; + return 32; case 15: - return 29; + return 58; case 16: - return 66; + return 79; case 17: - return 62; + return 80; case 18: - return 46; + return 25; case 19: - return 80; + return 46; case 20: - return 79; + return 29; case 21: - return 23; + return 81; case 22: - return 24; + return 77; case 23: - return 26; + return 61; case 24: - return 28; + return 95; case 25: - return 40; + return 94; case 26: - return 41; + return 23; case 27: - return 16; + return 24; case 28: - return '|'; + return 26; case 29: - return 14; + return 28; case 30: - return 54; + return 55; case 31: - return 5; + return 56; case 32: - return 18; + return 16; case 33: - return 11; + return '|'; case 34: - return '<='; + return 14; case 35: - return 56; + return 69; case 36: - return 75; + return 5; case 37: - return 38; + return 35; case 38: - return '_'; + return 38; case 39: - return 31; + return 18; case 40: - return 32; + return 36; case 41: - return 33; + return 37; case 42: return 34; case 43: - return 47; + return 39; case 44: + return 11; + + case 45: + return 71; + + case 46: + return 90; + + case 47: + return 52; + + case 48: + return '_'; + + case 49: + return 41; + + case 50: + return 42; + + case 51: + return 43; + + case 52: + return 44; + + case 53: + return 62; + + case 54: return 10; } }, - rules: [/^(?:\s+)/, /^(?:\/\/.*)/, /^(?:any\b)/, /^(?:array\b)/, /^(?:as\b)/, /^(?:boolean\b)/, /^(?:def\b)/, /^(?:enum\b)/, /^(?:false\b)/, /^(?:let\b)/, /^(?:map\b)/, /^(?:patterns\b)/, /^(?:null\b)/, /^(?:number\b)/, /^(?:object\b)/, /^(?:sequences\b)/, /^(?:string\b)/, /^(?:true\b)/, /^(?:undefined\b)/, /^(?:[-+]?(0|[1-9]\d*)(\.\d+)?)/, /^(?:"[^"\r\n]*")/, /^(?:\()/, /^(?:\))/, /^(?:{)/, /^(?:})/, /^(?:\[)/, /^(?:\])/, /^(?:\|>)/, /^(?:\|)/, /^(?:,)/, /^(?::)/, /^(?:;)/, /^(?:=~)/, /^(?:=)/, /^(?:<=)/, /^(?:\.{3})/, /^(?:\.{2})/, /^(?:\.)/, /^(?:_)/, /^(?:\+)/, /^(?:-)/, /^(?:\*)/, /^(?:\/)/, /^(?:\$)/, /^(?:[a-zA-Z_][a-zA-Z0-9_]*)/], + rules: [/^(?:\s+)/, /^(?:\/\/.*)/, /^(?:and\b)/, /^(?:any\b)/, /^(?:array\b)/, /^(?:as\b)/, /^(?:boolean\b)/, /^(?:def\b)/, /^(?:enum\b)/, /^(?:false\b)/, /^(?:let\b)/, /^(?:map\b)/, /^(?:mod\b)/, /^(?:not\b)/, /^(?:or\b)/, /^(?:null\b)/, /^(?:number\b)/, /^(?:object\b)/, /^(?:patterns\b)/, /^(?:pow\b)/, /^(?:sequences\b)/, /^(?:string\b)/, /^(?:true\b)/, /^(?:undefined\b)/, /^(?:[-+]?(0|[1-9]\d*)(\.\d+)?)/, /^(?:"[^"\r\n]*")/, /^(?:\()/, /^(?:\))/, /^(?:{)/, /^(?:})/, /^(?:\[)/, /^(?:\])/, /^(?:\|>)/, /^(?:\|)/, /^(?:,)/, /^(?::)/, /^(?:;)/, /^(?:<=)/, /^(?:>=)/, /^(?:=~)/, /^(?:==)/, /^(?:!=)/, /^(?:<)/, /^(?:>)/, /^(?:=)/, /^(?:\.{3})/, /^(?:\.{2})/, /^(?:\.)/, /^(?:_)/, /^(?:\+)/, /^(?:-)/, /^(?:\*)/, /^(?:\/)/, /^(?:\$)/, /^(?:[a-zA-Z_][a-zA-Z0-9_]*)/], conditions: { "INITIAL": { - "rules": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44], + "rules": [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54], "inclusive": true } } @@ -5165,6 +5839,11 @@ case "sequence": { result = this.executeExpression(statement, structure, this.symbolTable); + + if (result === FAILURE_VALUE) { + return FAILURE_VALUE; + } + break; } @@ -5203,13 +5882,17 @@ value: function executeExpression(expression, structure, symbolTable) { var _this = this; - var getNumbers = function getNumbers(operation) { + var binOp = function binOp(typeName, operation) { var left = _this.executeExpression(expression.left, structure, symbolTable); + /* eslint-disable-next-line valid-typeof */ + - if (left !== FAILURE_VALUE && typeof left === "number") { + if (left !== FAILURE_VALUE && _typeof(left) === typeName) { var right = _this.executeExpression(expression.right, structure, symbolTable); + /* eslint-disable-next-line valid-typeof */ - if (right !== FAILURE_VALUE && typeof right === "number") { + + if (right !== FAILURE_VALUE && _typeof(right) === typeName) { return operation(left, right); } } @@ -5226,6 +5909,13 @@ this.addError("Unable to evaluate assignment value for ".concat(expression.name)); return FAILURE_VALUE; } + /* eslint-disable-next-line no-prototype-builtins */ + + + if (symbolTable.hasOwnProperty(expression.name)) { + this.addError("A symbol in current scope was assigned more than once: ".concat(expression.name)); + return FAILURE_VALUE; + } symbolTable[expression.name] = value; return value; @@ -5356,11 +6046,6 @@ return currentObject; } - case "add": - return getNumbers(function (a, b) { - return a + b; - }); - case "map": { var _expression$value = _slicedToArray(expression.value, 2), @@ -5420,32 +6105,98 @@ return _result; } + case "and": + return binOp("boolean", function (a, b) { + return a && b; + }); + + case "or": + return binOp("boolean", function (a, b) { + return a || b; + }); + + case "not": + { + var _value2 = this.executeExpression(expression.value, structure, symbolTable); + + if (_value2 !== FAILURE_VALUE && typeof _value2 === "boolean") { + return !_value2; + } + + return FAILURE_VALUE; + } + + case "less_than": + return binOp("number", function (a, b) { + return a < b; + }); + + case "less_equal": + return binOp("number", function (a, b) { + return a <= b; + }); + + case "equal": + return binOp("number", function (a, b) { + return a === b; + }); + + case "not_equal": + return binOp("number", function (a, b) { + return a !== b; + }); + + case "greater_equal": + return binOp("number", function (a, b) { + return a >= b; + }); + + case "greater_than": + return binOp("number", function (a, b) { + return a > b; + }); + + case "add": + return binOp("number", function (a, b) { + return a + b; + }); + case "subtract": - return getNumbers(function (a, b) { + return binOp("number", function (a, b) { return a - b; }); case "multiply": - return getNumbers(function (a, b) { + return binOp("number", function (a, b) { return a * b; }); case "divide": - return getNumbers(function (a, b) { + return binOp("number", function (a, b) { return a / b; }); + case "modulus": + return binOp("number", function (a, b) { + return a % b; + }); + + case "power": + return binOp("number", function (a, b) { + return Math.pow(a, b); + }); + case "invoke": { var args = expression.args.reduce(function (accum, arg) { if (arg.type === "spread") { - var _value2 = _this.executeExpression(arg.expression, structure, symbolTable); // const value = arg.name !== null ? symbolTable[arg.name] : structure; + var _value3 = _this.executeExpression(arg.expression, structure, symbolTable); // const value = arg.name !== null ? symbolTable[arg.name] : structure; - if (Array.isArray(_value2)) { - accum = accum.concat(_value2); + if (Array.isArray(_value3)) { + accum = accum.concat(_value3); } else { - accum.push(_value2); + accum.push(_value3); } } else { accum.push(_this.executeExpression(arg, structure, symbolTable)); @@ -5476,13 +6227,13 @@ if (element.type === "assignment") { this.executeExpression(element, structure, symbolTable); } else { - var _value3 = this.executeExpression(element, structure, symbolTable); + var _value4 = this.executeExpression(element, structure, symbolTable); - if (_value3 === FAILURE_VALUE) { + if (_value4 === FAILURE_VALUE) { return FAILURE_VALUE; } - results.push(_value3); + results.push(_value4); } } } catch (err) { @@ -5565,9 +6316,9 @@ case "assignment": { - var _value4 = this.executeExpression(element, structure, objectSymbolTable); + var _value5 = this.executeExpression(element, structure, objectSymbolTable); - if (_value4 === FAILURE_VALUE) { + if (_value5 === FAILURE_VALUE) { return FAILURE_VALUE; } @@ -6428,6 +7179,16 @@ var normal = radians % TWO_PI; return normal < 0.0 ? normal + TWO_PI : normal; } + /** + * @typedef {GenericArray} EllipticalArc + * @property {number} 0 x + * @property {number} 1 y + * @property {number} 2 rx + * @property {number} 3 ry + * @property {number} 4 theta + * @property {number} 5 thetaWithDelta + */ + /** * Based on the SVG 1.1 specification, Appendix F: Implementation Requirements, * Section F.6 "Elliptical arc implementation notes" @@ -6440,7 +7201,7 @@ * @param {number} angle * @param {boolean} arcFlag * @param {boolean} sweepFlag - * @returns {Array} + * @returns {EllipticalArc} */ @@ -6924,7 +7685,7 @@ return PathHandler; }(); - var source = "\ndef Center =\n patterns {\n { center: { x: number as x, y: number as y } },\n { center: [ number as x, number as y ] },\n { cx: number as x, cy: number as y },\n { centerX: number as x, centerY: number as y }\n } |> Point2D(x, y);\n\ndef Radii =\n patterns {\n { radii: { x: number as rx, y: number as ry } },\n { radii: [ number as rx, number as ry ] },\n { rx: number as rx, ry: number as ry },\n { radiusX: number as rx, radiusY: number as ry }\n } |> { \"rx\", \"ry\" };\n\ndef P1 =\n patterns {\n { p1: { x: number as x, y: number as y } },\n { p1: [ number as x, number as y ] },\n { p1x: number as x, p1y: number as y }\n } |> Point2D(x, y);\n \ndef P2 =\n patterns {\n { p1: { x: number as x, y: number as y } },\n { p1: [ number as x, number as y ] },\n { p1x: number as x, p1y: number as y }\n } |> Point2D(x, y);\n \ndef P3 =\n patterns {\n { p1: { x: number as x, y: number as y } },\n { p1: [ number as x, number as y ] },\n { p1x: number as x, p1y: number as y }\n } |> Point2D(x, y);\n \ndef P4 =\n patterns {\n { p1: { x: number as x, y: number as y } },\n { p1: [ number as x, number as y ] },\n { p1x: number as x, p1y: number as y }\n } |> Point2D(x, y);\n\n \ndef Arc = {\n let radii = Radii,\n\n \"center\": Center,\n \"radiusX\": radii.rx,\n \"radiusY\": radii.ry,\n \"startRadians\": =~ number,\n \"endRadians\": =~ number\n};\n\ndef ArcArgs = {\n let elements =\n patterns {\n [ number as centerX, number as centerY, number as radiusX, number as radiusY, number as startRadians, number as endRadians ],\n [ { x: number as centerX, y: number as centerY }, number as radiusX, number as radiusY, number as startRadians, number as endRadians ]\n } |> { \"centerX\", \"centerY\", \"radiusX\", \"radiusY\", \"startRadians\", \"endRadians\" },\n \n \"center\": Point2D(elements.centerX, elements.centerY),\n \"radiusX\": elements.radiusX,\n \"radiusY\": elements.radiusY,\n \"startRadians\": elements.startRadians,\n \"endRadians\": elements.endRadians\n};\n\ndef Bezier2 = {\n \"p1\": P1,\n \"p2\": P2,\n \"p3\": P3\n};\n\ndef Bezier2Args = {\n let elements =\n patterns {\n [ number as p1x, number as p1y, number as p2x, number as p2y, number as p3x, number as p3y ],\n [ { x: number as p1x, y: number as p1y }, { x: number as p2x, y: number as p2y }, { x: number as p3x, y: number as p3y }]\n } |> { \"p1x\", \"p1y\", \"p2x\", \"p2y\", \"p3x\", \"p3y\" },\n \n \"p1\": Point2D(elements.p1x, elements.p1y),\n \"p2\": Point2D(elements.p2x, elements.p2y),\n \"p3\": Point2D(elements.p3x, elements.p3y)\n};\n\ndef Bezier3 = {\n \"p1\": P1,\n \"p2\": P2,\n \"p3\": P3,\n \"p4\": P4\n};\n\ndef Bezier3Args = {\n let elements =\n patterns {\n [ number as p1x, number as p1y, number as p2x, number as p2y, number as p3x, number as p3y, number as p4x, number as p4y ],\n [ { x: number as p1x, y: number as p1y }, { x: number as p2x, y: number as p2y }, { x: number as p3x, y: number as p3y }, { x: number as p4x, y: number as p4y }]\n } |> { \"p1x\", \"p1y\", \"p2x\", \"p2y\", \"p3x\", \"p3y\", \"p4x\", \"p4y\" },\n \n \"p1\": Point2D(elements.p1x, elements.p1y),\n \"p2\": Point2D(elements.p2x, elements.p2y),\n \"p3\": Point2D(elements.p3x, elements.p3y),\n \"p4\": Point2D(elements.p4x, elements.p4y)\n};\n\ndef Circle = {\n \"center\": Center,\n \"radius\":\n patterns {\n { r: number as radius},\n { radius: number as radius }\n } |> radius\n};\n\ndef CircleArgs = {\n let elements =\n patterns {\n [ number as centerX, number as centerY, number as radius ],\n [ { x: number as centerX, y: number as centerY }, number as radius ]\n } |> { \"centerX\", \"centerY\", \"radius\" },\n \n \"center\": Point2D(elements.centerX, elements.centerY),\n \"radius\": elements.radius\n};\n\ndef Ellipse = {\n let radii = Radii,\n\n \"center\": Center,\n \"radiusX\": radii.rx,\n \"radiusY\": radii.ry\n};\n\ndef EllipseArgs = {\n let elements =\n patterns {\n [ number as centerX, number as centerY, number as radiusX, number as radiusY ],\n [ { x: number as centerX, y: number as centerY }, number as radiusX, number as radiusY ]\n } |> { \"centerX\", \"centerY\", \"radiusX\", \"radiusY\" },\n \n \"center\": Point2D(elements.centerX, elements.centerY),\n \"radiusX\": elements.radiusX,\n \"radiusY\": elements.radiusY\n};\n\ndef Line = {\n \"p1\": P1,\n \"p2\": P2\n};\n\ndef LineArgs = {\n let elements =\n patterns {\n [ number as p1x, number as p1y, number as p2x, number as p2y ],\n [ { x: number as p1x, y: number as p1y }, { x: number as p2x, y: number as p2y } ]\n } |> { \"p1x\", \"p1y\", \"p2x\", \"p2y\" },\n \n \"p1\": Point2D(elements.p1x, elements.p1y),\n \"p2\": Point2D(elements.p2x, elements.p2y)\n};\n\ndef Path = {\n \"segments\":\n =~ { d: string as data } |> PathData(data)\n};\n\ndef PathArgs = {\n \"segments\":\n =~ string as data |> PathData(data)\n};\n\ndef Polygon = {\n \"points\":\n sequences {\n =~ { points: [ (number, number); 0.. as coords ] }\n |> [ map(coords, Point2D(...$)) ],\n\n =~ { points: [ { x: number, y: number }; 0.. ] as points }\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef PolygonArgs = {\n \"points\":\n sequences {\n =~ [ (number, number); 0.. as coords ]\n |> [ map(coords, Point2D(...$)) ],\n\n =~ [ { x: number, y: number }; 0.. ] as points\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef Polyline = {\n \"points\":\n sequences {\n =~ { points: [ (number, number); 0.. as coords ] }\n |> [ map(coords, Point2D(...$)) ],\n\n =~ { points: [ { x: number, y: number }; 0.. ] as points }\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef PolylineArgs = {\n \"points\":\n sequences {\n =~ [ (number, number); 0.. as coords ]\n |> [ map(coords, Point2D(...$)) ],\n\n =~ [ { x: number, y: number }; 0.. ] as points\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef Rectangle = {\n let topLeft =\n patterns {\n { topLeft: { x: number as x, y: number as y } },\n { topLeft: [ number as x, number as y ] },\n { x: number as x, y: number as y },\n { top: number as x, left: number as y }\n } |> { \"x\", \"y\" },\n\n \"topLeft\":\n Point2D(topLeft.x, topLeft.y),\n\n \"bottomRight\":\n sequences {\n patterns {\n { bottomRight: { x: number as x, y: number as y } },\n { bottomRight: [ number as x, number as y ] }\n } |> Point2D(x, y),\n patterns {\n { w: number as w, h: number as h },\n { width: number as w, height: number as h },\n { size: { x: number as w, y: number as h } },\n { size: [ number as w, number as h ] }\n } |> Point2D(topLeft.x + w, topLeft.y + h)\n },\n\n \"rx\":\n sequences {\n =~ { rx: number as rx } |> rx,\n =~ any |> 0\n },\n \"ry\":\n sequences {\n =~ { ry: number as ry } |> ry,\n =~ any |> 0\n }\n};\n\ndef RectangleArgs = {\n let elements =\n patterns {\n [ number as x, number as y, number as width, number as height ],\n [ number as x, number as y, number as width, number as height, number as rx, number as ry ],\n [ { x: number as x, y: number as y }, { x: number as width, y: number as height } ],\n [ { x: number as x, y: number as y }, { x: number as width, y: number as height }, { rx: number as rx, ry: number as ry } ],\n [ { x: number as x, y: number as y }, { x: number as width, y: number as height }, { radiusX: number as rx, radiusY: number as ry } ]\n } |> { \"x\", \"y\", \"width\", \"height\", \"rx\", \"ry\" },\n\n \"topLeft\": Point2D(elements.x, elements.y),\n \"bottomRight\": Point2D(elements.x + elements.width, elements.y + elements.height),\n \"rx\": elements.rx,\n \"ry\": elements.ry\n}\n"; + var source = "\ndef Center =\n patterns {\n { center: { x: number as x, y: number as y } },\n { center: [ number as x, number as y ] },\n { cx: number as x, cy: number as y },\n { centerX: number as x, centerY: number as y }\n } |> Point2D(x, y);\n\ndef Radii =\n patterns {\n { radii: { x: number as rx, y: number as ry } },\n { radii: [ number as rx, number as ry ] },\n { rx: number as rx, ry: number as ry },\n { radiusX: number as rx, radiusY: number as ry }\n } |> { \"rx\", \"ry\" };\n\ndef P1 =\n patterns {\n { p1: { x: number as x, y: number as y } },\n { p1: [ number as x, number as y ] },\n { p1x: number as x, p1y: number as y }\n } |> Point2D(x, y);\n \ndef P2 =\n patterns {\n { p2: { x: number as x, y: number as y } },\n { p2: [ number as x, number as y ] },\n { p2x: number as x, p2y: number as y }\n } |> Point2D(x, y);\n \ndef P3 =\n patterns {\n { p3: { x: number as x, y: number as y } },\n { p3: [ number as x, number as y ] },\n { p3x: number as x, p3y: number as y }\n } |> Point2D(x, y);\n \ndef P4 =\n patterns {\n { p4: { x: number as x, y: number as y } },\n { p4: [ number as x, number as y ] },\n { p4x: number as x, p4y: number as y }\n } |> Point2D(x, y);\n\n \ndef Arc = {\n let radii = Radii,\n\n \"center\": Center,\n \"radiusX\": radii.rx,\n \"radiusY\": radii.ry,\n \"startRadians\": =~ number,\n \"endRadians\": =~ number\n};\n\ndef ArcArgs = {\n let elements =\n patterns {\n [ number as centerX, number as centerY, number as radiusX, number as radiusY, number as startRadians, number as endRadians ],\n [ { x: number as centerX, y: number as centerY }, number as radiusX, number as radiusY, number as startRadians, number as endRadians ]\n } |> { \"centerX\", \"centerY\", \"radiusX\", \"radiusY\", \"startRadians\", \"endRadians\" },\n \n \"center\": Point2D(elements.centerX, elements.centerY),\n \"radiusX\": elements.radiusX,\n \"radiusY\": elements.radiusY,\n \"startRadians\": elements.startRadians,\n \"endRadians\": elements.endRadians\n};\n\ndef Bezier2 = {\n \"p1\": P1,\n \"p2\": P2,\n \"p3\": P3\n};\n\ndef Bezier2Args = {\n let elements =\n patterns {\n [ number as p1x, number as p1y, number as p2x, number as p2y, number as p3x, number as p3y ],\n [ { x: number as p1x, y: number as p1y }, { x: number as p2x, y: number as p2y }, { x: number as p3x, y: number as p3y }]\n } |> { \"p1x\", \"p1y\", \"p2x\", \"p2y\", \"p3x\", \"p3y\" },\n \n \"p1\": Point2D(elements.p1x, elements.p1y),\n \"p2\": Point2D(elements.p2x, elements.p2y),\n \"p3\": Point2D(elements.p3x, elements.p3y)\n};\n\ndef Bezier3 = {\n \"p1\": P1,\n \"p2\": P2,\n \"p3\": P3,\n \"p4\": P4\n};\n\ndef Bezier3Args = {\n let elements =\n patterns {\n [ number as p1x, number as p1y, number as p2x, number as p2y, number as p3x, number as p3y, number as p4x, number as p4y ],\n [ { x: number as p1x, y: number as p1y }, { x: number as p2x, y: number as p2y }, { x: number as p3x, y: number as p3y }, { x: number as p4x, y: number as p4y }]\n } |> { \"p1x\", \"p1y\", \"p2x\", \"p2y\", \"p3x\", \"p3y\", \"p4x\", \"p4y\" },\n \n \"p1\": Point2D(elements.p1x, elements.p1y),\n \"p2\": Point2D(elements.p2x, elements.p2y),\n \"p3\": Point2D(elements.p3x, elements.p3y),\n \"p4\": Point2D(elements.p4x, elements.p4y)\n};\n\ndef Circle = {\n \"center\": Center,\n \"radius\":\n patterns {\n { r: number as radius},\n { radius: number as radius }\n } |> radius\n};\n\ndef CircleArgs = {\n let elements =\n patterns {\n [ number as centerX, number as centerY, number as radius ],\n [ { x: number as centerX, y: number as centerY }, number as radius ]\n } |> { \"centerX\", \"centerY\", \"radius\" },\n \n \"center\": Point2D(elements.centerX, elements.centerY),\n \"radius\": elements.radius\n};\n\ndef Ellipse = {\n let radii = Radii,\n\n \"center\": Center,\n \"radiusX\": radii.rx,\n \"radiusY\": radii.ry\n};\n\ndef EllipseArgs = {\n let elements =\n patterns {\n [ number as centerX, number as centerY, number as radiusX, number as radiusY ],\n [ { x: number as centerX, y: number as centerY }, number as radiusX, number as radiusY ]\n } |> { \"centerX\", \"centerY\", \"radiusX\", \"radiusY\" },\n \n \"center\": Point2D(elements.centerX, elements.centerY),\n \"radiusX\": elements.radiusX,\n \"radiusY\": elements.radiusY\n};\n\ndef Line = {\n \"p1\": P1,\n \"p2\": P2\n};\n\ndef LineArgs = {\n let elements =\n patterns {\n [ number as p1x, number as p1y, number as p2x, number as p2y ],\n [ { x: number as p1x, y: number as p1y }, { x: number as p2x, y: number as p2y } ]\n } |> { \"p1x\", \"p1y\", \"p2x\", \"p2y\" },\n \n \"p1\": Point2D(elements.p1x, elements.p1y),\n \"p2\": Point2D(elements.p2x, elements.p2y)\n};\n\ndef Path = {\n \"segments\":\n =~ { d: string as data } |> PathData(data)\n};\n\ndef PathArgs = {\n \"segments\":\n =~ string as data |> PathData(data)\n};\n\ndef Polygon = {\n \"points\":\n sequences {\n =~ { points: [ (number, number); 0.. as coords ] }\n |> [ map(coords, Point2D(...$)) ],\n\n =~ { points: [ { x: number, y: number }; 0.. ] as points }\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef PolygonArgs = {\n \"points\":\n sequences {\n =~ [ (number, number); 0.. as coords ]\n |> [ map(coords, Point2D(...$)) ],\n\n =~ [ { x: number, y: number }; 0.. ] as points\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef Polyline = {\n \"points\":\n sequences {\n =~ { points: [ (number, number); 0.. as coords ] }\n |> [ map(coords, Point2D(...$)) ],\n\n =~ { points: [ { x: number, y: number }; 0.. ] as points }\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef PolylineArgs = {\n \"points\":\n sequences {\n =~ [ (number, number); 0.. as coords ]\n |> [ map(coords, Point2D(...$)) ],\n\n =~ [ { x: number, y: number }; 0.. ] as points\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef Rectangle = {\n let topLeft =\n patterns {\n { topLeft: { x: number as x, y: number as y } },\n { topLeft: [ number as x, number as y ] },\n { x: number as x, y: number as y },\n { top: number as x, left: number as y }\n } |> { \"x\", \"y\" },\n\n \"topLeft\":\n Point2D(topLeft.x, topLeft.y),\n\n \"bottomRight\":\n sequences {\n patterns {\n { bottomRight: { x: number as x, y: number as y } },\n { bottomRight: [ number as x, number as y ] }\n } |> Point2D(x, y),\n patterns {\n { w: number as w, h: number as h },\n { width: number as w, height: number as h },\n { size: { x: number as w, y: number as h } },\n { size: [ number as w, number as h ] }\n } |> Point2D(topLeft.x + w, topLeft.y + h)\n },\n\n \"rx\":\n sequences {\n =~ { rx: number as rx } |> rx,\n =~ any |> 0\n },\n \"ry\":\n sequences {\n =~ { ry: number as ry } |> ry,\n =~ any |> 0\n }\n};\n\ndef RectangleArgs = {\n let elements =\n patterns {\n [ number as x, number as y, number as width, number as height ],\n [ number as x, number as y, number as width, number as height, number as rx, number as ry ],\n [ { x: number as x, y: number as y }, { x: number as width, y: number as height } ],\n [ { x: number as x, y: number as y }, { x: number as width, y: number as height }, { rx: number as rx, ry: number as ry } ],\n [ { x: number as x, y: number as y }, { x: number as width, y: number as height }, { radiusX: number as rx, radiusY: number as ry } ]\n } |> { \"x\", \"y\", \"width\", \"height\", \"rx\", \"ry\" },\n\n \"topLeft\": Point2D(elements.x, elements.y),\n \"bottomRight\": Point2D(elements.x + elements.width, elements.y + elements.height),\n \"rx\": elements.rx,\n \"ry\": elements.ry\n}\n"; var degree90 = Math.PI * 0.5; /** @@ -6937,7 +7698,7 @@ function () { /** * @param {string} name - * @param {Array} args + * @param {GenericArray} args * @returns {module:kld-intersections.ShapeInfo} */ function ShapeInfo(name, args) { @@ -7144,7 +7905,7 @@ var UNIT_X = new Vector2D(1, 0); /** * @memberof module:kld-intersections.Intersection - * @param {*} o + * @param {any} o * @returns {boolean} */ @@ -7287,7 +8048,6 @@ * init * * @param {string} status - * @returns {module:kld-intersections.Intersection} */ @@ -7498,10 +8258,31 @@ var xRoot = _step4.value; if (0 <= xRoot && xRoot <= 1) { - for (var k = 0; k < yRoots.length; k++) { - if (Math.abs(xRoot - yRoots[k]) < TOLERANCE) { - result.points.push(c22.multiply(s * s).add(c21.multiply(s).add(c20))); - break checkRoots; + var _iteratorNormalCompletion5 = true; + var _didIteratorError5 = false; + var _iteratorError5 = undefined; + + try { + for (var _iterator5 = yRoots[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { + var yRoot = _step5.value; + + if (Math.abs(xRoot - yRoot) < TOLERANCE) { + result.points.push(c22.multiply(s * s).add(c21.multiply(s).add(c20))); + break checkRoots; + } + } + } catch (err) { + _didIteratorError5 = true; + _iteratorError5 = err; + } finally { + try { + if (!_iteratorNormalCompletion5 && _iterator5["return"] != null) { + _iterator5["return"](); + } + } finally { + if (_didIteratorError5) { + throw _iteratorError5; + } } } } @@ -7599,62 +8380,83 @@ var c23y2 = c23.y * c23.y; var poly = new Polynomial(-2 * c12.x * c12.y * c23.x * c23.y + c12x2 * c23y2 + c12y2 * c23x2, -2 * c12.x * c12.y * c22.x * c23.y - 2 * c12.x * c12.y * c22.y * c23.x + 2 * c12y2 * c22.x * c23.x + 2 * c12x2 * c22.y * c23.y, -2 * c12.x * c21.x * c12.y * c23.y - 2 * c12.x * c12.y * c21.y * c23.x - 2 * c12.x * c12.y * c22.x * c22.y + 2 * c21.x * c12y2 * c23.x + c12y2 * c22x2 + c12x2 * (2 * c21.y * c23.y + c22y2), 2 * c10.x * c12.x * c12.y * c23.y + 2 * c10.y * c12.x * c12.y * c23.x + c11.x * c11.y * c12.x * c23.y + c11.x * c11.y * c12.y * c23.x - 2 * c20.x * c12.x * c12.y * c23.y - 2 * c12.x * c20.y * c12.y * c23.x - 2 * c12.x * c21.x * c12.y * c22.y - 2 * c12.x * c12.y * c21.y * c22.x - 2 * c10.x * c12y2 * c23.x - 2 * c10.y * c12x2 * c23.y + 2 * c20.x * c12y2 * c23.x + 2 * c21.x * c12y2 * c22.x - c11y2 * c12.x * c23.x - c11x2 * c12.y * c23.y + c12x2 * (2 * c20.y * c23.y + 2 * c21.y * c22.y), 2 * c10.x * c12.x * c12.y * c22.y + 2 * c10.y * c12.x * c12.y * c22.x + c11.x * c11.y * c12.x * c22.y + c11.x * c11.y * c12.y * c22.x - 2 * c20.x * c12.x * c12.y * c22.y - 2 * c12.x * c20.y * c12.y * c22.x - 2 * c12.x * c21.x * c12.y * c21.y - 2 * c10.x * c12y2 * c22.x - 2 * c10.y * c12x2 * c22.y + 2 * c20.x * c12y2 * c22.x - c11y2 * c12.x * c22.x - c11x2 * c12.y * c22.y + c21x2 * c12y2 + c12x2 * (2 * c20.y * c22.y + c21y2), 2 * c10.x * c12.x * c12.y * c21.y + 2 * c10.y * c12.x * c21.x * c12.y + c11.x * c11.y * c12.x * c21.y + c11.x * c11.y * c21.x * c12.y - 2 * c20.x * c12.x * c12.y * c21.y - 2 * c12.x * c20.y * c21.x * c12.y - 2 * c10.x * c21.x * c12y2 - 2 * c10.y * c12x2 * c21.y + 2 * c20.x * c21.x * c12y2 - c11y2 * c12.x * c21.x - c11x2 * c12.y * c21.y + 2 * c12x2 * c20.y * c21.y, -2 * c10.x * c10.y * c12.x * c12.y - c10.x * c11.x * c11.y * c12.y - c10.y * c11.x * c11.y * c12.x + 2 * c10.x * c12.x * c20.y * c12.y + 2 * c10.y * c20.x * c12.x * c12.y + c11.x * c20.x * c11.y * c12.y + c11.x * c11.y * c12.x * c20.y - 2 * c20.x * c12.x * c20.y * c12.y - 2 * c10.x * c20.x * c12y2 + c10.x * c11y2 * c12.x + c10.y * c11x2 * c12.y - 2 * c10.y * c12x2 * c20.y - c20.x * c11y2 * c12.x - c11x2 * c20.y * c12.y + c10x2 * c12y2 + c10y2 * c12x2 + c20x2 * c12y2 + c12x2 * c20y2); var roots = poly.getRootsInInterval(0, 1); - var _iteratorNormalCompletion5 = true; - var _didIteratorError5 = false; - var _iteratorError5 = undefined; + var _iteratorNormalCompletion6 = true; + var _didIteratorError6 = false; + var _iteratorError6 = undefined; try { - for (var _iterator5 = roots[Symbol.iterator](), _step5; !(_iteratorNormalCompletion5 = (_step5 = _iterator5.next()).done); _iteratorNormalCompletion5 = true) { - var s = _step5.value; + for (var _iterator6 = roots[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) { + var s = _step6.value; var xRoots = new Polynomial(c12.x, c11.x, c10.x - c20.x - s * c21.x - s * s * c22.x - s * s * s * c23.x).getRoots(); var yRoots = new Polynomial(c12.y, c11.y, c10.y - c20.y - s * c21.y - s * s * c22.y - s * s * s * c23.y).getRoots(); if (xRoots.length > 0 && yRoots.length > 0) { var TOLERANCE = 1e-4; - var _iteratorNormalCompletion6 = true; - var _didIteratorError6 = false; - var _iteratorError6 = undefined; + var _iteratorNormalCompletion7 = true; + var _didIteratorError7 = false; + var _iteratorError7 = undefined; try { - checkRoots: for (var _iterator6 = xRoots[Symbol.iterator](), _step6; !(_iteratorNormalCompletion6 = (_step6 = _iterator6.next()).done); _iteratorNormalCompletion6 = true) { - var xRoot = _step6.value; + checkRoots: for (var _iterator7 = xRoots[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) { + var xRoot = _step7.value; if (0 <= xRoot && xRoot <= 1) { - for (var k = 0; k < yRoots.length; k++) { - if (Math.abs(xRoot - yRoots[k]) < TOLERANCE) { - result.points.push(c23.multiply(s * s * s).add(c22.multiply(s * s).add(c21.multiply(s).add(c20)))); - break checkRoots; + var _iteratorNormalCompletion8 = true; + var _didIteratorError8 = false; + var _iteratorError8 = undefined; + + try { + for (var _iterator8 = yRoots[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) { + var yRoot = _step8.value; + + if (Math.abs(xRoot - yRoot) < TOLERANCE) { + result.points.push(c23.multiply(s * s * s).add(c22.multiply(s * s).add(c21.multiply(s).add(c20)))); + break checkRoots; + } + } + } catch (err) { + _didIteratorError8 = true; + _iteratorError8 = err; + } finally { + try { + if (!_iteratorNormalCompletion8 && _iterator8["return"] != null) { + _iterator8["return"](); + } + } finally { + if (_didIteratorError8) { + throw _iteratorError8; + } } } } } } catch (err) { - _didIteratorError6 = true; - _iteratorError6 = err; + _didIteratorError7 = true; + _iteratorError7 = err; } finally { try { - if (!_iteratorNormalCompletion6 && _iterator6["return"] != null) { - _iterator6["return"](); + if (!_iteratorNormalCompletion7 && _iterator7["return"] != null) { + _iterator7["return"](); } } finally { - if (_didIteratorError6) { - throw _iteratorError6; + if (_didIteratorError7) { + throw _iteratorError7; } } } } } } catch (err) { - _didIteratorError5 = true; - _iteratorError5 = err; + _didIteratorError6 = true; + _iteratorError6 = err; } finally { try { - if (!_iteratorNormalCompletion5 && _iterator5["return"] != null) { - _iterator5["return"](); + if (!_iteratorNormalCompletion6 && _iterator6["return"] != null) { + _iterator6["return"](); } } finally { - if (_didIteratorError5) { - throw _iteratorError5; + if (_didIteratorError6) { + throw _iteratorError6; } } } @@ -7709,29 +8511,29 @@ var rxrx = rx * rx; var ryry = ry * ry; var roots = new Polynomial(ryry * c2.x * c2.x + rxrx * c2.y * c2.y, 2 * (ryry * c2.x * c1.x + rxrx * c2.y * c1.y), ryry * (2 * c2.x * c0.x + c1.x * c1.x) + rxrx * (2 * c2.y * c0.y + c1.y * c1.y) - 2 * (ryry * ec.x * c2.x + rxrx * ec.y * c2.y), 2 * (ryry * c1.x * (c0.x - ec.x) + rxrx * c1.y * (c0.y - ec.y)), ryry * (c0.x * c0.x + ec.x * ec.x) + rxrx * (c0.y * c0.y + ec.y * ec.y) - 2 * (ryry * ec.x * c0.x + rxrx * ec.y * c0.y) - rxrx * ryry).getRoots(); - var _iteratorNormalCompletion7 = true; - var _didIteratorError7 = false; - var _iteratorError7 = undefined; + var _iteratorNormalCompletion9 = true; + var _didIteratorError9 = false; + var _iteratorError9 = undefined; try { - for (var _iterator7 = roots[Symbol.iterator](), _step7; !(_iteratorNormalCompletion7 = (_step7 = _iterator7.next()).done); _iteratorNormalCompletion7 = true) { - var t = _step7.value; + for (var _iterator9 = roots[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) { + var t = _step9.value; if (0 <= t && t <= 1) { result.points.push(c2.multiply(t * t).add(c1.multiply(t).add(c0))); } } } catch (err) { - _didIteratorError7 = true; - _iteratorError7 = err; + _didIteratorError9 = true; + _iteratorError9 = err; } finally { try { - if (!_iteratorNormalCompletion7 && _iterator7["return"] != null) { - _iterator7["return"](); + if (!_iteratorNormalCompletion9 && _iterator9["return"] != null) { + _iterator9["return"](); } } finally { - if (_didIteratorError7) { - throw _iteratorError7; + if (_didIteratorError9) { + throw _iteratorError9; } } } @@ -7783,13 +8585,13 @@ // might not be on the line segment. // Find intersections and calculate point coordinates - var _iteratorNormalCompletion8 = true; - var _didIteratorError8 = false; - var _iteratorError8 = undefined; + var _iteratorNormalCompletion10 = true; + var _didIteratorError10 = false; + var _iteratorError10 = undefined; try { - for (var _iterator8 = roots[Symbol.iterator](), _step8; !(_iteratorNormalCompletion8 = (_step8 = _iterator8.next()).done); _iteratorNormalCompletion8 = true) { - var t = _step8.value; + for (var _iterator10 = roots[Symbol.iterator](), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) { + var t = _step10.value; if (0 <= t && t <= 1) { // We're within the Bezier curve @@ -7817,16 +8619,16 @@ } } } catch (err) { - _didIteratorError8 = true; - _iteratorError8 = err; + _didIteratorError10 = true; + _iteratorError10 = err; } finally { try { - if (!_iteratorNormalCompletion8 && _iterator8["return"] != null) { - _iterator8["return"](); + if (!_iteratorNormalCompletion10 && _iterator10["return"] != null) { + _iterator10["return"](); } } finally { - if (_didIteratorError8) { - throw _iteratorError8; + if (_didIteratorError10) { + throw _iteratorError10; } } } @@ -7996,13 +8798,13 @@ var poly = new Polynomial(-c3 * e3 * g3, -c3 * e3 * g2 - c3 * e2 * g3 - c2 * e3 * g3, -c3 * e3 * g1 - c3 * e2 * g2 - c2 * e3 * g2 - c3 * e1 * g3 - c2 * e2 * g3 - c1 * e3 * g3, -c3 * e3 * g0 - c3 * e2 * g1 - c2 * e3 * g1 - c3 * e1 * g2 - c2 * e2 * g2 - c1 * e3 * g2 - c3 * e0 * g3 - c2 * e1 * g3 - c1 * e2 * g3 - c0 * e3 * g3 + b * f3 * g3 + c3 * d * h3 - a * f3 * h3 + a * e3 * i3, -c3 * e2 * g0 - c2 * e3 * g0 - c3 * e1 * g1 - c2 * e2 * g1 - c1 * e3 * g1 - c3 * e0 * g2 - c2 * e1 * g2 - c1 * e2 * g2 - c0 * e3 * g2 + b * f3 * g2 - c2 * e0 * g3 - c1 * e1 * g3 - c0 * e2 * g3 + b * f2 * g3 + c3 * d * h2 - a * f3 * h2 + c2 * d * h3 - a * f2 * h3 + a * e3 * i2 + a * e2 * i3, -c3 * e1 * g0 - c2 * e2 * g0 - c1 * e3 * g0 - c3 * e0 * g1 - c2 * e1 * g1 - c1 * e2 * g1 - c0 * e3 * g1 + b * f3 * g1 - c2 * e0 * g2 - c1 * e1 * g2 - c0 * e2 * g2 + b * f2 * g2 - c1 * e0 * g3 - c0 * e1 * g3 + b * f1 * g3 + c3 * d * h1 - a * f3 * h1 + c2 * d * h2 - a * f2 * h2 + c1 * d * h3 - a * f1 * h3 + a * e3 * i1 + a * e2 * i2 + a * e1 * i3, -c3 * e0 * g0 - c2 * e1 * g0 - c1 * e2 * g0 - c0 * e3 * g0 + b * f3 * g0 - c2 * e0 * g1 - c1 * e1 * g1 - c0 * e2 * g1 + b * f2 * g1 - c1 * e0 * g2 - c0 * e1 * g2 + b * f1 * g2 - c0 * e0 * g3 + b * f0 * g3 + c3 * d * h0 - a * f3 * h0 + c2 * d * h1 - a * f2 * h1 + c1 * d * h2 - a * f1 * h2 + c0 * d * h3 - a * f0 * h3 + a * e3 * i0 + a * e2 * i1 + a * e1 * i2 - b * d * i3 + a * e0 * i3, -c2 * e0 * g0 - c1 * e1 * g0 - c0 * e2 * g0 + b * f2 * g0 - c1 * e0 * g1 - c0 * e1 * g1 + b * f1 * g1 - c0 * e0 * g2 + b * f0 * g2 + c2 * d * h0 - a * f2 * h0 + c1 * d * h1 - a * f1 * h1 + c0 * d * h2 - a * f0 * h2 + a * e2 * i0 + a * e1 * i1 - b * d * i2 + a * e0 * i2, -c1 * e0 * g0 - c0 * e1 * g0 + b * f1 * g0 - c0 * e0 * g1 + b * f0 * g1 + c1 * d * h0 - a * f1 * h0 + c0 * d * h1 - a * f0 * h1 + a * e1 * i0 - b * d * i1 + a * e0 * i1, -c0 * e0 * g0 + b * f0 * g0 + c0 * d * h0 - a * f0 * h0 - b * d * i0 + a * e0 * i0); poly.simplifyEquals(); var roots = poly.getRootsInInterval(0, 1); - var _iteratorNormalCompletion9 = true; - var _didIteratorError9 = false; - var _iteratorError9 = undefined; + var _iteratorNormalCompletion11 = true; + var _didIteratorError11 = false; + var _iteratorError11 = undefined; try { - for (var _iterator9 = roots[Symbol.iterator](), _step9; !(_iteratorNormalCompletion9 = (_step9 = _iterator9.next()).done); _iteratorNormalCompletion9 = true) { - var s = _step9.value; + for (var _iterator11 = roots[Symbol.iterator](), _step11; !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next()).done); _iteratorNormalCompletion11 = true) { + var s = _step11.value; var xp = new Polynomial(c13.x, c12.x, c11.x, c10.x - c20.x - s * c21.x - s * s * c22.x - s * s * s * c23.x); xp.simplifyEquals(); var xRoots = xp.getRoots(); @@ -8012,50 +8814,71 @@ if (xRoots.length > 0 && yRoots.length > 0) { var TOLERANCE = 1e-4; - var _iteratorNormalCompletion10 = true; - var _didIteratorError10 = false; - var _iteratorError10 = undefined; + var _iteratorNormalCompletion12 = true; + var _didIteratorError12 = false; + var _iteratorError12 = undefined; try { - checkRoots: for (var _iterator10 = xRoots[Symbol.iterator](), _step10; !(_iteratorNormalCompletion10 = (_step10 = _iterator10.next()).done); _iteratorNormalCompletion10 = true) { - var xRoot = _step10.value; + checkRoots: for (var _iterator12 = xRoots[Symbol.iterator](), _step12; !(_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done); _iteratorNormalCompletion12 = true) { + var xRoot = _step12.value; if (0 <= xRoot && xRoot <= 1) { - for (var k = 0; k < yRoots.length; k++) { - if (Math.abs(xRoot - yRoots[k]) < TOLERANCE) { - result.points.push(c23.multiply(s * s * s).add(c22.multiply(s * s).add(c21.multiply(s).add(c20)))); - break checkRoots; + var _iteratorNormalCompletion13 = true; + var _didIteratorError13 = false; + var _iteratorError13 = undefined; + + try { + for (var _iterator13 = yRoots[Symbol.iterator](), _step13; !(_iteratorNormalCompletion13 = (_step13 = _iterator13.next()).done); _iteratorNormalCompletion13 = true) { + var yRoot = _step13.value; + + if (Math.abs(xRoot - yRoot) < TOLERANCE) { + result.points.push(c23.multiply(s * s * s).add(c22.multiply(s * s).add(c21.multiply(s).add(c20)))); + break checkRoots; + } + } + } catch (err) { + _didIteratorError13 = true; + _iteratorError13 = err; + } finally { + try { + if (!_iteratorNormalCompletion13 && _iterator13["return"] != null) { + _iterator13["return"](); + } + } finally { + if (_didIteratorError13) { + throw _iteratorError13; + } } } } } } catch (err) { - _didIteratorError10 = true; - _iteratorError10 = err; + _didIteratorError12 = true; + _iteratorError12 = err; } finally { try { - if (!_iteratorNormalCompletion10 && _iterator10["return"] != null) { - _iterator10["return"](); + if (!_iteratorNormalCompletion12 && _iterator12["return"] != null) { + _iterator12["return"](); } } finally { - if (_didIteratorError10) { - throw _iteratorError10; + if (_didIteratorError12) { + throw _iteratorError12; } } } } } } catch (err) { - _didIteratorError9 = true; - _iteratorError9 = err; + _didIteratorError11 = true; + _iteratorError11 = err; } finally { try { - if (!_iteratorNormalCompletion9 && _iterator9["return"] != null) { - _iterator9["return"](); + if (!_iteratorNormalCompletion11 && _iterator11["return"] != null) { + _iterator11["return"](); } } finally { - if (_didIteratorError9) { - throw _iteratorError9; + if (_didIteratorError11) { + throw _iteratorError11; } } } @@ -8123,26 +8946,26 @@ var ryry = ry * ry; var poly = new Polynomial(c3.x * c3.x * ryry + c3.y * c3.y * rxrx, 2 * (c3.x * c2.x * ryry + c3.y * c2.y * rxrx), 2 * (c3.x * c1.x * ryry + c3.y * c1.y * rxrx) + c2.x * c2.x * ryry + c2.y * c2.y * rxrx, 2 * c3.x * ryry * (c0.x - ec.x) + 2 * c3.y * rxrx * (c0.y - ec.y) + 2 * (c2.x * c1.x * ryry + c2.y * c1.y * rxrx), 2 * c2.x * ryry * (c0.x - ec.x) + 2 * c2.y * rxrx * (c0.y - ec.y) + c1.x * c1.x * ryry + c1.y * c1.y * rxrx, 2 * c1.x * ryry * (c0.x - ec.x) + 2 * c1.y * rxrx * (c0.y - ec.y), c0.x * c0.x * ryry - 2 * c0.y * ec.y * rxrx - 2 * c0.x * ec.x * ryry + c0.y * c0.y * rxrx + ec.x * ec.x * ryry + ec.y * ec.y * rxrx - rxrx * ryry); var roots = poly.getRootsInInterval(0, 1); - var _iteratorNormalCompletion11 = true; - var _didIteratorError11 = false; - var _iteratorError11 = undefined; + var _iteratorNormalCompletion14 = true; + var _didIteratorError14 = false; + var _iteratorError14 = undefined; try { - for (var _iterator11 = roots[Symbol.iterator](), _step11; !(_iteratorNormalCompletion11 = (_step11 = _iterator11.next()).done); _iteratorNormalCompletion11 = true) { - var t = _step11.value; + for (var _iterator14 = roots[Symbol.iterator](), _step14; !(_iteratorNormalCompletion14 = (_step14 = _iterator14.next()).done); _iteratorNormalCompletion14 = true) { + var t = _step14.value; result.points.push(c3.multiply(t * t * t).add(c2.multiply(t * t).add(c1.multiply(t).add(c0)))); } } catch (err) { - _didIteratorError11 = true; - _iteratorError11 = err; + _didIteratorError14 = true; + _iteratorError14 = err; } finally { try { - if (!_iteratorNormalCompletion11 && _iterator11["return"] != null) { - _iterator11["return"](); + if (!_iteratorNormalCompletion14 && _iterator14["return"] != null) { + _iterator14["return"](); } } finally { - if (_didIteratorError11) { - throw _iteratorError11; + if (_didIteratorError14) { + throw _iteratorError14; } } } @@ -8218,13 +9041,13 @@ // might not be on the line segment. // Find intersections and calculate point coordinates - var _iteratorNormalCompletion12 = true; - var _didIteratorError12 = false; - var _iteratorError12 = undefined; + var _iteratorNormalCompletion15 = true; + var _didIteratorError15 = false; + var _iteratorError15 = undefined; try { - for (var _iterator12 = roots[Symbol.iterator](), _step12; !(_iteratorNormalCompletion12 = (_step12 = _iterator12.next()).done); _iteratorNormalCompletion12 = true) { - var t = _step12.value; + for (var _iterator15 = roots[Symbol.iterator](), _step15; !(_iteratorNormalCompletion15 = (_step15 = _iterator15.next()).done); _iteratorNormalCompletion15 = true) { + var t = _step15.value; if (0 <= t && t <= 1) { // We're within the Bezier curve @@ -8255,16 +9078,16 @@ } } } catch (err) { - _didIteratorError12 = true; - _iteratorError12 = err; + _didIteratorError15 = true; + _iteratorError15 = err; } finally { try { - if (!_iteratorNormalCompletion12 && _iterator12["return"] != null) { - _iterator12["return"](); + if (!_iteratorNormalCompletion15 && _iterator15["return"] != null) { + _iterator15["return"](); } } finally { - if (_didIteratorError12) { - throw _iteratorError12; + if (_didIteratorError15) { + throw _iteratorError15; } } } @@ -8562,22 +9385,60 @@ var norm0 = (a[0] * a[0] + 2 * a[1] * a[1] + a[2] * a[2]) * epsilon; var norm1 = (b[0] * b[0] + 2 * b[1] * b[1] + b[2] * b[2]) * epsilon; var result = new Intersection("No Intersection"); + var _iteratorNormalCompletion16 = true; + var _didIteratorError16 = false; + var _iteratorError16 = undefined; - for (var y = 0; y < yRoots.length; y++) { - var xPoly = new Polynomial(a[0], a[3] + yRoots[y] * a[1], a[5] + yRoots[y] * (a[4] + yRoots[y] * a[2])); - var xRoots = xPoly.getRoots(); + try { + for (var _iterator16 = yRoots[Symbol.iterator](), _step16; !(_iteratorNormalCompletion16 = (_step16 = _iterator16.next()).done); _iteratorNormalCompletion16 = true) { + var yRoot = _step16.value; + var xPoly = new Polynomial(a[0], a[3] + yRoot * a[1], a[5] + yRoot * (a[4] + yRoot * a[2])); + var xRoots = xPoly.getRoots(); + var _iteratorNormalCompletion17 = true; + var _didIteratorError17 = false; + var _iteratorError17 = undefined; - for (var x = 0; x < xRoots.length; x++) { - var tst = (a[0] * xRoots[x] + a[1] * yRoots[y] + a[3]) * xRoots[x] + (a[2] * yRoots[y] + a[4]) * yRoots[y] + a[5]; + try { + for (var _iterator17 = xRoots[Symbol.iterator](), _step17; !(_iteratorNormalCompletion17 = (_step17 = _iterator17.next()).done); _iteratorNormalCompletion17 = true) { + var xRoot = _step17.value; + var tst = (a[0] * xRoot + a[1] * yRoot + a[3]) * xRoot + (a[2] * yRoot + a[4]) * yRoot + a[5]; - if (Math.abs(tst) < norm0) { - tst = (b[0] * xRoots[x] + b[1] * yRoots[y] + b[3]) * xRoots[x] + (b[2] * yRoots[y] + b[4]) * yRoots[y] + b[5]; + if (Math.abs(tst) < norm0) { + tst = (b[0] * xRoot + b[1] * yRoot + b[3]) * xRoot + (b[2] * yRoot + b[4]) * yRoot + b[5]; - if (Math.abs(tst) < norm1) { - result.appendPoint(new Point2D(xRoots[x], yRoots[y])); + if (Math.abs(tst) < norm1) { + result.appendPoint(new Point2D(xRoot, yRoot)); + } + } + } + } catch (err) { + _didIteratorError17 = true; + _iteratorError17 = err; + } finally { + try { + if (!_iteratorNormalCompletion17 && _iterator17["return"] != null) { + _iterator17["return"](); + } + } finally { + if (_didIteratorError17) { + throw _iteratorError17; + } } } } + } catch (err) { + _didIteratorError16 = true; + _iteratorError16 = err; + } finally { + try { + if (!_iteratorNormalCompletion16 && _iterator16["return"] != null) { + _iterator16["return"](); + } + } finally { + if (_didIteratorError16) { + throw _iteratorError16; + } + } } if (result.points.length > 0) { @@ -9584,6 +10445,7 @@ * * @param {module:kld-intersections.Point2D} point * @param {Array} points + * @returns {boolean} */ diff --git a/dist/index-umd.min.js b/dist/index-umd.min.js index a55f89b..90ff411 100644 --- a/dist/index-umd.min.js +++ b/dist/index-umd.min.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports):"function"==typeof define&&define.amd?define(["exports"],t):t((e=e||self).KldIntersections={})}(this,function(e){"use strict";function t(e){return(t="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e})(e)}function n(e,t){if(!(e instanceof t))throw new TypeError("Cannot call a class as a function")}function r(e,t){for(var n=0;n0&&void 0!==arguments[0]?arguments[0]:0,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;n(this,e),this.x=t,this.y=r}return s(e,[{key:"clone",value:function(){return new this.constructor(this.x,this.y)}},{key:"add",value:function(e){return new this.constructor(this.x+e.x,this.y+e.y)}},{key:"subtract",value:function(e){return new this.constructor(this.x-e.x,this.y-e.y)}},{key:"multiply",value:function(e){return new this.constructor(this.x*e,this.y*e)}},{key:"divide",value:function(e){return new this.constructor(this.x/e,this.y/e)}},{key:"equals",value:function(e){return this.x===e.x&&this.y===e.y}},{key:"precisionEquals",value:function(e,t){return Math.abs(this.x-e.x)0&&void 0!==arguments[0]?arguments[0]:0,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;n(this,e),this.x=t,this.y=r}return s(e,[{key:"length",value:function(){return Math.sqrt(this.x*this.x+this.y*this.y)}},{key:"magnitude",value:function(){return this.x*this.x+this.y*this.y}},{key:"dot",value:function(e){return this.x*e.x+this.y*e.y}},{key:"cross",value:function(e){return this.x*e.y-this.y*e.x}},{key:"determinant",value:function(e){return this.x*e.y-this.y*e.x}},{key:"unit",value:function(){return this.divide(this.length())}},{key:"add",value:function(e){return new this.constructor(this.x+e.x,this.y+e.y)}},{key:"subtract",value:function(e){return new this.constructor(this.x-e.x,this.y-e.y)}},{key:"multiply",value:function(e){return new this.constructor(this.x*e,this.y*e)}},{key:"divide",value:function(e){return new this.constructor(this.x/e,this.y/e)}},{key:"angleBetween",value:function(e){var t=this.dot(e)/(this.length()*e.length());t=Math.max(-1,Math.min(t,1));var n=Math.acos(t);return this.cross(e)<0?-n:n}},{key:"perp",value:function(){return new this.constructor(-this.y,this.x)}},{key:"perpendicular",value:function(e){return this.subtract(this.project(e))}},{key:"project",value:function(e){var t=this.dot(e)/e.dot(e);return e.multiply(t)}},{key:"transform",value:function(e){return new this.constructor(e.a*this.x+e.c*this.y,e.b*this.x+e.d*this.y)}},{key:"equals",value:function(e){return this.x===e.x&&this.y===e.y}},{key:"precisionEquals",value:function(e,t){return Math.abs(this.x-e.x)0&&void 0!==arguments[0]?arguments[0]:1,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,s=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;n(this,e),this.a=t,this.b=r,this.c=s,this.d=a,this.e=i,this.f=o}return s(e,[{key:"multiply",value:function(e){return this.isIdentity()?e:e.isIdentity()?this:new this.constructor(this.a*e.a+this.c*e.b,this.b*e.a+this.d*e.b,this.a*e.c+this.c*e.d,this.b*e.c+this.d*e.d,this.a*e.e+this.c*e.f+this.e,this.b*e.e+this.d*e.f+this.f)}},{key:"inverse",value:function(){if(this.isIdentity())return this;var e=this.a*this.d-this.b*this.c;if(0===e)throw new Error("Matrix is not invertible");var t=1/e,n=this.f*this.c-this.e*this.d,r=this.e*this.b-this.f*this.a;return new this.constructor(this.d*t,-this.b*t,-this.c*t,this.a*t,n*t,r*t)}},{key:"translate",value:function(e,t){return new this.constructor(this.a,this.b,this.c,this.d,this.a*e+this.c*t+this.e,this.b*e+this.d*t+this.f)}},{key:"scale",value:function(e){return new this.constructor(this.a*e,this.b*e,this.c*e,this.d*e,this.e,this.f)}},{key:"scaleAt",value:function(e,t){var n=t.x-e*t.x,r=t.y-e*t.y;return new this.constructor(this.a*e,this.b*e,this.c*e,this.d*e,this.a*n+this.c*r+this.e,this.b*n+this.d*r+this.f)}},{key:"scaleNonUniform",value:function(e,t){return new this.constructor(this.a*e,this.b*e,this.c*t,this.d*t,this.e,this.f)}},{key:"scaleNonUniformAt",value:function(e,t,n){var r=n.x-e*n.x,s=n.y-t*n.y;return new this.constructor(this.a*e,this.b*e,this.c*t,this.d*t,this.a*r+this.c*s+this.e,this.b*r+this.d*s+this.f)}},{key:"rotate",value:function(e){var t=Math.cos(e),n=Math.sin(e);return new this.constructor(this.a*t+this.c*n,this.b*t+this.d*n,this.a*-n+this.c*t,this.b*-n+this.d*t,this.e,this.f)}},{key:"rotateAt",value:function(e,t){var n=Math.cos(e),r=Math.sin(e),s=t.x,a=t.y,i=this.a*n+this.c*r,o=this.b*n+this.d*r,u=this.c*n-this.a*r,l=this.d*n-this.b*r;return new this.constructor(i,o,u,l,(this.a-i)*s+(this.c-u)*a+this.e,(this.b-o)*s+(this.d-l)*a+this.f)}},{key:"rotateFromVector",value:function(e){var t=e.unit(),n=t.x,r=t.y;return new this.constructor(this.a*n+this.c*r,this.b*n+this.d*r,this.a*-r+this.c*n,this.b*-r+this.d*n,this.e,this.f)}},{key:"flipX",value:function(){return new this.constructor(-this.a,-this.b,this.c,this.d,this.e,this.f)}},{key:"flipY",value:function(){return new this.constructor(this.a,this.b,-this.c,-this.d,this.e,this.f)}},{key:"skewX",value:function(e){var t=Math.tan(e);return new this.constructor(this.a,this.b,this.c+this.a*t,this.d+this.b*t,this.e,this.f)}},{key:"skewY",value:function(e){var t=Math.tan(e);return new this.constructor(this.a+this.c*t,this.b+this.d*t,this.c,this.d,this.e,this.f)}},{key:"isIdentity",value:function(){return 1===this.a&&0===this.b&&0===this.c&&1===this.d&&0===this.e&&0===this.f}},{key:"isInvertible",value:function(){return this.a*this.d-this.b*this.c!=0}},{key:"getScale",value:function(){return{scaleX:Math.sqrt(this.a*this.a+this.c*this.c),scaleY:Math.sqrt(this.b*this.b+this.d*this.d)}}},{key:"getDecomposition",value:function(){var e=.5*(this.a+this.d),t=.5*(this.a-this.d),n=.5*(this.b+this.c),r=.5*(this.b-this.c),s=Math.sqrt(e*e+r*r),a=Math.sqrt(t*t+n*n),i=s+a,o=s-a,u=Math.atan2(n,t),l=Math.atan2(r,e),c=.5*(l-u),h=.5*(l+u);return{translation:this.constructor.translation(this.e,this.f),rotation:this.constructor.rotation(h),scale:this.constructor.nonUniformScaling(i,o),rotation0:this.constructor.rotation(c)}}},{key:"equals",value:function(e){return this.a===e.a&&this.b===e.b&&this.c===e.c&&this.d===e.d&&this.e===e.e&&this.f===e.f}},{key:"precisionEquals",value:function(e,t){return Math.abs(this.a-e.a)=0;t--)this.coefs.push(t<0||arguments.length<=t?void 0:arguments[t]);this._variable="t",this._s=0}return s(e,[{key:"clone",value:function(){var t=new e;return t.coefs=this.coefs.slice(),t}},{key:"eval",value:function(e){if(isNaN(e))throw new TypeError("Parameter must be a number. Found '".concat(e,"'"));for(var t=0,n=this.coefs.length-1;n>=0;n--)t=t*e+this.coefs[n];return t}},{key:"add",value:function(t){for(var n=new e,r=this.getDegree(),s=t.getDegree(),a=Math.max(r,s),i=0;i<=a;i++){var o=i<=r?this.coefs[i]:0,u=i<=s?t.coefs[i]:0;n.coefs[i]=o+u}return n}},{key:"multiply",value:function(t){for(var n=new e,r=0;r<=this.getDegree()+t.getDegree();r++)n.coefs.push(0);for(var s=0;s<=this.getDegree();s++)for(var a=0;a<=t.getDegree();a++)n.coefs[s+a]+=this.coefs[s]*t.coefs[a];return n}},{key:"divideEqualsScalar",value:function(e){for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:1e-12,t=this.getDegree();t>=0&&Math.abs(this.coefs[t])<=e;t--)this.coefs.pop()}},{key:"removeZerosEquals",value:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1e-15,t=this.coefs,n=10*e*Math.abs(t.reduce(function(e,t){return Math.abs(t)>Math.abs(e)?t:e})),r=0;r=0;n--){var r=Math.round(1e3*this.coefs[n])/1e3;if(0!==r){var s=r<0?" - ":" + ";r=Math.abs(r),n>0&&(1===r?r=this._variable:r+=this._variable),n>1&&(r+="^"+n),t.push(s),e.push(r)}}t[0]=" + "===t[0]?"":"-";for(var a="",i=0;i2&&void 0!==arguments[2]?arguments[2]:1e-6,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:15,a=this.eval(e),i=this.eval(t);if(Math.abs(a)<=r)n=e;else if(Math.abs(i)<=r)n=t;else if(a*i<=0)for(var o=Math.log(t-e),u=Math.LN10*s,l=Math.ceil((o+u)/Math.LN2),c=0;c=3&&(a=e.interpolate(s,r,3,i-3,0),Math.abs(a.dy)<=1e-6*a.y)));i++)r[i]=r[i-1],s[i]=.25*s[i-1];return a.y}},{key:"zeroErrorEstimate",value:function(e){if(void 0===e){var t=this.bounds();e=Math.max(Math.abs(t.minX),Math.abs(t.maxX))}if(e<.001)return 2*Math.abs(this.eval(1e-15));var n=this.coefs.length-1,r=this.coefs[n];return 10*1e-15*this.coefs.reduce(function(t,n,s){var a=n/r*Math.pow(e,s);return a>t?a:t},0)}},{key:"boundsUpperRealFujiwara",value:function(){var e=this.coefs,t=e.length-1,n=e[t];1!==n&&(e=this.coefs.map(function(e){return e/n}));var r,s=e.map(function(e,n){return n0)},{negX:-2*s.reduce(a,{max:0,nearmax:0}).max,posX:2*i.max}}},{key:"boundsLowerRealFujiwara",value:function(){var t=new e;t.coefs=this.coefs.slice().reverse();var n=t.boundsUpperRealFujiwara();return n.negX=1/n.negX,n.posX=1/n.posX,n}},{key:"bounds",value:function(){var e=this.boundsUpperRealFujiwara(),t={minX:e.negX,maxX:e.posX};return 0===e.negX&&0===e.posX?t:(0===e.negX?t.minX=this.boundsLowerRealFujiwara().posX:0===e.posX&&(t.maxX=this.boundsLowerRealFujiwara().negX),t.minX>t.maxX&&(t.minX=t.maxX=0),t)}},{key:"boundUpperAbsRouche",value:function(){var e=this.coefs,t=e.length-1;return 1+e.reduce(function(e,n,r){return r!==t&&e<(n=Math.abs(n))?n:e},0)/Math.abs(e[t])}},{key:"boundLowerAbsRouche",value:function(){var e=this.coefs,t=e.reduce(function(e,t,n){return 0!==n&&e<(t=Math.abs(t))?t:e},0);return Math.abs(e[0])/(Math.abs(e[0])+t)}},{key:"boundsRealLaguerre",value:function(){var e=this.coefs,t=e.length-1,n=-e[t-1]/(t*e[t]),r=e[t-1]*e[t-1]-2*t/(t-1)*e[t]*e[t-2],s=(t-1)/(t*e[t])*Math.sqrt(r);return s<0&&(s=-s),{minX:n-s,maxX:n+s}}},{key:"countRootsDescartes",value:function(){var e=this.coefs,t=e.length-1,n=e.reduce(function(e,t,n){return 0!==e.prev_a&&0!==t&&(e.prev_a<0==t>0&&e.pos++,n%2==0!=e.prev_a<0==(n%2==1!=t>0)&&e.neg++),e.prev_a=t,e},{pos:0,neg:0,prev_a:0});return{maxRealPos:n.pos,maxRealNeg:n.neg,minComplex:t-(n.pos+n.neg)}}},{key:"getDegree",value:function(){return this.coefs.length-1}},{key:"getDerivative",value:function(){for(var t=new e,n=1;n0){r(this.bisection(e,s[0]));for(var a=0;a<=s.length-2;a++)r(this.bisection(s[a],s[a+1]));r(this.bisection(s[s.length-1],t))}else r(this.bisection(e,t))}return n}},{key:"getLinearRoot",value:function(){var e=[],t=this.coefs[1];return 0!==t&&e.push(-this.coefs[0]/t),e}},{key:"getQuadraticRoots",value:function(){var e=[];if(2===this.getDegree()){var t=this.coefs[2],n=this.coefs[1]/t,r=n*n-4*(this.coefs[0]/t);if(r>0){var s=Math.sqrt(r);e.push(.5*(-n+s)),e.push(.5*(-n-s))}else 0===r&&e.push(.5*-n)}return e}},{key:"getCubicRoots",value:function(){var e=[];if(3===this.getDegree()){var t=this.coefs[3],n=this.coefs[2]/t,r=this.coefs[1]/t,s=(3*r-n*n)/3,a=(2*n*n*n-9*r*n+27*(this.coefs[0]/t))/27,i=n/3,o=a*a/4+s*s*s/27,u=a/2,l=this.zeroErrorEstimate();if(Math.abs(o)<=l&&(o=0),o>0){var c,h=Math.sqrt(o),y=-u+h;c=y>=0?Math.pow(y,1/3):-Math.pow(-y,1/3),(y=-u-h)>=0?c+=Math.pow(y,1/3):c-=Math.pow(-y,1/3),e.push(c-i)}else if(o<0){var p=Math.sqrt(-s/3),f=Math.atan2(Math.sqrt(-o),-u)/3,x=Math.cos(f),v=Math.sin(f),m=Math.sqrt(3);e.push(2*p*x-i),e.push(-p*(x+m*v)-i),e.push(-p*(x-m*v)-i)}else{var d;d=u>=0?-Math.pow(u,1/3):Math.pow(-u,1/3),e.push(2*d-i),e.push(-d-i)}}return e}},{key:"getQuarticRoots",value:function(){var t=[],n=this.getDegree();if(4===n){var r=new e;r.coefs=this.coefs.slice(),r.divideEqualsScalar(r.coefs[n]);Math.abs(r.coefs[0])<10*1e-15*Math.abs(r.coefs[3])&&(r.coefs[0]=0);for(var s=r.getDerivative(),a=s.getRoots().sort(function(e,t){return e-t}),i=[],o=a.length-1,u=this.bounds(),l=Math.max(Math.abs(u.minX),Math.abs(u.maxX)),h=this.zeroErrorEstimate(l),y=0;y<=o;y++)i.push(r.eval(a[y]));for(var p=0;p<=o;p++)Math.abs(i[p])-1){for(0!==i[0]?c(i[0])!==c(r.eval(a[0]-x)-i[0])&&(v.push(a[0]-x),m.push([u.minX,a[0]])):(t.push(a[0],a[0]),f++);f0)for(f=0;fa)throw new RangeError("Min must be greater than max");if(y=t(s),p=t(a),c(y)===c(p))throw new RangeError("Y values of bounds must be of opposite sign")}for(var d=function(){return Math.abs(u)<=v*Math.abs(i)||x===i-u-i},b=0;ba){if(c(y)===c(p))break;var g=p-y,w=a-s;if(u=0===g?i-(s+.5*w):Math.abs(g/Math.min(y,p))>50?i-(s+w*(.5+(Math.abs(y)":16,step:17,"=~":18,namedPattern:19,expression:20,mathExpression:21,MAP:22,"(":23,")":24,PATTERNS:25,"{":26,patterns:27,"}":28,SEQUENCES:29,callExpression:30,"+":31,"-":32,"*":33,"/":34,argumentList:35,memberExpression:36,primaryExpression:37,".":38,integer:39,"[":40,"]":41,boolean:42,NULL_TYPE:43,float:44,string:45,UNDEFINED_TYPE:46,$:47,arrayExpression:48,objectExpression:49,expressionElements:50,expressionElement:51,expressionProperties:52,expressionProperty:53,":":54,argument:55,"...":56,pattern:57,AS:58,ANY_TYPE:59,ARRAY_TYPE:60,BOOLEAN_TYPE:61,TRUE:62,FALSE:63,NUMBER_TYPE:64,OBJECT_TYPE:65,STRING_TYPE:66,arrayPattern:67,objectPattern:68,PATTERN:69,ENUMERATION:70,patternElements:71,namedPatternElement:72,patternElement:73,range:74,"..":75,patternProperties:76,namedPatternProperty:77,namedProperty:78,STRING:79,NUMBER:80,stringOrIdentifier:81,identifiers:82,$accept:0,$end:1},terminals_:{2:"error",5:";",9:"LET",10:"IDENTIFIER",11:"=",12:"DEF",14:",",16:"|>",18:"=~",22:"MAP",23:"(",24:")",25:"PATTERNS",26:"{",28:"}",29:"SEQUENCES",31:"+",32:"-",33:"*",34:"/",38:".",40:"[",41:"]",43:"NULL_TYPE",46:"UNDEFINED_TYPE",47:"$",54:":",56:"...",58:"AS",59:"ANY_TYPE",60:"ARRAY_TYPE",61:"BOOLEAN_TYPE",62:"TRUE",63:"FALSE",64:"NUMBER_TYPE",65:"OBJECT_TYPE",66:"STRING_TYPE",69:"PATTERN",70:"ENUMERATION",75:"..",79:"STRING",80:"NUMBER"},productions_:[0,[3,1],[3,2],[4,3],[4,1],[6,1],[6,1],[7,4],[7,4],[13,3],[13,1],[8,1],[15,3],[15,1],[17,2],[17,1],[20,1],[20,6],[20,4],[20,4],[21,1],[21,3],[21,3],[21,3],[21,3],[30,3],[30,4],[30,1],[36,1],[36,3],[36,3],[36,4],[37,1],[37,1],[37,1],[37,1],[37,1],[37,1],[37,1],[37,1],[37,1],[37,3],[48,2],[48,3],[50,3],[50,1],[51,1],[51,1],[49,2],[49,3],[52,3],[52,1],[53,3],[53,1],[53,1],[35,3],[35,1],[55,1],[55,2],[27,3],[27,1],[19,1],[19,3],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,2],[57,2],[57,1],[67,2],[67,3],[71,3],[71,1],[72,1],[72,3],[73,1],[73,3],[73,3],[73,5],[74,3],[74,2],[74,2],[74,1],[68,2],[68,3],[76,3],[76,1],[77,1],[77,3],[78,3],[78,1],[42,1],[42,1],[45,1],[39,1],[44,1],[81,1],[81,1],[82,3],[82,1]],performAction:function(e,t,n,r,s,a,i){var o=a.length-1;switch(s){case 1:return a[o];case 2:return a[o-1];case 3:case 9:case 12:case 44:case 50:case 55:case 59:case 82:case 96:case 109:a[o-2].push(a[o]),this.$=a[o-2];break;case 4:case 10:case 13:case 45:case 51:case 56:case 60:case 83:case 97:case 110:this.$=[a[o]];break;case 5:case 6:case 14:case 15:case 16:case 20:case 27:case 28:case 39:case 40:case 46:case 47:case 54:case 57:case 98:case 107:this.$=a[o];break;case 7:this.$={type:"assignment",name:a[o-2],value:a[o]};break;case 8:this.$={type:"def",name:a[o-2],value:a[o]};break;case 11:this.$={type:"sequence",steps:a[o]};break;case 17:this.$={type:"map",value:[a[o-3],a[o-1]]};break;case 18:this.$={type:"patterns",patterns:a[o-1]};break;case 19:this.$={type:"sequences",sequences:a[o-1]};break;case 21:this.$={type:"add",left:a[o-2],right:a[o]};break;case 22:this.$={type:"subtract",left:a[o-2],right:a[o]};break;case 23:this.$={type:"multiply",left:a[o-2],right:a[o]};break;case 24:this.$={type:"divide",left:a[o-2],right:a[o]};break;case 25:this.$={type:"invoke",name:a[o-2],args:[]};break;case 26:this.$={type:"invoke",name:a[o-3],args:a[o-1]};break;case 29:this.$={type:"get-property",left:a[o-2],right:a[o]};break;case 30:this.$={type:"get-index",left:a[o-2],right:a[o]};break;case 31:this.$={type:"get-index",left:a[o-3],right:a[o-1]};break;case 32:this.$={type:"boolean",value:a[o]};break;case 33:this.$={type:"boolean",value:null};break;case 34:this.$={type:"number",value:a[o]};break;case 35:this.$={type:"string",value:a[o]};break;case 36:this.$={type:"undefined",value:void 0};break;case 37:this.$={type:"get-value",name:a[o]};break;case 38:this.$={type:"get-structure"};break;case 41:this.$=a[o-1];break;case 42:this.$={type:"array",value:[]};break;case 43:this.$={type:"array",value:a[o-1]};break;case 48:this.$={type:"object",value:[]};break;case 49:this.$={type:"object",value:a[o-1]};break;case 52:this.$={type:"property",name:a[o-2],value:a[o]};break;case 53:this.$={type:"property",name:a[o],value:null};break;case 58:this.$={type:"spread",expression:a[o]};break;case 61:case 84:a[o].assignTo=null,this.$=a[o];break;case 62:case 85:case 99:a[o-2].assignTo=a[o],this.$=a[o-2];break;case 63:this.$={type:"pattern",patternType:"any",value:null};break;case 64:this.$={type:"pattern",patternType:"array",value:null};break;case 65:this.$={type:"pattern",patternType:"boolean",value:null};break;case 66:this.$={type:"pattern",patternType:"boolean",value:!0};break;case 67:this.$={type:"pattern",patternType:"boolean",value:!1};break;case 68:this.$={type:"pattern",patternType:"null",value:null};break;case 69:this.$={type:"pattern",patternType:"number",value:null};break;case 70:this.$={type:"pattern",patternType:"number",value:a[o]};break;case 71:this.$={type:"pattern",patternType:"object",value:null};break;case 72:this.$={type:"pattern",patternType:"string",value:null};break;case 73:this.$={type:"pattern",patternType:"string",value:a[o]};break;case 74:this.$={type:"pattern",patternType:"undefined",value:null};break;case 75:case 76:this.$=a[o];break;case 77:this.$={type:"pattern-reference",name:a[o]};break;case 78:this.$={type:"enumeration-reference",name:a[o]};break;case 79:this.$={type:"pattern",patternType:"reference",value:a[o]};break;case 80:this.$={type:"pattern",patternType:"array-pattern",value:[]};break;case 81:this.$={type:"pattern",patternType:"array-pattern",value:a[o-1]};break;case 86:this.$={type:"element",pattern:a[o],range:{type:"range",start:1,stop:1}};break;case 87:this.$={type:"element",pattern:a[o-2],range:a[o]};break;case 88:this.$={type:"element-group",elements:a[o-1],range:{type:"range",start:1,stop:1}};break;case 89:this.$={type:"element-group",elements:a[o-3],range:a[o]};break;case 90:this.$={type:"range",start:a[o-2],stop:a[o]};break;case 91:this.$={type:"range",start:0,stop:a[o]};break;case 92:this.$={type:"range",start:a[o-1],stop:1/0};break;case 93:this.$={type:"range",start:a[o],stop:a[o]};break;case 94:this.$={type:"pattern",patternType:"object",value:null};break;case 95:this.$={type:"pattern",patternType:"object-pattern",value:a[o-1]};break;case 100:this.$={type:"property",name:a[o-2],pattern:a[o]};break;case 101:this.$={type:"property",name:a[o],pattern:{type:"pattern",patternType:"any",value:null}};break;case 102:this.$=!0;break;case 103:this.$=!1;break;case 104:case 108:this.$=a[o].substring(1,a[o].length-1);break;case 105:this.$=parseInt(a[o]);break;case 106:this.$=parseFloat(a[o])}},table:[{3:1,4:2,6:3,7:4,8:5,9:t,10:n,12:r,15:8,17:9,18:s,20:11,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},{1:[3]},{1:[2,1],5:[1,35]},e(d,[2,4]),e(d,[2,5]),e(d,[2,6]),{10:[1,36]},{10:[1,37]},e([1,5,14,24,28,41],[2,11],{16:[1,38]}),e(b,[2,13]),{10:g,19:39,26:w,40:k,43:E,44:48,45:51,46:P,57:40,59:A,60:M,61:S,62:I,63:R,64:T,65:_,66:X,67:53,68:54,69:N,70:Y,79:v,80:m},e(b,[2,15]),e(C,[2,16],{31:[1,60],32:[1,61],33:[1,62],34:[1,63]}),{23:[1,64]},{26:[1,65]},{26:[1,66]},e(L,[2,20]),e($,[2,37],{23:[1,67]}),e(L,[2,27],{38:[1,68],40:[1,69]}),e($,[2,28]),e($,[2,32]),e($,[2,33]),e($,[2,34]),e($,[2,35]),e($,[2,36]),e($,[2,38]),e($,[2,39]),e($,[2,40]),{10:n,20:70,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},e($,[2,102]),e($,[2,103]),e(D,[2,106]),e(D,[2,104]),{7:75,9:t,10:n,12:r,20:74,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,41:[1,71],42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,50:72,51:73,62:f,63:x,79:v,80:m},{7:80,9:t,10:n,12:r,20:79,21:12,22:a,23:i,25:o,26:u,28:[1,76],29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,52:77,53:78,62:f,63:x,79:v,80:m},{1:[2,2],6:81,7:4,8:5,9:t,10:n,12:r,15:8,17:9,18:s,20:11,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},{11:[1,82]},{11:[1,83]},{10:n,17:84,18:s,20:11,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},e(b,[2,14]),e(b,[2,61],{58:[1,85]}),e(z,[2,63]),e(z,[2,64]),e(z,[2,65]),e(z,[2,66]),e(z,[2,67]),e(z,[2,68]),e(z,[2,69]),e(z,[2,70]),e(z,[2,71]),e(z,[2,72]),e(z,[2,73]),e(z,[2,74]),e(z,[2,75]),e(z,[2,76]),{10:[1,86]},{10:[1,87]},e(z,[2,79]),{10:g,23:B,26:w,40:k,41:[1,88],43:E,44:48,45:51,46:P,57:92,59:A,60:M,61:S,62:I,63:R,64:T,65:_,66:X,67:53,68:54,69:N,70:Y,71:89,72:90,73:91,79:v,80:m},{10:O,28:[1,94],76:95,77:96,78:97},{10:n,23:i,26:u,30:99,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},{10:n,23:i,26:u,30:100,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},{10:n,23:i,26:u,30:101,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},{10:n,23:i,26:u,30:102,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},{10:n,20:103,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},{10:g,19:105,26:w,27:104,40:k,43:E,44:48,45:51,46:P,57:40,59:A,60:M,61:S,62:I,63:R,64:T,65:_,66:X,67:53,68:54,69:N,70:Y,79:v,80:m},{8:107,10:n,13:106,15:8,17:9,18:s,20:11,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},{10:n,20:111,21:12,22:a,23:i,24:[1,108],25:o,26:u,29:l,30:16,35:109,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,55:110,56:q,62:f,63:x,79:v,80:m},{10:[1,113],39:114,80:j},{39:116,80:j},{24:[1,117]},e($,[2,42]),{14:[1,119],41:[1,118]},e(U,[2,45]),e(U,[2,46]),e(U,[2,47]),e($,[2,48]),{14:[1,121],28:[1,120]},e(V,[2,51]),e(V,[2,53],{54:[1,122]}),e(V,[2,54]),e(d,[2,3]),{8:123,10:n,15:8,17:9,18:s,20:11,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},{8:124,10:n,15:8,17:9,18:s,20:11,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},e(b,[2,12]),{10:[1,125]},e(z,[2,77]),e(z,[2,78]),e(z,[2,80]),{14:F,41:[1,126]},e(G,[2,83]),e(G,[2,84],{58:[1,128]}),e(Q,[2,86],{5:[1,129]}),{10:g,23:B,26:w,40:k,43:E,44:48,45:51,46:P,57:92,59:A,60:M,61:S,62:I,63:R,64:T,65:_,66:X,67:53,68:54,69:N,70:Y,71:130,72:90,73:91,79:v,80:m},e(z,[2,94]),{14:[1,132],28:[1,131]},e(V,[2,97]),e(V,[2,98],{58:[1,133]}),e(H,[2,101],{54:[1,134]}),e(L,[2,21]),e(L,[2,22]),e(L,[2,23]),e(L,[2,24]),{14:[1,135]},{14:[1,137],28:[1,136]},e(V,[2,60]),{14:[1,139],28:[1,138]},e(V,[2,10]),e(L,[2,25]),{14:[1,141],24:[1,140]},e(Z,[2,56]),e(Z,[2,57]),{10:n,20:142,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},e($,[2,29]),e($,[2,30]),e([1,5,14,16,24,28,31,32,33,34,38,40,41,54,58,75],[2,105]),{41:[1,143]},e($,[2,41]),e($,[2,43]),{7:75,9:t,10:n,12:r,20:74,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,51:144,62:f,63:x,79:v,80:m},e($,[2,49]),{7:80,9:t,10:n,12:r,20:79,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,53:145,62:f,63:x,79:v,80:m},{8:146,10:n,15:8,17:9,18:s,20:11,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},e(J,[2,7]),e(J,[2,8]),e(b,[2,62]),e(z,[2,81]),{10:g,23:B,26:w,40:k,43:E,44:48,45:51,46:P,57:92,59:A,60:M,61:S,62:I,63:R,64:T,65:_,66:X,67:53,68:54,69:N,70:Y,72:147,73:91,79:v,80:m},{10:[1,148]},{39:150,74:149,75:W,80:j},{14:F,24:[1,152]},e(z,[2,95]),{10:O,77:153,78:97},{10:[1,154]},{10:g,26:w,40:k,43:E,44:48,45:51,46:P,57:155,59:A,60:M,61:S,62:I,63:R,64:T,65:_,66:X,67:53,68:54,69:N,70:Y,79:v,80:m},{8:156,10:n,15:8,17:9,18:s,20:11,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},e(C,[2,18]),{10:g,19:157,26:w,40:k,43:E,44:48,45:51,46:P,57:40,59:A,60:M,61:S,62:I,63:R,64:T,65:_,66:X,67:53,68:54,69:N,70:Y,79:v,80:m},e(C,[2,19]),{8:158,10:n,15:8,17:9,18:s,20:11,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,62:f,63:x,79:v,80:m},e(L,[2,26]),{10:n,20:111,21:12,22:a,23:i,25:o,26:u,29:l,30:16,36:18,37:19,40:c,42:20,43:h,44:22,45:23,46:y,47:p,48:26,49:27,55:159,56:q,62:f,63:x,79:v,80:m},e(Z,[2,58]),e($,[2,31]),e(U,[2,44]),e(V,[2,50]),e(V,[2,52]),e(G,[2,82]),e(G,[2,85]),e(Q,[2,87]),e(Q,[2,93],{75:[1,160]}),{39:161,80:j},e(Q,[2,88],{5:[1,162]}),e(V,[2,96]),e(V,[2,99]),e(H,[2,100]),{24:[1,163]},e(V,[2,59]),e(V,[2,9]),e(Z,[2,55]),e(Q,[2,92],{39:164,80:j}),e(Q,[2,91]),{39:150,74:165,75:W,80:j},e(C,[2,17]),e(Q,[2,90]),e(Q,[2,89])],defaultActions:{},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],r=[null],s=[],a=this.table,i="",o=0,u=0,l=s.slice.call(arguments,1),c=Object.create(this.lexer),h={yy:{}};for(var y in this.yy)Object.prototype.hasOwnProperty.call(this.yy,y)&&(h.yy[y]=this.yy[y]);c.setInput(e,h.yy),h.yy.lexer=c,h.yy.parser=this,void 0===c.yylloc&&(c.yylloc={});var p=c.yylloc;s.push(p);var f=c.options&&c.options.ranges;"function"==typeof h.yy.parseError?this.parseError=h.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var x,v,m,d,b,g,w,k,E,P,A={};;){if(m=n[n.length-1],this.defaultActions[m]?d=this.defaultActions[m]:(null==x&&(P=void 0,"number"!=typeof(P=c.lex()||1)&&(P=t.symbols_[P]||P),x=P),d=a[m]&&a[m][x]),void 0===d||!d.length||!d[0]){var M="";for(g in E=[],a[m])this.terminals_[g]&&g>2&&E.push("'"+this.terminals_[g]+"'");M=c.showPosition?"Parse error on line "+(o+1)+":\n"+c.showPosition()+"\nExpecting "+E.join(", ")+", got '"+(this.terminals_[x]||x)+"'":"Parse error on line "+(o+1)+": Unexpected "+(1==x?"end of input":"'"+(this.terminals_[x]||x)+"'"),this.parseError(M,{text:c.match,token:this.terminals_[x]||x,line:c.yylineno,loc:p,expected:E})}if(d[0]instanceof Array&&d.length>1)throw new Error("Parse Error: multiple actions possible at state: "+m+", token: "+x);switch(d[0]){case 1:n.push(x),r.push(c.yytext),s.push(c.yylloc),n.push(d[1]),x=null,v?(x=v,v=null):(u=c.yyleng,i=c.yytext,o=c.yylineno,p=c.yylloc);break;case 2:if(w=this.productions_[d[1]][1],A.$=r[r.length-w],A._$={first_line:s[s.length-(w||1)].first_line,last_line:s[s.length-1].last_line,first_column:s[s.length-(w||1)].first_column,last_column:s[s.length-1].last_column},f&&(A._$.range=[s[s.length-(w||1)].range[0],s[s.length-1].range[1]]),void 0!==(b=this.performAction.apply(A,[i,u,o,h.yy,d[1],r,s].concat(l))))return b;w&&(n=n.slice(0,-1*w*2),r=r.slice(0,-1*w),s=s.slice(0,-1*w)),n.push(this.productions_[d[1]][0]),r.push(A.$),s.push(A._$),k=a[n[n.length-2]][n[n.length-1]],n.push(k);break;case 3:return!0}}return!0}},ee={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var s=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[s[0],s[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,s;if(this.options.backtrack_lexer&&(s={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(s.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var a in s)this[a]=s[a];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var s=this._currentRules(),a=0;at[0].length)){if(t=n,r=a,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,s[a])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,s[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(e,t,n,r){switch(n){case 0:case 1:break;case 2:return 59;case 3:return 60;case 4:return 58;case 5:return 61;case 6:return 12;case 7:return 70;case 8:return 63;case 9:return 9;case 10:return 22;case 11:return 25;case 12:return 43;case 13:return 64;case 14:return 65;case 15:return 29;case 16:return 66;case 17:return 62;case 18:return 46;case 19:return 80;case 20:return 79;case 21:return 23;case 22:return 24;case 23:return 26;case 24:return 28;case 25:return 40;case 26:return 41;case 27:return 16;case 28:return"|";case 29:return 14;case 30:return 54;case 31:return 5;case 32:return 18;case 33:return 11;case 34:return"<=";case 35:return 56;case 36:return 75;case 37:return 38;case 38:return"_";case 39:return 31;case 40:return 32;case 41:return 33;case 42:return 34;case 43:return 47;case 44:return 10}},rules:[/^(?:\s+)/,/^(?:\/\/.*)/,/^(?:any\b)/,/^(?:array\b)/,/^(?:as\b)/,/^(?:boolean\b)/,/^(?:def\b)/,/^(?:enum\b)/,/^(?:false\b)/,/^(?:let\b)/,/^(?:map\b)/,/^(?:patterns\b)/,/^(?:null\b)/,/^(?:number\b)/,/^(?:object\b)/,/^(?:sequences\b)/,/^(?:string\b)/,/^(?:true\b)/,/^(?:undefined\b)/,/^(?:[-+]?(0|[1-9]\d*)(\.\d+)?)/,/^(?:"[^"\r\n]*")/,/^(?:\()/,/^(?:\))/,/^(?:{)/,/^(?:})/,/^(?:\[)/,/^(?:\])/,/^(?:\|>)/,/^(?:\|)/,/^(?:,)/,/^(?::)/,/^(?:;)/,/^(?:=~)/,/^(?:=)/,/^(?:<=)/,/^(?:\.{3})/,/^(?:\.{2})/,/^(?:\.)/,/^(?:_)/,/^(?:\+)/,/^(?:-)/,/^(?:\*)/,/^(?:\/)/,/^(?:\$)/,/^(?:[a-zA-Z_][a-zA-Z0-9_]*)/],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],inclusive:!0}}};function te(){this.yy={}}return K.lexer=ee,te.prototype=K,K.Parser=te,new te}();function p(e){return null!==e&&"object"===t(e)}var f=Object.freeze({__proto__:null,typeName:function(e){switch(e){case null:return"null";case void 0:return"undefined";default:return Array.isArray(e)?"array":t(e)}},length:function(e){return Array.isArray(e)?e.length:0},zip:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,n=[];if(Array.isArray(e)&&e.length>0&&e.every(function(e){return Array.isArray(e)}))for(var r=Math.max.apply(Math,i(e.map(function(e){return e.length}))),s=0;s3&&void 0!==arguments[3]?arguments[3]:void 0,s=e.length,a=[];n=void 0===n?t:n,t=Math.max(1,t),n=Math.max(1,n);for(var i=0;i=2){var l=a(u,2),c=l[0],h=l[1];t[c]=h}}}catch(e){r=!0,s=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw s}}}return t},merge:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&Array.isArray(t[0])?(r=t[0]).concat.apply(r,i(t.slice(1))):t.every(function(e){return p(e)})?Object.assign.apply(Object,[{}].concat(t)):void 0}}),x={};function v(e){return null!==e&&"object"===t(e)}var m=function(){function e(){for(var t in n(this,e),this.symbolTable={},this.functions={},this.messages=[],this.verbose=!1,f)this.functions[t]=f[t]}return s(e,[{key:"addFunction",value:function(e,t){this.functions[e]=t}},{key:"addInfo",value:function(e){this.verbose&&this.messages.push({type:"message",level:"info",message:e})}},{key:"addWarning",value:function(e){this.messages.push({type:"message",level:"warning",message:e})}},{key:"addError",value:function(e){this.messages.push({type:"message",level:"error",message:e})}},{key:"execute",value:function(e,t){var n,r=y.parse(e);this.messages=[];var s=!0,a=!1,i=void 0;try{for(var o,u=r[Symbol.iterator]();!(s=(o=u.next()).done);s=!0){var l=o.value;switch(l.type){case"assignment":case"def":case"sequence":n=this.executeExpression(l,t,this.symbolTable);break;default:return this.addError("unknown statement type: ".concat(l.type)),x}}}catch(e){a=!0,i=e}finally{try{s||null==u.return||u.return()}finally{if(a)throw i}}return n}},{key:"executeExpression",value:function(e,t,n){var r=this,s=function(s){var a=r.executeExpression(e.left,t,n);if(a!==x&&"number"==typeof a){var i=r.executeExpression(e.right,t,n);if(i!==x&&"number"==typeof i)return s(a,i)}return x};switch(e.type){case"assignment":var i=this.executeExpression(e.value,t,n);return i===x?(this.addError("Unable to evaluate assignment value for ".concat(e.name)),x):(n[e.name]=i,i);case"def":return void(n[e.name]=e.value);case"get-value":if(e.name in n){var o=n[e.name];if(v(o)&&"sequence"===o.type){var u=this.executeExpression(o,t,n);return u===x?(this.addError("Unable to evaluate sequence ".concat(e.name)),x):u}return o}return e.name in this.functions?this.invokeFunction(e.name,[t]):(this.addError("Tried to access unbound symbol: ".concat(e.name)),x);case"get-property":var l=this.executeExpression(e.left,t,n);return v(l)?l[e.right]:x;case"get-index":var c=e.left,h=e.right,y=this.executeExpression(c,t,n);if(Array.isArray(y)){var p=h<0?y.length+h:h;return 0<=p&&p=i)break;return x}o>1?this.pushAssign(r,e.assignTo,h):this.assign(r,e.assignTo,h),u.push(h)}return u}},{key:"executeArrayElementGroupPattern",value:function(e,t,n,r){for(var s=e.elements,a=e.range,i=a.start,o=a.stop,u=[],l=0;l1?this.pushAssign(r,m.assignTo,d[m.assignTo]):this.assign(r,m.assignTo,d[m.assignTo])),u=u.concat(b),t+=b.length,c=c.concat(b)}}catch(e){y=!0,p=e}finally{try{h||null==v.return||v.return()}finally{if(y)throw p}}if(c===x){if(l>=i){if(0===l){this.assign(r,e.assignTo,[]);var g=!0,w=!1,k=void 0;try{for(var E,P=s[Symbol.iterator]();!(g=(E=P.next()).done);g=!0){var A=E.value;this.assign(r,A.assignTo,[])}}catch(e){w=!0,k=e}finally{try{g||null==P.return||P.return()}finally{if(w)throw k}}}return u}return x}o>1?this.pushAssign(r,e.assignTo,c):this.assign(r,e.assignTo,c)}return u}},{key:"invokeFunction",value:function(e,t){var n;return e in this.functions?(n=this.functions)[e].apply(n,i(t)):x}},{key:"assign",value:function(e,t,n){null!=t&&(e.hasOwnProperty(t)&&this.addWarning("Overwriting ".concat(t," with value: ").concat(n)),e[t]=n)}},{key:"pushAssign",value:function(e,t,n){if(null!=t){var r=e.hasOwnProperty(t)?e[t]:[];Array.isArray(r)?(r.push(n),e[t]=r):this.addWarning("Unable to push to ".concat(t," because it is not an array: ").concat(r))}}}]),e}(),d=function(){function e(t,r){n(this,e),this.type=t,this.text=r}return s(e,[{key:"typeis",value:function(e){return this.type===e}}]),e}();d.UNDEFINED=0,d.COMMAND=1,d.NUMBER=2,d.EOD=3;var b=function(){function e(t){n(this,e),null==t&&(t=""),this.setPathData(t)}return s(e,[{key:"setPathData",value:function(e){if("string"!=typeof e)throw new TypeError("The first parameter must be a string");this._pathData=e}},{key:"getNextToken",value:function(){for(var e=null,t=this._pathData;null===e;)if(null===t||""===t)e=new d(d.EOD,"");else if(t.match(/^([ \t\r\n,]+)/))t=t.substr(RegExp.$1.length);else if(t.match(/^([AaCcHhLlMmQqSsTtVvZz])/))e=new d(d.COMMAND,RegExp.$1),t=t.substr(RegExp.$1.length);else{if(!t.match(/^(([-+]?\d+(\.\d*)?|[-+]?\.\d+)([eE][-+]?\d+)?)/))throw new SyntaxError("Unrecognized path data: ".concat(t));e=new d(d.NUMBER,RegExp.$1),t=t.substr(RegExp.$1.length)}return this._pathData=t,e}}]),e}(),g=function(){function e(){n(this,e),this._lexer=new b,this._handler=null}return s(e,[{key:"parseData",value:function(t){if("string"!=typeof t)throw new TypeError("The first parameter must be a string: ".concat(t));null!==this._handler&&"function"==typeof this._handler.beginParse&&this._handler.beginParse();var n=this._lexer;n.setPathData(t);for(var r="BOP",s=null,a=n.getNextToken();!1===a.typeis(d.EOD);){var i=void 0,o=[];switch(a.type){case d.COMMAND:if("BOP"===r&&"M"!==a.text&&"m"!==a.text)throw new SyntaxError("New paths must begin with a moveto command. Found '".concat(a.text,"'"));r=a.text,i=e.PARAMCOUNT[a.text.toUpperCase()],a=n.getNextToken();break;case d.NUMBER:if("BOP"===r)throw new SyntaxError("New paths must begin with a moveto command. Found '".concat(a.text,"'"));i=e.PARAMCOUNT[r.toUpperCase()];break;default:throw new SyntaxError("Unrecognized command type: ".concat(a.type))}for(var u=0;u1){var v=Math.sqrt(x);n*=v,r*=v}var m=n*n,d=r*r,b=m*f,g=d*p,k=(m*d-b-g)/(b+g);Math.abs(k)<1e-6&&(k=0);var E=Math.sqrt(k);a===i&&(E=-E);var P,A,M=e.add(t).multiply(.5),S=E*n*y/r,I=E*-r*h/n,R=(h-S)/n,T=(h+S)/n,_=(y-I)/r,X=(y+I)/r,N=new u(1,0).angleBetween(new u(R,_)),Y=(P=new u(R,_).angleBetween(new u(-T,-X)),(A=P%w)<0?A+w:A);return!1===i&&(Y-=w),[S*o-I*l+M.x,S*l+I*o+M.y,n,r,N,N+Y]}var E=function(){function e(t){n(this,e),this.shapeCreator=t,this.shapes=[],this.firstX=null,this.firstY=null,this.lastX=null,this.lastY=null,this.lastCommand=null}return s(e,[{key:"beginParse",value:function(){this.shapes=[],this.firstX=null,this.firstY=null,this.lastX=null,this.lastY=null,this.lastCommand=null}},{key:"addShape",value:function(e){this.shapes.push(e)}},{key:"arcAbs",value:function(e,t,n,r,s,a,u){if(0===e||0===t)this.addShape(this.shapeCreator.line(this.lastX,this.lastY,a,u));else{var l,c=k(new o(this.lastX,this.lastY),new o(a,u),e,t,n,r,s);this.addShape((l=this.shapeCreator).arc.apply(l,i(c)))}this.lastCommand="A",this.lastX=a,this.lastY=u}},{key:"arcRel",value:function(e,t,n,r,s,a,u){if(0===e||0===t)this.addShape(this.shapeCreator.line(this.lastX,this.lastY,this.lastX+a,this.lastY+u));else{var l,c=k(new o(this.lastX,this.lastY),new o(this.lastX+a,this.lastY+u),e,t,n,r,s);this.addShape((l=this.shapeCreator).arc.apply(l,i(c)))}this.lastCommand="a",this.lastX+=a,this.lastY+=u}},{key:"curvetoCubicAbs",value:function(e,t,n,r,s,a){this.addShape(this.shapeCreator.cubicBezier(this.lastX,this.lastY,e,t,n,r,s,a)),this.lastX=s,this.lastY=a,this.lastCommand="C"}},{key:"curvetoCubicRel",value:function(e,t,n,r,s,a){this.addShape(this.shapeCreator.cubicBezier(this.lastX,this.lastY,this.lastX+e,this.lastY+t,this.lastX+n,this.lastY+r,this.lastX+s,this.lastY+a)),this.lastX+=s,this.lastY+=a,this.lastCommand="c"}},{key:"linetoHorizontalAbs",value:function(e){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,e,this.lastY)),this.lastX=e,this.lastCommand="H"}},{key:"linetoHorizontalRel",value:function(e){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,this.lastX+e,this.lastY)),this.lastX+=e,this.lastCommand="h"}},{key:"linetoAbs",value:function(e,t){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,e,t)),this.lastX=e,this.lastY=t,this.lastCommand="L"}},{key:"linetoRel",value:function(e,t){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,this.lastX+e,this.lastY+t)),this.lastX+=e,this.lastY+=t,this.lastCommand="l"}},{key:"movetoAbs",value:function(e,t){this.firstX=e,this.firstY=t,this.lastX=e,this.lastY=t,this.lastCommand="M"}},{key:"movetoRel",value:function(e,t){this.firstX+=e,this.firstY+=t,this.lastX+=e,this.lastY+=t,this.lastCommand="m"}},{key:"curvetoQuadraticAbs",value:function(e,t,n,r){this.addShape(this.shapeCreator.quadraticBezier(this.lastX,this.lastY,e,t,n,r)),this.lastX=n,this.lastY=r,this.lastCommand="Q"}},{key:"curvetoQuadraticRel",value:function(e,t,n,r){this.addShape(this.shapeCreator.quadraticBezier(this.lastX,this.lastY,this.lastX+e,this.lastY+t,this.lastX+n,this.lastY+r)),this.lastX+=n,this.lastY+=r,this.lastCommand="q"}},{key:"curvetoCubicSmoothAbs",value:function(e,t,n,r){var s,a;if(this.lastCommand.match(/^[SsCc]$/)){var i=this.shapes[this.shapes.length-1].args[2];s=2*this.lastX-i.x,a=2*this.lastY-i.y}else s=this.lastX,a=this.lastY;this.addShape(this.shapeCreator.cubicBezier(this.lastX,this.lastY,s,a,e,t,n,r)),this.lastX=n,this.lastY=r,this.lastCommand="S"}},{key:"curvetoCubicSmoothRel",value:function(e,t,n,r){var s,a;if(this.lastCommand.match(/^[SsCc]$/)){var i=this.shapes[this.shapes.length-1].args[2];s=2*this.lastX-i.x,a=2*this.lastY-i.y}else s=this.lastX,a=this.lastY;this.addShape(this.shapeCreator.cubicBezier(this.lastX,this.lastY,s,a,this.lastX+e,this.lastY+t,this.lastX+n,this.lastY+r)),this.lastX+=n,this.lastY+=r,this.lastCommand="s"}},{key:"curvetoQuadraticSmoothAbs",value:function(e,t){var n,r;if(this.lastCommand.match(/^[QqTt]$/)){var s=this.shapes[this.shapes.length-1].args[1];n=2*this.lastX-s.x,r=2*this.lastY-s.y}else n=this.lastX,r=this.lastY;this.addShape(this.shapeCreator.quadraticBezier(this.lastX,this.lastY,n,r,e,t)),this.lastX=e,this.lastY=t,this.lastCommand="T"}},{key:"curvetoQuadraticSmoothRel",value:function(e,t){var n,r;if(this.lastCommand.match(/^[QqTt]$/)){var s=this.shapes[this.shapes.length-1].args[1];n=2*this.lastX-s.x,r=2*this.lastY-s.y}else n=this.lastX,r=this.lastY;this.addShape(this.shapeCreator.quadraticBezier(this.lastX,this.lastY,n,r,this.lastX+e,this.lastY+t)),this.lastX+=e,this.lastY+=t,this.lastCommand="t"}},{key:"linetoVerticalAbs",value:function(e){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,this.lastX,e)),this.lastY=e,this.lastCommand="V"}},{key:"linetoVerticalRel",value:function(e){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,this.lastX,this.lastY+e)),this.lastY+=e,this.lastCommand="v"}},{key:"closePath",value:function(){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,this.firstX,this.firstY)),this.lastX=this.firstX,this.lastY=this.firstY,this.lastCommand="z"}}]),e}(),P=.5*Math.PI,A=function(){function e(t,r){n(this,e),this.name=t,this.args=r}return s(e,null,[{key:"arc",value:function(){for(var t=arguments.length,n=new Array(t),r=0;r.5*p&&(i=.5*p),a>.5*f&&(a=.5*f);var x=u,v=l,m=u+i,d=l+a,b=h-i,g=y-a,w=h,k=y,E=[e.arc(m,d,i,a,2*P,3*P),e.line(m,v,b,v),e.arc(b,d,i,a,3*P,4*P),e.line(w,d,w,g),e.arc(b,g,i,a,0,P),e.line(b,k,m,k),e.arc(m,g,i,a,P,2*P),e.line(x,g,x,d)];return new e(e.PATH,E)}}]),e}();function M(e,t,n){var r;1===t.length?(t=t[0],r=Array.isArray(t)||"string"==typeof t?e+"Args":e):r=e+"Args";var s=S.execute(r,t);if(s===x)throw new TypeError("".concat(e," is not in a recognizable format: ").concat(JSON.stringify(t)));var a=1===n.length?s[n[0]]:n.map(function(e){return s[e]});return new A(e,a)}A.ARC="Arc",A.QUADRATIC_BEZIER="Bezier2",A.CUBIC_BEZIER="Bezier3",A.CIRCLE="Circle",A.ELLIPSE="Ellipse",A.LINE="Line",A.PATH="Path",A.POLYGON="Polygon",A.POLYLINE="Polyline",A.RECTANGLE="Rectangle";var S=new m;S.execute('\ndef Center =\n patterns {\n { center: { x: number as x, y: number as y } },\n { center: [ number as x, number as y ] },\n { cx: number as x, cy: number as y },\n { centerX: number as x, centerY: number as y }\n } |> Point2D(x, y);\n\ndef Radii =\n patterns {\n { radii: { x: number as rx, y: number as ry } },\n { radii: [ number as rx, number as ry ] },\n { rx: number as rx, ry: number as ry },\n { radiusX: number as rx, radiusY: number as ry }\n } |> { "rx", "ry" };\n\ndef P1 =\n patterns {\n { p1: { x: number as x, y: number as y } },\n { p1: [ number as x, number as y ] },\n { p1x: number as x, p1y: number as y }\n } |> Point2D(x, y);\n \ndef P2 =\n patterns {\n { p1: { x: number as x, y: number as y } },\n { p1: [ number as x, number as y ] },\n { p1x: number as x, p1y: number as y }\n } |> Point2D(x, y);\n \ndef P3 =\n patterns {\n { p1: { x: number as x, y: number as y } },\n { p1: [ number as x, number as y ] },\n { p1x: number as x, p1y: number as y }\n } |> Point2D(x, y);\n \ndef P4 =\n patterns {\n { p1: { x: number as x, y: number as y } },\n { p1: [ number as x, number as y ] },\n { p1x: number as x, p1y: number as y }\n } |> Point2D(x, y);\n\n \ndef Arc = {\n let radii = Radii,\n\n "center": Center,\n "radiusX": radii.rx,\n "radiusY": radii.ry,\n "startRadians": =~ number,\n "endRadians": =~ number\n};\n\ndef ArcArgs = {\n let elements =\n patterns {\n [ number as centerX, number as centerY, number as radiusX, number as radiusY, number as startRadians, number as endRadians ],\n [ { x: number as centerX, y: number as centerY }, number as radiusX, number as radiusY, number as startRadians, number as endRadians ]\n } |> { "centerX", "centerY", "radiusX", "radiusY", "startRadians", "endRadians" },\n \n "center": Point2D(elements.centerX, elements.centerY),\n "radiusX": elements.radiusX,\n "radiusY": elements.radiusY,\n "startRadians": elements.startRadians,\n "endRadians": elements.endRadians\n};\n\ndef Bezier2 = {\n "p1": P1,\n "p2": P2,\n "p3": P3\n};\n\ndef Bezier2Args = {\n let elements =\n patterns {\n [ number as p1x, number as p1y, number as p2x, number as p2y, number as p3x, number as p3y ],\n [ { x: number as p1x, y: number as p1y }, { x: number as p2x, y: number as p2y }, { x: number as p3x, y: number as p3y }]\n } |> { "p1x", "p1y", "p2x", "p2y", "p3x", "p3y" },\n \n "p1": Point2D(elements.p1x, elements.p1y),\n "p2": Point2D(elements.p2x, elements.p2y),\n "p3": Point2D(elements.p3x, elements.p3y)\n};\n\ndef Bezier3 = {\n "p1": P1,\n "p2": P2,\n "p3": P3,\n "p4": P4\n};\n\ndef Bezier3Args = {\n let elements =\n patterns {\n [ number as p1x, number as p1y, number as p2x, number as p2y, number as p3x, number as p3y, number as p4x, number as p4y ],\n [ { x: number as p1x, y: number as p1y }, { x: number as p2x, y: number as p2y }, { x: number as p3x, y: number as p3y }, { x: number as p4x, y: number as p4y }]\n } |> { "p1x", "p1y", "p2x", "p2y", "p3x", "p3y", "p4x", "p4y" },\n \n "p1": Point2D(elements.p1x, elements.p1y),\n "p2": Point2D(elements.p2x, elements.p2y),\n "p3": Point2D(elements.p3x, elements.p3y),\n "p4": Point2D(elements.p4x, elements.p4y)\n};\n\ndef Circle = {\n "center": Center,\n "radius":\n patterns {\n { r: number as radius},\n { radius: number as radius }\n } |> radius\n};\n\ndef CircleArgs = {\n let elements =\n patterns {\n [ number as centerX, number as centerY, number as radius ],\n [ { x: number as centerX, y: number as centerY }, number as radius ]\n } |> { "centerX", "centerY", "radius" },\n \n "center": Point2D(elements.centerX, elements.centerY),\n "radius": elements.radius\n};\n\ndef Ellipse = {\n let radii = Radii,\n\n "center": Center,\n "radiusX": radii.rx,\n "radiusY": radii.ry\n};\n\ndef EllipseArgs = {\n let elements =\n patterns {\n [ number as centerX, number as centerY, number as radiusX, number as radiusY ],\n [ { x: number as centerX, y: number as centerY }, number as radiusX, number as radiusY ]\n } |> { "centerX", "centerY", "radiusX", "radiusY" },\n \n "center": Point2D(elements.centerX, elements.centerY),\n "radiusX": elements.radiusX,\n "radiusY": elements.radiusY\n};\n\ndef Line = {\n "p1": P1,\n "p2": P2\n};\n\ndef LineArgs = {\n let elements =\n patterns {\n [ number as p1x, number as p1y, number as p2x, number as p2y ],\n [ { x: number as p1x, y: number as p1y }, { x: number as p2x, y: number as p2y } ]\n } |> { "p1x", "p1y", "p2x", "p2y" },\n \n "p1": Point2D(elements.p1x, elements.p1y),\n "p2": Point2D(elements.p2x, elements.p2y)\n};\n\ndef Path = {\n "segments":\n =~ { d: string as data } |> PathData(data)\n};\n\ndef PathArgs = {\n "segments":\n =~ string as data |> PathData(data)\n};\n\ndef Polygon = {\n "points":\n sequences {\n =~ { points: [ (number, number); 0.. as coords ] }\n |> [ map(coords, Point2D(...$)) ],\n\n =~ { points: [ { x: number, y: number }; 0.. ] as points }\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef PolygonArgs = {\n "points":\n sequences {\n =~ [ (number, number); 0.. as coords ]\n |> [ map(coords, Point2D(...$)) ],\n\n =~ [ { x: number, y: number }; 0.. ] as points\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef Polyline = {\n "points":\n sequences {\n =~ { points: [ (number, number); 0.. as coords ] }\n |> [ map(coords, Point2D(...$)) ],\n\n =~ { points: [ { x: number, y: number }; 0.. ] as points }\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef PolylineArgs = {\n "points":\n sequences {\n =~ [ (number, number); 0.. as coords ]\n |> [ map(coords, Point2D(...$)) ],\n\n =~ [ { x: number, y: number }; 0.. ] as points\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef Rectangle = {\n let topLeft =\n patterns {\n { topLeft: { x: number as x, y: number as y } },\n { topLeft: [ number as x, number as y ] },\n { x: number as x, y: number as y },\n { top: number as x, left: number as y }\n } |> { "x", "y" },\n\n "topLeft":\n Point2D(topLeft.x, topLeft.y),\n\n "bottomRight":\n sequences {\n patterns {\n { bottomRight: { x: number as x, y: number as y } },\n { bottomRight: [ number as x, number as y ] }\n } |> Point2D(x, y),\n patterns {\n { w: number as w, h: number as h },\n { width: number as w, height: number as h },\n { size: { x: number as w, y: number as h } },\n { size: [ number as w, number as h ] }\n } |> Point2D(topLeft.x + w, topLeft.y + h)\n },\n\n "rx":\n sequences {\n =~ { rx: number as rx } |> rx,\n =~ any |> 0\n },\n "ry":\n sequences {\n =~ { ry: number as ry } |> ry,\n =~ any |> 0\n }\n};\n\ndef RectangleArgs = {\n let elements =\n patterns {\n [ number as x, number as y, number as width, number as height ],\n [ number as x, number as y, number as width, number as height, number as rx, number as ry ],\n [ { x: number as x, y: number as y }, { x: number as width, y: number as height } ],\n [ { x: number as x, y: number as y }, { x: number as width, y: number as height }, { rx: number as rx, ry: number as ry } ],\n [ { x: number as x, y: number as y }, { x: number as width, y: number as height }, { radiusX: number as rx, radiusY: number as ry } ]\n } |> { "x", "y", "width", "height", "rx", "ry" },\n\n "topLeft": Point2D(elements.x, elements.y),\n "bottomRight": Point2D(elements.x + elements.width, elements.y + elements.height),\n "rx": elements.rx,\n "ry": elements.ry\n}\n'),S.addFunction("Point2D",function(e,t){return new o(e,t)}),S.addFunction("PathData",function(e){var t=new g,n=new E(A);return t.setHandler(n),t.parseData(e),n.shapes});var I=2*Math.PI,R=new u(1,0);function T(e){return null==e}function _(e){var t=e%I;return t<0?t+I:t}function X(e,t,n,r,s,a){if(0===e.points.length)return e;var i=new Y("No Intersection"),o=_(s),l=_(a);l0&&(i.status="Intersection"),i}function N(e){var t=e.slice();return t.push(e[0]),t}var Y=function(){function e(t){n(this,e),this.init(t)}return s(e,[{key:"init",value:function(e){this.status=e,this.points=[]}},{key:"appendPoint",value:function(e){this.points.push(e)}},{key:"appendPoints",value:function(e){this.points=this.points.concat(e)}}],[{key:"intersect",value:function(t,n){var r;if(T(t)||T(n))r=new e("No Intersection");else if("Path"===t.name)r=e.intersectPathShape(t,n);else if("Path"===n.name)r=e.intersectPathShape(n,t);else if("Arc"===t.name)r=e.intersectArcShape(t,n);else if("Arc"===n.name)r=e.intersectArcShape(n,t);else{var s,a;if(t.name0&&(r.status="Intersection"),r}},{key:"intersectArcShape",value:function(t,n){var r=a(t.args,5),s=r[0],i=r[1],o=r[2],u=r[3],l=r[4],c=new A(A.ELLIPSE,[s,i,o]);return X(e.intersect(c,n),s,0,0,u,l)}},{key:"intersectBezier2Bezier2",value:function(t,n,r,s,a,i){var u,l,c=new e("No Intersection");u=n.multiply(-2);var y=t.add(u.add(r));u=t.multiply(-2),l=n.multiply(2);var p=u.add(l),f=new o(t.x,t.y);u=a.multiply(-2);var x=s.add(u.add(i));u=s.multiply(-2),l=a.multiply(2);var v=u.add(l),m=new o(s.x,s.y);u=y.x*p.y-p.x*y.y,l=x.x*p.y-p.x*x.y;var d=v.x*p.y-p.x*v.y,b=p.x*(f.y-m.y)+p.y*(-f.x+m.x),g=x.x*y.y-y.x*x.y,w=v.x*y.y-y.x*v.y,k=y.x*(f.y-m.y)+y.y*(-f.x+m.x),E=new h(-g*g,-2*g*w,u*l-w*w-2*g*k,u*d-2*w*k,u*b-k*k).getRoots(),P=!0,A=!1,M=void 0;try{for(var S,I=E[Symbol.iterator]();!(P=(S=I.next()).done);P=!0){var R=S.value;if(0<=R&&R<=1){var T=new h(y.x,p.x,f.x-m.x-R*v.x-R*R*x.x);T.simplifyEquals();var _=T.getRoots(),X=new h(y.y,p.y,f.y-m.y-R*v.y-R*R*x.y);X.simplifyEquals();var N=X.getRoots();if(_.length>0&&N.length>0){var Y=!0,C=!1,L=void 0;try{e:for(var $,D=_[Symbol.iterator]();!(Y=($=D.next()).done);Y=!0){var z=$.value;if(0<=z&&z<=1)for(var B=0;B0&&(c.status="Intersection"),c}},{key:"intersectBezier2Bezier3",value:function(t,n,r,s,a,i,u){var l,c,y,p,f=new e("No Intersection");l=n.multiply(-2);var x=t.add(l.add(r));l=t.multiply(-2),c=n.multiply(2);var v=l.add(c),m=new o(t.x,t.y);l=s.multiply(-1),c=a.multiply(3),y=i.multiply(-3),p=l.add(c.add(y.add(u)));var d=new o(p.x,p.y);l=s.multiply(3),c=a.multiply(-6),y=i.multiply(3),p=l.add(c.add(y));var b=new o(p.x,p.y);l=s.multiply(-3),c=a.multiply(3),y=l.add(c);var g=new o(y.x,y.y),w=new o(s.x,s.y),k=m.x*m.x,E=m.y*m.y,P=v.x*v.x,A=v.y*v.y,M=x.x*x.x,S=x.y*x.y,I=w.x*w.x,R=w.y*w.y,T=g.x*g.x,_=g.y*g.y,X=b.x*b.x,N=b.y*b.y,Y=d.x*d.x,C=d.y*d.y,L=new h(-2*x.x*x.y*d.x*d.y+M*C+S*Y,-2*x.x*x.y*b.x*d.y-2*x.x*x.y*b.y*d.x+2*S*b.x*d.x+2*M*b.y*d.y,-2*x.x*g.x*x.y*d.y-2*x.x*x.y*g.y*d.x-2*x.x*x.y*b.x*b.y+2*g.x*S*d.x+S*X+M*(2*g.y*d.y+N),2*m.x*x.x*x.y*d.y+2*m.y*x.x*x.y*d.x+v.x*v.y*x.x*d.y+v.x*v.y*x.y*d.x-2*w.x*x.x*x.y*d.y-2*x.x*w.y*x.y*d.x-2*x.x*g.x*x.y*b.y-2*x.x*x.y*g.y*b.x-2*m.x*S*d.x-2*m.y*M*d.y+2*w.x*S*d.x+2*g.x*S*b.x-A*x.x*d.x-P*x.y*d.y+M*(2*w.y*d.y+2*g.y*b.y),2*m.x*x.x*x.y*b.y+2*m.y*x.x*x.y*b.x+v.x*v.y*x.x*b.y+v.x*v.y*x.y*b.x-2*w.x*x.x*x.y*b.y-2*x.x*w.y*x.y*b.x-2*x.x*g.x*x.y*g.y-2*m.x*S*b.x-2*m.y*M*b.y+2*w.x*S*b.x-A*x.x*b.x-P*x.y*b.y+T*S+M*(2*w.y*b.y+_),2*m.x*x.x*x.y*g.y+2*m.y*x.x*g.x*x.y+v.x*v.y*x.x*g.y+v.x*v.y*g.x*x.y-2*w.x*x.x*x.y*g.y-2*x.x*w.y*g.x*x.y-2*m.x*g.x*S-2*m.y*M*g.y+2*w.x*g.x*S-A*x.x*g.x-P*x.y*g.y+2*M*w.y*g.y,-2*m.x*m.y*x.x*x.y-m.x*v.x*v.y*x.y-m.y*v.x*v.y*x.x+2*m.x*x.x*w.y*x.y+2*m.y*w.x*x.x*x.y+v.x*w.x*v.y*x.y+v.x*v.y*x.x*w.y-2*w.x*x.x*w.y*x.y-2*m.x*w.x*S+m.x*A*x.x+m.y*P*x.y-2*m.y*M*w.y-w.x*A*x.x-P*w.y*x.y+k*S+E*M+I*S+M*R).getRootsInInterval(0,1),$=!0,D=!1,z=void 0;try{for(var B,O=L[Symbol.iterator]();!($=(B=O.next()).done);$=!0){var q=B.value,j=new h(x.x,v.x,m.x-w.x-q*g.x-q*q*b.x-q*q*q*d.x).getRoots(),U=new h(x.y,v.y,m.y-w.y-q*g.y-q*q*b.y-q*q*q*d.y).getRoots();if(j.length>0&&U.length>0){var V=!0,F=!1,G=void 0;try{e:for(var Q,H=j[Symbol.iterator]();!(V=(Q=H.next()).done);V=!0){var Z=Q.value;if(0<=Z&&Z<=1)for(var J=0;J0&&(f.status="Intersection"),f}},{key:"intersectBezier2Circle",value:function(t,n,r,s,a){return e.intersectBezier2Ellipse(t,n,r,s,a,a)}},{key:"intersectBezier2Ellipse",value:function(t,n,r,s,a,i){var u,l=new e("No Intersection");u=n.multiply(-2);var c=t.add(u.add(r));u=t.multiply(-2);var y=n.multiply(2),p=u.add(y),f=new o(t.x,t.y),x=a*a,v=i*i,m=new h(v*c.x*c.x+x*c.y*c.y,2*(v*c.x*p.x+x*c.y*p.y),v*(2*c.x*f.x+p.x*p.x)+x*(2*c.y*f.y+p.y*p.y)-2*(v*s.x*c.x+x*s.y*c.y),2*(v*p.x*(f.x-s.x)+x*p.y*(f.y-s.y)),v*(f.x*f.x+s.x*s.x)+x*(f.y*f.y+s.y*s.y)-2*(v*s.x*f.x+x*s.y*f.y)-x*v).getRoots(),d=!0,b=!1,g=void 0;try{for(var w,k=m[Symbol.iterator]();!(d=(w=k.next()).done);d=!0){var E=w.value;0<=E&&E<=1&&l.points.push(c.multiply(E*E).add(p.multiply(E).add(f)))}}catch(e){b=!0,g=e}finally{try{d||null==k.return||k.return()}finally{if(b)throw g}}return l.points.length>0&&(l.status="Intersection"),l}},{key:"intersectBezier2Line",value:function(t,n,r,s,a){var i,l=s.min(a),c=s.max(a),y=new e("No Intersection");i=n.multiply(-2);var p=t.add(i.add(r));i=t.multiply(-2);var f=n.multiply(2),x=i.add(f),v=new o(t.x,t.y),m=new u(s.y-a.y,a.x-s.x),d=s.x*a.y-a.x*s.y,b=new h(m.dot(p),m.dot(x),m.dot(v)+d).getRoots(),g=!0,w=!1,k=void 0;try{for(var E,P=b[Symbol.iterator]();!(g=(E=P.next()).done);g=!0){var A=E.value;if(0<=A&&A<=1){var M=t.lerp(n,A),S=n.lerp(r,A),I=M.lerp(S,A);s.x===a.x?l.y<=I.y&&I.y<=c.y&&(y.status="Intersection",y.appendPoint(I)):s.y===a.y?l.x<=I.x&&I.x<=c.x&&(y.status="Intersection",y.appendPoint(I)):l.x<=I.x&&I.x<=c.x&&l.y<=I.y&&I.y<=c.y&&(y.status="Intersection",y.appendPoint(I))}}}catch(e){w=!0,k=e}finally{try{g||null==P.return||P.return()}finally{if(w)throw k}}return y}},{key:"intersectBezier2Polygon",value:function(t,n,r,s){return e.intersectBezier2Polyline(t,n,r,N(s))}},{key:"intersectBezier2Polyline",value:function(t,n,r,s){for(var a=new e("No Intersection"),i=s.length,o=0;o0&&(a.status="Intersection"),a}},{key:"intersectBezier2Rectangle",value:function(t,n,r,s,a){var i=s.min(a),u=s.max(a),l=new o(u.x,i.y),c=new o(i.x,u.y),h=e.intersectBezier2Line(t,n,r,i,l),y=e.intersectBezier2Line(t,n,r,l,u),p=e.intersectBezier2Line(t,n,r,u,c),f=e.intersectBezier2Line(t,n,r,c,i),x=new e("No Intersection");return x.appendPoints(h.points),x.appendPoints(y.points),x.appendPoints(p.points),x.appendPoints(f.points),x.points.length>0&&(x.status="Intersection"),x}},{key:"intersectBezier3Bezier3",value:function(t,n,r,s,a,i,u,l){var c,y,p,f,x=new e("No Intersection");c=t.multiply(-1),y=n.multiply(3),p=r.multiply(-3),f=c.add(y.add(p.add(s)));var v=new o(f.x,f.y);c=t.multiply(3),y=n.multiply(-6),p=r.multiply(3),f=c.add(y.add(p));var m=new o(f.x,f.y);c=t.multiply(-3),y=n.multiply(3),p=c.add(y);var d=new o(p.x,p.y),b=new o(t.x,t.y);c=a.multiply(-1),y=i.multiply(3),p=u.multiply(-3),f=c.add(y.add(p.add(l)));var g=new o(f.x,f.y);c=a.multiply(3),y=i.multiply(-6),p=u.multiply(3),f=c.add(y.add(p));var w=new o(f.x,f.y);c=a.multiply(-3),y=i.multiply(3),p=c.add(y);var k=new o(p.x,p.y),E=new o(a.x,a.y);c=v.x*m.y-m.x*v.y,y=v.x*d.y-d.x*v.y;var P=v.x*b.y-b.x*v.y+E.x*v.y-v.x*E.y,A=k.x*v.y-v.x*k.y,M=w.x*v.y-v.x*w.y,S=g.x*v.y-v.x*g.y;f=v.x*d.y-d.x*v.y;var I=v.x*b.y+m.x*d.y-d.x*m.y-b.x*v.y+E.x*v.y-v.x*E.y,R=k.x*v.y-v.x*k.y,T=w.x*v.y-v.x*w.y,_=g.x*v.y-v.x*g.y,X=m.x*b.y-b.x*m.y+E.x*m.y-m.x*E.y,N=k.x*m.y-m.x*k.y,Y=w.x*m.y-m.x*w.y,C=g.x*m.y-m.x*g.y,L=v.x*b.y-b.x*v.y+E.x*v.y-v.x*E.y,$=k.x*v.y-v.x*k.y,D=w.x*v.y-v.x*w.y,z=g.x*v.y-v.x*g.y,B=m.x*b.y-b.x*m.y+E.x*m.y-m.x*E.y,O=k.x*m.y-m.x*k.y,q=w.x*m.y-m.x*w.y,j=g.x*m.y-m.x*g.y,U=d.x*b.y-b.x*d.y+E.x*d.y-d.x*E.y,V=k.x*d.y-d.x*k.y,F=w.x*d.y-d.x*w.y,G=g.x*d.y-d.x*g.y,Q=new h(-S*_*z,-S*_*D-S*T*z-M*_*z,-S*_*$-S*T*D-M*_*D-S*R*z-M*T*z-A*_*z,-S*_*L-S*T*$-M*_*$-S*R*D-M*T*D-A*_*D-S*I*z-M*R*z-A*T*z-P*_*z+y*C*z+S*f*j-c*C*j+c*_*G,-S*T*L-M*_*L-S*R*$-M*T*$-A*_*$-S*I*D-M*R*D-A*T*D-P*_*D+y*C*D-M*I*z-A*R*z-P*T*z+y*Y*z+S*f*q-c*C*q+M*f*j-c*Y*j+c*_*F+c*T*G,-S*R*L-M*T*L-A*_*L-S*I*$-M*R*$-A*T*$-P*_*$+y*C*$-M*I*D-A*R*D-P*T*D+y*Y*D-A*I*z-P*R*z+y*N*z+S*f*O-c*C*O+M*f*q-c*Y*q+A*f*j-c*N*j+c*_*V+c*T*F+c*R*G,-S*I*L-M*R*L-A*T*L-P*_*L+y*C*L-M*I*$-A*R*$-P*T*$+y*Y*$-A*I*D-P*R*D+y*N*D-P*I*z+y*X*z+S*f*B-c*C*B+M*f*O-c*Y*O+A*f*q-c*N*q+P*f*j-c*X*j+c*_*U+c*T*V+c*R*F-y*f*G+c*I*G,-M*I*L-A*R*L-P*T*L+y*Y*L-A*I*$-P*R*$+y*N*$-P*I*D+y*X*D+M*f*B-c*Y*B+A*f*O-c*N*O+P*f*q-c*X*q+c*T*U+c*R*V-y*f*F+c*I*F,-A*I*L-P*R*L+y*N*L-P*I*$+y*X*$+A*f*B-c*N*B+P*f*O-c*X*O+c*R*U-y*f*V+c*I*V,-P*I*L+y*X*L+P*f*B-c*X*B-y*f*U+c*I*U);Q.simplifyEquals();var H=Q.getRootsInInterval(0,1),Z=!0,J=!1,W=void 0;try{for(var K,ee=H[Symbol.iterator]();!(Z=(K=ee.next()).done);Z=!0){var te=K.value,ne=new h(v.x,m.x,d.x,b.x-E.x-te*k.x-te*te*w.x-te*te*te*g.x);ne.simplifyEquals();var re=ne.getRoots(),se=new h(v.y,m.y,d.y,b.y-E.y-te*k.y-te*te*w.y-te*te*te*g.y);se.simplifyEquals();var ae=se.getRoots();if(re.length>0&&ae.length>0){var ie=!0,oe=!1,ue=void 0;try{e:for(var le,ce=re[Symbol.iterator]();!(ie=(le=ce.next()).done);ie=!0){var he=le.value;if(0<=he&&he<=1)for(var ye=0;ye0&&(x.status="Intersection"),x}},{key:"intersectBezier3Circle",value:function(t,n,r,s,a,i){return e.intersectBezier3Ellipse(t,n,r,s,a,i,i)}},{key:"intersectBezier3Ellipse",value:function(t,n,r,s,a,i,u){var l,c,y,p,f=new e("No Intersection");l=t.multiply(-1),c=n.multiply(3),y=r.multiply(-3),p=l.add(c.add(y.add(s)));var x=new o(p.x,p.y);l=t.multiply(3),c=n.multiply(-6),y=r.multiply(3),p=l.add(c.add(y));var v=new o(p.x,p.y);l=t.multiply(-3),c=n.multiply(3),y=l.add(c);var m=new o(y.x,y.y),d=new o(t.x,t.y),b=i*i,g=u*u,w=new h(x.x*x.x*g+x.y*x.y*b,2*(x.x*v.x*g+x.y*v.y*b),2*(x.x*m.x*g+x.y*m.y*b)+v.x*v.x*g+v.y*v.y*b,2*x.x*g*(d.x-a.x)+2*x.y*b*(d.y-a.y)+2*(v.x*m.x*g+v.y*m.y*b),2*v.x*g*(d.x-a.x)+2*v.y*b*(d.y-a.y)+m.x*m.x*g+m.y*m.y*b,2*m.x*g*(d.x-a.x)+2*m.y*b*(d.y-a.y),d.x*d.x*g-2*d.y*a.y*b-2*d.x*a.x*g+d.y*d.y*b+a.x*a.x*g+a.y*a.y*b-b*g).getRootsInInterval(0,1),k=!0,E=!1,P=void 0;try{for(var A,M=w[Symbol.iterator]();!(k=(A=M.next()).done);k=!0){var S=A.value;f.points.push(x.multiply(S*S*S).add(v.multiply(S*S).add(m.multiply(S).add(d))))}}catch(e){E=!0,P=e}finally{try{k||null==M.return||M.return()}finally{if(E)throw P}}return f.points.length>0&&(f.status="Intersection"),f}},{key:"intersectBezier3Line",value:function(t,n,r,s,a,i){var o,l,c,y,p=a.min(i),f=a.max(i),x=new e("No Intersection");o=t.multiply(-1),l=n.multiply(3),c=r.multiply(-3),y=o.add(l.add(c.add(s)));var v=new u(y.x,y.y);o=t.multiply(3),l=n.multiply(-6),c=r.multiply(3),y=o.add(l.add(c));var m=new u(y.x,y.y);o=t.multiply(-3),l=n.multiply(3),c=o.add(l);var d=new u(c.x,c.y),b=new u(t.x,t.y),g=new u(a.y-i.y,i.x-a.x),w=a.x*i.y-i.x*a.y,k=new h(g.dot(v),g.dot(m),g.dot(d),g.dot(b)+w).getRoots(),E=!0,P=!1,A=void 0;try{for(var M,S=k[Symbol.iterator]();!(E=(M=S.next()).done);E=!0){var I=M.value;if(0<=I&&I<=1){var R=t.lerp(n,I),T=n.lerp(r,I),_=r.lerp(s,I),X=R.lerp(T,I),N=T.lerp(_,I),Y=X.lerp(N,I);a.x===i.x?p.y<=Y.y&&Y.y<=f.y&&(x.status="Intersection",x.appendPoint(Y)):a.y===i.y?p.x<=Y.x&&Y.x<=f.x&&(x.status="Intersection",x.appendPoint(Y)):p.x<=Y.x&&Y.x<=f.x&&p.y<=Y.y&&Y.y<=f.y&&(x.status="Intersection",x.appendPoint(Y))}}}catch(e){P=!0,A=e}finally{try{E||null==S.return||S.return()}finally{if(P)throw A}}return x}},{key:"intersectBezier3Polygon",value:function(t,n,r,s,a){return e.intersectBezier3Polyline(t,n,r,s,N(a))}},{key:"intersectBezier3Polyline",value:function(t,n,r,s,a){for(var i=new e("No Intersection"),o=a.length,u=0;u0&&(i.status="Intersection"),i}},{key:"intersectBezier3Rectangle",value:function(t,n,r,s,a,i){var u=a.min(i),l=a.max(i),c=new o(l.x,u.y),h=new o(u.x,l.y),y=e.intersectBezier3Line(t,n,r,s,u,c),p=e.intersectBezier3Line(t,n,r,s,c,l),f=e.intersectBezier3Line(t,n,r,s,l,h),x=e.intersectBezier3Line(t,n,r,s,h,u),v=new e("No Intersection");return v.appendPoints(y.points),v.appendPoints(p.points),v.appendPoints(f.points),v.appendPoints(x.points),v.points.length>0&&(v.status="Intersection"),v}},{key:"intersectCircleCircle",value:function(t,n,r,s){var a,i=n+s,u=Math.abs(n-s),l=t.distanceFrom(r);if(l>i)a=new e("Outside");else if(l1)&&(h<0||h>1)?a=new e(c<0&&h<0||c>1&&h>1?"Outside":"Inside"):(a=new e("Intersection"),0<=c&&c<=1&&a.points.push(r.lerp(s,c)),0<=h&&h<=1&&a.points.push(r.lerp(s,h)))}return a}},{key:"intersectCirclePolygon",value:function(t,n,r){return e.intersectCirclePolyline(t,n,N(r))}},{key:"intersectCirclePolyline",value:function(t,n,r){for(var s,a=new e("No Intersection"),i=r.length,o=0;o0?a.status="Intersection":a.status=s.status,a}},{key:"intersectCircleRectangle",value:function(t,n,r,s){var a=r.min(s),i=r.max(s),u=new o(i.x,a.y),l=new o(a.x,i.y),c=e.intersectCircleLine(t,n,a,u),h=e.intersectCircleLine(t,n,u,i),y=e.intersectCircleLine(t,n,i,l),p=e.intersectCircleLine(t,n,l,a),f=new e("No Intersection");return f.appendPoints(c.points),f.appendPoints(h.points),f.appendPoints(y.points),f.appendPoints(p.points),f.points.length>0?f.status="Intersection":f.status=c.status,f}},{key:"intersectEllipseEllipse",value:function(t,n,r,s,a,i){for(var u,l,c,y,p,f,x,v,m,d,b,g,w,k,E,P=[r*r,0,n*n,-2*r*r*t.x,-2*n*n*t.y,r*r*t.x*t.x+n*n*t.y*t.y-n*n*r*r],A=[i*i,0,a*a,-2*i*i*s.x,-2*a*a*s.y,i*i*s.x*s.x+a*a*s.y*s.y-a*a*i*i],M=(l=A,c=(u=P)[0]*l[1]-l[0]*u[1],y=u[0]*l[2]-l[0]*u[2],p=u[0]*l[3]-l[0]*u[3],f=u[0]*l[4]-l[0]*u[4],x=u[0]*l[5]-l[0]*u[5],v=u[1]*l[2]-l[1]*u[2],m=u[1]*l[4]-l[1]*u[4],d=u[1]*l[5]-l[1]*u[5],b=u[2]*l[3]-l[2]*u[3],g=u[3]*l[4]-l[3]*u[4],w=u[3]*l[5]-l[3]*u[5],new h(c*v-y*y,c*(E=m-b)+p*v-2*y*f,c*(k=d+g)+p*E-f*f-2*y*x,c*w+p*k-2*f*x,p*w-x*x)).getRoots(),S=.001*(P[0]*P[0]+2*P[1]*P[1]+P[2]*P[2]),I=.001*(A[0]*A[0]+2*A[1]*A[1]+A[2]*A[2]),R=new e("No Intersection"),T=0;T0&&(R.status="Intersection"),R}},{key:"intersectEllipseLine",value:function(t,n,r,s,a){var i,o=new u(s.x,s.y),l=u.fromPoints(s,a),c=new u(t.x,t.y),h=o.subtract(c),y=new u(l.x/(n*n),l.y/(r*r)),p=new u(h.x/(n*n),h.y/(r*r)),f=l.dot(y),x=l.dot(p),v=x*x-f*(t=h.dot(p)-1);if(v<0)i=new e("Outside");else if(v>0){var m=Math.sqrt(v),d=(-x-m)/f,b=(-x+m)/f;(d<0||11&&b>1?"Outside":"Inside"):(i=new e("Intersection"),0<=d&&d<=1&&i.appendPoint(s.lerp(a,d)),0<=b&&b<=1&&i.appendPoint(s.lerp(a,b)))}else{var g=-x/f;0<=g&&g<=1?(i=new e("Intersection")).appendPoint(s.lerp(a,g)):i=new e("Outside")}return i}},{key:"intersectEllipsePolygon",value:function(t,n,r,s){return e.intersectEllipsePolyline(t,n,r,N(s))}},{key:"intersectEllipsePolyline",value:function(t,n,r,s){for(var a=new e("No Intersection"),i=s.length,o=0;o0&&(a.status="Intersection"),a}},{key:"intersectEllipseRectangle",value:function(t,n,r,s,a){var i=s.min(a),u=s.max(a),l=new o(u.x,i.y),c=new o(i.x,u.y),h=e.intersectEllipseLine(t,n,r,i,l),y=e.intersectEllipseLine(t,n,r,l,u),p=e.intersectEllipseLine(t,n,r,u,c),f=e.intersectEllipseLine(t,n,r,c,i),x=new e("No Intersection");return x.appendPoints(h.points),x.appendPoints(y.points),x.appendPoints(p.points),x.appendPoints(f.points),x.points.length>0&&(x.status="Intersection"),x}},{key:"intersectLineLine",value:function(t,n,r,s){var a,i=(s.x-r.x)*(t.y-r.y)-(s.y-r.y)*(t.x-r.x),u=(n.x-t.x)*(t.y-r.y)-(n.y-t.y)*(t.x-r.x),l=(s.y-r.y)*(n.x-t.x)-(s.x-r.x)*(n.y-t.y);if(0!==l){var c=i/l,h=u/l;0<=c&&c<=1&&0<=h&&h<=1?(a=new e("Intersection")).points.push(new o(t.x+c*(n.x-t.x),t.y+c*(n.y-t.y))):a=new e("No Intersection")}else a=new e(0===i||0===u?"Coincident":"Parallel");return a}},{key:"intersectLinePolygon",value:function(t,n,r){return e.intersectLinePolyline(t,n,N(r))}},{key:"intersectLinePolyline",value:function(t,n,r){for(var s=new e("No Intersection"),a=r.length,i=0;i0&&(s.status="Intersection"),s}},{key:"intersectLineRectangle",value:function(t,n,r,s){var a=r.min(s),i=r.max(s),u=new o(i.x,a.y),l=new o(a.x,i.y),c=e.intersectLineLine(a,u,t,n),h=e.intersectLineLine(u,i,t,n),y=e.intersectLineLine(i,l,t,n),p=e.intersectLineLine(l,a,t,n),f=new e("No Intersection");return f.appendPoints(c.points),f.appendPoints(h.points),f.appendPoints(y.points),f.appendPoints(p.points),f.points.length>0&&(f.status="Intersection"),f}},{key:"intersectPolygonPolygon",value:function(t,n){return e.intersectPolylinePolyline(N(t),N(n))}},{key:"intersectPolygonPolyline",value:function(t,n){return e.intersectPolylinePolyline(N(t),n)}},{key:"intersectPolygonRectangle",value:function(t,n,r){return e.intersectPolylineRectangle(N(t),n,r)}},{key:"intersectPolylinePolyline",value:function(t,n){for(var r=new e("No Intersection"),s=t.length,a=0;a0&&(r.status="Intersection"),r}},{key:"intersectPolylineRectangle",value:function(t,n,r){var s=n.min(r),a=n.max(r),i=new o(a.x,s.y),u=new o(s.x,a.y),l=e.intersectLinePolyline(s,i,t),c=e.intersectLinePolyline(i,a,t),h=e.intersectLinePolyline(a,u,t),y=e.intersectLinePolyline(u,s,t),p=new e("No Intersection");return p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.appendPoints(y.points),p.points.length>0&&(p.status="Intersection"),p}},{key:"intersectRectangleRectangle",value:function(t,n,r,s){var a=t.min(n),i=t.max(n),u=new o(i.x,a.y),l=new o(a.x,i.y),c=e.intersectLineRectangle(a,u,r,s),h=e.intersectLineRectangle(u,i,r,s),y=e.intersectLineRectangle(i,l,r,s),p=e.intersectLineRectangle(l,a,r,s),f=new e("No Intersection");return f.appendPoints(c.points),f.appendPoints(h.points),f.appendPoints(y.points),f.appendPoints(p.points),f.points.length>0&&(f.status="Intersection"),f}},{key:"intersectRayRay",value:function(t,n,r,s){var a,i=(s.x-r.x)*(t.y-r.y)-(s.y-r.y)*(t.x-r.x),u=(n.x-t.x)*(t.y-r.y)-(n.y-t.y)*(t.x-r.x),l=(s.y-r.y)*(n.x-t.x)-(s.x-r.x)*(n.y-t.y);if(0!==l){var c=i/l;(a=new e("Intersection")).points.push(new o(t.x+c*(n.x-t.x),t.y+c*(n.y-t.y)))}else a=new e(0===i||0===u?"Coincident":"Parallel");return a}}]),e}(),C=function(){function e(){n(this,e)}return s(e,null,[{key:"arc",value:function(e,t,n,r,s,a){return A.arc.apply(A,arguments)}},{key:"quadraticBezier",value:function(e,t,n,r,s,a){return A.quadraticBezier.apply(A,arguments)}},{key:"cubicBezier",value:function(e,t,n,r,s,a,i,o){return A.cubicBezier.apply(A,arguments)}},{key:"circle",value:function(e,t,n){return A.circle.apply(A,arguments)}},{key:"ellipse",value:function(e,t,n,r){return A.ellipse.apply(A,arguments)}},{key:"line",value:function(e,t,n,r){return A.line.apply(A,arguments)}},{key:"path",value:function(e){return A.path.apply(A,arguments)}},{key:"polygon",value:function(e){return A.polygon.apply(A,arguments)}},{key:"polyline",value:function(e){return A.polyline.apply(A,arguments)}},{key:"rectangle",value:function(e,t,n,r){return A.rectangle.apply(A,arguments)}}]),e}(),L=function(){function e(){n(this,e)}return s(e,null,[{key:"arc",value:function(e,t,n,r,s){return A.arc.apply(A,arguments)}},{key:"quadraticBezier",value:function(e,t,n){return A.quadraticBezier.apply(A,arguments)}},{key:"cubicBezier",value:function(e,t,n,r){return A.cubicBezier.apply(A,arguments)}},{key:"circle",value:function(e,t){return A.circle.apply(A,arguments)}},{key:"ellipse",value:function(e,t,n){return A.ellipse.apply(A,arguments)}},{key:"line",value:function(e,t){return A.line.apply(A,arguments)}},{key:"path",value:function(e){return A.path.apply(A,arguments)}},{key:"polygon",value:function(e){return A.polygon.apply(A,arguments)}},{key:"polyline",value:function(e){return A.polyline.apply(A,arguments)}},{key:"rectangle",value:function(e,t){return A.rectangle.apply(A,arguments)}}]),e}(),$=function(){function e(){n(this,e)}return s(e,null,[{key:"circle",value:function(e){if(e instanceof SVGCircleElement==!1)throw new TypeError("Expected SVGCircleElement, but found ".concat(e));var t=new o(e.cx.baseVal.value,e.cy.baseVal.value),n=e.r.baseVal.value;return A.circle(t,n)}},{key:"ellipse",value:function(e){if(e instanceof SVGEllipseElement==!1)throw new TypeError("Expected SVGEllipseElement, but found ".concat(e));var t=new o(e.cx.baseVal.value,e.cy.baseVal.value),n=e.rx.baseVal.value,r=e.ry.baseVal.value;return A.ellipse(t,n,r)}},{key:"line",value:function(e){if(e instanceof SVGLineElement==!1)throw new TypeError("Expected SVGLineElement, but found ".concat(e));var t=new o(e.x1.baseVal.value,e.y1.baseVal.value),n=new o(e.x2.baseVal.value,e.y2.baseVal.value);return A.line(t,n)}},{key:"path",value:function(e){if(e instanceof SVGPathElement==!1)throw new TypeError("Expected SVGPathElement, but found ".concat(e));var t=e.getAttributeNS(null,"d");return A.path(t)}},{key:"polygon",value:function(e){if(e instanceof SVGPolygonElement==!1)throw new TypeError("Expected SVGPolygonElement, but found ".concat(e));for(var t=[],n=0;n0&&void 0!==arguments[0]?arguments[0]:0,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;n(this,e),this.x=t,this.y=r}return a(e,[{key:"clone",value:function(){return new this.constructor(this.x,this.y)}},{key:"add",value:function(e){return new this.constructor(this.x+e.x,this.y+e.y)}},{key:"subtract",value:function(e){return new this.constructor(this.x-e.x,this.y-e.y)}},{key:"multiply",value:function(e){return new this.constructor(this.x*e,this.y*e)}},{key:"divide",value:function(e){return new this.constructor(this.x/e,this.y/e)}},{key:"equals",value:function(e){return this.x===e.x&&this.y===e.y}},{key:"precisionEquals",value:function(e,t){return Math.abs(this.x-e.x)0&&void 0!==arguments[0]?arguments[0]:0,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;n(this,e),this.x=t,this.y=r}return a(e,[{key:"length",value:function(){return Math.sqrt(this.x*this.x+this.y*this.y)}},{key:"magnitude",value:function(){return this.x*this.x+this.y*this.y}},{key:"dot",value:function(e){return this.x*e.x+this.y*e.y}},{key:"cross",value:function(e){return this.x*e.y-this.y*e.x}},{key:"determinant",value:function(e){return this.x*e.y-this.y*e.x}},{key:"unit",value:function(){return this.divide(this.length())}},{key:"add",value:function(e){return new this.constructor(this.x+e.x,this.y+e.y)}},{key:"subtract",value:function(e){return new this.constructor(this.x-e.x,this.y-e.y)}},{key:"multiply",value:function(e){return new this.constructor(this.x*e,this.y*e)}},{key:"divide",value:function(e){return new this.constructor(this.x/e,this.y/e)}},{key:"angleBetween",value:function(e){var t=this.dot(e)/(this.length()*e.length());t=Math.max(-1,Math.min(t,1));var n=Math.acos(t);return this.cross(e)<0?-n:n}},{key:"perp",value:function(){return new this.constructor(-this.y,this.x)}},{key:"perpendicular",value:function(e){return this.subtract(this.project(e))}},{key:"project",value:function(e){var t=this.dot(e)/e.dot(e);return e.multiply(t)}},{key:"transform",value:function(e){return new this.constructor(e.a*this.x+e.c*this.y,e.b*this.x+e.d*this.y)}},{key:"equals",value:function(e){return this.x===e.x&&this.y===e.y}},{key:"precisionEquals",value:function(e,t){return Math.abs(this.x-e.x)0&&void 0!==arguments[0]?arguments[0]:1,r=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0,a=arguments.length>2&&void 0!==arguments[2]?arguments[2]:0,s=arguments.length>3&&void 0!==arguments[3]?arguments[3]:1,i=arguments.length>4&&void 0!==arguments[4]?arguments[4]:0,o=arguments.length>5&&void 0!==arguments[5]?arguments[5]:0;n(this,e),this.a=t,this.b=r,this.c=a,this.d=s,this.e=i,this.f=o}return a(e,[{key:"multiply",value:function(e){return this.isIdentity()?e:e.isIdentity()?this:new this.constructor(this.a*e.a+this.c*e.b,this.b*e.a+this.d*e.b,this.a*e.c+this.c*e.d,this.b*e.c+this.d*e.d,this.a*e.e+this.c*e.f+this.e,this.b*e.e+this.d*e.f+this.f)}},{key:"inverse",value:function(){if(this.isIdentity())return this;var e=this.a*this.d-this.b*this.c;if(0===e)throw new Error("Matrix is not invertible");var t=1/e,n=this.f*this.c-this.e*this.d,r=this.e*this.b-this.f*this.a;return new this.constructor(this.d*t,-this.b*t,-this.c*t,this.a*t,n*t,r*t)}},{key:"translate",value:function(e,t){return new this.constructor(this.a,this.b,this.c,this.d,this.a*e+this.c*t+this.e,this.b*e+this.d*t+this.f)}},{key:"scale",value:function(e){return new this.constructor(this.a*e,this.b*e,this.c*e,this.d*e,this.e,this.f)}},{key:"scaleAt",value:function(e,t){var n=t.x-e*t.x,r=t.y-e*t.y;return new this.constructor(this.a*e,this.b*e,this.c*e,this.d*e,this.a*n+this.c*r+this.e,this.b*n+this.d*r+this.f)}},{key:"scaleNonUniform",value:function(e,t){return new this.constructor(this.a*e,this.b*e,this.c*t,this.d*t,this.e,this.f)}},{key:"scaleNonUniformAt",value:function(e,t,n){var r=n.x-e*n.x,a=n.y-t*n.y;return new this.constructor(this.a*e,this.b*e,this.c*t,this.d*t,this.a*r+this.c*a+this.e,this.b*r+this.d*a+this.f)}},{key:"rotate",value:function(e){var t=Math.cos(e),n=Math.sin(e);return new this.constructor(this.a*t+this.c*n,this.b*t+this.d*n,this.a*-n+this.c*t,this.b*-n+this.d*t,this.e,this.f)}},{key:"rotateAt",value:function(e,t){var n=Math.cos(e),r=Math.sin(e),a=t.x,s=t.y,i=this.a*n+this.c*r,o=this.b*n+this.d*r,u=this.c*n-this.a*r,l=this.d*n-this.b*r;return new this.constructor(i,o,u,l,(this.a-i)*a+(this.c-u)*s+this.e,(this.b-o)*a+(this.d-l)*s+this.f)}},{key:"rotateFromVector",value:function(e){var t=e.unit(),n=t.x,r=t.y;return new this.constructor(this.a*n+this.c*r,this.b*n+this.d*r,this.a*-r+this.c*n,this.b*-r+this.d*n,this.e,this.f)}},{key:"flipX",value:function(){return new this.constructor(-this.a,-this.b,this.c,this.d,this.e,this.f)}},{key:"flipY",value:function(){return new this.constructor(this.a,this.b,-this.c,-this.d,this.e,this.f)}},{key:"skewX",value:function(e){var t=Math.tan(e);return new this.constructor(this.a,this.b,this.c+this.a*t,this.d+this.b*t,this.e,this.f)}},{key:"skewY",value:function(e){var t=Math.tan(e);return new this.constructor(this.a+this.c*t,this.b+this.d*t,this.c,this.d,this.e,this.f)}},{key:"isIdentity",value:function(){return 1===this.a&&0===this.b&&0===this.c&&1===this.d&&0===this.e&&0===this.f}},{key:"isInvertible",value:function(){return this.a*this.d-this.b*this.c!=0}},{key:"getScale",value:function(){return{scaleX:Math.sqrt(this.a*this.a+this.c*this.c),scaleY:Math.sqrt(this.b*this.b+this.d*this.d)}}},{key:"getDecomposition",value:function(){var e=.5*(this.a+this.d),t=.5*(this.a-this.d),n=.5*(this.b+this.c),r=.5*(this.b-this.c),a=Math.sqrt(e*e+r*r),s=Math.sqrt(t*t+n*n),i=a+s,o=a-s,u=Math.atan2(n,t),l=Math.atan2(r,e),c=.5*(l-u),h=.5*(l+u);return{translation:this.constructor.translation(this.e,this.f),rotation:this.constructor.rotation(h),scale:this.constructor.nonUniformScaling(i,o),rotation0:this.constructor.rotation(c)}}},{key:"equals",value:function(e){return this.a===e.a&&this.b===e.b&&this.c===e.c&&this.d===e.d&&this.e===e.e&&this.f===e.f}},{key:"precisionEquals",value:function(e,t){return Math.abs(this.a-e.a)=0;t--)this.coefs.push(t<0||arguments.length<=t?void 0:arguments[t]);this._variable="t",this._s=0}return a(e,[{key:"clone",value:function(){var t=new e;return t.coefs=this.coefs.slice(),t}},{key:"eval",value:function(e){if(isNaN(e))throw new TypeError("Parameter must be a number. Found '".concat(e,"'"));for(var t=0,n=this.coefs.length-1;n>=0;n--)t=t*e+this.coefs[n];return t}},{key:"add",value:function(t){for(var n=new e,r=this.getDegree(),a=t.getDegree(),s=Math.max(r,a),i=0;i<=s;i++){var o=i<=r?this.coefs[i]:0,u=i<=a?t.coefs[i]:0;n.coefs[i]=o+u}return n}},{key:"multiply",value:function(t){for(var n=new e,r=0;r<=this.getDegree()+t.getDegree();r++)n.coefs.push(0);for(var a=0;a<=this.getDegree();a++)for(var s=0;s<=t.getDegree();s++)n.coefs[a+s]+=this.coefs[a]*t.coefs[s];return n}},{key:"divideEqualsScalar",value:function(e){for(var t=0;t0&&void 0!==arguments[0]?arguments[0]:1e-12,t=this.getDegree();t>=0&&Math.abs(this.coefs[t])<=e;t--)this.coefs.pop()}},{key:"removeZerosEquals",value:function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:1e-15,t=this.coefs,n=10*e*Math.abs(t.reduce((function(e,t){return Math.abs(t)>Math.abs(e)?t:e}))),r=0;r=0;n--){var r=Math.round(1e3*this.coefs[n])/1e3;if(0!==r){var a=r<0?" - ":" + ";r=Math.abs(r),n>0&&(1===r?r=this._variable:r+=this._variable),n>1&&(r+="^"+n),t.push(a),e.push(r)}}t[0]=" + "===t[0]?"":"-";for(var s="",i=0;i2&&void 0!==arguments[2]?arguments[2]:1e-6,a=arguments.length>3&&void 0!==arguments[3]?arguments[3]:15,s=this.eval(e),i=this.eval(t);if(Math.abs(s)<=r)n=e;else if(Math.abs(i)<=r)n=t;else if(s*i<=0)for(var o=Math.log(t-e),u=Math.LN10*a,l=Math.ceil((o+u)/Math.LN2),c=0;c=3&&(s=e.interpolate(a,r,3,i-3,0),Math.abs(s.dy)<=1e-6*s.y)));i++)r[i]=r[i-1],a[i]=.25*a[i-1];return s.y}},{key:"zeroErrorEstimate",value:function(e){if(void 0===e){var t=this.bounds();e=Math.max(Math.abs(t.minX),Math.abs(t.maxX))}if(e<.001)return 2*Math.abs(this.eval(1e-15));var n=this.coefs.length-1,r=this.coefs[n];return 10*1e-15*this.coefs.reduce((function(t,n,a){var s=n/r*Math.pow(e,a);return s>t?s:t}),0)}},{key:"boundsUpperRealFujiwara",value:function(){var e=this.coefs,t=e.length-1,n=e[t];1!==n&&(e=this.coefs.map((function(e){return e/n})));var r,a=e.map((function(e,n){return n0)},{negX:-2*a.reduce(s,{max:0,nearmax:0}).max,posX:2*i.max}}},{key:"boundsLowerRealFujiwara",value:function(){var t=new e;t.coefs=this.coefs.slice().reverse();var n=t.boundsUpperRealFujiwara();return n.negX=1/n.negX,n.posX=1/n.posX,n}},{key:"bounds",value:function(){var e=this.boundsUpperRealFujiwara(),t={minX:e.negX,maxX:e.posX};return 0===e.negX&&0===e.posX?t:(0===e.negX?t.minX=this.boundsLowerRealFujiwara().posX:0===e.posX&&(t.maxX=this.boundsLowerRealFujiwara().negX),t.minX>t.maxX&&(t.minX=t.maxX=0),t)}},{key:"boundUpperAbsRouche",value:function(){var e=this.coefs,t=e.length-1;return 1+e.reduce((function(e,n,r){return r!==t&&e<(n=Math.abs(n))?n:e}),0)/Math.abs(e[t])}},{key:"boundLowerAbsRouche",value:function(){var e=this.coefs,t=e.reduce((function(e,t,n){return 0!==n&&e<(t=Math.abs(t))?t:e}),0);return Math.abs(e[0])/(Math.abs(e[0])+t)}},{key:"boundsRealLaguerre",value:function(){var e=this.coefs,t=e.length-1,n=-e[t-1]/(t*e[t]),r=e[t-1]*e[t-1]-2*t/(t-1)*e[t]*e[t-2],a=(t-1)/(t*e[t])*Math.sqrt(r);return a<0&&(a=-a),{minX:n-a,maxX:n+a}}},{key:"countRootsDescartes",value:function(){var e=this.coefs,t=e.length-1,n=e.reduce((function(e,t,n){return 0!==e.prev_a&&0!==t&&(e.prev_a<0==t>0&&e.pos++,n%2==0!=e.prev_a<0==(n%2==1!=t>0)&&e.neg++),e.prev_a=t,e}),{pos:0,neg:0,prev_a:0});return{maxRealPos:n.pos,maxRealNeg:n.neg,minComplex:t-(n.pos+n.neg)}}},{key:"getDegree",value:function(){return this.coefs.length-1}},{key:"getDerivative",value:function(){for(var t=new e,n=1;n0){r(this.bisection(e,a[0]));for(var s=0;s<=a.length-2;s++)r(this.bisection(a[s],a[s+1]));r(this.bisection(a[a.length-1],t))}else r(this.bisection(e,t))}return n}},{key:"getLinearRoot",value:function(){var e=[],t=this.coefs[1];return 0!==t&&e.push(-this.coefs[0]/t),e}},{key:"getQuadraticRoots",value:function(){var e=[];if(2===this.getDegree()){var t=this.coefs[2],n=this.coefs[1]/t,r=n*n-4*(this.coefs[0]/t);if(r>0){var a=Math.sqrt(r);e.push(.5*(-n+a)),e.push(.5*(-n-a))}else 0===r&&e.push(.5*-n)}return e}},{key:"getCubicRoots",value:function(){var e=[];if(3===this.getDegree()){var t=this.coefs[3],n=this.coefs[2]/t,r=this.coefs[1]/t,a=(3*r-n*n)/3,s=(2*n*n*n-9*r*n+27*(this.coefs[0]/t))/27,i=n/3,o=s*s/4+a*a*a/27,u=s/2,l=this.zeroErrorEstimate();if(Math.abs(o)<=l&&(o=0),o>0){var c,h=Math.sqrt(o),y=-u+h;c=y>=0?Math.pow(y,1/3):-Math.pow(-y,1/3),(y=-u-h)>=0?c+=Math.pow(y,1/3):c-=Math.pow(-y,1/3),e.push(c-i)}else if(o<0){var p=Math.sqrt(-a/3),f=Math.atan2(Math.sqrt(-o),-u)/3,x=Math.cos(f),v=Math.sin(f),m=Math.sqrt(3);e.push(2*p*x-i),e.push(-p*(x+m*v)-i),e.push(-p*(x-m*v)-i)}else{var d;d=u>=0?-Math.pow(u,1/3):Math.pow(-u,1/3),e.push(2*d-i),e.push(-d-i)}}return e}},{key:"getQuarticRoots",value:function(){var t=[],n=this.getDegree();if(4===n){var r=new e;r.coefs=this.coefs.slice(),r.divideEqualsScalar(r.coefs[n]);Math.abs(r.coefs[0])<10*1e-15*Math.abs(r.coefs[3])&&(r.coefs[0]=0);for(var a=r.getDerivative(),s=a.getRoots().sort((function(e,t){return e-t})),i=[],o=s.length-1,u=this.bounds(),l=Math.max(Math.abs(u.minX),Math.abs(u.maxX)),h=this.zeroErrorEstimate(l),y=0;y<=o;y++)i.push(r.eval(s[y]));for(var p=0;p<=o;p++)Math.abs(i[p])-1){for(0!==i[0]?c(i[0])!==c(r.eval(s[0]-x)-i[0])&&(v.push(s[0]-x),m.push([u.minX,s[0]])):(t.push(s[0],s[0]),f++);f0)for(f=0;fs)throw new RangeError("Min must be greater than max");if(y=t(a),p=t(s),c(y)===c(p))throw new RangeError("Y values of bounds must be of opposite sign")}for(var d=function(){return Math.abs(u)<=v*Math.abs(i)||x===i-u-i},b=0;bs){if(c(y)===c(p))break;var g=p-y,w=s-a;if(u=0===g?i-(a+.5*w):Math.abs(g/Math.min(y,p))>50?i-(a+w*(.5+(Math.abs(y)":16,step:17,"=~":18,namedPattern:19,expression:20,booleanExpression:21,MAP:22,"(":23,")":24,PATTERNS:25,"{":26,patterns:27,"}":28,SEQUENCES:29,relationalExpression:30,AND:31,OR:32,mathExpression:33,"<":34,"<=":35,"==":36,"!=":37,">=":38,">":39,callExpression:40,"+":41,"-":42,"*":43,"/":44,MOD:45,POW:46,argumentList:47,unaryExpression:48,memberExpression:49,NOT:50,primaryExpression:51,".":52,name:53,integer:54,"[":55,"]":56,boolean:57,NULL_TYPE:58,float:59,string:60,UNDEFINED_TYPE:61,$:62,arrayExpression:63,objectExpression:64,expressionElements:65,expressionElement:66,expressionProperties:67,expressionProperty:68,":":69,argument:70,"...":71,pattern:72,AS:73,ANY_TYPE:74,ARRAY_TYPE:75,BOOLEAN_TYPE:76,TRUE:77,FALSE:78,NUMBER_TYPE:79,OBJECT_TYPE:80,STRING_TYPE:81,arrayPattern:82,objectPattern:83,PATTERN:84,ENUMERATION:85,patternElements:86,namedPatternElement:87,patternElement:88,range:89,"..":90,patternProperties:91,namedPatternProperty:92,patternProperty:93,STRING:94,NUMBER:95,$accept:0,$end:1},terminals_:{2:"error",5:";",9:"LET",10:"IDENTIFIER",11:"=",12:"DEF",14:",",16:"|>",18:"=~",22:"MAP",23:"(",24:")",25:"PATTERNS",26:"{",28:"}",29:"SEQUENCES",31:"AND",32:"OR",34:"<",35:"<=",36:"==",37:"!=",38:">=",39:">",41:"+",42:"-",43:"*",44:"/",45:"MOD",46:"POW",50:"NOT",52:".",55:"[",56:"]",58:"NULL_TYPE",61:"UNDEFINED_TYPE",62:"$",69:":",71:"...",73:"AS",74:"ANY_TYPE",75:"ARRAY_TYPE",76:"BOOLEAN_TYPE",77:"TRUE",78:"FALSE",79:"NUMBER_TYPE",80:"OBJECT_TYPE",81:"STRING_TYPE",84:"PATTERN",85:"ENUMERATION",90:"..",94:"STRING",95:"NUMBER"},productions_:[0,[3,1],[3,2],[4,3],[4,1],[6,1],[6,1],[7,4],[7,4],[13,3],[13,1],[8,1],[15,3],[15,1],[17,2],[17,1],[20,1],[20,6],[20,4],[20,4],[21,1],[21,3],[21,3],[30,1],[30,3],[30,3],[30,3],[30,3],[30,3],[30,3],[33,1],[33,3],[33,3],[33,3],[33,3],[33,3],[33,3],[40,3],[40,4],[40,1],[48,1],[48,2],[49,1],[49,3],[49,3],[49,4],[51,1],[51,1],[51,1],[51,1],[51,1],[51,1],[51,1],[51,1],[51,1],[51,3],[63,2],[63,3],[65,3],[65,1],[66,1],[66,1],[64,2],[64,3],[67,3],[67,1],[68,3],[68,1],[68,1],[47,3],[47,1],[70,1],[70,2],[27,3],[27,1],[19,1],[19,3],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,2],[72,2],[72,1],[82,2],[82,3],[86,3],[86,1],[87,1],[87,3],[88,1],[88,3],[88,3],[88,5],[89,3],[89,2],[89,2],[89,1],[83,2],[83,3],[91,3],[91,1],[92,1],[92,3],[93,3],[93,1],[57,1],[57,1],[60,1],[54,1],[59,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1]],performAction:function(e,t,n,r,a,s,i){var o=s.length-1;switch(a){case 1:return s[o];case 2:return s[o-1];case 3:case 9:case 12:case 58:case 64:case 69:case 73:case 96:case 110:s[o-2].push(s[o]),this.$=s[o-2];break;case 4:case 10:case 13:case 59:case 65:case 70:case 74:case 97:case 111:this.$=[s[o]];break;case 5:case 6:case 14:case 15:case 16:case 20:case 23:case 30:case 39:case 40:case 42:case 53:case 54:case 60:case 61:case 68:case 71:case 112:case 121:case 122:case 123:case 124:case 125:case 126:case 127:case 128:case 129:case 130:case 131:case 132:case 133:case 134:case 135:case 136:case 137:case 138:case 139:case 140:case 141:case 142:case 143:case 144:this.$=s[o];break;case 7:this.$={type:"assignment",name:s[o-2],value:s[o]};break;case 8:this.$={type:"def",name:s[o-2],value:s[o]};break;case 11:this.$={type:"sequence",steps:s[o]};break;case 17:this.$={type:"map",value:[s[o-3],s[o-1]]};break;case 18:this.$={type:"patterns",patterns:s[o-1]};break;case 19:this.$={type:"sequences",sequences:s[o-1]};break;case 21:this.$={type:"and",left:s[o-2],right:s[o]};break;case 22:this.$={type:"or",left:s[o-2],right:s[o]};break;case 24:this.$={type:"less_than",left:s[o-2],right:s[o]};break;case 25:this.$={type:"less_equal",left:s[o-2],right:s[o]};break;case 26:this.$={type:"equal",left:s[o-2],right:s[o]};break;case 27:this.$={type:"not_equal",left:s[o-2],right:s[o]};break;case 28:this.$={type:"greater_equal",left:s[o-2],right:s[o]};break;case 29:this.$={type:"greater_than",left:s[o-2],right:s[o]};break;case 31:this.$={type:"add",left:s[o-2],right:s[o]};break;case 32:this.$={type:"subtract",left:s[o-2],right:s[o]};break;case 33:this.$={type:"multiply",left:s[o-2],right:s[o]};break;case 34:this.$={type:"divide",left:s[o-2],right:s[o]};break;case 35:this.$={type:"modulus",left:s[o-2],right:s[o]};break;case 36:this.$={type:"power",left:s[o-2],right:s[o]};break;case 37:this.$={type:"invoke",name:s[o-2],args:[]};break;case 38:this.$={type:"invoke",name:s[o-3],args:s[o-1]};break;case 41:this.$={type:"not",value:s[o]};break;case 43:this.$={type:"get-property",left:s[o-2],right:s[o]};break;case 44:this.$={type:"get-index",left:s[o-2],right:s[o]};break;case 45:this.$={type:"get-index",left:s[o-3],right:s[o-1]};break;case 46:this.$={type:"boolean",value:s[o]};break;case 47:this.$={type:"boolean",value:null};break;case 48:this.$={type:"number",value:s[o]};break;case 49:this.$={type:"string",value:s[o]};break;case 50:this.$={type:"undefined",value:void 0};break;case 51:this.$={type:"get-value",name:s[o]};break;case 52:this.$={type:"get-structure"};break;case 55:this.$=s[o-1];break;case 56:this.$={type:"array",value:[]};break;case 57:this.$={type:"array",value:s[o-1]};break;case 62:this.$={type:"object",value:[]};break;case 63:this.$={type:"object",value:s[o-1]};break;case 66:this.$={type:"property",name:s[o-2],value:s[o]};break;case 67:this.$={type:"property",name:s[o],value:null};break;case 72:this.$={type:"spread",expression:s[o]};break;case 75:case 98:s[o].assignTo=null,this.$=s[o];break;case 76:case 99:case 113:s[o-2].assignTo=s[o],this.$=s[o-2];break;case 77:this.$={type:"pattern",patternType:"any",value:null};break;case 78:this.$={type:"pattern",patternType:"array",value:null};break;case 79:this.$={type:"pattern",patternType:"boolean",value:null};break;case 80:this.$={type:"pattern",patternType:"boolean",value:!0};break;case 81:this.$={type:"pattern",patternType:"boolean",value:!1};break;case 82:this.$={type:"pattern",patternType:"null",value:null};break;case 83:this.$={type:"pattern",patternType:"number",value:null};break;case 84:this.$={type:"pattern",patternType:"number",value:s[o]};break;case 85:this.$={type:"pattern",patternType:"object",value:null};break;case 86:this.$={type:"pattern",patternType:"string",value:null};break;case 87:this.$={type:"pattern",patternType:"string",value:s[o]};break;case 88:this.$={type:"pattern",patternType:"undefined",value:null};break;case 89:case 90:this.$=s[o];break;case 91:this.$={type:"pattern-reference",name:s[o]};break;case 92:this.$={type:"enumeration-reference",name:s[o]};break;case 93:this.$={type:"pattern",patternType:"reference",value:s[o]};break;case 94:this.$={type:"pattern",patternType:"array-pattern",value:[]};break;case 95:this.$={type:"pattern",patternType:"array-pattern",value:s[o-1]};break;case 100:this.$={type:"element",pattern:s[o],range:{type:"range",start:1,stop:1}};break;case 101:this.$={type:"element",pattern:s[o-2],range:s[o]};break;case 102:this.$={type:"element-group",elements:s[o-1],range:{type:"range",start:1,stop:1}};break;case 103:this.$={type:"element-group",elements:s[o-3],range:s[o]};break;case 104:this.$={type:"range",start:s[o-2],stop:s[o]};break;case 105:this.$={type:"range",start:0,stop:s[o]};break;case 106:this.$={type:"range",start:s[o-1],stop:1/0};break;case 107:this.$={type:"range",start:s[o],stop:s[o]};break;case 108:this.$={type:"pattern",patternType:"object",value:null};break;case 109:this.$={type:"pattern",patternType:"object-pattern",value:s[o-1]};break;case 114:this.$={type:"property",name:s[o-2],pattern:s[o]};break;case 115:this.$={type:"property",name:s[o],pattern:{type:"pattern",patternType:"any",value:null}};break;case 116:this.$=!0;break;case 117:this.$=!1;break;case 118:this.$=s[o].substring(1,s[o].length-1);break;case 119:this.$=parseInt(s[o]);break;case 120:this.$=parseFloat(s[o])}},table:[{3:1,4:2,6:3,7:4,8:5,9:t,10:n,12:r,15:8,17:9,18:a,20:11,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{1:[3]},{1:[2,1],5:[1,39]},e(b,[2,4]),e(b,[2,5]),e(b,[2,6]),{10:[1,40]},{10:[1,41]},e([1,5,14,24,28,56],[2,11],{16:[1,42]}),e(g,[2,13]),{10:w,19:43,26:k,55:E,58:P,59:52,60:55,61:A,72:44,74:M,75:S,76:R,77:_,78:I,79:T,80:N,81:X,82:57,83:58,84:Y,85:C,94:m,95:d},e(g,[2,15]),e(L,[2,16]),{23:[1,64]},{26:[1,65]},{26:[1,66]},e(L,[2,20],{31:[1,67],32:[1,68],34:$,35:D,36:z,37:B,38:O,39:q}),e(j,[2,23],{41:U,42:V,43:F,44:G,45:Q,46:H}),e(Z,[2,30]),e(W,J,{23:[1,81]}),e(Z,[2,39]),e(Z,[2,40],{52:[1,82],55:[1,83]}),{10:[1,85],23:i,26:u,48:84,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},e(W,[2,42]),e(W,[2,46]),e(W,[2,47]),e(W,[2,48]),e(W,[2,49]),e(W,[2,50]),e(W,[2,52]),e(W,[2,53]),e(W,[2,54]),{10:n,20:86,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},e(W,[2,116]),e(W,[2,117]),e(K,[2,120]),e(K,[2,118]),{7:91,9:t,10:n,12:r,20:90,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,56:[1,87],57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,65:88,66:89,77:x,78:v,94:m,95:d},{7:96,9:t,10:n,12:r,20:95,21:12,22:s,23:i,25:o,26:u,28:[1,92],29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,67:93,68:94,77:x,78:v,94:m,95:d},{1:[2,2],6:97,7:4,8:5,9:t,10:n,12:r,15:8,17:9,18:a,20:11,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{11:[1,98]},{11:[1,99]},{10:n,17:100,18:a,20:11,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},e(g,[2,14]),e(g,[2,75],{73:[1,101]}),e(ee,[2,77]),e(ee,[2,78]),e(ee,[2,79]),e(ee,[2,80]),e(ee,[2,81]),e(ee,[2,82]),e(ee,[2,83]),e(ee,[2,84]),e(ee,[2,85]),e(ee,[2,86]),e(ee,[2,87]),e(ee,[2,88]),e(ee,[2,89]),e(ee,[2,90]),{10:[1,102]},{10:[1,103]},e(ee,[2,93]),{10:w,23:te,26:k,55:E,56:[1,104],58:P,59:52,60:55,61:A,72:108,74:M,75:S,76:R,77:_,78:I,79:T,80:N,81:X,82:57,83:58,84:Y,85:C,86:105,87:106,88:107,94:m,95:d},{9:ne,10:re,12:ae,22:se,25:ie,28:[1,110],29:oe,31:ue,32:le,45:ce,46:he,50:ye,53:114,58:pe,60:116,61:fe,73:xe,74:ve,75:me,76:de,77:be,78:ge,79:we,80:ke,81:Ee,85:Pe,91:111,92:112,93:113,94:m},{10:n,20:139,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:w,19:141,26:k,27:140,55:E,58:P,59:52,60:55,61:A,72:44,74:M,75:S,76:R,77:_,78:I,79:T,80:N,81:X,82:57,83:58,84:Y,85:C,94:m,95:d},{8:143,10:n,13:142,15:8,17:9,18:a,20:11,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,30:144,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,30:145,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,33:146,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,33:147,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,33:148,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,33:149,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,33:150,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,33:151,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,40:152,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,40:153,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,40:154,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,40:155,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,40:156,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,23:i,26:u,40:157,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{10:n,20:161,21:12,22:s,23:i,24:[1,158],25:o,26:u,29:l,30:16,33:17,40:18,47:159,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,70:160,71:Ae,77:x,78:v,94:m,95:d},{9:ne,10:re,12:ae,22:se,25:ie,29:oe,31:ue,32:le,45:ce,46:he,50:ye,53:163,54:164,58:pe,60:116,61:fe,73:xe,74:ve,75:me,76:de,77:be,78:ge,79:we,80:ke,81:Ee,85:Pe,94:m,95:Me},{54:166,95:Me},e(Z,[2,41]),e(W,J),{24:[1,167]},e(W,[2,56]),{14:[1,169],56:[1,168]},e(Se,[2,59]),e(Se,[2,60]),e(Se,[2,61]),e(W,[2,62]),{14:[1,171],28:[1,170]},e(Re,[2,65]),e(Re,[2,67],{69:[1,172]}),e(Re,[2,68]),e(b,[2,3]),{8:173,10:n,15:8,17:9,18:a,20:11,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},{8:174,10:n,15:8,17:9,18:a,20:11,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},e(g,[2,12]),{10:[1,175]},e(ee,[2,91]),e(ee,[2,92]),e(ee,[2,94]),{14:_e,56:[1,176]},e(Ie,[2,97]),e(Ie,[2,98],{73:[1,178]}),e(Te,[2,100],{5:[1,179]}),{10:w,23:te,26:k,55:E,58:P,59:52,60:55,61:A,72:108,74:M,75:S,76:R,77:_,78:I,79:T,80:N,81:X,82:57,83:58,84:Y,85:C,86:180,87:106,88:107,94:m,95:d},e(ee,[2,108]),{14:[1,182],28:[1,181]},e(Re,[2,111]),e(Re,[2,112],{73:[1,183]}),e(Ne,[2,115],{69:[1,184]}),e(K,[2,121]),e(K,[2,122]),e(K,[2,123]),e(K,[2,124]),e(K,[2,125]),e(K,[2,126]),e(K,[2,127]),e(K,[2,128]),e(K,[2,129]),e(K,[2,130]),e(K,[2,131]),e(K,[2,132]),e(K,[2,133]),e(K,[2,134]),e(K,[2,135]),e(K,[2,136]),e(K,[2,137]),e(K,[2,138]),e(K,[2,139]),e(K,[2,140]),e(K,[2,141]),e(K,[2,142]),e(K,[2,143]),e(K,[2,144]),{14:[1,185]},{14:[1,187],28:[1,186]},e(Re,[2,74]),{14:[1,189],28:[1,188]},e(Re,[2,10]),e(L,[2,21],{34:$,35:D,36:z,37:B,38:O,39:q}),e(L,[2,22],{34:$,35:D,36:z,37:B,38:O,39:q}),e(j,[2,24],{41:U,42:V,43:F,44:G,45:Q,46:H}),e(j,[2,25],{41:U,42:V,43:F,44:G,45:Q,46:H}),e(j,[2,26],{41:U,42:V,43:F,44:G,45:Q,46:H}),e(j,[2,27],{41:U,42:V,43:F,44:G,45:Q,46:H}),e(j,[2,28],{41:U,42:V,43:F,44:G,45:Q,46:H}),e(j,[2,29],{41:U,42:V,43:F,44:G,45:Q,46:H}),e(Z,[2,31]),e(Z,[2,32]),e(Z,[2,33]),e(Z,[2,34]),e(Z,[2,35]),e(Z,[2,36]),e(Z,[2,37]),{14:[1,191],24:[1,190]},e(Xe,[2,70]),e(Xe,[2,71]),{10:n,20:192,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},e(W,[2,43]),e(W,[2,44]),e([1,5,14,16,24,28,31,32,34,35,36,37,38,39,41,42,43,44,45,46,52,55,56,69,73,90],[2,119]),{56:[1,193]},e(W,[2,55]),e(W,[2,57]),{7:91,9:t,10:n,12:r,20:90,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,66:194,77:x,78:v,94:m,95:d},e(W,[2,63]),{7:96,9:t,10:n,12:r,20:95,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,68:195,77:x,78:v,94:m,95:d},{8:196,10:n,15:8,17:9,18:a,20:11,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},e(Ye,[2,7]),e(Ye,[2,8]),e(g,[2,76]),e(ee,[2,95]),{10:w,23:te,26:k,55:E,58:P,59:52,60:55,61:A,72:108,74:M,75:S,76:R,77:_,78:I,79:T,80:N,81:X,82:57,83:58,84:Y,85:C,87:197,88:107,94:m,95:d},{10:[1,198]},{54:200,89:199,90:Ce,95:Me},{14:_e,24:[1,202]},e(ee,[2,109]),{9:ne,10:re,12:ae,22:se,25:ie,29:oe,31:ue,32:le,45:ce,46:he,50:ye,53:114,58:pe,60:116,61:fe,73:xe,74:ve,75:me,76:de,77:be,78:ge,79:we,80:ke,81:Ee,85:Pe,92:203,93:113,94:m},{10:[1,204]},{10:w,26:k,55:E,58:P,59:52,60:55,61:A,72:205,74:M,75:S,76:R,77:_,78:I,79:T,80:N,81:X,82:57,83:58,84:Y,85:C,94:m,95:d},{8:206,10:n,15:8,17:9,18:a,20:11,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},e(L,[2,18]),{10:w,19:207,26:k,55:E,58:P,59:52,60:55,61:A,72:44,74:M,75:S,76:R,77:_,78:I,79:T,80:N,81:X,82:57,83:58,84:Y,85:C,94:m,95:d},e(L,[2,19]),{8:208,10:n,15:8,17:9,18:a,20:11,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,77:x,78:v,94:m,95:d},e(Z,[2,38]),{10:n,20:161,21:12,22:s,23:i,25:o,26:u,29:l,30:16,33:17,40:18,48:20,49:21,50:c,51:23,55:h,57:24,58:y,59:26,60:27,61:p,62:f,63:30,64:31,70:209,71:Ae,77:x,78:v,94:m,95:d},e(Xe,[2,72]),e(W,[2,45]),e(Se,[2,58]),e(Re,[2,64]),e(Re,[2,66]),e(Ie,[2,96]),e(Ie,[2,99]),e(Te,[2,101]),e(Te,[2,107],{90:[1,210]}),{54:211,95:Me},e(Te,[2,102],{5:[1,212]}),e(Re,[2,110]),e(Re,[2,113]),e(Ne,[2,114]),{24:[1,213]},e(Re,[2,73]),e(Re,[2,9]),e(Xe,[2,69]),e(Te,[2,106],{54:214,95:Me}),e(Te,[2,105]),{54:200,89:215,90:Ce,95:Me},e(L,[2,17]),e(Te,[2,104]),e(Te,[2,103])],defaultActions:{},parseError:function(e,t){if(!t.recoverable){var n=new Error(e);throw n.hash=t,n}this.trace(e)},parse:function(e){var t=this,n=[0],r=[null],a=[],s=this.table,i="",o=0,u=0,l=2,c=1,h=a.slice.call(arguments,1),y=Object.create(this.lexer),p={yy:{}};for(var f in this.yy)Object.prototype.hasOwnProperty.call(this.yy,f)&&(p.yy[f]=this.yy[f]);y.setInput(e,p.yy),p.yy.lexer=y,p.yy.parser=this,void 0===y.yylloc&&(y.yylloc={});var x=y.yylloc;a.push(x);var v=y.options&&y.options.ranges;"function"==typeof p.yy.parseError?this.parseError=p.yy.parseError:this.parseError=Object.getPrototypeOf(this).parseError;for(var m,d,b,g,w,k,E,P,A,M=function(){var e;return"number"!=typeof(e=y.lex()||c)&&(e=t.symbols_[e]||e),e},S={};;){if(b=n[n.length-1],this.defaultActions[b]?g=this.defaultActions[b]:(null==m&&(m=M()),g=s[b]&&s[b][m]),void 0===g||!g.length||!g[0]){var R="";for(k in A=[],s[b])this.terminals_[k]&&k>l&&A.push("'"+this.terminals_[k]+"'");R=y.showPosition?"Parse error on line "+(o+1)+":\n"+y.showPosition()+"\nExpecting "+A.join(", ")+", got '"+(this.terminals_[m]||m)+"'":"Parse error on line "+(o+1)+": Unexpected "+(m==c?"end of input":"'"+(this.terminals_[m]||m)+"'"),this.parseError(R,{text:y.match,token:this.terminals_[m]||m,line:y.yylineno,loc:x,expected:A})}if(g[0]instanceof Array&&g.length>1)throw new Error("Parse Error: multiple actions possible at state: "+b+", token: "+m);switch(g[0]){case 1:n.push(m),r.push(y.yytext),a.push(y.yylloc),n.push(g[1]),m=null,d?(m=d,d=null):(u=y.yyleng,i=y.yytext,o=y.yylineno,x=y.yylloc);break;case 2:if(E=this.productions_[g[1]][1],S.$=r[r.length-E],S._$={first_line:a[a.length-(E||1)].first_line,last_line:a[a.length-1].last_line,first_column:a[a.length-(E||1)].first_column,last_column:a[a.length-1].last_column},v&&(S._$.range=[a[a.length-(E||1)].range[0],a[a.length-1].range[1]]),void 0!==(w=this.performAction.apply(S,[i,u,o,p.yy,g[1],r,a].concat(h))))return w;E&&(n=n.slice(0,-1*E*2),r=r.slice(0,-1*E),a=a.slice(0,-1*E)),n.push(this.productions_[g[1]][0]),r.push(S.$),a.push(S._$),P=s[n[n.length-2]][n[n.length-1]],n.push(P);break;case 3:return!0}}return!0}},$e={EOF:1,parseError:function(e,t){if(!this.yy.parser)throw new Error(e);this.yy.parser.parseError(e,t)},setInput:function(e,t){return this.yy=t||this.yy||{},this._input=e,this._more=this._backtrack=this.done=!1,this.yylineno=this.yyleng=0,this.yytext=this.matched=this.match="",this.conditionStack=["INITIAL"],this.yylloc={first_line:1,first_column:0,last_line:1,last_column:0},this.options.ranges&&(this.yylloc.range=[0,0]),this.offset=0,this},input:function(){var e=this._input[0];return this.yytext+=e,this.yyleng++,this.offset++,this.match+=e,this.matched+=e,e.match(/(?:\r\n?|\n).*/g)?(this.yylineno++,this.yylloc.last_line++):this.yylloc.last_column++,this.options.ranges&&this.yylloc.range[1]++,this._input=this._input.slice(1),e},unput:function(e){var t=e.length,n=e.split(/(?:\r\n?|\n)/g);this._input=e+this._input,this.yytext=this.yytext.substr(0,this.yytext.length-t),this.offset-=t;var r=this.match.split(/(?:\r\n?|\n)/g);this.match=this.match.substr(0,this.match.length-1),this.matched=this.matched.substr(0,this.matched.length-1),n.length-1&&(this.yylineno-=n.length-1);var a=this.yylloc.range;return this.yylloc={first_line:this.yylloc.first_line,last_line:this.yylineno+1,first_column:this.yylloc.first_column,last_column:n?(n.length===r.length?this.yylloc.first_column:0)+r[r.length-n.length].length-n[0].length:this.yylloc.first_column-t},this.options.ranges&&(this.yylloc.range=[a[0],a[0]+this.yyleng-t]),this.yyleng=this.yytext.length,this},more:function(){return this._more=!0,this},reject:function(){return this.options.backtrack_lexer?(this._backtrack=!0,this):this.parseError("Lexical error on line "+(this.yylineno+1)+". You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},less:function(e){this.unput(this.match.slice(e))},pastInput:function(){var e=this.matched.substr(0,this.matched.length-this.match.length);return(e.length>20?"...":"")+e.substr(-20).replace(/\n/g,"")},upcomingInput:function(){var e=this.match;return e.length<20&&(e+=this._input.substr(0,20-e.length)),(e.substr(0,20)+(e.length>20?"...":"")).replace(/\n/g,"")},showPosition:function(){var e=this.pastInput(),t=new Array(e.length+1).join("-");return e+this.upcomingInput()+"\n"+t+"^"},test_match:function(e,t){var n,r,a;if(this.options.backtrack_lexer&&(a={yylineno:this.yylineno,yylloc:{first_line:this.yylloc.first_line,last_line:this.last_line,first_column:this.yylloc.first_column,last_column:this.yylloc.last_column},yytext:this.yytext,match:this.match,matches:this.matches,matched:this.matched,yyleng:this.yyleng,offset:this.offset,_more:this._more,_input:this._input,yy:this.yy,conditionStack:this.conditionStack.slice(0),done:this.done},this.options.ranges&&(a.yylloc.range=this.yylloc.range.slice(0))),(r=e[0].match(/(?:\r\n?|\n).*/g))&&(this.yylineno+=r.length),this.yylloc={first_line:this.yylloc.last_line,last_line:this.yylineno+1,first_column:this.yylloc.last_column,last_column:r?r[r.length-1].length-r[r.length-1].match(/\r?\n?/)[0].length:this.yylloc.last_column+e[0].length},this.yytext+=e[0],this.match+=e[0],this.matches=e,this.yyleng=this.yytext.length,this.options.ranges&&(this.yylloc.range=[this.offset,this.offset+=this.yyleng]),this._more=!1,this._backtrack=!1,this._input=this._input.slice(e[0].length),this.matched+=e[0],n=this.performAction.call(this,this.yy,this,t,this.conditionStack[this.conditionStack.length-1]),this.done&&this._input&&(this.done=!1),n)return n;if(this._backtrack){for(var s in a)this[s]=a[s];return!1}return!1},next:function(){if(this.done)return this.EOF;var e,t,n,r;this._input||(this.done=!0),this._more||(this.yytext="",this.match="");for(var a=this._currentRules(),s=0;st[0].length)){if(t=n,r=s,this.options.backtrack_lexer){if(!1!==(e=this.test_match(n,a[s])))return e;if(this._backtrack){t=!1;continue}return!1}if(!this.options.flex)break}return t?!1!==(e=this.test_match(t,a[r]))&&e:""===this._input?this.EOF:this.parseError("Lexical error on line "+(this.yylineno+1)+". Unrecognized text.\n"+this.showPosition(),{text:"",token:null,line:this.yylineno})},lex:function(){var e=this.next();return e||this.lex()},begin:function(e){this.conditionStack.push(e)},popState:function(){return this.conditionStack.length-1>0?this.conditionStack.pop():this.conditionStack[0]},_currentRules:function(){return this.conditionStack.length&&this.conditionStack[this.conditionStack.length-1]?this.conditions[this.conditionStack[this.conditionStack.length-1]].rules:this.conditions.INITIAL.rules},topState:function(e){return(e=this.conditionStack.length-1-Math.abs(e||0))>=0?this.conditionStack[e]:"INITIAL"},pushState:function(e){this.begin(e)},stateStackSize:function(){return this.conditionStack.length},options:{},performAction:function(e,t,n,r){switch(n){case 0:case 1:break;case 2:return 31;case 3:return 74;case 4:return 75;case 5:return 73;case 6:return 76;case 7:return 12;case 8:return 85;case 9:return 78;case 10:return 9;case 11:return 22;case 12:return 45;case 13:return 50;case 14:return 32;case 15:return 58;case 16:return 79;case 17:return 80;case 18:return 25;case 19:return 46;case 20:return 29;case 21:return 81;case 22:return 77;case 23:return 61;case 24:return 95;case 25:return 94;case 26:return 23;case 27:return 24;case 28:return 26;case 29:return 28;case 30:return 55;case 31:return 56;case 32:return 16;case 33:return"|";case 34:return 14;case 35:return 69;case 36:return 5;case 37:return 35;case 38:return 38;case 39:return 18;case 40:return 36;case 41:return 37;case 42:return 34;case 43:return 39;case 44:return 11;case 45:return 71;case 46:return 90;case 47:return 52;case 48:return"_";case 49:return 41;case 50:return 42;case 51:return 43;case 52:return 44;case 53:return 62;case 54:return 10}},rules:[/^(?:\s+)/,/^(?:\/\/.*)/,/^(?:and\b)/,/^(?:any\b)/,/^(?:array\b)/,/^(?:as\b)/,/^(?:boolean\b)/,/^(?:def\b)/,/^(?:enum\b)/,/^(?:false\b)/,/^(?:let\b)/,/^(?:map\b)/,/^(?:mod\b)/,/^(?:not\b)/,/^(?:or\b)/,/^(?:null\b)/,/^(?:number\b)/,/^(?:object\b)/,/^(?:patterns\b)/,/^(?:pow\b)/,/^(?:sequences\b)/,/^(?:string\b)/,/^(?:true\b)/,/^(?:undefined\b)/,/^(?:[-+]?(0|[1-9]\d*)(\.\d+)?)/,/^(?:"[^"\r\n]*")/,/^(?:\()/,/^(?:\))/,/^(?:{)/,/^(?:})/,/^(?:\[)/,/^(?:\])/,/^(?:\|>)/,/^(?:\|)/,/^(?:,)/,/^(?::)/,/^(?:;)/,/^(?:<=)/,/^(?:>=)/,/^(?:=~)/,/^(?:==)/,/^(?:!=)/,/^(?:<)/,/^(?:>)/,/^(?:=)/,/^(?:\.{3})/,/^(?:\.{2})/,/^(?:\.)/,/^(?:_)/,/^(?:\+)/,/^(?:-)/,/^(?:\*)/,/^(?:\/)/,/^(?:\$)/,/^(?:[a-zA-Z_][a-zA-Z0-9_]*)/],conditions:{INITIAL:{rules:[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54],inclusive:!0}}};function De(){this.yy={}}return Le.lexer=$e,De.prototype=Le,Le.Parser=De,new De}();function p(e){return null!==e&&"object"===t(e)}var f=Object.freeze({__proto__:null,typeName:function(e){switch(e){case null:return"null";case void 0:return"undefined";default:return Array.isArray(e)?"array":t(e)}},length:function(e){return Array.isArray(e)?e.length:0},zip:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:void 0,n=[];if(Array.isArray(e)&&e.length>0&&e.every((function(e){return Array.isArray(e)})))for(var r=Math.max.apply(Math,i(e.map((function(e){return e.length})))),a=0;a3&&void 0!==arguments[3]?arguments[3]:void 0,a=e.length,s=[];n=void 0===n?t:n,t=Math.max(1,t),n=Math.max(1,n);for(var i=0;i=2){var l=s(u,2),c=l[0],h=l[1];t[c]=h}}}catch(e){r=!0,a=e}finally{try{n||null==o.return||o.return()}finally{if(r)throw a}}}return t},merge:function(){for(var e=arguments.length,t=new Array(e),n=0;n0&&Array.isArray(t[0])?(r=t[0]).concat.apply(r,i(t.slice(1))):t.every((function(e){return p(e)}))?Object.assign.apply(Object,[{}].concat(t)):void 0}}),x={};function v(e){return null!==e&&"object"===t(e)}var m=function(){function e(){for(var t in n(this,e),this.symbolTable={},this.functions={},this.messages=[],this.verbose=!1,f)this.functions[t]=f[t]}return a(e,[{key:"addFunction",value:function(e,t){this.functions[e]=t}},{key:"addInfo",value:function(e){this.verbose&&this.messages.push({type:"message",level:"info",message:e})}},{key:"addWarning",value:function(e){this.messages.push({type:"message",level:"warning",message:e})}},{key:"addError",value:function(e){this.messages.push({type:"message",level:"error",message:e})}},{key:"execute",value:function(e,t){var n,r=y.parse(e);this.messages=[];var a=!0,s=!1,i=void 0;try{for(var o,u=r[Symbol.iterator]();!(a=(o=u.next()).done);a=!0){var l=o.value;switch(l.type){case"assignment":case"def":case"sequence":if((n=this.executeExpression(l,t,this.symbolTable))===x)return x;break;default:return this.addError("unknown statement type: ".concat(l.type)),x}}}catch(e){s=!0,i=e}finally{try{a||null==u.return||u.return()}finally{if(s)throw i}}return n}},{key:"executeExpression",value:function(e,n,r){var a=this,i=function(s,i){var o=a.executeExpression(e.left,n,r);if(o!==x&&t(o)===s){var u=a.executeExpression(e.right,n,r);if(u!==x&&t(u)===s)return i(o,u)}return x};switch(e.type){case"assignment":var o=this.executeExpression(e.value,n,r);return o===x?(this.addError("Unable to evaluate assignment value for ".concat(e.name)),x):r.hasOwnProperty(e.name)?(this.addError("A symbol in current scope was assigned more than once: ".concat(e.name)),x):(r[e.name]=o,o);case"def":return void(r[e.name]=e.value);case"get-value":if(e.name in r){var u=r[e.name];if(v(u)&&"sequence"===u.type){var l=this.executeExpression(u,n,r);return l===x?(this.addError("Unable to evaluate sequence ".concat(e.name)),x):l}return u}return e.name in this.functions?this.invokeFunction(e.name,[n]):(this.addError("Tried to access unbound symbol: ".concat(e.name)),x);case"get-property":var c=this.executeExpression(e.left,n,r);return v(c)?c[e.right]:x;case"get-index":var h=e.left,y=e.right,p=this.executeExpression(h,n,r);if(Array.isArray(p)){var f=y<0?p.length+y:y;return 0<=f&&f=t}));case"greater_than":return i("number",(function(e,t){return e>t}));case"add":return i("number",(function(e,t){return e+t}));case"subtract":return i("number",(function(e,t){return e-t}));case"multiply":return i("number",(function(e,t){return e*t}));case"divide":return i("number",(function(e,t){return e/t}));case"modulus":return i("number",(function(e,t){return e%t}));case"power":return i("number",(function(e,t){return Math.pow(e,t)}));case"invoke":var F=e.args.reduce((function(e,t){if("spread"===t.type){var s=a.executeExpression(t.expression,n,r);Array.isArray(s)?e=e.concat(s):e.push(s)}else e.push(a.executeExpression(t,n,r));return e}),[]);return e.name in this.functions?this.invokeFunction(e.name,F):(this.addError("Tried to access unbound symbol: ".concat(e.name)),x);case"array":var G=[],Q=!0,H=!1,Z=void 0;try{for(var W,J=e.value[Symbol.iterator]();!(Q=(W=J.next()).done);Q=!0){var K=W.value;if("assignment"===K.type)this.executeExpression(K,n,r);else{var ee=this.executeExpression(K,n,r);if(ee===x)return x;G.push(ee)}}}catch(e){H=!0,Z=e}finally{try{Q||null==J.return||J.return()}finally{if(H)throw Z}}return G;case"boolean":case"null":case"number":case"string":case"undefined":return e.value;case"object":return this.executeObjectExpression(e,n,r);default:return this.addError("Unrecognized expression type: '".concat(e.type,"'")),x}}},{key:"executeObjectExpression",value:function(e,t,n){var r=Object.create(n),a={},s=!0,i=!1,o=void 0;try{for(var u,l=e.value[Symbol.iterator]();!(s=(u=l.next()).done);s=!0){var c=u.value;switch(c.type){case"property":var h=this.executeExpression(c.name,t,r);if(h===x)return x;if("string"!=typeof h)return this.addError("Property names must be string types: ".concat(h)),x;var y=null!==c.value?this.executeExpression(c.value,t,r):n[h];if(y===x)return this.addError("Unable to evaluate value for property ".concat(h)),x;a[h]=y;break;case"assignment":if(this.executeExpression(c,t,r)===x)return x;break;default:return this.addError("Unrecognized object expression element type: ".concat(c.type)),x}}}catch(e){i=!0,o=e}finally{try{s||null==l.return||l.return()}finally{if(i)throw o}}return a}},{key:"executePattern",value:function(e,t,n){switch(e.patternType){case"any":return this.assign(n,e.assignTo,t),t;case"array":return Array.isArray(t)?(this.assign(n,e.assignTo,t),t):x;case"array-pattern":return this.executeArrayPattern(e,t,n)===x?x:n;case"boolean":return"boolean"!=typeof t||null!==e.value&&e.value!==t?x:(this.assign(n,e.assignTo,t),t);case"null":return null===t?(this.assign(n,e.assignTo,t),t):x;case"number":return"number"!=typeof t||null!==e.value&&e.value!==t?x:(this.assign(n,e.assignTo,t),t);case"object":return v(t)?(this.assign(n,e.assignTo,t),t):x;case"object-pattern":if(!1===v(t))return x;var r={},a=!0,s=!1,i=void 0;try{for(var o,u=e.value[Symbol.iterator]();!(a=(o=u.next()).done);a=!0){var l=o.value,c=l.name,h=l.pattern,y=l.assignTo;if(!(c in t))return x;var p=this.executePattern(h,t[c],n);if(p===x)return x;this.assign(n,y,t[c]),this.assign(r,y,p)}}catch(e){s=!0,i=e}finally{try{a||null==u.return||u.return()}finally{if(s)throw i}}return this.assign(n,e.assignTo,t),r;case"reference":if(e.value in this.patterns){var f=this.patterns[e.value],m=this.executePattern(f,t,n);return m!==x&&this.assign(n,e.assignTo,m),m}return x;case"string":return"string"!=typeof t||null!==e.value&&e.value!==t?x:(this.assign(n,e.assignTo,t),t);case"undefined":return void 0===t?(this.assign(n,e.assignTo,t),t):x;default:throw new TypeError("unrecognized pattern type: '".concat(e.type,"'"))}}},{key:"executeArrayPattern",value:function(e,t,n){if(!1===Array.isArray(t))return x;var r=[],a=0,s=!0,i=!1,o=void 0;try{for(var u,l=e.value[Symbol.iterator]();!(s=(u=l.next()).done);s=!0){var c=u.value,h=this.executeArrayPatternElement(c,a,t,n);if(h===x)return x;r=r.concat(h),a+=h.length}}catch(e){i=!0,o=e}finally{try{s||null==l.return||l.return()}finally{if(i)throw o}}return a===t.length?(this.assign(n,e.assignTo,t),r):x}},{key:"executeArrayPatternElement",value:function(e,t,n,r){var a=[];switch(e.type){case"element":var s=this.executeArrayElementPattern(e,t,n,r);if(s===x)return x;a=a.concat(s),t+=s.length;break;case"element-group":var i=this.executeArrayElementGroupPattern(e,t,n,r);if(i===x)return x;a=a.concat(i),t+=i.length;break;default:return this.addError("Unrecognized array pattern element type: '".concat(e.type,"'")),x}return a}},{key:"executeArrayElementPattern",value:function(e,t,n,r){for(var a=e.pattern,s=e.range,i=s.start,o=s.stop,u=[],l=0;l=i)break;return x}o>1?this.pushAssign(r,e.assignTo,h):this.assign(r,e.assignTo,h),u.push(h)}return u}},{key:"executeArrayElementGroupPattern",value:function(e,t,n,r){for(var a=e.elements,s=e.range,i=s.start,o=s.stop,u=[],l=0;l1?this.pushAssign(r,m.assignTo,d[m.assignTo]):this.assign(r,m.assignTo,d[m.assignTo])),u=u.concat(b),t+=b.length,c=c.concat(b)}}catch(e){y=!0,p=e}finally{try{h||null==v.return||v.return()}finally{if(y)throw p}}if(c===x){if(l>=i){if(0===l){this.assign(r,e.assignTo,[]);var g=!0,w=!1,k=void 0;try{for(var E,P=a[Symbol.iterator]();!(g=(E=P.next()).done);g=!0){var A=E.value;this.assign(r,A.assignTo,[])}}catch(e){w=!0,k=e}finally{try{g||null==P.return||P.return()}finally{if(w)throw k}}}return u}return x}o>1?this.pushAssign(r,e.assignTo,c):this.assign(r,e.assignTo,c)}return u}},{key:"invokeFunction",value:function(e,t){var n;return e in this.functions?(n=this.functions)[e].apply(n,i(t)):x}},{key:"assign",value:function(e,t,n){null!=t&&(e.hasOwnProperty(t)&&this.addWarning("Overwriting ".concat(t," with value: ").concat(n)),e[t]=n)}},{key:"pushAssign",value:function(e,t,n){if(null!=t){var r=e.hasOwnProperty(t)?e[t]:[];Array.isArray(r)?(r.push(n),e[t]=r):this.addWarning("Unable to push to ".concat(t," because it is not an array: ").concat(r))}}}]),e}(),d=function(){function e(t,r){n(this,e),this.type=t,this.text=r}return a(e,[{key:"typeis",value:function(e){return this.type===e}}]),e}();d.UNDEFINED=0,d.COMMAND=1,d.NUMBER=2,d.EOD=3;var b=function(){function e(t){n(this,e),null==t&&(t=""),this.setPathData(t)}return a(e,[{key:"setPathData",value:function(e){if("string"!=typeof e)throw new TypeError("The first parameter must be a string");this._pathData=e}},{key:"getNextToken",value:function(){for(var e=null,t=this._pathData;null===e;)if(null===t||""===t)e=new d(d.EOD,"");else if(t.match(/^([ \t\r\n,]+)/))t=t.substr(RegExp.$1.length);else if(t.match(/^([AaCcHhLlMmQqSsTtVvZz])/))e=new d(d.COMMAND,RegExp.$1),t=t.substr(RegExp.$1.length);else{if(!t.match(/^(([-+]?\d+(\.\d*)?|[-+]?\.\d+)([eE][-+]?\d+)?)/))throw new SyntaxError("Unrecognized path data: ".concat(t));e=new d(d.NUMBER,RegExp.$1),t=t.substr(RegExp.$1.length)}return this._pathData=t,e}}]),e}(),g=function(){function e(){n(this,e),this._lexer=new b,this._handler=null}return a(e,[{key:"parseData",value:function(t){if("string"!=typeof t)throw new TypeError("The first parameter must be a string: ".concat(t));null!==this._handler&&"function"==typeof this._handler.beginParse&&this._handler.beginParse();var n=this._lexer;n.setPathData(t);for(var r="BOP",a=null,s=n.getNextToken();!1===s.typeis(d.EOD);){var i=void 0,o=[];switch(s.type){case d.COMMAND:if("BOP"===r&&"M"!==s.text&&"m"!==s.text)throw new SyntaxError("New paths must begin with a moveto command. Found '".concat(s.text,"'"));r=s.text,i=e.PARAMCOUNT[s.text.toUpperCase()],s=n.getNextToken();break;case d.NUMBER:if("BOP"===r)throw new SyntaxError("New paths must begin with a moveto command. Found '".concat(s.text,"'"));i=e.PARAMCOUNT[r.toUpperCase()];break;default:throw new SyntaxError("Unrecognized command type: ".concat(s.type))}for(var u=0;u1){var v=Math.sqrt(x);n*=v,r*=v}var m=n*n,d=r*r,b=m*f,g=d*p,k=(m*d-b-g)/(b+g);Math.abs(k)<1e-6&&(k=0);var E=Math.sqrt(k);s===i&&(E=-E);var P,A,M=e.add(t).multiply(.5),S=E*n*y/r,R=E*-r*h/n,_=(h-S)/n,I=(h+S)/n,T=(y-R)/r,N=(y+R)/r,X=new u(1,0).angleBetween(new u(_,T)),Y=(P=new u(_,T).angleBetween(new u(-I,-N)),(A=P%w)<0?A+w:A);return!1===i&&(Y-=w),[S*o-R*l+M.x,S*l+R*o+M.y,n,r,X,X+Y]}var E=function(){function e(t){n(this,e),this.shapeCreator=t,this.shapes=[],this.firstX=null,this.firstY=null,this.lastX=null,this.lastY=null,this.lastCommand=null}return a(e,[{key:"beginParse",value:function(){this.shapes=[],this.firstX=null,this.firstY=null,this.lastX=null,this.lastY=null,this.lastCommand=null}},{key:"addShape",value:function(e){this.shapes.push(e)}},{key:"arcAbs",value:function(e,t,n,r,a,s,u){if(0===e||0===t)this.addShape(this.shapeCreator.line(this.lastX,this.lastY,s,u));else{var l,c=k(new o(this.lastX,this.lastY),new o(s,u),e,t,n,r,a);this.addShape((l=this.shapeCreator).arc.apply(l,i(c)))}this.lastCommand="A",this.lastX=s,this.lastY=u}},{key:"arcRel",value:function(e,t,n,r,a,s,u){if(0===e||0===t)this.addShape(this.shapeCreator.line(this.lastX,this.lastY,this.lastX+s,this.lastY+u));else{var l,c=k(new o(this.lastX,this.lastY),new o(this.lastX+s,this.lastY+u),e,t,n,r,a);this.addShape((l=this.shapeCreator).arc.apply(l,i(c)))}this.lastCommand="a",this.lastX+=s,this.lastY+=u}},{key:"curvetoCubicAbs",value:function(e,t,n,r,a,s){this.addShape(this.shapeCreator.cubicBezier(this.lastX,this.lastY,e,t,n,r,a,s)),this.lastX=a,this.lastY=s,this.lastCommand="C"}},{key:"curvetoCubicRel",value:function(e,t,n,r,a,s){this.addShape(this.shapeCreator.cubicBezier(this.lastX,this.lastY,this.lastX+e,this.lastY+t,this.lastX+n,this.lastY+r,this.lastX+a,this.lastY+s)),this.lastX+=a,this.lastY+=s,this.lastCommand="c"}},{key:"linetoHorizontalAbs",value:function(e){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,e,this.lastY)),this.lastX=e,this.lastCommand="H"}},{key:"linetoHorizontalRel",value:function(e){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,this.lastX+e,this.lastY)),this.lastX+=e,this.lastCommand="h"}},{key:"linetoAbs",value:function(e,t){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,e,t)),this.lastX=e,this.lastY=t,this.lastCommand="L"}},{key:"linetoRel",value:function(e,t){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,this.lastX+e,this.lastY+t)),this.lastX+=e,this.lastY+=t,this.lastCommand="l"}},{key:"movetoAbs",value:function(e,t){this.firstX=e,this.firstY=t,this.lastX=e,this.lastY=t,this.lastCommand="M"}},{key:"movetoRel",value:function(e,t){this.firstX+=e,this.firstY+=t,this.lastX+=e,this.lastY+=t,this.lastCommand="m"}},{key:"curvetoQuadraticAbs",value:function(e,t,n,r){this.addShape(this.shapeCreator.quadraticBezier(this.lastX,this.lastY,e,t,n,r)),this.lastX=n,this.lastY=r,this.lastCommand="Q"}},{key:"curvetoQuadraticRel",value:function(e,t,n,r){this.addShape(this.shapeCreator.quadraticBezier(this.lastX,this.lastY,this.lastX+e,this.lastY+t,this.lastX+n,this.lastY+r)),this.lastX+=n,this.lastY+=r,this.lastCommand="q"}},{key:"curvetoCubicSmoothAbs",value:function(e,t,n,r){var a,s;if(this.lastCommand.match(/^[SsCc]$/)){var i=this.shapes[this.shapes.length-1].args[2];a=2*this.lastX-i.x,s=2*this.lastY-i.y}else a=this.lastX,s=this.lastY;this.addShape(this.shapeCreator.cubicBezier(this.lastX,this.lastY,a,s,e,t,n,r)),this.lastX=n,this.lastY=r,this.lastCommand="S"}},{key:"curvetoCubicSmoothRel",value:function(e,t,n,r){var a,s;if(this.lastCommand.match(/^[SsCc]$/)){var i=this.shapes[this.shapes.length-1].args[2];a=2*this.lastX-i.x,s=2*this.lastY-i.y}else a=this.lastX,s=this.lastY;this.addShape(this.shapeCreator.cubicBezier(this.lastX,this.lastY,a,s,this.lastX+e,this.lastY+t,this.lastX+n,this.lastY+r)),this.lastX+=n,this.lastY+=r,this.lastCommand="s"}},{key:"curvetoQuadraticSmoothAbs",value:function(e,t){var n,r;if(this.lastCommand.match(/^[QqTt]$/)){var a=this.shapes[this.shapes.length-1].args[1];n=2*this.lastX-a.x,r=2*this.lastY-a.y}else n=this.lastX,r=this.lastY;this.addShape(this.shapeCreator.quadraticBezier(this.lastX,this.lastY,n,r,e,t)),this.lastX=e,this.lastY=t,this.lastCommand="T"}},{key:"curvetoQuadraticSmoothRel",value:function(e,t){var n,r;if(this.lastCommand.match(/^[QqTt]$/)){var a=this.shapes[this.shapes.length-1].args[1];n=2*this.lastX-a.x,r=2*this.lastY-a.y}else n=this.lastX,r=this.lastY;this.addShape(this.shapeCreator.quadraticBezier(this.lastX,this.lastY,n,r,this.lastX+e,this.lastY+t)),this.lastX+=e,this.lastY+=t,this.lastCommand="t"}},{key:"linetoVerticalAbs",value:function(e){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,this.lastX,e)),this.lastY=e,this.lastCommand="V"}},{key:"linetoVerticalRel",value:function(e){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,this.lastX,this.lastY+e)),this.lastY+=e,this.lastCommand="v"}},{key:"closePath",value:function(){this.addShape(this.shapeCreator.line(this.lastX,this.lastY,this.firstX,this.firstY)),this.lastX=this.firstX,this.lastY=this.firstY,this.lastCommand="z"}}]),e}(),P=.5*Math.PI,A=function(){function e(t,r){n(this,e),this.name=t,this.args=r}return a(e,null,[{key:"arc",value:function(){for(var t=arguments.length,n=new Array(t),r=0;r.5*p&&(i=.5*p),s>.5*f&&(s=.5*f);var x=u,v=l,m=u+i,d=l+s,b=h-i,g=y-s,w=h,k=y,E=[e.arc(m,d,i,s,2*P,3*P),e.line(m,v,b,v),e.arc(b,d,i,s,3*P,4*P),e.line(w,d,w,g),e.arc(b,g,i,s,0,P),e.line(b,k,m,k),e.arc(m,g,i,s,P,2*P),e.line(x,g,x,d)];return new e(e.PATH,E)}}]),e}();function M(e,t,n){var r;1===t.length?(t=t[0],r=Array.isArray(t)||"string"==typeof t?e+"Args":e):r=e+"Args";var a=S.execute(r,t);if(a===x)throw new TypeError("".concat(e," is not in a recognizable format: ").concat(JSON.stringify(t)));var s=1===n.length?a[n[0]]:n.map((function(e){return a[e]}));return new A(e,s)}A.ARC="Arc",A.QUADRATIC_BEZIER="Bezier2",A.CUBIC_BEZIER="Bezier3",A.CIRCLE="Circle",A.ELLIPSE="Ellipse",A.LINE="Line",A.PATH="Path",A.POLYGON="Polygon",A.POLYLINE="Polyline",A.RECTANGLE="Rectangle";var S=new m;S.execute('\ndef Center =\n patterns {\n { center: { x: number as x, y: number as y } },\n { center: [ number as x, number as y ] },\n { cx: number as x, cy: number as y },\n { centerX: number as x, centerY: number as y }\n } |> Point2D(x, y);\n\ndef Radii =\n patterns {\n { radii: { x: number as rx, y: number as ry } },\n { radii: [ number as rx, number as ry ] },\n { rx: number as rx, ry: number as ry },\n { radiusX: number as rx, radiusY: number as ry }\n } |> { "rx", "ry" };\n\ndef P1 =\n patterns {\n { p1: { x: number as x, y: number as y } },\n { p1: [ number as x, number as y ] },\n { p1x: number as x, p1y: number as y }\n } |> Point2D(x, y);\n \ndef P2 =\n patterns {\n { p2: { x: number as x, y: number as y } },\n { p2: [ number as x, number as y ] },\n { p2x: number as x, p2y: number as y }\n } |> Point2D(x, y);\n \ndef P3 =\n patterns {\n { p3: { x: number as x, y: number as y } },\n { p3: [ number as x, number as y ] },\n { p3x: number as x, p3y: number as y }\n } |> Point2D(x, y);\n \ndef P4 =\n patterns {\n { p4: { x: number as x, y: number as y } },\n { p4: [ number as x, number as y ] },\n { p4x: number as x, p4y: number as y }\n } |> Point2D(x, y);\n\n \ndef Arc = {\n let radii = Radii,\n\n "center": Center,\n "radiusX": radii.rx,\n "radiusY": radii.ry,\n "startRadians": =~ number,\n "endRadians": =~ number\n};\n\ndef ArcArgs = {\n let elements =\n patterns {\n [ number as centerX, number as centerY, number as radiusX, number as radiusY, number as startRadians, number as endRadians ],\n [ { x: number as centerX, y: number as centerY }, number as radiusX, number as radiusY, number as startRadians, number as endRadians ]\n } |> { "centerX", "centerY", "radiusX", "radiusY", "startRadians", "endRadians" },\n \n "center": Point2D(elements.centerX, elements.centerY),\n "radiusX": elements.radiusX,\n "radiusY": elements.radiusY,\n "startRadians": elements.startRadians,\n "endRadians": elements.endRadians\n};\n\ndef Bezier2 = {\n "p1": P1,\n "p2": P2,\n "p3": P3\n};\n\ndef Bezier2Args = {\n let elements =\n patterns {\n [ number as p1x, number as p1y, number as p2x, number as p2y, number as p3x, number as p3y ],\n [ { x: number as p1x, y: number as p1y }, { x: number as p2x, y: number as p2y }, { x: number as p3x, y: number as p3y }]\n } |> { "p1x", "p1y", "p2x", "p2y", "p3x", "p3y" },\n \n "p1": Point2D(elements.p1x, elements.p1y),\n "p2": Point2D(elements.p2x, elements.p2y),\n "p3": Point2D(elements.p3x, elements.p3y)\n};\n\ndef Bezier3 = {\n "p1": P1,\n "p2": P2,\n "p3": P3,\n "p4": P4\n};\n\ndef Bezier3Args = {\n let elements =\n patterns {\n [ number as p1x, number as p1y, number as p2x, number as p2y, number as p3x, number as p3y, number as p4x, number as p4y ],\n [ { x: number as p1x, y: number as p1y }, { x: number as p2x, y: number as p2y }, { x: number as p3x, y: number as p3y }, { x: number as p4x, y: number as p4y }]\n } |> { "p1x", "p1y", "p2x", "p2y", "p3x", "p3y", "p4x", "p4y" },\n \n "p1": Point2D(elements.p1x, elements.p1y),\n "p2": Point2D(elements.p2x, elements.p2y),\n "p3": Point2D(elements.p3x, elements.p3y),\n "p4": Point2D(elements.p4x, elements.p4y)\n};\n\ndef Circle = {\n "center": Center,\n "radius":\n patterns {\n { r: number as radius},\n { radius: number as radius }\n } |> radius\n};\n\ndef CircleArgs = {\n let elements =\n patterns {\n [ number as centerX, number as centerY, number as radius ],\n [ { x: number as centerX, y: number as centerY }, number as radius ]\n } |> { "centerX", "centerY", "radius" },\n \n "center": Point2D(elements.centerX, elements.centerY),\n "radius": elements.radius\n};\n\ndef Ellipse = {\n let radii = Radii,\n\n "center": Center,\n "radiusX": radii.rx,\n "radiusY": radii.ry\n};\n\ndef EllipseArgs = {\n let elements =\n patterns {\n [ number as centerX, number as centerY, number as radiusX, number as radiusY ],\n [ { x: number as centerX, y: number as centerY }, number as radiusX, number as radiusY ]\n } |> { "centerX", "centerY", "radiusX", "radiusY" },\n \n "center": Point2D(elements.centerX, elements.centerY),\n "radiusX": elements.radiusX,\n "radiusY": elements.radiusY\n};\n\ndef Line = {\n "p1": P1,\n "p2": P2\n};\n\ndef LineArgs = {\n let elements =\n patterns {\n [ number as p1x, number as p1y, number as p2x, number as p2y ],\n [ { x: number as p1x, y: number as p1y }, { x: number as p2x, y: number as p2y } ]\n } |> { "p1x", "p1y", "p2x", "p2y" },\n \n "p1": Point2D(elements.p1x, elements.p1y),\n "p2": Point2D(elements.p2x, elements.p2y)\n};\n\ndef Path = {\n "segments":\n =~ { d: string as data } |> PathData(data)\n};\n\ndef PathArgs = {\n "segments":\n =~ string as data |> PathData(data)\n};\n\ndef Polygon = {\n "points":\n sequences {\n =~ { points: [ (number, number); 0.. as coords ] }\n |> [ map(coords, Point2D(...$)) ],\n\n =~ { points: [ { x: number, y: number }; 0.. ] as points }\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef PolygonArgs = {\n "points":\n sequences {\n =~ [ (number, number); 0.. as coords ]\n |> [ map(coords, Point2D(...$)) ],\n\n =~ [ { x: number, y: number }; 0.. ] as points\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef Polyline = {\n "points":\n sequences {\n =~ { points: [ (number, number); 0.. as coords ] }\n |> [ map(coords, Point2D(...$)) ],\n\n =~ { points: [ { x: number, y: number }; 0.. ] as points }\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef PolylineArgs = {\n "points":\n sequences {\n =~ [ (number, number); 0.. as coords ]\n |> [ map(coords, Point2D(...$)) ],\n\n =~ [ { x: number, y: number }; 0.. ] as points\n |> [ map(points, Point2D($.x, $.y)) ]\n }\n};\n\ndef Rectangle = {\n let topLeft =\n patterns {\n { topLeft: { x: number as x, y: number as y } },\n { topLeft: [ number as x, number as y ] },\n { x: number as x, y: number as y },\n { top: number as x, left: number as y }\n } |> { "x", "y" },\n\n "topLeft":\n Point2D(topLeft.x, topLeft.y),\n\n "bottomRight":\n sequences {\n patterns {\n { bottomRight: { x: number as x, y: number as y } },\n { bottomRight: [ number as x, number as y ] }\n } |> Point2D(x, y),\n patterns {\n { w: number as w, h: number as h },\n { width: number as w, height: number as h },\n { size: { x: number as w, y: number as h } },\n { size: [ number as w, number as h ] }\n } |> Point2D(topLeft.x + w, topLeft.y + h)\n },\n\n "rx":\n sequences {\n =~ { rx: number as rx } |> rx,\n =~ any |> 0\n },\n "ry":\n sequences {\n =~ { ry: number as ry } |> ry,\n =~ any |> 0\n }\n};\n\ndef RectangleArgs = {\n let elements =\n patterns {\n [ number as x, number as y, number as width, number as height ],\n [ number as x, number as y, number as width, number as height, number as rx, number as ry ],\n [ { x: number as x, y: number as y }, { x: number as width, y: number as height } ],\n [ { x: number as x, y: number as y }, { x: number as width, y: number as height }, { rx: number as rx, ry: number as ry } ],\n [ { x: number as x, y: number as y }, { x: number as width, y: number as height }, { radiusX: number as rx, radiusY: number as ry } ]\n } |> { "x", "y", "width", "height", "rx", "ry" },\n\n "topLeft": Point2D(elements.x, elements.y),\n "bottomRight": Point2D(elements.x + elements.width, elements.y + elements.height),\n "rx": elements.rx,\n "ry": elements.ry\n}\n'),S.addFunction("Point2D",(function(e,t){return new o(e,t)})),S.addFunction("PathData",(function(e){var t=new g,n=new E(A);return t.setHandler(n),t.parseData(e),n.shapes}));var R=2*Math.PI,_=new u(1,0);function I(e){return null==e}function T(e){var t=e%R;return t<0?t+R:t}function N(e,t,n,r,a,s){if(0===e.points.length)return e;var i=new Y("No Intersection"),o=T(a),l=T(s);l0&&(i.status="Intersection"),i}function X(e){var t=e.slice();return t.push(e[0]),t}var Y=function(){function e(t){n(this,e),this.init(t)}return a(e,[{key:"init",value:function(e){this.status=e,this.points=[]}},{key:"appendPoint",value:function(e){this.points.push(e)}},{key:"appendPoints",value:function(e){this.points=this.points.concat(e)}}],[{key:"intersect",value:function(t,n){var r;if(I(t)||I(n))r=new e("No Intersection");else if("Path"===t.name)r=e.intersectPathShape(t,n);else if("Path"===n.name)r=e.intersectPathShape(n,t);else if("Arc"===t.name)r=e.intersectArcShape(t,n);else if("Arc"===n.name)r=e.intersectArcShape(n,t);else{var a,s;if(t.name0&&(r.status="Intersection"),r}},{key:"intersectArcShape",value:function(t,n){var r=s(t.args,5),a=r[0],i=r[1],o=r[2],u=r[3],l=r[4],c=new A(A.ELLIPSE,[a,i,o]);return N(e.intersect(c,n),a,0,0,u,l)}},{key:"intersectBezier2Bezier2",value:function(t,n,r,a,s,i){var u,l,c=new e("No Intersection");u=n.multiply(-2);var y=t.add(u.add(r));u=t.multiply(-2),l=n.multiply(2);var p=u.add(l),f=new o(t.x,t.y);u=s.multiply(-2);var x=a.add(u.add(i));u=a.multiply(-2),l=s.multiply(2);var v=u.add(l),m=new o(a.x,a.y);u=y.x*p.y-p.x*y.y,l=x.x*p.y-p.x*x.y;var d=v.x*p.y-p.x*v.y,b=p.x*(f.y-m.y)+p.y*(-f.x+m.x),g=x.x*y.y-y.x*x.y,w=v.x*y.y-y.x*v.y,k=y.x*(f.y-m.y)+y.y*(-f.x+m.x),E=new h(-g*g,-2*g*w,u*l-w*w-2*g*k,u*d-2*w*k,u*b-k*k).getRoots(),P=!0,A=!1,M=void 0;try{for(var S,R=E[Symbol.iterator]();!(P=(S=R.next()).done);P=!0){var _=S.value;if(0<=_&&_<=1){var I=new h(y.x,p.x,f.x-m.x-_*v.x-_*_*x.x);I.simplifyEquals();var T=I.getRoots(),N=new h(y.y,p.y,f.y-m.y-_*v.y-_*_*x.y);N.simplifyEquals();var X=N.getRoots();if(T.length>0&&X.length>0){var Y=!0,C=!1,L=void 0;try{e:for(var $,D=T[Symbol.iterator]();!(Y=($=D.next()).done);Y=!0){var z=$.value;if(0<=z&&z<=1){var B=!0,O=!1,q=void 0;try{for(var j,U=X[Symbol.iterator]();!(B=(j=U.next()).done);B=!0){var V=j.value;if(Math.abs(z-V)<1e-4){c.points.push(x.multiply(_*_).add(v.multiply(_).add(m)));break e}}}catch(e){O=!0,q=e}finally{try{B||null==U.return||U.return()}finally{if(O)throw q}}}}}catch(e){C=!0,L=e}finally{try{Y||null==D.return||D.return()}finally{if(C)throw L}}}}}}catch(e){A=!0,M=e}finally{try{P||null==R.return||R.return()}finally{if(A)throw M}}return c.points.length>0&&(c.status="Intersection"),c}},{key:"intersectBezier2Bezier3",value:function(t,n,r,a,s,i,u){var l,c,y,p,f=new e("No Intersection");l=n.multiply(-2);var x=t.add(l.add(r));l=t.multiply(-2),c=n.multiply(2);var v=l.add(c),m=new o(t.x,t.y);l=a.multiply(-1),c=s.multiply(3),y=i.multiply(-3),p=l.add(c.add(y.add(u)));var d=new o(p.x,p.y);l=a.multiply(3),c=s.multiply(-6),y=i.multiply(3),p=l.add(c.add(y));var b=new o(p.x,p.y);l=a.multiply(-3),c=s.multiply(3),y=l.add(c);var g=new o(y.x,y.y),w=new o(a.x,a.y),k=m.x*m.x,E=m.y*m.y,P=v.x*v.x,A=v.y*v.y,M=x.x*x.x,S=x.y*x.y,R=w.x*w.x,_=w.y*w.y,I=g.x*g.x,T=g.y*g.y,N=b.x*b.x,X=b.y*b.y,Y=d.x*d.x,C=d.y*d.y,L=new h(-2*x.x*x.y*d.x*d.y+M*C+S*Y,-2*x.x*x.y*b.x*d.y-2*x.x*x.y*b.y*d.x+2*S*b.x*d.x+2*M*b.y*d.y,-2*x.x*g.x*x.y*d.y-2*x.x*x.y*g.y*d.x-2*x.x*x.y*b.x*b.y+2*g.x*S*d.x+S*N+M*(2*g.y*d.y+X),2*m.x*x.x*x.y*d.y+2*m.y*x.x*x.y*d.x+v.x*v.y*x.x*d.y+v.x*v.y*x.y*d.x-2*w.x*x.x*x.y*d.y-2*x.x*w.y*x.y*d.x-2*x.x*g.x*x.y*b.y-2*x.x*x.y*g.y*b.x-2*m.x*S*d.x-2*m.y*M*d.y+2*w.x*S*d.x+2*g.x*S*b.x-A*x.x*d.x-P*x.y*d.y+M*(2*w.y*d.y+2*g.y*b.y),2*m.x*x.x*x.y*b.y+2*m.y*x.x*x.y*b.x+v.x*v.y*x.x*b.y+v.x*v.y*x.y*b.x-2*w.x*x.x*x.y*b.y-2*x.x*w.y*x.y*b.x-2*x.x*g.x*x.y*g.y-2*m.x*S*b.x-2*m.y*M*b.y+2*w.x*S*b.x-A*x.x*b.x-P*x.y*b.y+I*S+M*(2*w.y*b.y+T),2*m.x*x.x*x.y*g.y+2*m.y*x.x*g.x*x.y+v.x*v.y*x.x*g.y+v.x*v.y*g.x*x.y-2*w.x*x.x*x.y*g.y-2*x.x*w.y*g.x*x.y-2*m.x*g.x*S-2*m.y*M*g.y+2*w.x*g.x*S-A*x.x*g.x-P*x.y*g.y+2*M*w.y*g.y,-2*m.x*m.y*x.x*x.y-m.x*v.x*v.y*x.y-m.y*v.x*v.y*x.x+2*m.x*x.x*w.y*x.y+2*m.y*w.x*x.x*x.y+v.x*w.x*v.y*x.y+v.x*v.y*x.x*w.y-2*w.x*x.x*w.y*x.y-2*m.x*w.x*S+m.x*A*x.x+m.y*P*x.y-2*m.y*M*w.y-w.x*A*x.x-P*w.y*x.y+k*S+E*M+R*S+M*_).getRootsInInterval(0,1),$=!0,D=!1,z=void 0;try{for(var B,O=L[Symbol.iterator]();!($=(B=O.next()).done);$=!0){var q=B.value,j=new h(x.x,v.x,m.x-w.x-q*g.x-q*q*b.x-q*q*q*d.x).getRoots(),U=new h(x.y,v.y,m.y-w.y-q*g.y-q*q*b.y-q*q*q*d.y).getRoots();if(j.length>0&&U.length>0){var V=!0,F=!1,G=void 0;try{e:for(var Q,H=j[Symbol.iterator]();!(V=(Q=H.next()).done);V=!0){var Z=Q.value;if(0<=Z&&Z<=1){var W=!0,J=!1,K=void 0;try{for(var ee,te=U[Symbol.iterator]();!(W=(ee=te.next()).done);W=!0){var ne=ee.value;if(Math.abs(Z-ne)<1e-4){f.points.push(d.multiply(q*q*q).add(b.multiply(q*q).add(g.multiply(q).add(w))));break e}}}catch(e){J=!0,K=e}finally{try{W||null==te.return||te.return()}finally{if(J)throw K}}}}}catch(e){F=!0,G=e}finally{try{V||null==H.return||H.return()}finally{if(F)throw G}}}}}catch(e){D=!0,z=e}finally{try{$||null==O.return||O.return()}finally{if(D)throw z}}return f.points.length>0&&(f.status="Intersection"),f}},{key:"intersectBezier2Circle",value:function(t,n,r,a,s){return e.intersectBezier2Ellipse(t,n,r,a,s,s)}},{key:"intersectBezier2Ellipse",value:function(t,n,r,a,s,i){var u,l=new e("No Intersection");u=n.multiply(-2);var c=t.add(u.add(r));u=t.multiply(-2);var y=n.multiply(2),p=u.add(y),f=new o(t.x,t.y),x=s*s,v=i*i,m=new h(v*c.x*c.x+x*c.y*c.y,2*(v*c.x*p.x+x*c.y*p.y),v*(2*c.x*f.x+p.x*p.x)+x*(2*c.y*f.y+p.y*p.y)-2*(v*a.x*c.x+x*a.y*c.y),2*(v*p.x*(f.x-a.x)+x*p.y*(f.y-a.y)),v*(f.x*f.x+a.x*a.x)+x*(f.y*f.y+a.y*a.y)-2*(v*a.x*f.x+x*a.y*f.y)-x*v).getRoots(),d=!0,b=!1,g=void 0;try{for(var w,k=m[Symbol.iterator]();!(d=(w=k.next()).done);d=!0){var E=w.value;0<=E&&E<=1&&l.points.push(c.multiply(E*E).add(p.multiply(E).add(f)))}}catch(e){b=!0,g=e}finally{try{d||null==k.return||k.return()}finally{if(b)throw g}}return l.points.length>0&&(l.status="Intersection"),l}},{key:"intersectBezier2Line",value:function(t,n,r,a,s){var i,l=a.min(s),c=a.max(s),y=new e("No Intersection");i=n.multiply(-2);var p=t.add(i.add(r));i=t.multiply(-2);var f=n.multiply(2),x=i.add(f),v=new o(t.x,t.y),m=new u(a.y-s.y,s.x-a.x),d=a.x*s.y-s.x*a.y,b=new h(m.dot(p),m.dot(x),m.dot(v)+d).getRoots(),g=!0,w=!1,k=void 0;try{for(var E,P=b[Symbol.iterator]();!(g=(E=P.next()).done);g=!0){var A=E.value;if(0<=A&&A<=1){var M=t.lerp(n,A),S=n.lerp(r,A),R=M.lerp(S,A);a.x===s.x?l.y<=R.y&&R.y<=c.y&&(y.status="Intersection",y.appendPoint(R)):a.y===s.y?l.x<=R.x&&R.x<=c.x&&(y.status="Intersection",y.appendPoint(R)):l.x<=R.x&&R.x<=c.x&&l.y<=R.y&&R.y<=c.y&&(y.status="Intersection",y.appendPoint(R))}}}catch(e){w=!0,k=e}finally{try{g||null==P.return||P.return()}finally{if(w)throw k}}return y}},{key:"intersectBezier2Polygon",value:function(t,n,r,a){return e.intersectBezier2Polyline(t,n,r,X(a))}},{key:"intersectBezier2Polyline",value:function(t,n,r,a){for(var s=new e("No Intersection"),i=a.length,o=0;o0&&(s.status="Intersection"),s}},{key:"intersectBezier2Rectangle",value:function(t,n,r,a,s){var i=a.min(s),u=a.max(s),l=new o(u.x,i.y),c=new o(i.x,u.y),h=e.intersectBezier2Line(t,n,r,i,l),y=e.intersectBezier2Line(t,n,r,l,u),p=e.intersectBezier2Line(t,n,r,u,c),f=e.intersectBezier2Line(t,n,r,c,i),x=new e("No Intersection");return x.appendPoints(h.points),x.appendPoints(y.points),x.appendPoints(p.points),x.appendPoints(f.points),x.points.length>0&&(x.status="Intersection"),x}},{key:"intersectBezier3Bezier3",value:function(t,n,r,a,s,i,u,l){var c,y,p,f,x=new e("No Intersection");c=t.multiply(-1),y=n.multiply(3),p=r.multiply(-3),f=c.add(y.add(p.add(a)));var v=new o(f.x,f.y);c=t.multiply(3),y=n.multiply(-6),p=r.multiply(3),f=c.add(y.add(p));var m=new o(f.x,f.y);c=t.multiply(-3),y=n.multiply(3),p=c.add(y);var d=new o(p.x,p.y),b=new o(t.x,t.y);c=s.multiply(-1),y=i.multiply(3),p=u.multiply(-3),f=c.add(y.add(p.add(l)));var g=new o(f.x,f.y);c=s.multiply(3),y=i.multiply(-6),p=u.multiply(3),f=c.add(y.add(p));var w=new o(f.x,f.y);c=s.multiply(-3),y=i.multiply(3),p=c.add(y);var k=new o(p.x,p.y),E=new o(s.x,s.y);c=v.x*m.y-m.x*v.y,y=v.x*d.y-d.x*v.y;var P=v.x*b.y-b.x*v.y+E.x*v.y-v.x*E.y,A=k.x*v.y-v.x*k.y,M=w.x*v.y-v.x*w.y,S=g.x*v.y-v.x*g.y;f=v.x*d.y-d.x*v.y;var R=v.x*b.y+m.x*d.y-d.x*m.y-b.x*v.y+E.x*v.y-v.x*E.y,_=k.x*v.y-v.x*k.y,I=w.x*v.y-v.x*w.y,T=g.x*v.y-v.x*g.y,N=m.x*b.y-b.x*m.y+E.x*m.y-m.x*E.y,X=k.x*m.y-m.x*k.y,Y=w.x*m.y-m.x*w.y,C=g.x*m.y-m.x*g.y,L=v.x*b.y-b.x*v.y+E.x*v.y-v.x*E.y,$=k.x*v.y-v.x*k.y,D=w.x*v.y-v.x*w.y,z=g.x*v.y-v.x*g.y,B=m.x*b.y-b.x*m.y+E.x*m.y-m.x*E.y,O=k.x*m.y-m.x*k.y,q=w.x*m.y-m.x*w.y,j=g.x*m.y-m.x*g.y,U=d.x*b.y-b.x*d.y+E.x*d.y-d.x*E.y,V=k.x*d.y-d.x*k.y,F=w.x*d.y-d.x*w.y,G=g.x*d.y-d.x*g.y,Q=new h(-S*T*z,-S*T*D-S*I*z-M*T*z,-S*T*$-S*I*D-M*T*D-S*_*z-M*I*z-A*T*z,-S*T*L-S*I*$-M*T*$-S*_*D-M*I*D-A*T*D-S*R*z-M*_*z-A*I*z-P*T*z+y*C*z+S*f*j-c*C*j+c*T*G,-S*I*L-M*T*L-S*_*$-M*I*$-A*T*$-S*R*D-M*_*D-A*I*D-P*T*D+y*C*D-M*R*z-A*_*z-P*I*z+y*Y*z+S*f*q-c*C*q+M*f*j-c*Y*j+c*T*F+c*I*G,-S*_*L-M*I*L-A*T*L-S*R*$-M*_*$-A*I*$-P*T*$+y*C*$-M*R*D-A*_*D-P*I*D+y*Y*D-A*R*z-P*_*z+y*X*z+S*f*O-c*C*O+M*f*q-c*Y*q+A*f*j-c*X*j+c*T*V+c*I*F+c*_*G,-S*R*L-M*_*L-A*I*L-P*T*L+y*C*L-M*R*$-A*_*$-P*I*$+y*Y*$-A*R*D-P*_*D+y*X*D-P*R*z+y*N*z+S*f*B-c*C*B+M*f*O-c*Y*O+A*f*q-c*X*q+P*f*j-c*N*j+c*T*U+c*I*V+c*_*F-y*f*G+c*R*G,-M*R*L-A*_*L-P*I*L+y*Y*L-A*R*$-P*_*$+y*X*$-P*R*D+y*N*D+M*f*B-c*Y*B+A*f*O-c*X*O+P*f*q-c*N*q+c*I*U+c*_*V-y*f*F+c*R*F,-A*R*L-P*_*L+y*X*L-P*R*$+y*N*$+A*f*B-c*X*B+P*f*O-c*N*O+c*_*U-y*f*V+c*R*V,-P*R*L+y*N*L+P*f*B-c*N*B-y*f*U+c*R*U);Q.simplifyEquals();var H=Q.getRootsInInterval(0,1),Z=!0,W=!1,J=void 0;try{for(var K,ee=H[Symbol.iterator]();!(Z=(K=ee.next()).done);Z=!0){var te=K.value,ne=new h(v.x,m.x,d.x,b.x-E.x-te*k.x-te*te*w.x-te*te*te*g.x);ne.simplifyEquals();var re=ne.getRoots(),ae=new h(v.y,m.y,d.y,b.y-E.y-te*k.y-te*te*w.y-te*te*te*g.y);ae.simplifyEquals();var se=ae.getRoots();if(re.length>0&&se.length>0){var ie=!0,oe=!1,ue=void 0;try{e:for(var le,ce=re[Symbol.iterator]();!(ie=(le=ce.next()).done);ie=!0){var he=le.value;if(0<=he&&he<=1){var ye=!0,pe=!1,fe=void 0;try{for(var xe,ve=se[Symbol.iterator]();!(ye=(xe=ve.next()).done);ye=!0){var me=xe.value;if(Math.abs(he-me)<1e-4){x.points.push(g.multiply(te*te*te).add(w.multiply(te*te).add(k.multiply(te).add(E))));break e}}}catch(e){pe=!0,fe=e}finally{try{ye||null==ve.return||ve.return()}finally{if(pe)throw fe}}}}}catch(e){oe=!0,ue=e}finally{try{ie||null==ce.return||ce.return()}finally{if(oe)throw ue}}}}}catch(e){W=!0,J=e}finally{try{Z||null==ee.return||ee.return()}finally{if(W)throw J}}return x.points.length>0&&(x.status="Intersection"),x}},{key:"intersectBezier3Circle",value:function(t,n,r,a,s,i){return e.intersectBezier3Ellipse(t,n,r,a,s,i,i)}},{key:"intersectBezier3Ellipse",value:function(t,n,r,a,s,i,u){var l,c,y,p,f=new e("No Intersection");l=t.multiply(-1),c=n.multiply(3),y=r.multiply(-3),p=l.add(c.add(y.add(a)));var x=new o(p.x,p.y);l=t.multiply(3),c=n.multiply(-6),y=r.multiply(3),p=l.add(c.add(y));var v=new o(p.x,p.y);l=t.multiply(-3),c=n.multiply(3),y=l.add(c);var m=new o(y.x,y.y),d=new o(t.x,t.y),b=i*i,g=u*u,w=new h(x.x*x.x*g+x.y*x.y*b,2*(x.x*v.x*g+x.y*v.y*b),2*(x.x*m.x*g+x.y*m.y*b)+v.x*v.x*g+v.y*v.y*b,2*x.x*g*(d.x-s.x)+2*x.y*b*(d.y-s.y)+2*(v.x*m.x*g+v.y*m.y*b),2*v.x*g*(d.x-s.x)+2*v.y*b*(d.y-s.y)+m.x*m.x*g+m.y*m.y*b,2*m.x*g*(d.x-s.x)+2*m.y*b*(d.y-s.y),d.x*d.x*g-2*d.y*s.y*b-2*d.x*s.x*g+d.y*d.y*b+s.x*s.x*g+s.y*s.y*b-b*g).getRootsInInterval(0,1),k=!0,E=!1,P=void 0;try{for(var A,M=w[Symbol.iterator]();!(k=(A=M.next()).done);k=!0){var S=A.value;f.points.push(x.multiply(S*S*S).add(v.multiply(S*S).add(m.multiply(S).add(d))))}}catch(e){E=!0,P=e}finally{try{k||null==M.return||M.return()}finally{if(E)throw P}}return f.points.length>0&&(f.status="Intersection"),f}},{key:"intersectBezier3Line",value:function(t,n,r,a,s,i){var o,l,c,y,p=s.min(i),f=s.max(i),x=new e("No Intersection");o=t.multiply(-1),l=n.multiply(3),c=r.multiply(-3),y=o.add(l.add(c.add(a)));var v=new u(y.x,y.y);o=t.multiply(3),l=n.multiply(-6),c=r.multiply(3),y=o.add(l.add(c));var m=new u(y.x,y.y);o=t.multiply(-3),l=n.multiply(3),c=o.add(l);var d=new u(c.x,c.y),b=new u(t.x,t.y),g=new u(s.y-i.y,i.x-s.x),w=s.x*i.y-i.x*s.y,k=new h(g.dot(v),g.dot(m),g.dot(d),g.dot(b)+w).getRoots(),E=!0,P=!1,A=void 0;try{for(var M,S=k[Symbol.iterator]();!(E=(M=S.next()).done);E=!0){var R=M.value;if(0<=R&&R<=1){var _=t.lerp(n,R),I=n.lerp(r,R),T=r.lerp(a,R),N=_.lerp(I,R),X=I.lerp(T,R),Y=N.lerp(X,R);s.x===i.x?p.y<=Y.y&&Y.y<=f.y&&(x.status="Intersection",x.appendPoint(Y)):s.y===i.y?p.x<=Y.x&&Y.x<=f.x&&(x.status="Intersection",x.appendPoint(Y)):p.x<=Y.x&&Y.x<=f.x&&p.y<=Y.y&&Y.y<=f.y&&(x.status="Intersection",x.appendPoint(Y))}}}catch(e){P=!0,A=e}finally{try{E||null==S.return||S.return()}finally{if(P)throw A}}return x}},{key:"intersectBezier3Polygon",value:function(t,n,r,a,s){return e.intersectBezier3Polyline(t,n,r,a,X(s))}},{key:"intersectBezier3Polyline",value:function(t,n,r,a,s){for(var i=new e("No Intersection"),o=s.length,u=0;u0&&(i.status="Intersection"),i}},{key:"intersectBezier3Rectangle",value:function(t,n,r,a,s,i){var u=s.min(i),l=s.max(i),c=new o(l.x,u.y),h=new o(u.x,l.y),y=e.intersectBezier3Line(t,n,r,a,u,c),p=e.intersectBezier3Line(t,n,r,a,c,l),f=e.intersectBezier3Line(t,n,r,a,l,h),x=e.intersectBezier3Line(t,n,r,a,h,u),v=new e("No Intersection");return v.appendPoints(y.points),v.appendPoints(p.points),v.appendPoints(f.points),v.appendPoints(x.points),v.points.length>0&&(v.status="Intersection"),v}},{key:"intersectCircleCircle",value:function(t,n,r,a){var s,i=n+a,u=Math.abs(n-a),l=t.distanceFrom(r);if(l>i)s=new e("Outside");else if(l1)&&(h<0||h>1)?s=new e(c<0&&h<0||c>1&&h>1?"Outside":"Inside"):(s=new e("Intersection"),0<=c&&c<=1&&s.points.push(r.lerp(a,c)),0<=h&&h<=1&&s.points.push(r.lerp(a,h)))}return s}},{key:"intersectCirclePolygon",value:function(t,n,r){return e.intersectCirclePolyline(t,n,X(r))}},{key:"intersectCirclePolyline",value:function(t,n,r){for(var a,s=new e("No Intersection"),i=r.length,o=0;o0?s.status="Intersection":s.status=a.status,s}},{key:"intersectCircleRectangle",value:function(t,n,r,a){var s=r.min(a),i=r.max(a),u=new o(i.x,s.y),l=new o(s.x,i.y),c=e.intersectCircleLine(t,n,s,u),h=e.intersectCircleLine(t,n,u,i),y=e.intersectCircleLine(t,n,i,l),p=e.intersectCircleLine(t,n,l,s),f=new e("No Intersection");return f.appendPoints(c.points),f.appendPoints(h.points),f.appendPoints(y.points),f.appendPoints(p.points),f.points.length>0?f.status="Intersection":f.status=c.status,f}},{key:"intersectEllipseEllipse",value:function(t,n,r,a,s,i){var u,l,c,y,p,f,x,v,m,d,b,g,w,k,E,P=[r*r,0,n*n,-2*r*r*t.x,-2*n*n*t.y,r*r*t.x*t.x+n*n*t.y*t.y-n*n*r*r],A=[i*i,0,s*s,-2*i*i*a.x,-2*s*s*a.y,i*i*a.x*a.x+s*s*a.y*a.y-s*s*i*i],M=(l=A,c=(u=P)[0]*l[1]-l[0]*u[1],y=u[0]*l[2]-l[0]*u[2],p=u[0]*l[3]-l[0]*u[3],f=u[0]*l[4]-l[0]*u[4],x=u[0]*l[5]-l[0]*u[5],v=u[1]*l[2]-l[1]*u[2],m=u[1]*l[4]-l[1]*u[4],d=u[1]*l[5]-l[1]*u[5],b=u[2]*l[3]-l[2]*u[3],g=u[3]*l[4]-l[3]*u[4],w=u[3]*l[5]-l[3]*u[5],new h(c*v-y*y,c*(E=m-b)+p*v-2*y*f,c*(k=d+g)+p*E-f*f-2*y*x,c*w+p*k-2*f*x,p*w-x*x)).getRoots(),S=.001*(P[0]*P[0]+2*P[1]*P[1]+P[2]*P[2]),R=.001*(A[0]*A[0]+2*A[1]*A[1]+A[2]*A[2]),_=new e("No Intersection"),I=!0,T=!1,N=void 0;try{for(var X,Y=M[Symbol.iterator]();!(I=(X=Y.next()).done);I=!0){var C=X.value,L=new h(P[0],P[3]+C*P[1],P[5]+C*(P[4]+C*P[2])).getRoots(),$=!0,D=!1,z=void 0;try{for(var B,O=L[Symbol.iterator]();!($=(B=O.next()).done);$=!0){var q=B.value,j=(P[0]*q+P[1]*C+P[3])*q+(P[2]*C+P[4])*C+P[5];Math.abs(j)0&&(_.status="Intersection"),_}},{key:"intersectEllipseLine",value:function(t,n,r,a,s){var i,o=new u(a.x,a.y),l=u.fromPoints(a,s),c=new u(t.x,t.y),h=o.subtract(c),y=new u(l.x/(n*n),l.y/(r*r)),p=new u(h.x/(n*n),h.y/(r*r)),f=l.dot(y),x=l.dot(p),v=x*x-f*(t=h.dot(p)-1);if(v<0)i=new e("Outside");else if(v>0){var m=Math.sqrt(v),d=(-x-m)/f,b=(-x+m)/f;(d<0||11&&b>1?"Outside":"Inside"):(i=new e("Intersection"),0<=d&&d<=1&&i.appendPoint(a.lerp(s,d)),0<=b&&b<=1&&i.appendPoint(a.lerp(s,b)))}else{var g=-x/f;0<=g&&g<=1?(i=new e("Intersection")).appendPoint(a.lerp(s,g)):i=new e("Outside")}return i}},{key:"intersectEllipsePolygon",value:function(t,n,r,a){return e.intersectEllipsePolyline(t,n,r,X(a))}},{key:"intersectEllipsePolyline",value:function(t,n,r,a){for(var s=new e("No Intersection"),i=a.length,o=0;o0&&(s.status="Intersection"),s}},{key:"intersectEllipseRectangle",value:function(t,n,r,a,s){var i=a.min(s),u=a.max(s),l=new o(u.x,i.y),c=new o(i.x,u.y),h=e.intersectEllipseLine(t,n,r,i,l),y=e.intersectEllipseLine(t,n,r,l,u),p=e.intersectEllipseLine(t,n,r,u,c),f=e.intersectEllipseLine(t,n,r,c,i),x=new e("No Intersection");return x.appendPoints(h.points),x.appendPoints(y.points),x.appendPoints(p.points),x.appendPoints(f.points),x.points.length>0&&(x.status="Intersection"),x}},{key:"intersectLineLine",value:function(t,n,r,a){var s,i=(a.x-r.x)*(t.y-r.y)-(a.y-r.y)*(t.x-r.x),u=(n.x-t.x)*(t.y-r.y)-(n.y-t.y)*(t.x-r.x),l=(a.y-r.y)*(n.x-t.x)-(a.x-r.x)*(n.y-t.y);if(0!==l){var c=i/l,h=u/l;0<=c&&c<=1&&0<=h&&h<=1?(s=new e("Intersection")).points.push(new o(t.x+c*(n.x-t.x),t.y+c*(n.y-t.y))):s=new e("No Intersection")}else s=new e(0===i||0===u?"Coincident":"Parallel");return s}},{key:"intersectLinePolygon",value:function(t,n,r){return e.intersectLinePolyline(t,n,X(r))}},{key:"intersectLinePolyline",value:function(t,n,r){for(var a=new e("No Intersection"),s=r.length,i=0;i0&&(a.status="Intersection"),a}},{key:"intersectLineRectangle",value:function(t,n,r,a){var s=r.min(a),i=r.max(a),u=new o(i.x,s.y),l=new o(s.x,i.y),c=e.intersectLineLine(s,u,t,n),h=e.intersectLineLine(u,i,t,n),y=e.intersectLineLine(i,l,t,n),p=e.intersectLineLine(l,s,t,n),f=new e("No Intersection");return f.appendPoints(c.points),f.appendPoints(h.points),f.appendPoints(y.points),f.appendPoints(p.points),f.points.length>0&&(f.status="Intersection"),f}},{key:"intersectPolygonPolygon",value:function(t,n){return e.intersectPolylinePolyline(X(t),X(n))}},{key:"intersectPolygonPolyline",value:function(t,n){return e.intersectPolylinePolyline(X(t),n)}},{key:"intersectPolygonRectangle",value:function(t,n,r){return e.intersectPolylineRectangle(X(t),n,r)}},{key:"intersectPolylinePolyline",value:function(t,n){for(var r=new e("No Intersection"),a=t.length,s=0;s0&&(r.status="Intersection"),r}},{key:"intersectPolylineRectangle",value:function(t,n,r){var a=n.min(r),s=n.max(r),i=new o(s.x,a.y),u=new o(a.x,s.y),l=e.intersectLinePolyline(a,i,t),c=e.intersectLinePolyline(i,s,t),h=e.intersectLinePolyline(s,u,t),y=e.intersectLinePolyline(u,a,t),p=new e("No Intersection");return p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.appendPoints(y.points),p.points.length>0&&(p.status="Intersection"),p}},{key:"intersectRectangleRectangle",value:function(t,n,r,a){var s=t.min(n),i=t.max(n),u=new o(i.x,s.y),l=new o(s.x,i.y),c=e.intersectLineRectangle(s,u,r,a),h=e.intersectLineRectangle(u,i,r,a),y=e.intersectLineRectangle(i,l,r,a),p=e.intersectLineRectangle(l,s,r,a),f=new e("No Intersection");return f.appendPoints(c.points),f.appendPoints(h.points),f.appendPoints(y.points),f.appendPoints(p.points),f.points.length>0&&(f.status="Intersection"),f}},{key:"intersectRayRay",value:function(t,n,r,a){var s,i=(a.x-r.x)*(t.y-r.y)-(a.y-r.y)*(t.x-r.x),u=(n.x-t.x)*(t.y-r.y)-(n.y-t.y)*(t.x-r.x),l=(a.y-r.y)*(n.x-t.x)-(a.x-r.x)*(n.y-t.y);if(0!==l){var c=i/l;(s=new e("Intersection")).points.push(new o(t.x+c*(n.x-t.x),t.y+c*(n.y-t.y)))}else s=new e(0===i||0===u?"Coincident":"Parallel");return s}}]),e}(),C=function(){function e(){n(this,e)}return a(e,null,[{key:"arc",value:function(e,t,n,r,a,s){return A.arc.apply(A,arguments)}},{key:"quadraticBezier",value:function(e,t,n,r,a,s){return A.quadraticBezier.apply(A,arguments)}},{key:"cubicBezier",value:function(e,t,n,r,a,s,i,o){return A.cubicBezier.apply(A,arguments)}},{key:"circle",value:function(e,t,n){return A.circle.apply(A,arguments)}},{key:"ellipse",value:function(e,t,n,r){return A.ellipse.apply(A,arguments)}},{key:"line",value:function(e,t,n,r){return A.line.apply(A,arguments)}},{key:"path",value:function(e){return A.path.apply(A,arguments)}},{key:"polygon",value:function(e){return A.polygon.apply(A,arguments)}},{key:"polyline",value:function(e){return A.polyline.apply(A,arguments)}},{key:"rectangle",value:function(e,t,n,r){return A.rectangle.apply(A,arguments)}}]),e}(),L=function(){function e(){n(this,e)}return a(e,null,[{key:"arc",value:function(e,t,n,r,a){return A.arc.apply(A,arguments)}},{key:"quadraticBezier",value:function(e,t,n){return A.quadraticBezier.apply(A,arguments)}},{key:"cubicBezier",value:function(e,t,n,r){return A.cubicBezier.apply(A,arguments)}},{key:"circle",value:function(e,t){return A.circle.apply(A,arguments)}},{key:"ellipse",value:function(e,t,n){return A.ellipse.apply(A,arguments)}},{key:"line",value:function(e,t){return A.line.apply(A,arguments)}},{key:"path",value:function(e){return A.path.apply(A,arguments)}},{key:"polygon",value:function(e){return A.polygon.apply(A,arguments)}},{key:"polyline",value:function(e){return A.polyline.apply(A,arguments)}},{key:"rectangle",value:function(e,t){return A.rectangle.apply(A,arguments)}}]),e}(),$=function(){function e(){n(this,e)}return a(e,null,[{key:"circle",value:function(e){if(e instanceof SVGCircleElement==!1)throw new TypeError("Expected SVGCircleElement, but found ".concat(e));var t=new o(e.cx.baseVal.value,e.cy.baseVal.value),n=e.r.baseVal.value;return A.circle(t,n)}},{key:"ellipse",value:function(e){if(e instanceof SVGEllipseElement==!1)throw new TypeError("Expected SVGEllipseElement, but found ".concat(e));var t=new o(e.cx.baseVal.value,e.cy.baseVal.value),n=e.rx.baseVal.value,r=e.ry.baseVal.value;return A.ellipse(t,n,r)}},{key:"line",value:function(e){if(e instanceof SVGLineElement==!1)throw new TypeError("Expected SVGLineElement, but found ".concat(e));var t=new o(e.x1.baseVal.value,e.y1.baseVal.value),n=new o(e.x2.baseVal.value,e.y2.baseVal.value);return A.line(t,n)}},{key:"path",value:function(e){if(e instanceof SVGPathElement==!1)throw new TypeError("Expected SVGPathElement, but found ".concat(e));var t=e.getAttributeNS(null,"d");return A.path(t)}},{key:"polygon",value:function(e){if(e instanceof SVGPolygonElement==!1)throw new TypeError("Expected SVGPolygonElement, but found ".concat(e));for(var t=[],n=0;n\n * [a c e]
\n * [b d f]
\n * [0 0 1]
\n *\n * @param {number} a\n * @param {number} b\n * @param {number} c\n * @param {number} d\n * @param {number} e\n * @param {number} f\n * @returns {module:kld-affine.Matrix2D}\n */\n constructor(a = 1, b = 0, c = 0, d = 1, e = 0, f = 0) {\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n }\n\n /**\n * translation\n *\n * @param {number} tx\n * @param {number} ty\n * @returns {module:kld-affine.Matrix2D}\n */\n static translation(tx, ty) {\n return new Matrix2D(1, 0, 0, 1, tx, ty);\n }\n\n /**\n * scaling\n *\n * @param {number} scale\n * @returns {module:kld-affine.Matrix2D}\n */\n static scaling(scale) {\n return new Matrix2D(scale, 0, 0, scale, 0, 0);\n }\n\n /**\n * scalingAt\n *\n * @param {number} scale\n * @param {module:kld-affine.Point2D} center\n * @returns {module:kld-affine.Matrix2D}\n */\n static scalingAt(scale, center) {\n return new Matrix2D(\n scale,\n 0,\n 0,\n scale,\n center.x - center.x * scale,\n center.y - center.y * scale\n );\n }\n\n /**\n * nonUniformScaling\n *\n * @param {number} scaleX\n * @param {number} scaleY\n * @returns {module:kld-affine.Matrix2D}\n */\n static nonUniformScaling(scaleX, scaleY) {\n return new Matrix2D(scaleX, 0, 0, scaleY, 0, 0);\n }\n\n /**\n * nonUniformScalingAt\n *\n * @param {number} scaleX\n * @param {number} scaleY\n * @param {module:kld-affine.Point2D} center\n * @returns {module:kld-affine.Matrix2D}\n */\n static nonUniformScalingAt(scaleX, scaleY, center) {\n return new Matrix2D(\n scaleX,\n 0,\n 0,\n scaleY,\n center.x - center.x * scaleX,\n center.y - center.y * scaleY\n );\n }\n\n /**\n * rotation\n *\n * @param {number} radians\n * @returns {module:kld-affine.Matrix2D}\n */\n static rotation(radians) {\n const c = Math.cos(radians);\n const s = Math.sin(radians);\n\n return new Matrix2D(c, s, -s, c, 0, 0);\n }\n\n /**\n * rotationAt\n *\n * @param {number} radians\n * @param {module:kld-affine.Point2D} center\n * @returns {module:kld-affine.Matrix2D}\n */\n static rotationAt(radians, center) {\n const c = Math.cos(radians);\n const s = Math.sin(radians);\n\n return new Matrix2D(\n c,\n s,\n -s,\n c,\n center.x - center.x * c + center.y * s,\n center.y - center.y * c - center.x * s\n );\n }\n\n /**\n * rotationFromVector\n *\n * @param {module:kld-affine.Vector2D} vector\n * @returns {module:kld-affine.Matrix2D}\n */\n static rotationFromVector(vector) {\n const unit = vector.unit();\n const c = unit.x; // cos\n const s = unit.y; // sin\n\n return new Matrix2D(c, s, -s, c, 0, 0);\n }\n\n /**\n * xFlip\n *\n * @returns {module:kld-affine.Matrix2D}\n */\n static xFlip() {\n return new Matrix2D(-1, 0, 0, 1, 0, 0);\n }\n\n /**\n * yFlip\n *\n * @returns {module:kld-affine.Matrix2D}\n */\n static yFlip() {\n return new Matrix2D(1, 0, 0, -1, 0, 0);\n }\n\n /**\n * xSkew\n *\n * @param {number} radians\n * @returns {module:kld-affine.Matrix2D}\n */\n static xSkew(radians) {\n const t = Math.tan(radians);\n\n return new Matrix2D(1, 0, t, 1, 0, 0);\n }\n\n /**\n * ySkew\n *\n * @param {number} radians\n * @returns {module:kld-affine.Matrix2D}\n */\n static ySkew(radians) {\n const t = Math.tan(radians);\n\n return new Matrix2D(1, t, 0, 1, 0, 0);\n }\n\n /**\n * multiply\n *\n * @param {module:kld-affine.Matrix2D} that\n * @returns {module:kld-affine.Matrix2D}\n */\n multiply(that) {\n if (this.isIdentity()) {\n return that;\n }\n\n if (that.isIdentity()) {\n return this;\n }\n\n return new this.constructor(\n this.a * that.a + this.c * that.b,\n this.b * that.a + this.d * that.b,\n this.a * that.c + this.c * that.d,\n this.b * that.c + this.d * that.d,\n this.a * that.e + this.c * that.f + this.e,\n this.b * that.e + this.d * that.f + this.f\n );\n }\n\n /**\n * inverse\n *\n * @returns {module:kld-affine.Matrix2D}\n */\n inverse() {\n if (this.isIdentity()) {\n return this;\n }\n\n const det1 = this.a * this.d - this.b * this.c;\n\n if (det1 === 0.0) {\n throw new Error(\"Matrix is not invertible\");\n }\n\n const idet = 1.0 / det1;\n const det2 = this.f * this.c - this.e * this.d;\n const det3 = this.e * this.b - this.f * this.a;\n\n return new this.constructor(\n this.d * idet,\n -this.b * idet,\n -this.c * idet,\n this.a * idet,\n det2 * idet,\n det3 * idet\n );\n }\n\n /**\n * translate\n *\n * @param {number} tx\n * @param {number} ty\n * @returns {module:kld-affine.Matrix2D}\n */\n translate(tx, ty) {\n return new this.constructor(\n this.a,\n this.b,\n this.c,\n this.d,\n this.a * tx + this.c * ty + this.e,\n this.b * tx + this.d * ty + this.f\n );\n }\n\n /**\n * scale\n *\n * @param {number} scale\n * @returns {module:kld-affine.Matrix2D}\n */\n scale(scale) {\n return new this.constructor(\n this.a * scale,\n this.b * scale,\n this.c * scale,\n this.d * scale,\n this.e,\n this.f\n );\n }\n\n /**\n * scaleAt\n *\n * @param {number} scale\n * @param {module:kld-affine.Point2D} center\n * @returns {module:kld-affine.Matrix2D}\n */\n scaleAt(scale, center) {\n const dx = center.x - scale * center.x;\n const dy = center.y - scale * center.y;\n\n return new this.constructor(\n this.a * scale,\n this.b * scale,\n this.c * scale,\n this.d * scale,\n this.a * dx + this.c * dy + this.e,\n this.b * dx + this.d * dy + this.f\n );\n }\n\n /**\n * scaleNonUniform\n *\n * @param {number} scaleX\n * @param {number} scaleY\n * @returns {module:kld-affine.Matrix2D}\n */\n scaleNonUniform(scaleX, scaleY) {\n return new this.constructor(\n this.a * scaleX,\n this.b * scaleX,\n this.c * scaleY,\n this.d * scaleY,\n this.e,\n this.f\n );\n }\n\n /**\n * scaleNonUniformAt\n *\n * @param {number} scaleX\n * @param {number} scaleY\n * @param {module:kld-affine.Point2D} center\n * @returns {module:kld-affine.Matrix2D}\n */\n scaleNonUniformAt(scaleX, scaleY, center) {\n const dx = center.x - scaleX * center.x;\n const dy = center.y - scaleY * center.y;\n\n return new this.constructor(\n this.a * scaleX,\n this.b * scaleX,\n this.c * scaleY,\n this.d * scaleY,\n this.a * dx + this.c * dy + this.e,\n this.b * dx + this.d * dy + this.f\n );\n }\n\n /**\n * rotate\n *\n * @param {number} radians\n * @returns {module:kld-affine.Matrix2D}\n */\n rotate(radians) {\n const c = Math.cos(radians);\n const s = Math.sin(radians);\n\n return new this.constructor(\n this.a * c + this.c * s,\n this.b * c + this.d * s,\n this.a * -s + this.c * c,\n this.b * -s + this.d * c,\n this.e,\n this.f\n );\n }\n\n /**\n * rotateAt\n *\n * @param {number} radians\n * @param {module:kld-affine.Point2D} center\n * @returns {module:kld-affine.Matrix2D}\n */\n rotateAt(radians, center) {\n const cos = Math.cos(radians);\n const sin = Math.sin(radians);\n const cx = center.x;\n const cy = center.y;\n\n const a = this.a * cos + this.c * sin;\n const b = this.b * cos + this.d * sin;\n const c = this.c * cos - this.a * sin;\n const d = this.d * cos - this.b * sin;\n\n return new this.constructor(\n a,\n b,\n c,\n d,\n (this.a - a) * cx + (this.c - c) * cy + this.e,\n (this.b - b) * cx + (this.d - d) * cy + this.f\n );\n }\n\n /**\n * rotateFromVector\n *\n * @param {module:kld-affine.Vector2D} vector\n * @returns {module:kld-affine.Matrix2D}\n */\n rotateFromVector(vector) {\n const unit = vector.unit();\n const c = unit.x; // cos\n const s = unit.y; // sin\n\n return new this.constructor(\n this.a * c + this.c * s,\n this.b * c + this.d * s,\n this.a * -s + this.c * c,\n this.b * -s + this.d * c,\n this.e,\n this.f\n );\n }\n\n /**\n * flipX\n *\n * @returns {module:kld-affine.Matrix2D}\n */\n flipX() {\n return new this.constructor(\n -this.a,\n -this.b,\n this.c,\n this.d,\n this.e,\n this.f\n );\n }\n\n /**\n * flipY\n *\n * @returns {module:kld-affine.Matrix2D}\n */\n flipY() {\n return new this.constructor(\n this.a,\n this.b,\n -this.c,\n -this.d,\n this.e,\n this.f\n );\n }\n\n /**\n * skewX\n *\n * @param {number} radians\n * @returns {module:kld-affine.Matrix2D}\n */\n skewX(radians) {\n const t = Math.tan(radians);\n\n return new this.constructor(\n this.a,\n this.b,\n this.c + this.a * t,\n this.d + this.b * t,\n this.e,\n this.f\n );\n }\n\n // TODO: skewXAt\n\n /**\n * skewY\n *\n * @param {number} radians\n * @returns {module:kld-affine.Matrix2D}\n */\n skewY(radians) {\n const t = Math.tan(radians);\n\n return new this.constructor(\n this.a + this.c * t,\n this.b + this.d * t,\n this.c,\n this.d,\n this.e,\n this.f\n );\n }\n\n // TODO: skewYAt\n\n /**\n * isIdentity\n *\n * @returns {boolean}\n */\n isIdentity() {\n return (\n this.a === 1.0 &&\n this.b === 0.0 &&\n this.c === 0.0 &&\n this.d === 1.0 &&\n this.e === 0.0 &&\n this.f === 0.0\n );\n }\n\n /**\n * isInvertible\n *\n * @returns {boolean}\n */\n isInvertible() {\n return this.a * this.d - this.b * this.c !== 0.0;\n }\n\n /**\n * getScale\n *\n * @returns {{ scaleX: number, scaleY: number }}\n */\n getScale() {\n return {\n scaleX: Math.sqrt(this.a * this.a + this.c * this.c),\n scaleY: Math.sqrt(this.b * this.b + this.d * this.d)\n };\n }\n\n /**\n * Calculates matrix Singular Value Decomposition\n *\n * The resulting matrices — translation, rotation, scale, and rotation0 — return\n * this matrix when they are multiplied together in the listed order\n *\n * @see Jim Blinn's article {@link http://dx.doi.org/10.1109/38.486688}\n * @see {@link http://math.stackexchange.com/questions/861674/decompose-a-2d-arbitrary-transform-into-only-scaling-and-rotation}\n *\n * @returns {{\n * translation: module:kld-affine.Matrix2D,\n * rotation: module:kld-affine.Matrix2D,\n * scale: module:kld-affine.Matrix2D,\n * rotation0: module:kld-affine.Matrix2D\n * }}\n */\n getDecomposition() {\n const E = (this.a + this.d) * 0.5;\n const F = (this.a - this.d) * 0.5;\n const G = (this.b + this.c) * 0.5;\n const H = (this.b - this.c) * 0.5;\n\n const Q = Math.sqrt(E * E + H * H);\n const R = Math.sqrt(F * F + G * G);\n const scaleX = Q + R;\n const scaleY = Q - R;\n\n const a1 = Math.atan2(G, F);\n const a2 = Math.atan2(H, E);\n const theta = (a2 - a1) * 0.5;\n const phi = (a2 + a1) * 0.5;\n\n return {\n translation: this.constructor.translation(this.e, this.f),\n rotation: this.constructor.rotation(phi),\n scale: this.constructor.nonUniformScaling(scaleX, scaleY),\n rotation0: this.constructor.rotation(theta)\n };\n }\n\n /**\n * equals\n *\n * @param {module:kld-affine.Matrix2D} that\n * @returns {boolean}\n */\n equals(that) {\n return (\n this.a === that.a &&\n this.b === that.b &&\n this.c === that.c &&\n this.d === that.d &&\n this.e === that.e &&\n this.f === that.f\n );\n }\n\n /**\n * precisionEquals\n *\n * @param {module:kld-affine.Matrix2D} that\n * @param {number} precision\n * @returns {boolean}\n */\n precisionEquals(that, precision) {\n return (\n Math.abs(this.a - that.a) < precision &&\n Math.abs(this.b - that.b) < precision &&\n Math.abs(this.c - that.c) < precision &&\n Math.abs(this.d - that.d) < precision &&\n Math.abs(this.e - that.e) < precision &&\n Math.abs(this.f - that.f) < precision\n );\n }\n\n /**\n * toString\n *\n * @returns {string}\n */\n toString() {\n return `matrix(${this.a},${this.b},${this.c},${this.d},${this.e},${this.f})`;\n }\n}\n\n/**\n * Identity matrix\n *\n * @returns {module:kld-affine.Matrix2D}\n */\nMatrix2D.IDENTITY = new Matrix2D();\nMatrix2D.IDENTITY.isIdentity = () => true;\n\n\nexport default Matrix2D;\n","/* eslint-disable camelcase */\n/**\n * Polynomial.js\n *\n * @module Polynomial\n * @copyright 2002-2019 Kevin Lindsey
\n * -
\n * Contribution {@link http://github.com/Quazistax/kld-polynomial}
\n * copyright 2015 Robert Benko (Quazistax)
\n * MIT license\n */\n\n/**\n * Sign of a number (+1, -1, +0, -0).\n *\n * @param {number} x\n * @returns {number}\n */\nfunction sign(x) {\n // eslint-disable-next-line no-self-compare\n return typeof x === \"number\" ? x ? x < 0 ? -1 : 1 : x === x ? x : NaN : NaN;\n}\n\n/**\n * Polynomial\n *\n * @memberof module:kld-polynomial\n */\nclass Polynomial {\n /**\n * Polynomial\n *\n * @param {Array} coefs\n * @returns {module:kld-polynomial.Polynomial}\n */\n constructor(...coefs) {\n this.coefs = [];\n\n for (let i = coefs.length - 1; i >= 0; i--) {\n this.coefs.push(coefs[i]);\n }\n\n this._variable = \"t\";\n this._s = 0;\n }\n\n /**\n * Based on polint in \"Numerical Recipes in C, 2nd Edition\", pages 109-110\n *\n * @param {Array} xs\n * @param {Array} ys\n * @param {number} n\n * @param {number} offset\n * @param {number} x\n *\n * @returns {{y: number, dy: number}}\n */\n static interpolate(xs, ys, n, offset, x) {\n if (xs.constructor !== Array || ys.constructor !== Array) {\n throw new TypeError(\"xs and ys must be arrays\");\n }\n if (isNaN(n) || isNaN(offset) || isNaN(x)) {\n throw new TypeError(\"n, offset, and x must be numbers\");\n }\n\n let i, y;\n let dy = 0;\n const c = new Array(n);\n const d = new Array(n);\n let ns = 0;\n\n let diff = Math.abs(x - xs[offset]);\n\n for (i = 0; i < n; i++) {\n const dift = Math.abs(x - xs[offset + i]);\n\n if (dift < diff) {\n ns = i;\n diff = dift;\n }\n c[i] = d[i] = ys[offset + i];\n }\n\n y = ys[offset + ns];\n ns--;\n\n for (let m = 1; m < n; m++) {\n for (i = 0; i < n - m; i++) {\n const ho = xs[offset + i] - x;\n const hp = xs[offset + i + m] - x;\n const w = c[i + 1] - d[i];\n let den = ho - hp;\n\n if (den === 0.0) {\n throw new RangeError(\"Unable to interpolate polynomial. Two numbers in n were identical (to within roundoff)\");\n }\n\n den = w / den;\n d[i] = hp * den;\n c[i] = ho * den;\n }\n\n dy = (2 * (ns + 1) < (n - m)) ? c[ns + 1] : d[ns--];\n y += dy;\n }\n\n return {y, dy};\n }\n\n /**\n * Newton's (Newton-Raphson) method for finding Real roots on univariate function.
\n * When using bounds, algorithm falls back to secant if newton goes out of range.\n * Bisection is fallback for secant when determined secant is not efficient enough.\n * @see {@link http://en.wikipedia.org/wiki/Newton%27s_method}\n * @see {@link http://en.wikipedia.org/wiki/Secant_method}\n * @see {@link http://en.wikipedia.org/wiki/Bisection_method}\n *\n * @param {number} x0 - Initial root guess\n * @param {Function} f - Function which root we are trying to find\n * @param {Function} df - Derivative of function f\n * @param {number} max_iterations - Maximum number of algorithm iterations\n * @param {number} [min] - Left bound value\n * @param {number} [max] - Right bound value\n * @returns {number} root\n */\n static newtonSecantBisection(x0, f, df, max_iterations, min, max) {\n let x, prev_dfx = 0, dfx, prev_x_ef_correction = 0, x_correction, x_new;\n let y, y_atmin, y_atmax;\n\n x = x0;\n\n const ACCURACY = 14;\n const min_correction_factor = Math.pow(10, -ACCURACY);\n const isBounded = (typeof min === \"number\" && typeof max === \"number\");\n\n if (isBounded) {\n if (min > max) {\n throw new RangeError(\"Min must be greater than max\");\n }\n\n y_atmin = f(min);\n y_atmax = f(max);\n\n if (sign(y_atmin) === sign(y_atmax)) {\n throw new RangeError(\"Y values of bounds must be of opposite sign\");\n }\n }\n\n const isEnoughCorrection = function() {\n // stop if correction is too small or if correction is in simple loop\n return (Math.abs(x_correction) <= min_correction_factor * Math.abs(x)) ||\n (prev_x_ef_correction === (x - x_correction) - x);\n };\n\n for (let i = 0; i < max_iterations; i++) {\n dfx = df(x);\n\n if (dfx === 0) {\n if (prev_dfx === 0) {\n // error\n throw new RangeError(\"df(x) is zero\");\n }\n else {\n // use previous derivation value\n dfx = prev_dfx;\n }\n // or move x a little?\n // dfx = df(x != 0 ? x + x * 1e-15 : 1e-15);\n }\n\n prev_dfx = dfx;\n y = f(x);\n x_correction = y / dfx;\n x_new = x - x_correction;\n\n if (isEnoughCorrection()) {\n break;\n }\n\n if (isBounded) {\n if (sign(y) === sign(y_atmax)) {\n max = x;\n y_atmax = y;\n }\n else if (sign(y) === sign(y_atmin)) {\n min = x;\n y_atmin = y;\n }\n else {\n x = x_new;\n break;\n }\n\n if ((x_new < min) || (x_new > max)) {\n if (sign(y_atmin) === sign(y_atmax)) {\n break;\n }\n\n const RATIO_LIMIT = 50;\n const AIMED_BISECT_OFFSET = 0.25; // [0, 0.5)\n const dy = y_atmax - y_atmin;\n const dx = max - min;\n\n if (dy === 0) {\n x_correction = x - (min + dx * 0.5);\n }\n else if (Math.abs(dy / Math.min(y_atmin, y_atmax)) > RATIO_LIMIT) {\n x_correction = x - (min + dx * (0.5 + (Math.abs(y_atmin) < Math.abs(y_atmax) ? -AIMED_BISECT_OFFSET : AIMED_BISECT_OFFSET)));\n }\n else {\n x_correction = x - (min - y_atmin / dy * dx);\n }\n x_new = x - x_correction;\n\n if (isEnoughCorrection()) {\n break;\n }\n }\n }\n\n prev_x_ef_correction = x - x_new;\n x = x_new;\n }\n\n return x;\n }\n\n /**\n * Clones this polynomial and return the clone.\n *\n * @returns {module:kld-polynomial.Polynomial}\n */\n clone() {\n const poly = new Polynomial();\n\n poly.coefs = this.coefs.slice();\n\n return poly;\n }\n\n /**\n * eval\n *\n * @param {number} x\n */\n eval(x) {\n if (isNaN(x)) {\n throw new TypeError(`Parameter must be a number. Found '${x}'`);\n }\n\n let result = 0;\n\n for (let i = this.coefs.length - 1; i >= 0; i--) {\n result = result * x + this.coefs[i];\n }\n\n return result;\n }\n\n /**\n * add\n *\n * @param {module:kld-polynomial.Polynomial} that\n * @returns {module:kld-polynomial.Polynomial}\n */\n add(that) {\n const result = new Polynomial();\n const d1 = this.getDegree();\n const d2 = that.getDegree();\n const dmax = Math.max(d1, d2);\n\n for (let i = 0; i <= dmax; i++) {\n const v1 = (i <= d1) ? this.coefs[i] : 0;\n const v2 = (i <= d2) ? that.coefs[i] : 0;\n\n result.coefs[i] = v1 + v2;\n }\n\n return result;\n }\n\n /**\n * multiply\n *\n * @param {module:kld-polynomial.Polynomial} that\n * @returns {module:kld-polynomial.Polynomial}\n */\n multiply(that) {\n const result = new Polynomial();\n\n for (let i = 0; i <= this.getDegree() + that.getDegree(); i++) {\n result.coefs.push(0);\n }\n\n for (let i = 0; i <= this.getDegree(); i++) {\n for (let j = 0; j <= that.getDegree(); j++) {\n result.coefs[i + j] += this.coefs[i] * that.coefs[j];\n }\n }\n\n return result;\n }\n\n /**\n * divideEqualsScalar\n *\n * @deprecated To be replaced by divideScalar\n * @param {number} scalar\n */\n divideEqualsScalar(scalar) {\n for (let i = 0; i < this.coefs.length; i++) {\n this.coefs[i] /= scalar;\n }\n }\n\n /**\n * simplifyEquals\n *\n * @deprecated To be replaced by simplify\n * @param {number} TOLERANCE\n */\n simplifyEquals(TOLERANCE = 1e-12) {\n for (let i = this.getDegree(); i >= 0; i--) {\n if (Math.abs(this.coefs[i]) <= TOLERANCE) {\n this.coefs.pop();\n }\n else {\n break;\n }\n }\n }\n\n /**\n * Sets small coefficients to zero.\n *\n * @deprecated To be replaced by removeZeros\n * @param {number} TOLERANCE\n * @returns {module:kld-polynomial.Polynomial}\n */\n removeZerosEquals(TOLERANCE = 1e-15) {\n const c = this.coefs;\n const err = 10 * TOLERANCE * Math.abs(\n c.reduce((pv, cv) => {\n return Math.abs(cv) > Math.abs(pv) ? cv : pv;\n })\n );\n\n for (let i = 0; i < c.length - 1; i++) {\n if (Math.abs(c[i]) < err) {\n c[i] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * Scales polynomial so that leading coefficient becomes 1.\n *\n * @deprecated To be replaced by getMonic\n * @returns {module:kld-polynomial.Polynomial}\n */\n monicEquals() {\n const c = this.coefs;\n\n if (c[c.length - 1] !== 1) {\n this.divideEqualsScalar(c[c.length - 1]);\n }\n\n return this;\n }\n\n /**\n * toString\n *\n * @returns {string}\n */\n toString() {\n const coefs = [];\n const signs = [];\n\n for (let i = this.coefs.length - 1; i >= 0; i--) {\n let value = Math.round(this.coefs[i] * 1000) / 1000;\n\n if (value !== 0) {\n const signString = (value < 0) ? \" - \" : \" + \";\n\n value = Math.abs(value);\n\n if (i > 0) {\n if (value === 1) {\n value = this._variable;\n }\n else {\n value += this._variable;\n }\n }\n\n if (i > 1) {\n value += \"^\" + i;\n }\n\n signs.push(signString);\n coefs.push(value);\n }\n }\n\n signs[0] = (signs[0] === \" + \") ? \"\" : \"-\";\n\n let result = \"\";\n\n for (let i = 0; i < coefs.length; i++) {\n result += signs[i] + coefs[i];\n }\n\n return result;\n }\n\n /**\n * bisection\n *\n * @param {number} min\n * @param {number} max\n * @param {number} [TOLERANCE]\n * @param {number} [ACCURACY]\n * @returns {number}\n */\n bisection(min, max, TOLERANCE = 1e-6, ACCURACY = 15) {\n let minValue = this.eval(min);\n let maxValue = this.eval(max);\n let result;\n\n if (Math.abs(minValue) <= TOLERANCE) {\n result = min;\n }\n else if (Math.abs(maxValue) <= TOLERANCE) {\n result = max;\n }\n else if (minValue * maxValue <= 0) {\n const tmp1 = Math.log(max - min);\n const tmp2 = Math.LN10 * ACCURACY;\n const maxIterations = Math.ceil((tmp1 + tmp2) / Math.LN2);\n\n for (let i = 0; i < maxIterations; i++) {\n result = 0.5 * (min + max);\n const value = this.eval(result);\n\n if (Math.abs(value) <= TOLERANCE) {\n break;\n }\n\n if (value * minValue < 0) {\n max = result;\n maxValue = value;\n }\n else {\n min = result;\n minValue = value;\n }\n }\n }\n\n return result;\n }\n\n /**\n * Based on trapzd in \"Numerical Recipes in C, 2nd Edition\", page 137\n *\n * @param {number} min\n * @param {number} max\n * @param {number} n\n * @returns {number}\n */\n trapezoid(min, max, n) {\n if (isNaN(min) || isNaN(max) || isNaN(n)) {\n throw new TypeError(\"Parameters must be numbers\");\n }\n\n const range = max - min;\n\n if (n === 1) {\n const minValue = this.eval(min);\n const maxValue = this.eval(max);\n\n this._s = 0.5 * range * (minValue + maxValue);\n }\n else {\n const iter = 1 << (n - 2);\n const delta = range / iter;\n let x = min + 0.5 * delta;\n let sum = 0;\n\n for (let i = 0; i < iter; i++) {\n sum += this.eval(x);\n x += delta;\n }\n\n this._s = 0.5 * (this._s + range * sum / iter);\n }\n\n if (isNaN(this._s)) {\n throw new TypeError(\"this._s is NaN\");\n }\n\n return this._s;\n }\n\n /**\n * Based on trapzd in \"Numerical Recipes in C, 2nd Edition\", page 139\n *\n * @param {number} min\n * @param {number} max\n * @returns {number}\n */\n simpson(min, max) {\n if (isNaN(min) || isNaN(max)) {\n throw new TypeError(\"Parameters must be numbers\");\n }\n\n const range = max - min;\n let st = 0.5 * range * (this.eval(min) + this.eval(max));\n let t = st;\n let s = 4.0 * st / 3.0;\n let os = s;\n let ost = st;\n const TOLERANCE = 1e-7;\n\n let iter = 1;\n\n for (let n = 2; n <= 20; n++) {\n const delta = range / iter;\n let x = min + 0.5 * delta;\n let sum = 0;\n\n for (let i = 1; i <= iter; i++) {\n sum += this.eval(x);\n x += delta;\n }\n\n t = 0.5 * (t + range * sum / iter);\n st = t;\n s = (4.0 * st - ost) / 3.0;\n\n if (Math.abs(s - os) < TOLERANCE * Math.abs(os)) {\n break;\n }\n\n os = s;\n ost = st;\n iter <<= 1;\n }\n\n return s;\n }\n\n /**\n * romberg\n *\n * @param {number} min\n * @param {number} max\n * @returns {number}\n */\n romberg(min, max) {\n if (isNaN(min) || isNaN(max)) {\n throw new TypeError(\"Parameters must be numbers\");\n }\n\n const MAX = 20;\n const K = 3;\n const TOLERANCE = 1e-6;\n const s = new Array(MAX + 1);\n const h = new Array(MAX + 1);\n let result = {y: 0, dy: 0};\n\n h[0] = 1.0;\n\n for (let j = 1; j <= MAX; j++) {\n s[j - 1] = this.trapezoid(min, max, j);\n\n if (j >= K) {\n result = Polynomial.interpolate(h, s, K, j - K, 0.0);\n if (Math.abs(result.dy) <= TOLERANCE * result.y) {\n break;\n }\n }\n\n s[j] = s[j - 1];\n h[j] = 0.25 * h[j - 1];\n }\n\n return result.y;\n }\n\n /**\n * Estimate what is the maximum polynomial evaluation error value under which polynomial evaluation could be in fact 0.\n *\n * @param {number} maxAbsX\n * @returns {number}\n */\n zeroErrorEstimate(maxAbsX) {\n const poly = this;\n const ERRF = 1e-15;\n\n if (typeof maxAbsX === \"undefined\") {\n const rb = poly.bounds();\n\n maxAbsX = Math.max(Math.abs(rb.minX), Math.abs(rb.maxX));\n }\n\n if (maxAbsX < 0.001) {\n return 2 * Math.abs(poly.eval(ERRF));\n }\n\n const n = poly.coefs.length - 1;\n const an = poly.coefs[n];\n\n return 10 * ERRF * poly.coefs.reduce((m, v, i) => {\n const nm = v / an * Math.pow(maxAbsX, i);\n return nm > m ? nm : m;\n }, 0);\n }\n\n /**\n * Calculates upper Real roots bounds.
\n * Real roots are in interval [negX, posX]. Determined by Fujiwara method.\n * @see {@link http://en.wikipedia.org/wiki/Properties_of_polynomial_roots}\n *\n * @returns {{ negX: number, posX: number }}\n */\n boundsUpperRealFujiwara() {\n let a = this.coefs;\n const n = a.length - 1;\n const an = a[n];\n\n if (an !== 1) {\n a = this.coefs.map(v => v / an);\n }\n\n const b = a.map((v, i) => {\n return (i < n)\n ? Math.pow(Math.abs((i === 0) ? v / 2 : v), 1 / (n - i))\n : v;\n });\n\n let coefSelectionFunc;\n const find2Max = function(acc, bi, i) {\n if (coefSelectionFunc(i)) {\n if (acc.max < bi) {\n acc.nearmax = acc.max;\n acc.max = bi;\n }\n else if (acc.nearmax < bi) {\n acc.nearmax = bi;\n }\n }\n return acc;\n };\n\n coefSelectionFunc = function(i) {\n return i < n && a[i] < 0;\n };\n\n // eslint-disable-next-line unicorn/no-fn-reference-in-iterator\n const max_nearmax_pos = b.reduce(find2Max, {max: 0, nearmax: 0});\n\n coefSelectionFunc = function(i) {\n return i < n && ((n % 2 === i % 2) ? a[i] < 0 : a[i] > 0);\n };\n\n // eslint-disable-next-line unicorn/no-fn-reference-in-iterator\n const max_nearmax_neg = b.reduce(find2Max, {max: 0, nearmax: 0});\n\n return {\n negX: -2 * max_nearmax_neg.max,\n posX: 2 * max_nearmax_pos.max\n };\n }\n\n /**\n * Calculates lower Real roots bounds.
\n * There are no Real roots in interval . Determined by Fujiwara method.\n * @see {@link http://en.wikipedia.org/wiki/Properties_of_polynomial_roots}\n *\n * @returns {{ negX: number, posX: number }}\n */\n boundsLowerRealFujiwara() {\n const poly = new Polynomial();\n\n poly.coefs = this.coefs.slice().reverse();\n\n const res = poly.boundsUpperRealFujiwara();\n\n res.negX = 1 / res.negX;\n res.posX = 1 / res.posX;\n\n return res;\n }\n\n /**\n * Calculates left and right Real roots bounds.
\n * Real roots are in interval [minX, maxX]. Combines Fujiwara lower and upper bounds to get minimal interval.\n * @see {@link http://en.wikipedia.org/wiki/Properties_of_polynomial_roots}\n *\n * @returns {{ minX: number, maxX: number }}\n */\n bounds() {\n const urb = this.boundsUpperRealFujiwara();\n const rb = {minX: urb.negX, maxX: urb.posX};\n\n if (urb.negX === 0 && urb.posX === 0) {\n return rb;\n }\n\n if (urb.negX === 0) {\n rb.minX = this.boundsLowerRealFujiwara().posX;\n }\n else if (urb.posX === 0) {\n rb.maxX = this.boundsLowerRealFujiwara().negX;\n }\n\n if (rb.minX > rb.maxX) {\n rb.minX = rb.maxX = 0;\n }\n\n return rb;\n // TODO: if sure that there are no complex roots\n // (maybe by using Sturm's theorem) use:\n // return this.boundsRealLaguerre();\n }\n\n /**\n * Calculates absolute upper roots bound.
\n * All (Complex and Real) roots magnitudes are <= result. Determined by Rouche method.\n * @see {@link http://en.wikipedia.org/wiki/Properties_of_polynomial_roots}\n *\n * @returns {number}\n */\n boundUpperAbsRouche() {\n const a = this.coefs;\n const n = a.length - 1;\n const max = a.reduce((prev, curr, i) => {\n if (i !== n) {\n curr = Math.abs(curr);\n return (prev < curr) ? curr : prev;\n }\n return prev;\n }, 0);\n\n return 1 + max / Math.abs(a[n]);\n }\n\n /**\n * Calculates absolute lower roots bound.
\n * All (Complex and Real) roots magnitudes are >= result. Determined by Rouche method.\n * @see {@link http://en.wikipedia.org/wiki/Properties_of_polynomial_roots}\n *\n * @returns {number}\n */\n boundLowerAbsRouche() {\n const a = this.coefs;\n const max = a.reduce((prev, curr, i) => {\n if (i !== 0) {\n curr = Math.abs(curr);\n return (prev < curr) ? curr : prev;\n }\n return prev;\n }, 0);\n\n return Math.abs(a[0]) / (Math.abs(a[0]) + max);\n }\n\n /**\n * Calculates left and right Real roots bounds.
\n * WORKS ONLY if all polynomial roots are Real.\n * Real roots are in interval [minX, maxX]. Determined by Laguerre method.\n * @see {@link http://en.wikipedia.org/wiki/Properties_of_polynomial_roots}\n *\n * @returns {{ minX: number, maxX: number }}\n */\n boundsRealLaguerre() {\n const a = this.coefs;\n const n = a.length - 1;\n const p1 = -a[n - 1] / (n * a[n]);\n const undersqrt = a[n - 1] * a[n - 1] - 2 * n / (n - 1) * a[n] * a[n - 2];\n let p2 = (n - 1) / (n * a[n]) * Math.sqrt(undersqrt);\n\n if (p2 < 0) {\n p2 = -p2;\n }\n\n return {\n minX: p1 - p2,\n maxX: p1 + p2\n };\n }\n\n /**\n * Root count by Descartes rule of signs.
\n * Returns maximum number of positive and negative real roots and minimum number of complex roots.\n * @see {@link http://en.wikipedia.org/wiki/Descartes%27_rule_of_signs}\n *\n * @returns {{maxRealPos: number, maxRealNeg: number, minComplex: number}}\n */\n countRootsDescartes() {\n const a = this.coefs;\n const n = a.length - 1;\n const accum = a.reduce((acc, ai, i) => {\n if (acc.prev_a !== 0 && ai !== 0) {\n if ((acc.prev_a < 0) === (ai > 0)) {\n acc.pos++;\n }\n if (((i % 2 === 0) !== (acc.prev_a < 0)) === ((i % 2 === 1) !== (ai > 0))) {\n acc.neg++;\n }\n }\n acc.prev_a = ai;\n return acc;\n }, {pos: 0, neg: 0, prev_a: 0});\n\n return {\n maxRealPos: accum.pos,\n maxRealNeg: accum.neg,\n minComplex: n - (accum.pos + accum.neg)\n };\n }\n\n // getters and setters\n\n /**\n * get degree\n *\n * @returns {number}\n */\n getDegree() {\n return this.coefs.length - 1;\n }\n\n /**\n * getDerivative\n *\n * @returns {module:kld-polynomial.Polynomial}\n */\n getDerivative() {\n const derivative = new Polynomial();\n\n for (let i = 1; i < this.coefs.length; i++) {\n derivative.coefs.push(i * this.coefs[i]);\n }\n\n return derivative;\n }\n\n /**\n * getRoots\n *\n * @returns {Array}\n */\n getRoots() {\n let result;\n\n this.simplifyEquals();\n\n switch (this.getDegree()) {\n case 0: result = []; break;\n case 1: result = this.getLinearRoot(); break;\n case 2: result = this.getQuadraticRoots(); break;\n case 3: result = this.getCubicRoots(); break;\n case 4: result = this.getQuarticRoots(); break;\n default:\n result = [];\n }\n\n return result;\n }\n\n /**\n * getRootsInInterval\n *\n * @param {number} min\n * @param {number} max\n * @returns {Array}\n */\n getRootsInInterval(min, max) {\n const roots = [];\n\n /**\n * @param {number} value\n */\n function push(value) {\n if (typeof value === \"number\") {\n roots.push(value);\n }\n }\n\n if (this.getDegree() === 0) {\n throw new RangeError(\"Unexpected empty polynomial\");\n }\n else if (this.getDegree() === 1) {\n push(this.bisection(min, max));\n }\n else {\n // get roots of derivative\n const deriv = this.getDerivative();\n const droots = deriv.getRootsInInterval(min, max);\n\n if (droots.length > 0) {\n // find root on [min, droots[0]]\n push(this.bisection(min, droots[0]));\n\n // find root on [droots[i],droots[i+1]] for 0 <= i <= count-2\n for (let i = 0; i <= droots.length - 2; i++) {\n push(this.bisection(droots[i], droots[i + 1]));\n }\n\n // find root on [droots[count-1],xmax]\n push(this.bisection(droots[droots.length - 1], max));\n }\n else {\n // polynomial is monotone on [min,max], has at most one root\n push(this.bisection(min, max));\n }\n }\n\n return roots;\n }\n\n /**\n * getLinearRoot\n *\n * @returns {number}\n */\n getLinearRoot() {\n const result = [];\n const a = this.coefs[1];\n\n if (a !== 0) {\n result.push(-this.coefs[0] / a);\n }\n\n return result;\n }\n\n /**\n * getQuadraticRoots\n *\n * @returns {Array}\n */\n getQuadraticRoots() {\n const results = [];\n\n if (this.getDegree() === 2) {\n const a = this.coefs[2];\n const b = this.coefs[1] / a;\n const c = this.coefs[0] / a;\n const d = b * b - 4 * c;\n\n if (d > 0) {\n const e = Math.sqrt(d);\n\n results.push(0.5 * (-b + e));\n results.push(0.5 * (-b - e));\n }\n else if (d === 0) {\n // really two roots with same value, but we only return one\n results.push(0.5 * -b);\n }\n // else imaginary results\n }\n\n return results;\n }\n\n /**\n * getCubicRoots\n *\n * This code is based on MgcPolynomial.cpp written by David Eberly. His\n * code along with many other excellent examples are avaiable at his site:\n * http://www.geometrictools.com\n *\n * @returns {Array}\n */\n getCubicRoots() {\n const results = [];\n\n if (this.getDegree() === 3) {\n const c3 = this.coefs[3];\n const c2 = this.coefs[2] / c3;\n const c1 = this.coefs[1] / c3;\n const c0 = this.coefs[0] / c3;\n\n const a = (3 * c1 - c2 * c2) / 3;\n const b = (2 * c2 * c2 * c2 - 9 * c1 * c2 + 27 * c0) / 27;\n const offset = c2 / 3;\n let discrim = b * b / 4 + a * a * a / 27;\n const halfB = b / 2;\n\n const ZEROepsilon = this.zeroErrorEstimate();\n\n if (Math.abs(discrim) <= ZEROepsilon) {\n discrim = 0;\n }\n\n if (discrim > 0) {\n const e = Math.sqrt(discrim);\n let root; // eslint-disable-line no-shadow\n\n let tmp = -halfB + e;\n\n if (tmp >= 0) {\n root = Math.pow(tmp, 1 / 3);\n }\n else {\n root = -Math.pow(-tmp, 1 / 3);\n }\n\n tmp = -halfB - e;\n\n if (tmp >= 0) {\n root += Math.pow(tmp, 1 / 3);\n }\n else {\n root -= Math.pow(-tmp, 1 / 3);\n }\n\n results.push(root - offset);\n }\n else if (discrim < 0) {\n const distance = Math.sqrt(-a / 3);\n const angle = Math.atan2(Math.sqrt(-discrim), -halfB) / 3;\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const sqrt3 = Math.sqrt(3);\n\n results.push(2 * distance * cos - offset);\n results.push(-distance * (cos + sqrt3 * sin) - offset);\n results.push(-distance * (cos - sqrt3 * sin) - offset);\n }\n else {\n let tmp;\n\n if (halfB >= 0) {\n tmp = -Math.pow(halfB, 1 / 3);\n }\n else {\n tmp = Math.pow(-halfB, 1 / 3);\n }\n\n results.push(2 * tmp - offset);\n // really should return next root twice, but we return only one\n results.push(-tmp - offset);\n }\n }\n\n return results;\n }\n\n /**\n * Calculates roots of quartic polynomial.
\n * First, derivative roots are found, then used to split quartic polynomial\n * into segments, each containing one root of quartic polynomial.\n * Segments are then passed to newton's method to find roots.\n *\n * @returns {Array} roots\n */\n getQuarticRoots() {\n let results = [];\n const n = this.getDegree();\n\n if (n === 4) {\n const poly = new Polynomial();\n\n poly.coefs = this.coefs.slice();\n poly.divideEqualsScalar(poly.coefs[n]);\n\n const ERRF = 1e-15;\n\n if (Math.abs(poly.coefs[0]) < 10 * ERRF * Math.abs(poly.coefs[3])) {\n poly.coefs[0] = 0;\n }\n\n const poly_d = poly.getDerivative();\n const derrt = poly_d.getRoots().sort((a, b) => a - b);\n const dery = [];\n const nr = derrt.length - 1;\n const rb = this.bounds();\n\n const maxabsX = Math.max(Math.abs(rb.minX), Math.abs(rb.maxX));\n const ZEROepsilon = this.zeroErrorEstimate(maxabsX);\n\n for (let i = 0; i <= nr; i++) {\n dery.push(poly.eval(derrt[i]));\n }\n\n for (let i = 0; i <= nr; i++) {\n if (Math.abs(dery[i]) < ZEROepsilon) {\n dery[i] = 0;\n }\n }\n\n let i = 0;\n const dx = Math.max(0.1 * (rb.maxX - rb.minX) / n, ERRF);\n const guesses = [];\n const minmax = [];\n\n if (nr > -1) {\n if (dery[0] !== 0) {\n if (sign(dery[0]) !== sign(poly.eval(derrt[0] - dx) - dery[0])) {\n guesses.push(derrt[0] - dx);\n minmax.push([rb.minX, derrt[0]]);\n }\n }\n else {\n results.push(derrt[0], derrt[0]);\n i++;\n }\n\n for (; i < nr; i++) {\n if (dery[i + 1] === 0) {\n results.push(derrt[i + 1], derrt[i + 1]);\n i++;\n }\n else if (sign(dery[i]) !== sign(dery[i + 1])) {\n guesses.push((derrt[i] + derrt[i + 1]) / 2);\n minmax.push([derrt[i], derrt[i + 1]]);\n }\n }\n if (dery[nr] !== 0 && sign(dery[nr]) !== sign(poly.eval(derrt[nr] + dx) - dery[nr])) {\n guesses.push(derrt[nr] + dx);\n minmax.push([derrt[nr], rb.maxX]);\n }\n }\n\n /**\n * @param {number} x\n * @returns {number}\n */\n const f = function(x) {\n return poly.eval(x);\n };\n\n /**\n * @param {number} x\n * @returns {number}\n */\n const df = function(x) {\n return poly_d.eval(x);\n };\n\n if (guesses.length > 0) {\n for (i = 0; i < guesses.length; i++) {\n guesses[i] = Polynomial.newtonSecantBisection(guesses[i], f, df, 32, minmax[i][0], minmax[i][1]);\n }\n }\n\n results = results.concat(guesses);\n }\n\n return results;\n }\n}\n\nexport default Polynomial;\n","/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,6],$V1=[1,17],$V2=[1,7],$V3=[1,10],$V4=[1,13],$V5=[1,28],$V6=[1,14],$V7=[1,34],$V8=[1,15],$V9=[1,33],$Va=[1,21],$Vb=[1,24],$Vc=[1,25],$Vd=[1,29],$Ve=[1,30],$Vf=[1,32],$Vg=[1,31],$Vh=[1,5],$Vi=[1,5,14,16,24,28,41],$Vj=[1,57],$Vk=[1,59],$Vl=[1,58],$Vm=[1,46],$Vn=[1,52],$Vo=[1,41],$Vp=[1,42],$Vq=[1,43],$Vr=[1,44],$Vs=[1,45],$Vt=[1,47],$Vu=[1,49],$Vv=[1,50],$Vw=[1,55],$Vx=[1,56],$Vy=[1,5,14,16,24,28,41,54],$Vz=[1,5,14,16,24,28,31,32,33,34,41,54],$VA=[1,5,14,16,24,28,31,32,33,34,38,40,41,54],$VB=[1,5,14,16,24,28,31,32,33,34,38,40,41,54,58],$VC=[1,5,14,16,24,28,41,58],$VD=[1,93],$VE=[1,98],$VF=[1,112],$VG=[1,115],$VH=[14,41],$VI=[14,28],$VJ=[1,127],$VK=[14,24,41],$VL=[14,24,41,58],$VM=[14,28,58],$VN=[14,24],$VO=[1,5,14,28,41],$VP=[1,151];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"program\":3,\"statements\":4,\";\":5,\"statement\":6,\"assignment\":7,\"sequence\":8,\"LET\":9,\"IDENTIFIER\":10,\"=\":11,\"DEF\":12,\"sequences\":13,\",\":14,\"steps\":15,\"|>\":16,\"step\":17,\"=~\":18,\"namedPattern\":19,\"expression\":20,\"mathExpression\":21,\"MAP\":22,\"(\":23,\")\":24,\"PATTERNS\":25,\"{\":26,\"patterns\":27,\"}\":28,\"SEQUENCES\":29,\"callExpression\":30,\"+\":31,\"-\":32,\"*\":33,\"/\":34,\"argumentList\":35,\"memberExpression\":36,\"primaryExpression\":37,\".\":38,\"integer\":39,\"[\":40,\"]\":41,\"boolean\":42,\"NULL_TYPE\":43,\"float\":44,\"string\":45,\"UNDEFINED_TYPE\":46,\"$\":47,\"arrayExpression\":48,\"objectExpression\":49,\"expressionElements\":50,\"expressionElement\":51,\"expressionProperties\":52,\"expressionProperty\":53,\":\":54,\"argument\":55,\"...\":56,\"pattern\":57,\"AS\":58,\"ANY_TYPE\":59,\"ARRAY_TYPE\":60,\"BOOLEAN_TYPE\":61,\"TRUE\":62,\"FALSE\":63,\"NUMBER_TYPE\":64,\"OBJECT_TYPE\":65,\"STRING_TYPE\":66,\"arrayPattern\":67,\"objectPattern\":68,\"PATTERN\":69,\"ENUMERATION\":70,\"patternElements\":71,\"namedPatternElement\":72,\"patternElement\":73,\"range\":74,\"..\":75,\"patternProperties\":76,\"namedPatternProperty\":77,\"namedProperty\":78,\"STRING\":79,\"NUMBER\":80,\"stringOrIdentifier\":81,\"identifiers\":82,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\";\",9:\"LET\",10:\"IDENTIFIER\",11:\"=\",12:\"DEF\",14:\",\",16:\"|>\",18:\"=~\",22:\"MAP\",23:\"(\",24:\")\",25:\"PATTERNS\",26:\"{\",28:\"}\",29:\"SEQUENCES\",31:\"+\",32:\"-\",33:\"*\",34:\"/\",38:\".\",40:\"[\",41:\"]\",43:\"NULL_TYPE\",46:\"UNDEFINED_TYPE\",47:\"$\",54:\":\",56:\"...\",58:\"AS\",59:\"ANY_TYPE\",60:\"ARRAY_TYPE\",61:\"BOOLEAN_TYPE\",62:\"TRUE\",63:\"FALSE\",64:\"NUMBER_TYPE\",65:\"OBJECT_TYPE\",66:\"STRING_TYPE\",69:\"PATTERN\",70:\"ENUMERATION\",75:\"..\",79:\"STRING\",80:\"NUMBER\"},\nproductions_: [0,[3,1],[3,2],[4,3],[4,1],[6,1],[6,1],[7,4],[7,4],[13,3],[13,1],[8,1],[15,3],[15,1],[17,2],[17,1],[20,1],[20,6],[20,4],[20,4],[21,1],[21,3],[21,3],[21,3],[21,3],[30,3],[30,4],[30,1],[36,1],[36,3],[36,3],[36,4],[37,1],[37,1],[37,1],[37,1],[37,1],[37,1],[37,1],[37,1],[37,1],[37,3],[48,2],[48,3],[50,3],[50,1],[51,1],[51,1],[49,2],[49,3],[52,3],[52,1],[53,3],[53,1],[53,1],[35,3],[35,1],[55,1],[55,2],[27,3],[27,1],[19,1],[19,3],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,1],[57,2],[57,2],[57,1],[67,2],[67,3],[71,3],[71,1],[72,1],[72,3],[73,1],[73,3],[73,3],[73,5],[74,3],[74,2],[74,2],[74,1],[68,2],[68,3],[76,3],[76,1],[77,1],[77,3],[78,3],[78,1],[42,1],[42,1],[45,1],[39,1],[44,1],[81,1],[81,1],[82,3],[82,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\nreturn $$[$0];\nbreak;\ncase 2:\nreturn $$[$0-1];\nbreak;\ncase 3: case 9: case 12: case 44: case 50: case 55: case 59: case 82: case 96: case 109:\n$$[$0-2].push($$[$0]); this.$ = $$[$0-2]\nbreak;\ncase 4: case 10: case 13: case 45: case 51: case 56: case 60: case 83: case 97: case 110:\nthis.$ = [ $$[$0] ];\nbreak;\ncase 5: case 6: case 14: case 15: case 16: case 20: case 27: case 28: case 39: case 40: case 46: case 47: case 54: case 57: case 98: case 107:\nthis.$ = $$[$0]\nbreak;\ncase 7:\nthis.$ = { type: 'assignment', name: $$[$0-2], value: $$[$0] };\nbreak;\ncase 8:\nthis.$ = { type: 'def', name: $$[$0-2], value: $$[$0] };\nbreak;\ncase 11:\nthis.$ = { type: 'sequence', steps: $$[$0] };\nbreak;\ncase 17:\nthis.$ = { type: 'map', value: [ $$[$0-3], $$[$0-1] ] };\nbreak;\ncase 18:\nthis.$ = { type: 'patterns', patterns: $$[$0-1] };\nbreak;\ncase 19:\nthis.$ = { type: 'sequences', sequences: $$[$0-1] };\nbreak;\ncase 21:\nthis.$ = { type: 'add', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 22:\nthis.$ = { type: 'subtract', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 23:\nthis.$ = { type: 'multiply', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 24:\nthis.$ = { type: 'divide', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 25:\nthis.$ = { type: 'invoke', name: $$[$0-2], args: [] };\nbreak;\ncase 26:\nthis.$ = { type: 'invoke', name: $$[$0-3], args: $$[$0-1] };\nbreak;\ncase 29:\nthis.$ = { type: 'get-property', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 30:\nthis.$ = { type: 'get-index', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 31:\nthis.$ = { type: 'get-index', left: $$[$0-3], right: $$[$0-1] };\nbreak;\ncase 32:\nthis.$ = { type: 'boolean', value: $$[$0] };\nbreak;\ncase 33:\nthis.$ = { type: 'boolean', value: null };\nbreak;\ncase 34:\nthis.$ = { type: 'number', value: $$[$0] };\nbreak;\ncase 35:\nthis.$ = { type: 'string', value: $$[$0] };\nbreak;\ncase 36:\nthis.$ = { type: 'undefined', value: undefined };\nbreak;\ncase 37:\nthis.$ = { type: 'get-value', name: $$[$0] };\nbreak;\ncase 38:\nthis.$ = { type: 'get-structure' };\nbreak;\ncase 41:\nthis.$ = $$[$0-1];\nbreak;\ncase 42:\nthis.$ = { type: 'array', value: [] };\nbreak;\ncase 43:\nthis.$ = { type: 'array', value: $$[$0-1] };\nbreak;\ncase 48:\nthis.$ = { type: 'object', value: [] };\nbreak;\ncase 49:\nthis.$ = { type: 'object', value: $$[$0-1] };\nbreak;\ncase 52:\nthis.$ = { type: 'property', name: $$[$0-2], value: $$[$0] };\nbreak;\ncase 53:\nthis.$ = { type: 'property', name: $$[$0], value: null };\nbreak;\ncase 58:\nthis.$ = { type: 'spread', expression: $$[$0] };\nbreak;\ncase 61: case 84:\n$$[$0].assignTo = null; this.$ = $$[$0];\nbreak;\ncase 62: case 85: case 99:\n$$[$0-2].assignTo = $$[$0]; this.$ = $$[$0-2];\nbreak;\ncase 63:\nthis.$ = { type: 'pattern', patternType: 'any', value: null };\nbreak;\ncase 64:\nthis.$ = { type: 'pattern', patternType: 'array', value: null };\nbreak;\ncase 65:\nthis.$ = { type: 'pattern', patternType: 'boolean', value: null };\nbreak;\ncase 66:\nthis.$ = { type: 'pattern', patternType: 'boolean', value: true };\nbreak;\ncase 67:\nthis.$ = { type: 'pattern', patternType: 'boolean', value: false };\nbreak;\ncase 68:\nthis.$ = { type: 'pattern', patternType: 'null', value: null };\nbreak;\ncase 69:\nthis.$ = { type: 'pattern', patternType: 'number', value: null };\nbreak;\ncase 70:\nthis.$ = { type: 'pattern', patternType: 'number', value: $$[$0] };\nbreak;\ncase 71:\nthis.$ = { type: 'pattern', patternType: 'object', value: null };\nbreak;\ncase 72:\nthis.$ = { type: 'pattern', patternType: 'string', value: null };\nbreak;\ncase 73:\nthis.$ = { type: 'pattern', patternType: 'string', value: $$[$0] };\nbreak;\ncase 74:\nthis.$ = { type: 'pattern', patternType: 'undefined', value: null };\nbreak;\ncase 75: case 76:\nthis.$ = $$[$0];\nbreak;\ncase 77:\nthis.$ = { type: 'pattern-reference', name: $$[$0] };\nbreak;\ncase 78:\nthis.$ = { type: 'enumeration-reference', name: $$[$0] };\nbreak;\ncase 79:\nthis.$ = { type: 'pattern', patternType: 'reference', value: $$[$0] };\nbreak;\ncase 80:\nthis.$ = { type: 'pattern', patternType: 'array-pattern', value: [] };\nbreak;\ncase 81:\nthis.$ = { type: 'pattern', patternType: 'array-pattern', value: $$[$0-1] };\nbreak;\ncase 86:\nthis.$ = { type: 'element', pattern: $$[$0], range: { type: 'range', start: 1, stop: 1 } };\nbreak;\ncase 87:\nthis.$ = { type: 'element', pattern: $$[$0-2], range: $$[$0] };\nbreak;\ncase 88:\nthis.$ = { type: 'element-group', elements: $$[$0-1], range: { type: 'range', start: 1, stop: 1 } };\nbreak;\ncase 89:\nthis.$ = { type: 'element-group', elements: $$[$0-3], range: $$[$0] };\nbreak;\ncase 90:\nthis.$ = { type: 'range', start: $$[$0-2], stop: $$[$0] };\nbreak;\ncase 91:\nthis.$ = { type: 'range', start: 0, stop: $$[$0] };\nbreak;\ncase 92:\nthis.$ = { type: 'range', start: $$[$0-1], stop: Infinity };\nbreak;\ncase 93:\nthis.$ = { type: 'range', start: $$[$0], stop: $$[$0] };\nbreak;\ncase 94:\nthis.$ = { type: 'pattern', patternType: 'object', value: null };\nbreak;\ncase 95:\nthis.$ = { type: 'pattern', patternType: 'object-pattern', value: $$[$0-1] };\nbreak;\ncase 100:\nthis.$ = { type: 'property', name: $$[$0-2], pattern: $$[$0] };\nbreak;\ncase 101:\nthis.$ = { type: 'property', name: $$[$0], pattern: { type: 'pattern', patternType: 'any', value: null } };\nbreak;\ncase 102:\nthis.$ = true;\nbreak;\ncase 103:\nthis.$ = false;\nbreak;\ncase 104: case 108:\nthis.$ = $$[$0].substring(1, $$[$0].length - 1);\nbreak;\ncase 105:\nthis.$ = parseInt($$[$0]);\nbreak;\ncase 106:\nthis.$ = parseFloat($$[$0]);\nbreak;\n}\n},\ntable: [{3:1,4:2,6:3,7:4,8:5,9:$V0,10:$V1,12:$V2,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{1:[3]},{1:[2,1],5:[1,35]},o($Vh,[2,4]),o($Vh,[2,5]),o($Vh,[2,6]),{10:[1,36]},{10:[1,37]},o([1,5,14,24,28,41],[2,11],{16:[1,38]}),o($Vi,[2,13]),{10:$Vj,19:39,26:$Vk,40:$Vl,43:$Vm,44:48,45:51,46:$Vn,57:40,59:$Vo,60:$Vp,61:$Vq,62:$Vr,63:$Vs,64:$Vt,65:$Vu,66:$Vv,67:53,68:54,69:$Vw,70:$Vx,79:$Vf,80:$Vg},o($Vi,[2,15]),o($Vy,[2,16],{31:[1,60],32:[1,61],33:[1,62],34:[1,63]}),{23:[1,64]},{26:[1,65]},{26:[1,66]},o($Vz,[2,20]),o($VA,[2,37],{23:[1,67]}),o($Vz,[2,27],{38:[1,68],40:[1,69]}),o($VA,[2,28]),o($VA,[2,32]),o($VA,[2,33]),o($VA,[2,34]),o($VA,[2,35]),o($VA,[2,36]),o($VA,[2,38]),o($VA,[2,39]),o($VA,[2,40]),{10:$V1,20:70,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},o($VA,[2,102]),o($VA,[2,103]),o($VB,[2,106]),o($VB,[2,104]),{7:75,9:$V0,10:$V1,12:$V2,20:74,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,41:[1,71],42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,50:72,51:73,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{7:80,9:$V0,10:$V1,12:$V2,20:79,21:12,22:$V4,23:$V5,25:$V6,26:$V7,28:[1,76],29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,52:77,53:78,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{1:[2,2],6:81,7:4,8:5,9:$V0,10:$V1,12:$V2,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{11:[1,82]},{11:[1,83]},{10:$V1,17:84,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},o($Vi,[2,14]),o($Vi,[2,61],{58:[1,85]}),o($VC,[2,63]),o($VC,[2,64]),o($VC,[2,65]),o($VC,[2,66]),o($VC,[2,67]),o($VC,[2,68]),o($VC,[2,69]),o($VC,[2,70]),o($VC,[2,71]),o($VC,[2,72]),o($VC,[2,73]),o($VC,[2,74]),o($VC,[2,75]),o($VC,[2,76]),{10:[1,86]},{10:[1,87]},o($VC,[2,79]),{10:$Vj,23:$VD,26:$Vk,40:$Vl,41:[1,88],43:$Vm,44:48,45:51,46:$Vn,57:92,59:$Vo,60:$Vp,61:$Vq,62:$Vr,63:$Vs,64:$Vt,65:$Vu,66:$Vv,67:53,68:54,69:$Vw,70:$Vx,71:89,72:90,73:91,79:$Vf,80:$Vg},{10:$VE,28:[1,94],76:95,77:96,78:97},{10:$V1,23:$V5,26:$V7,30:99,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{10:$V1,23:$V5,26:$V7,30:100,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{10:$V1,23:$V5,26:$V7,30:101,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{10:$V1,23:$V5,26:$V7,30:102,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{10:$V1,20:103,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{10:$Vj,19:105,26:$Vk,27:104,40:$Vl,43:$Vm,44:48,45:51,46:$Vn,57:40,59:$Vo,60:$Vp,61:$Vq,62:$Vr,63:$Vs,64:$Vt,65:$Vu,66:$Vv,67:53,68:54,69:$Vw,70:$Vx,79:$Vf,80:$Vg},{8:107,10:$V1,13:106,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{10:$V1,20:111,21:12,22:$V4,23:$V5,24:[1,108],25:$V6,26:$V7,29:$V8,30:16,35:109,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,55:110,56:$VF,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{10:[1,113],39:114,80:$VG},{39:116,80:$VG},{24:[1,117]},o($VA,[2,42]),{14:[1,119],41:[1,118]},o($VH,[2,45]),o($VH,[2,46]),o($VH,[2,47]),o($VA,[2,48]),{14:[1,121],28:[1,120]},o($VI,[2,51]),o($VI,[2,53],{54:[1,122]}),o($VI,[2,54]),o($Vh,[2,3]),{8:123,10:$V1,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{8:124,10:$V1,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},o($Vi,[2,12]),{10:[1,125]},o($VC,[2,77]),o($VC,[2,78]),o($VC,[2,80]),{14:$VJ,41:[1,126]},o($VK,[2,83]),o($VK,[2,84],{58:[1,128]}),o($VL,[2,86],{5:[1,129]}),{10:$Vj,23:$VD,26:$Vk,40:$Vl,43:$Vm,44:48,45:51,46:$Vn,57:92,59:$Vo,60:$Vp,61:$Vq,62:$Vr,63:$Vs,64:$Vt,65:$Vu,66:$Vv,67:53,68:54,69:$Vw,70:$Vx,71:130,72:90,73:91,79:$Vf,80:$Vg},o($VC,[2,94]),{14:[1,132],28:[1,131]},o($VI,[2,97]),o($VI,[2,98],{58:[1,133]}),o($VM,[2,101],{54:[1,134]}),o($Vz,[2,21]),o($Vz,[2,22]),o($Vz,[2,23]),o($Vz,[2,24]),{14:[1,135]},{14:[1,137],28:[1,136]},o($VI,[2,60]),{14:[1,139],28:[1,138]},o($VI,[2,10]),o($Vz,[2,25]),{14:[1,141],24:[1,140]},o($VN,[2,56]),o($VN,[2,57]),{10:$V1,20:142,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},o($VA,[2,29]),o($VA,[2,30]),o([1,5,14,16,24,28,31,32,33,34,38,40,41,54,58,75],[2,105]),{41:[1,143]},o($VA,[2,41]),o($VA,[2,43]),{7:75,9:$V0,10:$V1,12:$V2,20:74,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,51:144,62:$Vd,63:$Ve,79:$Vf,80:$Vg},o($VA,[2,49]),{7:80,9:$V0,10:$V1,12:$V2,20:79,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,53:145,62:$Vd,63:$Ve,79:$Vf,80:$Vg},{8:146,10:$V1,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},o($VO,[2,7]),o($VO,[2,8]),o($Vi,[2,62]),o($VC,[2,81]),{10:$Vj,23:$VD,26:$Vk,40:$Vl,43:$Vm,44:48,45:51,46:$Vn,57:92,59:$Vo,60:$Vp,61:$Vq,62:$Vr,63:$Vs,64:$Vt,65:$Vu,66:$Vv,67:53,68:54,69:$Vw,70:$Vx,72:147,73:91,79:$Vf,80:$Vg},{10:[1,148]},{39:150,74:149,75:$VP,80:$VG},{14:$VJ,24:[1,152]},o($VC,[2,95]),{10:$VE,77:153,78:97},{10:[1,154]},{10:$Vj,26:$Vk,40:$Vl,43:$Vm,44:48,45:51,46:$Vn,57:155,59:$Vo,60:$Vp,61:$Vq,62:$Vr,63:$Vs,64:$Vt,65:$Vu,66:$Vv,67:53,68:54,69:$Vw,70:$Vx,79:$Vf,80:$Vg},{8:156,10:$V1,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},o($Vy,[2,18]),{10:$Vj,19:157,26:$Vk,40:$Vl,43:$Vm,44:48,45:51,46:$Vn,57:40,59:$Vo,60:$Vp,61:$Vq,62:$Vr,63:$Vs,64:$Vt,65:$Vu,66:$Vv,67:53,68:54,69:$Vw,70:$Vx,79:$Vf,80:$Vg},o($Vy,[2,19]),{8:158,10:$V1,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,62:$Vd,63:$Ve,79:$Vf,80:$Vg},o($Vz,[2,26]),{10:$V1,20:111,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,36:18,37:19,40:$V9,42:20,43:$Va,44:22,45:23,46:$Vb,47:$Vc,48:26,49:27,55:159,56:$VF,62:$Vd,63:$Ve,79:$Vf,80:$Vg},o($VN,[2,58]),o($VA,[2,31]),o($VH,[2,44]),o($VI,[2,50]),o($VI,[2,52]),o($VK,[2,82]),o($VK,[2,85]),o($VL,[2,87]),o($VL,[2,93],{75:[1,160]}),{39:161,80:$VG},o($VL,[2,88],{5:[1,162]}),o($VI,[2,96]),o($VI,[2,99]),o($VM,[2,100]),{24:[1,163]},o($VI,[2,59]),o($VI,[2,9]),o($VN,[2,55]),o($VL,[2,92],{39:164,80:$VG}),o($VL,[2,91]),{39:150,74:165,75:$VP,80:$VG},o($Vy,[2,17]),o($VL,[2,90]),o($VL,[2,89])],\ndefaultActions: {},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n _token_stack:\n var lex = function () {\n var token;\n token = lexer.lex() || EOF;\n if (typeof token !== 'number') {\n token = self.symbols_[token] || token;\n }\n return token;\n };\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:/* skip whitespace */\nbreak;\ncase 1:/* skip comment */\nbreak;\ncase 2:return 59\nbreak;\ncase 3:return 60\nbreak;\ncase 4:return 58\nbreak;\ncase 5:return 61\nbreak;\ncase 6:return 12\nbreak;\ncase 7:return 70\nbreak;\ncase 8:return 63\nbreak;\ncase 9:return 9\nbreak;\ncase 10:return 22\nbreak;\ncase 11:return 25\nbreak;\ncase 12:return 43\nbreak;\ncase 13:return 64\nbreak;\ncase 14:return 65\nbreak;\ncase 15:return 29\nbreak;\ncase 16:return 66\nbreak;\ncase 17:return 62\nbreak;\ncase 18:return 46\nbreak;\ncase 19:return 80\nbreak;\ncase 20:return 79\nbreak;\ncase 21:return 23\nbreak;\ncase 22:return 24\nbreak;\ncase 23:return 26\nbreak;\ncase 24:return 28\nbreak;\ncase 25:return 40\nbreak;\ncase 26:return 41\nbreak;\ncase 27:return 16\nbreak;\ncase 28:return '|'\nbreak;\ncase 29:return 14\nbreak;\ncase 30:return 54\nbreak;\ncase 31:return 5\nbreak;\ncase 32:return 18\nbreak;\ncase 33:return 11\nbreak;\ncase 34:return '<='\nbreak;\ncase 35:return 56\nbreak;\ncase 36:return 75\nbreak;\ncase 37:return 38\nbreak;\ncase 38:return '_'\nbreak;\ncase 39:return 31\nbreak;\ncase 40:return 32\nbreak;\ncase 41:return 33\nbreak;\ncase 42:return 34\nbreak;\ncase 43:return 47\nbreak;\ncase 44:return 10\nbreak;\n}\n},\nrules: [/^(?:\\s+)/,/^(?:\\/\\/.*)/,/^(?:any\\b)/,/^(?:array\\b)/,/^(?:as\\b)/,/^(?:boolean\\b)/,/^(?:def\\b)/,/^(?:enum\\b)/,/^(?:false\\b)/,/^(?:let\\b)/,/^(?:map\\b)/,/^(?:patterns\\b)/,/^(?:null\\b)/,/^(?:number\\b)/,/^(?:object\\b)/,/^(?:sequences\\b)/,/^(?:string\\b)/,/^(?:true\\b)/,/^(?:undefined\\b)/,/^(?:[-+]?(0|[1-9]\\d*)(\\.\\d+)?)/,/^(?:\"[^\"\\r\\n]*\")/,/^(?:\\()/,/^(?:\\))/,/^(?:{)/,/^(?:})/,/^(?:\\[)/,/^(?:\\])/,/^(?:\\|>)/,/^(?:\\|)/,/^(?:,)/,/^(?::)/,/^(?:;)/,/^(?:=~)/,/^(?:=)/,/^(?:<=)/,/^(?:\\.{3})/,/^(?:\\.{2})/,/^(?:\\.)/,/^(?:_)/,/^(?:\\+)/,/^(?:-)/,/^(?:\\*)/,/^(?:\\/)/,/^(?:\\$)/,/^(?:[a-zA-Z_][a-zA-Z0-9_]*)/],\nconditions: {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\nexport default parser;\n","// General functions\n\n/**\n * Return the type name of the specified item\n *\n * @param {*} item\n * @returns {string}\n */\nexport function typeName(item) {\n switch (item) {\n case null:\n return \"null\";\n case undefined:\n return \"undefined\";\n default:\n if (Array.isArray(item)) {\n return \"array\";\n }\n\n return typeof item;\n }\n}\n\n// Array related functions\n\n/**\n * Return the length of an array\n *\n * @param {Array} list\n * @returns {number}\n */\nexport function length(list) { /* eslint-disable-line no-shadow */\n return (Array.isArray(list)) ? list.length : 0;\n}\n\n/**\n * Combine multiple arrays into a single array\n *\n * @param {Array} lists\n * @param {*} [missing=undefined]\n * @returns {Array}\n */\nexport function zip(lists, missing = undefined) {\n const result = [];\n\n if (Array.isArray(lists) && lists.length > 0 && lists.every(l => Array.isArray(l))) {\n const maxLength = Math.max(...lists.map(l => l.length));\n\n for (let i = 0; i < maxLength; i++) {\n const part = [];\n\n for (const list of lists) {\n part.push(i < list.length ? list[i] : missing);\n }\n\n result.push(part);\n }\n }\n\n\n return result;\n}\n\n/**\n * Partition an array into multiple arrays\n *\n * @param {Array} items\n * @param {number} count\n * @param {number} advance\n * @param {*} [missing=undefined]\n */\nexport function partition(items, count, advance, missing = undefined) {\n /* eslint-disable-next-line no-shadow */\n const {length} = items;\n const result = [];\n\n // default advance to count, if its not defined\n advance = advance === undefined ? count : advance;\n\n // we can't advance backwards and we always need to advance\n count = Math.max(1, count);\n advance = Math.max(1, advance);\n\n for (let i = 0; i < length; i += advance) {\n const part = [];\n let index = i;\n\n for (let j = 0; j < count; j++, index++) {\n part.push(index < length ? items[index] : missing);\n }\n\n result.push(part);\n }\n\n return result;\n}\n\n/**\n * Return a new array with the original array's content reversed\n *\n * @param {Array} items\n * @returns {Array|undefined}\n */\nexport function reverse(items) {\n return Array.isArray(items)\n ? items.slice().reverse()\n : undefined;\n}\n\n/**\n * Return a new sorted array\n *\n * @param {Array} items\n * @param {Function} comparator\n * @returns {Array|undefined}\n */\nexport function sort(items, comparator) {\n return Array.isArray(items)\n ? items.slice().sort(comparator)\n : undefined;\n}\n\n/**\n * Return a string by concatenating a list of strings, delimiting each with another string\n *\n * @param {Array} items\n * @param {string} delimiter\n * @returns {string}\n */\nexport function join(items, delimiter) {\n return items.join(delimiter);\n}\n\n// Object related functions\n\n/**\n * Predicate to determine if an item is an object\n *\n * @param {*} item\n * @returns {boolean}\n */\nfunction isObject(item) {\n return item !== null && typeof item === \"object\";\n}\n\n/**\n * Return a list of keys from an object\n *\n * @param {Object} item\n * @returns {string[]}\n */\nexport function keys(item) {\n /* eslint-disable-next-line compat/compat */\n return isObject(item) ? Object.keys(item) : [];\n}\n\n/**\n * Return a list of values from an object\n *\n * @param {Object} item\n * @returns {any[]}\n */\nexport function values(item) {\n /* eslint-disable-next-line compat/compat */\n return isObject(item) ? Object.values(item) : [];\n}\n\n/**\n * Return a list of key/value pairs from an object. Each element in the result is a 2-element array\n * where the first element is the key and the second element is the value\n *\n * @param {Object} item\n * @returns {Array}\n */\nexport function pairs(item) {\n /* eslint-disable-next-line compat/compat */\n return isObject(item) ? Object.entries(item) : [];\n}\n\n/**\n * Convert a list of key/value pairs into an object. This is the reverse of pairs\n *\n * @param {Array} pairs\n * @returns {Object}\n */\nexport function fromPairs(pairs) { /* eslint-disable-line no-shadow */\n const result = {};\n\n if (Array.isArray(pairs)) {\n for (const pair of pairs) {\n if (pair.length >= 2) {\n const [key, value] = pair;\n\n result[key] = value;\n }\n }\n }\n\n return result;\n}\n\n// Array and Object related\n\n/**\n * If all items are objects, a new object with all the properties of all objects will be merged. If the same property\n * exists on multiple objects, the last object with that property wins.\n *\n * If the first item is an array, a new array will be created by appending all non-array items and concatenating all\n * array items.\n *\n * @param {Object|Array} items\n * @returns {Object|Array|undefined}\n */\nexport function merge(...items) {\n if (items.length > 0 && Array.isArray(items[0])) {\n return items[0].concat(...items.slice(1));\n }\n else if (items.every(item => isObject(item))) {\n return Object.assign({}, ...items);\n }\n\n return undefined;\n}\n","/**\n * Transformer.jss\n *\n * @copyright 2019, Kevin Lindsey\n * @module Transformer\n */\n\n// import util from \"util\";\n// import Parser from \"./Parser.js\";\nimport Parser from \"./GeneratedParser.js\";\nimport * as StdLib from \"./StandardLibrary.js\";\n\nconst FAILURE_VALUE = {};\nexport {FAILURE_VALUE};\n\n/**\n * Determine if object is something that can have properties\n *\n * @param {*} obj\n * @returns {boolean}\n */\nfunction isObject(obj) {\n return obj !== null && typeof obj === \"object\";\n}\n\n/**\n * Transformer\n */\nexport default class Transformer {\n /**\n * Create a new empty Transformer. Normalizers can be used to validate and transform data. However, when a new\n * Transformer has been created, it needs to be populated with one or more type descriptions. The easiest way to do\n * this is with the static method fromSource.\n */\n constructor() {\n this.symbolTable = {};\n this.functions = {};\n this.messages = [];\n this.verbose = false;\n\n // add standard library\n /* eslint-disable-next-line guard-for-in */\n for (const name in StdLib) {\n /* eslint-disable-next-line import/namespace */\n this.functions[name] = StdLib[name];\n }\n }\n\n /**\n * Add function\n *\n * @param {string} name\n * @param {Function} reference\n */\n addFunction(name, reference) {\n // TODO: type check\n this.functions[name] = reference;\n }\n\n /**\n * Add information\n *\n * @param {string} message\n */\n addInfo(message) {\n if (this.verbose) {\n this.messages.push({type: \"message\", level: \"info\", message});\n }\n }\n\n /**\n * Add a warning\n *\n * @param {string} message\n */\n addWarning(message) {\n this.messages.push({type: \"message\", level: \"warning\", message});\n }\n\n /**\n * Add an error\n *\n * @param {string} message\n */\n addError(message) {\n this.messages.push({type: \"message\", level: \"error\", message});\n }\n\n /**\n * Compile and execute the source against the specfied structure\n *\n * @param {string} source\n * @param {*} structure\n * @returns {*}\n */\n execute(source, structure) {\n // TODO: cache results using source or source hash as key\n // parse source\n const statements = Parser.parse(source);\n\n // clear any previous messages\n this.messages = [];\n\n // process statements\n let result;\n\n for (const statement of statements) {\n switch (statement.type) {\n case \"assignment\":\n case \"def\":\n case \"sequence\": {\n result = this.executeExpression(statement, structure, this.symbolTable);\n break;\n }\n\n default:\n this.addError(`unknown statement type: ${statement.type}`);\n return FAILURE_VALUE;\n }\n }\n\n return result;\n }\n\n /*\n * Execute a method and return its value\n *\n * @param {object} expression\n * @param {object} symbolTable\n * @returns {*}\n */\n executeExpression(expression, structure, symbolTable) {\n const getNumbers = operation => {\n const left = this.executeExpression(expression.left, structure, symbolTable);\n\n if (left !== FAILURE_VALUE && typeof left === \"number\") {\n const right = this.executeExpression(expression.right, structure, symbolTable);\n\n if (right !== FAILURE_VALUE && typeof right === \"number\") {\n return operation(left, right);\n }\n }\n\n return FAILURE_VALUE;\n };\n\n switch (expression.type) {\n case \"assignment\": {\n const value = this.executeExpression(expression.value, structure, symbolTable);\n\n if (value === FAILURE_VALUE) {\n this.addError(`Unable to evaluate assignment value for ${expression.name}`);\n return FAILURE_VALUE;\n }\n\n symbolTable[expression.name] = value;\n\n return value;\n }\n\n case \"def\":\n symbolTable[expression.name] = expression.value;\n return undefined;\n\n case \"get-value\":\n if (expression.name in symbolTable) {\n const value = symbolTable[expression.name];\n\n if (isObject(value) && value.type === \"sequence\") {\n const seqValue = this.executeExpression(value, structure, symbolTable);\n\n if (seqValue === FAILURE_VALUE) {\n this.addError(`Unable to evaluate sequence ${expression.name}`);\n return FAILURE_VALUE;\n }\n\n return seqValue;\n }\n\n return value;\n }\n else if (expression.name in this.functions) {\n return this.invokeFunction(expression.name, [structure]);\n }\n\n this.addError(`Tried to access unbound symbol: ${expression.name}`);\n return FAILURE_VALUE;\n\n case \"get-property\": {\n const object = this.executeExpression(expression.left, structure, symbolTable);\n\n return (isObject(object)) ? object[expression.right] : FAILURE_VALUE;\n }\n\n case \"get-index\": {\n const {left, right} = expression;\n const array = this.executeExpression(left, structure, symbolTable);\n\n if (Array.isArray(array)) {\n const index = (right < 0) ? array.length + right : right;\n\n return 0 <= index && index < array.length ? array[index] : FAILURE_VALUE;\n }\n\n return FAILURE_VALUE;\n }\n\n case \"get-structure\":\n return structure;\n\n case \"sequences\": {\n let result = FAILURE_VALUE;\n\n for (const sequence of expression.sequences) {\n const sequenceSymbolTable = Object.create(symbolTable);\n\n result = this.executeExpression(sequence, structure, sequenceSymbolTable);\n\n if (result !== FAILURE_VALUE) {\n Object.assign(symbolTable, sequenceSymbolTable);\n break;\n }\n }\n\n return result;\n }\n\n case \"sequence\": {\n let currentObject = structure;\n\n for (const step of expression.steps) {\n if (step.type === \"pattern\") {\n currentObject = this.executePattern(step, currentObject, symbolTable);\n }\n else {\n currentObject = this.executeExpression(step, currentObject, symbolTable);\n }\n\n if (currentObject === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n }\n\n return currentObject;\n }\n\n case \"add\":\n return getNumbers((a, b) => a + b);\n\n case \"map\": {\n const [valueGenerator, transform] = expression.value;\n const values = this.executeExpression(valueGenerator, structure, symbolTable);\n\n if (values !== FAILURE_VALUE) {\n if (Array.isArray(values) === false) {\n this.addError(\"First argument of map must evaluate to an array\");\n return FAILURE_VALUE;\n }\n\n const mapSymbolTable = Object.create(symbolTable);\n\n return values.map(value => this.executeExpression(transform, value, mapSymbolTable));\n }\n\n return FAILURE_VALUE;\n }\n\n case \"patterns\": {\n let result = FAILURE_VALUE;\n\n for (const pattern of expression.patterns) {\n const patternSymbolTable = Object.create(symbolTable);\n\n result = this.executePattern(pattern, structure, patternSymbolTable);\n\n if (result !== FAILURE_VALUE) {\n Object.assign(symbolTable, patternSymbolTable);\n break;\n }\n }\n\n return result;\n }\n\n case \"subtract\":\n return getNumbers((a, b) => a - b);\n\n case \"multiply\":\n return getNumbers((a, b) => a * b);\n\n case \"divide\":\n return getNumbers((a, b) => a / b);\n\n case \"invoke\": {\n const args = expression.args.reduce((accum, arg) => {\n if (arg.type === \"spread\") {\n const value = this.executeExpression(arg.expression, structure, symbolTable);\n // const value = arg.name !== null ? symbolTable[arg.name] : structure;\n\n if (Array.isArray(value)) {\n accum = accum.concat(value);\n }\n else {\n accum.push(value);\n }\n }\n else {\n accum.push(this.executeExpression(arg, structure, symbolTable));\n }\n\n return accum;\n }, []);\n\n if (expression.name in this.functions) {\n return this.invokeFunction(expression.name, args);\n }\n\n this.addError(`Tried to access unbound symbol: ${expression.name}`);\n return FAILURE_VALUE;\n }\n\n case \"array\": {\n const results = [];\n\n for (const element of expression.value) {\n if (element.type === \"assignment\") {\n this.executeExpression(element, structure, symbolTable);\n }\n else {\n const value = this.executeExpression(element, structure, symbolTable);\n\n if (value === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n\n results.push(value);\n }\n }\n\n return results;\n }\n\n case \"boolean\":\n case \"null\":\n case \"number\":\n case \"string\":\n case \"undefined\":\n return expression.value;\n\n case \"object\":\n return this.executeObjectExpression(expression, structure, symbolTable);\n\n default:\n this.addError(`Unrecognized expression type: '${expression.type}'`);\n return FAILURE_VALUE;\n }\n }\n\n /**\n * Execute an object pattern\n *\n * @param {Object} pattern\n * @param {*} structure\n * @param {Object} symbolTable\n * @returns {*}\n */\n executeObjectExpression(pattern, structure, symbolTable) {\n const objectSymbolTable = Object.create(symbolTable);\n const result = {};\n\n for (const element of pattern.value) {\n switch (element.type) {\n case \"property\": {\n const name = this.executeExpression(element.name, structure, objectSymbolTable);\n\n if (name === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n else if (typeof name !== \"string\") {\n this.addError(`Property names must be string types: ${name}`);\n return FAILURE_VALUE;\n }\n\n const value = element.value !== null\n ? this.executeExpression(element.value, structure, objectSymbolTable)\n : symbolTable[name];\n\n if (value === FAILURE_VALUE) {\n this.addError(`Unable to evaluate value for property ${name}`);\n return FAILURE_VALUE;\n }\n\n result[name] = value;\n break;\n }\n\n case \"assignment\": {\n const value = this.executeExpression(element, structure, objectSymbolTable);\n\n if (value === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n break;\n }\n\n default:\n this.addError(`Unrecognized object expression element type: ${element.type}`);\n return FAILURE_VALUE;\n }\n }\n\n return result;\n }\n\n /*\n * Acquire the value of a type pattern from the specified structure. Any named entities will be populated in the\n * specified symbolTable\n *\n * @param {object} pattern\n * @param {*} structure\n * @param {object} symbolTable\n * @returns {*}\n */\n executePattern(pattern, structure, symbolTable) {\n switch (pattern.patternType) {\n case \"any\":\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n\n case \"array\":\n if (Array.isArray(structure)) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n\n return FAILURE_VALUE;\n\n case \"array-pattern\": {\n const result = this.executeArrayPattern(pattern, structure, symbolTable);\n\n return result === FAILURE_VALUE ? FAILURE_VALUE : symbolTable;\n }\n\n case \"boolean\":\n if (typeof structure === \"boolean\") {\n if (pattern.value === null || pattern.value === structure) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n }\n\n return FAILURE_VALUE;\n\n case \"null\":\n if (structure === null) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n\n return FAILURE_VALUE;\n\n case \"number\":\n if (typeof structure === \"number\") {\n if (pattern.value === null || pattern.value === structure) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n }\n\n return FAILURE_VALUE;\n\n case \"object\":\n if (isObject(structure)) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n\n return FAILURE_VALUE;\n\n case \"object-pattern\": {\n if (isObject(structure) === false) {\n return FAILURE_VALUE;\n }\n\n const result = {};\n\n for (const property of pattern.value) {\n const {name, pattern: propertyPattern, assignTo} = property;\n\n if (name in structure) {\n const value = this.executePattern(propertyPattern, structure[name], symbolTable);\n\n if (value === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n\n this.assign(symbolTable, assignTo, structure[name]);\n this.assign(result, assignTo, value);\n }\n else {\n return FAILURE_VALUE;\n }\n }\n\n this.assign(symbolTable, pattern.assignTo, structure);\n return result;\n }\n\n case \"reference\":\n if (pattern.value in this.patterns) {\n const referencedPattern = this.patterns[pattern.value];\n const result = this.executePattern(referencedPattern, structure, symbolTable);\n\n if (result !== FAILURE_VALUE) {\n this.assign(symbolTable, pattern.assignTo, result);\n }\n\n return result;\n }\n\n return FAILURE_VALUE;\n\n case \"string\":\n if (typeof structure === \"string\") {\n if (pattern.value === null || pattern.value === structure) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n }\n\n return FAILURE_VALUE;\n\n case \"undefined\":\n // NOTE: Our current failure value is undefined, so this will be treated as an error. I can change\n // FAILURE_VALUE to be a sigil. I'll just have to be careful to return undefined at the top-most level.\n // I'm leaving this for now as this is probably not going to be used much\n if (structure === undefined) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n\n return FAILURE_VALUE;\n\n default:\n throw new TypeError(`unrecognized pattern type: '${pattern.type}'`);\n }\n }\n\n /*\n * Execute an array pattern\n *\n * @param {Object} pattern\n * @param {*} structure\n * @param {Object} symbolTable\n * @returns {*}\n */\n executeArrayPattern(pattern, structure, symbolTable) {\n if (Array.isArray(structure) === false) {\n return FAILURE_VALUE;\n }\n\n let result = [];\n let index = 0;\n\n for (const element of pattern.value) {\n const results = this.executeArrayPatternElement(element, index, structure, symbolTable);\n\n if (results === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n\n result = result.concat(results);\n index += results.length;\n }\n\n if (index === structure.length) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return result;\n }\n\n return FAILURE_VALUE;\n }\n\n /*\n * Execute an element from an array pattern\n *\n * @param {Object} element\n * @param {number} index\n * @param {*} structure\n * @param {Object} symbolTable\n * @returns {Array|undefined}\n */\n executeArrayPatternElement(element, index, structure, symbolTable) {\n let result = [];\n\n switch (element.type) {\n case \"element\": {\n const results = this.executeArrayElementPattern(element, index, structure, symbolTable);\n\n if (results === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n\n result = result.concat(results);\n index += results.length;\n break;\n }\n\n case \"element-group\": {\n const results = this.executeArrayElementGroupPattern(element, index, structure, symbolTable);\n\n if (results === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n\n result = result.concat(results);\n index += results.length;\n break;\n }\n\n default:\n this.addError(`Unrecognized array pattern element type: '${element.type}'`);\n return FAILURE_VALUE;\n }\n\n return result;\n }\n\n /*\n * Execute array element pattern\n *\n * @param {Object} element\n * @param {number} index\n * @param {*} structure\n * @param {Object} symbolTable\n * @returns {Array|undefined}\n */\n executeArrayElementPattern(element, index, structure, symbolTable) {\n const {pattern, range: {start, stop}} = element;\n const result = [];\n\n for (let i = 0; i < stop; i++) {\n const actualIndex = index + i;\n\n // treat out-of-bounds like a failure\n const value = (actualIndex < structure.length)\n ? this.executePattern(pattern, structure[actualIndex], symbolTable)\n : FAILURE_VALUE;\n\n // if we processed enough, continue, else failure\n if (value === FAILURE_VALUE) {\n if (i >= start) {\n break;\n }\n\n return FAILURE_VALUE;\n }\n\n // save result\n if (stop > 1) {\n this.pushAssign(symbolTable, element.assignTo, value);\n }\n else {\n this.assign(symbolTable, element.assignTo, value);\n }\n result.push(value);\n }\n\n return result;\n }\n\n /*\n * Execute array element group pattern\n *\n * @param {Object} element\n * @param {number} index\n * @param {*} structure\n * @param {Object} symbolTable\n * @returns {Array|undefined}\n */\n executeArrayElementGroupPattern(group, index, structure, symbolTable) {\n const {elements, range: {start, stop}} = group;\n let result = [];\n\n for (let i = 0; i < stop; i++) {\n let groupResults = [];\n\n // all elements must be successful\n for (const element of elements) {\n const elementSymbolTable = Object.create(symbolTable);\n const results = this.executeArrayPatternElement(element, index, structure, elementSymbolTable);\n\n if (results === FAILURE_VALUE) {\n groupResults = FAILURE_VALUE;\n break;\n }\n\n // copy result into main symbol table\n if (element.assignTo !== null && element.assignTo !== undefined && element.assignTo in elementSymbolTable) {\n if (stop > 1) {\n // this.pushAssign(symbolTable, element.assignTo, results);\n this.pushAssign(symbolTable, element.assignTo, elementSymbolTable[element.assignTo]);\n }\n else {\n // this.assign(symbolTable, element.assignTo, results);\n this.assign(symbolTable, element.assignTo, elementSymbolTable[element.assignTo]);\n }\n }\n\n // collect everything that matched and advance to the next item to match\n result = result.concat(results);\n index += results.length;\n\n // collect what we've matched in this group so far\n groupResults = groupResults.concat(results);\n }\n\n if (groupResults === FAILURE_VALUE) {\n // make sure we met our lower bounds criteria\n if (i >= start) {\n // if we didn't process any elements, then we haven't created arrays in the symbol table for this\n // group or its elements.\n if (i === 0) {\n this.assign(symbolTable, group.assignTo, []);\n\n for (const element of elements) {\n this.assign(symbolTable, element.assignTo, []);\n }\n }\n\n return result;\n }\n\n return FAILURE_VALUE;\n }\n\n if (stop > 1) {\n this.pushAssign(symbolTable, group.assignTo, groupResults);\n }\n else {\n this.assign(symbolTable, group.assignTo, groupResults);\n }\n }\n\n return result;\n }\n\n /*\n * Invoke a user-defined method and return its value\n *\n * @param {string} type\n * @param {Array} args\n * @returns {*}\n */\n invokeFunction(type, args) {\n if (type in this.functions) {\n return this.functions[type](...args);\n }\n\n return FAILURE_VALUE;\n }\n\n /**\n * Add a symbol/value to the symbol table, warning if an overwrite is occurring\n *\n * @param {Object} symbolTable\n * @param {string} name\n * @param {*} value\n */\n assign(symbolTable, name, value) {\n if (name !== null && name !== undefined) {\n /* eslint-disable-next-line no-prototype-builtins */\n if (symbolTable.hasOwnProperty(name)) {\n this.addWarning(`Overwriting ${name} with value: ${value}`);\n }\n\n symbolTable[name] = value;\n }\n }\n\n /**\n * Push a value onto the array at the name in the symbol table. If the name is not in the table already, an array will\n * be created and then the value will be pushed to it. This is used for grouped elements.\n *\n * @param {Object} symbolTable\n * @param {string} name\n * @param {*} value\n */\n pushAssign(symbolTable, name, value) {\n if (name !== null && name !== undefined) {\n /* eslint-disable-next-line no-prototype-builtins */\n const items = symbolTable.hasOwnProperty(name)\n ? symbolTable[name]\n : [];\n\n if (Array.isArray(items)) {\n items.push(value);\n\n symbolTable[name] = items;\n }\n else {\n this.addWarning(`Unable to push to ${name} because it is not an array: ${items}`);\n }\n }\n }\n}\n","/**\n * PathLexeme.js\n *\n * @copyright 2002, 2013 Kevin Lindsey\n * @module PathLexeme\n */\n\n/**\n * PathLexeme\n */\nclass PathLexeme {\n /**\n * PathLexeme\n *\n * @param {number} type\n * @param {string} text\n */\n constructor(type, text) {\n this.type = type;\n this.text = text;\n }\n\n /**\n * Determine if this lexeme is of the given type\n *\n * @param {number} type\n * @returns {boolean}\n */\n typeis(type) {\n return this.type === type;\n }\n}\n\n/*\n * token type enumerations\n */\nPathLexeme.UNDEFINED = 0;\nPathLexeme.COMMAND = 1;\nPathLexeme.NUMBER = 2;\nPathLexeme.EOD = 3;\n\nexport default PathLexeme;\n","/**\n * PathLexer.js\n *\n * @copyright 2003, 2013 Kevin Lindsey\n * @module PathLexer\n */\n\nimport PathLexeme from \"./PathLexeme.js\";\n\n/**\n * Create a new instance of PathLexer\n */\nclass PathLexer {\n /**\n * @param {string} [pathData]\n */\n constructor(pathData) {\n if (pathData === null || pathData === undefined) {\n pathData = \"\";\n }\n\n this.setPathData(pathData);\n }\n\n /**\n * setPathData\n *\n * @param {string} pathData\n */\n setPathData(pathData) {\n if (typeof pathData !== \"string\") {\n throw new TypeError(\"The first parameter must be a string\");\n }\n\n this._pathData = pathData;\n }\n\n /**\n * getNextToken\n *\n * @returns {PathLexeme}\n */\n getNextToken() {\n let result = null;\n let d = this._pathData;\n\n while (result === null) {\n if (d === null || d === \"\") {\n result = new PathLexeme(PathLexeme.EOD, \"\");\n }\n else if (d.match(/^([ \\t\\r\\n,]+)/)) {\n d = d.substr(RegExp.$1.length);\n }\n else if (d.match(/^([AaCcHhLlMmQqSsTtVvZz])/)) {\n result = new PathLexeme(PathLexeme.COMMAND, RegExp.$1);\n d = d.substr(RegExp.$1.length);\n }\n /* eslint-disable-next-line unicorn/no-unsafe-regex */\n else if (d.match(/^(([-+]?\\d+(\\.\\d*)?|[-+]?\\.\\d+)([eE][-+]?\\d+)?)/)) {\n result = new PathLexeme(PathLexeme.NUMBER, RegExp.$1);\n d = d.substr(RegExp.$1.length);\n }\n else {\n throw new SyntaxError(`Unrecognized path data: ${d}`);\n }\n }\n\n this._pathData = d;\n\n return result;\n }\n}\n\nexport default PathLexer;\n","/**\n * PathParser.js\n *\n * @copyright 2003, 2017 Kevin Lindsey\n * @module PathParser\n */\n\nimport PathLexer from \"./PathLexer.js\";\nimport PathLexeme from \"./PathLexeme.js\";\n\nconst BOP = \"BOP\";\n\n/**\n * PathParser\n */\nclass PathParser {\n /**\n * constructor\n */\n constructor() {\n this._lexer = new PathLexer();\n this._handler = null;\n }\n\n /**\n * parseData\n *\n * @param {string} pathData\n * @throws {Error}\n */\n parseData(pathData) {\n if (typeof pathData !== \"string\") {\n throw new TypeError(`The first parameter must be a string: ${pathData}`);\n }\n\n // begin parse\n if (this._handler !== null && typeof this._handler.beginParse === \"function\") {\n this._handler.beginParse();\n }\n\n // pass the pathData to the lexer\n const lexer = this._lexer;\n\n lexer.setPathData(pathData);\n\n // set mode to signify new path - Beginning Of Path\n let mode = BOP;\n\n // Process all tokens\n let lastToken = null;\n let token = lexer.getNextToken();\n\n while (token.typeis(PathLexeme.EOD) === false) {\n let parameterCount;\n const params = [];\n\n // process current token\n switch (token.type) {\n case PathLexeme.COMMAND:\n if (mode === BOP && token.text !== \"M\" && token.text !== \"m\") {\n throw new SyntaxError(`New paths must begin with a moveto command. Found '${token.text}'`);\n }\n\n // Set new parsing mode\n mode = token.text;\n\n // Get count of numbers that must follow this command\n parameterCount = PathParser.PARAMCOUNT[token.text.toUpperCase()];\n\n // Advance past command token\n token = lexer.getNextToken();\n break;\n\n case PathLexeme.NUMBER:\n // Most commands allow you to keep repeating parameters\n // without specifying the command again. We just assume\n // that is the case and do nothing since the mode remains\n // the same\n\n if (mode === BOP) {\n throw new SyntaxError(`New paths must begin with a moveto command. Found '${token.text}'`);\n }\n else {\n parameterCount = PathParser.PARAMCOUNT[mode.toUpperCase()];\n }\n break;\n\n default:\n throw new SyntaxError(`Unrecognized command type: ${token.type}`);\n }\n\n // Get parameters\n for (let i = 0; i < parameterCount; i++) {\n switch (token.type) {\n case PathLexeme.COMMAND:\n throw new SyntaxError(`Parameter must be a number. Found '${token.text}'`);\n\n case PathLexeme.NUMBER:\n // convert current parameter to a float and add to\n // parameter list\n params[i] = parseFloat(token.text);\n break;\n\n case PathLexeme.EOD:\n throw new SyntaxError(\"Unexpected end of string\");\n\n default:\n throw new SyntaxError(`Unrecognized parameter type. Found type '${token.type}'`);\n }\n\n token = lexer.getNextToken();\n }\n\n // fire handler\n if (this._handler !== null) {\n const handler = this._handler;\n const methodName = PathParser.METHODNAME[mode];\n\n // convert types for arcs\n if (mode === \"a\" || mode === \"A\") {\n params[3] = params[3] !== 0;\n params[4] = params[4] !== 0;\n }\n\n if (handler !== null && typeof handler[methodName] === \"function\") {\n handler[methodName](...params);\n }\n }\n\n // Lineto's follow moveto when no command follows moveto params. Go\n // ahead and set the mode just in case no command follows the moveto\n // command\n switch (mode) {\n case \"M\":\n mode = \"L\";\n break;\n case \"m\":\n mode = \"l\";\n break;\n case \"Z\":\n case \"z\":\n mode = \"BOP\";\n break;\n default:\n // ignore for now\n }\n\n if (token === lastToken) {\n throw new SyntaxError(`Parser stalled on '${token.text}'`);\n }\n else {\n lastToken = token;\n }\n }\n\n // end parse\n if (this._handler !== null && typeof this._handler.endParse === \"function\") {\n this._handler.endParse();\n }\n }\n\n /**\n * setHandler\n *\n * @param {Object} handler\n */\n setHandler(handler) {\n this._handler = handler;\n }\n}\n\n/*\n * class constants\n */\nPathParser.PARAMCOUNT = {\n A: 7,\n C: 6,\n H: 1,\n L: 2,\n M: 2,\n Q: 4,\n S: 4,\n T: 2,\n V: 1,\n Z: 0\n};\nPathParser.METHODNAME = {\n A: \"arcAbs\",\n a: \"arcRel\",\n C: \"curvetoCubicAbs\",\n c: \"curvetoCubicRel\",\n H: \"linetoHorizontalAbs\",\n h: \"linetoHorizontalRel\",\n L: \"linetoAbs\",\n l: \"linetoRel\",\n M: \"movetoAbs\",\n m: \"movetoRel\",\n Q: \"curvetoQuadraticAbs\",\n q: \"curvetoQuadraticRel\",\n S: \"curvetoCubicSmoothAbs\",\n s: \"curvetoCubicSmoothRel\",\n T: \"curvetoQuadraticSmoothAbs\",\n t: \"curvetoQuadraticSmoothRel\",\n V: \"linetoVerticalAbs\",\n v: \"linetoVerticalRel\",\n Z: \"closePath\",\n z: \"closePath\"\n};\n\nexport default PathParser;\n","/**\n * PathHandler.js\n *\n * @copyright 2017 Kevin Lindsey\n */\n\nimport {Point2D, Vector2D} from \"kld-affine\";\n\nconst TWO_PI = 2.0 * Math.PI;\n\n/**\n * normalizeAngle\n *\n * @param {number} radians\n * @returns {number}\n */\nfunction normalizeAngle(radians) {\n const normal = radians % TWO_PI;\n\n return normal < 0.0 ? normal + TWO_PI : normal;\n}\n\n/**\n * Based on the SVG 1.1 specification, Appendix F: Implementation Requirements,\n * Section F.6 \"Elliptical arc implementation notes\"\n * {@see https://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes}\n *\n * @param {module:kld-affine.Point2D} startPoint\n * @param {module:kld-affine.Point2D} endPoint\n * @param {number} rx\n * @param {number} ry\n * @param {number} angle\n * @param {boolean} arcFlag\n * @param {boolean} sweepFlag\n * @returns {Array}\n */\nfunction getArcParameters(startPoint, endPoint, rx, ry, angle, arcFlag, sweepFlag) {\n angle = angle * Math.PI / 180;\n\n const c = Math.cos(angle);\n const s = Math.sin(angle);\n const TOLERANCE = 1e-6;\n\n // Section (F.6.5.1)\n const halfDiff = startPoint.subtract(endPoint).multiply(0.5);\n const x1p = halfDiff.x * c + halfDiff.y * s;\n const y1p = halfDiff.x * -s + halfDiff.y * c;\n\n // Section (F.6.6.1)\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n\n // Section (F.6.6.2)\n const x1px1p = x1p * x1p;\n const y1py1p = y1p * y1p;\n const lambda = (x1px1p / (rx * rx)) + (y1py1p / (ry * ry));\n\n // Section (F.6.6.3)\n if (lambda > 1) {\n const factor = Math.sqrt(lambda);\n\n rx *= factor;\n ry *= factor;\n }\n\n // Section (F.6.5.2)\n const rxrx = rx * rx;\n const ryry = ry * ry;\n const rxy1 = rxrx * y1py1p;\n const ryx1 = ryry * x1px1p;\n\n let factor = (rxrx * ryry - rxy1 - ryx1) / (rxy1 + ryx1);\n\n if (Math.abs(factor) < TOLERANCE) {\n factor = 0;\n }\n\n let sq = Math.sqrt(factor);\n\n if (arcFlag === sweepFlag) {\n sq = -sq;\n }\n\n // Section (F.6.5.3)\n const mid = startPoint.add(endPoint).multiply(0.5);\n const cxp = sq * rx * y1p / ry;\n const cyp = sq * -ry * x1p / rx;\n\n // Section (F.6.5.5 - F.6.5.6)\n const xcr1 = (x1p - cxp) / rx;\n const xcr2 = (x1p + cxp) / rx;\n const ycr1 = (y1p - cyp) / ry;\n const ycr2 = (y1p + cyp) / ry;\n\n const theta1 = new Vector2D(1, 0).angleBetween(new Vector2D(xcr1, ycr1));\n let deltaTheta = normalizeAngle(new Vector2D(xcr1, ycr1).angleBetween(new Vector2D(-xcr2, -ycr2)));\n\n if (sweepFlag === false) {\n deltaTheta -= TWO_PI;\n }\n\n return [\n cxp * c - cyp * s + mid.x,\n cxp * s + cyp * c + mid.y,\n rx,\n ry,\n theta1,\n theta1 + deltaTheta\n ];\n}\n\n/**\n * PathHandler\n */\nclass PathHandler {\n /**\n * PathHandler\n *\n * @param {ShapeInfo} shapeCreator\n */\n constructor(shapeCreator) {\n this.shapeCreator = shapeCreator;\n this.shapes = [];\n this.firstX = null;\n this.firstY = null;\n this.lastX = null;\n this.lastY = null;\n this.lastCommand = null;\n }\n\n /**\n * beginParse\n */\n beginParse() {\n // zero out the sub-path array\n this.shapes = [];\n\n // clear firstX, firstY, lastX, and lastY\n this.firstX = null;\n this.firstY = null;\n this.lastX = null;\n this.lastY = null;\n\n // need to remember last command type to determine how to handle the\n // relative Bezier commands\n this.lastCommand = null;\n }\n\n /**\n * addShape\n *\n * @param {ShapeInfo} shape\n */\n addShape(shape) {\n this.shapes.push(shape);\n }\n\n /**\n * arcAbs - A\n *\n * @param {number} rx\n * @param {number} ry\n * @param {number} xAxisRotation\n * @param {boolean} arcFlag\n * @param {boolean} sweepFlag\n * @param {number} x\n * @param {number} y\n */\n arcAbs(rx, ry, xAxisRotation, arcFlag, sweepFlag, x, y) {\n if (rx === 0 || ry === 0) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n x, y\n ));\n }\n else {\n const arcParameters = getArcParameters(\n new Point2D(this.lastX, this.lastY),\n new Point2D(x, y),\n rx, ry,\n xAxisRotation,\n arcFlag, sweepFlag\n );\n\n this.addShape(this.shapeCreator.arc(...arcParameters));\n }\n\n this.lastCommand = \"A\";\n this.lastX = x;\n this.lastY = y;\n }\n\n /**\n * arcRel - a\n *\n * @param {number} rx\n * @param {number} ry\n * @param {number} xAxisRotation\n * @param {boolean} arcFlag\n * @param {boolean} sweepFlag\n * @param {number} x\n * @param {number} y\n */\n arcRel(rx, ry, xAxisRotation, arcFlag, sweepFlag, x, y) {\n if (rx === 0 || ry === 0) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n this.lastX + x, this.lastY + y\n ));\n }\n else {\n const arcParameters = getArcParameters(\n new Point2D(this.lastX, this.lastY),\n new Point2D(this.lastX + x, this.lastY + y),\n rx, ry,\n xAxisRotation,\n arcFlag, sweepFlag\n );\n\n this.addShape(this.shapeCreator.arc(...arcParameters));\n }\n\n this.lastCommand = \"a\";\n this.lastX += x;\n this.lastY += y;\n }\n\n /**\n * curvetoCubicAbs - C\n *\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x\n * @param {number} y\n */\n curvetoCubicAbs(x1, y1, x2, y2, x, y) {\n this.addShape(this.shapeCreator.cubicBezier(\n this.lastX, this.lastY,\n x1, y1,\n x2, y2,\n x, y\n ));\n\n this.lastX = x;\n this.lastY = y;\n this.lastCommand = \"C\";\n }\n\n /**\n * curvetoCubicRel - c\n *\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x\n * @param {number} y\n */\n curvetoCubicRel(x1, y1, x2, y2, x, y) {\n this.addShape(this.shapeCreator.cubicBezier(\n this.lastX, this.lastY,\n this.lastX + x1, this.lastY + y1,\n this.lastX + x2, this.lastY + y2,\n this.lastX + x, this.lastY + y\n ));\n\n this.lastX += x;\n this.lastY += y;\n this.lastCommand = \"c\";\n }\n\n /**\n * linetoHorizontalAbs - H\n *\n * @param {number} x\n */\n linetoHorizontalAbs(x) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n x, this.lastY\n ));\n\n this.lastX = x;\n this.lastCommand = \"H\";\n }\n\n /**\n * linetoHorizontalRel - h\n *\n * @param {number} x\n */\n linetoHorizontalRel(x) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n this.lastX + x, this.lastY\n ));\n\n this.lastX += x;\n this.lastCommand = \"h\";\n }\n\n /**\n * linetoAbs - L\n *\n * @param {number} x\n * @param {number} y\n */\n linetoAbs(x, y) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n x, y\n ));\n\n this.lastX = x;\n this.lastY = y;\n this.lastCommand = \"L\";\n }\n\n /**\n * linetoRel - l\n *\n * @param {number} x\n * @param {number} y\n */\n linetoRel(x, y) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n this.lastX + x, this.lastY + y\n ));\n\n this.lastX += x;\n this.lastY += y;\n this.lastCommand = \"l\";\n }\n\n /**\n * movetoAbs - M\n *\n * @param {number} x\n * @param {number} y\n */\n movetoAbs(x, y) {\n this.firstX = x;\n this.firstY = y;\n this.lastX = x;\n this.lastY = y;\n this.lastCommand = \"M\";\n }\n\n /**\n * movetoRel - m\n *\n * @param {number} x\n * @param {number} y\n */\n movetoRel(x, y) {\n this.firstX += x;\n this.firstY += y;\n this.lastX += x;\n this.lastY += y;\n this.lastCommand = \"m\";\n }\n\n /**\n * curvetoQuadraticAbs - Q\n *\n * @param {number} x1\n * @param {number} y1\n * @param {number} x\n * @param {number} y\n */\n curvetoQuadraticAbs(x1, y1, x, y) {\n this.addShape(this.shapeCreator.quadraticBezier(\n this.lastX, this.lastY,\n x1, y1,\n x, y\n ));\n\n this.lastX = x;\n this.lastY = y;\n this.lastCommand = \"Q\";\n }\n\n /**\n * curvetoQuadraticRel - q\n *\n * @param {number} x1\n * @param {number} y1\n * @param {number} x\n * @param {number} y\n */\n curvetoQuadraticRel(x1, y1, x, y) {\n this.addShape(this.shapeCreator.quadraticBezier(\n this.lastX, this.lastY,\n this.lastX + x1, this.lastY + y1,\n this.lastX + x, this.lastY + y\n ));\n\n this.lastX += x;\n this.lastY += y;\n this.lastCommand = \"q\";\n }\n\n /**\n * curvetoCubicSmoothAbs - S\n *\n * @param {number} x2\n * @param {number} y2\n * @param {number} x\n * @param {number} y\n */\n curvetoCubicSmoothAbs(x2, y2, x, y) {\n let controlX, controlY;\n\n if (this.lastCommand.match(/^[SsCc]$/)) {\n const secondToLast = this.shapes[this.shapes.length - 1].args[2];\n\n controlX = 2 * this.lastX - secondToLast.x;\n controlY = 2 * this.lastY - secondToLast.y;\n }\n else {\n controlX = this.lastX;\n controlY = this.lastY;\n }\n\n this.addShape(this.shapeCreator.cubicBezier(\n this.lastX, this.lastY,\n controlX, controlY,\n x2, y2,\n x, y\n ));\n\n this.lastX = x;\n this.lastY = y;\n this.lastCommand = \"S\";\n }\n\n /**\n * curvetoCubicSmoothRel - s\n *\n * @param {number} x2\n * @param {number} y2\n * @param {number} x\n * @param {number} y\n */\n curvetoCubicSmoothRel(x2, y2, x, y) {\n let controlX, controlY;\n\n if (this.lastCommand.match(/^[SsCc]$/)) {\n const secondToLast = this.shapes[this.shapes.length - 1].args[2];\n\n controlX = 2 * this.lastX - secondToLast.x;\n controlY = 2 * this.lastY - secondToLast.y;\n }\n else {\n controlX = this.lastX;\n controlY = this.lastY;\n }\n\n this.addShape(this.shapeCreator.cubicBezier(\n this.lastX, this.lastY,\n controlX, controlY,\n this.lastX + x2, this.lastY + y2,\n this.lastX + x, this.lastY + y\n ));\n\n this.lastX += x;\n this.lastY += y;\n this.lastCommand = \"s\";\n }\n\n /**\n * curvetoQuadraticSmoothAbs - T\n *\n * @param {number} x\n * @param {number} y\n */\n curvetoQuadraticSmoothAbs(x, y) {\n let controlX, controlY;\n\n if (this.lastCommand.match(/^[QqTt]$/)) {\n const secondToLast = this.shapes[this.shapes.length - 1].args[1];\n\n controlX = 2 * this.lastX - secondToLast.x;\n controlY = 2 * this.lastY - secondToLast.y;\n }\n else {\n controlX = this.lastX;\n controlY = this.lastY;\n }\n\n this.addShape(this.shapeCreator.quadraticBezier(\n this.lastX, this.lastY,\n controlX, controlY,\n x, y\n ));\n\n this.lastX = x;\n this.lastY = y;\n this.lastCommand = \"T\";\n }\n\n /**\n * curvetoQuadraticSmoothRel - t\n *\n * @param {number} x\n * @param {number} y\n */\n curvetoQuadraticSmoothRel(x, y) {\n let controlX, controlY;\n\n if (this.lastCommand.match(/^[QqTt]$/)) {\n const secondToLast = this.shapes[this.shapes.length - 1].args[1];\n\n controlX = 2 * this.lastX - secondToLast.x;\n controlY = 2 * this.lastY - secondToLast.y;\n }\n else {\n controlX = this.lastX;\n controlY = this.lastY;\n }\n\n this.addShape(this.shapeCreator.quadraticBezier(\n this.lastX, this.lastY,\n controlX, controlY,\n this.lastX + x, this.lastY + y\n ));\n\n this.lastX += x;\n this.lastY += y;\n this.lastCommand = \"t\";\n }\n\n /**\n * linetoVerticalAbs - V\n *\n * @param {number} y\n */\n linetoVerticalAbs(y) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n this.lastX, y\n ));\n\n this.lastY = y;\n\n this.lastCommand = \"V\";\n }\n\n /**\n * linetoVerticalRel - v\n *\n * @param {number} y\n */\n linetoVerticalRel(y) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n this.lastX, this.lastY + y\n ));\n\n this.lastY += y;\n\n this.lastCommand = \"v\";\n }\n\n /**\n * closePath - z or Z\n */\n closePath() {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n this.firstX, this.firstY\n ));\n\n this.lastX = this.firstX;\n this.lastY = this.firstY;\n this.lastCommand = \"z\";\n }\n}\n\nexport default PathHandler;\n","/**\n * ShapeInfo.js\n * @copyright 2002, 2017 Kevin Lindsey\n */\n\nimport {Point2D} from \"kld-affine\";\nimport {Transformer, FAILURE_VALUE} from \"gp-data-transformer\";\nimport {PathParser} from \"kld-path-parser\";\nimport PathHandler from \"./PathHandler.js\";\nimport transformSource from \"./TransformSource.js\";\n\nconst degree90 = Math.PI * 0.5;\n\n/**\n * ShapeInfo\n * @memberof module:kld-intersections\n */\nexport default class ShapeInfo {\n /**\n * @param {string} name\n * @param {Array} args\n * @returns {module:kld-intersections.ShapeInfo}\n */\n constructor(name, args) {\n this.name = name;\n this.args = args;\n }\n\n static arc(...args) {\n return create(ShapeInfo.ARC, args, [\"center\", \"radiusX\", \"radiusY\", \"startRadians\", \"endRadians\"]);\n }\n\n static quadraticBezier(...args) {\n return create(ShapeInfo.QUADRATIC_BEZIER, args, [\"p1\", \"p2\", \"p3\"]);\n }\n\n static cubicBezier(...args) {\n return create(ShapeInfo.CUBIC_BEZIER, args, [\"p1\", \"p2\", \"p3\", \"p4\"]);\n }\n\n static circle(...args) {\n return create(ShapeInfo.CIRCLE, args, [\"center\", \"radius\"]);\n }\n\n static ellipse(...args) {\n return create(ShapeInfo.ELLIPSE, args, [\"center\", \"radiusX\", \"radiusY\"]);\n }\n\n static line(...args) {\n return create(ShapeInfo.LINE, args, [\"p1\", \"p2\"]);\n }\n\n static path(...args) {\n return create(ShapeInfo.PATH, args, [\"segments\"]);\n }\n\n static polygon(...args) {\n return create(ShapeInfo.POLYGON, args, [\"points\"]);\n }\n\n static polyline(...args) {\n return create(ShapeInfo.POLYLINE, args, [\"points\"]);\n }\n\n static rectangle(...args) {\n const result = create(ShapeInfo.RECTANGLE, args, [\"topLeft\", \"bottomRight\", \"rx\", \"ry\"]);\n\n let ry = result.args.pop();\n let rx = result.args.pop();\n\n rx = rx === undefined ? 0 : rx;\n ry = ry === undefined ? 0 : ry;\n\n if (rx === 0 && ry === 0) {\n return result;\n }\n\n const {x: p1x, y: p1y} = result.args[0];\n const {x: p2x, y: p2y} = result.args[1];\n const width = p2x - p1x;\n const height = p2y - p1y;\n\n if (rx === 0) {\n rx = ry;\n }\n if (ry === 0) {\n ry = rx;\n }\n if (rx > width * 0.5) {\n rx = width * 0.5;\n }\n if (ry > height * 0.5) {\n ry = height * 0.5;\n }\n\n const x0 = p1x;\n const y0 = p1y;\n const x1 = p1x + rx;\n const y1 = p1y + ry;\n const x2 = p2x - rx;\n const y2 = p2y - ry;\n const x3 = p2x;\n const y3 = p2y;\n\n const segments = [\n ShapeInfo.arc(x1, y1, rx, ry, 2 * degree90, 3 * degree90),\n ShapeInfo.line(x1, y0, x2, y0),\n ShapeInfo.arc(x2, y1, rx, ry, 3 * degree90, 4 * degree90),\n ShapeInfo.line(x3, y1, x3, y2),\n ShapeInfo.arc(x2, y2, rx, ry, 0, degree90),\n ShapeInfo.line(x2, y3, x1, y3),\n ShapeInfo.arc(x1, y2, rx, ry, degree90, 2 * degree90),\n ShapeInfo.line(x0, y2, x0, y1)\n ];\n\n return new ShapeInfo(ShapeInfo.PATH, segments);\n }\n}\n\n/**\n * Create a shape\n *\n * @param {string} type\n * @param {Object} object\n * @param {Array} properties\n * @returns {ShapeInfo}\n */\nfunction create(type, object, properties) {\n let transformType;\n\n if (object.length === 1) {\n object = object[0];\n\n transformType = Array.isArray(object) || typeof object === \"string\"\n ? type + \"Args\"\n : type;\n }\n else {\n transformType = type + \"Args\";\n }\n\n // normalize the data\n const data = transformer.execute(transformType, object);\n\n if (data === FAILURE_VALUE) {\n // for (const message of transformer.messages) {\n // console.log(message);\n // }\n\n throw new TypeError(`${type} is not in a recognizable format: ${JSON.stringify(object)}`);\n }\n\n // pull out the arguments\n const args = properties.length === 1\n ? data[properties[0]]\n : properties.map(name => data[name]);\n\n // return a new ShapeInfo\n return new ShapeInfo(type, args);\n}\n\n// define shape name constants\nShapeInfo.ARC = \"Arc\";\nShapeInfo.QUADRATIC_BEZIER = \"Bezier2\";\nShapeInfo.CUBIC_BEZIER = \"Bezier3\";\nShapeInfo.CIRCLE = \"Circle\";\nShapeInfo.ELLIPSE = \"Ellipse\";\nShapeInfo.LINE = \"Line\";\nShapeInfo.PATH = \"Path\";\nShapeInfo.POLYGON = \"Polygon\";\nShapeInfo.POLYLINE = \"Polyline\";\nShapeInfo.RECTANGLE = \"Rectangle\";\n\n// create shape argument normalizer\nconst transformer = new Transformer();\ntransformer.execute(transformSource);\n\n// attach custom generators\ntransformer.addFunction(\"Point2D\", (x, y) => new Point2D(x, y));\ntransformer.addFunction(\"PathData\", pathData => {\n const parser = new PathParser();\n const handler = new PathHandler(ShapeInfo);\n\n parser.setHandler(handler);\n parser.parseData(pathData);\n\n return handler.shapes;\n});\n","/* eslint-disable camelcase, no-labels */\n/**\n *\n * Intersection.js\n *\n * copyright 2002, 2013 Kevin Lindsey\n */\n\nimport {Point2D, Vector2D} from \"kld-affine\";\nimport {Polynomial} from \"kld-polynomial\";\nimport ShapeInfo from \"./ShapeInfo.js\";\n\nconst TWO_PI = 2.0 * Math.PI;\nconst UNIT_X = new Vector2D(1, 0);\n\n/**\n * @memberof module:kld-intersections.Intersection\n * @param {*} o\n * @returns {boolean}\n */\nfunction isNullish(o) {\n return o === null || o === undefined;\n}\n\n/**\n * bezout\n *\n * This code is based on MgcIntr2DElpElp.cpp written by David Eberly. His\n * code along with many other excellent examples are avaiable at his site:\n * http://www.magic-software.com\n *\n * @param {Array} e1\n * @param {Array} e2\n * @returns {external:Polynomial}\n */\nfunction bezout(e1, e2) {\n const AB = e1[0] * e2[1] - e2[0] * e1[1];\n const AC = e1[0] * e2[2] - e2[0] * e1[2];\n const AD = e1[0] * e2[3] - e2[0] * e1[3];\n const AE = e1[0] * e2[4] - e2[0] * e1[4];\n const AF = e1[0] * e2[5] - e2[0] * e1[5];\n const BC = e1[1] * e2[2] - e2[1] * e1[2];\n const BE = e1[1] * e2[4] - e2[1] * e1[4];\n const BF = e1[1] * e2[5] - e2[1] * e1[5];\n const CD = e1[2] * e2[3] - e2[2] * e1[3];\n const DE = e1[3] * e2[4] - e2[3] * e1[4];\n const DF = e1[3] * e2[5] - e2[3] * e1[5];\n const BFpDE = BF + DE;\n const BEmCD = BE - CD;\n\n return new Polynomial(\n AB * BC - AC * AC,\n AB * BEmCD + AD * BC - 2 * AC * AE,\n AB * BFpDE + AD * BEmCD - AE * AE - 2 * AC * AF,\n AB * DF + AD * BFpDE - 2 * AE * AF,\n AD * DF - AF * AF\n );\n}\n\n/**\n * normalizeAngle\n *\n * @param {number} radians\n * @returns {number}\n */\nfunction normalizeAngle(radians) {\n const normal = radians % TWO_PI;\n\n return normal < 0.0 ? normal + TWO_PI : normal;\n}\n\n/**\n * restrictPointsToArc\n *\n * @param {module:kld-intersections.Intersection} intersections\n * @param {module:kld-intersections.Point2D} center\n * @param {number} radiusX\n * @param {number} radiusY\n * @param {number} startRadians\n * @param {number} endRadians\n * @returns {module:kld-intersections.Intersection}\n */\nfunction restrictPointsToArc(intersections, center, radiusX, radiusY, startRadians, endRadians) {\n if (intersections.points.length === 0) {\n return intersections;\n }\n\n const result = new Intersection(\"No Intersection\");\n const startNormal = normalizeAngle(startRadians);\n let endNormal = normalizeAngle(endRadians);\n\n // Advance end angle one turn if it's lower than the start angle so our interval test will work correctly\n if (endNormal < startNormal) {\n endNormal += TWO_PI;\n }\n\n for (const p of intersections.points) {\n const a = normalizeAngle(UNIT_X.angleBetween(Vector2D.fromPoints(center, p)));\n\n if (startNormal <= a && a <= endNormal) {\n result.appendPoint(p);\n }\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n}\n\n/**\n * closePolygon\n * @memberof module:kld-intersections.Intersection\n * @param {Array} points\n * @returns {Array}\n */\nfunction closePolygon(points) {\n const copy = points.slice();\n\n copy.push(points[0]);\n\n return copy;\n}\n\n/**\n * Intersection\n * @memberof module:kld-intersections\n */\nclass Intersection {\n /**\n * @param {string} status\n * @returns {module:kld-intersections.Intersection}\n */\n constructor(status) {\n this.init(status);\n }\n\n\n /**\n * init\n *\n * @param {string} status\n * @returns {module:kld-intersections.Intersection}\n */\n init(status) {\n this.status = status;\n this.points = [];\n }\n\n /**\n * intersect\n *\n * @param {module:kld-intersections.ShapeInfo} shape1\n * @param {module:kld-intersections.ShapeInfo} shape2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersect(shape1, shape2) {\n let result;\n\n if (!isNullish(shape1) && !isNullish(shape2)) {\n if (shape1.name === \"Path\") {\n result = Intersection.intersectPathShape(shape1, shape2);\n }\n else if (shape2.name === \"Path\") {\n result = Intersection.intersectPathShape(shape2, shape1);\n }\n else if (shape1.name === \"Arc\") {\n result = Intersection.intersectArcShape(shape1, shape2);\n }\n else if (shape2.name === \"Arc\") {\n result = Intersection.intersectArcShape(shape2, shape1);\n }\n else {\n let method;\n let args;\n\n if (shape1.name < shape2.name) {\n method = \"intersect\" + shape1.name + shape2.name;\n args = shape1.args.concat(shape2.args);\n }\n else {\n method = \"intersect\" + shape2.name + shape1.name;\n args = shape2.args.concat(shape1.args);\n }\n\n if (!(method in Intersection)) {\n throw new TypeError(\"Intersection not available: \" + method);\n }\n\n result = Intersection[method].apply(null, args);\n }\n }\n else {\n result = new Intersection(\"No Intersection\");\n }\n\n return result;\n }\n\n /**\n * intersectPathShape\n *\n * @param {module:kld-intersections.ShapeInfo} path\n * @param {module:kld-intersections.ShapeInfo} shape\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectPathShape(path, shape) {\n const result = new Intersection(\"No Intersection\");\n\n for (const segment of path.args) {\n const inter = Intersection.intersect(segment, shape);\n\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectArcShape\n *\n * @param {module:kld-intersections.ShapeInfo} arc\n * @param {module:kld-intersections.ShapeInfo} shape\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectArcShape(arc, shape) {\n const [center, radiusX, radiusY, startRadians, endRadians] = arc.args;\n const ellipse = new ShapeInfo(ShapeInfo.ELLIPSE, [center, radiusX, radiusY]);\n const ellipse_result = Intersection.intersect(ellipse, shape);\n\n // return ellipse_result;\n return restrictPointsToArc(ellipse_result, center, radiusX, radiusY, startRadians, endRadians);\n }\n\n /**\n * intersectBezier2Bezier2\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} a3\n * @param {module:kld-intersections.Point2D} b1\n * @param {module:kld-intersections.Point2D} b2\n * @param {module:kld-intersections.Point2D} b3\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Bezier2(a1, a2, a3, b1, b2, b3) {\n let a, b;\n const result = new Intersection(\"No Intersection\");\n\n a = a2.multiply(-2);\n const c12 = a1.add(a.add(a3));\n\n a = a1.multiply(-2);\n b = a2.multiply(2);\n const c11 = a.add(b);\n\n const c10 = new Point2D(a1.x, a1.y);\n\n a = b2.multiply(-2);\n const c22 = b1.add(a.add(b3));\n\n a = b1.multiply(-2);\n b = b2.multiply(2);\n const c21 = a.add(b);\n\n const c20 = new Point2D(b1.x, b1.y);\n\n // bezout\n a = c12.x * c11.y - c11.x * c12.y;\n b = c22.x * c11.y - c11.x * c22.y;\n const c = c21.x * c11.y - c11.x * c21.y;\n const d = c11.x * (c10.y - c20.y) + c11.y * (-c10.x + c20.x);\n const e = c22.x * c12.y - c12.x * c22.y;\n const f = c21.x * c12.y - c12.x * c21.y;\n const g = c12.x * (c10.y - c20.y) + c12.y * (-c10.x + c20.x);\n\n // determinant\n const poly = new Polynomial(\n -e * e,\n -2 * e * f,\n a * b - f * f - 2 * e * g,\n a * c - 2 * f * g,\n a * d - g * g\n );\n\n const roots = poly.getRoots();\n\n for (const s of roots) {\n if (0 <= s && s <= 1) {\n const xp = new Polynomial(\n c12.x,\n c11.x,\n c10.x - c20.x - s * c21.x - s * s * c22.x\n );\n xp.simplifyEquals();\n const xRoots = xp.getRoots();\n const yp = new Polynomial(\n c12.y,\n c11.y,\n c10.y - c20.y - s * c21.y - s * s * c22.y\n );\n yp.simplifyEquals();\n const yRoots = yp.getRoots();\n\n if (xRoots.length > 0 && yRoots.length > 0) {\n const TOLERANCE = 1e-4;\n\n checkRoots:\n for (const xRoot of xRoots) {\n if (0 <= xRoot && xRoot <= 1) {\n for (let k = 0; k < yRoots.length; k++) {\n if (Math.abs(xRoot - yRoots[k]) < TOLERANCE) {\n result.points.push(c22.multiply(s * s).add(c21.multiply(s).add(c20)));\n break checkRoots;\n }\n }\n }\n }\n }\n }\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier2Bezier3\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} a3\n * @param {module:kld-intersections.Point2D} b1\n * @param {module:kld-intersections.Point2D} b2\n * @param {module:kld-intersections.Point2D} b3\n * @param {module:kld-intersections.Point2D} b4\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Bezier3(a1, a2, a3, b1, b2, b3, b4) {\n let a, b, c, d;\n const result = new Intersection(\"No Intersection\");\n\n a = a2.multiply(-2);\n const c12 = a1.add(a.add(a3));\n\n a = a1.multiply(-2);\n b = a2.multiply(2);\n const c11 = a.add(b);\n\n const c10 = new Point2D(a1.x, a1.y);\n\n a = b1.multiply(-1);\n b = b2.multiply(3);\n c = b3.multiply(-3);\n d = a.add(b.add(c.add(b4)));\n const c23 = new Point2D(d.x, d.y);\n\n a = b1.multiply(3);\n b = b2.multiply(-6);\n c = b3.multiply(3);\n d = a.add(b.add(c));\n const c22 = new Point2D(d.x, d.y);\n\n a = b1.multiply(-3);\n b = b2.multiply(3);\n c = a.add(b);\n const c21 = new Point2D(c.x, c.y);\n\n const c20 = new Point2D(b1.x, b1.y);\n\n const c10x2 = c10.x * c10.x;\n const c10y2 = c10.y * c10.y;\n const c11x2 = c11.x * c11.x;\n const c11y2 = c11.y * c11.y;\n const c12x2 = c12.x * c12.x;\n const c12y2 = c12.y * c12.y;\n const c20x2 = c20.x * c20.x;\n const c20y2 = c20.y * c20.y;\n const c21x2 = c21.x * c21.x;\n const c21y2 = c21.y * c21.y;\n const c22x2 = c22.x * c22.x;\n const c22y2 = c22.y * c22.y;\n const c23x2 = c23.x * c23.x;\n const c23y2 = c23.y * c23.y;\n\n const poly = new Polynomial(\n -2 * c12.x * c12.y * c23.x * c23.y + c12x2 * c23y2 + c12y2 * c23x2,\n -2 * c12.x * c12.y * c22.x * c23.y - 2 * c12.x * c12.y * c22.y * c23.x + 2 * c12y2 * c22.x * c23.x +\n 2 * c12x2 * c22.y * c23.y,\n -2 * c12.x * c21.x * c12.y * c23.y - 2 * c12.x * c12.y * c21.y * c23.x - 2 * c12.x * c12.y * c22.x * c22.y +\n 2 * c21.x * c12y2 * c23.x + c12y2 * c22x2 + c12x2 * (2 * c21.y * c23.y + c22y2),\n 2 * c10.x * c12.x * c12.y * c23.y + 2 * c10.y * c12.x * c12.y * c23.x + c11.x * c11.y * c12.x * c23.y +\n c11.x * c11.y * c12.y * c23.x - 2 * c20.x * c12.x * c12.y * c23.y - 2 * c12.x * c20.y * c12.y * c23.x -\n 2 * c12.x * c21.x * c12.y * c22.y - 2 * c12.x * c12.y * c21.y * c22.x - 2 * c10.x * c12y2 * c23.x -\n 2 * c10.y * c12x2 * c23.y + 2 * c20.x * c12y2 * c23.x + 2 * c21.x * c12y2 * c22.x -\n c11y2 * c12.x * c23.x - c11x2 * c12.y * c23.y + c12x2 * (2 * c20.y * c23.y + 2 * c21.y * c22.y),\n 2 * c10.x * c12.x * c12.y * c22.y + 2 * c10.y * c12.x * c12.y * c22.x + c11.x * c11.y * c12.x * c22.y +\n c11.x * c11.y * c12.y * c22.x - 2 * c20.x * c12.x * c12.y * c22.y - 2 * c12.x * c20.y * c12.y * c22.x -\n 2 * c12.x * c21.x * c12.y * c21.y - 2 * c10.x * c12y2 * c22.x - 2 * c10.y * c12x2 * c22.y +\n 2 * c20.x * c12y2 * c22.x - c11y2 * c12.x * c22.x - c11x2 * c12.y * c22.y + c21x2 * c12y2 +\n c12x2 * (2 * c20.y * c22.y + c21y2),\n 2 * c10.x * c12.x * c12.y * c21.y + 2 * c10.y * c12.x * c21.x * c12.y + c11.x * c11.y * c12.x * c21.y +\n c11.x * c11.y * c21.x * c12.y - 2 * c20.x * c12.x * c12.y * c21.y - 2 * c12.x * c20.y * c21.x * c12.y -\n 2 * c10.x * c21.x * c12y2 - 2 * c10.y * c12x2 * c21.y + 2 * c20.x * c21.x * c12y2 -\n c11y2 * c12.x * c21.x - c11x2 * c12.y * c21.y + 2 * c12x2 * c20.y * c21.y,\n -2 * c10.x * c10.y * c12.x * c12.y - c10.x * c11.x * c11.y * c12.y - c10.y * c11.x * c11.y * c12.x +\n 2 * c10.x * c12.x * c20.y * c12.y + 2 * c10.y * c20.x * c12.x * c12.y + c11.x * c20.x * c11.y * c12.y +\n c11.x * c11.y * c12.x * c20.y - 2 * c20.x * c12.x * c20.y * c12.y - 2 * c10.x * c20.x * c12y2 +\n c10.x * c11y2 * c12.x + c10.y * c11x2 * c12.y - 2 * c10.y * c12x2 * c20.y -\n c20.x * c11y2 * c12.x - c11x2 * c20.y * c12.y + c10x2 * c12y2 + c10y2 * c12x2 +\n c20x2 * c12y2 + c12x2 * c20y2\n );\n const roots = poly.getRootsInInterval(0, 1);\n\n for (const s of roots) {\n const xRoots = new Polynomial(\n c12.x,\n c11.x,\n c10.x - c20.x - s * c21.x - s * s * c22.x - s * s * s * c23.x\n ).getRoots();\n const yRoots = new Polynomial(\n c12.y,\n c11.y,\n c10.y - c20.y - s * c21.y - s * s * c22.y - s * s * s * c23.y\n ).getRoots();\n\n if (xRoots.length > 0 && yRoots.length > 0) {\n const TOLERANCE = 1e-4;\n\n checkRoots:\n for (const xRoot of xRoots) {\n if (0 <= xRoot && xRoot <= 1) {\n for (let k = 0; k < yRoots.length; k++) {\n if (Math.abs(xRoot - yRoots[k]) < TOLERANCE) {\n result.points.push(\n c23.multiply(s * s * s).add(c22.multiply(s * s).add(c21.multiply(s).add(c20)))\n );\n break checkRoots;\n }\n }\n }\n }\n }\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier2Circle\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} c\n * @param {number} r\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Circle(p1, p2, p3, c, r) {\n return Intersection.intersectBezier2Ellipse(p1, p2, p3, c, r, r);\n }\n\n /**\n * intersectBezier2Ellipse\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} ec\n * @param {number} rx\n * @param {number} ry\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Ellipse(p1, p2, p3, ec, rx, ry) {\n let a; // temporary variables\n // c2, c1, c0; // coefficients of quadratic\n const result = new Intersection(\"No Intersection\");\n\n a = p2.multiply(-2);\n const c2 = p1.add(a.add(p3));\n\n a = p1.multiply(-2);\n const b = p2.multiply(2);\n const c1 = a.add(b);\n\n const c0 = new Point2D(p1.x, p1.y);\n\n const rxrx = rx * rx;\n const ryry = ry * ry;\n const roots = new Polynomial(\n ryry * c2.x * c2.x + rxrx * c2.y * c2.y,\n 2 * (ryry * c2.x * c1.x + rxrx * c2.y * c1.y),\n ryry * (2 * c2.x * c0.x + c1.x * c1.x) + rxrx * (2 * c2.y * c0.y + c1.y * c1.y) -\n 2 * (ryry * ec.x * c2.x + rxrx * ec.y * c2.y),\n 2 * (ryry * c1.x * (c0.x - ec.x) + rxrx * c1.y * (c0.y - ec.y)),\n ryry * (c0.x * c0.x + ec.x * ec.x) + rxrx * (c0.y * c0.y + ec.y * ec.y) -\n 2 * (ryry * ec.x * c0.x + rxrx * ec.y * c0.y) - rxrx * ryry\n ).getRoots();\n\n for (const t of roots) {\n if (0 <= t && t <= 1) {\n result.points.push(c2.multiply(t * t).add(c1.multiply(t).add(c0)));\n }\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier2Line\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Line(p1, p2, p3, a1, a2) {\n let a; // temporary variables\n // let c2, c1, c0; // coefficients of quadratic\n // cl; // c coefficient for normal form of line\n // n; // normal for normal form of line\n const min = a1.min(a2); // used to determine if point is on line segment\n const max = a1.max(a2); // used to determine if point is on line segment\n const result = new Intersection(\"No Intersection\");\n\n a = p2.multiply(-2);\n const c2 = p1.add(a.add(p3));\n\n a = p1.multiply(-2);\n const b = p2.multiply(2);\n const c1 = a.add(b);\n\n const c0 = new Point2D(p1.x, p1.y);\n\n // Convert line to normal form: ax + by + c = 0\n // Find normal to line: negative inverse of original line's slope\n const n = new Vector2D(a1.y - a2.y, a2.x - a1.x);\n\n // Determine new c coefficient\n const cl = a1.x * a2.y - a2.x * a1.y;\n\n // Transform cubic coefficients to line's coordinate system and find roots\n // of cubic\n const roots = new Polynomial(\n n.dot(c2),\n n.dot(c1),\n n.dot(c0) + cl\n ).getRoots();\n\n // Any roots in closed interval [0,1] are intersections on Bezier, but\n // might not be on the line segment.\n // Find intersections and calculate point coordinates\n for (const t of roots) {\n if (0 <= t && t <= 1) {\n // We're within the Bezier curve\n // Find point on Bezier\n const p4 = p1.lerp(p2, t);\n const p5 = p2.lerp(p3, t);\n\n const p6 = p4.lerp(p5, t);\n\n // See if point is on line segment\n // Had to make special cases for vertical and horizontal lines due\n // to slight errors in calculation of p6\n if (a1.x === a2.x) {\n if (min.y <= p6.y && p6.y <= max.y) {\n result.status = \"Intersection\";\n result.appendPoint(p6);\n }\n }\n else if (a1.y === a2.y) {\n if (min.x <= p6.x && p6.x <= max.x) {\n result.status = \"Intersection\";\n result.appendPoint(p6);\n }\n }\n else if (min.x <= p6.x && p6.x <= max.x && min.y <= p6.y && p6.y <= max.y) {\n result.status = \"Intersection\";\n result.appendPoint(p6);\n }\n }\n }\n\n return result;\n }\n\n /**\n * intersectBezier2Polygon\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Polygon(p1, p2, p3, points) {\n return Intersection.intersectBezier2Polyline(p1, p2, p3, closePolygon(points));\n }\n\n /**\n * intersectBezier2Polyline\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Polyline(p1, p2, p3, points) {\n const result = new Intersection(\"No Intersection\");\n const {length: len} = points;\n\n for (let i = 0; i < len - 1; i++) {\n const a1 = points[i];\n const a2 = points[i + 1];\n const inter = Intersection.intersectBezier2Line(p1, p2, p3, a1, a2);\n\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier2Rectangle\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Rectangle(p1, p2, p3, r1, r2) {\n const min = r1.min(r2);\n const max = r1.max(r2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectBezier2Line(p1, p2, p3, min, topRight);\n const inter2 = Intersection.intersectBezier2Line(p1, p2, p3, topRight, max);\n const inter3 = Intersection.intersectBezier2Line(p1, p2, p3, max, bottomLeft);\n const inter4 = Intersection.intersectBezier2Line(p1, p2, p3, bottomLeft, min);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier3Bezier3\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} a3\n * @param {module:kld-intersections.Point2D} a4\n * @param {module:kld-intersections.Point2D} b1\n * @param {module:kld-intersections.Point2D} b2\n * @param {module:kld-intersections.Point2D} b3\n * @param {module:kld-intersections.Point2D} b4\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Bezier3(a1, a2, a3, a4, b1, b2, b3, b4) {\n let a, b, c, d; // temporary variables\n // c13, c12, c11, c10; // coefficients of cubic\n // c23, c22, c21, c20; // coefficients of cubic\n const result = new Intersection(\"No Intersection\");\n\n // Calculate the coefficients of cubic polynomial\n a = a1.multiply(-1);\n b = a2.multiply(3);\n c = a3.multiply(-3);\n d = a.add(b.add(c.add(a4)));\n const c13 = new Point2D(d.x, d.y);\n\n a = a1.multiply(3);\n b = a2.multiply(-6);\n c = a3.multiply(3);\n d = a.add(b.add(c));\n const c12 = new Point2D(d.x, d.y);\n\n a = a1.multiply(-3);\n b = a2.multiply(3);\n c = a.add(b);\n const c11 = new Point2D(c.x, c.y);\n\n const c10 = new Point2D(a1.x, a1.y);\n\n a = b1.multiply(-1);\n b = b2.multiply(3);\n c = b3.multiply(-3);\n d = a.add(b.add(c.add(b4)));\n const c23 = new Point2D(d.x, d.y);\n\n a = b1.multiply(3);\n b = b2.multiply(-6);\n c = b3.multiply(3);\n d = a.add(b.add(c));\n const c22 = new Point2D(d.x, d.y);\n\n a = b1.multiply(-3);\n b = b2.multiply(3);\n c = a.add(b);\n const c21 = new Point2D(c.x, c.y);\n\n const c20 = new Point2D(b1.x, b1.y);\n\n // bezout\n a = c13.x * c12.y - c12.x * c13.y;\n b = c13.x * c11.y - c11.x * c13.y;\n const c0 = c13.x * c10.y - c10.x * c13.y + c20.x * c13.y - c13.x * c20.y;\n const c1 = c21.x * c13.y - c13.x * c21.y;\n const c2 = c22.x * c13.y - c13.x * c22.y;\n const c3 = c23.x * c13.y - c13.x * c23.y;\n d = c13.x * c11.y - c11.x * c13.y;\n const e0 = c13.x * c10.y + c12.x * c11.y - c11.x * c12.y - c10.x * c13.y + c20.x * c13.y - c13.x * c20.y;\n const e1 = c21.x * c13.y - c13.x * c21.y;\n const e2 = c22.x * c13.y - c13.x * c22.y;\n const e3 = c23.x * c13.y - c13.x * c23.y;\n const f0 = c12.x * c10.y - c10.x * c12.y + c20.x * c12.y - c12.x * c20.y;\n const f1 = c21.x * c12.y - c12.x * c21.y;\n const f2 = c22.x * c12.y - c12.x * c22.y;\n const f3 = c23.x * c12.y - c12.x * c23.y;\n const g0 = c13.x * c10.y - c10.x * c13.y + c20.x * c13.y - c13.x * c20.y;\n const g1 = c21.x * c13.y - c13.x * c21.y;\n const g2 = c22.x * c13.y - c13.x * c22.y;\n const g3 = c23.x * c13.y - c13.x * c23.y;\n const h0 = c12.x * c10.y - c10.x * c12.y + c20.x * c12.y - c12.x * c20.y;\n const h1 = c21.x * c12.y - c12.x * c21.y;\n const h2 = c22.x * c12.y - c12.x * c22.y;\n const h3 = c23.x * c12.y - c12.x * c23.y;\n const i0 = c11.x * c10.y - c10.x * c11.y + c20.x * c11.y - c11.x * c20.y;\n const i1 = c21.x * c11.y - c11.x * c21.y;\n const i2 = c22.x * c11.y - c11.x * c22.y;\n const i3 = c23.x * c11.y - c11.x * c23.y;\n\n // determinant\n const poly = new Polynomial(\n -c3 * e3 * g3,\n -c3 * e3 * g2 - c3 * e2 * g3 - c2 * e3 * g3,\n -c3 * e3 * g1 - c3 * e2 * g2 - c2 * e3 * g2 - c3 * e1 * g3 - c2 * e2 * g3 - c1 * e3 * g3,\n -c3 * e3 * g0 - c3 * e2 * g1 - c2 * e3 * g1 - c3 * e1 * g2 - c2 * e2 * g2 - c1 * e3 * g2 - c3 * e0 * g3 - c2 * e1 * g3 - c1 * e2 * g3 - c0 * e3 * g3 + b * f3 * g3 + c3 * d * h3 - a * f3 * h3 + a * e3 * i3,\n -c3 * e2 * g0 - c2 * e3 * g0 - c3 * e1 * g1 - c2 * e2 * g1 - c1 * e3 * g1 - c3 * e0 * g2 - c2 * e1 * g2 - c1 * e2 * g2 - c0 * e3 * g2 + b * f3 * g2 - c2 * e0 * g3 - c1 * e1 * g3 - c0 * e2 * g3 + b * f2 * g3 + c3 * d * h2 - a * f3 * h2 + c2 * d * h3 - a * f2 * h3 + a * e3 * i2 + a * e2 * i3,\n -c3 * e1 * g0 - c2 * e2 * g0 - c1 * e3 * g0 - c3 * e0 * g1 - c2 * e1 * g1 - c1 * e2 * g1 - c0 * e3 * g1 + b * f3 * g1 - c2 * e0 * g2 - c1 * e1 * g2 - c0 * e2 * g2 + b * f2 * g2 - c1 * e0 * g3 - c0 * e1 * g3 + b * f1 * g3 + c3 * d * h1 - a * f3 * h1 + c2 * d * h2 - a * f2 * h2 + c1 * d * h3 - a * f1 * h3 + a * e3 * i1 + a * e2 * i2 + a * e1 * i3,\n -c3 * e0 * g0 - c2 * e1 * g0 - c1 * e2 * g0 - c0 * e3 * g0 + b * f3 * g0 - c2 * e0 * g1 - c1 * e1 * g1 - c0 * e2 * g1 + b * f2 * g1 - c1 * e0 * g2 - c0 * e1 * g2 + b * f1 * g2 - c0 * e0 * g3 + b * f0 * g3 + c3 * d * h0 - a * f3 * h0 + c2 * d * h1 - a * f2 * h1 + c1 * d * h2 - a * f1 * h2 + c0 * d * h3 - a * f0 * h3 + a * e3 * i0 + a * e2 * i1 + a * e1 * i2 - b * d * i3 + a * e0 * i3,\n -c2 * e0 * g0 - c1 * e1 * g0 - c0 * e2 * g0 + b * f2 * g0 - c1 * e0 * g1 - c0 * e1 * g1 + b * f1 * g1 - c0 * e0 * g2 + b * f0 * g2 + c2 * d * h0 - a * f2 * h0 + c1 * d * h1 - a * f1 * h1 + c0 * d * h2 - a * f0 * h2 + a * e2 * i0 + a * e1 * i1 - b * d * i2 + a * e0 * i2,\n -c1 * e0 * g0 - c0 * e1 * g0 + b * f1 * g0 - c0 * e0 * g1 + b * f0 * g1 + c1 * d * h0 - a * f1 * h0 + c0 * d * h1 - a * f0 * h1 + a * e1 * i0 - b * d * i1 + a * e0 * i1,\n -c0 * e0 * g0 + b * f0 * g0 + c0 * d * h0 - a * f0 * h0 - b * d * i0 + a * e0 * i0\n );\n poly.simplifyEquals();\n const roots = poly.getRootsInInterval(0, 1);\n\n for (const s of roots) {\n const xp = new Polynomial(\n c13.x,\n c12.x,\n c11.x,\n c10.x - c20.x - s * c21.x - s * s * c22.x - s * s * s * c23.x\n );\n xp.simplifyEquals();\n const xRoots = xp.getRoots();\n const yp = new Polynomial(\n c13.y,\n c12.y,\n c11.y,\n c10.y - c20.y - s * c21.y - s * s * c22.y - s * s * s * c23.y\n );\n yp.simplifyEquals();\n const yRoots = yp.getRoots();\n\n if (xRoots.length > 0 && yRoots.length > 0) {\n const TOLERANCE = 1e-4;\n\n checkRoots:\n for (const xRoot of xRoots) {\n if (0 <= xRoot && xRoot <= 1) {\n for (let k = 0; k < yRoots.length; k++) {\n if (Math.abs(xRoot - yRoots[k]) < TOLERANCE) {\n result.points.push(\n c23.multiply(s * s * s).add(c22.multiply(s * s).add(c21.multiply(s).add(c20)))\n );\n break checkRoots;\n }\n }\n }\n }\n }\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier3Circle\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @param {module:kld-intersections.Point2D} c\n * @param {number} r\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Circle(p1, p2, p3, p4, c, r) {\n return Intersection.intersectBezier3Ellipse(p1, p2, p3, p4, c, r, r);\n }\n\n /**\n * intersectBezier3Ellipse\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @param {module:kld-intersections.Point2D} ec\n * @param {number} rx\n * @param {number} ry\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Ellipse(p1, p2, p3, p4, ec, rx, ry) {\n let a, b, c, d; // temporary variables\n // c3, c2, c1, c0; // coefficients of cubic\n const result = new Intersection(\"No Intersection\");\n\n // Calculate the coefficients of cubic polynomial\n a = p1.multiply(-1);\n b = p2.multiply(3);\n c = p3.multiply(-3);\n d = a.add(b.add(c.add(p4)));\n const c3 = new Point2D(d.x, d.y);\n\n a = p1.multiply(3);\n b = p2.multiply(-6);\n c = p3.multiply(3);\n d = a.add(b.add(c));\n const c2 = new Point2D(d.x, d.y);\n\n a = p1.multiply(-3);\n b = p2.multiply(3);\n c = a.add(b);\n const c1 = new Point2D(c.x, c.y);\n\n const c0 = new Point2D(p1.x, p1.y);\n\n const rxrx = rx * rx;\n const ryry = ry * ry;\n const poly = new Polynomial(\n c3.x * c3.x * ryry + c3.y * c3.y * rxrx,\n 2 * (c3.x * c2.x * ryry + c3.y * c2.y * rxrx),\n 2 * (c3.x * c1.x * ryry + c3.y * c1.y * rxrx) + c2.x * c2.x * ryry + c2.y * c2.y * rxrx,\n 2 * c3.x * ryry * (c0.x - ec.x) + 2 * c3.y * rxrx * (c0.y - ec.y) +\n 2 * (c2.x * c1.x * ryry + c2.y * c1.y * rxrx),\n 2 * c2.x * ryry * (c0.x - ec.x) + 2 * c2.y * rxrx * (c0.y - ec.y) +\n c1.x * c1.x * ryry + c1.y * c1.y * rxrx,\n 2 * c1.x * ryry * (c0.x - ec.x) + 2 * c1.y * rxrx * (c0.y - ec.y),\n c0.x * c0.x * ryry - 2 * c0.y * ec.y * rxrx - 2 * c0.x * ec.x * ryry +\n c0.y * c0.y * rxrx + ec.x * ec.x * ryry + ec.y * ec.y * rxrx - rxrx * ryry\n );\n const roots = poly.getRootsInInterval(0, 1);\n\n for (const t of roots) {\n result.points.push(\n c3.multiply(t * t * t).add(c2.multiply(t * t).add(c1.multiply(t).add(c0)))\n );\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier3Line\n *\n * Many thanks to Dan Sunday at SoftSurfer.com. He gave me a very thorough\n * sketch of the algorithm used here. Without his help, I'm not sure when I\n * would have figured out this intersection problem.\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Line(p1, p2, p3, p4, a1, a2) {\n let a, b, c, d; // temporary variables\n // c3, c2, c1, c0; // coefficients of cubic\n // cl; // c coefficient for normal form of line\n // n; // normal for normal form of line\n const min = a1.min(a2); // used to determine if point is on line segment\n const max = a1.max(a2); // used to determine if point is on line segment\n const result = new Intersection(\"No Intersection\");\n\n // Start with Bezier using Bernstein polynomials for weighting functions:\n // (1-t^3)P1 + 3t(1-t)^2P2 + 3t^2(1-t)P3 + t^3P4\n //\n // Expand and collect terms to form linear combinations of original Bezier\n // controls. This ends up with a vector cubic in t:\n // (-P1+3P2-3P3+P4)t^3 + (3P1-6P2+3P3)t^2 + (-3P1+3P2)t + P1\n // /\\ /\\ /\\ /\\\n // || || || ||\n // c3 c2 c1 c0\n\n // Calculate the coefficients\n a = p1.multiply(-1);\n b = p2.multiply(3);\n c = p3.multiply(-3);\n d = a.add(b.add(c.add(p4)));\n const c3 = new Vector2D(d.x, d.y);\n\n a = p1.multiply(3);\n b = p2.multiply(-6);\n c = p3.multiply(3);\n d = a.add(b.add(c));\n const c2 = new Vector2D(d.x, d.y);\n\n a = p1.multiply(-3);\n b = p2.multiply(3);\n c = a.add(b);\n const c1 = new Vector2D(c.x, c.y);\n\n const c0 = new Vector2D(p1.x, p1.y);\n\n // Convert line to normal form: ax + by + c = 0\n // Find normal to line: negative inverse of original line's slope\n const n = new Vector2D(a1.y - a2.y, a2.x - a1.x);\n\n // Determine new c coefficient\n const cl = a1.x * a2.y - a2.x * a1.y;\n\n // ?Rotate each cubic coefficient using line for new coordinate system?\n // Find roots of rotated cubic\n const roots = new Polynomial(\n n.dot(c3),\n n.dot(c2),\n n.dot(c1),\n n.dot(c0) + cl\n ).getRoots();\n\n // Any roots in closed interval [0,1] are intersections on Bezier, but\n // might not be on the line segment.\n // Find intersections and calculate point coordinates\n for (const t of roots) {\n if (0 <= t && t <= 1) {\n // We're within the Bezier curve\n // Find point on Bezier\n const p5 = p1.lerp(p2, t);\n const p6 = p2.lerp(p3, t);\n const p7 = p3.lerp(p4, t);\n\n const p8 = p5.lerp(p6, t);\n const p9 = p6.lerp(p7, t);\n\n const p10 = p8.lerp(p9, t);\n\n // See if point is on line segment\n // Had to make special cases for vertical and horizontal lines due\n // to slight errors in calculation of p10\n if (a1.x === a2.x) {\n if (min.y <= p10.y && p10.y <= max.y) {\n result.status = \"Intersection\";\n result.appendPoint(p10);\n }\n }\n else if (a1.y === a2.y) {\n if (min.x <= p10.x && p10.x <= max.x) {\n result.status = \"Intersection\";\n result.appendPoint(p10);\n }\n }\n else if (min.x <= p10.x && p10.x <= max.x && min.y <= p10.y && p10.y <= max.y) {\n result.status = \"Intersection\";\n result.appendPoint(p10);\n }\n }\n }\n\n return result;\n }\n\n /**\n * intersectBezier3Polygon\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Polygon(p1, p2, p3, p4, points) {\n return Intersection.intersectBezier3Polyline(p1, p2, p3, p4, closePolygon(points));\n }\n\n /**\n * intersectBezier3Polyline\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Polyline(p1, p2, p3, p4, points) {\n const result = new Intersection(\"No Intersection\");\n const {length: len} = points;\n\n for (let i = 0; i < len - 1; i++) {\n const a1 = points[i];\n const a2 = points[i + 1];\n const inter = Intersection.intersectBezier3Line(p1, p2, p3, p4, a1, a2);\n\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier3Rectangle\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Rectangle(p1, p2, p3, p4, r1, r2) {\n const min = r1.min(r2);\n const max = r1.max(r2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectBezier3Line(p1, p2, p3, p4, min, topRight);\n const inter2 = Intersection.intersectBezier3Line(p1, p2, p3, p4, topRight, max);\n const inter3 = Intersection.intersectBezier3Line(p1, p2, p3, p4, max, bottomLeft);\n const inter4 = Intersection.intersectBezier3Line(p1, p2, p3, p4, bottomLeft, min);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectCircleCircle\n *\n * @param {module:kld-intersections.Point2D} c1\n * @param {number} r1\n * @param {module:kld-intersections.Point2D} c2\n * @param {number} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectCircleCircle(c1, r1, c2, r2) {\n let result;\n\n // Determine minimum and maximum radii where circles can intersect\n const r_max = r1 + r2;\n const r_min = Math.abs(r1 - r2);\n\n // Determine actual distance between circle circles\n const c_dist = c1.distanceFrom(c2);\n\n if (c_dist > r_max) {\n result = new Intersection(\"Outside\");\n }\n else if (c_dist < r_min) {\n result = new Intersection(\"Inside\");\n }\n else {\n result = new Intersection(\"Intersection\");\n\n const a = (r1 * r1 - r2 * r2 + c_dist * c_dist) / (2 * c_dist);\n const h = Math.sqrt(r1 * r1 - a * a);\n const p = c1.lerp(c2, a / c_dist);\n const b = h / c_dist;\n\n result.points.push(\n new Point2D(\n p.x - b * (c2.y - c1.y),\n p.y + b * (c2.x - c1.x)\n )\n );\n result.points.push(\n new Point2D(\n p.x + b * (c2.y - c1.y),\n p.y - b * (c2.x - c1.x)\n )\n );\n }\n\n return result;\n }\n\n /**\n * intersectCircleEllipse\n *\n * @param {module:kld-intersections.Point2D} cc\n * @param {number} r\n * @param {module:kld-intersections.Point2D} ec\n * @param {number} rx\n * @param {number} ry\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectCircleEllipse(cc, r, ec, rx, ry) {\n return Intersection.intersectEllipseEllipse(cc, r, r, ec, rx, ry);\n }\n\n /**\n * intersectCircleLine\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} r\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectCircleLine(c, r, a1, a2) {\n let result;\n const a = (a2.x - a1.x) * (a2.x - a1.x) +\n (a2.y - a1.y) * (a2.y - a1.y);\n const b = 2 * ((a2.x - a1.x) * (a1.x - c.x) +\n (a2.y - a1.y) * (a1.y - c.y));\n const cc = c.x * c.x + c.y * c.y + a1.x * a1.x + a1.y * a1.y -\n 2 * (c.x * a1.x + c.y * a1.y) - r * r;\n const deter = b * b - 4 * a * cc;\n\n if (deter < 0) {\n result = new Intersection(\"Outside\");\n }\n else if (deter === 0) {\n result = new Intersection(\"Tangent\");\n // NOTE: should calculate this point\n }\n else {\n const e = Math.sqrt(deter);\n const u1 = (-b + e) / (2 * a);\n const u2 = (-b - e) / (2 * a);\n\n if ((u1 < 0 || u1 > 1) && (u2 < 0 || u2 > 1)) {\n if ((u1 < 0 && u2 < 0) || (u1 > 1 && u2 > 1)) {\n result = new Intersection(\"Outside\");\n }\n else {\n result = new Intersection(\"Inside\");\n }\n }\n else {\n result = new Intersection(\"Intersection\");\n\n if (0 <= u1 && u1 <= 1) {\n result.points.push(a1.lerp(a2, u1));\n }\n\n if (0 <= u2 && u2 <= 1) {\n result.points.push(a1.lerp(a2, u2));\n }\n }\n }\n\n return result;\n }\n\n /**\n * intersectCirclePolygon\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} r\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectCirclePolygon(c, r, points) {\n return Intersection.intersectCirclePolyline(c, r, closePolygon(points));\n }\n\n /**\n * intersectCirclePolyline\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} r\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectCirclePolyline(c, r, points) {\n const result = new Intersection(\"No Intersection\");\n const {length: len} = points;\n let inter;\n\n for (let i = 0; i < len - 1; i++) {\n const a1 = points[i];\n const a2 = points[i + 1];\n\n inter = Intersection.intersectCircleLine(c, r, a1, a2);\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n else {\n result.status = inter.status;\n }\n\n return result;\n }\n\n /**\n * intersectCircleRectangle\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} r\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectCircleRectangle(c, r, r1, r2) {\n const min = r1.min(r2);\n const max = r1.max(r2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectCircleLine(c, r, min, topRight);\n const inter2 = Intersection.intersectCircleLine(c, r, topRight, max);\n const inter3 = Intersection.intersectCircleLine(c, r, max, bottomLeft);\n const inter4 = Intersection.intersectCircleLine(c, r, bottomLeft, min);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n else {\n result.status = inter1.status;\n }\n\n return result;\n }\n\n /**\n * intersectEllipseEllipse\n *\n * This code is based on MgcIntr2DElpElp.cpp written by David Eberly. His\n * code along with many other excellent examples are avaiable at his site:\n * http://www.magic-software.com\n *\n * NOTE: Rotation will need to be added to this function\n *\n * @param {module:kld-intersections.Point2D} c1\n * @param {number} rx1\n * @param {number} ry1\n * @param {module:kld-intersections.Point2D} c2\n * @param {number} rx2\n * @param {number} ry2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectEllipseEllipse(c1, rx1, ry1, c2, rx2, ry2) {\n const a = [\n ry1 * ry1, 0, rx1 * rx1, -2 * ry1 * ry1 * c1.x, -2 * rx1 * rx1 * c1.y,\n ry1 * ry1 * c1.x * c1.x + rx1 * rx1 * c1.y * c1.y - rx1 * rx1 * ry1 * ry1\n ];\n const b = [\n ry2 * ry2, 0, rx2 * rx2, -2 * ry2 * ry2 * c2.x, -2 * rx2 * rx2 * c2.y,\n ry2 * ry2 * c2.x * c2.x + rx2 * rx2 * c2.y * c2.y - rx2 * rx2 * ry2 * ry2\n ];\n\n const yPoly = bezout(a, b);\n const yRoots = yPoly.getRoots();\n const epsilon = 1e-3;\n const norm0 = (a[0] * a[0] + 2 * a[1] * a[1] + a[2] * a[2]) * epsilon;\n const norm1 = (b[0] * b[0] + 2 * b[1] * b[1] + b[2] * b[2]) * epsilon;\n const result = new Intersection(\"No Intersection\");\n\n for (let y = 0; y < yRoots.length; y++) {\n const xPoly = new Polynomial(\n a[0],\n a[3] + yRoots[y] * a[1],\n a[5] + yRoots[y] * (a[4] + yRoots[y] * a[2])\n );\n const xRoots = xPoly.getRoots();\n\n for (let x = 0; x < xRoots.length; x++) {\n let tst =\n (a[0] * xRoots[x] + a[1] * yRoots[y] + a[3]) * xRoots[x] +\n (a[2] * yRoots[y] + a[4]) * yRoots[y] + a[5];\n if (Math.abs(tst) < norm0) {\n tst =\n (b[0] * xRoots[x] + b[1] * yRoots[y] + b[3]) * xRoots[x] +\n (b[2] * yRoots[y] + b[4]) * yRoots[y] + b[5];\n if (Math.abs(tst) < norm1) {\n result.appendPoint(new Point2D(xRoots[x], yRoots[y]));\n }\n }\n }\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectEllipseLine\n *\n * NOTE: Rotation will need to be added to this function\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} rx\n * @param {number} ry\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectEllipseLine(c, rx, ry, a1, a2) {\n let result;\n const orign = new Vector2D(a1.x, a1.y);\n const dir = Vector2D.fromPoints(a1, a2);\n const center = new Vector2D(c.x, c.y);\n const diff = orign.subtract(center);\n const mDir = new Vector2D(dir.x / (rx * rx), dir.y / (ry * ry));\n const mDiff = new Vector2D(diff.x / (rx * rx), diff.y / (ry * ry));\n\n const a = dir.dot(mDir);\n const b = dir.dot(mDiff);\n c = diff.dot(mDiff) - 1.0;\n const d = b * b - a * c;\n\n if (d < 0) {\n result = new Intersection(\"Outside\");\n }\n else if (d > 0) {\n const root = Math.sqrt(d); // eslint-disable-line no-shadow\n const t_a = (-b - root) / a;\n const t_b = (-b + root) / a;\n\n if ((t_a < 0 || 1 < t_a) && (t_b < 0 || 1 < t_b)) {\n if ((t_a < 0 && t_b < 0) || (t_a > 1 && t_b > 1)) {\n result = new Intersection(\"Outside\");\n }\n else {\n result = new Intersection(\"Inside\");\n }\n }\n else {\n result = new Intersection(\"Intersection\");\n if (0 <= t_a && t_a <= 1) {\n result.appendPoint(a1.lerp(a2, t_a));\n }\n if (0 <= t_b && t_b <= 1) {\n result.appendPoint(a1.lerp(a2, t_b));\n }\n }\n }\n else {\n const t = -b / a;\n\n if (0 <= t && t <= 1) {\n result = new Intersection(\"Intersection\");\n result.appendPoint(a1.lerp(a2, t));\n }\n else {\n result = new Intersection(\"Outside\");\n }\n }\n\n return result;\n }\n\n /**\n * intersectEllipsePolygon\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} rx\n * @param {number} ry\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectEllipsePolygon(c, rx, ry, points) {\n return Intersection.intersectEllipsePolyline(c, rx, ry, closePolygon(points));\n }\n\n /**\n * intersectEllipsePolyline\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} rx\n * @param {number} ry\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectEllipsePolyline(c, rx, ry, points) {\n const result = new Intersection(\"No Intersection\");\n const {length: len} = points;\n\n for (let i = 0; i < len - 1; i++) {\n const b1 = points[i];\n const b2 = points[i + 1];\n const inter = Intersection.intersectEllipseLine(c, rx, ry, b1, b2);\n\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectEllipseRectangle\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} rx\n * @param {number} ry\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectEllipseRectangle(c, rx, ry, r1, r2) {\n const min = r1.min(r2);\n const max = r1.max(r2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectEllipseLine(c, rx, ry, min, topRight);\n const inter2 = Intersection.intersectEllipseLine(c, rx, ry, topRight, max);\n const inter3 = Intersection.intersectEllipseLine(c, rx, ry, max, bottomLeft);\n const inter4 = Intersection.intersectEllipseLine(c, rx, ry, bottomLeft, min);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectLineLine\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} b1\n * @param {module:kld-intersections.Point2D} b2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectLineLine(a1, a2, b1, b2) {\n let result;\n\n const ua_t = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x);\n const ub_t = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x);\n const u_b = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y);\n\n if (u_b !== 0) {\n const ua = ua_t / u_b;\n const ub = ub_t / u_b;\n\n if (0 <= ua && ua <= 1 && 0 <= ub && ub <= 1) {\n result = new Intersection(\"Intersection\");\n result.points.push(\n new Point2D(\n a1.x + ua * (a2.x - a1.x),\n a1.y + ua * (a2.y - a1.y)\n )\n );\n }\n else {\n result = new Intersection(\"No Intersection\");\n }\n }\n else if (ua_t === 0 || ub_t === 0) {\n result = new Intersection(\"Coincident\");\n }\n else {\n result = new Intersection(\"Parallel\");\n }\n\n return result;\n }\n\n /**\n * intersectLinePolygon\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectLinePolygon(a1, a2, points) {\n return Intersection.intersectLinePolyline(a1, a2, closePolygon(points));\n }\n\n /**\n * intersectLinePolyline\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectLinePolyline(a1, a2, points) {\n const result = new Intersection(\"No Intersection\");\n const {length: len} = points;\n\n for (let i = 0; i < len - 1; i++) {\n const b1 = points[i];\n const b2 = points[i + 1];\n const inter = Intersection.intersectLineLine(a1, a2, b1, b2);\n\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectLineRectangle\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectLineRectangle(a1, a2, r1, r2) {\n const min = r1.min(r2);\n const max = r1.max(r2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectLineLine(min, topRight, a1, a2);\n const inter2 = Intersection.intersectLineLine(topRight, max, a1, a2);\n const inter3 = Intersection.intersectLineLine(max, bottomLeft, a1, a2);\n const inter4 = Intersection.intersectLineLine(bottomLeft, min, a1, a2);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectPolygonPolygon\n *\n * @param {Array} points1\n * @param {Array} points2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectPolygonPolygon(points1, points2) {\n return Intersection.intersectPolylinePolyline(closePolygon(points1), closePolygon(points2));\n }\n\n /**\n * intersectPolygonPolyline\n *\n * @param {Array} points1\n * @param {Array} points2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectPolygonPolyline(points1, points2) {\n return Intersection.intersectPolylinePolyline(closePolygon(points1), points2);\n }\n\n /**\n * intersectPolygonRectangle\n *\n * @param {Array} points\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectPolygonRectangle(points, r1, r2) {\n return Intersection.intersectPolylineRectangle(closePolygon(points), r1, r2);\n }\n\n /**\n * intersectPolylinePolyline\n *\n * @param {Array} points1\n * @param {Array} points2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectPolylinePolyline(points1, points2) {\n const result = new Intersection(\"No Intersection\");\n const {length: len} = points1;\n\n for (let i = 0; i < len - 1; i++) {\n const a1 = points1[i];\n const a2 = points1[i + 1];\n const inter = Intersection.intersectLinePolyline(a1, a2, points2);\n\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectPolylineRectangle\n *\n * @param {Array} points\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectPolylineRectangle(points, r1, r2) {\n const min = r1.min(r2);\n const max = r1.max(r2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectLinePolyline(min, topRight, points);\n const inter2 = Intersection.intersectLinePolyline(topRight, max, points);\n const inter3 = Intersection.intersectLinePolyline(max, bottomLeft, points);\n const inter4 = Intersection.intersectLinePolyline(bottomLeft, min, points);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectRectangleRectangle\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} b1\n * @param {module:kld-intersections.Point2D} b2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectRectangleRectangle(a1, a2, b1, b2) {\n const min = a1.min(a2);\n const max = a1.max(a2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectLineRectangle(min, topRight, b1, b2);\n const inter2 = Intersection.intersectLineRectangle(topRight, max, b1, b2);\n const inter3 = Intersection.intersectLineRectangle(max, bottomLeft, b1, b2);\n const inter4 = Intersection.intersectLineRectangle(bottomLeft, min, b1, b2);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectRayRay\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} b1\n * @param {module:kld-intersections.Point2D} b2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectRayRay(a1, a2, b1, b2) {\n let result;\n\n const ua_t = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x);\n const ub_t = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x);\n const u_b = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y);\n\n if (u_b !== 0) {\n const ua = ua_t / u_b;\n\n result = new Intersection(\"Intersection\");\n result.points.push(\n new Point2D(\n a1.x + ua * (a2.x - a1.x),\n a1.y + ua * (a2.y - a1.y)\n )\n );\n }\n else if (ua_t === 0 || ub_t === 0) {\n result = new Intersection(\"Coincident\");\n }\n else {\n result = new Intersection(\"Parallel\");\n }\n\n return result;\n }\n\n /**\n * appendPoint\n *\n * @param {module:kld-intersections.Point2D} point\n */\n appendPoint(point) {\n this.points.push(point);\n }\n\n\n /**\n * appendPoints\n *\n * @param {Array} points\n */\n appendPoints(points) {\n this.points = this.points.concat(points);\n }\n}\n\nexport default Intersection;\n","/* eslint-disable prefer-rest-params */\n/**\n * Shapes\n *\n * @copyright 2017, Kevin Lindsey\n * @module Shapes\n * @deprecated use ShapeInfo\n */\n\nimport ShapeInfo from \"./ShapeInfo.js\";\n\n/**\n * Build shapes for intersection\n */\nclass Shapes {\n /**\n * arc\n *\n * @deprecated use ShapeInfo.arc\n * @param {number} centerX\n * @param {number} centerY\n * @param {number} radiusX\n * @param {number} radiusY\n * @param {number} startRadians\n * @param {number} endRadians\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static arc(centerX, centerY, radiusX, radiusY, startRadians, endRadians) {\n return ShapeInfo.arc(...arguments);\n }\n\n /**\n * quadraticBezier\n *\n * @deprecated use ShapeInfo.quadraticBezier\n * @param {number} p1x\n * @param {number} p1y\n * @param {number} p2x\n * @param {number} p2y\n * @param {number} p3x\n * @param {number} p3y\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static quadraticBezier(p1x, p1y, p2x, p2y, p3x, p3y) {\n return ShapeInfo.quadraticBezier(...arguments);\n }\n\n /**\n * cubicBezier\n *\n * @deprecated use ShapeInfo.cubicBezier\n * @param {number} p1x\n * @param {number} p1y\n * @param {number} p2x\n * @param {number} p2y\n * @param {number} p3x\n * @param {number} p3y\n * @param {number} p4x\n * @param {number} p4y\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static cubicBezier(p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y) {\n return ShapeInfo.cubicBezier(...arguments);\n }\n\n /**\n * circle\n *\n * @deprecated use ShapeInfo.circle\n * @param {number} centerX\n * @param {number} centerY\n * @param {number} radius\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static circle(centerX, centerY, radius) {\n return ShapeInfo.circle(...arguments);\n }\n\n /**\n * ellipse\n *\n * @deprecated use ShapeInfo.ellipse\n * @param {number} centerX\n * @param {number} centerY\n * @param {number} radiusX\n * @param {number} radiusY\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static ellipse(centerX, centerY, radiusX, radiusY) {\n return ShapeInfo.ellipse(...arguments);\n }\n\n /**\n * line\n *\n * @deprecated use ShapeInfo.line\n * @param {number} p1x\n * @param {number} p1y\n * @param {number} p2x\n * @param {number} p2y\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static line(p1x, p1y, p2x, p2y) {\n return ShapeInfo.line(...arguments);\n }\n\n /**\n * path\n *\n * @deprecated use ShapeInfo.path\n * @param {string} pathData\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static path(pathData) {\n return ShapeInfo.path(...arguments);\n }\n\n /**\n * polygon\n *\n * @deprecated use ShapeInfo.polygon\n * @param {Array} coords\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static polygon(coords) {\n return ShapeInfo.polygon(...arguments);\n }\n\n /**\n * polyline\n *\n * @deprecated use ShapeInfo.polyline\n * @param {Array} coords\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static polyline(coords) {\n return ShapeInfo.polyline(...arguments);\n }\n\n /**\n * rectangle\n *\n * @deprecated use ShapeInfo.rectangle\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} [rx]\n * @param {number} [ry]\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static rectangle(x, y, width, height, rx = 0, ry = 0) {\n return ShapeInfo.rectangle(...arguments);\n }\n}\n\nexport default Shapes;\n","/* eslint-disable prefer-rest-params */\n/**\n * AffineShapes\n *\n * @copyright 2017-2019, Kevin Lindsey\n * @module AffineShapes\n * @deprecated use ShapeInfo\n */\n\nimport ShapeInfo from \"./ShapeInfo.js\";\n\n/**\n * Build shapes for intersection\n */\nclass AffineShapes {\n /**\n * arc\n *\n * @deprecated use ShapeInfo.arc\n * @param {module:kld-intersections.Point2D} center\n * @param {number} radiusX\n * @param {number} radiusY\n * @param {number} startRadians\n * @param {number} endRadians\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static arc(center, radiusX, radiusY, startRadians, endRadians) {\n return ShapeInfo.arc(...arguments);\n }\n\n /**\n * quadraticBezier\n *\n * @deprecated use ShapeInfo.quadraticBezier\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static quadraticBezier(p1, p2, p3) {\n return ShapeInfo.quadraticBezier(...arguments);\n }\n\n /**\n * cubicBezier\n *\n * @deprecated use ShapeInfo.cubicBezier\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static cubicBezier(p1, p2, p3, p4) {\n return ShapeInfo.cubicBezier(...arguments);\n }\n\n /**\n * circle\n *\n * @deprecated use ShapeInfo.circle\n * @param {module:kld-intersections.Point2D} center\n * @param {number} radius\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static circle(center, radius) {\n return ShapeInfo.circle(...arguments);\n }\n\n /**\n * ellipse\n *\n * @deprecated use ShapeInfo.ellipse\n * @param {module:kld-intersections.Point2D} center\n * @param {number} radiusX\n * @param {number} radiusY\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static ellipse(center, radiusX, radiusY) {\n return ShapeInfo.ellipse(...arguments);\n }\n\n /**\n * line\n *\n * @deprecated use ShapeInfo.line\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static line(p1, p2) {\n return ShapeInfo.line(...arguments);\n }\n\n /**\n * path\n *\n * @deprecated use ShapeInfo.path\n * @param {string} pathData\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static path(pathData) {\n return ShapeInfo.path(...arguments);\n }\n\n /**\n * polygon\n *\n * @deprecated use ShapeInfo.polygon\n * @param {Array} points\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static polygon(points) {\n return ShapeInfo.polygon(...arguments);\n }\n\n /**\n * polyline\n *\n * @deprecated use ShapeInfo.polyline\n * @param {Array} points\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static polyline(points) {\n return ShapeInfo.polyline(...arguments);\n }\n\n /**\n * rectangle\n *\n * @deprecated use ShapeInfo.rectangle\n * @param {module:kld-intersections.Point2D} topLeft\n * @param {module:kld-intersections.Vector2D} size\n * @param {number} [rx]\n * @param {number} [ry]\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static rectangle(topLeft, size, rx = 0, ry = 0) {\n return ShapeInfo.rectangle(...arguments);\n }\n}\n\nexport default AffineShapes;\n","/* eslint-disable no-restricted-syntax */\nimport {Point2D} from \"kld-affine\";\nimport ShapeInfo from \"./ShapeInfo.js\";\n\nclass SvgShapes {\n /**\n * circle\n *\n * @param {SVGCircleElement} circle\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static circle(circle) {\n if (circle instanceof SVGCircleElement === false) {\n throw new TypeError(`Expected SVGCircleElement, but found ${circle}`);\n }\n\n const center = new Point2D(\n circle.cx.baseVal.value,\n circle.cy.baseVal.value\n );\n const radius = circle.r.baseVal.value;\n\n return ShapeInfo.circle(center, radius);\n }\n\n /**\n * ellipse\n *\n * @param {SVGEllipseElement} ellipse\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static ellipse(ellipse) {\n if (ellipse instanceof SVGEllipseElement === false) {\n throw new TypeError(`Expected SVGEllipseElement, but found ${ellipse}`);\n }\n\n const center = new Point2D(\n ellipse.cx.baseVal.value,\n ellipse.cy.baseVal.value\n );\n const radiusX = ellipse.rx.baseVal.value;\n const radiusY = ellipse.ry.baseVal.value;\n\n return ShapeInfo.ellipse(center, radiusX, radiusY);\n }\n\n /**\n * line\n *\n * @param {SVGLineElement} line\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static line(line) {\n if (line instanceof SVGLineElement === false) {\n throw new TypeError(`Expected SVGLineElement, but found ${line}`);\n }\n\n const p1 = new Point2D(\n line.x1.baseVal.value,\n line.y1.baseVal.value\n );\n const p2 = new Point2D(\n line.x2.baseVal.value,\n line.y2.baseVal.value\n );\n\n return ShapeInfo.line(p1, p2);\n }\n\n /**\n * path\n *\n * @param {SVGPathElement} path\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static path(path) {\n if (path instanceof SVGPathElement === false) {\n throw new TypeError(`Expected SVGPathElement, but found ${path}`);\n }\n\n const pathData = path.getAttributeNS(null, \"d\");\n\n return ShapeInfo.path(pathData);\n }\n\n /**\n * polygon\n *\n * @param {SVGPolygonElement} polygon\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static polygon(polygon) {\n if (polygon instanceof SVGPolygonElement === false) {\n throw new TypeError(`Expected SVGPolygonElement, but found ${polygon}`);\n }\n\n const points = [];\n\n for (let i = 0; i < polygon.points.numberOfItems; i++) {\n const point = polygon.points.getItem(i);\n\n points.push(new Point2D(point.x, point.y));\n }\n\n return ShapeInfo.polygon(points);\n }\n\n /**\n * polyline\n *\n * @param {SVGPolylineElement} polyline\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static polyline(polyline) {\n if (polyline instanceof SVGPolylineElement === false) {\n throw new TypeError(`Expected SVGPolylineElement, but found ${polyline}`);\n }\n\n const points = [];\n\n for (let i = 0; i < polyline.points.numberOfItems; i++) {\n const point = polyline.points.getItem(i);\n\n points.push(new Point2D(point.x, point.y));\n }\n\n return ShapeInfo.polyline(points);\n }\n\n /**\n * rect\n *\n * @param {SVGRectElement} rect\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static rect(rect) {\n if (rect instanceof SVGRectElement === false) {\n throw new TypeError(`Expected SVGRectElement, but found ${rect}`);\n }\n\n return ShapeInfo.rectangle(\n rect.x.baseVal.value,\n rect.y.baseVal.value,\n rect.width.baseVal.value,\n rect.height.baseVal.value,\n rect.rx.baseVal.value,\n rect.ry.baseVal.value\n );\n }\n\n /**\n * element\n *\n * @param {SVGElement} element\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static element(element) {\n if (element instanceof SVGElement === false) {\n throw new TypeError(`Expected SVGElement, but found ${element}`);\n }\n\n /* eslint-disable-next-line prefer-destructuring */\n const tagName = element.tagName;\n\n switch (tagName) {\n case \"circle\":\n return SvgShapes.circle(element);\n case \"ellipse\":\n return SvgShapes.ellipse(element);\n case \"line\":\n return SvgShapes.line(element);\n case \"path\":\n return SvgShapes.path(element);\n case \"polygon\":\n return SvgShapes.polygon(element);\n case \"polyline\":\n return SvgShapes.polyline(element);\n case \"rect\":\n return SvgShapes.rect(element);\n default:\n throw new TypeError(`Unrecognized element type: '${tagName}'`);\n }\n }\n}\n\nexport default SvgShapes;\n","/**\n *\n * IntersectionQuery.js\n *\n * @copyright 2017 Kevin Lindsey\n * @module IntersectionQuery\n */\n\nimport {Vector2D} from \"kld-affine\";\n\n/**\n * @namespace\n */\nconst IntersectionQuery = {};\n\n\n/**\n * pointInCircle\n *\n * @param {module:kld-intersections.Point2D} point\n * @param {module:kld-intersections.Point2D} center\n * @param {number} radius\n * @returns {boolean}\n */\nIntersectionQuery.pointInCircle = function(point, center, radius) {\n const v = Vector2D.fromPoints(center, point);\n\n return v.length() <= radius;\n};\n\n\n/**\n * pointInEllipse\n *\n * @param {module:kld-intersections.Point2D} point\n * @param {module:kld-intersections.Point2D} center\n * @param {number} radiusX\n * @param {number} radiusY\n * @returns {boolean}\n */\nIntersectionQuery.pointInEllipse = function(point, center, radiusX, radiusY) {\n const len = point.subtract(center);\n\n return (len.x * len.x) / (radiusX * radiusX) + (len.y * len.y) / (radiusY * radiusY) <= 1;\n};\n\n\n/**\n * pointInPolyline\n *\n * @param {module:kld-intersections.Point2D} point\n * @param {Array} points\n */\nIntersectionQuery.pointInPolyline = function(point, points) {\n const {length: len} = points;\n let counter = 0;\n let xInter;\n\n let p1 = points[0];\n\n for (let i = 1; i <= len; i++) {\n const p2 = points[i % len];\n const minY = Math.min(p1.y, p2.y);\n const maxY = Math.max(p1.y, p2.y);\n const maxX = Math.max(p1.x, p2.x);\n\n if (p1.y !== p2.y && minY < point.y && point.y <= maxY && point.x <= maxX) {\n xInter = (point.y - p1.y) * (p2.x - p1.x) / (p2.y - p1.y) + p1.x;\n\n if (p1.x === p2.x || point.x <= xInter) {\n counter++;\n }\n }\n\n p1 = p2;\n }\n\n return (counter % 2 === 1);\n};\n\n\n/**\n * pointInPolyline\n *\n * @param {module:kld-intersections.Point2D} point\n * @param {Array} points\n */\nIntersectionQuery.pointInPolygon = IntersectionQuery.pointInPolyline;\n\n\n/**\n * pointInRectangle\n *\n * @param {module:kld-intersections.Point2D} point\n * @param {module:kld-intersections.Point2D} topLeft\n * @param {module:kld-intersections.Point2D} bottomRight\n * @returns {boolean}\n */\nIntersectionQuery.pointInRectangle = function(point, topLeft, bottomRight) {\n return (\n topLeft.x <= point.x && point.x < bottomRight.x &&\n topLeft.y <= point.y && point.y < bottomRight.y\n );\n};\n\n\nexport default IntersectionQuery;\n"],"names":["Point2D","x","y","this","constructor","that","scalar","precision","Math","abs","t","omt","dx","dy","sqrt","min","max","matrix","a","c","e","b","d","f","Vector2D","divide","length","cos","dot","radians","acos","cross","subtract","project","percent","multiply","p1","p2","Matrix2D","isIdentity","det1","Error","idet","det2","det3","tx","ty","scale","center","scaleX","scaleY","s","sin","cx","cy","vector","unit","tan","E","F","G","H","Q","R","a1","atan2","a2","theta","phi","translation","rotation","nonUniformScaling","rotation0","sign","NaN","IDENTITY","Polynomial","coefs","i","arguments","push","_variable","_s","poly","slice","isNaN","TypeError","result","d1","getDegree","d2","dmax","v1","v2","j","TOLERANCE","pop","err","reduce","pv","cv","divideEqualsScalar","signs","value","round","signString","ACCURACY","minValue","eval","maxValue","tmp1","log","tmp2","LN10","maxIterations","ceil","LN2","n","range","iter","delta","sum","st","os","ost","Array","MAX","h","trapezoid","interpolate","maxAbsX","rb","bounds","minX","maxX","an","m","v","nm","pow","map","coefSelectionFunc","find2Max","acc","bi","nearmax","max_nearmax_pos","negX","posX","reverse","res","boundsUpperRealFujiwara","urb","boundsLowerRealFujiwara","prev","curr","undersqrt","accum","ai","prev_a","pos","neg","maxRealPos","maxRealNeg","minComplex","derivative","simplifyEquals","getLinearRoot","getQuadraticRoots","getCubicRoots","getQuarticRoots","roots","RangeError","bisection","droots","getDerivative","getRootsInInterval","results","c3","c2","c1","offset","discrim","halfB","ZEROepsilon","zeroErrorEstimate","root","tmp","distance","angle","sqrt3","poly_d","derrt","getRoots","sort","dery","nr","maxabsX","guesses","minmax","df","newtonSecantBisection","concat","xs","ys","ns","diff","dift","ho","hp","w","den","x0","max_iterations","dfx","x_correction","x_new","y_atmin","y_atmax","prev_dfx","prev_x_ef_correction","min_correction_factor","isBounded","isEnoughCorrection","parser","o","k","l","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","$Vp","$Vq","$Vr","$Vs","$Vt","$Vu","$Vv","$Vw","$Vx","$Vy","$Vz","$VA","$VB","$VC","$VD","$VE","$VF","$VG","$VH","$VI","$VJ","$VK","$VL","$VM","$VN","$VO","$VP","trace","yy","symbols_","terminals_","productions_","performAction","yytext","yyleng","yylineno","yystate","$$","_$","$0","$","type","name","steps","patterns","sequences","left","right","args","undefined","expression","assignTo","patternType","pattern","start","stop","elements","Infinity","substring","parseInt","parseFloat","table","defaultActions","parseError","str","hash","recoverable","error","parse","input","self","stack","tstack","lstack","call","lexer","Object","create","sharedState","prototype","hasOwnProperty","setInput","yylloc","yyloc","ranges","options","getPrototypeOf","symbol","preErrorSymbol","state","action","r","p","len","newState","expected","token","yyval","lex","errStr","showPosition","join","text","match","line","loc","vstack","first_line","last_line","first_column","last_column","apply","EOF","_input","_more","_backtrack","done","matched","conditionStack","ch","unput","lines","split","substr","oldLines","more","reject","backtrack_lexer","less","pastInput","past","replace","upcomingInput","next","pre","test_match","indexed_rule","backup","matches","tempMatch","index","rules","_currentRules","flex","begin","condition","popState","conditions","topState","pushState","stateStackSize","yy_","$avoiding_name_collisions","YY_START","Parser","isObject","item","_typeof","isArray","list","lists","missing","every","maxLength","part","items","count","advance","comparator","delimiter","keys","values","entries","pairs","pair","key","assign","FAILURE_VALUE","obj","Transformer","symbolTable","functions","messages","verbose","StdLib","reference","message","level","source","structure","statements","statement","executeExpression","addError","getNumbers","operation","_this","seqValue","invokeFunction","object","array","sequence","sequenceSymbolTable","currentObject","step","executePattern","valueGenerator","transform","mapSymbolTable","patternSymbolTable","arg","element","executeObjectExpression","objectSymbolTable","executeArrayPattern","property","propertyPattern","referencedPattern","executeArrayPatternElement","executeArrayElementPattern","executeArrayElementGroupPattern","actualIndex","pushAssign","group","groupResults","elementSymbolTable","addWarning","PathLexeme","UNDEFINED","COMMAND","NUMBER","EOD","PathLexer","pathData","setPathData","_pathData","RegExp","$1","SyntaxError","PathParser","_lexer","_handler","beginParse","mode","lastToken","getNextToken","typeis","parameterCount","params","PARAMCOUNT","toUpperCase","handler","methodName","METHODNAME","endParse","A","C","L","M","S","T","V","Z","q","z","TWO_PI","PI","getArcParameters","startPoint","endPoint","rx","ry","arcFlag","sweepFlag","halfDiff","x1p","y1p","x1px1p","y1py1p","lambda","factor","rxrx","ryry","rxy1","ryx1","sq","normal","mid","add","cxp","cyp","xcr1","xcr2","ycr1","ycr2","theta1","angleBetween","deltaTheta","PathHandler","shapeCreator","shapes","firstX","firstY","lastX","lastY","lastCommand","shape","xAxisRotation","addShape","arcParameters","arc","x1","y1","x2","y2","cubicBezier","quadraticBezier","controlX","controlY","secondToLast","degree90","ShapeInfo","ARC","QUADRATIC_BEZIER","CUBIC_BEZIER","CIRCLE","ELLIPSE","LINE","PATH","POLYGON","POLYLINE","RECTANGLE","p1x","p1y","p2x","p2y","width","height","y0","x3","y3","segments","properties","transformType","data","transformer","execute","JSON","stringify","addFunction","setHandler","parseData","UNIT_X","isNullish","normalizeAngle","restrictPointsToArc","intersections","radiusX","radiusY","startRadians","endRadians","points","Intersection","startNormal","endNormal","fromPoints","appendPoint","status","closePolygon","copy","init","point","shape1","shape2","intersectPathShape","intersectArcShape","method","path","segment","inter","intersect","appendPoints","ellipse","a3","b1","b2","b3","c12","c11","c10","c22","c21","c20","g","xp","xRoots","yp","yRoots","checkRoots","xRoot","b4","c23","c10x2","c10y2","c11x2","c11y2","c12x2","c12y2","c20x2","c20y2","c21x2","c21y2","c22x2","c22y2","c23x2","c23y2","p3","intersectBezier2Ellipse","ec","c0","cl","p4","lerp","p5","p6","intersectBezier2Polyline","intersectBezier2Line","r1","r2","topRight","bottomLeft","inter1","inter2","inter3","inter4","a4","c13","e0","e1","e2","e3","f0","f1","f2","f3","g0","g1","g2","g3","h0","h1","h2","h3","i0","i1","i2","i3","intersectBezier3Ellipse","p7","p8","p9","p10","intersectBezier3Polyline","intersectBezier3Line","r_max","r_min","c_dist","distanceFrom","cc","intersectEllipseEllipse","deter","u1","u2","intersectCirclePolyline","intersectCircleLine","rx1","ry1","rx2","ry2","AB","AC","AD","AE","AF","BC","BE","BF","CD","DE","DF","BFpDE","BEmCD","norm0","norm1","tst","orign","dir","mDir","mDiff","t_a","t_b","intersectEllipsePolyline","intersectEllipseLine","ua_t","ub_t","u_b","ua","ub","intersectLinePolyline","intersectLineLine","points1","points2","intersectPolylinePolyline","intersectPolylineRectangle","intersectLineRectangle","Shapes","centerX","centerY","p3x","p3y","p4x","p4y","radius","circle","coords","polygon","polyline","rectangle","AffineShapes","topLeft","size","SvgShapes","SVGCircleElement","baseVal","SVGEllipseElement","SVGLineElement","SVGPathElement","getAttributeNS","SVGPolygonElement","numberOfItems","getItem","SVGPolylineElement","rect","SVGRectElement","SVGElement","tagName","IntersectionQuery","xInter","counter","minY","maxY","pointInPolygon","pointInPolyline","pointInRectangle","bottomRight"],"mappings":"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CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,GAAGC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,KAAKC,EAAI,CAAC,EAAE,KAAKC,EAAI,CAAC,GAAG,IAAIC,EAAI,CAAC,GAAG,IAAIC,EAAI,CAAC,EAAE,KAAKC,EAAI,CAAC,GAAG,GAAG,IAAIC,EAAI,CAAC,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,GAAG,GAAG,IAAIC,EAAI,CAAC,GAAG,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,KAC5yBvD,EAAS,CAACwD,MAAO,aACrBC,GAAI,GACJC,SAAU,OAAS,UAAY,aAAe,MAAM,YAAc,aAAe,WAAa,MAAQ,aAAe,OAAO,OAAS,aAAe,OAAO,SAAW,QAAQ,QAAU,QAAQ,gBAAkB,cAAgB,kBAAoB,OAAS,OAAO,OAAO,YAAc,OAAO,YAAc,OAAO,aAAe,kBAAoB,OAAO,OAAO,OAAO,OAAO,gBAAkB,oBAAsB,qBAAuB,OAAO,WAAa,OAAO,OAAO,WAAa,aAAe,SAAW,UAAY,kBAAoB,KAAO,mBAAqB,oBAAsB,sBAAwB,qBAAuB,wBAA0B,sBAAwB,OAAO,YAAc,SAAS,WAAa,MAAQ,YAAc,cAAgB,gBAAkB,QAAU,SAAW,eAAiB,eAAiB,eAAiB,gBAAkB,iBAAmB,WAAa,eAAiB,mBAAqB,uBAAyB,kBAAoB,SAAW,QAAQ,qBAAuB,wBAA0B,iBAAmB,UAAY,UAAY,sBAAwB,eAAiB,WAAa,OAAS,GAC/oCC,WAAY,GAAG,UAAU,MAAM,SAAS,gBAAgB,OAAO,SAAS,OAAO,QAAQ,QAAQ,SAAS,OAAO,OAAO,cAAc,OAAO,OAAO,eAAe,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,OAAO,eAAe,oBAAoB,OAAO,OAAO,SAAS,QAAQ,cAAc,gBAAgB,kBAAkB,UAAU,WAAW,iBAAiB,iBAAiB,iBAAiB,aAAa,iBAAiB,QAAQ,YAAY,UAC9bC,aAAc,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GA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"} \ No newline at end of file +{"version":3,"file":"index-umd.min.js","sources":["../node_modules/kld-affine/lib/Point2D.js","../node_modules/kld-affine/lib/Vector2D.js","../node_modules/kld-affine/lib/Matrix2D.js","../node_modules/kld-polynomial/lib/Polynomial.js","../node_modules/gp-data-transformer/lib/GeneratedParser.js","../node_modules/gp-data-transformer/lib/StandardLibrary.js","../node_modules/gp-data-transformer/lib/Transformer.js","../node_modules/kld-path-parser/lib/PathLexeme.js","../node_modules/kld-path-parser/lib/PathLexer.js","../node_modules/kld-path-parser/lib/PathParser.js","../lib/PathHandler.js","../lib/ShapeInfo.js","../lib/Intersection.js","../lib/Shapes.js","../lib/AffineShapes.js","../lib/SvgShapes.js","../lib/IntersectionQuery.js"],"sourcesContent":["/**\n * Point2D.js\n * @module Point2D\n * @copyright 2001-2019 Kevin Lindsey\n */\n\n/**\n * Point2D\n *\n * @memberof module:kld-affine\n */\nclass Point2D {\n /**\n * Point2D\n *\n * @param {number} x\n * @param {number} y\n * @returns {module:kld-affine.Point2D}\n */\n constructor(x = 0, y = 0) {\n this.x = x;\n this.y = y;\n }\n\n /**\n * clone\n *\n * @returns {module:kld-affine.Point2D}\n */\n clone() {\n return new this.constructor(this.x, this.y);\n }\n\n /**\n * add\n *\n * @param {module:kld-affine.Point2D} that\n * @returns {module:kld-affine.Point2D}\n */\n add(that) {\n return new this.constructor(this.x + that.x, this.y + that.y);\n }\n\n /**\n * subtract\n *\n * @param {module:kld-affine.Point2D} that\n * @returns {module:kld-affine.Point2D}\n */\n subtract(that) {\n return new this.constructor(this.x - that.x, this.y - that.y);\n }\n\n /**\n * multiply\n *\n * @param {number} scalar\n * @returns {module:kld-affine.Point2D}\n */\n multiply(scalar) {\n return new this.constructor(this.x * scalar, this.y * scalar);\n }\n\n /**\n * divide\n *\n * @param {number} scalar\n * @returns {module:kld-affine.Point2D}\n */\n divide(scalar) {\n return new this.constructor(this.x / scalar, this.y / scalar);\n }\n\n /**\n * equals\n *\n * @param {module:kld-affine.Point2D} that\n * @returns {boolean}\n */\n equals(that) {\n return (this.x === that.x && this.y === that.y);\n }\n\n /**\n * precisionEquals\n *\n * @param {module:kld-affine.Point2D} that\n * @param {number} precision\n * @returns {boolean}\n */\n precisionEquals(that, precision) {\n return (\n Math.abs(this.x - that.x) < precision &&\n Math.abs(this.y - that.y) < precision\n );\n }\n\n // utility methods\n\n /**\n * lerp\n *\n * @param {module:kld-affine.Point2D} that\n * @param {number} t\n * @returns {module:kld-affine.Point2D}\n */\n lerp(that, t) {\n const omt = 1.0 - t;\n\n return new this.constructor(\n this.x * omt + that.x * t,\n this.y * omt + that.y * t\n );\n }\n\n /**\n * distanceFrom\n *\n * @param {module:kld-affine.Point2D} that\n * @returns {number}\n */\n distanceFrom(that) {\n const dx = this.x - that.x;\n const dy = this.y - that.y;\n\n return Math.sqrt(dx * dx + dy * dy);\n }\n\n /**\n * min\n *\n * @param {module:kld-affine.Point2D} that\n * @returns {number}\n */\n min(that) {\n return new this.constructor(\n Math.min(this.x, that.x),\n Math.min(this.y, that.y)\n );\n }\n\n /**\n * max\n *\n * @param {module:kld-affine.Point2D} that\n * @returns {number}\n */\n max(that) {\n return new this.constructor(\n Math.max(this.x, that.x),\n Math.max(this.y, that.y)\n );\n }\n\n /**\n * transform\n *\n * @param {module:kld-affine.Matrix2D} matrix\n * @returns {module:kld-affine.Point2D}\n */\n transform(matrix) {\n return new this.constructor(\n matrix.a * this.x + matrix.c * this.y + matrix.e,\n matrix.b * this.x + matrix.d * this.y + matrix.f\n );\n }\n\n /**\n * toString\n *\n * @returns {string}\n */\n toString() {\n return `point(${this.x},${this.y})`;\n }\n}\n\nexport default Point2D;\n","/**\n * Vector2D.js\n * @module Vector2D\n * @copyright 2001-2019 Kevin Lindsey\n */\n\n/**\n * Vector2D\n *\n * @memberof module:kld-affine\n */\nclass Vector2D {\n /**\n * Vector2D\n *\n * @param {number} x\n * @param {number} y\n * @returns {module:kld-affine.Vector2D}\n */\n constructor(x = 0, y = 0) {\n this.x = x;\n this.y = y;\n }\n\n /**\n * fromPoints\n *\n * @param {module:kld-affine.Point2D} p1\n * @param {module:kld-affine.Point2D} p2\n * @returns {module:kld-affine.Vector2D}\n */\n static fromPoints(p1, p2) {\n return new Vector2D(\n p2.x - p1.x,\n p2.y - p1.y\n );\n }\n\n /**\n * length\n *\n * @returns {number}\n */\n length() {\n return Math.sqrt(this.x * this.x + this.y * this.y);\n }\n\n /**\n * magnitude\n *\n * @returns {number}\n */\n magnitude() {\n return this.x * this.x + this.y * this.y;\n }\n\n /**\n * dot\n *\n * @param {module:kld-affine.Vector2D} that\n * @returns {number}\n */\n dot(that) {\n return this.x * that.x + this.y * that.y;\n }\n\n /**\n * cross\n *\n * @param {module:kld-affine.Vector2D} that\n * @returns {number}\n */\n cross(that) {\n return this.x * that.y - this.y * that.x;\n }\n\n /**\n * determinant\n *\n * @param {module:kld-affine.Vector2D} that\n * @returns {number}\n */\n determinant(that) {\n return this.x * that.y - this.y * that.x;\n }\n\n /**\n * unit\n *\n * @returns {module:kld-affine.Vector2D}\n */\n unit() {\n return this.divide(this.length());\n }\n\n /**\n * add\n *\n * @param {module:kld-affine.Vector2D} that\n * @returns {module:kld-affine.Vector2D}\n */\n add(that) {\n return new this.constructor(this.x + that.x, this.y + that.y);\n }\n\n /**\n * subtract\n *\n * @param {module:kld-affine.Vector2D} that\n * @returns {module:kld-affine.Vector2D}\n */\n subtract(that) {\n return new this.constructor(this.x - that.x, this.y - that.y);\n }\n\n /**\n * multiply\n *\n * @param {number} scalar\n * @returns {module:kld-affine.Vector2D}\n */\n multiply(scalar) {\n return new this.constructor(this.x * scalar, this.y * scalar);\n }\n\n /**\n * divide\n *\n * @param {number} scalar\n * @returns {module:kld-affine.Vector2D}\n */\n divide(scalar) {\n return new this.constructor(this.x / scalar, this.y / scalar);\n }\n\n /**\n * angleBetween\n *\n * @param {module:kld-affine.Vector2D} that\n * @returns {number}\n */\n angleBetween(that) {\n let cos = this.dot(that) / (this.length() * that.length());\n cos = Math.max(-1, Math.min(cos, 1));\n const radians = Math.acos(cos);\n\n return (this.cross(that) < 0.0) ? -radians : radians;\n }\n\n /**\n * Find a vector is that is perpendicular to this vector\n *\n * @returns {module:kld-affine.Vector2D}\n */\n perp() {\n return new this.constructor(-this.y, this.x);\n }\n\n /**\n * Find the component of the specified vector that is perpendicular to\n * this vector\n *\n * @param {module:kld-affine.Vector2D} that\n * @returns {module:kld-affine.Vector2D}\n */\n perpendicular(that) {\n return this.subtract(this.project(that));\n }\n\n /**\n * project\n *\n * @param {module:kld-affine.Vector2D} that\n * @returns {module:kld-affine.Vector2D}\n */\n project(that) {\n const percent = this.dot(that) / that.dot(that);\n\n return that.multiply(percent);\n }\n\n /**\n * transform\n *\n * @param {module:kld-affine.Matrix2D} matrix\n * @returns {module:kld-affine.Vector2D}\n */\n transform(matrix) {\n return new this.constructor(\n matrix.a * this.x + matrix.c * this.y,\n matrix.b * this.x + matrix.d * this.y\n );\n }\n\n /**\n * equals\n *\n * @param {module:kld-affine.Vector2D} that\n * @returns {boolean}\n */\n equals(that) {\n return (\n this.x === that.x &&\n this.y === that.y\n );\n }\n\n /**\n * precisionEquals\n *\n * @param {module:kld-affine.Vector2D} that\n * @param {number} precision\n * @returns {boolean}\n */\n precisionEquals(that, precision) {\n return (\n Math.abs(this.x - that.x) < precision &&\n Math.abs(this.y - that.y) < precision\n );\n }\n\n /**\n * toString\n *\n * @returns {string}\n */\n toString() {\n return `vector(${this.x},${this.y})`;\n }\n}\n\nexport default Vector2D;\n","/**\n * Matrix2D.js\n * @module Matrix2D\n * @copyright 2001-2019 Kevin Lindsey\n */\n\n/**\n * Matrix2D\n *\n * @memberof module:kld-affine\n */\nclass Matrix2D {\n /**\n * A 2D Matrix of the form:
\n * [a c e]
\n * [b d f]
\n * [0 0 1]
\n *\n * @param {number} a\n * @param {number} b\n * @param {number} c\n * @param {number} d\n * @param {number} e\n * @param {number} f\n * @returns {module:kld-affine.Matrix2D}\n */\n constructor(a = 1, b = 0, c = 0, d = 1, e = 0, f = 0) {\n this.a = a;\n this.b = b;\n this.c = c;\n this.d = d;\n this.e = e;\n this.f = f;\n }\n\n /**\n * translation\n *\n * @param {number} tx\n * @param {number} ty\n * @returns {module:kld-affine.Matrix2D}\n */\n static translation(tx, ty) {\n return new Matrix2D(1, 0, 0, 1, tx, ty);\n }\n\n /**\n * scaling\n *\n * @param {number} scale\n * @returns {module:kld-affine.Matrix2D}\n */\n static scaling(scale) {\n return new Matrix2D(scale, 0, 0, scale, 0, 0);\n }\n\n /**\n * scalingAt\n *\n * @param {number} scale\n * @param {module:kld-affine.Point2D} center\n * @returns {module:kld-affine.Matrix2D}\n */\n static scalingAt(scale, center) {\n return new Matrix2D(\n scale,\n 0,\n 0,\n scale,\n center.x - center.x * scale,\n center.y - center.y * scale\n );\n }\n\n /**\n * nonUniformScaling\n *\n * @param {number} scaleX\n * @param {number} scaleY\n * @returns {module:kld-affine.Matrix2D}\n */\n static nonUniformScaling(scaleX, scaleY) {\n return new Matrix2D(scaleX, 0, 0, scaleY, 0, 0);\n }\n\n /**\n * nonUniformScalingAt\n *\n * @param {number} scaleX\n * @param {number} scaleY\n * @param {module:kld-affine.Point2D} center\n * @returns {module:kld-affine.Matrix2D}\n */\n static nonUniformScalingAt(scaleX, scaleY, center) {\n return new Matrix2D(\n scaleX,\n 0,\n 0,\n scaleY,\n center.x - center.x * scaleX,\n center.y - center.y * scaleY\n );\n }\n\n /**\n * rotation\n *\n * @param {number} radians\n * @returns {module:kld-affine.Matrix2D}\n */\n static rotation(radians) {\n const c = Math.cos(radians);\n const s = Math.sin(radians);\n\n return new Matrix2D(c, s, -s, c, 0, 0);\n }\n\n /**\n * rotationAt\n *\n * @param {number} radians\n * @param {module:kld-affine.Point2D} center\n * @returns {module:kld-affine.Matrix2D}\n */\n static rotationAt(radians, center) {\n const c = Math.cos(radians);\n const s = Math.sin(radians);\n\n return new Matrix2D(\n c,\n s,\n -s,\n c,\n center.x - center.x * c + center.y * s,\n center.y - center.y * c - center.x * s\n );\n }\n\n /**\n * rotationFromVector\n *\n * @param {module:kld-affine.Vector2D} vector\n * @returns {module:kld-affine.Matrix2D}\n */\n static rotationFromVector(vector) {\n const unit = vector.unit();\n const c = unit.x; // cos\n const s = unit.y; // sin\n\n return new Matrix2D(c, s, -s, c, 0, 0);\n }\n\n /**\n * xFlip\n *\n * @returns {module:kld-affine.Matrix2D}\n */\n static xFlip() {\n return new Matrix2D(-1, 0, 0, 1, 0, 0);\n }\n\n /**\n * yFlip\n *\n * @returns {module:kld-affine.Matrix2D}\n */\n static yFlip() {\n return new Matrix2D(1, 0, 0, -1, 0, 0);\n }\n\n /**\n * xSkew\n *\n * @param {number} radians\n * @returns {module:kld-affine.Matrix2D}\n */\n static xSkew(radians) {\n const t = Math.tan(radians);\n\n return new Matrix2D(1, 0, t, 1, 0, 0);\n }\n\n /**\n * ySkew\n *\n * @param {number} radians\n * @returns {module:kld-affine.Matrix2D}\n */\n static ySkew(radians) {\n const t = Math.tan(radians);\n\n return new Matrix2D(1, t, 0, 1, 0, 0);\n }\n\n /**\n * multiply\n *\n * @param {module:kld-affine.Matrix2D} that\n * @returns {module:kld-affine.Matrix2D}\n */\n multiply(that) {\n if (this.isIdentity()) {\n return that;\n }\n\n if (that.isIdentity()) {\n return this;\n }\n\n return new this.constructor(\n this.a * that.a + this.c * that.b,\n this.b * that.a + this.d * that.b,\n this.a * that.c + this.c * that.d,\n this.b * that.c + this.d * that.d,\n this.a * that.e + this.c * that.f + this.e,\n this.b * that.e + this.d * that.f + this.f\n );\n }\n\n /**\n * inverse\n *\n * @returns {module:kld-affine.Matrix2D}\n */\n inverse() {\n if (this.isIdentity()) {\n return this;\n }\n\n const det1 = this.a * this.d - this.b * this.c;\n\n if (det1 === 0.0) {\n throw new Error(\"Matrix is not invertible\");\n }\n\n const idet = 1.0 / det1;\n const det2 = this.f * this.c - this.e * this.d;\n const det3 = this.e * this.b - this.f * this.a;\n\n return new this.constructor(\n this.d * idet,\n -this.b * idet,\n -this.c * idet,\n this.a * idet,\n det2 * idet,\n det3 * idet\n );\n }\n\n /**\n * translate\n *\n * @param {number} tx\n * @param {number} ty\n * @returns {module:kld-affine.Matrix2D}\n */\n translate(tx, ty) {\n return new this.constructor(\n this.a,\n this.b,\n this.c,\n this.d,\n this.a * tx + this.c * ty + this.e,\n this.b * tx + this.d * ty + this.f\n );\n }\n\n /**\n * scale\n *\n * @param {number} scale\n * @returns {module:kld-affine.Matrix2D}\n */\n scale(scale) {\n return new this.constructor(\n this.a * scale,\n this.b * scale,\n this.c * scale,\n this.d * scale,\n this.e,\n this.f\n );\n }\n\n /**\n * scaleAt\n *\n * @param {number} scale\n * @param {module:kld-affine.Point2D} center\n * @returns {module:kld-affine.Matrix2D}\n */\n scaleAt(scale, center) {\n const dx = center.x - scale * center.x;\n const dy = center.y - scale * center.y;\n\n return new this.constructor(\n this.a * scale,\n this.b * scale,\n this.c * scale,\n this.d * scale,\n this.a * dx + this.c * dy + this.e,\n this.b * dx + this.d * dy + this.f\n );\n }\n\n /**\n * scaleNonUniform\n *\n * @param {number} scaleX\n * @param {number} scaleY\n * @returns {module:kld-affine.Matrix2D}\n */\n scaleNonUniform(scaleX, scaleY) {\n return new this.constructor(\n this.a * scaleX,\n this.b * scaleX,\n this.c * scaleY,\n this.d * scaleY,\n this.e,\n this.f\n );\n }\n\n /**\n * scaleNonUniformAt\n *\n * @param {number} scaleX\n * @param {number} scaleY\n * @param {module:kld-affine.Point2D} center\n * @returns {module:kld-affine.Matrix2D}\n */\n scaleNonUniformAt(scaleX, scaleY, center) {\n const dx = center.x - scaleX * center.x;\n const dy = center.y - scaleY * center.y;\n\n return new this.constructor(\n this.a * scaleX,\n this.b * scaleX,\n this.c * scaleY,\n this.d * scaleY,\n this.a * dx + this.c * dy + this.e,\n this.b * dx + this.d * dy + this.f\n );\n }\n\n /**\n * rotate\n *\n * @param {number} radians\n * @returns {module:kld-affine.Matrix2D}\n */\n rotate(radians) {\n const c = Math.cos(radians);\n const s = Math.sin(radians);\n\n return new this.constructor(\n this.a * c + this.c * s,\n this.b * c + this.d * s,\n this.a * -s + this.c * c,\n this.b * -s + this.d * c,\n this.e,\n this.f\n );\n }\n\n /**\n * rotateAt\n *\n * @param {number} radians\n * @param {module:kld-affine.Point2D} center\n * @returns {module:kld-affine.Matrix2D}\n */\n rotateAt(radians, center) {\n const cos = Math.cos(radians);\n const sin = Math.sin(radians);\n const cx = center.x;\n const cy = center.y;\n\n const a = this.a * cos + this.c * sin;\n const b = this.b * cos + this.d * sin;\n const c = this.c * cos - this.a * sin;\n const d = this.d * cos - this.b * sin;\n\n return new this.constructor(\n a,\n b,\n c,\n d,\n (this.a - a) * cx + (this.c - c) * cy + this.e,\n (this.b - b) * cx + (this.d - d) * cy + this.f\n );\n }\n\n /**\n * rotateFromVector\n *\n * @param {module:kld-affine.Vector2D} vector\n * @returns {module:kld-affine.Matrix2D}\n */\n rotateFromVector(vector) {\n const unit = vector.unit();\n const c = unit.x; // cos\n const s = unit.y; // sin\n\n return new this.constructor(\n this.a * c + this.c * s,\n this.b * c + this.d * s,\n this.a * -s + this.c * c,\n this.b * -s + this.d * c,\n this.e,\n this.f\n );\n }\n\n /**\n * flipX\n *\n * @returns {module:kld-affine.Matrix2D}\n */\n flipX() {\n return new this.constructor(\n -this.a,\n -this.b,\n this.c,\n this.d,\n this.e,\n this.f\n );\n }\n\n /**\n * flipY\n *\n * @returns {module:kld-affine.Matrix2D}\n */\n flipY() {\n return new this.constructor(\n this.a,\n this.b,\n -this.c,\n -this.d,\n this.e,\n this.f\n );\n }\n\n /**\n * skewX\n *\n * @param {number} radians\n * @returns {module:kld-affine.Matrix2D}\n */\n skewX(radians) {\n const t = Math.tan(radians);\n\n return new this.constructor(\n this.a,\n this.b,\n this.c + this.a * t,\n this.d + this.b * t,\n this.e,\n this.f\n );\n }\n\n // TODO: skewXAt\n\n /**\n * skewY\n *\n * @param {number} radians\n * @returns {module:kld-affine.Matrix2D}\n */\n skewY(radians) {\n const t = Math.tan(radians);\n\n return new this.constructor(\n this.a + this.c * t,\n this.b + this.d * t,\n this.c,\n this.d,\n this.e,\n this.f\n );\n }\n\n // TODO: skewYAt\n\n /**\n * isIdentity\n *\n * @returns {boolean}\n */\n isIdentity() {\n return (\n this.a === 1.0 &&\n this.b === 0.0 &&\n this.c === 0.0 &&\n this.d === 1.0 &&\n this.e === 0.0 &&\n this.f === 0.0\n );\n }\n\n /**\n * isInvertible\n *\n * @returns {boolean}\n */\n isInvertible() {\n return this.a * this.d - this.b * this.c !== 0.0;\n }\n\n /**\n * getScale\n *\n * @returns {{ scaleX: number, scaleY: number }}\n */\n getScale() {\n return {\n scaleX: Math.sqrt(this.a * this.a + this.c * this.c),\n scaleY: Math.sqrt(this.b * this.b + this.d * this.d)\n };\n }\n\n /**\n * Calculates matrix Singular Value Decomposition\n *\n * The resulting matrices — translation, rotation, scale, and rotation0 — return\n * this matrix when they are multiplied together in the listed order\n *\n * @see Jim Blinn's article {@link http://dx.doi.org/10.1109/38.486688}\n * @see {@link http://math.stackexchange.com/questions/861674/decompose-a-2d-arbitrary-transform-into-only-scaling-and-rotation}\n *\n * @returns {{\n * translation: module:kld-affine.Matrix2D,\n * rotation: module:kld-affine.Matrix2D,\n * scale: module:kld-affine.Matrix2D,\n * rotation0: module:kld-affine.Matrix2D\n * }}\n */\n getDecomposition() {\n const E = (this.a + this.d) * 0.5;\n const F = (this.a - this.d) * 0.5;\n const G = (this.b + this.c) * 0.5;\n const H = (this.b - this.c) * 0.5;\n\n const Q = Math.sqrt(E * E + H * H);\n const R = Math.sqrt(F * F + G * G);\n const scaleX = Q + R;\n const scaleY = Q - R;\n\n const a1 = Math.atan2(G, F);\n const a2 = Math.atan2(H, E);\n const theta = (a2 - a1) * 0.5;\n const phi = (a2 + a1) * 0.5;\n\n return {\n translation: this.constructor.translation(this.e, this.f),\n rotation: this.constructor.rotation(phi),\n scale: this.constructor.nonUniformScaling(scaleX, scaleY),\n rotation0: this.constructor.rotation(theta)\n };\n }\n\n /**\n * equals\n *\n * @param {module:kld-affine.Matrix2D} that\n * @returns {boolean}\n */\n equals(that) {\n return (\n this.a === that.a &&\n this.b === that.b &&\n this.c === that.c &&\n this.d === that.d &&\n this.e === that.e &&\n this.f === that.f\n );\n }\n\n /**\n * precisionEquals\n *\n * @param {module:kld-affine.Matrix2D} that\n * @param {number} precision\n * @returns {boolean}\n */\n precisionEquals(that, precision) {\n return (\n Math.abs(this.a - that.a) < precision &&\n Math.abs(this.b - that.b) < precision &&\n Math.abs(this.c - that.c) < precision &&\n Math.abs(this.d - that.d) < precision &&\n Math.abs(this.e - that.e) < precision &&\n Math.abs(this.f - that.f) < precision\n );\n }\n\n /**\n * toString\n *\n * @returns {string}\n */\n toString() {\n return `matrix(${this.a},${this.b},${this.c},${this.d},${this.e},${this.f})`;\n }\n}\n\n/**\n * Identity matrix\n *\n * @returns {module:kld-affine.Matrix2D}\n */\nMatrix2D.IDENTITY = new Matrix2D();\nMatrix2D.IDENTITY.isIdentity = () => true;\n\n\nexport default Matrix2D;\n","/* eslint-disable camelcase */\n/**\n * Polynomial.js\n *\n * @module Polynomial\n * @copyright 2002-2019 Kevin Lindsey
\n * -
\n * Contribution {@link http://github.com/Quazistax/kld-polynomial}
\n * copyright 2015 Robert Benko (Quazistax)
\n * MIT license\n */\n\n/**\n * Sign of a number (+1, -1, +0, -0).\n *\n * @param {number} x\n * @returns {number}\n */\nfunction sign(x) {\n // eslint-disable-next-line no-self-compare\n return typeof x === \"number\" ? x ? x < 0 ? -1 : 1 : x === x ? x : NaN : NaN;\n}\n\n/**\n * Polynomial\n *\n * @memberof module:kld-polynomial\n */\nclass Polynomial {\n /**\n * Polynomial\n *\n * @param {Array} coefs\n * @returns {module:kld-polynomial.Polynomial}\n */\n constructor(...coefs) {\n this.coefs = [];\n\n for (let i = coefs.length - 1; i >= 0; i--) {\n this.coefs.push(coefs[i]);\n }\n\n this._variable = \"t\";\n this._s = 0;\n }\n\n /**\n * Based on polint in \"Numerical Recipes in C, 2nd Edition\", pages 109-110\n *\n * @param {Array} xs\n * @param {Array} ys\n * @param {number} n\n * @param {number} offset\n * @param {number} x\n *\n * @returns {{y: number, dy: number}}\n */\n static interpolate(xs, ys, n, offset, x) {\n if (xs.constructor !== Array || ys.constructor !== Array) {\n throw new TypeError(\"xs and ys must be arrays\");\n }\n if (isNaN(n) || isNaN(offset) || isNaN(x)) {\n throw new TypeError(\"n, offset, and x must be numbers\");\n }\n\n let i, y;\n let dy = 0;\n const c = new Array(n);\n const d = new Array(n);\n let ns = 0;\n\n let diff = Math.abs(x - xs[offset]);\n\n for (i = 0; i < n; i++) {\n const dift = Math.abs(x - xs[offset + i]);\n\n if (dift < diff) {\n ns = i;\n diff = dift;\n }\n c[i] = d[i] = ys[offset + i];\n }\n\n y = ys[offset + ns];\n ns--;\n\n for (let m = 1; m < n; m++) {\n for (i = 0; i < n - m; i++) {\n const ho = xs[offset + i] - x;\n const hp = xs[offset + i + m] - x;\n const w = c[i + 1] - d[i];\n let den = ho - hp;\n\n if (den === 0.0) {\n throw new RangeError(\"Unable to interpolate polynomial. Two numbers in n were identical (to within roundoff)\");\n }\n\n den = w / den;\n d[i] = hp * den;\n c[i] = ho * den;\n }\n\n dy = (2 * (ns + 1) < (n - m)) ? c[ns + 1] : d[ns--];\n y += dy;\n }\n\n return {y, dy};\n }\n\n /**\n * Newton's (Newton-Raphson) method for finding Real roots on univariate function.
\n * When using bounds, algorithm falls back to secant if newton goes out of range.\n * Bisection is fallback for secant when determined secant is not efficient enough.\n * @see {@link http://en.wikipedia.org/wiki/Newton%27s_method}\n * @see {@link http://en.wikipedia.org/wiki/Secant_method}\n * @see {@link http://en.wikipedia.org/wiki/Bisection_method}\n *\n * @param {number} x0 - Initial root guess\n * @param {Function} f - Function which root we are trying to find\n * @param {Function} df - Derivative of function f\n * @param {number} max_iterations - Maximum number of algorithm iterations\n * @param {number} [min] - Left bound value\n * @param {number} [max] - Right bound value\n * @returns {number} root\n */\n static newtonSecantBisection(x0, f, df, max_iterations, min, max) {\n let x, prev_dfx = 0, dfx, prev_x_ef_correction = 0, x_correction, x_new;\n let y, y_atmin, y_atmax;\n\n x = x0;\n\n const ACCURACY = 14;\n const min_correction_factor = Math.pow(10, -ACCURACY);\n const isBounded = (typeof min === \"number\" && typeof max === \"number\");\n\n if (isBounded) {\n if (min > max) {\n throw new RangeError(\"Min must be greater than max\");\n }\n\n y_atmin = f(min);\n y_atmax = f(max);\n\n if (sign(y_atmin) === sign(y_atmax)) {\n throw new RangeError(\"Y values of bounds must be of opposite sign\");\n }\n }\n\n const isEnoughCorrection = function() {\n // stop if correction is too small or if correction is in simple loop\n return (Math.abs(x_correction) <= min_correction_factor * Math.abs(x)) ||\n (prev_x_ef_correction === (x - x_correction) - x);\n };\n\n for (let i = 0; i < max_iterations; i++) {\n dfx = df(x);\n\n if (dfx === 0) {\n if (prev_dfx === 0) {\n // error\n throw new RangeError(\"df(x) is zero\");\n }\n else {\n // use previous derivation value\n dfx = prev_dfx;\n }\n // or move x a little?\n // dfx = df(x != 0 ? x + x * 1e-15 : 1e-15);\n }\n\n prev_dfx = dfx;\n y = f(x);\n x_correction = y / dfx;\n x_new = x - x_correction;\n\n if (isEnoughCorrection()) {\n break;\n }\n\n if (isBounded) {\n if (sign(y) === sign(y_atmax)) {\n max = x;\n y_atmax = y;\n }\n else if (sign(y) === sign(y_atmin)) {\n min = x;\n y_atmin = y;\n }\n else {\n x = x_new;\n break;\n }\n\n if ((x_new < min) || (x_new > max)) {\n if (sign(y_atmin) === sign(y_atmax)) {\n break;\n }\n\n const RATIO_LIMIT = 50;\n const AIMED_BISECT_OFFSET = 0.25; // [0, 0.5)\n const dy = y_atmax - y_atmin;\n const dx = max - min;\n\n if (dy === 0) {\n x_correction = x - (min + dx * 0.5);\n }\n else if (Math.abs(dy / Math.min(y_atmin, y_atmax)) > RATIO_LIMIT) {\n x_correction = x - (min + dx * (0.5 + (Math.abs(y_atmin) < Math.abs(y_atmax) ? -AIMED_BISECT_OFFSET : AIMED_BISECT_OFFSET)));\n }\n else {\n x_correction = x - (min - y_atmin / dy * dx);\n }\n x_new = x - x_correction;\n\n if (isEnoughCorrection()) {\n break;\n }\n }\n }\n\n prev_x_ef_correction = x - x_new;\n x = x_new;\n }\n\n return x;\n }\n\n /**\n * Clones this polynomial and return the clone.\n *\n * @returns {module:kld-polynomial.Polynomial}\n */\n clone() {\n const poly = new Polynomial();\n\n poly.coefs = this.coefs.slice();\n\n return poly;\n }\n\n /**\n * eval\n *\n * @param {number} x\n */\n eval(x) {\n if (isNaN(x)) {\n throw new TypeError(`Parameter must be a number. Found '${x}'`);\n }\n\n let result = 0;\n\n for (let i = this.coefs.length - 1; i >= 0; i--) {\n result = result * x + this.coefs[i];\n }\n\n return result;\n }\n\n /**\n * add\n *\n * @param {module:kld-polynomial.Polynomial} that\n * @returns {module:kld-polynomial.Polynomial}\n */\n add(that) {\n const result = new Polynomial();\n const d1 = this.getDegree();\n const d2 = that.getDegree();\n const dmax = Math.max(d1, d2);\n\n for (let i = 0; i <= dmax; i++) {\n const v1 = (i <= d1) ? this.coefs[i] : 0;\n const v2 = (i <= d2) ? that.coefs[i] : 0;\n\n result.coefs[i] = v1 + v2;\n }\n\n return result;\n }\n\n /**\n * multiply\n *\n * @param {module:kld-polynomial.Polynomial} that\n * @returns {module:kld-polynomial.Polynomial}\n */\n multiply(that) {\n const result = new Polynomial();\n\n for (let i = 0; i <= this.getDegree() + that.getDegree(); i++) {\n result.coefs.push(0);\n }\n\n for (let i = 0; i <= this.getDegree(); i++) {\n for (let j = 0; j <= that.getDegree(); j++) {\n result.coefs[i + j] += this.coefs[i] * that.coefs[j];\n }\n }\n\n return result;\n }\n\n /**\n * divideEqualsScalar\n *\n * @deprecated To be replaced by divideScalar\n * @param {number} scalar\n */\n divideEqualsScalar(scalar) {\n for (let i = 0; i < this.coefs.length; i++) {\n this.coefs[i] /= scalar;\n }\n }\n\n /**\n * simplifyEquals\n *\n * @deprecated To be replaced by simplify\n * @param {number} TOLERANCE\n */\n simplifyEquals(TOLERANCE = 1e-12) {\n for (let i = this.getDegree(); i >= 0; i--) {\n if (Math.abs(this.coefs[i]) <= TOLERANCE) {\n this.coefs.pop();\n }\n else {\n break;\n }\n }\n }\n\n /**\n * Sets small coefficients to zero.\n *\n * @deprecated To be replaced by removeZeros\n * @param {number} TOLERANCE\n * @returns {module:kld-polynomial.Polynomial}\n */\n removeZerosEquals(TOLERANCE = 1e-15) {\n const c = this.coefs;\n const err = 10 * TOLERANCE * Math.abs(\n c.reduce((pv, cv) => {\n return Math.abs(cv) > Math.abs(pv) ? cv : pv;\n })\n );\n\n for (let i = 0; i < c.length - 1; i++) {\n if (Math.abs(c[i]) < err) {\n c[i] = 0;\n }\n }\n\n return this;\n }\n\n /**\n * Scales polynomial so that leading coefficient becomes 1.\n *\n * @deprecated To be replaced by getMonic\n * @returns {module:kld-polynomial.Polynomial}\n */\n monicEquals() {\n const c = this.coefs;\n\n if (c[c.length - 1] !== 1) {\n this.divideEqualsScalar(c[c.length - 1]);\n }\n\n return this;\n }\n\n /**\n * toString\n *\n * @returns {string}\n */\n toString() {\n const coefs = [];\n const signs = [];\n\n for (let i = this.coefs.length - 1; i >= 0; i--) {\n let value = Math.round(this.coefs[i] * 1000) / 1000;\n\n if (value !== 0) {\n const signString = (value < 0) ? \" - \" : \" + \";\n\n value = Math.abs(value);\n\n if (i > 0) {\n if (value === 1) {\n value = this._variable;\n }\n else {\n value += this._variable;\n }\n }\n\n if (i > 1) {\n value += \"^\" + i;\n }\n\n signs.push(signString);\n coefs.push(value);\n }\n }\n\n signs[0] = (signs[0] === \" + \") ? \"\" : \"-\";\n\n let result = \"\";\n\n for (let i = 0; i < coefs.length; i++) {\n result += signs[i] + coefs[i];\n }\n\n return result;\n }\n\n /**\n * bisection\n *\n * @param {number} min\n * @param {number} max\n * @param {number} [TOLERANCE]\n * @param {number} [ACCURACY]\n * @returns {number}\n */\n bisection(min, max, TOLERANCE = 1e-6, ACCURACY = 15) {\n let minValue = this.eval(min);\n let maxValue = this.eval(max);\n let result;\n\n if (Math.abs(minValue) <= TOLERANCE) {\n result = min;\n }\n else if (Math.abs(maxValue) <= TOLERANCE) {\n result = max;\n }\n else if (minValue * maxValue <= 0) {\n const tmp1 = Math.log(max - min);\n const tmp2 = Math.LN10 * ACCURACY;\n const maxIterations = Math.ceil((tmp1 + tmp2) / Math.LN2);\n\n for (let i = 0; i < maxIterations; i++) {\n result = 0.5 * (min + max);\n const value = this.eval(result);\n\n if (Math.abs(value) <= TOLERANCE) {\n break;\n }\n\n if (value * minValue < 0) {\n max = result;\n maxValue = value;\n }\n else {\n min = result;\n minValue = value;\n }\n }\n }\n\n return result;\n }\n\n /**\n * Based on trapzd in \"Numerical Recipes in C, 2nd Edition\", page 137\n *\n * @param {number} min\n * @param {number} max\n * @param {number} n\n * @returns {number}\n */\n trapezoid(min, max, n) {\n if (isNaN(min) || isNaN(max) || isNaN(n)) {\n throw new TypeError(\"Parameters must be numbers\");\n }\n\n const range = max - min;\n\n if (n === 1) {\n const minValue = this.eval(min);\n const maxValue = this.eval(max);\n\n this._s = 0.5 * range * (minValue + maxValue);\n }\n else {\n const iter = 1 << (n - 2);\n const delta = range / iter;\n let x = min + 0.5 * delta;\n let sum = 0;\n\n for (let i = 0; i < iter; i++) {\n sum += this.eval(x);\n x += delta;\n }\n\n this._s = 0.5 * (this._s + range * sum / iter);\n }\n\n if (isNaN(this._s)) {\n throw new TypeError(\"this._s is NaN\");\n }\n\n return this._s;\n }\n\n /**\n * Based on trapzd in \"Numerical Recipes in C, 2nd Edition\", page 139\n *\n * @param {number} min\n * @param {number} max\n * @returns {number}\n */\n simpson(min, max) {\n if (isNaN(min) || isNaN(max)) {\n throw new TypeError(\"Parameters must be numbers\");\n }\n\n const range = max - min;\n let st = 0.5 * range * (this.eval(min) + this.eval(max));\n let t = st;\n let s = 4.0 * st / 3.0;\n let os = s;\n let ost = st;\n const TOLERANCE = 1e-7;\n\n let iter = 1;\n\n for (let n = 2; n <= 20; n++) {\n const delta = range / iter;\n let x = min + 0.5 * delta;\n let sum = 0;\n\n for (let i = 1; i <= iter; i++) {\n sum += this.eval(x);\n x += delta;\n }\n\n t = 0.5 * (t + range * sum / iter);\n st = t;\n s = (4.0 * st - ost) / 3.0;\n\n if (Math.abs(s - os) < TOLERANCE * Math.abs(os)) {\n break;\n }\n\n os = s;\n ost = st;\n iter <<= 1;\n }\n\n return s;\n }\n\n /**\n * romberg\n *\n * @param {number} min\n * @param {number} max\n * @returns {number}\n */\n romberg(min, max) {\n if (isNaN(min) || isNaN(max)) {\n throw new TypeError(\"Parameters must be numbers\");\n }\n\n const MAX = 20;\n const K = 3;\n const TOLERANCE = 1e-6;\n const s = new Array(MAX + 1);\n const h = new Array(MAX + 1);\n let result = {y: 0, dy: 0};\n\n h[0] = 1.0;\n\n for (let j = 1; j <= MAX; j++) {\n s[j - 1] = this.trapezoid(min, max, j);\n\n if (j >= K) {\n result = Polynomial.interpolate(h, s, K, j - K, 0.0);\n if (Math.abs(result.dy) <= TOLERANCE * result.y) {\n break;\n }\n }\n\n s[j] = s[j - 1];\n h[j] = 0.25 * h[j - 1];\n }\n\n return result.y;\n }\n\n /**\n * Estimate what is the maximum polynomial evaluation error value under which polynomial evaluation could be in fact 0.\n *\n * @param {number} maxAbsX\n * @returns {number}\n */\n zeroErrorEstimate(maxAbsX) {\n const poly = this;\n const ERRF = 1e-15;\n\n if (typeof maxAbsX === \"undefined\") {\n const rb = poly.bounds();\n\n maxAbsX = Math.max(Math.abs(rb.minX), Math.abs(rb.maxX));\n }\n\n if (maxAbsX < 0.001) {\n return 2 * Math.abs(poly.eval(ERRF));\n }\n\n const n = poly.coefs.length - 1;\n const an = poly.coefs[n];\n\n return 10 * ERRF * poly.coefs.reduce((m, v, i) => {\n const nm = v / an * Math.pow(maxAbsX, i);\n return nm > m ? nm : m;\n }, 0);\n }\n\n /**\n * Calculates upper Real roots bounds.
\n * Real roots are in interval [negX, posX]. Determined by Fujiwara method.\n * @see {@link http://en.wikipedia.org/wiki/Properties_of_polynomial_roots}\n *\n * @returns {{ negX: number, posX: number }}\n */\n boundsUpperRealFujiwara() {\n let a = this.coefs;\n const n = a.length - 1;\n const an = a[n];\n\n if (an !== 1) {\n a = this.coefs.map(v => v / an);\n }\n\n const b = a.map((v, i) => {\n return (i < n)\n ? Math.pow(Math.abs((i === 0) ? v / 2 : v), 1 / (n - i))\n : v;\n });\n\n let coefSelectionFunc;\n const find2Max = function(acc, bi, i) {\n if (coefSelectionFunc(i)) {\n if (acc.max < bi) {\n acc.nearmax = acc.max;\n acc.max = bi;\n }\n else if (acc.nearmax < bi) {\n acc.nearmax = bi;\n }\n }\n return acc;\n };\n\n coefSelectionFunc = function(i) {\n return i < n && a[i] < 0;\n };\n\n // eslint-disable-next-line unicorn/no-fn-reference-in-iterator\n const max_nearmax_pos = b.reduce(find2Max, {max: 0, nearmax: 0});\n\n coefSelectionFunc = function(i) {\n return i < n && ((n % 2 === i % 2) ? a[i] < 0 : a[i] > 0);\n };\n\n // eslint-disable-next-line unicorn/no-fn-reference-in-iterator\n const max_nearmax_neg = b.reduce(find2Max, {max: 0, nearmax: 0});\n\n return {\n negX: -2 * max_nearmax_neg.max,\n posX: 2 * max_nearmax_pos.max\n };\n }\n\n /**\n * Calculates lower Real roots bounds.
\n * There are no Real roots in interval . Determined by Fujiwara method.\n * @see {@link http://en.wikipedia.org/wiki/Properties_of_polynomial_roots}\n *\n * @returns {{ negX: number, posX: number }}\n */\n boundsLowerRealFujiwara() {\n const poly = new Polynomial();\n\n poly.coefs = this.coefs.slice().reverse();\n\n const res = poly.boundsUpperRealFujiwara();\n\n res.negX = 1 / res.negX;\n res.posX = 1 / res.posX;\n\n return res;\n }\n\n /**\n * Calculates left and right Real roots bounds.
\n * Real roots are in interval [minX, maxX]. Combines Fujiwara lower and upper bounds to get minimal interval.\n * @see {@link http://en.wikipedia.org/wiki/Properties_of_polynomial_roots}\n *\n * @returns {{ minX: number, maxX: number }}\n */\n bounds() {\n const urb = this.boundsUpperRealFujiwara();\n const rb = {minX: urb.negX, maxX: urb.posX};\n\n if (urb.negX === 0 && urb.posX === 0) {\n return rb;\n }\n\n if (urb.negX === 0) {\n rb.minX = this.boundsLowerRealFujiwara().posX;\n }\n else if (urb.posX === 0) {\n rb.maxX = this.boundsLowerRealFujiwara().negX;\n }\n\n if (rb.minX > rb.maxX) {\n rb.minX = rb.maxX = 0;\n }\n\n return rb;\n // TODO: if sure that there are no complex roots\n // (maybe by using Sturm's theorem) use:\n // return this.boundsRealLaguerre();\n }\n\n /**\n * Calculates absolute upper roots bound.
\n * All (Complex and Real) roots magnitudes are <= result. Determined by Rouche method.\n * @see {@link http://en.wikipedia.org/wiki/Properties_of_polynomial_roots}\n *\n * @returns {number}\n */\n boundUpperAbsRouche() {\n const a = this.coefs;\n const n = a.length - 1;\n const max = a.reduce((prev, curr, i) => {\n if (i !== n) {\n curr = Math.abs(curr);\n return (prev < curr) ? curr : prev;\n }\n return prev;\n }, 0);\n\n return 1 + max / Math.abs(a[n]);\n }\n\n /**\n * Calculates absolute lower roots bound.
\n * All (Complex and Real) roots magnitudes are >= result. Determined by Rouche method.\n * @see {@link http://en.wikipedia.org/wiki/Properties_of_polynomial_roots}\n *\n * @returns {number}\n */\n boundLowerAbsRouche() {\n const a = this.coefs;\n const max = a.reduce((prev, curr, i) => {\n if (i !== 0) {\n curr = Math.abs(curr);\n return (prev < curr) ? curr : prev;\n }\n return prev;\n }, 0);\n\n return Math.abs(a[0]) / (Math.abs(a[0]) + max);\n }\n\n /**\n * Calculates left and right Real roots bounds.
\n * WORKS ONLY if all polynomial roots are Real.\n * Real roots are in interval [minX, maxX]. Determined by Laguerre method.\n * @see {@link http://en.wikipedia.org/wiki/Properties_of_polynomial_roots}\n *\n * @returns {{ minX: number, maxX: number }}\n */\n boundsRealLaguerre() {\n const a = this.coefs;\n const n = a.length - 1;\n const p1 = -a[n - 1] / (n * a[n]);\n const undersqrt = a[n - 1] * a[n - 1] - 2 * n / (n - 1) * a[n] * a[n - 2];\n let p2 = (n - 1) / (n * a[n]) * Math.sqrt(undersqrt);\n\n if (p2 < 0) {\n p2 = -p2;\n }\n\n return {\n minX: p1 - p2,\n maxX: p1 + p2\n };\n }\n\n /**\n * Root count by Descartes rule of signs.
\n * Returns maximum number of positive and negative real roots and minimum number of complex roots.\n * @see {@link http://en.wikipedia.org/wiki/Descartes%27_rule_of_signs}\n *\n * @returns {{maxRealPos: number, maxRealNeg: number, minComplex: number}}\n */\n countRootsDescartes() {\n const a = this.coefs;\n const n = a.length - 1;\n const accum = a.reduce((acc, ai, i) => {\n if (acc.prev_a !== 0 && ai !== 0) {\n if ((acc.prev_a < 0) === (ai > 0)) {\n acc.pos++;\n }\n if (((i % 2 === 0) !== (acc.prev_a < 0)) === ((i % 2 === 1) !== (ai > 0))) {\n acc.neg++;\n }\n }\n acc.prev_a = ai;\n return acc;\n }, {pos: 0, neg: 0, prev_a: 0});\n\n return {\n maxRealPos: accum.pos,\n maxRealNeg: accum.neg,\n minComplex: n - (accum.pos + accum.neg)\n };\n }\n\n // getters and setters\n\n /**\n * get degree\n *\n * @returns {number}\n */\n getDegree() {\n return this.coefs.length - 1;\n }\n\n /**\n * getDerivative\n *\n * @returns {module:kld-polynomial.Polynomial}\n */\n getDerivative() {\n const derivative = new Polynomial();\n\n for (let i = 1; i < this.coefs.length; i++) {\n derivative.coefs.push(i * this.coefs[i]);\n }\n\n return derivative;\n }\n\n /**\n * getRoots\n *\n * @returns {Array}\n */\n getRoots() {\n let result;\n\n this.simplifyEquals();\n\n switch (this.getDegree()) {\n case 0: result = []; break;\n case 1: result = this.getLinearRoot(); break;\n case 2: result = this.getQuadraticRoots(); break;\n case 3: result = this.getCubicRoots(); break;\n case 4: result = this.getQuarticRoots(); break;\n default:\n result = [];\n }\n\n return result;\n }\n\n /**\n * getRootsInInterval\n *\n * @param {number} min\n * @param {number} max\n * @returns {Array}\n */\n getRootsInInterval(min, max) {\n const roots = [];\n\n /**\n * @param {number} value\n */\n function push(value) {\n if (typeof value === \"number\") {\n roots.push(value);\n }\n }\n\n if (this.getDegree() === 0) {\n throw new RangeError(\"Unexpected empty polynomial\");\n }\n else if (this.getDegree() === 1) {\n push(this.bisection(min, max));\n }\n else {\n // get roots of derivative\n const deriv = this.getDerivative();\n const droots = deriv.getRootsInInterval(min, max);\n\n if (droots.length > 0) {\n // find root on [min, droots[0]]\n push(this.bisection(min, droots[0]));\n\n // find root on [droots[i],droots[i+1]] for 0 <= i <= count-2\n for (let i = 0; i <= droots.length - 2; i++) {\n push(this.bisection(droots[i], droots[i + 1]));\n }\n\n // find root on [droots[count-1],xmax]\n push(this.bisection(droots[droots.length - 1], max));\n }\n else {\n // polynomial is monotone on [min,max], has at most one root\n push(this.bisection(min, max));\n }\n }\n\n return roots;\n }\n\n /**\n * getLinearRoot\n *\n * @returns {number}\n */\n getLinearRoot() {\n const result = [];\n const a = this.coefs[1];\n\n if (a !== 0) {\n result.push(-this.coefs[0] / a);\n }\n\n return result;\n }\n\n /**\n * getQuadraticRoots\n *\n * @returns {Array}\n */\n getQuadraticRoots() {\n const results = [];\n\n if (this.getDegree() === 2) {\n const a = this.coefs[2];\n const b = this.coefs[1] / a;\n const c = this.coefs[0] / a;\n const d = b * b - 4 * c;\n\n if (d > 0) {\n const e = Math.sqrt(d);\n\n results.push(0.5 * (-b + e));\n results.push(0.5 * (-b - e));\n }\n else if (d === 0) {\n // really two roots with same value, but we only return one\n results.push(0.5 * -b);\n }\n // else imaginary results\n }\n\n return results;\n }\n\n /**\n * getCubicRoots\n *\n * This code is based on MgcPolynomial.cpp written by David Eberly. His\n * code along with many other excellent examples are avaiable at his site:\n * http://www.geometrictools.com\n *\n * @returns {Array}\n */\n getCubicRoots() {\n const results = [];\n\n if (this.getDegree() === 3) {\n const c3 = this.coefs[3];\n const c2 = this.coefs[2] / c3;\n const c1 = this.coefs[1] / c3;\n const c0 = this.coefs[0] / c3;\n\n const a = (3 * c1 - c2 * c2) / 3;\n const b = (2 * c2 * c2 * c2 - 9 * c1 * c2 + 27 * c0) / 27;\n const offset = c2 / 3;\n let discrim = b * b / 4 + a * a * a / 27;\n const halfB = b / 2;\n\n const ZEROepsilon = this.zeroErrorEstimate();\n\n if (Math.abs(discrim) <= ZEROepsilon) {\n discrim = 0;\n }\n\n if (discrim > 0) {\n const e = Math.sqrt(discrim);\n let root; // eslint-disable-line no-shadow\n\n let tmp = -halfB + e;\n\n if (tmp >= 0) {\n root = Math.pow(tmp, 1 / 3);\n }\n else {\n root = -Math.pow(-tmp, 1 / 3);\n }\n\n tmp = -halfB - e;\n\n if (tmp >= 0) {\n root += Math.pow(tmp, 1 / 3);\n }\n else {\n root -= Math.pow(-tmp, 1 / 3);\n }\n\n results.push(root - offset);\n }\n else if (discrim < 0) {\n const distance = Math.sqrt(-a / 3);\n const angle = Math.atan2(Math.sqrt(-discrim), -halfB) / 3;\n const cos = Math.cos(angle);\n const sin = Math.sin(angle);\n const sqrt3 = Math.sqrt(3);\n\n results.push(2 * distance * cos - offset);\n results.push(-distance * (cos + sqrt3 * sin) - offset);\n results.push(-distance * (cos - sqrt3 * sin) - offset);\n }\n else {\n let tmp;\n\n if (halfB >= 0) {\n tmp = -Math.pow(halfB, 1 / 3);\n }\n else {\n tmp = Math.pow(-halfB, 1 / 3);\n }\n\n results.push(2 * tmp - offset);\n // really should return next root twice, but we return only one\n results.push(-tmp - offset);\n }\n }\n\n return results;\n }\n\n /**\n * Calculates roots of quartic polynomial.
\n * First, derivative roots are found, then used to split quartic polynomial\n * into segments, each containing one root of quartic polynomial.\n * Segments are then passed to newton's method to find roots.\n *\n * @returns {Array} roots\n */\n getQuarticRoots() {\n let results = [];\n const n = this.getDegree();\n\n if (n === 4) {\n const poly = new Polynomial();\n\n poly.coefs = this.coefs.slice();\n poly.divideEqualsScalar(poly.coefs[n]);\n\n const ERRF = 1e-15;\n\n if (Math.abs(poly.coefs[0]) < 10 * ERRF * Math.abs(poly.coefs[3])) {\n poly.coefs[0] = 0;\n }\n\n const poly_d = poly.getDerivative();\n const derrt = poly_d.getRoots().sort((a, b) => a - b);\n const dery = [];\n const nr = derrt.length - 1;\n const rb = this.bounds();\n\n const maxabsX = Math.max(Math.abs(rb.minX), Math.abs(rb.maxX));\n const ZEROepsilon = this.zeroErrorEstimate(maxabsX);\n\n for (let i = 0; i <= nr; i++) {\n dery.push(poly.eval(derrt[i]));\n }\n\n for (let i = 0; i <= nr; i++) {\n if (Math.abs(dery[i]) < ZEROepsilon) {\n dery[i] = 0;\n }\n }\n\n let i = 0;\n const dx = Math.max(0.1 * (rb.maxX - rb.minX) / n, ERRF);\n const guesses = [];\n const minmax = [];\n\n if (nr > -1) {\n if (dery[0] !== 0) {\n if (sign(dery[0]) !== sign(poly.eval(derrt[0] - dx) - dery[0])) {\n guesses.push(derrt[0] - dx);\n minmax.push([rb.minX, derrt[0]]);\n }\n }\n else {\n results.push(derrt[0], derrt[0]);\n i++;\n }\n\n for (; i < nr; i++) {\n if (dery[i + 1] === 0) {\n results.push(derrt[i + 1], derrt[i + 1]);\n i++;\n }\n else if (sign(dery[i]) !== sign(dery[i + 1])) {\n guesses.push((derrt[i] + derrt[i + 1]) / 2);\n minmax.push([derrt[i], derrt[i + 1]]);\n }\n }\n if (dery[nr] !== 0 && sign(dery[nr]) !== sign(poly.eval(derrt[nr] + dx) - dery[nr])) {\n guesses.push(derrt[nr] + dx);\n minmax.push([derrt[nr], rb.maxX]);\n }\n }\n\n /**\n * @param {number} x\n * @returns {number}\n */\n const f = function(x) {\n return poly.eval(x);\n };\n\n /**\n * @param {number} x\n * @returns {number}\n */\n const df = function(x) {\n return poly_d.eval(x);\n };\n\n if (guesses.length > 0) {\n for (i = 0; i < guesses.length; i++) {\n guesses[i] = Polynomial.newtonSecantBisection(guesses[i], f, df, 32, minmax[i][0], minmax[i][1]);\n }\n }\n\n results = results.concat(guesses);\n }\n\n return results;\n }\n}\n\nexport default Polynomial;\n","/* parser generated by jison 0.4.18 */\n/*\n Returns a Parser object of the following structure:\n\n Parser: {\n yy: {}\n }\n\n Parser.prototype: {\n yy: {},\n trace: function(),\n symbols_: {associative list: name ==> number},\n terminals_: {associative list: number ==> name},\n productions_: [...],\n performAction: function anonymous(yytext, yyleng, yylineno, yy, yystate, $$, _$),\n table: [...],\n defaultActions: {...},\n parseError: function(str, hash),\n parse: function(input),\n\n lexer: {\n EOF: 1,\n parseError: function(str, hash),\n setInput: function(input),\n input: function(),\n unput: function(str),\n more: function(),\n less: function(n),\n pastInput: function(),\n upcomingInput: function(),\n showPosition: function(),\n test_match: function(regex_match_array, rule_index),\n next: function(),\n lex: function(),\n begin: function(condition),\n popState: function(),\n _currentRules: function(),\n topState: function(),\n pushState: function(condition),\n\n options: {\n ranges: boolean (optional: true ==> token location info will include a .range[] member)\n flex: boolean (optional: true ==> flex-like lexing behaviour where the rules are tested exhaustively to find the longest match)\n backtrack_lexer: boolean (optional: true ==> lexer regexes are tested in order and for each matching regex the action code is invoked; the lexer terminates the scan when a token is returned by the action code)\n },\n\n performAction: function(yy, yy_, $avoiding_name_collisions, YY_START),\n rules: [...],\n conditions: {associative list: name ==> set},\n }\n }\n\n\n token location info (@$, _$, etc.): {\n first_line: n,\n last_line: n,\n first_column: n,\n last_column: n,\n range: [start_number, end_number] (where the numbers are indexes into the input string, regular zero-based)\n }\n\n\n the parseError function receives a 'hash' object with these members for lexer and parser errors: {\n text: (matched text)\n token: (the produced terminal token, if any)\n line: (yylineno)\n }\n while parser (grammar) errors will also provide these members, i.e. parser errors deliver a superset of attributes: {\n loc: (yylloc)\n expected: (string describing the set of expected tokens)\n recoverable: (boolean: TRUE when the parser has a error recovery rule available for this particular error)\n }\n*/\nvar parser = (function(){\nvar o=function(k,v,o,l){for(o=o||{},l=k.length;l--;o[k[l]]=v);return o},$V0=[1,6],$V1=[1,19],$V2=[1,7],$V3=[1,10],$V4=[1,13],$V5=[1,32],$V6=[1,14],$V7=[1,38],$V8=[1,15],$V9=[1,22],$Va=[1,37],$Vb=[1,25],$Vc=[1,28],$Vd=[1,29],$Ve=[1,33],$Vf=[1,34],$Vg=[1,36],$Vh=[1,35],$Vi=[1,5],$Vj=[1,5,14,16,24,28,56],$Vk=[1,61],$Vl=[1,63],$Vm=[1,62],$Vn=[1,50],$Vo=[1,56],$Vp=[1,45],$Vq=[1,46],$Vr=[1,47],$Vs=[1,48],$Vt=[1,49],$Vu=[1,51],$Vv=[1,53],$Vw=[1,54],$Vx=[1,59],$Vy=[1,60],$Vz=[1,5,14,16,24,28,56,69],$VA=[1,69],$VB=[1,70],$VC=[1,71],$VD=[1,72],$VE=[1,73],$VF=[1,74],$VG=[1,5,14,16,24,28,31,32,34,35,36,37,38,39,56,69],$VH=[1,75],$VI=[1,76],$VJ=[1,77],$VK=[1,78],$VL=[1,79],$VM=[1,80],$VN=[1,5,14,16,24,28,31,32,34,35,36,37,38,39,41,42,43,44,45,46,56,69],$VO=[1,5,14,16,24,28,31,32,34,35,36,37,38,39,41,42,43,44,45,46,52,55,56,69],$VP=[2,51],$VQ=[1,5,14,16,24,28,31,32,34,35,36,37,38,39,41,42,43,44,45,46,52,55,56,69,73],$VR=[1,5,14,16,24,28,56,73],$VS=[1,109],$VT=[1,125],$VU=[1,115],$VV=[1,122],$VW=[1,126],$VX=[1,133],$VY=[1,135],$VZ=[1,117],$V_=[1,129],$V$=[1,127],$V01=[1,134],$V11=[1,128],$V21=[1,130],$V31=[1,138],$V41=[1,120],$V51=[1,118],$V61=[1,119],$V71=[1,121],$V81=[1,137],$V91=[1,124],$Va1=[1,131],$Vb1=[1,132],$Vc1=[1,136],$Vd1=[1,123],$Ve1=[1,162],$Vf1=[1,165],$Vg1=[14,56],$Vh1=[14,28],$Vi1=[1,177],$Vj1=[14,24,56],$Vk1=[14,24,56,73],$Vl1=[14,28,73],$Vm1=[14,24],$Vn1=[1,5,14,28,56],$Vo1=[1,201];\nvar parser = {trace: function trace () { },\nyy: {},\nsymbols_: {\"error\":2,\"program\":3,\"statements\":4,\";\":5,\"statement\":6,\"assignment\":7,\"sequence\":8,\"LET\":9,\"IDENTIFIER\":10,\"=\":11,\"DEF\":12,\"sequences\":13,\",\":14,\"steps\":15,\"|>\":16,\"step\":17,\"=~\":18,\"namedPattern\":19,\"expression\":20,\"booleanExpression\":21,\"MAP\":22,\"(\":23,\")\":24,\"PATTERNS\":25,\"{\":26,\"patterns\":27,\"}\":28,\"SEQUENCES\":29,\"relationalExpression\":30,\"AND\":31,\"OR\":32,\"mathExpression\":33,\"<\":34,\"<=\":35,\"==\":36,\"!=\":37,\">=\":38,\">\":39,\"callExpression\":40,\"+\":41,\"-\":42,\"*\":43,\"/\":44,\"MOD\":45,\"POW\":46,\"argumentList\":47,\"unaryExpression\":48,\"memberExpression\":49,\"NOT\":50,\"primaryExpression\":51,\".\":52,\"name\":53,\"integer\":54,\"[\":55,\"]\":56,\"boolean\":57,\"NULL_TYPE\":58,\"float\":59,\"string\":60,\"UNDEFINED_TYPE\":61,\"$\":62,\"arrayExpression\":63,\"objectExpression\":64,\"expressionElements\":65,\"expressionElement\":66,\"expressionProperties\":67,\"expressionProperty\":68,\":\":69,\"argument\":70,\"...\":71,\"pattern\":72,\"AS\":73,\"ANY_TYPE\":74,\"ARRAY_TYPE\":75,\"BOOLEAN_TYPE\":76,\"TRUE\":77,\"FALSE\":78,\"NUMBER_TYPE\":79,\"OBJECT_TYPE\":80,\"STRING_TYPE\":81,\"arrayPattern\":82,\"objectPattern\":83,\"PATTERN\":84,\"ENUMERATION\":85,\"patternElements\":86,\"namedPatternElement\":87,\"patternElement\":88,\"range\":89,\"..\":90,\"patternProperties\":91,\"namedPatternProperty\":92,\"patternProperty\":93,\"STRING\":94,\"NUMBER\":95,\"$accept\":0,\"$end\":1},\nterminals_: {2:\"error\",5:\";\",9:\"LET\",10:\"IDENTIFIER\",11:\"=\",12:\"DEF\",14:\",\",16:\"|>\",18:\"=~\",22:\"MAP\",23:\"(\",24:\")\",25:\"PATTERNS\",26:\"{\",28:\"}\",29:\"SEQUENCES\",31:\"AND\",32:\"OR\",34:\"<\",35:\"<=\",36:\"==\",37:\"!=\",38:\">=\",39:\">\",41:\"+\",42:\"-\",43:\"*\",44:\"/\",45:\"MOD\",46:\"POW\",50:\"NOT\",52:\".\",55:\"[\",56:\"]\",58:\"NULL_TYPE\",61:\"UNDEFINED_TYPE\",62:\"$\",69:\":\",71:\"...\",73:\"AS\",74:\"ANY_TYPE\",75:\"ARRAY_TYPE\",76:\"BOOLEAN_TYPE\",77:\"TRUE\",78:\"FALSE\",79:\"NUMBER_TYPE\",80:\"OBJECT_TYPE\",81:\"STRING_TYPE\",84:\"PATTERN\",85:\"ENUMERATION\",90:\"..\",94:\"STRING\",95:\"NUMBER\"},\nproductions_: [0,[3,1],[3,2],[4,3],[4,1],[6,1],[6,1],[7,4],[7,4],[13,3],[13,1],[8,1],[15,3],[15,1],[17,2],[17,1],[20,1],[20,6],[20,4],[20,4],[21,1],[21,3],[21,3],[30,1],[30,3],[30,3],[30,3],[30,3],[30,3],[30,3],[33,1],[33,3],[33,3],[33,3],[33,3],[33,3],[33,3],[40,3],[40,4],[40,1],[48,1],[48,2],[49,1],[49,3],[49,3],[49,4],[51,1],[51,1],[51,1],[51,1],[51,1],[51,1],[51,1],[51,1],[51,1],[51,3],[63,2],[63,3],[65,3],[65,1],[66,1],[66,1],[64,2],[64,3],[67,3],[67,1],[68,3],[68,1],[68,1],[47,3],[47,1],[70,1],[70,2],[27,3],[27,1],[19,1],[19,3],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,1],[72,2],[72,2],[72,1],[82,2],[82,3],[86,3],[86,1],[87,1],[87,3],[88,1],[88,3],[88,3],[88,5],[89,3],[89,2],[89,2],[89,1],[83,2],[83,3],[91,3],[91,1],[92,1],[92,3],[93,3],[93,1],[57,1],[57,1],[60,1],[54,1],[59,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1],[53,1]],\nperformAction: function anonymous(yytext, yyleng, yylineno, yy, yystate /* action[1] */, $$ /* vstack */, _$ /* lstack */) {\n/* this == yyval */\n\nvar $0 = $$.length - 1;\nswitch (yystate) {\ncase 1:\nreturn $$[$0];\nbreak;\ncase 2:\nreturn $$[$0-1];\nbreak;\ncase 3: case 9: case 12: case 58: case 64: case 69: case 73: case 96: case 110:\n$$[$0-2].push($$[$0]); this.$ = $$[$0-2]\nbreak;\ncase 4: case 10: case 13: case 59: case 65: case 70: case 74: case 97: case 111:\nthis.$ = [ $$[$0] ];\nbreak;\ncase 5: case 6: case 14: case 15: case 16: case 20: case 23: case 30: case 39: case 40: case 42: case 53: case 54: case 60: case 61: case 68: case 71: case 112: case 121: case 122: case 123: case 124: case 125: case 126: case 127: case 128: case 129: case 130: case 131: case 132: case 133: case 134: case 135: case 136: case 137: case 138: case 139: case 140: case 141: case 142: case 143: case 144:\nthis.$ = $$[$0]\nbreak;\ncase 7:\nthis.$ = { type: 'assignment', name: $$[$0-2], value: $$[$0] };\nbreak;\ncase 8:\nthis.$ = { type: 'def', name: $$[$0-2], value: $$[$0] };\nbreak;\ncase 11:\nthis.$ = { type: 'sequence', steps: $$[$0] };\nbreak;\ncase 17:\nthis.$ = { type: 'map', value: [ $$[$0-3], $$[$0-1] ] };\nbreak;\ncase 18:\nthis.$ = { type: 'patterns', patterns: $$[$0-1] };\nbreak;\ncase 19:\nthis.$ = { type: 'sequences', sequences: $$[$0-1] };\nbreak;\ncase 21:\nthis.$ = { type: 'and', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 22:\nthis.$ = { type: 'or', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 24:\nthis.$ = { type: 'less_than', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 25:\nthis.$ = { type: 'less_equal', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 26:\nthis.$ = { type: 'equal', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 27:\nthis.$ = { type: 'not_equal', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 28:\nthis.$ = { type: 'greater_equal', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 29:\nthis.$ = { type: 'greater_than', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 31:\nthis.$ = { type: 'add', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 32:\nthis.$ = { type: 'subtract', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 33:\nthis.$ = { type: 'multiply', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 34:\nthis.$ = { type: 'divide', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 35:\nthis.$ = { type: 'modulus', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 36:\nthis.$ = { type: 'power', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 37:\nthis.$ = { type: 'invoke', name: $$[$0-2], args: [] };\nbreak;\ncase 38:\nthis.$ = { type: 'invoke', name: $$[$0-3], args: $$[$0-1] };\nbreak;\ncase 41:\nthis.$ = { type: 'not', value: $$[$0] };\nbreak;\ncase 43:\nthis.$ = { type: 'get-property', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 44:\nthis.$ = { type: 'get-index', left: $$[$0-2], right: $$[$0] };\nbreak;\ncase 45:\nthis.$ = { type: 'get-index', left: $$[$0-3], right: $$[$0-1] };\nbreak;\ncase 46:\nthis.$ = { type: 'boolean', value: $$[$0] };\nbreak;\ncase 47:\nthis.$ = { type: 'boolean', value: null };\nbreak;\ncase 48:\nthis.$ = { type: 'number', value: $$[$0] };\nbreak;\ncase 49:\nthis.$ = { type: 'string', value: $$[$0] };\nbreak;\ncase 50:\nthis.$ = { type: 'undefined', value: undefined };\nbreak;\ncase 51:\nthis.$ = { type: 'get-value', name: $$[$0] };\nbreak;\ncase 52:\nthis.$ = { type: 'get-structure' };\nbreak;\ncase 55:\nthis.$ = $$[$0-1];\nbreak;\ncase 56:\nthis.$ = { type: 'array', value: [] };\nbreak;\ncase 57:\nthis.$ = { type: 'array', value: $$[$0-1] };\nbreak;\ncase 62:\nthis.$ = { type: 'object', value: [] };\nbreak;\ncase 63:\nthis.$ = { type: 'object', value: $$[$0-1] };\nbreak;\ncase 66:\nthis.$ = { type: 'property', name: $$[$0-2], value: $$[$0] };\nbreak;\ncase 67:\nthis.$ = { type: 'property', name: $$[$0], value: null };\nbreak;\ncase 72:\nthis.$ = { type: 'spread', expression: $$[$0] };\nbreak;\ncase 75: case 98:\n$$[$0].assignTo = null; this.$ = $$[$0];\nbreak;\ncase 76: case 99: case 113:\n$$[$0-2].assignTo = $$[$0]; this.$ = $$[$0-2];\nbreak;\ncase 77:\nthis.$ = { type: 'pattern', patternType: 'any', value: null };\nbreak;\ncase 78:\nthis.$ = { type: 'pattern', patternType: 'array', value: null };\nbreak;\ncase 79:\nthis.$ = { type: 'pattern', patternType: 'boolean', value: null };\nbreak;\ncase 80:\nthis.$ = { type: 'pattern', patternType: 'boolean', value: true };\nbreak;\ncase 81:\nthis.$ = { type: 'pattern', patternType: 'boolean', value: false };\nbreak;\ncase 82:\nthis.$ = { type: 'pattern', patternType: 'null', value: null };\nbreak;\ncase 83:\nthis.$ = { type: 'pattern', patternType: 'number', value: null };\nbreak;\ncase 84:\nthis.$ = { type: 'pattern', patternType: 'number', value: $$[$0] };\nbreak;\ncase 85:\nthis.$ = { type: 'pattern', patternType: 'object', value: null };\nbreak;\ncase 86:\nthis.$ = { type: 'pattern', patternType: 'string', value: null };\nbreak;\ncase 87:\nthis.$ = { type: 'pattern', patternType: 'string', value: $$[$0] };\nbreak;\ncase 88:\nthis.$ = { type: 'pattern', patternType: 'undefined', value: null };\nbreak;\ncase 89: case 90:\nthis.$ = $$[$0];\nbreak;\ncase 91:\nthis.$ = { type: 'pattern-reference', name: $$[$0] };\nbreak;\ncase 92:\nthis.$ = { type: 'enumeration-reference', name: $$[$0] };\nbreak;\ncase 93:\nthis.$ = { type: 'pattern', patternType: 'reference', value: $$[$0] };\nbreak;\ncase 94:\nthis.$ = { type: 'pattern', patternType: 'array-pattern', value: [] };\nbreak;\ncase 95:\nthis.$ = { type: 'pattern', patternType: 'array-pattern', value: $$[$0-1] };\nbreak;\ncase 100:\nthis.$ = { type: 'element', pattern: $$[$0], range: { type: 'range', start: 1, stop: 1 } };\nbreak;\ncase 101:\nthis.$ = { type: 'element', pattern: $$[$0-2], range: $$[$0] };\nbreak;\ncase 102:\nthis.$ = { type: 'element-group', elements: $$[$0-1], range: { type: 'range', start: 1, stop: 1 } };\nbreak;\ncase 103:\nthis.$ = { type: 'element-group', elements: $$[$0-3], range: $$[$0] };\nbreak;\ncase 104:\nthis.$ = { type: 'range', start: $$[$0-2], stop: $$[$0] };\nbreak;\ncase 105:\nthis.$ = { type: 'range', start: 0, stop: $$[$0] };\nbreak;\ncase 106:\nthis.$ = { type: 'range', start: $$[$0-1], stop: Infinity };\nbreak;\ncase 107:\nthis.$ = { type: 'range', start: $$[$0], stop: $$[$0] };\nbreak;\ncase 108:\nthis.$ = { type: 'pattern', patternType: 'object', value: null };\nbreak;\ncase 109:\nthis.$ = { type: 'pattern', patternType: 'object-pattern', value: $$[$0-1] };\nbreak;\ncase 114:\nthis.$ = { type: 'property', name: $$[$0-2], pattern: $$[$0] };\nbreak;\ncase 115:\nthis.$ = { type: 'property', name: $$[$0], pattern: { type: 'pattern', patternType: 'any', value: null } };\nbreak;\ncase 116:\nthis.$ = true;\nbreak;\ncase 117:\nthis.$ = false;\nbreak;\ncase 118:\nthis.$ = $$[$0].substring(1, $$[$0].length - 1);\nbreak;\ncase 119:\nthis.$ = parseInt($$[$0]);\nbreak;\ncase 120:\nthis.$ = parseFloat($$[$0]);\nbreak;\n}\n},\ntable: [{3:1,4:2,6:3,7:4,8:5,9:$V0,10:$V1,12:$V2,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{1:[3]},{1:[2,1],5:[1,39]},o($Vi,[2,4]),o($Vi,[2,5]),o($Vi,[2,6]),{10:[1,40]},{10:[1,41]},o([1,5,14,24,28,56],[2,11],{16:[1,42]}),o($Vj,[2,13]),{10:$Vk,19:43,26:$Vl,55:$Vm,58:$Vn,59:52,60:55,61:$Vo,72:44,74:$Vp,75:$Vq,76:$Vr,77:$Vs,78:$Vt,79:$Vu,80:$Vv,81:$Vw,82:57,83:58,84:$Vx,85:$Vy,94:$Vg,95:$Vh},o($Vj,[2,15]),o($Vz,[2,16]),{23:[1,64]},{26:[1,65]},{26:[1,66]},o($Vz,[2,20],{31:[1,67],32:[1,68],34:$VA,35:$VB,36:$VC,37:$VD,38:$VE,39:$VF}),o($VG,[2,23],{41:$VH,42:$VI,43:$VJ,44:$VK,45:$VL,46:$VM}),o($VN,[2,30]),o($VO,$VP,{23:[1,81]}),o($VN,[2,39]),o($VN,[2,40],{52:[1,82],55:[1,83]}),{10:[1,85],23:$V5,26:$V7,48:84,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},o($VO,[2,42]),o($VO,[2,46]),o($VO,[2,47]),o($VO,[2,48]),o($VO,[2,49]),o($VO,[2,50]),o($VO,[2,52]),o($VO,[2,53]),o($VO,[2,54]),{10:$V1,20:86,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},o($VO,[2,116]),o($VO,[2,117]),o($VQ,[2,120]),o($VQ,[2,118]),{7:91,9:$V0,10:$V1,12:$V2,20:90,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,56:[1,87],57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,65:88,66:89,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{7:96,9:$V0,10:$V1,12:$V2,20:95,21:12,22:$V4,23:$V5,25:$V6,26:$V7,28:[1,92],29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,67:93,68:94,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{1:[2,2],6:97,7:4,8:5,9:$V0,10:$V1,12:$V2,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{11:[1,98]},{11:[1,99]},{10:$V1,17:100,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},o($Vj,[2,14]),o($Vj,[2,75],{73:[1,101]}),o($VR,[2,77]),o($VR,[2,78]),o($VR,[2,79]),o($VR,[2,80]),o($VR,[2,81]),o($VR,[2,82]),o($VR,[2,83]),o($VR,[2,84]),o($VR,[2,85]),o($VR,[2,86]),o($VR,[2,87]),o($VR,[2,88]),o($VR,[2,89]),o($VR,[2,90]),{10:[1,102]},{10:[1,103]},o($VR,[2,93]),{10:$Vk,23:$VS,26:$Vl,55:$Vm,56:[1,104],58:$Vn,59:52,60:55,61:$Vo,72:108,74:$Vp,75:$Vq,76:$Vr,77:$Vs,78:$Vt,79:$Vu,80:$Vv,81:$Vw,82:57,83:58,84:$Vx,85:$Vy,86:105,87:106,88:107,94:$Vg,95:$Vh},{9:$VT,10:$VU,12:$VV,22:$VW,25:$VX,28:[1,110],29:$VY,31:$VZ,32:$V_,45:$V$,46:$V01,50:$V11,53:114,58:$V21,60:116,61:$V31,73:$V41,74:$V51,75:$V61,76:$V71,77:$V81,78:$V91,79:$Va1,80:$Vb1,81:$Vc1,85:$Vd1,91:111,92:112,93:113,94:$Vg},{10:$V1,20:139,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$Vk,19:141,26:$Vl,27:140,55:$Vm,58:$Vn,59:52,60:55,61:$Vo,72:44,74:$Vp,75:$Vq,76:$Vr,77:$Vs,78:$Vt,79:$Vu,80:$Vv,81:$Vw,82:57,83:58,84:$Vx,85:$Vy,94:$Vg,95:$Vh},{8:143,10:$V1,13:142,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,30:144,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,30:145,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,33:146,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,33:147,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,33:148,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,33:149,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,33:150,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,33:151,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,40:152,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,40:153,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,40:154,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,40:155,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,40:156,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,23:$V5,26:$V7,40:157,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{10:$V1,20:161,21:12,22:$V4,23:$V5,24:[1,158],25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,47:159,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,70:160,71:$Ve1,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{9:$VT,10:$VU,12:$VV,22:$VW,25:$VX,29:$VY,31:$VZ,32:$V_,45:$V$,46:$V01,50:$V11,53:163,54:164,58:$V21,60:116,61:$V31,73:$V41,74:$V51,75:$V61,76:$V71,77:$V81,78:$V91,79:$Va1,80:$Vb1,81:$Vc1,85:$Vd1,94:$Vg,95:$Vf1},{54:166,95:$Vf1},o($VN,[2,41]),o($VO,$VP),{24:[1,167]},o($VO,[2,56]),{14:[1,169],56:[1,168]},o($Vg1,[2,59]),o($Vg1,[2,60]),o($Vg1,[2,61]),o($VO,[2,62]),{14:[1,171],28:[1,170]},o($Vh1,[2,65]),o($Vh1,[2,67],{69:[1,172]}),o($Vh1,[2,68]),o($Vi,[2,3]),{8:173,10:$V1,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{8:174,10:$V1,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},o($Vj,[2,12]),{10:[1,175]},o($VR,[2,91]),o($VR,[2,92]),o($VR,[2,94]),{14:$Vi1,56:[1,176]},o($Vj1,[2,97]),o($Vj1,[2,98],{73:[1,178]}),o($Vk1,[2,100],{5:[1,179]}),{10:$Vk,23:$VS,26:$Vl,55:$Vm,58:$Vn,59:52,60:55,61:$Vo,72:108,74:$Vp,75:$Vq,76:$Vr,77:$Vs,78:$Vt,79:$Vu,80:$Vv,81:$Vw,82:57,83:58,84:$Vx,85:$Vy,86:180,87:106,88:107,94:$Vg,95:$Vh},o($VR,[2,108]),{14:[1,182],28:[1,181]},o($Vh1,[2,111]),o($Vh1,[2,112],{73:[1,183]}),o($Vl1,[2,115],{69:[1,184]}),o($VQ,[2,121]),o($VQ,[2,122]),o($VQ,[2,123]),o($VQ,[2,124]),o($VQ,[2,125]),o($VQ,[2,126]),o($VQ,[2,127]),o($VQ,[2,128]),o($VQ,[2,129]),o($VQ,[2,130]),o($VQ,[2,131]),o($VQ,[2,132]),o($VQ,[2,133]),o($VQ,[2,134]),o($VQ,[2,135]),o($VQ,[2,136]),o($VQ,[2,137]),o($VQ,[2,138]),o($VQ,[2,139]),o($VQ,[2,140]),o($VQ,[2,141]),o($VQ,[2,142]),o($VQ,[2,143]),o($VQ,[2,144]),{14:[1,185]},{14:[1,187],28:[1,186]},o($Vh1,[2,74]),{14:[1,189],28:[1,188]},o($Vh1,[2,10]),o($Vz,[2,21],{34:$VA,35:$VB,36:$VC,37:$VD,38:$VE,39:$VF}),o($Vz,[2,22],{34:$VA,35:$VB,36:$VC,37:$VD,38:$VE,39:$VF}),o($VG,[2,24],{41:$VH,42:$VI,43:$VJ,44:$VK,45:$VL,46:$VM}),o($VG,[2,25],{41:$VH,42:$VI,43:$VJ,44:$VK,45:$VL,46:$VM}),o($VG,[2,26],{41:$VH,42:$VI,43:$VJ,44:$VK,45:$VL,46:$VM}),o($VG,[2,27],{41:$VH,42:$VI,43:$VJ,44:$VK,45:$VL,46:$VM}),o($VG,[2,28],{41:$VH,42:$VI,43:$VJ,44:$VK,45:$VL,46:$VM}),o($VG,[2,29],{41:$VH,42:$VI,43:$VJ,44:$VK,45:$VL,46:$VM}),o($VN,[2,31]),o($VN,[2,32]),o($VN,[2,33]),o($VN,[2,34]),o($VN,[2,35]),o($VN,[2,36]),o($VN,[2,37]),{14:[1,191],24:[1,190]},o($Vm1,[2,70]),o($Vm1,[2,71]),{10:$V1,20:192,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},o($VO,[2,43]),o($VO,[2,44]),o([1,5,14,16,24,28,31,32,34,35,36,37,38,39,41,42,43,44,45,46,52,55,56,69,73,90],[2,119]),{56:[1,193]},o($VO,[2,55]),o($VO,[2,57]),{7:91,9:$V0,10:$V1,12:$V2,20:90,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,66:194,77:$Ve,78:$Vf,94:$Vg,95:$Vh},o($VO,[2,63]),{7:96,9:$V0,10:$V1,12:$V2,20:95,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,68:195,77:$Ve,78:$Vf,94:$Vg,95:$Vh},{8:196,10:$V1,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},o($Vn1,[2,7]),o($Vn1,[2,8]),o($Vj,[2,76]),o($VR,[2,95]),{10:$Vk,23:$VS,26:$Vl,55:$Vm,58:$Vn,59:52,60:55,61:$Vo,72:108,74:$Vp,75:$Vq,76:$Vr,77:$Vs,78:$Vt,79:$Vu,80:$Vv,81:$Vw,82:57,83:58,84:$Vx,85:$Vy,87:197,88:107,94:$Vg,95:$Vh},{10:[1,198]},{54:200,89:199,90:$Vo1,95:$Vf1},{14:$Vi1,24:[1,202]},o($VR,[2,109]),{9:$VT,10:$VU,12:$VV,22:$VW,25:$VX,29:$VY,31:$VZ,32:$V_,45:$V$,46:$V01,50:$V11,53:114,58:$V21,60:116,61:$V31,73:$V41,74:$V51,75:$V61,76:$V71,77:$V81,78:$V91,79:$Va1,80:$Vb1,81:$Vc1,85:$Vd1,92:203,93:113,94:$Vg},{10:[1,204]},{10:$Vk,26:$Vl,55:$Vm,58:$Vn,59:52,60:55,61:$Vo,72:205,74:$Vp,75:$Vq,76:$Vr,77:$Vs,78:$Vt,79:$Vu,80:$Vv,81:$Vw,82:57,83:58,84:$Vx,85:$Vy,94:$Vg,95:$Vh},{8:206,10:$V1,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},o($Vz,[2,18]),{10:$Vk,19:207,26:$Vl,55:$Vm,58:$Vn,59:52,60:55,61:$Vo,72:44,74:$Vp,75:$Vq,76:$Vr,77:$Vs,78:$Vt,79:$Vu,80:$Vv,81:$Vw,82:57,83:58,84:$Vx,85:$Vy,94:$Vg,95:$Vh},o($Vz,[2,19]),{8:208,10:$V1,15:8,17:9,18:$V3,20:11,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,77:$Ve,78:$Vf,94:$Vg,95:$Vh},o($VN,[2,38]),{10:$V1,20:161,21:12,22:$V4,23:$V5,25:$V6,26:$V7,29:$V8,30:16,33:17,40:18,48:20,49:21,50:$V9,51:23,55:$Va,57:24,58:$Vb,59:26,60:27,61:$Vc,62:$Vd,63:30,64:31,70:209,71:$Ve1,77:$Ve,78:$Vf,94:$Vg,95:$Vh},o($Vm1,[2,72]),o($VO,[2,45]),o($Vg1,[2,58]),o($Vh1,[2,64]),o($Vh1,[2,66]),o($Vj1,[2,96]),o($Vj1,[2,99]),o($Vk1,[2,101]),o($Vk1,[2,107],{90:[1,210]}),{54:211,95:$Vf1},o($Vk1,[2,102],{5:[1,212]}),o($Vh1,[2,110]),o($Vh1,[2,113]),o($Vl1,[2,114]),{24:[1,213]},o($Vh1,[2,73]),o($Vh1,[2,9]),o($Vm1,[2,69]),o($Vk1,[2,106],{54:214,95:$Vf1}),o($Vk1,[2,105]),{54:200,89:215,90:$Vo1,95:$Vf1},o($Vz,[2,17]),o($Vk1,[2,104]),o($Vk1,[2,103])],\ndefaultActions: {},\nparseError: function parseError (str, hash) {\n if (hash.recoverable) {\n this.trace(str);\n } else {\n var error = new Error(str);\n error.hash = hash;\n throw error;\n }\n},\nparse: function parse(input) {\n var self = this, stack = [0], tstack = [], vstack = [null], lstack = [], table = this.table, yytext = '', yylineno = 0, yyleng = 0, recovering = 0, TERROR = 2, EOF = 1;\n var args = lstack.slice.call(arguments, 1);\n var lexer = Object.create(this.lexer);\n var sharedState = { yy: {} };\n for (var k in this.yy) {\n if (Object.prototype.hasOwnProperty.call(this.yy, k)) {\n sharedState.yy[k] = this.yy[k];\n }\n }\n lexer.setInput(input, sharedState.yy);\n sharedState.yy.lexer = lexer;\n sharedState.yy.parser = this;\n if (typeof lexer.yylloc == 'undefined') {\n lexer.yylloc = {};\n }\n var yyloc = lexer.yylloc;\n lstack.push(yyloc);\n var ranges = lexer.options && lexer.options.ranges;\n if (typeof sharedState.yy.parseError === 'function') {\n this.parseError = sharedState.yy.parseError;\n } else {\n this.parseError = Object.getPrototypeOf(this).parseError;\n }\n function popStack(n) {\n stack.length = stack.length - 2 * n;\n vstack.length = vstack.length - n;\n lstack.length = lstack.length - n;\n }\n _token_stack:\n var lex = function () {\n var token;\n token = lexer.lex() || EOF;\n if (typeof token !== 'number') {\n token = self.symbols_[token] || token;\n }\n return token;\n };\n var symbol, preErrorSymbol, state, action, a, r, yyval = {}, p, len, newState, expected;\n while (true) {\n state = stack[stack.length - 1];\n if (this.defaultActions[state]) {\n action = this.defaultActions[state];\n } else {\n if (symbol === null || typeof symbol == 'undefined') {\n symbol = lex();\n }\n action = table[state] && table[state][symbol];\n }\n if (typeof action === 'undefined' || !action.length || !action[0]) {\n var errStr = '';\n expected = [];\n for (p in table[state]) {\n if (this.terminals_[p] && p > TERROR) {\n expected.push('\\'' + this.terminals_[p] + '\\'');\n }\n }\n if (lexer.showPosition) {\n errStr = 'Parse error on line ' + (yylineno + 1) + ':\\n' + lexer.showPosition() + '\\nExpecting ' + expected.join(', ') + ', got \\'' + (this.terminals_[symbol] || symbol) + '\\'';\n } else {\n errStr = 'Parse error on line ' + (yylineno + 1) + ': Unexpected ' + (symbol == EOF ? 'end of input' : '\\'' + (this.terminals_[symbol] || symbol) + '\\'');\n }\n this.parseError(errStr, {\n text: lexer.match,\n token: this.terminals_[symbol] || symbol,\n line: lexer.yylineno,\n loc: yyloc,\n expected: expected\n });\n }\n if (action[0] instanceof Array && action.length > 1) {\n throw new Error('Parse Error: multiple actions possible at state: ' + state + ', token: ' + symbol);\n }\n switch (action[0]) {\n case 1:\n stack.push(symbol);\n vstack.push(lexer.yytext);\n lstack.push(lexer.yylloc);\n stack.push(action[1]);\n symbol = null;\n if (!preErrorSymbol) {\n yyleng = lexer.yyleng;\n yytext = lexer.yytext;\n yylineno = lexer.yylineno;\n yyloc = lexer.yylloc;\n if (recovering > 0) {\n recovering--;\n }\n } else {\n symbol = preErrorSymbol;\n preErrorSymbol = null;\n }\n break;\n case 2:\n len = this.productions_[action[1]][1];\n yyval.$ = vstack[vstack.length - len];\n yyval._$ = {\n first_line: lstack[lstack.length - (len || 1)].first_line,\n last_line: lstack[lstack.length - 1].last_line,\n first_column: lstack[lstack.length - (len || 1)].first_column,\n last_column: lstack[lstack.length - 1].last_column\n };\n if (ranges) {\n yyval._$.range = [\n lstack[lstack.length - (len || 1)].range[0],\n lstack[lstack.length - 1].range[1]\n ];\n }\n r = this.performAction.apply(yyval, [\n yytext,\n yyleng,\n yylineno,\n sharedState.yy,\n action[1],\n vstack,\n lstack\n ].concat(args));\n if (typeof r !== 'undefined') {\n return r;\n }\n if (len) {\n stack = stack.slice(0, -1 * len * 2);\n vstack = vstack.slice(0, -1 * len);\n lstack = lstack.slice(0, -1 * len);\n }\n stack.push(this.productions_[action[1]][0]);\n vstack.push(yyval.$);\n lstack.push(yyval._$);\n newState = table[stack[stack.length - 2]][stack[stack.length - 1]];\n stack.push(newState);\n break;\n case 3:\n return true;\n }\n }\n return true;\n}};\n/* generated by jison-lex 0.3.4 */\nvar lexer = (function(){\nvar lexer = ({\n\nEOF:1,\n\nparseError:function parseError(str, hash) {\n if (this.yy.parser) {\n this.yy.parser.parseError(str, hash);\n } else {\n throw new Error(str);\n }\n },\n\n// resets the lexer, sets new input\nsetInput:function (input, yy) {\n this.yy = yy || this.yy || {};\n this._input = input;\n this._more = this._backtrack = this.done = false;\n this.yylineno = this.yyleng = 0;\n this.yytext = this.matched = this.match = '';\n this.conditionStack = ['INITIAL'];\n this.yylloc = {\n first_line: 1,\n first_column: 0,\n last_line: 1,\n last_column: 0\n };\n if (this.options.ranges) {\n this.yylloc.range = [0,0];\n }\n this.offset = 0;\n return this;\n },\n\n// consumes and returns one char from the input\ninput:function () {\n var ch = this._input[0];\n this.yytext += ch;\n this.yyleng++;\n this.offset++;\n this.match += ch;\n this.matched += ch;\n var lines = ch.match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno++;\n this.yylloc.last_line++;\n } else {\n this.yylloc.last_column++;\n }\n if (this.options.ranges) {\n this.yylloc.range[1]++;\n }\n\n this._input = this._input.slice(1);\n return ch;\n },\n\n// unshifts one char (or a string) into the input\nunput:function (ch) {\n var len = ch.length;\n var lines = ch.split(/(?:\\r\\n?|\\n)/g);\n\n this._input = ch + this._input;\n this.yytext = this.yytext.substr(0, this.yytext.length - len);\n //this.yyleng -= len;\n this.offset -= len;\n var oldLines = this.match.split(/(?:\\r\\n?|\\n)/g);\n this.match = this.match.substr(0, this.match.length - 1);\n this.matched = this.matched.substr(0, this.matched.length - 1);\n\n if (lines.length - 1) {\n this.yylineno -= lines.length - 1;\n }\n var r = this.yylloc.range;\n\n this.yylloc = {\n first_line: this.yylloc.first_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.first_column,\n last_column: lines ?\n (lines.length === oldLines.length ? this.yylloc.first_column : 0)\n + oldLines[oldLines.length - lines.length].length - lines[0].length :\n this.yylloc.first_column - len\n };\n\n if (this.options.ranges) {\n this.yylloc.range = [r[0], r[0] + this.yyleng - len];\n }\n this.yyleng = this.yytext.length;\n return this;\n },\n\n// When called from action, caches matched text and appends it on next action\nmore:function () {\n this._more = true;\n return this;\n },\n\n// When called from action, signals the lexer that this rule fails to match the input, so the next matching rule (regex) should be tested instead.\nreject:function () {\n if (this.options.backtrack_lexer) {\n this._backtrack = true;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. You can only invoke reject() in the lexer when the lexer is of the backtracking persuasion (options.backtrack_lexer = true).\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n\n }\n return this;\n },\n\n// retain first n characters of the match\nless:function (n) {\n this.unput(this.match.slice(n));\n },\n\n// displays already matched input, i.e. for error messages\npastInput:function () {\n var past = this.matched.substr(0, this.matched.length - this.match.length);\n return (past.length > 20 ? '...':'') + past.substr(-20).replace(/\\n/g, \"\");\n },\n\n// displays upcoming input, i.e. for error messages\nupcomingInput:function () {\n var next = this.match;\n if (next.length < 20) {\n next += this._input.substr(0, 20-next.length);\n }\n return (next.substr(0,20) + (next.length > 20 ? '...' : '')).replace(/\\n/g, \"\");\n },\n\n// displays the character position where the lexing error occurred, i.e. for error messages\nshowPosition:function () {\n var pre = this.pastInput();\n var c = new Array(pre.length + 1).join(\"-\");\n return pre + this.upcomingInput() + \"\\n\" + c + \"^\";\n },\n\n// test the lexed token: return FALSE when not a match, otherwise return token\ntest_match:function(match, indexed_rule) {\n var token,\n lines,\n backup;\n\n if (this.options.backtrack_lexer) {\n // save context\n backup = {\n yylineno: this.yylineno,\n yylloc: {\n first_line: this.yylloc.first_line,\n last_line: this.last_line,\n first_column: this.yylloc.first_column,\n last_column: this.yylloc.last_column\n },\n yytext: this.yytext,\n match: this.match,\n matches: this.matches,\n matched: this.matched,\n yyleng: this.yyleng,\n offset: this.offset,\n _more: this._more,\n _input: this._input,\n yy: this.yy,\n conditionStack: this.conditionStack.slice(0),\n done: this.done\n };\n if (this.options.ranges) {\n backup.yylloc.range = this.yylloc.range.slice(0);\n }\n }\n\n lines = match[0].match(/(?:\\r\\n?|\\n).*/g);\n if (lines) {\n this.yylineno += lines.length;\n }\n this.yylloc = {\n first_line: this.yylloc.last_line,\n last_line: this.yylineno + 1,\n first_column: this.yylloc.last_column,\n last_column: lines ?\n lines[lines.length - 1].length - lines[lines.length - 1].match(/\\r?\\n?/)[0].length :\n this.yylloc.last_column + match[0].length\n };\n this.yytext += match[0];\n this.match += match[0];\n this.matches = match;\n this.yyleng = this.yytext.length;\n if (this.options.ranges) {\n this.yylloc.range = [this.offset, this.offset += this.yyleng];\n }\n this._more = false;\n this._backtrack = false;\n this._input = this._input.slice(match[0].length);\n this.matched += match[0];\n token = this.performAction.call(this, this.yy, this, indexed_rule, this.conditionStack[this.conditionStack.length - 1]);\n if (this.done && this._input) {\n this.done = false;\n }\n if (token) {\n return token;\n } else if (this._backtrack) {\n // recover context\n for (var k in backup) {\n this[k] = backup[k];\n }\n return false; // rule action called reject() implying the next rule should be tested instead.\n }\n return false;\n },\n\n// return next match in input\nnext:function () {\n if (this.done) {\n return this.EOF;\n }\n if (!this._input) {\n this.done = true;\n }\n\n var token,\n match,\n tempMatch,\n index;\n if (!this._more) {\n this.yytext = '';\n this.match = '';\n }\n var rules = this._currentRules();\n for (var i = 0; i < rules.length; i++) {\n tempMatch = this._input.match(this.rules[rules[i]]);\n if (tempMatch && (!match || tempMatch[0].length > match[0].length)) {\n match = tempMatch;\n index = i;\n if (this.options.backtrack_lexer) {\n token = this.test_match(tempMatch, rules[i]);\n if (token !== false) {\n return token;\n } else if (this._backtrack) {\n match = false;\n continue; // rule action called reject() implying a rule MISmatch.\n } else {\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n } else if (!this.options.flex) {\n break;\n }\n }\n }\n if (match) {\n token = this.test_match(match, rules[index]);\n if (token !== false) {\n return token;\n }\n // else: this is a lexer rule which consumes input without producing a token (e.g. whitespace)\n return false;\n }\n if (this._input === \"\") {\n return this.EOF;\n } else {\n return this.parseError('Lexical error on line ' + (this.yylineno + 1) + '. Unrecognized text.\\n' + this.showPosition(), {\n text: \"\",\n token: null,\n line: this.yylineno\n });\n }\n },\n\n// return next match that has a token\nlex:function lex () {\n var r = this.next();\n if (r) {\n return r;\n } else {\n return this.lex();\n }\n },\n\n// activates a new lexer condition state (pushes the new lexer condition state onto the condition stack)\nbegin:function begin (condition) {\n this.conditionStack.push(condition);\n },\n\n// pop the previously active lexer condition state off the condition stack\npopState:function popState () {\n var n = this.conditionStack.length - 1;\n if (n > 0) {\n return this.conditionStack.pop();\n } else {\n return this.conditionStack[0];\n }\n },\n\n// produce the lexer rule set which is active for the currently active lexer condition state\n_currentRules:function _currentRules () {\n if (this.conditionStack.length && this.conditionStack[this.conditionStack.length - 1]) {\n return this.conditions[this.conditionStack[this.conditionStack.length - 1]].rules;\n } else {\n return this.conditions[\"INITIAL\"].rules;\n }\n },\n\n// return the currently active lexer condition state; when an index argument is provided it produces the N-th previous condition state, if available\ntopState:function topState (n) {\n n = this.conditionStack.length - 1 - Math.abs(n || 0);\n if (n >= 0) {\n return this.conditionStack[n];\n } else {\n return \"INITIAL\";\n }\n },\n\n// alias for begin(condition)\npushState:function pushState (condition) {\n this.begin(condition);\n },\n\n// return the number of states currently on the stack\nstateStackSize:function stateStackSize() {\n return this.conditionStack.length;\n },\noptions: {},\nperformAction: function anonymous(yy,yy_,$avoiding_name_collisions,YY_START) {\nvar YYSTATE=YY_START;\nswitch($avoiding_name_collisions) {\ncase 0:/* skip whitespace */\nbreak;\ncase 1:/* skip comment */\nbreak;\ncase 2:return 31\nbreak;\ncase 3:return 74\nbreak;\ncase 4:return 75\nbreak;\ncase 5:return 73\nbreak;\ncase 6:return 76\nbreak;\ncase 7:return 12\nbreak;\ncase 8:return 85\nbreak;\ncase 9:return 78\nbreak;\ncase 10:return 9\nbreak;\ncase 11:return 22\nbreak;\ncase 12:return 45\nbreak;\ncase 13:return 50\nbreak;\ncase 14:return 32\nbreak;\ncase 15:return 58\nbreak;\ncase 16:return 79\nbreak;\ncase 17:return 80\nbreak;\ncase 18:return 25\nbreak;\ncase 19:return 46\nbreak;\ncase 20:return 29\nbreak;\ncase 21:return 81\nbreak;\ncase 22:return 77\nbreak;\ncase 23:return 61\nbreak;\ncase 24:return 95\nbreak;\ncase 25:return 94\nbreak;\ncase 26:return 23\nbreak;\ncase 27:return 24\nbreak;\ncase 28:return 26\nbreak;\ncase 29:return 28\nbreak;\ncase 30:return 55\nbreak;\ncase 31:return 56\nbreak;\ncase 32:return 16\nbreak;\ncase 33:return '|'\nbreak;\ncase 34:return 14\nbreak;\ncase 35:return 69\nbreak;\ncase 36:return 5\nbreak;\ncase 37:return 35\nbreak;\ncase 38:return 38\nbreak;\ncase 39:return 18\nbreak;\ncase 40:return 36\nbreak;\ncase 41:return 37\nbreak;\ncase 42:return 34\nbreak;\ncase 43:return 39\nbreak;\ncase 44:return 11\nbreak;\ncase 45:return 71\nbreak;\ncase 46:return 90\nbreak;\ncase 47:return 52\nbreak;\ncase 48:return '_'\nbreak;\ncase 49:return 41\nbreak;\ncase 50:return 42\nbreak;\ncase 51:return 43\nbreak;\ncase 52:return 44\nbreak;\ncase 53:return 62\nbreak;\ncase 54:return 10\nbreak;\n}\n},\nrules: [/^(?:\\s+)/,/^(?:\\/\\/.*)/,/^(?:and\\b)/,/^(?:any\\b)/,/^(?:array\\b)/,/^(?:as\\b)/,/^(?:boolean\\b)/,/^(?:def\\b)/,/^(?:enum\\b)/,/^(?:false\\b)/,/^(?:let\\b)/,/^(?:map\\b)/,/^(?:mod\\b)/,/^(?:not\\b)/,/^(?:or\\b)/,/^(?:null\\b)/,/^(?:number\\b)/,/^(?:object\\b)/,/^(?:patterns\\b)/,/^(?:pow\\b)/,/^(?:sequences\\b)/,/^(?:string\\b)/,/^(?:true\\b)/,/^(?:undefined\\b)/,/^(?:[-+]?(0|[1-9]\\d*)(\\.\\d+)?)/,/^(?:\"[^\"\\r\\n]*\")/,/^(?:\\()/,/^(?:\\))/,/^(?:{)/,/^(?:})/,/^(?:\\[)/,/^(?:\\])/,/^(?:\\|>)/,/^(?:\\|)/,/^(?:,)/,/^(?::)/,/^(?:;)/,/^(?:<=)/,/^(?:>=)/,/^(?:=~)/,/^(?:==)/,/^(?:!=)/,/^(?:<)/,/^(?:>)/,/^(?:=)/,/^(?:\\.{3})/,/^(?:\\.{2})/,/^(?:\\.)/,/^(?:_)/,/^(?:\\+)/,/^(?:-)/,/^(?:\\*)/,/^(?:\\/)/,/^(?:\\$)/,/^(?:[a-zA-Z_][a-zA-Z0-9_]*)/],\nconditions: {\"INITIAL\":{\"rules\":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54],\"inclusive\":true}}\n});\nreturn lexer;\n})();\nparser.lexer = lexer;\nfunction Parser () {\n this.yy = {};\n}\nParser.prototype = parser;parser.Parser = Parser;\nreturn new Parser;\n})();\n\nexport default parser;\n","// General functions\n\n/**\n * Return the type name of the specified item\n *\n * @param {*} item\n * @returns {string}\n */\nexport function typeName(item) {\n switch (item) {\n case null:\n return \"null\";\n case undefined:\n return \"undefined\";\n default:\n if (Array.isArray(item)) {\n return \"array\";\n }\n\n return typeof item;\n }\n}\n\n// Array related functions\n\n/**\n * Return the length of an array\n *\n * @param {Array} list\n * @returns {number}\n */\nexport function length(list) { /* eslint-disable-line no-shadow */\n return (Array.isArray(list)) ? list.length : 0;\n}\n\n/**\n * Combine multiple arrays into a single array\n *\n * @param {Array} lists\n * @param {*} [missing=undefined]\n * @returns {Array}\n */\nexport function zip(lists, missing = undefined) {\n const result = [];\n\n if (Array.isArray(lists) && lists.length > 0 && lists.every(l => Array.isArray(l))) {\n const maxLength = Math.max(...lists.map(l => l.length));\n\n for (let i = 0; i < maxLength; i++) {\n const part = [];\n\n for (const list of lists) {\n part.push(i < list.length ? list[i] : missing);\n }\n\n result.push(part);\n }\n }\n\n\n return result;\n}\n\n/**\n * Partition an array into multiple arrays\n *\n * @param {Array} items\n * @param {number} count\n * @param {number} advance\n * @param {*} [missing=undefined]\n */\nexport function partition(items, count, advance, missing = undefined) {\n /* eslint-disable-next-line no-shadow */\n const {length} = items;\n const result = [];\n\n // default advance to count, if its not defined\n advance = advance === undefined ? count : advance;\n\n // we can't advance backwards and we always need to advance\n count = Math.max(1, count);\n advance = Math.max(1, advance);\n\n for (let i = 0; i < length; i += advance) {\n const part = [];\n let index = i;\n\n for (let j = 0; j < count; j++, index++) {\n part.push(index < length ? items[index] : missing);\n }\n\n result.push(part);\n }\n\n return result;\n}\n\n/**\n * Return a new array with the original array's content reversed\n *\n * @param {Array} items\n * @returns {Array|undefined}\n */\nexport function reverse(items) {\n return Array.isArray(items)\n ? items.slice().reverse()\n : undefined;\n}\n\n/**\n * Return a new sorted array\n *\n * @param {Array} items\n * @param {Function} comparator\n * @returns {Array|undefined}\n */\nexport function sort(items, comparator) {\n return Array.isArray(items)\n ? items.slice().sort(comparator)\n : undefined;\n}\n\n/**\n * Return a string by concatenating a list of strings, delimiting each with another string\n *\n * @param {Array} items\n * @param {string} delimiter\n * @returns {string}\n */\nexport function join(items, delimiter) {\n return items.join(delimiter);\n}\n\n// Object related functions\n\n/**\n * Predicate to determine if an item is an object\n *\n * @param {*} item\n * @returns {boolean}\n */\nfunction isObject(item) {\n return item !== null && typeof item === \"object\";\n}\n\n/**\n * Return a list of keys from an object\n *\n * @param {Object} item\n * @returns {string[]}\n */\nexport function keys(item) {\n /* eslint-disable-next-line compat/compat */\n return isObject(item) ? Object.keys(item) : [];\n}\n\n/**\n * Return a list of values from an object\n *\n * @param {Object} item\n * @returns {any[]}\n */\nexport function values(item) {\n /* eslint-disable-next-line compat/compat */\n return isObject(item) ? Object.values(item) : [];\n}\n\n/**\n * Return a list of key/value pairs from an object. Each element in the result is a 2-element array\n * where the first element is the key and the second element is the value\n *\n * @param {Object} item\n * @returns {Array}\n */\nexport function pairs(item) {\n /* eslint-disable-next-line compat/compat */\n return isObject(item) ? Object.entries(item) : [];\n}\n\n/**\n * Convert a list of key/value pairs into an object. This is the reverse of pairs\n *\n * @param {Array} pairs\n * @returns {Object}\n */\nexport function fromPairs(pairs) { /* eslint-disable-line no-shadow */\n const result = {};\n\n if (Array.isArray(pairs)) {\n for (const pair of pairs) {\n if (pair.length >= 2) {\n const [key, value] = pair;\n\n result[key] = value;\n }\n }\n }\n\n return result;\n}\n\n// Array and Object related\n\n/**\n * If all items are objects, a new object with all the properties of all objects will be merged. If the same property\n * exists on multiple objects, the last object with that property wins.\n *\n * If the first item is an array, a new array will be created by appending all non-array items and concatenating all\n * array items.\n *\n * @param {Object|Array} items\n * @returns {Object|Array|undefined}\n */\nexport function merge(...items) {\n if (items.length > 0 && Array.isArray(items[0])) {\n return items[0].concat(...items.slice(1));\n }\n else if (items.every(item => isObject(item))) {\n return Object.assign({}, ...items);\n }\n\n return undefined;\n}\n","/**\n * Transformer.jss\n *\n * @copyright 2019, Kevin Lindsey\n * @module Transformer\n */\n\n// import util from \"util\";\n// import Parser from \"./Parser.js\";\nimport Parser from \"./GeneratedParser.js\";\nimport * as StdLib from \"./StandardLibrary.js\";\n\nconst FAILURE_VALUE = {};\nexport {FAILURE_VALUE};\n\n/**\n * Determine if object is something that can have properties\n *\n * @param {*} obj\n * @returns {boolean}\n */\nfunction isObject(obj) {\n return obj !== null && typeof obj === \"object\";\n}\n\n/**\n * Transformer\n */\nexport default class Transformer {\n /**\n * Create a new empty Transformer. Normalizers can be used to validate and transform data. However, when a new\n * Transformer has been created, it needs to be populated with one or more type descriptions. The easiest way to do\n * this is with the static method fromSource.\n */\n constructor() {\n this.symbolTable = {};\n this.functions = {};\n this.messages = [];\n this.verbose = false;\n\n // add standard library\n /* eslint-disable-next-line guard-for-in */\n for (const name in StdLib) {\n /* eslint-disable-next-line import/namespace */\n this.functions[name] = StdLib[name];\n }\n }\n\n /**\n * Add function\n *\n * @param {string} name\n * @param {Function} reference\n */\n addFunction(name, reference) {\n // TODO: type check\n this.functions[name] = reference;\n }\n\n /**\n * Add information\n *\n * @param {string} message\n */\n addInfo(message) {\n if (this.verbose) {\n this.messages.push({type: \"message\", level: \"info\", message});\n }\n }\n\n /**\n * Add a warning\n *\n * @param {string} message\n */\n addWarning(message) {\n this.messages.push({type: \"message\", level: \"warning\", message});\n }\n\n /**\n * Add an error\n *\n * @param {string} message\n */\n addError(message) {\n this.messages.push({type: \"message\", level: \"error\", message});\n }\n\n /**\n * Compile and execute the source against the specfied structure\n *\n * @param {string} source\n * @param {*} structure\n * @returns {*}\n */\n execute(source, structure) {\n // TODO: cache results using source or source hash as key\n // parse source\n const statements = Parser.parse(source);\n\n // clear any previous messages\n this.messages = [];\n\n // process statements\n let result;\n\n for (const statement of statements) {\n switch (statement.type) {\n case \"assignment\":\n case \"def\":\n case \"sequence\": {\n result = this.executeExpression(statement, structure, this.symbolTable);\n\n if (result === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n break;\n }\n\n default:\n this.addError(`unknown statement type: ${statement.type}`);\n return FAILURE_VALUE;\n }\n }\n\n return result;\n }\n\n /*\n * Execute a method and return its value\n *\n * @param {object} expression\n * @param {object} symbolTable\n * @returns {*}\n */\n executeExpression(expression, structure, symbolTable) {\n const binOp = (typeName, operation) => {\n const left = this.executeExpression(expression.left, structure, symbolTable);\n\n /* eslint-disable-next-line valid-typeof */\n if (left !== FAILURE_VALUE && typeof left === typeName) {\n const right = this.executeExpression(expression.right, structure, symbolTable);\n\n /* eslint-disable-next-line valid-typeof */\n if (right !== FAILURE_VALUE && typeof right === typeName) {\n return operation(left, right);\n }\n }\n\n return FAILURE_VALUE;\n };\n\n switch (expression.type) {\n case \"assignment\": {\n const value = this.executeExpression(expression.value, structure, symbolTable);\n\n if (value === FAILURE_VALUE) {\n this.addError(`Unable to evaluate assignment value for ${expression.name}`);\n return FAILURE_VALUE;\n }\n\n /* eslint-disable-next-line no-prototype-builtins */\n if (symbolTable.hasOwnProperty(expression.name)) {\n this.addError(`A symbol in current scope was assigned more than once: ${expression.name}`);\n return FAILURE_VALUE;\n }\n\n symbolTable[expression.name] = value;\n\n return value;\n }\n\n case \"def\":\n symbolTable[expression.name] = expression.value;\n return undefined;\n\n case \"get-value\":\n if (expression.name in symbolTable) {\n const value = symbolTable[expression.name];\n\n if (isObject(value) && value.type === \"sequence\") {\n const seqValue = this.executeExpression(value, structure, symbolTable);\n\n if (seqValue === FAILURE_VALUE) {\n this.addError(`Unable to evaluate sequence ${expression.name}`);\n return FAILURE_VALUE;\n }\n\n return seqValue;\n }\n\n return value;\n }\n else if (expression.name in this.functions) {\n return this.invokeFunction(expression.name, [structure]);\n }\n\n this.addError(`Tried to access unbound symbol: ${expression.name}`);\n return FAILURE_VALUE;\n\n case \"get-property\": {\n const object = this.executeExpression(expression.left, structure, symbolTable);\n\n return (isObject(object)) ? object[expression.right] : FAILURE_VALUE;\n }\n\n case \"get-index\": {\n const {left, right} = expression;\n const array = this.executeExpression(left, structure, symbolTable);\n\n if (Array.isArray(array)) {\n const index = (right < 0) ? array.length + right : right;\n\n return 0 <= index && index < array.length ? array[index] : FAILURE_VALUE;\n }\n\n return FAILURE_VALUE;\n }\n\n case \"get-structure\":\n return structure;\n\n case \"sequences\": {\n let result = FAILURE_VALUE;\n\n for (const sequence of expression.sequences) {\n const sequenceSymbolTable = Object.create(symbolTable);\n\n result = this.executeExpression(sequence, structure, sequenceSymbolTable);\n\n if (result !== FAILURE_VALUE) {\n Object.assign(symbolTable, sequenceSymbolTable);\n break;\n }\n }\n\n return result;\n }\n\n case \"sequence\": {\n let currentObject = structure;\n\n for (const step of expression.steps) {\n if (step.type === \"pattern\") {\n currentObject = this.executePattern(step, currentObject, symbolTable);\n }\n else {\n currentObject = this.executeExpression(step, currentObject, symbolTable);\n }\n\n if (currentObject === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n }\n\n return currentObject;\n }\n\n case \"map\": {\n const [valueGenerator, transform] = expression.value;\n const values = this.executeExpression(valueGenerator, structure, symbolTable);\n\n if (values !== FAILURE_VALUE) {\n if (Array.isArray(values) === false) {\n this.addError(\"First argument of map must evaluate to an array\");\n return FAILURE_VALUE;\n }\n\n const mapSymbolTable = Object.create(symbolTable);\n\n return values.map(value => this.executeExpression(transform, value, mapSymbolTable));\n }\n\n return FAILURE_VALUE;\n }\n\n case \"patterns\": {\n let result = FAILURE_VALUE;\n\n for (const pattern of expression.patterns) {\n const patternSymbolTable = Object.create(symbolTable);\n\n result = this.executePattern(pattern, structure, patternSymbolTable);\n\n if (result !== FAILURE_VALUE) {\n Object.assign(symbolTable, patternSymbolTable);\n break;\n }\n }\n\n return result;\n }\n\n case \"and\":\n return binOp(\"boolean\", (a, b) => a && b);\n\n case \"or\":\n return binOp(\"boolean\", (a, b) => a || b);\n\n case \"not\": {\n const value = this.executeExpression(expression.value, structure, symbolTable);\n\n if (value !== FAILURE_VALUE && typeof value === \"boolean\") {\n return !value;\n }\n\n return FAILURE_VALUE;\n }\n\n case \"less_than\":\n return binOp(\"number\", (a, b) => a < b);\n\n case \"less_equal\":\n return binOp(\"number\", (a, b) => a <= b);\n\n case \"equal\":\n return binOp(\"number\", (a, b) => a === b);\n\n case \"not_equal\":\n return binOp(\"number\", (a, b) => a !== b);\n\n case \"greater_equal\":\n return binOp(\"number\", (a, b) => a >= b);\n\n case \"greater_than\":\n return binOp(\"number\", (a, b) => a > b);\n\n case \"add\":\n return binOp(\"number\", (a, b) => a + b);\n\n case \"subtract\":\n return binOp(\"number\", (a, b) => a - b);\n\n case \"multiply\":\n return binOp(\"number\", (a, b) => a * b);\n\n case \"divide\":\n return binOp(\"number\", (a, b) => a / b);\n\n case \"modulus\":\n return binOp(\"number\", (a, b) => a % b);\n\n case \"power\":\n return binOp(\"number\", (a, b) => a ** b);\n\n case \"invoke\": {\n const args = expression.args.reduce((accum, arg) => {\n if (arg.type === \"spread\") {\n const value = this.executeExpression(arg.expression, structure, symbolTable);\n // const value = arg.name !== null ? symbolTable[arg.name] : structure;\n\n if (Array.isArray(value)) {\n accum = accum.concat(value);\n }\n else {\n accum.push(value);\n }\n }\n else {\n accum.push(this.executeExpression(arg, structure, symbolTable));\n }\n\n return accum;\n }, []);\n\n if (expression.name in this.functions) {\n return this.invokeFunction(expression.name, args);\n }\n\n this.addError(`Tried to access unbound symbol: ${expression.name}`);\n return FAILURE_VALUE;\n }\n\n case \"array\": {\n const results = [];\n\n for (const element of expression.value) {\n if (element.type === \"assignment\") {\n this.executeExpression(element, structure, symbolTable);\n }\n else {\n const value = this.executeExpression(element, structure, symbolTable);\n\n if (value === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n\n results.push(value);\n }\n }\n\n return results;\n }\n\n case \"boolean\":\n case \"null\":\n case \"number\":\n case \"string\":\n case \"undefined\":\n return expression.value;\n\n case \"object\":\n return this.executeObjectExpression(expression, structure, symbolTable);\n\n default:\n this.addError(`Unrecognized expression type: '${expression.type}'`);\n return FAILURE_VALUE;\n }\n }\n\n /**\n * Execute an object pattern\n *\n * @param {Object} pattern\n * @param {*} structure\n * @param {Object} symbolTable\n * @returns {*}\n */\n executeObjectExpression(pattern, structure, symbolTable) {\n const objectSymbolTable = Object.create(symbolTable);\n const result = {};\n\n for (const element of pattern.value) {\n switch (element.type) {\n case \"property\": {\n const name = this.executeExpression(element.name, structure, objectSymbolTable);\n\n if (name === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n else if (typeof name !== \"string\") {\n this.addError(`Property names must be string types: ${name}`);\n return FAILURE_VALUE;\n }\n\n const value = element.value !== null\n ? this.executeExpression(element.value, structure, objectSymbolTable)\n : symbolTable[name];\n\n if (value === FAILURE_VALUE) {\n this.addError(`Unable to evaluate value for property ${name}`);\n return FAILURE_VALUE;\n }\n\n result[name] = value;\n break;\n }\n\n case \"assignment\": {\n const value = this.executeExpression(element, structure, objectSymbolTable);\n\n if (value === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n break;\n }\n\n default:\n this.addError(`Unrecognized object expression element type: ${element.type}`);\n return FAILURE_VALUE;\n }\n }\n\n return result;\n }\n\n /*\n * Acquire the value of a type pattern from the specified structure. Any named entities will be populated in the\n * specified symbolTable\n *\n * @param {object} pattern\n * @param {*} structure\n * @param {object} symbolTable\n * @returns {*}\n */\n executePattern(pattern, structure, symbolTable) {\n switch (pattern.patternType) {\n case \"any\":\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n\n case \"array\":\n if (Array.isArray(structure)) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n\n return FAILURE_VALUE;\n\n case \"array-pattern\": {\n const result = this.executeArrayPattern(pattern, structure, symbolTable);\n\n return result === FAILURE_VALUE ? FAILURE_VALUE : symbolTable;\n }\n\n case \"boolean\":\n if (typeof structure === \"boolean\") {\n if (pattern.value === null || pattern.value === structure) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n }\n\n return FAILURE_VALUE;\n\n case \"null\":\n if (structure === null) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n\n return FAILURE_VALUE;\n\n case \"number\":\n if (typeof structure === \"number\") {\n if (pattern.value === null || pattern.value === structure) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n }\n\n return FAILURE_VALUE;\n\n case \"object\":\n if (isObject(structure)) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n\n return FAILURE_VALUE;\n\n case \"object-pattern\": {\n if (isObject(structure) === false) {\n return FAILURE_VALUE;\n }\n\n const result = {};\n\n for (const property of pattern.value) {\n const {name, pattern: propertyPattern, assignTo} = property;\n\n if (name in structure) {\n const value = this.executePattern(propertyPattern, structure[name], symbolTable);\n\n if (value === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n\n this.assign(symbolTable, assignTo, structure[name]);\n this.assign(result, assignTo, value);\n }\n else {\n return FAILURE_VALUE;\n }\n }\n\n this.assign(symbolTable, pattern.assignTo, structure);\n return result;\n }\n\n case \"reference\":\n if (pattern.value in this.patterns) {\n const referencedPattern = this.patterns[pattern.value];\n const result = this.executePattern(referencedPattern, structure, symbolTable);\n\n if (result !== FAILURE_VALUE) {\n this.assign(symbolTable, pattern.assignTo, result);\n }\n\n return result;\n }\n\n return FAILURE_VALUE;\n\n case \"string\":\n if (typeof structure === \"string\") {\n if (pattern.value === null || pattern.value === structure) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n }\n\n return FAILURE_VALUE;\n\n case \"undefined\":\n // NOTE: Our current failure value is undefined, so this will be treated as an error. I can change\n // FAILURE_VALUE to be a sigil. I'll just have to be careful to return undefined at the top-most level.\n // I'm leaving this for now as this is probably not going to be used much\n if (structure === undefined) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return structure;\n }\n\n return FAILURE_VALUE;\n\n default:\n throw new TypeError(`unrecognized pattern type: '${pattern.type}'`);\n }\n }\n\n /*\n * Execute an array pattern\n *\n * @param {Object} pattern\n * @param {*} structure\n * @param {Object} symbolTable\n * @returns {*}\n */\n executeArrayPattern(pattern, structure, symbolTable) {\n if (Array.isArray(structure) === false) {\n return FAILURE_VALUE;\n }\n\n let result = [];\n let index = 0;\n\n for (const element of pattern.value) {\n const results = this.executeArrayPatternElement(element, index, structure, symbolTable);\n\n if (results === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n\n result = result.concat(results);\n index += results.length;\n }\n\n if (index === structure.length) {\n this.assign(symbolTable, pattern.assignTo, structure);\n return result;\n }\n\n return FAILURE_VALUE;\n }\n\n /*\n * Execute an element from an array pattern\n *\n * @param {Object} element\n * @param {number} index\n * @param {*} structure\n * @param {Object} symbolTable\n * @returns {Array|undefined}\n */\n executeArrayPatternElement(element, index, structure, symbolTable) {\n let result = [];\n\n switch (element.type) {\n case \"element\": {\n const results = this.executeArrayElementPattern(element, index, structure, symbolTable);\n\n if (results === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n\n result = result.concat(results);\n index += results.length;\n break;\n }\n\n case \"element-group\": {\n const results = this.executeArrayElementGroupPattern(element, index, structure, symbolTable);\n\n if (results === FAILURE_VALUE) {\n return FAILURE_VALUE;\n }\n\n result = result.concat(results);\n index += results.length;\n break;\n }\n\n default:\n this.addError(`Unrecognized array pattern element type: '${element.type}'`);\n return FAILURE_VALUE;\n }\n\n return result;\n }\n\n /*\n * Execute array element pattern\n *\n * @param {Object} element\n * @param {number} index\n * @param {*} structure\n * @param {Object} symbolTable\n * @returns {Array|undefined}\n */\n executeArrayElementPattern(element, index, structure, symbolTable) {\n const {pattern, range: {start, stop}} = element;\n const result = [];\n\n for (let i = 0; i < stop; i++) {\n const actualIndex = index + i;\n\n // treat out-of-bounds like a failure\n const value = (actualIndex < structure.length)\n ? this.executePattern(pattern, structure[actualIndex], symbolTable)\n : FAILURE_VALUE;\n\n // if we processed enough, continue, else failure\n if (value === FAILURE_VALUE) {\n if (i >= start) {\n break;\n }\n\n return FAILURE_VALUE;\n }\n\n // save result\n if (stop > 1) {\n this.pushAssign(symbolTable, element.assignTo, value);\n }\n else {\n this.assign(symbolTable, element.assignTo, value);\n }\n result.push(value);\n }\n\n return result;\n }\n\n /*\n * Execute array element group pattern\n *\n * @param {Object} element\n * @param {number} index\n * @param {*} structure\n * @param {Object} symbolTable\n * @returns {Array|undefined}\n */\n executeArrayElementGroupPattern(group, index, structure, symbolTable) {\n const {elements, range: {start, stop}} = group;\n let result = [];\n\n for (let i = 0; i < stop; i++) {\n let groupResults = [];\n\n // all elements must be successful\n for (const element of elements) {\n const elementSymbolTable = Object.create(symbolTable);\n const results = this.executeArrayPatternElement(element, index, structure, elementSymbolTable);\n\n if (results === FAILURE_VALUE) {\n groupResults = FAILURE_VALUE;\n break;\n }\n\n // copy result into main symbol table\n if (element.assignTo !== null && element.assignTo !== undefined && element.assignTo in elementSymbolTable) {\n if (stop > 1) {\n // this.pushAssign(symbolTable, element.assignTo, results);\n this.pushAssign(symbolTable, element.assignTo, elementSymbolTable[element.assignTo]);\n }\n else {\n // this.assign(symbolTable, element.assignTo, results);\n this.assign(symbolTable, element.assignTo, elementSymbolTable[element.assignTo]);\n }\n }\n\n // collect everything that matched and advance to the next item to match\n result = result.concat(results);\n index += results.length;\n\n // collect what we've matched in this group so far\n groupResults = groupResults.concat(results);\n }\n\n if (groupResults === FAILURE_VALUE) {\n // make sure we met our lower bounds criteria\n if (i >= start) {\n // if we didn't process any elements, then we haven't created arrays in the symbol table for this\n // group or its elements.\n if (i === 0) {\n this.assign(symbolTable, group.assignTo, []);\n\n for (const element of elements) {\n this.assign(symbolTable, element.assignTo, []);\n }\n }\n\n return result;\n }\n\n return FAILURE_VALUE;\n }\n\n if (stop > 1) {\n this.pushAssign(symbolTable, group.assignTo, groupResults);\n }\n else {\n this.assign(symbolTable, group.assignTo, groupResults);\n }\n }\n\n return result;\n }\n\n /*\n * Invoke a user-defined method and return its value\n *\n * @param {string} type\n * @param {Array} args\n * @returns {*}\n */\n invokeFunction(type, args) {\n if (type in this.functions) {\n return this.functions[type](...args);\n }\n\n return FAILURE_VALUE;\n }\n\n /**\n * Add a symbol/value to the symbol table, warning if an overwrite is occurring\n *\n * @param {Object} symbolTable\n * @param {string} name\n * @param {*} value\n */\n assign(symbolTable, name, value) {\n if (name !== null && name !== undefined) {\n /* eslint-disable-next-line no-prototype-builtins */\n if (symbolTable.hasOwnProperty(name)) {\n this.addWarning(`Overwriting ${name} with value: ${value}`);\n }\n\n symbolTable[name] = value;\n }\n }\n\n /**\n * Push a value onto the array at the name in the symbol table. If the name is not in the table already, an array will\n * be created and then the value will be pushed to it. This is used for grouped elements.\n *\n * @param {Object} symbolTable\n * @param {string} name\n * @param {*} value\n */\n pushAssign(symbolTable, name, value) {\n if (name !== null && name !== undefined) {\n /* eslint-disable-next-line no-prototype-builtins */\n const items = symbolTable.hasOwnProperty(name)\n ? symbolTable[name]\n : [];\n\n if (Array.isArray(items)) {\n items.push(value);\n\n symbolTable[name] = items;\n }\n else {\n this.addWarning(`Unable to push to ${name} because it is not an array: ${items}`);\n }\n }\n }\n}\n","/**\n * PathLexeme.js\n *\n * @copyright 2002, 2013 Kevin Lindsey\n * @module PathLexeme\n */\n\n/**\n * PathLexeme\n */\nclass PathLexeme {\n /**\n * PathLexeme\n *\n * @param {number} type\n * @param {string} text\n */\n constructor(type, text) {\n this.type = type;\n this.text = text;\n }\n\n /**\n * Determine if this lexeme is of the given type\n *\n * @param {number} type\n * @returns {boolean}\n */\n typeis(type) {\n return this.type === type;\n }\n}\n\n/*\n * token type enumerations\n */\nPathLexeme.UNDEFINED = 0;\nPathLexeme.COMMAND = 1;\nPathLexeme.NUMBER = 2;\nPathLexeme.EOD = 3;\n\nexport default PathLexeme;\n","/**\n * PathLexer.js\n *\n * @copyright 2003, 2013 Kevin Lindsey\n * @module PathLexer\n */\n\nimport PathLexeme from \"./PathLexeme.js\";\n\n/**\n * Create a new instance of PathLexer\n */\nclass PathLexer {\n /**\n * @param {string} [pathData]\n */\n constructor(pathData) {\n if (pathData === null || pathData === undefined) {\n pathData = \"\";\n }\n\n this.setPathData(pathData);\n }\n\n /**\n * setPathData\n *\n * @param {string} pathData\n */\n setPathData(pathData) {\n if (typeof pathData !== \"string\") {\n throw new TypeError(\"The first parameter must be a string\");\n }\n\n this._pathData = pathData;\n }\n\n /**\n * getNextToken\n *\n * @returns {PathLexeme}\n */\n getNextToken() {\n let result = null;\n let d = this._pathData;\n\n while (result === null) {\n if (d === null || d === \"\") {\n result = new PathLexeme(PathLexeme.EOD, \"\");\n }\n else if (d.match(/^([ \\t\\r\\n,]+)/)) {\n d = d.substr(RegExp.$1.length);\n }\n else if (d.match(/^([AaCcHhLlMmQqSsTtVvZz])/)) {\n result = new PathLexeme(PathLexeme.COMMAND, RegExp.$1);\n d = d.substr(RegExp.$1.length);\n }\n /* eslint-disable-next-line unicorn/no-unsafe-regex */\n else if (d.match(/^(([-+]?\\d+(\\.\\d*)?|[-+]?\\.\\d+)([eE][-+]?\\d+)?)/)) {\n result = new PathLexeme(PathLexeme.NUMBER, RegExp.$1);\n d = d.substr(RegExp.$1.length);\n }\n else {\n throw new SyntaxError(`Unrecognized path data: ${d}`);\n }\n }\n\n this._pathData = d;\n\n return result;\n }\n}\n\nexport default PathLexer;\n","/**\n * PathParser.js\n *\n * @copyright 2003, 2017 Kevin Lindsey\n * @module PathParser\n */\n\nimport PathLexer from \"./PathLexer.js\";\nimport PathLexeme from \"./PathLexeme.js\";\n\nconst BOP = \"BOP\";\n\n/**\n * PathParser\n */\nclass PathParser {\n /**\n * constructor\n */\n constructor() {\n this._lexer = new PathLexer();\n this._handler = null;\n }\n\n /**\n * parseData\n *\n * @param {string} pathData\n * @throws {Error}\n */\n parseData(pathData) {\n if (typeof pathData !== \"string\") {\n throw new TypeError(`The first parameter must be a string: ${pathData}`);\n }\n\n // begin parse\n if (this._handler !== null && typeof this._handler.beginParse === \"function\") {\n this._handler.beginParse();\n }\n\n // pass the pathData to the lexer\n const lexer = this._lexer;\n\n lexer.setPathData(pathData);\n\n // set mode to signify new path - Beginning Of Path\n let mode = BOP;\n\n // Process all tokens\n let lastToken = null;\n let token = lexer.getNextToken();\n\n while (token.typeis(PathLexeme.EOD) === false) {\n let parameterCount;\n const params = [];\n\n // process current token\n switch (token.type) {\n case PathLexeme.COMMAND:\n if (mode === BOP && token.text !== \"M\" && token.text !== \"m\") {\n throw new SyntaxError(`New paths must begin with a moveto command. Found '${token.text}'`);\n }\n\n // Set new parsing mode\n mode = token.text;\n\n // Get count of numbers that must follow this command\n parameterCount = PathParser.PARAMCOUNT[token.text.toUpperCase()];\n\n // Advance past command token\n token = lexer.getNextToken();\n break;\n\n case PathLexeme.NUMBER:\n // Most commands allow you to keep repeating parameters\n // without specifying the command again. We just assume\n // that is the case and do nothing since the mode remains\n // the same\n\n if (mode === BOP) {\n throw new SyntaxError(`New paths must begin with a moveto command. Found '${token.text}'`);\n }\n else {\n parameterCount = PathParser.PARAMCOUNT[mode.toUpperCase()];\n }\n break;\n\n default:\n throw new SyntaxError(`Unrecognized command type: ${token.type}`);\n }\n\n // Get parameters\n for (let i = 0; i < parameterCount; i++) {\n switch (token.type) {\n case PathLexeme.COMMAND:\n throw new SyntaxError(`Parameter must be a number. Found '${token.text}'`);\n\n case PathLexeme.NUMBER:\n // convert current parameter to a float and add to\n // parameter list\n params[i] = parseFloat(token.text);\n break;\n\n case PathLexeme.EOD:\n throw new SyntaxError(\"Unexpected end of string\");\n\n default:\n throw new SyntaxError(`Unrecognized parameter type. Found type '${token.type}'`);\n }\n\n token = lexer.getNextToken();\n }\n\n // fire handler\n if (this._handler !== null) {\n const handler = this._handler;\n const methodName = PathParser.METHODNAME[mode];\n\n // convert types for arcs\n if (mode === \"a\" || mode === \"A\") {\n params[3] = params[3] !== 0;\n params[4] = params[4] !== 0;\n }\n\n if (handler !== null && typeof handler[methodName] === \"function\") {\n handler[methodName](...params);\n }\n }\n\n // Lineto's follow moveto when no command follows moveto params. Go\n // ahead and set the mode just in case no command follows the moveto\n // command\n switch (mode) {\n case \"M\":\n mode = \"L\";\n break;\n case \"m\":\n mode = \"l\";\n break;\n case \"Z\":\n case \"z\":\n mode = \"BOP\";\n break;\n default:\n // ignore for now\n }\n\n if (token === lastToken) {\n throw new SyntaxError(`Parser stalled on '${token.text}'`);\n }\n else {\n lastToken = token;\n }\n }\n\n // end parse\n if (this._handler !== null && typeof this._handler.endParse === \"function\") {\n this._handler.endParse();\n }\n }\n\n /**\n * setHandler\n *\n * @param {Object} handler\n */\n setHandler(handler) {\n this._handler = handler;\n }\n}\n\n/*\n * class constants\n */\nPathParser.PARAMCOUNT = {\n A: 7,\n C: 6,\n H: 1,\n L: 2,\n M: 2,\n Q: 4,\n S: 4,\n T: 2,\n V: 1,\n Z: 0\n};\nPathParser.METHODNAME = {\n A: \"arcAbs\",\n a: \"arcRel\",\n C: \"curvetoCubicAbs\",\n c: \"curvetoCubicRel\",\n H: \"linetoHorizontalAbs\",\n h: \"linetoHorizontalRel\",\n L: \"linetoAbs\",\n l: \"linetoRel\",\n M: \"movetoAbs\",\n m: \"movetoRel\",\n Q: \"curvetoQuadraticAbs\",\n q: \"curvetoQuadraticRel\",\n S: \"curvetoCubicSmoothAbs\",\n s: \"curvetoCubicSmoothRel\",\n T: \"curvetoQuadraticSmoothAbs\",\n t: \"curvetoQuadraticSmoothRel\",\n V: \"linetoVerticalAbs\",\n v: \"linetoVerticalRel\",\n Z: \"closePath\",\n z: \"closePath\"\n};\n\nexport default PathParser;\n","/**\n * PathHandler.js\n *\n * @copyright 2017 Kevin Lindsey\n */\n\nimport {Point2D, Vector2D} from \"kld-affine\";\n\nconst TWO_PI = 2.0 * Math.PI;\n\n/**\n * normalizeAngle\n *\n * @param {number} radians\n * @returns {number}\n */\nfunction normalizeAngle(radians) {\n const normal = radians % TWO_PI;\n\n return normal < 0.0 ? normal + TWO_PI : normal;\n}\n\n/**\n* @typedef {GenericArray} EllipticalArc\n* @property {number} 0 x\n* @property {number} 1 y\n* @property {number} 2 rx\n* @property {number} 3 ry\n* @property {number} 4 theta\n* @property {number} 5 thetaWithDelta\n*/\n\n/**\n * Based on the SVG 1.1 specification, Appendix F: Implementation Requirements,\n * Section F.6 \"Elliptical arc implementation notes\"\n * {@see https://www.w3.org/TR/SVG11/implnote.html#ArcImplementationNotes}\n *\n * @param {module:kld-affine.Point2D} startPoint\n * @param {module:kld-affine.Point2D} endPoint\n * @param {number} rx\n * @param {number} ry\n * @param {number} angle\n * @param {boolean} arcFlag\n * @param {boolean} sweepFlag\n * @returns {EllipticalArc}\n */\nfunction getArcParameters(startPoint, endPoint, rx, ry, angle, arcFlag, sweepFlag) {\n angle = angle * Math.PI / 180;\n\n const c = Math.cos(angle);\n const s = Math.sin(angle);\n const TOLERANCE = 1e-6;\n\n // Section (F.6.5.1)\n const halfDiff = startPoint.subtract(endPoint).multiply(0.5);\n const x1p = halfDiff.x * c + halfDiff.y * s;\n const y1p = halfDiff.x * -s + halfDiff.y * c;\n\n // Section (F.6.6.1)\n rx = Math.abs(rx);\n ry = Math.abs(ry);\n\n // Section (F.6.6.2)\n const x1px1p = x1p * x1p;\n const y1py1p = y1p * y1p;\n const lambda = (x1px1p / (rx * rx)) + (y1py1p / (ry * ry));\n\n // Section (F.6.6.3)\n if (lambda > 1) {\n const factor = Math.sqrt(lambda);\n\n rx *= factor;\n ry *= factor;\n }\n\n // Section (F.6.5.2)\n const rxrx = rx * rx;\n const ryry = ry * ry;\n const rxy1 = rxrx * y1py1p;\n const ryx1 = ryry * x1px1p;\n\n let factor = (rxrx * ryry - rxy1 - ryx1) / (rxy1 + ryx1);\n\n if (Math.abs(factor) < TOLERANCE) {\n factor = 0;\n }\n\n let sq = Math.sqrt(factor);\n\n if (arcFlag === sweepFlag) {\n sq = -sq;\n }\n\n // Section (F.6.5.3)\n const mid = startPoint.add(endPoint).multiply(0.5);\n const cxp = sq * rx * y1p / ry;\n const cyp = sq * -ry * x1p / rx;\n\n // Section (F.6.5.5 - F.6.5.6)\n const xcr1 = (x1p - cxp) / rx;\n const xcr2 = (x1p + cxp) / rx;\n const ycr1 = (y1p - cyp) / ry;\n const ycr2 = (y1p + cyp) / ry;\n\n const theta1 = new Vector2D(1, 0).angleBetween(new Vector2D(xcr1, ycr1));\n let deltaTheta = normalizeAngle(new Vector2D(xcr1, ycr1).angleBetween(new Vector2D(-xcr2, -ycr2)));\n\n if (sweepFlag === false) {\n deltaTheta -= TWO_PI;\n }\n\n return [\n cxp * c - cyp * s + mid.x,\n cxp * s + cyp * c + mid.y,\n rx,\n ry,\n theta1,\n theta1 + deltaTheta\n ];\n}\n\n/**\n * PathHandler\n */\nclass PathHandler {\n /**\n * PathHandler\n *\n * @param {ShapeInfo} shapeCreator\n */\n constructor(shapeCreator) {\n this.shapeCreator = shapeCreator;\n this.shapes = [];\n this.firstX = null;\n this.firstY = null;\n this.lastX = null;\n this.lastY = null;\n this.lastCommand = null;\n }\n\n /**\n * beginParse\n */\n beginParse() {\n // zero out the sub-path array\n this.shapes = [];\n\n // clear firstX, firstY, lastX, and lastY\n this.firstX = null;\n this.firstY = null;\n this.lastX = null;\n this.lastY = null;\n\n // need to remember last command type to determine how to handle the\n // relative Bezier commands\n this.lastCommand = null;\n }\n\n /**\n * addShape\n *\n * @param {ShapeInfo} shape\n */\n addShape(shape) {\n this.shapes.push(shape);\n }\n\n /**\n * arcAbs - A\n *\n * @param {number} rx\n * @param {number} ry\n * @param {number} xAxisRotation\n * @param {boolean} arcFlag\n * @param {boolean} sweepFlag\n * @param {number} x\n * @param {number} y\n */\n arcAbs(rx, ry, xAxisRotation, arcFlag, sweepFlag, x, y) {\n if (rx === 0 || ry === 0) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n x, y\n ));\n }\n else {\n const arcParameters = getArcParameters(\n new Point2D(this.lastX, this.lastY),\n new Point2D(x, y),\n rx, ry,\n xAxisRotation,\n arcFlag, sweepFlag\n );\n\n this.addShape(this.shapeCreator.arc(...arcParameters));\n }\n\n this.lastCommand = \"A\";\n this.lastX = x;\n this.lastY = y;\n }\n\n /**\n * arcRel - a\n *\n * @param {number} rx\n * @param {number} ry\n * @param {number} xAxisRotation\n * @param {boolean} arcFlag\n * @param {boolean} sweepFlag\n * @param {number} x\n * @param {number} y\n */\n arcRel(rx, ry, xAxisRotation, arcFlag, sweepFlag, x, y) {\n if (rx === 0 || ry === 0) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n this.lastX + x, this.lastY + y\n ));\n }\n else {\n const arcParameters = getArcParameters(\n new Point2D(this.lastX, this.lastY),\n new Point2D(this.lastX + x, this.lastY + y),\n rx, ry,\n xAxisRotation,\n arcFlag, sweepFlag\n );\n\n this.addShape(this.shapeCreator.arc(...arcParameters));\n }\n\n this.lastCommand = \"a\";\n this.lastX += x;\n this.lastY += y;\n }\n\n /**\n * curvetoCubicAbs - C\n *\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x\n * @param {number} y\n */\n curvetoCubicAbs(x1, y1, x2, y2, x, y) {\n this.addShape(this.shapeCreator.cubicBezier(\n this.lastX, this.lastY,\n x1, y1,\n x2, y2,\n x, y\n ));\n\n this.lastX = x;\n this.lastY = y;\n this.lastCommand = \"C\";\n }\n\n /**\n * curvetoCubicRel - c\n *\n * @param {number} x1\n * @param {number} y1\n * @param {number} x2\n * @param {number} y2\n * @param {number} x\n * @param {number} y\n */\n curvetoCubicRel(x1, y1, x2, y2, x, y) {\n this.addShape(this.shapeCreator.cubicBezier(\n this.lastX, this.lastY,\n this.lastX + x1, this.lastY + y1,\n this.lastX + x2, this.lastY + y2,\n this.lastX + x, this.lastY + y\n ));\n\n this.lastX += x;\n this.lastY += y;\n this.lastCommand = \"c\";\n }\n\n /**\n * linetoHorizontalAbs - H\n *\n * @param {number} x\n */\n linetoHorizontalAbs(x) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n x, this.lastY\n ));\n\n this.lastX = x;\n this.lastCommand = \"H\";\n }\n\n /**\n * linetoHorizontalRel - h\n *\n * @param {number} x\n */\n linetoHorizontalRel(x) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n this.lastX + x, this.lastY\n ));\n\n this.lastX += x;\n this.lastCommand = \"h\";\n }\n\n /**\n * linetoAbs - L\n *\n * @param {number} x\n * @param {number} y\n */\n linetoAbs(x, y) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n x, y\n ));\n\n this.lastX = x;\n this.lastY = y;\n this.lastCommand = \"L\";\n }\n\n /**\n * linetoRel - l\n *\n * @param {number} x\n * @param {number} y\n */\n linetoRel(x, y) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n this.lastX + x, this.lastY + y\n ));\n\n this.lastX += x;\n this.lastY += y;\n this.lastCommand = \"l\";\n }\n\n /**\n * movetoAbs - M\n *\n * @param {number} x\n * @param {number} y\n */\n movetoAbs(x, y) {\n this.firstX = x;\n this.firstY = y;\n this.lastX = x;\n this.lastY = y;\n this.lastCommand = \"M\";\n }\n\n /**\n * movetoRel - m\n *\n * @param {number} x\n * @param {number} y\n */\n movetoRel(x, y) {\n this.firstX += x;\n this.firstY += y;\n this.lastX += x;\n this.lastY += y;\n this.lastCommand = \"m\";\n }\n\n /**\n * curvetoQuadraticAbs - Q\n *\n * @param {number} x1\n * @param {number} y1\n * @param {number} x\n * @param {number} y\n */\n curvetoQuadraticAbs(x1, y1, x, y) {\n this.addShape(this.shapeCreator.quadraticBezier(\n this.lastX, this.lastY,\n x1, y1,\n x, y\n ));\n\n this.lastX = x;\n this.lastY = y;\n this.lastCommand = \"Q\";\n }\n\n /**\n * curvetoQuadraticRel - q\n *\n * @param {number} x1\n * @param {number} y1\n * @param {number} x\n * @param {number} y\n */\n curvetoQuadraticRel(x1, y1, x, y) {\n this.addShape(this.shapeCreator.quadraticBezier(\n this.lastX, this.lastY,\n this.lastX + x1, this.lastY + y1,\n this.lastX + x, this.lastY + y\n ));\n\n this.lastX += x;\n this.lastY += y;\n this.lastCommand = \"q\";\n }\n\n /**\n * curvetoCubicSmoothAbs - S\n *\n * @param {number} x2\n * @param {number} y2\n * @param {number} x\n * @param {number} y\n */\n curvetoCubicSmoothAbs(x2, y2, x, y) {\n let controlX, controlY;\n\n if (this.lastCommand.match(/^[SsCc]$/)) {\n const secondToLast = this.shapes[this.shapes.length - 1].args[2];\n\n controlX = 2 * this.lastX - secondToLast.x;\n controlY = 2 * this.lastY - secondToLast.y;\n }\n else {\n controlX = this.lastX;\n controlY = this.lastY;\n }\n\n this.addShape(this.shapeCreator.cubicBezier(\n this.lastX, this.lastY,\n controlX, controlY,\n x2, y2,\n x, y\n ));\n\n this.lastX = x;\n this.lastY = y;\n this.lastCommand = \"S\";\n }\n\n /**\n * curvetoCubicSmoothRel - s\n *\n * @param {number} x2\n * @param {number} y2\n * @param {number} x\n * @param {number} y\n */\n curvetoCubicSmoothRel(x2, y2, x, y) {\n let controlX, controlY;\n\n if (this.lastCommand.match(/^[SsCc]$/)) {\n const secondToLast = this.shapes[this.shapes.length - 1].args[2];\n\n controlX = 2 * this.lastX - secondToLast.x;\n controlY = 2 * this.lastY - secondToLast.y;\n }\n else {\n controlX = this.lastX;\n controlY = this.lastY;\n }\n\n this.addShape(this.shapeCreator.cubicBezier(\n this.lastX, this.lastY,\n controlX, controlY,\n this.lastX + x2, this.lastY + y2,\n this.lastX + x, this.lastY + y\n ));\n\n this.lastX += x;\n this.lastY += y;\n this.lastCommand = \"s\";\n }\n\n /**\n * curvetoQuadraticSmoothAbs - T\n *\n * @param {number} x\n * @param {number} y\n */\n curvetoQuadraticSmoothAbs(x, y) {\n let controlX, controlY;\n\n if (this.lastCommand.match(/^[QqTt]$/)) {\n const secondToLast = this.shapes[this.shapes.length - 1].args[1];\n\n controlX = 2 * this.lastX - secondToLast.x;\n controlY = 2 * this.lastY - secondToLast.y;\n }\n else {\n controlX = this.lastX;\n controlY = this.lastY;\n }\n\n this.addShape(this.shapeCreator.quadraticBezier(\n this.lastX, this.lastY,\n controlX, controlY,\n x, y\n ));\n\n this.lastX = x;\n this.lastY = y;\n this.lastCommand = \"T\";\n }\n\n /**\n * curvetoQuadraticSmoothRel - t\n *\n * @param {number} x\n * @param {number} y\n */\n curvetoQuadraticSmoothRel(x, y) {\n let controlX, controlY;\n\n if (this.lastCommand.match(/^[QqTt]$/)) {\n const secondToLast = this.shapes[this.shapes.length - 1].args[1];\n\n controlX = 2 * this.lastX - secondToLast.x;\n controlY = 2 * this.lastY - secondToLast.y;\n }\n else {\n controlX = this.lastX;\n controlY = this.lastY;\n }\n\n this.addShape(this.shapeCreator.quadraticBezier(\n this.lastX, this.lastY,\n controlX, controlY,\n this.lastX + x, this.lastY + y\n ));\n\n this.lastX += x;\n this.lastY += y;\n this.lastCommand = \"t\";\n }\n\n /**\n * linetoVerticalAbs - V\n *\n * @param {number} y\n */\n linetoVerticalAbs(y) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n this.lastX, y\n ));\n\n this.lastY = y;\n\n this.lastCommand = \"V\";\n }\n\n /**\n * linetoVerticalRel - v\n *\n * @param {number} y\n */\n linetoVerticalRel(y) {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n this.lastX, this.lastY + y\n ));\n\n this.lastY += y;\n\n this.lastCommand = \"v\";\n }\n\n /**\n * closePath - z or Z\n */\n closePath() {\n this.addShape(this.shapeCreator.line(\n this.lastX, this.lastY,\n this.firstX, this.firstY\n ));\n\n this.lastX = this.firstX;\n this.lastY = this.firstY;\n this.lastCommand = \"z\";\n }\n}\n\nexport default PathHandler;\n","/**\n * ShapeInfo.js\n * @copyright 2002, 2017 Kevin Lindsey\n */\n\nimport {Point2D} from \"kld-affine\";\nimport {Transformer, FAILURE_VALUE} from \"gp-data-transformer\";\nimport {PathParser} from \"kld-path-parser\";\nimport PathHandler from \"./PathHandler.js\";\nimport transformSource from \"./TransformSource.js\";\n\nconst degree90 = Math.PI * 0.5;\n\n/**\n * ShapeInfo\n * @memberof module:kld-intersections\n */\nexport default class ShapeInfo {\n /**\n * @param {string} name\n * @param {GenericArray} args\n * @returns {module:kld-intersections.ShapeInfo}\n */\n constructor(name, args) {\n this.name = name;\n this.args = args;\n }\n\n static arc(...args) {\n return create(ShapeInfo.ARC, args, [\"center\", \"radiusX\", \"radiusY\", \"startRadians\", \"endRadians\"]);\n }\n\n static quadraticBezier(...args) {\n return create(ShapeInfo.QUADRATIC_BEZIER, args, [\"p1\", \"p2\", \"p3\"]);\n }\n\n static cubicBezier(...args) {\n return create(ShapeInfo.CUBIC_BEZIER, args, [\"p1\", \"p2\", \"p3\", \"p4\"]);\n }\n\n static circle(...args) {\n return create(ShapeInfo.CIRCLE, args, [\"center\", \"radius\"]);\n }\n\n static ellipse(...args) {\n return create(ShapeInfo.ELLIPSE, args, [\"center\", \"radiusX\", \"radiusY\"]);\n }\n\n static line(...args) {\n return create(ShapeInfo.LINE, args, [\"p1\", \"p2\"]);\n }\n\n static path(...args) {\n return create(ShapeInfo.PATH, args, [\"segments\"]);\n }\n\n static polygon(...args) {\n return create(ShapeInfo.POLYGON, args, [\"points\"]);\n }\n\n static polyline(...args) {\n return create(ShapeInfo.POLYLINE, args, [\"points\"]);\n }\n\n static rectangle(...args) {\n const result = create(ShapeInfo.RECTANGLE, args, [\"topLeft\", \"bottomRight\", \"rx\", \"ry\"]);\n\n let ry = result.args.pop();\n let rx = result.args.pop();\n\n rx = rx === undefined ? 0 : rx;\n ry = ry === undefined ? 0 : ry;\n\n if (rx === 0 && ry === 0) {\n return result;\n }\n\n const {x: p1x, y: p1y} = result.args[0];\n const {x: p2x, y: p2y} = result.args[1];\n const width = p2x - p1x;\n const height = p2y - p1y;\n\n if (rx === 0) {\n rx = ry;\n }\n if (ry === 0) {\n ry = rx;\n }\n if (rx > width * 0.5) {\n rx = width * 0.5;\n }\n if (ry > height * 0.5) {\n ry = height * 0.5;\n }\n\n const x0 = p1x;\n const y0 = p1y;\n const x1 = p1x + rx;\n const y1 = p1y + ry;\n const x2 = p2x - rx;\n const y2 = p2y - ry;\n const x3 = p2x;\n const y3 = p2y;\n\n const segments = [\n ShapeInfo.arc(x1, y1, rx, ry, 2 * degree90, 3 * degree90),\n ShapeInfo.line(x1, y0, x2, y0),\n ShapeInfo.arc(x2, y1, rx, ry, 3 * degree90, 4 * degree90),\n ShapeInfo.line(x3, y1, x3, y2),\n ShapeInfo.arc(x2, y2, rx, ry, 0, degree90),\n ShapeInfo.line(x2, y3, x1, y3),\n ShapeInfo.arc(x1, y2, rx, ry, degree90, 2 * degree90),\n ShapeInfo.line(x0, y2, x0, y1)\n ];\n\n return new ShapeInfo(ShapeInfo.PATH, segments);\n }\n}\n\n/**\n * Create a shape\n *\n * @param {string} type\n * @param {GenericArray} object\n * @param {Array} properties\n * @returns {ShapeInfo}\n */\nfunction create(type, object, properties) {\n let transformType;\n\n if (object.length === 1) {\n object = object[0];\n\n transformType = Array.isArray(object) || typeof object === \"string\"\n ? type + \"Args\"\n : type;\n }\n else {\n transformType = type + \"Args\";\n }\n\n // normalize the data\n const data = transformer.execute(transformType, object);\n\n if (data === FAILURE_VALUE) {\n // for (const message of transformer.messages) {\n // console.log(message);\n // }\n\n throw new TypeError(`${type} is not in a recognizable format: ${JSON.stringify(object)}`);\n }\n\n // pull out the arguments\n const args = properties.length === 1\n ? data[properties[0]]\n : properties.map(name => data[name]);\n\n // return a new ShapeInfo\n return new ShapeInfo(type, args);\n}\n\n// define shape name constants\nShapeInfo.ARC = \"Arc\";\nShapeInfo.QUADRATIC_BEZIER = \"Bezier2\";\nShapeInfo.CUBIC_BEZIER = \"Bezier3\";\nShapeInfo.CIRCLE = \"Circle\";\nShapeInfo.ELLIPSE = \"Ellipse\";\nShapeInfo.LINE = \"Line\";\nShapeInfo.PATH = \"Path\";\nShapeInfo.POLYGON = \"Polygon\";\nShapeInfo.POLYLINE = \"Polyline\";\nShapeInfo.RECTANGLE = \"Rectangle\";\n\n// create shape argument normalizer\nconst transformer = new Transformer();\ntransformer.execute(transformSource);\n\n// attach custom generators\ntransformer.addFunction(\"Point2D\", (x, y) => new Point2D(x, y));\ntransformer.addFunction(\"PathData\", pathData => {\n const parser = new PathParser();\n const handler = new PathHandler(ShapeInfo);\n\n parser.setHandler(handler);\n parser.parseData(pathData);\n\n return handler.shapes;\n});\n","/* eslint-disable camelcase, no-labels */\n/**\n *\n * Intersection.js\n *\n * copyright 2002, 2013 Kevin Lindsey\n */\n\nimport {Point2D, Vector2D} from \"kld-affine\";\nimport {Polynomial} from \"kld-polynomial\";\nimport ShapeInfo from \"./ShapeInfo.js\";\n\nconst TWO_PI = 2.0 * Math.PI;\nconst UNIT_X = new Vector2D(1, 0);\n\n/**\n * @memberof module:kld-intersections.Intersection\n * @param {any} o\n * @returns {boolean}\n */\nfunction isNullish(o) {\n return o === null || o === undefined;\n}\n\n/**\n * bezout\n *\n * This code is based on MgcIntr2DElpElp.cpp written by David Eberly. His\n * code along with many other excellent examples are avaiable at his site:\n * http://www.magic-software.com\n *\n * @param {Array} e1\n * @param {Array} e2\n * @returns {external:Polynomial}\n */\nfunction bezout(e1, e2) {\n const AB = e1[0] * e2[1] - e2[0] * e1[1];\n const AC = e1[0] * e2[2] - e2[0] * e1[2];\n const AD = e1[0] * e2[3] - e2[0] * e1[3];\n const AE = e1[0] * e2[4] - e2[0] * e1[4];\n const AF = e1[0] * e2[5] - e2[0] * e1[5];\n const BC = e1[1] * e2[2] - e2[1] * e1[2];\n const BE = e1[1] * e2[4] - e2[1] * e1[4];\n const BF = e1[1] * e2[5] - e2[1] * e1[5];\n const CD = e1[2] * e2[3] - e2[2] * e1[3];\n const DE = e1[3] * e2[4] - e2[3] * e1[4];\n const DF = e1[3] * e2[5] - e2[3] * e1[5];\n const BFpDE = BF + DE;\n const BEmCD = BE - CD;\n\n return new Polynomial(\n AB * BC - AC * AC,\n AB * BEmCD + AD * BC - 2 * AC * AE,\n AB * BFpDE + AD * BEmCD - AE * AE - 2 * AC * AF,\n AB * DF + AD * BFpDE - 2 * AE * AF,\n AD * DF - AF * AF\n );\n}\n\n/**\n * normalizeAngle\n *\n * @param {number} radians\n * @returns {number}\n */\nfunction normalizeAngle(radians) {\n const normal = radians % TWO_PI;\n\n return normal < 0.0 ? normal + TWO_PI : normal;\n}\n\n/**\n * restrictPointsToArc\n *\n * @param {module:kld-intersections.Intersection} intersections\n * @param {module:kld-intersections.Point2D} center\n * @param {number} radiusX\n * @param {number} radiusY\n * @param {number} startRadians\n * @param {number} endRadians\n * @returns {module:kld-intersections.Intersection}\n */\nfunction restrictPointsToArc(intersections, center, radiusX, radiusY, startRadians, endRadians) {\n if (intersections.points.length === 0) {\n return intersections;\n }\n\n const result = new Intersection(\"No Intersection\");\n const startNormal = normalizeAngle(startRadians);\n let endNormal = normalizeAngle(endRadians);\n\n // Advance end angle one turn if it's lower than the start angle so our interval test will work correctly\n if (endNormal < startNormal) {\n endNormal += TWO_PI;\n }\n\n for (const p of intersections.points) {\n const a = normalizeAngle(UNIT_X.angleBetween(Vector2D.fromPoints(center, p)));\n\n if (startNormal <= a && a <= endNormal) {\n result.appendPoint(p);\n }\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n}\n\n/**\n * closePolygon\n * @memberof module:kld-intersections.Intersection\n * @param {Array} points\n * @returns {Array}\n */\nfunction closePolygon(points) {\n const copy = points.slice();\n\n copy.push(points[0]);\n\n return copy;\n}\n\n/**\n * Intersection\n * @memberof module:kld-intersections\n */\nclass Intersection {\n /**\n * @param {string} status\n * @returns {module:kld-intersections.Intersection}\n */\n constructor(status) {\n this.init(status);\n }\n\n\n /**\n * init\n *\n * @param {string} status\n */\n init(status) {\n this.status = status;\n this.points = [];\n }\n\n /**\n * intersect\n *\n * @param {module:kld-intersections.ShapeInfo} shape1\n * @param {module:kld-intersections.ShapeInfo} shape2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersect(shape1, shape2) {\n let result;\n\n if (!isNullish(shape1) && !isNullish(shape2)) {\n if (shape1.name === \"Path\") {\n result = Intersection.intersectPathShape(shape1, shape2);\n }\n else if (shape2.name === \"Path\") {\n result = Intersection.intersectPathShape(shape2, shape1);\n }\n else if (shape1.name === \"Arc\") {\n result = Intersection.intersectArcShape(shape1, shape2);\n }\n else if (shape2.name === \"Arc\") {\n result = Intersection.intersectArcShape(shape2, shape1);\n }\n else {\n let method;\n let args;\n\n if (shape1.name < shape2.name) {\n method = \"intersect\" + shape1.name + shape2.name;\n args = shape1.args.concat(shape2.args);\n }\n else {\n method = \"intersect\" + shape2.name + shape1.name;\n args = shape2.args.concat(shape1.args);\n }\n\n if (!(method in Intersection)) {\n throw new TypeError(\"Intersection not available: \" + method);\n }\n\n result = Intersection[method].apply(null, args);\n }\n }\n else {\n result = new Intersection(\"No Intersection\");\n }\n\n return result;\n }\n\n /**\n * intersectPathShape\n *\n * @param {module:kld-intersections.ShapeInfo} path\n * @param {module:kld-intersections.ShapeInfo} shape\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectPathShape(path, shape) {\n const result = new Intersection(\"No Intersection\");\n\n for (const segment of path.args) {\n const inter = Intersection.intersect(segment, shape);\n\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectArcShape\n *\n * @param {module:kld-intersections.ShapeInfo} arc\n * @param {module:kld-intersections.ShapeInfo} shape\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectArcShape(arc, shape) {\n const [center, radiusX, radiusY, startRadians, endRadians] = arc.args;\n const ellipse = new ShapeInfo(ShapeInfo.ELLIPSE, [center, radiusX, radiusY]);\n const ellipse_result = Intersection.intersect(ellipse, shape);\n\n // return ellipse_result;\n return restrictPointsToArc(ellipse_result, center, radiusX, radiusY, startRadians, endRadians);\n }\n\n /**\n * intersectBezier2Bezier2\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} a3\n * @param {module:kld-intersections.Point2D} b1\n * @param {module:kld-intersections.Point2D} b2\n * @param {module:kld-intersections.Point2D} b3\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Bezier2(a1, a2, a3, b1, b2, b3) {\n let a, b;\n const result = new Intersection(\"No Intersection\");\n\n a = a2.multiply(-2);\n const c12 = a1.add(a.add(a3));\n\n a = a1.multiply(-2);\n b = a2.multiply(2);\n const c11 = a.add(b);\n\n const c10 = new Point2D(a1.x, a1.y);\n\n a = b2.multiply(-2);\n const c22 = b1.add(a.add(b3));\n\n a = b1.multiply(-2);\n b = b2.multiply(2);\n const c21 = a.add(b);\n\n const c20 = new Point2D(b1.x, b1.y);\n\n // bezout\n a = c12.x * c11.y - c11.x * c12.y;\n b = c22.x * c11.y - c11.x * c22.y;\n const c = c21.x * c11.y - c11.x * c21.y;\n const d = c11.x * (c10.y - c20.y) + c11.y * (-c10.x + c20.x);\n const e = c22.x * c12.y - c12.x * c22.y;\n const f = c21.x * c12.y - c12.x * c21.y;\n const g = c12.x * (c10.y - c20.y) + c12.y * (-c10.x + c20.x);\n\n // determinant\n const poly = new Polynomial(\n -e * e,\n -2 * e * f,\n a * b - f * f - 2 * e * g,\n a * c - 2 * f * g,\n a * d - g * g\n );\n\n const roots = poly.getRoots();\n\n for (const s of roots) {\n if (0 <= s && s <= 1) {\n const xp = new Polynomial(\n c12.x,\n c11.x,\n c10.x - c20.x - s * c21.x - s * s * c22.x\n );\n xp.simplifyEquals();\n const xRoots = xp.getRoots();\n const yp = new Polynomial(\n c12.y,\n c11.y,\n c10.y - c20.y - s * c21.y - s * s * c22.y\n );\n yp.simplifyEquals();\n const yRoots = yp.getRoots();\n\n if (xRoots.length > 0 && yRoots.length > 0) {\n const TOLERANCE = 1e-4;\n\n checkRoots:\n for (const xRoot of xRoots) {\n if (0 <= xRoot && xRoot <= 1) {\n for (const yRoot of yRoots) {\n if (Math.abs(xRoot - yRoot) < TOLERANCE) {\n result.points.push(c22.multiply(s * s).add(c21.multiply(s).add(c20)));\n break checkRoots;\n }\n }\n }\n }\n }\n }\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier2Bezier3\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} a3\n * @param {module:kld-intersections.Point2D} b1\n * @param {module:kld-intersections.Point2D} b2\n * @param {module:kld-intersections.Point2D} b3\n * @param {module:kld-intersections.Point2D} b4\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Bezier3(a1, a2, a3, b1, b2, b3, b4) {\n let a, b, c, d;\n const result = new Intersection(\"No Intersection\");\n\n a = a2.multiply(-2);\n const c12 = a1.add(a.add(a3));\n\n a = a1.multiply(-2);\n b = a2.multiply(2);\n const c11 = a.add(b);\n\n const c10 = new Point2D(a1.x, a1.y);\n\n a = b1.multiply(-1);\n b = b2.multiply(3);\n c = b3.multiply(-3);\n d = a.add(b.add(c.add(b4)));\n const c23 = new Point2D(d.x, d.y);\n\n a = b1.multiply(3);\n b = b2.multiply(-6);\n c = b3.multiply(3);\n d = a.add(b.add(c));\n const c22 = new Point2D(d.x, d.y);\n\n a = b1.multiply(-3);\n b = b2.multiply(3);\n c = a.add(b);\n const c21 = new Point2D(c.x, c.y);\n\n const c20 = new Point2D(b1.x, b1.y);\n\n const c10x2 = c10.x * c10.x;\n const c10y2 = c10.y * c10.y;\n const c11x2 = c11.x * c11.x;\n const c11y2 = c11.y * c11.y;\n const c12x2 = c12.x * c12.x;\n const c12y2 = c12.y * c12.y;\n const c20x2 = c20.x * c20.x;\n const c20y2 = c20.y * c20.y;\n const c21x2 = c21.x * c21.x;\n const c21y2 = c21.y * c21.y;\n const c22x2 = c22.x * c22.x;\n const c22y2 = c22.y * c22.y;\n const c23x2 = c23.x * c23.x;\n const c23y2 = c23.y * c23.y;\n\n const poly = new Polynomial(\n -2 * c12.x * c12.y * c23.x * c23.y + c12x2 * c23y2 + c12y2 * c23x2,\n -2 * c12.x * c12.y * c22.x * c23.y - 2 * c12.x * c12.y * c22.y * c23.x + 2 * c12y2 * c22.x * c23.x +\n 2 * c12x2 * c22.y * c23.y,\n -2 * c12.x * c21.x * c12.y * c23.y - 2 * c12.x * c12.y * c21.y * c23.x - 2 * c12.x * c12.y * c22.x * c22.y +\n 2 * c21.x * c12y2 * c23.x + c12y2 * c22x2 + c12x2 * (2 * c21.y * c23.y + c22y2),\n 2 * c10.x * c12.x * c12.y * c23.y + 2 * c10.y * c12.x * c12.y * c23.x + c11.x * c11.y * c12.x * c23.y +\n c11.x * c11.y * c12.y * c23.x - 2 * c20.x * c12.x * c12.y * c23.y - 2 * c12.x * c20.y * c12.y * c23.x -\n 2 * c12.x * c21.x * c12.y * c22.y - 2 * c12.x * c12.y * c21.y * c22.x - 2 * c10.x * c12y2 * c23.x -\n 2 * c10.y * c12x2 * c23.y + 2 * c20.x * c12y2 * c23.x + 2 * c21.x * c12y2 * c22.x -\n c11y2 * c12.x * c23.x - c11x2 * c12.y * c23.y + c12x2 * (2 * c20.y * c23.y + 2 * c21.y * c22.y),\n 2 * c10.x * c12.x * c12.y * c22.y + 2 * c10.y * c12.x * c12.y * c22.x + c11.x * c11.y * c12.x * c22.y +\n c11.x * c11.y * c12.y * c22.x - 2 * c20.x * c12.x * c12.y * c22.y - 2 * c12.x * c20.y * c12.y * c22.x -\n 2 * c12.x * c21.x * c12.y * c21.y - 2 * c10.x * c12y2 * c22.x - 2 * c10.y * c12x2 * c22.y +\n 2 * c20.x * c12y2 * c22.x - c11y2 * c12.x * c22.x - c11x2 * c12.y * c22.y + c21x2 * c12y2 +\n c12x2 * (2 * c20.y * c22.y + c21y2),\n 2 * c10.x * c12.x * c12.y * c21.y + 2 * c10.y * c12.x * c21.x * c12.y + c11.x * c11.y * c12.x * c21.y +\n c11.x * c11.y * c21.x * c12.y - 2 * c20.x * c12.x * c12.y * c21.y - 2 * c12.x * c20.y * c21.x * c12.y -\n 2 * c10.x * c21.x * c12y2 - 2 * c10.y * c12x2 * c21.y + 2 * c20.x * c21.x * c12y2 -\n c11y2 * c12.x * c21.x - c11x2 * c12.y * c21.y + 2 * c12x2 * c20.y * c21.y,\n -2 * c10.x * c10.y * c12.x * c12.y - c10.x * c11.x * c11.y * c12.y - c10.y * c11.x * c11.y * c12.x +\n 2 * c10.x * c12.x * c20.y * c12.y + 2 * c10.y * c20.x * c12.x * c12.y + c11.x * c20.x * c11.y * c12.y +\n c11.x * c11.y * c12.x * c20.y - 2 * c20.x * c12.x * c20.y * c12.y - 2 * c10.x * c20.x * c12y2 +\n c10.x * c11y2 * c12.x + c10.y * c11x2 * c12.y - 2 * c10.y * c12x2 * c20.y -\n c20.x * c11y2 * c12.x - c11x2 * c20.y * c12.y + c10x2 * c12y2 + c10y2 * c12x2 +\n c20x2 * c12y2 + c12x2 * c20y2\n );\n const roots = poly.getRootsInInterval(0, 1);\n\n for (const s of roots) {\n const xRoots = new Polynomial(\n c12.x,\n c11.x,\n c10.x - c20.x - s * c21.x - s * s * c22.x - s * s * s * c23.x\n ).getRoots();\n const yRoots = new Polynomial(\n c12.y,\n c11.y,\n c10.y - c20.y - s * c21.y - s * s * c22.y - s * s * s * c23.y\n ).getRoots();\n\n if (xRoots.length > 0 && yRoots.length > 0) {\n const TOLERANCE = 1e-4;\n\n checkRoots:\n for (const xRoot of xRoots) {\n if (0 <= xRoot && xRoot <= 1) {\n for (const yRoot of yRoots) {\n if (Math.abs(xRoot - yRoot) < TOLERANCE) {\n result.points.push(\n c23.multiply(s * s * s).add(c22.multiply(s * s).add(c21.multiply(s).add(c20)))\n );\n break checkRoots;\n }\n }\n }\n }\n }\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier2Circle\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} c\n * @param {number} r\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Circle(p1, p2, p3, c, r) {\n return Intersection.intersectBezier2Ellipse(p1, p2, p3, c, r, r);\n }\n\n /**\n * intersectBezier2Ellipse\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} ec\n * @param {number} rx\n * @param {number} ry\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Ellipse(p1, p2, p3, ec, rx, ry) {\n let a; // temporary variables\n // c2, c1, c0; // coefficients of quadratic\n const result = new Intersection(\"No Intersection\");\n\n a = p2.multiply(-2);\n const c2 = p1.add(a.add(p3));\n\n a = p1.multiply(-2);\n const b = p2.multiply(2);\n const c1 = a.add(b);\n\n const c0 = new Point2D(p1.x, p1.y);\n\n const rxrx = rx * rx;\n const ryry = ry * ry;\n const roots = new Polynomial(\n ryry * c2.x * c2.x + rxrx * c2.y * c2.y,\n 2 * (ryry * c2.x * c1.x + rxrx * c2.y * c1.y),\n ryry * (2 * c2.x * c0.x + c1.x * c1.x) + rxrx * (2 * c2.y * c0.y + c1.y * c1.y) -\n 2 * (ryry * ec.x * c2.x + rxrx * ec.y * c2.y),\n 2 * (ryry * c1.x * (c0.x - ec.x) + rxrx * c1.y * (c0.y - ec.y)),\n ryry * (c0.x * c0.x + ec.x * ec.x) + rxrx * (c0.y * c0.y + ec.y * ec.y) -\n 2 * (ryry * ec.x * c0.x + rxrx * ec.y * c0.y) - rxrx * ryry\n ).getRoots();\n\n for (const t of roots) {\n if (0 <= t && t <= 1) {\n result.points.push(c2.multiply(t * t).add(c1.multiply(t).add(c0)));\n }\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier2Line\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Line(p1, p2, p3, a1, a2) {\n let a; // temporary variables\n // let c2, c1, c0; // coefficients of quadratic\n // cl; // c coefficient for normal form of line\n // n; // normal for normal form of line\n const min = a1.min(a2); // used to determine if point is on line segment\n const max = a1.max(a2); // used to determine if point is on line segment\n const result = new Intersection(\"No Intersection\");\n\n a = p2.multiply(-2);\n const c2 = p1.add(a.add(p3));\n\n a = p1.multiply(-2);\n const b = p2.multiply(2);\n const c1 = a.add(b);\n\n const c0 = new Point2D(p1.x, p1.y);\n\n // Convert line to normal form: ax + by + c = 0\n // Find normal to line: negative inverse of original line's slope\n const n = new Vector2D(a1.y - a2.y, a2.x - a1.x);\n\n // Determine new c coefficient\n const cl = a1.x * a2.y - a2.x * a1.y;\n\n // Transform cubic coefficients to line's coordinate system and find roots\n // of cubic\n const roots = new Polynomial(\n n.dot(c2),\n n.dot(c1),\n n.dot(c0) + cl\n ).getRoots();\n\n // Any roots in closed interval [0,1] are intersections on Bezier, but\n // might not be on the line segment.\n // Find intersections and calculate point coordinates\n for (const t of roots) {\n if (0 <= t && t <= 1) {\n // We're within the Bezier curve\n // Find point on Bezier\n const p4 = p1.lerp(p2, t);\n const p5 = p2.lerp(p3, t);\n\n const p6 = p4.lerp(p5, t);\n\n // See if point is on line segment\n // Had to make special cases for vertical and horizontal lines due\n // to slight errors in calculation of p6\n if (a1.x === a2.x) {\n if (min.y <= p6.y && p6.y <= max.y) {\n result.status = \"Intersection\";\n result.appendPoint(p6);\n }\n }\n else if (a1.y === a2.y) {\n if (min.x <= p6.x && p6.x <= max.x) {\n result.status = \"Intersection\";\n result.appendPoint(p6);\n }\n }\n else if (min.x <= p6.x && p6.x <= max.x && min.y <= p6.y && p6.y <= max.y) {\n result.status = \"Intersection\";\n result.appendPoint(p6);\n }\n }\n }\n\n return result;\n }\n\n /**\n * intersectBezier2Polygon\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Polygon(p1, p2, p3, points) {\n return Intersection.intersectBezier2Polyline(p1, p2, p3, closePolygon(points));\n }\n\n /**\n * intersectBezier2Polyline\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Polyline(p1, p2, p3, points) {\n const result = new Intersection(\"No Intersection\");\n const {length: len} = points;\n\n for (let i = 0; i < len - 1; i++) {\n const a1 = points[i];\n const a2 = points[i + 1];\n const inter = Intersection.intersectBezier2Line(p1, p2, p3, a1, a2);\n\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier2Rectangle\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier2Rectangle(p1, p2, p3, r1, r2) {\n const min = r1.min(r2);\n const max = r1.max(r2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectBezier2Line(p1, p2, p3, min, topRight);\n const inter2 = Intersection.intersectBezier2Line(p1, p2, p3, topRight, max);\n const inter3 = Intersection.intersectBezier2Line(p1, p2, p3, max, bottomLeft);\n const inter4 = Intersection.intersectBezier2Line(p1, p2, p3, bottomLeft, min);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier3Bezier3\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} a3\n * @param {module:kld-intersections.Point2D} a4\n * @param {module:kld-intersections.Point2D} b1\n * @param {module:kld-intersections.Point2D} b2\n * @param {module:kld-intersections.Point2D} b3\n * @param {module:kld-intersections.Point2D} b4\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Bezier3(a1, a2, a3, a4, b1, b2, b3, b4) {\n let a, b, c, d; // temporary variables\n // c13, c12, c11, c10; // coefficients of cubic\n // c23, c22, c21, c20; // coefficients of cubic\n const result = new Intersection(\"No Intersection\");\n\n // Calculate the coefficients of cubic polynomial\n a = a1.multiply(-1);\n b = a2.multiply(3);\n c = a3.multiply(-3);\n d = a.add(b.add(c.add(a4)));\n const c13 = new Point2D(d.x, d.y);\n\n a = a1.multiply(3);\n b = a2.multiply(-6);\n c = a3.multiply(3);\n d = a.add(b.add(c));\n const c12 = new Point2D(d.x, d.y);\n\n a = a1.multiply(-3);\n b = a2.multiply(3);\n c = a.add(b);\n const c11 = new Point2D(c.x, c.y);\n\n const c10 = new Point2D(a1.x, a1.y);\n\n a = b1.multiply(-1);\n b = b2.multiply(3);\n c = b3.multiply(-3);\n d = a.add(b.add(c.add(b4)));\n const c23 = new Point2D(d.x, d.y);\n\n a = b1.multiply(3);\n b = b2.multiply(-6);\n c = b3.multiply(3);\n d = a.add(b.add(c));\n const c22 = new Point2D(d.x, d.y);\n\n a = b1.multiply(-3);\n b = b2.multiply(3);\n c = a.add(b);\n const c21 = new Point2D(c.x, c.y);\n\n const c20 = new Point2D(b1.x, b1.y);\n\n // bezout\n a = c13.x * c12.y - c12.x * c13.y;\n b = c13.x * c11.y - c11.x * c13.y;\n const c0 = c13.x * c10.y - c10.x * c13.y + c20.x * c13.y - c13.x * c20.y;\n const c1 = c21.x * c13.y - c13.x * c21.y;\n const c2 = c22.x * c13.y - c13.x * c22.y;\n const c3 = c23.x * c13.y - c13.x * c23.y;\n d = c13.x * c11.y - c11.x * c13.y;\n const e0 = c13.x * c10.y + c12.x * c11.y - c11.x * c12.y - c10.x * c13.y + c20.x * c13.y - c13.x * c20.y;\n const e1 = c21.x * c13.y - c13.x * c21.y;\n const e2 = c22.x * c13.y - c13.x * c22.y;\n const e3 = c23.x * c13.y - c13.x * c23.y;\n const f0 = c12.x * c10.y - c10.x * c12.y + c20.x * c12.y - c12.x * c20.y;\n const f1 = c21.x * c12.y - c12.x * c21.y;\n const f2 = c22.x * c12.y - c12.x * c22.y;\n const f3 = c23.x * c12.y - c12.x * c23.y;\n const g0 = c13.x * c10.y - c10.x * c13.y + c20.x * c13.y - c13.x * c20.y;\n const g1 = c21.x * c13.y - c13.x * c21.y;\n const g2 = c22.x * c13.y - c13.x * c22.y;\n const g3 = c23.x * c13.y - c13.x * c23.y;\n const h0 = c12.x * c10.y - c10.x * c12.y + c20.x * c12.y - c12.x * c20.y;\n const h1 = c21.x * c12.y - c12.x * c21.y;\n const h2 = c22.x * c12.y - c12.x * c22.y;\n const h3 = c23.x * c12.y - c12.x * c23.y;\n const i0 = c11.x * c10.y - c10.x * c11.y + c20.x * c11.y - c11.x * c20.y;\n const i1 = c21.x * c11.y - c11.x * c21.y;\n const i2 = c22.x * c11.y - c11.x * c22.y;\n const i3 = c23.x * c11.y - c11.x * c23.y;\n\n // determinant\n const poly = new Polynomial(\n -c3 * e3 * g3,\n -c3 * e3 * g2 - c3 * e2 * g3 - c2 * e3 * g3,\n -c3 * e3 * g1 - c3 * e2 * g2 - c2 * e3 * g2 - c3 * e1 * g3 - c2 * e2 * g3 - c1 * e3 * g3,\n -c3 * e3 * g0 - c3 * e2 * g1 - c2 * e3 * g1 - c3 * e1 * g2 - c2 * e2 * g2 - c1 * e3 * g2 - c3 * e0 * g3 - c2 * e1 * g3 - c1 * e2 * g3 - c0 * e3 * g3 + b * f3 * g3 + c3 * d * h3 - a * f3 * h3 + a * e3 * i3,\n -c3 * e2 * g0 - c2 * e3 * g0 - c3 * e1 * g1 - c2 * e2 * g1 - c1 * e3 * g1 - c3 * e0 * g2 - c2 * e1 * g2 - c1 * e2 * g2 - c0 * e3 * g2 + b * f3 * g2 - c2 * e0 * g3 - c1 * e1 * g3 - c0 * e2 * g3 + b * f2 * g3 + c3 * d * h2 - a * f3 * h2 + c2 * d * h3 - a * f2 * h3 + a * e3 * i2 + a * e2 * i3,\n -c3 * e1 * g0 - c2 * e2 * g0 - c1 * e3 * g0 - c3 * e0 * g1 - c2 * e1 * g1 - c1 * e2 * g1 - c0 * e3 * g1 + b * f3 * g1 - c2 * e0 * g2 - c1 * e1 * g2 - c0 * e2 * g2 + b * f2 * g2 - c1 * e0 * g3 - c0 * e1 * g3 + b * f1 * g3 + c3 * d * h1 - a * f3 * h1 + c2 * d * h2 - a * f2 * h2 + c1 * d * h3 - a * f1 * h3 + a * e3 * i1 + a * e2 * i2 + a * e1 * i3,\n -c3 * e0 * g0 - c2 * e1 * g0 - c1 * e2 * g0 - c0 * e3 * g0 + b * f3 * g0 - c2 * e0 * g1 - c1 * e1 * g1 - c0 * e2 * g1 + b * f2 * g1 - c1 * e0 * g2 - c0 * e1 * g2 + b * f1 * g2 - c0 * e0 * g3 + b * f0 * g3 + c3 * d * h0 - a * f3 * h0 + c2 * d * h1 - a * f2 * h1 + c1 * d * h2 - a * f1 * h2 + c0 * d * h3 - a * f0 * h3 + a * e3 * i0 + a * e2 * i1 + a * e1 * i2 - b * d * i3 + a * e0 * i3,\n -c2 * e0 * g0 - c1 * e1 * g0 - c0 * e2 * g0 + b * f2 * g0 - c1 * e0 * g1 - c0 * e1 * g1 + b * f1 * g1 - c0 * e0 * g2 + b * f0 * g2 + c2 * d * h0 - a * f2 * h0 + c1 * d * h1 - a * f1 * h1 + c0 * d * h2 - a * f0 * h2 + a * e2 * i0 + a * e1 * i1 - b * d * i2 + a * e0 * i2,\n -c1 * e0 * g0 - c0 * e1 * g0 + b * f1 * g0 - c0 * e0 * g1 + b * f0 * g1 + c1 * d * h0 - a * f1 * h0 + c0 * d * h1 - a * f0 * h1 + a * e1 * i0 - b * d * i1 + a * e0 * i1,\n -c0 * e0 * g0 + b * f0 * g0 + c0 * d * h0 - a * f0 * h0 - b * d * i0 + a * e0 * i0\n );\n poly.simplifyEquals();\n const roots = poly.getRootsInInterval(0, 1);\n\n for (const s of roots) {\n const xp = new Polynomial(\n c13.x,\n c12.x,\n c11.x,\n c10.x - c20.x - s * c21.x - s * s * c22.x - s * s * s * c23.x\n );\n xp.simplifyEquals();\n const xRoots = xp.getRoots();\n const yp = new Polynomial(\n c13.y,\n c12.y,\n c11.y,\n c10.y - c20.y - s * c21.y - s * s * c22.y - s * s * s * c23.y\n );\n yp.simplifyEquals();\n const yRoots = yp.getRoots();\n\n if (xRoots.length > 0 && yRoots.length > 0) {\n const TOLERANCE = 1e-4;\n\n checkRoots:\n for (const xRoot of xRoots) {\n if (0 <= xRoot && xRoot <= 1) {\n for (const yRoot of yRoots) {\n if (Math.abs(xRoot - yRoot) < TOLERANCE) {\n result.points.push(\n c23.multiply(s * s * s).add(c22.multiply(s * s).add(c21.multiply(s).add(c20)))\n );\n break checkRoots;\n }\n }\n }\n }\n }\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier3Circle\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @param {module:kld-intersections.Point2D} c\n * @param {number} r\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Circle(p1, p2, p3, p4, c, r) {\n return Intersection.intersectBezier3Ellipse(p1, p2, p3, p4, c, r, r);\n }\n\n /**\n * intersectBezier3Ellipse\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @param {module:kld-intersections.Point2D} ec\n * @param {number} rx\n * @param {number} ry\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Ellipse(p1, p2, p3, p4, ec, rx, ry) {\n let a, b, c, d; // temporary variables\n // c3, c2, c1, c0; // coefficients of cubic\n const result = new Intersection(\"No Intersection\");\n\n // Calculate the coefficients of cubic polynomial\n a = p1.multiply(-1);\n b = p2.multiply(3);\n c = p3.multiply(-3);\n d = a.add(b.add(c.add(p4)));\n const c3 = new Point2D(d.x, d.y);\n\n a = p1.multiply(3);\n b = p2.multiply(-6);\n c = p3.multiply(3);\n d = a.add(b.add(c));\n const c2 = new Point2D(d.x, d.y);\n\n a = p1.multiply(-3);\n b = p2.multiply(3);\n c = a.add(b);\n const c1 = new Point2D(c.x, c.y);\n\n const c0 = new Point2D(p1.x, p1.y);\n\n const rxrx = rx * rx;\n const ryry = ry * ry;\n const poly = new Polynomial(\n c3.x * c3.x * ryry + c3.y * c3.y * rxrx,\n 2 * (c3.x * c2.x * ryry + c3.y * c2.y * rxrx),\n 2 * (c3.x * c1.x * ryry + c3.y * c1.y * rxrx) + c2.x * c2.x * ryry + c2.y * c2.y * rxrx,\n 2 * c3.x * ryry * (c0.x - ec.x) + 2 * c3.y * rxrx * (c0.y - ec.y) +\n 2 * (c2.x * c1.x * ryry + c2.y * c1.y * rxrx),\n 2 * c2.x * ryry * (c0.x - ec.x) + 2 * c2.y * rxrx * (c0.y - ec.y) +\n c1.x * c1.x * ryry + c1.y * c1.y * rxrx,\n 2 * c1.x * ryry * (c0.x - ec.x) + 2 * c1.y * rxrx * (c0.y - ec.y),\n c0.x * c0.x * ryry - 2 * c0.y * ec.y * rxrx - 2 * c0.x * ec.x * ryry +\n c0.y * c0.y * rxrx + ec.x * ec.x * ryry + ec.y * ec.y * rxrx - rxrx * ryry\n );\n const roots = poly.getRootsInInterval(0, 1);\n\n for (const t of roots) {\n result.points.push(\n c3.multiply(t * t * t).add(c2.multiply(t * t).add(c1.multiply(t).add(c0)))\n );\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier3Line\n *\n * Many thanks to Dan Sunday at SoftSurfer.com. He gave me a very thorough\n * sketch of the algorithm used here. Without his help, I'm not sure when I\n * would have figured out this intersection problem.\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Line(p1, p2, p3, p4, a1, a2) {\n let a, b, c, d; // temporary variables\n // c3, c2, c1, c0; // coefficients of cubic\n // cl; // c coefficient for normal form of line\n // n; // normal for normal form of line\n const min = a1.min(a2); // used to determine if point is on line segment\n const max = a1.max(a2); // used to determine if point is on line segment\n const result = new Intersection(\"No Intersection\");\n\n // Start with Bezier using Bernstein polynomials for weighting functions:\n // (1-t^3)P1 + 3t(1-t)^2P2 + 3t^2(1-t)P3 + t^3P4\n //\n // Expand and collect terms to form linear combinations of original Bezier\n // controls. This ends up with a vector cubic in t:\n // (-P1+3P2-3P3+P4)t^3 + (3P1-6P2+3P3)t^2 + (-3P1+3P2)t + P1\n // /\\ /\\ /\\ /\\\n // || || || ||\n // c3 c2 c1 c0\n\n // Calculate the coefficients\n a = p1.multiply(-1);\n b = p2.multiply(3);\n c = p3.multiply(-3);\n d = a.add(b.add(c.add(p4)));\n const c3 = new Vector2D(d.x, d.y);\n\n a = p1.multiply(3);\n b = p2.multiply(-6);\n c = p3.multiply(3);\n d = a.add(b.add(c));\n const c2 = new Vector2D(d.x, d.y);\n\n a = p1.multiply(-3);\n b = p2.multiply(3);\n c = a.add(b);\n const c1 = new Vector2D(c.x, c.y);\n\n const c0 = new Vector2D(p1.x, p1.y);\n\n // Convert line to normal form: ax + by + c = 0\n // Find normal to line: negative inverse of original line's slope\n const n = new Vector2D(a1.y - a2.y, a2.x - a1.x);\n\n // Determine new c coefficient\n const cl = a1.x * a2.y - a2.x * a1.y;\n\n // ?Rotate each cubic coefficient using line for new coordinate system?\n // Find roots of rotated cubic\n const roots = new Polynomial(\n n.dot(c3),\n n.dot(c2),\n n.dot(c1),\n n.dot(c0) + cl\n ).getRoots();\n\n // Any roots in closed interval [0,1] are intersections on Bezier, but\n // might not be on the line segment.\n // Find intersections and calculate point coordinates\n for (const t of roots) {\n if (0 <= t && t <= 1) {\n // We're within the Bezier curve\n // Find point on Bezier\n const p5 = p1.lerp(p2, t);\n const p6 = p2.lerp(p3, t);\n const p7 = p3.lerp(p4, t);\n\n const p8 = p5.lerp(p6, t);\n const p9 = p6.lerp(p7, t);\n\n const p10 = p8.lerp(p9, t);\n\n // See if point is on line segment\n // Had to make special cases for vertical and horizontal lines due\n // to slight errors in calculation of p10\n if (a1.x === a2.x) {\n if (min.y <= p10.y && p10.y <= max.y) {\n result.status = \"Intersection\";\n result.appendPoint(p10);\n }\n }\n else if (a1.y === a2.y) {\n if (min.x <= p10.x && p10.x <= max.x) {\n result.status = \"Intersection\";\n result.appendPoint(p10);\n }\n }\n else if (min.x <= p10.x && p10.x <= max.x && min.y <= p10.y && p10.y <= max.y) {\n result.status = \"Intersection\";\n result.appendPoint(p10);\n }\n }\n }\n\n return result;\n }\n\n /**\n * intersectBezier3Polygon\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Polygon(p1, p2, p3, p4, points) {\n return Intersection.intersectBezier3Polyline(p1, p2, p3, p4, closePolygon(points));\n }\n\n /**\n * intersectBezier3Polyline\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Polyline(p1, p2, p3, p4, points) {\n const result = new Intersection(\"No Intersection\");\n const {length: len} = points;\n\n for (let i = 0; i < len - 1; i++) {\n const a1 = points[i];\n const a2 = points[i + 1];\n const inter = Intersection.intersectBezier3Line(p1, p2, p3, p4, a1, a2);\n\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectBezier3Rectangle\n *\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectBezier3Rectangle(p1, p2, p3, p4, r1, r2) {\n const min = r1.min(r2);\n const max = r1.max(r2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectBezier3Line(p1, p2, p3, p4, min, topRight);\n const inter2 = Intersection.intersectBezier3Line(p1, p2, p3, p4, topRight, max);\n const inter3 = Intersection.intersectBezier3Line(p1, p2, p3, p4, max, bottomLeft);\n const inter4 = Intersection.intersectBezier3Line(p1, p2, p3, p4, bottomLeft, min);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectCircleCircle\n *\n * @param {module:kld-intersections.Point2D} c1\n * @param {number} r1\n * @param {module:kld-intersections.Point2D} c2\n * @param {number} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectCircleCircle(c1, r1, c2, r2) {\n let result;\n\n // Determine minimum and maximum radii where circles can intersect\n const r_max = r1 + r2;\n const r_min = Math.abs(r1 - r2);\n\n // Determine actual distance between circle circles\n const c_dist = c1.distanceFrom(c2);\n\n if (c_dist > r_max) {\n result = new Intersection(\"Outside\");\n }\n else if (c_dist < r_min) {\n result = new Intersection(\"Inside\");\n }\n else {\n result = new Intersection(\"Intersection\");\n\n const a = (r1 * r1 - r2 * r2 + c_dist * c_dist) / (2 * c_dist);\n const h = Math.sqrt(r1 * r1 - a * a);\n const p = c1.lerp(c2, a / c_dist);\n const b = h / c_dist;\n\n result.points.push(\n new Point2D(\n p.x - b * (c2.y - c1.y),\n p.y + b * (c2.x - c1.x)\n )\n );\n result.points.push(\n new Point2D(\n p.x + b * (c2.y - c1.y),\n p.y - b * (c2.x - c1.x)\n )\n );\n }\n\n return result;\n }\n\n /**\n * intersectCircleEllipse\n *\n * @param {module:kld-intersections.Point2D} cc\n * @param {number} r\n * @param {module:kld-intersections.Point2D} ec\n * @param {number} rx\n * @param {number} ry\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectCircleEllipse(cc, r, ec, rx, ry) {\n return Intersection.intersectEllipseEllipse(cc, r, r, ec, rx, ry);\n }\n\n /**\n * intersectCircleLine\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} r\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectCircleLine(c, r, a1, a2) {\n let result;\n const a = (a2.x - a1.x) * (a2.x - a1.x) +\n (a2.y - a1.y) * (a2.y - a1.y);\n const b = 2 * ((a2.x - a1.x) * (a1.x - c.x) +\n (a2.y - a1.y) * (a1.y - c.y));\n const cc = c.x * c.x + c.y * c.y + a1.x * a1.x + a1.y * a1.y -\n 2 * (c.x * a1.x + c.y * a1.y) - r * r;\n const deter = b * b - 4 * a * cc;\n\n if (deter < 0) {\n result = new Intersection(\"Outside\");\n }\n else if (deter === 0) {\n result = new Intersection(\"Tangent\");\n // NOTE: should calculate this point\n }\n else {\n const e = Math.sqrt(deter);\n const u1 = (-b + e) / (2 * a);\n const u2 = (-b - e) / (2 * a);\n\n if ((u1 < 0 || u1 > 1) && (u2 < 0 || u2 > 1)) {\n if ((u1 < 0 && u2 < 0) || (u1 > 1 && u2 > 1)) {\n result = new Intersection(\"Outside\");\n }\n else {\n result = new Intersection(\"Inside\");\n }\n }\n else {\n result = new Intersection(\"Intersection\");\n\n if (0 <= u1 && u1 <= 1) {\n result.points.push(a1.lerp(a2, u1));\n }\n\n if (0 <= u2 && u2 <= 1) {\n result.points.push(a1.lerp(a2, u2));\n }\n }\n }\n\n return result;\n }\n\n /**\n * intersectCirclePolygon\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} r\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectCirclePolygon(c, r, points) {\n return Intersection.intersectCirclePolyline(c, r, closePolygon(points));\n }\n\n /**\n * intersectCirclePolyline\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} r\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectCirclePolyline(c, r, points) {\n const result = new Intersection(\"No Intersection\");\n const {length: len} = points;\n let inter;\n\n for (let i = 0; i < len - 1; i++) {\n const a1 = points[i];\n const a2 = points[i + 1];\n\n inter = Intersection.intersectCircleLine(c, r, a1, a2);\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n else {\n result.status = inter.status;\n }\n\n return result;\n }\n\n /**\n * intersectCircleRectangle\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} r\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectCircleRectangle(c, r, r1, r2) {\n const min = r1.min(r2);\n const max = r1.max(r2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectCircleLine(c, r, min, topRight);\n const inter2 = Intersection.intersectCircleLine(c, r, topRight, max);\n const inter3 = Intersection.intersectCircleLine(c, r, max, bottomLeft);\n const inter4 = Intersection.intersectCircleLine(c, r, bottomLeft, min);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n else {\n result.status = inter1.status;\n }\n\n return result;\n }\n\n /**\n * intersectEllipseEllipse\n *\n * This code is based on MgcIntr2DElpElp.cpp written by David Eberly. His\n * code along with many other excellent examples are avaiable at his site:\n * http://www.magic-software.com\n *\n * NOTE: Rotation will need to be added to this function\n *\n * @param {module:kld-intersections.Point2D} c1\n * @param {number} rx1\n * @param {number} ry1\n * @param {module:kld-intersections.Point2D} c2\n * @param {number} rx2\n * @param {number} ry2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectEllipseEllipse(c1, rx1, ry1, c2, rx2, ry2) {\n const a = [\n ry1 * ry1, 0, rx1 * rx1, -2 * ry1 * ry1 * c1.x, -2 * rx1 * rx1 * c1.y,\n ry1 * ry1 * c1.x * c1.x + rx1 * rx1 * c1.y * c1.y - rx1 * rx1 * ry1 * ry1\n ];\n const b = [\n ry2 * ry2, 0, rx2 * rx2, -2 * ry2 * ry2 * c2.x, -2 * rx2 * rx2 * c2.y,\n ry2 * ry2 * c2.x * c2.x + rx2 * rx2 * c2.y * c2.y - rx2 * rx2 * ry2 * ry2\n ];\n\n const yPoly = bezout(a, b);\n const yRoots = yPoly.getRoots();\n const epsilon = 1e-3;\n const norm0 = (a[0] * a[0] + 2 * a[1] * a[1] + a[2] * a[2]) * epsilon;\n const norm1 = (b[0] * b[0] + 2 * b[1] * b[1] + b[2] * b[2]) * epsilon;\n const result = new Intersection(\"No Intersection\");\n\n for (const yRoot of yRoots) {\n const xPoly = new Polynomial(\n a[0],\n a[3] + yRoot * a[1],\n a[5] + yRoot * (a[4] + yRoot * a[2])\n );\n const xRoots = xPoly.getRoots();\n\n for (const xRoot of xRoots) {\n let tst =\n (a[0] * xRoot + a[1] * yRoot + a[3]) * xRoot +\n (a[2] * yRoot + a[4]) * yRoot + a[5];\n if (Math.abs(tst) < norm0) {\n tst =\n (b[0] * xRoot + b[1] * yRoot + b[3]) * xRoot +\n (b[2] * yRoot + b[4]) * yRoot + b[5];\n if (Math.abs(tst) < norm1) {\n result.appendPoint(new Point2D(xRoot, yRoot));\n }\n }\n }\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectEllipseLine\n *\n * NOTE: Rotation will need to be added to this function\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} rx\n * @param {number} ry\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectEllipseLine(c, rx, ry, a1, a2) {\n let result;\n const orign = new Vector2D(a1.x, a1.y);\n const dir = Vector2D.fromPoints(a1, a2);\n const center = new Vector2D(c.x, c.y);\n const diff = orign.subtract(center);\n const mDir = new Vector2D(dir.x / (rx * rx), dir.y / (ry * ry));\n const mDiff = new Vector2D(diff.x / (rx * rx), diff.y / (ry * ry));\n\n const a = dir.dot(mDir);\n const b = dir.dot(mDiff);\n c = diff.dot(mDiff) - 1.0;\n const d = b * b - a * c;\n\n if (d < 0) {\n result = new Intersection(\"Outside\");\n }\n else if (d > 0) {\n const root = Math.sqrt(d); // eslint-disable-line no-shadow\n const t_a = (-b - root) / a;\n const t_b = (-b + root) / a;\n\n if ((t_a < 0 || 1 < t_a) && (t_b < 0 || 1 < t_b)) {\n if ((t_a < 0 && t_b < 0) || (t_a > 1 && t_b > 1)) {\n result = new Intersection(\"Outside\");\n }\n else {\n result = new Intersection(\"Inside\");\n }\n }\n else {\n result = new Intersection(\"Intersection\");\n if (0 <= t_a && t_a <= 1) {\n result.appendPoint(a1.lerp(a2, t_a));\n }\n if (0 <= t_b && t_b <= 1) {\n result.appendPoint(a1.lerp(a2, t_b));\n }\n }\n }\n else {\n const t = -b / a;\n\n if (0 <= t && t <= 1) {\n result = new Intersection(\"Intersection\");\n result.appendPoint(a1.lerp(a2, t));\n }\n else {\n result = new Intersection(\"Outside\");\n }\n }\n\n return result;\n }\n\n /**\n * intersectEllipsePolygon\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} rx\n * @param {number} ry\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectEllipsePolygon(c, rx, ry, points) {\n return Intersection.intersectEllipsePolyline(c, rx, ry, closePolygon(points));\n }\n\n /**\n * intersectEllipsePolyline\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} rx\n * @param {number} ry\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectEllipsePolyline(c, rx, ry, points) {\n const result = new Intersection(\"No Intersection\");\n const {length: len} = points;\n\n for (let i = 0; i < len - 1; i++) {\n const b1 = points[i];\n const b2 = points[i + 1];\n const inter = Intersection.intersectEllipseLine(c, rx, ry, b1, b2);\n\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectEllipseRectangle\n *\n * @param {module:kld-intersections.Point2D} c\n * @param {number} rx\n * @param {number} ry\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectEllipseRectangle(c, rx, ry, r1, r2) {\n const min = r1.min(r2);\n const max = r1.max(r2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectEllipseLine(c, rx, ry, min, topRight);\n const inter2 = Intersection.intersectEllipseLine(c, rx, ry, topRight, max);\n const inter3 = Intersection.intersectEllipseLine(c, rx, ry, max, bottomLeft);\n const inter4 = Intersection.intersectEllipseLine(c, rx, ry, bottomLeft, min);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectLineLine\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} b1\n * @param {module:kld-intersections.Point2D} b2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectLineLine(a1, a2, b1, b2) {\n let result;\n\n const ua_t = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x);\n const ub_t = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x);\n const u_b = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y);\n\n if (u_b !== 0) {\n const ua = ua_t / u_b;\n const ub = ub_t / u_b;\n\n if (0 <= ua && ua <= 1 && 0 <= ub && ub <= 1) {\n result = new Intersection(\"Intersection\");\n result.points.push(\n new Point2D(\n a1.x + ua * (a2.x - a1.x),\n a1.y + ua * (a2.y - a1.y)\n )\n );\n }\n else {\n result = new Intersection(\"No Intersection\");\n }\n }\n else if (ua_t === 0 || ub_t === 0) {\n result = new Intersection(\"Coincident\");\n }\n else {\n result = new Intersection(\"Parallel\");\n }\n\n return result;\n }\n\n /**\n * intersectLinePolygon\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectLinePolygon(a1, a2, points) {\n return Intersection.intersectLinePolyline(a1, a2, closePolygon(points));\n }\n\n /**\n * intersectLinePolyline\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {Array} points\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectLinePolyline(a1, a2, points) {\n const result = new Intersection(\"No Intersection\");\n const {length: len} = points;\n\n for (let i = 0; i < len - 1; i++) {\n const b1 = points[i];\n const b2 = points[i + 1];\n const inter = Intersection.intersectLineLine(a1, a2, b1, b2);\n\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectLineRectangle\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectLineRectangle(a1, a2, r1, r2) {\n const min = r1.min(r2);\n const max = r1.max(r2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectLineLine(min, topRight, a1, a2);\n const inter2 = Intersection.intersectLineLine(topRight, max, a1, a2);\n const inter3 = Intersection.intersectLineLine(max, bottomLeft, a1, a2);\n const inter4 = Intersection.intersectLineLine(bottomLeft, min, a1, a2);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectPolygonPolygon\n *\n * @param {Array} points1\n * @param {Array} points2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectPolygonPolygon(points1, points2) {\n return Intersection.intersectPolylinePolyline(closePolygon(points1), closePolygon(points2));\n }\n\n /**\n * intersectPolygonPolyline\n *\n * @param {Array} points1\n * @param {Array} points2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectPolygonPolyline(points1, points2) {\n return Intersection.intersectPolylinePolyline(closePolygon(points1), points2);\n }\n\n /**\n * intersectPolygonRectangle\n *\n * @param {Array} points\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectPolygonRectangle(points, r1, r2) {\n return Intersection.intersectPolylineRectangle(closePolygon(points), r1, r2);\n }\n\n /**\n * intersectPolylinePolyline\n *\n * @param {Array} points1\n * @param {Array} points2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectPolylinePolyline(points1, points2) {\n const result = new Intersection(\"No Intersection\");\n const {length: len} = points1;\n\n for (let i = 0; i < len - 1; i++) {\n const a1 = points1[i];\n const a2 = points1[i + 1];\n const inter = Intersection.intersectLinePolyline(a1, a2, points2);\n\n result.appendPoints(inter.points);\n }\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectPolylineRectangle\n *\n * @param {Array} points\n * @param {module:kld-intersections.Point2D} r1\n * @param {module:kld-intersections.Point2D} r2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectPolylineRectangle(points, r1, r2) {\n const min = r1.min(r2);\n const max = r1.max(r2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectLinePolyline(min, topRight, points);\n const inter2 = Intersection.intersectLinePolyline(topRight, max, points);\n const inter3 = Intersection.intersectLinePolyline(max, bottomLeft, points);\n const inter4 = Intersection.intersectLinePolyline(bottomLeft, min, points);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectRectangleRectangle\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} b1\n * @param {module:kld-intersections.Point2D} b2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectRectangleRectangle(a1, a2, b1, b2) {\n const min = a1.min(a2);\n const max = a1.max(a2);\n const topRight = new Point2D(max.x, min.y);\n const bottomLeft = new Point2D(min.x, max.y);\n\n const inter1 = Intersection.intersectLineRectangle(min, topRight, b1, b2);\n const inter2 = Intersection.intersectLineRectangle(topRight, max, b1, b2);\n const inter3 = Intersection.intersectLineRectangle(max, bottomLeft, b1, b2);\n const inter4 = Intersection.intersectLineRectangle(bottomLeft, min, b1, b2);\n\n const result = new Intersection(\"No Intersection\");\n\n result.appendPoints(inter1.points);\n result.appendPoints(inter2.points);\n result.appendPoints(inter3.points);\n result.appendPoints(inter4.points);\n\n if (result.points.length > 0) {\n result.status = \"Intersection\";\n }\n\n return result;\n }\n\n /**\n * intersectRayRay\n *\n * @param {module:kld-intersections.Point2D} a1\n * @param {module:kld-intersections.Point2D} a2\n * @param {module:kld-intersections.Point2D} b1\n * @param {module:kld-intersections.Point2D} b2\n * @returns {module:kld-intersections.Intersection}\n */\n static intersectRayRay(a1, a2, b1, b2) {\n let result;\n\n const ua_t = (b2.x - b1.x) * (a1.y - b1.y) - (b2.y - b1.y) * (a1.x - b1.x);\n const ub_t = (a2.x - a1.x) * (a1.y - b1.y) - (a2.y - a1.y) * (a1.x - b1.x);\n const u_b = (b2.y - b1.y) * (a2.x - a1.x) - (b2.x - b1.x) * (a2.y - a1.y);\n\n if (u_b !== 0) {\n const ua = ua_t / u_b;\n\n result = new Intersection(\"Intersection\");\n result.points.push(\n new Point2D(\n a1.x + ua * (a2.x - a1.x),\n a1.y + ua * (a2.y - a1.y)\n )\n );\n }\n else if (ua_t === 0 || ub_t === 0) {\n result = new Intersection(\"Coincident\");\n }\n else {\n result = new Intersection(\"Parallel\");\n }\n\n return result;\n }\n\n /**\n * appendPoint\n *\n * @param {module:kld-intersections.Point2D} point\n */\n appendPoint(point) {\n this.points.push(point);\n }\n\n\n /**\n * appendPoints\n *\n * @param {Array} points\n */\n appendPoints(points) {\n this.points = this.points.concat(points);\n }\n}\n\nexport default Intersection;\n","/* eslint-disable prefer-rest-params */\n/**\n * Shapes\n *\n * @copyright 2017, Kevin Lindsey\n * @module Shapes\n * @deprecated use ShapeInfo\n */\n\nimport ShapeInfo from \"./ShapeInfo.js\";\n\n/**\n * Build shapes for intersection\n */\nclass Shapes {\n /**\n * arc\n *\n * @deprecated use ShapeInfo.arc\n * @param {number} centerX\n * @param {number} centerY\n * @param {number} radiusX\n * @param {number} radiusY\n * @param {number} startRadians\n * @param {number} endRadians\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static arc(centerX, centerY, radiusX, radiusY, startRadians, endRadians) {\n return ShapeInfo.arc(...arguments);\n }\n\n /**\n * quadraticBezier\n *\n * @deprecated use ShapeInfo.quadraticBezier\n * @param {number} p1x\n * @param {number} p1y\n * @param {number} p2x\n * @param {number} p2y\n * @param {number} p3x\n * @param {number} p3y\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static quadraticBezier(p1x, p1y, p2x, p2y, p3x, p3y) {\n return ShapeInfo.quadraticBezier(...arguments);\n }\n\n /**\n * cubicBezier\n *\n * @deprecated use ShapeInfo.cubicBezier\n * @param {number} p1x\n * @param {number} p1y\n * @param {number} p2x\n * @param {number} p2y\n * @param {number} p3x\n * @param {number} p3y\n * @param {number} p4x\n * @param {number} p4y\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static cubicBezier(p1x, p1y, p2x, p2y, p3x, p3y, p4x, p4y) {\n return ShapeInfo.cubicBezier(...arguments);\n }\n\n /**\n * circle\n *\n * @deprecated use ShapeInfo.circle\n * @param {number} centerX\n * @param {number} centerY\n * @param {number} radius\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static circle(centerX, centerY, radius) {\n return ShapeInfo.circle(...arguments);\n }\n\n /**\n * ellipse\n *\n * @deprecated use ShapeInfo.ellipse\n * @param {number} centerX\n * @param {number} centerY\n * @param {number} radiusX\n * @param {number} radiusY\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static ellipse(centerX, centerY, radiusX, radiusY) {\n return ShapeInfo.ellipse(...arguments);\n }\n\n /**\n * line\n *\n * @deprecated use ShapeInfo.line\n * @param {number} p1x\n * @param {number} p1y\n * @param {number} p2x\n * @param {number} p2y\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static line(p1x, p1y, p2x, p2y) {\n return ShapeInfo.line(...arguments);\n }\n\n /**\n * path\n *\n * @deprecated use ShapeInfo.path\n * @param {string} pathData\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static path(pathData) {\n return ShapeInfo.path(...arguments);\n }\n\n /**\n * polygon\n *\n * @deprecated use ShapeInfo.polygon\n * @param {Array} coords\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static polygon(coords) {\n return ShapeInfo.polygon(...arguments);\n }\n\n /**\n * polyline\n *\n * @deprecated use ShapeInfo.polyline\n * @param {Array} coords\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static polyline(coords) {\n return ShapeInfo.polyline(...arguments);\n }\n\n /**\n * rectangle\n *\n * @deprecated use ShapeInfo.rectangle\n * @param {number} x\n * @param {number} y\n * @param {number} width\n * @param {number} height\n * @param {number} [rx]\n * @param {number} [ry]\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static rectangle(x, y, width, height, rx = 0, ry = 0) {\n return ShapeInfo.rectangle(...arguments);\n }\n}\n\nexport default Shapes;\n","/* eslint-disable prefer-rest-params */\n/**\n * AffineShapes\n *\n * @copyright 2017-2019, Kevin Lindsey\n * @module AffineShapes\n * @deprecated use ShapeInfo\n */\n\nimport ShapeInfo from \"./ShapeInfo.js\";\n\n/**\n * Build shapes for intersection\n */\nclass AffineShapes {\n /**\n * arc\n *\n * @deprecated use ShapeInfo.arc\n * @param {module:kld-intersections.Point2D} center\n * @param {number} radiusX\n * @param {number} radiusY\n * @param {number} startRadians\n * @param {number} endRadians\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static arc(center, radiusX, radiusY, startRadians, endRadians) {\n return ShapeInfo.arc(...arguments);\n }\n\n /**\n * quadraticBezier\n *\n * @deprecated use ShapeInfo.quadraticBezier\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static quadraticBezier(p1, p2, p3) {\n return ShapeInfo.quadraticBezier(...arguments);\n }\n\n /**\n * cubicBezier\n *\n * @deprecated use ShapeInfo.cubicBezier\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @param {module:kld-intersections.Point2D} p3\n * @param {module:kld-intersections.Point2D} p4\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static cubicBezier(p1, p2, p3, p4) {\n return ShapeInfo.cubicBezier(...arguments);\n }\n\n /**\n * circle\n *\n * @deprecated use ShapeInfo.circle\n * @param {module:kld-intersections.Point2D} center\n * @param {number} radius\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static circle(center, radius) {\n return ShapeInfo.circle(...arguments);\n }\n\n /**\n * ellipse\n *\n * @deprecated use ShapeInfo.ellipse\n * @param {module:kld-intersections.Point2D} center\n * @param {number} radiusX\n * @param {number} radiusY\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static ellipse(center, radiusX, radiusY) {\n return ShapeInfo.ellipse(...arguments);\n }\n\n /**\n * line\n *\n * @deprecated use ShapeInfo.line\n * @param {module:kld-intersections.Point2D} p1\n * @param {module:kld-intersections.Point2D} p2\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static line(p1, p2) {\n return ShapeInfo.line(...arguments);\n }\n\n /**\n * path\n *\n * @deprecated use ShapeInfo.path\n * @param {string} pathData\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static path(pathData) {\n return ShapeInfo.path(...arguments);\n }\n\n /**\n * polygon\n *\n * @deprecated use ShapeInfo.polygon\n * @param {Array} points\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static polygon(points) {\n return ShapeInfo.polygon(...arguments);\n }\n\n /**\n * polyline\n *\n * @deprecated use ShapeInfo.polyline\n * @param {Array} points\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static polyline(points) {\n return ShapeInfo.polyline(...arguments);\n }\n\n /**\n * rectangle\n *\n * @deprecated use ShapeInfo.rectangle\n * @param {module:kld-intersections.Point2D} topLeft\n * @param {module:kld-intersections.Vector2D} size\n * @param {number} [rx]\n * @param {number} [ry]\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static rectangle(topLeft, size, rx = 0, ry = 0) {\n return ShapeInfo.rectangle(...arguments);\n }\n}\n\nexport default AffineShapes;\n","/* eslint-disable no-restricted-syntax */\nimport {Point2D} from \"kld-affine\";\nimport ShapeInfo from \"./ShapeInfo.js\";\n\nclass SvgShapes {\n /**\n * circle\n *\n * @param {SVGCircleElement} circle\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static circle(circle) {\n if (circle instanceof SVGCircleElement === false) {\n throw new TypeError(`Expected SVGCircleElement, but found ${circle}`);\n }\n\n const center = new Point2D(\n circle.cx.baseVal.value,\n circle.cy.baseVal.value\n );\n const radius = circle.r.baseVal.value;\n\n return ShapeInfo.circle(center, radius);\n }\n\n /**\n * ellipse\n *\n * @param {SVGEllipseElement} ellipse\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static ellipse(ellipse) {\n if (ellipse instanceof SVGEllipseElement === false) {\n throw new TypeError(`Expected SVGEllipseElement, but found ${ellipse}`);\n }\n\n const center = new Point2D(\n ellipse.cx.baseVal.value,\n ellipse.cy.baseVal.value\n );\n const radiusX = ellipse.rx.baseVal.value;\n const radiusY = ellipse.ry.baseVal.value;\n\n return ShapeInfo.ellipse(center, radiusX, radiusY);\n }\n\n /**\n * line\n *\n * @param {SVGLineElement} line\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static line(line) {\n if (line instanceof SVGLineElement === false) {\n throw new TypeError(`Expected SVGLineElement, but found ${line}`);\n }\n\n const p1 = new Point2D(\n line.x1.baseVal.value,\n line.y1.baseVal.value\n );\n const p2 = new Point2D(\n line.x2.baseVal.value,\n line.y2.baseVal.value\n );\n\n return ShapeInfo.line(p1, p2);\n }\n\n /**\n * path\n *\n * @param {SVGPathElement} path\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static path(path) {\n if (path instanceof SVGPathElement === false) {\n throw new TypeError(`Expected SVGPathElement, but found ${path}`);\n }\n\n const pathData = path.getAttributeNS(null, \"d\");\n\n return ShapeInfo.path(pathData);\n }\n\n /**\n * polygon\n *\n * @param {SVGPolygonElement} polygon\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static polygon(polygon) {\n if (polygon instanceof SVGPolygonElement === false) {\n throw new TypeError(`Expected SVGPolygonElement, but found ${polygon}`);\n }\n\n const points = [];\n\n for (let i = 0; i < polygon.points.numberOfItems; i++) {\n const point = polygon.points.getItem(i);\n\n points.push(new Point2D(point.x, point.y));\n }\n\n return ShapeInfo.polygon(points);\n }\n\n /**\n * polyline\n *\n * @param {SVGPolylineElement} polyline\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static polyline(polyline) {\n if (polyline instanceof SVGPolylineElement === false) {\n throw new TypeError(`Expected SVGPolylineElement, but found ${polyline}`);\n }\n\n const points = [];\n\n for (let i = 0; i < polyline.points.numberOfItems; i++) {\n const point = polyline.points.getItem(i);\n\n points.push(new Point2D(point.x, point.y));\n }\n\n return ShapeInfo.polyline(points);\n }\n\n /**\n * rect\n *\n * @param {SVGRectElement} rect\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static rect(rect) {\n if (rect instanceof SVGRectElement === false) {\n throw new TypeError(`Expected SVGRectElement, but found ${rect}`);\n }\n\n return ShapeInfo.rectangle(\n rect.x.baseVal.value,\n rect.y.baseVal.value,\n rect.width.baseVal.value,\n rect.height.baseVal.value,\n rect.rx.baseVal.value,\n rect.ry.baseVal.value\n );\n }\n\n /**\n * element\n *\n * @param {SVGElement} element\n * @returns {module:kld-intersections.ShapeInfo}\n */\n static element(element) {\n if (element instanceof SVGElement === false) {\n throw new TypeError(`Expected SVGElement, but found ${element}`);\n }\n\n /* eslint-disable-next-line prefer-destructuring */\n const tagName = element.tagName;\n\n switch (tagName) {\n case \"circle\":\n return SvgShapes.circle(element);\n case \"ellipse\":\n return SvgShapes.ellipse(element);\n case \"line\":\n return SvgShapes.line(element);\n case \"path\":\n return SvgShapes.path(element);\n case \"polygon\":\n return SvgShapes.polygon(element);\n case \"polyline\":\n return SvgShapes.polyline(element);\n case \"rect\":\n return SvgShapes.rect(element);\n default:\n throw new TypeError(`Unrecognized element type: '${tagName}'`);\n }\n }\n}\n\nexport default SvgShapes;\n","/**\n *\n * IntersectionQuery.js\n *\n * @copyright 2017 Kevin Lindsey\n * @module IntersectionQuery\n */\n\nimport {Vector2D} from \"kld-affine\";\n\n/**\n * @namespace\n */\nconst IntersectionQuery = {};\n\n\n/**\n * pointInCircle\n *\n * @param {module:kld-intersections.Point2D} point\n * @param {module:kld-intersections.Point2D} center\n * @param {number} radius\n * @returns {boolean}\n */\nIntersectionQuery.pointInCircle = function(point, center, radius) {\n const v = Vector2D.fromPoints(center, point);\n\n return v.length() <= radius;\n};\n\n\n/**\n * pointInEllipse\n *\n * @param {module:kld-intersections.Point2D} point\n * @param {module:kld-intersections.Point2D} center\n * @param {number} radiusX\n * @param {number} radiusY\n * @returns {boolean}\n */\nIntersectionQuery.pointInEllipse = function(point, center, radiusX, radiusY) {\n const len = point.subtract(center);\n\n return (len.x * len.x) / (radiusX * radiusX) + (len.y * len.y) / (radiusY * radiusY) <= 1;\n};\n\n\n/**\n * pointInPolyline\n *\n * @param {module:kld-intersections.Point2D} point\n * @param {Array} points\n * @returns {boolean}\n */\nIntersectionQuery.pointInPolyline = function(point, points) {\n const {length: len} = points;\n let counter = 0;\n let xInter;\n\n let p1 = points[0];\n\n for (let i = 1; i <= len; i++) {\n const p2 = points[i % len];\n const minY = Math.min(p1.y, p2.y);\n const maxY = Math.max(p1.y, p2.y);\n const maxX = Math.max(p1.x, p2.x);\n\n if (p1.y !== p2.y && minY < point.y && point.y <= maxY && point.x <= maxX) {\n xInter = (point.y - p1.y) * (p2.x - p1.x) / (p2.y - p1.y) + p1.x;\n\n if (p1.x === p2.x || point.x <= xInter) {\n counter++;\n }\n }\n\n p1 = p2;\n }\n\n return (counter % 2 === 1);\n};\n\n\n/**\n * pointInPolyline\n *\n * @param {module:kld-intersections.Point2D} point\n * @param {Array} points\n */\nIntersectionQuery.pointInPolygon = IntersectionQuery.pointInPolyline;\n\n\n/**\n * pointInRectangle\n *\n * @param {module:kld-intersections.Point2D} point\n * @param {module:kld-intersections.Point2D} topLeft\n * @param {module:kld-intersections.Point2D} bottomRight\n * @returns {boolean}\n */\nIntersectionQuery.pointInRectangle = function(point, topLeft, bottomRight) {\n return (\n topLeft.x <= point.x && point.x < bottomRight.x &&\n topLeft.y <= point.y && point.y < bottomRight.y\n );\n};\n\n\nexport default IntersectionQuery;\n"],"names":["Point2D","x","y","this","constructor","that","scalar","precision","Math","abs","t","omt","dx","dy","sqrt","min","max","matrix","a","c","e","b","d","f","Vector2D","divide","length","cos","dot","radians","acos","cross","subtract","project","percent","multiply","p1","p2","Matrix2D","isIdentity","det1","Error","idet","det2","det3","tx","ty","scale","center","scaleX","scaleY","s","sin","cx","cy","vector","unit","tan","E","F","G","H","Q","R","a1","atan2","a2","theta","phi","translation","rotation","nonUniformScaling","rotation0","sign","NaN","IDENTITY","Polynomial","coefs","i","arguments","push","_variable","_s","poly","slice","isNaN","TypeError","result","d1","getDegree","d2","dmax","v1","v2","j","TOLERANCE","pop","err","reduce","pv","cv","divideEqualsScalar","signs","value","round","signString","ACCURACY","minValue","eval","maxValue","tmp1","log","tmp2","LN10","maxIterations","ceil","LN2","n","range","iter","delta","sum","st","os","ost","Array","MAX","h","trapezoid","interpolate","maxAbsX","rb","bounds","minX","maxX","an","m","v","nm","pow","map","coefSelectionFunc","find2Max","acc","bi","nearmax","max_nearmax_pos","negX","posX","reverse","res","boundsUpperRealFujiwara","urb","boundsLowerRealFujiwara","prev","curr","undersqrt","accum","ai","prev_a","pos","neg","maxRealPos","maxRealNeg","minComplex","derivative","simplifyEquals","getLinearRoot","getQuadraticRoots","getCubicRoots","getQuarticRoots","roots","RangeError","bisection","droots","getDerivative","getRootsInInterval","results","c3","c2","c1","offset","discrim","halfB","ZEROepsilon","zeroErrorEstimate","root","tmp","distance","angle","sqrt3","poly_d","derrt","getRoots","sort","dery","nr","maxabsX","guesses","minmax","df","newtonSecantBisection","concat","xs","ys","ns","diff","dift","ho","hp","w","den","x0","max_iterations","dfx","x_correction","x_new","y_atmin","y_atmax","prev_dfx","prev_x_ef_correction","min_correction_factor","isBounded","isEnoughCorrection","parser","o","k","l","$V0","$V1","$V2","$V3","$V4","$V5","$V6","$V7","$V8","$V9","$Va","$Vb","$Vc","$Vd","$Ve","$Vf","$Vg","$Vh","$Vi","$Vj","$Vk","$Vl","$Vm","$Vn","$Vo","$Vp","$Vq","$Vr","$Vs","$Vt","$Vu","$Vv","$Vw","$Vx","$Vy","$Vz","$VA","$VB","$VC","$VD","$VE","$VF","$VG","$VH","$VI","$VJ","$VK","$VL","$VM","$VN","$VO","$VP","$VQ","$VR","$VS","$VT","$VU","$VV","$VW","$VX","$VY","$VZ","$V_","$V$","$V01","$V11","$V21","$V31","$V41","$V51","$V61","$V71","$V81","$V91","$Va1","$Vb1","$Vc1","$Vd1","$Ve1","$Vf1","$Vg1","$Vh1","$Vi1","$Vj1","$Vk1","$Vl1","$Vm1","$Vn1","$Vo1","trace","yy","symbols_","terminals_","productions_","performAction","yytext","yyleng","yylineno","yystate","$$","_$","$0","$","type","name","steps","patterns","sequences","left","right","args","undefined","expression","assignTo","patternType","pattern","start","stop","elements","Infinity","substring","parseInt","parseFloat","table","defaultActions","parseError","str","hash","recoverable","error","parse","input","self","stack","tstack","lstack","recovering","EOF","call","lexer","Object","create","sharedState","prototype","hasOwnProperty","setInput","yylloc","yyloc","ranges","options","getPrototypeOf","symbol","preErrorSymbol","state","action","r","p","len","newState","expected","lex","token","yyval","errStr","TERROR","showPosition","join","text","match","line","loc","vstack","first_line","last_line","first_column","last_column","apply","_input","_more","_backtrack","done","matched","conditionStack","ch","unput","lines","split","substr","oldLines","more","reject","backtrack_lexer","less","pastInput","past","replace","upcomingInput","next","pre","test_match","indexed_rule","backup","matches","tempMatch","index","rules","_currentRules","flex","begin","condition","popState","conditions","topState","pushState","stateStackSize","yy_","$avoiding_name_collisions","YY_START","Parser","isObject","item","_typeof","isArray","list","lists","missing","every","maxLength","part","items","count","advance","comparator","delimiter","keys","values","entries","pairs","pair","key","assign","FAILURE_VALUE","obj","Transformer","symbolTable","functions","messages","verbose","StdLib","reference","message","level","source","structure","statements","statement","executeExpression","addError","binOp","typeName","operation","_this","seqValue","invokeFunction","object","array","sequence","sequenceSymbolTable","currentObject","step","executePattern","valueGenerator","transform","mapSymbolTable","patternSymbolTable","arg","element","executeObjectExpression","objectSymbolTable","executeArrayPattern","property","propertyPattern","referencedPattern","executeArrayPatternElement","executeArrayElementPattern","executeArrayElementGroupPattern","actualIndex","pushAssign","group","groupResults","elementSymbolTable","addWarning","PathLexeme","UNDEFINED","COMMAND","NUMBER","EOD","PathLexer","pathData","setPathData","_pathData","RegExp","$1","SyntaxError","PathParser","_lexer","_handler","beginParse","mode","lastToken","getNextToken","typeis","parameterCount","params","PARAMCOUNT","toUpperCase","handler","methodName","METHODNAME","endParse","A","C","L","M","S","T","V","Z","q","z","TWO_PI","PI","getArcParameters","startPoint","endPoint","rx","ry","arcFlag","sweepFlag","halfDiff","x1p","y1p","x1px1p","y1py1p","lambda","factor","rxrx","ryry","rxy1","ryx1","sq","normal","mid","add","cxp","cyp","xcr1","xcr2","ycr1","ycr2","theta1","angleBetween","deltaTheta","PathHandler","shapeCreator","shapes","firstX","firstY","lastX","lastY","lastCommand","shape","xAxisRotation","addShape","arcParameters","arc","x1","y1","x2","y2","cubicBezier","quadraticBezier","controlX","controlY","secondToLast","degree90","ShapeInfo","ARC","QUADRATIC_BEZIER","CUBIC_BEZIER","CIRCLE","ELLIPSE","LINE","PATH","POLYGON","POLYLINE","RECTANGLE","p1x","p1y","p2x","p2y","width","height","y0","x3","y3","segments","properties","transformType","data","transformer","execute","JSON","stringify","addFunction","setHandler","parseData","UNIT_X","isNullish","normalizeAngle","restrictPointsToArc","intersections","radiusX","radiusY","startRadians","endRadians","points","Intersection","startNormal","endNormal","fromPoints","appendPoint","status","closePolygon","copy","init","point","shape1","shape2","intersectPathShape","intersectArcShape","method","path","segment","inter","intersect","appendPoints","ellipse","a3","b1","b2","b3","c12","c11","c10","c22","c21","c20","g","xp","xRoots","yp","yRoots","checkRoots","xRoot","yRoot","b4","c23","c10x2","c10y2","c11x2","c11y2","c12x2","c12y2","c20x2","c20y2","c21x2","c21y2","c22x2","c22y2","c23x2","c23y2","p3","intersectBezier2Ellipse","ec","c0","cl","p4","lerp","p5","p6","intersectBezier2Polyline","intersectBezier2Line","r1","r2","topRight","bottomLeft","inter1","inter2","inter3","inter4","a4","c13","e0","e1","e2","e3","f0","f1","f2","f3","g0","g1","g2","g3","h0","h1","h2","h3","i0","i1","i2","i3","intersectBezier3Ellipse","p7","p8","p9","p10","intersectBezier3Polyline","intersectBezier3Line","r_max","r_min","c_dist","distanceFrom","cc","intersectEllipseEllipse","deter","u1","u2","intersectCirclePolyline","intersectCircleLine","rx1","ry1","rx2","ry2","AB","AC","AD","AE","AF","BC","BE","BF","CD","DE","DF","BFpDE","BEmCD","norm0","norm1","tst","orign","dir","mDir","mDiff","t_a","t_b","intersectEllipsePolyline","intersectEllipseLine","ua_t","ub_t","u_b","ua","ub","intersectLinePolyline","intersectLineLine","points1","points2","intersectPolylinePolyline","intersectPolylineRectangle","intersectLineRectangle","Shapes","centerX","centerY","p3x","p3y","p4x","p4y","radius","circle","coords","polygon","polyline","rectangle","AffineShapes","topLeft","size","SvgShapes","SVGCircleElement","baseVal","SVGEllipseElement","SVGLineElement","SVGPathElement","getAttributeNS","SVGPolygonElement","numberOfItems","getItem","SVGPolylineElement","rect","SVGRectElement","SVGElement","tagName","IntersectionQuery","xInter","counter","minY","maxY","pointInPolygon","pointInPolyline","pointInRectangle","bottomRight"],"mappings":"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CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,GAAGC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,IAAIC,EAAI,CAAC,EAAE,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,GAAG,G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AAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,C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"} \ No newline at end of file diff --git a/lib/Intersection.js b/lib/Intersection.js index 27cf9f9..85abde2 100644 --- a/lib/Intersection.js +++ b/lib/Intersection.js @@ -15,7 +15,7 @@ const UNIT_X = new Vector2D(1, 0); /** * @memberof module:kld-intersections.Intersection - * @param {*} o + * @param {any} o * @returns {boolean} */ function isNullish(o) { @@ -141,7 +141,6 @@ class Intersection { * init * * @param {string} status - * @returns {module:kld-intersections.Intersection} */ init(status) { this.status = status; @@ -313,8 +312,8 @@ class Intersection { checkRoots: for (const xRoot of xRoots) { if (0 <= xRoot && xRoot <= 1) { - for (let k = 0; k < yRoots.length; k++) { - if (Math.abs(xRoot - yRoots[k]) < TOLERANCE) { + for (const yRoot of yRoots) { + if (Math.abs(xRoot - yRoot) < TOLERANCE) { result.points.push(c22.multiply(s * s).add(c21.multiply(s).add(c20))); break checkRoots; } @@ -438,8 +437,8 @@ class Intersection { checkRoots: for (const xRoot of xRoots) { if (0 <= xRoot && xRoot <= 1) { - for (let k = 0; k < yRoots.length; k++) { - if (Math.abs(xRoot - yRoots[k]) < TOLERANCE) { + for (const yRoot of yRoots) { + if (Math.abs(xRoot - yRoot) < TOLERANCE) { result.points.push( c23.multiply(s * s * s).add(c22.multiply(s * s).add(c21.multiply(s).add(c20))) ); @@ -805,8 +804,8 @@ class Intersection { checkRoots: for (const xRoot of xRoots) { if (0 <= xRoot && xRoot <= 1) { - for (let k = 0; k < yRoots.length; k++) { - if (Math.abs(xRoot - yRoots[k]) < TOLERANCE) { + for (const yRoot of yRoots) { + if (Math.abs(xRoot - yRoot) < TOLERANCE) { result.points.push( c23.multiply(s * s * s).add(c22.multiply(s * s).add(c21.multiply(s).add(c20))) ); @@ -1329,24 +1328,24 @@ class Intersection { const norm1 = (b[0] * b[0] + 2 * b[1] * b[1] + b[2] * b[2]) * epsilon; const result = new Intersection("No Intersection"); - for (let y = 0; y < yRoots.length; y++) { + for (const yRoot of yRoots) { const xPoly = new Polynomial( a[0], - a[3] + yRoots[y] * a[1], - a[5] + yRoots[y] * (a[4] + yRoots[y] * a[2]) + a[3] + yRoot * a[1], + a[5] + yRoot * (a[4] + yRoot * a[2]) ); const xRoots = xPoly.getRoots(); - for (let x = 0; x < xRoots.length; x++) { + for (const xRoot of xRoots) { let tst = - (a[0] * xRoots[x] + a[1] * yRoots[y] + a[3]) * xRoots[x] + - (a[2] * yRoots[y] + a[4]) * yRoots[y] + a[5]; + (a[0] * xRoot + a[1] * yRoot + a[3]) * xRoot + + (a[2] * yRoot + a[4]) * yRoot + a[5]; if (Math.abs(tst) < norm0) { tst = - (b[0] * xRoots[x] + b[1] * yRoots[y] + b[3]) * xRoots[x] + - (b[2] * yRoots[y] + b[4]) * yRoots[y] + b[5]; + (b[0] * xRoot + b[1] * yRoot + b[3]) * xRoot + + (b[2] * yRoot + b[4]) * yRoot + b[5]; if (Math.abs(tst) < norm1) { - result.appendPoint(new Point2D(xRoots[x], yRoots[y])); + result.appendPoint(new Point2D(xRoot, yRoot)); } } } diff --git a/lib/IntersectionQuery.js b/lib/IntersectionQuery.js index ea2c814..79923c0 100644 --- a/lib/IntersectionQuery.js +++ b/lib/IntersectionQuery.js @@ -50,6 +50,7 @@ IntersectionQuery.pointInEllipse = function(point, center, radiusX, radiusY) { * * @param {module:kld-intersections.Point2D} point * @param {Array} points + * @returns {boolean} */ IntersectionQuery.pointInPolyline = function(point, points) { const {length: len} = points; diff --git a/lib/PathHandler.js b/lib/PathHandler.js index d608904..271cf24 100644 --- a/lib/PathHandler.js +++ b/lib/PathHandler.js @@ -20,6 +20,16 @@ function normalizeAngle(radians) { return normal < 0.0 ? normal + TWO_PI : normal; } +/** +* @typedef {GenericArray} EllipticalArc +* @property {number} 0 x +* @property {number} 1 y +* @property {number} 2 rx +* @property {number} 3 ry +* @property {number} 4 theta +* @property {number} 5 thetaWithDelta +*/ + /** * Based on the SVG 1.1 specification, Appendix F: Implementation Requirements, * Section F.6 "Elliptical arc implementation notes" @@ -32,7 +42,7 @@ function normalizeAngle(radians) { * @param {number} angle * @param {boolean} arcFlag * @param {boolean} sweepFlag - * @returns {Array} + * @returns {EllipticalArc} */ function getArcParameters(startPoint, endPoint, rx, ry, angle, arcFlag, sweepFlag) { angle = angle * Math.PI / 180; diff --git a/lib/ShapeInfo.js b/lib/ShapeInfo.js index 6ba0ebd..7343396 100644 --- a/lib/ShapeInfo.js +++ b/lib/ShapeInfo.js @@ -18,7 +18,7 @@ const degree90 = Math.PI * 0.5; export default class ShapeInfo { /** * @param {string} name - * @param {Array} args + * @param {GenericArray} args * @returns {module:kld-intersections.ShapeInfo} */ constructor(name, args) { @@ -121,7 +121,7 @@ export default class ShapeInfo { * Create a shape * * @param {string} type - * @param {Object} object + * @param {GenericArray} object * @param {Array} properties * @returns {ShapeInfo} */ diff --git a/package-lock.json b/package-lock.json index 48d7b90..e868824 100644 --- a/package-lock.json +++ b/package-lock.json @@ -5,28 +5,28 @@ "requires": true, "dependencies": { "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "version": "7.5.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", + "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", "dev": true, "requires": { "@babel/highlight": "^7.0.0" } }, "@babel/core": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.6.4.tgz", - "integrity": "sha512-Rm0HGw101GY8FTzpWSyRbki/jzq+/PkNQJ+nSulrdY6gFGOsNseCqD6KHRYe2E+EdzuBdr2pxCp6s4Uk6eJ+XQ==", + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.7.5.tgz", + "integrity": "sha512-M42+ScN4+1S9iB6f+TL7QBpoQETxbclx+KNoKJABghnKYE+fMzSGqst0BZJc8CpI625bwPwYgUyRvxZ+0mZzpw==", "dev": true, "requires": { "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.6.4", - "@babel/helpers": "^7.6.2", - "@babel/parser": "^7.6.4", - "@babel/template": "^7.6.0", - "@babel/traverse": "^7.6.3", - "@babel/types": "^7.6.3", - "convert-source-map": "^1.1.0", + "@babel/generator": "^7.7.4", + "@babel/helpers": "^7.7.4", + "@babel/parser": "^7.7.5", + "@babel/template": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4", + "convert-source-map": "^1.7.0", "debug": "^4.1.0", "json5": "^2.1.0", "lodash": "^4.17.13", @@ -35,138 +35,264 @@ "source-map": "^0.5.0" }, "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "@babel/parser": { + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.5.tgz", + "integrity": "sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==", + "dev": true + }, + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", "dev": true, "requires": { - "@babel/highlight": "^7.0.0" + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true } } }, "@babel/generator": { - "version": "7.6.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.6.4.tgz", - "integrity": "sha512-jsBuXkFoZxk0yWLyGI9llT9oiQ2FeTASmRFE32U+aaDTfoE92t78eroO7PTpU/OrYq38hlcDM6vbfLDaOLy+7w==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.7.4.tgz", + "integrity": "sha512-m5qo2WgdOJeyYngKImbkyQrnUN1mPceaG5BV+G0E3gWsa4l/jCSryWJdM2x8OuGAOyh+3d5pVYfZWCiNFtynxg==", "dev": true, "requires": { - "@babel/types": "^7.6.3", + "@babel/types": "^7.7.4", "jsesc": "^2.5.1", "lodash": "^4.17.13", "source-map": "^0.5.0" }, "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } } } }, "@babel/helper-annotate-as-pure": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", - "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.7.4.tgz", + "integrity": "sha512-2BQmQgECKzYKFPpiycoF9tlb5HA4lrVyAmLLVK177EcQAqjVLciUb2/R+n1boQ9y5ENV3uz2ZqiNw7QMBBw1Og==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.7.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", - "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.7.4.tgz", + "integrity": "sha512-Biq/d/WtvfftWZ9Uf39hbPBYDUo986m5Bb4zhkeYDGUllF43D+nUe5M6Vuo6/8JDK/0YX/uBdeoQpyaNhNugZQ==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-explode-assignable-expression": "^7.7.4", + "@babel/types": "^7.7.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-call-delegate": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz", - "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.7.4.tgz", + "integrity": "sha512-8JH9/B7J7tCYJ2PpWVpw9JhPuEVHztagNVuQAFBVFYluRMlpG7F1CgKEgGeL6KFqcsIa92ZYVj6DSc0XwmN1ZA==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.7.4.tgz", + "integrity": "sha512-Mt+jBKaxL0zfOIWrfQpnfYCN7/rS6GKx6CCCfuoqVVd+17R8zNDlzVYmIi9qyb2wOk002NsmSTDymkIygDUH7A==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.4.4", - "@babel/traverse": "^7.4.4", - "@babel/types": "^7.4.4" + "@babel/helper-regex": "^7.4.4", + "regexpu-core": "^4.6.0" } }, "@babel/helper-define-map": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.5.5.tgz", - "integrity": "sha512-fTfxx7i0B5NJqvUOBBGREnrqbTxRh7zinBANpZXAVDlsZxYdclDp467G1sQ8VZYMnAURY3RpBUAgOYT9GfzHBg==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.7.4.tgz", + "integrity": "sha512-v5LorqOa0nVQUvAUTUF3KPastvUt/HzByXNamKQ6RdJRTV7j8rLL+WB5C/MzzWAwOomxDhYFb1wLLxHqox86lg==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/types": "^7.5.5", + "@babel/helper-function-name": "^7.7.4", + "@babel/types": "^7.7.4", "lodash": "^4.17.13" }, "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } } } }, "@babel/helper-explode-assignable-expression": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", - "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.7.4.tgz", + "integrity": "sha512-2/SicuFrNSXsZNBxe5UGdLr+HZg+raWBLE9vC98bdYOKX/U6PY0mdGlYUJdtTDPSU0Lw0PNbKKDpwYHJLn2jLg==", "dev": true, "requires": { - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.7.4.tgz", + "integrity": "sha512-AnkGIdiBhEuiwdoMnKm7jfPfqItZhgRaZfMg1XX3bS25INOnLPjPG1Ppnajh8eqgt5kPJnfqrRHqFqmjKDZLzQ==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "^7.0.0", - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-get-function-arity": "^7.7.4", + "@babel/template": "^7.7.4", + "@babel/types": "^7.7.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.7.4.tgz", + "integrity": "sha512-QTGKEdCkjgzgfJ3bAyRwF4yyT3pg+vDgan8DSivq1eS0gwi+KGKE5x8kRcbeFTb/673mkO5SN1IZfmCfA5o+EA==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.7.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-hoist-variables": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz", - "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.7.4.tgz", + "integrity": "sha512-wQC4xyvc1Jo/FnLirL6CEgPgPCa8M74tOdjWpRhQYapz5JC7u3NYU1zCVoVAGCE3EaIP9T1A3iW0WLJ+reZlpQ==", "dev": true, "requires": { - "@babel/types": "^7.4.4" + "@babel/types": "^7.7.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-member-expression-to-functions": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.5.5.tgz", - "integrity": "sha512-5qZ3D1uMclSNqYcXqiHoA0meVdv+xUEex9em2fqMnrk/scphGlGgg66zjMrPJESPwrFJ6sbfFQYUSa0Mz7FabA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.7.4.tgz", + "integrity": "sha512-9KcA1X2E3OjXl/ykfMMInBK+uVdfIVakVe7W7Lg3wfXUNyS3Q1HWLFRwZIjhqiCGbslummPDnmb7vIekS0C1vw==", "dev": true, "requires": { - "@babel/types": "^7.5.5" + "@babel/types": "^7.7.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-module-imports": { @@ -179,34 +305,61 @@ } }, "@babel/helper-module-transforms": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.5.5.tgz", - "integrity": "sha512-jBeCvETKuJqeiaCdyaheF40aXnnU1+wkSiUs/IQg3tB85up1LyL8x77ClY8qJpuRJUcXQo+ZtdNESmZl4j56Pw==", + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.7.5.tgz", + "integrity": "sha512-A7pSxyJf1gN5qXVcidwLWydjftUN878VkalhXX5iQDuGyiGK3sOrrKKHF4/A4fwHtnsotv/NipwAeLzY4KQPvw==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/template": "^7.4.4", - "@babel/types": "^7.5.5", + "@babel/helper-module-imports": "^7.7.4", + "@babel/helper-simple-access": "^7.7.4", + "@babel/helper-split-export-declaration": "^7.7.4", + "@babel/template": "^7.7.4", + "@babel/types": "^7.7.4", "lodash": "^4.17.13" }, "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true + "@babel/helper-module-imports": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz", + "integrity": "sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ==", + "dev": true, + "requires": { + "@babel/types": "^7.7.4" + } + }, + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } } } }, "@babel/helper-optimise-call-expression": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", - "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.7.4.tgz", + "integrity": "sha512-VB7gWZ2fDkSuqW6b1AKXkJWO5NyNI3bFL/kK79/30moK57blr6NbH8xcl2XcKCwOmJosftWunZqfO84IGq3ZZg==", "dev": true, "requires": { - "@babel/types": "^7.0.0" + "@babel/types": "^7.7.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-plugin-utils": { @@ -222,87 +375,157 @@ "dev": true, "requires": { "lodash": "^4.17.13" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } } }, "@babel/helper-remap-async-to-generator": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", - "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.7.4.tgz", + "integrity": "sha512-Sk4xmtVdM9sA/jCI80f+KS+Md+ZHIpjuqmYPk1M7F/upHou5e4ReYmExAiu6PVe65BhJPZA2CY9x9k4BqE5klw==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-wrap-function": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/helper-annotate-as-pure": "^7.7.4", + "@babel/helper-wrap-function": "^7.7.4", + "@babel/template": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-replace-supers": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.5.5.tgz", - "integrity": "sha512-XvRFWrNnlsow2u7jXDuH4jDDctkxbS7gXssrP4q2nUD606ukXHRvydj346wmNg+zAgpFx4MWf4+usfC93bElJg==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.7.4.tgz", + "integrity": "sha512-pP0tfgg9hsZWo5ZboYGuBn/bbYT/hdLPVSS4NMmiRJdwWhP0IznPwN9AE1JwyGsjSPLC364I0Qh5p+EPkGPNpg==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "^7.5.5", - "@babel/helper-optimise-call-expression": "^7.0.0", - "@babel/traverse": "^7.5.5", - "@babel/types": "^7.5.5" + "@babel/helper-member-expression-to-functions": "^7.7.4", + "@babel/helper-optimise-call-expression": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-simple-access": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", - "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.7.4.tgz", + "integrity": "sha512-zK7THeEXfan7UlWsG2A6CI/L9jVnI5+xxKZOdej39Y0YtDYKx9raHk5F2EtK9K8DHRTihYwg20ADt9S36GR78A==", "dev": true, "requires": { - "@babel/template": "^7.1.0", - "@babel/types": "^7.0.0" + "@babel/template": "^7.7.4", + "@babel/types": "^7.7.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-split-export-declaration": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", - "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.7.4.tgz", + "integrity": "sha512-guAg1SXFcVr04Guk9eq0S4/rWS++sbmyqosJzVs8+1fH5NI+ZcmkaSkc7dmtAFbHFva6yRJnjW3yAcGxjueDug==", "dev": true, "requires": { - "@babel/types": "^7.4.4" + "@babel/types": "^7.7.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helper-wrap-function": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", - "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.7.4.tgz", + "integrity": "sha512-VsfzZt6wmsocOaVU0OokwrIytHND55yvyT4BPB9AIIgwr8+x7617hetdJTsuGwygN5RC6mxA9EJztTjuwm2ofg==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.1.0", - "@babel/template": "^7.1.0", - "@babel/traverse": "^7.1.0", - "@babel/types": "^7.2.0" + "@babel/helper-function-name": "^7.7.4", + "@babel/template": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/helpers": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.6.2.tgz", - "integrity": "sha512-3/bAUL8zZxYs1cdX2ilEE0WobqbCmKWr/889lf2SS0PpDcpEIY8pb1CCyz0pEcX3pEb+MCbks1jIokz2xLtGTA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.7.4.tgz", + "integrity": "sha512-ak5NGZGJ6LV85Q1Zc9gn2n+ayXOizryhjSUBTdu5ih1tlVCJeuQENzc4ItyCVhINVXvIT/ZQ4mheGIsfBkpskg==", "dev": true, "requires": { - "@babel/template": "^7.6.0", - "@babel/traverse": "^7.6.2", - "@babel/types": "^7.6.0" + "@babel/template": "^7.7.4", + "@babel/traverse": "^7.7.4", + "@babel/types": "^7.7.4" + }, + "dependencies": { + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.5.0.tgz", + "integrity": "sha512-7dV4eu9gBxoM0dAnj/BCFDW9LFU0zvTrkq0ugM7pnHEgguOEeOz1so2ZghEdzviYzQEED0r4EAgpsBChKy1TRQ==", "dev": true, "requires": { "chalk": "^2.0.0", @@ -317,392 +540,413 @@ "dev": true }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", - "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.7.4.tgz", + "integrity": "sha512-1ypyZvGRXriY/QP668+s8sFr2mqinhkRDMPSQLNghCQE+GAkFtp+wkHVvg2+Hdki8gwP+NFzJBJ/N1BfzCCDEw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0", - "@babel/plugin-syntax-async-generators": "^7.2.0" + "@babel/helper-remap-async-to-generator": "^7.7.4", + "@babel/plugin-syntax-async-generators": "^7.7.4" } }, "@babel/plugin-proposal-dynamic-import": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.5.0.tgz", - "integrity": "sha512-x/iMjggsKTFHYC6g11PL7Qy58IK8H5zqfm9e6hu4z1iH2IRyAp9u9dL80zA6R76yFovETFLKz2VJIC2iIPBuFw==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.7.4.tgz", + "integrity": "sha512-StH+nGAdO6qDB1l8sZ5UBV8AC3F2VW2I8Vfld73TMKyptMU9DY5YsJAS8U81+vEtxcH3Y/La0wG0btDrhpnhjQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-dynamic-import": "^7.2.0" + "@babel/plugin-syntax-dynamic-import": "^7.7.4" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", - "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.7.4.tgz", + "integrity": "sha512-wQvt3akcBTfLU/wYoqm/ws7YOAQKu8EVJEvHip/mzkNtjaclQoCCIqKXFP5/eyfnfbQCDV3OLRIK3mIVyXuZlw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-json-strings": "^7.2.0" + "@babel/plugin-syntax-json-strings": "^7.7.4" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.6.2.tgz", - "integrity": "sha512-LDBXlmADCsMZV1Y9OQwMc0MyGZ8Ta/zlD9N67BfQT8uYwkRswiu2hU6nJKrjrt/58aH/vqfQlR/9yId/7A2gWw==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.7.4.tgz", + "integrity": "sha512-rnpnZR3/iWKmiQyJ3LKJpSwLDcX/nSXhdLk4Aq/tXOApIvyu7qoabrige0ylsAJffaUC51WiBu209Q0U+86OWQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0" + "@babel/plugin-syntax-object-rest-spread": "^7.7.4" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.7.4.tgz", + "integrity": "sha512-DyM7U2bnsQerCQ+sejcTNZh8KQEUuC3ufzdnVnSiUv/qoGJp2Z3hanKL18KDhsBT5Wj6a7CMT5mdyCNJsEaA9w==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0" + "@babel/plugin-syntax-optional-catch-binding": "^7.7.4" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.6.2.tgz", - "integrity": "sha512-NxHETdmpeSCtiatMRYWVJo7266rrvAC3DTeG5exQBIH/fMIUK7ejDNznBbn3HQl/o9peymRRg7Yqkx6PdUXmMw==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.7.4.tgz", + "integrity": "sha512-cHgqHgYvffluZk85dJ02vloErm3Y6xtH+2noOBOJ2kXOJH3aVCDnj5eR/lVNlTnYu4hndAPJD3rTFjW3qee0PA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.6.0" + "@babel/helper-create-regexp-features-plugin": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-syntax-async-generators": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", - "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.7.4.tgz", + "integrity": "sha512-Li4+EjSpBgxcsmeEF8IFcfV/+yJGxHXDirDkEoyFjumuwbmfCVHUt0HuowD/iGM7OhIRyXJH9YXxqiH6N815+g==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-syntax-dynamic-import": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", - "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.7.4.tgz", + "integrity": "sha512-jHQW0vbRGvwQNgyVxwDh4yuXu4bH1f5/EICJLAhl1SblLs2CDhrsmCk+v5XLdE9wxtAFRyxx+P//Iw+a5L/tTg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-syntax-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", - "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.7.4.tgz", + "integrity": "sha512-QpGupahTQW1mHRXddMG5srgpHWqRLwJnJZKXTigB9RPFCCGbDGCgBeM/iC82ICXp414WeYx/tD54w7M2qRqTMg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-syntax-object-rest-spread": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", - "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.7.4.tgz", + "integrity": "sha512-mObR+r+KZq0XhRVS2BrBKBpr5jqrqzlPvS9C9vuOf5ilSwzloAl7RPWLrgKdWS6IreaVrjHxTjtyqFiOisaCwg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.7.4.tgz", + "integrity": "sha512-4ZSuzWgFxqHRE31Glu+fEr/MirNZOMYmD/0BhBWyLyOOQz/gTAl7QmWm2hX1QxEIXsr2vkdlwxIzTyiYRC4xcQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.7.4.tgz", + "integrity": "sha512-wdsOw0MvkL1UIgiQ/IFr3ETcfv1xb8RMM0H9wbiDyLaJFyiDg5oZvDLCXosIXmFeIlweML5iOBXAkqddkYNizg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", - "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.7.4.tgz", + "integrity": "sha512-zUXy3e8jBNPiffmqkHRNDdZM2r8DWhCB7HhcoyZjiK1TxYEluLHAvQuYnTT+ARqRpabWqy/NHkO6e3MsYB5YfA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.5.0.tgz", - "integrity": "sha512-mqvkzwIGkq0bEF1zLRRiTdjfomZJDV33AH3oQzHVGkI2VzEmXLpKKOBvEVaFZBJdN0XTyH38s9j/Kiqr68dggg==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.7.4.tgz", + "integrity": "sha512-zpUTZphp5nHokuy8yLlyafxCJ0rSlFoSHypTUWgpdwoDXWQcseaect7cJ8Ppk6nunOM6+5rPMkod4OYKPR5MUg==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-module-imports": "^7.7.4", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-remap-async-to-generator": "^7.1.0" + "@babel/helper-remap-async-to-generator": "^7.7.4" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz", + "integrity": "sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ==", + "dev": true, + "requires": { + "@babel/types": "^7.7.4" + } + }, + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", - "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.7.4.tgz", + "integrity": "sha512-kqtQzwtKcpPclHYjLK//3lH8OFsCDuDJBaFhVwf8kqdnF6MN4l618UDlcA7TfRs3FayrHj+svYnSX8MC9zmUyQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.6.3.tgz", - "integrity": "sha512-7hvrg75dubcO3ZI2rjYTzUrEuh1E9IyDEhhB6qfcooxhDA33xx2MasuLVgdxzcP6R/lipAC6n9ub9maNW6RKdw==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.7.4.tgz", + "integrity": "sha512-2VBe9u0G+fDt9B5OV5DQH4KBf5DoiNkwFKOz0TCvBWvdAN2rOykCTkrL+jTLxfCAm76l9Qo5OqL7HBOx2dWggg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", "lodash": "^4.17.13" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } } }, "@babel/plugin-transform-classes": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.5.5.tgz", - "integrity": "sha512-U2htCNK/6e9K7jGyJ++1p5XRU+LJjrwtoiVn9SzRlDT2KubcZ11OOwy3s24TjHxPgxNwonCYP7U2K51uVYCMDg==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.7.4.tgz", + "integrity": "sha512-sK1mjWat7K+buWRuImEzjNf68qrKcrddtpQo3swi9j7dUcG6y6R6+Di039QN2bD1dykeswlagupEmpOatFHHUg==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", - "@babel/helper-define-map": "^7.5.5", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-optimise-call-expression": "^7.0.0", + "@babel/helper-annotate-as-pure": "^7.7.4", + "@babel/helper-define-map": "^7.7.4", + "@babel/helper-function-name": "^7.7.4", + "@babel/helper-optimise-call-expression": "^7.7.4", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.5.5", - "@babel/helper-split-export-declaration": "^7.4.4", + "@babel/helper-replace-supers": "^7.7.4", + "@babel/helper-split-export-declaration": "^7.7.4", "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", - "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.7.4.tgz", + "integrity": "sha512-bSNsOsZnlpLLyQew35rl4Fma3yKWqK3ImWMSC/Nc+6nGjC9s5NFWAer1YQ899/6s9HxO2zQC1WoFNfkOqRkqRQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-destructuring": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.6.0.tgz", - "integrity": "sha512-2bGIS5P1v4+sWTCnKNDZDxbGvEqi0ijeqM/YqHtVGrvG2y0ySgnEEhXErvE9dA0bnIzY9bIzdFK0jFA46ASIIQ==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.7.4.tgz", + "integrity": "sha512-4jFMXI1Cu2aXbcXXl8Lr6YubCn6Oc7k9lLsu8v61TZh+1jny2BWmdtvY9zSUlLdGUvcy9DMAWyZEOqjsbeg/wA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.6.2.tgz", - "integrity": "sha512-KGKT9aqKV+9YMZSkowzYoYEiHqgaDhGmPNZlZxX6UeHC4z30nC1J9IrZuGqbYFB1jaIGdv91ujpze0exiVK8bA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.7.4.tgz", + "integrity": "sha512-mk0cH1zyMa/XHeb6LOTXTbG7uIJ8Rrjlzu91pUx/KS3JpcgaTDwMS8kM+ar8SLOvlL2Lofi4CGBAjCo3a2x+lw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.6.0" + "@babel/helper-create-regexp-features-plugin": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.5.0.tgz", - "integrity": "sha512-igcziksHizyQPlX9gfSjHkE2wmoCH3evvD2qR5w29/Dk0SMKE/eOI7f1HhBdNhR/zxJDqrgpoDTq5YSLH/XMsQ==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.7.4.tgz", + "integrity": "sha512-g1y4/G6xGWMD85Tlft5XedGaZBCIVN+/P0bs6eabmcPP9egFleMAo65OOjlhcz1njpwagyY3t0nsQC9oTFegJA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", - "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.7.4.tgz", + "integrity": "sha512-MCqiLfCKm6KEA1dglf6Uqq1ElDIZwFuzz1WH5mTf8k2uQSxEJMbOIEh7IZv7uichr7PMfi5YVSrr1vz+ipp7AQ==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "^7.1.0", + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.7.4", "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-for-of": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", - "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.7.4.tgz", + "integrity": "sha512-zZ1fD1B8keYtEcKF+M1TROfeHTKnijcVQm0yO/Yu1f7qoDoxEIc/+GX6Go430Bg84eM/xwPFp0+h4EbZg7epAA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-function-name": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", - "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.7.4.tgz", + "integrity": "sha512-E/x09TvjHNhsULs2IusN+aJNRV5zKwxu1cpirZyRPw+FyyIKEHPXTsadj48bVpc1R5Qq1B5ZkzumuFLytnbT6g==", "dev": true, "requires": { - "@babel/helper-function-name": "^7.1.0", + "@babel/helper-function-name": "^7.7.4", "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", - "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.7.4.tgz", + "integrity": "sha512-X2MSV7LfJFm4aZfxd0yLVFrEXAgPqYoDG53Br/tCKiKYfX0MjVjQeWPIhPHHsCqzwQANq+FLN786fF5rgLS+gw==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-member-expression-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.2.0.tgz", - "integrity": "sha512-HiU3zKkSU6scTidmnFJ0bMX8hz5ixC93b4MHMiYebmk2lUVNGOboPsqQvx5LzooihijUoLR/v7Nc1rbBtnc7FA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.7.4.tgz", + "integrity": "sha512-9VMwMO7i69LHTesL0RdGy93JU6a+qOPuvB4F4d0kR0zyVjJRVJRaoaGjhtki6SzQUu8yen/vxPKN6CWnCUw6bA==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.5.0.tgz", - "integrity": "sha512-n20UsQMKnWrltocZZm24cRURxQnWIvsABPJlw/fvoy9c6AgHZzoelAIzajDHAQrDpuKFFPPcFGd7ChsYuIUMpg==", + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.7.5.tgz", + "integrity": "sha512-CT57FG4A2ZUNU1v+HdvDSDrjNWBrtCmSH6YbbgN3Lrf0Di/q/lWRxZrE72p3+HCCz9UjfZOEBdphgC0nzOS6DQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-module-transforms": "^7.7.5", "@babel/helper-plugin-utils": "^7.0.0", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.6.0.tgz", - "integrity": "sha512-Ma93Ix95PNSEngqomy5LSBMAQvYKVe3dy+JlVJSHEXZR5ASL9lQBedMiCyVtmTLraIDVRE3ZjTZvmXXD2Ozw3g==", + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.7.5.tgz", + "integrity": "sha512-9Cq4zTFExwFhQI6MT1aFxgqhIsMWQWDVwOgLzl7PTWJHsNaqFvklAU+Oz6AQLAS0dJKTwZSOCo20INwktxpi3Q==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.4.4", + "@babel/helper-module-transforms": "^7.7.5", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-simple-access": "^7.1.0", + "@babel/helper-simple-access": "^7.7.4", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.5.0.tgz", - "integrity": "sha512-Q2m56tyoQWmuNGxEtUyeEkm6qJYFqs4c+XyXH5RAuYxObRNz9Zgj/1g2GMnjYp2EUyEy7YTrxliGCXzecl/vJg==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.7.4.tgz", + "integrity": "sha512-y2c96hmcsUi6LrMqvmNDPBBiGCiQu0aYqpHatVVu6kD4mFEXKjyNxd/drc18XXAf9dv7UXjrZwBVmTTGaGP8iw==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "^7.4.4", + "@babel/helper-hoist-variables": "^7.7.4", "@babel/helper-plugin-utils": "^7.0.0", "babel-plugin-dynamic-import-node": "^2.3.0" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", - "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.7.4.tgz", + "integrity": "sha512-u2B8TIi0qZI4j8q4C51ktfO7E3cQ0qnaXFI1/OXITordD40tt17g/sXqgNNCcMTcBFKrUPcGDx+TBJuZxLx7tw==", "dev": true, "requires": { - "@babel/helper-module-transforms": "^7.1.0", + "@babel/helper-module-transforms": "^7.7.4", "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.6.3.tgz", - "integrity": "sha512-jTkk7/uE6H2s5w6VlMHeWuH+Pcy2lmdwFoeWCVnvIrDUnB5gQqTVI8WfmEAhF2CDEarGrknZcmSFg1+bkfCoSw==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.7.4.tgz", + "integrity": "sha512-jBUkiqLKvUWpv9GLSuHUFYdmHg0ujC1JEYoZUfeOOfNydZXp1sXObgyPatpcwjWgsdBGsagWW0cdJpX/DO2jMw==", "dev": true, "requires": { - "regexpu-core": "^4.6.0" + "@babel/helper-create-regexp-features-plugin": "^7.7.4" } }, "@babel/plugin-transform-new-target": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", - "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.7.4.tgz", + "integrity": "sha512-CnPRiNtOG1vRodnsyGX37bHQleHE14B9dnnlgSeEs3ek3fHN1A1SScglTCg1sfbe7sRQ2BUcpgpTpWSfMKz3gg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-object-super": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.5.5.tgz", - "integrity": "sha512-un1zJQAhSosGFBduPgN/YFNvWVpRuHKU7IHBglLoLZsGmruJPOo6pbInneflUdmq7YvSVqhpPs5zdBvLnteltQ==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.7.4.tgz", + "integrity": "sha512-ho+dAEhC2aRnff2JCA0SAK7V2R62zJd/7dmtoe7MHcso4C2mS+vZjn1Pb1pCVZvJs1mgsvv5+7sT+m3Bysb6eg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-replace-supers": "^7.5.5" + "@babel/helper-replace-supers": "^7.7.4" } }, "@babel/plugin-transform-parameters": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", - "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.7.4.tgz", + "integrity": "sha512-VJwhVePWPa0DqE9vcfptaJSzNDKrWU/4FbYCjZERtmqEs05g3UMXnYMZoXja7JAJ7Y7sPZipwm/pGApZt7wHlw==", "dev": true, "requires": { - "@babel/helper-call-delegate": "^7.4.4", - "@babel/helper-get-function-arity": "^7.0.0", + "@babel/helper-call-delegate": "^7.7.4", + "@babel/helper-get-function-arity": "^7.7.4", "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-property-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.2.0.tgz", - "integrity": "sha512-9q7Dbk4RhgcLp8ebduOpCbtjh7C0itoLYHXd9ueASKAG/is5PQtMR5VJGka9NKqGhYEGn5ITahd4h9QeBMylWQ==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.7.4.tgz", + "integrity": "sha512-MatJhlC4iHsIskWYyawl53KuHrt+kALSADLQQ/HkhTjX954fkxIEh4q5slL4oRAnsm/eDoZ4q0CIZpcqBuxhJQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-regenerator": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz", - "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==", + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.7.5.tgz", + "integrity": "sha512-/8I8tPvX2FkuEyWbjRCt4qTAgZK0DVy8QRguhA524UH48RfGJy94On2ri+dCuwOpcerPRl9O4ebQkRcVzIaGBw==", "dev": true, "requires": { "regenerator-transform": "^0.14.0" } }, "@babel/plugin-transform-reserved-words": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.2.0.tgz", - "integrity": "sha512-fz43fqW8E1tAB3DKF19/vxbpib1fuyCwSPE418ge5ZxILnBhWyhtPgz8eh1RCGGJlwvksHkyxMxh0eenFi+kFw==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.7.4.tgz", + "integrity": "sha512-OrPiUB5s5XvkCO1lS7D8ZtHcswIC57j62acAnJZKqGGnHP+TIc/ljQSrgdX/QyOTdEK5COAhuc820Hi1q2UgLQ==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", - "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.7.4.tgz", + "integrity": "sha512-q+suddWRfIcnyG5YiDP58sT65AJDZSUhXQDZE3r04AuqD6d/XLaQPPXSBzP2zGerkgBivqtQm9XKGLuHqBID6Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-spread": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.6.2.tgz", - "integrity": "sha512-DpSvPFryKdK1x+EDJYCy28nmAaIMdxmhot62jAXF/o99iA33Zj2Lmcp3vDmz+MUh0LNYVPvfj5iC3feb3/+PFg==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.7.4.tgz", + "integrity": "sha512-8OSs0FLe5/80cndziPlg4R0K6HcWSM0zyNhHhLsmw/Nc5MaA49cAsnoJ/t/YZf8qkG7fD+UjTRaApVDB526d7Q==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", - "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.7.4.tgz", + "integrity": "sha512-Ls2NASyL6qtVe1H1hXts9yuEeONV2TJZmplLONkMPUG158CtmnrzW5Q5teibM5UVOFjG0D3IC5mzXR6pPpUY7A==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0", @@ -710,165 +954,200 @@ } }, "@babel/plugin-transform-template-literals": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", - "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.7.4.tgz", + "integrity": "sha512-sA+KxLwF3QwGj5abMHkHgshp9+rRz+oY9uoRil4CyLtgEuE/88dpkeWgNk5qKVsJE9iSfly3nvHapdRiIS2wnQ==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "^7.0.0", + "@babel/helper-annotate-as-pure": "^7.7.4", "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", - "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.7.4.tgz", + "integrity": "sha512-KQPUQ/7mqe2m0B8VecdyaW5XcQYaePyl9R7IsKd+irzj6jvbhoGnRE+M0aNkyAzI07VfUQ9266L5xMARitV3wg==", "dev": true, "requires": { "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.6.2.tgz", - "integrity": "sha512-orZI6cWlR3nk2YmYdb0gImrgCUwb5cBUwjf6Ks6dvNVvXERkwtJWOQaEOjPiu0Gu1Tq6Yq/hruCZZOOi9F34Dw==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.7.4.tgz", + "integrity": "sha512-N77UUIV+WCvE+5yHw+oks3m18/umd7y392Zv7mYTpFqHtkpcc+QUz+gLJNTWVlWROIWeLqY0f3OjZxV5TcXnRw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "^7.0.0", - "@babel/helper-regex": "^7.4.4", - "regexpu-core": "^4.6.0" + "@babel/helper-create-regexp-features-plugin": "^7.7.4", + "@babel/helper-plugin-utils": "^7.0.0" } }, "@babel/preset-env": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.6.3.tgz", - "integrity": "sha512-CWQkn7EVnwzlOdR5NOm2+pfgSNEZmvGjOhlCHBDq0J8/EStr+G+FvPEiz9B56dR6MoiUFjXhfE4hjLoAKKJtIQ==", + "version": "7.7.6", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.7.6.tgz", + "integrity": "sha512-k5hO17iF/Q7tR9Jv8PdNBZWYW6RofxhnxKjBMc0nG4JTaWvOTiPoO/RLFwAKcA4FpmuBFm6jkoqaRJLGi0zdaQ==", "dev": true, "requires": { - "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-module-imports": "^7.7.4", "@babel/helper-plugin-utils": "^7.0.0", - "@babel/plugin-proposal-async-generator-functions": "^7.2.0", - "@babel/plugin-proposal-dynamic-import": "^7.5.0", - "@babel/plugin-proposal-json-strings": "^7.2.0", - "@babel/plugin-proposal-object-rest-spread": "^7.6.2", - "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "^7.6.2", - "@babel/plugin-syntax-async-generators": "^7.2.0", - "@babel/plugin-syntax-dynamic-import": "^7.2.0", - "@babel/plugin-syntax-json-strings": "^7.2.0", - "@babel/plugin-syntax-object-rest-spread": "^7.2.0", - "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", - "@babel/plugin-transform-arrow-functions": "^7.2.0", - "@babel/plugin-transform-async-to-generator": "^7.5.0", - "@babel/plugin-transform-block-scoped-functions": "^7.2.0", - "@babel/plugin-transform-block-scoping": "^7.6.3", - "@babel/plugin-transform-classes": "^7.5.5", - "@babel/plugin-transform-computed-properties": "^7.2.0", - "@babel/plugin-transform-destructuring": "^7.6.0", - "@babel/plugin-transform-dotall-regex": "^7.6.2", - "@babel/plugin-transform-duplicate-keys": "^7.5.0", - "@babel/plugin-transform-exponentiation-operator": "^7.2.0", - "@babel/plugin-transform-for-of": "^7.4.4", - "@babel/plugin-transform-function-name": "^7.4.4", - "@babel/plugin-transform-literals": "^7.2.0", - "@babel/plugin-transform-member-expression-literals": "^7.2.0", - "@babel/plugin-transform-modules-amd": "^7.5.0", - "@babel/plugin-transform-modules-commonjs": "^7.6.0", - "@babel/plugin-transform-modules-systemjs": "^7.5.0", - "@babel/plugin-transform-modules-umd": "^7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "^7.6.3", - "@babel/plugin-transform-new-target": "^7.4.4", - "@babel/plugin-transform-object-super": "^7.5.5", - "@babel/plugin-transform-parameters": "^7.4.4", - "@babel/plugin-transform-property-literals": "^7.2.0", - "@babel/plugin-transform-regenerator": "^7.4.5", - "@babel/plugin-transform-reserved-words": "^7.2.0", - "@babel/plugin-transform-shorthand-properties": "^7.2.0", - "@babel/plugin-transform-spread": "^7.6.2", - "@babel/plugin-transform-sticky-regex": "^7.2.0", - "@babel/plugin-transform-template-literals": "^7.4.4", - "@babel/plugin-transform-typeof-symbol": "^7.2.0", - "@babel/plugin-transform-unicode-regex": "^7.6.2", - "@babel/types": "^7.6.3", + "@babel/plugin-proposal-async-generator-functions": "^7.7.4", + "@babel/plugin-proposal-dynamic-import": "^7.7.4", + "@babel/plugin-proposal-json-strings": "^7.7.4", + "@babel/plugin-proposal-object-rest-spread": "^7.7.4", + "@babel/plugin-proposal-optional-catch-binding": "^7.7.4", + "@babel/plugin-proposal-unicode-property-regex": "^7.7.4", + "@babel/plugin-syntax-async-generators": "^7.7.4", + "@babel/plugin-syntax-dynamic-import": "^7.7.4", + "@babel/plugin-syntax-json-strings": "^7.7.4", + "@babel/plugin-syntax-object-rest-spread": "^7.7.4", + "@babel/plugin-syntax-optional-catch-binding": "^7.7.4", + "@babel/plugin-syntax-top-level-await": "^7.7.4", + "@babel/plugin-transform-arrow-functions": "^7.7.4", + "@babel/plugin-transform-async-to-generator": "^7.7.4", + "@babel/plugin-transform-block-scoped-functions": "^7.7.4", + "@babel/plugin-transform-block-scoping": "^7.7.4", + "@babel/plugin-transform-classes": "^7.7.4", + "@babel/plugin-transform-computed-properties": "^7.7.4", + "@babel/plugin-transform-destructuring": "^7.7.4", + "@babel/plugin-transform-dotall-regex": "^7.7.4", + "@babel/plugin-transform-duplicate-keys": "^7.7.4", + "@babel/plugin-transform-exponentiation-operator": "^7.7.4", + "@babel/plugin-transform-for-of": "^7.7.4", + "@babel/plugin-transform-function-name": "^7.7.4", + "@babel/plugin-transform-literals": "^7.7.4", + "@babel/plugin-transform-member-expression-literals": "^7.7.4", + "@babel/plugin-transform-modules-amd": "^7.7.5", + "@babel/plugin-transform-modules-commonjs": "^7.7.5", + "@babel/plugin-transform-modules-systemjs": "^7.7.4", + "@babel/plugin-transform-modules-umd": "^7.7.4", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.7.4", + "@babel/plugin-transform-new-target": "^7.7.4", + "@babel/plugin-transform-object-super": "^7.7.4", + "@babel/plugin-transform-parameters": "^7.7.4", + "@babel/plugin-transform-property-literals": "^7.7.4", + "@babel/plugin-transform-regenerator": "^7.7.5", + "@babel/plugin-transform-reserved-words": "^7.7.4", + "@babel/plugin-transform-shorthand-properties": "^7.7.4", + "@babel/plugin-transform-spread": "^7.7.4", + "@babel/plugin-transform-sticky-regex": "^7.7.4", + "@babel/plugin-transform-template-literals": "^7.7.4", + "@babel/plugin-transform-typeof-symbol": "^7.7.4", + "@babel/plugin-transform-unicode-regex": "^7.7.4", + "@babel/types": "^7.7.4", "browserslist": "^4.6.0", - "core-js-compat": "^3.1.1", + "core-js-compat": "^3.4.7", "invariant": "^2.2.2", "js-levenshtein": "^1.1.3", "semver": "^5.5.0" + }, + "dependencies": { + "@babel/helper-module-imports": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.7.4.tgz", + "integrity": "sha512-dGcrX6K9l8258WFjyDLJwuVKxR4XZfU0/vTUgOQYWEnRD8mgr+p4d6fCUMq/ys0h4CCt/S5JhbvtyErjWouAUQ==", + "dev": true, + "requires": { + "@babel/types": "^7.7.4" + } + }, + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/register": { - "version": "7.6.2", - "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.6.2.tgz", - "integrity": "sha512-xgZk2LRZvt6i2SAUWxc7ellk4+OYRgS3Zpsnr13nMS1Qo25w21Uu8o6vTOAqNaxiqrnv30KTYzh9YWY2k21CeQ==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/register/-/register-7.7.4.tgz", + "integrity": "sha512-/fmONZqL6ZMl9KJUYajetCrID6m0xmL4odX7v+Xvoxcv0DdbP/oO0TWIeLUCHqczQ6L6njDMqmqHFy2cp3FFsA==", "dev": true, "requires": { "find-cache-dir": "^2.0.0", "lodash": "^4.17.13", - "mkdirp": "^0.5.1", + "make-dir": "^2.1.0", "pirates": "^4.0.0", - "source-map-support": "^0.5.9" - }, - "dependencies": { - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - } + "source-map-support": "^0.5.16" } }, "@babel/runtime": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.6.3.tgz", - "integrity": "sha512-kq6anf9JGjW8Nt5rYfEuGRaEAaH1mkv3Bbu6rYvLOpPh/RusSJXuKPEAoZ7L7gybZkchE8+NV5g9vKF4AGAtsA==", + "version": "7.7.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.7.6.tgz", + "integrity": "sha512-BWAJxpNVa0QlE5gZdWjSxXtemZyZ9RmrmVozxt3NUXeZhVIJ5ANyqmMc0JDrivBZyxUuQvFxlvH4OWWOogGfUw==", "dev": true, "requires": { "regenerator-runtime": "^0.13.2" } }, "@babel/template": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.6.0.tgz", - "integrity": "sha512-5AEH2EXD8euCk446b7edmgFdub/qfH1SN6Nii3+fyXP807QRx9Q73A2N5hNwRRslC2H9sNzaFhsPubkS4L8oNQ==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.7.4.tgz", + "integrity": "sha512-qUzihgVPguAzXCK7WXw8pqs6cEwi54s3E+HrejlkuWO6ivMKx9hZl3Y2fSXp9i5HgyWmj7RKP+ulaYnKM4yYxw==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "@babel/parser": "^7.6.0", - "@babel/types": "^7.6.0" + "@babel/parser": "^7.7.4", + "@babel/types": "^7.7.4" + }, + "dependencies": { + "@babel/parser": { + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.5.tgz", + "integrity": "sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==", + "dev": true + }, + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", + "dev": true, + "requires": { + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" + } + } } }, "@babel/traverse": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.6.3.tgz", - "integrity": "sha512-unn7P4LGsijIxaAJo/wpoU11zN+2IaClkQAxcJWBNCMS6cmVh802IyLHNkAjQ0iYnRS3nnxk5O3fuXW28IMxTw==", + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.7.4.tgz", + "integrity": "sha512-P1L58hQyupn8+ezVA2z5KBm4/Zr4lCC8dwKCMYzsa5jFMDMQAzaBNy9W5VjB+KAmBjb40U7a/H6ao+Xo+9saIw==", "dev": true, "requires": { "@babel/code-frame": "^7.5.5", - "@babel/generator": "^7.6.3", - "@babel/helper-function-name": "^7.1.0", - "@babel/helper-split-export-declaration": "^7.4.4", - "@babel/parser": "^7.6.3", - "@babel/types": "^7.6.3", + "@babel/generator": "^7.7.4", + "@babel/helper-function-name": "^7.7.4", + "@babel/helper-split-export-declaration": "^7.7.4", + "@babel/parser": "^7.7.4", + "@babel/types": "^7.7.4", "debug": "^4.1.0", "globals": "^11.1.0", "lodash": "^4.17.13" }, "dependencies": { - "@babel/code-frame": { - "version": "7.5.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.5.5.tgz", - "integrity": "sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw==", + "@babel/parser": { + "version": "7.7.5", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.7.5.tgz", + "integrity": "sha512-KNlOe9+/nk4i29g0VXgl8PEXIRms5xKLJeuZ6UptN0fHv+jDiriG+y94X6qAgWTR0h3KaoM1wK5G5h7MHFRSig==", + "dev": true + }, + "@babel/types": { + "version": "7.7.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.7.4.tgz", + "integrity": "sha512-cz5Ji23KCi4T+YIE/BolWosrJuSmoZeN1EFnRtBwF+KKLi8GG/Z2c2hOJJeCXPk4mwk4QFvTmwIodJowXgttRA==", "dev": true, "requires": { - "@babel/highlight": "^7.0.0" + "esutils": "^2.0.2", + "lodash": "^4.17.13", + "to-fast-properties": "^2.0.0" } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true } } }, @@ -892,48 +1171,72 @@ } }, "@mysticatea/eslint-plugin": { - "version": "10.0.3", - "resolved": "https://registry.npmjs.org/@mysticatea/eslint-plugin/-/eslint-plugin-10.0.3.tgz", - "integrity": "sha512-lsZeSINcepg5SSbA+FX/n/A7M/Qz+wwRWKBsg2IPk52Xi+R1X02lqd4sAzZGG2HvsPiGyoKJ/Ejx9rQPzLoh4A==", - "dev": true, - "requires": { - "@typescript-eslint/eslint-plugin": "~1.7.0", - "@typescript-eslint/parser": "~1.7.0", - "eslint-plugin-eslint-comments": "~3.1.1", - "eslint-plugin-eslint-plugin": "~2.0.1", - "eslint-plugin-node": "~8.0.1", - "eslint-plugin-prettier": "~3.0.1", - "eslint-plugin-vue": "~5.2.2", - "prettier": "~1.14.3", - "vue-eslint-parser": "^5.0.0" - }, - "dependencies": { - "eslint-plugin-node": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz", - "integrity": "sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w==", - "dev": true, - "requires": { - "eslint-plugin-es": "^1.3.1", - "eslint-utils": "^1.3.1", - "ignore": "^5.0.2", - "minimatch": "^3.0.4", - "resolve": "^1.8.1", - "semver": "^5.5.0" - } - } + "version": "13.0.0", + "resolved": "https://registry.npmjs.org/@mysticatea/eslint-plugin/-/eslint-plugin-13.0.0.tgz", + "integrity": "sha512-L0FAKWY+P46aYMacZolyuXJOcg9B5N6HvlB/vr5k+FRVGqaeciayH6YD5hOhgusyUUqgC776RVjtIMeumNVjQQ==", + "dev": true, + "requires": { + "@typescript-eslint/eslint-plugin": "~2.6.1", + "@typescript-eslint/parser": "~2.6.1", + "eslint-plugin-eslint-comments": "~3.1.2", + "eslint-plugin-eslint-plugin": "~2.1.0", + "eslint-plugin-node": "~10.0.0", + "eslint-plugin-prettier": "~3.1.1", + "eslint-plugin-vue": "~6.0.0", + "prettier": "~1.19.1", + "vue-eslint-parser": "^7.0.0" + } + }, + "@rollup/plugin-node-resolve": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-6.0.0.tgz", + "integrity": "sha512-GqWz1CfXOsqpeVMcoM315+O7zMxpRsmhWyhJoxLFHVSp9S64/u02i7len/FnbTNbmgYs+sZyilasijH8UiuboQ==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.0.0", + "@types/resolve": "0.0.8", + "builtin-modules": "^3.1.0", + "is-module": "^1.0.0", + "resolve": "^1.11.1" } }, + "@rollup/pluginutils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.0.0.tgz", + "integrity": "sha512-qBbGQQaUUiId/lBU9VMeYlVLOoRNvz1fV8HWY5tiGDpI2gdPZHbmOfCjzSdXPhdq3XOfyWvXEBlIPbnM3+9ogQ==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + } + }, + "@types/eslint-visitor-keys": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", + "integrity": "sha512-OCutwjDZ4aFS6PB1UZ988C4YgwlBHJd6wCeQqaLdmadZ/7e+w79+hbMUFC1QXDNCmdyoRfAFdm0RypzwR+Qpag==", + "dev": true + }, "@types/estree": { - "version": "0.0.39", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", - "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "version": "0.0.40", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.40.tgz", + "integrity": "sha512-p3KZgMto/JyxosKGmnLDJ/dG5wf+qTRMUjHJcspC2oQKa4jP7mz+tv0ND56lLBu3ojHlhzY33Ol+khLyNmilkA==", + "dev": true + }, + "@types/json-schema": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.3.tgz", + "integrity": "sha512-Il2DtDVRGDcqjDtE+rF8iqg1CArehSK84HZJCT7AMITlyXRBpuPhqGLDQMowraqqu1coEaimg4ZOqggt6L6L+A==", "dev": true }, "@types/node": { - "version": "12.11.7", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.11.7.tgz", - "integrity": "sha512-JNbGaHFCLwgHn/iCckiGSOZ1XYHsKFwREtzPwSGCVld1SGhOlmZw2D4ZI94HQCrBHbADzW9m4LER/8olJTRGHA==", + "version": "12.12.20", + "resolved": "https://registry.npmjs.org/@types/node/-/node-12.12.20.tgz", + "integrity": "sha512-VAe+DiwpnC/g448uN+/3gRl4th0BTdrR9gSLIOHA+SUQskaYZQDOHG7xmjiE7JUhjbXnbXytf6Ih+/pA6CtMFQ==", + "dev": true + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", "dev": true }, "@types/resolve": { @@ -946,64 +1249,93 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-1.7.0.tgz", - "integrity": "sha512-NUSz1aTlIzzTjFFVFyzrbo8oFjHg3K/M9MzYByqbMCxeFdErhLAcGITVfXzSz+Yvp5OOpMu3HkIttB0NyKl54Q==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-2.6.1.tgz", + "integrity": "sha512-Z0rddsGqioKbvqfohg7BwkFC3PuNLsB+GE9QkFza7tiDzuHoy0y823Y+oGNDzxNZrYyLjqkZtCTl4vCqOmEN4g==", "dev": true, "requires": { - "@typescript-eslint/parser": "1.7.0", - "@typescript-eslint/typescript-estree": "1.7.0", - "eslint-utils": "^1.3.1", + "@typescript-eslint/experimental-utils": "2.6.1", + "eslint-utils": "^1.4.2", + "functional-red-black-tree": "^1.0.1", "regexpp": "^2.0.1", - "requireindex": "^1.2.0", - "tsutils": "^3.7.0" + "tsutils": "^3.17.1" + } + }, + "@typescript-eslint/experimental-utils": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-2.6.1.tgz", + "integrity": "sha512-EVrrUhl5yBt7fC7c62lWmriq4MIc49zpN3JmrKqfiFXPXCM5ErfEcZYfKOhZXkW6MBjFcJ5kGZqu1b+lyyExUw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.3", + "@typescript-eslint/typescript-estree": "2.6.1", + "eslint-scope": "^5.0.0" } }, "@typescript-eslint/parser": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-1.7.0.tgz", - "integrity": "sha512-1QFKxs2V940372srm12ovSE683afqc1jB6zF/f8iKhgLz1yoSjYeGHipasao33VXKI+0a/ob9okeogGdKGvvlg==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-2.6.1.tgz", + "integrity": "sha512-PDPkUkZ4c7yA+FWqigjwf3ngPUgoLaGjMlFh6TRtbjhqxFBnkElDfckSjm98q9cMr4xRzZ15VrS/xKm6QHYf0w==", "dev": true, "requires": { - "@typescript-eslint/typescript-estree": "1.7.0", - "eslint-scope": "^4.0.0", - "eslint-visitor-keys": "^1.0.0" + "@types/eslint-visitor-keys": "^1.0.0", + "@typescript-eslint/experimental-utils": "2.6.1", + "@typescript-eslint/typescript-estree": "2.6.1", + "eslint-visitor-keys": "^1.1.0" } }, "@typescript-eslint/typescript-estree": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-1.7.0.tgz", - "integrity": "sha512-K5uedUxVmlYrVkFbyV3htDipvLqTE3QMOUQEHYJaKtgzxj6r7c5Ca/DG1tGgFxX+fsbi9nDIrf4arq7Ib7H/Yw==", + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-2.6.1.tgz", + "integrity": "sha512-+sTnssW6bcbDZKE8Ce7VV6LdzkQz2Bxk7jzk1J8H1rovoTxnm6iXvYIyncvNsaB/kBCOM63j/LNJfm27bNdUoA==", "dev": true, "requires": { + "debug": "^4.1.1", + "glob": "^7.1.4", + "is-glob": "^4.0.1", "lodash.unescape": "4.0.1", - "semver": "5.5.0" + "semver": "^6.3.0", + "tsutils": "^3.17.1" }, "dependencies": { + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, "semver": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.5.0.tgz", - "integrity": "sha512-4SJ3dm0WAwWy/NVeioZh5AntkdJoWKxHxcmyP622fOkgHa4z3R0TdBJICINyaSDE6uNwVc8gZr+ZinwZAH4xIA==", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", + "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==", "dev": true }, "acorn-jsx": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.0.1.tgz", - "integrity": "sha512-HJ7CfNHrfJLlNTzIEUTj43LNWGkqpRLxm3YjAlcD0ACydk9XynzYsCBHxut+iqt+1aBXkx9UP/w/ZqMr13XIzg==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.1.0.tgz", + "integrity": "sha512-tMUqwBWfLFbJbizRmEcWSLw6HnFzfdJs2sOJEOwwtVPMoH/0Ay+E703oZz78VSXZiiDcZrQ5XKjPIUQixhmgVw==", "dev": true }, "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "version": "6.10.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", + "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", "dev": true, "requires": { "fast-deep-equal": "^2.0.1", @@ -1019,10 +1351,13 @@ "dev": true }, "ansi-escapes": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-3.2.0.tgz", - "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", - "dev": true + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-4.3.0.tgz", + "integrity": "sha512-EiYhwo0v255HUL6eDyuLrXEkTi7WwVCLAw+SeOQ7M7qdun1z1pum4DEm/nuqIVbPvi9RPPc9k9LbyBv6H0DwVg==", + "dev": true, + "requires": { + "type-fest": "^0.8.1" + } }, "ansi-regex": { "version": "3.0.0", @@ -1047,20 +1382,118 @@ "sprintf-js": "~1.0.2" } }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-includes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.0.tgz", + "integrity": "sha512-ONOEQoKrvXPKk7Su92Co0YMqYO32FfqJTzkKU9u2UpIXyYZIzLSvpdg4AwvSw4mSUW0czu6inK+zby6Oj6gDjQ==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.0" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0-next.1.tgz", + "integrity": "sha512-7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + } + } + }, + "array.prototype.flat": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz", + "integrity": "sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ==", "dev": true, "requires": { - "define-properties": "^1.1.2", - "es-abstract": "^1.7.0" + "define-properties": "^1.1.3", + "es-abstract": "^1.17.0-next.1" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0-next.1.tgz", + "integrity": "sha512-7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + } } }, "arrify": { @@ -1081,6 +1514,11 @@ "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", "dev": true }, + "astring": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/astring/-/astring-1.4.3.tgz", + "integrity": "sha512-yJlJU/bmN820vL+cbWShu2YQU87dBP5V7BH2N4wODapRv27A2dZtUD0LgjP9lZENvPe9XRoSyWx+pZR6qKqNBw==" + }, "babel-plugin-dynamic-import-node": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz", @@ -1178,9 +1616,9 @@ } }, "caniuse-db": { - "version": "1.0.30001004", - "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001004.tgz", - "integrity": "sha512-VBTptWLoxsIhIGFZOEvtHhdRyhh+6JARUnVy2debGRNmrKfunVAa9cRuAvOnrQk4z/SDiNm5S2d6h32eIHZMoA==", + "version": "1.0.30001016", + "resolved": "https://registry.npmjs.org/caniuse-db/-/caniuse-db-1.0.30001016.tgz", + "integrity": "sha512-4G/7ef/NFSAsn9nFIiPvQr+ayoeLJP3wnQH23BPBJKofNdxFild5dokOjUj4tLFA5yd/VHllhzX55IPLwXhRtg==", "dev": true }, "caniuse-lite": { @@ -1252,6 +1690,12 @@ "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", "dev": true }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, "clean-regexp": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/clean-regexp/-/clean-regexp-1.0.0.tgz", @@ -1262,12 +1706,12 @@ } }, "cli-cursor": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-2.1.0.tgz", - "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", "dev": true, "requires": { - "restore-cursor": "^2.0.0" + "restore-cursor": "^3.1.0" } }, "cli-width": { @@ -1280,7 +1724,6 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "dev": true, "requires": { "string-width": "^3.1.0", "strip-ansi": "^5.2.0", @@ -1290,14 +1733,12 @@ "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -1308,7 +1749,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, "requires": { "ansi-regex": "^4.1.0" } @@ -1341,15 +1781,15 @@ "dev": true }, "commander": { - "version": "2.20.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.0.tgz", - "integrity": "sha512-7j2y+40w61zy6YC2iRNpUe/NwhNyoXrYpHMrSunaMG64nRnaf96zO/KMQR4OyN/UnE5KLyEBnKHd4aG3rskjpQ==", + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", "dev": true }, "comment-parser": { - "version": "0.5.5", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-0.5.5.tgz", - "integrity": "sha512-oB3TinFT+PV3p8UwDQt71+HkG03+zwPwikDlKU6ZDmql6QX2zFlQ+G0GGSDqyJhdZi4PSlzFBm+YJ+ebOX3Vgw==", + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-0.7.1.tgz", + "integrity": "sha512-YLgOoek/4xgO9wDbNi54wwnzpWseqz4ju2qbezDOv6PIf72w8Z7YajwVfEmd6dhnuRrEmo0vCIuG8B6gKz2d8A==", "dev": true }, "commondir": { @@ -1371,24 +1811,56 @@ "dev": true }, "convert-source-map": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.6.0.tgz", - "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.7.0.tgz", + "integrity": "sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA==", "dev": true, "requires": { "safe-buffer": "~5.1.1" } }, "core-js-compat": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.3.4.tgz", - "integrity": "sha512-7OK3/LPP8R3Ovasf3GilEOp+o1w0ZKJ75FMou2RDfTwIV69G5RkKCGFnqgBv/ZhR6xo9GCzlfVALyHmydbE7DA==", + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.5.0.tgz", + "integrity": "sha512-E7iJB72svRjJTnm9HDvujzNVMCm3ZcDYEedkJ/sDTNsy/0yooCd9Cg7GSzE7b4e0LfIkjijdB1tqg0pGwxWeWg==", "dev": true, "requires": { - "browserslist": "^4.7.2", + "browserslist": "^4.8.2", "semver": "^6.3.0" }, "dependencies": { + "browserslist": { + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.8.2.tgz", + "integrity": "sha512-+M4oeaTplPm/f1pXDw84YohEv7B1i/2Aisei8s4s6k3QsoSHa7i5sz8u/cGQkkatCPxMASKxPualR4wwYgVboA==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001015", + "electron-to-chromium": "^1.3.322", + "node-releases": "^1.1.42" + } + }, + "caniuse-lite": { + "version": "1.0.30001016", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001016.tgz", + "integrity": "sha512-yYQ2QfotceRiH4U+h1Us86WJXtVHDmy3nEKIdYPsZCYnOV5/tMgGbmoIlrMzmh2VXlproqYtVaKeGDBkMZifFA==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.3.322", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.322.tgz", + "integrity": "sha512-Tc8JQEfGQ1MzfSzI/bTlSr7btJv/FFO7Yh6tanqVmIWOuNCu6/D1MilIEgLtmWqIrsv+o4IjpLAhgMBr/ncNAA==", + "dev": true + }, + "node-releases": { + "version": "1.1.43", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.43.tgz", + "integrity": "sha512-Rmfnj52WNhvr83MvuAWHEqXVoZXCcDQssSOffU4n4XOL9sPrP61mSZ88g25NqmABDvH7PiAlFCzoSCSdzA293w==", + "dev": true, + "requires": { + "semver": "^6.3.0" + } + }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -1397,16 +1869,11 @@ } } }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true - }, "cross-spawn": { "version": "6.0.5", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -1459,8 +1926,7 @@ "deep-is": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", - "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", - "dev": true + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=" }, "define-properties": { "version": "1.1.3", @@ -1486,6 +1952,55 @@ "esutils": "^2.0.2" } }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.0.1.tgz", + "integrity": "sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ==", + "dev": true + }, + "entities": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.0.tgz", + "integrity": "sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw==", + "dev": true + } + } + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, "electron-to-chromium": { "version": "1.3.296", "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.296.tgz", @@ -1497,14 +2012,6 @@ "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, - "end-of-stream": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", - "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "requires": { - "once": "^1.4.0" - } - }, "entities": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", @@ -1555,68 +2062,106 @@ "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, + "escodegen": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.12.0.tgz", + "integrity": "sha512-TuA+EhsanGcme5T3R0L80u4t8CpbXQjegRmf7+FPTJrtCTErXFeelblRgHQa1FofEzqYYJmJ/OqjTwREp9qgmg==", + "requires": { + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "esprima": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-3.1.3.tgz", + "integrity": "sha1-/cpRzuYTOJXjyI1TXOSdv/YqRjM=" + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "optional": true + } + } + }, "eslint": { - "version": "5.16.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-5.16.0.tgz", - "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-6.7.2.tgz", + "integrity": "sha512-qMlSWJaCSxDFr8fBPvJM9kJwbazrhNcBU3+DszDW1OlEwKBBRWsJc7NJFelvwQpanHCR14cOLD41x8Eqvo3Nng==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "ajv": "^6.9.1", + "ajv": "^6.10.0", "chalk": "^2.1.0", "cross-spawn": "^6.0.5", "debug": "^4.0.1", "doctrine": "^3.0.0", - "eslint-scope": "^4.0.3", - "eslint-utils": "^1.3.1", - "eslint-visitor-keys": "^1.0.0", - "espree": "^5.0.1", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", "esquery": "^1.0.1", "esutils": "^2.0.2", "file-entry-cache": "^5.0.1", "functional-red-black-tree": "^1.0.1", - "glob": "^7.1.2", - "globals": "^11.7.0", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", "ignore": "^4.0.6", "import-fresh": "^3.0.0", "imurmurhash": "^0.1.4", - "inquirer": "^6.2.2", - "js-yaml": "^3.13.0", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.3.0", - "lodash": "^4.17.11", + "lodash": "^4.17.14", "minimatch": "^3.0.4", "mkdirp": "^0.5.1", "natural-compare": "^1.4.0", - "optionator": "^0.8.2", - "path-is-inside": "^1.0.2", + "optionator": "^0.8.3", "progress": "^2.0.0", "regexpp": "^2.0.1", - "semver": "^5.5.1", - "strip-ansi": "^4.0.0", - "strip-json-comments": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", "table": "^5.2.3", - "text-table": "^0.2.0" + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" }, "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "acorn": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", + "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", + "dev": true + }, + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "espree": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz", + "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==", "dev": true, "requires": { - "ms": "^2.1.1" + "acorn": "^7.1.0", + "acorn-jsx": "^5.1.0", + "eslint-visitor-keys": "^1.1.0" } }, - "espree": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", - "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", + "globals": { + "version": "12.3.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-12.3.0.tgz", + "integrity": "sha512-wAfjdLgFsPZsklLJvOBUBmzYE8/CwhEqSBEMRXA3qxIiNtyqvjYurAtIfDh6chlEPUfmTY3MnZh5Hfh4q0UlIw==", "dev": true, "requires": { - "acorn": "^6.0.7", - "acorn-jsx": "^5.0.0", - "eslint-visitor-keys": "^1.0.0" + "type-fest": "^0.8.1" } }, "ignore": { @@ -1624,6 +2169,41 @@ "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", "dev": true + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-json-comments": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.0.1.tgz", + "integrity": "sha512-VTyMAUfdm047mwKl+u79WIdrZxtFtn+nBxHeb844XBQ9uMNTuTHdx2hc5RiAJYqwTj3wc/xe5HLSdJSkJ+WfZw==", + "dev": true } } }, @@ -1638,15 +2218,15 @@ } }, "eslint-config-ash-nazg": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-ash-nazg/-/eslint-config-ash-nazg-4.0.0.tgz", - "integrity": "sha512-LUroSU/VqempjeWSIgMDu3byW8iWKfwj4aqEGm0W8oqHe4HCP87Ny0MVChOXjSoz9lDEC2PjXmnxL2Zt03Mfog==", + "version": "13.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-ash-nazg/-/eslint-config-ash-nazg-13.1.0.tgz", + "integrity": "sha512-xHaLzYqoKkYD0CXchTIQkeIcpdiHhmQuigSPFasuEPE0QrUKSYod91Btf+uApXkQ48CEuHngmgGm9R4xirfwsg==", "dev": true }, "eslint-config-standard": { - "version": "12.0.0", - "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz", - "integrity": "sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==", + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/eslint-config-standard/-/eslint-config-standard-14.1.0.tgz", + "integrity": "sha512-EF6XkrrGVbvv8hL/kYa/m6vnvmUT+K82pJJc4JJVMM6+Qgqh0pnwprSxdduDLB9p/7bIxD+YV5O0wfb8lmcPbA==", "dev": true }, "eslint-import-resolver-node": { @@ -1677,12 +2257,12 @@ } }, "eslint-module-utils": { - "version": "2.4.1", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.4.1.tgz", - "integrity": "sha512-H6DOj+ejw7Tesdgbfs4jeS4YMFrT8uI8xwd1gtQqXssaR0EQ26L+2O/w6wkYFy2MymON0fTwHmXBvvfLNZVZEw==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.5.0.tgz", + "integrity": "sha512-kCo8pZaNz2dsAW7nCUjuVoI11EBXXpIzfNxmaoLhXoRDOnqXLC4iSGVRdZPhOitfbdEfMEfKOiENaK6wDPZEGw==", "dev": true, "requires": { - "debug": "^2.6.8", + "debug": "^2.6.9", "pkg-dir": "^2.0.0" }, "dependencies": { @@ -1755,6 +2335,12 @@ } } }, + "eslint-plugin-array-func": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-array-func/-/eslint-plugin-array-func-3.1.3.tgz", + "integrity": "sha512-uRfJ4d9Fyyvxm6/w++++RSQoXZyERFF0+6zqupgg5Mw/+eG4y19yrptTghJlApntKlPZBpA4XCOIBzJbvLrArQ==", + "dev": true + }, "eslint-plugin-compat": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/eslint-plugin-compat/-/eslint-plugin-compat-3.3.0.tgz", @@ -1779,13 +2365,21 @@ } }, "eslint-plugin-es": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.0.tgz", - "integrity": "sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-2.0.0.tgz", + "integrity": "sha512-f6fceVtg27BR02EYnBhgWLFQfK6bN4Ll0nQFrBHOlCsAyxeZkn0NHns5O0YZOPrV1B3ramd6cgFwaoFLcSkwEQ==", "dev": true, "requires": { - "eslint-utils": "^1.3.0", - "regexpp": "^2.0.1" + "eslint-utils": "^1.4.2", + "regexpp": "^3.0.0" + }, + "dependencies": { + "regexpp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.0.0.tgz", + "integrity": "sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g==", + "dev": true + } } }, "eslint-plugin-eslint-comments": { @@ -1799,28 +2393,38 @@ } }, "eslint-plugin-eslint-plugin": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-plugin/-/eslint-plugin-eslint-plugin-2.0.1.tgz", - "integrity": "sha512-kJ5TZsRJH/xYstG07v3YeOy/W5SDAEzV+bvvoL0aiG1HtqDmg4mJvNPnn/JngANMmsx8oXlJrIcBTCpJzm+9kg==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-eslint-plugin/-/eslint-plugin-eslint-plugin-2.1.0.tgz", + "integrity": "sha512-kT3A/ZJftt28gbl/Cv04qezb/NQ1dwYIbi8lyf806XMxkus7DvOVCLIfTXMrorp322Pnoez7+zabXH29tADIDg==", "dev": true }, + "eslint-plugin-html": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-6.0.0.tgz", + "integrity": "sha512-PQcGippOHS+HTbQCStmH5MY1BF2MaU8qW/+Mvo/8xTa/ioeMXdSP+IiaBw2+nh0KEMfYQKuTz1Zo+vHynjwhbg==", + "dev": true, + "requires": { + "htmlparser2": "^3.10.1" + } + }, "eslint-plugin-import": { - "version": "2.18.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.18.2.tgz", - "integrity": "sha512-5ohpsHAiUBRNaBWAF08izwUGlbrJoJJ+W9/TBwsGoR1MnlgfwMIKrFeSjWbt6moabiXW9xNvtFz+97KHRfI4HQ==", + "version": "2.19.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.19.1.tgz", + "integrity": "sha512-x68131aKoCZlCae7rDXKSAQmbT5DQuManyXo2sK6fJJ0aK5CWAkv6A6HJZGgqC8IhjQxYPgo6/IY4Oz8AFsbBw==", "dev": true, "requires": { "array-includes": "^3.0.3", + "array.prototype.flat": "^1.2.1", "contains-path": "^0.1.0", "debug": "^2.6.9", "doctrine": "1.5.0", "eslint-import-resolver-node": "^0.3.2", - "eslint-module-utils": "^2.4.0", + "eslint-module-utils": "^2.4.1", "has": "^1.0.3", "minimatch": "^3.0.4", "object.values": "^1.1.0", "read-pkg-up": "^2.0.0", - "resolve": "^1.11.0" + "resolve": "^1.12.0" }, "dependencies": { "debug": { @@ -1842,132 +2446,36 @@ "isarray": "^1.0.0" } }, - "find-up": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", - "dev": true, - "requires": { - "locate-path": "^2.0.0" - } - }, - "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "strip-bom": "^3.0.0" - } - }, - "locate-path": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", - "dev": true, - "requires": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - } - }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "p-limit": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", - "dev": true, - "requires": { - "p-try": "^1.0.0" - } - }, - "p-locate": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", - "dev": true, - "requires": { - "p-limit": "^1.1.0" - } - }, - "p-try": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", - "dev": true - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", - "dev": true, - "requires": { - "pify": "^2.0.0" - } - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", - "dev": true, - "requires": { - "load-json-file": "^2.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^2.0.0" - } - }, - "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", - "dev": true, - "requires": { - "find-up": "^2.0.0", - "read-pkg": "^2.0.0" - } - }, - "resolve": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", - "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true } } }, "eslint-plugin-jsdoc": { - "version": "4.8.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-4.8.4.tgz", - "integrity": "sha512-VDP+BI2hWpKNNdsJDSPofSQ9q7jGLgWbDMI0LzOeEcfsTjSS7jQtHDUuVLQ5E+OV2MPyQPk/3lnVcHfStXk5yA==", + "version": "18.4.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-18.4.3.tgz", + "integrity": "sha512-RcavGWoxukmq7ZQHJ3zDYUHQugJ+uAaoLSCueQjWIHq8xLoIINRo4yKLd03DKWVuoGNY3R+3xpmNjOpwlkOtnQ==", "dev": true, "requires": { - "comment-parser": "^0.5.4", - "jsdoctypeparser": "3.1.0", - "lodash": "^4.17.11" + "comment-parser": "^0.7.1", + "debug": "^4.1.1", + "jsdoctypeparser": "^6.1.0", + "lodash": "^4.17.15", + "object.entries-ponyfill": "^1.0.1", + "regextras": "^0.6.1", + "semver": "^6.3.0", + "spdx-expression-parse": "^3.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "eslint-plugin-markdown": { @@ -1994,12 +2502,12 @@ } }, "eslint-plugin-node": { - "version": "9.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-9.2.0.tgz", - "integrity": "sha512-2abNmzAH/JpxI4gEOwd6K8wZIodK3BmHbTxz4s79OIYwwIt2gkpEXlAouJXu4H1c9ySTnRso0tsuthSOZbUMlA==", + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-10.0.0.tgz", + "integrity": "sha512-1CSyM/QCjs6PXaT18+zuAXsjXGIGo5Rw630rSKwokSs2jrYURQc4R5JZpoanNCqwNmepg+0eZ9L7YiRUJb8jiQ==", "dev": true, "requires": { - "eslint-plugin-es": "^1.4.1", + "eslint-plugin-es": "^2.0.0", "eslint-utils": "^1.4.2", "ignore": "^5.1.1", "minimatch": "^3.0.4", @@ -2007,31 +2515,6 @@ "semver": "^6.1.0" }, "dependencies": { - "eslint-plugin-es": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-1.4.1.tgz", - "integrity": "sha512-5fa/gR2yR3NxQf+UXkeLeP8FBBl6tSgdrAz1+cF84v1FMM4twGwQoqTnn+QxFLcPOrF4pdKEJKDB/q9GoyJrCA==", - "dev": true, - "requires": { - "eslint-utils": "^1.4.2", - "regexpp": "^2.0.1" - } - }, - "eslint-utils": { - "version": "1.4.3", - "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", - "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "dev": true, - "requires": { - "eslint-visitor-keys": "^1.1.0" - } - }, - "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", - "dev": true - }, "semver": { "version": "6.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", @@ -2041,9 +2524,9 @@ } }, "eslint-plugin-prettier": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.0.1.tgz", - "integrity": "sha512-/PMttrarPAY78PLvV3xfWibMOdMDl57hmlQ2XqFeA37wd+CJ7WSxV7txqjVPHi/AAFKd2lX0ZqfsOc/i5yFCSQ==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.2.tgz", + "integrity": "sha512-GlolCC9y3XZfv3RQfwGew7NnuFDKsfI4lbvRK+PIIo23SFH+LemGs4cKwzAaRa+Mdb+lQO/STaIayno8T5sJJA==", "dev": true, "requires": { "prettier-linter-helpers": "^1.0.0" @@ -2055,6 +2538,12 @@ "integrity": "sha512-VoM09vT7bfA7D+upt+FjeBO5eHIJQBUWki1aPvB+vbNiHS3+oGIJGIeyBtKQTME6UPXXy3vV07OL1tHd3ANuDw==", "dev": true }, + "eslint-plugin-sonarjs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-sonarjs/-/eslint-plugin-sonarjs-0.5.0.tgz", + "integrity": "sha512-XW5MnzlRjhXpIdbULC/qAdJYHWw3rRLws/DyawdlPU/IdVr9AmRK1r2LaCvabwKOAW2XYYSo3kDX58E4MrB7PQ==", + "dev": true + }, "eslint-plugin-standard": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/eslint-plugin-standard/-/eslint-plugin-standard-4.0.1.tgz", @@ -2062,43 +2551,196 @@ "dev": true }, "eslint-plugin-unicorn": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-8.0.2.tgz", - "integrity": "sha512-Ik2/Bt/PvPnf1lZgUnNFK2310XoRn/4LYiP5gkEPVDa4w9HCoii7I6SeKh2X5Rdp2WLy4eUiLcYtiBUp+q2IRw==", + "version": "14.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-14.0.1.tgz", + "integrity": "sha512-mTyH4s5ogCE8gaVSNPF14hpSuMfW+bGW+Hg8wNzFPpOJeRHWtdeCFmjz+9nZW4VJQ7gtWfa5KMFF7gKj9KcfAg==", "dev": true, "requires": { + "ci-info": "^2.0.0", "clean-regexp": "^1.0.0", - "eslint-ast-utils": "^1.0.0", - "import-modules": "^1.1.0", - "lodash.camelcase": "^4.1.1", - "lodash.defaultsdeep": "^4.6.0", - "lodash.kebabcase": "^4.0.1", - "lodash.snakecase": "^4.0.1", + "eslint-ast-utils": "^1.1.0", + "eslint-template-visitor": "^1.1.0", + "import-modules": "^2.0.0", + "lodash.camelcase": "^4.3.0", + "lodash.defaultsdeep": "^4.6.1", + "lodash.kebabcase": "^4.1.1", + "lodash.snakecase": "^4.1.1", "lodash.topairs": "^4.3.0", - "lodash.upperfirst": "^4.2.0", + "lodash.upperfirst": "^4.3.1", + "read-pkg-up": "^7.0.0", + "regexp-tree": "^0.1.16", + "regexpp": "^3.0.0", "reserved-words": "^0.1.2", - "safe-regex": "^2.0.1" + "safe-regex": "^2.1.1", + "semver": "^6.3.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "parse-json": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.0.0.tgz", + "integrity": "sha512-OOY5b7PAEFV0E2Fir1KOkxchnZNCdowAJgQ5NuxjpBKTRP3pQhwkrkxqQjeoKJ+fO7bCpmIZaogI4eZGDMEGOw==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + } + }, + "regexpp": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.0.0.tgz", + "integrity": "sha512-Z+hNr7RAVWxznLPuA7DIh8UNX1j9CDrUQxskw9IrBE1Dxue2lyXT+shqEIeLUjrokxIP8CMy1WkjgG3rTsd5/g==", + "dev": true + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "eslint-plugin-vue": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-5.2.2.tgz", - "integrity": "sha512-CtGWH7IB0DA6BZOwcV9w9q3Ri6Yuo8qMjx05SmOGJ6X6E0Yo3y9E/gQ5tuNxg2dEt30tRnBoFTbvtmW9iEoyHA==", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-6.0.1.tgz", + "integrity": "sha512-5tgFPcxGDKjfVB/6Yi56bKiWxygUibfZmzSh26Np3kuwAk/lfaGbVld+Yt+MPgD84ppvcachtiL4/winsXLjXA==", "dev": true, "requires": { - "vue-eslint-parser": "^5.0.0" + "vue-eslint-parser": "^6.0.5" + }, + "dependencies": { + "eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dev": true, + "requires": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + } + }, + "vue-eslint-parser": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-6.0.5.tgz", + "integrity": "sha512-Bvjlx7rH1Ulvus56KHeLXOjEi3JMOYTa1GAqZr9lBQhd8weK8mV7U7V2l85yokBZEWHJQjLn6X3nosY8TzkOKg==", + "dev": true, + "requires": { + "debug": "^4.1.1", + "eslint-scope": "^4.0.0", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.0", + "esquery": "^1.0.1", + "lodash": "^4.17.11" + } + } } }, "eslint-scope": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-4.0.3.tgz", - "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.0.0.tgz", + "integrity": "sha512-oYrhJW7S0bxAFDvWqzvMPRm6pcgcnWc4QnofCAqRTRfQC0JcwenzGglTtsLyIuuWFfkqDG9vz67cnttSd53djw==", "dev": true, "requires": { "esrecurse": "^4.1.0", "estraverse": "^4.1.1" } }, + "eslint-template-visitor": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-template-visitor/-/eslint-template-visitor-1.1.0.tgz", + "integrity": "sha512-Lmy6QVlmFiIGl5fPi+8ACnov3sare+0Ouf7deJAGGhmUfeWJ5fVarELUxZRpsZ9sHejiJUq8626d0dn9uvcZTw==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.1", + "multimap": "^1.0.2" + }, + "dependencies": { + "acorn": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", + "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", + "dev": true + }, + "espree": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz", + "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==", + "dev": true, + "requires": { + "acorn": "^7.1.0", + "acorn-jsx": "^5.1.0", + "eslint-visitor-keys": "^1.1.0" + } + } + } + }, "eslint-utils": { "version": "1.4.3", "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-1.4.3.tgz", @@ -2106,20 +2748,12 @@ "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" - }, - "dependencies": { - "eslint-visitor-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", - "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", - "dev": true - } } }, "eslint-visitor-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.0.0.tgz", - "integrity": "sha512-qzm/XxIbxm/FHyH341ZrbnMUpe+5Bocte9xkmFMzPMjRaZMcXww+MpBptFvtU+79L362nqiLhekCxCxDPaUMBQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz", + "integrity": "sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A==", "dev": true }, "esm": { @@ -2129,12 +2763,12 @@ "dev": true }, "espree": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-4.1.0.tgz", - "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-5.0.1.tgz", + "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", "dev": true, "requires": { - "acorn": "^6.0.2", + "acorn": "^6.0.7", "acorn-jsx": "^5.0.0", "eslint-visitor-keys": "^1.0.0" } @@ -2166,8 +2800,12 @@ "estraverse": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.2.0.tgz", - "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=", - "dev": true + "integrity": "sha1-De4/7TH81GlhjOc0IJn8GvoL2xM=" + }, + "estree-builder": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/estree-builder/-/estree-builder-1.11.0.tgz", + "integrity": "sha512-n7kw0HNKD8O6ihc9JCZBMo44S8kQRA6cMxQV88eOqWec0/VB7E/7QiOYZKZj1TI3e2cpo2+XWz9GTQaESys30A==" }, "estree-walker": { "version": "0.6.1", @@ -2178,22 +2816,7 @@ "esutils": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.2.tgz", - "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=", - "dev": true - }, - "execa": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", - "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", - "requires": { - "cross-spawn": "^6.0.0", - "get-stream": "^4.0.0", - "is-stream": "^1.1.0", - "npm-run-path": "^2.0.0", - "p-finally": "^1.0.0", - "signal-exit": "^3.0.0", - "strip-eof": "^1.0.0" - } + "integrity": "sha1-Cr9PHKpbyx96nYrMbepPqqBLrJs=" }, "extend": { "version": "3.0.2", @@ -2202,9 +2825,9 @@ "dev": true }, "external-editor": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.0.3.tgz", - "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", "dev": true, "requires": { "chardet": "^0.7.0", @@ -2225,21 +2848,20 @@ "dev": true }, "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", "dev": true }, "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", - "dev": true + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=" }, "figures": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/figures/-/figures-3.1.0.tgz", + "integrity": "sha512-ravh8VRXqHuMvZt/d8GblBeqDMkdJMBdv/2KntFH+ra5MXkO7nxNKpzQ3n6QD/2da1kH0aWmNISdvhM7gl2gVg==", "dev": true, "requires": { "escape-string-regexp": "^1.0.5" @@ -2255,9 +2877,9 @@ } }, "file-type": { - "version": "10.11.0", - "resolved": "https://registry.npmjs.org/file-type/-/file-type-10.11.0.tgz", - "integrity": "sha512-uzk64HRpUZyTGZtVuvrjP0FYxzQrBf4rojot6J65YMEbwBLB0CWm0CLojVpwpmFmxcE/lkvYICgfcGozbBq6rw==", + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/file-type/-/file-type-11.1.0.tgz", + "integrity": "sha512-rM0UO7Qm9K7TWTtA6AShI/t7H5BPjDeGVDaNyg9BjHAj3PysKy7+8C8D137R88jnR3rFJZQB/tFgydl5sN5m7g==", "dev": true }, "find-cache-dir": { @@ -2269,24 +2891,6 @@ "commondir": "^1.0.1", "make-dir": "^2.0.0", "pkg-dir": "^3.0.0" - }, - "dependencies": { - "make-dir": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", - "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", - "dev": true, - "requires": { - "pify": "^4.0.1", - "semver": "^5.6.0" - } - }, - "pify": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", - "dev": true - } } }, "find-up": { @@ -2326,9 +2930,9 @@ } }, "flatted": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.0.tgz", - "integrity": "sha512-R+H8IZclI8AAkSBRQJLVOsxwAoHd6WC40b4QTNWIjzAa6BXOBfQcM587MXDTVPeYaopFNWHUFLx7eNmHDSxMWg==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.1.tgz", + "integrity": "sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg==", "dev": true }, "fs.realpath": { @@ -2361,19 +2965,11 @@ "dev": true }, "get-stdin": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", - "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-7.0.0.tgz", + "integrity": "sha512-zRKcywvrXlXsA0v0i9Io4KDRaAw7+a1ZpjRwl9Wox8PFlVCCHra7E9c4kqXCoCM9nR5tBkaTTZRBoCm60bFqTQ==", "dev": true }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "requires": { - "pump": "^3.0.0" - } - }, "glob": { "version": "7.1.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.3.tgz", @@ -2388,6 +2984,15 @@ "path-is-absolute": "^1.0.0" } }, + "glob-parent": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.0.tgz", + "integrity": "sha512-qjtRgnIVmOfnKUE3NJAQEdk+lKrxfw8t5ke7SXtfMTHcjsBfOfWXCQfdb30zfDoZQ2IRSIiidmjtbHZPZ++Ihw==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, "globals": { "version": "11.12.0", "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", @@ -2395,82 +3000,21 @@ "dev": true }, "gp-data-transformer": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/gp-data-transformer/-/gp-data-transformer-0.0.1.tgz", - "integrity": "sha512-FyIPRC8y6nRY9QX6hZhW3Qk+r2QD6r9a4JwoV7/C/bM4mjyQJLPFkojdrmu2811oU4za/jtO6q9U3P/u/DaIkw==", - "requires": { - "yargs": "^13.2.4" + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/gp-data-transformer/-/gp-data-transformer-0.0.2.tgz", + "integrity": "sha512-VzeK83O2SbD3bUSPx3FoXKvRFw5PY8N190lX+fpAqTr21mmaV+J6apC8fG0w7WSxvOhPZ/AUURWSqsR2mC0YAQ==", + "requires": { + "acorn": "^6.3.0", + "astring": "^1.4.3", + "escodegen": "^1.12.0", + "estree-builder": "^1.11.0", + "yargs": "^13.3.0" }, "dependencies": { - "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" - }, - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", - "requires": { - "string-width": "^3.1.0", - "strip-ansi": "^5.2.0", - "wrap-ansi": "^5.1.0" - } - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "requires": { - "emoji-regex": "^7.0.1", - "is-fullwidth-code-point": "^2.0.0", - "strip-ansi": "^5.1.0" - } - }, - "strip-ansi": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", - "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "requires": { - "ansi-regex": "^4.1.0" - } - }, - "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "requires": { - "ansi-styles": "^3.2.0", - "string-width": "^3.0.0", - "strip-ansi": "^5.0.0" - } - }, - "yargs": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", - "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", - "requires": { - "cliui": "^5.0.0", - "find-up": "^3.0.0", - "get-caller-file": "^2.0.1", - "os-locale": "^3.1.0", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^3.0.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^13.1.0" - } - }, - "yargs-parser": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.0.tgz", - "integrity": "sha512-Yq+32PrijHRri0vVKQEm+ys8mbqWjLiwQkMFNXEENutzLPP0bE4Lcd4iA3OQY5HF+GD3xXxf0MEHb8E4/SA3AA==", - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } + "acorn": { + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.0.tgz", + "integrity": "sha512-gac8OEcQ2Li1dxIEWGZzsp2BitJxwkwcOm0zHAJLcPJaVvm58FRnk6RkuLRpU1EujipU2ZFODv2P9DLMfnV8mw==" } } }, @@ -2514,11 +3058,25 @@ "dev": true }, "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==", + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.5.tgz", + "integrity": "sha512-kssjab8CvdXfcXMXVcvsXum4Hwdq9XGtRD3TteMEvEbq0LXyiNQr6AprqKqfeaDXze7SxWvRxdpwE6ku7ikLkg==", "dev": true }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + } + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", @@ -2529,15 +3087,15 @@ } }, "ignore": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.1.tgz", - "integrity": "sha512-DWjnQIFLenVrwyRCKZT+7a7/U4Cqgar4WG8V++K3hw+lrW1hc/SIwdiGmtxKCVACmHULTuGeBbHJmbwW7/sAvA==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.4.tgz", + "integrity": "sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A==", "dev": true }, "import-fresh": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.0.0.tgz", - "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.2.1.tgz", + "integrity": "sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ==", "dev": true, "requires": { "parent-module": "^1.0.0", @@ -2545,9 +3103,9 @@ } }, "import-modules": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/import-modules/-/import-modules-1.1.0.tgz", - "integrity": "sha1-dI23nFzEK7lwHvq0JPiU5yYA6dw=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-modules/-/import-modules-2.0.0.tgz", + "integrity": "sha512-iczM/v9drffdNnABOKwj0f9G3cFDon99VcG1mxeBsdqnbd+vnQ5c2uAiCHNQITqFTOPaEvwg3VjoWCur0uHLEw==", "dev": true }, "imurmurhash": { @@ -2579,32 +3137,66 @@ "dev": true }, "inquirer": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-6.3.1.tgz", - "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-7.0.1.tgz", + "integrity": "sha512-V1FFQ3TIO15det8PijPLFR9M9baSlnRs9nL7zWu1MNVA2T9YVl9ZbrHJhYs7e9X8jeMZ3lr2JH/rdHFgNCBdYw==", "dev": true, "requires": { - "ansi-escapes": "^3.2.0", + "ansi-escapes": "^4.2.1", "chalk": "^2.4.2", - "cli-cursor": "^2.1.0", + "cli-cursor": "^3.1.0", "cli-width": "^2.0.0", "external-editor": "^3.0.3", - "figures": "^2.0.0", - "lodash": "^4.17.11", - "mute-stream": "0.0.7", + "figures": "^3.0.0", + "lodash": "^4.17.15", + "mute-stream": "0.0.8", "run-async": "^2.2.0", - "rxjs": "^6.4.0", - "string-width": "^2.1.0", + "rxjs": "^6.5.3", + "string-width": "^4.1.0", "strip-ansi": "^5.1.0", "through": "^2.3.6" }, "dependencies": { "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", "dev": true }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, "strip-ansi": { "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", @@ -2612,6 +3204,14 @@ "dev": true, "requires": { "ansi-regex": "^4.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + } } } } @@ -2625,11 +3225,6 @@ "loose-envify": "^1.0.0" } }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==" - }, "is-alphabetical": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.3.tgz", @@ -2676,6 +3271,12 @@ "integrity": "sha512-bvLSwoDg2q6Gf+E2LEPiklHZxxiSi3XAh4Mav65mKqTfCO1HM3uBs24TjEH8iJX3bbDdLXKJXBTmGzuTUuAEjQ==", "dev": true }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", @@ -2691,6 +3292,15 @@ "lowercase-keys": "^1.0.0" } }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, "is-hexadecimal": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.3.tgz", @@ -2754,9 +3364,10 @@ } }, "is-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", - "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.0.tgz", + "integrity": "sha512-XCoy+WlUr7d1+Z8GgSuXmpuUFC9fOhRXglJMx+dwLKTkL44Cjd4W1Z5P+BQZpr+cR93aGP4S/s7Ftw6Nd/kiEw==", + "dev": true }, "is-symbol": { "version": "1.0.2", @@ -2794,15 +3405,16 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=" + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true }, "jest-worker": { - "version": "24.6.0", - "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.6.0.tgz", - "integrity": "sha512-jDwgW5W9qGNvpI1tNnvajh0a5IE/PuGLFmHk6aR/BZFz8tSgGw17GsDPXAJ6p91IvYDjOw8GpFbvvZGAK+DPQQ==", + "version": "24.9.0", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", + "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", "dev": true, "requires": { - "merge-stream": "^1.0.1", + "merge-stream": "^2.0.0", "supports-color": "^6.1.0" }, "dependencies": { @@ -2891,9 +3503,9 @@ } }, "jsdoctypeparser": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-3.1.0.tgz", - "integrity": "sha512-JNbkKpDFqbYjg+IU3FNo7qjX7Opy7CwjHywT32zgAcz/d4lX6Umn5jOHVETUdnNNgGrMk0nEx1gvP0F4M0hzlQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsdoctypeparser/-/jsdoctypeparser-6.1.0.tgz", + "integrity": "sha512-UCQBZ3xCUBv/PLfwKAJhp6jmGOSLFNKzrotXGNgbKhWvz27wPsCsVeP7gIcHPElQw2agBmynAitXqhxR58XAmA==", "dev": true }, "jsesc": { @@ -2971,24 +3583,21 @@ "resolved": "https://registry.npmjs.org/kld-polynomial/-/kld-polynomial-0.3.0.tgz", "integrity": "sha512-PEfxjQ6tsxL9DHBIhM2UZsSes0GI+OIMjbE0kj60jr80Biq/xXl1eGfnyzmfoackAMdKZtw2060L09HdjkPP5w==" }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "requires": { - "invert-kv": "^2.0.0" - } - }, "levn": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", - "dev": true, "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" } }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, "linkify-it": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", @@ -2999,15 +3608,23 @@ } }, "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", + "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", + "parse-json": "^2.2.0", + "pify": "^2.0.0", "strip-bom": "^3.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } } }, "locate-path": { @@ -3120,20 +3737,13 @@ "dev": true }, "make-dir": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-1.3.0.tgz", - "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { - "pify": "^3.0.0" - } - }, - "map-age-cleaner": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", - "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", - "requires": { - "p-defer": "^1.0.0" + "pify": "^4.0.1", + "semver": "^5.6.0" } }, "map-obj": { @@ -3188,16 +3798,6 @@ "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", "dev": true }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "requires": { - "map-age-cleaner": "^0.1.1", - "mimic-fn": "^2.0.0", - "p-is-promise": "^2.0.0" - } - }, "meow": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", @@ -3221,6 +3821,107 @@ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true }, + "find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, + "requires": { + "locate-path": "^2.0.0" + } + }, + "load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, + "requires": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + } + }, + "p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "requires": { + "p-try": "^1.0.0" + } + }, + "p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, + "requires": { + "p-limit": "^1.1.0" + } + }, + "p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + }, "yargs-parser": { "version": "10.1.0", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", @@ -3233,13 +3934,10 @@ } }, "merge-stream": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-1.0.1.tgz", - "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", - "dev": true, - "requires": { - "readable-stream": "^2.0.1" - } + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true }, "mime": { "version": "1.6.0", @@ -3250,7 +3948,8 @@ "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true }, "minimatch": { "version": "3.0.4", @@ -3334,10 +4033,16 @@ "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true }, + "multimap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/multimap/-/multimap-1.1.0.tgz", + "integrity": "sha512-0ZIR9PasPxGXmRsEF8jsDzndzHDj7tIav+JUmvIFB/WHswliFnquxECT/De7GR4yg99ky/NlRKJT82G1y271bw==", + "dev": true + }, "mute-stream": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.7.tgz", - "integrity": "sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s=", + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", "dev": true }, "natural-compare": { @@ -3349,7 +4054,8 @@ "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true }, "node-environment-flags": { "version": "1.0.5", @@ -3407,14 +4113,6 @@ "validate-npm-package-license": "^3.0.1" } }, - "npm-run-path": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", - "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", - "requires": { - "path-key": "^2.0.0" - } - }, "obj-props": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/obj-props/-/obj-props-1.2.0.tgz", @@ -3451,6 +4149,12 @@ "object-keys": "^1.0.11" } }, + "object.entries-ponyfill": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object.entries-ponyfill/-/object.entries-ponyfill-1.0.1.tgz", + "integrity": "sha1-Kavfd8v70mVm3RqiTp2I9lQz0lY=", + "dev": true + }, "object.getownpropertydescriptors": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.0.3.tgz", @@ -3462,62 +4166,99 @@ } }, "object.values": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.0.tgz", - "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.1.tgz", + "integrity": "sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA==", "dev": true, "requires": { "define-properties": "^1.1.3", - "es-abstract": "^1.12.0", + "es-abstract": "^1.17.0-next.1", "function-bind": "^1.1.1", "has": "^1.0.3" + }, + "dependencies": { + "es-abstract": { + "version": "1.17.0-next.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.17.0-next.1.tgz", + "integrity": "sha512-7MmGr03N7Rnuid6+wyhD9sHNE2n4tFSwExnU2lQl3lIo2ShXWGePY80zYaoMOmILWv57H0amMjZGHNzzGG70Rw==", + "dev": true, + "requires": { + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1", + "is-callable": "^1.1.4", + "is-regex": "^1.0.4", + "object-inspect": "^1.7.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.0", + "string.prototype.trimleft": "^2.1.0", + "string.prototype.trimright": "^2.1.0" + } + }, + "es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dev": true, + "requires": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + } + }, + "has-symbols": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.1.tgz", + "integrity": "sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg==", + "dev": true + }, + "object-inspect": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.7.0.tgz", + "integrity": "sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw==", + "dev": true + } } }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, "requires": { "wrappy": "1" } }, "onetime": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-2.0.1.tgz", - "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.0.tgz", + "integrity": "sha512-5NcSkPHhwTVFIQN+TUqXoS5+dlElHXdpAWu9I0HP20YOtIi+aZ0Ct82jdlILDxjLEAWwvm+qj1m6aEtsDVmm6Q==", "dev": true, "requires": { - "mimic-fn": "^1.0.0" - }, - "dependencies": { - "mimic-fn": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", - "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", - "dev": true - } + "mimic-fn": "^2.1.0" } }, "open": { - "version": "6.2.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.2.0.tgz", - "integrity": "sha512-Vxf6HJkwrqmvh9UAID3MnMYXntbTxKLOSfOnO7LJdzPf3NE3KQYFNV0/Lcz2VAndbRFil58XVCyh8tiX11fiYw==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", "dev": true, "requires": { "is-wsl": "^1.1.0" } }, - "opn-cli": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/opn-cli/-/opn-cli-4.1.0.tgz", - "integrity": "sha512-nVJ9dVb4fEKtmACWxUql+hhQxVWMt7BSRT+6TnB85W3xs5Pgk9sKW3icYeCIwOtOKALBw/6WUCoNmI1+ADfAow==", + "open-cli": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/open-cli/-/open-cli-5.0.0.tgz", + "integrity": "sha512-Y2KQDS6NqNtk+PSXzSgwH41vTDMRndwFgVWsfgMhXv7lNe1cImLCe19Vo8oKwMsL7WeNsGmmbX7Ml74Ydj61Cg==", "dev": true, "requires": { - "file-type": "^10.10.0", - "get-stdin": "^6.0.0", + "file-type": "^11.0.0", + "get-stdin": "^7.0.0", "meow": "^5.0.0", - "open": "^6.1.0", - "temp-write": "^3.4.0" + "open": "^6.3.0", + "temp-write": "^4.0.0" } }, "optimist": { @@ -3542,7 +4283,6 @@ "version": "0.8.2", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.2.tgz", "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", - "dev": true, "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.4", @@ -3552,37 +4292,12 @@ "wordwrap": "~1.0.0" } }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "requires": { - "execa": "^1.0.0", - "lcid": "^2.0.0", - "mem": "^4.0.0" - } - }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", "dev": true }, - "p-defer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", - "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=" - }, - "p-finally": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" - }, - "p-is-promise": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", - "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==" - }, "p-limit": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", @@ -3628,13 +4343,12 @@ } }, "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "error-ex": "^1.2.0" } }, "path-exists": { @@ -3648,16 +4362,11 @@ "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, - "path-is-inside": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/path-is-inside/-/path-is-inside-1.0.2.tgz", - "integrity": "sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM=", - "dev": true - }, "path-key": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=" + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true }, "path-parse": { "version": "1.0.6", @@ -3666,18 +4375,26 @@ "dev": true }, "path-type": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", - "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", + "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "dev": true, "requires": { - "pify": "^3.0.0" + "pify": "^2.0.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } } }, "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, "pirates": { @@ -3701,13 +4418,12 @@ "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", - "dev": true + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=" }, "prettier": { - "version": "1.14.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.14.3.tgz", - "integrity": "sha512-qZDVnCrnpsRJJq5nSsiHCE3BYMED2OtsI+cmzIzF1QIfqm5ALf8tEJcO27zV1gKNKRPdhjO0dNWnrzssDQ1tFg==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.19.1.tgz", + "integrity": "sha512-s7PoyDv/II1ObgQunCbB9PdLmUcBZcnWOcxDh7O0N/UwDEsHyqkW+Qh28jW+mVuCdx7gLB0BotYI1Y6uI9iyew==", "dev": true }, "prettier-linter-helpers": { @@ -3725,12 +4441,6 @@ "integrity": "sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg==", "dev": true }, - "process-nextick-args": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", - "dev": true - }, "progress": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", @@ -3743,15 +4453,6 @@ "integrity": "sha512-2yma2tog9VaRZY2mn3Wq51uiSW4NcPYT1cQdBagwyrznrilKSZwIZ0UG3ZPL/mx+axEns0hE35T5ufOYZXEnBQ==", "dev": true }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, "punycode": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", @@ -3765,24 +4466,24 @@ "dev": true }, "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", + "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, "requires": { - "load-json-file": "^4.0.0", + "load-json-file": "^2.0.0", "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" + "path-type": "^2.0.0" } }, "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", + "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, "requires": { "find-up": "^2.0.0", - "read-pkg": "^3.0.0" + "read-pkg": "^2.0.0" }, "dependencies": { "find-up": { @@ -3831,18 +4532,14 @@ } }, "readable-stream": { - "version": "2.3.6", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", - "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.4.0.tgz", + "integrity": "sha512-jItXPLmrSR8jmTRmRWJXCnGJsfy85mB3Wd/uINMXA65yrnFo0cPClFIUWzo2najVNSl+mx7/4W8ttlLWJe99pQ==", "dev": true, "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } }, "redent": { @@ -3886,9 +4583,9 @@ } }, "regexp-tree": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.6.tgz", - "integrity": "sha512-LFrA98Dw/heXqDojz7qKFdygZmFoiVlvE1Zp7Cq2cvF+ZA+03Gmhy0k0PQlsC1jvHPiTUSs+pDHEuSWv6+6D7w==", + "version": "0.1.17", + "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.17.tgz", + "integrity": "sha512-UnOJjFS/EPZmfISmYx+0PcDtPzyFKTe+cZTS5sM5hifnRUDRxoB1j4DAmGwqzxjwBGlwOkGfb2cDGHtjuEwqoA==", "dev": true }, "regexpp": { @@ -3911,6 +4608,12 @@ "unicode-match-property-value-ecmascript": "^1.1.0" } }, + "regextras": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.6.1.tgz", + "integrity": "sha512-EzIHww9xV2Kpqx+corS/I7OBmf2rZ0pKKJPsw5Dc+l6Zq1TslDmtRIP9maVn3UH+72MIXmn8zzDgP07ihQogUA==", + "dev": true + }, "regjsgen": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.1.tgz", @@ -3918,9 +4621,9 @@ "dev": true }, "regjsparser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.1.tgz", + "integrity": "sha512-7LutE94sz/NKSYegK+/4E77+8DipxF+Qn2Tmu362AcmsF2NYq/wx3+ObvU90TKEhjf7hQoFXo23ajjrXP7eUgg==", "dev": true, "requires": { "jsesc": "~0.5.0" @@ -3979,12 +4682,6 @@ "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==" }, - "requireindex": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", - "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", - "dev": true - }, "requizzle": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.3.tgz", @@ -4009,9 +4706,9 @@ "dev": true }, "resolve": { - "version": "1.10.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.10.1.tgz", - "integrity": "sha512-KuIe4mf++td/eFb6wkaPbMDnP6kObCaEtIDuHOUED6MNUo4K670KZUHuuvYPZDxNF0WVLw49n06M2m2dXphEzA==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.14.0.tgz", + "integrity": "sha512-uviWSi5N67j3t3UKFxej1loCH0VZn5XuqdNxoLShPcYPw6cUZn74K1VRj+9myynRX03bxIBEkwlkob/ujLsJVw==", "dev": true, "requires": { "path-parse": "^1.0.6" @@ -4024,12 +4721,12 @@ "dev": true }, "restore-cursor": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-2.0.0.tgz", - "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", "dev": true, "requires": { - "onetime": "^2.0.0", + "onetime": "^5.1.0", "signal-exit": "^3.0.2" } }, @@ -4043,9 +4740,9 @@ } }, "rollup": { - "version": "1.25.2", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.25.2.tgz", - "integrity": "sha512-+7z6Wab/L45QCPcfpuTZKwKiB0tynj05s/+s2U3F2Bi7rOLPr9UcjUwO7/xpjlPNXA/hwnth6jBExFRGyf3tMg==", + "version": "1.27.13", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-1.27.13.tgz", + "integrity": "sha512-hDi7M07MpmNSDE8YVwGVFA8L7n8jTLJ4lG65nMAijAyqBe//rtu4JdxjUBE7JqXfdpqxqDTbCDys9WcqdpsQvw==", "dev": true, "requires": { "@types/estree": "*", @@ -4071,28 +4768,17 @@ "rollup-pluginutils": "^2.8.1" } }, - "rollup-plugin-node-resolve": { - "version": "4.2.4", - "resolved": "https://registry.npmjs.org/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-4.2.4.tgz", - "integrity": "sha512-t/64I6l7fZ9BxqD3XlX4ZeO6+5RLKyfpwE2CiPNUKa+GocPlQhf/C208ou8y3AwtNsc6bjSk/8/6y/YAyxCIvw==", - "dev": true, - "requires": { - "@types/resolve": "0.0.8", - "builtin-modules": "^3.1.0", - "is-module": "^1.0.0", - "resolve": "^1.10.0" - } - }, "rollup-plugin-terser": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-4.0.4.tgz", - "integrity": "sha512-wPANT5XKVJJ8RDUN0+wIr7UPd0lIXBo4UdJ59VmlPCtlFsE20AM+14pe+tk7YunCsWEiuzkDBY3QIkSCjtrPXg==", + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.1.3.tgz", + "integrity": "sha512-FuFuXE5QUJ7snyxHLPp/0LFXJhdomKlIx/aK7Tg88Yubsx/UU/lmInoJafXJ4jwVVNcORJ1wRUC5T9cy5yk0wA==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", - "jest-worker": "^24.0.0", - "serialize-javascript": "^1.6.1", - "terser": "^3.14.1" + "jest-worker": "^24.6.0", + "rollup-pluginutils": "^2.8.1", + "serialize-javascript": "^2.1.2", + "terser": "^4.1.0" } }, "rollup-pluginutils": { @@ -4114,9 +4800,9 @@ } }, "rxjs": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.1.tgz", - "integrity": "sha512-y0j31WJc83wPu31vS1VlAFW5JGrnGC+j+TtGAa1fRQphy48+fDYiDmX8tjGloToEsMkxnouOg/1IzXGKkJnZMg==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.5.3.tgz", + "integrity": "sha512-wuYsAYYFdWTAnAaPoKGNhfpWwKZbJW+HgAJ+mImp+Epl7BG8oNWBCTyRM8gba9k4lk8BgWdoYm21Mo/RYhhbgA==", "dev": true, "requires": { "tslib": "^1.9.0" @@ -4129,9 +4815,9 @@ "dev": true }, "safe-regex": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.0.2.tgz", - "integrity": "sha512-rRALJT0mh4qVFIJ9HvfjKDN77F9vp7kltOpFFI/8e6oKyHFmmxz4aSkY/YVauRDe7U0RrHdw9Lsxdel3E19s0A==", + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-2.1.1.tgz", + "integrity": "sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==", "dev": true, "requires": { "regexp-tree": "~0.1.1" @@ -4146,12 +4832,13 @@ "semver": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true }, "serialize-javascript": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.7.0.tgz", - "integrity": "sha512-ke8UG8ulpFOxO8f8gRYabHQe/ZntKlcig2Mp+8+URDP1D8vJZ0KUt7LYo07q25Z/+JVSgpr/cui9PIp5H6/+nA==", + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-2.1.2.tgz", + "integrity": "sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ==", "dev": true }, "set-blocking": { @@ -4163,6 +4850,7 @@ "version": "1.2.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -4170,12 +4858,14 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=" + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true }, "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true }, "slice-ansi": { "version": "2.1.0", @@ -4195,9 +4885,9 @@ "dev": true }, "source-map-support": { - "version": "0.5.12", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.12.tgz", - "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", "dev": true, "requires": { "buffer-from": "^1.0.0", @@ -4239,9 +4929,9 @@ } }, "spdx-license-ids": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.4.tgz", - "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", + "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", "dev": true }, "sprintf-js": { @@ -4287,12 +4977,20 @@ } }, "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "requires": { - "safe-buffer": "~5.1.0" + "safe-buffer": "~5.2.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", + "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", + "dev": true + } } }, "strip-ansi": { @@ -4310,11 +5008,6 @@ "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, - "strip-eof": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", - "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=" - }, "strip-indent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", @@ -4337,13 +5030,13 @@ } }, "table": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/table/-/table-5.2.3.tgz", - "integrity": "sha512-N2RsDAMvDLvYwFcwbPyF3VmVSSkuF+G1e+8inhBLtHpvwXGw4QRPEZhihQNeEN0i1up6/f6ObCJXNdlRG3YVyQ==", + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", "dev": true, "requires": { - "ajv": "^6.9.1", - "lodash": "^4.17.11", + "ajv": "^6.10.2", + "lodash": "^4.17.14", "slice-ansi": "^2.1.0", "string-width": "^3.0.0" }, @@ -4389,28 +5082,44 @@ "dev": true }, "temp-write": { - "version": "3.4.0", - "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-3.4.0.tgz", - "integrity": "sha1-jP9jD7fp2gXwR8dM5M5NaFRX1JI=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/temp-write/-/temp-write-4.0.0.tgz", + "integrity": "sha512-HIeWmj77uOOHb0QX7siN3OtwV3CTntquin6TNVg6SHOqCP3hYKmox90eeFOGaY1MqJ9WYDDjkyZrW6qS5AWpbw==", "dev": true, "requires": { - "graceful-fs": "^4.1.2", - "is-stream": "^1.1.0", - "make-dir": "^1.0.0", - "pify": "^3.0.0", + "graceful-fs": "^4.1.15", + "is-stream": "^2.0.0", + "make-dir": "^3.0.0", "temp-dir": "^1.0.0", - "uuid": "^3.0.1" + "uuid": "^3.3.2" + }, + "dependencies": { + "make-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.0.0.tgz", + "integrity": "sha512-grNJDhb8b1Jm1qeqW5R/O63wUo4UXo2v2HMic6YT9i/HBlF93S8jkMgH7yugvY9ABDShH4VZMn8I+U8+fCNegw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + } + }, + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } } }, "terser": { - "version": "3.17.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-3.17.0.tgz", - "integrity": "sha512-/FQzzPJmCpjAH9Xvk2paiWrFq+5M6aVOf+2KRbwhByISDX/EujxsK+BAvrhb6H+2rtrLCHK9N01wO014vrIwVQ==", + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.4.3.tgz", + "integrity": "sha512-0ikKraVtRDKGzHrzkCv5rUNDzqlhmhowOBqC0XqUHFpW+vJ45+20/IFBcebwKfiS2Z9fJin6Eo+F1zLZsxi8RA==", "dev": true, "requires": { - "commander": "^2.19.0", + "commander": "^2.20.0", "source-map": "~0.6.1", - "source-map-support": "~0.5.10" + "source-map-support": "~0.5.12" }, "dependencies": { "source-map": { @@ -4473,15 +5182,15 @@ "dev": true }, "tslib": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.9.3.tgz", - "integrity": "sha512-4krF8scpejhaOgqzBEcGM7yDIEfi0/8+8zDRZhNZZ2kjmHJ4hv3zCbQWxoJGz1iw5U0Jl0nma13xzHXcncMavQ==", + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.10.0.tgz", + "integrity": "sha512-qOebF53frne81cf0S9B41ByenJ3/IuH8yJKngAX35CmiZySA0khhkovshKK+jGCaMnVomla7gVlIcc3EvKPbTQ==", "dev": true }, "tsutils": { - "version": "3.10.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.10.0.tgz", - "integrity": "sha512-q20XSMq7jutbGB8luhKKsQldRKWvyBO2BGqni3p4yq8Ys9bEP/xQw3KepKmMRt9gJ4lvQSScrihJrcKdKoSU7Q==", + "version": "3.17.1", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.17.1.tgz", + "integrity": "sha512-kzeQ5B8H3w60nFY2g8cJIuH7JDpsALXySGtwGJ0p2LSjLgay3NdIpqq5SoOBe46bKDW2iq25irHCr8wjomUS2g==", "dev": true, "requires": { "tslib": "^1.8.1" @@ -4491,15 +5200,20 @@ "version": "0.3.2", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", - "dev": true, "requires": { "prelude-ls": "~1.1.2" } }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + }, "typescript": { - "version": "3.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.6.4.tgz", - "integrity": "sha512-unoCll1+l+YK4i4F8f22TaNVPRHcD9PA3yCuZ8g5e0qGqlVlJ/8FSateOLLSagn+Yg5+ZwuPkL8LFUc0Jcvksg==", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.7.3.tgz", + "integrity": "sha512-Mcr/Qk7hXqFBXMN7p7Lusj1ktCBydylfQM/FZCk5glCNQJrCUKPkMHdo9R0MTFWsC/4kPFvDS0fDPvukfCkFsw==", "dev": true }, "uc.micro": { @@ -4573,9 +5287,9 @@ "dev": true }, "unist-util-remove-position": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.3.tgz", - "integrity": "sha512-CtszTlOjP2sBGYc2zcKA/CvNdTdEs3ozbiJ63IPBxh8iZg42SCCb8m04f8z2+V1aSk5a7BxbZKEdoDjadmBkWA==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", + "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", "dev": true, "requires": { "unist-util-visit": "^1.1.0" @@ -4621,9 +5335,15 @@ "dev": true }, "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.3.tgz", + "integrity": "sha512-pW0No1RGHgzlpHJO1nsVrHKpOEIxkGg1xB+v0ZmdNH5OAeAwzAVrCnI2/6Mtx+Uys6iaylxa+D3g4j63IKKjSQ==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.1.0.tgz", + "integrity": "sha512-usZBT3PW+LOjM25wbqIlZwPeJV+3OSz3M1k1Ws8snlW39dZyYL9lOGC5FgPVHfk0jKmjiDV8Z0mIbVQPiwFs7g==", "dev": true }, "validate-npm-package-license": { @@ -4649,9 +5369,9 @@ } }, "vfile-location": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.5.tgz", - "integrity": "sha512-Pa1ey0OzYBkLPxPZI3d9E+S4BmvfVwNAAXrrqGbwTVXWaX2p9kM1zZ+n35UtVM06shmWKH4RPRN8KI80qE3wNQ==", + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", + "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==", "dev": true }, "vfile-message": { @@ -4664,26 +5384,34 @@ } }, "vue-eslint-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-5.0.0.tgz", - "integrity": "sha512-JlHVZwBBTNVvzmifwjpZYn0oPWH2SgWv5dojlZBsrhablDu95VFD+hriB1rQGwbD+bms6g+rAFhQHk6+NyiS6g==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-7.0.0.tgz", + "integrity": "sha512-yR0dLxsTT7JfD2YQo9BhnQ6bUTLsZouuzt9SKRP7XNaZJV459gvlsJo4vT2nhZ/2dH9j3c53bIx9dnqU2prM9g==", "dev": true, "requires": { - "debug": "^4.1.0", - "eslint-scope": "^4.0.0", - "eslint-visitor-keys": "^1.0.0", - "espree": "^4.1.0", + "debug": "^4.1.1", + "eslint-scope": "^5.0.0", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", "esquery": "^1.0.1", - "lodash": "^4.17.11" + "lodash": "^4.17.15" }, "dependencies": { - "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "acorn": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.1.0.tgz", + "integrity": "sha512-kL5CuoXA/dgxlBbVrflsflzQ3PAas7RYZB52NOm/6839iVYJgKMJ3cQJD+t2i5+qFa8h3MDpEOJiS64E8JLnSQ==", + "dev": true + }, + "espree": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/espree/-/espree-6.1.2.tgz", + "integrity": "sha512-2iUPuuPP+yW1PZaMSDM9eyVf8D5P0Hi8h83YtZ5bPc/zHYjII5khoixIUTMO794NOY8F/ThF1Bo8ncZILarUTA==", "dev": true, "requires": { - "ms": "^2.1.1" + "acorn": "^7.1.0", + "acorn-jsx": "^5.1.0", + "eslint-visitor-keys": "^1.1.0" } } } @@ -4692,6 +5420,7 @@ "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, "requires": { "isexe": "^2.0.0" } @@ -4710,17 +5439,21 @@ "string-width": "^1.0.2 || 2" } }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, "wordwrap": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true + "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=" }, "wrap-ansi": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", - "dev": true, "requires": { "ansi-styles": "^3.2.0", "string-width": "^3.0.0", @@ -4730,14 +5463,12 @@ "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -4748,7 +5479,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, "requires": { "ansi-regex": "^4.1.0" } @@ -4758,7 +5488,8 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true }, "write": { "version": "1.0.3", @@ -4796,7 +5527,6 @@ "version": "13.3.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", - "dev": true, "requires": { "cliui": "^5.0.0", "find-up": "^3.0.0", @@ -4813,14 +5543,12 @@ "ansi-regex": { "version": "4.1.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", - "dev": true + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==" }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", - "dev": true, "requires": { "emoji-regex": "^7.0.1", "is-fullwidth-code-point": "^2.0.0", @@ -4831,7 +5559,6 @@ "version": "5.2.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, "requires": { "ansi-regex": "^4.1.0" } @@ -4842,7 +5569,6 @@ "version": "13.1.1", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", - "dev": true, "requires": { "camelcase": "^5.0.0", "decamelize": "^1.2.0" diff --git a/package.json b/package.json index 40f5b27..b2af518 100644 --- a/package.json +++ b/package.json @@ -26,12 +26,12 @@ "cover 100%" ], "scripts": { - "eslint": "eslint --ext js,md .", + "eslint": "eslint --ext js,md,html .", "rollup": "rollup -c", "test": "npm run eslint && npm run rollup && mocha --require @babel/register", "start": "static -p 8055", "build-docs": "rm -rf docs/jsdoc/*;jsdoc --pedantic -c docs/jsdoc-config.js .", - "open-docs": "opn http://localhost:8055/docs/jsdoc/ && npm start" + "open-docs": "open-cli http://localhost:8055/docs/jsdoc/ && npm start" }, "keywords": [ "intersection", @@ -46,42 +46,45 @@ "rectangle" ], "dependencies": { - "gp-data-transformer": "^0.0.1", + "gp-data-transformer": "^0.0.2", "kld-affine": "^2.1.1", "kld-path-parser": "^0.2.1", "kld-polynomial": "^0.3.0" }, "devDependencies": { - "@babel/core": "^7.6.4", - "@babel/preset-env": "^7.6.3", - "@babel/register": "^7.6.2", - "@mysticatea/eslint-plugin": "^10.0.3", - "eslint": "^5.16.0", - "eslint-config-ash-nazg": "^4.0.0", - "eslint-config-standard": "^12.0.0", + "@babel/core": "^7.7.5", + "@babel/preset-env": "^7.7.6", + "@babel/register": "^7.7.4", + "@mysticatea/eslint-plugin": "^13.0.0", + "@rollup/plugin-node-resolve": "^6.0.0", + "eslint": "^6.7.2", + "eslint-config-ash-nazg": "^13.1.0", + "eslint-config-standard": "^14.1.0", + "eslint-plugin-array-func": "^3.1.3", "eslint-plugin-compat": "^3.3.0", "eslint-plugin-eslint-comments": "^3.1.2", - "eslint-plugin-import": "^2.18.2", - "eslint-plugin-jsdoc": "^4.8.4", + "eslint-plugin-html": "^6.0.0", + "eslint-plugin-import": "^2.19.1", + "eslint-plugin-jsdoc": "^18.4.3", "eslint-plugin-markdown": "^1.0.1", "eslint-plugin-no-use-extend-native": "^0.4.1", - "eslint-plugin-node": "^9.2.0", + "eslint-plugin-node": "^10.0.0", "eslint-plugin-promise": "^4.2.1", + "eslint-plugin-sonarjs": "^0.5.0", "eslint-plugin-standard": "^4.0.1", - "eslint-plugin-unicorn": "^8.0.2", + "eslint-plugin-unicorn": "^14.0.1", "esm": "^3.2.25", "jsdoc": "^3.6.3", "kld-contours": "^0.3.2", "mocha": "^6.2.2", "node-static": "^0.7.11", - "opn-cli": "^4.1.0", - "rollup": "^1.25.2", + "open-cli": "^5.0.0", + "rollup": "^1.27.13", "rollup-plugin-babel": "^4.3.3", - "rollup-plugin-node-resolve": "^4.2.4", - "rollup-plugin-terser": "^4.0.4", - "typescript": "^3.6.4" + "rollup-plugin-terser": "^5.1.3", + "typescript": "^3.7.3" }, "engines": { - "node": ">= 10.15.3" + "node": ">=10.15.3" } } diff --git a/rollup.config.js b/rollup.config.js index d70dfc0..a1b03a2 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,4 +1,4 @@ -import resolve from "rollup-plugin-node-resolve"; +import resolve from "@rollup/plugin-node-resolve"; import babel from "rollup-plugin-babel"; import {terser} from "rollup-plugin-terser";