diff --git a/jalhyd_branch b/jalhyd_branch
index 507bddeeb2094e69036adf32012a679ff60c197d..94f89b3b03cef0d6963c4d0d2b1be518876e8eb7 100644
--- a/jalhyd_branch
+++ b/jalhyd_branch
@@ -1,2 +1 @@
-33-ajout-du-calcul-d-une-passe-a-bassin
-
+62-fonctionnalite-plusieurs-parametres-qui-varient-nghyd-126
\ No newline at end of file
diff --git a/package-lock.json b/package-lock.json
index 21d7266f4042daa6d0ccd3f306c006be79fc3514..f828b90e1c150e742489f03fd308c71527d077d9 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -7220,2180 +7220,7 @@
       }
     },
     "jalhyd": {
-      "version": "file:../jalhyd",
-      "dependencies": {
-        "@types/jasmine": {
-          "version": "2.8.8",
-          "bundled": true
-        },
-        "@types/node": {
-          "version": "10.5.2",
-          "bundled": true
-        },
-        "accepts": {
-          "version": "1.3.5",
-          "bundled": true,
-          "requires": {
-            "mime-types": "~2.1.18",
-            "negotiator": "0.6.1"
-          }
-        },
-        "after": {
-          "version": "0.8.2",
-          "bundled": true
-        },
-        "ansi-regex": {
-          "version": "2.1.1",
-          "bundled": true
-        },
-        "ansi-styles": {
-          "version": "2.2.1",
-          "bundled": true
-        },
-        "anymatch": {
-          "version": "2.0.0",
-          "bundled": true,
-          "requires": {
-            "micromatch": "^3.1.4",
-            "normalize-path": "^2.1.1"
-          },
-          "dependencies": {
-            "normalize-path": {
-              "version": "2.1.1",
-              "bundled": true,
-              "requires": {
-                "remove-trailing-separator": "^1.0.1"
-              }
-            }
-          }
-        },
-        "argparse": {
-          "version": "1.0.10",
-          "bundled": true,
-          "requires": {
-            "sprintf-js": "~1.0.2"
-          }
-        },
-        "arr-diff": {
-          "version": "4.0.0",
-          "bundled": true
-        },
-        "arr-flatten": {
-          "version": "1.1.0",
-          "bundled": true
-        },
-        "arr-union": {
-          "version": "3.1.0",
-          "bundled": true
-        },
-        "array-unique": {
-          "version": "0.3.2",
-          "bundled": true
-        },
-        "arraybuffer.slice": {
-          "version": "0.0.7",
-          "bundled": true
-        },
-        "assign-symbols": {
-          "version": "1.0.0",
-          "bundled": true
-        },
-        "async": {
-          "version": "2.6.2",
-          "bundled": true,
-          "requires": {
-            "lodash": "^4.17.11"
-          },
-          "dependencies": {
-            "lodash": {
-              "version": "4.17.11",
-              "bundled": true
-            }
-          }
-        },
-        "async-each": {
-          "version": "1.0.3",
-          "bundled": true
-        },
-        "async-limiter": {
-          "version": "1.0.0",
-          "bundled": true
-        },
-        "atob": {
-          "version": "2.1.2",
-          "bundled": true
-        },
-        "babel-code-frame": {
-          "version": "6.26.0",
-          "bundled": true,
-          "requires": {
-            "chalk": "^1.1.3",
-            "esutils": "^2.0.2",
-            "js-tokens": "^3.0.2"
-          },
-          "dependencies": {
-            "chalk": {
-              "version": "1.1.3",
-              "bundled": true,
-              "requires": {
-                "ansi-styles": "^2.2.1",
-                "escape-string-regexp": "^1.0.2",
-                "has-ansi": "^2.0.0",
-                "strip-ansi": "^3.0.0",
-                "supports-color": "^2.0.0"
-              }
-            }
-          }
-        },
-        "backo2": {
-          "version": "1.0.2",
-          "bundled": true
-        },
-        "balanced-match": {
-          "version": "1.0.0",
-          "bundled": true
-        },
-        "base": {
-          "version": "0.11.2",
-          "bundled": true,
-          "requires": {
-            "cache-base": "^1.0.1",
-            "class-utils": "^0.3.5",
-            "component-emitter": "^1.2.1",
-            "define-property": "^1.0.0",
-            "isobject": "^3.0.1",
-            "mixin-deep": "^1.2.0",
-            "pascalcase": "^0.1.1"
-          },
-          "dependencies": {
-            "define-property": {
-              "version": "1.0.0",
-              "bundled": true,
-              "requires": {
-                "is-descriptor": "^1.0.0"
-              }
-            },
-            "is-accessor-descriptor": {
-              "version": "1.0.0",
-              "bundled": true,
-              "requires": {
-                "kind-of": "^6.0.0"
-              }
-            },
-            "is-data-descriptor": {
-              "version": "1.0.0",
-              "bundled": true,
-              "requires": {
-                "kind-of": "^6.0.0"
-              }
-            },
-            "is-descriptor": {
-              "version": "1.0.2",
-              "bundled": true,
-              "requires": {
-                "is-accessor-descriptor": "^1.0.0",
-                "is-data-descriptor": "^1.0.0",
-                "kind-of": "^6.0.2"
-              }
-            },
-            "kind-of": {
-              "version": "6.0.2",
-              "bundled": true
-            }
-          }
-        },
-        "base64-arraybuffer": {
-          "version": "0.1.5",
-          "bundled": true
-        },
-        "base64-js": {
-          "version": "1.3.0",
-          "bundled": true
-        },
-        "base64id": {
-          "version": "1.0.0",
-          "bundled": true
-        },
-        "better-assert": {
-          "version": "1.0.2",
-          "bundled": true,
-          "requires": {
-            "callsite": "1.0.0"
-          }
-        },
-        "binary-extensions": {
-          "version": "1.13.1",
-          "bundled": true
-        },
-        "blob": {
-          "version": "0.0.5",
-          "bundled": true
-        },
-        "bluebird": {
-          "version": "3.5.4",
-          "bundled": true
-        },
-        "body-parser": {
-          "version": "1.18.3",
-          "bundled": true,
-          "requires": {
-            "bytes": "3.0.0",
-            "content-type": "~1.0.4",
-            "debug": "2.6.9",
-            "depd": "~1.1.2",
-            "http-errors": "~1.6.3",
-            "iconv-lite": "0.4.23",
-            "on-finished": "~2.3.0",
-            "qs": "6.5.2",
-            "raw-body": "2.3.3",
-            "type-is": "~1.6.16"
-          }
-        },
-        "brace-expansion": {
-          "version": "1.1.8",
-          "bundled": true,
-          "requires": {
-            "balanced-match": "^1.0.0",
-            "concat-map": "0.0.1"
-          }
-        },
-        "braces": {
-          "version": "2.3.2",
-          "bundled": true,
-          "requires": {
-            "arr-flatten": "^1.1.0",
-            "array-unique": "^0.3.2",
-            "extend-shallow": "^2.0.1",
-            "fill-range": "^4.0.0",
-            "isobject": "^3.0.1",
-            "repeat-element": "^1.1.2",
-            "snapdragon": "^0.8.1",
-            "snapdragon-node": "^2.0.1",
-            "split-string": "^3.0.2",
-            "to-regex": "^3.0.1"
-          }
-        },
-        "buffer": {
-          "version": "5.2.1",
-          "bundled": true,
-          "requires": {
-            "base64-js": "^1.0.2",
-            "ieee754": "^1.1.4"
-          }
-        },
-        "buffer-alloc": {
-          "version": "1.2.0",
-          "bundled": true,
-          "requires": {
-            "buffer-alloc-unsafe": "^1.1.0",
-            "buffer-fill": "^1.0.0"
-          }
-        },
-        "buffer-alloc-unsafe": {
-          "version": "1.1.0",
-          "bundled": true
-        },
-        "buffer-fill": {
-          "version": "1.0.0",
-          "bundled": true
-        },
-        "builtin-modules": {
-          "version": "1.1.1",
-          "bundled": true
-        },
-        "bytes": {
-          "version": "3.0.0",
-          "bundled": true
-        },
-        "cache-base": {
-          "version": "1.0.1",
-          "bundled": true,
-          "requires": {
-            "collection-visit": "^1.0.0",
-            "component-emitter": "^1.2.1",
-            "get-value": "^2.0.6",
-            "has-value": "^1.0.0",
-            "isobject": "^3.0.1",
-            "set-value": "^2.0.0",
-            "to-object-path": "^0.3.0",
-            "union-value": "^1.0.0",
-            "unset-value": "^1.0.0"
-          }
-        },
-        "callsite": {
-          "version": "1.0.0",
-          "bundled": true
-        },
-        "chalk": {
-          "version": "2.3.0",
-          "bundled": true,
-          "requires": {
-            "ansi-styles": "^3.1.0",
-            "escape-string-regexp": "^1.0.5",
-            "supports-color": "^4.0.0"
-          },
-          "dependencies": {
-            "ansi-styles": {
-              "version": "3.2.0",
-              "bundled": true,
-              "requires": {
-                "color-convert": "^1.9.0"
-              }
-            },
-            "supports-color": {
-              "version": "4.5.0",
-              "bundled": true,
-              "requires": {
-                "has-flag": "^2.0.0"
-              }
-            }
-          }
-        },
-        "chokidar": {
-          "version": "2.1.5",
-          "bundled": true,
-          "requires": {
-            "anymatch": "^2.0.0",
-            "async-each": "^1.0.1",
-            "braces": "^2.3.2",
-            "glob-parent": "^3.1.0",
-            "inherits": "^2.0.3",
-            "is-binary-path": "^1.0.0",
-            "is-glob": "^4.0.0",
-            "normalize-path": "^3.0.0",
-            "path-is-absolute": "^1.0.0",
-            "readdirp": "^2.2.1",
-            "upath": "^1.1.1"
-          }
-        },
-        "class-utils": {
-          "version": "0.3.6",
-          "bundled": true,
-          "requires": {
-            "arr-union": "^3.1.0",
-            "define-property": "^0.2.5",
-            "isobject": "^3.0.0",
-            "static-extend": "^0.1.1"
-          }
-        },
-        "coffeescript": {
-          "version": "2.3.1",
-          "bundled": true
-        },
-        "collection-visit": {
-          "version": "1.0.0",
-          "bundled": true,
-          "requires": {
-            "map-visit": "^1.0.0",
-            "object-visit": "^1.0.0"
-          }
-        },
-        "color-convert": {
-          "version": "1.9.1",
-          "bundled": true,
-          "requires": {
-            "color-name": "^1.1.1"
-          }
-        },
-        "color-name": {
-          "version": "1.1.3",
-          "bundled": true
-        },
-        "colors": {
-          "version": "1.3.3",
-          "bundled": true
-        },
-        "commander": {
-          "version": "2.12.2",
-          "bundled": true
-        },
-        "component-bind": {
-          "version": "1.0.0",
-          "bundled": true
-        },
-        "component-emitter": {
-          "version": "1.3.0",
-          "bundled": true
-        },
-        "component-inherit": {
-          "version": "0.0.3",
-          "bundled": true
-        },
-        "concat-map": {
-          "version": "0.0.1",
-          "bundled": true
-        },
-        "connect": {
-          "version": "3.6.6",
-          "bundled": true,
-          "requires": {
-            "debug": "2.6.9",
-            "finalhandler": "1.1.0",
-            "parseurl": "~1.3.2",
-            "utils-merge": "1.0.1"
-          }
-        },
-        "content-type": {
-          "version": "1.0.4",
-          "bundled": true
-        },
-        "cookie": {
-          "version": "0.3.1",
-          "bundled": true
-        },
-        "copy-descriptor": {
-          "version": "0.1.1",
-          "bundled": true
-        },
-        "core-js": {
-          "version": "2.6.5",
-          "bundled": true
-        },
-        "core-util-is": {
-          "version": "1.0.2",
-          "bundled": true
-        },
-        "custom-event": {
-          "version": "1.0.1",
-          "bundled": true
-        },
-        "date-format": {
-          "version": "2.0.0",
-          "bundled": true
-        },
-        "debug": {
-          "version": "2.6.9",
-          "bundled": true,
-          "requires": {
-            "ms": "2.0.0"
-          }
-        },
-        "decode-uri-component": {
-          "version": "0.2.0",
-          "bundled": true
-        },
-        "define-property": {
-          "version": "0.2.5",
-          "bundled": true,
-          "requires": {
-            "is-descriptor": "^0.1.0"
-          }
-        },
-        "depd": {
-          "version": "1.1.2",
-          "bundled": true
-        },
-        "di": {
-          "version": "0.0.1",
-          "bundled": true
-        },
-        "diff": {
-          "version": "3.4.0",
-          "bundled": true
-        },
-        "dom-serialize": {
-          "version": "2.2.1",
-          "bundled": true,
-          "requires": {
-            "custom-event": "~1.0.0",
-            "ent": "~2.2.0",
-            "extend": "^3.0.0",
-            "void-elements": "^2.0.0"
-          }
-        },
-        "ee-first": {
-          "version": "1.1.1",
-          "bundled": true
-        },
-        "encodeurl": {
-          "version": "1.0.2",
-          "bundled": true
-        },
-        "engine.io": {
-          "version": "3.2.1",
-          "bundled": true,
-          "requires": {
-            "accepts": "~1.3.4",
-            "base64id": "1.0.0",
-            "cookie": "0.3.1",
-            "debug": "~3.1.0",
-            "engine.io-parser": "~2.1.0",
-            "ws": "~3.3.1"
-          },
-          "dependencies": {
-            "debug": {
-              "version": "3.1.0",
-              "bundled": true,
-              "requires": {
-                "ms": "2.0.0"
-              }
-            }
-          }
-        },
-        "engine.io-client": {
-          "version": "3.2.1",
-          "bundled": true,
-          "requires": {
-            "component-emitter": "1.2.1",
-            "component-inherit": "0.0.3",
-            "debug": "~3.1.0",
-            "engine.io-parser": "~2.1.1",
-            "has-cors": "1.1.0",
-            "indexof": "0.0.1",
-            "parseqs": "0.0.5",
-            "parseuri": "0.0.5",
-            "ws": "~3.3.1",
-            "xmlhttprequest-ssl": "~1.5.4",
-            "yeast": "0.1.2"
-          },
-          "dependencies": {
-            "component-emitter": {
-              "version": "1.2.1",
-              "bundled": true
-            },
-            "debug": {
-              "version": "3.1.0",
-              "bundled": true,
-              "requires": {
-                "ms": "2.0.0"
-              }
-            }
-          }
-        },
-        "engine.io-parser": {
-          "version": "2.1.3",
-          "bundled": true,
-          "requires": {
-            "after": "0.8.2",
-            "arraybuffer.slice": "~0.0.7",
-            "base64-arraybuffer": "0.1.5",
-            "blob": "0.0.5",
-            "has-binary2": "~1.0.2"
-          }
-        },
-        "ent": {
-          "version": "2.2.0",
-          "bundled": true
-        },
-        "escape-html": {
-          "version": "1.0.3",
-          "bundled": true
-        },
-        "escape-string-regexp": {
-          "version": "1.0.5",
-          "bundled": true
-        },
-        "esprima": {
-          "version": "4.0.1",
-          "bundled": true
-        },
-        "esutils": {
-          "version": "2.0.2",
-          "bundled": true
-        },
-        "eventemitter3": {
-          "version": "3.1.0",
-          "bundled": true
-        },
-        "expand-brackets": {
-          "version": "2.1.4",
-          "bundled": true,
-          "requires": {
-            "debug": "^2.3.3",
-            "define-property": "^0.2.5",
-            "extend-shallow": "^2.0.1",
-            "posix-character-classes": "^0.1.0",
-            "regex-not": "^1.0.0",
-            "snapdragon": "^0.8.1",
-            "to-regex": "^3.0.1"
-          }
-        },
-        "extend": {
-          "version": "3.0.2",
-          "bundled": true
-        },
-        "extend-shallow": {
-          "version": "2.0.1",
-          "bundled": true,
-          "requires": {
-            "is-extendable": "^0.1.0"
-          }
-        },
-        "extglob": {
-          "version": "2.0.4",
-          "bundled": true,
-          "requires": {
-            "array-unique": "^0.3.2",
-            "define-property": "^1.0.0",
-            "expand-brackets": "^2.1.4",
-            "extend-shallow": "^2.0.1",
-            "fragment-cache": "^0.2.1",
-            "regex-not": "^1.0.0",
-            "snapdragon": "^0.8.1",
-            "to-regex": "^3.0.1"
-          },
-          "dependencies": {
-            "define-property": {
-              "version": "1.0.0",
-              "bundled": true,
-              "requires": {
-                "is-descriptor": "^1.0.0"
-              }
-            },
-            "is-accessor-descriptor": {
-              "version": "1.0.0",
-              "bundled": true,
-              "requires": {
-                "kind-of": "^6.0.0"
-              }
-            },
-            "is-data-descriptor": {
-              "version": "1.0.0",
-              "bundled": true,
-              "requires": {
-                "kind-of": "^6.0.0"
-              }
-            },
-            "is-descriptor": {
-              "version": "1.0.2",
-              "bundled": true,
-              "requires": {
-                "is-accessor-descriptor": "^1.0.0",
-                "is-data-descriptor": "^1.0.0",
-                "kind-of": "^6.0.2"
-              }
-            },
-            "kind-of": {
-              "version": "6.0.2",
-              "bundled": true
-            }
-          }
-        },
-        "fill-range": {
-          "version": "4.0.0",
-          "bundled": true,
-          "requires": {
-            "extend-shallow": "^2.0.1",
-            "is-number": "^3.0.0",
-            "repeat-string": "^1.6.1",
-            "to-regex-range": "^2.1.0"
-          }
-        },
-        "finalhandler": {
-          "version": "1.1.0",
-          "bundled": true,
-          "requires": {
-            "debug": "2.6.9",
-            "encodeurl": "~1.0.1",
-            "escape-html": "~1.0.3",
-            "on-finished": "~2.3.0",
-            "parseurl": "~1.3.2",
-            "statuses": "~1.3.1",
-            "unpipe": "~1.0.0"
-          },
-          "dependencies": {
-            "statuses": {
-              "version": "1.3.1",
-              "bundled": true
-            }
-          }
-        },
-        "flatted": {
-          "version": "2.0.0",
-          "bundled": true
-        },
-        "follow-redirects": {
-          "version": "1.7.0",
-          "bundled": true,
-          "requires": {
-            "debug": "^3.2.6"
-          },
-          "dependencies": {
-            "debug": {
-              "version": "3.2.6",
-              "bundled": true,
-              "requires": {
-                "ms": "^2.1.1"
-              }
-            },
-            "ms": {
-              "version": "2.1.1",
-              "bundled": true
-            }
-          }
-        },
-        "for-in": {
-          "version": "1.0.2",
-          "bundled": true
-        },
-        "fragment-cache": {
-          "version": "0.2.1",
-          "bundled": true,
-          "requires": {
-            "map-cache": "^0.2.2"
-          }
-        },
-        "fs-access": {
-          "version": "1.0.1",
-          "bundled": true,
-          "requires": {
-            "null-check": "^1.0.0"
-          }
-        },
-        "fs-extra": {
-          "version": "7.0.1",
-          "bundled": true,
-          "requires": {
-            "graceful-fs": "^4.1.2",
-            "jsonfile": "^4.0.0",
-            "universalify": "^0.1.0"
-          }
-        },
-        "fs.realpath": {
-          "version": "1.0.0",
-          "bundled": true
-        },
-        "get-value": {
-          "version": "2.0.6",
-          "bundled": true
-        },
-        "glob": {
-          "version": "7.1.2",
-          "bundled": 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"
-          }
-        },
-        "glob-parent": {
-          "version": "3.1.0",
-          "bundled": true,
-          "requires": {
-            "is-glob": "^3.1.0",
-            "path-dirname": "^1.0.0"
-          },
-          "dependencies": {
-            "is-glob": {
-              "version": "3.1.0",
-              "bundled": true,
-              "requires": {
-                "is-extglob": "^2.1.0"
-              }
-            }
-          }
-        },
-        "globule": {
-          "version": "1.2.1",
-          "bundled": true,
-          "requires": {
-            "glob": "~7.1.1",
-            "lodash": "~4.17.10",
-            "minimatch": "~3.0.2"
-          }
-        },
-        "graceful-fs": {
-          "version": "4.1.15",
-          "bundled": true
-        },
-        "has-ansi": {
-          "version": "2.0.0",
-          "bundled": true,
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "has-binary2": {
-          "version": "1.0.3",
-          "bundled": true,
-          "requires": {
-            "isarray": "2.0.1"
-          },
-          "dependencies": {
-            "isarray": {
-              "version": "2.0.1",
-              "bundled": true
-            }
-          }
-        },
-        "has-cors": {
-          "version": "1.1.0",
-          "bundled": true
-        },
-        "has-flag": {
-          "version": "2.0.0",
-          "bundled": true
-        },
-        "has-value": {
-          "version": "1.0.0",
-          "bundled": true,
-          "requires": {
-            "get-value": "^2.0.6",
-            "has-values": "^1.0.0",
-            "isobject": "^3.0.0"
-          }
-        },
-        "has-values": {
-          "version": "1.0.0",
-          "bundled": true,
-          "requires": {
-            "is-number": "^3.0.0",
-            "kind-of": "^4.0.0"
-          },
-          "dependencies": {
-            "kind-of": {
-              "version": "4.0.0",
-              "bundled": true,
-              "requires": {
-                "is-buffer": "^1.1.5"
-              }
-            }
-          }
-        },
-        "http-errors": {
-          "version": "1.6.3",
-          "bundled": true,
-          "requires": {
-            "depd": "~1.1.2",
-            "inherits": "2.0.3",
-            "setprototypeof": "1.1.0",
-            "statuses": ">= 1.4.0 < 2"
-          }
-        },
-        "http-proxy": {
-          "version": "1.17.0",
-          "bundled": true,
-          "requires": {
-            "eventemitter3": "^3.0.0",
-            "follow-redirects": "^1.0.0",
-            "requires-port": "^1.0.0"
-          }
-        },
-        "iconv-lite": {
-          "version": "0.4.23",
-          "bundled": true,
-          "requires": {
-            "safer-buffer": ">= 2.1.2 < 3"
-          }
-        },
-        "ieee754": {
-          "version": "1.1.13",
-          "bundled": true
-        },
-        "indexof": {
-          "version": "0.0.1",
-          "bundled": true
-        },
-        "inflight": {
-          "version": "1.0.6",
-          "bundled": true,
-          "requires": {
-            "once": "^1.3.0",
-            "wrappy": "1"
-          }
-        },
-        "inherits": {
-          "version": "2.0.3",
-          "bundled": true
-        },
-        "is-accessor-descriptor": {
-          "version": "0.1.6",
-          "bundled": true,
-          "requires": {
-            "kind-of": "^3.0.2"
-          }
-        },
-        "is-binary-path": {
-          "version": "1.0.1",
-          "bundled": true,
-          "requires": {
-            "binary-extensions": "^1.0.0"
-          }
-        },
-        "is-buffer": {
-          "version": "1.1.6",
-          "bundled": true
-        },
-        "is-data-descriptor": {
-          "version": "0.1.4",
-          "bundled": true,
-          "requires": {
-            "kind-of": "^3.0.2"
-          }
-        },
-        "is-descriptor": {
-          "version": "0.1.6",
-          "bundled": true,
-          "requires": {
-            "is-accessor-descriptor": "^0.1.6",
-            "is-data-descriptor": "^0.1.4",
-            "kind-of": "^5.0.0"
-          },
-          "dependencies": {
-            "kind-of": {
-              "version": "5.1.0",
-              "bundled": true
-            }
-          }
-        },
-        "is-extendable": {
-          "version": "0.1.1",
-          "bundled": true
-        },
-        "is-extglob": {
-          "version": "2.1.1",
-          "bundled": true
-        },
-        "is-glob": {
-          "version": "4.0.1",
-          "bundled": true,
-          "requires": {
-            "is-extglob": "^2.1.1"
-          }
-        },
-        "is-number": {
-          "version": "3.0.0",
-          "bundled": true,
-          "requires": {
-            "kind-of": "^3.0.2"
-          }
-        },
-        "is-plain-object": {
-          "version": "2.0.4",
-          "bundled": true,
-          "requires": {
-            "isobject": "^3.0.1"
-          }
-        },
-        "is-windows": {
-          "version": "1.0.2",
-          "bundled": true
-        },
-        "isarray": {
-          "version": "1.0.0",
-          "bundled": true
-        },
-        "isbinaryfile": {
-          "version": "3.0.3",
-          "bundled": true,
-          "requires": {
-            "buffer-alloc": "^1.2.0"
-          }
-        },
-        "isexe": {
-          "version": "2.0.0",
-          "bundled": true
-        },
-        "isobject": {
-          "version": "3.0.1",
-          "bundled": true
-        },
-        "jasmine": {
-          "version": "3.4.0",
-          "bundled": true,
-          "requires": {
-            "glob": "^7.1.3",
-            "jasmine-core": "~3.4.0"
-          },
-          "dependencies": {
-            "glob": {
-              "version": "7.1.3",
-              "bundled": 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"
-              }
-            }
-          }
-        },
-        "jasmine-core": {
-          "version": "3.4.0",
-          "bundled": true
-        },
-        "jasmine-node": {
-          "version": "1.15.0",
-          "bundled": true,
-          "requires": {
-            "coffeescript": ">=1.0.1",
-            "gaze": "~1.1.2",
-            "jasmine-growl-reporter": "~1.0.1",
-            "jasmine-reporters": "~1.0.0",
-            "mkdirp": "~0.3.5",
-            "requirejs": ">=0.27.1",
-            "underscore": ">= 1.3.1",
-            "walkdir": ">= 0.0.1"
-          },
-          "dependencies": {
-            "gaze": {
-              "version": "1.1.3",
-              "bundled": true,
-              "requires": {
-                "globule": "^1.0.0"
-              }
-            },
-            "growl": {
-              "version": "1.10.5",
-              "bundled": true
-            },
-            "jasmine-growl-reporter": {
-              "version": "1.0.1",
-              "bundled": true,
-              "requires": {
-                "growl": "^1.10.2"
-              }
-            }
-          }
-        },
-        "jasmine-reporters": {
-          "version": "1.0.2",
-          "bundled": true,
-          "requires": {
-            "mkdirp": "~0.3.5"
-          }
-        },
-        "js-tokens": {
-          "version": "3.0.2",
-          "bundled": true
-        },
-        "js-yaml": {
-          "version": "3.13.1",
-          "bundled": true,
-          "requires": {
-            "argparse": "^1.0.7",
-            "esprima": "^4.0.0"
-          }
-        },
-        "jsonfile": {
-          "version": "4.0.0",
-          "bundled": true,
-          "requires": {
-            "graceful-fs": "^4.1.6"
-          }
-        },
-        "karma": {
-          "version": "4.1.0",
-          "bundled": true,
-          "requires": {
-            "bluebird": "^3.3.0",
-            "body-parser": "^1.16.1",
-            "braces": "^2.3.2",
-            "chokidar": "^2.0.3",
-            "colors": "^1.1.0",
-            "connect": "^3.6.0",
-            "core-js": "^2.2.0",
-            "di": "^0.0.1",
-            "dom-serialize": "^2.2.0",
-            "flatted": "^2.0.0",
-            "glob": "^7.1.1",
-            "graceful-fs": "^4.1.2",
-            "http-proxy": "^1.13.0",
-            "isbinaryfile": "^3.0.0",
-            "lodash": "^4.17.11",
-            "log4js": "^4.0.0",
-            "mime": "^2.3.1",
-            "minimatch": "^3.0.2",
-            "optimist": "^0.6.1",
-            "qjobs": "^1.1.4",
-            "range-parser": "^1.2.0",
-            "rimraf": "^2.6.0",
-            "safe-buffer": "^5.0.1",
-            "socket.io": "2.1.1",
-            "source-map": "^0.6.1",
-            "tmp": "0.0.33",
-            "useragent": "2.3.0"
-          },
-          "dependencies": {
-            "lodash": {
-              "version": "4.17.11",
-              "bundled": true
-            }
-          }
-        },
-        "karma-chrome-launcher": {
-          "version": "2.2.0",
-          "bundled": true,
-          "requires": {
-            "fs-access": "^1.0.0",
-            "which": "^1.2.1"
-          }
-        },
-        "karma-jasmine": {
-          "version": "2.0.1",
-          "bundled": true,
-          "requires": {
-            "jasmine-core": "^3.3"
-          },
-          "dependencies": {
-            "jasmine-core": {
-              "version": "3.4.0",
-              "bundled": true
-            }
-          }
-        },
-        "karma-jasmine-html-reporter": {
-          "version": "1.4.0",
-          "bundled": true
-        },
-        "kind-of": {
-          "version": "3.2.2",
-          "bundled": true,
-          "requires": {
-            "is-buffer": "^1.1.5"
-          }
-        },
-        "lodash": {
-          "version": "4.17.11",
-          "bundled": true
-        },
-        "log4js": {
-          "version": "4.1.0",
-          "bundled": true,
-          "requires": {
-            "date-format": "^2.0.0",
-            "debug": "^4.1.1",
-            "flatted": "^2.0.0",
-            "rfdc": "^1.1.2",
-            "streamroller": "^1.0.4"
-          },
-          "dependencies": {
-            "debug": {
-              "version": "4.1.1",
-              "bundled": true,
-              "requires": {
-                "ms": "^2.1.1"
-              }
-            },
-            "ms": {
-              "version": "2.1.1",
-              "bundled": true
-            }
-          }
-        },
-        "lru-cache": {
-          "version": "4.1.5",
-          "bundled": true,
-          "requires": {
-            "pseudomap": "^1.0.2",
-            "yallist": "^2.1.2"
-          }
-        },
-        "map-cache": {
-          "version": "0.2.2",
-          "bundled": true
-        },
-        "map-visit": {
-          "version": "1.0.0",
-          "bundled": true,
-          "requires": {
-            "object-visit": "^1.0.0"
-          }
-        },
-        "media-typer": {
-          "version": "0.3.0",
-          "bundled": true
-        },
-        "micromatch": {
-          "version": "3.1.10",
-          "bundled": true,
-          "requires": {
-            "arr-diff": "^4.0.0",
-            "array-unique": "^0.3.2",
-            "braces": "^2.3.1",
-            "define-property": "^2.0.2",
-            "extend-shallow": "^3.0.2",
-            "extglob": "^2.0.4",
-            "fragment-cache": "^0.2.1",
-            "kind-of": "^6.0.2",
-            "nanomatch": "^1.2.9",
-            "object.pick": "^1.3.0",
-            "regex-not": "^1.0.0",
-            "snapdragon": "^0.8.1",
-            "to-regex": "^3.0.2"
-          },
-          "dependencies": {
-            "define-property": {
-              "version": "2.0.2",
-              "bundled": true,
-              "requires": {
-                "is-descriptor": "^1.0.2",
-                "isobject": "^3.0.1"
-              }
-            },
-            "extend-shallow": {
-              "version": "3.0.2",
-              "bundled": true,
-              "requires": {
-                "assign-symbols": "^1.0.0",
-                "is-extendable": "^1.0.1"
-              }
-            },
-            "is-accessor-descriptor": {
-              "version": "1.0.0",
-              "bundled": true,
-              "requires": {
-                "kind-of": "^6.0.0"
-              }
-            },
-            "is-data-descriptor": {
-              "version": "1.0.0",
-              "bundled": true,
-              "requires": {
-                "kind-of": "^6.0.0"
-              }
-            },
-            "is-descriptor": {
-              "version": "1.0.2",
-              "bundled": true,
-              "requires": {
-                "is-accessor-descriptor": "^1.0.0",
-                "is-data-descriptor": "^1.0.0",
-                "kind-of": "^6.0.2"
-              }
-            },
-            "is-extendable": {
-              "version": "1.0.1",
-              "bundled": true,
-              "requires": {
-                "is-plain-object": "^2.0.4"
-              }
-            },
-            "kind-of": {
-              "version": "6.0.2",
-              "bundled": true
-            }
-          }
-        },
-        "mime": {
-          "version": "2.4.2",
-          "bundled": true
-        },
-        "mime-db": {
-          "version": "1.39.0",
-          "bundled": true
-        },
-        "mime-types": {
-          "version": "2.1.23",
-          "bundled": true,
-          "requires": {
-            "mime-db": "~1.39.0"
-          }
-        },
-        "minimatch": {
-          "version": "3.0.4",
-          "bundled": true,
-          "requires": {
-            "brace-expansion": "^1.1.7"
-          }
-        },
-        "minimist": {
-          "version": "0.0.10",
-          "bundled": true
-        },
-        "mixin-deep": {
-          "version": "1.3.1",
-          "bundled": true,
-          "requires": {
-            "for-in": "^1.0.2",
-            "is-extendable": "^1.0.1"
-          },
-          "dependencies": {
-            "is-extendable": {
-              "version": "1.0.1",
-              "bundled": true,
-              "requires": {
-                "is-plain-object": "^2.0.4"
-              }
-            }
-          }
-        },
-        "mkdirp": {
-          "version": "0.3.5",
-          "bundled": true
-        },
-        "ms": {
-          "version": "2.0.0",
-          "bundled": true
-        },
-        "nanomatch": {
-          "version": "1.2.13",
-          "bundled": true,
-          "requires": {
-            "arr-diff": "^4.0.0",
-            "array-unique": "^0.3.2",
-            "define-property": "^2.0.2",
-            "extend-shallow": "^3.0.2",
-            "fragment-cache": "^0.2.1",
-            "is-windows": "^1.0.2",
-            "kind-of": "^6.0.2",
-            "object.pick": "^1.3.0",
-            "regex-not": "^1.0.0",
-            "snapdragon": "^0.8.1",
-            "to-regex": "^3.0.1"
-          },
-          "dependencies": {
-            "define-property": {
-              "version": "2.0.2",
-              "bundled": true,
-              "requires": {
-                "is-descriptor": "^1.0.2",
-                "isobject": "^3.0.1"
-              }
-            },
-            "extend-shallow": {
-              "version": "3.0.2",
-              "bundled": true,
-              "requires": {
-                "assign-symbols": "^1.0.0",
-                "is-extendable": "^1.0.1"
-              }
-            },
-            "is-accessor-descriptor": {
-              "version": "1.0.0",
-              "bundled": true,
-              "requires": {
-                "kind-of": "^6.0.0"
-              }
-            },
-            "is-data-descriptor": {
-              "version": "1.0.0",
-              "bundled": true,
-              "requires": {
-                "kind-of": "^6.0.0"
-              }
-            },
-            "is-descriptor": {
-              "version": "1.0.2",
-              "bundled": true,
-              "requires": {
-                "is-accessor-descriptor": "^1.0.0",
-                "is-data-descriptor": "^1.0.0",
-                "kind-of": "^6.0.2"
-              }
-            },
-            "is-extendable": {
-              "version": "1.0.1",
-              "bundled": true,
-              "requires": {
-                "is-plain-object": "^2.0.4"
-              }
-            },
-            "kind-of": {
-              "version": "6.0.2",
-              "bundled": true
-            }
-          }
-        },
-        "negotiator": {
-          "version": "0.6.1",
-          "bundled": true
-        },
-        "normalize-path": {
-          "version": "3.0.0",
-          "bundled": true
-        },
-        "null-check": {
-          "version": "1.0.0",
-          "bundled": true
-        },
-        "object-component": {
-          "version": "0.0.3",
-          "bundled": true
-        },
-        "object-copy": {
-          "version": "0.1.0",
-          "bundled": true,
-          "requires": {
-            "copy-descriptor": "^0.1.0",
-            "define-property": "^0.2.5",
-            "kind-of": "^3.0.3"
-          }
-        },
-        "object-visit": {
-          "version": "1.0.1",
-          "bundled": true,
-          "requires": {
-            "isobject": "^3.0.0"
-          }
-        },
-        "object.pick": {
-          "version": "1.3.0",
-          "bundled": true,
-          "requires": {
-            "isobject": "^3.0.1"
-          }
-        },
-        "on-finished": {
-          "version": "2.3.0",
-          "bundled": true,
-          "requires": {
-            "ee-first": "1.1.1"
-          }
-        },
-        "once": {
-          "version": "1.4.0",
-          "bundled": true,
-          "requires": {
-            "wrappy": "1"
-          }
-        },
-        "optimist": {
-          "version": "0.6.1",
-          "bundled": true,
-          "requires": {
-            "minimist": "~0.0.1",
-            "wordwrap": "~0.0.2"
-          }
-        },
-        "os-tmpdir": {
-          "version": "1.0.2",
-          "bundled": true
-        },
-        "parseqs": {
-          "version": "0.0.5",
-          "bundled": true,
-          "requires": {
-            "better-assert": "~1.0.0"
-          }
-        },
-        "parseuri": {
-          "version": "0.0.5",
-          "bundled": true,
-          "requires": {
-            "better-assert": "~1.0.0"
-          }
-        },
-        "parseurl": {
-          "version": "1.3.3",
-          "bundled": true
-        },
-        "pascalcase": {
-          "version": "0.1.1",
-          "bundled": true
-        },
-        "path-dirname": {
-          "version": "1.0.2",
-          "bundled": true
-        },
-        "path-is-absolute": {
-          "version": "1.0.1",
-          "bundled": true
-        },
-        "path-parse": {
-          "version": "1.0.5",
-          "bundled": true
-        },
-        "posix-character-classes": {
-          "version": "0.1.1",
-          "bundled": true
-        },
-        "process-nextick-args": {
-          "version": "2.0.0",
-          "bundled": true
-        },
-        "pseudomap": {
-          "version": "1.0.2",
-          "bundled": true
-        },
-        "qjobs": {
-          "version": "1.2.0",
-          "bundled": true
-        },
-        "qs": {
-          "version": "6.5.2",
-          "bundled": true
-        },
-        "range-parser": {
-          "version": "1.2.0",
-          "bundled": true
-        },
-        "raw-body": {
-          "version": "2.3.3",
-          "bundled": true,
-          "requires": {
-            "bytes": "3.0.0",
-            "http-errors": "1.6.3",
-            "iconv-lite": "0.4.23",
-            "unpipe": "1.0.0"
-          }
-        },
-        "readable-stream": {
-          "version": "2.3.6",
-          "bundled": 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"
-          }
-        },
-        "readdirp": {
-          "version": "2.2.1",
-          "bundled": true,
-          "requires": {
-            "graceful-fs": "^4.1.11",
-            "micromatch": "^3.1.10",
-            "readable-stream": "^2.0.2"
-          }
-        },
-        "regex-not": {
-          "version": "1.0.2",
-          "bundled": true,
-          "requires": {
-            "extend-shallow": "^3.0.2",
-            "safe-regex": "^1.1.0"
-          },
-          "dependencies": {
-            "extend-shallow": {
-              "version": "3.0.2",
-              "bundled": true,
-              "requires": {
-                "assign-symbols": "^1.0.0",
-                "is-extendable": "^1.0.1"
-              }
-            },
-            "is-extendable": {
-              "version": "1.0.1",
-              "bundled": true,
-              "requires": {
-                "is-plain-object": "^2.0.4"
-              }
-            }
-          }
-        },
-        "remove-trailing-separator": {
-          "version": "1.1.0",
-          "bundled": true
-        },
-        "repeat-element": {
-          "version": "1.1.3",
-          "bundled": true
-        },
-        "repeat-string": {
-          "version": "1.6.1",
-          "bundled": true
-        },
-        "requirejs": {
-          "version": "2.3.6",
-          "bundled": true
-        },
-        "requires-port": {
-          "version": "1.0.0",
-          "bundled": true
-        },
-        "resolve": {
-          "version": "1.5.0",
-          "bundled": true,
-          "requires": {
-            "path-parse": "^1.0.5"
-          }
-        },
-        "resolve-url": {
-          "version": "0.2.1",
-          "bundled": true
-        },
-        "ret": {
-          "version": "0.1.15",
-          "bundled": true
-        },
-        "rfdc": {
-          "version": "1.1.2",
-          "bundled": true
-        },
-        "rimraf": {
-          "version": "2.6.3",
-          "bundled": true,
-          "requires": {
-            "glob": "^7.1.3"
-          },
-          "dependencies": {
-            "glob": {
-              "version": "7.1.3",
-              "bundled": 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"
-              }
-            }
-          }
-        },
-        "safe-buffer": {
-          "version": "5.1.2",
-          "bundled": true
-        },
-        "safe-regex": {
-          "version": "1.1.0",
-          "bundled": true,
-          "requires": {
-            "ret": "~0.1.10"
-          }
-        },
-        "safer-buffer": {
-          "version": "2.1.2",
-          "bundled": true
-        },
-        "semver": {
-          "version": "5.4.1",
-          "bundled": true
-        },
-        "set-value": {
-          "version": "2.0.0",
-          "bundled": true,
-          "requires": {
-            "extend-shallow": "^2.0.1",
-            "is-extendable": "^0.1.1",
-            "is-plain-object": "^2.0.3",
-            "split-string": "^3.0.1"
-          }
-        },
-        "setprototypeof": {
-          "version": "1.1.0",
-          "bundled": true
-        },
-        "snapdragon": {
-          "version": "0.8.2",
-          "bundled": true,
-          "requires": {
-            "base": "^0.11.1",
-            "debug": "^2.2.0",
-            "define-property": "^0.2.5",
-            "extend-shallow": "^2.0.1",
-            "map-cache": "^0.2.2",
-            "source-map": "^0.5.6",
-            "source-map-resolve": "^0.5.0",
-            "use": "^3.1.0"
-          },
-          "dependencies": {
-            "source-map": {
-              "version": "0.5.7",
-              "bundled": true
-            }
-          }
-        },
-        "snapdragon-node": {
-          "version": "2.1.1",
-          "bundled": true,
-          "requires": {
-            "define-property": "^1.0.0",
-            "isobject": "^3.0.0",
-            "snapdragon-util": "^3.0.1"
-          },
-          "dependencies": {
-            "define-property": {
-              "version": "1.0.0",
-              "bundled": true,
-              "requires": {
-                "is-descriptor": "^1.0.0"
-              }
-            },
-            "is-accessor-descriptor": {
-              "version": "1.0.0",
-              "bundled": true,
-              "requires": {
-                "kind-of": "^6.0.0"
-              }
-            },
-            "is-data-descriptor": {
-              "version": "1.0.0",
-              "bundled": true,
-              "requires": {
-                "kind-of": "^6.0.0"
-              }
-            },
-            "is-descriptor": {
-              "version": "1.0.2",
-              "bundled": true,
-              "requires": {
-                "is-accessor-descriptor": "^1.0.0",
-                "is-data-descriptor": "^1.0.0",
-                "kind-of": "^6.0.2"
-              }
-            },
-            "kind-of": {
-              "version": "6.0.2",
-              "bundled": true
-            }
-          }
-        },
-        "snapdragon-util": {
-          "version": "3.0.1",
-          "bundled": true,
-          "requires": {
-            "kind-of": "^3.2.0"
-          }
-        },
-        "socket.io": {
-          "version": "2.1.1",
-          "bundled": true,
-          "requires": {
-            "debug": "~3.1.0",
-            "engine.io": "~3.2.0",
-            "has-binary2": "~1.0.2",
-            "socket.io-adapter": "~1.1.0",
-            "socket.io-client": "2.1.1",
-            "socket.io-parser": "~3.2.0"
-          },
-          "dependencies": {
-            "debug": {
-              "version": "3.1.0",
-              "bundled": true,
-              "requires": {
-                "ms": "2.0.0"
-              }
-            }
-          }
-        },
-        "socket.io-adapter": {
-          "version": "1.1.1",
-          "bundled": true
-        },
-        "socket.io-client": {
-          "version": "2.1.1",
-          "bundled": true,
-          "requires": {
-            "backo2": "1.0.2",
-            "base64-arraybuffer": "0.1.5",
-            "component-bind": "1.0.0",
-            "component-emitter": "1.2.1",
-            "debug": "~3.1.0",
-            "engine.io-client": "~3.2.0",
-            "has-binary2": "~1.0.2",
-            "has-cors": "1.1.0",
-            "indexof": "0.0.1",
-            "object-component": "0.0.3",
-            "parseqs": "0.0.5",
-            "parseuri": "0.0.5",
-            "socket.io-parser": "~3.2.0",
-            "to-array": "0.1.4"
-          },
-          "dependencies": {
-            "component-emitter": {
-              "version": "1.2.1",
-              "bundled": true
-            },
-            "debug": {
-              "version": "3.1.0",
-              "bundled": true,
-              "requires": {
-                "ms": "2.0.0"
-              }
-            }
-          }
-        },
-        "socket.io-parser": {
-          "version": "3.2.0",
-          "bundled": true,
-          "requires": {
-            "component-emitter": "1.2.1",
-            "debug": "~3.1.0",
-            "isarray": "2.0.1"
-          },
-          "dependencies": {
-            "component-emitter": {
-              "version": "1.2.1",
-              "bundled": true
-            },
-            "debug": {
-              "version": "3.1.0",
-              "bundled": true,
-              "requires": {
-                "ms": "2.0.0"
-              }
-            },
-            "isarray": {
-              "version": "2.0.1",
-              "bundled": true
-            }
-          }
-        },
-        "source-map": {
-          "version": "0.6.1",
-          "bundled": true
-        },
-        "source-map-resolve": {
-          "version": "0.5.2",
-          "bundled": true,
-          "requires": {
-            "atob": "^2.1.1",
-            "decode-uri-component": "^0.2.0",
-            "resolve-url": "^0.2.1",
-            "source-map-url": "^0.4.0",
-            "urix": "^0.1.0"
-          }
-        },
-        "source-map-url": {
-          "version": "0.4.0",
-          "bundled": true
-        },
-        "split-string": {
-          "version": "3.1.0",
-          "bundled": true,
-          "requires": {
-            "extend-shallow": "^3.0.0"
-          },
-          "dependencies": {
-            "extend-shallow": {
-              "version": "3.0.2",
-              "bundled": true,
-              "requires": {
-                "assign-symbols": "^1.0.0",
-                "is-extendable": "^1.0.1"
-              }
-            },
-            "is-extendable": {
-              "version": "1.0.1",
-              "bundled": true,
-              "requires": {
-                "is-plain-object": "^2.0.4"
-              }
-            }
-          }
-        },
-        "sprintf-js": {
-          "version": "1.0.3",
-          "bundled": true
-        },
-        "static-extend": {
-          "version": "0.1.2",
-          "bundled": true,
-          "requires": {
-            "define-property": "^0.2.5",
-            "object-copy": "^0.1.0"
-          }
-        },
-        "statuses": {
-          "version": "1.5.0",
-          "bundled": true
-        },
-        "streamroller": {
-          "version": "1.0.4",
-          "bundled": true,
-          "requires": {
-            "async": "^2.6.1",
-            "date-format": "^2.0.0",
-            "debug": "^3.1.0",
-            "fs-extra": "^7.0.0",
-            "lodash": "^4.17.10"
-          },
-          "dependencies": {
-            "debug": {
-              "version": "3.2.6",
-              "bundled": true,
-              "requires": {
-                "ms": "^2.1.1"
-              }
-            },
-            "ms": {
-              "version": "2.1.1",
-              "bundled": true
-            }
-          }
-        },
-        "string_decoder": {
-          "version": "1.1.1",
-          "bundled": true,
-          "requires": {
-            "safe-buffer": "~5.1.0"
-          }
-        },
-        "strip-ansi": {
-          "version": "3.0.1",
-          "bundled": true,
-          "requires": {
-            "ansi-regex": "^2.0.0"
-          }
-        },
-        "supports-color": {
-          "version": "2.0.0",
-          "bundled": true
-        },
-        "tmp": {
-          "version": "0.0.33",
-          "bundled": true,
-          "requires": {
-            "os-tmpdir": "~1.0.2"
-          }
-        },
-        "to-array": {
-          "version": "0.1.4",
-          "bundled": true
-        },
-        "to-object-path": {
-          "version": "0.3.0",
-          "bundled": true,
-          "requires": {
-            "kind-of": "^3.0.2"
-          }
-        },
-        "to-regex": {
-          "version": "3.0.2",
-          "bundled": true,
-          "requires": {
-            "define-property": "^2.0.2",
-            "extend-shallow": "^3.0.2",
-            "regex-not": "^1.0.2",
-            "safe-regex": "^1.1.0"
-          },
-          "dependencies": {
-            "define-property": {
-              "version": "2.0.2",
-              "bundled": true,
-              "requires": {
-                "is-descriptor": "^1.0.2",
-                "isobject": "^3.0.1"
-              }
-            },
-            "extend-shallow": {
-              "version": "3.0.2",
-              "bundled": true,
-              "requires": {
-                "assign-symbols": "^1.0.0",
-                "is-extendable": "^1.0.1"
-              }
-            },
-            "is-accessor-descriptor": {
-              "version": "1.0.0",
-              "bundled": true,
-              "requires": {
-                "kind-of": "^6.0.0"
-              }
-            },
-            "is-data-descriptor": {
-              "version": "1.0.0",
-              "bundled": true,
-              "requires": {
-                "kind-of": "^6.0.0"
-              }
-            },
-            "is-descriptor": {
-              "version": "1.0.2",
-              "bundled": true,
-              "requires": {
-                "is-accessor-descriptor": "^1.0.0",
-                "is-data-descriptor": "^1.0.0",
-                "kind-of": "^6.0.2"
-              }
-            },
-            "is-extendable": {
-              "version": "1.0.1",
-              "bundled": true,
-              "requires": {
-                "is-plain-object": "^2.0.4"
-              }
-            },
-            "kind-of": {
-              "version": "6.0.2",
-              "bundled": true
-            }
-          }
-        },
-        "to-regex-range": {
-          "version": "2.1.1",
-          "bundled": true,
-          "requires": {
-            "is-number": "^3.0.0",
-            "repeat-string": "^1.6.1"
-          }
-        },
-        "tslib": {
-          "version": "1.8.1",
-          "bundled": true
-        },
-        "tslint": {
-          "version": "5.11.0",
-          "bundled": true,
-          "requires": {
-            "babel-code-frame": "^6.22.0",
-            "builtin-modules": "^1.1.1",
-            "chalk": "^2.3.0",
-            "commander": "^2.12.1",
-            "diff": "^3.2.0",
-            "glob": "^7.1.1",
-            "js-yaml": "^3.7.0",
-            "minimatch": "^3.0.4",
-            "resolve": "^1.3.2",
-            "semver": "^5.3.0",
-            "tslib": "^1.8.0",
-            "tsutils": "^2.27.2"
-          },
-          "dependencies": {
-            "tsutils": {
-              "version": "2.28.0",
-              "bundled": true,
-              "requires": {
-                "tslib": "^1.8.1"
-              }
-            }
-          }
-        },
-        "type-is": {
-          "version": "1.6.16",
-          "bundled": true,
-          "requires": {
-            "media-typer": "0.3.0",
-            "mime-types": "~2.1.18"
-          }
-        },
-        "typescript": {
-          "version": "2.9.2",
-          "bundled": true
-        },
-        "ultron": {
-          "version": "1.1.1",
-          "bundled": true
-        },
-        "underscore": {
-          "version": "1.8.3",
-          "bundled": true
-        },
-        "union-value": {
-          "version": "1.0.0",
-          "bundled": true,
-          "requires": {
-            "arr-union": "^3.1.0",
-            "get-value": "^2.0.6",
-            "is-extendable": "^0.1.1",
-            "set-value": "^0.4.3"
-          },
-          "dependencies": {
-            "set-value": {
-              "version": "0.4.3",
-              "bundled": true,
-              "requires": {
-                "extend-shallow": "^2.0.1",
-                "is-extendable": "^0.1.1",
-                "is-plain-object": "^2.0.1",
-                "to-object-path": "^0.3.0"
-              }
-            }
-          }
-        },
-        "universalify": {
-          "version": "0.1.2",
-          "bundled": true
-        },
-        "unpipe": {
-          "version": "1.0.0",
-          "bundled": true
-        },
-        "unset-value": {
-          "version": "1.0.0",
-          "bundled": true,
-          "requires": {
-            "has-value": "^0.3.1",
-            "isobject": "^3.0.0"
-          },
-          "dependencies": {
-            "has-value": {
-              "version": "0.3.1",
-              "bundled": true,
-              "requires": {
-                "get-value": "^2.0.3",
-                "has-values": "^0.1.4",
-                "isobject": "^2.0.0"
-              },
-              "dependencies": {
-                "isobject": {
-                  "version": "2.1.0",
-                  "bundled": true,
-                  "requires": {
-                    "isarray": "1.0.0"
-                  }
-                }
-              }
-            },
-            "has-values": {
-              "version": "0.1.4",
-              "bundled": true
-            }
-          }
-        },
-        "upath": {
-          "version": "1.1.2",
-          "bundled": true
-        },
-        "urix": {
-          "version": "0.1.0",
-          "bundled": true
-        },
-        "use": {
-          "version": "3.1.1",
-          "bundled": true
-        },
-        "useragent": {
-          "version": "2.3.0",
-          "bundled": true,
-          "requires": {
-            "lru-cache": "4.1.x",
-            "tmp": "0.0.x"
-          }
-        },
-        "util-deprecate": {
-          "version": "1.0.2",
-          "bundled": true
-        },
-        "utils-merge": {
-          "version": "1.0.1",
-          "bundled": true
-        },
-        "void-elements": {
-          "version": "2.0.1",
-          "bundled": true
-        },
-        "walkdir": {
-          "version": "0.0.12",
-          "bundled": true
-        },
-        "which": {
-          "version": "1.3.1",
-          "bundled": true,
-          "requires": {
-            "isexe": "^2.0.0"
-          }
-        },
-        "wordwrap": {
-          "version": "0.0.3",
-          "bundled": true
-        },
-        "wrappy": {
-          "version": "1.0.2",
-          "bundled": true
-        },
-        "ws": {
-          "version": "3.3.3",
-          "bundled": true,
-          "requires": {
-            "async-limiter": "~1.0.0",
-            "safe-buffer": "~5.1.0",
-            "ultron": "~1.1.0"
-          }
-        },
-        "xmlhttprequest-ssl": {
-          "version": "1.5.5",
-          "bundled": true
-        },
-        "yallist": {
-          "version": "2.1.2",
-          "bundled": true
-        },
-        "yeast": {
-          "version": "0.1.2",
-          "bundled": true
-        }
-      }
+      "version": "file:../jalhyd"
     },
     "jasmine": {
       "version": "2.8.0",
@@ -12709,6 +10536,11 @@
         "ajv-keywords": "^3.1.0"
       }
     },
