necessary 12.1.3 → 12.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -22,6 +22,7 @@ These can be used both on Node and in the browser:
22
22
  * [Path utilities](#path-utilities)
23
23
  * [Array utilities](#array-utilities)
24
24
  * [HTTP utilities](#http-utilities)
25
+ * [String utilities](#string-utilities)
25
26
  * [Version utilities](#version-utilities)
26
27
  * [Template utilities](#template-utilities)
27
28
  * [Asynchronous utilities](#asynchronous-utilities)
@@ -648,10 +649,10 @@ pathWithoutTopmostDirectoryNameFromPath("root/etc/init.conf"); // returns 'etc/i
648
649
  - `clear()`
649
650
  - `copy()`
650
651
  - `merge()`
651
- - `splice()`
652
+ - `find()`
652
653
  - `replace()`
654
+ - `splice()`
653
655
  - `filter()`
654
- - `find()`
655
656
  - `prune()`
656
657
  - `extract()`
657
658
  - `patch()`
@@ -704,10 +705,10 @@ copy([1, 2, 3], [4, 5, 6, 7]); // the first array argument becomes [4, 5, 6, 7]
704
705
  merge([1, 2, 3], [4, 5, 6, 7]); // the first array argument becomes [1, 2, 3, 4, 5, 6, 7]
705
706
  ```
706
707
 
707
- * The `splice()` function works in a similar vein to its native counterpart, however it takes an array as the optional fourth argument rather than a series of elements from the fourth argument onwards. It mutates the first array argument and returns an array of the elements that have been removed from it:
708
+ * The `find()` function is like its native counterpart, however it returns an array of all the elements for which the callback function returns a truthy value, rather than just the first:
708
709
 
709
710
  ```
710
- splice([1, 2, 3], 1, 2, [4, 5]); // the first array argument becomes [1, 4, 5]
711
+ find([1, 2, -1, -2], (element, index) => (element > 0)); // returns [1, 2]
711
712
  ```
712
713
 
713
714
  * The `replace()` function will replace an element in the array with the given element the first time that the callback function returns a truthy value:
@@ -716,16 +717,16 @@ splice([1, 2, 3], 1, 2, [4, 5]); // the first array argument becomes [1, 4, 5]
716
717
  replace([1, 0, -2], 3, (element, index) => (element === 0)); // the array argument becomes [1, 3, -2]
717
718
  ```
718
719
 
719
- * The `filter()` function is like its native counterpart, however it filters the first array argument *in place*. The second argument should be a callback function that will be invoked for each element of the array. If it does not return a truthy value, the corresponding element will be removed.
720
+ * The `splice()` function works in a similar vein to its native counterpart, however it takes an array as the optional fourth argument rather than a series of elements from the fourth argument onwards. It mutates the first array argument and returns an array of the elements that have been deleted:
720
721
 
721
722
  ```
722
- filter([1, 2, -2], (element, index) => (element > 0)); // returns [-2] and the array argument becomes [1, 2]
723
+ splice([1, 2, 3], 1, 2, [4, 5]); // the first array argument becomes [1, 4, 5]
723
724
  ```
724
725
 
725
- * The `find()` function is like its native counterpart, however it returns an array of all the elements for which the callback function returns a truthy value, rather than just the first:
726
+ * The `filter()` function is like its native counterpart, however it filters the first array argument *in place*. The second argument should be a callback function that will be invoked for each element of the array. If it does not return a truthy value, the corresponding element will be deleted. The deleted elements are returned.
726
727
 
727
728
  ```
728
- find([1, 2, -1, -2], (element, index) => (element > 0)); // returns [1, 2]
729
+ filter([1, 2, -2], (element, index) => (element > 0)); // returns [-2] and the array argument becomes [1, 2]
729
730
  ```
730
731
 
731
732
  * The `prune()` function is much like the `filter()` function, however it will terminate the first time that the callback function does not return a truthy value:
@@ -734,7 +735,7 @@ find([1, 2, -1, -2], (element, index) => (element > 0)); // returns [1, 2]
734
735
  prune([1, 2, -1, -2], (element, index) => (element > 0)); // returns -1 and the array argument becomes [1, 2, -2]
735
736
  ```
736
737
 
737
- * The `extract()` function is identical to the `preune()` function, however the callback should return a truthy value in order to extract an element:
738
+ * The `extract()` function is identical to the `prune()` function, however the callback should return a truthy value in order to delete and return an element:
738
739
 
739
740
  ```
740
741
  extract([1, 2, -1, -2], (element, index) => (element === 2)); // returns 2 and the array argument becomes [1, -1, -2]
@@ -856,6 +857,55 @@ urlFromHostURIAndQuery(host, uri, query); // returns "https://site.com/user?name
856
857
 
857
858
  Ideally the `host` argument should not include a trailing forward slash whereas `uri` arguments should always start with a leading forward slash.
858
859
 
860
+ ## String utilities
861
+
862
+ - `strcmp()`
863
+ - `strlen()`
864
+ - `substring()`
865
+
866
+ Substitute functions with support for Unicode. Specifically, characters in Unicode astral plains are counted twice in native functions. These functions fix this issue by converting strings to arrays and if necessary back again. Be warned that for this reason they are nowhere near as fast as their native counterparts.
867
+
868
+ * The `strcmp` function takes `stringA` and `stringB` arguments. It compares them character by character in order to find the lexicographically lesser of the two. Its return value is the difference between the code points of the first differing characters, with the code point of either string given as zero if it is empty. Some examples should clarify:
869
+
870
+ ```
871
+ strcmp("", "") = 0;
872
+
873
+ strcmp("a", "") < 0;
874
+
875
+ strcmp("", "a") > 0;
876
+
877
+ strcmp("a", "a") = 0;
878
+
879
+ strcmp("ab", "a") < 0;
880
+
881
+ strcmp("ab", "ac") > 0;
882
+
883
+ strcmp("C", "𝔸") > 0;
884
+ ```
885
+
886
+ Note that, conceptually speaking, the first argument is taken away from the second argument in order to compute the difference and not the other way around.
887
+
888
+ Note also that the double-struck `C` is in the basic multilingual plane and has code point `0x02102` whereas the double-struck `𝔸` is in an astral plane and has code point `0x1D538`, therefore their difference is positive.
889
+
890
+ * The `strlen()` function takes a single `string` argument. It works in much the same way as the `length` property of the `String` prototype, however it is Unicode safe:
891
+
892
+ ```
893
+ "𝔸𝔹C".length = 5 // The 𝔹 and C characters are in an astral plane and count as two each.
894
+
895
+ strlen("𝔸𝔹C") = 3 // The string is converted to an array whose length is 3.
896
+
897
+ ```
898
+
899
+ * The `substring()` function takes `string` and `start` arguments and an optional `end` argument. It works in much the same way as the `substring()` method of the `String` prototype, however it is Unicode safe:
900
+
901
+ ```
902
+ "𝔸𝔹C".substring(3) = "C" // The 𝔹 character is in an astral plane and counts as two.
903
+
904
+ substring("𝔸𝔹C", 2) = "C" // Again the string is converted to an array and thus the third character is returned.
905
+ ```
906
+
907
+ Note the native `substring()` method can be particularly egregious because the `start` and `end` arguments may result in only half of some characters being returned, so to speak.
908
+
859
909
  ## Version utilities
860
910
 
861
911
  - `migrate()`
package/lib/browser.js CHANGED
@@ -51,6 +51,12 @@ _export(exports, {
51
51
  statusMessages: function() {
52
52
  return _statusMessages.default;
53
53
  },
54
+ stringUtilities: function() {
55
+ return _string.default;
56
+ },
57
+ templateUtilities: function() {
58
+ return _template.default;
59
+ },
54
60
  versionUtilities: function() {
55
61
  return _version.default;
56
62
  }
@@ -64,16 +70,18 @@ var _characters = /*#__PURE__*/ _interop_require_default(require("./characters")
64
70
  var _statusCodes = /*#__PURE__*/ _interop_require_default(require("./statusCodes"));
65
71
  var _contentTypes = /*#__PURE__*/ _interop_require_default(require("./contentTypes"));
66
72
  var _statusMessages = /*#__PURE__*/ _interop_require_default(require("./statusMessages"));
67
- var _ajax = /*#__PURE__*/ _interop_require_default(require("./utilities/ajax"));
68
73
  var _path = /*#__PURE__*/ _interop_require_default(require("./utilities/path"));
69
74
  var _http = /*#__PURE__*/ _interop_require_default(require("./utilities/http"));
70
75
  var _array = /*#__PURE__*/ _interop_require_default(require("./utilities/array"));
76
+ var _string = /*#__PURE__*/ _interop_require_default(require("./utilities/string"));
71
77
  var _version = /*#__PURE__*/ _interop_require_default(require("./utilities/version"));
78
+ var _template = /*#__PURE__*/ _interop_require_default(require("./utilities/template"));
72
79
  var _asynchronous = /*#__PURE__*/ _interop_require_default(require("./utilities/asynchronous"));
80
+ var _ajax = /*#__PURE__*/ _interop_require_default(require("./utilities/ajax"));
73
81
  function _interop_require_default(obj) {
74
82
  return obj && obj.__esModule ? obj : {
75
83
  default: obj
76
84
  };
77
85
  }
78
86
 
79
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9icm93c2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIGxldmVscyB9IGZyb20gXCIuL2xldmVsc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtZXRob2RzIH0gZnJvbSBcIi4vbWV0aG9kc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBoZWFkZXJzIH0gZnJvbSBcIi4vaGVhZGVyc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBrZXlDb2RlcyB9IGZyb20gXCIuL2tleUNvZGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGVuY29kaW5ncyB9IGZyb20gXCIuL2VuY29kaW5nc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjaGFyYWN0ZXJzIH0gZnJvbSBcIi4vY2hhcmFjdGVyc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdGF0dXNDb2RlcyB9IGZyb20gXCIuL3N0YXR1c0NvZGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNvbnRlbnRUeXBlcyB9IGZyb20gXCIuL2NvbnRlbnRUeXBlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdGF0dXNNZXNzYWdlcyB9IGZyb20gXCIuL3N0YXR1c01lc3NhZ2VzXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgYWpheFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hamF4XCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGF0aFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9wYXRoXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGh0dHBVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvaHR0cFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB2ZXJzaW9uVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3ZlcnNpb25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgYXN5bmNocm9ub3VzVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2FzeW5jaHJvbm91c1wiO1xuIl0sIm5hbWVzIjpbImFqYXhVdGlsaXRpZXMiLCJhcnJheVV0aWxpdGllcyIsImFzeW5jaHJvbm91c1V0aWxpdGllcyIsImNoYXJhY3RlcnMiLCJjb250ZW50VHlwZXMiLCJlbmNvZGluZ3MiLCJoZWFkZXJzIiwiaHR0cFV0aWxpdGllcyIsImtleUNvZGVzIiwibGV2ZWxzIiwibWV0aG9kcyIsInBhdGhVdGlsaXRpZXMiLCJzdGF0dXNDb2RlcyIsInN0YXR1c01lc3NhZ2VzIiwidmVyc2lvblV0aWxpdGllcyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0lBWW9CQSxhQUFhO2VBQWJBLGFBQWE7O0lBSWJDLGNBQWM7ZUFBZEEsY0FBYzs7SUFFZEMscUJBQXFCO2VBQXJCQSxxQkFBcUI7O0lBWHJCQyxVQUFVO2VBQVZBLG1CQUFVOztJQUVWQyxZQUFZO2VBQVpBLHFCQUFZOztJQUhaQyxTQUFTO2VBQVRBLGtCQUFTOztJQUZUQyxPQUFPO2VBQVBBLGdCQUFPOztJQVdQQyxhQUFhO2VBQWJBLGFBQWE7O0lBVmJDLFFBQVE7ZUFBUkEsaUJBQVE7O0lBSFJDLE1BQU07ZUFBTkEsZUFBTTs7SUFDTkMsT0FBTztlQUFQQSxnQkFBTzs7SUFXUEMsYUFBYTtlQUFiQSxhQUFhOztJQU5iQyxXQUFXO2VBQVhBLG9CQUFXOztJQUVYQyxjQUFjO2VBQWRBLHVCQUFjOztJQU9kQyxnQkFBZ0I7ZUFBaEJBLGdCQUFnQjs7OzZEQWZGOzhEQUNDOzhEQUNBOytEQUNDO2dFQUNDO2lFQUNDO2tFQUNDO21FQUNDO3FFQUNFOzJEQUVEOzJEQUVBOzJEQUNBOzREQUNDOzhEQUNFO21FQUNLIn0=
87
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9icm93c2VyLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIGxldmVscyB9IGZyb20gXCIuL2xldmVsc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtZXRob2RzIH0gZnJvbSBcIi4vbWV0aG9kc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBoZWFkZXJzIH0gZnJvbSBcIi4vaGVhZGVyc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBrZXlDb2RlcyB9IGZyb20gXCIuL2tleUNvZGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGVuY29kaW5ncyB9IGZyb20gXCIuL2VuY29kaW5nc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjaGFyYWN0ZXJzIH0gZnJvbSBcIi4vY2hhcmFjdGVyc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdGF0dXNDb2RlcyB9IGZyb20gXCIuL3N0YXR1c0NvZGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNvbnRlbnRUeXBlcyB9IGZyb20gXCIuL2NvbnRlbnRUeXBlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdGF0dXNNZXNzYWdlcyB9IGZyb20gXCIuL3N0YXR1c01lc3NhZ2VzXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGF0aFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9wYXRoXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGh0dHBVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvaHR0cFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdHJpbmdVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHZlcnNpb25VdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvdmVyc2lvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0ZW1wbGF0ZVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy90ZW1wbGF0ZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhc3luY2hyb25vdXNVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXN5bmNocm9ub3VzXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgYWpheFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hamF4XCI7XG4iXSwibmFtZXMiOlsiYWpheFV0aWxpdGllcyIsImFycmF5VXRpbGl0aWVzIiwiYXN5bmNocm9ub3VzVXRpbGl0aWVzIiwiY2hhcmFjdGVycyIsImNvbnRlbnRUeXBlcyIsImVuY29kaW5ncyIsImhlYWRlcnMiLCJodHRwVXRpbGl0aWVzIiwia2V5Q29kZXMiLCJsZXZlbHMiLCJtZXRob2RzIiwicGF0aFV0aWxpdGllcyIsInN0YXR1c0NvZGVzIiwic3RhdHVzTWVzc2FnZXMiLCJzdHJpbmdVdGlsaXRpZXMiLCJ0ZW1wbGF0ZVV0aWxpdGllcyIsInZlcnNpb25VdGlsaXRpZXMiXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7Ozs7OztJQW9Cb0JBLGFBQWE7ZUFBYkEsYUFBYTs7SUFOYkMsY0FBYztlQUFkQSxjQUFjOztJQUlkQyxxQkFBcUI7ZUFBckJBLHFCQUFxQjs7SUFYckJDLFVBQVU7ZUFBVkEsbUJBQVU7O0lBRVZDLFlBQVk7ZUFBWkEscUJBQVk7O0lBSFpDLFNBQVM7ZUFBVEEsa0JBQVM7O0lBRlRDLE9BQU87ZUFBUEEsZ0JBQU87O0lBU1BDLGFBQWE7ZUFBYkEsYUFBYTs7SUFSYkMsUUFBUTtlQUFSQSxpQkFBUTs7SUFIUkMsTUFBTTtlQUFOQSxlQUFNOztJQUNOQyxPQUFPO2VBQVBBLGdCQUFPOztJQVNQQyxhQUFhO2VBQWJBLGFBQWE7O0lBSmJDLFdBQVc7ZUFBWEEsb0JBQVc7O0lBRVhDLGNBQWM7ZUFBZEEsdUJBQWM7O0lBS2RDLGVBQWU7ZUFBZkEsZUFBZTs7SUFFZkMsaUJBQWlCO2VBQWpCQSxpQkFBaUI7O0lBRGpCQyxnQkFBZ0I7ZUFBaEJBLGdCQUFnQjs7OzZEQWRGOzhEQUNDOzhEQUNBOytEQUNDO2dFQUNDO2lFQUNDO2tFQUNDO21FQUNDO3FFQUNFOzJEQUVEOzJEQUNBOzREQUNDOzZEQUNDOzhEQUNDOytEQUNDO21FQUNJOzJEQUVSIn0=
package/lib/main.js CHANGED
@@ -66,6 +66,9 @@ _export(exports, {
66
66
  statusMessages: function() {
67
67
  return _statusMessages.default;
68
68
  },
69
+ stringUtilities: function() {
70
+ return _string.default;
71
+ },
69
72
  templateUtilities: function() {
70
73
  return _template.default;
71
74
  },
@@ -85,13 +88,14 @@ var _statusMessages = /*#__PURE__*/ _interop_require_default(require("./statusMe
85
88
  var _path = /*#__PURE__*/ _interop_require_default(require("./utilities/path"));
86
89
  var _http = /*#__PURE__*/ _interop_require_default(require("./utilities/http"));
87
90
  var _array = /*#__PURE__*/ _interop_require_default(require("./utilities/array"));
91
+ var _string = /*#__PURE__*/ _interop_require_default(require("./utilities/string"));
88
92
  var _version = /*#__PURE__*/ _interop_require_default(require("./utilities/version"));
89
- var _package = /*#__PURE__*/ _interop_require_default(require("./utilities/package"));
93
+ var _template = /*#__PURE__*/ _interop_require_default(require("./utilities/template"));
90
94
  var _asynchronous = /*#__PURE__*/ _interop_require_default(require("./utilities/asynchronous"));
91
95
  var _shell = /*#__PURE__*/ _interop_require_default(require("./utilities/shell"));
92
96
  var _request = /*#__PURE__*/ _interop_require_default(require("./utilities/request"));
93
97
  var _logging = /*#__PURE__*/ _interop_require_default(require("./utilities/logging"));
94
- var _template = /*#__PURE__*/ _interop_require_default(require("./utilities/template"));
98
+ var _package = /*#__PURE__*/ _interop_require_default(require("./utilities/package"));
95
99
  var _fileSystem = /*#__PURE__*/ _interop_require_default(require("./utilities/fileSystem"));
96
100
  var _configuration = /*#__PURE__*/ _interop_require_default(require("./utilities/configuration"));
97
101
  function _interop_require_default(obj) {
@@ -100,4 +104,4 @@ function _interop_require_default(obj) {
100
104
  };
101
105
  }
102
106
 
103
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIGxldmVscyB9IGZyb20gXCIuL2xldmVsc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtZXRob2RzIH0gZnJvbSBcIi4vbWV0aG9kc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBoZWFkZXJzIH0gZnJvbSBcIi4vaGVhZGVyc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBrZXlDb2RlcyB9IGZyb20gXCIuL2tleUNvZGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGVuY29kaW5ncyB9IGZyb20gXCIuL2VuY29kaW5nc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjaGFyYWN0ZXJzIH0gZnJvbSBcIi4vY2hhcmFjdGVyc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdGF0dXNDb2RlcyB9IGZyb20gXCIuL3N0YXR1c0NvZGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNvbnRlbnRUeXBlcyB9IGZyb20gXCIuL2NvbnRlbnRUeXBlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdGF0dXNNZXNzYWdlcyB9IGZyb20gXCIuL3N0YXR1c01lc3NhZ2VzXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGF0aFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9wYXRoXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGh0dHBVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvaHR0cFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB2ZXJzaW9uVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3ZlcnNpb25cIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGFja2FnZVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9wYWNrYWdlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGFzeW5jaHJvbm91c1V0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hc3luY2hyb25vdXNcIjtcblxuZXhwb3J0IHsgZGVmYXVsdCBhcyBzaGVsbFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9zaGVsbFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyByZXF1ZXN0VXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3JlcXVlc3RcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgbG9nZ2luZ1V0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9sb2dnaW5nXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHRlbXBsYXRlVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3RlbXBsYXRlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZpbGVTeXN0ZW1VdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvZmlsZVN5c3RlbVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb25maWd1cmF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2NvbmZpZ3VyYXRpb25cIjtcbiJdLCJuYW1lcyI6WyJhcnJheVV0aWxpdGllcyIsImFzeW5jaHJvbm91c1V0aWxpdGllcyIsImNoYXJhY3RlcnMiLCJjb25maWd1cmF0aW9uVXRpbGl0aWVzIiwiY29udGVudFR5cGVzIiwiZW5jb2RpbmdzIiwiZmlsZVN5c3RlbVV0aWxpdGllcyIsImhlYWRlcnMiLCJodHRwVXRpbGl0aWVzIiwia2V5Q29kZXMiLCJsZXZlbHMiLCJsb2dnaW5nVXRpbGl0aWVzIiwibWV0aG9kcyIsInBhY2thZ2VVdGlsaXRpZXMiLCJwYXRoVXRpbGl0aWVzIiwicmVxdWVzdFV0aWxpdGllcyIsInNoZWxsVXRpbGl0aWVzIiwic3RhdHVzQ29kZXMiLCJzdGF0dXNNZXNzYWdlcyIsInRlbXBsYXRlVXRpbGl0aWVzIiwidmVyc2lvblV0aWxpdGllcyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0lBY29CQSxjQUFjO2VBQWRBLGNBQWM7O0lBR2RDLHFCQUFxQjtlQUFyQkEscUJBQXFCOztJQVZyQkMsVUFBVTtlQUFWQSxtQkFBVTs7SUFpQlZDLHNCQUFzQjtlQUF0QkEsc0JBQXNCOztJQWZ0QkMsWUFBWTtlQUFaQSxxQkFBWTs7SUFIWkMsU0FBUztlQUFUQSxrQkFBUzs7SUFpQlRDLG1CQUFtQjtlQUFuQkEsbUJBQW1COztJQW5CbkJDLE9BQU87ZUFBUEEsZ0JBQU87O0lBU1BDLGFBQWE7ZUFBYkEsYUFBYTs7SUFSYkMsUUFBUTtlQUFSQSxpQkFBUTs7SUFIUkMsTUFBTTtlQUFOQSxlQUFNOztJQW1CTkMsZ0JBQWdCO2VBQWhCQSxnQkFBZ0I7O0lBbEJoQkMsT0FBTztlQUFQQSxnQkFBTzs7SUFhUEMsZ0JBQWdCO2VBQWhCQSxnQkFBZ0I7O0lBSmhCQyxhQUFhO2VBQWJBLGFBQWE7O0lBUWJDLGdCQUFnQjtlQUFoQkEsZ0JBQWdCOztJQURoQkMsY0FBYztlQUFkQSxjQUFjOztJQVhkQyxXQUFXO2VBQVhBLG9CQUFXOztJQUVYQyxjQUFjO2VBQWRBLHVCQUFjOztJQVlkQyxpQkFBaUI7ZUFBakJBLGlCQUFpQjs7SUFQakJDLGdCQUFnQjtlQUFoQkEsZ0JBQWdCOzs7NkRBYkY7OERBQ0M7OERBQ0E7K0RBQ0M7Z0VBQ0M7aUVBQ0M7a0VBQ0M7bUVBQ0M7cUVBQ0U7MkRBRUQ7MkRBQ0E7NERBQ0M7OERBQ0U7OERBQ0E7bUVBQ0s7NERBRVA7OERBQ0U7OERBQ0E7K0RBQ0M7aUVBQ0U7b0VBQ0cifQ==
107
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9tYWluLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5leHBvcnQgeyBkZWZhdWx0IGFzIGxldmVscyB9IGZyb20gXCIuL2xldmVsc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBtZXRob2RzIH0gZnJvbSBcIi4vbWV0aG9kc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBoZWFkZXJzIH0gZnJvbSBcIi4vaGVhZGVyc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBrZXlDb2RlcyB9IGZyb20gXCIuL2tleUNvZGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGVuY29kaW5ncyB9IGZyb20gXCIuL2VuY29kaW5nc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjaGFyYWN0ZXJzIH0gZnJvbSBcIi4vY2hhcmFjdGVyc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdGF0dXNDb2RlcyB9IGZyb20gXCIuL3N0YXR1c0NvZGVzXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGNvbnRlbnRUeXBlcyB9IGZyb20gXCIuL2NvbnRlbnRUeXBlc1wiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdGF0dXNNZXNzYWdlcyB9IGZyb20gXCIuL3N0YXR1c01lc3NhZ2VzXCI7XG5cbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGF0aFV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9wYXRoXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGh0dHBVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvaHR0cFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhcnJheVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9hcnJheVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBzdHJpbmdVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvc3RyaW5nXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHZlcnNpb25VdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvdmVyc2lvblwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyB0ZW1wbGF0ZVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy90ZW1wbGF0ZVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBhc3luY2hyb25vdXNVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvYXN5bmNocm9ub3VzXCI7XG5cblxuXG5leHBvcnQgeyBkZWZhdWx0IGFzIHNoZWxsVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL3NoZWxsXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIHJlcXVlc3RVdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvcmVxdWVzdFwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBsb2dnaW5nVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2xvZ2dpbmdcIjtcbmV4cG9ydCB7IGRlZmF1bHQgYXMgcGFja2FnZVV0aWxpdGllcyB9IGZyb20gXCIuL3V0aWxpdGllcy9wYWNrYWdlXCI7XG5leHBvcnQgeyBkZWZhdWx0IGFzIGZpbGVTeXN0ZW1VdGlsaXRpZXMgfSBmcm9tIFwiLi91dGlsaXRpZXMvZmlsZVN5c3RlbVwiO1xuZXhwb3J0IHsgZGVmYXVsdCBhcyBjb25maWd1cmF0aW9uVXRpbGl0aWVzIH0gZnJvbSBcIi4vdXRpbGl0aWVzL2NvbmZpZ3VyYXRpb25cIjtcbiJdLCJuYW1lcyI6WyJhcnJheVV0aWxpdGllcyIsImFzeW5jaHJvbm91c1V0aWxpdGllcyIsImNoYXJhY3RlcnMiLCJjb25maWd1cmF0aW9uVXRpbGl0aWVzIiwiY29udGVudFR5cGVzIiwiZW5jb2RpbmdzIiwiZmlsZVN5c3RlbVV0aWxpdGllcyIsImhlYWRlcnMiLCJodHRwVXRpbGl0aWVzIiwia2V5Q29kZXMiLCJsZXZlbHMiLCJsb2dnaW5nVXRpbGl0aWVzIiwibWV0aG9kcyIsInBhY2thZ2VVdGlsaXRpZXMiLCJwYXRoVXRpbGl0aWVzIiwicmVxdWVzdFV0aWxpdGllcyIsInNoZWxsVXRpbGl0aWVzIiwic3RhdHVzQ29kZXMiLCJzdGF0dXNNZXNzYWdlcyIsInN0cmluZ1V0aWxpdGllcyIsInRlbXBsYXRlVXRpbGl0aWVzIiwidmVyc2lvblV0aWxpdGllcyJdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7Ozs7Ozs7O0lBY29CQSxjQUFjO2VBQWRBLGNBQWM7O0lBSWRDLHFCQUFxQjtlQUFyQkEscUJBQXFCOztJQVhyQkMsVUFBVTtlQUFWQSxtQkFBVTs7SUFvQlZDLHNCQUFzQjtlQUF0QkEsc0JBQXNCOztJQWxCdEJDLFlBQVk7ZUFBWkEscUJBQVk7O0lBSFpDLFNBQVM7ZUFBVEEsa0JBQVM7O0lBb0JUQyxtQkFBbUI7ZUFBbkJBLG1CQUFtQjs7SUF0Qm5CQyxPQUFPO2VBQVBBLGdCQUFPOztJQVNQQyxhQUFhO2VBQWJBLGFBQWE7O0lBUmJDLFFBQVE7ZUFBUkEsaUJBQVE7O0lBSFJDLE1BQU07ZUFBTkEsZUFBTTs7SUFzQk5DLGdCQUFnQjtlQUFoQkEsZ0JBQWdCOztJQXJCaEJDLE9BQU87ZUFBUEEsZ0JBQU87O0lBc0JQQyxnQkFBZ0I7ZUFBaEJBLGdCQUFnQjs7SUFiaEJDLGFBQWE7ZUFBYkEsYUFBYTs7SUFXYkMsZ0JBQWdCO2VBQWhCQSxnQkFBZ0I7O0lBRGhCQyxjQUFjO2VBQWRBLGNBQWM7O0lBZGRDLFdBQVc7ZUFBWEEsb0JBQVc7O0lBRVhDLGNBQWM7ZUFBZEEsdUJBQWM7O0lBS2RDLGVBQWU7ZUFBZkEsZUFBZTs7SUFFZkMsaUJBQWlCO2VBQWpCQSxpQkFBaUI7O0lBRGpCQyxnQkFBZ0I7ZUFBaEJBLGdCQUFnQjs7OzZEQWRGOzhEQUNDOzhEQUNBOytEQUNDO2dFQUNDO2lFQUNDO2tFQUNDO21FQUNDO3FFQUNFOzJEQUVEOzJEQUNBOzREQUNDOzZEQUNDOzhEQUNDOytEQUNDO21FQUNJOzREQUlQOzhEQUNFOzhEQUNBOzhEQUNBO2lFQUNHO29FQUNHIn0=
@@ -239,13 +239,15 @@ function copy(array1, array2) {
239
239
  function merge(array1, array2) {
240
240
  Array.prototype.push.apply(array1, array2);
241
241
  }
242
- function splice(array1, start) {
243
- var deleteCount = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : Infinity, array2 = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : [];
244
- var args = [
245
- start,
246
- deleteCount
247
- ].concat(_to_consumable_array(array2)), deletedItemsArray = Array.prototype.splice.apply(array1, args);
248
- return deletedItemsArray;
242
+ function find(array, callback) {
243
+ var elements = [];
244
+ forwardsForEach(array, function(element, index) {
245
+ var passed = callback(element, index);
246
+ if (passed) {
247
+ elements.push(element);
248
+ }
249
+ });
250
+ return elements;
249
251
  }
250
252
  function replace(array, element, callback) {
251
253
  var start;
@@ -262,50 +264,48 @@ function replace(array, element, callback) {
262
264
  }
263
265
  return found;
264
266
  }
267
+ function splice(array1, start) {
268
+ var deleteCount = arguments.length > 2 && arguments[2] !== void 0 ? arguments[2] : Infinity, array2 = arguments.length > 3 && arguments[3] !== void 0 ? arguments[3] : [];
269
+ var args = [
270
+ start,
271
+ deleteCount
272
+ ].concat(_to_consumable_array(array2)), deletedElements = Array.prototype.splice.apply(array1, args);
273
+ return deletedElements;
274
+ }
265
275
  function filter(array, callback) {
266
- var filteredElements = [];
276
+ var deletedElements = [];
267
277
  backwardsForEach(array, function(element, index) {
268
278
  var passed = callback(element, index);
269
279
  if (!passed) {
270
280
  var start = index, deleteCount = 1, deletedElements = array.splice(start, deleteCount), firstDeletedElement = first(deletedElements);
271
- filteredElements.unshift(firstDeletedElement); ///
281
+ deletedElements.unshift(firstDeletedElement); ///
272
282
  }
273
283
  });
274
- return filteredElements;
275
- }
276
- function find(array, callback) {
277
- var elements = [];
278
- forwardsForEach(array, function(element, index) {
279
- var passed = callback(element, index);
280
- if (passed) {
281
- elements.push(element);
282
- }
283
- });
284
- return elements;
284
+ return deletedElements;
285
285
  }
286
286
  function prune(array, callback) {
287
- var prunedElement = undefined;
287
+ var deletedElement = undefined;
288
288
  array.some(function(element, index) {
289
289
  var passed = callback(element, index);
290
290
  if (!passed) {
291
291
  var start = index, deleteCount = 1, deletedElements = array.splice(start, deleteCount), firstDeletedElement = first(deletedElements);
292
- prunedElement = firstDeletedElement; ///
292
+ deletedElement = firstDeletedElement; ///
293
293
  return true;
294
294
  }
295
295
  });
296
- return prunedElement;
296
+ return deletedElement;
297
297
  }
298
298
  function extract(array, callback) {
299
- var extractedElement = undefined;
299
+ var deletedElement = undefined;
300
300
  array.some(function(element, index) {
301
301
  var passed = callback(element, index);
302
302
  if (passed) {
303
303
  var start = index, deleteCount = 1, deletedElements = array.splice(start, deleteCount), firstDeletedElement = first(deletedElements);
304
- extractedElement = firstDeletedElement; ///
304
+ deletedElement = firstDeletedElement; ///
305
305
  return true;
306
306
  }
307
307
  });
308
- return extractedElement;
308
+ return deletedElement;
309
309
  }
310
310
  function patch(array, element, callback) {
311
311
  var found = array.some(function(element, index) {
@@ -467,10 +467,10 @@ var _default = {
467
467
  clear: clear,
468
468
  copy: copy,
469
469
  merge: merge,
470
- splice: splice,
470
+ find: find,
471
471
  replace: replace,
472
+ splice: splice,
472
473
  filter: filter,
473
- find: find,
474
474
  prune: prune,
475
475
  extract: extract,
476
476
  patch: patch,
@@ -490,4 +490,4 @@ var _default = {
490
490
  backwardsForEach: backwardsForEach
491
491
  };
492
492
 
493
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvYXJyYXkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbMF07fVxuXG5leHBvcnQgZnVuY3Rpb24gc2Vjb25kKGFycmF5KSB7IHJldHVybiBhcnJheVsxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gdGhpcmQoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzJdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VydGgoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWZ0aChhcnJheSkgeyByZXR1cm4gYXJyYXlbNF07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZnRoTGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gNV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvdXJ0aExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDRdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGlyZExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWNvbmRMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAyXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmlyc3RMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gbGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGhlYWQoYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKDAsIDEpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWlsKGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gYmFjayhhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoYXJyYXkubGVuZ3RoIC0gMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb250KGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgwLCBNYXRoLm1heCgxLCBhcnJheS5sZW5ndGggLSAxKSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHB1c2goYXJyYXkxLCBhcnJheTIpIHsgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYXJyYXkxLCBhcnJheTIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNoaWZ0KGFycmF5MSwgYXJyYXkyKSB7IEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGFycmF5MSwgYXJyYXkyKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0KGFycmF5MSwgZWxlbWVudE9yQXJyYXkyKSB7XG4gIGNvbnN0IGFycmF5MiA9IChlbGVtZW50T3JBcnJheTIgaW5zdGFuY2VvZiBBcnJheSkgP1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50T3JBcnJheTIgOlxuICAgICAgICAgICAgICAgICAgICAgWyBlbGVtZW50T3JBcnJheTIgXTtcbiAgXG4gIHB1c2goYXJyYXkxLCBhcnJheTIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIoYXJyYXkpIHtcbiAgY29uc3Qgc3RhcnQgPSAwO1xuICBcbiAgcmV0dXJuIGFycmF5LnNwbGljZShzdGFydCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KGFycmF5MSwgYXJyYXkyKSB7XG4gIGNvbnN0IHN0YXJ0ID0gMCxcbiAgICAgICAgZGVsZXRlQ291bnQgPSBhcnJheTIubGVuZ3RoOyAgLy8vXG4gIFxuICBzcGxpY2UoYXJyYXkxLCBzdGFydCwgZGVsZXRlQ291bnQsIGFycmF5Mik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZShhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHNwbGljZShhcnJheTEsIHN0YXJ0LCBkZWxldGVDb3VudCA9IEluZmluaXR5LCBhcnJheTIgPSBbXSkge1xuICBjb25zdCBhcmdzID0gW3N0YXJ0LCBkZWxldGVDb3VudCwgLi4uYXJyYXkyXSxcbiAgICAgICAgZGVsZXRlZEl0ZW1zQXJyYXkgPSBBcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KGFycmF5MSwgYXJncyk7XG5cbiAgcmV0dXJuIGRlbGV0ZWRJdGVtc0FycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZShhcnJheSwgZWxlbWVudCwgY2FsbGJhY2spIHtcbiAgbGV0IHN0YXJ0O1xuICBcbiAgY29uc3QgZm91bmQgPSBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIHN0YXJ0ID0gaW5kZXg7ICAvLy9cbiAgICAgIFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbiAgXG4gIGlmIChmb3VuZCkge1xuICAgIGNvbnN0IGRlbGV0ZUNvdW50ID0gMTtcblxuICAgIGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQsIGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBmaWx0ZXJlZEVsZW1lbnRzID0gW107XG4gIFxuICBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCksXG4gICAgICAgICAgICBmaXJzdERlbGV0ZWRFbGVtZW50ID0gZmlyc3QoZGVsZXRlZEVsZW1lbnRzKTtcbiAgICAgIFxuICAgICAgZmlsdGVyZWRFbGVtZW50cy51bnNoaWZ0KGZpcnN0RGVsZXRlZEVsZW1lbnQpOyAgLy8vXG4gICAgfVxuICB9KTtcbiAgXG4gIHJldHVybiBmaWx0ZXJlZEVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmluZChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgZWxlbWVudHMgPSBbXTtcblxuICBmb3J3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIGVsZW1lbnRzLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4gZWxlbWVudHM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcnVuZShhcnJheSwgY2FsbGJhY2spIHtcbiAgbGV0IHBydW5lZEVsZW1lbnQgPSB1bmRlZmluZWQ7XG4gIFxuICBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmICghcGFzc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KSxcbiAgICAgICAgICAgIGZpcnN0RGVsZXRlZEVsZW1lbnQgPSBmaXJzdChkZWxldGVkRWxlbWVudHMpO1xuICAgICAgXG4gICAgICBwcnVuZWRFbGVtZW50ID0gZmlyc3REZWxldGVkRWxlbWVudDsgIC8vL1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICBcbiAgcmV0dXJuIHBydW5lZEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBleHRyYWN0KGFycmF5LCBjYWxsYmFjaykge1xuICBsZXQgZXh0cmFjdGVkRWxlbWVudCA9IHVuZGVmaW5lZDtcblxuICBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMSxcbiAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50cyA9IGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpLFxuICAgICAgICAgICAgZmlyc3REZWxldGVkRWxlbWVudCA9IGZpcnN0KGRlbGV0ZWRFbGVtZW50cyk7XG5cbiAgICAgIGV4dHJhY3RlZEVsZW1lbnQgPSBmaXJzdERlbGV0ZWRFbGVtZW50OyAgLy8vXG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGV4dHJhY3RlZEVsZW1lbnQ7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwYXRjaChhcnJheSwgZWxlbWVudCwgY2FsbGJhY2spIHtcbiAgY29uc3QgZm91bmQgPSBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cblxuICBpZiAoZm91bmQpIHtcbiAgICBhcnJheS5wdXNoKGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tcHJlc3MoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGxldCBpbmRleDEgPSAwLFxuICAgICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIHdoaWxlIChpbmRleDEgPCBsZW5ndGgpIHtcbiAgICBjb25zdCBlbGVtZW50MSA9IGFycmF5W2luZGV4MV07XG5cbiAgICBmb3IgKGxldCBpbmRleDIgPSBsZW5ndGggLSAxOyBpbmRleDIgPiBpbmRleDE7IGluZGV4Mi0tKSB7XG4gICAgICBjb25zdCBlbGVtZW50MiA9IGFycmF5W2luZGV4Ml0sXG4gICAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50MiwgZWxlbWVudDEpO1xuXG4gICAgICBpZiAocGFzc2VkKSB7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgyLCAvLy9cbiAgICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxO1xuXG4gICAgICAgIGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpO1xuICAgICAgfVxuICAgIH1cblxuICAgIGluZGV4MSsrO1xuXG4gICAgbGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb21iaW5lKGFycmF5MSwgYXJyYXkyLCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheSA9IFtcbiAgICAuLi5hcnJheTEsXG4gICAgLi4uYXJyYXkyXG4gIF07XG5cbiAgY29tcHJlc3MoYXJyYXksIGNhbGxiYWNrKTtcblxuICByZXR1cm4gYXJyYXk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBhdWdtZW50KGFycmF5MSwgYXJyYXkyLCBjYWxsYmFjaykge1xuICBhcnJheTIuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBhcnJheTEucHVzaChlbGVtZW50KTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2VwYXJhdGUoYXJyYXksIGFycmF5MSwgYXJyYXkyLCBjYWxsYmFjaykge1xuICBhcnJheS5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIHBhc3NlZCA/XG4gICAgICBhcnJheTEucHVzaChlbGVtZW50KSA6XG4gICAgICAgIGFycmF5Mi5wdXNoKGVsZW1lbnQpO1xuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRmluZChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICByZXR1cm4gZWxlbWVudDtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGaW5kKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcbiAgICBcbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gZmFsc2U7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNTb21lKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNFdmVyeShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gYXJyYXlMZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAoIXBhc3NlZCkge1xuICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0cnVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNSZWR1Y2UoYXJyYXksIGNhbGxiYWNrLCBpbml0aWFsVmFsdWUpIHtcbiAgbGV0IHZhbHVlID0gaW5pdGlhbFZhbHVlOyAvLy9cblxuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzUmVkdWNlKGFycmF5LCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gIGxldCB2YWx1ZSA9IGluaXRpYWxWYWx1ZTsgLy8vXG5cbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBhcnJheUxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgdmFsdWUgPSBjYWxsYmFjayh2YWx1ZSwgZWxlbWVudCwgaW5kZXgpO1xuICB9XG5cbiAgcmV0dXJuIHZhbHVlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZm9yd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IDA7IGluZGV4IDwgYXJyYXlMZW5ndGg7IGluZGV4KyspIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBiYWNrd2FyZHNGb3JFYWNoKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF07XG5cbiAgICBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG4gIH1cbn1cblxuZXhwb3J0IGRlZmF1bHQge1xuICBmaXJzdCxcbiAgc2Vjb25kLFxuICB0aGlyZCxcbiAgZm91cnRoLFxuICBmaWZ0aCxcbiAgZmlmdGhMYXN0LFxuICBmb3VydGhMYXN0LFxuICB0aGlyZExhc3QsXG4gIHNlY29uZExhc3QsXG4gIGZpcnN0TGFzdCxcbiAgbGFzdCxcbiAgaGVhZCxcbiAgdGFpbCxcbiAgYmFjayxcbiAgZnJvbnQsXG4gIHB1c2gsXG4gIHVuc2hpZnQsXG4gIGNvbmNhdCxcbiAgY2xlYXIsXG4gIGNvcHksXG4gIG1lcmdlLFxuICBzcGxpY2UsXG4gIHJlcGxhY2UsXG4gIGZpbHRlcixcbiAgZmluZCxcbiAgcHJ1bmUsXG4gIGV4dHJhY3QsXG4gIHBhdGNoLFxuICBjb21wcmVzcyxcbiAgY29tYmluZSxcbiAgYXVnbWVudCxcbiAgc2VwYXJhdGUsXG4gIGZvcndhcmRzRmluZCxcbiAgYmFja3dhcmRzRmluZCxcbiAgZm9yd2FyZHNTb21lLFxuICBiYWNrd2FyZHNTb21lLFxuICBmb3J3YXJkc0V2ZXJ5LFxuICBiYWNrd2FyZHNFdmVyeSxcbiAgZm9yd2FyZHNSZWR1Y2UsXG4gIGJhY2t3YXJkc1JlZHVjZSxcbiAgZm9yd2FyZHNGb3JFYWNoLFxuICBiYWNrd2FyZHNGb3JFYWNoXG59O1xuIl0sIm5hbWVzIjpbImF1Z21lbnQiLCJiYWNrIiwiYmFja3dhcmRzRXZlcnkiLCJiYWNrd2FyZHNGaW5kIiwiYmFja3dhcmRzRm9yRWFjaCIsImJhY2t3YXJkc1JlZHVjZSIsImJhY2t3YXJkc1NvbWUiLCJjbGVhciIsImNvbWJpbmUiLCJjb21wcmVzcyIsImNvbmNhdCIsImNvcHkiLCJleHRyYWN0IiwiZmlmdGgiLCJmaWZ0aExhc3QiLCJmaWx0ZXIiLCJmaW5kIiwiZmlyc3QiLCJmaXJzdExhc3QiLCJmb3J3YXJkc0V2ZXJ5IiwiZm9yd2FyZHNGaW5kIiwiZm9yd2FyZHNGb3JFYWNoIiwiZm9yd2FyZHNSZWR1Y2UiLCJmb3J3YXJkc1NvbWUiLCJmb3VydGgiLCJmb3VydGhMYXN0IiwiZnJvbnQiLCJoZWFkIiwibGFzdCIsIm1lcmdlIiwicGF0Y2giLCJwcnVuZSIsInB1c2giLCJyZXBsYWNlIiwic2Vjb25kIiwic2Vjb25kTGFzdCIsInNlcGFyYXRlIiwic3BsaWNlIiwidGFpbCIsInRoaXJkIiwidGhpcmRMYXN0IiwidW5zaGlmdCIsImFycmF5IiwibGVuZ3RoIiwic2xpY2UiLCJNYXRoIiwibWF4IiwiYXJyYXkxIiwiYXJyYXkyIiwiQXJyYXkiLCJwcm90b3R5cGUiLCJhcHBseSIsImVsZW1lbnRPckFycmF5MiIsInN0YXJ0IiwiZGVsZXRlQ291bnQiLCJJbmZpbml0eSIsImFyZ3MiLCJkZWxldGVkSXRlbXNBcnJheSIsImVsZW1lbnQiLCJjYWxsYmFjayIsImZvdW5kIiwic29tZSIsImluZGV4IiwicGFzc2VkIiwiZmlsdGVyZWRFbGVtZW50cyIsImRlbGV0ZWRFbGVtZW50cyIsImZpcnN0RGVsZXRlZEVsZW1lbnQiLCJlbGVtZW50cyIsInBydW5lZEVsZW1lbnQiLCJ1bmRlZmluZWQiLCJleHRyYWN0ZWRFbGVtZW50IiwiaW5kZXgxIiwiZWxlbWVudDEiLCJpbmRleDIiLCJlbGVtZW50MiIsImZvckVhY2giLCJhcnJheUxlbmd0aCIsImluaXRpYWxWYWx1ZSIsInZhbHVlIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7SUF3TmdCQSxPQUFPO2VBQVBBOztJQTVMQUMsSUFBSTtlQUFKQTs7SUEyUkFDLGNBQWM7ZUFBZEE7O0lBNURBQyxhQUFhO2VBQWJBOztJQWlIQUMsZ0JBQWdCO2VBQWhCQTs7SUF4QkFDLGVBQWU7ZUFBZkE7O0lBM0RBQyxhQUFhO2VBQWJBOztJQTdPQUMsS0FBSztlQUFMQTs7SUFpS0FDLE9BQU87ZUFBUEE7O0lBekJBQyxRQUFRO2VBQVJBOztJQWhKQUMsTUFBTTtlQUFOQTs7SUFjQUMsSUFBSTtlQUFKQTs7SUFvVWhCLE9BMkNFO2VBM0NGOztJQXhPZ0JDLE9BQU87ZUFBUEE7O0lBcElBQyxLQUFLO2VBQUxBOztJQUVBQyxTQUFTO2VBQVRBOztJQTRFQUMsTUFBTTtlQUFOQTs7SUFtQkFDLElBQUk7ZUFBSkE7O0lBekdBQyxLQUFLO2VBQUxBOztJQWtCQUMsU0FBUztlQUFUQTs7SUFvUkFDLGFBQWE7ZUFBYkE7O0lBNURBQyxZQUFZO2VBQVpBOztJQXNIQUMsZUFBZTtlQUFmQTs7SUE1QkFDLGNBQWM7ZUFBZEE7O0lBNURBQyxZQUFZO2VBQVpBOztJQWxRQUMsTUFBTTtlQUFOQTs7SUFNQUMsVUFBVTtlQUFWQTs7SUFnQkFDLEtBQUs7ZUFBTEE7O0lBTkFDLElBQUk7ZUFBSkE7O0lBRkFDLElBQUk7ZUFBSkE7O0lBbUNBQyxLQUFLO2VBQUxBOztJQTBHQUMsS0FBSztlQUFMQTs7SUExQ0FDLEtBQUs7ZUFBTEE7O0lBekZBQyxJQUFJO2VBQUpBOztJQWtDQUMsT0FBTztlQUFQQTs7SUE5REFDLE1BQU07ZUFBTkE7O0lBY0FDLFVBQVU7ZUFBVkE7O0lBZ05BQyxRQUFRO2VBQVJBOztJQXZLQUMsTUFBTTtlQUFOQTs7SUFqQ0FDLElBQUk7ZUFBSkE7O0lBcEJBQyxLQUFLO2VBQUxBOztJQVVBQyxTQUFTO2VBQVRBOztJQWtCQUMsT0FBTztl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
493
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvYXJyYXkuanMiXSwic291cmNlc0NvbnRlbnQiOlsiXCJ1c2Ugc3RyaWN0XCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBmaXJzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbMF07fVxuXG5leHBvcnQgZnVuY3Rpb24gc2Vjb25kKGFycmF5KSB7IHJldHVybiBhcnJheVsxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gdGhpcmQoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzJdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3VydGgoYXJyYXkpIHsgcmV0dXJuIGFycmF5WzNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBmaWZ0aChhcnJheSkgeyByZXR1cm4gYXJyYXlbNF07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpZnRoTGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gNV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvdXJ0aExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDRdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0aGlyZExhc3QoYXJyYXkpIHsgcmV0dXJuIGFycmF5W2FycmF5Lmxlbmd0aCAtIDNdOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiBzZWNvbmRMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAyXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gZmlyc3RMYXN0KGFycmF5KSB7IHJldHVybiBhcnJheVthcnJheS5sZW5ndGggLSAxXTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gbGFzdChhcnJheSkgeyByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMV07IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGhlYWQoYXJyYXkpIHsgcmV0dXJuIGFycmF5LnNsaWNlKDAsIDEpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB0YWlsKGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgxKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gYmFjayhhcnJheSkgeyByZXR1cm4gYXJyYXkuc2xpY2UoYXJyYXkubGVuZ3RoIC0gMSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZyb250KGFycmF5KSB7IHJldHVybiBhcnJheS5zbGljZSgwLCBNYXRoLm1heCgxLCBhcnJheS5sZW5ndGggLSAxKSk7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIHB1c2goYXJyYXkxLCBhcnJheTIpIHsgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoYXJyYXkxLCBhcnJheTIpOyB9XG5cbmV4cG9ydCBmdW5jdGlvbiB1bnNoaWZ0KGFycmF5MSwgYXJyYXkyKSB7IEFycmF5LnByb3RvdHlwZS51bnNoaWZ0LmFwcGx5KGFycmF5MSwgYXJyYXkyKTsgfVxuXG5leHBvcnQgZnVuY3Rpb24gY29uY2F0KGFycmF5MSwgZWxlbWVudE9yQXJyYXkyKSB7XG4gIGNvbnN0IGFycmF5MiA9IChlbGVtZW50T3JBcnJheTIgaW5zdGFuY2VvZiBBcnJheSkgP1xuICAgICAgICAgICAgICAgICAgICBlbGVtZW50T3JBcnJheTIgOlxuICAgICAgICAgICAgICAgICAgICAgWyBlbGVtZW50T3JBcnJheTIgXTtcbiAgXG4gIHB1c2goYXJyYXkxLCBhcnJheTIpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gY2xlYXIoYXJyYXkpIHtcbiAgY29uc3Qgc3RhcnQgPSAwO1xuICBcbiAgcmV0dXJuIGFycmF5LnNwbGljZShzdGFydCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjb3B5KGFycmF5MSwgYXJyYXkyKSB7XG4gIGNvbnN0IHN0YXJ0ID0gMCxcbiAgICAgICAgZGVsZXRlQ291bnQgPSBhcnJheTIubGVuZ3RoOyAgLy8vXG4gIFxuICBzcGxpY2UoYXJyYXkxLCBzdGFydCwgZGVsZXRlQ291bnQsIGFycmF5Mik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZShhcnJheTEsIGFycmF5MikgeyBBcnJheS5wcm90b3R5cGUucHVzaC5hcHBseShhcnJheTEsIGFycmF5Mik7IH1cblxuZXhwb3J0IGZ1bmN0aW9uIGZpbmQoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGVsZW1lbnRzID0gW107XG5cbiAgZm9yd2FyZHNGb3JFYWNoKGFycmF5LCAoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICBlbGVtZW50cy5wdXNoKGVsZW1lbnQpO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVwbGFjZShhcnJheSwgZWxlbWVudCwgY2FsbGJhY2spIHtcbiAgbGV0IHN0YXJ0O1xuICBcbiAgY29uc3QgZm91bmQgPSBhcnJheS5zb21lKChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIHN0YXJ0ID0gaW5kZXg7ICAvLy9cbiAgICAgIFxuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9KTtcbiAgXG4gIGlmIChmb3VuZCkge1xuICAgIGNvbnN0IGRlbGV0ZUNvdW50ID0gMTtcblxuICAgIGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQsIGVsZW1lbnQpO1xuICB9XG5cbiAgcmV0dXJuIGZvdW5kO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc3BsaWNlKGFycmF5MSwgc3RhcnQsIGRlbGV0ZUNvdW50ID0gSW5maW5pdHksIGFycmF5MiA9IFtdKSB7XG4gIGNvbnN0IGFyZ3MgPSBbIHN0YXJ0LCBkZWxldGVDb3VudCwgLi4uYXJyYXkyIF0sXG4gICAgICAgIGRlbGV0ZWRFbGVtZW50cyA9IEFycmF5LnByb3RvdHlwZS5zcGxpY2UuYXBwbHkoYXJyYXkxLCBhcmdzKTtcblxuICByZXR1cm4gZGVsZXRlZEVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZmlsdGVyKGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBkZWxldGVkRWxlbWVudHMgPSBbXTtcbiAgXG4gIGJhY2t3YXJkc0ZvckVhY2goYXJyYXksIChlbGVtZW50LCBpbmRleCkgPT4ge1xuICAgIGNvbnN0IHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmICghcGFzc2VkKSB7XG4gICAgICBjb25zdCBzdGFydCA9IGluZGV4LCAgLy8vXG4gICAgICAgICAgICBkZWxldGVDb3VudCA9IDEsXG4gICAgICAgICAgICBkZWxldGVkRWxlbWVudHMgPSBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KSxcbiAgICAgICAgICAgIGZpcnN0RGVsZXRlZEVsZW1lbnQgPSBmaXJzdChkZWxldGVkRWxlbWVudHMpO1xuICAgICAgXG4gICAgICBkZWxldGVkRWxlbWVudHMudW5zaGlmdChmaXJzdERlbGV0ZWRFbGVtZW50KTsgIC8vL1xuICAgIH1cbiAgfSk7XG4gIFxuICByZXR1cm4gZGVsZXRlZEVsZW1lbnRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJ1bmUoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGxldCBkZWxldGVkRWxlbWVudCA9IHVuZGVmaW5lZDtcbiAgXG4gIGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKCFwYXNzZWQpIHtcbiAgICAgIGNvbnN0IHN0YXJ0ID0gaW5kZXgsICAvLy9cbiAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMSxcbiAgICAgICAgICAgIGRlbGV0ZWRFbGVtZW50cyA9IGFycmF5LnNwbGljZShzdGFydCwgZGVsZXRlQ291bnQpLFxuICAgICAgICAgICAgZmlyc3REZWxldGVkRWxlbWVudCA9IGZpcnN0KGRlbGV0ZWRFbGVtZW50cyk7XG4gICAgICBcbiAgICAgIGRlbGV0ZWRFbGVtZW50ID0gZmlyc3REZWxldGVkRWxlbWVudDsgIC8vL1xuXG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuICBcbiAgcmV0dXJuIGRlbGV0ZWRFbGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZXh0cmFjdChhcnJheSwgY2FsbGJhY2spIHtcbiAgbGV0IGRlbGV0ZWRFbGVtZW50ID0gdW5kZWZpbmVkO1xuXG4gIGFycmF5LnNvbWUoKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgY29uc3Qgc3RhcnQgPSBpbmRleCwgIC8vL1xuICAgICAgICAgICAgZGVsZXRlQ291bnQgPSAxLFxuICAgICAgICAgICAgZGVsZXRlZEVsZW1lbnRzID0gYXJyYXkuc3BsaWNlKHN0YXJ0LCBkZWxldGVDb3VudCksXG4gICAgICAgICAgICBmaXJzdERlbGV0ZWRFbGVtZW50ID0gZmlyc3QoZGVsZXRlZEVsZW1lbnRzKTtcblxuICAgICAgZGVsZXRlZEVsZW1lbnQgPSBmaXJzdERlbGV0ZWRFbGVtZW50OyAgLy8vXG5cbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfSk7XG5cbiAgcmV0dXJuIGRlbGV0ZWRFbGVtZW50O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcGF0Y2goYXJyYXksIGVsZW1lbnQsIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGZvdW5kID0gYXJyYXkuc29tZSgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBpZiAocGFzc2VkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gIH0pO1xuXG5cbiAgaWYgKGZvdW5kKSB7XG4gICAgYXJyYXkucHVzaChlbGVtZW50KTtcbiAgfVxuXG4gIHJldHVybiBmb3VuZDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNvbXByZXNzKGFycmF5LCBjYWxsYmFjaykge1xuICBsZXQgaW5kZXgxID0gMCxcbiAgICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICB3aGlsZSAoaW5kZXgxIDwgbGVuZ3RoKSB7XG4gICAgY29uc3QgZWxlbWVudDEgPSBhcnJheVtpbmRleDFdO1xuXG4gICAgZm9yIChsZXQgaW5kZXgyID0gbGVuZ3RoIC0gMTsgaW5kZXgyID4gaW5kZXgxOyBpbmRleDItLSkge1xuICAgICAgY29uc3QgZWxlbWVudDIgPSBhcnJheVtpbmRleDJdLFxuICAgICAgICAgICAgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudDIsIGVsZW1lbnQxKTtcblxuICAgICAgaWYgKHBhc3NlZCkge1xuICAgICAgICBjb25zdCBzdGFydCA9IGluZGV4MiwgLy8vXG4gICAgICAgICAgICAgIGRlbGV0ZUNvdW50ID0gMTtcblxuICAgICAgICBhcnJheS5zcGxpY2Uoc3RhcnQsIGRlbGV0ZUNvdW50KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpbmRleDErKztcblxuICAgIGxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gY29tYmluZShhcnJheTEsIGFycmF5MiwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXkgPSBbXG4gICAgLi4uYXJyYXkxLFxuICAgIC4uLmFycmF5MlxuICBdO1xuXG4gIGNvbXByZXNzKGFycmF5LCBjYWxsYmFjayk7XG5cbiAgcmV0dXJuIGFycmF5O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYXVnbWVudChhcnJheTEsIGFycmF5MiwgY2FsbGJhY2spIHtcbiAgYXJyYXkyLmZvckVhY2goKGVsZW1lbnQsIGluZGV4KSA9PiB7XG4gICAgY29uc3QgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgYXJyYXkxLnB1c2goZWxlbWVudCk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHNlcGFyYXRlKGFycmF5LCBhcnJheTEsIGFycmF5MiwgY2FsbGJhY2spIHtcbiAgYXJyYXkuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcbiAgICBjb25zdCBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG5cbiAgICBwYXNzZWQgP1xuICAgICAgYXJyYXkxLnB1c2goZWxlbWVudCkgOlxuICAgICAgICBhcnJheTIucHVzaChlbGVtZW50KTtcbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBmb3J3YXJkc0ZpbmQoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhcnJheUxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIGVsZW1lbnQ7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRmluZChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBhcnJheUxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIHJldHVybiBlbGVtZW50O1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzU29tZShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XSxcbiAgICAgICAgICBwYXNzZWQgPSBjYWxsYmFjayhlbGVtZW50LCBpbmRleCk7XG4gICAgXG4gICAgaWYgKHBhc3NlZCkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIGZhbHNlO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzU29tZShhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBhcnJheUxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdLFxuICAgICAgICAgIHBhc3NlZCA9IGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcblxuICAgIGlmIChwYXNzZWQpIHtcbiAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBmYWxzZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRXZlcnkoYXJyYXksIGNhbGxiYWNrKSB7XG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gMDsgaW5kZXggPCBhcnJheUxlbmd0aDsgaW5kZXgrKykge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKCFwYXNzZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc0V2ZXJ5KGFycmF5LCBjYWxsYmFjaykge1xuICBjb25zdCBhcnJheUxlbmd0aCA9IGFycmF5Lmxlbmd0aDtcblxuICBmb3IgKGxldCBpbmRleCA9IGFycmF5TGVuZ3RoIC0gMTsgaW5kZXggPj0gMDsgaW5kZXgtLSkge1xuICAgIGNvbnN0IGVsZW1lbnQgPSBhcnJheVtpbmRleF0sXG4gICAgICAgICAgcGFzc2VkID0gY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuXG4gICAgaWYgKCFwYXNzZWQpIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzUmVkdWNlKGFycmF5LCBjYWxsYmFjaywgaW5pdGlhbFZhbHVlKSB7XG4gIGxldCB2YWx1ZSA9IGluaXRpYWxWYWx1ZTsgLy8vXG5cbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHZhbHVlID0gY2FsbGJhY2sodmFsdWUsIGVsZW1lbnQsIGluZGV4KTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGJhY2t3YXJkc1JlZHVjZShhcnJheSwgY2FsbGJhY2ssIGluaXRpYWxWYWx1ZSkge1xuICBsZXQgdmFsdWUgPSBpbml0aWFsVmFsdWU7IC8vL1xuXG4gIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoO1xuXG4gIGZvciAobGV0IGluZGV4ID0gYXJyYXlMZW5ndGggLSAxOyBpbmRleCA+PSAwOyBpbmRleC0tKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIHZhbHVlID0gY2FsbGJhY2sodmFsdWUsIGVsZW1lbnQsIGluZGV4KTtcbiAgfVxuXG4gIHJldHVybiB2YWx1ZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGZvcndhcmRzRm9yRWFjaChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSAwOyBpbmRleCA8IGFycmF5TGVuZ3RoOyBpbmRleCsrKSB7XG4gICAgY29uc3QgZWxlbWVudCA9IGFycmF5W2luZGV4XTtcblxuICAgIGNhbGxiYWNrKGVsZW1lbnQsIGluZGV4KTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYmFja3dhcmRzRm9yRWFjaChhcnJheSwgY2FsbGJhY2spIHtcbiAgY29uc3QgYXJyYXlMZW5ndGggPSBhcnJheS5sZW5ndGg7XG5cbiAgZm9yIChsZXQgaW5kZXggPSBhcnJheUxlbmd0aCAtIDE7IGluZGV4ID49IDA7IGluZGV4LS0pIHtcbiAgICBjb25zdCBlbGVtZW50ID0gYXJyYXlbaW5kZXhdO1xuXG4gICAgY2FsbGJhY2soZWxlbWVudCwgaW5kZXgpO1xuICB9XG59XG5cbmV4cG9ydCBkZWZhdWx0IHtcbiAgZmlyc3QsXG4gIHNlY29uZCxcbiAgdGhpcmQsXG4gIGZvdXJ0aCxcbiAgZmlmdGgsXG4gIGZpZnRoTGFzdCxcbiAgZm91cnRoTGFzdCxcbiAgdGhpcmRMYXN0LFxuICBzZWNvbmRMYXN0LFxuICBmaXJzdExhc3QsXG4gIGxhc3QsXG4gIGhlYWQsXG4gIHRhaWwsXG4gIGJhY2ssXG4gIGZyb250LFxuICBwdXNoLFxuICB1bnNoaWZ0LFxuICBjb25jYXQsXG4gIGNsZWFyLFxuICBjb3B5LFxuICBtZXJnZSxcbiAgZmluZCxcbiAgcmVwbGFjZSxcbiAgc3BsaWNlLFxuICBmaWx0ZXIsXG4gIHBydW5lLFxuICBleHRyYWN0LFxuICBwYXRjaCxcbiAgY29tcHJlc3MsXG4gIGNvbWJpbmUsXG4gIGF1Z21lbnQsXG4gIHNlcGFyYXRlLFxuICBmb3J3YXJkc0ZpbmQsXG4gIGJhY2t3YXJkc0ZpbmQsXG4gIGZvcndhcmRzU29tZSxcbiAgYmFja3dhcmRzU29tZSxcbiAgZm9yd2FyZHNFdmVyeSxcbiAgYmFja3dhcmRzRXZlcnksXG4gIGZvcndhcmRzUmVkdWNlLFxuICBiYWNrd2FyZHNSZWR1Y2UsXG4gIGZvcndhcmRzRm9yRWFjaCxcbiAgYmFja3dhcmRzRm9yRWFjaFxufTtcbiJdLCJuYW1lcyI6WyJhdWdtZW50IiwiYmFjayIsImJhY2t3YXJkc0V2ZXJ5IiwiYmFja3dhcmRzRmluZCIsImJhY2t3YXJkc0ZvckVhY2giLCJiYWNrd2FyZHNSZWR1Y2UiLCJiYWNrd2FyZHNTb21lIiwiY2xlYXIiLCJjb21iaW5lIiwiY29tcHJlc3MiLCJjb25jYXQiLCJjb3B5IiwiZXh0cmFjdCIsImZpZnRoIiwiZmlmdGhMYXN0IiwiZmlsdGVyIiwiZmluZCIsImZpcnN0IiwiZmlyc3RMYXN0IiwiZm9yd2FyZHNFdmVyeSIsImZvcndhcmRzRmluZCIsImZvcndhcmRzRm9yRWFjaCIsImZvcndhcmRzUmVkdWNlIiwiZm9yd2FyZHNTb21lIiwiZm91cnRoIiwiZm91cnRoTGFzdCIsImZyb250IiwiaGVhZCIsImxhc3QiLCJtZXJnZSIsInBhdGNoIiwicHJ1bmUiLCJwdXNoIiwicmVwbGFjZSIsInNlY29uZCIsInNlY29uZExhc3QiLCJzZXBhcmF0ZSIsInNwbGljZSIsInRhaWwiLCJ0aGlyZCIsInRoaXJkTGFzdCIsInVuc2hpZnQiLCJhcnJheSIsImxlbmd0aCIsInNsaWNlIiwiTWF0aCIsIm1heCIsImFycmF5MSIsImFycmF5MiIsIkFycmF5IiwicHJvdG90eXBlIiwiYXBwbHkiLCJlbGVtZW50T3JBcnJheTIiLCJzdGFydCIsImRlbGV0ZUNvdW50IiwiY2FsbGJhY2siLCJlbGVtZW50cyIsImVsZW1lbnQiLCJpbmRleCIsInBhc3NlZCIsImZvdW5kIiwic29tZSIsIkluZmluaXR5IiwiYXJncyIsImRlbGV0ZWRFbGVtZW50cyIsImZpcnN0RGVsZXRlZEVsZW1lbnQiLCJkZWxldGVkRWxlbWVudCIsInVuZGVmaW5lZCIsImluZGV4MSIsImVsZW1lbnQxIiwiaW5kZXgyIiwiZWxlbWVudDIiLCJmb3JFYWNoIiwiYXJyYXlMZW5ndGgiLCJpbml0aWFsVmFsdWUiLCJ2YWx1ZSJdLCJt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
@@ -0,0 +1,74 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", {
3
+ value: true
4
+ });
5
+ function _export(target, all) {
6
+ for(var name in all)Object.defineProperty(target, name, {
7
+ enumerable: true,
8
+ get: all[name]
9
+ });
10
+ }
11
+ _export(exports, {
12
+ default: function() {
13
+ return _default;
14
+ },
15
+ strcmp: function() {
16
+ return strcmp;
17
+ },
18
+ strlen: function() {
19
+ return strlen;
20
+ },
21
+ substring: function() {
22
+ return substring;
23
+ }
24
+ });
25
+ var _constants = require("../constants");
26
+ function _array_like_to_array(arr, len) {
27
+ if (len == null || len > arr.length) len = arr.length;
28
+ for(var i = 0, arr2 = new Array(len); i < len; i++)arr2[i] = arr[i];
29
+ return arr2;
30
+ }
31
+ function _array_without_holes(arr) {
32
+ if (Array.isArray(arr)) return _array_like_to_array(arr);
33
+ }
34
+ function _iterable_to_array(iter) {
35
+ if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
36
+ }
37
+ function _non_iterable_spread() {
38
+ throw new TypeError("Invalid attempt to spread non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.");
39
+ }
40
+ function _to_consumable_array(arr) {
41
+ return _array_without_holes(arr) || _iterable_to_array(arr) || _unsupported_iterable_to_array(arr) || _non_iterable_spread();
42
+ }
43
+ function _unsupported_iterable_to_array(o, minLen) {
44
+ if (!o) return;
45
+ if (typeof o === "string") return _array_like_to_array(o, minLen);
46
+ var n = Object.prototype.toString.call(o).slice(8, -1);
47
+ if (n === "Object" && o.constructor) n = o.constructor.name;
48
+ if (n === "Map" || n === "Set") return Array.from(n);
49
+ if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _array_like_to_array(o, minLen);
50
+ }
51
+ function strcmp(stringA, stringB) {
52
+ var difference;
53
+ var codePointA = stringA === _constants.EMPTY_STRING ? 0 : stringA.codePointAt(0), codePointB = stringB === _constants.EMPTY_STRING ? 0 : stringB.codePointAt(0);
54
+ difference = codePointB - codePointA;
55
+ if (difference === 0 && codePointA !== 0 && codePointB !== 0) {
56
+ stringA = substring(stringA, 1); ///
57
+ stringB = substring(stringB, 1); ///
58
+ difference = strcmp(stringA, stringB);
59
+ }
60
+ return difference;
61
+ }
62
+ function strlen(string) {
63
+ return _to_consumable_array(string).length;
64
+ } ///
65
+ function substring(string, start, end) {
66
+ return _to_consumable_array(string).slice(start, end).join("");
67
+ } ///
68
+ var _default = {
69
+ strcmp: strcmp,
70
+ strlen: strlen,
71
+ substring: substring
72
+ };
73
+
74
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy91dGlsaXRpZXMvc3RyaW5nLmpzIl0sInNvdXJjZXNDb250ZW50IjpbIlwidXNlIHN0cmljdFwiO1xuXG5pbXBvcnQgeyBFTVBUWV9TVFJJTkcgfSBmcm9tIFwiLi4vY29uc3RhbnRzXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBzdHJjbXAoc3RyaW5nQSwgc3RyaW5nQikge1xuICBsZXQgZGlmZmVyZW5jZTtcblxuICBjb25zdCBjb2RlUG9pbnRBID0gKHN0cmluZ0EgPT09IEVNUFRZX1NUUklORykgP1xuICAgICAgICAgICAgICAgICAgICAgICAwIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdBLmNvZGVQb2ludEF0KDApLFxuICAgICAgICBjb2RlUG9pbnRCID0gKHN0cmluZ0IgPT09IEVNUFRZX1NUUklORykgP1xuICAgICAgICAgICAgICAgICAgICAgICAwIDpcbiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJpbmdCLmNvZGVQb2ludEF0KDApO1xuXG4gIGRpZmZlcmVuY2UgPSBjb2RlUG9pbnRCIC0gY29kZVBvaW50QTtcblxuICBpZiAoKGRpZmZlcmVuY2UgPT09IDApICYmIChjb2RlUG9pbnRBICE9PTApICYmIChjb2RlUG9pbnRCICE9PTApKSB7XG4gICAgc3RyaW5nQSA9IHN1YnN0cmluZyhzdHJpbmdBLCAxKTsgLy8vXG5cbiAgICBzdHJpbmdCID0gc3Vic3RyaW5nKHN0cmluZ0IsIDEpOyAvLy9cblxuICAgIGRpZmZlcmVuY2UgPSBzdHJjbXAoc3RyaW5nQSwgc3RyaW5nQik7XG4gIH1cblxuICByZXR1cm4gZGlmZmVyZW5jZTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHN0cmxlbihzdHJpbmcpIHsgcmV0dXJuIFsuLi5zdHJpbmddLmxlbmd0aDsgfSAvLy9cblxuZXhwb3J0IGZ1bmN0aW9uIHN1YnN0cmluZyhzdHJpbmcsIHN0YXJ0LCBlbmQpIHsgcmV0dXJuIFsuLi5zdHJpbmddLnNsaWNlKHN0YXJ0LCBlbmQpLmpvaW4oXCJcIik7IH0gIC8vL1xuXG5leHBvcnQgZGVmYXVsdCB7XG4gIHN0cmNtcCxcbiAgc3RybGVuLFxuICBzdWJzdHJpbmdcbn07XG4iXSwibmFtZXMiOlsic3RyY21wIiwic3RybGVuIiwic3Vic3RyaW5nIiwic3RyaW5nQSIsInN0cmluZ0IiLCJkaWZmZXJlbmNlIiwiY29kZVBvaW50QSIsIkVNUFRZX1NUUklORyIsImNvZGVQb2ludEF0IiwiY29kZVBvaW50QiIsInN0cmluZyIsImxlbmd0aCIsInN0YXJ0IiwiZW5kIiwic2xpY2UiLCJqb2luIl0sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7Ozs7Ozs7SUErQkEsT0FJRTtlQUpGOztJQTNCZ0JBLE1BQU07ZUFBTkE7O0lBdUJBQyxNQUFNO2VBQU5BOztJQUVBQyxTQUFTO2VBQVRBOzs7eUJBM0JhOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUV0QixTQUFTRixPQUFPRyxPQUFPLEVBQUVDLE9BQU87SUFDckMsSUFBSUM7SUFFSixJQUFNQyxhQUFhLEFBQUNILFlBQVlJLHVCQUFZLEdBQ3ZCLElBQ0VKLFFBQVFLLFdBQVcsQ0FBQyxJQUNyQ0MsYUFBYSxBQUFDTCxZQUFZRyx1QkFBWSxHQUN2QixJQUNFSCxRQUFRSSxXQUFXLENBQUM7SUFFM0NILGFBQWFJLGFBQWFIO0lBRTFCLElBQUksQUFBQ0QsZUFBZSxLQUFPQyxlQUFjLEtBQU9HLGVBQWMsR0FBSTtRQUNoRU4sVUFBVUQsVUFBVUMsU0FBUyxJQUFJLEdBQUc7UUFFcENDLFVBQVVGLFVBQVVFLFNBQVMsSUFBSSxHQUFHO1FBRXBDQyxhQUFhTCxPQUFPRyxTQUFTQztJQUMvQjtJQUVBLE9BQU9DO0FBQ1Q7QUFFTyxTQUFTSixPQUFPUyxNQUFNO0lBQUksT0FBTyxBQUFDLHFCQUFHQSxRQUFRQyxNQUFNO0FBQUUsRUFBRSxHQUFHO0FBRTFELFNBQVNULFVBQVVRLE1BQU0sRUFBRUUsS0FBSyxFQUFFQyxHQUFHO0lBQUksT0FBTyxBQUFDLHFCQUFHSCxRQUFRSSxLQUFLLENBQUNGLE9BQU9DLEtBQUtFLElBQUksQ0FBQztBQUFLLEVBQUcsR0FBRztJQUVyRyxXQUFlO0lBQ2JmLFFBQUFBO0lBQ0FDLFFBQUFBO0lBQ0FDLFdBQUFBO0FBQ0YifQ==
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "necessary",
3
3
  "author": "James Smith",
4
- "version": "12.1.3",
4
+ "version": "12.2.0",
5
5
  "license": "MIT, Anti-996",
6
6
  "homepage": "https://github.com/djalbat/necessary",
7
7
  "description": "A collection of utility functions.",
package/src/browser.js CHANGED
@@ -10,10 +10,12 @@ export { default as statusCodes } from "./statusCodes";
10
10
  export { default as contentTypes } from "./contentTypes";
11
11
  export { default as statusMessages } from "./statusMessages";
12
12
 
13
- export { default as ajaxUtilities } from "./utilities/ajax";
14
-
15
13
  export { default as pathUtilities } from "./utilities/path";
16
14
  export { default as httpUtilities } from "./utilities/http";
17
15
  export { default as arrayUtilities } from "./utilities/array";
16
+ export { default as stringUtilities } from "./utilities/string";
18
17
  export { default as versionUtilities } from "./utilities/version";
18
+ export { default as templateUtilities } from "./utilities/template";
19
19
  export { default as asynchronousUtilities } from "./utilities/asynchronous";
20
+
21
+ export { default as ajaxUtilities } from "./utilities/ajax";
package/src/main.js CHANGED
@@ -13,13 +13,16 @@ export { default as statusMessages } from "./statusMessages";
13
13
  export { default as pathUtilities } from "./utilities/path";
14
14
  export { default as httpUtilities } from "./utilities/http";
15
15
  export { default as arrayUtilities } from "./utilities/array";
16
+ export { default as stringUtilities } from "./utilities/string";
16
17
  export { default as versionUtilities } from "./utilities/version";
17
- export { default as packageUtilities } from "./utilities/package";
18
+ export { default as templateUtilities } from "./utilities/template";
18
19
  export { default as asynchronousUtilities } from "./utilities/asynchronous";
19
20
 
21
+
22
+
20
23
  export { default as shellUtilities } from "./utilities/shell";
21
24
  export { default as requestUtilities } from "./utilities/request";
22
25
  export { default as loggingUtilities } from "./utilities/logging";
23
- export { default as templateUtilities } from "./utilities/template";
26
+ export { default as packageUtilities } from "./utilities/package";
24
27
  export { default as fileSystemUtilities } from "./utilities/fileSystem";
25
28
  export { default as configurationUtilities } from "./utilities/configuration";
@@ -57,11 +57,18 @@ export function copy(array1, array2) {
57
57
 
58
58
  export function merge(array1, array2) { Array.prototype.push.apply(array1, array2); }
59
59
 
60
- export function splice(array1, start, deleteCount = Infinity, array2 = []) {
61
- const args = [start, deleteCount, ...array2],
62
- deletedItemsArray = Array.prototype.splice.apply(array1, args);
60
+ export function find(array, callback) {
61
+ const elements = [];
63
62
 
64
- return deletedItemsArray;
63
+ forwardsForEach(array, (element, index) => {
64
+ const passed = callback(element, index);
65
+
66
+ if (passed) {
67
+ elements.push(element);
68
+ }
69
+ });
70
+
71
+ return elements;
65
72
  }
66
73
 
67
74
  export function replace(array, element, callback) {
@@ -86,8 +93,15 @@ export function replace(array, element, callback) {
86
93
  return found;
87
94
  }
88
95
 
96
+ export function splice(array1, start, deleteCount = Infinity, array2 = []) {
97
+ const args = [ start, deleteCount, ...array2 ],
98
+ deletedElements = Array.prototype.splice.apply(array1, args);
99
+
100
+ return deletedElements;
101
+ }
102
+
89
103
  export function filter(array, callback) {
90
- const filteredElements = [];
104
+ const deletedElements = [];
91
105
 
92
106
  backwardsForEach(array, (element, index) => {
93
107
  const passed = callback(element, index);
@@ -98,29 +112,15 @@ export function filter(array, callback) {
98
112
  deletedElements = array.splice(start, deleteCount),
99
113
  firstDeletedElement = first(deletedElements);
100
114
 
101
- filteredElements.unshift(firstDeletedElement); ///
115
+ deletedElements.unshift(firstDeletedElement); ///
102
116
  }
103
117
  });
104
118
 
105
- return filteredElements;
106
- }
107
-
108
- export function find(array, callback) {
109
- const elements = [];
110
-
111
- forwardsForEach(array, (element, index) => {
112
- const passed = callback(element, index);
113
-
114
- if (passed) {
115
- elements.push(element);
116
- }
117
- });
118
-
119
- return elements;
119
+ return deletedElements;
120
120
  }
121
121
 
122
122
  export function prune(array, callback) {
123
- let prunedElement = undefined;
123
+ let deletedElement = undefined;
124
124
 
125
125
  array.some((element, index) => {
126
126
  const passed = callback(element, index);
@@ -131,17 +131,17 @@ export function prune(array, callback) {
131
131
  deletedElements = array.splice(start, deleteCount),
132
132
  firstDeletedElement = first(deletedElements);
133
133
 
134
- prunedElement = firstDeletedElement; ///
134
+ deletedElement = firstDeletedElement; ///
135
135
 
136
136
  return true;
137
137
  }
138
138
  });
139
139
 
140
- return prunedElement;
140
+ return deletedElement;
141
141
  }
142
142
 
143
143
  export function extract(array, callback) {
144
- let extractedElement = undefined;
144
+ let deletedElement = undefined;
145
145
 
146
146
  array.some((element, index) => {
147
147
  const passed = callback(element, index);
@@ -152,13 +152,13 @@ export function extract(array, callback) {
152
152
  deletedElements = array.splice(start, deleteCount),
153
153
  firstDeletedElement = first(deletedElements);
154
154
 
155
- extractedElement = firstDeletedElement; ///
155
+ deletedElement = firstDeletedElement; ///
156
156
 
157
157
  return true;
158
158
  }
159
159
  });
160
160
 
161
- return extractedElement;
161
+ return deletedElement;
162
162
  }
163
163
 
164
164
  export function patch(array, element, callback) {
@@ -394,10 +394,10 @@ export default {
394
394
  clear,
395
395
  copy,
396
396
  merge,
397
- splice,
397
+ find,
398
398
  replace,
399
+ splice,
399
400
  filter,
400
- find,
401
401
  prune,
402
402
  extract,
403
403
  patch,
@@ -0,0 +1,36 @@
1
+ "use strict";
2
+
3
+ import { EMPTY_STRING } from "../constants";
4
+
5
+ export function strcmp(stringA, stringB) {
6
+ let difference;
7
+
8
+ const codePointA = (stringA === EMPTY_STRING) ?
9
+ 0 :
10
+ stringA.codePointAt(0),
11
+ codePointB = (stringB === EMPTY_STRING) ?
12
+ 0 :
13
+ stringB.codePointAt(0);
14
+
15
+ difference = codePointB - codePointA;
16
+
17
+ if ((difference === 0) && (codePointA !==0) && (codePointB !==0)) {
18
+ stringA = substring(stringA, 1); ///
19
+
20
+ stringB = substring(stringB, 1); ///
21
+
22
+ difference = strcmp(stringA, stringB);
23
+ }
24
+
25
+ return difference;
26
+ }
27
+
28
+ export function strlen(string) { return [...string].length; } ///
29
+
30
+ export function substring(string, start, end) { return [...string].slice(start, end).join(""); } ///
31
+
32
+ export default {
33
+ strcmp,
34
+ strlen,
35
+ substring
36
+ };