├── .github
└── workflows
│ ├── branches.yml
│ └── master.yml
├── .gitignore
├── .yarn
├── plugins
│ └── @yarnpkg
│ │ └── plugin-interactive-tools.cjs
└── releases
│ └── yarn-3.2.4.cjs
├── .yarnrc.yml
├── LICENSE
├── README.md
├── assets
└── logo.svg
├── index.d.ts
├── lib
├── add.d.ts
├── conditional.d.ts
├── extends.d.ts
├── falsy.d.ts
├── fill.d.ts
├── first.d.ts
├── greater-than.d.ts
├── is.d.ts
├── larger-than.d.ts
├── last.d.ts
├── length-of.d.ts
├── logic.d.ts
├── mul.d.ts
├── not.d.ts
├── optional.d.ts
├── overwrite.d.ts
├── rest.d.ts
├── reverse-rest.d.ts
├── reverse.d.ts
├── same-length.d.ts
├── shift.d.ts
├── slice.d.ts
├── sub.d.ts
├── truncate.d.ts
└── union.d.ts
├── package.json
├── tests
├── add.ts
├── fill.ts
├── greater-than.ts
├── index.d.ts
├── slice.ts
├── tsconfig.json
└── tslint.json
├── tsconfig.json
├── tsconfig.prod.json
└── yarn.lock
/.github/workflows/branches.yml:
--------------------------------------------------------------------------------
1 | # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
3 |
4 | name: Branches
5 |
6 | on:
7 | push:
8 | branches-ignore:
9 | - master
10 |
11 | jobs:
12 | build:
13 | name: Build
14 | runs-on: ubuntu-latest
15 |
16 | strategy:
17 | matrix:
18 | node-version:
19 | - 14.x
20 | - 16.x
21 | - 18.x
22 | - 19.x
23 | steps:
24 | - uses: actions/checkout@v2
25 | - name: Use Node.js ${{ matrix.node-version }}
26 | uses: actions/setup-node@v1
27 | with:
28 | node-version: ${{ matrix.node-version }}
29 | - run: yarn
30 | - run: yarn build
31 | - run: yarn test
32 | env:
33 | CI: true
34 |
--------------------------------------------------------------------------------
/.github/workflows/master.yml:
--------------------------------------------------------------------------------
1 | # This workflow will do a clean install of node dependencies, build the source code and run tests across different versions of node
2 | # For more information see: https://help.github.com/actions/language-and-framework-guides/using-nodejs-with-github-actions
3 |
4 | name: Master
5 |
6 | on:
7 | push:
8 | branches:
9 | - master
10 |
11 | jobs:
12 | build:
13 | name: Build
14 | runs-on: ubuntu-latest
15 | strategy:
16 | matrix:
17 | node-version:
18 | - 14.x
19 | - 16.x
20 | - 18.x
21 | - 19.x
22 | steps:
23 | - uses: actions/checkout@v2
24 | - name: Use Node.js ${{ matrix.node-version }}
25 | uses: actions/setup-node@v1
26 | with:
27 | node-version: ${{ matrix.node-version }}
28 | - run: yarn
29 | - run: yarn build
30 | - run: yarn test
31 | env:
32 | CI: true
33 |
34 | release:
35 | name: Release
36 | runs-on: ubuntu-latest
37 | needs: build
38 | steps:
39 | - name: Checkout
40 | uses: actions/checkout@v1
41 | - name: Setup Node.js
42 | uses: actions/setup-node@v1
43 | with:
44 | node-version: 18
45 | - run: yarn
46 | - run: yarn build
47 | - run: yarn test
48 | env:
49 | CI: true
50 | - name: Release
51 | env:
52 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
53 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
54 | run: npx semantic-release
55 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules
2 | coverage
3 | dist
4 | yarn-*
5 | .yarn/
6 |
--------------------------------------------------------------------------------
/.yarnrc.yml:
--------------------------------------------------------------------------------
1 | nodeLinker: node-modules
2 |
3 | plugins:
4 | - path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
5 | spec: "@yarnpkg/plugin-interactive-tools"
6 |
7 | yarnPath: .yarn/releases/yarn-3.2.4.cjs
8 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2021 Gustaf Räntilä
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
23 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | [![npm version][npm-image]][npm-url]
2 | [![downloads][downloads-image]][npm-url]
3 |
4 |
5 |
6 | # API
7 |
8 | ## Contents
9 |
10 | - [Arithmetics](#arithmetics)
11 | - [`Add` adding numbers](#add)
12 | - [`Sub` subtracting numbers](#sub)
13 | - [`Mul` multiplying numbers](#mul)
14 | - [Conditionals and comparisons](#conditionals-and-comparisons)
15 | - [`If` Conditionals](#conditional)
16 | - [`Extends` Type extends](#extends)
17 | - [`GreaterThan` greater-than comparison](#greaterthan)
18 | - [`Is< T, U >` compare equal types](#is)
19 | - [`IsFalsy< T >` is type falsy](#isfalsy)
20 | - [Logics](#logics)
21 | - [`And`, `Or`, `Xor` Logic (and, or, xor)](#logic-and-or-xor)
22 | - [`Not` logic invert](#not)
23 | - [Tuples](#tuples)
24 | - [`Fill` construct a tuple of size N](#fill)
25 | - [`First<...T>`, `Last<...T>` first and last tuple element](#first-last)
26 | - [`Rest<...R>`, `ReverseRest<...R>` all but the first / last](#rest-reverserest)
27 | - [`LargerThan<...T1, ...T2>`, `SameLength<...T1, ...T2>` tuple size comparison](#largerthan-samelength)
28 | - [`LengthOf<...T>` length of tuple](#lengthof)
29 | - [`Optional<...T1, ...T2>`, `OptionalFrom<...T, N>` make optional tuple elements](#optional)
30 | - [`Overwrite<...T1, ...T2>` overwrite one tuple with another](#overwrite)
31 | - [`Reverse<...T>` reverse the types in a tuple](#reverse)
32 | - [`Shift<...T, N>` remove the first N elements in a tuple](#shift)
33 | - [`Slice<...T, Start?, End?>` slice a tuple](#slice)
34 | - [`Truncate<...T, N>` truncate a tuple](#truncate)
35 | - [`UnionAll<...T1, T2>` union all tuple element types with a type](#union)
36 |
37 |
38 | ## Arithmetics
39 |
40 | The arithmetics in this library handles positive integers up to ~98, sometimes more.
41 |
42 | ### Add
43 |
44 | Add two positive numbers:
45 |
46 | ```ts
47 | import type { Add } from 'meta-types'
48 | type T = Add< 13, 11 >; // T is 24
49 | ```
50 |
51 |
52 | ### Sub
53 |
54 | Subtract the second number from the first number:
55 |
56 | ```ts
57 | import type { Sub } from 'meta-types'
58 | type T = Sub< 13, 11 >; // T is 2
59 | ```
60 |
61 |
62 | ### Mul
63 |
64 | Multiply two numbers:
65 |
66 | ```ts
67 | import type { Mul } from 'meta-types'
68 | type T = Mul< 13, 11 >; // T is 143
69 | ```
70 |
71 |
72 | ## Conditionals and comparisons
73 |
74 | ### Conditional
75 |
76 | Return Then if If otherwise Else, or; if `If` then `Then` else `Else`.
77 |
78 | ```ts
79 | import type { If, Extends } from 'meta-types'
80 | type T1 = If< true, "yes", "no" >; // T1 is "yes"
81 | type T2 = If< false, "yes", "no" >; // T2 is "no"
82 | type T3 = If< Extends< "42", number >, "yes", "no" >; // T3 is "no", "42" doesn't extend number
83 | ```
84 |
85 |
86 | ### Extends
87 |
88 | Returns true if `T` extends `E`, otherwise false. This is a trivial operation, but practical in meta functional statements, e.g. `If`.
89 |
90 | ```ts
91 | import type { Extends } from 'meta-types'
92 | type T1 = Extends< true, boolean >; // T1 is true; true extends boolean
93 | type T1 = Extends< "42", number >; // T2 is false; "42" doesn't extend number
94 | ```
95 |
96 |
97 | ### GreaterThan
98 |
99 | `GreaterThan` returns true if the first number is greater than the second.
100 |
101 | A third argument can be set to `true`, to turn this into greater-than-or-equal.
102 |
103 | ```ts
104 | import type { GreaterThan } from 'meta-types'
105 | type T1 = GreaterThan< 42, 40 >; // T1 is true; 42 > 40
106 | type T2 = GreaterThan< 40, 40, true >; // T2 is true; 40 >= 40
107 | type T3 = GreaterThan< 40, 42 >; // T3 is false; 40 < 42
108 | ```
109 |
110 |
111 | ### Is
112 |
113 | `Is` returns true for equal types.
114 |
115 | ```ts
116 | import type { Is } from 'meta-types'
117 | type T1 = Is< 42, number >; // T1 is false
118 | type T2 = Is< null, undefined >; // T2 is false
119 | type T3 = Is< "foo", "foo" >; // T3 is true
120 | ```
121 |
122 |
123 | ### IsFalsy
124 |
125 | `IsFalsy` returns true for any falsy type (`false`, `""`, `0`, `null` and `undefined`).
126 |
127 | ```ts
128 | import type { IsFalsy } from 'meta-types'
129 | type T1 = IsFalsy< 0 >; // T1 is true
130 | type T2 = IsFalsy< 3 >; // T2 is false
131 | ```
132 |
133 |
134 | ## Logics
135 |
136 | ### Logic (and, or, xor)
137 |
138 | `And`, `Or` and `Xor` can be used to perform logical operations on booleans.
139 |
140 | ```ts
141 | import type { And, Or, Xor } from 'meta-types'
142 | type T1 = And< true, false >; // T1 is false, {true && false} -> false
143 | type T2 = Or< true, false >; // T2 is true, {true || false} -> true
144 | type T2 = Xor< true, false >; // T3 is true, {true ^ false} -> true
145 | ```
146 |
147 |
148 | ### Not
149 |
150 | Invert `true` or `false` using `Not`.
151 |
152 | ```ts
153 | import type { Not } from 'meta-types'
154 | type F = Not< true >; // F is false, !true
155 | type T = Not< false >; // T is true, !false
156 | ```
157 |
158 | A second argument `Strict` can be provided, which defaults to `true`. If this is set to `false`, and [falsy](#isfalsy) type will return `true` instead of `never`.
159 |
160 | ```ts
161 | import type { Not } from 'meta-types'
162 | type F = Not< 0 >; // F is never, not exactly false
163 | type T = Not< 0, false >; // T is true, 0 is falsy
164 | ```
165 |
166 |
167 | ## Tuples
168 |
169 |
170 | ### Fill
171 |
172 | Create a tuple of size `N`, filled with `any` (or type `T` if provided).
173 |
174 | ```ts
175 | import type { Fill } from 'meta-types'
176 | type T1 = Fill< 3 >; // T1 is [ any, any, any ]
177 | type T2 = Fill< 4, null >; // T2 is [ null, null, null, null ]
178 | ```
179 |
180 |
181 | ### First, Last
182 |
183 | `First` and `Last` can be used to extract the first and last elements in a tuple.
184 |
185 | ```ts
186 | import type { First, Last } from 'meta-types'
187 | type T = [ "hello", 42, "world", true ];
188 | type T1 = First< T >; // T1 is "hello"
189 | type T2 = Last< T >; // T2 is true
190 | ```
191 |
192 |
193 | ### Rest, ReverseRest
194 |
195 | `Rest` and `ReverseRest` can be used to extract all-but-the-first or all-but-the-last elements in a tuple.
196 |
197 | ```ts
198 | import type { Rest, ReverseRest } from 'meta-types'
199 | type T = [ "hello", 42, "world", true ];
200 | type T1 = Rest< T >; // T1 is [ 42, "world", true ]
201 | type T2 = ReverseRest< T >; // T2 is [ "hello", 42, "world" ]
202 | ```
203 |
204 |
205 | ### LargerThan, SameLength
206 |
207 | `LargerThan` and `SameLength` can be used to extract and compare the length of tuples. A second argument can be provided to `LargerThan` to turn it into larger-than-or-same-length.
208 |
209 | ```ts
210 | import type { LargerThan, SameLength } from 'meta-types'
211 | type T1 = LargerThan< [ 0, 0 ], [ 0, 0, 0 ] >; // T1 is false, first length 2 < second length 3
212 | type T2 = SameLength< [ 0, 0 ], [ 0, 0 ] >; // T2 is true, length 2 === length 2
213 | type T3 = LargerThan< [ 0, 0 ], [ 0, 0 ], true >; // T3 is true, 2 >= 2
214 | ```
215 |
216 |
217 | ### LengthOf
218 |
219 | `LengthOf` returns the length of a tuple, or a fallback type (defaults to `-1`) if the tuple is unbounded, i.e. it's rest-spread like `[ "foo", 42, ...null[] ]`.
220 |
221 | ```ts
222 | import type { LengthOf } from 'meta-types'
223 | type T1 = LengthOf< [ 0, 0 ] >; // T1 is 2
224 | type T2 = LengthOf< [ 0, 0, ...any ] >; // T2 is -1
225 | type T3 = LengthOf< [ 0, 0, ...any ], "ouch" >; // T3 is "ouch"
226 | ```
227 |
228 |
229 | ### Optional
230 |
231 | Append an optional tuple to a *required* tuple.
232 |
233 | ```ts
234 | import type { Optional } from 'meta-types'
235 | type T = Optional< [ string, number ], [ boolean, any ] >;
236 | // T is:
237 | // | [ string, number ]
238 | // | [ string, number, boolean ]
239 | // | [ string, number, boolean, any ]
240 | ```
241 |
242 | Turn all types after index N into optional.
243 |
244 | ```ts
245 | import type { OptionalFrom } from 'meta-types'
246 | type T = OptionalFrom< [ string, number, boolean, any ], 2 >;
247 | // T is:
248 | // | [ string, number ]
249 | // | [ string, number, boolean ]
250 | // | [ string, number, boolean, any ]
251 | ```
252 |
253 |
254 | ### Overwrite
255 |
256 | Overwrite the first elements in a tuple, with elements from another tuple. The first tuple will be overwritten with types in the second tuple.
257 |
258 | ```ts
259 | import type { Overwrite } from 'meta-types'
260 | type T1 = Overwrite< [ 1, 2, 3 ], [ "a", "b" ] >; // T1 is [ "a", "b", 3 ]
261 | type T2 = Overwrite< [ 1, 2 ], [ "a", "b", "c" ] >; // T2 is [ "a", "b", "c" ]
262 | ```
263 |
264 |
265 | ### Reverse
266 |
267 | Reverse a tuple.
268 |
269 | ```ts
270 | import type { Reverse } from 'meta-types'
271 | type T = Reverse< [ string, boolean, 42 ] >; // T is [ 42, boolean, string ]
272 | ```
273 |
274 |
275 | ### Shift
276 |
277 | Shift (remove the first) N elements from a tuple.
278 |
279 | ```ts
280 | import type { Shift } from 'meta-types'
281 | type T = Shift< [ string, boolean, number, 42, "foo" ], 2 >;
282 | // T is [ number, 42, "foo" ]
283 | ```
284 |
285 |
286 | ### Slice
287 |
288 | Slice a tuple with a start and end offset.
289 |
290 | ```ts
291 | import type { Slice } from 'meta-types'
292 | type T = Slice< [ string, boolean, number, 42, "foo" ], 2, 4 >;
293 | // T is [ number, 42 ]
294 | ```
295 |
296 |
297 | ### Truncate
298 |
299 | Truncate a tuple to a max length.
300 |
301 | ```ts
302 | import type { Truncate } from 'meta-types'
303 | type T = Truncate< [ string, boolean, number, 42, "foo" ], 2 >;
304 | // T is [ string, boolean ]
305 | ```
306 |
307 |
308 | ### Union
309 |
310 | Union all the types in a tuple, with a type.
311 |
312 | ```ts
313 | import type { UnionAll } from 'meta-types'
314 | type T = UnionAll< [ string, boolean, number ], U >;
315 | // T is [ string | U, boolean | U, number | U ]
316 | ```
317 |
318 |
319 |
320 | [npm-image]: https://img.shields.io/npm/v/meta-types.svg
321 | [npm-url]: https://npmjs.org/package/meta-types
322 | [downloads-image]: https://img.shields.io/npm/dm/meta-types.svg
323 |
--------------------------------------------------------------------------------
/index.d.ts:
--------------------------------------------------------------------------------
1 | export * from './lib/add'
2 | export * from './lib/conditional'
3 | export * from './lib/extends'
4 | export * from './lib/falsy'
5 | export * from './lib/fill'
6 | export * from './lib/first'
7 | export * from './lib/greater-than'
8 | export * from './lib/is'
9 | export * from './lib/larger-than'
10 | export * from './lib/last'
11 | export * from './lib/length-of'
12 | export * from './lib/logic'
13 | export * from './lib/not'
14 | export * from './lib/optional'
15 | export * from './lib/overwrite'
16 | export * from './lib/rest'
17 | export * from './lib/reverse-rest'
18 | export * from './lib/reverse'
19 | export * from './lib/shift'
20 | export * from './lib/slice'
21 | export * from './lib/truncate'
22 | export * from './lib/union'
23 |
--------------------------------------------------------------------------------
/lib/add.d.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Add two numbers (each between -1 and 98)
3 | */
4 | export type Add< A extends number, B extends number > =
5 | A extends keyof AddMap ? B extends keyof AddMap[ A ] ? AddMap[ A ][ B ]
6 | : never
7 | : never;
8 |
9 | type AddMap = {
10 | '-1': { '-1': -2; 0: -1; 1: 0; 2: 1; 3: 2; 4: 3; 5: 4; 6: 5; 7: 6; 8: 7; 9: 8; 10: 9; 11: 10; 12: 11; 13: 12; 14: 13; 15: 14; 16: 15; 17: 16; 18: 17; 19: 18; 20: 19; 21: 20; 22: 21; 23: 22; 24: 23; 25: 24; 26: 25; 27: 26; 28: 27; 29: 28; 30: 29; 31: 30; 32: 31; 33: 32; 34: 33; 35: 34; 36: 35; 37: 36; 38: 37; 39: 38; 40: 39; 41: 40; 42: 41; 43: 42; 44: 43; 45: 44; 46: 45; 47: 46; 48: 47; 49: 48; 50: 49; 51: 50; 52: 51; 53: 52; 54: 53; 55: 54; 56: 55; 57: 56; 58: 57; 59: 58; 60: 59; 61: 60; 62: 61; 63: 62; 64: 63; 65: 64; 66: 65; 67: 66; 68: 67; 69: 68; 70: 69; 71: 70; 72: 71; 73: 72; 74: 73; 75: 74; 76: 75; 77: 76; 78: 77; 79: 78; 80: 79; 81: 80; 82: 81; 83: 82; 84: 83; 85: 84; 86: 85; 87: 86; 88: 87; 89: 88; 90: 89; 91: 90; 92: 91; 93: 92; 94: 93; 95: 94; 96: 95; 97: 96; 98: 97; 99: 98; };
11 | 0: { '-1': -1; 0: 0; 1: 1; 2: 2; 3: 3; 4: 4; 5: 5; 6: 6; 7: 7; 8: 8; 9: 9; 10: 10; 11: 11; 12: 12; 13: 13; 14: 14; 15: 15; 16: 16; 17: 17; 18: 18; 19: 19; 20: 20; 21: 21; 22: 22; 23: 23; 24: 24; 25: 25; 26: 26; 27: 27; 28: 28; 29: 29; 30: 30; 31: 31; 32: 32; 33: 33; 34: 34; 35: 35; 36: 36; 37: 37; 38: 38; 39: 39; 40: 40; 41: 41; 42: 42; 43: 43; 44: 44; 45: 45; 46: 46; 47: 47; 48: 48; 49: 49; 50: 50; 51: 51; 52: 52; 53: 53; 54: 54; 55: 55; 56: 56; 57: 57; 58: 58; 59: 59; 60: 60; 61: 61; 62: 62; 63: 63; 64: 64; 65: 65; 66: 66; 67: 67; 68: 68; 69: 69; 70: 70; 71: 71; 72: 72; 73: 73; 74: 74; 75: 75; 76: 76; 77: 77; 78: 78; 79: 79; 80: 80; 81: 81; 82: 82; 83: 83; 84: 84; 85: 85; 86: 86; 87: 87; 88: 88; 89: 89; 90: 90; 91: 91; 92: 92; 93: 93; 94: 94; 95: 95; 96: 96; 97: 97; 98: 98; 99: 99; };
12 | 1: { '-1': 0; 0: 1; 1: 2; 2: 3; 3: 4; 4: 5; 5: 6; 6: 7; 7: 8; 8: 9; 9: 10; 10: 11; 11: 12; 12: 13; 13: 14; 14: 15; 15: 16; 16: 17; 17: 18; 18: 19; 19: 20; 20: 21; 21: 22; 22: 23; 23: 24; 24: 25; 25: 26; 26: 27; 27: 28; 28: 29; 29: 30; 30: 31; 31: 32; 32: 33; 33: 34; 34: 35; 35: 36; 36: 37; 37: 38; 38: 39; 39: 40; 40: 41; 41: 42; 42: 43; 43: 44; 44: 45; 45: 46; 46: 47; 47: 48; 48: 49; 49: 50; 50: 51; 51: 52; 52: 53; 53: 54; 54: 55; 55: 56; 56: 57; 57: 58; 58: 59; 59: 60; 60: 61; 61: 62; 62: 63; 63: 64; 64: 65; 65: 66; 66: 67; 67: 68; 68: 69; 69: 70; 70: 71; 71: 72; 72: 73; 73: 74; 74: 75; 75: 76; 76: 77; 77: 78; 78: 79; 79: 80; 80: 81; 81: 82; 82: 83; 83: 84; 84: 85; 85: 86; 86: 87; 87: 88; 88: 89; 89: 90; 90: 91; 91: 92; 92: 93; 93: 94; 94: 95; 95: 96; 96: 97; 97: 98; 98: 99; 99: 100; };
13 | 2: { '-1': 1; 0: 2; 1: 3; 2: 4; 3: 5; 4: 6; 5: 7; 6: 8; 7: 9; 8: 10; 9: 11; 10: 12; 11: 13; 12: 14; 13: 15; 14: 16; 15: 17; 16: 18; 17: 19; 18: 20; 19: 21; 20: 22; 21: 23; 22: 24; 23: 25; 24: 26; 25: 27; 26: 28; 27: 29; 28: 30; 29: 31; 30: 32; 31: 33; 32: 34; 33: 35; 34: 36; 35: 37; 36: 38; 37: 39; 38: 40; 39: 41; 40: 42; 41: 43; 42: 44; 43: 45; 44: 46; 45: 47; 46: 48; 47: 49; 48: 50; 49: 51; 50: 52; 51: 53; 52: 54; 53: 55; 54: 56; 55: 57; 56: 58; 57: 59; 58: 60; 59: 61; 60: 62; 61: 63; 62: 64; 63: 65; 64: 66; 65: 67; 66: 68; 67: 69; 68: 70; 69: 71; 70: 72; 71: 73; 72: 74; 73: 75; 74: 76; 75: 77; 76: 78; 77: 79; 78: 80; 79: 81; 80: 82; 81: 83; 82: 84; 83: 85; 84: 86; 85: 87; 86: 88; 87: 89; 88: 90; 89: 91; 90: 92; 91: 93; 92: 94; 93: 95; 94: 96; 95: 97; 96: 98; 97: 99; 98: 100; };
14 | 3: { '-1': 2; 0: 3; 1: 4; 2: 5; 3: 6; 4: 7; 5: 8; 6: 9; 7: 10; 8: 11; 9: 12; 10: 13; 11: 14; 12: 15; 13: 16; 14: 17; 15: 18; 16: 19; 17: 20; 18: 21; 19: 22; 20: 23; 21: 24; 22: 25; 23: 26; 24: 27; 25: 28; 26: 29; 27: 30; 28: 31; 29: 32; 30: 33; 31: 34; 32: 35; 33: 36; 34: 37; 35: 38; 36: 39; 37: 40; 38: 41; 39: 42; 40: 43; 41: 44; 42: 45; 43: 46; 44: 47; 45: 48; 46: 49; 47: 50; 48: 51; 49: 52; 50: 53; 51: 54; 52: 55; 53: 56; 54: 57; 55: 58; 56: 59; 57: 60; 58: 61; 59: 62; 60: 63; 61: 64; 62: 65; 63: 66; 64: 67; 65: 68; 66: 69; 67: 70; 68: 71; 69: 72; 70: 73; 71: 74; 72: 75; 73: 76; 74: 77; 75: 78; 76: 79; 77: 80; 78: 81; 79: 82; 80: 83; 81: 84; 82: 85; 83: 86; 84: 87; 85: 88; 86: 89; 87: 90; 88: 91; 89: 92; 90: 93; 91: 94; 92: 95; 93: 96; 94: 97; 95: 98; 96: 99; 97: 100; };
15 | 4: { '-1': 3; 0: 4; 1: 5; 2: 6; 3: 7; 4: 8; 5: 9; 6: 10; 7: 11; 8: 12; 9: 13; 10: 14; 11: 15; 12: 16; 13: 17; 14: 18; 15: 19; 16: 20; 17: 21; 18: 22; 19: 23; 20: 24; 21: 25; 22: 26; 23: 27; 24: 28; 25: 29; 26: 30; 27: 31; 28: 32; 29: 33; 30: 34; 31: 35; 32: 36; 33: 37; 34: 38; 35: 39; 36: 40; 37: 41; 38: 42; 39: 43; 40: 44; 41: 45; 42: 46; 43: 47; 44: 48; 45: 49; 46: 50; 47: 51; 48: 52; 49: 53; 50: 54; 51: 55; 52: 56; 53: 57; 54: 58; 55: 59; 56: 60; 57: 61; 58: 62; 59: 63; 60: 64; 61: 65; 62: 66; 63: 67; 64: 68; 65: 69; 66: 70; 67: 71; 68: 72; 69: 73; 70: 74; 71: 75; 72: 76; 73: 77; 74: 78; 75: 79; 76: 80; 77: 81; 78: 82; 79: 83; 80: 84; 81: 85; 82: 86; 83: 87; 84: 88; 85: 89; 86: 90; 87: 91; 88: 92; 89: 93; 90: 94; 91: 95; 92: 96; 93: 97; 94: 98; 95: 99; 96: 100; };
16 | 5: { '-1': 4; 0: 5; 1: 6; 2: 7; 3: 8; 4: 9; 5: 10; 6: 11; 7: 12; 8: 13; 9: 14; 10: 15; 11: 16; 12: 17; 13: 18; 14: 19; 15: 20; 16: 21; 17: 22; 18: 23; 19: 24; 20: 25; 21: 26; 22: 27; 23: 28; 24: 29; 25: 30; 26: 31; 27: 32; 28: 33; 29: 34; 30: 35; 31: 36; 32: 37; 33: 38; 34: 39; 35: 40; 36: 41; 37: 42; 38: 43; 39: 44; 40: 45; 41: 46; 42: 47; 43: 48; 44: 49; 45: 50; 46: 51; 47: 52; 48: 53; 49: 54; 50: 55; 51: 56; 52: 57; 53: 58; 54: 59; 55: 60; 56: 61; 57: 62; 58: 63; 59: 64; 60: 65; 61: 66; 62: 67; 63: 68; 64: 69; 65: 70; 66: 71; 67: 72; 68: 73; 69: 74; 70: 75; 71: 76; 72: 77; 73: 78; 74: 79; 75: 80; 76: 81; 77: 82; 78: 83; 79: 84; 80: 85; 81: 86; 82: 87; 83: 88; 84: 89; 85: 90; 86: 91; 87: 92; 88: 93; 89: 94; 90: 95; 91: 96; 92: 97; 93: 98; 94: 99; 95: 100; };
17 | 6: { '-1': 5; 0: 6; 1: 7; 2: 8; 3: 9; 4: 10; 5: 11; 6: 12; 7: 13; 8: 14; 9: 15; 10: 16; 11: 17; 12: 18; 13: 19; 14: 20; 15: 21; 16: 22; 17: 23; 18: 24; 19: 25; 20: 26; 21: 27; 22: 28; 23: 29; 24: 30; 25: 31; 26: 32; 27: 33; 28: 34; 29: 35; 30: 36; 31: 37; 32: 38; 33: 39; 34: 40; 35: 41; 36: 42; 37: 43; 38: 44; 39: 45; 40: 46; 41: 47; 42: 48; 43: 49; 44: 50; 45: 51; 46: 52; 47: 53; 48: 54; 49: 55; 50: 56; 51: 57; 52: 58; 53: 59; 54: 60; 55: 61; 56: 62; 57: 63; 58: 64; 59: 65; 60: 66; 61: 67; 62: 68; 63: 69; 64: 70; 65: 71; 66: 72; 67: 73; 68: 74; 69: 75; 70: 76; 71: 77; 72: 78; 73: 79; 74: 80; 75: 81; 76: 82; 77: 83; 78: 84; 79: 85; 80: 86; 81: 87; 82: 88; 83: 89; 84: 90; 85: 91; 86: 92; 87: 93; 88: 94; 89: 95; 90: 96; 91: 97; 92: 98; 93: 99; 94: 100; };
18 | 7: { '-1': 6; 0: 7; 1: 8; 2: 9; 3: 10; 4: 11; 5: 12; 6: 13; 7: 14; 8: 15; 9: 16; 10: 17; 11: 18; 12: 19; 13: 20; 14: 21; 15: 22; 16: 23; 17: 24; 18: 25; 19: 26; 20: 27; 21: 28; 22: 29; 23: 30; 24: 31; 25: 32; 26: 33; 27: 34; 28: 35; 29: 36; 30: 37; 31: 38; 32: 39; 33: 40; 34: 41; 35: 42; 36: 43; 37: 44; 38: 45; 39: 46; 40: 47; 41: 48; 42: 49; 43: 50; 44: 51; 45: 52; 46: 53; 47: 54; 48: 55; 49: 56; 50: 57; 51: 58; 52: 59; 53: 60; 54: 61; 55: 62; 56: 63; 57: 64; 58: 65; 59: 66; 60: 67; 61: 68; 62: 69; 63: 70; 64: 71; 65: 72; 66: 73; 67: 74; 68: 75; 69: 76; 70: 77; 71: 78; 72: 79; 73: 80; 74: 81; 75: 82; 76: 83; 77: 84; 78: 85; 79: 86; 80: 87; 81: 88; 82: 89; 83: 90; 84: 91; 85: 92; 86: 93; 87: 94; 88: 95; 89: 96; 90: 97; 91: 98; 92: 99; 93: 100; };
19 | 8: { '-1': 7; 0: 8; 1: 9; 2: 10; 3: 11; 4: 12; 5: 13; 6: 14; 7: 15; 8: 16; 9: 17; 10: 18; 11: 19; 12: 20; 13: 21; 14: 22; 15: 23; 16: 24; 17: 25; 18: 26; 19: 27; 20: 28; 21: 29; 22: 30; 23: 31; 24: 32; 25: 33; 26: 34; 27: 35; 28: 36; 29: 37; 30: 38; 31: 39; 32: 40; 33: 41; 34: 42; 35: 43; 36: 44; 37: 45; 38: 46; 39: 47; 40: 48; 41: 49; 42: 50; 43: 51; 44: 52; 45: 53; 46: 54; 47: 55; 48: 56; 49: 57; 50: 58; 51: 59; 52: 60; 53: 61; 54: 62; 55: 63; 56: 64; 57: 65; 58: 66; 59: 67; 60: 68; 61: 69; 62: 70; 63: 71; 64: 72; 65: 73; 66: 74; 67: 75; 68: 76; 69: 77; 70: 78; 71: 79; 72: 80; 73: 81; 74: 82; 75: 83; 76: 84; 77: 85; 78: 86; 79: 87; 80: 88; 81: 89; 82: 90; 83: 91; 84: 92; 85: 93; 86: 94; 87: 95; 88: 96; 89: 97; 90: 98; 91: 99; 92: 100; };
20 | 9: { '-1': 8; 0: 9; 1: 10; 2: 11; 3: 12; 4: 13; 5: 14; 6: 15; 7: 16; 8: 17; 9: 18; 10: 19; 11: 20; 12: 21; 13: 22; 14: 23; 15: 24; 16: 25; 17: 26; 18: 27; 19: 28; 20: 29; 21: 30; 22: 31; 23: 32; 24: 33; 25: 34; 26: 35; 27: 36; 28: 37; 29: 38; 30: 39; 31: 40; 32: 41; 33: 42; 34: 43; 35: 44; 36: 45; 37: 46; 38: 47; 39: 48; 40: 49; 41: 50; 42: 51; 43: 52; 44: 53; 45: 54; 46: 55; 47: 56; 48: 57; 49: 58; 50: 59; 51: 60; 52: 61; 53: 62; 54: 63; 55: 64; 56: 65; 57: 66; 58: 67; 59: 68; 60: 69; 61: 70; 62: 71; 63: 72; 64: 73; 65: 74; 66: 75; 67: 76; 68: 77; 69: 78; 70: 79; 71: 80; 72: 81; 73: 82; 74: 83; 75: 84; 76: 85; 77: 86; 78: 87; 79: 88; 80: 89; 81: 90; 82: 91; 83: 92; 84: 93; 85: 94; 86: 95; 87: 96; 88: 97; 89: 98; 90: 99; 91: 100; };
21 | 10: { '-1': 9; 0: 10; 1: 11; 2: 12; 3: 13; 4: 14; 5: 15; 6: 16; 7: 17; 8: 18; 9: 19; 10: 20; 11: 21; 12: 22; 13: 23; 14: 24; 15: 25; 16: 26; 17: 27; 18: 28; 19: 29; 20: 30; 21: 31; 22: 32; 23: 33; 24: 34; 25: 35; 26: 36; 27: 37; 28: 38; 29: 39; 30: 40; 31: 41; 32: 42; 33: 43; 34: 44; 35: 45; 36: 46; 37: 47; 38: 48; 39: 49; 40: 50; 41: 51; 42: 52; 43: 53; 44: 54; 45: 55; 46: 56; 47: 57; 48: 58; 49: 59; 50: 60; 51: 61; 52: 62; 53: 63; 54: 64; 55: 65; 56: 66; 57: 67; 58: 68; 59: 69; 60: 70; 61: 71; 62: 72; 63: 73; 64: 74; 65: 75; 66: 76; 67: 77; 68: 78; 69: 79; 70: 80; 71: 81; 72: 82; 73: 83; 74: 84; 75: 85; 76: 86; 77: 87; 78: 88; 79: 89; 80: 90; 81: 91; 82: 92; 83: 93; 84: 94; 85: 95; 86: 96; 87: 97; 88: 98; 89: 99; 90: 100; };
22 | 11: { '-1': 10; 0: 11; 1: 12; 2: 13; 3: 14; 4: 15; 5: 16; 6: 17; 7: 18; 8: 19; 9: 20; 10: 21; 11: 22; 12: 23; 13: 24; 14: 25; 15: 26; 16: 27; 17: 28; 18: 29; 19: 30; 20: 31; 21: 32; 22: 33; 23: 34; 24: 35; 25: 36; 26: 37; 27: 38; 28: 39; 29: 40; 30: 41; 31: 42; 32: 43; 33: 44; 34: 45; 35: 46; 36: 47; 37: 48; 38: 49; 39: 50; 40: 51; 41: 52; 42: 53; 43: 54; 44: 55; 45: 56; 46: 57; 47: 58; 48: 59; 49: 60; 50: 61; 51: 62; 52: 63; 53: 64; 54: 65; 55: 66; 56: 67; 57: 68; 58: 69; 59: 70; 60: 71; 61: 72; 62: 73; 63: 74; 64: 75; 65: 76; 66: 77; 67: 78; 68: 79; 69: 80; 70: 81; 71: 82; 72: 83; 73: 84; 74: 85; 75: 86; 76: 87; 77: 88; 78: 89; 79: 90; 80: 91; 81: 92; 82: 93; 83: 94; 84: 95; 85: 96; 86: 97; 87: 98; 88: 99; 89: 100; };
23 | 12: { '-1': 11; 0: 12; 1: 13; 2: 14; 3: 15; 4: 16; 5: 17; 6: 18; 7: 19; 8: 20; 9: 21; 10: 22; 11: 23; 12: 24; 13: 25; 14: 26; 15: 27; 16: 28; 17: 29; 18: 30; 19: 31; 20: 32; 21: 33; 22: 34; 23: 35; 24: 36; 25: 37; 26: 38; 27: 39; 28: 40; 29: 41; 30: 42; 31: 43; 32: 44; 33: 45; 34: 46; 35: 47; 36: 48; 37: 49; 38: 50; 39: 51; 40: 52; 41: 53; 42: 54; 43: 55; 44: 56; 45: 57; 46: 58; 47: 59; 48: 60; 49: 61; 50: 62; 51: 63; 52: 64; 53: 65; 54: 66; 55: 67; 56: 68; 57: 69; 58: 70; 59: 71; 60: 72; 61: 73; 62: 74; 63: 75; 64: 76; 65: 77; 66: 78; 67: 79; 68: 80; 69: 81; 70: 82; 71: 83; 72: 84; 73: 85; 74: 86; 75: 87; 76: 88; 77: 89; 78: 90; 79: 91; 80: 92; 81: 93; 82: 94; 83: 95; 84: 96; 85: 97; 86: 98; 87: 99; 88: 100; };
24 | 13: { '-1': 12; 0: 13; 1: 14; 2: 15; 3: 16; 4: 17; 5: 18; 6: 19; 7: 20; 8: 21; 9: 22; 10: 23; 11: 24; 12: 25; 13: 26; 14: 27; 15: 28; 16: 29; 17: 30; 18: 31; 19: 32; 20: 33; 21: 34; 22: 35; 23: 36; 24: 37; 25: 38; 26: 39; 27: 40; 28: 41; 29: 42; 30: 43; 31: 44; 32: 45; 33: 46; 34: 47; 35: 48; 36: 49; 37: 50; 38: 51; 39: 52; 40: 53; 41: 54; 42: 55; 43: 56; 44: 57; 45: 58; 46: 59; 47: 60; 48: 61; 49: 62; 50: 63; 51: 64; 52: 65; 53: 66; 54: 67; 55: 68; 56: 69; 57: 70; 58: 71; 59: 72; 60: 73; 61: 74; 62: 75; 63: 76; 64: 77; 65: 78; 66: 79; 67: 80; 68: 81; 69: 82; 70: 83; 71: 84; 72: 85; 73: 86; 74: 87; 75: 88; 76: 89; 77: 90; 78: 91; 79: 92; 80: 93; 81: 94; 82: 95; 83: 96; 84: 97; 85: 98; 86: 99; 87: 100; };
25 | 14: { '-1': 13; 0: 14; 1: 15; 2: 16; 3: 17; 4: 18; 5: 19; 6: 20; 7: 21; 8: 22; 9: 23; 10: 24; 11: 25; 12: 26; 13: 27; 14: 28; 15: 29; 16: 30; 17: 31; 18: 32; 19: 33; 20: 34; 21: 35; 22: 36; 23: 37; 24: 38; 25: 39; 26: 40; 27: 41; 28: 42; 29: 43; 30: 44; 31: 45; 32: 46; 33: 47; 34: 48; 35: 49; 36: 50; 37: 51; 38: 52; 39: 53; 40: 54; 41: 55; 42: 56; 43: 57; 44: 58; 45: 59; 46: 60; 47: 61; 48: 62; 49: 63; 50: 64; 51: 65; 52: 66; 53: 67; 54: 68; 55: 69; 56: 70; 57: 71; 58: 72; 59: 73; 60: 74; 61: 75; 62: 76; 63: 77; 64: 78; 65: 79; 66: 80; 67: 81; 68: 82; 69: 83; 70: 84; 71: 85; 72: 86; 73: 87; 74: 88; 75: 89; 76: 90; 77: 91; 78: 92; 79: 93; 80: 94; 81: 95; 82: 96; 83: 97; 84: 98; 85: 99; 86: 100; };
26 | 15: { '-1': 14; 0: 15; 1: 16; 2: 17; 3: 18; 4: 19; 5: 20; 6: 21; 7: 22; 8: 23; 9: 24; 10: 25; 11: 26; 12: 27; 13: 28; 14: 29; 15: 30; 16: 31; 17: 32; 18: 33; 19: 34; 20: 35; 21: 36; 22: 37; 23: 38; 24: 39; 25: 40; 26: 41; 27: 42; 28: 43; 29: 44; 30: 45; 31: 46; 32: 47; 33: 48; 34: 49; 35: 50; 36: 51; 37: 52; 38: 53; 39: 54; 40: 55; 41: 56; 42: 57; 43: 58; 44: 59; 45: 60; 46: 61; 47: 62; 48: 63; 49: 64; 50: 65; 51: 66; 52: 67; 53: 68; 54: 69; 55: 70; 56: 71; 57: 72; 58: 73; 59: 74; 60: 75; 61: 76; 62: 77; 63: 78; 64: 79; 65: 80; 66: 81; 67: 82; 68: 83; 69: 84; 70: 85; 71: 86; 72: 87; 73: 88; 74: 89; 75: 90; 76: 91; 77: 92; 78: 93; 79: 94; 80: 95; 81: 96; 82: 97; 83: 98; 84: 99; 85: 100; };
27 | 16: { '-1': 15; 0: 16; 1: 17; 2: 18; 3: 19; 4: 20; 5: 21; 6: 22; 7: 23; 8: 24; 9: 25; 10: 26; 11: 27; 12: 28; 13: 29; 14: 30; 15: 31; 16: 32; 17: 33; 18: 34; 19: 35; 20: 36; 21: 37; 22: 38; 23: 39; 24: 40; 25: 41; 26: 42; 27: 43; 28: 44; 29: 45; 30: 46; 31: 47; 32: 48; 33: 49; 34: 50; 35: 51; 36: 52; 37: 53; 38: 54; 39: 55; 40: 56; 41: 57; 42: 58; 43: 59; 44: 60; 45: 61; 46: 62; 47: 63; 48: 64; 49: 65; 50: 66; 51: 67; 52: 68; 53: 69; 54: 70; 55: 71; 56: 72; 57: 73; 58: 74; 59: 75; 60: 76; 61: 77; 62: 78; 63: 79; 64: 80; 65: 81; 66: 82; 67: 83; 68: 84; 69: 85; 70: 86; 71: 87; 72: 88; 73: 89; 74: 90; 75: 91; 76: 92; 77: 93; 78: 94; 79: 95; 80: 96; 81: 97; 82: 98; 83: 99; 84: 100; };
28 | 17: { '-1': 16; 0: 17; 1: 18; 2: 19; 3: 20; 4: 21; 5: 22; 6: 23; 7: 24; 8: 25; 9: 26; 10: 27; 11: 28; 12: 29; 13: 30; 14: 31; 15: 32; 16: 33; 17: 34; 18: 35; 19: 36; 20: 37; 21: 38; 22: 39; 23: 40; 24: 41; 25: 42; 26: 43; 27: 44; 28: 45; 29: 46; 30: 47; 31: 48; 32: 49; 33: 50; 34: 51; 35: 52; 36: 53; 37: 54; 38: 55; 39: 56; 40: 57; 41: 58; 42: 59; 43: 60; 44: 61; 45: 62; 46: 63; 47: 64; 48: 65; 49: 66; 50: 67; 51: 68; 52: 69; 53: 70; 54: 71; 55: 72; 56: 73; 57: 74; 58: 75; 59: 76; 60: 77; 61: 78; 62: 79; 63: 80; 64: 81; 65: 82; 66: 83; 67: 84; 68: 85; 69: 86; 70: 87; 71: 88; 72: 89; 73: 90; 74: 91; 75: 92; 76: 93; 77: 94; 78: 95; 79: 96; 80: 97; 81: 98; 82: 99; 83: 100; };
29 | 18: { '-1': 17; 0: 18; 1: 19; 2: 20; 3: 21; 4: 22; 5: 23; 6: 24; 7: 25; 8: 26; 9: 27; 10: 28; 11: 29; 12: 30; 13: 31; 14: 32; 15: 33; 16: 34; 17: 35; 18: 36; 19: 37; 20: 38; 21: 39; 22: 40; 23: 41; 24: 42; 25: 43; 26: 44; 27: 45; 28: 46; 29: 47; 30: 48; 31: 49; 32: 50; 33: 51; 34: 52; 35: 53; 36: 54; 37: 55; 38: 56; 39: 57; 40: 58; 41: 59; 42: 60; 43: 61; 44: 62; 45: 63; 46: 64; 47: 65; 48: 66; 49: 67; 50: 68; 51: 69; 52: 70; 53: 71; 54: 72; 55: 73; 56: 74; 57: 75; 58: 76; 59: 77; 60: 78; 61: 79; 62: 80; 63: 81; 64: 82; 65: 83; 66: 84; 67: 85; 68: 86; 69: 87; 70: 88; 71: 89; 72: 90; 73: 91; 74: 92; 75: 93; 76: 94; 77: 95; 78: 96; 79: 97; 80: 98; 81: 99; 82: 100; };
30 | 19: { '-1': 18; 0: 19; 1: 20; 2: 21; 3: 22; 4: 23; 5: 24; 6: 25; 7: 26; 8: 27; 9: 28; 10: 29; 11: 30; 12: 31; 13: 32; 14: 33; 15: 34; 16: 35; 17: 36; 18: 37; 19: 38; 20: 39; 21: 40; 22: 41; 23: 42; 24: 43; 25: 44; 26: 45; 27: 46; 28: 47; 29: 48; 30: 49; 31: 50; 32: 51; 33: 52; 34: 53; 35: 54; 36: 55; 37: 56; 38: 57; 39: 58; 40: 59; 41: 60; 42: 61; 43: 62; 44: 63; 45: 64; 46: 65; 47: 66; 48: 67; 49: 68; 50: 69; 51: 70; 52: 71; 53: 72; 54: 73; 55: 74; 56: 75; 57: 76; 58: 77; 59: 78; 60: 79; 61: 80; 62: 81; 63: 82; 64: 83; 65: 84; 66: 85; 67: 86; 68: 87; 69: 88; 70: 89; 71: 90; 72: 91; 73: 92; 74: 93; 75: 94; 76: 95; 77: 96; 78: 97; 79: 98; 80: 99; 81: 100; };
31 | 20: { '-1': 19; 0: 20; 1: 21; 2: 22; 3: 23; 4: 24; 5: 25; 6: 26; 7: 27; 8: 28; 9: 29; 10: 30; 11: 31; 12: 32; 13: 33; 14: 34; 15: 35; 16: 36; 17: 37; 18: 38; 19: 39; 20: 40; 21: 41; 22: 42; 23: 43; 24: 44; 25: 45; 26: 46; 27: 47; 28: 48; 29: 49; 30: 50; 31: 51; 32: 52; 33: 53; 34: 54; 35: 55; 36: 56; 37: 57; 38: 58; 39: 59; 40: 60; 41: 61; 42: 62; 43: 63; 44: 64; 45: 65; 46: 66; 47: 67; 48: 68; 49: 69; 50: 70; 51: 71; 52: 72; 53: 73; 54: 74; 55: 75; 56: 76; 57: 77; 58: 78; 59: 79; 60: 80; 61: 81; 62: 82; 63: 83; 64: 84; 65: 85; 66: 86; 67: 87; 68: 88; 69: 89; 70: 90; 71: 91; 72: 92; 73: 93; 74: 94; 75: 95; 76: 96; 77: 97; 78: 98; 79: 99; 80: 100; };
32 | 21: { '-1': 20; 0: 21; 1: 22; 2: 23; 3: 24; 4: 25; 5: 26; 6: 27; 7: 28; 8: 29; 9: 30; 10: 31; 11: 32; 12: 33; 13: 34; 14: 35; 15: 36; 16: 37; 17: 38; 18: 39; 19: 40; 20: 41; 21: 42; 22: 43; 23: 44; 24: 45; 25: 46; 26: 47; 27: 48; 28: 49; 29: 50; 30: 51; 31: 52; 32: 53; 33: 54; 34: 55; 35: 56; 36: 57; 37: 58; 38: 59; 39: 60; 40: 61; 41: 62; 42: 63; 43: 64; 44: 65; 45: 66; 46: 67; 47: 68; 48: 69; 49: 70; 50: 71; 51: 72; 52: 73; 53: 74; 54: 75; 55: 76; 56: 77; 57: 78; 58: 79; 59: 80; 60: 81; 61: 82; 62: 83; 63: 84; 64: 85; 65: 86; 66: 87; 67: 88; 68: 89; 69: 90; 70: 91; 71: 92; 72: 93; 73: 94; 74: 95; 75: 96; 76: 97; 77: 98; 78: 99; 79: 100; };
33 | 22: { '-1': 21; 0: 22; 1: 23; 2: 24; 3: 25; 4: 26; 5: 27; 6: 28; 7: 29; 8: 30; 9: 31; 10: 32; 11: 33; 12: 34; 13: 35; 14: 36; 15: 37; 16: 38; 17: 39; 18: 40; 19: 41; 20: 42; 21: 43; 22: 44; 23: 45; 24: 46; 25: 47; 26: 48; 27: 49; 28: 50; 29: 51; 30: 52; 31: 53; 32: 54; 33: 55; 34: 56; 35: 57; 36: 58; 37: 59; 38: 60; 39: 61; 40: 62; 41: 63; 42: 64; 43: 65; 44: 66; 45: 67; 46: 68; 47: 69; 48: 70; 49: 71; 50: 72; 51: 73; 52: 74; 53: 75; 54: 76; 55: 77; 56: 78; 57: 79; 58: 80; 59: 81; 60: 82; 61: 83; 62: 84; 63: 85; 64: 86; 65: 87; 66: 88; 67: 89; 68: 90; 69: 91; 70: 92; 71: 93; 72: 94; 73: 95; 74: 96; 75: 97; 76: 98; 77: 99; 78: 100; };
34 | 23: { '-1': 22; 0: 23; 1: 24; 2: 25; 3: 26; 4: 27; 5: 28; 6: 29; 7: 30; 8: 31; 9: 32; 10: 33; 11: 34; 12: 35; 13: 36; 14: 37; 15: 38; 16: 39; 17: 40; 18: 41; 19: 42; 20: 43; 21: 44; 22: 45; 23: 46; 24: 47; 25: 48; 26: 49; 27: 50; 28: 51; 29: 52; 30: 53; 31: 54; 32: 55; 33: 56; 34: 57; 35: 58; 36: 59; 37: 60; 38: 61; 39: 62; 40: 63; 41: 64; 42: 65; 43: 66; 44: 67; 45: 68; 46: 69; 47: 70; 48: 71; 49: 72; 50: 73; 51: 74; 52: 75; 53: 76; 54: 77; 55: 78; 56: 79; 57: 80; 58: 81; 59: 82; 60: 83; 61: 84; 62: 85; 63: 86; 64: 87; 65: 88; 66: 89; 67: 90; 68: 91; 69: 92; 70: 93; 71: 94; 72: 95; 73: 96; 74: 97; 75: 98; 76: 99; 77: 100; };
35 | 24: { '-1': 23; 0: 24; 1: 25; 2: 26; 3: 27; 4: 28; 5: 29; 6: 30; 7: 31; 8: 32; 9: 33; 10: 34; 11: 35; 12: 36; 13: 37; 14: 38; 15: 39; 16: 40; 17: 41; 18: 42; 19: 43; 20: 44; 21: 45; 22: 46; 23: 47; 24: 48; 25: 49; 26: 50; 27: 51; 28: 52; 29: 53; 30: 54; 31: 55; 32: 56; 33: 57; 34: 58; 35: 59; 36: 60; 37: 61; 38: 62; 39: 63; 40: 64; 41: 65; 42: 66; 43: 67; 44: 68; 45: 69; 46: 70; 47: 71; 48: 72; 49: 73; 50: 74; 51: 75; 52: 76; 53: 77; 54: 78; 55: 79; 56: 80; 57: 81; 58: 82; 59: 83; 60: 84; 61: 85; 62: 86; 63: 87; 64: 88; 65: 89; 66: 90; 67: 91; 68: 92; 69: 93; 70: 94; 71: 95; 72: 96; 73: 97; 74: 98; 75: 99; 76: 100; };
36 | 25: { '-1': 24; 0: 25; 1: 26; 2: 27; 3: 28; 4: 29; 5: 30; 6: 31; 7: 32; 8: 33; 9: 34; 10: 35; 11: 36; 12: 37; 13: 38; 14: 39; 15: 40; 16: 41; 17: 42; 18: 43; 19: 44; 20: 45; 21: 46; 22: 47; 23: 48; 24: 49; 25: 50; 26: 51; 27: 52; 28: 53; 29: 54; 30: 55; 31: 56; 32: 57; 33: 58; 34: 59; 35: 60; 36: 61; 37: 62; 38: 63; 39: 64; 40: 65; 41: 66; 42: 67; 43: 68; 44: 69; 45: 70; 46: 71; 47: 72; 48: 73; 49: 74; 50: 75; 51: 76; 52: 77; 53: 78; 54: 79; 55: 80; 56: 81; 57: 82; 58: 83; 59: 84; 60: 85; 61: 86; 62: 87; 63: 88; 64: 89; 65: 90; 66: 91; 67: 92; 68: 93; 69: 94; 70: 95; 71: 96; 72: 97; 73: 98; 74: 99; 75: 100; };
37 | 26: { '-1': 25; 0: 26; 1: 27; 2: 28; 3: 29; 4: 30; 5: 31; 6: 32; 7: 33; 8: 34; 9: 35; 10: 36; 11: 37; 12: 38; 13: 39; 14: 40; 15: 41; 16: 42; 17: 43; 18: 44; 19: 45; 20: 46; 21: 47; 22: 48; 23: 49; 24: 50; 25: 51; 26: 52; 27: 53; 28: 54; 29: 55; 30: 56; 31: 57; 32: 58; 33: 59; 34: 60; 35: 61; 36: 62; 37: 63; 38: 64; 39: 65; 40: 66; 41: 67; 42: 68; 43: 69; 44: 70; 45: 71; 46: 72; 47: 73; 48: 74; 49: 75; 50: 76; 51: 77; 52: 78; 53: 79; 54: 80; 55: 81; 56: 82; 57: 83; 58: 84; 59: 85; 60: 86; 61: 87; 62: 88; 63: 89; 64: 90; 65: 91; 66: 92; 67: 93; 68: 94; 69: 95; 70: 96; 71: 97; 72: 98; 73: 99; 74: 100; };
38 | 27: { '-1': 26; 0: 27; 1: 28; 2: 29; 3: 30; 4: 31; 5: 32; 6: 33; 7: 34; 8: 35; 9: 36; 10: 37; 11: 38; 12: 39; 13: 40; 14: 41; 15: 42; 16: 43; 17: 44; 18: 45; 19: 46; 20: 47; 21: 48; 22: 49; 23: 50; 24: 51; 25: 52; 26: 53; 27: 54; 28: 55; 29: 56; 30: 57; 31: 58; 32: 59; 33: 60; 34: 61; 35: 62; 36: 63; 37: 64; 38: 65; 39: 66; 40: 67; 41: 68; 42: 69; 43: 70; 44: 71; 45: 72; 46: 73; 47: 74; 48: 75; 49: 76; 50: 77; 51: 78; 52: 79; 53: 80; 54: 81; 55: 82; 56: 83; 57: 84; 58: 85; 59: 86; 60: 87; 61: 88; 62: 89; 63: 90; 64: 91; 65: 92; 66: 93; 67: 94; 68: 95; 69: 96; 70: 97; 71: 98; 72: 99; 73: 100; };
39 | 28: { '-1': 27; 0: 28; 1: 29; 2: 30; 3: 31; 4: 32; 5: 33; 6: 34; 7: 35; 8: 36; 9: 37; 10: 38; 11: 39; 12: 40; 13: 41; 14: 42; 15: 43; 16: 44; 17: 45; 18: 46; 19: 47; 20: 48; 21: 49; 22: 50; 23: 51; 24: 52; 25: 53; 26: 54; 27: 55; 28: 56; 29: 57; 30: 58; 31: 59; 32: 60; 33: 61; 34: 62; 35: 63; 36: 64; 37: 65; 38: 66; 39: 67; 40: 68; 41: 69; 42: 70; 43: 71; 44: 72; 45: 73; 46: 74; 47: 75; 48: 76; 49: 77; 50: 78; 51: 79; 52: 80; 53: 81; 54: 82; 55: 83; 56: 84; 57: 85; 58: 86; 59: 87; 60: 88; 61: 89; 62: 90; 63: 91; 64: 92; 65: 93; 66: 94; 67: 95; 68: 96; 69: 97; 70: 98; 71: 99; 72: 100; };
40 | 29: { '-1': 28; 0: 29; 1: 30; 2: 31; 3: 32; 4: 33; 5: 34; 6: 35; 7: 36; 8: 37; 9: 38; 10: 39; 11: 40; 12: 41; 13: 42; 14: 43; 15: 44; 16: 45; 17: 46; 18: 47; 19: 48; 20: 49; 21: 50; 22: 51; 23: 52; 24: 53; 25: 54; 26: 55; 27: 56; 28: 57; 29: 58; 30: 59; 31: 60; 32: 61; 33: 62; 34: 63; 35: 64; 36: 65; 37: 66; 38: 67; 39: 68; 40: 69; 41: 70; 42: 71; 43: 72; 44: 73; 45: 74; 46: 75; 47: 76; 48: 77; 49: 78; 50: 79; 51: 80; 52: 81; 53: 82; 54: 83; 55: 84; 56: 85; 57: 86; 58: 87; 59: 88; 60: 89; 61: 90; 62: 91; 63: 92; 64: 93; 65: 94; 66: 95; 67: 96; 68: 97; 69: 98; 70: 99; 71: 100; };
41 | 30: { '-1': 29; 0: 30; 1: 31; 2: 32; 3: 33; 4: 34; 5: 35; 6: 36; 7: 37; 8: 38; 9: 39; 10: 40; 11: 41; 12: 42; 13: 43; 14: 44; 15: 45; 16: 46; 17: 47; 18: 48; 19: 49; 20: 50; 21: 51; 22: 52; 23: 53; 24: 54; 25: 55; 26: 56; 27: 57; 28: 58; 29: 59; 30: 60; 31: 61; 32: 62; 33: 63; 34: 64; 35: 65; 36: 66; 37: 67; 38: 68; 39: 69; 40: 70; 41: 71; 42: 72; 43: 73; 44: 74; 45: 75; 46: 76; 47: 77; 48: 78; 49: 79; 50: 80; 51: 81; 52: 82; 53: 83; 54: 84; 55: 85; 56: 86; 57: 87; 58: 88; 59: 89; 60: 90; 61: 91; 62: 92; 63: 93; 64: 94; 65: 95; 66: 96; 67: 97; 68: 98; 69: 99; 70: 100; };
42 | 31: { '-1': 30; 0: 31; 1: 32; 2: 33; 3: 34; 4: 35; 5: 36; 6: 37; 7: 38; 8: 39; 9: 40; 10: 41; 11: 42; 12: 43; 13: 44; 14: 45; 15: 46; 16: 47; 17: 48; 18: 49; 19: 50; 20: 51; 21: 52; 22: 53; 23: 54; 24: 55; 25: 56; 26: 57; 27: 58; 28: 59; 29: 60; 30: 61; 31: 62; 32: 63; 33: 64; 34: 65; 35: 66; 36: 67; 37: 68; 38: 69; 39: 70; 40: 71; 41: 72; 42: 73; 43: 74; 44: 75; 45: 76; 46: 77; 47: 78; 48: 79; 49: 80; 50: 81; 51: 82; 52: 83; 53: 84; 54: 85; 55: 86; 56: 87; 57: 88; 58: 89; 59: 90; 60: 91; 61: 92; 62: 93; 63: 94; 64: 95; 65: 96; 66: 97; 67: 98; 68: 99; 69: 100; };
43 | 32: { '-1': 31; 0: 32; 1: 33; 2: 34; 3: 35; 4: 36; 5: 37; 6: 38; 7: 39; 8: 40; 9: 41; 10: 42; 11: 43; 12: 44; 13: 45; 14: 46; 15: 47; 16: 48; 17: 49; 18: 50; 19: 51; 20: 52; 21: 53; 22: 54; 23: 55; 24: 56; 25: 57; 26: 58; 27: 59; 28: 60; 29: 61; 30: 62; 31: 63; 32: 64; 33: 65; 34: 66; 35: 67; 36: 68; 37: 69; 38: 70; 39: 71; 40: 72; 41: 73; 42: 74; 43: 75; 44: 76; 45: 77; 46: 78; 47: 79; 48: 80; 49: 81; 50: 82; 51: 83; 52: 84; 53: 85; 54: 86; 55: 87; 56: 88; 57: 89; 58: 90; 59: 91; 60: 92; 61: 93; 62: 94; 63: 95; 64: 96; 65: 97; 66: 98; 67: 99; 68: 100; };
44 | 33: { '-1': 32; 0: 33; 1: 34; 2: 35; 3: 36; 4: 37; 5: 38; 6: 39; 7: 40; 8: 41; 9: 42; 10: 43; 11: 44; 12: 45; 13: 46; 14: 47; 15: 48; 16: 49; 17: 50; 18: 51; 19: 52; 20: 53; 21: 54; 22: 55; 23: 56; 24: 57; 25: 58; 26: 59; 27: 60; 28: 61; 29: 62; 30: 63; 31: 64; 32: 65; 33: 66; 34: 67; 35: 68; 36: 69; 37: 70; 38: 71; 39: 72; 40: 73; 41: 74; 42: 75; 43: 76; 44: 77; 45: 78; 46: 79; 47: 80; 48: 81; 49: 82; 50: 83; 51: 84; 52: 85; 53: 86; 54: 87; 55: 88; 56: 89; 57: 90; 58: 91; 59: 92; 60: 93; 61: 94; 62: 95; 63: 96; 64: 97; 65: 98; 66: 99; 67: 100; };
45 | 34: { '-1': 33; 0: 34; 1: 35; 2: 36; 3: 37; 4: 38; 5: 39; 6: 40; 7: 41; 8: 42; 9: 43; 10: 44; 11: 45; 12: 46; 13: 47; 14: 48; 15: 49; 16: 50; 17: 51; 18: 52; 19: 53; 20: 54; 21: 55; 22: 56; 23: 57; 24: 58; 25: 59; 26: 60; 27: 61; 28: 62; 29: 63; 30: 64; 31: 65; 32: 66; 33: 67; 34: 68; 35: 69; 36: 70; 37: 71; 38: 72; 39: 73; 40: 74; 41: 75; 42: 76; 43: 77; 44: 78; 45: 79; 46: 80; 47: 81; 48: 82; 49: 83; 50: 84; 51: 85; 52: 86; 53: 87; 54: 88; 55: 89; 56: 90; 57: 91; 58: 92; 59: 93; 60: 94; 61: 95; 62: 96; 63: 97; 64: 98; 65: 99; 66: 100; };
46 | 35: { '-1': 34; 0: 35; 1: 36; 2: 37; 3: 38; 4: 39; 5: 40; 6: 41; 7: 42; 8: 43; 9: 44; 10: 45; 11: 46; 12: 47; 13: 48; 14: 49; 15: 50; 16: 51; 17: 52; 18: 53; 19: 54; 20: 55; 21: 56; 22: 57; 23: 58; 24: 59; 25: 60; 26: 61; 27: 62; 28: 63; 29: 64; 30: 65; 31: 66; 32: 67; 33: 68; 34: 69; 35: 70; 36: 71; 37: 72; 38: 73; 39: 74; 40: 75; 41: 76; 42: 77; 43: 78; 44: 79; 45: 80; 46: 81; 47: 82; 48: 83; 49: 84; 50: 85; 51: 86; 52: 87; 53: 88; 54: 89; 55: 90; 56: 91; 57: 92; 58: 93; 59: 94; 60: 95; 61: 96; 62: 97; 63: 98; 64: 99; 65: 100; };
47 | 36: { '-1': 35; 0: 36; 1: 37; 2: 38; 3: 39; 4: 40; 5: 41; 6: 42; 7: 43; 8: 44; 9: 45; 10: 46; 11: 47; 12: 48; 13: 49; 14: 50; 15: 51; 16: 52; 17: 53; 18: 54; 19: 55; 20: 56; 21: 57; 22: 58; 23: 59; 24: 60; 25: 61; 26: 62; 27: 63; 28: 64; 29: 65; 30: 66; 31: 67; 32: 68; 33: 69; 34: 70; 35: 71; 36: 72; 37: 73; 38: 74; 39: 75; 40: 76; 41: 77; 42: 78; 43: 79; 44: 80; 45: 81; 46: 82; 47: 83; 48: 84; 49: 85; 50: 86; 51: 87; 52: 88; 53: 89; 54: 90; 55: 91; 56: 92; 57: 93; 58: 94; 59: 95; 60: 96; 61: 97; 62: 98; 63: 99; 64: 100; };
48 | 37: { '-1': 36; 0: 37; 1: 38; 2: 39; 3: 40; 4: 41; 5: 42; 6: 43; 7: 44; 8: 45; 9: 46; 10: 47; 11: 48; 12: 49; 13: 50; 14: 51; 15: 52; 16: 53; 17: 54; 18: 55; 19: 56; 20: 57; 21: 58; 22: 59; 23: 60; 24: 61; 25: 62; 26: 63; 27: 64; 28: 65; 29: 66; 30: 67; 31: 68; 32: 69; 33: 70; 34: 71; 35: 72; 36: 73; 37: 74; 38: 75; 39: 76; 40: 77; 41: 78; 42: 79; 43: 80; 44: 81; 45: 82; 46: 83; 47: 84; 48: 85; 49: 86; 50: 87; 51: 88; 52: 89; 53: 90; 54: 91; 55: 92; 56: 93; 57: 94; 58: 95; 59: 96; 60: 97; 61: 98; 62: 99; 63: 100; };
49 | 38: { '-1': 37; 0: 38; 1: 39; 2: 40; 3: 41; 4: 42; 5: 43; 6: 44; 7: 45; 8: 46; 9: 47; 10: 48; 11: 49; 12: 50; 13: 51; 14: 52; 15: 53; 16: 54; 17: 55; 18: 56; 19: 57; 20: 58; 21: 59; 22: 60; 23: 61; 24: 62; 25: 63; 26: 64; 27: 65; 28: 66; 29: 67; 30: 68; 31: 69; 32: 70; 33: 71; 34: 72; 35: 73; 36: 74; 37: 75; 38: 76; 39: 77; 40: 78; 41: 79; 42: 80; 43: 81; 44: 82; 45: 83; 46: 84; 47: 85; 48: 86; 49: 87; 50: 88; 51: 89; 52: 90; 53: 91; 54: 92; 55: 93; 56: 94; 57: 95; 58: 96; 59: 97; 60: 98; 61: 99; 62: 100; };
50 | 39: { '-1': 38; 0: 39; 1: 40; 2: 41; 3: 42; 4: 43; 5: 44; 6: 45; 7: 46; 8: 47; 9: 48; 10: 49; 11: 50; 12: 51; 13: 52; 14: 53; 15: 54; 16: 55; 17: 56; 18: 57; 19: 58; 20: 59; 21: 60; 22: 61; 23: 62; 24: 63; 25: 64; 26: 65; 27: 66; 28: 67; 29: 68; 30: 69; 31: 70; 32: 71; 33: 72; 34: 73; 35: 74; 36: 75; 37: 76; 38: 77; 39: 78; 40: 79; 41: 80; 42: 81; 43: 82; 44: 83; 45: 84; 46: 85; 47: 86; 48: 87; 49: 88; 50: 89; 51: 90; 52: 91; 53: 92; 54: 93; 55: 94; 56: 95; 57: 96; 58: 97; 59: 98; 60: 99; 61: 100; };
51 | 40: { '-1': 39; 0: 40; 1: 41; 2: 42; 3: 43; 4: 44; 5: 45; 6: 46; 7: 47; 8: 48; 9: 49; 10: 50; 11: 51; 12: 52; 13: 53; 14: 54; 15: 55; 16: 56; 17: 57; 18: 58; 19: 59; 20: 60; 21: 61; 22: 62; 23: 63; 24: 64; 25: 65; 26: 66; 27: 67; 28: 68; 29: 69; 30: 70; 31: 71; 32: 72; 33: 73; 34: 74; 35: 75; 36: 76; 37: 77; 38: 78; 39: 79; 40: 80; 41: 81; 42: 82; 43: 83; 44: 84; 45: 85; 46: 86; 47: 87; 48: 88; 49: 89; 50: 90; 51: 91; 52: 92; 53: 93; 54: 94; 55: 95; 56: 96; 57: 97; 58: 98; 59: 99; 60: 100; };
52 | 41: { '-1': 40; 0: 41; 1: 42; 2: 43; 3: 44; 4: 45; 5: 46; 6: 47; 7: 48; 8: 49; 9: 50; 10: 51; 11: 52; 12: 53; 13: 54; 14: 55; 15: 56; 16: 57; 17: 58; 18: 59; 19: 60; 20: 61; 21: 62; 22: 63; 23: 64; 24: 65; 25: 66; 26: 67; 27: 68; 28: 69; 29: 70; 30: 71; 31: 72; 32: 73; 33: 74; 34: 75; 35: 76; 36: 77; 37: 78; 38: 79; 39: 80; 40: 81; 41: 82; 42: 83; 43: 84; 44: 85; 45: 86; 46: 87; 47: 88; 48: 89; 49: 90; 50: 91; 51: 92; 52: 93; 53: 94; 54: 95; 55: 96; 56: 97; 57: 98; 58: 99; 59: 100; };
53 | 42: { '-1': 41; 0: 42; 1: 43; 2: 44; 3: 45; 4: 46; 5: 47; 6: 48; 7: 49; 8: 50; 9: 51; 10: 52; 11: 53; 12: 54; 13: 55; 14: 56; 15: 57; 16: 58; 17: 59; 18: 60; 19: 61; 20: 62; 21: 63; 22: 64; 23: 65; 24: 66; 25: 67; 26: 68; 27: 69; 28: 70; 29: 71; 30: 72; 31: 73; 32: 74; 33: 75; 34: 76; 35: 77; 36: 78; 37: 79; 38: 80; 39: 81; 40: 82; 41: 83; 42: 84; 43: 85; 44: 86; 45: 87; 46: 88; 47: 89; 48: 90; 49: 91; 50: 92; 51: 93; 52: 94; 53: 95; 54: 96; 55: 97; 56: 98; 57: 99; 58: 100; };
54 | 43: { '-1': 42; 0: 43; 1: 44; 2: 45; 3: 46; 4: 47; 5: 48; 6: 49; 7: 50; 8: 51; 9: 52; 10: 53; 11: 54; 12: 55; 13: 56; 14: 57; 15: 58; 16: 59; 17: 60; 18: 61; 19: 62; 20: 63; 21: 64; 22: 65; 23: 66; 24: 67; 25: 68; 26: 69; 27: 70; 28: 71; 29: 72; 30: 73; 31: 74; 32: 75; 33: 76; 34: 77; 35: 78; 36: 79; 37: 80; 38: 81; 39: 82; 40: 83; 41: 84; 42: 85; 43: 86; 44: 87; 45: 88; 46: 89; 47: 90; 48: 91; 49: 92; 50: 93; 51: 94; 52: 95; 53: 96; 54: 97; 55: 98; 56: 99; 57: 100; };
55 | 44: { '-1': 43; 0: 44; 1: 45; 2: 46; 3: 47; 4: 48; 5: 49; 6: 50; 7: 51; 8: 52; 9: 53; 10: 54; 11: 55; 12: 56; 13: 57; 14: 58; 15: 59; 16: 60; 17: 61; 18: 62; 19: 63; 20: 64; 21: 65; 22: 66; 23: 67; 24: 68; 25: 69; 26: 70; 27: 71; 28: 72; 29: 73; 30: 74; 31: 75; 32: 76; 33: 77; 34: 78; 35: 79; 36: 80; 37: 81; 38: 82; 39: 83; 40: 84; 41: 85; 42: 86; 43: 87; 44: 88; 45: 89; 46: 90; 47: 91; 48: 92; 49: 93; 50: 94; 51: 95; 52: 96; 53: 97; 54: 98; 55: 99; 56: 100; };
56 | 45: { '-1': 44; 0: 45; 1: 46; 2: 47; 3: 48; 4: 49; 5: 50; 6: 51; 7: 52; 8: 53; 9: 54; 10: 55; 11: 56; 12: 57; 13: 58; 14: 59; 15: 60; 16: 61; 17: 62; 18: 63; 19: 64; 20: 65; 21: 66; 22: 67; 23: 68; 24: 69; 25: 70; 26: 71; 27: 72; 28: 73; 29: 74; 30: 75; 31: 76; 32: 77; 33: 78; 34: 79; 35: 80; 36: 81; 37: 82; 38: 83; 39: 84; 40: 85; 41: 86; 42: 87; 43: 88; 44: 89; 45: 90; 46: 91; 47: 92; 48: 93; 49: 94; 50: 95; 51: 96; 52: 97; 53: 98; 54: 99; 55: 100; };
57 | 46: { '-1': 45; 0: 46; 1: 47; 2: 48; 3: 49; 4: 50; 5: 51; 6: 52; 7: 53; 8: 54; 9: 55; 10: 56; 11: 57; 12: 58; 13: 59; 14: 60; 15: 61; 16: 62; 17: 63; 18: 64; 19: 65; 20: 66; 21: 67; 22: 68; 23: 69; 24: 70; 25: 71; 26: 72; 27: 73; 28: 74; 29: 75; 30: 76; 31: 77; 32: 78; 33: 79; 34: 80; 35: 81; 36: 82; 37: 83; 38: 84; 39: 85; 40: 86; 41: 87; 42: 88; 43: 89; 44: 90; 45: 91; 46: 92; 47: 93; 48: 94; 49: 95; 50: 96; 51: 97; 52: 98; 53: 99; 54: 100; };
58 | 47: { '-1': 46; 0: 47; 1: 48; 2: 49; 3: 50; 4: 51; 5: 52; 6: 53; 7: 54; 8: 55; 9: 56; 10: 57; 11: 58; 12: 59; 13: 60; 14: 61; 15: 62; 16: 63; 17: 64; 18: 65; 19: 66; 20: 67; 21: 68; 22: 69; 23: 70; 24: 71; 25: 72; 26: 73; 27: 74; 28: 75; 29: 76; 30: 77; 31: 78; 32: 79; 33: 80; 34: 81; 35: 82; 36: 83; 37: 84; 38: 85; 39: 86; 40: 87; 41: 88; 42: 89; 43: 90; 44: 91; 45: 92; 46: 93; 47: 94; 48: 95; 49: 96; 50: 97; 51: 98; 52: 99; 53: 100; };
59 | 48: { '-1': 47; 0: 48; 1: 49; 2: 50; 3: 51; 4: 52; 5: 53; 6: 54; 7: 55; 8: 56; 9: 57; 10: 58; 11: 59; 12: 60; 13: 61; 14: 62; 15: 63; 16: 64; 17: 65; 18: 66; 19: 67; 20: 68; 21: 69; 22: 70; 23: 71; 24: 72; 25: 73; 26: 74; 27: 75; 28: 76; 29: 77; 30: 78; 31: 79; 32: 80; 33: 81; 34: 82; 35: 83; 36: 84; 37: 85; 38: 86; 39: 87; 40: 88; 41: 89; 42: 90; 43: 91; 44: 92; 45: 93; 46: 94; 47: 95; 48: 96; 49: 97; 50: 98; 51: 99; 52: 100; };
60 | 49: { '-1': 48; 0: 49; 1: 50; 2: 51; 3: 52; 4: 53; 5: 54; 6: 55; 7: 56; 8: 57; 9: 58; 10: 59; 11: 60; 12: 61; 13: 62; 14: 63; 15: 64; 16: 65; 17: 66; 18: 67; 19: 68; 20: 69; 21: 70; 22: 71; 23: 72; 24: 73; 25: 74; 26: 75; 27: 76; 28: 77; 29: 78; 30: 79; 31: 80; 32: 81; 33: 82; 34: 83; 35: 84; 36: 85; 37: 86; 38: 87; 39: 88; 40: 89; 41: 90; 42: 91; 43: 92; 44: 93; 45: 94; 46: 95; 47: 96; 48: 97; 49: 98; 50: 99; 51: 100; };
61 | 50: { '-1': 49; 0: 50; 1: 51; 2: 52; 3: 53; 4: 54; 5: 55; 6: 56; 7: 57; 8: 58; 9: 59; 10: 60; 11: 61; 12: 62; 13: 63; 14: 64; 15: 65; 16: 66; 17: 67; 18: 68; 19: 69; 20: 70; 21: 71; 22: 72; 23: 73; 24: 74; 25: 75; 26: 76; 27: 77; 28: 78; 29: 79; 30: 80; 31: 81; 32: 82; 33: 83; 34: 84; 35: 85; 36: 86; 37: 87; 38: 88; 39: 89; 40: 90; 41: 91; 42: 92; 43: 93; 44: 94; 45: 95; 46: 96; 47: 97; 48: 98; 49: 99; 50: 100; };
62 | 51: { '-1': 50; 0: 51; 1: 52; 2: 53; 3: 54; 4: 55; 5: 56; 6: 57; 7: 58; 8: 59; 9: 60; 10: 61; 11: 62; 12: 63; 13: 64; 14: 65; 15: 66; 16: 67; 17: 68; 18: 69; 19: 70; 20: 71; 21: 72; 22: 73; 23: 74; 24: 75; 25: 76; 26: 77; 27: 78; 28: 79; 29: 80; 30: 81; 31: 82; 32: 83; 33: 84; 34: 85; 35: 86; 36: 87; 37: 88; 38: 89; 39: 90; 40: 91; 41: 92; 42: 93; 43: 94; 44: 95; 45: 96; 46: 97; 47: 98; 48: 99; 49: 100; };
63 | 52: { '-1': 51; 0: 52; 1: 53; 2: 54; 3: 55; 4: 56; 5: 57; 6: 58; 7: 59; 8: 60; 9: 61; 10: 62; 11: 63; 12: 64; 13: 65; 14: 66; 15: 67; 16: 68; 17: 69; 18: 70; 19: 71; 20: 72; 21: 73; 22: 74; 23: 75; 24: 76; 25: 77; 26: 78; 27: 79; 28: 80; 29: 81; 30: 82; 31: 83; 32: 84; 33: 85; 34: 86; 35: 87; 36: 88; 37: 89; 38: 90; 39: 91; 40: 92; 41: 93; 42: 94; 43: 95; 44: 96; 45: 97; 46: 98; 47: 99; 48: 100; };
64 | 53: { '-1': 52; 0: 53; 1: 54; 2: 55; 3: 56; 4: 57; 5: 58; 6: 59; 7: 60; 8: 61; 9: 62; 10: 63; 11: 64; 12: 65; 13: 66; 14: 67; 15: 68; 16: 69; 17: 70; 18: 71; 19: 72; 20: 73; 21: 74; 22: 75; 23: 76; 24: 77; 25: 78; 26: 79; 27: 80; 28: 81; 29: 82; 30: 83; 31: 84; 32: 85; 33: 86; 34: 87; 35: 88; 36: 89; 37: 90; 38: 91; 39: 92; 40: 93; 41: 94; 42: 95; 43: 96; 44: 97; 45: 98; 46: 99; 47: 100; };
65 | 54: { '-1': 53; 0: 54; 1: 55; 2: 56; 3: 57; 4: 58; 5: 59; 6: 60; 7: 61; 8: 62; 9: 63; 10: 64; 11: 65; 12: 66; 13: 67; 14: 68; 15: 69; 16: 70; 17: 71; 18: 72; 19: 73; 20: 74; 21: 75; 22: 76; 23: 77; 24: 78; 25: 79; 26: 80; 27: 81; 28: 82; 29: 83; 30: 84; 31: 85; 32: 86; 33: 87; 34: 88; 35: 89; 36: 90; 37: 91; 38: 92; 39: 93; 40: 94; 41: 95; 42: 96; 43: 97; 44: 98; 45: 99; 46: 100; };
66 | 55: { '-1': 54; 0: 55; 1: 56; 2: 57; 3: 58; 4: 59; 5: 60; 6: 61; 7: 62; 8: 63; 9: 64; 10: 65; 11: 66; 12: 67; 13: 68; 14: 69; 15: 70; 16: 71; 17: 72; 18: 73; 19: 74; 20: 75; 21: 76; 22: 77; 23: 78; 24: 79; 25: 80; 26: 81; 27: 82; 28: 83; 29: 84; 30: 85; 31: 86; 32: 87; 33: 88; 34: 89; 35: 90; 36: 91; 37: 92; 38: 93; 39: 94; 40: 95; 41: 96; 42: 97; 43: 98; 44: 99; 45: 100; };
67 | 56: { '-1': 55; 0: 56; 1: 57; 2: 58; 3: 59; 4: 60; 5: 61; 6: 62; 7: 63; 8: 64; 9: 65; 10: 66; 11: 67; 12: 68; 13: 69; 14: 70; 15: 71; 16: 72; 17: 73; 18: 74; 19: 75; 20: 76; 21: 77; 22: 78; 23: 79; 24: 80; 25: 81; 26: 82; 27: 83; 28: 84; 29: 85; 30: 86; 31: 87; 32: 88; 33: 89; 34: 90; 35: 91; 36: 92; 37: 93; 38: 94; 39: 95; 40: 96; 41: 97; 42: 98; 43: 99; 44: 100; };
68 | 57: { '-1': 56; 0: 57; 1: 58; 2: 59; 3: 60; 4: 61; 5: 62; 6: 63; 7: 64; 8: 65; 9: 66; 10: 67; 11: 68; 12: 69; 13: 70; 14: 71; 15: 72; 16: 73; 17: 74; 18: 75; 19: 76; 20: 77; 21: 78; 22: 79; 23: 80; 24: 81; 25: 82; 26: 83; 27: 84; 28: 85; 29: 86; 30: 87; 31: 88; 32: 89; 33: 90; 34: 91; 35: 92; 36: 93; 37: 94; 38: 95; 39: 96; 40: 97; 41: 98; 42: 99; 43: 100; };
69 | 58: { '-1': 57; 0: 58; 1: 59; 2: 60; 3: 61; 4: 62; 5: 63; 6: 64; 7: 65; 8: 66; 9: 67; 10: 68; 11: 69; 12: 70; 13: 71; 14: 72; 15: 73; 16: 74; 17: 75; 18: 76; 19: 77; 20: 78; 21: 79; 22: 80; 23: 81; 24: 82; 25: 83; 26: 84; 27: 85; 28: 86; 29: 87; 30: 88; 31: 89; 32: 90; 33: 91; 34: 92; 35: 93; 36: 94; 37: 95; 38: 96; 39: 97; 40: 98; 41: 99; 42: 100; };
70 | 59: { '-1': 58; 0: 59; 1: 60; 2: 61; 3: 62; 4: 63; 5: 64; 6: 65; 7: 66; 8: 67; 9: 68; 10: 69; 11: 70; 12: 71; 13: 72; 14: 73; 15: 74; 16: 75; 17: 76; 18: 77; 19: 78; 20: 79; 21: 80; 22: 81; 23: 82; 24: 83; 25: 84; 26: 85; 27: 86; 28: 87; 29: 88; 30: 89; 31: 90; 32: 91; 33: 92; 34: 93; 35: 94; 36: 95; 37: 96; 38: 97; 39: 98; 40: 99; 41: 100; };
71 | 60: { '-1': 59; 0: 60; 1: 61; 2: 62; 3: 63; 4: 64; 5: 65; 6: 66; 7: 67; 8: 68; 9: 69; 10: 70; 11: 71; 12: 72; 13: 73; 14: 74; 15: 75; 16: 76; 17: 77; 18: 78; 19: 79; 20: 80; 21: 81; 22: 82; 23: 83; 24: 84; 25: 85; 26: 86; 27: 87; 28: 88; 29: 89; 30: 90; 31: 91; 32: 92; 33: 93; 34: 94; 35: 95; 36: 96; 37: 97; 38: 98; 39: 99; 40: 100; };
72 | 61: { '-1': 60; 0: 61; 1: 62; 2: 63; 3: 64; 4: 65; 5: 66; 6: 67; 7: 68; 8: 69; 9: 70; 10: 71; 11: 72; 12: 73; 13: 74; 14: 75; 15: 76; 16: 77; 17: 78; 18: 79; 19: 80; 20: 81; 21: 82; 22: 83; 23: 84; 24: 85; 25: 86; 26: 87; 27: 88; 28: 89; 29: 90; 30: 91; 31: 92; 32: 93; 33: 94; 34: 95; 35: 96; 36: 97; 37: 98; 38: 99; 39: 100; };
73 | 62: { '-1': 61; 0: 62; 1: 63; 2: 64; 3: 65; 4: 66; 5: 67; 6: 68; 7: 69; 8: 70; 9: 71; 10: 72; 11: 73; 12: 74; 13: 75; 14: 76; 15: 77; 16: 78; 17: 79; 18: 80; 19: 81; 20: 82; 21: 83; 22: 84; 23: 85; 24: 86; 25: 87; 26: 88; 27: 89; 28: 90; 29: 91; 30: 92; 31: 93; 32: 94; 33: 95; 34: 96; 35: 97; 36: 98; 37: 99; 38: 100; };
74 | 63: { '-1': 62; 0: 63; 1: 64; 2: 65; 3: 66; 4: 67; 5: 68; 6: 69; 7: 70; 8: 71; 9: 72; 10: 73; 11: 74; 12: 75; 13: 76; 14: 77; 15: 78; 16: 79; 17: 80; 18: 81; 19: 82; 20: 83; 21: 84; 22: 85; 23: 86; 24: 87; 25: 88; 26: 89; 27: 90; 28: 91; 29: 92; 30: 93; 31: 94; 32: 95; 33: 96; 34: 97; 35: 98; 36: 99; 37: 100; };
75 | 64: { '-1': 63; 0: 64; 1: 65; 2: 66; 3: 67; 4: 68; 5: 69; 6: 70; 7: 71; 8: 72; 9: 73; 10: 74; 11: 75; 12: 76; 13: 77; 14: 78; 15: 79; 16: 80; 17: 81; 18: 82; 19: 83; 20: 84; 21: 85; 22: 86; 23: 87; 24: 88; 25: 89; 26: 90; 27: 91; 28: 92; 29: 93; 30: 94; 31: 95; 32: 96; 33: 97; 34: 98; 35: 99; 36: 100; };
76 | 65: { '-1': 64; 0: 65; 1: 66; 2: 67; 3: 68; 4: 69; 5: 70; 6: 71; 7: 72; 8: 73; 9: 74; 10: 75; 11: 76; 12: 77; 13: 78; 14: 79; 15: 80; 16: 81; 17: 82; 18: 83; 19: 84; 20: 85; 21: 86; 22: 87; 23: 88; 24: 89; 25: 90; 26: 91; 27: 92; 28: 93; 29: 94; 30: 95; 31: 96; 32: 97; 33: 98; 34: 99; 35: 100; };
77 | 66: { '-1': 65; 0: 66; 1: 67; 2: 68; 3: 69; 4: 70; 5: 71; 6: 72; 7: 73; 8: 74; 9: 75; 10: 76; 11: 77; 12: 78; 13: 79; 14: 80; 15: 81; 16: 82; 17: 83; 18: 84; 19: 85; 20: 86; 21: 87; 22: 88; 23: 89; 24: 90; 25: 91; 26: 92; 27: 93; 28: 94; 29: 95; 30: 96; 31: 97; 32: 98; 33: 99; 34: 100; };
78 | 67: { '-1': 66; 0: 67; 1: 68; 2: 69; 3: 70; 4: 71; 5: 72; 6: 73; 7: 74; 8: 75; 9: 76; 10: 77; 11: 78; 12: 79; 13: 80; 14: 81; 15: 82; 16: 83; 17: 84; 18: 85; 19: 86; 20: 87; 21: 88; 22: 89; 23: 90; 24: 91; 25: 92; 26: 93; 27: 94; 28: 95; 29: 96; 30: 97; 31: 98; 32: 99; 33: 100; };
79 | 68: { '-1': 67; 0: 68; 1: 69; 2: 70; 3: 71; 4: 72; 5: 73; 6: 74; 7: 75; 8: 76; 9: 77; 10: 78; 11: 79; 12: 80; 13: 81; 14: 82; 15: 83; 16: 84; 17: 85; 18: 86; 19: 87; 20: 88; 21: 89; 22: 90; 23: 91; 24: 92; 25: 93; 26: 94; 27: 95; 28: 96; 29: 97; 30: 98; 31: 99; 32: 100; };
80 | 69: { '-1': 68; 0: 69; 1: 70; 2: 71; 3: 72; 4: 73; 5: 74; 6: 75; 7: 76; 8: 77; 9: 78; 10: 79; 11: 80; 12: 81; 13: 82; 14: 83; 15: 84; 16: 85; 17: 86; 18: 87; 19: 88; 20: 89; 21: 90; 22: 91; 23: 92; 24: 93; 25: 94; 26: 95; 27: 96; 28: 97; 29: 98; 30: 99; 31: 100; };
81 | 70: { '-1': 69; 0: 70; 1: 71; 2: 72; 3: 73; 4: 74; 5: 75; 6: 76; 7: 77; 8: 78; 9: 79; 10: 80; 11: 81; 12: 82; 13: 83; 14: 84; 15: 85; 16: 86; 17: 87; 18: 88; 19: 89; 20: 90; 21: 91; 22: 92; 23: 93; 24: 94; 25: 95; 26: 96; 27: 97; 28: 98; 29: 99; 30: 100; };
82 | 71: { '-1': 70; 0: 71; 1: 72; 2: 73; 3: 74; 4: 75; 5: 76; 6: 77; 7: 78; 8: 79; 9: 80; 10: 81; 11: 82; 12: 83; 13: 84; 14: 85; 15: 86; 16: 87; 17: 88; 18: 89; 19: 90; 20: 91; 21: 92; 22: 93; 23: 94; 24: 95; 25: 96; 26: 97; 27: 98; 28: 99; 29: 100; };
83 | 72: { '-1': 71; 0: 72; 1: 73; 2: 74; 3: 75; 4: 76; 5: 77; 6: 78; 7: 79; 8: 80; 9: 81; 10: 82; 11: 83; 12: 84; 13: 85; 14: 86; 15: 87; 16: 88; 17: 89; 18: 90; 19: 91; 20: 92; 21: 93; 22: 94; 23: 95; 24: 96; 25: 97; 26: 98; 27: 99; 28: 100; };
84 | 73: { '-1': 72; 0: 73; 1: 74; 2: 75; 3: 76; 4: 77; 5: 78; 6: 79; 7: 80; 8: 81; 9: 82; 10: 83; 11: 84; 12: 85; 13: 86; 14: 87; 15: 88; 16: 89; 17: 90; 18: 91; 19: 92; 20: 93; 21: 94; 22: 95; 23: 96; 24: 97; 25: 98; 26: 99; 27: 100; };
85 | 74: { '-1': 73; 0: 74; 1: 75; 2: 76; 3: 77; 4: 78; 5: 79; 6: 80; 7: 81; 8: 82; 9: 83; 10: 84; 11: 85; 12: 86; 13: 87; 14: 88; 15: 89; 16: 90; 17: 91; 18: 92; 19: 93; 20: 94; 21: 95; 22: 96; 23: 97; 24: 98; 25: 99; 26: 100; };
86 | 75: { '-1': 74; 0: 75; 1: 76; 2: 77; 3: 78; 4: 79; 5: 80; 6: 81; 7: 82; 8: 83; 9: 84; 10: 85; 11: 86; 12: 87; 13: 88; 14: 89; 15: 90; 16: 91; 17: 92; 18: 93; 19: 94; 20: 95; 21: 96; 22: 97; 23: 98; 24: 99; 25: 100; };
87 | 76: { '-1': 75; 0: 76; 1: 77; 2: 78; 3: 79; 4: 80; 5: 81; 6: 82; 7: 83; 8: 84; 9: 85; 10: 86; 11: 87; 12: 88; 13: 89; 14: 90; 15: 91; 16: 92; 17: 93; 18: 94; 19: 95; 20: 96; 21: 97; 22: 98; 23: 99; 24: 100; };
88 | 77: { '-1': 76; 0: 77; 1: 78; 2: 79; 3: 80; 4: 81; 5: 82; 6: 83; 7: 84; 8: 85; 9: 86; 10: 87; 11: 88; 12: 89; 13: 90; 14: 91; 15: 92; 16: 93; 17: 94; 18: 95; 19: 96; 20: 97; 21: 98; 22: 99; 23: 100; };
89 | 78: { '-1': 77; 0: 78; 1: 79; 2: 80; 3: 81; 4: 82; 5: 83; 6: 84; 7: 85; 8: 86; 9: 87; 10: 88; 11: 89; 12: 90; 13: 91; 14: 92; 15: 93; 16: 94; 17: 95; 18: 96; 19: 97; 20: 98; 21: 99; 22: 100; };
90 | 79: { '-1': 78; 0: 79; 1: 80; 2: 81; 3: 82; 4: 83; 5: 84; 6: 85; 7: 86; 8: 87; 9: 88; 10: 89; 11: 90; 12: 91; 13: 92; 14: 93; 15: 94; 16: 95; 17: 96; 18: 97; 19: 98; 20: 99; 21: 100; };
91 | 80: { '-1': 79; 0: 80; 1: 81; 2: 82; 3: 83; 4: 84; 5: 85; 6: 86; 7: 87; 8: 88; 9: 89; 10: 90; 11: 91; 12: 92; 13: 93; 14: 94; 15: 95; 16: 96; 17: 97; 18: 98; 19: 99; 20: 100; };
92 | 81: { '-1': 80; 0: 81; 1: 82; 2: 83; 3: 84; 4: 85; 5: 86; 6: 87; 7: 88; 8: 89; 9: 90; 10: 91; 11: 92; 12: 93; 13: 94; 14: 95; 15: 96; 16: 97; 17: 98; 18: 99; 19: 100; };
93 | 82: { '-1': 81; 0: 82; 1: 83; 2: 84; 3: 85; 4: 86; 5: 87; 6: 88; 7: 89; 8: 90; 9: 91; 10: 92; 11: 93; 12: 94; 13: 95; 14: 96; 15: 97; 16: 98; 17: 99; 18: 100; };
94 | 83: { '-1': 82; 0: 83; 1: 84; 2: 85; 3: 86; 4: 87; 5: 88; 6: 89; 7: 90; 8: 91; 9: 92; 10: 93; 11: 94; 12: 95; 13: 96; 14: 97; 15: 98; 16: 99; 17: 100; };
95 | 84: { '-1': 83; 0: 84; 1: 85; 2: 86; 3: 87; 4: 88; 5: 89; 6: 90; 7: 91; 8: 92; 9: 93; 10: 94; 11: 95; 12: 96; 13: 97; 14: 98; 15: 99; 16: 100; };
96 | 85: { '-1': 84; 0: 85; 1: 86; 2: 87; 3: 88; 4: 89; 5: 90; 6: 91; 7: 92; 8: 93; 9: 94; 10: 95; 11: 96; 12: 97; 13: 98; 14: 99; 15: 100; };
97 | 86: { '-1': 85; 0: 86; 1: 87; 2: 88; 3: 89; 4: 90; 5: 91; 6: 92; 7: 93; 8: 94; 9: 95; 10: 96; 11: 97; 12: 98; 13: 99; 14: 100; };
98 | 87: { '-1': 86; 0: 87; 1: 88; 2: 89; 3: 90; 4: 91; 5: 92; 6: 93; 7: 94; 8: 95; 9: 96; 10: 97; 11: 98; 12: 99; 13: 100; };
99 | 88: { '-1': 87; 0: 88; 1: 89; 2: 90; 3: 91; 4: 92; 5: 93; 6: 94; 7: 95; 8: 96; 9: 97; 10: 98; 11: 99; 12: 100; };
100 | 89: { '-1': 88; 0: 89; 1: 90; 2: 91; 3: 92; 4: 93; 5: 94; 6: 95; 7: 96; 8: 97; 9: 98; 10: 99; 11: 100; };
101 | 90: { '-1': 89; 0: 90; 1: 91; 2: 92; 3: 93; 4: 94; 5: 95; 6: 96; 7: 97; 8: 98; 9: 99; 10: 100; };
102 | 91: { '-1': 90; 0: 91; 1: 92; 2: 93; 3: 94; 4: 95; 5: 96; 6: 97; 7: 98; 8: 99; 9: 100; };
103 | 92: { '-1': 91; 0: 92; 1: 93; 2: 94; 3: 95; 4: 96; 5: 97; 6: 98; 7: 99; 8: 100; };
104 | 93: { '-1': 92; 0: 93; 1: 94; 2: 95; 3: 96; 4: 97; 5: 98; 6: 99; 7: 100; };
105 | 94: { '-1': 93; 0: 94; 1: 95; 2: 96; 3: 97; 4: 98; 5: 99; 6: 100; };
106 | 95: { '-1': 94; 0: 95; 1: 96; 2: 97; 3: 98; 4: 99; 5: 100; };
107 | 96: { '-1': 95; 0: 96; 1: 97; 2: 98; 3: 99; 4: 100; };
108 | 97: { '-1': 96; 0: 97; 1: 98; 2: 99; 3: 100; };
109 | 98: { '-1': 97; 0: 98; 1: 99; 2: 100; };
110 | 99: { '-1': 98; 0: 99; 1: 100; };
111 | };
112 |
--------------------------------------------------------------------------------
/lib/conditional.d.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Returns {Then} if {If} is true, otherwise returns {Else}
3 | */
4 | export type If< If, Then, Else > = If extends true ? Then : Else;
5 |
--------------------------------------------------------------------------------
/lib/extends.d.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Returns true if T extends E, otherwise false
3 | */
4 | export type Extends< T, E > = T extends E ? true : false;
5 |
--------------------------------------------------------------------------------
/lib/falsy.d.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Returns true if {T} is falsy, i.e. it is any of:
3 | * false, 0, "", null, undefined
4 | *
5 | * Otherwise, returns false
6 | */
7 | export type IsFalsy< T > =
8 | T extends false
9 | ? true
10 | : T extends 0
11 | ? true
12 | : T extends ""
13 | ? true
14 | : T extends null
15 | ? true
16 | : T extends undefined
17 | ? true
18 | : false;
19 |
--------------------------------------------------------------------------------
/lib/fill.d.ts:
--------------------------------------------------------------------------------
1 | //
2 | // This is the generic version:
3 | //
4 | // type Fill< N extends number, T = null, Cur extends unknown[ ] = [ ] > =
5 | // Cur[ 'length' ] extends N
6 | // ? Cur
7 | // : Fill< N, [ ...Cur, T ] >;
8 |
9 | /**
10 | * Make a tuple of size N filled with T
11 | */
12 | export type Fill< N extends number, T = any > =
13 | N extends N98
14 | ? FillMap< T >[ N ]
15 | : never;
16 |
17 | type FillMap< T > = {
18 | 0 : [ ]
19 | 1 : [ T ]
20 | 2 : [ T, T ]
21 | 3 : [ T, T, T ]
22 | 4 : [ T, T, T, T ]
23 | 5 : [ T, T, T, T, T ]
24 | 6 : [ T, T, T, T, T, T ]
25 | 7 : [ T, T, T, T, T, T, T ]
26 | 8 : [ T, T, T, T, T, T, T, T ]
27 | 9 : [ T, T, T, T, T, T, T, T, T ]
28 | 10 : [ T, T, T, T, T, T, T, T, T, T ]
29 | 11 : [ T, T, T, T, T, T, T, T, T, T, T ]
30 | 12 : [ T, T, T, T, T, T, T, T, T, T, T, T ]
31 | 13 : [ T, T, T, T, T, T, T, T, T, T, T, T, T ]
32 | 14 : [ T, T, T, T, T, T, T, T, T, T, T, T, T, T ]
33 | 15 : [ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T ]
34 | 16 : [ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T ]
35 | 17 : [ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T ]
36 | 18 : [ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T ]
37 | 19 : [ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T ]
38 | 20 : [ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T ]
39 | 21 : [ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T ]
40 | 22 : [ T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T ]
41 | 23 : [
42 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
43 | ]
44 | 24 : [
45 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
46 | T
47 | ]
48 | 25 : [
49 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
50 | T, T
51 | ]
52 | 26 : [
53 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
54 | T, T, T
55 | ]
56 | 27 : [
57 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
58 | T, T, T, T
59 | ]
60 | 28 : [
61 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
62 | T, T, T, T, T
63 | ]
64 | 29 : [
65 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
66 | T, T, T, T, T, T
67 | ]
68 | 30 : [
69 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
70 | T, T, T, T, T, T, T
71 | ]
72 | 31 : [
73 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
74 | T, T, T, T, T, T, T, T
75 | ]
76 | 32 : [
77 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
78 | T, T, T, T, T, T, T, T, T
79 | ]
80 | 33 : [
81 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
82 | T, T, T, T, T, T, T, T, T, T
83 | ]
84 | 34 : [
85 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
86 | T, T, T, T, T, T, T, T, T, T, T
87 | ]
88 | 35 : [
89 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
90 | T, T, T, T, T, T, T, T, T, T, T, T
91 | ]
92 | 36 : [
93 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
94 | T, T, T, T, T, T, T, T, T, T, T, T, T
95 | ]
96 | 37 : [
97 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
98 | T, T, T, T, T, T, T, T, T, T, T, T, T, T
99 | ]
100 | 38 : [
101 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
102 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
103 | ]
104 | 39 : [
105 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
106 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
107 | ]
108 | 40 : [
109 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
110 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
111 | ]
112 | 41 : [
113 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
114 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
115 | ]
116 | 42 : [
117 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
118 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
119 | ]
120 | 43 : [
121 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
122 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
123 | ]
124 | 44 : [
125 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
126 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
127 | ]
128 | 45 : [
129 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
130 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
131 | ]
132 | 46 : [
133 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
134 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
135 | ]
136 | 47 : [
137 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
138 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
139 | T
140 | ]
141 | 48 : [
142 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
143 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
144 | T, T
145 | ]
146 | 49 : [
147 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
148 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
149 | T, T, T
150 | ]
151 | 50 : [
152 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
153 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
154 | T, T, T, T
155 | ]
156 | 51 : [
157 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
158 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
159 | T, T, T, T, T
160 | ]
161 | 52 : [
162 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
163 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
164 | T, T, T, T, T, T
165 | ]
166 | 53 : [
167 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
168 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
169 | T, T, T, T, T, T, T
170 | ]
171 | 54 : [
172 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
173 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
174 | T, T, T, T, T, T, T, T
175 | ]
176 | 55 : [
177 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
178 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
179 | T, T, T, T, T, T, T, T, T
180 | ]
181 | 56 : [
182 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
183 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
184 | T, T, T, T, T, T, T, T, T, T
185 | ]
186 | 57 : [
187 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
188 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
189 | T, T, T, T, T, T, T, T, T, T, T
190 | ]
191 | 58 : [
192 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
193 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
194 | T, T, T, T, T, T, T, T, T, T, T, T
195 | ]
196 | 59 : [
197 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
198 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
199 | T, T, T, T, T, T, T, T, T, T, T, T, T
200 | ]
201 | 60 : [
202 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
203 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
204 | T, T, T, T, T, T, T, T, T, T, T, T, T, T
205 | ]
206 | 61 : [
207 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
208 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
209 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
210 | ]
211 | 62 : [
212 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
213 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
214 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
215 | ]
216 | 63 : [
217 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
218 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
219 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
220 | ]
221 | 64 : [
222 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
223 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
224 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
225 | ]
226 | 65 : [
227 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
228 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
229 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
230 | ]
231 | 66 : [
232 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
233 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
234 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
235 | ]
236 | 67 : [
237 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
238 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
239 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
240 | ]
241 | 68 : [
242 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
243 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
244 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
245 | ]
246 | 69 : [
247 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
248 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
249 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
250 | ]
251 | 70 : [
252 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
253 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
254 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
255 | T
256 | ]
257 | 71 : [
258 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
259 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
260 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
261 | T, T
262 | ]
263 | 72 : [
264 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
265 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
266 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
267 | T, T, T
268 | ]
269 | 73 : [
270 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
271 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
272 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
273 | T, T, T, T
274 | ]
275 | 74 : [
276 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
277 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
278 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
279 | T, T, T, T, T
280 | ]
281 | 75 : [
282 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
283 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
284 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
285 | T, T, T, T, T, T
286 | ]
287 | 76 : [
288 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
289 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
290 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
291 | T, T, T, T, T, T, T
292 | ]
293 | 77 : [
294 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
295 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
296 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
297 | T, T, T, T, T, T, T, T
298 | ]
299 | 78 : [
300 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
301 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
302 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
303 | T, T, T, T, T, T, T, T, T
304 | ]
305 | 79 : [
306 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
307 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
308 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
309 | T, T, T, T, T, T, T, T, T, T
310 | ]
311 | 80 : [
312 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
313 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
314 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
315 | T, T, T, T, T, T, T, T, T, T, T
316 | ]
317 | 81 : [
318 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
319 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
320 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
321 | T, T, T, T, T, T, T, T, T, T, T, T
322 | ]
323 | 82 : [
324 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
325 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
326 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
327 | T, T, T, T, T, T, T, T, T, T, T, T, T
328 | ]
329 | 83 : [
330 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
331 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
332 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
333 | T, T, T, T, T, T, T, T, T, T, T, T, T, T
334 | ]
335 | 84 : [
336 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
337 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
338 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
339 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
340 | ]
341 | 85 : [
342 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
343 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
344 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
345 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
346 | ]
347 | 86 : [
348 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
349 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
350 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
351 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
352 | ]
353 | 87 : [
354 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
355 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
356 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
357 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
358 | ]
359 | 88 : [
360 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
361 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
362 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
363 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
364 | ]
365 | 89 : [
366 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
367 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
368 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
369 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
370 | ]
371 | 90 : [
372 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
373 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
374 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
375 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
376 | ]
377 | 91 : [
378 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
379 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
380 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
381 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
382 | ]
383 | 92 : [
384 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
385 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
386 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
387 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T
388 | ]
389 | 93 : [
390 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
391 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
392 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
393 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
394 | T
395 | ]
396 | 94 : [
397 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
398 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
399 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
400 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
401 | T, T
402 | ]
403 | 95 : [
404 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
405 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
406 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
407 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
408 | T, T, T
409 | ]
410 | 96 : [
411 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
412 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
413 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
414 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
415 | T, T, T, T
416 | ]
417 | 97 : [
418 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
419 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
420 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
421 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
422 | T, T, T, T, T
423 | ]
424 | 98 : [
425 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
426 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
427 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
428 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
429 | T, T, T, T, T, T
430 | ]
431 | 99 : [
432 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
433 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
434 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
435 | T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T, T,
436 | T, T, T, T, T, T, T
437 | ]
438 | };
439 |
440 | type N98 = keyof FillMap< 0 >;
441 |
--------------------------------------------------------------------------------
/lib/first.d.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Returns the first element of a tuple
3 | */
4 | export type First< T extends readonly unknown[ ], Fallback = never > =
5 | T[ 'length' ] extends 0 ? Fallback : T[ 0 ];
6 |
--------------------------------------------------------------------------------
/lib/greater-than.d.ts:
--------------------------------------------------------------------------------
1 | import { Fill } from './fill'
2 | import { LargerThan } from './larger-than'
3 |
4 | /**
5 | * Returns true if A is greater than B.
6 | *
7 | * If OrEqual is set to true, also returns true if A equals B.
8 | */
9 | export type GreaterThan
10 | <
11 | A extends number,
12 | B extends number,
13 | OrEqual = false
14 | > =
15 | A extends B
16 | ? OrEqual
17 | : LargerThan< Fill< A >, Fill< B > >;
18 |
--------------------------------------------------------------------------------
/lib/is.d.ts:
--------------------------------------------------------------------------------
1 | import { And } from './logic'
2 | import { Extends } from './extends'
3 |
4 | /**
5 | * Returns true if {T} and {U} are the exact same type, otherwise false
6 | */
7 | export type Is< T, U > = And< Extends< T, U >, Extends< U, T > >;
8 |
--------------------------------------------------------------------------------
/lib/larger-than.d.ts:
--------------------------------------------------------------------------------
1 | import type { Rest } from './rest'
2 | import type { SameLength } from './same-length'
3 |
4 | /**
5 | * Return true if tuple A is of greater length than tuple B.
6 | *
7 | * If OrEqual is set to true, the comparison is LargerThan-or-equal.
8 | */
9 | export type LargerThan
10 | <
11 | A extends readonly unknown[ ],
12 | B extends readonly unknown[ ],
13 | OrEqual = false
14 | > =
15 | A extends never ? never : // These cover "too large" tuples
16 | B extends never ? never : // e.g. created by Fill
17 | SameLength< A, B > extends true
18 | ? OrEqual
19 | : LargerAsSubset< A, B >;
20 |
21 | type LargerAsSubset
22 | <
23 | A extends readonly unknown[ ],
24 | B extends readonly unknown[ ],
25 | > =
26 | A extends [ ...B, ...unknown[ ] ]
27 | ? true
28 | : B extends [ ...A, ...unknown[ ] ]
29 | ? false
30 | : LargerByLength< A, B >;
31 |
32 | type LargerByLength
33 | <
34 | A extends readonly unknown[ ],
35 | B extends readonly unknown[ ],
36 | > =
37 | A[ 'length' ] extends 0
38 | ? false
39 | : B[ 'length' ] extends 0
40 | ? true
41 | : LargerByLength< Rest< A >, Rest< B > > ;
42 |
--------------------------------------------------------------------------------
/lib/last.d.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Returns the last element of a tuple
3 | */
4 | export type Last< T extends readonly unknown[ ], Fallback = never > =
5 | T[ 'length' ] extends 0 ? Fallback : ( [ 42, ...T ] )[ T[ 'length' ] ];
6 |
--------------------------------------------------------------------------------
/lib/length-of.d.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Returns the length of the tuple T, or {IfUnbound} (defaults to -1) if the
3 | * tuple is of infinite size.
4 | */
5 | export type LengthOf< T extends readonly unknown[ ], IfUnbound = -1 > =
6 | number extends T[ 'length' ] ? IfUnbound : T[ 'length' ];
7 |
--------------------------------------------------------------------------------
/lib/logic.d.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Return true if A *and* B is true, otherwise returns false
3 | */
4 | export type And< A, B > =
5 | A extends true
6 | ? B extends true
7 | ? true
8 | : false
9 | : false;
10 |
11 | /**
12 | * Return true if A *or* B is true, otherwise returns false
13 | */
14 | export type Or< A, B > =
15 | A extends true
16 | ? true
17 | : B extends true
18 | ? true
19 | : false;
20 |
21 | /**
22 | * Return true if A is not B, otherwise returns false
23 | */
24 | export type Xor< A, B > =
25 | A extends true
26 | ? B extends false
27 | ? true
28 | : false
29 | : B extends true
30 | ? true
31 | : false;
32 |
--------------------------------------------------------------------------------
/lib/mul.d.ts:
--------------------------------------------------------------------------------
1 |
2 | /**
3 | * Multiply two numbers (each between 0 and 98) where the result is <= 100
4 | */
5 | export type Mul< A extends number, B extends number > =
6 | A extends keyof MulTable
7 | ? B extends keyof MulTable[ A ]
8 | ? MulTable[ A ][ B ]
9 | : never
10 | : never;
11 |
12 | type MulTable = {
13 | 0: { 0: 0; 1: 0; 2: 0; 3: 0; 4: 0; 5: 0; 6: 0; 7: 0; 8: 0; 9: 0; 10: 0; 11: 0; 12: 0; 13: 0; 14: 0; 15: 0; 16: 0; 17: 0; 18: 0; 19: 0; 20: 0; 21: 0; 22: 0; 23: 0; 24: 0; 25: 0; 26: 0; 27: 0; 28: 0; 29: 0; 30: 0; 31: 0; 32: 0; 33: 0; 34: 0; 35: 0; 36: 0; 37: 0; 38: 0; 39: 0; 40: 0; 41: 0; 42: 0; 43: 0; 44: 0; 45: 0; 46: 0; 47: 0; 48: 0; 49: 0; 50: 0; 51: 0; 52: 0; 53: 0; 54: 0; 55: 0; 56: 0; 57: 0; 58: 0; 59: 0; 60: 0; 61: 0; 62: 0; 63: 0; 64: 0; 65: 0; 66: 0; 67: 0; 68: 0; 69: 0; 70: 0; 71: 0; 72: 0; 73: 0; 74: 0; 75: 0; 76: 0; 77: 0; 78: 0; 79: 0; 80: 0; 81: 0; 82: 0; 83: 0; 84: 0; 85: 0; 86: 0; 87: 0; 88: 0; 89: 0; 90: 0; 91: 0; 92: 0; 93: 0; 94: 0; 95: 0; 96: 0; 97: 0; 98: 0; 99: 0; };
14 | 1: { 0: 0; 1: 1; 2: 2; 3: 3; 4: 4; 5: 5; 6: 6; 7: 7; 8: 8; 9: 9; 10: 10; 11: 11; 12: 12; 13: 13; 14: 14; 15: 15; 16: 16; 17: 17; 18: 18; 19: 19; 20: 20; 21: 21; 22: 22; 23: 23; 24: 24; 25: 25; 26: 26; 27: 27; 28: 28; 29: 29; 30: 30; 31: 31; 32: 32; 33: 33; 34: 34; 35: 35; 36: 36; 37: 37; 38: 38; 39: 39; 40: 40; 41: 41; 42: 42; 43: 43; 44: 44; 45: 45; 46: 46; 47: 47; 48: 48; 49: 49; 50: 50; 51: 51; 52: 52; 53: 53; 54: 54; 55: 55; 56: 56; 57: 57; 58: 58; 59: 59; 60: 60; 61: 61; 62: 62; 63: 63; 64: 64; 65: 65; 66: 66; 67: 67; 68: 68; 69: 69; 70: 70; 71: 71; 72: 72; 73: 73; 74: 74; 75: 75; 76: 76; 77: 77; 78: 78; 79: 79; 80: 80; 81: 81; 82: 82; 83: 83; 84: 84; 85: 85; 86: 86; 87: 87; 88: 88; 89: 89; 90: 90; 91: 91; 92: 92; 93: 93; 94: 94; 95: 95; 96: 96; 97: 97; 98: 98; 99: 99; };
15 | 2: { 0: 0; 1: 2; 2: 4; 3: 6; 4: 8; 5: 10; 6: 12; 7: 14; 8: 16; 9: 18; 10: 20; 11: 22; 12: 24; 13: 26; 14: 28; 15: 30; 16: 32; 17: 34; 18: 36; 19: 38; 20: 40; 21: 42; 22: 44; 23: 46; 24: 48; 25: 50; 26: 52; 27: 54; 28: 56; 29: 58; 30: 60; 31: 62; 32: 64; 33: 66; 34: 68; 35: 70; 36: 72; 37: 74; 38: 76; 39: 78; 40: 80; 41: 82; 42: 84; 43: 86; 44: 88; 45: 90; 46: 92; 47: 94; 48: 96; 49: 98; 50: 100; };
16 | 3: { 0: 0; 1: 3; 2: 6; 3: 9; 4: 12; 5: 15; 6: 18; 7: 21; 8: 24; 9: 27; 10: 30; 11: 33; 12: 36; 13: 39; 14: 42; 15: 45; 16: 48; 17: 51; 18: 54; 19: 57; 20: 60; 21: 63; 22: 66; 23: 69; 24: 72; 25: 75; 26: 78; 27: 81; 28: 84; 29: 87; 30: 90; 31: 93; 32: 96; 33: 99; };
17 | 4: { 0: 0; 1: 4; 2: 8; 3: 12; 4: 16; 5: 20; 6: 24; 7: 28; 8: 32; 9: 36; 10: 40; 11: 44; 12: 48; 13: 52; 14: 56; 15: 60; 16: 64; 17: 68; 18: 72; 19: 76; 20: 80; 21: 84; 22: 88; 23: 92; 24: 96; 25: 100; };
18 | 5: { 0: 0; 1: 5; 2: 10; 3: 15; 4: 20; 5: 25; 6: 30; 7: 35; 8: 40; 9: 45; 10: 50; 11: 55; 12: 60; 13: 65; 14: 70; 15: 75; 16: 80; 17: 85; 18: 90; 19: 95; 20: 100; };
19 | 6: { 0: 0; 1: 6; 2: 12; 3: 18; 4: 24; 5: 30; 6: 36; 7: 42; 8: 48; 9: 54; 10: 60; 11: 66; 12: 72; 13: 78; 14: 84; 15: 90; 16: 96; };
20 | 7: { 0: 0; 1: 7; 2: 14; 3: 21; 4: 28; 5: 35; 6: 42; 7: 49; 8: 56; 9: 63; 10: 70; 11: 77; 12: 84; 13: 91; 14: 98; };
21 | 8: { 0: 0; 1: 8; 2: 16; 3: 24; 4: 32; 5: 40; 6: 48; 7: 56; 8: 64; 9: 72; 10: 80; 11: 88; 12: 96; };
22 | 9: { 0: 0; 1: 9; 2: 18; 3: 27; 4: 36; 5: 45; 6: 54; 7: 63; 8: 72; 9: 81; 10: 90; 11: 99; };
23 | 10: { 0: 0; 1: 10; 2: 20; 3: 30; 4: 40; 5: 50; 6: 60; 7: 70; 8: 80; 9: 90; 10: 100; };
24 | 11: { 0: 0; 1: 11; 2: 22; 3: 33; 4: 44; 5: 55; 6: 66; 7: 77; 8: 88; 9: 99; };
25 | 12: { 0: 0; 1: 12; 2: 24; 3: 36; 4: 48; 5: 60; 6: 72; 7: 84; 8: 96; };
26 | 13: { 0: 0; 1: 13; 2: 26; 3: 39; 4: 52; 5: 65; 6: 78; 7: 91; };
27 | 14: { 0: 0; 1: 14; 2: 28; 3: 42; 4: 56; 5: 70; 6: 84; 7: 98; };
28 | 15: { 0: 0; 1: 15; 2: 30; 3: 45; 4: 60; 5: 75; 6: 90; };
29 | 16: { 0: 0; 1: 16; 2: 32; 3: 48; 4: 64; 5: 80; 6: 96; };
30 | 17: { 0: 0; 1: 17; 2: 34; 3: 51; 4: 68; 5: 85; };
31 | 18: { 0: 0; 1: 18; 2: 36; 3: 54; 4: 72; 5: 90; };
32 | 19: { 0: 0; 1: 19; 2: 38; 3: 57; 4: 76; 5: 95; };
33 | 20: { 0: 0; 1: 20; 2: 40; 3: 60; 4: 80; 5: 100; };
34 | 21: { 0: 0; 1: 21; 2: 42; 3: 63; 4: 84; };
35 | 22: { 0: 0; 1: 22; 2: 44; 3: 66; 4: 88; };
36 | 23: { 0: 0; 1: 23; 2: 46; 3: 69; 4: 92; };
37 | 24: { 0: 0; 1: 24; 2: 48; 3: 72; 4: 96; };
38 | 25: { 0: 0; 1: 25; 2: 50; 3: 75; 4: 100; };
39 | 26: { 0: 0; 1: 26; 2: 52; 3: 78; };
40 | 27: { 0: 0; 1: 27; 2: 54; 3: 81; };
41 | 28: { 0: 0; 1: 28; 2: 56; 3: 84; };
42 | 29: { 0: 0; 1: 29; 2: 58; 3: 87; };
43 | 30: { 0: 0; 1: 30; 2: 60; 3: 90; };
44 | 31: { 0: 0; 1: 31; 2: 62; 3: 93; };
45 | 32: { 0: 0; 1: 32; 2: 64; 3: 96; };
46 | 33: { 0: 0; 1: 33; 2: 66; 3: 99; };
47 | 34: { 0: 0; 1: 34; 2: 68; };
48 | 35: { 0: 0; 1: 35; 2: 70; };
49 | 36: { 0: 0; 1: 36; 2: 72; };
50 | 37: { 0: 0; 1: 37; 2: 74; };
51 | 38: { 0: 0; 1: 38; 2: 76; };
52 | 39: { 0: 0; 1: 39; 2: 78; };
53 | 40: { 0: 0; 1: 40; 2: 80; };
54 | 41: { 0: 0; 1: 41; 2: 82; };
55 | 42: { 0: 0; 1: 42; 2: 84; };
56 | 43: { 0: 0; 1: 43; 2: 86; };
57 | 44: { 0: 0; 1: 44; 2: 88; };
58 | 45: { 0: 0; 1: 45; 2: 90; };
59 | 46: { 0: 0; 1: 46; 2: 92; };
60 | 47: { 0: 0; 1: 47; 2: 94; };
61 | 48: { 0: 0; 1: 48; 2: 96; };
62 | 49: { 0: 0; 1: 49; 2: 98; };
63 | 50: { 0: 0; 1: 50; 2: 100; };
64 | 51: { 0: 0; 1: 51; };
65 | 52: { 0: 0; 1: 52; };
66 | 53: { 0: 0; 1: 53; };
67 | 54: { 0: 0; 1: 54; };
68 | 55: { 0: 0; 1: 55; };
69 | 56: { 0: 0; 1: 56; };
70 | 57: { 0: 0; 1: 57; };
71 | 58: { 0: 0; 1: 58; };
72 | 59: { 0: 0; 1: 59; };
73 | 60: { 0: 0; 1: 60; };
74 | 61: { 0: 0; 1: 61; };
75 | 62: { 0: 0; 1: 62; };
76 | 63: { 0: 0; 1: 63; };
77 | 64: { 0: 0; 1: 64; };
78 | 65: { 0: 0; 1: 65; };
79 | 66: { 0: 0; 1: 66; };
80 | 67: { 0: 0; 1: 67; };
81 | 68: { 0: 0; 1: 68; };
82 | 69: { 0: 0; 1: 69; };
83 | 70: { 0: 0; 1: 70; };
84 | 71: { 0: 0; 1: 71; };
85 | 72: { 0: 0; 1: 72; };
86 | 73: { 0: 0; 1: 73; };
87 | 74: { 0: 0; 1: 74; };
88 | 75: { 0: 0; 1: 75; };
89 | 76: { 0: 0; 1: 76; };
90 | 77: { 0: 0; 1: 77; };
91 | 78: { 0: 0; 1: 78; };
92 | 79: { 0: 0; 1: 79; };
93 | 80: { 0: 0; 1: 80; };
94 | 81: { 0: 0; 1: 81; };
95 | 82: { 0: 0; 1: 82; };
96 | 83: { 0: 0; 1: 83; };
97 | 84: { 0: 0; 1: 84; };
98 | 85: { 0: 0; 1: 85; };
99 | 86: { 0: 0; 1: 86; };
100 | 87: { 0: 0; 1: 87; };
101 | 88: { 0: 0; 1: 88; };
102 | 89: { 0: 0; 1: 89; };
103 | 90: { 0: 0; 1: 90; };
104 | 91: { 0: 0; 1: 91; };
105 | 92: { 0: 0; 1: 92; };
106 | 93: { 0: 0; 1: 93; };
107 | 94: { 0: 0; 1: 94; };
108 | 95: { 0: 0; 1: 95; };
109 | 96: { 0: 0; 1: 96; };
110 | 97: { 0: 0; 1: 97; };
111 | 98: { 0: 0; 1: 98; };
112 | 99: { 0: 0; 1: 99; };
113 | };
114 |
--------------------------------------------------------------------------------
/lib/not.d.ts:
--------------------------------------------------------------------------------
1 | import { IsFalsy } from './falsy'
2 |
3 | /**
4 | * Returns true if {T} is false, and false if {T} is true.
5 | *
6 | * The second optional argument is Strict and defaults to true. If this is set
7 | * to false, the return will be true for any non-truthy type, i.e.:
8 | * false, 0, "", null, undefined
9 | *
10 | * If T is not true or false, the return is never.
11 | */
12 | export type Not< T, Strict extends boolean = true > =
13 | T extends false
14 | ? true
15 | : T extends true
16 | ? false
17 | : Strict extends false
18 | ? IsFalsy< T >
19 | : never;
20 |
--------------------------------------------------------------------------------
/lib/optional.d.ts:
--------------------------------------------------------------------------------
1 | import type { ReverseRest } from './reverse-rest'
2 | import type { Truncate } from './truncate'
3 | import type { Shift } from './shift'
4 |
5 | /**
6 | * Append an optional tuple to a required tuple.
7 | *
8 | * E.g:
9 | * AppendOptional< [ 1, 2 ], [ 3, 4 ] > outputs:
10 | * | [ 1, 2 ]
11 | * | [ 1, 2, 3 ]
12 | * | [ 1, 2, 3, 4 ]
13 | */
14 | export type AppendOptional
15 | <
16 | R extends readonly unknown[ ],
17 | O extends readonly unknown[ ]
18 | > =
19 | O[ 'length' ] extends 0 ? R :
20 | | [ ...R, ...O ]
21 | | AppendOptional< R, ReverseRest< O > >;
22 |
23 | /**
24 | * Turn the elements in T from index N into optional.
25 | */
26 | export type OptionalFrom< T extends readonly unknown[ ], N extends number > =
27 | AppendOptional< Truncate< T, N >, Shift< T, N > >;
28 |
--------------------------------------------------------------------------------
/lib/overwrite.d.ts:
--------------------------------------------------------------------------------
1 | import { LargerThan } from './larger-than'
2 | import { Shift } from './shift'
3 |
4 | /**
5 | * Overwrite the elements in tuple T1 with those in tuple T2.
6 | *
7 | * If T2 is larger than or same size as T1, T2 as is is returned.
8 | * If T2 is smaller, the returned tuple is T2 followed by the rest of the
9 | * elements in T1.
10 | */
11 | export type Overwrite
12 | <
13 | T1 extends readonly unknown[ ],
14 | T2 extends readonly unknown[ ]
15 | >=
16 | LargerThan< T2, T1, true > extends true
17 | ? T2
18 | : [ ...T2, ...Shift< T1, T2[ 'length' ] > ];
19 |
--------------------------------------------------------------------------------
/lib/rest.d.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Returns the last types of an array, excluding the first
3 | */
4 | export type Rest< T extends readonly unknown[ ] > =
5 | T extends readonly [ infer _, ...infer U ] ? U : [ ];
6 |
--------------------------------------------------------------------------------
/lib/reverse-rest.d.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Returns the first types of an array, excluding the last
3 | */
4 | export type ReverseRest< T extends readonly unknown[ ] > =
5 | T extends readonly [ ...infer U, infer _ ] ? U : [ ];
6 |
--------------------------------------------------------------------------------
/lib/reverse.d.ts:
--------------------------------------------------------------------------------
1 | import type { Rest } from './rest'
2 | import type { First } from './first'
3 |
4 |
5 | /**
6 | * Reverse the order of the elements in tuple T
7 | */
8 | export type Reverse
9 | <
10 | T extends readonly unknown[ ],
11 | Ret extends unknown[ ] = [ ]
12 | > =
13 | T[ 'length' ] extends 0
14 | ? Ret
15 | : Reverse< Rest< T >, [ First< T >, ...Ret ] >;
16 |
--------------------------------------------------------------------------------
/lib/same-length.d.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Return true if tuple A has the same length as tuple B
3 | */
4 | export type SameLength
5 | <
6 | A extends readonly unknown[ ],
7 | B extends readonly unknown[ ]
8 | > =
9 | A[ 'length' ] extends B[ 'length' ] ? true : false;
10 |
--------------------------------------------------------------------------------
/lib/shift.d.ts:
--------------------------------------------------------------------------------
1 | //
2 | // This is the generic solution - doesn't scale very well with TypeScript:
3 | //
4 | // type Shift
5 | // <
6 | // T extends readonly unknown[ ],
7 | // N extends number,
8 | // Trash extends unknown[ ] = [ ]
9 | // > =
10 | // N extends Trash[ 'length' ]
11 | // ? T
12 | // : Shift< Rest< T >, N, [ ...Trash, First< T > ] >;
13 |
14 | /**
15 | * Remove N first elements from array
16 | */
17 | export type Shift< T extends readonly unknown[ ], N extends number > =
18 | N extends 0
19 | ? T
20 | : T extends readonly [ infer T1, infer T2, infer T3, infer T4, ...infer Tx ]
21 | ? N extends 1 ? [ T2, T3, T4, ...Tx ]
22 | : N extends 2 ? [ T3, T4, ...Tx ]
23 | : N extends 3 ? [ T4, ...Tx ]
24 | : N extends 4 ? Tx
25 | : [ ] // This is the above-max-limit fallback
26 | : T extends readonly [ infer T1, infer T2, infer T3 ]
27 | ? N extends 1 ? [ T2, T3 ]
28 | : N extends 2 ? [ T3 ]
29 | : [ ]
30 | : T extends readonly [ infer T1, infer T2 ]
31 | ? N extends 1 ? [ T2 ]
32 | : [ ]
33 | : T extends readonly [ infer T1 ]
34 | ? [ ]
35 | : [ ]
36 | ;
37 |
--------------------------------------------------------------------------------
/lib/slice.d.ts:
--------------------------------------------------------------------------------
1 | import type { Shift } from './shift'
2 | import type { Add } from './add'
3 | import type { Truncate } from './truncate'
4 |
5 |
6 | /**
7 | * Slice a tuple from Start to (and not including) End
8 | *
9 | * Set Inclusive to true, to have End be inclusive
10 | */
11 | export type Slice
12 | <
13 | T extends readonly unknown[ ],
14 | Start extends number = 0,
15 | End extends number = -1,
16 | Inclusive = false,
17 | > =
18 | End extends -1
19 | ? Shift< T, Start >
20 | : Inclusive extends true
21 | ? Shift< Truncate< T, Add< End, 1 > >, Start >
22 | : Shift< Truncate< T, End >, Start >;
23 |
--------------------------------------------------------------------------------
/lib/sub.d.ts:
--------------------------------------------------------------------------------
1 | /**
2 | * Subtract {B} from {A}.
3 | */
4 | export type Sub< A extends number, B extends number > =
5 | A extends keyof SubMap ? B extends keyof SubMap[ A ] ? SubMap[ A ][ B ]
6 | : never
7 | : never;
8 |
9 | type SubMap = {
10 | '-1': { '-1': 0; 0: -1; 1: -2; };
11 | 0: { '-1': 1; 0: 0; 1: -1; 2: -2; };
12 | 1: { '-1': 2; 0: 1; 1: 0; 2: -1; 3: -2; };
13 | 2: { '-1': 3; 0: 2; 1: 1; 2: 0; 3: -1; 4: -2; };
14 | 3: { '-1': 4; 0: 3; 1: 2; 2: 1; 3: 0; 4: -1; 5: -2; };
15 | 4: { '-1': 5; 0: 4; 1: 3; 2: 2; 3: 1; 4: 0; 5: -1; 6: -2; };
16 | 5: { '-1': 6; 0: 5; 1: 4; 2: 3; 3: 2; 4: 1; 5: 0; 6: -1; 7: -2; };
17 | 6: { '-1': 7; 0: 6; 1: 5; 2: 4; 3: 3; 4: 2; 5: 1; 6: 0; 7: -1; 8: -2; };
18 | 7: { '-1': 8; 0: 7; 1: 6; 2: 5; 3: 4; 4: 3; 5: 2; 6: 1; 7: 0; 8: -1; 9: -2; };
19 | 8: { '-1': 9; 0: 8; 1: 7; 2: 6; 3: 5; 4: 4; 5: 3; 6: 2; 7: 1; 8: 0; 9: -1; 10: -2; };
20 | 9: { '-1': 10; 0: 9; 1: 8; 2: 7; 3: 6; 4: 5; 5: 4; 6: 3; 7: 2; 8: 1; 9: 0; 10: -1; 11: -2; };
21 | 10: { '-1': 11; 0: 10; 1: 9; 2: 8; 3: 7; 4: 6; 5: 5; 6: 4; 7: 3; 8: 2; 9: 1; 10: 0; 11: -1; 12: -2; };
22 | 11: { '-1': 12; 0: 11; 1: 10; 2: 9; 3: 8; 4: 7; 5: 6; 6: 5; 7: 4; 8: 3; 9: 2; 10: 1; 11: 0; 12: -1; 13: -2; };
23 | 12: { '-1': 13; 0: 12; 1: 11; 2: 10; 3: 9; 4: 8; 5: 7; 6: 6; 7: 5; 8: 4; 9: 3; 10: 2; 11: 1; 12: 0; 13: -1; 14: -2; };
24 | 13: { '-1': 14; 0: 13; 1: 12; 2: 11; 3: 10; 4: 9; 5: 8; 6: 7; 7: 6; 8: 5; 9: 4; 10: 3; 11: 2; 12: 1; 13: 0; 14: -1; 15: -2; };
25 | 14: { '-1': 15; 0: 14; 1: 13; 2: 12; 3: 11; 4: 10; 5: 9; 6: 8; 7: 7; 8: 6; 9: 5; 10: 4; 11: 3; 12: 2; 13: 1; 14: 0; 15: -1; 16: -2; };
26 | 15: { '-1': 16; 0: 15; 1: 14; 2: 13; 3: 12; 4: 11; 5: 10; 6: 9; 7: 8; 8: 7; 9: 6; 10: 5; 11: 4; 12: 3; 13: 2; 14: 1; 15: 0; 16: -1; 17: -2; };
27 | 16: { '-1': 17; 0: 16; 1: 15; 2: 14; 3: 13; 4: 12; 5: 11; 6: 10; 7: 9; 8: 8; 9: 7; 10: 6; 11: 5; 12: 4; 13: 3; 14: 2; 15: 1; 16: 0; 17: -1; 18: -2; };
28 | 17: { '-1': 18; 0: 17; 1: 16; 2: 15; 3: 14; 4: 13; 5: 12; 6: 11; 7: 10; 8: 9; 9: 8; 10: 7; 11: 6; 12: 5; 13: 4; 14: 3; 15: 2; 16: 1; 17: 0; 18: -1; 19: -2; };
29 | 18: { '-1': 19; 0: 18; 1: 17; 2: 16; 3: 15; 4: 14; 5: 13; 6: 12; 7: 11; 8: 10; 9: 9; 10: 8; 11: 7; 12: 6; 13: 5; 14: 4; 15: 3; 16: 2; 17: 1; 18: 0; 19: -1; 20: -2; };
30 | 19: { '-1': 20; 0: 19; 1: 18; 2: 17; 3: 16; 4: 15; 5: 14; 6: 13; 7: 12; 8: 11; 9: 10; 10: 9; 11: 8; 12: 7; 13: 6; 14: 5; 15: 4; 16: 3; 17: 2; 18: 1; 19: 0; 20: -1; 21: -2; };
31 | 20: { '-1': 21; 0: 20; 1: 19; 2: 18; 3: 17; 4: 16; 5: 15; 6: 14; 7: 13; 8: 12; 9: 11; 10: 10; 11: 9; 12: 8; 13: 7; 14: 6; 15: 5; 16: 4; 17: 3; 18: 2; 19: 1; 20: 0; 21: -1; 22: -2; };
32 | 21: { '-1': 22; 0: 21; 1: 20; 2: 19; 3: 18; 4: 17; 5: 16; 6: 15; 7: 14; 8: 13; 9: 12; 10: 11; 11: 10; 12: 9; 13: 8; 14: 7; 15: 6; 16: 5; 17: 4; 18: 3; 19: 2; 20: 1; 21: 0; 22: -1; 23: -2; };
33 | 22: { '-1': 23; 0: 22; 1: 21; 2: 20; 3: 19; 4: 18; 5: 17; 6: 16; 7: 15; 8: 14; 9: 13; 10: 12; 11: 11; 12: 10; 13: 9; 14: 8; 15: 7; 16: 6; 17: 5; 18: 4; 19: 3; 20: 2; 21: 1; 22: 0; 23: -1; 24: -2; };
34 | 23: { '-1': 24; 0: 23; 1: 22; 2: 21; 3: 20; 4: 19; 5: 18; 6: 17; 7: 16; 8: 15; 9: 14; 10: 13; 11: 12; 12: 11; 13: 10; 14: 9; 15: 8; 16: 7; 17: 6; 18: 5; 19: 4; 20: 3; 21: 2; 22: 1; 23: 0; 24: -1; 25: -2; };
35 | 24: { '-1': 25; 0: 24; 1: 23; 2: 22; 3: 21; 4: 20; 5: 19; 6: 18; 7: 17; 8: 16; 9: 15; 10: 14; 11: 13; 12: 12; 13: 11; 14: 10; 15: 9; 16: 8; 17: 7; 18: 6; 19: 5; 20: 4; 21: 3; 22: 2; 23: 1; 24: 0; 25: -1; 26: -2; };
36 | 25: { '-1': 26; 0: 25; 1: 24; 2: 23; 3: 22; 4: 21; 5: 20; 6: 19; 7: 18; 8: 17; 9: 16; 10: 15; 11: 14; 12: 13; 13: 12; 14: 11; 15: 10; 16: 9; 17: 8; 18: 7; 19: 6; 20: 5; 21: 4; 22: 3; 23: 2; 24: 1; 25: 0; 26: -1; 27: -2; };
37 | 26: { '-1': 27; 0: 26; 1: 25; 2: 24; 3: 23; 4: 22; 5: 21; 6: 20; 7: 19; 8: 18; 9: 17; 10: 16; 11: 15; 12: 14; 13: 13; 14: 12; 15: 11; 16: 10; 17: 9; 18: 8; 19: 7; 20: 6; 21: 5; 22: 4; 23: 3; 24: 2; 25: 1; 26: 0; 27: -1; 28: -2; };
38 | 27: { '-1': 28; 0: 27; 1: 26; 2: 25; 3: 24; 4: 23; 5: 22; 6: 21; 7: 20; 8: 19; 9: 18; 10: 17; 11: 16; 12: 15; 13: 14; 14: 13; 15: 12; 16: 11; 17: 10; 18: 9; 19: 8; 20: 7; 21: 6; 22: 5; 23: 4; 24: 3; 25: 2; 26: 1; 27: 0; 28: -1; 29: -2; };
39 | 28: { '-1': 29; 0: 28; 1: 27; 2: 26; 3: 25; 4: 24; 5: 23; 6: 22; 7: 21; 8: 20; 9: 19; 10: 18; 11: 17; 12: 16; 13: 15; 14: 14; 15: 13; 16: 12; 17: 11; 18: 10; 19: 9; 20: 8; 21: 7; 22: 6; 23: 5; 24: 4; 25: 3; 26: 2; 27: 1; 28: 0; 29: -1; 30: -2; };
40 | 29: { '-1': 30; 0: 29; 1: 28; 2: 27; 3: 26; 4: 25; 5: 24; 6: 23; 7: 22; 8: 21; 9: 20; 10: 19; 11: 18; 12: 17; 13: 16; 14: 15; 15: 14; 16: 13; 17: 12; 18: 11; 19: 10; 20: 9; 21: 8; 22: 7; 23: 6; 24: 5; 25: 4; 26: 3; 27: 2; 28: 1; 29: 0; 30: -1; 31: -2; };
41 | 30: { '-1': 31; 0: 30; 1: 29; 2: 28; 3: 27; 4: 26; 5: 25; 6: 24; 7: 23; 8: 22; 9: 21; 10: 20; 11: 19; 12: 18; 13: 17; 14: 16; 15: 15; 16: 14; 17: 13; 18: 12; 19: 11; 20: 10; 21: 9; 22: 8; 23: 7; 24: 6; 25: 5; 26: 4; 27: 3; 28: 2; 29: 1; 30: 0; 31: -1; 32: -2; };
42 | 31: { '-1': 32; 0: 31; 1: 30; 2: 29; 3: 28; 4: 27; 5: 26; 6: 25; 7: 24; 8: 23; 9: 22; 10: 21; 11: 20; 12: 19; 13: 18; 14: 17; 15: 16; 16: 15; 17: 14; 18: 13; 19: 12; 20: 11; 21: 10; 22: 9; 23: 8; 24: 7; 25: 6; 26: 5; 27: 4; 28: 3; 29: 2; 30: 1; 31: 0; 32: -1; 33: -2; };
43 | 32: { '-1': 33; 0: 32; 1: 31; 2: 30; 3: 29; 4: 28; 5: 27; 6: 26; 7: 25; 8: 24; 9: 23; 10: 22; 11: 21; 12: 20; 13: 19; 14: 18; 15: 17; 16: 16; 17: 15; 18: 14; 19: 13; 20: 12; 21: 11; 22: 10; 23: 9; 24: 8; 25: 7; 26: 6; 27: 5; 28: 4; 29: 3; 30: 2; 31: 1; 32: 0; 33: -1; 34: -2; };
44 | 33: { '-1': 34; 0: 33; 1: 32; 2: 31; 3: 30; 4: 29; 5: 28; 6: 27; 7: 26; 8: 25; 9: 24; 10: 23; 11: 22; 12: 21; 13: 20; 14: 19; 15: 18; 16: 17; 17: 16; 18: 15; 19: 14; 20: 13; 21: 12; 22: 11; 23: 10; 24: 9; 25: 8; 26: 7; 27: 6; 28: 5; 29: 4; 30: 3; 31: 2; 32: 1; 33: 0; 34: -1; 35: -2; };
45 | 34: { '-1': 35; 0: 34; 1: 33; 2: 32; 3: 31; 4: 30; 5: 29; 6: 28; 7: 27; 8: 26; 9: 25; 10: 24; 11: 23; 12: 22; 13: 21; 14: 20; 15: 19; 16: 18; 17: 17; 18: 16; 19: 15; 20: 14; 21: 13; 22: 12; 23: 11; 24: 10; 25: 9; 26: 8; 27: 7; 28: 6; 29: 5; 30: 4; 31: 3; 32: 2; 33: 1; 34: 0; 35: -1; 36: -2; };
46 | 35: { '-1': 36; 0: 35; 1: 34; 2: 33; 3: 32; 4: 31; 5: 30; 6: 29; 7: 28; 8: 27; 9: 26; 10: 25; 11: 24; 12: 23; 13: 22; 14: 21; 15: 20; 16: 19; 17: 18; 18: 17; 19: 16; 20: 15; 21: 14; 22: 13; 23: 12; 24: 11; 25: 10; 26: 9; 27: 8; 28: 7; 29: 6; 30: 5; 31: 4; 32: 3; 33: 2; 34: 1; 35: 0; 36: -1; 37: -2; };
47 | 36: { '-1': 37; 0: 36; 1: 35; 2: 34; 3: 33; 4: 32; 5: 31; 6: 30; 7: 29; 8: 28; 9: 27; 10: 26; 11: 25; 12: 24; 13: 23; 14: 22; 15: 21; 16: 20; 17: 19; 18: 18; 19: 17; 20: 16; 21: 15; 22: 14; 23: 13; 24: 12; 25: 11; 26: 10; 27: 9; 28: 8; 29: 7; 30: 6; 31: 5; 32: 4; 33: 3; 34: 2; 35: 1; 36: 0; 37: -1; 38: -2; };
48 | 37: { '-1': 38; 0: 37; 1: 36; 2: 35; 3: 34; 4: 33; 5: 32; 6: 31; 7: 30; 8: 29; 9: 28; 10: 27; 11: 26; 12: 25; 13: 24; 14: 23; 15: 22; 16: 21; 17: 20; 18: 19; 19: 18; 20: 17; 21: 16; 22: 15; 23: 14; 24: 13; 25: 12; 26: 11; 27: 10; 28: 9; 29: 8; 30: 7; 31: 6; 32: 5; 33: 4; 34: 3; 35: 2; 36: 1; 37: 0; 38: -1; 39: -2; };
49 | 38: { '-1': 39; 0: 38; 1: 37; 2: 36; 3: 35; 4: 34; 5: 33; 6: 32; 7: 31; 8: 30; 9: 29; 10: 28; 11: 27; 12: 26; 13: 25; 14: 24; 15: 23; 16: 22; 17: 21; 18: 20; 19: 19; 20: 18; 21: 17; 22: 16; 23: 15; 24: 14; 25: 13; 26: 12; 27: 11; 28: 10; 29: 9; 30: 8; 31: 7; 32: 6; 33: 5; 34: 4; 35: 3; 36: 2; 37: 1; 38: 0; 39: -1; 40: -2; };
50 | 39: { '-1': 40; 0: 39; 1: 38; 2: 37; 3: 36; 4: 35; 5: 34; 6: 33; 7: 32; 8: 31; 9: 30; 10: 29; 11: 28; 12: 27; 13: 26; 14: 25; 15: 24; 16: 23; 17: 22; 18: 21; 19: 20; 20: 19; 21: 18; 22: 17; 23: 16; 24: 15; 25: 14; 26: 13; 27: 12; 28: 11; 29: 10; 30: 9; 31: 8; 32: 7; 33: 6; 34: 5; 35: 4; 36: 3; 37: 2; 38: 1; 39: 0; 40: -1; 41: -2; };
51 | 40: { '-1': 41; 0: 40; 1: 39; 2: 38; 3: 37; 4: 36; 5: 35; 6: 34; 7: 33; 8: 32; 9: 31; 10: 30; 11: 29; 12: 28; 13: 27; 14: 26; 15: 25; 16: 24; 17: 23; 18: 22; 19: 21; 20: 20; 21: 19; 22: 18; 23: 17; 24: 16; 25: 15; 26: 14; 27: 13; 28: 12; 29: 11; 30: 10; 31: 9; 32: 8; 33: 7; 34: 6; 35: 5; 36: 4; 37: 3; 38: 2; 39: 1; 40: 0; 41: -1; 42: -2; };
52 | 41: { '-1': 42; 0: 41; 1: 40; 2: 39; 3: 38; 4: 37; 5: 36; 6: 35; 7: 34; 8: 33; 9: 32; 10: 31; 11: 30; 12: 29; 13: 28; 14: 27; 15: 26; 16: 25; 17: 24; 18: 23; 19: 22; 20: 21; 21: 20; 22: 19; 23: 18; 24: 17; 25: 16; 26: 15; 27: 14; 28: 13; 29: 12; 30: 11; 31: 10; 32: 9; 33: 8; 34: 7; 35: 6; 36: 5; 37: 4; 38: 3; 39: 2; 40: 1; 41: 0; 42: -1; 43: -2; };
53 | 42: { '-1': 43; 0: 42; 1: 41; 2: 40; 3: 39; 4: 38; 5: 37; 6: 36; 7: 35; 8: 34; 9: 33; 10: 32; 11: 31; 12: 30; 13: 29; 14: 28; 15: 27; 16: 26; 17: 25; 18: 24; 19: 23; 20: 22; 21: 21; 22: 20; 23: 19; 24: 18; 25: 17; 26: 16; 27: 15; 28: 14; 29: 13; 30: 12; 31: 11; 32: 10; 33: 9; 34: 8; 35: 7; 36: 6; 37: 5; 38: 4; 39: 3; 40: 2; 41: 1; 42: 0; 43: -1; 44: -2; };
54 | 43: { '-1': 44; 0: 43; 1: 42; 2: 41; 3: 40; 4: 39; 5: 38; 6: 37; 7: 36; 8: 35; 9: 34; 10: 33; 11: 32; 12: 31; 13: 30; 14: 29; 15: 28; 16: 27; 17: 26; 18: 25; 19: 24; 20: 23; 21: 22; 22: 21; 23: 20; 24: 19; 25: 18; 26: 17; 27: 16; 28: 15; 29: 14; 30: 13; 31: 12; 32: 11; 33: 10; 34: 9; 35: 8; 36: 7; 37: 6; 38: 5; 39: 4; 40: 3; 41: 2; 42: 1; 43: 0; 44: -1; 45: -2; };
55 | 44: { '-1': 45; 0: 44; 1: 43; 2: 42; 3: 41; 4: 40; 5: 39; 6: 38; 7: 37; 8: 36; 9: 35; 10: 34; 11: 33; 12: 32; 13: 31; 14: 30; 15: 29; 16: 28; 17: 27; 18: 26; 19: 25; 20: 24; 21: 23; 22: 22; 23: 21; 24: 20; 25: 19; 26: 18; 27: 17; 28: 16; 29: 15; 30: 14; 31: 13; 32: 12; 33: 11; 34: 10; 35: 9; 36: 8; 37: 7; 38: 6; 39: 5; 40: 4; 41: 3; 42: 2; 43: 1; 44: 0; 45: -1; 46: -2; };
56 | 45: { '-1': 46; 0: 45; 1: 44; 2: 43; 3: 42; 4: 41; 5: 40; 6: 39; 7: 38; 8: 37; 9: 36; 10: 35; 11: 34; 12: 33; 13: 32; 14: 31; 15: 30; 16: 29; 17: 28; 18: 27; 19: 26; 20: 25; 21: 24; 22: 23; 23: 22; 24: 21; 25: 20; 26: 19; 27: 18; 28: 17; 29: 16; 30: 15; 31: 14; 32: 13; 33: 12; 34: 11; 35: 10; 36: 9; 37: 8; 38: 7; 39: 6; 40: 5; 41: 4; 42: 3; 43: 2; 44: 1; 45: 0; 46: -1; 47: -2; };
57 | 46: { '-1': 47; 0: 46; 1: 45; 2: 44; 3: 43; 4: 42; 5: 41; 6: 40; 7: 39; 8: 38; 9: 37; 10: 36; 11: 35; 12: 34; 13: 33; 14: 32; 15: 31; 16: 30; 17: 29; 18: 28; 19: 27; 20: 26; 21: 25; 22: 24; 23: 23; 24: 22; 25: 21; 26: 20; 27: 19; 28: 18; 29: 17; 30: 16; 31: 15; 32: 14; 33: 13; 34: 12; 35: 11; 36: 10; 37: 9; 38: 8; 39: 7; 40: 6; 41: 5; 42: 4; 43: 3; 44: 2; 45: 1; 46: 0; 47: -1; 48: -2; };
58 | 47: { '-1': 48; 0: 47; 1: 46; 2: 45; 3: 44; 4: 43; 5: 42; 6: 41; 7: 40; 8: 39; 9: 38; 10: 37; 11: 36; 12: 35; 13: 34; 14: 33; 15: 32; 16: 31; 17: 30; 18: 29; 19: 28; 20: 27; 21: 26; 22: 25; 23: 24; 24: 23; 25: 22; 26: 21; 27: 20; 28: 19; 29: 18; 30: 17; 31: 16; 32: 15; 33: 14; 34: 13; 35: 12; 36: 11; 37: 10; 38: 9; 39: 8; 40: 7; 41: 6; 42: 5; 43: 4; 44: 3; 45: 2; 46: 1; 47: 0; 48: -1; 49: -2; };
59 | 48: { '-1': 49; 0: 48; 1: 47; 2: 46; 3: 45; 4: 44; 5: 43; 6: 42; 7: 41; 8: 40; 9: 39; 10: 38; 11: 37; 12: 36; 13: 35; 14: 34; 15: 33; 16: 32; 17: 31; 18: 30; 19: 29; 20: 28; 21: 27; 22: 26; 23: 25; 24: 24; 25: 23; 26: 22; 27: 21; 28: 20; 29: 19; 30: 18; 31: 17; 32: 16; 33: 15; 34: 14; 35: 13; 36: 12; 37: 11; 38: 10; 39: 9; 40: 8; 41: 7; 42: 6; 43: 5; 44: 4; 45: 3; 46: 2; 47: 1; 48: 0; 49: -1; 50: -2; };
60 | 49: { '-1': 50; 0: 49; 1: 48; 2: 47; 3: 46; 4: 45; 5: 44; 6: 43; 7: 42; 8: 41; 9: 40; 10: 39; 11: 38; 12: 37; 13: 36; 14: 35; 15: 34; 16: 33; 17: 32; 18: 31; 19: 30; 20: 29; 21: 28; 22: 27; 23: 26; 24: 25; 25: 24; 26: 23; 27: 22; 28: 21; 29: 20; 30: 19; 31: 18; 32: 17; 33: 16; 34: 15; 35: 14; 36: 13; 37: 12; 38: 11; 39: 10; 40: 9; 41: 8; 42: 7; 43: 6; 44: 5; 45: 4; 46: 3; 47: 2; 48: 1; 49: 0; 50: -1; 51: -2; };
61 | 50: { '-1': 51; 0: 50; 1: 49; 2: 48; 3: 47; 4: 46; 5: 45; 6: 44; 7: 43; 8: 42; 9: 41; 10: 40; 11: 39; 12: 38; 13: 37; 14: 36; 15: 35; 16: 34; 17: 33; 18: 32; 19: 31; 20: 30; 21: 29; 22: 28; 23: 27; 24: 26; 25: 25; 26: 24; 27: 23; 28: 22; 29: 21; 30: 20; 31: 19; 32: 18; 33: 17; 34: 16; 35: 15; 36: 14; 37: 13; 38: 12; 39: 11; 40: 10; 41: 9; 42: 8; 43: 7; 44: 6; 45: 5; 46: 4; 47: 3; 48: 2; 49: 1; 50: 0; 51: -1; 52: -2; };
62 | 51: { '-1': 52; 0: 51; 1: 50; 2: 49; 3: 48; 4: 47; 5: 46; 6: 45; 7: 44; 8: 43; 9: 42; 10: 41; 11: 40; 12: 39; 13: 38; 14: 37; 15: 36; 16: 35; 17: 34; 18: 33; 19: 32; 20: 31; 21: 30; 22: 29; 23: 28; 24: 27; 25: 26; 26: 25; 27: 24; 28: 23; 29: 22; 30: 21; 31: 20; 32: 19; 33: 18; 34: 17; 35: 16; 36: 15; 37: 14; 38: 13; 39: 12; 40: 11; 41: 10; 42: 9; 43: 8; 44: 7; 45: 6; 46: 5; 47: 4; 48: 3; 49: 2; 50: 1; 51: 0; 52: -1; 53: -2; };
63 | 52: { '-1': 53; 0: 52; 1: 51; 2: 50; 3: 49; 4: 48; 5: 47; 6: 46; 7: 45; 8: 44; 9: 43; 10: 42; 11: 41; 12: 40; 13: 39; 14: 38; 15: 37; 16: 36; 17: 35; 18: 34; 19: 33; 20: 32; 21: 31; 22: 30; 23: 29; 24: 28; 25: 27; 26: 26; 27: 25; 28: 24; 29: 23; 30: 22; 31: 21; 32: 20; 33: 19; 34: 18; 35: 17; 36: 16; 37: 15; 38: 14; 39: 13; 40: 12; 41: 11; 42: 10; 43: 9; 44: 8; 45: 7; 46: 6; 47: 5; 48: 4; 49: 3; 50: 2; 51: 1; 52: 0; 53: -1; 54: -2; };
64 | 53: { '-1': 54; 0: 53; 1: 52; 2: 51; 3: 50; 4: 49; 5: 48; 6: 47; 7: 46; 8: 45; 9: 44; 10: 43; 11: 42; 12: 41; 13: 40; 14: 39; 15: 38; 16: 37; 17: 36; 18: 35; 19: 34; 20: 33; 21: 32; 22: 31; 23: 30; 24: 29; 25: 28; 26: 27; 27: 26; 28: 25; 29: 24; 30: 23; 31: 22; 32: 21; 33: 20; 34: 19; 35: 18; 36: 17; 37: 16; 38: 15; 39: 14; 40: 13; 41: 12; 42: 11; 43: 10; 44: 9; 45: 8; 46: 7; 47: 6; 48: 5; 49: 4; 50: 3; 51: 2; 52: 1; 53: 0; 54: -1; 55: -2; };
65 | 54: { '-1': 55; 0: 54; 1: 53; 2: 52; 3: 51; 4: 50; 5: 49; 6: 48; 7: 47; 8: 46; 9: 45; 10: 44; 11: 43; 12: 42; 13: 41; 14: 40; 15: 39; 16: 38; 17: 37; 18: 36; 19: 35; 20: 34; 21: 33; 22: 32; 23: 31; 24: 30; 25: 29; 26: 28; 27: 27; 28: 26; 29: 25; 30: 24; 31: 23; 32: 22; 33: 21; 34: 20; 35: 19; 36: 18; 37: 17; 38: 16; 39: 15; 40: 14; 41: 13; 42: 12; 43: 11; 44: 10; 45: 9; 46: 8; 47: 7; 48: 6; 49: 5; 50: 4; 51: 3; 52: 2; 53: 1; 54: 0; 55: -1; 56: -2; };
66 | 55: { '-1': 56; 0: 55; 1: 54; 2: 53; 3: 52; 4: 51; 5: 50; 6: 49; 7: 48; 8: 47; 9: 46; 10: 45; 11: 44; 12: 43; 13: 42; 14: 41; 15: 40; 16: 39; 17: 38; 18: 37; 19: 36; 20: 35; 21: 34; 22: 33; 23: 32; 24: 31; 25: 30; 26: 29; 27: 28; 28: 27; 29: 26; 30: 25; 31: 24; 32: 23; 33: 22; 34: 21; 35: 20; 36: 19; 37: 18; 38: 17; 39: 16; 40: 15; 41: 14; 42: 13; 43: 12; 44: 11; 45: 10; 46: 9; 47: 8; 48: 7; 49: 6; 50: 5; 51: 4; 52: 3; 53: 2; 54: 1; 55: 0; 56: -1; 57: -2; };
67 | 56: { '-1': 57; 0: 56; 1: 55; 2: 54; 3: 53; 4: 52; 5: 51; 6: 50; 7: 49; 8: 48; 9: 47; 10: 46; 11: 45; 12: 44; 13: 43; 14: 42; 15: 41; 16: 40; 17: 39; 18: 38; 19: 37; 20: 36; 21: 35; 22: 34; 23: 33; 24: 32; 25: 31; 26: 30; 27: 29; 28: 28; 29: 27; 30: 26; 31: 25; 32: 24; 33: 23; 34: 22; 35: 21; 36: 20; 37: 19; 38: 18; 39: 17; 40: 16; 41: 15; 42: 14; 43: 13; 44: 12; 45: 11; 46: 10; 47: 9; 48: 8; 49: 7; 50: 6; 51: 5; 52: 4; 53: 3; 54: 2; 55: 1; 56: 0; 57: -1; 58: -2; };
68 | 57: { '-1': 58; 0: 57; 1: 56; 2: 55; 3: 54; 4: 53; 5: 52; 6: 51; 7: 50; 8: 49; 9: 48; 10: 47; 11: 46; 12: 45; 13: 44; 14: 43; 15: 42; 16: 41; 17: 40; 18: 39; 19: 38; 20: 37; 21: 36; 22: 35; 23: 34; 24: 33; 25: 32; 26: 31; 27: 30; 28: 29; 29: 28; 30: 27; 31: 26; 32: 25; 33: 24; 34: 23; 35: 22; 36: 21; 37: 20; 38: 19; 39: 18; 40: 17; 41: 16; 42: 15; 43: 14; 44: 13; 45: 12; 46: 11; 47: 10; 48: 9; 49: 8; 50: 7; 51: 6; 52: 5; 53: 4; 54: 3; 55: 2; 56: 1; 57: 0; 58: -1; 59: -2; };
69 | 58: { '-1': 59; 0: 58; 1: 57; 2: 56; 3: 55; 4: 54; 5: 53; 6: 52; 7: 51; 8: 50; 9: 49; 10: 48; 11: 47; 12: 46; 13: 45; 14: 44; 15: 43; 16: 42; 17: 41; 18: 40; 19: 39; 20: 38; 21: 37; 22: 36; 23: 35; 24: 34; 25: 33; 26: 32; 27: 31; 28: 30; 29: 29; 30: 28; 31: 27; 32: 26; 33: 25; 34: 24; 35: 23; 36: 22; 37: 21; 38: 20; 39: 19; 40: 18; 41: 17; 42: 16; 43: 15; 44: 14; 45: 13; 46: 12; 47: 11; 48: 10; 49: 9; 50: 8; 51: 7; 52: 6; 53: 5; 54: 4; 55: 3; 56: 2; 57: 1; 58: 0; 59: -1; 60: -2; };
70 | 59: { '-1': 60; 0: 59; 1: 58; 2: 57; 3: 56; 4: 55; 5: 54; 6: 53; 7: 52; 8: 51; 9: 50; 10: 49; 11: 48; 12: 47; 13: 46; 14: 45; 15: 44; 16: 43; 17: 42; 18: 41; 19: 40; 20: 39; 21: 38; 22: 37; 23: 36; 24: 35; 25: 34; 26: 33; 27: 32; 28: 31; 29: 30; 30: 29; 31: 28; 32: 27; 33: 26; 34: 25; 35: 24; 36: 23; 37: 22; 38: 21; 39: 20; 40: 19; 41: 18; 42: 17; 43: 16; 44: 15; 45: 14; 46: 13; 47: 12; 48: 11; 49: 10; 50: 9; 51: 8; 52: 7; 53: 6; 54: 5; 55: 4; 56: 3; 57: 2; 58: 1; 59: 0; 60: -1; 61: -2; };
71 | 60: { '-1': 61; 0: 60; 1: 59; 2: 58; 3: 57; 4: 56; 5: 55; 6: 54; 7: 53; 8: 52; 9: 51; 10: 50; 11: 49; 12: 48; 13: 47; 14: 46; 15: 45; 16: 44; 17: 43; 18: 42; 19: 41; 20: 40; 21: 39; 22: 38; 23: 37; 24: 36; 25: 35; 26: 34; 27: 33; 28: 32; 29: 31; 30: 30; 31: 29; 32: 28; 33: 27; 34: 26; 35: 25; 36: 24; 37: 23; 38: 22; 39: 21; 40: 20; 41: 19; 42: 18; 43: 17; 44: 16; 45: 15; 46: 14; 47: 13; 48: 12; 49: 11; 50: 10; 51: 9; 52: 8; 53: 7; 54: 6; 55: 5; 56: 4; 57: 3; 58: 2; 59: 1; 60: 0; 61: -1; 62: -2; };
72 | 61: { '-1': 62; 0: 61; 1: 60; 2: 59; 3: 58; 4: 57; 5: 56; 6: 55; 7: 54; 8: 53; 9: 52; 10: 51; 11: 50; 12: 49; 13: 48; 14: 47; 15: 46; 16: 45; 17: 44; 18: 43; 19: 42; 20: 41; 21: 40; 22: 39; 23: 38; 24: 37; 25: 36; 26: 35; 27: 34; 28: 33; 29: 32; 30: 31; 31: 30; 32: 29; 33: 28; 34: 27; 35: 26; 36: 25; 37: 24; 38: 23; 39: 22; 40: 21; 41: 20; 42: 19; 43: 18; 44: 17; 45: 16; 46: 15; 47: 14; 48: 13; 49: 12; 50: 11; 51: 10; 52: 9; 53: 8; 54: 7; 55: 6; 56: 5; 57: 4; 58: 3; 59: 2; 60: 1; 61: 0; 62: -1; 63: -2; };
73 | 62: { '-1': 63; 0: 62; 1: 61; 2: 60; 3: 59; 4: 58; 5: 57; 6: 56; 7: 55; 8: 54; 9: 53; 10: 52; 11: 51; 12: 50; 13: 49; 14: 48; 15: 47; 16: 46; 17: 45; 18: 44; 19: 43; 20: 42; 21: 41; 22: 40; 23: 39; 24: 38; 25: 37; 26: 36; 27: 35; 28: 34; 29: 33; 30: 32; 31: 31; 32: 30; 33: 29; 34: 28; 35: 27; 36: 26; 37: 25; 38: 24; 39: 23; 40: 22; 41: 21; 42: 20; 43: 19; 44: 18; 45: 17; 46: 16; 47: 15; 48: 14; 49: 13; 50: 12; 51: 11; 52: 10; 53: 9; 54: 8; 55: 7; 56: 6; 57: 5; 58: 4; 59: 3; 60: 2; 61: 1; 62: 0; 63: -1; 64: -2; };
74 | 63: { '-1': 64; 0: 63; 1: 62; 2: 61; 3: 60; 4: 59; 5: 58; 6: 57; 7: 56; 8: 55; 9: 54; 10: 53; 11: 52; 12: 51; 13: 50; 14: 49; 15: 48; 16: 47; 17: 46; 18: 45; 19: 44; 20: 43; 21: 42; 22: 41; 23: 40; 24: 39; 25: 38; 26: 37; 27: 36; 28: 35; 29: 34; 30: 33; 31: 32; 32: 31; 33: 30; 34: 29; 35: 28; 36: 27; 37: 26; 38: 25; 39: 24; 40: 23; 41: 22; 42: 21; 43: 20; 44: 19; 45: 18; 46: 17; 47: 16; 48: 15; 49: 14; 50: 13; 51: 12; 52: 11; 53: 10; 54: 9; 55: 8; 56: 7; 57: 6; 58: 5; 59: 4; 60: 3; 61: 2; 62: 1; 63: 0; 64: -1; 65: -2; };
75 | 64: { '-1': 65; 0: 64; 1: 63; 2: 62; 3: 61; 4: 60; 5: 59; 6: 58; 7: 57; 8: 56; 9: 55; 10: 54; 11: 53; 12: 52; 13: 51; 14: 50; 15: 49; 16: 48; 17: 47; 18: 46; 19: 45; 20: 44; 21: 43; 22: 42; 23: 41; 24: 40; 25: 39; 26: 38; 27: 37; 28: 36; 29: 35; 30: 34; 31: 33; 32: 32; 33: 31; 34: 30; 35: 29; 36: 28; 37: 27; 38: 26; 39: 25; 40: 24; 41: 23; 42: 22; 43: 21; 44: 20; 45: 19; 46: 18; 47: 17; 48: 16; 49: 15; 50: 14; 51: 13; 52: 12; 53: 11; 54: 10; 55: 9; 56: 8; 57: 7; 58: 6; 59: 5; 60: 4; 61: 3; 62: 2; 63: 1; 64: 0; 65: -1; 66: -2; };
76 | 65: { '-1': 66; 0: 65; 1: 64; 2: 63; 3: 62; 4: 61; 5: 60; 6: 59; 7: 58; 8: 57; 9: 56; 10: 55; 11: 54; 12: 53; 13: 52; 14: 51; 15: 50; 16: 49; 17: 48; 18: 47; 19: 46; 20: 45; 21: 44; 22: 43; 23: 42; 24: 41; 25: 40; 26: 39; 27: 38; 28: 37; 29: 36; 30: 35; 31: 34; 32: 33; 33: 32; 34: 31; 35: 30; 36: 29; 37: 28; 38: 27; 39: 26; 40: 25; 41: 24; 42: 23; 43: 22; 44: 21; 45: 20; 46: 19; 47: 18; 48: 17; 49: 16; 50: 15; 51: 14; 52: 13; 53: 12; 54: 11; 55: 10; 56: 9; 57: 8; 58: 7; 59: 6; 60: 5; 61: 4; 62: 3; 63: 2; 64: 1; 65: 0; 66: -1; 67: -2; };
77 | 66: { '-1': 67; 0: 66; 1: 65; 2: 64; 3: 63; 4: 62; 5: 61; 6: 60; 7: 59; 8: 58; 9: 57; 10: 56; 11: 55; 12: 54; 13: 53; 14: 52; 15: 51; 16: 50; 17: 49; 18: 48; 19: 47; 20: 46; 21: 45; 22: 44; 23: 43; 24: 42; 25: 41; 26: 40; 27: 39; 28: 38; 29: 37; 30: 36; 31: 35; 32: 34; 33: 33; 34: 32; 35: 31; 36: 30; 37: 29; 38: 28; 39: 27; 40: 26; 41: 25; 42: 24; 43: 23; 44: 22; 45: 21; 46: 20; 47: 19; 48: 18; 49: 17; 50: 16; 51: 15; 52: 14; 53: 13; 54: 12; 55: 11; 56: 10; 57: 9; 58: 8; 59: 7; 60: 6; 61: 5; 62: 4; 63: 3; 64: 2; 65: 1; 66: 0; 67: -1; 68: -2; };
78 | 67: { '-1': 68; 0: 67; 1: 66; 2: 65; 3: 64; 4: 63; 5: 62; 6: 61; 7: 60; 8: 59; 9: 58; 10: 57; 11: 56; 12: 55; 13: 54; 14: 53; 15: 52; 16: 51; 17: 50; 18: 49; 19: 48; 20: 47; 21: 46; 22: 45; 23: 44; 24: 43; 25: 42; 26: 41; 27: 40; 28: 39; 29: 38; 30: 37; 31: 36; 32: 35; 33: 34; 34: 33; 35: 32; 36: 31; 37: 30; 38: 29; 39: 28; 40: 27; 41: 26; 42: 25; 43: 24; 44: 23; 45: 22; 46: 21; 47: 20; 48: 19; 49: 18; 50: 17; 51: 16; 52: 15; 53: 14; 54: 13; 55: 12; 56: 11; 57: 10; 58: 9; 59: 8; 60: 7; 61: 6; 62: 5; 63: 4; 64: 3; 65: 2; 66: 1; 67: 0; 68: -1; 69: -2; };
79 | 68: { '-1': 69; 0: 68; 1: 67; 2: 66; 3: 65; 4: 64; 5: 63; 6: 62; 7: 61; 8: 60; 9: 59; 10: 58; 11: 57; 12: 56; 13: 55; 14: 54; 15: 53; 16: 52; 17: 51; 18: 50; 19: 49; 20: 48; 21: 47; 22: 46; 23: 45; 24: 44; 25: 43; 26: 42; 27: 41; 28: 40; 29: 39; 30: 38; 31: 37; 32: 36; 33: 35; 34: 34; 35: 33; 36: 32; 37: 31; 38: 30; 39: 29; 40: 28; 41: 27; 42: 26; 43: 25; 44: 24; 45: 23; 46: 22; 47: 21; 48: 20; 49: 19; 50: 18; 51: 17; 52: 16; 53: 15; 54: 14; 55: 13; 56: 12; 57: 11; 58: 10; 59: 9; 60: 8; 61: 7; 62: 6; 63: 5; 64: 4; 65: 3; 66: 2; 67: 1; 68: 0; 69: -1; 70: -2; };
80 | 69: { '-1': 70; 0: 69; 1: 68; 2: 67; 3: 66; 4: 65; 5: 64; 6: 63; 7: 62; 8: 61; 9: 60; 10: 59; 11: 58; 12: 57; 13: 56; 14: 55; 15: 54; 16: 53; 17: 52; 18: 51; 19: 50; 20: 49; 21: 48; 22: 47; 23: 46; 24: 45; 25: 44; 26: 43; 27: 42; 28: 41; 29: 40; 30: 39; 31: 38; 32: 37; 33: 36; 34: 35; 35: 34; 36: 33; 37: 32; 38: 31; 39: 30; 40: 29; 41: 28; 42: 27; 43: 26; 44: 25; 45: 24; 46: 23; 47: 22; 48: 21; 49: 20; 50: 19; 51: 18; 52: 17; 53: 16; 54: 15; 55: 14; 56: 13; 57: 12; 58: 11; 59: 10; 60: 9; 61: 8; 62: 7; 63: 6; 64: 5; 65: 4; 66: 3; 67: 2; 68: 1; 69: 0; 70: -1; 71: -2; };
81 | 70: { '-1': 71; 0: 70; 1: 69; 2: 68; 3: 67; 4: 66; 5: 65; 6: 64; 7: 63; 8: 62; 9: 61; 10: 60; 11: 59; 12: 58; 13: 57; 14: 56; 15: 55; 16: 54; 17: 53; 18: 52; 19: 51; 20: 50; 21: 49; 22: 48; 23: 47; 24: 46; 25: 45; 26: 44; 27: 43; 28: 42; 29: 41; 30: 40; 31: 39; 32: 38; 33: 37; 34: 36; 35: 35; 36: 34; 37: 33; 38: 32; 39: 31; 40: 30; 41: 29; 42: 28; 43: 27; 44: 26; 45: 25; 46: 24; 47: 23; 48: 22; 49: 21; 50: 20; 51: 19; 52: 18; 53: 17; 54: 16; 55: 15; 56: 14; 57: 13; 58: 12; 59: 11; 60: 10; 61: 9; 62: 8; 63: 7; 64: 6; 65: 5; 66: 4; 67: 3; 68: 2; 69: 1; 70: 0; 71: -1; 72: -2; };
82 | 71: { '-1': 72; 0: 71; 1: 70; 2: 69; 3: 68; 4: 67; 5: 66; 6: 65; 7: 64; 8: 63; 9: 62; 10: 61; 11: 60; 12: 59; 13: 58; 14: 57; 15: 56; 16: 55; 17: 54; 18: 53; 19: 52; 20: 51; 21: 50; 22: 49; 23: 48; 24: 47; 25: 46; 26: 45; 27: 44; 28: 43; 29: 42; 30: 41; 31: 40; 32: 39; 33: 38; 34: 37; 35: 36; 36: 35; 37: 34; 38: 33; 39: 32; 40: 31; 41: 30; 42: 29; 43: 28; 44: 27; 45: 26; 46: 25; 47: 24; 48: 23; 49: 22; 50: 21; 51: 20; 52: 19; 53: 18; 54: 17; 55: 16; 56: 15; 57: 14; 58: 13; 59: 12; 60: 11; 61: 10; 62: 9; 63: 8; 64: 7; 65: 6; 66: 5; 67: 4; 68: 3; 69: 2; 70: 1; 71: 0; 72: -1; 73: -2; };
83 | 72: { '-1': 73; 0: 72; 1: 71; 2: 70; 3: 69; 4: 68; 5: 67; 6: 66; 7: 65; 8: 64; 9: 63; 10: 62; 11: 61; 12: 60; 13: 59; 14: 58; 15: 57; 16: 56; 17: 55; 18: 54; 19: 53; 20: 52; 21: 51; 22: 50; 23: 49; 24: 48; 25: 47; 26: 46; 27: 45; 28: 44; 29: 43; 30: 42; 31: 41; 32: 40; 33: 39; 34: 38; 35: 37; 36: 36; 37: 35; 38: 34; 39: 33; 40: 32; 41: 31; 42: 30; 43: 29; 44: 28; 45: 27; 46: 26; 47: 25; 48: 24; 49: 23; 50: 22; 51: 21; 52: 20; 53: 19; 54: 18; 55: 17; 56: 16; 57: 15; 58: 14; 59: 13; 60: 12; 61: 11; 62: 10; 63: 9; 64: 8; 65: 7; 66: 6; 67: 5; 68: 4; 69: 3; 70: 2; 71: 1; 72: 0; 73: -1; 74: -2; };
84 | 73: { '-1': 74; 0: 73; 1: 72; 2: 71; 3: 70; 4: 69; 5: 68; 6: 67; 7: 66; 8: 65; 9: 64; 10: 63; 11: 62; 12: 61; 13: 60; 14: 59; 15: 58; 16: 57; 17: 56; 18: 55; 19: 54; 20: 53; 21: 52; 22: 51; 23: 50; 24: 49; 25: 48; 26: 47; 27: 46; 28: 45; 29: 44; 30: 43; 31: 42; 32: 41; 33: 40; 34: 39; 35: 38; 36: 37; 37: 36; 38: 35; 39: 34; 40: 33; 41: 32; 42: 31; 43: 30; 44: 29; 45: 28; 46: 27; 47: 26; 48: 25; 49: 24; 50: 23; 51: 22; 52: 21; 53: 20; 54: 19; 55: 18; 56: 17; 57: 16; 58: 15; 59: 14; 60: 13; 61: 12; 62: 11; 63: 10; 64: 9; 65: 8; 66: 7; 67: 6; 68: 5; 69: 4; 70: 3; 71: 2; 72: 1; 73: 0; 74: -1; 75: -2; };
85 | 74: { '-1': 75; 0: 74; 1: 73; 2: 72; 3: 71; 4: 70; 5: 69; 6: 68; 7: 67; 8: 66; 9: 65; 10: 64; 11: 63; 12: 62; 13: 61; 14: 60; 15: 59; 16: 58; 17: 57; 18: 56; 19: 55; 20: 54; 21: 53; 22: 52; 23: 51; 24: 50; 25: 49; 26: 48; 27: 47; 28: 46; 29: 45; 30: 44; 31: 43; 32: 42; 33: 41; 34: 40; 35: 39; 36: 38; 37: 37; 38: 36; 39: 35; 40: 34; 41: 33; 42: 32; 43: 31; 44: 30; 45: 29; 46: 28; 47: 27; 48: 26; 49: 25; 50: 24; 51: 23; 52: 22; 53: 21; 54: 20; 55: 19; 56: 18; 57: 17; 58: 16; 59: 15; 60: 14; 61: 13; 62: 12; 63: 11; 64: 10; 65: 9; 66: 8; 67: 7; 68: 6; 69: 5; 70: 4; 71: 3; 72: 2; 73: 1; 74: 0; 75: -1; 76: -2; };
86 | 75: { '-1': 76; 0: 75; 1: 74; 2: 73; 3: 72; 4: 71; 5: 70; 6: 69; 7: 68; 8: 67; 9: 66; 10: 65; 11: 64; 12: 63; 13: 62; 14: 61; 15: 60; 16: 59; 17: 58; 18: 57; 19: 56; 20: 55; 21: 54; 22: 53; 23: 52; 24: 51; 25: 50; 26: 49; 27: 48; 28: 47; 29: 46; 30: 45; 31: 44; 32: 43; 33: 42; 34: 41; 35: 40; 36: 39; 37: 38; 38: 37; 39: 36; 40: 35; 41: 34; 42: 33; 43: 32; 44: 31; 45: 30; 46: 29; 47: 28; 48: 27; 49: 26; 50: 25; 51: 24; 52: 23; 53: 22; 54: 21; 55: 20; 56: 19; 57: 18; 58: 17; 59: 16; 60: 15; 61: 14; 62: 13; 63: 12; 64: 11; 65: 10; 66: 9; 67: 8; 68: 7; 69: 6; 70: 5; 71: 4; 72: 3; 73: 2; 74: 1; 75: 0; 76: -1; 77: -2; };
87 | 76: { '-1': 77; 0: 76; 1: 75; 2: 74; 3: 73; 4: 72; 5: 71; 6: 70; 7: 69; 8: 68; 9: 67; 10: 66; 11: 65; 12: 64; 13: 63; 14: 62; 15: 61; 16: 60; 17: 59; 18: 58; 19: 57; 20: 56; 21: 55; 22: 54; 23: 53; 24: 52; 25: 51; 26: 50; 27: 49; 28: 48; 29: 47; 30: 46; 31: 45; 32: 44; 33: 43; 34: 42; 35: 41; 36: 40; 37: 39; 38: 38; 39: 37; 40: 36; 41: 35; 42: 34; 43: 33; 44: 32; 45: 31; 46: 30; 47: 29; 48: 28; 49: 27; 50: 26; 51: 25; 52: 24; 53: 23; 54: 22; 55: 21; 56: 20; 57: 19; 58: 18; 59: 17; 60: 16; 61: 15; 62: 14; 63: 13; 64: 12; 65: 11; 66: 10; 67: 9; 68: 8; 69: 7; 70: 6; 71: 5; 72: 4; 73: 3; 74: 2; 75: 1; 76: 0; 77: -1; 78: -2; };
88 | 77: { '-1': 78; 0: 77; 1: 76; 2: 75; 3: 74; 4: 73; 5: 72; 6: 71; 7: 70; 8: 69; 9: 68; 10: 67; 11: 66; 12: 65; 13: 64; 14: 63; 15: 62; 16: 61; 17: 60; 18: 59; 19: 58; 20: 57; 21: 56; 22: 55; 23: 54; 24: 53; 25: 52; 26: 51; 27: 50; 28: 49; 29: 48; 30: 47; 31: 46; 32: 45; 33: 44; 34: 43; 35: 42; 36: 41; 37: 40; 38: 39; 39: 38; 40: 37; 41: 36; 42: 35; 43: 34; 44: 33; 45: 32; 46: 31; 47: 30; 48: 29; 49: 28; 50: 27; 51: 26; 52: 25; 53: 24; 54: 23; 55: 22; 56: 21; 57: 20; 58: 19; 59: 18; 60: 17; 61: 16; 62: 15; 63: 14; 64: 13; 65: 12; 66: 11; 67: 10; 68: 9; 69: 8; 70: 7; 71: 6; 72: 5; 73: 4; 74: 3; 75: 2; 76: 1; 77: 0; 78: -1; 79: -2; };
89 | 78: { '-1': 79; 0: 78; 1: 77; 2: 76; 3: 75; 4: 74; 5: 73; 6: 72; 7: 71; 8: 70; 9: 69; 10: 68; 11: 67; 12: 66; 13: 65; 14: 64; 15: 63; 16: 62; 17: 61; 18: 60; 19: 59; 20: 58; 21: 57; 22: 56; 23: 55; 24: 54; 25: 53; 26: 52; 27: 51; 28: 50; 29: 49; 30: 48; 31: 47; 32: 46; 33: 45; 34: 44; 35: 43; 36: 42; 37: 41; 38: 40; 39: 39; 40: 38; 41: 37; 42: 36; 43: 35; 44: 34; 45: 33; 46: 32; 47: 31; 48: 30; 49: 29; 50: 28; 51: 27; 52: 26; 53: 25; 54: 24; 55: 23; 56: 22; 57: 21; 58: 20; 59: 19; 60: 18; 61: 17; 62: 16; 63: 15; 64: 14; 65: 13; 66: 12; 67: 11; 68: 10; 69: 9; 70: 8; 71: 7; 72: 6; 73: 5; 74: 4; 75: 3; 76: 2; 77: 1; 78: 0; 79: -1; 80: -2; };
90 | 79: { '-1': 80; 0: 79; 1: 78; 2: 77; 3: 76; 4: 75; 5: 74; 6: 73; 7: 72; 8: 71; 9: 70; 10: 69; 11: 68; 12: 67; 13: 66; 14: 65; 15: 64; 16: 63; 17: 62; 18: 61; 19: 60; 20: 59; 21: 58; 22: 57; 23: 56; 24: 55; 25: 54; 26: 53; 27: 52; 28: 51; 29: 50; 30: 49; 31: 48; 32: 47; 33: 46; 34: 45; 35: 44; 36: 43; 37: 42; 38: 41; 39: 40; 40: 39; 41: 38; 42: 37; 43: 36; 44: 35; 45: 34; 46: 33; 47: 32; 48: 31; 49: 30; 50: 29; 51: 28; 52: 27; 53: 26; 54: 25; 55: 24; 56: 23; 57: 22; 58: 21; 59: 20; 60: 19; 61: 18; 62: 17; 63: 16; 64: 15; 65: 14; 66: 13; 67: 12; 68: 11; 69: 10; 70: 9; 71: 8; 72: 7; 73: 6; 74: 5; 75: 4; 76: 3; 77: 2; 78: 1; 79: 0; 80: -1; 81: -2; };
91 | 80: { '-1': 81; 0: 80; 1: 79; 2: 78; 3: 77; 4: 76; 5: 75; 6: 74; 7: 73; 8: 72; 9: 71; 10: 70; 11: 69; 12: 68; 13: 67; 14: 66; 15: 65; 16: 64; 17: 63; 18: 62; 19: 61; 20: 60; 21: 59; 22: 58; 23: 57; 24: 56; 25: 55; 26: 54; 27: 53; 28: 52; 29: 51; 30: 50; 31: 49; 32: 48; 33: 47; 34: 46; 35: 45; 36: 44; 37: 43; 38: 42; 39: 41; 40: 40; 41: 39; 42: 38; 43: 37; 44: 36; 45: 35; 46: 34; 47: 33; 48: 32; 49: 31; 50: 30; 51: 29; 52: 28; 53: 27; 54: 26; 55: 25; 56: 24; 57: 23; 58: 22; 59: 21; 60: 20; 61: 19; 62: 18; 63: 17; 64: 16; 65: 15; 66: 14; 67: 13; 68: 12; 69: 11; 70: 10; 71: 9; 72: 8; 73: 7; 74: 6; 75: 5; 76: 4; 77: 3; 78: 2; 79: 1; 80: 0; 81: -1; 82: -2; };
92 | 81: { '-1': 82; 0: 81; 1: 80; 2: 79; 3: 78; 4: 77; 5: 76; 6: 75; 7: 74; 8: 73; 9: 72; 10: 71; 11: 70; 12: 69; 13: 68; 14: 67; 15: 66; 16: 65; 17: 64; 18: 63; 19: 62; 20: 61; 21: 60; 22: 59; 23: 58; 24: 57; 25: 56; 26: 55; 27: 54; 28: 53; 29: 52; 30: 51; 31: 50; 32: 49; 33: 48; 34: 47; 35: 46; 36: 45; 37: 44; 38: 43; 39: 42; 40: 41; 41: 40; 42: 39; 43: 38; 44: 37; 45: 36; 46: 35; 47: 34; 48: 33; 49: 32; 50: 31; 51: 30; 52: 29; 53: 28; 54: 27; 55: 26; 56: 25; 57: 24; 58: 23; 59: 22; 60: 21; 61: 20; 62: 19; 63: 18; 64: 17; 65: 16; 66: 15; 67: 14; 68: 13; 69: 12; 70: 11; 71: 10; 72: 9; 73: 8; 74: 7; 75: 6; 76: 5; 77: 4; 78: 3; 79: 2; 80: 1; 81: 0; 82: -1; 83: -2; };
93 | 82: { '-1': 83; 0: 82; 1: 81; 2: 80; 3: 79; 4: 78; 5: 77; 6: 76; 7: 75; 8: 74; 9: 73; 10: 72; 11: 71; 12: 70; 13: 69; 14: 68; 15: 67; 16: 66; 17: 65; 18: 64; 19: 63; 20: 62; 21: 61; 22: 60; 23: 59; 24: 58; 25: 57; 26: 56; 27: 55; 28: 54; 29: 53; 30: 52; 31: 51; 32: 50; 33: 49; 34: 48; 35: 47; 36: 46; 37: 45; 38: 44; 39: 43; 40: 42; 41: 41; 42: 40; 43: 39; 44: 38; 45: 37; 46: 36; 47: 35; 48: 34; 49: 33; 50: 32; 51: 31; 52: 30; 53: 29; 54: 28; 55: 27; 56: 26; 57: 25; 58: 24; 59: 23; 60: 22; 61: 21; 62: 20; 63: 19; 64: 18; 65: 17; 66: 16; 67: 15; 68: 14; 69: 13; 70: 12; 71: 11; 72: 10; 73: 9; 74: 8; 75: 7; 76: 6; 77: 5; 78: 4; 79: 3; 80: 2; 81: 1; 82: 0; 83: -1; 84: -2; };
94 | 83: { '-1': 84; 0: 83; 1: 82; 2: 81; 3: 80; 4: 79; 5: 78; 6: 77; 7: 76; 8: 75; 9: 74; 10: 73; 11: 72; 12: 71; 13: 70; 14: 69; 15: 68; 16: 67; 17: 66; 18: 65; 19: 64; 20: 63; 21: 62; 22: 61; 23: 60; 24: 59; 25: 58; 26: 57; 27: 56; 28: 55; 29: 54; 30: 53; 31: 52; 32: 51; 33: 50; 34: 49; 35: 48; 36: 47; 37: 46; 38: 45; 39: 44; 40: 43; 41: 42; 42: 41; 43: 40; 44: 39; 45: 38; 46: 37; 47: 36; 48: 35; 49: 34; 50: 33; 51: 32; 52: 31; 53: 30; 54: 29; 55: 28; 56: 27; 57: 26; 58: 25; 59: 24; 60: 23; 61: 22; 62: 21; 63: 20; 64: 19; 65: 18; 66: 17; 67: 16; 68: 15; 69: 14; 70: 13; 71: 12; 72: 11; 73: 10; 74: 9; 75: 8; 76: 7; 77: 6; 78: 5; 79: 4; 80: 3; 81: 2; 82: 1; 83: 0; 84: -1; 85: -2; };
95 | 84: { '-1': 85; 0: 84; 1: 83; 2: 82; 3: 81; 4: 80; 5: 79; 6: 78; 7: 77; 8: 76; 9: 75; 10: 74; 11: 73; 12: 72; 13: 71; 14: 70; 15: 69; 16: 68; 17: 67; 18: 66; 19: 65; 20: 64; 21: 63; 22: 62; 23: 61; 24: 60; 25: 59; 26: 58; 27: 57; 28: 56; 29: 55; 30: 54; 31: 53; 32: 52; 33: 51; 34: 50; 35: 49; 36: 48; 37: 47; 38: 46; 39: 45; 40: 44; 41: 43; 42: 42; 43: 41; 44: 40; 45: 39; 46: 38; 47: 37; 48: 36; 49: 35; 50: 34; 51: 33; 52: 32; 53: 31; 54: 30; 55: 29; 56: 28; 57: 27; 58: 26; 59: 25; 60: 24; 61: 23; 62: 22; 63: 21; 64: 20; 65: 19; 66: 18; 67: 17; 68: 16; 69: 15; 70: 14; 71: 13; 72: 12; 73: 11; 74: 10; 75: 9; 76: 8; 77: 7; 78: 6; 79: 5; 80: 4; 81: 3; 82: 2; 83: 1; 84: 0; 85: -1; 86: -2; };
96 | 85: { '-1': 86; 0: 85; 1: 84; 2: 83; 3: 82; 4: 81; 5: 80; 6: 79; 7: 78; 8: 77; 9: 76; 10: 75; 11: 74; 12: 73; 13: 72; 14: 71; 15: 70; 16: 69; 17: 68; 18: 67; 19: 66; 20: 65; 21: 64; 22: 63; 23: 62; 24: 61; 25: 60; 26: 59; 27: 58; 28: 57; 29: 56; 30: 55; 31: 54; 32: 53; 33: 52; 34: 51; 35: 50; 36: 49; 37: 48; 38: 47; 39: 46; 40: 45; 41: 44; 42: 43; 43: 42; 44: 41; 45: 40; 46: 39; 47: 38; 48: 37; 49: 36; 50: 35; 51: 34; 52: 33; 53: 32; 54: 31; 55: 30; 56: 29; 57: 28; 58: 27; 59: 26; 60: 25; 61: 24; 62: 23; 63: 22; 64: 21; 65: 20; 66: 19; 67: 18; 68: 17; 69: 16; 70: 15; 71: 14; 72: 13; 73: 12; 74: 11; 75: 10; 76: 9; 77: 8; 78: 7; 79: 6; 80: 5; 81: 4; 82: 3; 83: 2; 84: 1; 85: 0; 86: -1; 87: -2; };
97 | 86: { '-1': 87; 0: 86; 1: 85; 2: 84; 3: 83; 4: 82; 5: 81; 6: 80; 7: 79; 8: 78; 9: 77; 10: 76; 11: 75; 12: 74; 13: 73; 14: 72; 15: 71; 16: 70; 17: 69; 18: 68; 19: 67; 20: 66; 21: 65; 22: 64; 23: 63; 24: 62; 25: 61; 26: 60; 27: 59; 28: 58; 29: 57; 30: 56; 31: 55; 32: 54; 33: 53; 34: 52; 35: 51; 36: 50; 37: 49; 38: 48; 39: 47; 40: 46; 41: 45; 42: 44; 43: 43; 44: 42; 45: 41; 46: 40; 47: 39; 48: 38; 49: 37; 50: 36; 51: 35; 52: 34; 53: 33; 54: 32; 55: 31; 56: 30; 57: 29; 58: 28; 59: 27; 60: 26; 61: 25; 62: 24; 63: 23; 64: 22; 65: 21; 66: 20; 67: 19; 68: 18; 69: 17; 70: 16; 71: 15; 72: 14; 73: 13; 74: 12; 75: 11; 76: 10; 77: 9; 78: 8; 79: 7; 80: 6; 81: 5; 82: 4; 83: 3; 84: 2; 85: 1; 86: 0; 87: -1; 88: -2; };
98 | 87: { '-1': 88; 0: 87; 1: 86; 2: 85; 3: 84; 4: 83; 5: 82; 6: 81; 7: 80; 8: 79; 9: 78; 10: 77; 11: 76; 12: 75; 13: 74; 14: 73; 15: 72; 16: 71; 17: 70; 18: 69; 19: 68; 20: 67; 21: 66; 22: 65; 23: 64; 24: 63; 25: 62; 26: 61; 27: 60; 28: 59; 29: 58; 30: 57; 31: 56; 32: 55; 33: 54; 34: 53; 35: 52; 36: 51; 37: 50; 38: 49; 39: 48; 40: 47; 41: 46; 42: 45; 43: 44; 44: 43; 45: 42; 46: 41; 47: 40; 48: 39; 49: 38; 50: 37; 51: 36; 52: 35; 53: 34; 54: 33; 55: 32; 56: 31; 57: 30; 58: 29; 59: 28; 60: 27; 61: 26; 62: 25; 63: 24; 64: 23; 65: 22; 66: 21; 67: 20; 68: 19; 69: 18; 70: 17; 71: 16; 72: 15; 73: 14; 74: 13; 75: 12; 76: 11; 77: 10; 78: 9; 79: 8; 80: 7; 81: 6; 82: 5; 83: 4; 84: 3; 85: 2; 86: 1; 87: 0; 88: -1; 89: -2; };
99 | 88: { '-1': 89; 0: 88; 1: 87; 2: 86; 3: 85; 4: 84; 5: 83; 6: 82; 7: 81; 8: 80; 9: 79; 10: 78; 11: 77; 12: 76; 13: 75; 14: 74; 15: 73; 16: 72; 17: 71; 18: 70; 19: 69; 20: 68; 21: 67; 22: 66; 23: 65; 24: 64; 25: 63; 26: 62; 27: 61; 28: 60; 29: 59; 30: 58; 31: 57; 32: 56; 33: 55; 34: 54; 35: 53; 36: 52; 37: 51; 38: 50; 39: 49; 40: 48; 41: 47; 42: 46; 43: 45; 44: 44; 45: 43; 46: 42; 47: 41; 48: 40; 49: 39; 50: 38; 51: 37; 52: 36; 53: 35; 54: 34; 55: 33; 56: 32; 57: 31; 58: 30; 59: 29; 60: 28; 61: 27; 62: 26; 63: 25; 64: 24; 65: 23; 66: 22; 67: 21; 68: 20; 69: 19; 70: 18; 71: 17; 72: 16; 73: 15; 74: 14; 75: 13; 76: 12; 77: 11; 78: 10; 79: 9; 80: 8; 81: 7; 82: 6; 83: 5; 84: 4; 85: 3; 86: 2; 87: 1; 88: 0; 89: -1; 90: -2; };
100 | 89: { '-1': 90; 0: 89; 1: 88; 2: 87; 3: 86; 4: 85; 5: 84; 6: 83; 7: 82; 8: 81; 9: 80; 10: 79; 11: 78; 12: 77; 13: 76; 14: 75; 15: 74; 16: 73; 17: 72; 18: 71; 19: 70; 20: 69; 21: 68; 22: 67; 23: 66; 24: 65; 25: 64; 26: 63; 27: 62; 28: 61; 29: 60; 30: 59; 31: 58; 32: 57; 33: 56; 34: 55; 35: 54; 36: 53; 37: 52; 38: 51; 39: 50; 40: 49; 41: 48; 42: 47; 43: 46; 44: 45; 45: 44; 46: 43; 47: 42; 48: 41; 49: 40; 50: 39; 51: 38; 52: 37; 53: 36; 54: 35; 55: 34; 56: 33; 57: 32; 58: 31; 59: 30; 60: 29; 61: 28; 62: 27; 63: 26; 64: 25; 65: 24; 66: 23; 67: 22; 68: 21; 69: 20; 70: 19; 71: 18; 72: 17; 73: 16; 74: 15; 75: 14; 76: 13; 77: 12; 78: 11; 79: 10; 80: 9; 81: 8; 82: 7; 83: 6; 84: 5; 85: 4; 86: 3; 87: 2; 88: 1; 89: 0; 90: -1; 91: -2; };
101 | 90: { '-1': 91; 0: 90; 1: 89; 2: 88; 3: 87; 4: 86; 5: 85; 6: 84; 7: 83; 8: 82; 9: 81; 10: 80; 11: 79; 12: 78; 13: 77; 14: 76; 15: 75; 16: 74; 17: 73; 18: 72; 19: 71; 20: 70; 21: 69; 22: 68; 23: 67; 24: 66; 25: 65; 26: 64; 27: 63; 28: 62; 29: 61; 30: 60; 31: 59; 32: 58; 33: 57; 34: 56; 35: 55; 36: 54; 37: 53; 38: 52; 39: 51; 40: 50; 41: 49; 42: 48; 43: 47; 44: 46; 45: 45; 46: 44; 47: 43; 48: 42; 49: 41; 50: 40; 51: 39; 52: 38; 53: 37; 54: 36; 55: 35; 56: 34; 57: 33; 58: 32; 59: 31; 60: 30; 61: 29; 62: 28; 63: 27; 64: 26; 65: 25; 66: 24; 67: 23; 68: 22; 69: 21; 70: 20; 71: 19; 72: 18; 73: 17; 74: 16; 75: 15; 76: 14; 77: 13; 78: 12; 79: 11; 80: 10; 81: 9; 82: 8; 83: 7; 84: 6; 85: 5; 86: 4; 87: 3; 88: 2; 89: 1; 90: 0; 91: -1; 92: -2; };
102 | 91: { '-1': 92; 0: 91; 1: 90; 2: 89; 3: 88; 4: 87; 5: 86; 6: 85; 7: 84; 8: 83; 9: 82; 10: 81; 11: 80; 12: 79; 13: 78; 14: 77; 15: 76; 16: 75; 17: 74; 18: 73; 19: 72; 20: 71; 21: 70; 22: 69; 23: 68; 24: 67; 25: 66; 26: 65; 27: 64; 28: 63; 29: 62; 30: 61; 31: 60; 32: 59; 33: 58; 34: 57; 35: 56; 36: 55; 37: 54; 38: 53; 39: 52; 40: 51; 41: 50; 42: 49; 43: 48; 44: 47; 45: 46; 46: 45; 47: 44; 48: 43; 49: 42; 50: 41; 51: 40; 52: 39; 53: 38; 54: 37; 55: 36; 56: 35; 57: 34; 58: 33; 59: 32; 60: 31; 61: 30; 62: 29; 63: 28; 64: 27; 65: 26; 66: 25; 67: 24; 68: 23; 69: 22; 70: 21; 71: 20; 72: 19; 73: 18; 74: 17; 75: 16; 76: 15; 77: 14; 78: 13; 79: 12; 80: 11; 81: 10; 82: 9; 83: 8; 84: 7; 85: 6; 86: 5; 87: 4; 88: 3; 89: 2; 90: 1; 91: 0; 92: -1; 93: -2; };
103 | 92: { '-1': 93; 0: 92; 1: 91; 2: 90; 3: 89; 4: 88; 5: 87; 6: 86; 7: 85; 8: 84; 9: 83; 10: 82; 11: 81; 12: 80; 13: 79; 14: 78; 15: 77; 16: 76; 17: 75; 18: 74; 19: 73; 20: 72; 21: 71; 22: 70; 23: 69; 24: 68; 25: 67; 26: 66; 27: 65; 28: 64; 29: 63; 30: 62; 31: 61; 32: 60; 33: 59; 34: 58; 35: 57; 36: 56; 37: 55; 38: 54; 39: 53; 40: 52; 41: 51; 42: 50; 43: 49; 44: 48; 45: 47; 46: 46; 47: 45; 48: 44; 49: 43; 50: 42; 51: 41; 52: 40; 53: 39; 54: 38; 55: 37; 56: 36; 57: 35; 58: 34; 59: 33; 60: 32; 61: 31; 62: 30; 63: 29; 64: 28; 65: 27; 66: 26; 67: 25; 68: 24; 69: 23; 70: 22; 71: 21; 72: 20; 73: 19; 74: 18; 75: 17; 76: 16; 77: 15; 78: 14; 79: 13; 80: 12; 81: 11; 82: 10; 83: 9; 84: 8; 85: 7; 86: 6; 87: 5; 88: 4; 89: 3; 90: 2; 91: 1; 92: 0; 93: -1; 94: -2; };
104 | 93: { '-1': 94; 0: 93; 1: 92; 2: 91; 3: 90; 4: 89; 5: 88; 6: 87; 7: 86; 8: 85; 9: 84; 10: 83; 11: 82; 12: 81; 13: 80; 14: 79; 15: 78; 16: 77; 17: 76; 18: 75; 19: 74; 20: 73; 21: 72; 22: 71; 23: 70; 24: 69; 25: 68; 26: 67; 27: 66; 28: 65; 29: 64; 30: 63; 31: 62; 32: 61; 33: 60; 34: 59; 35: 58; 36: 57; 37: 56; 38: 55; 39: 54; 40: 53; 41: 52; 42: 51; 43: 50; 44: 49; 45: 48; 46: 47; 47: 46; 48: 45; 49: 44; 50: 43; 51: 42; 52: 41; 53: 40; 54: 39; 55: 38; 56: 37; 57: 36; 58: 35; 59: 34; 60: 33; 61: 32; 62: 31; 63: 30; 64: 29; 65: 28; 66: 27; 67: 26; 68: 25; 69: 24; 70: 23; 71: 22; 72: 21; 73: 20; 74: 19; 75: 18; 76: 17; 77: 16; 78: 15; 79: 14; 80: 13; 81: 12; 82: 11; 83: 10; 84: 9; 85: 8; 86: 7; 87: 6; 88: 5; 89: 4; 90: 3; 91: 2; 92: 1; 93: 0; 94: -1; 95: -2; };
105 | 94: { '-1': 95; 0: 94; 1: 93; 2: 92; 3: 91; 4: 90; 5: 89; 6: 88; 7: 87; 8: 86; 9: 85; 10: 84; 11: 83; 12: 82; 13: 81; 14: 80; 15: 79; 16: 78; 17: 77; 18: 76; 19: 75; 20: 74; 21: 73; 22: 72; 23: 71; 24: 70; 25: 69; 26: 68; 27: 67; 28: 66; 29: 65; 30: 64; 31: 63; 32: 62; 33: 61; 34: 60; 35: 59; 36: 58; 37: 57; 38: 56; 39: 55; 40: 54; 41: 53; 42: 52; 43: 51; 44: 50; 45: 49; 46: 48; 47: 47; 48: 46; 49: 45; 50: 44; 51: 43; 52: 42; 53: 41; 54: 40; 55: 39; 56: 38; 57: 37; 58: 36; 59: 35; 60: 34; 61: 33; 62: 32; 63: 31; 64: 30; 65: 29; 66: 28; 67: 27; 68: 26; 69: 25; 70: 24; 71: 23; 72: 22; 73: 21; 74: 20; 75: 19; 76: 18; 77: 17; 78: 16; 79: 15; 80: 14; 81: 13; 82: 12; 83: 11; 84: 10; 85: 9; 86: 8; 87: 7; 88: 6; 89: 5; 90: 4; 91: 3; 92: 2; 93: 1; 94: 0; 95: -1; 96: -2; };
106 | 95: { '-1': 96; 0: 95; 1: 94; 2: 93; 3: 92; 4: 91; 5: 90; 6: 89; 7: 88; 8: 87; 9: 86; 10: 85; 11: 84; 12: 83; 13: 82; 14: 81; 15: 80; 16: 79; 17: 78; 18: 77; 19: 76; 20: 75; 21: 74; 22: 73; 23: 72; 24: 71; 25: 70; 26: 69; 27: 68; 28: 67; 29: 66; 30: 65; 31: 64; 32: 63; 33: 62; 34: 61; 35: 60; 36: 59; 37: 58; 38: 57; 39: 56; 40: 55; 41: 54; 42: 53; 43: 52; 44: 51; 45: 50; 46: 49; 47: 48; 48: 47; 49: 46; 50: 45; 51: 44; 52: 43; 53: 42; 54: 41; 55: 40; 56: 39; 57: 38; 58: 37; 59: 36; 60: 35; 61: 34; 62: 33; 63: 32; 64: 31; 65: 30; 66: 29; 67: 28; 68: 27; 69: 26; 70: 25; 71: 24; 72: 23; 73: 22; 74: 21; 75: 20; 76: 19; 77: 18; 78: 17; 79: 16; 80: 15; 81: 14; 82: 13; 83: 12; 84: 11; 85: 10; 86: 9; 87: 8; 88: 7; 89: 6; 90: 5; 91: 4; 92: 3; 93: 2; 94: 1; 95: 0; 96: -1; 97: -2; };
107 | 96: { '-1': 97; 0: 96; 1: 95; 2: 94; 3: 93; 4: 92; 5: 91; 6: 90; 7: 89; 8: 88; 9: 87; 10: 86; 11: 85; 12: 84; 13: 83; 14: 82; 15: 81; 16: 80; 17: 79; 18: 78; 19: 77; 20: 76; 21: 75; 22: 74; 23: 73; 24: 72; 25: 71; 26: 70; 27: 69; 28: 68; 29: 67; 30: 66; 31: 65; 32: 64; 33: 63; 34: 62; 35: 61; 36: 60; 37: 59; 38: 58; 39: 57; 40: 56; 41: 55; 42: 54; 43: 53; 44: 52; 45: 51; 46: 50; 47: 49; 48: 48; 49: 47; 50: 46; 51: 45; 52: 44; 53: 43; 54: 42; 55: 41; 56: 40; 57: 39; 58: 38; 59: 37; 60: 36; 61: 35; 62: 34; 63: 33; 64: 32; 65: 31; 66: 30; 67: 29; 68: 28; 69: 27; 70: 26; 71: 25; 72: 24; 73: 23; 74: 22; 75: 21; 76: 20; 77: 19; 78: 18; 79: 17; 80: 16; 81: 15; 82: 14; 83: 13; 84: 12; 85: 11; 86: 10; 87: 9; 88: 8; 89: 7; 90: 6; 91: 5; 92: 4; 93: 3; 94: 2; 95: 1; 96: 0; 97: -1; 98: -2; };
108 | 97: { '-1': 98; 0: 97; 1: 96; 2: 95; 3: 94; 4: 93; 5: 92; 6: 91; 7: 90; 8: 89; 9: 88; 10: 87; 11: 86; 12: 85; 13: 84; 14: 83; 15: 82; 16: 81; 17: 80; 18: 79; 19: 78; 20: 77; 21: 76; 22: 75; 23: 74; 24: 73; 25: 72; 26: 71; 27: 70; 28: 69; 29: 68; 30: 67; 31: 66; 32: 65; 33: 64; 34: 63; 35: 62; 36: 61; 37: 60; 38: 59; 39: 58; 40: 57; 41: 56; 42: 55; 43: 54; 44: 53; 45: 52; 46: 51; 47: 50; 48: 49; 49: 48; 50: 47; 51: 46; 52: 45; 53: 44; 54: 43; 55: 42; 56: 41; 57: 40; 58: 39; 59: 38; 60: 37; 61: 36; 62: 35; 63: 34; 64: 33; 65: 32; 66: 31; 67: 30; 68: 29; 69: 28; 70: 27; 71: 26; 72: 25; 73: 24; 74: 23; 75: 22; 76: 21; 77: 20; 78: 19; 79: 18; 80: 17; 81: 16; 82: 15; 83: 14; 84: 13; 85: 12; 86: 11; 87: 10; 88: 9; 89: 8; 90: 7; 91: 6; 92: 5; 93: 4; 94: 3; 95: 2; 96: 1; 97: 0; 98: -1; 99: -2; };
109 | 98: { '-1': 99; 0: 98; 1: 97; 2: 96; 3: 95; 4: 94; 5: 93; 6: 92; 7: 91; 8: 90; 9: 89; 10: 88; 11: 87; 12: 86; 13: 85; 14: 84; 15: 83; 16: 82; 17: 81; 18: 80; 19: 79; 20: 78; 21: 77; 22: 76; 23: 75; 24: 74; 25: 73; 26: 72; 27: 71; 28: 70; 29: 69; 30: 68; 31: 67; 32: 66; 33: 65; 34: 64; 35: 63; 36: 62; 37: 61; 38: 60; 39: 59; 40: 58; 41: 57; 42: 56; 43: 55; 44: 54; 45: 53; 46: 52; 47: 51; 48: 50; 49: 49; 50: 48; 51: 47; 52: 46; 53: 45; 54: 44; 55: 43; 56: 42; 57: 41; 58: 40; 59: 39; 60: 38; 61: 37; 62: 36; 63: 35; 64: 34; 65: 33; 66: 32; 67: 31; 68: 30; 69: 29; 70: 28; 71: 27; 72: 26; 73: 25; 74: 24; 75: 23; 76: 22; 77: 21; 78: 20; 79: 19; 80: 18; 81: 17; 82: 16; 83: 15; 84: 14; 85: 13; 86: 12; 87: 11; 88: 10; 89: 9; 90: 8; 91: 7; 92: 6; 93: 5; 94: 4; 95: 3; 96: 2; 97: 1; 98: 0; 99: -1; };
110 | 99: { '-1': 100; 0: 99; 1: 98; 2: 97; 3: 96; 4: 95; 5: 94; 6: 93; 7: 92; 8: 91; 9: 90; 10: 89; 11: 88; 12: 87; 13: 86; 14: 85; 15: 84; 16: 83; 17: 82; 18: 81; 19: 80; 20: 79; 21: 78; 22: 77; 23: 76; 24: 75; 25: 74; 26: 73; 27: 72; 28: 71; 29: 70; 30: 69; 31: 68; 32: 67; 33: 66; 34: 65; 35: 64; 36: 63; 37: 62; 38: 61; 39: 60; 40: 59; 41: 58; 42: 57; 43: 56; 44: 55; 45: 54; 46: 53; 47: 52; 48: 51; 49: 50; 50: 49; 51: 48; 52: 47; 53: 46; 54: 45; 55: 44; 56: 43; 57: 42; 58: 41; 59: 40; 60: 39; 61: 38; 62: 37; 63: 36; 64: 35; 65: 34; 66: 33; 67: 32; 68: 31; 69: 30; 70: 29; 71: 28; 72: 27; 73: 26; 74: 25; 75: 24; 76: 23; 77: 22; 78: 21; 79: 20; 80: 19; 81: 18; 82: 17; 83: 16; 84: 15; 85: 14; 86: 13; 87: 12; 88: 11; 89: 10; 90: 9; 91: 8; 92: 7; 93: 6; 94: 5; 95: 4; 96: 3; 97: 2; 98: 1; 99: 0; };
111 | };
112 |
--------------------------------------------------------------------------------
/lib/truncate.d.ts:
--------------------------------------------------------------------------------
1 | import type { ReverseRest } from "./reverse-rest"
2 |
3 | //
4 | // This is the generic solution - doesn't scale very well with TypeScript:
5 | //
6 | // type Truncate
7 | // <
8 | // T extends readonly unknown[ ],
9 | // N extends number,
10 | // Ret extends unknown[ ] = [ ]
11 | // > =
12 | // N extends Ret[ 'length' ]
13 | // ? Ret
14 | // : Truncate< Rest< T >, N, [ ...Ret, First< T > ] >;
15 |
16 |
17 | /**
18 | * Return the first N elements from array
19 | */
20 | export type Truncate< T extends readonly unknown[ ], N extends number > =
21 | N extends 0
22 | ? [ ]
23 | : T extends readonly [ ]
24 | ? [ ]
25 | : T extends readonly [
26 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7,
27 | infer T8, infer T9, infer T10, infer T11, infer T12, infer T13,
28 | infer T14, infer T15, infer T16, infer T17, infer T18, infer T19,
29 | infer T20, ...infer Tx
30 | ]
31 | ? N extends 20 ?
32 | [
33 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
34 | T15, T16, T17, T18, T19, T20
35 | ]
36 | : N extends 19 ?
37 | [
38 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
39 | T15, T16, T17, T18, T19
40 | ]
41 | : N extends 18 ?
42 | [
43 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
44 | T15, T16, T17, T18
45 | ]
46 | : N extends 17 ?
47 | [
48 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
49 | T15, T16, T17
50 | ]
51 | : N extends 16 ?
52 | [
53 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
54 | T15, T16
55 | ]
56 | : N extends 15 ?
57 | [
58 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
59 | T15
60 | ]
61 | : N extends 14 ?
62 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ]
63 | : N extends 13 ?
64 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ]
65 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ]
66 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ]
67 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 ]
68 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ]
69 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ]
70 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ]
71 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ]
72 | : N extends 5 ? [ T1, T2, T3, T4, T5 ]
73 | : N extends 4 ? [ T1, T2, T3, T4 ]
74 | : N extends 3 ? [ T1, T2, T3 ]
75 | : N extends 2 ? [ T1, T2 ]
76 | : N extends 1 ? [ T1 ]
77 | : N extends 0 ? [ ]
78 | : T // This is the above-max-limit fallback
79 | : T extends readonly [
80 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7,
81 | infer T8, infer T9, infer T10, infer T11, infer T12, infer T13,
82 | infer T14, infer T15, infer T16, infer T17, infer T18, infer T19
83 | ]
84 | ? N extends 20 ?
85 | [
86 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
87 | T15, T16, T17, T18, T19
88 | ]
89 | : N extends 19 ?
90 | [
91 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
92 | T15, T16, T17, T18, T19
93 | ]
94 | : N extends 18 ?
95 | [
96 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
97 | T15, T16, T17, T18
98 | ]
99 | : N extends 17 ?
100 | [
101 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
102 | T15, T16, T17
103 | ]
104 | : N extends 16 ?
105 | [
106 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
107 | T15, T16
108 | ]
109 | : N extends 15 ?
110 | [
111 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
112 | T15
113 | ]
114 | : N extends 14 ?
115 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ]
116 | : N extends 13 ?
117 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ]
118 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ]
119 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ]
120 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 ]
121 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ]
122 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ]
123 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ]
124 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ]
125 | : N extends 5 ? [ T1, T2, T3, T4, T5 ]
126 | : N extends 4 ? [ T1, T2, T3, T4 ]
127 | : N extends 3 ? [ T1, T2, T3 ]
128 | : N extends 2 ? [ T1, T2 ]
129 | : N extends 1 ? [ T1 ]
130 | : N extends 0 ? [ ]
131 | : [ ]
132 | : T extends readonly [
133 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7,
134 | infer T8, infer T9, infer T10, infer T11, infer T12, infer T13,
135 | infer T14, infer T15, infer T16, infer T17, infer T18
136 | ]
137 | ? N extends 20 ?
138 | [
139 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
140 | T15, T16, T17, T18
141 | ]
142 | : N extends 19 ?
143 | [
144 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
145 | T15, T16, T17, T18
146 | ]
147 | : N extends 18 ?
148 | [
149 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
150 | T15, T16, T17, T18
151 | ]
152 | : N extends 17 ?
153 | [
154 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
155 | T15, T16, T17
156 | ]
157 | : N extends 16 ?
158 | [
159 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
160 | T15, T16
161 | ]
162 | : N extends 15 ?
163 | [
164 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
165 | T15
166 | ]
167 | : N extends 14 ?
168 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ]
169 | : N extends 13 ?
170 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ]
171 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ]
172 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ]
173 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 ]
174 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ]
175 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ]
176 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ]
177 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ]
178 | : N extends 5 ? [ T1, T2, T3, T4, T5 ]
179 | : N extends 4 ? [ T1, T2, T3, T4 ]
180 | : N extends 3 ? [ T1, T2, T3 ]
181 | : N extends 2 ? [ T1, T2 ]
182 | : N extends 1 ? [ T1 ]
183 | : N extends 0 ? [ ]
184 | : [ ]
185 | : T extends readonly [
186 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7,
187 | infer T8, infer T9, infer T10, infer T11, infer T12, infer T13,
188 | infer T14, infer T15, infer T16, infer T17
189 | ]
190 | ? N extends 20 ?
191 | [
192 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
193 | T15, T16, T17
194 | ]
195 | : N extends 19 ?
196 | [
197 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
198 | T15, T16, T17
199 | ]
200 | : N extends 18 ?
201 | [
202 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
203 | T15, T16, T17
204 | ]
205 | : N extends 17 ?
206 | [
207 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
208 | T15, T16, T17
209 | ]
210 | : N extends 16 ?
211 | [
212 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
213 | T15, T16
214 | ]
215 | : N extends 15 ?
216 | [
217 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
218 | T15
219 | ]
220 | : N extends 14 ?
221 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ]
222 | : N extends 13 ?
223 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ]
224 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ]
225 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ]
226 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 ]
227 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ]
228 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ]
229 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ]
230 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ]
231 | : N extends 5 ? [ T1, T2, T3, T4, T5 ]
232 | : N extends 4 ? [ T1, T2, T3, T4 ]
233 | : N extends 3 ? [ T1, T2, T3 ]
234 | : N extends 2 ? [ T1, T2 ]
235 | : N extends 1 ? [ T1 ]
236 | : N extends 0 ? [ ]
237 | : [ ]
238 | : T extends readonly [
239 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7,
240 | infer T8, infer T9, infer T10, infer T11, infer T12, infer T13,
241 | infer T14, infer T15, infer T16
242 | ]
243 | ? N extends 20 ?
244 | [
245 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
246 | T15, T16
247 | ]
248 | : N extends 19 ?
249 | [
250 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
251 | T15, T16
252 | ]
253 | : N extends 18 ?
254 | [
255 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
256 | T15, T16
257 | ]
258 | : N extends 17 ?
259 | [
260 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
261 | T15, T16
262 | ]
263 | : N extends 16 ?
264 | [
265 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
266 | T15, T16
267 | ]
268 | : N extends 15 ?
269 | [
270 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
271 | T15
272 | ]
273 | : N extends 14 ?
274 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ]
275 | : N extends 13 ?
276 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ]
277 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ]
278 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ]
279 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 ]
280 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ]
281 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ]
282 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ]
283 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ]
284 | : N extends 5 ? [ T1, T2, T3, T4, T5 ]
285 | : N extends 4 ? [ T1, T2, T3, T4 ]
286 | : N extends 3 ? [ T1, T2, T3 ]
287 | : N extends 2 ? [ T1, T2 ]
288 | : N extends 1 ? [ T1 ]
289 | : N extends 0 ? [ ]
290 | : [ ]
291 | : T extends readonly [
292 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7,
293 | infer T8, infer T9, infer T10, infer T11, infer T12, infer T13,
294 | infer T14, infer T15
295 | ]
296 | ? N extends 20 ?
297 | [
298 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
299 | T15
300 | ]
301 | : N extends 19 ?
302 | [
303 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
304 | T15
305 | ]
306 | : N extends 18 ?
307 | [
308 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
309 | T15
310 | ]
311 | : N extends 17 ?
312 | [
313 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
314 | T15
315 | ]
316 | : N extends 16 ?
317 | [
318 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
319 | T15
320 | ]
321 | : N extends 15 ?
322 | [
323 | T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14,
324 | T15
325 | ]
326 | : N extends 14 ?
327 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ]
328 | : N extends 13 ?
329 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ]
330 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ]
331 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ]
332 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 ]
333 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ]
334 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ]
335 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ]
336 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ]
337 | : N extends 5 ? [ T1, T2, T3, T4, T5 ]
338 | : N extends 4 ? [ T1, T2, T3, T4 ]
339 | : N extends 3 ? [ T1, T2, T3 ]
340 | : N extends 2 ? [ T1, T2 ]
341 | : N extends 1 ? [ T1 ]
342 | : N extends 0 ? [ ]
343 | : [ ]
344 | : T extends readonly [
345 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7,
346 | infer T8, infer T9, infer T10, infer T11, infer T12, infer T13,
347 | infer T14
348 | ]
349 | ? N extends 20 ?
350 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ]
351 | : N extends 19 ?
352 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ]
353 | : N extends 18 ?
354 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ]
355 | : N extends 17 ?
356 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ]
357 | : N extends 16 ?
358 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ]
359 | : N extends 15 ?
360 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ]
361 | : N extends 14 ?
362 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14 ]
363 | : N extends 13 ?
364 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ]
365 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ]
366 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ]
367 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 ]
368 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ]
369 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ]
370 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ]
371 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ]
372 | : N extends 5 ? [ T1, T2, T3, T4, T5 ]
373 | : N extends 4 ? [ T1, T2, T3, T4 ]
374 | : N extends 3 ? [ T1, T2, T3 ]
375 | : N extends 2 ? [ T1, T2 ]
376 | : N extends 1 ? [ T1 ]
377 | : N extends 0 ? [ ]
378 | : [ ]
379 | : T extends readonly [
380 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7,
381 | infer T8, infer T9, infer T10, infer T11, infer T12, infer T13
382 | ]
383 | ? N extends 20 ?
384 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ]
385 | : N extends 19 ?
386 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ]
387 | : N extends 18 ?
388 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ]
389 | : N extends 17 ?
390 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ]
391 | : N extends 16 ?
392 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ]
393 | : N extends 15 ?
394 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ]
395 | : N extends 14 ?
396 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ]
397 | : N extends 13 ?
398 | [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13 ]
399 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ]
400 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ]
401 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 ]
402 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ]
403 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ]
404 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ]
405 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ]
406 | : N extends 5 ? [ T1, T2, T3, T4, T5 ]
407 | : N extends 4 ? [ T1, T2, T3, T4 ]
408 | : N extends 3 ? [ T1, T2, T3 ]
409 | : N extends 2 ? [ T1, T2 ]
410 | : N extends 1 ? [ T1 ]
411 | : N extends 0 ? [ ]
412 | : [ ]
413 | : T extends readonly [
414 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7,
415 | infer T8, infer T9, infer T10, infer T11, infer T12
416 | ]
417 | ? N extends 20 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ]
418 | : N extends 19 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ]
419 | : N extends 18 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ]
420 | : N extends 17 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ]
421 | : N extends 16 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ]
422 | : N extends 15 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ]
423 | : N extends 14 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ]
424 | : N extends 13 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ]
425 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12 ]
426 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ]
427 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 ]
428 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ]
429 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ]
430 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ]
431 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ]
432 | : N extends 5 ? [ T1, T2, T3, T4, T5 ]
433 | : N extends 4 ? [ T1, T2, T3, T4 ]
434 | : N extends 3 ? [ T1, T2, T3 ]
435 | : N extends 2 ? [ T1, T2 ]
436 | : N extends 1 ? [ T1 ]
437 | : N extends 0 ? [ ]
438 | : [ ]
439 | : T extends readonly [
440 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7,
441 | infer T8, infer T9, infer T10, infer T11
442 | ]
443 | ? N extends 20 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ]
444 | : N extends 19 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ]
445 | : N extends 18 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ]
446 | : N extends 17 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ]
447 | : N extends 16 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ]
448 | : N extends 15 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ]
449 | : N extends 14 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ]
450 | : N extends 13 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ]
451 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ]
452 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11 ]
453 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9, T10 ]
454 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ]
455 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ]
456 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ]
457 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ]
458 | : N extends 5 ? [ T1, T2, T3, T4, T5 ]
459 | : N extends 4 ? [ T1, T2, T3, T4 ]
460 | : N extends 3 ? [ T1, T2, T3 ]
461 | : N extends 2 ? [ T1, T2 ]
462 | : N extends 1 ? [ T1 ]
463 | : N extends 0 ? [ ]
464 | : [ ]
465 | : T extends readonly [
466 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7,
467 | infer T8, infer T9
468 | ]
469 | ? N extends 20 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ]
470 | : N extends 19 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ]
471 | : N extends 18 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ]
472 | : N extends 17 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ]
473 | : N extends 16 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ]
474 | : N extends 15 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ]
475 | : N extends 14 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ]
476 | : N extends 13 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ]
477 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ]
478 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ]
479 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ]
480 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7, T8, T9 ]
481 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ]
482 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ]
483 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ]
484 | : N extends 5 ? [ T1, T2, T3, T4, T5 ]
485 | : N extends 4 ? [ T1, T2, T3, T4 ]
486 | : N extends 3 ? [ T1, T2, T3 ]
487 | : N extends 2 ? [ T1, T2 ]
488 | : N extends 1 ? [ T1 ]
489 | : N extends 0 ? [ ]
490 | : [ ]
491 | : T extends readonly [
492 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7,
493 | infer T8
494 | ]
495 | ? N extends 20 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ]
496 | : N extends 19 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ]
497 | : N extends 18 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ]
498 | : N extends 17 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ]
499 | : N extends 16 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ]
500 | : N extends 15 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ]
501 | : N extends 14 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ]
502 | : N extends 13 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ]
503 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ]
504 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ]
505 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ]
506 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ]
507 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7, T8 ]
508 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ]
509 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ]
510 | : N extends 5 ? [ T1, T2, T3, T4, T5 ]
511 | : N extends 4 ? [ T1, T2, T3, T4 ]
512 | : N extends 3 ? [ T1, T2, T3 ]
513 | : N extends 2 ? [ T1, T2 ]
514 | : N extends 1 ? [ T1 ]
515 | : N extends 0 ? [ ]
516 | : [ ]
517 | : T extends readonly [
518 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6, infer T7,
519 | ]
520 | ? N extends 20 ? [ T1, T2, T3, T4, T5, T6, T7 ]
521 | : N extends 19 ? [ T1, T2, T3, T4, T5, T6, T7 ]
522 | : N extends 18 ? [ T1, T2, T3, T4, T5, T6, T7 ]
523 | : N extends 17 ? [ T1, T2, T3, T4, T5, T6, T7 ]
524 | : N extends 16 ? [ T1, T2, T3, T4, T5, T6, T7 ]
525 | : N extends 15 ? [ T1, T2, T3, T4, T5, T6, T7 ]
526 | : N extends 14 ? [ T1, T2, T3, T4, T5, T6, T7 ]
527 | : N extends 13 ? [ T1, T2, T3, T4, T5, T6, T7 ]
528 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6, T7 ]
529 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6, T7 ]
530 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6, T7 ]
531 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6, T7 ]
532 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6, T7 ]
533 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6, T7 ]
534 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ]
535 | : N extends 5 ? [ T1, T2, T3, T4, T5 ]
536 | : N extends 4 ? [ T1, T2, T3, T4 ]
537 | : N extends 3 ? [ T1, T2, T3 ]
538 | : N extends 2 ? [ T1, T2 ]
539 | : N extends 1 ? [ T1 ]
540 | : N extends 0 ? [ ]
541 | : [ ]
542 | : T extends readonly [
543 | infer T1, infer T2, infer T3, infer T4, infer T5, infer T6
544 | ]
545 | ? N extends 20 ? [ T1, T2, T3, T4, T5, T6 ]
546 | : N extends 19 ? [ T1, T2, T3, T4, T5, T6 ]
547 | : N extends 18 ? [ T1, T2, T3, T4, T5, T6 ]
548 | : N extends 17 ? [ T1, T2, T3, T4, T5, T6 ]
549 | : N extends 16 ? [ T1, T2, T3, T4, T5, T6 ]
550 | : N extends 15 ? [ T1, T2, T3, T4, T5, T6 ]
551 | : N extends 14 ? [ T1, T2, T3, T4, T5, T6 ]
552 | : N extends 13 ? [ T1, T2, T3, T4, T5, T6 ]
553 | : N extends 12 ? [ T1, T2, T3, T4, T5, T6 ]
554 | : N extends 11 ? [ T1, T2, T3, T4, T5, T6 ]
555 | : N extends 10 ? [ T1, T2, T3, T4, T5, T6 ]
556 | : N extends 9 ? [ T1, T2, T3, T4, T5, T6 ]
557 | : N extends 8 ? [ T1, T2, T3, T4, T5, T6 ]
558 | : N extends 7 ? [ T1, T2, T3, T4, T5, T6 ]
559 | : N extends 6 ? [ T1, T2, T3, T4, T5, T6 ]
560 | : N extends 5 ? [ T1, T2, T3, T4, T5 ]
561 | : N extends 4 ? [ T1, T2, T3, T4 ]
562 | : N extends 3 ? [ T1, T2, T3 ]
563 | : N extends 2 ? [ T1, T2 ]
564 | : N extends 1 ? [ T1 ]
565 | : N extends 0 ? [ ]
566 | : [ ]
567 | : T extends readonly [ infer T1, infer T2, infer T3, infer T4, infer T5 ]
568 | ? N extends 20 ? [ T1, T2, T3, T4, T5 ]
569 | : N extends 19 ? [ T1, T2, T3, T4, T5 ]
570 | : N extends 18 ? [ T1, T2, T3, T4, T5 ]
571 | : N extends 17 ? [ T1, T2, T3, T4, T5 ]
572 | : N extends 16 ? [ T1, T2, T3, T4, T5 ]
573 | : N extends 15 ? [ T1, T2, T3, T4, T5 ]
574 | : N extends 14 ? [ T1, T2, T3, T4, T5 ]
575 | : N extends 13 ? [ T1, T2, T3, T4, T5 ]
576 | : N extends 12 ? [ T1, T2, T3, T4, T5 ]
577 | : N extends 11 ? [ T1, T2, T3, T4, T5 ]
578 | : N extends 10 ? [ T1, T2, T3, T4, T5 ]
579 | : N extends 9 ? [ T1, T2, T3, T4, T5 ]
580 | : N extends 8 ? [ T1, T2, T3, T4, T5 ]
581 | : N extends 7 ? [ T1, T2, T3, T4, T5 ]
582 | : N extends 6 ? [ T1, T2, T3, T4, T5 ]
583 | : N extends 5 ? [ T1, T2, T3, T4, T5 ]
584 | : N extends 4 ? [ T1, T2, T3, T4 ]
585 | : N extends 3 ? [ T1, T2, T3 ]
586 | : N extends 2 ? [ T1, T2 ]
587 | : N extends 1 ? [ T1 ]
588 | : N extends 0 ? [ ]
589 | : [ ]
590 | : T extends readonly [ infer T1, infer T2, infer T3, infer T4 ]
591 | ? N extends 20 ? [ T1, T2, T3, T4 ]
592 | : N extends 19 ? [ T1, T2, T3, T4 ]
593 | : N extends 18 ? [ T1, T2, T3, T4 ]
594 | : N extends 17 ? [ T1, T2, T3, T4 ]
595 | : N extends 16 ? [ T1, T2, T3, T4 ]
596 | : N extends 15 ? [ T1, T2, T3, T4 ]
597 | : N extends 14 ? [ T1, T2, T3, T4 ]
598 | : N extends 13 ? [ T1, T2, T3, T4 ]
599 | : N extends 12 ? [ T1, T2, T3, T4 ]
600 | : N extends 11 ? [ T1, T2, T3, T4 ]
601 | : N extends 10 ? [ T1, T2, T3, T4 ]
602 | : N extends 9 ? [ T1, T2, T3, T4 ]
603 | : N extends 8 ? [ T1, T2, T3, T4 ]
604 | : N extends 7 ? [ T1, T2, T3, T4 ]
605 | : N extends 6 ? [ T1, T2, T3, T4 ]
606 | : N extends 5 ? [ T1, T2, T3, T4 ]
607 | : N extends 4 ? [ T1, T2, T3, T4 ]
608 | : N extends 3 ? [ T1, T2, T3 ]
609 | : N extends 2 ? [ T1, T2 ]
610 | : N extends 1 ? [ T1 ]
611 | : N extends 0 ? [ ]
612 | : [ ]
613 | : T extends readonly [ infer T1, infer T2, infer T3 ]
614 | ? N extends 20 ? [ T1, T2, T3 ]
615 | : N extends 19 ? [ T1, T2, T3 ]
616 | : N extends 18 ? [ T1, T2, T3 ]
617 | : N extends 17 ? [ T1, T2, T3 ]
618 | : N extends 16 ? [ T1, T2, T3 ]
619 | : N extends 15 ? [ T1, T2, T3 ]
620 | : N extends 14 ? [ T1, T2, T3 ]
621 | : N extends 13 ? [ T1, T2, T3 ]
622 | : N extends 12 ? [ T1, T2, T3 ]
623 | : N extends 11 ? [ T1, T2, T3 ]
624 | : N extends 10 ? [ T1, T2, T3 ]
625 | : N extends 9 ? [ T1, T2, T3 ]
626 | : N extends 8 ? [ T1, T2, T3 ]
627 | : N extends 7 ? [ T1, T2, T3 ]
628 | : N extends 6 ? [ T1, T2, T3 ]
629 | : N extends 5 ? [ T1, T2, T3 ]
630 | : N extends 4 ? [ T1, T2, T3 ]
631 | : N extends 3 ? [ T1, T2, T3 ]
632 | : N extends 2 ? [ T1, T2 ]
633 | : N extends 1 ? [ T1 ]
634 | : N extends 0 ? [ ]
635 | : [ ]
636 | : T extends readonly [ infer T1, infer T2 ]
637 | ? N extends 20 ? [ T1, T2 ]
638 | : N extends 19 ? [ T1, T2 ]
639 | : N extends 18 ? [ T1, T2 ]
640 | : N extends 17 ? [ T1, T2 ]
641 | : N extends 16 ? [ T1, T2 ]
642 | : N extends 15 ? [ T1, T2 ]
643 | : N extends 14 ? [ T1, T2 ]
644 | : N extends 13 ? [ T1, T2 ]
645 | : N extends 12 ? [ T1, T2 ]
646 | : N extends 11 ? [ T1, T2 ]
647 | : N extends 10 ? [ T1, T2 ]
648 | : N extends 9 ? [ T1, T2 ]
649 | : N extends 8 ? [ T1, T2 ]
650 | : N extends 7 ? [ T1, T2 ]
651 | : N extends 6 ? [ T1, T2 ]
652 | : N extends 5 ? [ T1, T2 ]
653 | : N extends 4 ? [ T1, T2 ]
654 | : N extends 3 ? [ T1, T2 ]
655 | : N extends 2 ? [ T1, T2 ]
656 | : N extends 1 ? [ T1 ]
657 | : N extends 0 ? [ ]
658 | : [ ]
659 | : T extends readonly [ infer T1 ]
660 | ? N extends 20 ? [ T1 ]
661 | : N extends 19 ? [ T1 ]
662 | : N extends 18 ? [ T1 ]
663 | : N extends 17 ? [ T1 ]
664 | : N extends 16 ? [ T1 ]
665 | : N extends 15 ? [ T1 ]
666 | : N extends 14 ? [ T1 ]
667 | : N extends 13 ? [ T1 ]
668 | : N extends 12 ? [ T1 ]
669 | : N extends 11 ? [ T1 ]
670 | : N extends 10 ? [ T1 ]
671 | : N extends 9 ? [ T1 ]
672 | : N extends 8 ? [ T1 ]
673 | : N extends 7 ? [ T1 ]
674 | : N extends 6 ? [ T1 ]
675 | : N extends 5 ? [ T1 ]
676 | : N extends 4 ? [ T1 ]
677 | : N extends 3 ? [ T1 ]
678 | : N extends 2 ? [ T1 ]
679 | : N extends 1 ? [ T1 ]
680 | : N extends 0 ? [ ]
681 | : [ ]
682 | : [ ];
683 |
684 | export type TruncateLastIfSameSize< T extends unknown[ ], N extends number > =
685 | T[ 'length' ] extends N ? ReverseRest< T > : T;
686 |
--------------------------------------------------------------------------------
/lib/union.d.ts:
--------------------------------------------------------------------------------
1 | import type { Rest } from './rest'
2 |
3 | /**
4 | * Return the tuple {T} where all element types are unioned with {Union}
5 | */
6 | export type UnionAll< T extends readonly unknown[ ], Union > =
7 | {
8 | R: [ T[ 0 ] | Union, ...UnionAll< Rest< T >, Union > ];
9 | 1: [ T[ 0 ] | Union ];
10 | 0: [ ];
11 | }[
12 | T[ 'length' ] extends 0 ? 0 : T[ 'length' ] extends 1 ? 1 : 'R'
13 | ];
14 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "meta-types",
3 | "version": "0.0.0-development",
4 | "description": "TypeScript meta functions for (especially variadic) meta programming",
5 | "author": "Gustaf Räntilä",
6 | "license": "MIT",
7 | "bugs": {
8 | "url": "https://github.com/grantila/meta-types/issues"
9 | },
10 | "homepage": "https://github.com/grantila/meta-types#readme",
11 | "types": "./index.d.ts",
12 | "directories": {},
13 | "engines": {
14 | "node": ">=14"
15 | },
16 | "files": [
17 | "index.d.ts",
18 | "lib"
19 | ],
20 | "scripts": {
21 | "build": "rimraf dist && tsc -p tsconfig.prod.json",
22 | "dtslint": "dtslint tests",
23 | "test": "yarn dtslint",
24 | "cz": "git-cz"
25 | },
26 | "pre-commit": [
27 | "build"
28 | ],
29 | "repository": {
30 | "type": "git",
31 | "url": "https://github.com/grantila/meta-types"
32 | },
33 | "keywords": [
34 | "type",
35 | "types",
36 | "generic",
37 | "typescript",
38 | "meta",
39 | "variadic"
40 | ],
41 | "devDependencies": {
42 | "cz-conventional-changelog": "^3.3.0",
43 | "dtslint": "^4.2.1",
44 | "pre-commit": "^1.2.2",
45 | "rimraf": "^4.1.2",
46 | "typescript": "^4.9.5"
47 | },
48 | "config": {
49 | "commitizen": {
50 | "path": "./node_modules/cz-conventional-changelog"
51 | }
52 | },
53 | "packageManager": "yarn@3.2.4"
54 | }
55 |
--------------------------------------------------------------------------------
/tests/add.ts:
--------------------------------------------------------------------------------
1 | import { Add } from 'meta-types'
2 |
3 |
4 | // $ExpectType 5
5 | export type Test_0_Add = Add< 0, 5 >;
6 |
7 | // $ExpectType 5
8 | export type Test_Add_0 = Add< 5, 0 >;
9 |
10 | // $ExpectType 6
11 | export type Test_1_Add = Add< 1, 5 >;
12 |
13 | // $ExpectType 6
14 | export type Test_Add_1 = Add< 5, 1 >;
15 |
16 | // $ExpectType 9
17 | export type Test_4_Add = Add< 4, 5 >;
18 |
19 | // $ExpectType 9
20 | export type Test_Add_4 = Add< 5, 4 >;
21 |
--------------------------------------------------------------------------------
/tests/fill.ts:
--------------------------------------------------------------------------------
1 | import { Fill } from 'meta-types'
2 |
3 |
4 | // $ExpectType []
5 | export type Test_0_GT_5 = Fill< 0, 5 >;
6 |
7 | // $ExpectType [0, 0, 0, 0, 0]
8 | export type Test_5_GT_0 = Fill< 5, 0 >;
9 |
10 | // $ExpectType [5]
11 | export type Test_1_GT_5 = Fill< 1, 5 >;
12 |
13 | // $ExpectType [1, 1, 1, 1, 1]
14 | export type Test_5_GT_1 = Fill< 5, 1 >;
15 |
16 | // $ExpectType [5, 5, 5, 5]
17 | export type Test_4_GT_5 = Fill< 4, 5 >;
18 |
19 | // $ExpectType [4, 4, 4, 4, 4]
20 | export type Test_5_GT_4 = Fill< 5, 4 >;
21 |
22 | // $ExpectType [97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97, 97]
23 | export type Test_98_GT_97 = Fill< 98, 97 >;
24 |
25 | // $ExpectType [98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98, 98]
26 | export type Test_97_GT_98 = Fill< 97, 98 >;
27 |
--------------------------------------------------------------------------------
/tests/greater-than.ts:
--------------------------------------------------------------------------------
1 | import { GreaterThan } from 'meta-types'
2 |
3 |
4 | // $ExpectType false
5 | export type Test_0_GT_5 = GreaterThan< 0, 5 >;
6 |
7 | // $ExpectType true
8 | export type Test_5_GT_0 = GreaterThan< 5, 0 >;
9 |
10 | // $ExpectType false
11 | export type Test_1_GT_5 = GreaterThan< 1, 5 >;
12 |
13 | // $ExpectType true
14 | export type Test_5_GT_1 = GreaterThan< 5, 1 >;
15 |
16 | // $ExpectType false
17 | export type Test_4_GT_5 = GreaterThan< 4, 5 >;
18 |
19 | // $ExpectType true
20 | export type Test_5_GT_4 = GreaterThan< 5, 4 >;
21 |
22 | // $ExpectType true
23 | export type Test_98_GT_97 = GreaterThan< 98, 97 >;
24 |
25 | // $ExpectType false
26 | export type Test_97_GT_98 = GreaterThan< 97, 98 >;
27 |
--------------------------------------------------------------------------------
/tests/index.d.ts:
--------------------------------------------------------------------------------
1 | // Minimum TypeScript Version: 4.1
2 | // see https://github.com/Microsoft/dtslint#specify-a-typescript-version for more information
3 |
--------------------------------------------------------------------------------
/tests/slice.ts:
--------------------------------------------------------------------------------
1 | import { Slice } from 'meta-types'
2 |
3 |
4 | // $ExpectType []
5 | export type Test_Empty = Slice< [ ], 0, 0 >;
6 |
7 | // $ExpectType []
8 | export type Test_Empty_Default = Slice< [ ] >;
9 |
10 | // $ExpectType []
11 | export type Test_Empty_OOR = Slice< [ ], 5, 7 >;
12 |
13 | // $ExpectType []
14 | export type Test_1_Nothing = Slice< [ 5 ], 0, 0 >;
15 |
16 | // $ExpectType []
17 | export type Test_1_OOR = Slice< [ 5 ], 3, 5 >;
18 |
19 | // $ExpectType [5]
20 | export type Test_1_Default = Slice< [ 5 ] >;
21 |
22 | // $ExpectType [5]
23 | export type Test_1_1 = Slice< [ 5 ], 0, 1 >;
24 |
25 | // $ExpectType []
26 | export type Test_Many_None = Slice< [ 5, 6, 7, 8 ], 3, 3 >;
27 |
28 | // $ExpectType []
29 | export type Test_Many_OOR = Slice< [ 5, 6, 7, 8 ], 5, 7 >;
30 |
31 | // $ExpectType [5, 6, 7, 8]
32 | export type Test_Many_Default = Slice< [ 5, 6, 7, 8 ] >;
33 |
34 | // $ExpectType [7, 8]
35 | export type Test_Many_Start = Slice< [ 5, 6, 7, 8 ], 2 >;
36 |
37 | // $ExpectType [6, 7]
38 | export type Test_Many_Slice = Slice< [ 5, 6, 7, 8 ], 1, 3 >;
39 |
--------------------------------------------------------------------------------
/tests/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "commonjs",
4 | "lib": ["es6"],
5 | "noImplicitAny": true,
6 | "noImplicitThis": true,
7 | "strictNullChecks": true,
8 | "strictFunctionTypes": true,
9 | "alwaysStrict": true,
10 | "noEmit": true,
11 | "baseUrl": ".",
12 | "paths": { "meta-types": ["../"] }
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/tests/tslint.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["dtslint/dtslint.json"],
3 | "rules": {
4 | "semicolon": false,
5 | "no-useless-files": false,
6 | "no-relative-import-in-test": false,
7 | "strict-export-declare-modifiers": false,
8 | "no-consecutive-blank-lines": false,
9 | "max-line-length": false
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "allowJs": false,
4 | "declaration": true,
5 | "sourceMap": true,
6 | "lib": [ "ES2019" ],
7 | "noEmit": true,
8 | "target": "ES2019",
9 | "module": "ESNext",
10 | "moduleResolution": "node",
11 | "noImplicitAny": true,
12 | "noUnusedLocals": true,
13 | "pretty": true,
14 | "strict": true,
15 | "alwaysStrict": true,
16 | },
17 | "include": [
18 | "lib",
19 | "index.d.ts"
20 | ]
21 | }
22 |
--------------------------------------------------------------------------------
/tsconfig.prod.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "./tsconfig.json",
3 | "compilerOptions": {
4 | "sourceMap": false,
5 | "outDir": "dist",
6 | "noEmit": false
7 | },
8 | "exclude": [
9 | "**/tests"
10 | ]
11 | }
12 |
--------------------------------------------------------------------------------