+    "screenfull": {
+      "version": "4.2.0",
+      "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-4.2.0.tgz",
+      "integrity": "sha512-qpyI9XbwuMJElWRP5vTgxkFAl4k7HpyhIqBFOZEwX9QBXn0MAuRSpn7LOc6/4CeSwoz61oBu1VPV+2fbIWC+5Q=="
+    },
     "scss-tokenizer": {
       "version": "0.2.3",
       "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz",
diff --git a/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.html b/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.html
index 8fbe604a524054fb39e7dc0727076d78e1e348b9..43f8a3a0f3565893efd03a7ae3ba2616cbc4ff10 100644
--- a/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.html
+++ b/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.html
@@ -105,6 +105,15 @@
         </form>
     </div>
 
+    <mat-form-field>
+      <mat-select [placeholder]="uitextExtensionStrategy" [(value)]="selectedExtensionStrategy"
+        data-testid="variable-extension-strategy-select">
+          <mat-option *ngFor="let e of extensionStrategies" [value]="e.value">
+              {{ e.label }}
+          </mat-option>
+      </mat-select>
+    </mat-form-field>
+
   </div>
 
   <div mat-dialog-content *ngIf="viewChart">
diff --git a/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.ts b/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.ts
index bb9168725ae178f4ac4e7e95fbf6e51ce306831f..803de5b0be298d58fe5de40432f1fa401afa4a6d 100644
--- a/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.ts
+++ b/src/app/components/dialog-edit-param-values/dialog-edit-param-values.component.ts
@@ -3,7 +3,7 @@ import { Inject, Component, OnInit } from "@angular/core";
 import { FormBuilder, FormGroup, Validators } from "@angular/forms";
 import { I18nService } from "../../services/internationalisation/internationalisation.service";
 import { NgParameter } from "../../formulaire/ngparam";
-import { ParamValueMode } from "jalhyd";
+import { ParamValueMode, ExtensionStrategy } from "jalhyd";
 import { sprintf } from "sprintf-js";
 import { ApplicationSetupService } from "../../services/app-setup/app-setup.service";
 
@@ -23,6 +23,9 @@ export class DialogEditParamValuesComponent implements OnInit {
     /** available decimal separators */
     public decimalSeparators: { label: string; value: string; }[];
 
+    /** available extension strategies */
+    public extensionStrategies: { value: ExtensionStrategy; label: string; }[];
+
     /** current decimal separator */
     public decimalSeparator: string;
 
@@ -76,6 +79,16 @@ export class DialogEditParamValuesComponent implements OnInit {
             }
         ];
         this.decimalSeparator = this.decimalSeparators[0].value;
+        this.extensionStrategies = [
+            {
+                value: ExtensionStrategy.REPEAT_LAST,
+                label: this.intlService.localizeText("INFO_PARAMFIELD_PARAMVARIER_EXT_STRATEGY_REPEAT_LAST")
+            },
+            {
+                value: ExtensionStrategy.RECYCLE,
+                label: this.intlService.localizeText("INFO_PARAMFIELD_PARAMVARIER_EXT_STRATEGY_RECYCLE")
+            }
+        ];
 
         // chart configuration
         const nDigits = this.appSetupService.displayDigits;
@@ -104,6 +117,11 @@ export class DialogEditParamValuesComponent implements OnInit {
                     }
                 }]
             },
