Files
modeling-app/docs/kcl/arrayReduce.md
Adam Chalmers f235a950b0 KCL stdlib reduce function (#3881)
Adds an `arrayReduce` function to KCL stdlib. Right now, it can only reduce SketchGroup values because my implementation of higher-order KCL functions sucks. But we will generalize it in the future to be able to reduce any type.

This simplifies sketching polygons, e.g.

```
fn decagon = (radius) => {
  let step = (1/10) * tau()
  let sketch = startSketchAt([
    (cos(0) * radius), 
    (sin(0) * radius),
  ])
  return arrayReduce([1..10], sketch, (i, sg) => {
      let x = cos(step * i) * radius
      let y = sin(step * i) * radius
      return lineTo([x, y], sg)
  })
}
```

Part of #3842
2024-09-14 00:10:17 -04:00

859 lines
62 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "arrayReduce"
excerpt: "Take a starting value. Then, for each element of an array, calculate the next value,"
layout: manual
---
Take a starting value. Then, for each element of an array, calculate the next value,
using the previous value and the element.
```js
arrayReduce(array: [u64], start: SketchGroup, reduce_fn: FunctionParam) -> SketchGroup
```
### Examples
```js
fn decagon = (radius) => {
let step = 1 / 10 * tau()
let sketch = startSketchAt([cos(0) * radius, sin(0) * radius])
return arrayReduce([1, 2, 3, 4, 5, 6, 7, 8, 9, 10], sketch, (i, sg) => {
let x = cos(step * i) * radius
let y = sin(step * i) * radius
return lineTo([x, y], sg)
})
}
decagon(5.0)
|> close(%)
```
![Rendered example of arrayReduce 0](data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAABQAAAALQCAYAAADPfd1WAABwA0lEQVR4Ae3gAZAkSZIkSRKLqpm7R0REZmZmVlVVVVV3d3d3d/fMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMdHd3d3dXV1VVVVVmZkZGRIS7m5kKz0xmV3d1d3dPz8zMzMxMYn3Qgx7EVVddddVVV1111VVXXXXVVVddddVVV131fxKVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVV/w9dc801D36xF3ux1z5z5syDrrnmmge/2Iu92Gtz1f9J//AP//Db//AP//A79913363/8A//8NtcddVVV1111VVX/f+CHvSgB3HVVVddddVVV131f90111zz4Nd+7dd+L4B3eqd3+mye6U//9E9/jKv+z3vFV3zFdwC47777bv2Hf/iH3/6Hf/iH37nvvvtu/Yd/+Iff5qqrrrrqqquuuur/NvSgBz2Iq6666qqrrrrqqv9rrrnmmge/9mu/9nu9+Iu/+Gu/2Iu92GvzTL/7u7/7XVz1/95rvuZrvg/Afffdd+s//MM//PY//MM//M5999136z/8wz/8NlddddVVV1111VX/t6AHPehBXHXVVVddddVVV/1vds011zz4zJkzD36xF3ux13rxF3/x136xF3ux1+aZfvd3f/e7uOqqf8FrvuZrvg/Afffdd+vZs2dv/fu///vf/od/+Iff+Yd/+Iff5qqrrrrqqquuuup/N/SgBz2Iq6666qqrrrrqqv9NrrnmmgefOXPmwS/2Yi/2Wi/+4i/+2i/2Yi/22jzT7/7u734XV1317/Sar/ma7wNw33333QrwD//wD7/9D//wD7/zW7/1W9/NVVddddVVV1111f8u6EEPehBXXXXVVVddddVV/5Ndc801D37t137t9wJ4ndd5nfe+5pprHgzwu7/7u9/FVVf9F3nN13zN9wG47777bv2Hf/iH3/6Hf/iH37nvvvtu/Yd/+Iff5qqrrrrqqquuuup/LvSgBz2Iq6666qqrrrrqqv9Jrrnmmge/9mu/9ntdc801D36d13md9+aZfvd3f/e7uOqq/yFe8zVf830A7rvvvlv/4R/+4bf/4R/+4Xfuu+++W//hH/7ht7nqqquuuuqqq676nwM96EEP4qqrrrrqqquuuuq/0zXXXPPg137t136vF3/xF3/tF3uxF3ttnul3f/d3v4urrvpf4jVf8zXfB+C+++679ezZs7f+/d///W//wz/8w+/8wz/8w29z1VVXXXXVVVdd9d8HPehBD+Kqq6666qqrrrrqv8o111zz4DNnzjz4xV7sxV7rxV/8xV/7xV7sxV6bZ/rd3/3d7+Kqq/6PeM3XfM33AbjvvvtuBfiHf/iH3/6Hf/iH3/mt3/qt7+aqq6666qqrrrrqvw560IMexFVXXXXVVVddddV/lmuuuebBL/ZiL/baZ86cedCLv/iLv/aLvdiLvTbA7/7u734XV131/8xrvuZrvg/Afffdd+s//MM//PY//MM//M5999136z/8wz/8NlddddVVV1111VX/OdCDHvQgrrrqqquuuuqqq/6jXHPNNQ9+7dd+7fcCeKd3eqfP5pl+93d/97u46qqrnsNrvuZrvg/Afffdd+s//MM//PY//MM//M5999136z/8wz/8NlddddVVV1111VX/MdCDHvQgrrrqqquuuuqqq/6trrnmmge/9mu/9nu9+Iu/+Gu/2Iu92GvzTL/7u7/7XVx11VX/Kq/5mq/5PgD33Xffrf/wD//w2//wD//wO/fdd9+t//AP//DbXHXVVVddddVVV/3boAc96EFcddVVV1111VVXvSiuueaaB585c+bBL/ZiL/ZaL/7iL/7aL/ZiL/baPNPv/u7vfhdXXXXVf6jXfM3XfB+A++6779azZ8/e+vd///e//Q//8A+/8w//8A+/zVVXXXXVVVddddWLBj3oQQ/iqquuuuqqq6666vm55pprHnzmzJkHv9iLvdhrvfiLv/hrv9iLvdhr80y/+7u/+11cddVV/6Ve8zVf830A7rvvvlsB/uEf/uG3/+Ef/uF3fuu3fuu7ueqqq6666qqrrnr+0IMe9CCuuuqqq6666qqrAK655poHv/Zrv/Z7AbzO67zOe19zzTUPBvjd3/3d7+Kqq676H+k1X/M13wfgvvvuu/Uf/uEffvsf/uEffue+++679R/+4R9+m6uuuuqqq6666ipAD3rQg7jqqquuuuqqq/5/uuaaax782q/92u8F8E7v9E6fzTP97u/+7ndx1VVX/a/0mq/5mu8DcPbs2Wf8/d///W/9wz/8w+/cd999t/7DP/zDb3PVVVddddVVV/1/hB70oAdx1VVXXXXVVVf9/3DNNdc8+LVf+7Xf68Vf/MVf+8Ve7MVem2f63d/93e/iqquu+j/pNV/zNd8H4L777rv17Nmzz/j7v//73/qHf/iH3/mHf/iH3+aqq6666qqrrvr/AD3oQQ/iqquuuuqqq676v+eaa6558JkzZx78Yi/2Yq/14i/+4q/9Yi/2Yq/NM/3u7/7ud3HVVVf9v/Sar/ma7wNw33333QrwD//wD7/zW7/1W9/9D//wD7/NVVddddVVV131fxF60IMexFVXXXXVVVdd9b/fNddc8+AXe7EXe+0zZ8486MVf/MVf+8Ve7MVeG+B3f/d3v4urrrrqqhfiNV/zNd8H4L777rv1H/7hH377H/7hH37nH/7hH377vvvuu5Wrrrrqqquuuup/O/SgBz2Iq6666qqrrrrqf59rrrnmwa/92q/9XgDv9E7v9Nk80+/+7u9+F1ddddVV/w6v+Zqv+T4A9913363/8A//8Nv/8A//8Dv33Xffrf/wD//w21x11VVXXXXVVf/boAc96EFcddVVV1111VX/811zzTUPfu3Xfu33evEXf/HXfrEXe7HX5pl+93d/97u46qqrrvpP9Jqv+ZrvA3Dffffd+g//8A+//Q//8A+/c9999936D//wD7/NVVddddVVV131Px160IMexFVXXXXVVVdd9T/LNddc8+AzZ848+MVe7MVe68Vf/MVf+8Ve7MVem2f63d/93e/iqquuuuq/0Wu+5mu+D8DZs2efcd999z397//+73/7H/7hH37nH/7hH36bq6666qqrrrrqfxr0oAc9iKuuuuqqq6666r/XNddc8+AzZ848+MVe7MVe68Vf/MVf+8Ve7MVem2f63d/93e/iqquuuup/sNd8zdd8H4D77rvvVkn6+7//+9/6h3/4h9/5rd/6re/mqquuuuqqq67674Ye9KAHcdVVV1111VVX/de65pprHvzar/3a7wXwOq/zOu99zTXXPBjgd3/3d7+Lq6666qr/A17zNV/zfQDuu+++W//hH/7hd/7hH/7ht++7775b/+Ef/uG3ueqqq6666qqr/iuhBz3oQVx11VVXXXXVVf+5rrnmmge/9mu/9nsBvNM7vdNn80y/+7u/+11cddVVV/0/8Jqv+ZrvA3Dffffd+g//8A+//Q//8A+/c9999936D//wD7/NVVddddVVV131nwk96EEP4qqrrrrqqquu+o91zTXXPPi1X/u13+vFX/zFX/vFXuzFXptn+t3f/d3v4qqrrrrqKl7zNV/zfQDuu+++W8+ePXvr3//93//2P/zDP/zOP/zDP/w2V1111VVXXXXVfyT0oAc9iKuuuuqqq6666j/GNddc8+AP//AP/64zZ848+Jprrnnw7/7u734XV1111VVX/Yte8zVf833Onj37jPvuu+/pX//1X/8+9913361cddVVV1111VX/ESjHjx/nqquuuuqqq67693uxF3ux1/6Kr/iKv7rmmmse/Bd/8Rc/9YxnPOOvueqqq6666kXyjGc846/PnTv39Fd4hVd4m1d8xVd866Ojo0u33nrrX3PVVVddddVVV/17oQc96EFcddVVV1111VX/Pu/4ju/4We/0Tu/02b/7u7/7XVx11VVXXfXv9uhHP/p1fuu3fuu7f/RHf/RzuOqqq6666qqr/j3Qgx70IK666qqrrrrqqn+ba6655sEf/uEf/l0v9mIv9tq/+7u/+11cddVVV131H+Y1X/M13+fs2bPP+MzP/MzXvu+++27lqquuuuqqq676t6AcP36cq6666qqrrrrqX+/FXuzFXvsrvuIr/uoJT3jCbz3jGc/4a6666qqrrvoP9YxnPOOvz5079/R3eId3+OzNzc3j//AP//A7XHXVVVddddVV/1qU48ePc9VVV1111VVX/eu84zu+42d9xEd8xHf/7u/+7ndx1VVXXXXVf6pz587d+mZv9mYfA/AP//APv8NVV1111VVXXfWvgR70oAdx1VVXXXXVVVe9aK655poHf/iHf/h3vdiLvdhr/+7v/u53cdVVV1111X+Z13zN13yf++6779bP+qzPep377rvvVq666qqrrrrqqhcFetCDHsRVV1111VVXXfUve53XeZ33/vAP//Dv+t3f/d3v4qqrrrrqqv82j3nMY173N3/zN7/rR3/0Rz+Hq6666qqrrrrqX0I5fvw4V1111VVXXXXVC/fhH/7h3/VO7/ROn/27v/u738VVV1111VX/rc6dO/f0N3uzN/sYgH/4h3/4Ha666qqrrrrqqhcGPehBD+Kqq6666qqrrnr+rrnmmgd/zud8zm9dc801D/7d3/3d7+Kqq6666qr/MV7zNV/zfe67775bP+uzPut17rvvvlu56qqrrrrqqqueH/SgBz2Iq6666qqrrrrqeb3jO77jZ73TO73TZ//u7/7ud3HVVVddddX/WI9+9KNf57d/+7e/50d+5Ec+m6uuuuqqq6666rmhBz3oQVx11VVXXXXVVc92zTXXPPjDP/zDv+vFXuzFXvt3f/d3v4urrrrqqqv+x3vN13zN9/mHf/iH3/7Mz/zM1+Gqq6666qqrrnogyvHjx7nqqquuuuqqq654sRd7sdf+iq/4ir+65pprHvy7v/u738VVV1111VX/KzzjGc/461d4hVd4m9d5ndd571tvvfVvzp49eytXXXXVVVdddRUAetCDHsRVV1111VVXXQXv+I7v+Fnv9E7v9Nm/+7u/+11cddVVV131v9ajH/3o1/mt3/qt7/7RH/3Rz+Gqq6666qqrrkIPetCDuOqqq6666qr/z6655poHf/iHf/h3vdiLvdhr/+7v/u53cdVVV1111f96r/mar/k+Z8+efcZnfuZnvvZ99913K1ddddVVV131/xfl+PHjXHXVVVddddX/Vy/2Yi/22l/xFV/xV094whN+6xnPeMZfc9VVV1111f8Jz3jGM/763LlzT3+Hd3iHz97c3Dz+D//wD7/DVVddddVVV/3/RDl+/DhXXXXVVVdd9f/RO77jO37WR3zER3z37/7u734XV1111VVX/Z907ty5W9/szd7sYwD+4R/+4Xe46qqrrrrqqv9/0IMe9CCuuuqqq6666v+Ta6655sEf/uEf/l0v9mIv9tq/+7u/+11cddVVV131f95rvuZrvs99991362d91me9zn333XcrV1111VVXXfX/B+X48eNcddVVV1111f8XL/ZiL/baX/EVX/FXT3jCE37rGc94xl9z1VVXXXXV/wvPeMYz/vrcuXO3vuM7vuPnbGxsHPuHf/iH3+Gqq6666qqr/n+gHD9+nKuuuuqqq676/+Ad3/EdP+sjPuIjvvt3f/d3v4urrrrqqqv+Xzp37tzT3+zN3uxjAP7hH/7hd7jqqquuuuqq//vQgx70IK666qqrrrrq/7JrrrnmwR/+4R/+XS/2Yi/22r/7u7/7XVx11VVXXfX/3mu+5mu+z3333XfrZ33WZ73OfffddytXXXXVVVdd9X8XetCDHsRVV1111VVX/V/1Oq/zOu/94R/+4d/1u7/7u9/FVVddddVVVz2XRz/60a/z27/929/zIz/yI5/NVVddddVVV/3fRDl+/DhXXXXVVVdd9X/R537u5/7Wm7/5m3/07/7u734XV1111VVXXfV8nDt37tY3fdM3/WiAf/iHf/gdrrrqqquuuur/HvSgBz2Iq6666qqrrvq/5Jprrnnw53zO5/zWNddc8+Df/d3f/S6uuuqqq6666l/wmq/5mu9z33333fpZn/VZr3PffffdylVXXXXVVVf934Ee9KAHcdVVV1111VX/V7zjO77jZ73TO73TZ//u7/7ud3HVVVddddVV/0qPfvSjX+e3fuu3vvtHf/RHP4errrrqqquu+r+Bcvz4ca666qqrrrrqf7trrrnmwZ/0SZ/0U6/zOq/z3r/7u7/7XVx11VVXXXXVv8G5c+dufbM3e7OPefEXf/HX/od/+IffOTw83OWqq6666qqr/nejHD9+nKuuuuqqq6763+zFXuzFXvsrvuIr/uqaa6558O/+7u9+F1ddddVVV1317/CMZzzjr1/hFV7hbV7xFV/xrY+Oji7deuutf81VV1111VVX/e+FHvSgB3HVVVddddVV/1u94zu+42e90zu902f/7u/+7ndx1VVXXXXVVf/BHv3oR7/Ob/3Wb333j/7oj34OV1111VVXXfW/E3rQgx7EVVddddVVV/1vc8011zz4wz/8w7/rxV7sxV77d3/3d7+Lq6666qqrrvpP8pqv+Zrvc9999936WZ/1Wa9z33333cpVV1111VVX/e9COX78OFddddVVV131v8mLvdiLvfZXfMVX/NUTnvCE33rGM57x11x11VVXXXXVf6JnPOMZf33u3Llb3/Ed3/FzNjY2jv3DP/zD73DVVVddddVV/3tQjh8/zlVXXXXVVVf9b/GO7/iOn/URH/ER3/27v/u738VVV1111VVX/Rc6d+7c09/szd7sYwD+4R/+4Xe46qqrrrrqqv8d0IMe9CCuuuqqq6666n+6a6655sEf/uEf/l0v9mIv9tq/+7u/+11cddVVV1111X+T13zN13yf++6779bP+qzPep377rvvVq666qqrrrrqfzb0oAc9iKuuuuqqq676n+x1Xud13vvDP/zDv+t3f/d3v4urrrrqqquu+h/i0Y9+9Ov89m//9vf8yI/8yGdz1VVXXXXVVf9zUY4fP85VV1111VVX/U/14R/+4d/1Tu/0Tp/9u7/7u9/FVVddddVVV/0Pcu7cuVvf9E3f9KMB/uEf/uF3uOqqq6666qr/mdCDHvQgrrrqqquuuup/mmuuuebBn/M5n/Nb11xzzYN/93d/97u46qqrrrrqqv+hXvM1X/N97rvvvls/67M+63Xuu+++W7nqqquuuuqq/1nQgx70IK666qqrrrrqf5J3fMd3/Kx3eqd3+uzf/d3f/S6uuuqqq6666n+JRz/60a/zW7/1W9/9oz/6o5/DVVddddVVV/3PgR70oAdx1VVXXXXVVf8TXHPNNQ/+8A//8O96sRd7sdf+3d/93e/iqquuuuqqq/6Xec3XfM33+Yd/+Iff/szP/MzX4aqrrrrqqqv+Z6AcP36cq6666qqrrvrv9mIv9mKv/RVf8RV/dc011zz4d3/3d7+Lq6666qqrrvpf6BnPeMZfv8IrvMLbvM7rvM5733rrrX9z9uzZW7nqqquuuuqq/17oQQ96EFddddVVV1313+kd3/EdP+ud3umdPvt3f/d3v4urrrrqqquu+j/i0Y9+9Ov81m/91nf/6I/+6Odw1VVXXXXVVf990IMe9CCuuuqqq6666r/DNddc8+AP//AP/64Xe7EXe+3f/d3f/S6uuuqqq6666v+Y13zN13yf++6779bP+qzPep377rvvVq666qqrrrrqvx7l+PHjXHXVVVddddV/tRd7sRd77a/4iq/4qyc84Qm/9YxnPOOvueqqq6666qr/g57xjGf89blz5259x3d8x8/Z2Ng49g//8A+/w1VXXXXVVVf916IcP36cq6666qqrrvqv9I7v+I6f9REf8RHf/bu/+7vfxVVXXXXVVVf9P3Du3Lmnv9mbvdnHAPzDP/zD73DVVVddddVV/3XQgx70IK666qqrrrrqv8I111zz4A//8A//rhd7sRd77d/93d/9Lq666qqrrrrq/5nXfM3XfJ/77rvv1s/6rM96nfvuu+9Wrrrqqquuuuo/H+X48eNcddVVV1111X+2F3uxF3vtr/iKr/irJzzhCb/1jGc846+56qqrrrrqqv+HnvGMZ/z1uXPnbn2Hd3iHz97a2jrxD//wD7/NVVddddVVV/3nohw/fpyrrrrqqquu+s/0ju/4jp/1ER/xEd/9u7/7u9/FVVddddVVV13FuXPnbn3TN33Tjwb4h3/4h9/hqquuuuqqq/7zoAc96EFcddVVV1111X+Ga6655sEf/uEf/l0v9mIv9tq/+7u/+11cddVVV1111VXP4TVf8zXf57777rv1sz7rs17nvvvuu5Wrrrrqqquu+o+HHvSgB3HVVVddddVV/9Fe53Ve570//MM//Lt+93d/97u46qqrrrrqqqteqEc/+tGv81u/9Vvf/aM/+qOfw1VXXXXVVVf9x6IcP36cq6666qqrrvqP9Lmf+7m/9eZv/uYf/bu/+7vfxVVXXXXVVVdd9S86d+7crW/2Zm/2MZL0D//wD7/NVVddddVVV/3HQQ960IO46qqrrrrqqv8I11xzzYM/53M+57euueaaB//u7/7ud3HVVVddddVVV/2rvOZrvub73Hfffbd+1md91uvcd999t3LVVVddddVV/37oQQ96EFddddVVV1317/WO7/iOn/VO7/ROn/27v/u738VVV1111VVXXfXv8uhHP/p1fuu3fuu7f/RHf/RzuOqqq6666qp/H8rx48e56qqrrrrqqn+ra6655sGf9Emf9FOv8zqv896/+7u/+11cddVVV1111VX/bufOnbv1zd7szT7mxV/8xV/7H/7hH37n8PBwl6uuuuqqq676tyG46qqrrrrqqn+H137t136vF3uxF3vt3/3d3/0urrrqqquuuuqq/zC/+7u/+10v9mIv9tqv8zqv895cddVVV1111b8dwVVXXXXVVVf9O7zTO73TZ//u7/7ud3HVVVddddVVV/2H+93f/d3vep3XeZ33vuaaax7MVVddddVVV/3bULnqqquuuuqqf4f77rvvVq666qqrrrrqqv80Z86cedB99913K1ddddVVV131b0Plqquuuuqqq/4dzp49eytXXXXVVVddddV/mt/6rd/6Hq666qqrrrrq347gqquuuuqqq/4d/v7v//63ueqqq6666qqr/tPcd999T+eqq6666qqr/u0Irrrqqquuuurf4R/+4R9+5zVf8zXfh6uuuuqqq6666j/ca77ma77P2bNnn8FVV1111VVX/dtRueqqq6666qp/h7Nnz97KVVddddVVV131n+Yf/uEffpurrrrqqquu+rejctVVV1111VX/Dvfdd9+tXHXVVVddddVV/2nuu+++W7nqqquuuuqqfzsqV1111VVXXfXv9A//8A+/zVVXXXXVVVdd9R/uH/7hH36bq6666qqrrvr3Ibjqqquuuuqqf6f77rvvVq666qqrrrrqqv9w9913361cddVVV1111b8PwVVXXXXVVVf9O9133323vuZrvub7cNVVV1111VVX/Yd5zdd8zff5h3/4h9/hqquuuuqqq/59qFx11VVXXXXVv9M//MM//A5XXXXVVVddddV/uH/4h3/4ba666qqrrrrq34fKVVddddVVV/07nT179lauuuqqq6666qr/cPfdd9+tXHXVVVddddW/D5Wrrrrqqquu+ne67777bv2Hf/iH3+aqq6666qqrrrrqqquuuuqq/2moXHXVVVddddVVV1111VVXXfU/zm/91m99N1ddddVVV13170dw1VVXXXXVVf8B/v7v//63X/M1X/N9uOqqq6666qqr/t1e8zVf833uu+++W7nqqquuuuqqfz8qV1111VVXXfUf4B/+4R9+h6uuuuqqq6666j/M2bNnn8FVV1111VVX/ftRueqqq6666qr/AGfPnr2Vq6666qqrrrrqP8w//MM//DZXXXXVVVdd9e9H5aqrrrrqqqv+A9x33323ctVVV1111VVX/Ye57777buWqq6666qqr/v2oXHXVVVddddV/kH/4h3/4ba666qqrrrrqqn+33/qt3/purrrqqquuuuo/BsFVV1111VVX/Qf5+7//+9/mqquuuuqqq6666qqrrrrqqv9JCK666qqrrrrqP8jZs2ef8Zqv+Zrvw1VXXXXVVVdd9W/2mq/5mu/zD//wD7/DVVddddVVV/3HoHLVVVddddVV/0Huu+++W7nqqquuuuqqq/7d/uEf/uG3ueqqq6666qr/GFSuuuqqq6666j/I2bNnb+Wqq6666qqrrvp3u++++27lqquuuuqqq/5jULnqqquuuuqq/yD33Xffrf/wD//w21x11VVXXXXVVf9m9913361cddVVV1111X8cKlddddVVV1111VVXXXXVVVf9j/EP//APv81VV1111VVX/cchuOqqq6666qr/QH//93//26/5mq/5Plx11VVXXXXVVf9qr/mar/k+9913361cddVVV1111X8cKlddddVVV131H+gf/uEffoerrrrqqquuuurf7OzZs8/gqquuuuqqq/7jULnqqquuuuqq/0Bnz569lauuuuqqq6666t/sH/7hH36bq6666qqrrvqPQ+Wqq6666qqr/gPdd999t9533323ctVVV1111VVX/Zvcd999t3LVVVddddVV/3GoXHXVVVddddV/sLNnz97KVVddddVVV131r/Zbv/Vb38NVV1111VVX/cciuOqqq6666qr/YH//93//21x11VVXXXXVVVddddVVV131PwHBVVddddVVV/0H+4d/+Iffec3XfM334aqrrrrqqquuepG95mu+5vv8wz/8w29z1VVXXXXVVf+xqFx11VVXXXXVf7CzZ8/eylVXXXXVVVdd9a/2D//wD7/NVVddddVVV/3HonLVVVddddVVV1111VVXXXXV/wj33XffrVx11VVXXXXVfywqV1111VVXXfUf7L777rv1H/7hH36bq6666qqrrrrqRfYP//APv81VV1111VVX/cejctVVV1111VVXXXXVVVddddV/u/vuu+9Wrrrqqquuuuo/HsFVV1111VVX/Sf4+7//+99+zdd8zffhqquuuuqqq676F73ma77m+/zDP/zD73DVVVddddVV//GoXHXVVVddddV/gn/4h3/4Ha666qqrrrrqqquuuuqqq67670blqquuuuqqq/4TnD179lauuuqqq6666qoX2T/8wz/8NlddddVVV131H4/KVVddddVVV/0nuO+++2697777buWqq6666qqrrnqR3Hfffbdy1VVXXXXVVf/xqFx11VVXXXXVf5KzZ8/eylVXXXXVVVdd9S/6rd/6re/mqquuuuqqq/5zEFx11VVXXXXVf5K///u//22uuuqqq6666qqrrrrqqquu+u9EcNVVV1111VX/Sf7hH/7hd17zNV/zfbjqqquuuuqqq16g13zN13yff/iHf/gdrrrqqquuuuo/B5Wrrrrqqquu+k9y9uzZW7nqqquuuuqqq/5F//AP//DbXHXVVVddddV/DipXXXXVVVdd9Z/kvvvuu5WrrrrqqquuuupfdN99993KVVddddVVV/3noHLVVVddddVV/4n+4R/+4be56qqrrrrqqqteoH/4h3/4ba666qqrrrrqPw/BVVddddVVV/0nuu+++27lqquuuuqqq656ge67775bueqqq6666qr/PARXXXXVVVdd9Z/ovvvuu/U1X/M134errrrqqquuuup5vOZrvub7/MM//MPvcNVVV1111VX/eahcddVVV1111X+if/iHf/gdrrrqqquuuuqqF+gf/uEffpurrrrqqquu+s9D5aqrrrrqqqv+E509e/ZWrrrqqquuuuqqq6666qqrrvrvQuWqq6666qqr/hPdd999t9533323ctVVV1111VVXPV/33XffrVx11VVXXXXVfx4qV1111VVXXfWf7OzZs7dy1VVXXXXVVVc9j9/6rd/6bq666qqrrrrqPxfBVVddddVVV/0n+/u///vffs3XfM334aqrrrrqqquuepbXfM3XfJ/77rvvVq666qqrrrrqPxeVq6666qqrrvpP9g//8A+/w1VXXXXVVVdd9TzOnj37DK666qqrrrrqPxeVq6666qqrrvpPdvbs2Vu56qqrrrrqqquexz/8wz/8NlddddVVV131n4vKVVddddVVV/0nu++++27lqquuuuqqq656Hvfdd9+tXHXVVVddddV/LipXXXXVVVdd9V/gH/7hH36bq6666qqrrrrqWf7hH/7hd7jqqquuuuqq/3wEV1111VVXXfVf4O///u9/m6uuuuqqq6666lnuu+++W7nqqquuuuqq/3wEV1111VVXXfVf5DVf8zXfh6uuuuqqq666itd8zdd8n3/4h3/4ba666qqrrrrqPx+Vq6666qqrrvov8A//8A+/w1VXXXXVVVdd9Sz/8A//8NtcddVVV1111X8+KlddddVVV131X+Ds2bO3ctVVV1111VVXPct99913K1ddddVVV131n4/KVVddddVVV/0XuO+++279h3/4h9/mqquuuuqqq67ivvvuu5Wrrrrqqquu+q9B5aqrrrrqqquuuuqqq6666qr/Uv/wD//w21x11VVXXXXVfw2Cq6666qqrrvov8vd///e//Zqv+Zrvw1VXXXXVVVf9P/aar/ma73PffffdylVXXXXVVVf916By1VVXXXXVVf9F/uEf/uF3uOqqq6666qqrOHv27DO46qqrrrrqqv8aVK666qqrrrrqv8jZs2dv5aqrrrrqqquu4h/+4R9+m6uuuuqqq676r0Hlqquuuuqqq/6L3Hfffbdy1VVXXXXVVVdx33333cpVV1111VVX/degctVVV1111VX/hf7hH/7ht7nqqquuuuqq/8d+67d+67u56qqrrrrqqv86BFddddVVV131X+i3fuu3voerrrrqqquu+n/svvvuu5Wrrrrqqquu+q9DcNVVV1111VX/hX7rt37ru1tres3XfM334aqrrrrqqqv+H3nN13zN9zl16tRDfvRHf/RzuOqqq6666qr/OuhBD3oQV1111VVXXfVf7Zprrnnwa7/2a7/XO73TO302wO/+7u9+F1ddddVVV131f8xrvuZrvg/Aj/zIj3z2b//2b3/PfffddytXXXXVVVdd9V8LPehBD+Kqq6666qqr/rtcc801D37t137t93qd13md977mmmse/Lu/+7vfxVVXXXXVVVf9L/ear/ma73Pffffd+lu/9Vvf/aM/+qOfw1VXXXXVVVf990EPetCDuOqqq6666qr/btdcc82DX+zFXuy1X+d1Xue9XuzFXuy1f/d3f/e7uOqqq6666qr/ZV7zNV/zfe67775bf+u3fuu7f/RHf/RzuOqqq6666qr/fuhBD3oQV1111VVXXfU/yTXXXPPgd3zHd/ys13md13lvgN/93d/9Lq666qqrrrrqf6jXfM3XfB+AH/mRH/ns3/7t3/6e++6771auuuqqq6666n8O9KAHPYirrrrqqquu+p/ommuuefBrv/Zrv9frvM7rvPc111zz4N/93d/9Lq666qqrrrrqf4jXfM3XfJ/77rvv1t/6rd/67h/90R/9HK666qqrrrrqfyb0oAc9iKuuuuqqq676n+yaa6558Iu92Iu99uu8zuu814u92Iu99u/+7u9+F1ddddVVV1313+Q1X/M13+e+++679bd+67e++0d/9Ec/h6uuuuqqq676nw096EEP4qqrrrrqqqv+t7jmmmse/I7v+I6f9Tqv8zrvDfC7v/u738VVV1111VVX/Sd7zdd8zfcB+JEf+ZHP/u3f/u3vue+++27lqquuuuqqq/53QA960IO46qqrrrrqqv9trrnmmge/9mu/9nu90zu902cD/O7v/u53cdVVV1111VX/wV7zNV/zfe67775bf+u3fuu7f/RHf/RzuOqqq6666qr/fdCDHvQgrrrqqquuuup/q2uuuebBL/ZiL/bar/M6r/NeL/ZiL/bav/u7v/tdXHXVVVddddW/02u+5mu+z3333Xfrb/3Wb333j/7oj34OV1111VVXXfW/F3rQgx7EVVddddVVV/1fcM011zz4Hd/xHT/rdV7ndd4b4Hd/93e/i6uuuuqqq656Eb3ma77m+wD81m/91nf/yI/8yGefPXv2GVx11VVXXXXV/37oQQ96EFddddVVV131f8k111zz4Nd+7dd+r3d6p3f6bIDf/d3f/S6uuuqqq6666gV4zdd8zfe57777bv2t3/qt7/7t3/7t77nvvvtu5aqrrrrqqqv+70APetCDuOqqq6666qr/i6655poHv9iLvdhrv87rvM57vdiLvdhr/+7v/u53cdVVV1111VXP9Jqv+Zrvc9999936W7/1W9/9oz/6o5/DVVddddVVV/3fhB70oAdx1VVXXXXVVf/XXXPNNQ9+x3d8x896ndd5nfcG+N3f/d3v4qqrrrrqqv93XvM1X/N9AP7hH/7ht3/rt37re37rt37ru7nqqquuuuqq/9vQgx70IK666qqrrrrq/4trrrnmwa/92q/9Xu/0Tu/02QC/+7u/+11cddVVV131f95rvuZrvs99991362/91m9992//9m9/z3333XcrV1111VVXXfX/A3rQgx7EVVddddVVV/1/c8011zz4xV7sxV77dV7ndd7rxV7sxV77d3/3d7+Lq6666qqr/s95zdd8zfe57777bv2t3/qt7/7RH/3Rz+Gqq6666qqr/v9BD3rQg7jqqquuuuqq/89e7MVe7LXf6Z3e6bNe7MVe7LUBfvd3f/e7uOqqq6666n+t13zN13wfgPvuu+/WH/3RH/2c3/qt3/purrrqqquuuur/L/SgBz2Iq6666qqrrroKrrnmmge/9mu/9nu90zu902cD/O7v/u53cdVVV1111f8ar/mar/k+9913362/9Vu/9d2//du//T333XffrVx11VVXXXXVVehBD3oQV1111VVXXXXVs11zzTUPfu3Xfu33ep3XeZ33vuaaax78u7/7u9/FVVddddVV/2O95mu+5vvcd999t/7Wb/3Wd//oj/7o53DVVVddddVVVz0QetCDHsRVV1111VVXXfX8vc7rvM57v87rvM57vdiLvdhr/+7v/u53cdVVV1111f8Yr/mar/k+9913360/+qM/+jm/9Vu/9d1cddVVV1111VXPD3rQgx7EVVddddVVV131wl1zzTUPfu3Xfu33eqd3eqfPBvjd3/3d7+Kqq6666qr/cq/5mq/5PgA/8iM/8tm//du//T333XffrVx11VVXXXXVVS8MetCDHsRVV1111VVXXfWiueaaax782q/92u/1Oq/zOu99zTXXPPh3f/d3v4urrrrqqqv+073ma77m+9x33323/tZv/dZ3/+iP/ujncNVVV1111VVXvajQgx70IK666qqrrrrqqn+da6655sEv9mIv9tqv8zqv814v9mIv9tq/+7u/+11cddVVV131H+41X/M13+e+++679Ud/9Ec/57d+67e+m6uuuuqqq6666l8LPehBD+Kqq6666qqrrvq3u+aaax782q/92u/1Tu/0Tp8N8Lu/+7vfxVVXXXXVVf9mr/mar/k+AD/yIz/y2b/1W7/13WfPnn0GV1111VVXXXXVvxV60IMexFVXXXXVVVdd9e93zTXXPPi1X/u13+t1Xud13vuaa6558O/+7u9+F1ddddVVV73IXvM1X/N97rvvvlt/67d+67t/9Ed/9HO46qqrrrrqqqv+I6AHPehBXHXVVVddddVV/3GuueaaB7/Yi73Ya73O67zOe7/Yi73Ya//u7/7ud3HVVVddddUL9Jqv+Zrvc9999936W7/1W9/9oz/6o5/DVVddddVVV131Hwk96EEP4qqrrrrqqquu+s9xzTXXPPgd3/EdP+t1Xud13hvgd3/3d7+Lq6666qqreM3XfM33AfiRH/mRz/7t3/7t77nvvvtu5aqrrrrqqquu+s+AHvSgB3HVVVddddVVV/3nuuaaax782q/92u/1Oq/zOu99zTXXPPh3f/d3v4urrrrqqv+HXvM1X/N97rvvvlt/67d+67t/9Ed/9HO46qqrrrrqqqv+s6EHPehBXHXVVVddddVV/zWuueaaB7/Yi73Ya7/O67zOe73Yi73Ya//u7/7ud3HVVVdd9f/Aa77ma77Pfffdd+tv/dZvffeP/uiPfg5XXXXVVVddddV/FfSgBz2Iq6666qqrrrrqv94111zz4Hd8x3f8rNd5ndd5b4Df/d3f/S6uuuqqq/4Pec3XfM33AfiRH/mRz/7t3/7t77nvvvtu5aqrrrrqqquu+q+GHvSgB3HVVVddddVVV/33ueaaax782q/92u/1Tu/0Tp8N8Lu/+7vfxVVXXXXV/2Kv+Zqv+T733Xffrb/1W7/13T/6oz/6OVx11VVXXXXVVf+d0IMe9CCuuuqqq6666qr/ftdcc82DX+zFXuy1X+d1Xue9XuzFXuy1f/d3f/e7uOqqq676X+Q1X/M13+e+++679bd+67e++0d/9Ec/h6uuuuqqq6666n8C9KAHPYirrrrqqquuuup/lmuuuebB7/iO7/hZr/M6r/PeAL/7u7/7XVx11VVX/Q/0mq/5mu8D8Fu/9Vvf/aM/+qOfc999993KVVddddVVV131Pwl60IMexFVXXXXVVVdd9T/TNddc8+DXfu3Xfq93eqd3+myA3/3d3/0urrrqqqv+B3jN13zN97nvvvtu/a3f+q3v/tEf/dHP4aqrrrrqqquu+p8KPehBD+Kqq6666qqrrvqf7cyZMw968Rd/8dd5ndd5nfd6sRd7sdf+3d/93e/iqquuuuq/wWu+5mu+z3333Xfrb/3Wb333j/7oj34OV1111VVXXXXV/3ToQQ96EFddddVVV1111f8e11xzzYPf8R3f8bNe53Ve570Bfvd3f/e7uOqqq676T/Sar/ma7wPwD//wD7/9W7/1W9/zW7/1W9/NVVddddVVV131vwV60IMexFVXXXXVVVdd9b/PmTNnHvQ6r/M67/1O7/ROnw3wu7/7u9/FVVddddV/oNd8zdd8n/vuu+/W3/qt3/ru3/qt3/rus2fPPoOrrrrqqquuuup/G/SgBz2Iq6666qqrrrrqf69rrrnmwS/2Yi/22q/zOq/zXi/2Yi/22r/7u7/7XVx11VVX/Tu85mu+5vvcd999t/7Wb/3Wd//oj/7o53DVVVddddVVV/1vhh70oAdx1VVXXXXVVVf93/BiL/Zir/U6r/M67/06r/M67w3wu7/7u9/FVVddddWL4DVf8zXfB+C+++679Ud/9Ec/+7d+67e+h6uuuuqqq6666v8C9KAHPYirrrrqqquuuur/lmuuuebBr/3ar/1e7/RO7/TZAL/7u7/7XVx11VVXPR+v+Zqv+T733Xffrb/1W7/13b/927/9Pffdd9+tXHXVVVddddVV/5egBz3oQVx11VVXXXXVVf83XXPNNQ9+7dd+7fd6ndd5nfe+5pprHvy7v/u738VVV111FfCar/ma73Pffffd+lu/9Vvf/aM/+qOfw1VXXXXVVVdd9X8VetCDHsRVV1111VVXXfV/3+u8zuu89+u8zuu814u92Iu99u/+7u9+F1ddddX/S6/5mq/5Pvfdd9+tP/qjP/o5v/Vbv/XdXHXVVVddddVV/9ehBz3oQVx11VVXXXXVVf9/XHPNNQ9+7dd+7fd6p3d6p88G+N3f/d3v4qqrrvo/7TVf8zXfB+BHfuRHPvu3f/u3v+e+++67lauuuuqqq6666v8L9KAHPYirrrrqqquuuur/n2uuuebBr/3ar/1er/M6r/Pe11xzzYN/93d/97u46qqr/k95zdd8zfe57777bv2t3/qt7/7RH/3Rz+Gqq6666qqrrvr/CD3oQQ/iqquuuuqqq676/+uaa6558Iu92Iu99uu8zuu814u92Iu99u/+7u9+F1ddddX/aq/5mq/5Pvfdd9+tP/qjP/o5v/Vbv/XdXHXVVVddddVV/5+hBz3oQVx11VVXXXXVVVcBXHPNNQ9+7dd+7fd6p3d6p88G+N3f/d3v4qqrrvpf4TVf8zXfB+BHfuRHPvu3f/u3v+e+++67lauuuuqqq6666ipAD3rQg7jqqquuuuqqq656oGuuuebBr/3ar/1er/M6r/Pe11xzzYN/93d/97u46qqr/kd6zdd8zfe57777bv2t3/qt7/7RH/3Rz+Gqq6666qqrrrrqOaEHPehBXHXVVVddddVVVz0/Z86cedCLv/iLv87rvM7rvNeLvdiLvfbv/u7vfhdXXXXV/wiv+Zqv+T733XffrT/6oz/6Ob/1W7/13Vx11VVXXXXVVVc9f+hBD3oQV1111VVXXXXVVf+Sa6655sHv+I7v+Fmv8zqv894Av/u7v/tdXHXVVf+lXvM1X/N9AH7kR37ks3/7t3/7e+67775bueqqq6666qqrrnrh0IMe9CCuuuqqq6666qqrXlRnzpx50Ou8zuu89+u8zuu89zXXXPPg3/3d3/0urrrqqv9Ur/mar/k+9913362/9Vu/9d0/+qM/+jlcddVVV1111VVXvejQgx70IK666qqrrrrqqqv+ta655poHv9iLvdhrv87rvM57vdiLvdhr/+7v/u53cdVVV/2Hes3XfM33ue+++279rd/6re/+0R/90c/hqquuuuqqq6666l8PPehBD+Kqq6666qqrrrrq3+PMmTMPeqd3eqfPfp3XeZ33Bvjd3/3d7+Kqq676N3nN13zN9wH4kR/5kc/+rd/6re8+e/bsM7jqqquuuuqqq676t0MPetCDuOqqq6666qqrrvqPcM011zz4tV/7td/rdV7ndd77mmuuefDv/u7vfhdXXXXVi+Q1X/M13+e+++679bd+67e++0d/9Ec/h6uuuuqqq6666qr/GOhBD3oQV1111VVXXXXVVf+Rrrnmmge/2Iu92Gu9zuu8znu/2Iu92Gv/7u/+7ndx1VVXPV+v+Zqv+T733Xffrb/1W7/13T/6oz/6OVx11VVXXXXVVVf9x0IPetCDuOqqq6666qqrrvrPcs011zz4Hd/xHT/rdV7ndd4b4Hd/93e/i6uu+n/uNV/zNd8H4Ld+67e++0d/9Ec/57777ruVq6666qqrrrrqqv8c6EEPehBXXXXVVVddddVV/9muueaaB7/2a7/2e73TO73TZ9933323XnPNNQ/mqqv+H7rvvvtu/a3f+q3v/tEf/dHP4aqrrrrqqquuuuo/H3rQgx7EVVddddVVV1111X+la6655sE8k21LEg9g25LEA9i2JPEAti1JPIBtSxIPYNuSxAPYtiTxALYtSTyAbUsSD2DbksQD2LYk8QC2LUk8gG1LEg9g25LEA9i2JPEAti1JPIBtSxIPYNuSxAPYtiTxALYtSTyAbUsSD2DbksQD2LYk8QC2LUk8gG1LEg9g25LEA9i2JPEAti1JPIBtSxIPYNuSxAPYtiTxALYtSTyAbUsSD2DbksQD2LYk8QC2LUk8gG1LEg9g25IEcN99993KVVddddVVV1111X8t9KAHPYirrrrqqquuuuqqq6666qqrrrrqqquuuur/JCpXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9VVK666qqrrrrqqquuuuqqq6666qqrrrrqqv+rqFx11VVXXXXVVVddddVVV1111VVXXXXVVf9XUbnqqquuuuqqq6666qqrrrrqqquuuuqqq/6vonLVVVddddVVV1111VVXXXXVVVddddVVV/1fReWqq6666qqrrrrqqquuuuqqq6666qqrrvq/ispVV1111VVXXXXVVVddddVVV1111VVXXfV/FZWrrrrqqquuuuqqq6666qqrrrrqqquuuur/KipXXXXVVVddddVVV1111VVXXXXVVVddddX/VVSuuuqqq6666qqrrrrqqquuuuqqq6666qr/q6hcddVVV1111VVXXXXVVVddddVVV1111VX/V1G56qqrrrrqqquuuuqqq6666qqrrrrqqqv+r6Jy1VVXXXXVVVddddVVV1111VVXXXXVVVf9X0Xlqquuuuqqq6666qqrrrrqqquuuuqqq676v4rKVVddddVVV1111VVXXXXVVVddddVVV131fxWVq6666qqrrrrqqquuuuqqq6666qqrrrrq/yoqV1111VVXXXXVVVddddVVV1111VVXXXXV/1VUrrrqqquuuuqqq6666qqrrrrqqquuuuqq/6uoXHXVVVddddVVV1111VVXXXXVVVddddVV/1dRueqqq6666qqrrrrqqquuuuqqq6666qqr/q+ictVVV1111VVXXXXVVVddddVVV1111VVX/V9F5aqrrrrqqquuuuqqq6666qqrrrrqqquu+r+KylVXXXXVVVddddVVV1111VVXXXXVVVdd9X8Vlauuuuqqq6666qqrrrrqqquuuuqqq6666v8qKlddddVVV1111VVXXXXVVVddddVVV1111f9V/CPics5oVBdOZAAAAABJRU5ErkJggg==)
### Arguments
* `array`: `[u64]` (REQUIRED)
* `start`: `SketchGroup` - A sketch group is a collection of paths. (REQUIRED)
```js
{
// The id of the sketch group (this will change when the engine's reference to it changes.
id: uuid,
// What the sketch is on (can be a plane or a face).
on: {
// The id of the plane.
id: uuid,
// Origin of the plane.
origin: {
x: number,
y: number,
z: number,
},
type: "plane",
// Type for a plane.
value: "XY" | "XZ" | "YZ" | "Custom",
// What should the planes X axis be?
xAxis: {
x: number,
y: number,
z: number,
},
// What should the planes Y axis be?
yAxis: {
x: number,
y: number,
z: number,
},
// The z-axis (normal).
zAxis: {
x: number,
y: number,
z: number,
},
} |
{
// The extrude group the face is on.
extrudeGroup: {
// Chamfers or fillets on this extrude group.
edgeCuts: [{
// The engine id of the edge to fillet.
edgeId: uuid,
// The id of the engine command that called this fillet.
id: uuid,
radius: number,
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
type: "fillet",
} |
{
// The engine id of the edge to chamfer.
edgeId: uuid,
// The id of the engine command that called this chamfer.
id: uuid,
length: number,
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
type: "chamfer",
}],
// The id of the extrusion end cap
endCapId: uuid,
// The height of the extrude group.
height: number,
// The id of the extrude group.
id: uuid,
// The sketch group.
sketchGroup: {
// The id of the sketch group (this will change when the engine's reference to it changes.
id: uuid,
// What the sketch is on (can be a plane or a face).
on: SketchSurface,
// The starting path.
start: {
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
},
// Tag identifiers that have been declared in this sketch group.
tags: {
},
// The paths in the sketch group.
value: [{
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
type: "ToPoint",
} |
{
// arc's direction
ccw: bool,
// the arc's center
center: [number, number],
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
type: "TangentialArcTo",
} |
{
// arc's direction
ccw: bool,
// the arc's center
center: [number, number],
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
type: "TangentialArc",
} |
{
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
type: "Horizontal",
// The x coordinate.
x: number,
} |
{
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
type: "AngledLineTo",
// The x coordinate.
x: number,
// The y coordinate.
y: number,
} |
{
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
type: "Base",
}],
},
// The id of the extrusion start cap
startCapId: uuid,
// The extrude surfaces.
value: [{
// The face id for the extrude plane.
faceId: uuid,
// The id of the geometry.
id: uuid,
// The source range.
sourceRange: [number, number],
// The tag.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
type: "extrudePlane",
} |
{
// The face id for the extrude plane.
faceId: uuid,
// The id of the geometry.
id: uuid,
// The source range.
sourceRange: [number, number],
// The tag.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
type: "extrudeArc",
} |
{
// The id for the chamfer surface.
faceId: uuid,
// The id of the geometry.
id: uuid,
// The source range.
sourceRange: [number, number],
// The tag.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
type: "chamfer",
} |
{
// The id for the fillet surface.
faceId: uuid,
// The id of the geometry.
id: uuid,
// The source range.
sourceRange: [number, number],
// The tag.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
type: "fillet",
}],
},
// The id of the face.
id: uuid,
type: "face",
// The tag of the face.
value: string,
// What should the faces X axis be?
xAxis: {
x: number,
y: number,
z: number,
},
// What should the faces Y axis be?
yAxis: {
x: number,
y: number,
z: number,
},
// The z-axis (normal).
zAxis: {
x: number,
y: number,
z: number,
},
},
// The starting path.
start: {
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
},
// Tag identifiers that have been declared in this sketch group.
tags: {
},
// The paths in the sketch group.
value: [{
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
type: "ToPoint",
} |
{
// arc's direction
ccw: bool,
// the arc's center
center: [number, number],
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
type: "TangentialArcTo",
} |
{
// arc's direction
ccw: bool,
// the arc's center
center: [number, number],
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
type: "TangentialArc",
} |
{
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
type: "Horizontal",
// The x coordinate.
x: number,
} |
{
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
type: "AngledLineTo",
// The x coordinate.
x: number,
// The y coordinate.
y: number,
} |
{
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
type: "Base",
}],
}
```
* `reduce_fn`: `FunctionParam` (REQUIRED)
### Returns
`SketchGroup` - A sketch group is a collection of paths.
```js
{
// The id of the sketch group (this will change when the engine's reference to it changes.
id: uuid,
// What the sketch is on (can be a plane or a face).
on: {
// The id of the plane.
id: uuid,
// Origin of the plane.
origin: {
x: number,
y: number,
z: number,
},
type: "plane",
// Type for a plane.
value: "XY" | "XZ" | "YZ" | "Custom",
// What should the planes X axis be?
xAxis: {
x: number,
y: number,
z: number,
},
// What should the planes Y axis be?
yAxis: {
x: number,
y: number,
z: number,
},
// The z-axis (normal).
zAxis: {
x: number,
y: number,
z: number,
},
} |
{
// The extrude group the face is on.
extrudeGroup: {
// Chamfers or fillets on this extrude group.
edgeCuts: [{
// The engine id of the edge to fillet.
edgeId: uuid,
// The id of the engine command that called this fillet.
id: uuid,
radius: number,
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
type: "fillet",
} |
{
// The engine id of the edge to chamfer.
edgeId: uuid,
// The id of the engine command that called this chamfer.
id: uuid,
length: number,
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
type: "chamfer",
}],
// The id of the extrusion end cap
endCapId: uuid,
// The height of the extrude group.
height: number,
// The id of the extrude group.
id: uuid,
// The sketch group.
sketchGroup: {
// The id of the sketch group (this will change when the engine's reference to it changes.
id: uuid,
// What the sketch is on (can be a plane or a face).
on: SketchSurface,
// The starting path.
start: {
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
},
// Tag identifiers that have been declared in this sketch group.
tags: {
},
// The paths in the sketch group.
value: [{
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
type: "ToPoint",
} |
{
// arc's direction
ccw: bool,
// the arc's center
center: [number, number],
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
type: "TangentialArcTo",
} |
{
// arc's direction
ccw: bool,
// the arc's center
center: [number, number],
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
type: "TangentialArc",
} |
{
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
type: "Horizontal",
// The x coordinate.
x: number,
} |
{
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
type: "AngledLineTo",
// The x coordinate.
x: number,
// The y coordinate.
y: number,
} |
{
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
type: "Base",
}],
},
// The id of the extrusion start cap
startCapId: uuid,
// The extrude surfaces.
value: [{
// The face id for the extrude plane.
faceId: uuid,
// The id of the geometry.
id: uuid,
// The source range.
sourceRange: [number, number],
// The tag.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
type: "extrudePlane",
} |
{
// The face id for the extrude plane.
faceId: uuid,
// The id of the geometry.
id: uuid,
// The source range.
sourceRange: [number, number],
// The tag.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
type: "extrudeArc",
} |
{
// The id for the chamfer surface.
faceId: uuid,
// The id of the geometry.
id: uuid,
// The source range.
sourceRange: [number, number],
// The tag.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
type: "chamfer",
} |
{
// The id for the fillet surface.
faceId: uuid,
// The id of the geometry.
id: uuid,
// The source range.
sourceRange: [number, number],
// The tag.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
type: "fillet",
}],
},
// The id of the face.
id: uuid,
type: "face",
// The tag of the face.
value: string,
// What should the faces X axis be?
xAxis: {
x: number,
y: number,
z: number,
},
// What should the faces Y axis be?
yAxis: {
x: number,
y: number,
z: number,
},
// The z-axis (normal).
zAxis: {
x: number,
y: number,
z: number,
},
},
// The starting path.
start: {
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
},
// Tag identifiers that have been declared in this sketch group.
tags: {
},
// The paths in the sketch group.
value: [{
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
type: "ToPoint",
} |
{
// arc's direction
ccw: bool,
// the arc's center
center: [number, number],
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
type: "TangentialArcTo",
} |
{
// arc's direction
ccw: bool,
// the arc's center
center: [number, number],
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
type: "TangentialArc",
} |
{
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
type: "Horizontal",
// The x coordinate.
x: number,
} |
{
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
type: "AngledLineTo",
// The x coordinate.
x: number,
// The y coordinate.
y: number,
} |
{
// The from point.
from: [number, number],
// The tag of the path.
tag: {
digest: [number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number, number],
end: number,
start: number,
value: string,
},
// The to point.
to: [number, number],
type: "Base",
}],
}
```