+            elements: {
+                line: {
+                    tension: 0
+                }
+            },
             tooltips: {
                 callbacks: {
                     label: function(tooltipItem) {
@@ -166,6 +184,14 @@ export class DialogEditParamValuesComponent implements OnInit {
         this.param.valueMode = v;
     }
 
+    public get selectedExtensionStrategy() {
+        return this.param.paramDefinition.extensionStrategy;
+    }
+
+    public set selectedExtensionStrategy(es) {
+        this.param.paramDefinition.extensionStrategy = es;
+    }
+
     public get isMinMax() {
         return this.param.valueMode === ParamValueMode.MINMAX;
     }
@@ -407,6 +433,10 @@ export class DialogEditParamValuesComponent implements OnInit {
         return this.intlService.localizeText("INFO_PARAMFIELD_PARAMVARIER_IMPORT_FICHIER");
     }
 
+    public get uitextExtensionStrategy() {
+        return this.intlService.localizeText("INFO_PARAMFIELD_PARAMVARIER_EXT_STRATEGY");
+    }
+
     public ngOnInit() {
         this.initVariableValues();
     }
diff --git a/src/app/components/fixedvar-results/var-results.component.ts b/src/app/components/fixedvar-results/var-results.component.ts
index 2151ddd92552b66eb6812e0183cb579fd5166085..f737e1d4c03120fa6833e76c3dd0eb8ed21093d8 100644
--- a/src/app/components/fixedvar-results/var-results.component.ts
+++ b/src/app/components/fixedvar-results/var-results.component.ts
@@ -15,6 +15,9 @@ import { ResultsComponent } from "./results.component";
 })
 export class VarResultsComponent extends ResultsComponent {
 
+    /** size of the longest variated parameter */
+    public size: number;
+
     /** résultats non mis en forme */
     protected _varResults: VarResults;
 
@@ -33,54 +36,56 @@ export class VarResultsComponent extends ResultsComponent {
         super();
     }
 
+    /** Refreshes results and builds the dataset */
     public set results(r: VarResults) {
         this._varResults = r;
-
         this._results = [];
         this._headers = [];
 
+        const nDigits = this.appSetupService.displayDigits;
+
         if (this._varResults) {
-            const nDigits = this.appSetupService.displayDigits;
-            let i = 0;
-            for (const x of this._varResults.variatedParameter.valuesIterator) {
-                const pval = x.toFixed(nDigits);
-                this._results.push({ "param": pval, "result": this._varResults.resultElements[i] });
-                i++;
+            // A. build headers
+            for (let i = 0; i < this._varResults.variatedParameters.length; i++) {
+                this._headers.push(this._varResults.variableParamHeaders[i]);
             }
-
-            this._headers.push(this._varResults.variableParamHeader);
             if (this._varResults.calculatedParameterHeader) {
                 this._headers.push(this._varResults.calculatedParameterHeader);
             }
-
             this._headers = this._headers.concat(this._varResults.extraResultHeaders);
-        }
-    }
 
-    public get hasResults(): boolean {
-        return this._varResults && this._varResults.hasResults;
-    }
-
-    public get headers() {
-        return this._headers;
-    }
+            // B. pre-extract variable parameters valueslet longest = 0;
+            const varValues = [];
+            // find longest list
+            this.size = 0;
+            for (let i = 0; i < this._varResults.variatedParameters.length; i++) {
+                const vs = this._varResults.variatedParameters[i].valuesIterator.count();
+                if (vs > this.size) {
+                    this.size = vs;
+                }
+            }
+            // get extended values lists for each variable parameter
+            for (const v of this._varResults.variatedParameters) {
+                const vv = [];
+                const iter = v.getExtendedValuesIterator(this.size);
+                while (iter.hasNext) {
+                    const nv = iter.next();
+                    vv.push(nv.value.toFixed(nDigits));
+                }
+                varValues.push(vv);
+            }
 
-    /**
-     * Returns a combination of and results and extraResults for mat-table
-     */
-    public get dataSet() {
-        const data = [];
-        const nDigits = this.appSetupService.displayDigits;
-        if (this._results) {
-            for (let i = 0; i < this._results.length; i++) {
-                const r = this._results[i];
+            // C. build dataset
+            for (let i = 0; i < this._varResults.resultElements.length; i++) {
                 const re: ResultElement = this._varResults.resultElements[i];
-
                 if (re) {
-                    // for each computation step, build ordered list of : variable param value; result; extra results
+                    // build ordered list of : variable params values; result; extra results
+                    const list = [];
 
-                    // 1. variable param value
-                    const list = [ r.param ];
+                    // 1. variable params values for this computation step
+                    for (const vv of varValues) {
+                        list.push(vv[i]);
+                    }
 
                     // 2. result
                     if (re.vCalc) { // sometimes does no exist (ex: Section Parametree)
@@ -97,11 +102,25 @@ export class VarResultsComponent extends ResultsComponent {
                         }
 
                     }
-                    data.push(list);
+                    this._results.push(list);
                 }
             }
         }
-        return data;
+    }
+
+    public get hasResults(): boolean {
+        return this._varResults && this._varResults.hasResults;
+    }
+
+    public get headers() {
+        return this._headers;
+    }
+
+    /**
+     * Returns a combination of results and extraResults for mat-table
+     */
+    public get dataSet() {
+        return this._results;
     }
 
     public exportAsSpreadsheet() {
diff --git a/src/app/components/param-field-line/param-field-line.component.ts b/src/app/components/param-field-line/param-field-line.component.ts
index df956b33acfe059a408a8e6e82390cdb246adfa1..5b105c01f1cb6385820c999c2741629b22654c0d 100644
--- a/src/app/components/param-field-line/param-field-line.component.ts
+++ b/src/app/components/param-field-line/param-field-line.component.ts
@@ -197,7 +197,7 @@ export class ParamFieldLineComponent implements OnChanges {
         let ret = true;
         if (this.param.paramDefinition.isCalculated) {
             const nub = this.param.paramDefinition.parentNub;
-            const p = nub.findFirstSingleParameter(this.param.paramDefinition);
+            const p = nub.findFirstCalculableParameter(this.param.paramDefinition);
             ret = (p !== undefined);
         }
         return ret;
diff --git a/src/app/components/remous-results/remous-results.component.ts b/src/app/components/remous-results/remous-results.component.ts
index f11fa831b984fb65843f48fe335130c958ceb23d..f5328dc134c1abbd23c1687cf375f4a98c5ae93e 100644
--- a/src/app/components/remous-results/remous-results.component.ts
+++ b/src/app/components/remous-results/remous-results.component.ts
@@ -368,7 +368,7 @@ export class RemousResultsComponent extends ResultsComponent implements DoCheck
     }
 
     private get abscisseIterator(): INumberIterator {
-        return this._remousResults.varResults.variatedParameter.paramDefinition.valuesIterator;
+        return this._remousResults.varResults.variatedParameters[0].paramDefinition.valuesIterator;
     }
 
     private connectRessaut(lineFlu: LineData, lineTor: LineData) {
diff --git a/src/app/components/results-graph/results-graph.component.ts b/src/app/components/results-graph/results-graph.component.ts
index efd02528851648f261c58ec55f4d9b3112257253..5cc0a4590950a287b9b2d5a42131b4523f1322dc 100644
--- a/src/app/components/results-graph/results-graph.component.ts
+++ b/src/app/components/results-graph/results-graph.component.ts
@@ -104,7 +104,7 @@ export class ResultsGraphComponent extends ResultsComponent implements AfterCont
     /**
      * Returns a human readable description of any param / result symbol
      */
-    public getChartAxisLabel(symbol: string) {
+    public getChartAxisLabel(symbol: string): string {
         return this._results.getChartAxisLabel(symbol);
     }
 
@@ -135,6 +135,19 @@ export class ResultsGraphComponent extends ResultsComponent implements AfterCont
         this._graphTypeComponent.addObserver(this);
     }
 
+    /**
+     * Calls getChartAxisLabel() and removes the symbol prefix
+     * (cannot rebuild a clean label here)
+     */
+    private axisLabelWithoutSymbol(symbol: string) {
+        let l = this._results.getChartAxisLabel(symbol);
+        const i = l.indexOf(": ");
+        if (i !== -1) {
+            l = l.substring(i + 2);
+        }
+        return l;
+    }
+
     /** forces Angular to rebuild the chart @see bug #137 */
     private forceRebuild() {
         this.displayChart = false;
@@ -172,20 +185,36 @@ export class ResultsGraphComponent extends ResultsComponent implements AfterCont
                 },
                 scaleLabel: {
                     display: true,
-                    labelString: this.chartX
+                    labelString: this.axisLabelWithoutSymbol(this.chartX)
                 }
             }],
             yAxes: [{
                 scaleLabel: {
                     display: true,
-                    labelString: this.chartY
+                    labelString: this.axisLabelWithoutSymbol(this.chartY)
                 }
             }]
         };
+        const that = this;
         this.graph_options["tooltips"] = {
+            displayColors: false,
             callbacks: {
-                label: function(tooltipItem, data) {
-                    return Number(tooltipItem.yLabel).toFixed(nDigits);
+                title: (tooltipItems, data) => {
+                    return this.chartY + " = " + Number(tooltipItems[0].yLabel).toFixed(nDigits);
+                },
+                label: (tooltipItem, data) => {
+                    const lines: string[] = [];
+                    for (const v of that._results.getVariatingParametersSymbols()) {
+                        const series = that._results.getValuesSeries(v);
+                        const line = v + " = " + series[tooltipItem.index].toFixed(nDigits);
+                        if (v === this.chartX) {
+                            lines.unshift("");
+                            lines.unshift(line);
+                        } else {
+                            lines.push(line);
+                        }
+                    }
+                    return lines;
                 }
             }
         };
@@ -224,7 +253,7 @@ export class ResultsGraphComponent extends ResultsComponent implements AfterCont
                 },
                 scaleLabel: {
                     display: true,
-                    labelString: this.chartX
+                    labelString: this.axisLabelWithoutSymbol(this.chartX)
                 }
             }],
             yAxes: [{
@@ -235,14 +264,30 @@ export class ResultsGraphComponent extends ResultsComponent implements AfterCont
                 },
                 scaleLabel: {
                     display: true,
-                    labelString: this.chartY
+                    labelString: this.axisLabelWithoutSymbol(this.chartY)
                 }
             }]
         };
+        const that = this;
         this.graph_options["tooltips"] = {
+            displayColors: false,
             callbacks: {
-                label: function(tooltipItem, data) {
-                    return "(" + Number(tooltipItem.xLabel).toFixed(nDigits) + ", " + Number(tooltipItem.yLabel).toFixed(nDigits) + ")";
+                title: (tooltipItems, data) => {
+                    return this.chartY + " = " + Number(tooltipItems[0].yLabel).toFixed(nDigits);
+                },
+                label: (tooltipItem, data) => {
+                    const lines: string[] = [];
+                    for (const v of that._results.getVariatingParametersSymbols()) {
+                        const series = that._results.getValuesSeries(v);
+                        const line = v + " = " + series[tooltipItem.index].toFixed(nDigits);
+                        if (v === this.chartX) {
+                            lines.unshift("");
+                            lines.unshift(line);
+                        } else {
+                            lines.push(line);
+                        }
+                    }
+                    return lines;
                 }
             }
         };
diff --git a/src/app/formulaire/definition/form-compute-fixedvar.ts b/src/app/formulaire/definition/form-compute-fixedvar.ts
index 875a52747478bf419389556ca866c3ce033eef8c..08c12186f48d4bda67b88076264f4ed650edd790 100644
--- a/src/app/formulaire/definition/form-compute-fixedvar.ts
+++ b/src/app/formulaire/definition/form-compute-fixedvar.ts
@@ -1,4 +1,4 @@
-import { Nub, Result, ComputeNode } from "jalhyd";
+import { Nub } from "jalhyd";
 
 import { FormCompute } from "./form-compute";
 import { NgParameter, ParamRadioConfig } from "../ngparam";
@@ -14,18 +14,18 @@ export class FormComputeFixedVar extends FormCompute {
         return this._formResult as FormResultFixedVar;
     }
 
-    private getVariatedParameter(): NgParameter {
-        const res = this._formBase.getDisplayedParamFromState(ParamRadioConfig.VAR);
-        if (res !== undefined) {
-            return res;
-        }
-
-        const pms = this._formBase.getDisplayedParamListFromState(ParamRadioConfig.LINK);
-        for (const p of pms) {
-            if (p.paramDefinition.hasMultipleValues) {
-                return p;
+    private getVariatedParameters(): NgParameter[] {
+        let res: NgParameter[] = [];
+        res = this._formBase.getDisplayedParamListFromState(ParamRadioConfig.VAR);
+        if (res.length === 0) {
+            const pms = this._formBase.getDisplayedParamListFromState(ParamRadioConfig.LINK);
+            for (const p of pms) {
+                if (p.paramDefinition.hasMultipleValues) {
+                    res.push(p);
+                }
             }
         }
+        return res;
     }
 
     private getComputedParameter(): NgParameter {
@@ -42,15 +42,15 @@ export class FormComputeFixedVar extends FormCompute {
         const computedParam: NgParameter = this.getComputedParameter();
         this.formResult.resetResults(); // to avoid adding fixed parameters more than once (see below)
         this.formResult.addFixedParameters();
-        const varParam: NgParameter = this.getVariatedParameter();
+        const varParams: NgParameter[] = this.getVariatedParameters();
 
-        if (varParam === undefined) {
+        if (varParams.length === 0) {
             // pas de paramètre à varier
             this.formResult.fixedResults.result = nub.result;
             this.formResult.fixedResults.calculatedParameter = computedParam;
         } else {
             // il y a un paramètre à varier
-            this.formResult.varResults.variatedParameter = varParam;
+            this.formResult.varResults.variatedParameters = varParams;
             this.formResult.varResults.calculatedParameter = computedParam;
 
             this.formResult.varResults.result = nub.result;
diff --git a/src/app/formulaire/definition/form-compute-section-parametree.ts b/src/app/formulaire/definition/form-compute-section-parametree.ts
index d30352a577096f548986041f60cde084b368e641..3e833eed46eeac7a0a991bafde36403d373036b9 100644
--- a/src/app/formulaire/definition/form-compute-section-parametree.ts
+++ b/src/app/formulaire/definition/form-compute-section-parametree.ts
@@ -39,10 +39,10 @@ export class FormComputeSectionParametree extends FormCompute {
         const sect: acSection = sectNub.section;
         this._sectionResults.section = sect;
 
-        const varParam = this._formSection.getSectionVariatedParameter();
-        if (varParam) {
+        const varParams = this._formSection.getSectionVariatedParameters();
+        if (varParams.length > 0) {
             // résultats variés avec tous les résultats complémentaires
-            this._varResults.variatedParameter = varParam;
+            this._varResults.variatedParameters = varParams;
             this._varResults.result = sectNub.result;
             this._varResults.update(false);
         } else {
diff --git a/src/app/formulaire/definition/form-def-section.ts b/src/app/formulaire/definition/form-def-section.ts
index 309a06613147474af44c2a683d39d325122842e3..a2c011e8df49e4a62fa8010da406a92e1322c1dd 100644
--- a/src/app/formulaire/definition/form-def-section.ts
+++ b/src/app/formulaire/definition/form-def-section.ts
@@ -18,8 +18,8 @@ export class FormDefSection {
         return this._sectionSourceId !== undefined;
     }
 
-    public getSectionVariatedParameter(): NgParameter {
-        return this._formBase.getDisplayedParamFromState(ParamRadioConfig.VAR);
+    public getSectionVariatedParameters(): NgParameter[] {
+        return this._formBase.getDisplayedParamListFromState(ParamRadioConfig.VAR);
     }
 
     public getSectionComputedParam(): { symbol: string, label: string } {
diff --git a/src/app/formulaire/ngparam.ts b/src/app/formulaire/ngparam.ts
index 0154d6ae487375456d7897b826d265f59d6df597..679d3b1f3f4058d76279820637706cf9e3224621 100644
--- a/src/app/formulaire/ngparam.ts
+++ b/src/app/formulaire/ngparam.ts
@@ -237,6 +237,10 @@ export class NgParameter extends InputField implements Observer {
         return this._paramDef.valueList;
     }
 
+    public get inferredValuesList() {
+        return this._paramDef.getInferredValuesList();
+    }
+
     public get isValid() {
         if (this.radioState === undefined) {
             return false;
@@ -296,6 +300,10 @@ export class NgParameter extends InputField implements Observer {
         }
     }
 
+    public getExtendedValuesIterator(size: number): INumberIterator {
+        return this._paramDef.getExtendedValuesIterator(size);
+    }
+
     /**
      * notification envoyée après la modification de la valeur du paramètre
      */
diff --git a/src/app/results/plottable-data.ts b/src/app/results/plottable-data.ts
index 609c388aaaa0cb49556063ce170c88478cec7c26..a5493b94be96bd509ec89ad9c9a61facd54ffa9c 100644
--- a/src/app/results/plottable-data.ts
+++ b/src/app/results/plottable-data.ts
@@ -14,7 +14,13 @@ export interface PlottableData {
      * (usually a variable symbol like "Q", "Z1"…)
      * @param symbol parameter / result symbol (ex: "Q")
      */
-    getChartAxisLabel(symbol: string);
+    getChartAxisLabel(symbol: string): string;
+
+    /**
+     * Returns the translated name of the given symbol (usually an extraResult)
+     * if available, with its unit, but without the symbol itself
+     */
+    expandLabelFromSymbol(symbol: string): string;
 
     /**
      * Returns a list of plottable parameters / result elements, that can be defined
@@ -27,4 +33,10 @@ export interface PlottableData {
      * @param symbol parameter / result symbol (ex: "Q")
      */
     getValuesSeries(symbol: string): any[];
+
+    /**
+     * Returns the list of variating parameters
+     * (used by tooltip functions)
+     */
+    getVariatingParametersSymbols(): string[];
 }
diff --git a/src/app/results/plottable-pab-results.ts b/src/app/results/plottable-pab-results.ts
index c8cdd29641aa9801f8394052f6d888f00bf2dcd7..27e5685d9d0c257798729acf56326acf3c22d1dc 100644
--- a/src/app/results/plottable-pab-results.ts
+++ b/src/app/results/plottable-pab-results.ts
@@ -29,10 +29,14 @@ export class PlottablePabResults implements PlottableData {
      * Returns the label to display, for an element of getAvailableChartAxis()
      * @param symbol parameter / result symbol (ex: "Q")
      */
-    public getChartAxisLabel(symbol: string) {
+    public getChartAxisLabel(symbol: string): string {
         return this.pabResults.headers[this.pabResults.columns.indexOf(symbol)];
     }
 
+    public expandLabelFromSymbol(symbol: string): string {
+        return symbol;
+    }
+
     /**
      * Returns a list of plottable parameters / result elements, that can be defined
      * as X or Y chart axis
@@ -41,6 +45,11 @@ export class PlottablePabResults implements PlottableData {
         return this.pabResults.columns;
     }
 
+    // just to implement interface
+    public getVariatingParametersSymbols(): string[] {
+        return [];
+    }
+
     /**
      * Returns the series of values for the required symbol
      * @param symbol parameter / result symbol (ex: "Q")
diff --git a/src/app/results/remous-results.ts b/src/app/results/remous-results.ts
index 1127bf61fb4b6b2015f46bee279a9dbb3bfccfbe..6d6e1f6e104badd016b4c449f01127e889ee05f0 100644
--- a/src/app/results/remous-results.ts
+++ b/src/app/results/remous-results.ts
@@ -137,7 +137,7 @@ export class RemousResults extends CalculatorResults {
         this._log.addLog(this._result.globalLog);
 
         this._varResults = new VarResults();
-        this._varResults.variatedParameter = new NgParameter(this._xValues, undefined);
+        this._varResults.variatedParameters = [ new NgParameter(this._xValues, undefined) ];
         this._varResults.calculatedParameter
             = new NgParameter(new ParamDefinition(null, "Ligne d'eau", ParamDomainValue.POS_NULL), undefined);
         this._varResults.result = this._result;
diff --git a/src/app/results/var-results.ts b/src/app/results/var-results.ts
index 891f7c008aa8375fef89edc1c1b5469eafb942a8..b01195b15a1cd932d5b18b4fdf6d8ae9cd9fd795 100644
--- a/src/app/results/var-results.ts
+++ b/src/app/results/var-results.ts
@@ -8,14 +8,14 @@ import { GraphType } from "./graph-type";
 
 export class VarResults extends CalculatedParamResults implements PlottableData {
     /**
-     * paramètre varié
+     * paramètres variés
      */
-    private _variatedParam: NgParameter;
+    private _variatedParams: NgParameter[];
 
     /**
-     * titre de la 1ère colonne des résultats variés
+     * titre des colonnes des résultats variés
      */
-    private _variableParamHeader: string;
+    private _variableParamHeaders: string[];
 
     /**
      * clés des résultats complémentaires
@@ -41,6 +41,12 @@ export class VarResults extends CalculatedParamResults implements PlottableData
      */
     public chartY: string;
 
+    /** size of the longest variated parameter */
+    public size: number;
+
+    /** index of the longest variated parameter */
+    public longest: number;
+
     /**
      * tableau des ordonnées du graphe des résultats variés
      */
@@ -53,23 +59,26 @@ export class VarResults extends CalculatedParamResults implements PlottableData
 
     public reset() {
         super.reset();
-        this._variableParamHeader = undefined;
+        this._variableParamHeaders = [];
         this._extraResultHeaders = [];
         this.extraResultKeys = [];
         this._yValues = [];
+        this.longest = 0;
     }
 
-    public get variatedParameter(): NgParameter {
-        return this._variatedParam;
+    public get variatedParameters(): NgParameter[] {
+        return this._variatedParams;
     }
 
-    public set variatedParameter(p: NgParameter) {
-        this._variatedParam = p;
-        this._variableParamHeader = CalculatorResults.paramLabel(this._variatedParam, true);
+    public set variatedParameters(p: NgParameter[]) {
+        this._variatedParams = p;
+        this._variableParamHeaders = this._variatedParams.map((v) => {
+            return CalculatorResults.paramLabel(v, true);
+        });
     }
 
-    public get variableParamHeader() {
-        return this._variableParamHeader;
+    public get variableParamHeaders() {
+        return this._variableParamHeaders;
     }
 
     public get yValues() {
@@ -84,24 +93,34 @@ export class VarResults extends CalculatedParamResults implements PlottableData
         return this._extraResultHeaders;
     }
 
-    public getChartAxisLabel(symbol: string) {
+    public getChartAxisLabel(symbol: string): string {
         // 1. calculated param ?
         if (this.calculatedParameter && this.calculatedParameter.symbol === symbol) {
             return this.calculatedParameterHeader;
-        } else
+        }
         // 2. variated param ?
-        if (this.variatedParameter.symbol === symbol) {
-            return this.variableParamHeader;
-        } else {
-            // 3. Result element ?
-            // calculator type for translation
-            const sn = this.result.sourceNub;
-            let ct = sn.calcType;
-            if (sn.parent) {
-                ct = sn.parent.calcType;
+        for (let i = 0; i < this.variatedParameters.length; i++) {
+            if (this._variatedParams[i].symbol === symbol) {
+                return this.variableParamHeaders[i];
             }
-            return ServiceFactory.instance.formulaireService.expandVariableNameAndUnit(ct, symbol);
         }
+        // 3. Result element
+        return this.expandLabelFromSymbol(symbol);
+
+    }
+
+    /**
+     * Returns the translated name of the given symbol (usually an extraResult) with
+     * its unit, but without the symbol itself
+     */
+    public expandLabelFromSymbol(symbol: string): string {
+        // calculator type for translation
+        const sn = this.result.sourceNub;
+        let ct = sn.calcType;
+        if (sn.parent) {
+            ct = sn.parent.calcType;
+        }
+        return ServiceFactory.instance.formulaireService.expandVariableNameAndUnit(ct, symbol);
     }
 
     /**
@@ -117,19 +136,21 @@ export class VarResults extends CalculatedParamResults implements PlottableData
                     series.push(r.vCalc);
                 }
             }
-        } else
+        }
         // 2. variated param ?
-        if (this.variatedParameter.symbol === symbol) {
-            for (const v of this.variatedParameter.valuesIterator) {
-                series.push(v);
+        for (let i = 0; i < this.variatedParameters.length; i++) {
+            if (this._variatedParams[i].symbol === symbol) {
+                const iter = this.variatedParameters[i].getExtendedValuesIterator(this.size);
+                for (const v of iter) {
+                    series.push(v);
+                }
             }
-        } else {
-            // 3. Result element ?
-            for (const r of this.result.resultElements) { // re:ResultElement
-                for (const k in r.extraResults) {
-                    if (k === symbol) {
-                        series.push(r.extraResults[k]);
-                    }
+        }
+        // 3. Result element ?
+        for (const r of this.result.resultElements) { // re:ResultElement
+            for (const k in r.extraResults) {
+                if (k === symbol) {
+                    series.push(r.extraResults[k]);
                 }
             }
         }
@@ -146,16 +167,42 @@ export class VarResults extends CalculatedParamResults implements PlottableData
         if (this.calculatedParameter) {
             res.push(this.calculatedParameter.symbol);
         }
-        res.push(this.variatedParameter.symbol);
+        for (const v of this._variatedParams) {
+            res.push(v.symbol);
+        }
         for (const erk of this.extraResultKeys) {
             res.push(erk);
         }
         return res;
     }
 
+    /**
+     * Returns the list of variating parameters
+     * (used by tooltip functions)
+     */
+    public getVariatingParametersSymbols(): string[] {
+        return this._variatedParams.map((vp) => {
+            return vp.symbol;
+        });
+    }
+
     public update(displaySymbol: boolean) {
-        if (this._variableParamHeader === undefined) {
-            this._variableParamHeader = CalculatorResults.paramLabel(this.variatedParameter, displaySymbol);
+        if (this._variableParamHeaders.length === 0) {
+            this._variableParamHeaders = this._variatedParams.map((v) => {
+                return CalculatorResults.paramLabel(v, true);
+            });
+        }
+
+        // liste la plus longue
+        this.size = 0;
+        let i = 0;
+        for (const v of this._variatedParams) {
+            const s = v.valuesIterator.count();
+            if (s > this.size) {
+                this.size = s;
+                this.longest = i;
+            }
+            i++;
         }
 
         // valeurs du paramètre à calculer
@@ -181,7 +228,7 @@ export class VarResults extends CalculatedParamResults implements PlottableData
         } else if (this.extraResultKeys.length > 0) {
             defaultY = this.extraResultKeys[0];
         }
-        this.chartX = this.chartX || this.variatedParameter.symbol;
+        this.chartX = this.chartX || this.variatedParameters[this.longest].symbol;
         this.chartY = defaultY;
 
         // calculator type for translation
@@ -202,10 +249,10 @@ export class VarResults extends CalculatedParamResults implements PlottableData
         // (might be the previous variated parameter, that is not accessible anymore)
         const aca = this.getAvailableChartAxis();
         if (! aca.includes(this.chartX)) {
-            this.chartX = this.variatedParameter.symbol;
+            this.chartX = this.variatedParameters[0].symbol;
         }
         if (! aca.includes(this.chartY)) {
-            this.chartY = this.variatedParameter.symbol;
+            this.chartY = this.variatedParameters[0].symbol;
         }
     }
 }
diff --git a/src/locale/messages.en.json b/src/locale/messages.en.json
index b521d5451ff8f2ac832d7be94c448749a3e894ec..32364c09832fef08f3c9054093616ecdb6886227 100644
--- a/src/locale/messages.en.json
+++ b/src/locale/messages.en.json
@@ -212,6 +212,9 @@
     "INFO_PARAMFIELD_PARAMFIXE": "Fixed",
     "INFO_PARAMFIELD_PARAMLIE_LABEL": "Linked parameter",
     "INFO_PARAMFIELD_PARAMLIE": "Link",
+    "INFO_PARAMFIELD_PARAMVARIER_EXT_STRATEGY": "Values list extension strategy",
+    "INFO_PARAMFIELD_PARAMVARIER_EXT_STRATEGY_REPEAT_LAST": "Repeat last value",
+    "INFO_PARAMFIELD_PARAMVARIER_EXT_STRATEGY_RECYCLE": "Recycle values",
     "INFO_PARAMFIELD_PARAMVARIER_IMPORT_FICHIER": "Import file",
     "INFO_PARAMFIELD_PARAMVARIER_MINMAXSTEP": "min: %s, max: %s, step: %s",
     "INFO_PARAMFIELD_PARAMVARIER_MODE": "Mode",
diff --git a/src/locale/messages.fr.json b/src/locale/messages.fr.json
index efa2d9ba84232826e707875717056569989a9283..7228186b3420c17e0e4e7633247c1623fca744fb 100644
--- a/src/locale/messages.fr.json
+++ b/src/locale/messages.fr.json
@@ -212,6 +212,9 @@
     "INFO_PARAMFIELD_PARAMFIXE": "fixé",
     "INFO_PARAMFIELD_PARAMLIE_LABEL": "Paramètre lié",
     "INFO_PARAMFIELD_PARAMLIE": "lié",
+    "INFO_PARAMFIELD_PARAMVARIER_EXT_STRATEGY": "Stratégie d'extension de la liste de valeurs",
+    "INFO_PARAMFIELD_PARAMVARIER_EXT_STRATEGY_REPEAT_LAST": "Répéter la dernière valeur",
+    "INFO_PARAMFIELD_PARAMVARIER_EXT_STRATEGY_RECYCLE": "Réutiliser les valeurs",
     "INFO_PARAMFIELD_PARAMVARIER_IMPORT_FICHIER": "Importer un fichier",
     "INFO_PARAMFIELD_PARAMVARIER_MINMAXSTEP": "min : %s, max : %s, pas : %s",
     "INFO_PARAMFIELD_PARAMVARIER_MODE": "Mode",