├── .gitignore ├── CHANGELOG.md ├── ImageViewer ├── Makefile ├── bundled.go ├── data │ ├── icon.png │ └── icon.svg ├── fileio.go ├── gen.sh ├── gifted.go ├── go.mod ├── go.sum ├── img.go ├── main.go ├── settings.go ├── shortcuts.go └── ui.go ├── LICENSE ├── README.md └── screenshot.png /.gitignore: -------------------------------------------------------------------------------- 1 | # Binaries for programs and plugins 2 | *.exe 3 | *.exe~ 4 | *.dll 5 | *.so 6 | *.dylib 7 | 8 | # Test binary, built with `go test -c` 9 | *.test 10 | 11 | # Output of the go coverage tool, specifically when used with LiteIDE 12 | *.out 13 | 14 | # Dependency directories (remove the comment below to include it) 15 | # vendor/ 16 | 17 | .vscode/ 18 | fyne-cross 19 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Changelog for Image Viewer 2 | 3 | ## 2021-01-29: v1.1.1 4 | 5 | - fixed crash when opening with command line arguments 6 | - new layout of the status bar, remove full path label 7 | - added build script and this changelog file 8 | 9 | ## 2021-01-25: v1.1 10 | 11 | - upgrade to Fyne version 2.0, which adds animations 12 | - added resize feature (#5) 13 | - added fullscreen mode to view images 14 | - added shortcuts overview 15 | - bug fixes and general improvements (#3 , #4 , #6 ) 16 | 17 | ## 2020-12-31: v1 18 | 19 | - first stable release 20 | -------------------------------------------------------------------------------- /ImageViewer/Makefile: -------------------------------------------------------------------------------- 1 | buildall: 2 | fyne-cross linux -icon data/icon.png 3 | fyne-cross darwin -icon data/icon.png 4 | fyne-cross windows -icon data/icon.png 5 | 6 | # turn macOS .app to dmg 7 | dd if=/dev/zero of=/tmp/ImageViewer.dmg bs=1M count=16 status=progress 8 | mkfs.hfsplus -v ImageViewer /tmp/ImageViewer.dmg 9 | 10 | sudo mkdir -pv /mnt/tmp 11 | sudo mount -o loop /tmp/ImageViewer.dmg /mnt/tmp 12 | sudo cp -av fyne-cross/dist/darwin-amd64/ImageViewer.app /mnt/tmp 13 | 14 | sudo umount /mnt/tmp 15 | 16 | cp /tmp/ImageViewer.dmg fyne-cross/dist/darwin-amd64/ImageViewer.dmg 17 | 18 | clean: 19 | if [ -d "fyne-cross" ]; then rm -r fyne-cross; fi 20 | -------------------------------------------------------------------------------- /ImageViewer/bundled.go: -------------------------------------------------------------------------------- 1 | // auto-generated 2 | 3 | package main 4 | 5 | import "fyne.io/fyne/v2" 6 | 7 | var resourceIconPng = &fyne.StaticResource{ 8 | StaticName: "icon.png", 9 | StaticContent: []byte{ 10 | 137, 80, 78, 71, 13, 10, 26, 10, 0, 0, 0, 13, 73, 72, 68, 82, 0, 0, 3, 232, 0, 0, 3, 232, 8, 6, 0, 0, 0, 77, 163, 212, 228, 0, 0, 0, 9, 112, 72, 89, 115, 0, 0, 38, 138, 0, 0, 38, 138, 1, 4, 143, 103, 47, 0, 0, 0, 25, 116, 69, 88, 116, 83, 111, 102, 116, 119, 97, 114, 101, 0, 119, 119, 119, 46, 105, 110, 107, 115, 99, 97, 112, 101, 46, 111, 114, 103, 155, 238, 60, 26, 0, 0, 32, 0, 73, 68, 65, 84, 120, 156, 236, 221, 105, 172, 29, 103, 154, 31, 246, 167, 234, 220, 149, 228, 37, 41, 113, 17, 73, 73, 212, 190, 116, 75, 212, 214, 90, 184, 73, 34, 181, 80, 164, 168, 181, 247, 233, 77, 189, 105, 186, 123, 212, 139, 212, 106, 169, 181, 118, 179, 151, 65, 18, 7, 152, 12, 16, 47, 200, 32, 72, 128, 32, 3, 196, 246, 7, 79, 28, 24, 201, 135, 32, 49, 226, 233, 158, 25, 140, 7, 72, 198, 8, 38, 249, 18, 27, 182, 71, 210, 44, 113, 28, 216, 129, 199, 221, 18, 43, 31, 40, 82, 247, 158, 115, 234, 156, 218, 206, 57, 117, 206, 249, 253, 136, 11, 136, 85, 111, 85, 189, 151, 170, 123, 234, 253, 223, 247, 169, 170, 8, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 160, 128, 100, 210, 29, 96, 190, 29, 59, 243, 79, 87, 254, 170, 179, 124, 85, 231, 236, 217, 61, 103, 163, 179, 51, 137, 216, 25, 73, 182, 35, 178, 100, 123, 36, 201, 90, 68, 68, 18, 217, 74, 36, 177, 26, 145, 142, 165, 79, 73, 226, 199, 2, 0, 96, 28, 178, 44, 27, 211, 145, 206, 70, 100, 241, 239, 178, 72, 254, 234, 253, 3, 255, 155, 72, 178, 127, 29, 89, 242, 127, 103, 17, 127, 153, 198, 123, 127, 121, 54, 91, 121, 123, 57, 254, 205, 63, 251, 135, 103, 174, 250, 171, 49, 117, 10, 122, 72, 34, 140, 197, 225, 215, 223, 186, 34, 150, 146, 155, 179, 36, 57, 144, 100, 113, 75, 18, 217, 85, 145, 196, 149, 89, 196, 158, 245, 237, 146, 178, 167, 164, 48, 13, 0, 192, 122, 37, 67, 127, 22, 27, 219, 39, 17, 239, 68, 22, 255, 236, 108, 146, 252, 95, 17, 241, 79, 146, 44, 251, 39, 105, 150, 253, 147, 223, 61, 179, 239, 159, 55, 216, 75, 232, 75, 186, 161, 113, 71, 94, 254, 139, 181, 247, 214, 126, 113, 79, 39, 75, 15, 103, 89, 28, 78, 146, 228, 158, 44, 178, 237, 235, 219, 20, 10, 226, 181, 195, 183, 211, 27, 0, 96, 54, 213, 156, 121, 47, 16, 226, 123, 131, 123, 242, 175, 35, 178, 223, 143, 136, 223, 59, 155, 189, 247, 179, 229, 108, 233, 15, 254, 225, 153, 221, 255, 182, 94, 71, 96, 35, 9, 134, 250, 206, 100, 233, 189, 241, 206, 157, 239, 117, 226, 84, 114, 54, 78, 70, 18, 119, 101, 17, 157, 245, 77, 6, 6, 242, 194, 65, 124, 12, 167, 171, 25, 121, 0, 128, 241, 25, 91, 137, 123, 193, 227, 12, 232, 79, 159, 192, 254, 110, 68, 246, 135, 103, 147, 248, 239, 147, 44, 254, 135, 159, 159, 221, 243, 71, 113, 38, 57, 91, 167, 151, 32, 141, 80, 201, 39, 206, 252, 239, 75, 127, 154, 108, 123, 56, 139, 206, 39, 210, 36, 78, 103, 17, 59, 215, 175, 207, 13, 228, 67, 3, 176, 18, 119, 0, 0, 106, 40, 29, 250, 135, 180, 207, 217, 95, 159, 210, 248, 191, 200, 34, 254, 193, 217, 44, 254, 206, 47, 247, 236, 249, 31, 255, 232, 107, 201, 47, 75, 118, 4, 4, 116, 74, 56, 147, 165, 7, 59, 111, 61, 144, 158, 77, 63, 147, 164, 241, 84, 150, 197, 69, 231, 87, 149, 15, 228, 5, 79, 189, 26, 1, 220, 195, 222, 0, 0, 102, 83, 173, 135, 203, 21, 222, 54, 167, 93, 177, 192, 254, 175, 178, 179, 241, 59, 73, 231, 189, 223, 254, 249, 27, 151, 254, 207, 145, 36, 227, 42, 21, 96, 202, 73, 48, 12, 117, 215, 153, 63, 223, 179, 152, 252, 242, 153, 72, 146, 103, 35, 146, 107, 214, 175, 235, 27, 204, 251, 6, 227, 250, 37, 238, 227, 11, 220, 126, 44, 0, 0, 198, 99, 60, 185, 181, 112, 160, 31, 216, 174, 207, 186, 62, 237, 187, 103, 214, 35, 139, 127, 25, 17, 191, 157, 102, 217, 223, 244, 160, 57, 134, 145, 68, 200, 117, 248, 199, 127, 118, 40, 206, 158, 253, 110, 146, 38, 79, 101, 145, 45, 156, 95, 222, 19, 202, 27, 12, 228, 229, 67, 184, 83, 24, 0, 128, 245, 74, 62, 197, 125, 88, 120, 207, 93, 223, 29, 196, 7, 135, 245, 36, 146, 119, 35, 203, 254, 94, 100, 201, 111, 252, 236, 204, 158, 223, 47, 213, 73, 230, 134, 116, 195, 6, 159, 248, 59, 89, 231, 79, 255, 228, 237, 167, 34, 178, 23, 35, 73, 15, 173, 95, 55, 60, 152, 23, 157, 77, 63, 191, 170, 200, 233, 215, 192, 41, 170, 212, 29, 0, 96, 54, 52, 242, 80, 185, 2, 79, 112, 31, 116, 156, 190, 235, 6, 135, 245, 158, 251, 213, 179, 236, 103, 145, 198, 111, 252, 236, 189, 189, 191, 227, 193, 114, 172, 39, 185, 112, 78, 150, 37, 7, 127, 252, 214, 99, 105, 18, 63, 137, 72, 111, 61, 191, 184, 201, 80, 62, 56, 144, 143, 254, 158, 244, 241, 154, 150, 126, 2, 0, 84, 53, 37, 183, 85, 215, 189, 231, 60, 6, 4, 246, 186, 97, 61, 203, 254, 36, 205, 146, 255, 112, 239, 135, 247, 252, 246, 223, 253, 100, 242, 94, 193, 142, 50, 195, 164, 136, 121, 151, 101, 201, 161, 31, 191, 253, 84, 18, 241, 163, 72, 146, 3, 231, 23, 151, 14, 230, 125, 130, 115, 126, 32, 31, 114, 218, 85, 10, 225, 78, 101, 0, 128, 249, 86, 225, 23, 6, 67, 195, 123, 206, 3, 225, 250, 109, 215, 179, 172, 120, 80, 207, 178, 179, 127, 156, 68, 252, 224, 231, 63, 188, 244, 191, 29, 210, 33, 102, 156, 84, 51, 199, 238, 61, 243, 214, 29, 103, 147, 248, 205, 44, 73, 238, 61, 191, 108, 112, 48, 175, 26, 202, 235, 62, 32, 174, 217, 211, 212, 211, 221, 1, 0, 166, 67, 173, 167, 181, 247, 223, 99, 145, 131, 150, 218, 190, 110, 88, 223, 24, 212, 179, 63, 72, 179, 244, 121, 247, 168, 207, 47, 73, 101, 14, 125, 228, 215, 255, 98, 239, 242, 47, 127, 121, 38, 73, 147, 175, 100, 17, 157, 136, 122, 193, 188, 112, 40, 111, 248, 29, 232, 130, 54, 0, 0, 253, 148, 15, 246, 85, 30, 20, 87, 32, 172, 15, 10, 234, 249, 51, 234, 89, 100, 217, 127, 253, 203, 108, 225, 229, 63, 60, 179, 251, 157, 193, 29, 99, 214, 72, 56, 243, 36, 203, 146, 163, 63, 122, 231, 243, 103, 211, 248, 79, 34, 226, 226, 136, 234, 193, 188, 126, 40, 31, 124, 234, 213, 15, 223, 78, 109, 0, 128, 217, 86, 111, 118, 125, 120, 136, 175, 113, 223, 121, 191, 253, 111, 248, 123, 161, 160, 254, 255, 102, 89, 246, 195, 223, 203, 246, 254, 167, 30, 36, 55, 63, 164, 152, 57, 113, 232, 204, 159, 95, 155, 38, 239, 253, 86, 150, 196, 241, 243, 203, 54, 132, 243, 188, 96, 62, 116, 182, 188, 254, 123, 208, 203, 133, 113, 167, 44, 0, 0, 101, 20, 15, 242, 131, 67, 123, 177, 247, 160, 119, 183, 171, 18, 212, 55, 188, 158, 45, 203, 126, 246, 94, 26, 207, 254, 254, 155, 251, 254, 100, 64, 231, 152, 17, 210, 206, 172, 59, 147, 165, 135, 211, 183, 190, 151, 68, 250, 227, 44, 98, 57, 98, 68, 193, 188, 68, 40, 31, 30, 200, 43, 158, 150, 74, 222, 1, 0, 230, 83, 229, 123, 213, 7, 111, 151, 31, 216, 203, 223, 119, 94, 39, 168, 39, 17, 127, 117, 54, 226, 205, 223, 59, 187, 231, 55, 204, 166, 207, 54, 137, 102, 134, 221, 117, 230, 207, 247, 44, 165, 239, 253, 151, 89, 196, 201, 243, 203, 46, 132, 243, 74, 193, 188, 90, 40, 159, 190, 215, 171, 249, 177, 0, 0, 24, 143, 49, 190, 170, 109, 100, 175, 91, 43, 23, 214, 203, 6, 245, 174, 119, 168, 255, 79, 239, 45, 191, 247, 204, 31, 124, 255, 178, 127, 153, 219, 73, 166, 154, 36, 50, 163, 14, 255, 228, 237, 143, 39, 17, 191, 149, 101, 113, 81, 68, 249, 89, 243, 114, 193, 220, 43, 214, 0, 0, 104, 131, 9, 191, 106, 109, 200, 171, 213, 114, 131, 122, 185, 178, 247, 127, 149, 101, 217, 87, 127, 239, 135, 251, 254, 94, 94, 143, 153, 94, 146, 205, 140, 57, 118, 38, 91, 248, 69, 242, 206, 79, 35, 137, 151, 227, 253, 255, 191, 101, 102, 205, 235, 4, 243, 209, 188, 98, 109, 200, 62, 26, 226, 137, 240, 0, 0, 147, 213, 252, 43, 213, 250, 30, 165, 96, 179, 186, 175, 90, 27, 77, 80, 223, 48, 155, 126, 54, 251, 173, 127, 191, 119, 239, 55, 255, 232, 107, 201, 47, 7, 116, 150, 41, 35, 149, 204, 144, 99, 103, 222, 218, 249, 139, 52, 249, 111, 34, 226, 193, 136, 2, 179, 230, 3, 159, 202, 158, 95, 246, 62, 60, 152, 231, 156, 86, 35, 184, 247, 92, 176, 6, 0, 96, 189, 106, 65, 191, 202, 107, 214, 122, 183, 107, 62, 168, 15, 153, 77, 63, 155, 253, 47, 191, 140, 133, 79, 121, 29, 219, 236, 144, 110, 102, 196, 161, 31, 255, 249, 237, 73, 246, 238, 223, 143, 36, 185, 44, 34, 47, 156, 151, 156, 53, 31, 48, 155, 94, 63, 148, 23, 59, 245, 198, 26, 192, 133, 125, 0, 128, 201, 24, 203, 236, 249, 249, 67, 213, 188, 23, 189, 137, 176, 158, 51, 83, 94, 101, 54, 61, 137, 236, 95, 164, 157, 206, 99, 255, 232, 245, 75, 254, 56, 167, 99, 76, 17, 137, 100, 6, 28, 62, 243, 214, 137, 72, 146, 191, 27, 73, 108, 141, 24, 82, 210, 94, 58, 152, 111, 92, 87, 253, 53, 107, 57, 109, 55, 108, 86, 225, 116, 20, 170, 1, 0, 88, 175, 66, 216, 31, 229, 59, 209, 179, 188, 160, 221, 179, 125, 249, 217, 244, 11, 33, 61, 139, 127, 155, 197, 123, 159, 254, 249, 15, 47, 251, 7, 253, 59, 202, 180, 144, 110, 166, 220, 145, 31, 191, 245, 213, 136, 244, 111, 101, 145, 45, 68, 244, 11, 231, 195, 102, 205, 27, 10, 230, 37, 67, 121, 225, 48, 222, 202, 0, 222, 198, 62, 1, 0, 180, 209, 24, 159, 210, 94, 84, 193, 0, 95, 234, 21, 107, 125, 247, 91, 47, 168, 15, 157, 77, 239, 153, 73, 143, 247, 146, 136, 111, 255, 238, 15, 246, 254, 205, 156, 142, 51, 5, 36, 141, 41, 118, 232, 199, 127, 250, 163, 36, 210, 31, 68, 20, 47, 105, 47, 91, 206, 62, 214, 247, 159, 215, 14, 227, 78, 103, 0, 128, 249, 84, 243, 23, 1, 67, 66, 251, 232, 222, 135, 94, 162, 236, 125, 64, 72, 63, 183, 228, 194, 76, 251, 155, 63, 255, 193, 190, 159, 230, 116, 152, 150, 147, 104, 166, 81, 150, 37, 135, 127, 252, 246, 127, 28, 73, 242, 98, 196, 144, 112, 94, 106, 214, 188, 78, 48, 175, 16, 202, 75, 5, 114, 167, 42, 0, 0, 117, 148, 8, 241, 3, 2, 123, 225, 176, 222, 96, 80, 31, 88, 242, 222, 247, 225, 113, 241, 215, 126, 254, 195, 61, 175, 68, 146, 180, 176, 132, 129, 65, 164, 158, 105, 115, 38, 75, 143, 196, 219, 127, 35, 75, 147, 175, 71, 84, 185, 223, 188, 108, 56, 111, 240, 29, 232, 133, 2, 121, 195, 167, 100, 43, 75, 228, 1, 0, 168, 172, 241, 7, 202, 21, 216, 95, 206, 49, 27, 125, 23, 122, 157, 144, 190, 110, 217, 186, 251, 210, 255, 198, 207, 126, 176, 231, 91, 66, 250, 116, 73, 39, 221, 1, 74, 200, 178, 228, 104, 242, 206, 95, 239, 9, 231, 27, 108, 12, 231, 73, 146, 244, 134, 243, 36, 233, 154, 105, 207, 107, 219, 21, 230, 123, 130, 251, 198, 80, 191, 113, 251, 174, 237, 6, 222, 163, 190, 254, 171, 128, 245, 251, 28, 246, 5, 0, 192, 108, 105, 124, 44, 88, 96, 60, 154, 179, 207, 254, 99, 224, 226, 227, 232, 220, 241, 119, 207, 120, 189, 171, 237, 160, 91, 90, 223, 95, 150, 37, 241, 220, 225, 159, 188, 243, 215, 243, 190, 107, 218, 73, 130, 153, 34, 135, 207, 188, 253, 31, 69, 26, 47, 71, 244, 155, 57, 47, 120, 191, 121, 217, 89, 243, 210, 239, 64, 239, 183, 77, 254, 246, 249, 205, 218, 119, 106, 246, 255, 133, 8, 0, 0, 195, 100, 117, 239, 17, 31, 133, 186, 175, 91, 203, 217, 71, 185, 119, 161, 151, 153, 77, 47, 119, 95, 250, 186, 215, 176, 253, 230, 207, 126, 176, 239, 133, 254, 223, 0, 109, 35, 113, 76, 137, 190, 15, 132, 27, 16, 192, 139, 150, 180, 23, 47, 103, 175, 19, 204, 11, 156, 102, 13, 4, 114, 1, 26, 0, 96, 62, 53, 242, 11, 128, 66, 129, 189, 248, 235, 214, 138, 191, 7, 125, 227, 186, 108, 64, 249, 250, 250, 229, 189, 33, 61, 191, 220, 61, 75, 226, 7, 191, 247, 230, 222, 159, 244, 239, 60, 109, 34, 209, 76, 129, 195, 63, 122, 235, 217, 72, 146, 223, 138, 40, 59, 115, 222, 47, 156, 143, 96, 214, 188, 196, 147, 220, 7, 111, 51, 160, 185, 83, 21, 0, 128, 26, 74, 135, 248, 42, 239, 70, 239, 218, 166, 209, 217, 244, 66, 33, 189, 183, 253, 249, 239, 59, 141, 120, 206, 43, 216, 218, 79, 234, 105, 185, 131, 63, 122, 251, 84, 39, 73, 254, 126, 22, 217, 194, 248, 195, 121, 195, 193, 188, 64, 40, 111, 69, 16, 111, 97, 121, 61, 0, 192, 76, 106, 252, 129, 111, 21, 186, 80, 227, 33, 113, 231, 247, 48, 172, 125, 241, 217, 244, 38, 66, 122, 255, 153, 244, 36, 226, 189, 247, 178, 179, 79, 255, 254, 15, 47, 253, 239, 250, 126, 27, 180, 130, 36, 210, 98, 135, 207, 188, 115, 115, 164, 217, 239, 70, 196, 182, 74, 101, 237, 67, 239, 55, 47, 54, 107, 94, 43, 152, 143, 43, 148, 11, 213, 0, 0, 243, 173, 129, 176, 95, 47, 172, 55, 31, 212, 139, 222, 151, 94, 34, 164, 255, 155, 36, 210, 123, 127, 247, 7, 151, 252, 111, 57, 223, 4, 19, 38, 213, 180, 212, 61, 191, 254, 103, 151, 116, 222, 125, 239, 31, 71, 146, 92, 22, 49, 160, 180, 189, 68, 56, 175, 61, 107, 94, 52, 152, 15, 9, 203, 149, 2, 185, 0, 14, 0, 64, 29, 21, 2, 252, 208, 192, 94, 228, 53, 107, 93, 237, 234, 205, 166, 87, 8, 233, 93, 165, 238, 145, 101, 255, 188, 179, 152, 220, 249, 143, 94, 219, 251, 23, 125, 58, 207, 132, 121, 205, 90, 11, 29, 59, 147, 45, 116, 222, 125, 239, 111, 79, 50, 156, 247, 188, 46, 162, 239, 12, 123, 159, 153, 245, 156, 32, 157, 172, 251, 51, 148, 215, 165, 1, 0, 208, 180, 10, 99, 204, 161, 99, 216, 190, 251, 201, 25, 39, 95, 248, 207, 126, 175, 101, 235, 109, 87, 188, 2, 182, 107, 188, 159, 151, 25, 62, 248, 251, 254, 179, 191, 140, 191, 125, 236, 76, 182, 208, 255, 155, 98, 146, 252, 79, 105, 161, 95, 38, 111, 255, 181, 72, 146, 251, 35, 70, 24, 206, 43, 207, 154, 23, 159, 49, 47, 60, 83, 62, 210, 0, 46, 220, 3, 0, 204, 150, 6, 239, 91, 239, 30, 135, 14, 152, 101, 95, 63, 182, 237, 153, 89, 63, 191, 159, 13, 219, 39, 23, 90, 247, 107, 147, 36, 201, 186, 153, 241, 117, 109, 55, 180, 75, 46, 108, 255, 65, 251, 100, 227, 62, 215, 45, 187, 208, 166, 107, 249, 249, 191, 39, 145, 68, 22, 89, 100, 73, 28, 255, 69, 246, 206, 175, 71, 196, 247, 115, 191, 97, 38, 66, 122, 105, 153, 195, 63, 121, 251, 227, 145, 197, 223, 141, 24, 127, 56, 31, 126, 175, 121, 145, 123, 209, 11, 4, 243, 218, 129, 220, 105, 11, 0, 64, 17, 53, 195, 252, 144, 178, 248, 220, 18, 248, 82, 79, 111, 175, 248, 14, 244, 250, 229, 238, 89, 150, 100, 31, 253, 189, 55, 247, 253, 78, 255, 111, 130, 73, 144, 116, 90, 228, 208, 79, 255, 242, 210, 228, 236, 47, 255, 56, 34, 46, 110, 54, 156, 151, 41, 155, 233, 110, 211, 181, 125, 223, 245, 231, 91, 13, 56, 157, 42, 135, 114, 167, 40, 0, 0, 77, 170, 24, 218, 7, 132, 245, 38, 130, 250, 36, 66, 122, 146, 196, 255, 243, 139, 228, 236, 173, 127, 248, 198, 165, 255, 162, 255, 55, 192, 184, 185, 7, 189, 45, 206, 100, 105, 114, 246, 151, 255, 85, 68, 92, 124, 97, 89, 209, 112, 190, 65, 191, 153, 243, 238, 253, 109, 220, 182, 110, 56, 47, 127, 95, 78, 158, 164, 207, 23, 0, 0, 52, 169, 226, 152, 179, 192, 243, 150, 250, 110, 211, 115, 236, 254, 235, 135, 223, 151, 254, 65, 95, 75, 229, 129, 1, 109, 179, 44, 46, 90, 58, 155, 252, 23, 113, 38, 147, 11, 91, 194, 61, 232, 45, 113, 56, 125, 235, 123, 17, 233, 3, 17, 37, 238, 221, 62, 47, 239, 1, 17, 181, 102, 206, 139, 5, 243, 193, 253, 25, 102, 204, 1, 220, 195, 230, 0, 0, 166, 211, 200, 223, 151, 222, 61, 78, 28, 112, 188, 245, 99, 202, 174, 126, 157, 31, 31, 111, 152, 81, 239, 185, 63, 189, 207, 189, 233, 185, 247, 165, 247, 182, 233, 185, 223, 188, 235, 62, 243, 161, 186, 239, 71, 143, 228, 161, 195, 241, 246, 243, 63, 143, 248, 141, 225, 27, 51, 106, 18, 75, 11, 28, 249, 201, 159, 222, 16, 89, 250, 191, 102, 17, 43, 213, 75, 219, 107, 220, 115, 94, 113, 214, 188, 119, 97, 145, 211, 169, 193, 83, 78, 224, 6, 0, 160, 159, 70, 3, 125, 181, 119, 163, 247, 45, 123, 47, 88, 242, 94, 171, 220, 189, 74, 169, 123, 196, 191, 127, 47, 201, 110, 255, 253, 55, 247, 253, 73, 111, 167, 25, 39, 165, 12, 147, 118, 38, 75, 227, 108, 242, 159, 103, 17, 43, 23, 150, 141, 56, 156, 111, 120, 181, 67, 201, 112, 94, 188, 124, 167, 123, 159, 53, 74, 214, 251, 189, 18, 67, 56, 7, 0, 32, 79, 163, 227, 199, 2, 99, 217, 162, 183, 129, 22, 28, 123, 111, 124, 21, 91, 94, 185, 123, 92, 104, 187, 97, 89, 201, 215, 175, 69, 68, 100, 17, 203, 233, 217, 248, 91, 145, 101, 6, 217, 19, 38, 160, 79, 216, 209, 244, 157, 175, 103, 73, 114, 52, 98, 240, 172, 116, 147, 225, 188, 123, 223, 61, 219, 157, 95, 215, 39, 156, 247, 237, 95, 238, 135, 93, 133, 80, 46, 136, 3, 0, 48, 42, 181, 199, 154, 3, 198, 183, 57, 251, 235, 27, 210, 11, 222, 90, 58, 186, 144, 222, 167, 127, 73, 114, 255, 145, 159, 188, 253, 149, 158, 6, 140, 149, 244, 51, 65, 31, 249, 245, 191, 216, 187, 252, 238, 187, 255, 71, 36, 177, 181, 185, 210, 246, 42, 225, 124, 248, 172, 121, 143, 161, 51, 230, 5, 9, 224, 0, 0, 180, 73, 169, 242, 248, 1, 109, 139, 148, 189, 15, 42, 121, 239, 251, 132, 247, 2, 79, 109, 175, 85, 234, 158, 252, 235, 119, 59, 201, 141, 127, 240, 250, 37, 127, 214, 247, 123, 98, 228, 204, 160, 79, 208, 210, 187, 239, 254, 7, 145, 196, 214, 11, 11, 166, 62, 156, 23, 156, 49, 55, 59, 14, 0, 64, 91, 149, 26, 171, 14, 153, 81, 239, 105, 93, 162, 228, 189, 228, 76, 122, 51, 165, 238, 217, 246, 206, 187, 239, 253, 164, 167, 227, 140, 141, 132, 52, 33, 247, 158, 121, 235, 142, 247, 210, 228, 15, 35, 34, 237, 59, 123, 94, 53, 156, 247, 105, 179, 161, 221, 72, 194, 121, 193, 211, 104, 140, 129, 188, 244, 147, 240, 1, 0, 152, 42, 185, 239, 30, 31, 201, 193, 138, 30, 171, 200, 131, 225, 170, 205, 164, 247, 125, 112, 92, 159, 101, 229, 102, 210, 123, 103, 209, 35, 226, 108, 114, 54, 187, 231, 103, 103, 246, 253, 227, 222, 111, 134, 81, 51, 131, 62, 9, 89, 150, 156, 77, 226, 55, 35, 47, 156, 15, 213, 103, 86, 252, 194, 170, 65, 247, 164, 12, 218, 229, 144, 112, 158, 251, 91, 196, 18, 51, 230, 13, 75, 6, 252, 1, 0, 96, 182, 141, 117, 44, 88, 106, 70, 125, 248, 182, 195, 103, 210, 251, 237, 166, 207, 68, 91, 237, 49, 118, 87, 229, 238, 185, 191, 167, 145, 196, 111, 122, 96, 220, 100, 8, 232, 19, 112, 228, 167, 111, 63, 157, 37, 201, 189, 189, 107, 138, 150, 182, 15, 222, 46, 55, 156, 231, 205, 158, 87, 254, 192, 24, 242, 51, 219, 80, 48, 23, 194, 1, 0, 40, 99, 100, 227, 199, 66, 227, 219, 98, 37, 239, 131, 199, 220, 195, 74, 221, 215, 181, 105, 170, 212, 125, 157, 44, 73, 142, 28, 249, 209, 91, 143, 247, 253, 62, 24, 41, 1, 125, 220, 206, 100, 105, 150, 101, 63, 136, 88, 247, 67, 217, 239, 254, 148, 90, 247, 157, 119, 239, 163, 123, 125, 137, 112, 222, 215, 128, 123, 109, 206, 239, 179, 98, 48, 23, 196, 1, 0, 24, 149, 198, 198, 154, 67, 199, 187, 67, 198, 203, 235, 250, 211, 179, 223, 13, 251, 232, 93, 94, 164, 138, 182, 220, 27, 160, 54, 238, 227, 124, 159, 178, 36, 249, 105, 156, 201, 228, 197, 49, 243, 15, 62, 102, 135, 211, 183, 62, 25, 145, 222, 218, 187, 166, 120, 153, 74, 223, 251, 206, 187, 246, 211, 216, 204, 249, 160, 7, 87, 244, 118, 172, 82, 48, 23, 198, 1, 0, 152, 148, 90, 99, 209, 66, 65, 125, 112, 251, 122, 33, 189, 230, 248, 121, 208, 126, 146, 228, 192, 225, 228, 237, 167, 235, 29, 128, 178, 4, 244, 49, 250, 196, 223, 201, 58, 145, 37, 63, 140, 168, 55, 123, 222, 103, 131, 252, 245, 141, 150, 181, 15, 56, 126, 201, 96, 46, 148, 3, 0, 208, 54, 149, 199, 168, 3, 199, 195, 195, 198, 232, 213, 66, 122, 207, 250, 17, 204, 162, 71, 22, 103, 204, 162, 143, 151, 127, 236, 49, 250, 211, 255, 243, 157, 167, 35, 73, 110, 236, 93, 51, 96, 246, 188, 78, 105, 251, 184, 194, 121, 65, 66, 57, 0, 0, 211, 162, 210, 216, 117, 140, 33, 189, 94, 169, 123, 254, 54, 27, 164, 201, 205, 135, 58, 111, 63, 209, 187, 130, 81, 17, 208, 199, 233, 236, 217, 239, 70, 228, 204, 158, 231, 61, 24, 174, 176, 1, 63, 168, 3, 246, 53, 142, 112, 46, 148, 3, 0, 48, 205, 74, 141, 103, 155, 12, 233, 67, 182, 111, 44, 59, 244, 203, 37, 239, 183, 73, 207, 198, 139, 37, 119, 78, 13, 2, 250, 152, 220, 119, 230, 207, 14, 71, 146, 30, 234, 93, 211, 92, 153, 202, 198, 93, 12, 15, 213, 85, 94, 239, 112, 161, 93, 145, 123, 229, 5, 115, 0, 0, 102, 72, 225, 241, 109, 153, 91, 64, 7, 133, 244, 2, 99, 250, 245, 91, 110, 92, 87, 33, 67, 244, 89, 150, 37, 201, 209, 35, 103, 222, 57, 216, 191, 35, 52, 77, 64, 31, 147, 119, 227, 236, 11, 27, 22, 12, 123, 234, 122, 238, 186, 2, 109, 74, 221, 179, 50, 104, 93, 210, 123, 60, 193, 28, 0, 128, 57, 87, 42, 168, 119, 109, 89, 106, 114, 173, 103, 93, 193, 82, 247, 174, 246, 197, 114, 70, 126, 127, 206, 166, 217, 11, 189, 141, 24, 5, 41, 106, 12, 238, 58, 243, 231, 123, 150, 210, 179, 255, 60, 139, 108, 113, 99, 121, 251, 198, 64, 157, 244, 89, 86, 244, 55, 95, 253, 159, 218, 94, 240, 190, 243, 162, 101, 237, 5, 195, 121, 43, 84, 124, 205, 27, 0, 0, 83, 34, 203, 38, 221, 131, 136, 136, 200, 162, 64, 63, 250, 246, 181, 207, 178, 117, 237, 122, 246, 187, 97, 31, 89, 111, 251, 11, 255, 221, 189, 46, 27, 186, 254, 194, 186, 245, 109, 222, 255, 239, 44, 178, 72, 34, 121, 247, 175, 58, 157, 253, 127, 244, 250, 174, 183, 251, 124, 35, 52, 200, 12, 250, 24, 44, 38, 239, 126, 165, 55, 156, 111, 84, 236, 222, 241, 138, 165, 237, 99, 8, 231, 99, 159, 53, 63, 95, 54, 148, 247, 5, 0, 192, 108, 107, 201, 120, 176, 208, 56, 184, 194, 152, 187, 218, 12, 253, 186, 253, 150, 184, 63, 125, 216, 19, 221, 179, 200, 22, 150, 223, 253, 197, 23, 134, 119, 136, 186, 4, 244, 81, 203, 178, 36, 146, 228, 75, 189, 43, 6, 148, 163, 119, 7, 234, 97, 225, 184, 196, 131, 221, 134, 255, 160, 151, 255, 48, 27, 121, 48, 23, 192, 1, 0, 40, 107, 204, 99, 200, 106, 99, 226, 225, 147, 96, 31, 252, 37, 167, 212, 253, 194, 234, 162, 153, 97, 64, 128, 31, 56, 17, 152, 62, 27, 89, 102, 32, 62, 98, 2, 250, 136, 29, 252, 233, 91, 15, 70, 196, 53, 85, 183, 47, 244, 106, 132, 15, 26, 111, 108, 219, 189, 122, 232, 253, 228, 57, 251, 30, 116, 207, 202, 40, 194, 185, 48, 14, 0, 192, 40, 140, 120, 156, 57, 112, 108, 92, 244, 233, 238, 133, 159, 236, 94, 62, 31, 12, 11, 241, 67, 92, 115, 239, 79, 222, 185, 175, 206, 14, 24, 78, 64, 31, 177, 52, 75, 63, 27, 177, 238, 7, 107, 224, 171, 213, 98, 104, 200, 94, 215, 112, 227, 182, 165, 158, 240, 152, 191, 191, 50, 26, 13, 231, 2, 57, 0, 0, 227, 54, 130, 49, 232, 40, 102, 210, 63, 104, 54, 120, 204, 95, 252, 181, 107, 189, 25, 162, 200, 43, 215, 222, 203, 178, 207, 22, 235, 40, 85, 9, 232, 35, 244, 145, 255, 44, 91, 140, 136, 39, 122, 215, 244, 249, 65, 40, 82, 166, 82, 246, 55, 96, 131, 238, 97, 169, 248, 218, 135, 220, 253, 85, 33, 148, 3, 0, 208, 22, 13, 142, 77, 115, 199, 202, 21, 199, 224, 133, 94, 189, 118, 97, 245, 224, 10, 220, 65, 183, 199, 110, 92, 215, 247, 190, 244, 143, 190, 159, 113, 24, 17, 1, 125, 132, 150, 222, 254, 211, 71, 34, 226, 226, 11, 11, 250, 206, 148, 71, 159, 101, 5, 75, 207, 251, 234, 19, 244, 27, 46, 109, 175, 29, 206, 133, 114, 0, 0, 218, 172, 129, 241, 106, 249, 144, 94, 165, 212, 189, 78, 78, 24, 80, 137, 155, 159, 91, 118, 44, 189, 243, 246, 3, 37, 14, 74, 73, 2, 250, 40, 37, 157, 143, 71, 212, 13, 180, 3, 30, 226, 112, 161, 201, 160, 7, 60, 228, 181, 237, 218, 255, 208, 118, 231, 91, 215, 248, 94, 4, 115, 0, 0, 166, 73, 205, 241, 107, 211, 33, 189, 255, 242, 65, 183, 188, 22, 184, 79, 189, 160, 11, 223, 75, 150, 124, 178, 246, 206, 200, 37, 160, 143, 202, 153, 44, 77, 147, 120, 180, 119, 197, 176, 242, 246, 98, 229, 235, 3, 239, 61, 175, 251, 3, 216, 116, 56, 23, 204, 1, 0, 152, 102, 53, 198, 179, 181, 203, 221, 115, 119, 156, 191, 125, 126, 150, 24, 116, 175, 122, 177, 50, 247, 52, 141, 199, 227, 76, 38, 71, 142, 136, 127, 216, 17, 57, 154, 254, 217, 93, 89, 196, 174, 11, 11, 10, 151, 183, 87, 85, 32, 84, 23, 153, 61, 31, 69, 56, 7, 0, 128, 89, 48, 150, 144, 158, 63, 139, 94, 235, 137, 238, 131, 148, 40, 115, 207, 34, 118, 29, 125, 239, 237, 219, 171, 29, 136, 97, 4, 244, 17, 57, 155, 101, 167, 34, 186, 127, 136, 138, 221, 55, 50, 236, 29, 133, 67, 159, 220, 126, 161, 245, 4, 195, 177, 89, 115, 0, 0, 102, 209, 132, 199, 185, 67, 199, 248, 121, 79, 116, 47, 244, 192, 233, 193, 203, 206, 31, 251, 236, 66, 156, 44, 214, 91, 202, 18, 208, 71, 36, 137, 117, 39, 109, 159, 147, 191, 248, 15, 68, 217, 3, 215, 40, 161, 105, 106, 246, 92, 48, 7, 0, 96, 214, 149, 28, 243, 214, 42, 117, 175, 253, 74, 229, 129, 59, 239, 179, 219, 193, 51, 234, 73, 42, 160, 143, 138, 128, 62, 2, 71, 94, 254, 139, 181, 72, 226, 206, 70, 118, 86, 241, 55, 93, 195, 67, 117, 193, 7, 80, 148, 37, 156, 3, 0, 48, 47, 154, 154, 77, 47, 250, 32, 231, 11, 107, 235, 86, 230, 214, 148, 165, 7, 143, 157, 249, 243, 45, 205, 236, 140, 245, 4, 244, 17, 120, 119, 243, 47, 14, 102, 17, 157, 190, 63, 56, 67, 158, 184, 56, 232, 189, 232, 67, 85, 253, 205, 90, 83, 31, 42, 194, 57, 0, 0, 243, 104, 36, 33, 189, 224, 250, 74, 199, 238, 51, 249, 87, 240, 205, 80, 73, 36, 145, 69, 182, 240, 110, 231, 223, 55, 51, 33, 201, 6, 2, 250, 8, 116, 210, 244, 112, 239, 210, 126, 33, 188, 255, 250, 66, 6, 4, 249, 210, 179, 231, 117, 9, 230, 0, 0, 204, 187, 198, 199, 196, 53, 102, 209, 75, 247, 101, 88, 153, 123, 239, 250, 179, 103, 59, 71, 74, 30, 132, 2, 4, 244, 81, 200, 146, 15, 2, 122, 165, 167, 183, 87, 248, 193, 42, 220, 182, 225, 210, 118, 225, 28, 0, 0, 154, 81, 178, 212, 61, 127, 187, 34, 109, 11, 102, 147, 156, 60, 147, 68, 34, 160, 143, 128, 128, 222, 180, 44, 75, 146, 136, 187, 171, 204, 98, 23, 126, 95, 97, 157, 50, 120, 0, 0, 96, 52, 90, 49, 121, 181, 49, 51, 12, 187, 133, 182, 74, 117, 111, 18, 73, 100, 73, 220, 83, 177, 131, 12, 32, 160, 55, 236, 240, 27, 111, 239, 207, 34, 219, 190, 113, 233, 132, 95, 119, 246, 193, 95, 6, 172, 171, 187, 111, 0, 0, 160, 249, 49, 246, 144, 138, 220, 177, 233, 57, 246, 197, 135, 126, 250, 151, 151, 78, 162, 39, 179, 76, 64, 111, 216, 217, 165, 236, 150, 102, 247, 152, 55, 123, 94, 100, 211, 250, 63, 192, 181, 94, 7, 1, 0, 0, 243, 168, 169, 215, 23, 151, 216, 247, 160, 182, 181, 30, 68, 61, 200, 187, 191, 56, 208, 236, 14, 17, 208, 27, 214, 73, 58, 3, 79, 210, 225, 37, 36, 245, 94, 129, 144, 255, 67, 95, 126, 127, 141, 124, 128, 0, 0, 0, 23, 84, 27, 99, 55, 28, 248, 251, 6, 246, 50, 183, 224, 94, 104, 32, 160, 55, 76, 64, 111, 216, 217, 136, 155, 46, 252, 165, 196, 3, 226, 134, 158, 252, 131, 20, 126, 248, 92, 137, 93, 14, 250, 97, 55, 123, 14, 0, 0, 131, 13, 24, 51, 215, 158, 8, 107, 120, 252, 223, 255, 117, 107, 57, 251, 94, 247, 223, 105, 18, 55, 87, 62, 40, 125, 9, 232, 13, 75, 179, 236, 154, 100, 200, 111, 162, 134, 253, 166, 170, 216, 186, 126, 173, 155, 153, 61, 23, 206, 1, 0, 160, 1, 163, 12, 233, 149, 247, 83, 52, 127, 12, 206, 49, 73, 36, 17, 73, 118, 117, 201, 131, 51, 132, 128, 222, 176, 44, 137, 43, 243, 214, 13, 253, 205, 84, 169, 242, 246, 122, 165, 240, 0, 0, 192, 52, 41, 48, 238, 47, 115, 175, 121, 193, 215, 173, 13, 170, 244, 205, 178, 244, 170, 225, 7, 162, 12, 1, 189, 65, 135, 126, 227, 95, 172, 70, 196, 238, 136, 24, 94, 222, 222, 176, 13, 191, 57, 171, 83, 222, 98, 246, 28, 0, 0, 154, 51, 170, 89, 244, 164, 107, 54, 123, 156, 46, 28, 59, 219, 119, 236, 204, 63, 93, 25, 239, 193, 103, 155, 128, 222, 160, 236, 255, 235, 92, 25, 35, 120, 167, 90, 238, 251, 207, 5, 102, 0, 0, 160, 175, 188, 247, 161, 87, 221, 93, 223, 237, 147, 127, 215, 217, 124, 121, 189, 29, 179, 158, 128, 222, 160, 197, 179, 103, 247, 77, 186, 15, 117, 120, 106, 59, 0, 0, 140, 87, 227, 99, 240, 49, 79, 226, 45, 198, 123, 222, 133, 222, 32, 1, 189, 65, 103, 147, 206, 142, 166, 247, 89, 233, 253, 231, 197, 118, 188, 241, 175, 195, 62, 24, 204, 214, 3, 0, 64, 53, 67, 198, 210, 61, 99, 241, 17, 143, 253, 155, 116, 246, 108, 214, 120, 6, 154, 103, 2, 122, 131, 146, 136, 157, 133, 90, 117, 47, 233, 123, 191, 122, 115, 239, 51, 7, 0, 0, 230, 81, 215, 164, 220, 128, 172, 209, 191, 4, 126, 120, 246, 40, 150, 129, 40, 74, 64, 111, 208, 123, 73, 236, 200, 123, 197, 218, 240, 19, 126, 140, 193, 187, 236, 236, 57, 0, 0, 48, 94, 227, 168, 96, 237, 27, 216, 135, 133, 247, 238, 87, 173, 165, 102, 208, 27, 36, 160, 55, 40, 201, 98, 123, 177, 134, 197, 94, 91, 48, 18, 85, 142, 167, 188, 29, 0, 0, 234, 41, 91, 230, 94, 96, 155, 166, 13, 127, 45, 116, 31, 103, 179, 139, 70, 211, 155, 249, 36, 160, 55, 235, 220, 43, 6, 114, 79, 236, 162, 63, 96, 13, 61, 105, 17, 0, 0, 96, 157, 65, 101, 238, 57, 91, 172, 223, 184, 247, 191, 211, 240, 154, 181, 6, 9, 232, 13, 74, 34, 89, 42, 211, 186, 119, 209, 40, 2, 121, 133, 223, 212, 1, 0, 0, 99, 55, 124, 108, 62, 130, 177, 123, 197, 123, 207, 207, 203, 74, 101, 32, 134, 17, 208, 155, 148, 172, 63, 57, 39, 88, 198, 158, 167, 45, 253, 0, 0, 0, 138, 105, 201, 24, 62, 247, 62, 244, 36, 89, 30, 127, 111, 102, 151, 128, 222, 168, 108, 242, 39, 103, 165, 146, 122, 0, 0, 96, 58, 84, 184, 79, 124, 132, 146, 172, 5, 25, 104, 134, 8, 232, 141, 74, 38, 242, 239, 169, 76, 29, 0, 0, 230, 219, 164, 50, 65, 150, 36, 157, 137, 28, 120, 70, 9, 232, 243, 162, 207, 111, 215, 4, 123, 0, 0, 104, 151, 54, 60, 205, 157, 201, 17, 208, 167, 85, 191, 31, 82, 229, 237, 0, 0, 48, 7, 134, 148, 185, 11, 244, 83, 75, 64, 159, 114, 102, 193, 1, 0, 128, 8, 217, 96, 22, 8, 232, 211, 160, 244, 187, 10, 1, 0, 0, 34, 46, 100, 8, 179, 234, 83, 65, 64, 159, 70, 101, 203, 219, 253, 48, 2, 0, 192, 116, 235, 25, 211, 43, 115, 159, 69, 2, 250, 20, 83, 194, 2, 0, 0, 172, 39, 35, 76, 55, 1, 189, 21, 6, 252, 16, 41, 111, 7, 0, 0, 106, 41, 146, 37, 228, 141, 54, 16, 208, 199, 109, 93, 169, 73, 210, 183, 236, 36, 25, 176, 46, 148, 170, 0, 0, 0, 197, 116, 103, 135, 164, 59, 107, 244, 121, 21, 115, 50, 164, 116, 158, 145, 18, 208, 155, 150, 123, 66, 15, 57, 185, 157, 252, 0, 0, 64, 43, 229, 100, 28, 25, 166, 113, 2, 250, 68, 56, 145, 1, 0, 128, 150, 24, 80, 217, 203, 120, 9, 232, 35, 49, 172, 140, 189, 127, 91, 0, 0, 128, 201, 25, 156, 77, 146, 50, 21, 194, 84, 34, 160, 143, 211, 208, 251, 207, 243, 219, 3, 0, 0, 140, 157, 76, 50, 86, 2, 122, 11, 21, 10, 239, 0, 0, 0, 101, 245, 60, 40, 174, 95, 19, 121, 100, 82, 4, 244, 6, 229, 63, 241, 176, 232, 9, 238, 7, 1, 0, 0, 24, 167, 10, 25, 164, 108, 101, 48, 133, 9, 232, 0, 0, 0, 12, 33, 136, 143, 131, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 32, 160, 3, 0, 0, 64, 11, 8, 232, 0, 0, 0, 208, 2, 2, 58, 0, 0, 0, 180, 128, 128, 14, 0, 0, 0, 45, 176, 48, 233, 14, 0, 0, 204, 140, 44, 155, 116, 15, 198, 43, 73, 38, 221, 3, 128, 153, 34, 160, 3, 0, 212, 49, 111, 161, 124, 189, 243, 223, 187, 160, 14, 208, 8, 37, 238, 0, 0, 85, 205, 115, 56, 95, 47, 203, 252, 91, 0, 52, 64, 64, 7, 0, 40, 35, 203, 34, 137, 44, 158, 188, 101, 210, 29, 105, 33, 65, 29, 160, 22, 1, 29, 0, 160, 168, 247, 195, 231, 199, 238, 72, 226, 249, 7, 211, 56, 122, 173, 210, 238, 190, 4, 117, 128, 74, 4, 116, 0, 128, 97, 214, 5, 206, 189, 219, 35, 190, 114, 248, 220, 16, 234, 249, 7, 211, 88, 91, 153, 100, 199, 90, 78, 80, 7, 40, 69, 64, 7, 0, 200, 211, 21, 48, 147, 36, 226, 149, 71, 58, 177, 178, 120, 238, 239, 59, 54, 71, 124, 243, 184, 225, 212, 80, 130, 58, 64, 33, 174, 40, 0, 0, 221, 114, 2, 229, 39, 238, 72, 226, 150, 75, 55, 46, 59, 241, 161, 36, 238, 189, 78, 169, 123, 33, 130, 58, 192, 64, 2, 58, 0, 192, 122, 57, 1, 242, 242, 139, 35, 190, 124, 164, 255, 208, 233, 187, 15, 165, 177, 109, 211, 40, 59, 53, 99, 132, 116, 128, 190, 4, 116, 0, 128, 136, 129, 179, 187, 73, 18, 241, 210, 195, 157, 88, 94, 232, 191, 233, 246, 213, 136, 111, 29, 27, 223, 176, 42, 27, 242, 103, 42, 152, 77, 7, 232, 33, 160, 3, 0, 12, 9, 138, 159, 186, 51, 137, 3, 151, 14, 108, 18, 15, 222, 152, 196, 125, 13, 149, 186, 215, 13, 224, 83, 21, 224, 133, 116, 128, 11, 4, 116, 0, 96, 126, 21, 152, 197, 221, 127, 113, 196, 23, 15, 21, 27, 50, 189, 240, 80, 26, 219, 43, 148, 186, 143, 59, 64, 183, 46, 176, 155, 77, 7, 136, 8, 1, 29, 0, 152, 87, 5, 2, 97, 154, 70, 188, 122, 50, 191, 180, 189, 219, 246, 213, 136, 111, 23, 120, 170, 123, 219, 2, 114, 107, 250, 35, 164, 3, 115, 78, 64, 7, 0, 230, 75, 137, 217, 218, 79, 223, 153, 196, 141, 123, 202, 237, 254, 248, 13, 73, 220, 127, 125, 111, 169, 123, 43, 2, 112, 65, 19, 237, 171, 144, 14, 204, 49, 1, 29, 0, 152, 31, 37, 194, 223, 254, 29, 17, 207, 28, 172, 54, 84, 122, 225, 193, 52, 46, 218, 252, 254, 33, 167, 36, 148, 231, 153, 72, 255, 149, 188, 3, 115, 74, 64, 7, 0, 230, 67, 137, 192, 215, 121, 191, 180, 125, 169, 96, 105, 123, 183, 109, 171, 17, 47, 62, 152, 76, 117, 48, 239, 54, 177, 160, 14, 48, 71, 4, 116, 0, 96, 246, 149, 12, 122, 159, 185, 43, 137, 27, 47, 169, 119, 200, 35, 215, 166, 241, 192, 13, 179, 55, 212, 26, 123, 80, 23, 210, 129, 57, 50, 123, 87, 13, 0, 128, 245, 74, 6, 188, 43, 118, 68, 124, 238, 158, 102, 134, 72, 207, 63, 152, 198, 197, 21, 158, 234, 62, 13, 198, 26, 212, 133, 116, 96, 78, 8, 232, 0, 192, 108, 170, 112, 31, 115, 221, 210, 246, 110, 91, 87, 34, 94, 124, 184, 230, 112, 235, 252, 247, 81, 247, 107, 68, 198, 22, 212, 133, 116, 96, 14, 8, 232, 0, 192, 236, 169, 24, 230, 62, 119, 79, 18, 55, 212, 44, 109, 239, 118, 228, 154, 52, 30, 186, 177, 224, 144, 107, 148, 193, 122, 196, 161, 125, 44, 65, 93, 72, 7, 102, 156, 128, 14, 0, 204, 150, 138, 33, 238, 154, 93, 17, 159, 187, 123, 52, 67, 163, 231, 31, 76, 99, 215, 150, 62, 43, 198, 52, 203, 157, 107, 4, 199, 30, 75, 72, 23, 212, 129, 25, 37, 160, 3, 0, 179, 163, 98, 112, 235, 164, 17, 47, 159, 232, 196, 66, 167, 225, 254, 188, 111, 203, 242, 185, 87, 175, 69, 196, 100, 3, 249, 32, 13, 254, 178, 96, 218, 95, 45, 7, 48, 41, 2, 58, 0, 48, 247, 190, 112, 48, 141, 235, 27, 46, 109, 239, 118, 248, 154, 52, 30, 254, 80, 50, 218, 131, 52, 169, 237, 65, 189, 109, 191, 224, 0, 104, 128, 128, 14, 0, 204, 134, 138, 129, 237, 218, 221, 17, 159, 185, 123, 60, 193, 249, 59, 15, 116, 98, 215, 218, 88, 14, 213, 156, 134, 130, 250, 72, 8, 233, 192, 140, 17, 208, 1, 128, 233, 87, 49, 168, 45, 116, 206, 61, 181, 125, 97, 76, 35, 162, 45, 203, 17, 47, 62, 84, 165, 142, 62, 171, 249, 213, 128, 154, 65, 125, 100, 179, 233, 66, 58, 48, 67, 4, 116, 0, 96, 186, 213, 8, 104, 207, 28, 76, 227, 234, 157, 13, 246, 165, 128, 131, 87, 167, 113, 242, 166, 97, 67, 176, 166, 3, 118, 131, 251, 107, 32, 168, 55, 78, 72, 7, 102, 132, 128, 14, 0, 76, 175, 26, 193, 236, 218, 221, 17, 159, 190, 107, 50, 247, 132, 127, 235, 120, 39, 118, 111, 40, 117, 31, 193, 140, 247, 64, 13, 28, 175, 70, 80, 23, 210, 1, 250, 19, 208, 1, 128, 233, 84, 35, 144, 45, 46, 140, 183, 180, 189, 219, 230, 229, 136, 151, 31, 233, 68, 50, 182, 64, 62, 76, 141, 176, 94, 49, 168, 149, 233, 98, 221, 0, 0, 32, 0, 73, 68, 65, 84, 143, 164, 228, 93, 72, 7, 166, 156, 128, 14, 0, 76, 159, 154, 65, 108, 18, 165, 237, 221, 238, 188, 34, 141, 83, 55, 143, 232, 189, 110, 181, 84, 12, 235, 109, 154, 77, 7, 152, 82, 2, 58, 0, 48, 93, 106, 134, 243, 235, 46, 137, 248, 212, 157, 237, 120, 221, 217, 55, 123, 74, 221, 7, 232, 126, 79, 121, 145, 175, 218, 74, 6, 245, 26, 179, 233, 141, 49, 139, 14, 76, 49, 1, 29, 0, 152, 27, 139, 11, 17, 175, 77, 176, 180, 189, 219, 166, 165, 136, 87, 78, 46, 68, 207, 175, 11, 154, 10, 219, 141, 5, 247, 10, 65, 189, 244, 17, 132, 116, 128, 150, 92, 158, 0, 0, 10, 168, 25, 188, 190, 124, 56, 141, 43, 119, 52, 212, 151, 134, 220, 177, 63, 141, 211, 7, 210, 134, 103, 190, 135, 168, 124, 172, 209, 206, 166, 11, 233, 192, 188, 19, 208, 1, 128, 233, 80, 51, 112, 125, 104, 111, 196, 39, 63, 210, 142, 210, 246, 110, 223, 60, 190, 16, 123, 183, 79, 168, 111, 165, 195, 250, 104, 103, 211, 133, 116, 96, 158, 9, 232, 0, 192, 204, 91, 92, 136, 120, 249, 68, 39, 210, 118, 230, 243, 88, 89, 140, 120, 233, 196, 66, 244, 214, 186, 231, 203, 114, 254, 212, 82, 42, 172, 151, 8, 234, 147, 12, 233, 0, 83, 68, 64, 7, 0, 218, 175, 230, 76, 232, 87, 143, 180, 175, 180, 189, 219, 29, 251, 211, 120, 226, 150, 141, 79, 117, 207, 11, 225, 131, 2, 108, 149, 109, 250, 239, 168, 225, 160, 62, 169, 144, 110, 22, 29, 152, 34, 2, 58, 0, 208, 110, 53, 3, 214, 135, 247, 69, 124, 252, 142, 150, 78, 157, 119, 249, 181, 99, 11, 177, 111, 251, 136, 222, 17, 30, 189, 225, 189, 216, 70, 101, 130, 122, 83, 251, 58, 191, 71, 33, 29, 152, 47, 2, 58, 0, 48, 179, 150, 23, 35, 94, 125, 164, 189, 165, 237, 221, 206, 149, 186, 47, 150, 169, 116, 175, 165, 249, 160, 222, 124, 201, 187, 114, 119, 96, 158, 8, 232, 0, 64, 123, 53, 80, 218, 126, 217, 69, 13, 245, 101, 76, 110, 223, 159, 198, 147, 183, 117, 6, 55, 106, 248, 253, 231, 165, 102, 213, 11, 133, 244, 102, 75, 222, 27, 9, 233, 102, 209, 129, 41, 32, 160, 3, 0, 237, 84, 51, 80, 221, 180, 47, 226, 163, 183, 79, 201, 212, 121, 151, 111, 220, 191, 24, 151, 109, 79, 170, 7, 240, 26, 193, 189, 80, 80, 111, 106, 54, 93, 72, 7, 216, 64, 64, 7, 0, 218, 167, 102, 144, 90, 94, 140, 120, 229, 228, 244, 148, 182, 119, 91, 89, 140, 120, 229, 212, 98, 243, 253, 47, 17, 216, 11, 7, 245, 33, 123, 41, 212, 167, 130, 148, 187, 3, 179, 78, 64, 7, 0, 102, 206, 175, 30, 77, 226, 178, 237, 147, 238, 69, 61, 7, 46, 77, 227, 233, 219, 23, 70, 123, 144, 38, 130, 250, 208, 125, 20, 40, 121, 31, 103, 72, 55, 139, 14, 180, 152, 128, 14, 0, 180, 75, 205, 0, 117, 243, 190, 44, 158, 190, 109, 54, 134, 56, 95, 187, 127, 49, 46, 187, 232, 252, 52, 122, 86, 225, 171, 160, 2, 179, 234, 133, 130, 250, 224, 131, 12, 239, 67, 65, 66, 58, 48, 171, 102, 227, 234, 5, 0, 204, 134, 154, 193, 105, 101, 49, 226, 149, 147, 11, 145, 76, 105, 105, 123, 183, 229, 133, 136, 87, 79, 45, 69, 154, 84, 253, 119, 169, 16, 218, 235, 4, 245, 49, 134, 116, 128, 89, 36, 160, 3, 0, 51, 227, 107, 247, 38, 113, 233, 148, 151, 182, 119, 187, 249, 210, 52, 62, 118, 199, 98, 131, 123, 44, 24, 214, 11, 4, 245, 42, 219, 53, 21, 210, 205, 162, 3, 179, 72, 64, 7, 0, 218, 161, 102, 96, 186, 237, 242, 36, 158, 156, 145, 210, 246, 110, 207, 222, 183, 24, 151, 95, 180, 174, 44, 160, 177, 215, 172, 21, 8, 235, 3, 246, 89, 189, 228, 93, 72, 7, 232, 103, 54, 175, 98, 0, 192, 92, 89, 89, 204, 226, 165, 135, 211, 152, 145, 202, 246, 30, 203, 11, 17, 175, 62, 186, 28, 105, 212, 120, 205, 218, 240, 141, 98, 104, 80, 239, 187, 85, 213, 146, 247, 150, 132, 116, 128, 22, 17, 208, 1, 128, 201, 171, 49, 147, 153, 69, 22, 223, 184, 47, 141, 125, 51, 86, 218, 222, 237, 166, 125, 105, 124, 226, 206, 26, 165, 238, 133, 3, 251, 128, 160, 94, 101, 54, 189, 237, 33, 221, 44, 58, 208, 34, 2, 58, 0, 48, 89, 53, 195, 249, 29, 251, 211, 120, 252, 214, 249, 24, 210, 60, 123, 223, 82, 92, 185, 243, 131, 239, 53, 203, 178, 13, 95, 165, 12, 13, 235, 67, 130, 122, 223, 45, 170, 220, 151, 222, 130, 7, 199, 9, 233, 64, 75, 204, 199, 213, 12, 0, 152, 73, 171, 139, 49, 211, 165, 237, 221, 22, 59, 17, 223, 63, 181, 28, 105, 210, 63, 144, 119, 7, 246, 194, 225, 189, 74, 80, 207, 217, 166, 218, 125, 233, 245, 3, 178, 82, 119, 96, 22, 8, 232, 0, 192, 228, 212, 156, 61, 127, 238, 88, 26, 123, 183, 53, 216, 159, 41, 240, 225, 189, 105, 124, 234, 238, 165, 210, 219, 21, 10, 235, 85, 102, 186, 115, 66, 122, 249, 146, 247, 58, 239, 88, 255, 224, 184, 149, 153, 69, 7, 90, 64, 64, 7, 0, 38, 163, 102, 56, 255, 200, 254, 52, 78, 31, 152, 207, 161, 204, 87, 142, 46, 197, 85, 187, 170, 127, 239, 67, 195, 122, 110, 80, 31, 48, 155, 222, 183, 245, 248, 67, 122, 45, 66, 58, 48, 97, 243, 121, 85, 3, 0, 166, 86, 22, 89, 108, 94, 138, 248, 254, 35, 243, 83, 218, 222, 109, 177, 19, 241, 250, 233, 149, 88, 72, 215, 191, 38, 109, 208, 87, 190, 234, 65, 189, 79, 219, 190, 45, 199, 27, 210, 149, 186, 3, 211, 76, 64, 7, 0, 198, 175, 230, 76, 229, 115, 199, 210, 216, 189, 214, 80, 95, 166, 212, 245, 151, 164, 241, 233, 194, 165, 238, 195, 3, 251, 208, 160, 158, 187, 207, 174, 118, 101, 238, 75, 111, 99, 72, 55, 139, 14, 76, 144, 128, 14, 0, 140, 87, 205, 210, 246, 59, 175, 72, 227, 212, 205, 134, 48, 17, 17, 95, 58, 186, 28, 87, 239, 76, 74, 188, 235, 252, 188, 10, 65, 189, 230, 108, 122, 163, 51, 219, 66, 58, 48, 163, 92, 221, 0, 128, 169, 144, 69, 22, 91, 150, 35, 94, 62, 49, 191, 165, 237, 221, 22, 59, 17, 175, 63, 182, 41, 22, 58, 239, 47, 232, 126, 215, 121, 225, 119, 158, 231, 63, 17, 190, 207, 138, 156, 253, 12, 111, 215, 55, 52, 123, 178, 59, 192, 5, 2, 58, 0, 48, 62, 53, 103, 38, 191, 165, 180, 189, 199, 117, 151, 164, 241, 153, 123, 150, 7, 55, 42, 20, 216, 243, 131, 122, 223, 253, 245, 221, 126, 120, 187, 198, 66, 250, 168, 103, 185, 205, 162, 3, 19, 32, 160, 3, 0, 227, 81, 179, 180, 253, 208, 213, 105, 60, 114, 147, 161, 75, 63, 95, 60, 178, 28, 215, 236, 74, 162, 200, 67, 225, 34, 162, 116, 80, 239, 59, 155, 222, 119, 31, 237, 11, 233, 102, 209, 129, 105, 226, 42, 7, 0, 180, 218, 249, 210, 246, 239, 62, 100, 216, 146, 103, 161, 19, 241, 250, 227, 155, 163, 115, 225, 159, 168, 224, 147, 220, 7, 206, 170, 87, 157, 77, 111, 95, 72, 175, 204, 44, 58, 48, 102, 174, 116, 0, 192, 232, 213, 12, 58, 223, 121, 32, 141, 93, 91, 26, 234, 203, 140, 186, 118, 119, 26, 159, 63, 52, 168, 212, 189, 96, 88, 239, 187, 205, 250, 102, 57, 179, 233, 61, 219, 245, 217, 127, 79, 171, 241, 220, 147, 238, 129, 113, 192, 180, 16, 208, 1, 128, 209, 170, 89, 218, 126, 248, 154, 52, 30, 254, 144, 33, 75, 17, 207, 28, 89, 137, 235, 47, 73, 243, 95, 151, 118, 65, 149, 160, 222, 221, 172, 72, 72, 31, 214, 166, 108, 72, 207, 161, 212, 29, 152, 17, 174, 118, 0, 64, 43, 93, 40, 109, 127, 208, 112, 165, 168, 78, 26, 241, 202, 233, 77, 177, 216, 249, 96, 166, 123, 224, 251, 205, 7, 205, 170, 23, 156, 77, 31, 188, 77, 191, 67, 214, 9, 202, 19, 186, 31, 221, 44, 58, 48, 38, 174, 120, 0, 192, 232, 212, 12, 54, 207, 63, 152, 198, 78, 165, 237, 165, 92, 187, 187, 19, 159, 63, 188, 210, 179, 188, 120, 88, 223, 176, 209, 208, 217, 244, 38, 102, 210, 221, 143, 14, 112, 142, 128, 14, 0, 180, 78, 22, 89, 28, 185, 38, 141, 135, 110, 52, 84, 169, 226, 11, 135, 87, 226, 198, 61, 157, 220, 245, 131, 195, 122, 249, 7, 193, 21, 155, 73, 31, 83, 72, 31, 66, 169, 59, 208, 102, 174, 122, 0, 192, 104, 84, 156, 113, 204, 34, 139, 109, 43, 17, 223, 123, 216, 48, 165, 170, 78, 122, 238, 169, 238, 75, 157, 225, 79, 114, 239, 31, 212, 139, 220, 63, 222, 124, 185, 251, 184, 238, 71, 175, 204, 44, 58, 48, 98, 174, 124, 0, 64, 243, 26, 40, 109, 191, 104, 83, 67, 125, 153, 83, 87, 238, 76, 227, 11, 71, 86, 187, 150, 230, 135, 245, 252, 160, 190, 161, 81, 215, 255, 219, 141, 251, 170, 244, 116, 247, 158, 22, 69, 67, 122, 245, 82, 119, 79, 117, 7, 218, 74, 64, 7, 0, 90, 35, 139, 44, 142, 94, 147, 198, 241, 27, 12, 81, 154, 240, 185, 67, 131, 74, 221, 243, 131, 250, 208, 118, 3, 130, 119, 233, 144, 94, 244, 201, 238, 125, 41, 117, 7, 102, 139, 171, 31, 0, 208, 172, 58, 165, 237, 171, 17, 47, 42, 109, 111, 76, 39, 141, 120, 227, 241, 205, 177, 212, 137, 156, 7, 190, 69, 20, 126, 215, 249, 152, 67, 122, 111, 55, 75, 222, 143, 174, 212, 29, 152, 66, 174, 128, 0, 64, 115, 106, 6, 151, 23, 148, 182, 55, 238, 138, 157, 157, 248, 226, 209, 117, 79, 117, 47, 25, 212, 123, 219, 108, 104, 144, 187, 190, 110, 72, 31, 199, 253, 232, 74, 221, 129, 182, 17, 208, 1, 128, 137, 203, 34, 139, 7, 110, 72, 227, 216, 245, 134, 38, 163, 240, 217, 67, 171, 241, 161, 125, 11, 27, 23, 14, 12, 234, 235, 155, 117, 207, 166, 119, 5, 249, 86, 132, 116, 165, 238, 192, 108, 112, 21, 4, 0, 154, 81, 163, 180, 125, 251, 106, 196, 183, 143, 27, 150, 140, 74, 154, 156, 123, 170, 251, 242, 66, 159, 149, 185, 239, 58, 47, 49, 155, 62, 238, 144, 222, 151, 82, 119, 96, 250, 185, 18, 2, 0, 245, 213, 12, 42, 223, 125, 40, 141, 237, 74, 219, 71, 234, 138, 29, 157, 248, 242, 189, 171, 145, 251, 36, 247, 220, 160, 190, 190, 201, 168, 66, 122, 73, 74, 221, 129, 25, 37, 160, 3, 0, 19, 147, 69, 22, 15, 221, 152, 198, 125, 215, 25, 146, 140, 195, 175, 28, 92, 141, 91, 46, 91, 92, 183, 164, 72, 80, 31, 71, 72, 87, 234, 14, 16, 33, 160, 3, 0, 117, 213, 152, 65, 220, 190, 26, 241, 77, 165, 237, 99, 147, 36, 17, 223, 63, 189, 57, 150, 23, 146, 174, 53, 195, 2, 240, 198, 32, 95, 46, 164, 175, 95, 53, 193, 144, 174, 212, 29, 152, 2, 174, 136, 0, 64, 117, 53, 130, 73, 22, 217, 185, 210, 246, 213, 6, 251, 195, 80, 251, 119, 116, 226, 171, 247, 175, 54, 255, 190, 243, 220, 144, 62, 108, 6, 62, 103, 31, 125, 142, 63, 234, 251, 209, 149, 186, 3, 147, 38, 160, 3, 0, 99, 151, 69, 22, 39, 62, 172, 180, 125, 82, 62, 117, 247, 106, 220, 122, 249, 226, 128, 247, 157, 87, 44, 91, 175, 18, 210, 135, 61, 52, 110, 152, 134, 131, 177, 82, 119, 96, 146, 92, 21, 1, 128, 106, 106, 4, 163, 29, 155, 35, 190, 117, 204, 48, 100, 82, 146, 36, 226, 245, 39, 214, 98, 117, 241, 92, 169, 123, 126, 80, 63, 255, 159, 249, 247, 165, 87, 13, 233, 27, 55, 41, 190, 78, 169, 59, 48, 203, 92, 25, 1, 128, 242, 106, 150, 182, 63, 255, 96, 26, 107, 43, 13, 246, 135, 210, 246, 109, 79, 227, 171, 247, 111, 124, 116, 254, 192, 176, 125, 174, 65, 223, 117, 85, 66, 122, 227, 247, 163, 247, 165, 212, 29, 152, 46, 2, 58, 0, 80, 78, 205, 112, 126, 234, 166, 52, 238, 189, 214, 16, 164, 13, 62, 121, 247, 106, 220, 190, 127, 113, 195, 178, 222, 217, 244, 170, 33, 189, 230, 54, 101, 67, 122, 155, 74, 221, 133, 116, 160, 34, 87, 71, 0, 96, 44, 178, 200, 98, 231, 230, 136, 95, 187, 223, 240, 163, 45, 146, 36, 226, 181, 199, 215, 98, 117, 49, 122, 3, 240, 128, 167, 184, 23, 11, 220, 21, 130, 253, 72, 238, 71, 159, 64, 169, 59, 64, 69, 174, 144, 0, 64, 113, 53, 67, 205, 247, 78, 40, 109, 111, 155, 189, 219, 211, 248, 218, 241, 205, 231, 254, 50, 48, 164, 71, 212, 14, 233, 57, 6, 135, 244, 200, 93, 167, 212, 29, 152, 53, 2, 58, 0, 80, 76, 205, 210, 246, 71, 111, 78, 227, 224, 85, 134, 30, 109, 244, 177, 59, 87, 227, 246, 43, 150, 206, 253, 165, 235, 129, 112, 141, 134, 244, 74, 15, 141, 83, 234, 14, 204, 15, 87, 73, 0, 96, 164, 178, 200, 98, 215, 150, 136, 111, 220, 103, 216, 209, 86, 231, 74, 221, 183, 196, 166, 229, 228, 131, 133, 99, 14, 233, 165, 238, 71, 31, 70, 169, 59, 48, 165, 92, 41, 1, 128, 225, 106, 132, 152, 36, 34, 190, 247, 176, 210, 246, 182, 219, 187, 189, 19, 95, 63, 95, 234, 126, 222, 36, 67, 122, 139, 94, 189, 102, 22, 29, 24, 23, 1, 29, 0, 24, 172, 102, 105, 251, 233, 3, 105, 220, 163, 180, 125, 42, 60, 125, 231, 106, 220, 125, 245, 98, 228, 133, 233, 129, 79, 120, 47, 123, 239, 121, 206, 121, 149, 31, 210, 155, 122, 245, 90, 53, 66, 58, 48, 14, 174, 150, 0, 192, 200, 236, 218, 18, 241, 117, 165, 237, 83, 35, 137, 136, 151, 30, 93, 139, 77, 75, 73, 228, 135, 239, 162, 51, 227, 67, 218, 110, 108, 149, 223, 169, 10, 15, 157, 27, 212, 31, 165, 238, 64, 155, 185, 98, 2, 0, 249, 106, 133, 150, 44, 94, 62, 145, 198, 150, 229, 198, 122, 195, 24, 236, 221, 222, 137, 95, 123, 112, 203, 251, 127, 43, 88, 114, 222, 55, 244, 142, 225, 126, 116, 165, 238, 192, 140, 17, 208, 1, 128, 254, 106, 150, 182, 63, 113, 107, 26, 119, 93, 105, 168, 49, 141, 158, 252, 200, 106, 220, 115, 205, 249, 223, 172, 228, 151, 187, 247, 213, 198, 251, 209, 27, 36, 164, 3, 163, 228, 170, 9, 0, 52, 110, 207, 214, 136, 175, 221, 107, 152, 49, 173, 146, 136, 120, 229, 177, 181, 216, 178, 114, 254, 169, 238, 69, 66, 122, 141, 135, 198, 21, 81, 226, 126, 244, 193, 219, 14, 57, 190, 16, 13, 76, 144, 43, 39, 0, 208, 171, 102, 105, 251, 139, 15, 165, 177, 105, 169, 177, 222, 48, 1, 187, 214, 210, 117, 165, 238, 17, 163, 9, 233, 21, 218, 246, 59, 86, 207, 26, 165, 238, 192, 116, 18, 208, 1, 128, 141, 106, 150, 182, 63, 117, 155, 210, 246, 89, 241, 248, 237, 171, 113, 240, 154, 245, 191, 105, 105, 38, 164, 151, 105, 171, 212, 29, 152, 39, 174, 158, 0, 192, 7, 106, 6, 135, 61, 91, 35, 158, 61, 106, 120, 49, 43, 146, 136, 248, 254, 99, 91, 99, 109, 195, 131, 254, 74, 134, 244, 62, 154, 187, 31, 189, 228, 171, 215, 148, 186, 3, 45, 231, 10, 10, 0, 52, 34, 73, 178, 120, 229, 145, 142, 210, 246, 25, 179, 107, 45, 141, 231, 30, 94, 203, 15, 198, 195, 66, 250, 40, 238, 71, 223, 96, 114, 175, 94, 51, 139, 14, 52, 77, 64, 7, 0, 206, 169, 89, 218, 254, 244, 109, 105, 220, 118, 121, 50, 188, 49, 83, 231, 177, 219, 86, 227, 208, 181, 203, 21, 66, 122, 239, 250, 70, 238, 71, 87, 234, 14, 204, 40, 1, 29, 0, 168, 29, 20, 246, 110, 139, 248, 170, 210, 246, 153, 246, 253, 199, 182, 198, 218, 74, 82, 50, 164, 143, 235, 126, 244, 41, 126, 170, 187, 144, 14, 172, 227, 74, 10, 0, 212, 114, 174, 180, 125, 33, 86, 23, 39, 221, 19, 70, 105, 231, 90, 26, 223, 58, 177, 118, 238, 47, 133, 238, 33, 47, 182, 126, 28, 165, 238, 173, 126, 170, 59, 192, 58, 2, 58, 0, 204, 187, 154, 165, 237, 31, 187, 61, 141, 91, 47, 107, 176, 63, 180, 214, 163, 183, 174, 198, 189, 55, 174, 156, 251, 203, 144, 96, 61, 60, 120, 43, 117, 255, 96, 99, 1, 31, 56, 71, 64, 7, 128, 121, 86, 51, 24, 236, 219, 22, 241, 229, 35, 134, 19, 243, 228, 123, 167, 214, 98, 109, 245, 253, 103, 13, 12, 9, 214, 101, 30, 26, 215, 119, 217, 60, 61, 213, 93, 72, 7, 66, 64, 7, 0, 42, 74, 146, 44, 94, 57, 169, 180, 125, 222, 236, 216, 146, 198, 119, 206, 151, 186, 111, 80, 245, 161, 113, 253, 218, 21, 156, 37, 239, 107, 74, 159, 234, 14, 16, 2, 58, 192, 124, 200, 178, 230, 190, 152, 29, 53, 75, 219, 63, 113, 71, 26, 183, 92, 218, 96, 127, 152, 26, 39, 111, 89, 141, 251, 63, 52, 164, 212, 189, 240, 253, 232, 101, 94, 189, 166, 212, 29, 152, 109, 2, 58, 192, 44, 25, 71, 168, 22, 220, 103, 67, 205, 255, 103, 251, 47, 82, 218, 62, 239, 94, 122, 116, 45, 182, 111, 126, 255, 28, 24, 18, 210, 199, 127, 63, 186, 167, 186, 3, 211, 201, 149, 21, 96, 90, 181, 45, 36, 183, 169, 47, 140, 84, 146, 100, 241, 210, 137, 133, 88, 94, 152, 116, 79, 152, 164, 237, 155, 210, 248, 206, 137, 45, 31, 44, 40, 245, 208, 184, 98, 219, 140, 170, 212, 189, 248, 44, 183, 82, 119, 96, 188, 4, 116, 128, 105, 50, 77, 1, 88, 96, 111, 175, 154, 165, 237, 159, 186, 51, 141, 3, 74, 219, 137, 136, 135, 111, 94, 141, 251, 111, 92, 254, 96, 65, 225, 135, 198, 13, 14, 222, 19, 41, 117, 111, 248, 115, 74, 169, 59, 80, 133, 128, 14, 208, 118, 179, 18, 114, 103, 229, 251, 152, 118, 53, 195, 249, 254, 139, 35, 190, 120, 200, 240, 129, 15, 188, 116, 122, 107, 108, 223, 156, 244, 89, 83, 226, 126, 244, 62, 203, 148, 186, 251, 172, 132, 121, 228, 10, 11, 208, 70, 179, 30, 102, 103, 253, 251, 107, 171, 154, 255, 222, 157, 36, 226, 181, 147, 74, 219, 217, 104, 251, 166, 52, 94, 120, 100, 221, 83, 221, 171, 220, 143, 174, 212, 29, 32, 34, 4, 116, 128, 118, 153, 199, 208, 58, 143, 223, 243, 20, 202, 34, 139, 79, 223, 149, 198, 141, 123, 38, 221, 19, 218, 232, 193, 155, 86, 227, 248, 135, 242, 74, 221, 171, 220, 143, 222, 175, 157, 82, 119, 96, 246, 9, 232, 0, 147, 102, 54, 249, 28, 255, 14, 163, 85, 179, 180, 253, 138, 139, 35, 158, 57, 104, 216, 64, 190, 239, 61, 186, 53, 46, 90, 95, 234, 94, 235, 126, 244, 217, 42, 117, 23, 210, 129, 162, 92, 105, 1, 38, 65, 24, 29, 204, 191, 77, 179, 234, 150, 182, 167, 17, 175, 158, 90, 136, 37, 165, 237, 12, 176, 109, 83, 26, 47, 159, 222, 186, 49, 140, 22, 124, 40, 220, 208, 178, 246, 126, 203, 138, 156, 215, 67, 103, 224, 207, 175, 25, 109, 169, 59, 64, 81, 2, 58, 192, 184, 173, 27, 200, 93, 126, 241, 185, 240, 67, 14, 65, 125, 226, 178, 200, 226, 179, 119, 165, 113, 227, 37, 147, 238, 9, 211, 224, 222, 27, 86, 226, 161, 155, 86, 115, 2, 239, 4, 74, 221, 7, 81, 234, 14, 180, 144, 97, 33, 192, 184, 116, 133, 205, 213, 165, 136, 95, 127, 178, 19, 207, 120, 34, 246, 112, 130, 122, 117, 53, 75, 219, 175, 188, 56, 226, 115, 247, 56, 71, 41, 238, 187, 39, 215, 226, 226, 205, 235, 206, 25, 165, 238, 235, 182, 20, 210, 129, 193, 92, 113, 1, 70, 45, 39, 92, 62, 255, 96, 26, 151, 95, 20, 241, 185, 187, 147, 184, 99, 127, 191, 87, 20, 209, 67, 80, 47, 71, 105, 59, 19, 176, 109, 83, 26, 223, 127, 108, 82, 165, 238, 69, 206, 121, 165, 238, 64, 123, 9, 232, 0, 163, 148, 51, 88, 59, 118, 67, 18, 39, 62, 116, 46, 148, 39, 73, 196, 171, 39, 211, 216, 182, 58, 206, 142, 77, 57, 65, 125, 228, 178, 200, 226, 115, 119, 167, 113, 131, 210, 118, 42, 56, 122, 253, 74, 60, 124, 243, 36, 74, 221, 115, 218, 142, 243, 169, 238, 163, 124, 245, 154, 207, 61, 152, 121, 2, 58, 192, 40, 12, 8, 144, 251, 182, 71, 188, 244, 240, 198, 143, 223, 157, 91, 206, 133, 244, 48, 145, 94, 142, 193, 106, 190, 154, 165, 237, 215, 238, 138, 248, 188, 210, 118, 106, 120, 225, 145, 181, 216, 145, 91, 234, 158, 245, 44, 155, 153, 82, 247, 2, 132, 116, 32, 143, 43, 47, 64, 147, 134, 204, 236, 118, 58, 17, 175, 159, 234, 196, 166, 165, 222, 117, 247, 92, 149, 196, 211, 183, 78, 38, 161, 103, 235, 254, 76, 29, 179, 233, 189, 26, 40, 109, 127, 249, 196, 66, 44, 116, 26, 234, 15, 115, 105, 112, 169, 123, 12, 94, 54, 170, 82, 119, 79, 117, 7, 90, 78, 64, 7, 104, 74, 129, 1, 217, 87, 143, 164, 241, 225, 189, 249, 235, 191, 113, 127, 26, 215, 238, 110, 176, 75, 5, 255, 212, 221, 166, 21, 12, 136, 27, 145, 69, 22, 95, 56, 152, 198, 245, 74, 219, 105, 192, 145, 235, 87, 226, 145, 3, 93, 165, 238, 3, 102, 202, 71, 94, 234, 62, 184, 225, 198, 191, 42, 117, 7, 38, 64, 64, 7, 168, 171, 224, 12, 238, 157, 87, 36, 241, 169, 143, 12, 158, 33, 95, 236, 68, 188, 113, 170, 19, 203, 139, 21, 186, 49, 230, 16, 221, 202, 192, 110, 54, 189, 145, 210, 246, 207, 222, 109, 120, 64, 115, 190, 123, 114, 107, 236, 94, 75, 43, 220, 143, 62, 249, 82, 247, 98, 33, 93, 169, 59, 208, 28, 87, 96, 128, 58, 10, 14, 144, 182, 109, 138, 120, 229, 100, 26, 73, 129, 10, 246, 43, 118, 68, 124, 243, 88, 177, 143, 231, 54, 5, 228, 86, 5, 118, 3, 215, 74, 22, 59, 17, 175, 157, 90, 136, 5, 163, 3, 26, 180, 101, 37, 137, 151, 78, 111, 219, 184, 112, 210, 165, 238, 67, 247, 87, 150, 82, 119, 160, 25, 46, 193, 0, 85, 21, 29, 120, 37, 17, 223, 63, 145, 198, 142, 205, 197, 119, 253, 216, 129, 36, 30, 184, 161, 127, 154, 111, 77, 8, 30, 98, 226, 253, 156, 199, 129, 113, 205, 217, 243, 47, 220, 147, 198, 213, 59, 27, 236, 15, 188, 239, 240, 117, 203, 241, 232, 45, 85, 75, 221, 123, 31, 40, 119, 126, 153, 167, 186, 207, 225, 231, 28, 204, 56, 1, 29, 160, 172, 146, 101, 212, 159, 188, 35, 137, 67, 87, 151, 127, 248, 219, 11, 15, 165, 177, 103, 221, 164, 211, 52, 132, 242, 60, 19, 235, 251, 60, 149, 188, 215, 12, 231, 215, 237, 142, 248, 21, 165, 237, 140, 208, 243, 39, 183, 198, 37, 91, 59, 21, 74, 221, 55, 44, 172, 208, 206, 83, 221, 129, 233, 225, 74, 12, 80, 70, 201, 129, 208, 117, 151, 68, 60, 123, 180, 218, 71, 237, 150, 229, 136, 31, 158, 238, 68, 39, 157, 222, 96, 222, 109, 98, 179, 234, 6, 176, 3, 45, 117, 34, 94, 61, 169, 180, 157, 209, 218, 188, 156, 196, 171, 143, 111, 219, 248, 54, 201, 73, 151, 186, 215, 121, 170, 123, 153, 144, 238, 51, 8, 40, 200, 165, 24, 160, 168, 146, 3, 172, 149, 197, 136, 55, 31, 237, 212, 122, 85, 213, 141, 123, 34, 190, 112, 112, 54, 63, 170, 199, 30, 212, 103, 121, 128, 92, 115, 246, 252, 153, 67, 74, 219, 25, 143, 187, 174, 94, 138, 211, 183, 181, 168, 212, 125, 112, 195, 141, 127, 173, 251, 121, 165, 212, 29, 40, 96, 54, 71, 125, 0, 77, 171, 48, 248, 121, 225, 193, 52, 46, 191, 168, 254, 161, 63, 127, 79, 26, 119, 236, 159, 221, 143, 235, 177, 6, 245, 89, 28, 196, 214, 12, 231, 215, 239, 142, 248, 212, 157, 179, 123, 126, 209, 62, 223, 62, 177, 53, 246, 108, 155, 206, 82, 119, 79, 117, 7, 70, 205, 21, 25, 96, 152, 10, 131, 158, 99, 55, 36, 113, 226, 195, 229, 239, 59, 239, 39, 73, 34, 94, 59, 153, 198, 182, 213, 26, 59, 57, 127, 47, 118, 19, 95, 35, 50, 182, 160, 62, 75, 131, 216, 154, 223, 203, 82, 39, 226, 85, 79, 109, 103, 204, 218, 82, 234, 94, 56, 164, 15, 163, 212, 29, 104, 144, 75, 50, 192, 32, 21, 6, 83, 123, 183, 71, 188, 244, 112, 179, 31, 175, 59, 183, 68, 188, 122, 50, 141, 66, 145, 127, 212, 161, 122, 196, 251, 31, 75, 80, 55, 72, 142, 44, 178, 248, 210, 225, 52, 174, 218, 49, 233, 158, 48, 143, 238, 188, 106, 41, 30, 191, 99, 211, 68, 75, 221, 11, 83, 234, 14, 140, 145, 128, 14, 144, 167, 194, 64, 167, 147, 70, 188, 113, 170, 19, 155, 150, 154, 239, 206, 193, 171, 210, 120, 234, 182, 156, 143, 237, 49, 204, 112, 15, 52, 130, 227, 143, 60, 168, 79, 251, 64, 182, 102, 105, 251, 135, 247, 40, 109, 103, 178, 190, 249, 208, 154, 82, 247, 28, 66, 58, 204, 47, 87, 102, 128, 126, 42, 14, 112, 190, 122, 52, 141, 15, 239, 109, 184, 47, 235, 252, 218, 253, 105, 92, 187, 235, 253, 191, 76, 58, 148, 231, 105, 184, 95, 66, 122, 31, 13, 148, 182, 191, 252, 200, 66, 164, 205, 220, 133, 1, 149, 108, 94, 78, 226, 181, 182, 149, 186, 15, 221, 223, 0, 74, 221, 129, 6, 8, 232, 0, 221, 42, 14, 156, 110, 187, 60, 137, 79, 125, 100, 180, 137, 103, 177, 19, 241, 230, 163, 11, 177, 178, 48, 37, 131, 187, 134, 194, 250, 72, 103, 211, 219, 248, 75, 142, 17, 202, 34, 139, 175, 30, 73, 227, 74, 165, 237, 180, 192, 71, 174, 90, 138, 39, 219, 84, 234, 62, 232, 179, 64, 169, 59, 48, 6, 2, 58, 192, 122, 21, 7, 53, 219, 54, 69, 188, 241, 104, 26, 201, 24, 102, 36, 175, 216, 17, 241, 220, 177, 26, 239, 110, 155, 148, 134, 130, 250, 220, 171, 89, 218, 126, 211, 222, 136, 143, 127, 196, 229, 159, 246, 248, 214, 137, 181, 184, 244, 34, 165, 238, 253, 8, 233, 48, 127, 92, 161, 1, 206, 171, 58, 152, 73, 34, 94, 62, 145, 198, 142, 205, 205, 118, 103, 144, 199, 111, 73, 227, 129, 27, 203, 126, 132, 103, 53, 191, 26, 82, 51, 168, 143, 108, 54, 125, 26, 6, 179, 77, 148, 182, 159, 80, 218, 78, 187, 172, 44, 38, 241, 202, 99, 147, 47, 117, 207, 167, 212, 29, 24, 31, 1, 29, 32, 162, 214, 32, 233, 19, 119, 36, 113, 248, 234, 241, 39, 158, 239, 62, 212, 137, 61, 219, 242, 214, 142, 34, 96, 55, 28, 220, 27, 8, 234, 141, 155, 225, 193, 114, 22, 89, 252, 234, 189, 105, 92, 161, 180, 157, 22, 186, 227, 202, 165, 120, 250, 206, 201, 150, 186, 231, 207, 162, 247, 52, 220, 248, 87, 165, 238, 64, 131, 4, 116, 128, 26, 3, 152, 235, 46, 137, 120, 246, 232, 100, 62, 74, 183, 44, 71, 188, 126, 106, 33, 58, 23, 14, 63, 130, 217, 238, 66, 106, 30, 183, 70, 80, 159, 171, 144, 94, 243, 151, 25, 55, 239, 139, 248, 232, 237, 46, 251, 180, 215, 115, 15, 173, 197, 101, 74, 221, 251, 18, 210, 97, 126, 184, 82, 3, 243, 173, 198, 192, 101, 101, 241, 220, 43, 213, 22, 39, 120, 59, 248, 129, 75, 147, 248, 252, 193, 52, 198, 31, 202, 243, 212, 8, 235, 21, 131, 250, 92, 133, 244, 10, 178, 200, 98, 101, 33, 226, 149, 147, 74, 219, 105, 183, 149, 197, 36, 222, 120, 114, 123, 164, 201, 186, 159, 235, 161, 51, 229, 93, 235, 202, 44, 43, 50, 187, 94, 231, 189, 234, 74, 221, 129, 10, 4, 116, 96, 126, 213, 28, 16, 125, 231, 129, 52, 246, 95, 220, 80, 95, 106, 120, 230, 96, 39, 238, 216, 223, 198, 143, 243, 26, 65, 189, 244, 145, 70, 112, 95, 122, 155, 6, 204, 53, 251, 242, 236, 189, 105, 92, 182, 189, 161, 190, 192, 8, 29, 184, 124, 49, 62, 122, 231, 166, 141, 11, 7, 204, 128, 143, 188, 212, 189, 119, 109, 110, 191, 148, 186, 3, 77, 104, 227, 136, 14, 96, 244, 106, 14, 86, 238, 191, 62, 137, 147, 55, 181, 99, 58, 50, 73, 34, 94, 61, 181, 16, 91, 87, 10, 52, 94, 255, 218, 179, 178, 95, 149, 85, 152, 85, 111, 203, 108, 122, 27, 6, 181, 53, 75, 219, 15, 236, 139, 248, 232, 109, 46, 247, 76, 143, 111, 60, 184, 22, 151, 95, 220, 214, 82, 247, 193, 199, 105, 117, 169, 59, 48, 21, 92, 177, 129, 249, 83, 51, 116, 237, 221, 30, 241, 210, 195, 237, 250, 248, 220, 181, 37, 226, 181, 83, 11, 189, 79, 65, 110, 44, 100, 55, 181, 191, 10, 65, 189, 244, 17, 102, 40, 164, 215, 60, 246, 249, 210, 246, 113, 188, 254, 15, 154, 178, 178, 152, 196, 235, 79, 110, 143, 78, 110, 169, 123, 228, 47, 107, 176, 212, 189, 240, 253, 232, 195, 180, 165, 212, 189, 13, 191, 112, 4, 134, 106, 215, 8, 19, 160, 229, 58, 105, 196, 235, 167, 58, 177, 121, 121, 210, 61, 233, 117, 240, 234, 52, 158, 184, 53, 109, 38, 140, 23, 85, 57, 172, 151, 8, 234, 21, 246, 63, 19, 33, 189, 230, 49, 179, 200, 226, 235, 247, 165, 113, 169, 210, 118, 166, 208, 129, 203, 22, 227, 227, 119, 119, 189, 187, 114, 204, 79, 117, 31, 76, 169, 59, 48, 26, 2, 58, 48, 95, 106, 14, 78, 190, 124, 36, 141, 155, 246, 54, 212, 151, 17, 120, 238, 216, 66, 92, 179, 123, 66, 211, 165, 149, 194, 250, 232, 102, 211, 103, 34, 164, 87, 148, 69, 22, 183, 95, 158, 198, 147, 74, 219, 153, 98, 191, 122, 124, 75, 236, 87, 234, 222, 255, 112, 74, 221, 97, 102, 185, 114, 3, 243, 163, 102, 192, 186, 245, 178, 36, 62, 125, 103, 187, 107, 133, 151, 22, 34, 222, 60, 189, 24, 203, 139, 131, 219, 101, 37, 254, 84, 82, 42, 172, 151, 156, 77, 47, 211, 141, 105, 13, 233, 53, 143, 179, 186, 120, 238, 54, 140, 118, 159, 173, 48, 216, 240, 82, 247, 1, 229, 239, 74, 221, 75, 246, 3, 104, 11, 1, 29, 160, 128, 109, 155, 34, 222, 124, 52, 157, 138, 215, 84, 93, 185, 35, 137, 231, 142, 45, 68, 68, 126, 16, 47, 163, 118, 104, 111, 58, 168, 151, 156, 165, 159, 186, 144, 222, 64, 105, 251, 55, 238, 75, 99, 159, 210, 118, 102, 192, 205, 151, 45, 198, 39, 239, 201, 43, 117, 239, 93, 166, 212, 189, 153, 125, 3, 147, 35, 160, 3, 243, 161, 206, 96, 36, 137, 120, 249, 68, 26, 59, 182, 52, 215, 157, 81, 123, 226, 214, 78, 28, 191, 97, 116, 31, 241, 149, 2, 123, 169, 160, 94, 112, 127, 5, 77, 77, 72, 111, 32, 156, 223, 177, 63, 141, 199, 111, 117, 121, 103, 118, 124, 237, 248, 150, 184, 106, 215, 130, 82, 247, 190, 91, 10, 218, 48, 107, 92, 193, 129, 217, 87, 51, 244, 124, 252, 142, 36, 14, 95, 61, 5, 83, 231, 93, 94, 60, 177, 24, 123, 182, 142, 167, 223, 165, 194, 122, 161, 160, 94, 98, 54, 189, 160, 214, 135, 244, 6, 246, 167, 180, 157, 89, 180, 184, 144, 196, 171, 143, 109, 83, 234, 222, 52, 179, 232, 208, 74, 2, 58, 48, 219, 106, 14, 64, 174, 218, 25, 241, 236, 145, 233, 252, 168, 220, 178, 28, 241, 198, 233, 165, 232, 116, 167, 181, 126, 175, 75, 27, 246, 85, 66, 243, 65, 189, 192, 126, 10, 106, 101, 72, 111, 232, 169, 251, 89, 100, 241, 220, 177, 52, 246, 110, 171, 223, 37, 104, 155, 155, 46, 91, 140, 79, 31, 156, 245, 82, 247, 106, 33, 93, 169, 59, 204, 150, 233, 28, 117, 2, 20, 81, 247, 29, 210, 139, 17, 103, 30, 235, 196, 210, 66, 67, 253, 153, 128, 3, 151, 38, 241, 133, 67, 11, 149, 195, 246, 5, 21, 66, 123, 225, 89, 245, 89, 8, 233, 117, 254, 93, 155, 232, 66, 100, 241, 145, 253, 105, 156, 62, 224, 178, 206, 236, 122, 246, 216, 150, 184, 122, 166, 75, 221, 171, 19, 210, 97, 118, 184, 146, 3, 179, 169, 129, 1, 199, 183, 31, 72, 99, 255, 197, 13, 244, 101, 194, 158, 57, 180, 16, 183, 239, 239, 52, 191, 227, 10, 97, 125, 232, 190, 6, 236, 97, 104, 80, 159, 100, 72, 63, 127, 252, 34, 255, 30, 117, 127, 89, 210, 189, 187, 200, 98, 243, 82, 196, 247, 31, 81, 218, 206, 108, 91, 92, 72, 226, 205, 167, 182, 199, 66, 170, 212, 189, 113, 66, 58, 180, 134, 128, 14, 208, 199, 253, 215, 39, 113, 234, 166, 217, 136, 59, 73, 18, 241, 250, 163, 139, 177, 109, 117, 132, 223, 79, 193, 208, 57, 242, 217, 244, 73, 135, 244, 245, 253, 104, 224, 118, 129, 162, 158, 59, 150, 198, 238, 181, 145, 236, 26, 90, 229, 250, 61, 11, 241, 43, 74, 221, 115, 182, 18, 178, 97, 22, 8, 232, 192, 236, 169, 25, 130, 118, 111, 141, 120, 241, 161, 217, 250, 120, 220, 181, 150, 196, 75, 39, 22, 226, 131, 153, 232, 170, 95, 5, 12, 9, 162, 205, 204, 166, 15, 57, 126, 65, 211, 62, 160, 205, 34, 139, 59, 175, 72, 227, 212, 205, 179, 117, 190, 194, 32, 95, 185, 127, 75, 92, 179, 91, 169, 123, 223, 195, 41, 117, 135, 169, 231, 138, 14, 204, 150, 154, 3, 140, 78, 26, 241, 131, 211, 157, 88, 91, 105, 168, 63, 45, 114, 239, 245, 11, 241, 228, 173, 117, 111, 168, 47, 17, 216, 155, 8, 234, 3, 251, 81, 253, 216, 221, 253, 152, 70, 89, 100, 177, 101, 249, 220, 43, 0, 103, 163, 214, 3, 138, 89, 92, 72, 226, 141, 39, 27, 40, 117, 191, 176, 126, 196, 165, 238, 69, 110, 123, 25, 116, 252, 50, 251, 10, 33, 29, 166, 157, 128, 14, 176, 206, 151, 14, 39, 113, 211, 222, 73, 247, 98, 116, 190, 249, 192, 82, 92, 179, 179, 201, 56, 87, 32, 172, 23, 8, 234, 3, 183, 29, 120, 236, 33, 102, 60, 164, 127, 83, 105, 59, 115, 234, 250, 61, 11, 241, 217, 195, 91, 54, 46, 44, 91, 234, 190, 177, 97, 193, 118, 69, 85, 252, 204, 43, 178, 15, 33, 26, 102, 154, 128, 14, 204, 142, 154, 131, 150, 91, 47, 139, 248, 149, 187, 102, 251, 99, 113, 105, 33, 226, 205, 199, 151, 99, 169, 51, 224, 30, 233, 202, 247, 77, 15, 9, 235, 3, 246, 53, 112, 54, 125, 96, 31, 230, 51, 164, 103, 145, 197, 161, 171, 211, 56, 121, 211, 108, 159, 175, 48, 200, 151, 238, 219, 28, 215, 238, 94, 84, 234, 222, 239, 112, 102, 209, 97, 106, 185, 178, 3, 179, 161, 230, 128, 98, 235, 106, 22, 111, 62, 218, 137, 116, 14, 106, 133, 175, 218, 153, 198, 115, 199, 151, 202, 109, 84, 58, 180, 87, 15, 234, 3, 251, 80, 246, 88, 37, 77, 67, 72, 63, 95, 218, 254, 221, 25, 123, 78, 2, 148, 181, 216, 73, 226, 141, 167, 182, 149, 42, 117, 255, 32, 80, 43, 117, 47, 223, 23, 96, 28, 92, 221, 1, 34, 139, 151, 79, 164, 177, 99, 203, 240, 150, 179, 226, 169, 219, 23, 227, 248, 141, 53, 239, 71, 47, 20, 214, 135, 4, 245, 190, 91, 12, 153, 77, 31, 120, 172, 188, 85, 197, 7, 155, 109, 14, 233, 231, 251, 246, 237, 227, 105, 236, 154, 163, 243, 21, 242, 92, 119, 201, 66, 124, 225, 104, 241, 82, 247, 174, 133, 185, 203, 114, 75, 221, 75, 7, 215, 146, 165, 238, 109, 122, 245, 26, 48, 17, 2, 58, 48, 253, 106, 14, 82, 62, 118, 71, 26, 71, 174, 153, 191, 143, 195, 23, 79, 44, 197, 37, 91, 207, 13, 68, 135, 125, 13, 53, 52, 172, 231, 4, 245, 42, 179, 233, 115, 26, 210, 207, 247, 233, 240, 213, 105, 156, 248, 240, 252, 157, 175, 144, 231, 139, 247, 110, 137, 27, 247, 142, 169, 212, 61, 103, 223, 141, 149, 186, 55, 204, 44, 58, 76, 31, 87, 120, 96, 186, 213, 28, 64, 92, 185, 35, 139, 103, 143, 206, 231, 71, 225, 218, 74, 18, 111, 60, 182, 26, 157, 2, 223, 126, 169, 192, 94, 229, 158, 113, 33, 189, 16, 165, 237, 208, 171, 147, 70, 188, 250, 248, 182, 88, 236, 36, 141, 63, 213, 125, 112, 73, 124, 94, 219, 252, 54, 249, 253, 24, 182, 94, 169, 59, 204, 11, 87, 121, 96, 110, 173, 44, 102, 113, 230, 241, 133, 88, 174, 251, 230, 177, 41, 118, 203, 101, 105, 124, 254, 80, 201, 251, 209, 163, 96, 96, 207, 13, 234, 229, 102, 211, 39, 25, 210, 219, 226, 252, 191, 193, 243, 15, 166, 177, 83, 105, 59, 244, 184, 246, 146, 133, 248, 194, 209, 205, 27, 23, 54, 240, 84, 247, 220, 101, 74, 221, 129, 17, 17, 208, 129, 233, 85, 99, 80, 146, 69, 22, 223, 58, 158, 198, 21, 23, 55, 216, 159, 41, 245, 165, 35, 75, 113, 251, 254, 78, 124, 16, 156, 251, 125, 13, 86, 61, 168, 231, 180, 239, 105, 153, 115, 95, 250, 136, 67, 122, 27, 102, 209, 207, 247, 225, 200, 53, 105, 60, 116, 163, 203, 54, 228, 121, 230, 232, 56, 74, 221, 7, 239, 91, 169, 59, 80, 151, 43, 61, 48, 157, 106, 134, 243, 99, 215, 167, 241, 232, 205, 62, 2, 35, 34, 146, 36, 226, 141, 199, 86, 98, 235, 202, 160, 71, 216, 23, 11, 236, 67, 131, 122, 238, 126, 139, 180, 45, 51, 211, 180, 126, 255, 121, 171, 218, 31, 210, 207, 31, 123, 219, 74, 196, 139, 74, 219, 97, 160, 78, 26, 241, 230, 147, 219, 98, 121, 161, 120, 169, 123, 209, 167, 186, 55, 243, 234, 53, 165, 238, 192, 112, 174, 246, 192, 244, 169, 57, 80, 216, 189, 38, 236, 116, 219, 181, 150, 196, 203, 39, 151, 75, 108, 49, 56, 172, 231, 6, 245, 50, 179, 233, 101, 74, 222, 171, 158, 19, 37, 66, 250, 184, 131, 250, 250, 227, 61, 255, 96, 26, 23, 111, 30, 208, 24, 136, 136, 136, 43, 119, 149, 43, 117, 239, 90, 88, 126, 153, 82, 119, 160, 97, 70, 168, 192, 92, 73, 211, 44, 126, 120, 122, 33, 214, 86, 38, 221, 147, 246, 185, 239, 134, 197, 120, 226, 214, 197, 15, 130, 113, 161, 215, 168, 69, 12, 10, 235, 3, 131, 122, 238, 126, 134, 183, 45, 23, 210, 171, 204, 82, 229, 237, 105, 60, 3, 224, 245, 199, 57, 122, 77, 26, 199, 111, 112, 185, 134, 162, 62, 127, 100, 75, 124, 104, 223, 146, 82, 247, 126, 135, 51, 139, 14, 173, 231, 138, 15, 76, 151, 154, 165, 237, 95, 58, 148, 198, 77, 251, 26, 236, 207, 140, 249, 246, 67, 43, 113, 205, 238, 62, 151, 134, 194, 161, 189, 68, 80, 47, 59, 155, 222, 211, 106, 54, 67, 250, 250, 253, 111, 91, 141, 120, 241, 97, 151, 106, 40, 163, 147, 70, 188, 241, 228, 86, 165, 238, 121, 187, 19, 210, 161, 213, 92, 245, 129, 233, 81, 115, 96, 112, 219, 101, 73, 124, 230, 110, 31, 123, 131, 44, 45, 68, 252, 224, 137, 77, 197, 158, 108, 63, 48, 172, 231, 7, 245, 190, 251, 233, 187, 253, 240, 118, 179, 22, 210, 187, 247, 251, 194, 131, 105, 92, 180, 105, 36, 135, 130, 153, 118, 229, 206, 133, 248, 210, 125, 93, 175, 60, 80, 234, 14, 76, 1, 35, 85, 96, 46, 108, 89, 206, 226, 181, 83, 157, 72, 7, 61, 7, 141, 136, 136, 184, 106, 103, 26, 191, 246, 192, 74, 108, 44, 93, 47, 16, 110, 11, 6, 245, 226, 179, 233, 19, 8, 233, 37, 52, 125, 95, 122, 247, 190, 30, 184, 33, 141, 99, 215, 187, 76, 67, 85, 159, 57, 180, 57, 62, 172, 212, 189, 255, 225, 204, 162, 67, 107, 185, 242, 3, 211, 161, 214, 128, 32, 139, 87, 30, 73, 99, 247, 90, 99, 189, 153, 121, 79, 223, 177, 20, 247, 94, 183, 216, 181, 180, 64, 96, 47, 81, 182, 94, 108, 48, 60, 230, 144, 94, 232, 158, 251, 222, 99, 215, 25, 236, 246, 219, 126, 219, 106, 196, 183, 143, 187, 68, 67, 29, 157, 52, 226, 141, 167, 60, 213, 61, 119, 119, 66, 58, 180, 146, 171, 63, 208, 126, 53, 239, 59, 255, 232, 237, 105, 28, 185, 214, 199, 93, 89, 175, 156, 94, 141, 75, 182, 14, 250, 119, 27, 16, 214, 115, 103, 196, 11, 206, 166, 247, 108, 215, 103, 255, 61, 173, 38, 83, 238, 190, 254, 248, 101, 6, 188, 131, 218, 127, 247, 193, 52, 182, 43, 109, 135, 218, 174, 216, 209, 137, 47, 223, 175, 212, 29, 152, 30, 70, 172, 64, 187, 213, 28, 96, 92, 181, 35, 226, 87, 239, 245, 81, 87, 197, 218, 74, 18, 111, 62, 190, 41, 210, 36, 187, 16, 164, 115, 223, 113, 62, 40, 168, 247, 109, 219, 221, 172, 72, 72, 31, 62, 219, 52, 169, 114, 247, 238, 62, 20, 249, 147, 231, 161, 27, 211, 184, 95, 105, 59, 52, 230, 179, 135, 54, 199, 173, 151, 43, 117, 239, 123, 56, 179, 232, 208, 58, 70, 0, 192, 204, 90, 94, 200, 226, 204, 227, 11, 197, 30, 120, 70, 95, 183, 92, 222, 137, 207, 31, 218, 248, 78, 186, 193, 97, 61, 39, 72, 23, 156, 77, 239, 217, 174, 239, 254, 7, 183, 105, 180, 220, 125, 204, 182, 175, 70, 124, 83, 105, 59, 52, 42, 73, 34, 94, 121, 92, 169, 123, 238, 238, 132, 116, 104, 21, 163, 0, 160, 189, 106, 150, 182, 127, 235, 120, 26, 87, 92, 220, 96, 127, 230, 212, 23, 143, 174, 196, 129, 203, 250, 255, 150, 163, 153, 160, 190, 113, 127, 61, 219, 244, 221, 247, 224, 54, 211, 26, 210, 191, 251, 80, 26, 219, 87, 199, 122, 72, 152, 11, 251, 119, 116, 226, 217, 99, 74, 221, 129, 246, 19, 208, 129, 118, 170, 57, 160, 184, 255, 186, 52, 78, 31, 240, 17, 215, 132, 78, 26, 113, 230, 201, 77, 177, 117, 37, 34, 111, 0, 56, 56, 168, 247, 52, 30, 216, 166, 169, 144, 222, 215, 152, 30, 28, 87, 197, 137, 15, 165, 113, 223, 117, 206, 89, 24, 149, 79, 31, 220, 28, 183, 238, 239, 42, 117, 239, 55, 83, 126, 97, 149, 82, 247, 98, 27, 251, 5, 0, 52, 201, 72, 0, 104, 159, 154, 23, 251, 93, 107, 89, 124, 239, 97, 31, 111, 77, 218, 189, 53, 141, 151, 79, 157, 127, 106, 89, 182, 238, 107, 163, 254, 65, 189, 200, 253, 227, 5, 66, 250, 176, 135, 199, 213, 30, 208, 86, 41, 43, 109, 198, 142, 205, 17, 223, 82, 218, 14, 35, 149, 36, 17, 111, 60, 177, 45, 86, 23, 147, 156, 207, 135, 118, 151, 186, 247, 244, 89, 169, 59, 204, 36, 163, 1, 96, 166, 164, 105, 22, 63, 56, 189, 16, 107, 43, 195, 219, 82, 206, 253, 55, 46, 197, 227, 183, 45, 119, 45, 237, 31, 214, 243, 131, 250, 134, 70, 125, 6, 167, 27, 7, 177, 249, 15, 165, 203, 81, 36, 164, 215, 25, 72, 142, 104, 16, 250, 252, 131, 169, 115, 22, 198, 96, 223, 69, 211, 91, 234, 222, 191, 185, 82, 119, 152, 53, 2, 58, 208, 46, 53, 239, 59, 255, 226, 193, 52, 110, 222, 215, 96, 127, 216, 224, 249, 135, 87, 227, 234, 93, 121, 151, 142, 34, 65, 189, 230, 108, 122, 133, 87, 176, 53, 254, 100, 247, 134, 7, 185, 39, 111, 74, 227, 94, 175, 1, 132, 177, 249, 228, 61, 155, 227, 182, 34, 165, 238, 239, 47, 83, 234, 94, 116, 99, 191, 0, 128, 38, 24, 17, 0, 237, 81, 243, 226, 126, 235, 165, 73, 124, 246, 30, 31, 107, 163, 180, 180, 144, 196, 15, 159, 220, 114, 238, 201, 248, 185, 247, 102, 247, 15, 234, 189, 109, 54, 52, 24, 184, 190, 116, 72, 239, 105, 49, 130, 144, 222, 192, 96, 116, 231, 230, 136, 231, 238, 119, 206, 194, 56, 37, 73, 196, 27, 79, 110, 139, 77, 75, 67, 74, 221, 215, 47, 81, 234, 94, 140, 144, 14, 181, 25, 21, 0, 51, 97, 203, 114, 22, 175, 63, 218, 137, 52, 153, 116, 79, 102, 223, 213, 187, 58, 241, 141, 227, 235, 30, 53, 62, 48, 168, 175, 111, 54, 228, 222, 244, 38, 67, 250, 40, 159, 236, 94, 104, 251, 98, 190, 119, 66, 105, 59, 76, 194, 222, 237, 157, 248, 213, 227, 107, 27, 23, 42, 117, 7, 90, 64, 64, 7, 218, 161, 102, 105, 251, 43, 143, 164, 177, 123, 109, 120, 91, 154, 241, 209, 59, 87, 226, 232, 245, 75, 27, 23, 230, 62, 200, 109, 216, 125, 229, 51, 16, 210, 43, 156, 191, 143, 222, 156, 198, 193, 171, 92, 134, 97, 82, 62, 126, 215, 166, 184, 125, 94, 75, 221, 135, 124, 102, 153, 69, 135, 201, 49, 50, 0, 38, 175, 102, 56, 255, 232, 109, 105, 28, 113, 15, 239, 88, 37, 17, 241, 218, 99, 155, 227, 146, 173, 73, 244, 13, 198, 101, 159, 210, 62, 237, 33, 253, 252, 62, 214, 127, 13, 104, 183, 115, 115, 22, 223, 184, 207, 57, 11, 147, 148, 36, 17, 175, 207, 107, 169, 123, 1, 66, 58, 76, 134, 209, 1, 48, 213, 174, 218, 17, 241, 53, 65, 103, 34, 214, 86, 146, 120, 243, 137, 181, 247, 111, 43, 232, 42, 87, 143, 232, 19, 84, 155, 11, 233, 61, 199, 25, 212, 182, 145, 144, 94, 97, 176, 217, 29, 216, 215, 253, 123, 188, 116, 162, 163, 180, 29, 90, 96, 239, 246, 78, 124, 227, 65, 165, 238, 64, 123, 24, 213, 2, 147, 85, 99, 128, 176, 230, 183, 162, 118, 0, 0, 32, 0, 73, 68, 65, 84, 216, 201, 226, 205, 211, 11, 231, 30, 88, 198, 68, 220, 186, 127, 33, 62, 119, 104, 221, 253, 232, 67, 131, 239, 176, 146, 247, 174, 129, 108, 145, 25, 167, 158, 99, 244, 233, 71, 209, 243, 108, 96, 187, 102, 6, 179, 143, 221, 146, 198, 61, 74, 219, 161, 53, 158, 190, 115, 83, 220, 125, 245, 178, 82, 247, 126, 171, 205, 162, 195, 216, 25, 33, 0, 147, 83, 179, 180, 253, 219, 15, 164, 113, 245, 206, 6, 251, 67, 37, 95, 190, 111, 83, 28, 184, 108, 113, 221, 146, 156, 217, 244, 141, 11, 186, 86, 15, 27, 200, 246, 174, 171, 27, 210, 115, 7, 158, 35, 12, 233, 59, 183, 68, 124, 253, 190, 78, 173, 125, 0, 205, 74, 34, 226, 229, 211, 91, 149, 186, 231, 16, 210, 97, 188, 4, 116, 96, 50, 106, 94, 180, 239, 191, 46, 141, 199, 14, 248, 8, 107, 131, 78, 26, 113, 230, 169, 45, 125, 74, 182, 187, 130, 122, 169, 146, 247, 98, 229, 238, 147, 11, 233, 229, 207, 223, 36, 137, 120, 249, 145, 78, 108, 89, 46, 189, 41, 48, 98, 123, 183, 119, 226, 215, 148, 186, 3, 45, 96, 116, 11, 76, 157, 93, 107, 89, 124, 239, 97, 31, 95, 109, 178, 123, 107, 26, 47, 63, 186, 101, 248, 83, 218, 35, 38, 16, 210, 187, 55, 109, 34, 164, 119, 245, 175, 128, 199, 111, 73, 227, 238, 43, 157, 183, 208, 86, 79, 221, 185, 41, 238, 185, 70, 169, 123, 223, 213, 102, 209, 97, 108, 140, 20, 128, 241, 171, 113, 177, 78, 211, 44, 126, 112, 122, 193, 3, 182, 90, 232, 216, 141, 203, 241, 248, 109, 231, 254, 199, 148, 15, 233, 121, 129, 187, 137, 144, 62, 124, 16, 93, 47, 164, 15, 63, 159, 47, 217, 170, 180, 29, 218, 46, 137, 136, 87, 31, 223, 22, 107, 203, 74, 221, 251, 17, 210, 97, 60, 4, 116, 96, 188, 106, 94, 164, 159, 57, 152, 198, 205, 251, 26, 234, 11, 141, 251, 206, 137, 205, 113, 229, 206, 115, 65, 180, 255, 3, 224, 170, 4, 238, 98, 51, 74, 125, 7, 192, 253, 246, 145, 219, 162, 78, 249, 103, 22, 61, 223, 223, 251, 146, 36, 226, 123, 15, 119, 98, 211, 82, 207, 42, 160, 101, 118, 173, 165, 241, 141, 135, 148, 186, 3, 147, 35, 160, 3, 227, 83, 243, 226, 127, 224, 210, 44, 62, 119, 143, 143, 173, 54, 91, 89, 76, 226, 199, 31, 221, 26, 203, 139, 201, 133, 101, 85, 95, 167, 86, 44, 164, 15, 40, 145, 111, 234, 245, 107, 57, 109, 243, 101, 27, 190, 158, 188, 53, 141, 187, 148, 182, 195, 212, 120, 226, 142, 77, 113, 176, 114, 169, 123, 214, 213, 126, 125, 115, 165, 238, 192, 112, 70, 12, 192, 84, 216, 178, 156, 197, 27, 143, 46, 188, 255, 206, 109, 218, 236, 234, 93, 157, 248, 198, 241, 77, 27, 6, 99, 51, 19, 210, 75, 14, 48, 247, 108, 75, 226, 87, 239, 85, 218, 14, 211, 36, 137, 136, 87, 30, 223, 22, 107, 43, 85, 74, 221, 55, 44, 236, 105, 175, 212, 93, 72, 135, 97, 4, 116, 96, 60, 106, 190, 82, 237, 251, 143, 164, 177, 123, 109, 120, 91, 218, 225, 99, 119, 173, 198, 189, 55, 44, 247, 132, 244, 250, 247, 151, 23, 28, 176, 110, 216, 85, 131, 33, 61, 167, 125, 63, 73, 18, 241, 202, 35, 11, 74, 219, 97, 10, 237, 90, 75, 227, 155, 109, 43, 117, 47, 250, 153, 55, 116, 219, 33, 251, 16, 162, 97, 162, 4, 116, 96, 244, 106, 94, 236, 159, 190, 45, 141, 163, 215, 250, 184, 154, 38, 73, 68, 188, 246, 248, 90, 92, 178, 45, 237, 157, 221, 25, 67, 72, 175, 251, 250, 181, 115, 45, 134, 132, 244, 33, 231, 245, 211, 183, 117, 226, 182, 203, 149, 124, 192, 180, 122, 236, 246, 77, 113, 168, 77, 165, 238, 131, 40, 117, 135, 153, 97, 196, 11, 140, 86, 205, 11, 241, 149, 59, 178, 248, 250, 125, 62, 170, 166, 209, 218, 74, 18, 111, 62, 177, 53, 210, 52, 122, 2, 237, 192, 192, 93, 40, 116, 183, 32, 164, 159, 223, 166, 207, 118, 123, 183, 37, 241, 172, 210, 118, 152, 122, 74, 221, 243, 9, 233, 48, 26, 70, 189, 64, 107, 45, 118, 178, 120, 243, 244, 66, 44, 47, 76, 186, 39, 84, 117, 219, 21, 139, 241, 185, 67, 155, 62, 88, 80, 36, 164, 87, 49, 226, 144, 94, 38, 168, 39, 73, 196, 43, 39, 23, 98, 117, 113, 72, 159, 129, 214, 219, 185, 150, 198, 183, 79, 108, 221, 184, 112, 108, 165, 238, 69, 74, 208, 149, 186, 195, 172, 17, 208, 129, 209, 169, 121, 223, 249, 183, 142, 167, 113, 245, 206, 6, 251, 195, 68, 124, 229, 254, 205, 113, 224, 178, 117, 105, 181, 232, 76, 122, 159, 229, 197, 67, 125, 179, 33, 253, 92, 171, 98, 247, 136, 126, 236, 246, 52, 110, 189, 76, 105, 59, 204, 138, 71, 111, 93, 141, 251, 110, 88, 105, 176, 212, 125, 64, 187, 28, 74, 221, 97, 126, 8, 232, 192, 104, 212, 188, 240, 222, 119, 93, 26, 143, 223, 226, 35, 106, 22, 116, 210, 136, 31, 125, 116, 107, 172, 173, 172, 91, 56, 138, 144, 62, 224, 156, 107, 50, 164, 15, 26, 144, 238, 221, 158, 196, 87, 142, 42, 249, 128, 89, 243, 189, 71, 183, 198, 214, 213, 180, 161, 82, 247, 50, 237, 148, 186, 195, 188, 49, 250, 5, 90, 103, 231, 150, 44, 190, 247, 176, 143, 167, 89, 178, 123, 107, 26, 47, 159, 94, 139, 188, 64, 61, 154, 144, 222, 53, 72, 29, 58, 16, 44, 22, 210, 207, 181, 236, 93, 151, 36, 17, 175, 158, 92, 84, 218, 14, 51, 104, 199, 150, 52, 190, 115, 98, 82, 79, 117, 87, 234, 14, 243, 196, 8, 24, 104, 94, 141, 139, 121, 146, 100, 241, 218, 169, 52, 182, 174, 12, 111, 203, 116, 57, 254, 161, 149, 56, 125, 219, 106, 180, 38, 164, 23, 125, 173, 81, 193, 217, 244, 79, 124, 164, 19, 183, 40, 109, 135, 153, 117, 242, 150, 213, 56, 118, 163, 82, 247, 190, 171, 205, 162, 67, 99, 4, 116, 160, 89, 53, 47, 180, 207, 28, 76, 227, 246, 203, 125, 52, 205, 170, 23, 30, 217, 18, 87, 236, 232, 68, 123, 67, 122, 214, 211, 190, 127, 187, 245, 91, 100, 113, 249, 69, 161, 180, 29, 230, 192, 139, 167, 148, 186, 231, 17, 210, 161, 25, 70, 193, 64, 115, 106, 94, 96, 15, 92, 154, 197, 231, 15, 250, 88, 154, 101, 43, 139, 73, 252, 248, 99, 219, 98, 105, 33, 137, 246, 134, 244, 222, 246, 249, 237, 34, 210, 36, 226, 229, 147, 75, 222, 54, 0, 115, 224, 226, 45, 105, 188, 240, 136, 82, 119, 96, 116, 140, 132, 129, 86, 216, 188, 156, 197, 235, 167, 22, 34, 85, 33, 60, 243, 174, 217, 189, 16, 95, 63, 190, 249, 253, 191, 77, 46, 164, 111, 80, 38, 164, 119, 181, 253, 244, 93, 11, 113, 224, 82, 39, 46, 204, 139, 19, 7, 218, 94, 234, 158, 255, 11, 72, 165, 238, 208, 126, 2, 58, 208, 140, 154, 175, 84, 123, 241, 161, 52, 46, 217, 58, 188, 45, 179, 225, 19, 247, 108, 138, 163, 215, 47, 191, 255, 183, 58, 33, 189, 172, 188, 253, 231, 237, 119, 192, 76, 82, 150, 197, 21, 23, 39, 241, 197, 195, 166, 206, 97, 222, 188, 116, 122, 107, 92, 180, 185, 173, 165, 238, 131, 143, 163, 212, 29, 218, 77, 64, 7, 234, 171, 121, 65, 125, 234, 214, 52, 142, 223, 224, 227, 104, 158, 36, 17, 241, 234, 99, 107, 177, 115, 203, 249, 255, 239, 85, 67, 122, 149, 64, 223, 76, 72, 79, 147, 136, 151, 30, 89, 84, 218, 14, 115, 104, 251, 166, 52, 158, 87, 234, 14, 140, 128, 17, 49, 80, 79, 205, 11, 245, 149, 59, 178, 248, 198, 253, 62, 138, 230, 209, 182, 77, 105, 156, 121, 122, 219, 186, 219, 26, 74, 134, 244, 62, 203, 170, 134, 244, 158, 153, 168, 2, 15, 143, 251, 149, 187, 23, 226, 192, 165, 206, 93, 152, 87, 15, 221, 180, 26, 199, 63, 164, 212, 189, 255, 145, 205, 162, 67, 85, 70, 22, 192, 196, 44, 118, 178, 120, 243, 244, 130, 25, 200, 57, 118, 219, 21, 139, 241, 217, 67, 155, 214, 45, 41, 18, 210, 123, 215, 215, 13, 233, 125, 13, 152, 81, 186, 98, 71, 18, 95, 60, 236, 133, 231, 48, 239, 94, 122, 116, 107, 92, 172, 212, 189, 255, 225, 234, 254, 18, 0, 230, 148, 128, 14, 84, 87, 243, 190, 243, 111, 30, 75, 227, 234, 157, 13, 246, 135, 169, 244, 213, 99, 91, 226, 230, 75, 215, 135, 221, 97, 33, 125, 120, 217, 103, 35, 229, 238, 125, 219, 71, 116, 146, 44, 94, 59, 181, 20, 75, 126, 177, 4, 115, 111, 219, 166, 52, 94, 62, 125, 238, 1, 42, 217, 128, 89, 113, 165, 238, 37, 153, 69, 103, 142, 9, 232, 64, 53, 53, 47, 158, 247, 94, 155, 198, 19, 183, 250, 8, 34, 162, 147, 70, 252, 240, 233, 173, 177, 121, 121, 253, 210, 97, 231, 215, 232, 66, 250, 176, 251, 210, 63, 115, 207, 98, 220, 184, 215, 185, 11, 156, 115, 239, 13, 43, 241, 224, 135, 87, 54, 46, 28, 240, 11, 63, 165, 238, 205, 236, 27, 102, 149, 17, 6, 80, 94, 205, 139, 230, 206, 45, 89, 188, 116, 194, 199, 15, 31, 216, 187, 189, 19, 175, 156, 222, 58, 116, 230, 105, 52, 175, 95, 235, 90, 215, 179, 93, 92, 184, 47, 253, 202, 29, 73, 124, 225, 144, 210, 118, 96, 163, 23, 79, 41, 117, 207, 61, 156, 82, 119, 40, 197, 8, 25, 24, 171, 36, 201, 226, 181, 83, 105, 108, 93, 25, 222, 150, 249, 114, 252, 195, 43, 241, 232, 109, 171, 3, 103, 158, 206, 253, 231, 100, 66, 122, 39, 141, 120, 237, 209, 101, 165, 237, 64, 143, 109, 155, 210, 248, 254, 99, 74, 221, 27, 103, 22, 157, 57, 36, 160, 3, 229, 212, 188, 239, 252, 153, 131, 105, 220, 126, 185, 143, 30, 250, 251, 238, 201, 181, 216, 191, 179, 179, 110, 201, 176, 251, 209, 243, 219, 228, 171, 22, 210, 63, 119, 112, 49, 110, 216, 227, 220, 5, 250, 59, 122, 253, 74, 60, 124, 243, 234, 198, 133, 74, 221, 235, 239, 95, 72, 103, 206, 24, 105, 0, 197, 213, 188, 72, 30, 216, 23, 241, 249, 131, 62, 118, 200, 183, 178, 152, 196, 79, 62, 182, 61, 150, 214, 103, 244, 198, 95, 191, 150, 191, 207, 126, 251, 202, 178, 44, 174, 217, 149, 196, 23, 14, 45, 13, 232, 57, 64, 196, 11, 143, 172, 197, 14, 165, 238, 253, 15, 167, 212, 29, 10, 49, 82, 6, 198, 98, 243, 114, 22, 111, 60, 186, 176, 238, 157, 215, 208, 223, 53, 187, 23, 226, 107, 15, 108, 201, 47, 207, 108, 228, 245, 107, 249, 251, 236, 94, 215, 73, 35, 190, 127, 106, 37, 22, 58, 193, 255, 223, 222, 157, 7, 77, 114, 222, 247, 97, 255, 117, 191, 239, 187, 251, 238, 189, 192, 226, 216, 93, 44, 64, 28, 4, 72, 16, 4, 113, 16, 196, 13, 2, 32, 238, 197, 130, 32, 41, 145, 132, 68, 241, 18, 239, 75, 188, 73, 128, 184, 150, 100, 73, 46, 39, 86, 92, 137, 43, 85, 74, 69, 165, 164, 42, 101, 167, 172, 40, 174, 164, 168, 68, 178, 45, 151, 228, 136, 32, 168, 200, 178, 19, 197, 74, 84, 74, 28, 43, 142, 8, 144, 150, 40, 201, 81, 217, 22, 69, 224, 237, 252, 241, 238, 187, 59, 239, 76, 159, 211, 61, 51, 61, 51, 159, 15, 138, 197, 125, 187, 159, 238, 126, 222, 221, 153, 158, 254, 206, 243, 235, 167, 129, 82, 74, 221, 39, 196, 40, 58, 75, 68, 64, 7, 234, 105, 89, 218, 254, 249, 123, 211, 56, 127, 127, 135, 253, 97, 161, 189, 227, 166, 221, 113, 219, 21, 59, 107, 133, 244, 234, 245, 109, 66, 122, 22, 239, 189, 117, 135, 210, 118, 160, 182, 219, 174, 88, 143, 7, 174, 86, 234, 158, 127, 100, 165, 238, 80, 197, 21, 7, 80, 173, 229, 135, 226, 163, 215, 164, 113, 247, 171, 156, 110, 168, 47, 137, 136, 39, 30, 217, 31, 231, 236, 75, 43, 67, 122, 187, 73, 227, 202, 182, 137, 120, 229, 121, 105, 252, 132, 210, 118, 160, 161, 207, 61, 184, 63, 206, 219, 167, 212, 61, 247, 112, 66, 58, 148, 114, 197, 12, 148, 107, 249, 97, 248, 138, 179, 179, 248, 248, 157, 78, 53, 52, 119, 112, 119, 26, 207, 190, 245, 96, 164, 105, 84, 150, 104, 118, 30, 210, 179, 44, 86, 211, 136, 199, 143, 239, 138, 85, 47, 95, 160, 161, 189, 235, 73, 124, 225, 248, 236, 75, 221, 139, 67, 250, 156, 150, 186, 79, 99, 255, 48, 99, 46, 59, 128, 98, 45, 63, 4, 215, 86, 178, 120, 250, 225, 213, 216, 233, 177, 84, 140, 233, 186, 87, 172, 197, 143, 221, 178, 103, 243, 135, 137, 62, 126, 109, 104, 155, 136, 120, 223, 109, 59, 226, 138, 243, 125, 76, 2, 227, 185, 237, 138, 245, 56, 254, 186, 217, 150, 186, 151, 155, 211, 82, 119, 88, 112, 174, 60, 128, 137, 200, 98, 115, 228, 252, 178, 115, 103, 221, 19, 230, 221, 135, 239, 218, 27, 175, 61, 54, 92, 102, 94, 103, 210, 184, 241, 67, 250, 229, 231, 167, 241, 227, 55, 239, 28, 171, 191, 0, 91, 62, 243, 224, 254, 56, 127, 255, 138, 82, 247, 220, 45, 149, 186, 67, 30, 1, 29, 200, 215, 242, 195, 239, 150, 75, 211, 120, 244, 90, 167, 24, 218, 91, 73, 35, 158, 121, 203, 254, 216, 189, 51, 169, 53, 105, 220, 56, 33, 125, 112, 155, 181, 149, 44, 158, 60, 177, 91, 105, 59, 208, 218, 158, 157, 73, 60, 241, 200, 129, 72, 98, 78, 74, 221, 171, 62, 251, 149, 186, 195, 196, 185, 252, 0, 70, 181, 252, 208, 59, 103, 111, 22, 79, 60, 152, 134, 39, 170, 209, 149, 163, 103, 173, 196, 227, 167, 30, 93, 52, 137, 144, 62, 184, 205, 251, 111, 95, 143, 75, 207, 245, 241, 8, 116, 227, 13, 151, 238, 136, 227, 215, 76, 177, 212, 189, 241, 103, 120, 113, 123, 165, 238, 48, 125, 174, 64, 128, 237, 90, 134, 243, 36, 217, 12, 231, 251, 215, 59, 234, 15, 156, 242, 166, 215, 172, 199, 67, 91, 23, 185, 19, 10, 233, 87, 156, 159, 198, 99, 55, 41, 109, 7, 186, 245, 233, 7, 246, 199, 225, 3, 83, 42, 117, 47, 216, 183, 82, 119, 152, 15, 2, 58, 208, 153, 44, 178, 120, 207, 205, 105, 92, 127, 145, 83, 11, 147, 241, 249, 135, 246, 197, 69, 231, 172, 108, 254, 208, 113, 72, 223, 177, 18, 241, 228, 137, 61, 74, 219, 129, 206, 77, 178, 212, 253, 204, 121, 78, 169, 59, 44, 2, 151, 33, 192, 25, 45, 63, 228, 174, 62, 26, 241, 238, 155, 156, 86, 152, 156, 245, 181, 36, 78, 190, 245, 96, 172, 173, 158, 186, 129, 162, 195, 144, 254, 129, 55, 174, 199, 37, 74, 219, 129, 9, 185, 225, 146, 29, 241, 200, 117, 187, 183, 47, 236, 160, 212, 125, 104, 227, 242, 125, 151, 82, 234, 14, 125, 224, 74, 4, 216, 212, 50, 156, 239, 217, 153, 197, 147, 199, 87, 99, 197, 89, 133, 9, 187, 226, 240, 106, 124, 228, 238, 61, 103, 22, 212, 120, 228, 80, 85, 72, 127, 205, 209, 213, 120, 236, 38, 247, 101, 0, 147, 245, 201, 251, 246, 41, 117, 47, 58, 156, 82, 119, 136, 8, 1, 29, 232, 64, 22, 89, 124, 238, 158, 52, 14, 239, 159, 117, 79, 88, 22, 239, 188, 121, 79, 220, 118, 197, 192, 189, 226, 53, 46, 98, 139, 66, 250, 90, 154, 197, 227, 199, 119, 71, 106, 86, 67, 96, 194, 246, 236, 76, 226, 43, 74, 221, 39, 67, 72, 103, 65, 8, 232, 64, 171, 15, 181, 44, 178, 120, 243, 235, 210, 120, 211, 171, 157, 78, 152, 158, 36, 34, 158, 120, 100, 127, 28, 218, 155, 247, 186, 43, 30, 29, 202, 11, 233, 31, 190, 107, 119, 92, 114, 238, 74, 231, 125, 4, 200, 243, 250, 75, 118, 196, 163, 215, 47, 80, 169, 123, 147, 253, 43, 117, 135, 74, 174, 168, 97, 217, 181, 252, 198, 249, 226, 179, 35, 62, 113, 151, 83, 9, 211, 119, 112, 119, 26, 39, 223, 122, 32, 146, 173, 145, 239, 154, 143, 28, 26, 188, 216, 189, 234, 130, 213, 120, 199, 141, 74, 219, 129, 233, 250, 212, 253, 251, 226, 130, 179, 22, 164, 212, 189, 226, 56, 77, 41, 117, 103, 217, 185, 170, 134, 101, 214, 242, 131, 108, 109, 37, 139, 167, 31, 94, 141, 157, 171, 29, 245, 7, 26, 186, 238, 226, 29, 241, 99, 183, 12, 140, 68, 53, 8, 233, 59, 86, 147, 120, 252, 225, 61, 74, 219, 129, 169, 91, 95, 75, 226, 241, 19, 205, 74, 221, 115, 75, 216, 135, 219, 23, 181, 83, 234, 14, 115, 67, 64, 7, 198, 146, 69, 22, 31, 191, 51, 141, 203, 206, 157, 117, 79, 88, 118, 31, 185, 123, 95, 92, 117, 193, 218, 153, 5, 101, 33, 125, 96, 221, 135, 239, 220, 21, 23, 159, 163, 180, 29, 152, 141, 235, 47, 222, 17, 111, 189, 161, 126, 169, 251, 208, 194, 156, 117, 74, 221, 97, 17, 8, 232, 176, 172, 90, 222, 119, 126, 243, 37, 105, 60, 122, 173, 83, 8, 179, 183, 146, 70, 60, 251, 214, 3, 177, 123, 96, 206, 184, 170, 145, 160, 171, 143, 173, 197, 219, 111, 220, 53, 141, 238, 1, 20, 250, 196, 189, 251, 226, 152, 82, 247, 130, 45, 149, 186, 179, 156, 92, 93, 195, 50, 106, 249, 193, 117, 238, 222, 136, 39, 30, 76, 67, 101, 48, 125, 113, 244, 172, 149, 120, 252, 196, 129, 237, 23, 116, 5, 33, 125, 125, 45, 137, 39, 31, 217, 171, 180, 29, 152, 185, 245, 181, 36, 158, 122, 244, 96, 164, 137, 82, 247, 206, 9, 233, 204, 41, 1, 29, 150, 77, 203, 15, 172, 36, 201, 226, 137, 7, 211, 56, 96, 240, 145, 158, 121, 211, 107, 214, 227, 161, 215, 237, 170, 12, 233, 31, 125, 211, 158, 56, 118, 182, 210, 118, 160, 31, 174, 190, 112, 45, 222, 182, 240, 165, 238, 227, 133, 116, 165, 238, 44, 35, 1, 29, 168, 45, 139, 44, 126, 226, 166, 52, 174, 191, 200, 169, 131, 126, 250, 194, 241, 253, 113, 209, 161, 149, 194, 144, 126, 245, 133, 107, 241, 35, 55, 248, 118, 9, 232, 151, 143, 221, 179, 47, 46, 60, 123, 145, 75, 221, 199, 167, 212, 157, 101, 227, 42, 27, 150, 73, 203, 251, 206, 175, 60, 28, 241, 158, 155, 157, 54, 232, 175, 245, 181, 36, 78, 190, 245, 172, 88, 91, 73, 70, 66, 250, 102, 105, 251, 190, 51, 143, 101, 3, 232, 137, 245, 181, 36, 158, 124, 244, 96, 172, 40, 117, 135, 165, 231, 74, 27, 150, 69, 203, 15, 192, 189, 59, 35, 158, 61, 177, 26, 171, 206, 26, 244, 220, 171, 142, 172, 198, 71, 238, 222, 27, 17, 219, 71, 94, 62, 126, 143, 210, 118, 160, 191, 174, 62, 182, 22, 63, 114, 227, 158, 237, 11, 149, 186, 23, 239, 191, 46, 95, 0, 48, 103, 92, 106, 3, 149, 178, 200, 226, 179, 247, 164, 113, 120, 255, 172, 123, 2, 245, 60, 118, 203, 158, 184, 237, 242, 245, 136, 216, 124, 253, 230, 62, 206, 8, 160, 103, 62, 114, 247, 222, 184, 72, 169, 123, 254, 225, 132, 116, 150, 132, 128, 14, 203, 160, 101, 105, 251, 137, 171, 211, 184, 231, 213, 78, 23, 204, 143, 36, 34, 158, 120, 100, 127, 156, 179, 55, 141, 93, 107, 73, 124, 249, 196, 126, 79, 29, 0, 122, 79, 169, 251, 4, 9, 233, 204, 9, 87, 220, 176, 232, 90, 126, 32, 29, 59, 24, 241, 137, 187, 156, 42, 152, 63, 103, 237, 73, 227, 201, 71, 15, 196, 167, 238, 219, 23, 23, 156, 165, 180, 29, 152, 15, 175, 61, 182, 22, 111, 191, 73, 169, 123, 237, 253, 195, 130, 89, 157, 117, 7, 128, 9, 106, 25, 206, 215, 86, 178, 56, 249, 200, 106, 236, 90, 235, 168, 63, 48, 101, 55, 94, 186, 211, 229, 28, 48, 119, 62, 122, 247, 222, 248, 173, 127, 241, 131, 248, 151, 127, 252, 82, 36, 35, 245, 63, 89, 196, 208, 178, 44, 203, 34, 25, 158, 1, 51, 203, 98, 120, 86, 204, 237, 237, 70, 247, 51, 184, 108, 91, 219, 156, 125, 21, 29, 39, 139, 44, 167, 207, 221, 105, 181, 255, 178, 223, 3, 122, 194, 176, 24, 144, 43, 139, 44, 62, 118, 103, 26, 175, 60, 119, 214, 61, 129, 118, 92, 138, 1, 243, 102, 109, 53, 137, 39, 78, 28, 104, 95, 234, 158, 179, 172, 250, 190, 245, 5, 47, 117, 135, 158, 19, 208, 97, 81, 181, 188, 239, 252, 230, 75, 210, 120, 203, 181, 78, 17, 0, 48, 11, 87, 29, 91, 139, 199, 110, 110, 89, 234, 222, 100, 217, 178, 148, 186, 251, 2, 128, 158, 115, 245, 13, 139, 168, 229, 135, 207, 185, 123, 35, 158, 120, 48, 53, 242, 8, 0, 51, 244, 161, 187, 246, 198, 165, 231, 174, 110, 15, 164, 37, 147, 194, 141, 55, 171, 123, 221, 201, 229, 242, 247, 85, 180, 206, 172, 238, 48, 30, 1, 29, 22, 77, 203, 15, 157, 36, 201, 226, 137, 7, 211, 56, 176, 171, 163, 254, 0, 0, 99, 89, 91, 77, 226, 233, 183, 28, 140, 213, 180, 40, 144, 42, 117, 31, 155, 144, 78, 79, 9, 232, 192, 105, 89, 100, 241, 19, 55, 166, 113, 253, 69, 78, 13, 0, 208, 7, 87, 28, 94, 141, 31, 83, 234, 94, 127, 255, 48, 231, 92, 133, 195, 34, 105, 121, 223, 249, 149, 135, 35, 222, 115, 139, 211, 2, 0, 244, 201, 7, 238, 84, 234, 94, 120, 56, 165, 238, 44, 24, 87, 226, 176, 40, 90, 126, 200, 236, 221, 25, 241, 204, 195, 171, 177, 234, 172, 0, 0, 189, 162, 212, 189, 98, 119, 66, 58, 11, 196, 165, 56, 16, 89, 100, 241, 217, 123, 210, 56, 114, 96, 214, 61, 1, 0, 242, 92, 113, 120, 53, 222, 117, 235, 222, 237, 11, 149, 186, 195, 194, 17, 208, 97, 17, 180, 44, 109, 63, 113, 117, 26, 247, 188, 218, 233, 0, 0, 250, 236, 253, 111, 220, 19, 151, 157, 167, 212, 61, 247, 112, 70, 209, 89, 16, 174, 200, 97, 222, 181, 252, 80, 57, 118, 48, 226, 227, 119, 58, 21, 0, 64, 223, 173, 173, 40, 117, 47, 221, 157, 144, 206, 2, 112, 85, 14, 243, 172, 229, 135, 201, 218, 74, 22, 207, 158, 88, 141, 221, 59, 58, 234, 15, 0, 48, 81, 151, 159, 191, 26, 239, 190, 77, 169, 59, 44, 42, 1, 29, 150, 84, 22, 89, 124, 228, 141, 105, 92, 126, 222, 172, 123, 2, 0, 52, 241, 254, 55, 238, 141, 87, 31, 89, 171, 46, 117, 63, 181, 76, 169, 123, 221, 141, 125, 1, 192, 236, 9, 232, 48, 175, 90, 222, 119, 126, 211, 37, 105, 188, 237, 58, 167, 0, 0, 152, 55, 43, 105, 196, 19, 143, 28, 136, 181, 149, 164, 188, 212, 125, 112, 137, 82, 247, 122, 132, 116, 102, 204, 213, 57, 204, 163, 150, 31, 30, 103, 239, 142, 120, 252, 129, 52, 146, 142, 186, 3, 0, 76, 215, 43, 207, 95, 141, 247, 220, 190, 103, 251, 66, 165, 238, 48, 247, 4, 116, 152, 55, 45, 63, 148, 146, 36, 139, 167, 142, 167, 113, 214, 238, 142, 250, 3, 0, 204, 196, 123, 111, 87, 234, 94, 120, 56, 163, 232, 204, 41, 1, 29, 150, 72, 22, 89, 252, 248, 141, 105, 92, 127, 145, 183, 62, 0, 204, 187, 149, 52, 226, 233, 71, 15, 196, 14, 165, 238, 221, 19, 210, 153, 17, 87, 233, 48, 79, 90, 126, 88, 188, 250, 252, 136, 247, 221, 226, 109, 15, 0, 139, 226, 226, 115, 87, 227, 189, 74, 221, 235, 239, 31, 122, 206, 149, 58, 204, 139, 150, 225, 124, 207, 206, 205, 71, 170, 173, 122, 215, 3, 192, 66, 121, 247, 237, 123, 227, 202, 163, 59, 148, 186, 231, 29, 78, 169, 59, 115, 198, 165, 58, 44, 129, 44, 178, 248, 204, 61, 105, 28, 57, 48, 235, 158, 0, 0, 93, 91, 73, 35, 158, 122, 116, 127, 236, 92, 85, 234, 14, 243, 78, 64, 135, 121, 208, 242, 145, 106, 199, 95, 155, 198, 189, 175, 246, 118, 7, 128, 69, 117, 241, 57, 171, 241, 190, 59, 148, 186, 215, 222, 127, 93, 190, 0, 96, 202, 92, 177, 67, 223, 181, 252, 96, 184, 224, 96, 196, 39, 239, 242, 86, 7, 128, 69, 247, 174, 91, 247, 198, 107, 148, 186, 231, 31, 78, 72, 103, 78, 184, 106, 135, 62, 107, 249, 129, 176, 182, 146, 197, 201, 19, 171, 177, 123, 71, 71, 253, 1, 0, 122, 107, 37, 141, 120, 234, 45, 7, 148, 186, 195, 28, 19, 208, 97, 65, 101, 145, 197, 71, 238, 72, 227, 242, 243, 102, 221, 19, 0, 96, 90, 94, 113, 104, 37, 126, 242, 206, 189, 219, 23, 42, 117, 47, 222, 127, 93, 190, 0, 96, 74, 4, 116, 232, 171, 150, 247, 157, 223, 116, 73, 26, 111, 187, 222, 91, 28, 0, 150, 205, 187, 110, 217, 19, 215, 92, 168, 212, 61, 247, 112, 66, 58, 61, 231, 234, 29, 250, 168, 229, 7, 192, 217, 187, 35, 30, 127, 32, 141, 164, 163, 238, 0, 0, 243, 35, 73, 34, 30, 127, 68, 169, 59, 204, 35, 1, 29, 250, 166, 229, 7, 75, 146, 100, 241, 228, 67, 105, 156, 181, 187, 163, 254, 0, 0, 115, 231, 162, 67, 43, 241, 161, 187, 148, 186, 215, 222, 127, 93, 190, 0, 96, 194, 4, 116, 88, 32, 89, 100, 241, 99, 111, 72, 227, 245, 175, 240, 214, 6, 128, 101, 247, 216, 205, 123, 226, 154, 139, 148, 186, 231, 30, 78, 72, 167, 167, 92, 197, 67, 159, 180, 60, 225, 191, 250, 252, 136, 247, 223, 226, 109, 13, 0, 108, 150, 186, 63, 113, 98, 126, 75, 221, 71, 250, 172, 212, 157, 37, 224, 74, 30, 250, 162, 229, 7, 201, 250, 90, 22, 79, 61, 188, 26, 171, 43, 29, 245, 7, 0, 152, 123, 23, 30, 90, 137, 143, 220, 61, 159, 165, 238, 249, 205, 149, 186, 179, 216, 4, 116, 88, 0, 89, 100, 241, 249, 123, 211, 56, 118, 112, 214, 61, 1, 0, 250, 230, 29, 55, 237, 137, 107, 149, 186, 231, 31, 78, 72, 167, 103, 4, 116, 232, 131, 150, 143, 84, 123, 232, 170, 52, 238, 189, 210, 219, 25, 0, 24, 149, 36, 17, 79, 61, 122, 32, 118, 239, 80, 234, 158, 219, 100, 194, 95, 2, 64, 19, 174, 232, 97, 214, 90, 126, 251, 122, 193, 193, 136, 79, 221, 237, 173, 12, 0, 20, 59, 114, 112, 150, 179, 186, 215, 185, 214, 153, 93, 169, 123, 43, 70, 209, 233, 152, 171, 122, 152, 165, 150, 39, 245, 181, 149, 44, 78, 158, 88, 141, 221, 59, 58, 234, 15, 0, 176, 176, 222, 126, 227, 158, 184, 110, 38, 165, 238, 5, 109, 167, 89, 234, 238, 126, 116, 230, 132, 128, 14, 115, 42, 139, 44, 62, 116, 123, 26, 151, 159, 55, 235, 158, 0, 0, 243, 32, 73, 34, 158, 92, 214, 82, 247, 26, 148, 186, 211, 7, 2, 58, 204, 74, 203, 251, 206, 111, 186, 56, 141, 31, 125, 189, 183, 48, 0, 80, 223, 145, 131, 43, 241, 209, 55, 237, 219, 190, 80, 169, 123, 123, 70, 209, 233, 136, 171, 123, 152, 133, 150, 39, 241, 179, 118, 71, 124, 249, 129, 52, 146, 142, 186, 3, 0, 44, 143, 183, 189, 97, 119, 220, 120, 233, 206, 229, 44, 117, 175, 160, 212, 157, 89, 19, 208, 97, 206, 36, 73, 22, 79, 62, 148, 198, 217, 123, 102, 221, 19, 0, 96, 30, 37, 17, 241, 165, 135, 247, 47, 103, 169, 187, 89, 221, 233, 57, 1, 29, 166, 173, 101, 105, 251, 99, 55, 164, 113, 195, 43, 188, 117, 1, 128, 241, 29, 57, 184, 18, 31, 191, 71, 169, 123, 231, 140, 162, 211, 146, 171, 124, 152, 35, 175, 58, 63, 226, 39, 111, 245, 182, 5, 0, 218, 123, 203, 13, 187, 227, 166, 203, 118, 142, 49, 138, 190, 109, 97, 69, 187, 37, 44, 117, 135, 22, 92, 233, 195, 52, 181, 248, 86, 117, 125, 45, 139, 167, 143, 175, 198, 234, 74, 135, 253, 1, 0, 150, 214, 86, 169, 251, 158, 157, 3, 165, 238, 121, 225, 122, 96, 217, 76, 75, 221, 171, 24, 69, 103, 1, 8, 232, 48, 45, 45, 75, 219, 63, 127, 111, 26, 199, 206, 234, 176, 63, 0, 192, 210, 59, 124, 96, 37, 62, 113, 239, 172, 74, 221, 235, 40, 222, 182, 215, 207, 70, 135, 49, 9, 232, 48, 7, 30, 186, 42, 141, 123, 175, 244, 118, 5, 0, 186, 247, 230, 235, 119, 199, 205, 51, 41, 117, 175, 51, 138, 94, 126, 156, 222, 62, 27, 221, 40, 58, 99, 114, 197, 15, 211, 208, 226, 36, 125, 244, 96, 22, 159, 186, 219, 91, 21, 0, 152, 140, 36, 34, 30, 127, 228, 64, 236, 91, 87, 234, 222, 41, 33, 157, 49, 184, 234, 135, 73, 107, 113, 114, 94, 73, 179, 120, 234, 248, 106, 236, 222, 209, 97, 127, 0, 0, 134, 156, 187, 47, 141, 79, 42, 117, 47, 56, 178, 160, 205, 244, 8, 232, 208, 99, 31, 190, 35, 141, 43, 15, 207, 186, 23, 0, 192, 50, 56, 113, 221, 238, 184, 101, 184, 212, 61, 111, 164, 252, 244, 42, 165, 238, 213, 27, 10, 247, 52, 35, 160, 195, 36, 181, 56, 41, 191, 225, 226, 36, 222, 254, 122, 111, 81, 0, 96, 122, 70, 74, 221, 183, 233, 89, 169, 123, 213, 117, 150, 82, 119, 230, 144, 171, 127, 152, 148, 22, 39, 227, 131, 187, 179, 120, 252, 129, 52, 146, 14, 187, 3, 0, 80, 229, 156, 125, 105, 124, 234, 254, 253, 219, 23, 246, 181, 212, 125, 100, 141, 82, 119, 230, 159, 128, 14, 189, 147, 197, 151, 239, 79, 227, 236, 61, 179, 238, 7, 0, 176, 140, 30, 190, 102, 87, 188, 241, 85, 235, 74, 221, 115, 183, 84, 234, 206, 100, 9, 232, 48, 9, 45, 78, 194, 143, 189, 33, 141, 155, 47, 245, 214, 4, 0, 102, 231, 11, 199, 247, 199, 254, 93, 169, 82, 247, 46, 9, 233, 212, 32, 5, 64, 215, 90, 156, 124, 175, 56, 47, 139, 15, 220, 234, 109, 9, 0, 204, 214, 161, 189, 105, 124, 250, 254, 57, 153, 213, 125, 100, 141, 82, 119, 230, 151, 36, 0, 93, 106, 17, 206, 215, 215, 178, 120, 250, 225, 213, 88, 93, 233, 176, 63, 0, 0, 99, 122, 240, 117, 187, 226, 206, 87, 43, 117, 207, 61, 156, 82, 119, 38, 68, 64, 135, 158, 248, 220, 189, 105, 28, 59, 107, 214, 189, 0, 0, 56, 227, 243, 15, 41, 117, 239, 156, 144, 78, 9, 1, 29, 186, 210, 226, 100, 123, 255, 107, 146, 184, 239, 74, 111, 71, 0, 160, 95, 14, 237, 77, 227, 179, 15, 44, 122, 169, 251, 120, 33, 93, 169, 59, 147, 32, 17, 64, 23, 90, 132, 243, 163, 7, 178, 248, 244, 155, 188, 21, 1, 128, 126, 186, 255, 234, 93, 113, 215, 66, 151, 186, 143, 79, 169, 59, 93, 147, 10, 96, 134, 86, 210, 44, 158, 122, 120, 53, 118, 239, 152, 117, 79, 0, 0, 138, 125, 241, 225, 253, 113, 214, 30, 165, 238, 157, 18, 210, 201, 33, 160, 67, 91, 45, 78, 174, 31, 186, 61, 141, 43, 15, 119, 216, 23, 0, 128, 9, 56, 184, 59, 141, 207, 40, 117, 111, 185, 127, 168, 38, 160, 67, 27, 45, 194, 249, 13, 175, 72, 226, 29, 175, 247, 22, 4, 0, 230, 195, 189, 87, 237, 138, 187, 175, 84, 234, 158, 123, 56, 165, 238, 116, 68, 58, 128, 113, 181, 56, 161, 30, 220, 157, 197, 227, 15, 166, 145, 36, 29, 246, 7, 0, 96, 194, 190, 120, 124, 127, 156, 173, 212, 189, 91, 66, 58, 3, 4, 116, 152, 186, 44, 190, 116, 127, 26, 135, 246, 204, 186, 31, 0, 0, 205, 28, 216, 157, 198, 151, 30, 222, 191, 125, 225, 60, 151, 186, 119, 24, 210, 149, 186, 211, 5, 1, 29, 198, 209, 226, 155, 206, 119, 222, 144, 198, 45, 151, 122, 235, 1, 0, 243, 233, 142, 87, 173, 199, 61, 175, 25, 183, 212, 125, 116, 148, 189, 180, 221, 246, 22, 249, 109, 219, 148, 186, 119, 76, 169, 59, 109, 73, 9, 208, 84, 139, 19, 232, 21, 231, 101, 241, 193, 219, 188, 237, 0, 128, 249, 246, 249, 135, 198, 45, 117, 31, 108, 166, 212, 125, 106, 251, 102, 110, 72, 10, 208, 68, 139, 19, 231, 250, 218, 230, 35, 213, 86, 87, 58, 236, 15, 0, 192, 12, 40, 117, 47, 59, 178, 160, 205, 248, 4, 116, 152, 146, 207, 222, 147, 198, 133, 103, 205, 186, 23, 0, 0, 221, 184, 227, 85, 235, 113, 223, 107, 119, 85, 151, 186, 159, 90, 166, 212, 189, 206, 134, 194, 253, 178, 19, 208, 161, 174, 22, 39, 204, 187, 94, 149, 196, 253, 175, 241, 118, 3, 0, 22, 203, 103, 31, 216, 23, 135, 170, 74, 221, 7, 151, 40, 117, 175, 38, 164, 47, 53, 137, 1, 234, 104, 113, 162, 60, 122, 32, 139, 47, 222, 231, 173, 6, 0, 44, 158, 3, 187, 211, 248, 242, 9, 165, 238, 181, 247, 15, 21, 164, 6, 168, 210, 34, 156, 175, 164, 89, 60, 121, 124, 53, 118, 239, 232, 176, 63, 0, 0, 61, 114, 219, 21, 235, 241, 192, 213, 74, 221, 115, 15, 167, 212, 157, 134, 4, 116, 152, 160, 15, 222, 158, 198, 107, 142, 204, 186, 23, 0, 0, 147, 245, 185, 7, 247, 199, 121, 251, 230, 179, 212, 125, 164, 207, 74, 221, 153, 33, 1, 29, 202, 180, 56, 49, 222, 240, 138, 36, 222, 249, 122, 111, 49, 0, 96, 241, 237, 93, 79, 226, 11, 199, 103, 85, 234, 94, 231, 122, 173, 225, 53, 157, 82, 119, 102, 68, 122, 128, 34, 45, 194, 249, 129, 93, 89, 60, 254, 96, 26, 73, 210, 97, 127, 0, 0, 122, 236, 182, 43, 214, 227, 161, 215, 205, 162, 212, 189, 160, 173, 82, 119, 230, 144, 128, 14, 121, 90, 157, 12, 179, 248, 242, 3, 105, 28, 218, 211, 89, 111, 0, 0, 230, 194, 103, 31, 220, 31, 231, 239, 95, 81, 234, 222, 37, 33, 125, 169, 8, 232, 48, 172, 229, 73, 240, 29, 175, 79, 227, 150, 75, 189, 181, 0, 128, 229, 179, 103, 103, 18, 79, 60, 114, 32, 182, 21, 17, 42, 117, 63, 181, 85, 139, 107, 76, 33, 125, 105, 72, 17, 208, 161, 203, 207, 203, 226, 67, 183, 123, 91, 1, 0, 203, 235, 13, 151, 238, 136, 227, 215, 116, 89, 234, 94, 210, 174, 192, 194, 149, 186, 179, 52, 36, 9, 24, 212, 226, 219, 201, 245, 181, 44, 158, 126, 120, 53, 86, 87, 58, 236, 15, 0, 192, 28, 250, 244, 3, 251, 227, 240, 129, 174, 74, 221, 155, 180, 235, 127, 169, 187, 251, 209, 41, 35, 160, 195, 150, 22, 39, 189, 44, 178, 248, 204, 155, 210, 184, 240, 172, 14, 251, 3, 0, 48, 167, 170, 75, 221, 139, 39, 133, 155, 88, 169, 123, 227, 114, 248, 162, 109, 155, 28, 167, 99, 66, 250, 194, 19, 208, 161, 3, 119, 191, 42, 141, 7, 174, 242, 118, 2, 0, 216, 114, 195, 37, 59, 226, 145, 235, 118, 23, 148, 186, 199, 200, 178, 137, 151, 186, 151, 55, 220, 254, 163, 82, 119, 102, 68, 162, 128, 136, 86, 223, 70, 30, 57, 144, 197, 23, 239, 243, 86, 2, 0, 24, 246, 201, 251, 246, 41, 117, 47, 160, 212, 157, 60, 82, 5, 180, 56, 201, 165, 105, 22, 79, 30, 95, 141, 221, 59, 58, 236, 15, 0, 192, 130, 24, 44, 117, 207, 74, 70, 197, 39, 93, 234, 94, 59, 164, 87, 81, 234, 206, 132, 9, 232, 44, 183, 150, 247, 157, 127, 240, 182, 52, 174, 58, 210, 97, 127, 0, 0, 22, 204, 13, 151, 236, 136, 71, 175, 223, 189, 125, 225, 148, 75, 221, 203, 21, 151, 224, 183, 46, 69, 159, 228, 163, 215, 88, 72, 2, 58, 203, 171, 229, 55, 143, 215, 93, 152, 198, 59, 111, 240, 22, 2, 0, 168, 242, 169, 251, 247, 197, 5, 103, 245, 181, 212, 189, 252, 56, 173, 74, 221, 107, 80, 234, 206, 32, 233, 2, 198, 112, 96, 87, 22, 79, 29, 79, 35, 77, 170, 219, 2, 0, 44, 187, 245, 181, 36, 190, 252, 240, 100, 74, 221, 207, 4, 111, 165, 238, 204, 63, 1, 157, 229, 212, 234, 100, 150, 197, 151, 238, 79, 227, 208, 158, 206, 122, 3, 0, 176, 240, 94, 127, 201, 142, 120, 203, 235, 187, 47, 117, 31, 218, 184, 69, 15, 231, 180, 212, 93, 72, 95, 40, 2, 58, 203, 167, 229, 125, 231, 111, 127, 125, 26, 183, 94, 230, 173, 3, 0, 208, 212, 39, 239, 219, 23, 199, 148, 186, 231, 31, 206, 253, 232, 132, 128, 14, 141, 92, 122, 78, 196, 7, 111, 243, 182, 1, 0, 24, 199, 250, 90, 18, 79, 61, 122, 48, 210, 164, 126, 169, 123, 110, 9, 251, 112, 251, 162, 118, 29, 63, 122, 109, 244, 240, 74, 221, 233, 150, 164, 193, 114, 105, 113, 242, 90, 95, 203, 226, 228, 137, 213, 216, 177, 218, 97, 127, 0, 0, 150, 204, 213, 23, 174, 197, 219, 110, 168, 95, 234, 62, 180, 48, 103, 93, 147, 71, 175, 213, 81, 220, 94, 169, 59, 147, 38, 160, 179, 60, 90, 150, 182, 127, 250, 77, 105, 92, 116, 118, 135, 253, 1, 0, 88, 82, 31, 187, 103, 95, 92, 120, 246, 148, 74, 221, 11, 246, 173, 212, 157, 62, 18, 208, 89, 14, 45, 195, 249, 93, 87, 164, 241, 224, 85, 222, 46, 0, 0, 93, 88, 95, 75, 226, 73, 165, 238, 221, 51, 138, 62, 247, 36, 14, 168, 112, 244, 64, 196, 23, 239, 243, 86, 1, 0, 232, 210, 213, 199, 214, 226, 71, 111, 28, 122, 44, 206, 60, 151, 186, 119, 26, 210, 149, 186, 47, 43, 169, 131, 197, 215, 226, 36, 149, 166, 89, 60, 121, 124, 53, 246, 236, 236, 176, 63, 0, 0, 68, 68, 196, 71, 238, 222, 27, 23, 77, 188, 212, 189, 238, 136, 123, 254, 190, 138, 214, 77, 190, 20, 93, 208, 94, 70, 2, 58, 139, 173, 101, 105, 251, 7, 110, 77, 227, 170, 35, 29, 246, 7, 0, 128, 211, 182, 74, 221, 87, 218, 150, 186, 231, 44, 235, 230, 209, 107, 74, 221, 153, 46, 1, 157, 197, 213, 242, 196, 116, 237, 177, 36, 30, 123, 131, 183, 8, 0, 192, 36, 189, 246, 216, 90, 188, 253, 166, 150, 165, 238, 77, 150, 41, 117, 167, 199, 164, 15, 200, 113, 96, 87, 22, 79, 31, 95, 137, 52, 153, 117, 79, 0, 0, 22, 223, 71, 239, 222, 27, 151, 156, 187, 186, 61, 240, 150, 76, 10, 167, 212, 157, 69, 37, 160, 179, 152, 90, 125, 99, 152, 197, 23, 239, 79, 227, 208, 222, 206, 122, 3, 0, 64, 137, 181, 213, 36, 158, 56, 113, 96, 123, 169, 251, 54, 74, 221, 199, 98, 20, 125, 238, 8, 232, 44, 158, 150, 247, 157, 255, 232, 245, 105, 220, 118, 153, 183, 6, 0, 192, 52, 93, 117, 108, 45, 30, 187, 89, 169, 123, 211, 99, 87, 18, 210, 231, 138, 20, 194, 98, 105, 121, 2, 186, 244, 156, 136, 15, 221, 238, 109, 1, 0, 48, 11, 31, 186, 107, 111, 92, 90, 167, 212, 253, 212, 50, 165, 238, 44, 26, 73, 132, 197, 209, 50, 156, 175, 175, 101, 113, 242, 196, 106, 236, 88, 237, 168, 63, 0, 0, 52, 178, 182, 154, 196, 211, 111, 57, 24, 171, 105, 69, 169, 251, 224, 18, 165, 238, 213, 140, 162, 207, 13, 1, 29, 98, 243, 3, 224, 83, 119, 167, 113, 209, 217, 179, 238, 9, 0, 192, 114, 187, 226, 240, 170, 82, 247, 49, 142, 93, 73, 72, 159, 11, 2, 58, 139, 161, 229, 125, 231, 119, 93, 145, 198, 241, 215, 122, 59, 0, 0, 244, 193, 7, 239, 84, 234, 94, 114, 192, 9, 239, 159, 89, 146, 72, 152, 127, 45, 191, 13, 60, 111, 95, 196, 231, 239, 245, 86, 0, 0, 232, 11, 165, 238, 19, 98, 20, 189, 247, 164, 18, 150, 90, 154, 102, 241, 236, 195, 171, 177, 111, 125, 214, 61, 1, 0, 96, 208, 21, 135, 87, 227, 93, 183, 14, 61, 247, 118, 73, 74, 221, 115, 191, 68, 168, 121, 236, 74, 66, 122, 175, 9, 232, 204, 183, 150, 165, 237, 239, 191, 37, 141, 171, 142, 118, 216, 31, 0, 0, 58, 243, 254, 55, 238, 137, 203, 206, 83, 234, 94, 112, 192, 22, 155, 10, 233, 125, 37, 160, 51, 191, 90, 158, 88, 174, 61, 150, 196, 143, 223, 232, 45, 0, 0, 208, 87, 107, 43, 243, 93, 234, 62, 210, 231, 78, 71, 209, 89, 68, 210, 9, 75, 105, 255, 174, 44, 158, 62, 190, 18, 105, 50, 235, 158, 0, 0, 80, 230, 242, 243, 87, 227, 221, 183, 205, 103, 169, 123, 126, 115, 165, 238, 20, 19, 208, 153, 79, 173, 78, 40, 89, 124, 233, 254, 52, 14, 237, 173, 110, 9, 0, 192, 236, 189, 255, 141, 123, 227, 213, 71, 214, 148, 186, 231, 31, 176, 197, 166, 66, 122, 223, 8, 232, 204, 159, 150, 247, 157, 255, 200, 245, 105, 220, 118, 153, 151, 62, 0, 192, 188, 88, 73, 35, 158, 120, 228, 64, 172, 173, 36, 115, 89, 234, 94, 190, 255, 130, 125, 148, 245, 143, 133, 37, 165, 48, 95, 90, 158, 160, 46, 57, 20, 241, 161, 219, 189, 236, 1, 0, 230, 205, 43, 207, 95, 141, 247, 220, 190, 103, 251, 194, 57, 41, 117, 175, 63, 138, 174, 212, 125, 217, 73, 42, 44, 141, 245, 181, 44, 78, 62, 178, 26, 59, 87, 103, 221, 19, 0, 0, 198, 241, 222, 219, 115, 74, 221, 79, 171, 42, 97, 63, 189, 176, 162, 221, 148, 74, 221, 59, 15, 198, 130, 246, 34, 16, 208, 153, 31, 45, 75, 219, 63, 117, 119, 26, 175, 56, 187, 195, 254, 0, 0, 48, 85, 43, 105, 196, 87, 134, 75, 221, 243, 194, 117, 150, 23, 168, 149, 186, 55, 235, 7, 179, 32, 160, 51, 31, 90, 158, 52, 238, 186, 34, 141, 227, 175, 245, 114, 7, 0, 152, 119, 151, 157, 191, 26, 239, 91, 248, 82, 247, 130, 237, 149, 186, 47, 60, 137, 133, 133, 119, 238, 190, 44, 62, 127, 175, 151, 58, 0, 192, 162, 120, 247, 237, 123, 227, 202, 163, 59, 22, 184, 212, 189, 221, 19, 139, 152, 95, 82, 11, 253, 215, 226, 219, 188, 52, 205, 226, 217, 135, 87, 99, 223, 122, 135, 253, 1, 0, 96, 166, 86, 210, 136, 167, 30, 221, 31, 59, 87, 235, 151, 186, 143, 172, 43, 88, 54, 145, 82, 247, 42, 74, 221, 57, 69, 64, 167, 223, 90, 158, 36, 222, 127, 75, 26, 87, 29, 237, 168, 47, 0, 0, 244, 198, 197, 231, 172, 198, 251, 238, 168, 95, 234, 158, 59, 58, 222, 96, 196, 188, 185, 226, 17, 246, 94, 63, 27, 157, 153, 18, 208, 89, 88, 175, 187, 32, 226, 199, 111, 244, 18, 7, 0, 88, 84, 239, 186, 117, 111, 188, 102, 226, 165, 238, 121, 237, 102, 91, 234, 110, 20, 125, 113, 73, 47, 244, 87, 139, 147, 195, 222, 157, 89, 60, 121, 124, 37, 210, 164, 195, 254, 0, 0, 208, 43, 43, 105, 196, 83, 111, 57, 16, 59, 87, 7, 46, 250, 166, 54, 97, 92, 193, 181, 106, 155, 82, 247, 252, 29, 22, 28, 198, 132, 113, 139, 72, 64, 103, 241, 36, 17, 143, 63, 144, 198, 121, 251, 102, 221, 17, 0, 0, 38, 237, 21, 135, 86, 226, 39, 239, 220, 187, 125, 68, 58, 239, 209, 106, 167, 87, 117, 53, 97, 92, 197, 62, 243, 27, 110, 255, 209, 179, 209, 25, 34, 160, 211, 79, 45, 78, 78, 111, 189, 54, 137, 219, 94, 233, 165, 13, 0, 176, 44, 222, 117, 203, 158, 184, 230, 194, 138, 82, 119, 207, 70, 111, 198, 40, 250, 76, 72, 49, 244, 79, 139, 147, 193, 197, 135, 178, 248, 200, 29, 94, 214, 0, 0, 203, 36, 73, 34, 30, 127, 100, 86, 165, 238, 117, 76, 238, 217, 232, 109, 142, 77, 255, 72, 50, 44, 140, 29, 171, 17, 79, 63, 188, 26, 59, 87, 103, 221, 19, 0, 0, 166, 237, 162, 67, 43, 241, 161, 187, 246, 150, 143, 162, 15, 46, 105, 51, 97, 92, 193, 190, 77, 24, 71, 91, 2, 58, 253, 210, 226, 36, 240, 169, 187, 147, 184, 244, 156, 14, 251, 2, 0, 192, 92, 121, 236, 230, 61, 113, 205, 69, 59, 206, 44, 152, 245, 40, 122, 231, 19, 198, 21, 29, 102, 130, 19, 198, 49, 85, 2, 58, 11, 225, 141, 151, 39, 113, 226, 106, 47, 103, 0, 128, 101, 150, 36, 17, 79, 156, 56, 16, 59, 114, 43, 42, 71, 195, 117, 119, 19, 198, 85, 220, 183, 158, 219, 157, 238, 70, 209, 39, 202, 40, 250, 84, 73, 52, 244, 199, 152, 111, 254, 115, 247, 69, 124, 225, 62, 47, 101, 0, 0, 34, 46, 60, 180, 18, 31, 190, 123, 160, 212, 189, 34, 92, 207, 116, 194, 184, 42, 157, 150, 186, 11, 218, 243, 64, 170, 97, 174, 173, 164, 17, 207, 60, 188, 18, 251, 214, 103, 221, 19, 0, 0, 250, 226, 157, 55, 237, 137, 107, 251, 84, 234, 94, 115, 219, 201, 79, 24, 55, 38, 163, 232, 83, 35, 160, 211, 15, 99, 190, 233, 223, 123, 75, 26, 175, 61, 218, 113, 95, 0, 0, 152, 107, 73, 18, 241, 212, 163, 7, 98, 215, 142, 188, 181, 253, 158, 48, 174, 222, 122, 163, 232, 139, 74, 64, 103, 110, 189, 238, 88, 196, 187, 110, 76, 170, 27, 2, 0, 176, 116, 142, 28, 220, 156, 213, 253, 180, 190, 142, 162, 143, 172, 233, 233, 99, 215, 140, 162, 79, 133, 128, 206, 236, 141, 241, 102, 223, 187, 30, 241, 228, 67, 43, 145, 202, 231, 0, 0, 20, 120, 251, 141, 123, 226, 218, 139, 214, 114, 214, 44, 243, 40, 122, 11, 66, 250, 196, 9, 232, 204, 214, 152, 111, 242, 199, 31, 72, 227, 188, 125, 29, 247, 5, 0, 128, 133, 146, 36, 17, 79, 62, 122, 32, 118, 237, 56, 53, 170, 51, 39, 163, 232, 147, 47, 69, 23, 126, 87, 173, 26, 0, 0, 32, 0, 73, 68, 65, 84, 180, 251, 74, 64, 103, 238, 188, 245, 218, 36, 110, 187, 204, 208, 57, 0, 0, 213, 142, 28, 92, 137, 143, 190, 105, 111, 206, 154, 174, 70, 209, 27, 60, 118, 173, 209, 40, 250, 248, 143, 93, 155, 232, 40, 58, 19, 37, 160, 51, 59, 99, 156, 56, 46, 62, 20, 241, 145, 55, 122, 217, 2, 0, 80, 223, 219, 222, 176, 59, 222, 112, 233, 206, 205, 31, 58, 31, 69, 47, 218, 79, 65, 219, 54, 143, 93, 235, 148, 123, 209, 251, 72, 210, 97, 110, 236, 88, 141, 120, 250, 225, 149, 216, 185, 58, 235, 158, 0, 0, 48, 79, 146, 136, 248, 210, 195, 251, 98, 247, 206, 225, 42, 204, 73, 142, 162, 87, 236, 51, 191, 225, 240, 130, 202, 126, 24, 69, 95, 44, 2, 58, 115, 227, 83, 119, 167, 113, 233, 57, 179, 238, 5, 0, 0, 243, 232, 200, 193, 149, 248, 216, 86, 169, 251, 12, 70, 209, 139, 3, 179, 81, 116, 206, 16, 208, 153, 141, 134, 111, 234, 59, 46, 79, 226, 196, 213, 238, 59, 7, 0, 96, 124, 111, 185, 97, 119, 220, 120, 217, 206, 161, 165, 211, 25, 69, 175, 218, 87, 241, 58, 163, 232, 203, 68, 64, 103, 250, 26, 158, 40, 206, 221, 23, 241, 197, 251, 188, 84, 1, 0, 104, 103, 91, 169, 187, 123, 209, 219, 29, 91, 248, 159, 8, 169, 135, 94, 75, 146, 136, 175, 60, 148, 198, 190, 245, 89, 247, 4, 0, 128, 69, 112, 248, 192, 74, 124, 242, 222, 225, 231, 245, 246, 235, 94, 244, 202, 118, 70, 209, 23, 150, 128, 78, 175, 189, 239, 150, 52, 174, 61, 166, 180, 29, 0, 128, 238, 60, 114, 253, 174, 184, 233, 149, 59, 167, 56, 138, 94, 199, 44, 159, 139, 62, 38, 225, 191, 115, 2, 58, 211, 213, 224, 77, 124, 245, 5, 17, 63, 113, 147, 112, 14, 0, 64, 183, 146, 136, 120, 252, 196, 254, 216, 187, 62, 120, 173, 217, 213, 40, 122, 158, 230, 207, 69, 159, 238, 40, 186, 160, 221, 23, 2, 58, 189, 180, 119, 61, 226, 201, 135, 86, 34, 149, 207, 1, 0, 152, 128, 115, 247, 165, 241, 137, 145, 82, 247, 83, 90, 141, 162, 215, 11, 224, 5, 7, 30, 115, 29, 139, 66, 64, 103, 122, 26, 156, 160, 190, 252, 64, 26, 231, 239, 159, 96, 95, 0, 0, 88, 122, 143, 92, 183, 43, 110, 190, 108, 199, 192, 146, 126, 141, 162, 87, 106, 176, 173, 81, 244, 249, 32, 160, 211, 59, 143, 94, 147, 196, 237, 151, 25, 58, 7, 0, 96, 242, 30, 63, 177, 63, 246, 173, 183, 185, 246, 236, 122, 20, 125, 112, 211, 138, 71, 174, 213, 238, 15, 243, 66, 64, 167, 87, 46, 62, 20, 241, 177, 59, 189, 44, 1, 0, 152, 142, 115, 246, 165, 241, 201, 251, 246, 142, 174, 104, 112, 143, 119, 125, 117, 70, 209, 5, 236, 101, 38, 9, 49, 29, 53, 190, 57, 220, 177, 26, 241, 244, 195, 43, 177, 115, 117, 10, 253, 1, 0, 128, 83, 30, 190, 102, 87, 220, 241, 170, 157, 167, 126, 154, 206, 35, 215, 234, 50, 89, 220, 114, 17, 208, 233, 141, 79, 220, 149, 198, 165, 231, 204, 186, 23, 0, 0, 44, 163, 47, 60, 180, 47, 246, 15, 151, 186, 123, 228, 26, 83, 38, 160, 211, 11, 183, 191, 50, 137, 55, 191, 206, 125, 231, 0, 0, 204, 198, 161, 189, 105, 252, 212, 253, 5, 179, 186, 55, 96, 178, 56, 218, 16, 208, 153, 188, 138, 147, 192, 185, 251, 34, 190, 120, 191, 151, 34, 0, 0, 179, 245, 224, 235, 214, 227, 141, 175, 218, 25, 109, 202, 220, 135, 26, 116, 210, 47, 147, 197, 45, 15, 169, 136, 153, 74, 146, 136, 39, 30, 76, 99, 255, 250, 172, 123, 2, 0, 0, 17, 159, 207, 43, 117, 31, 49, 235, 50, 119, 22, 149, 128, 206, 100, 85, 156, 136, 222, 123, 75, 26, 215, 93, 168, 180, 29, 0, 128, 126, 56, 180, 55, 141, 207, 60, 56, 80, 234, 62, 70, 233, 185, 50, 119, 198, 37, 160, 51, 51, 87, 95, 16, 241, 238, 155, 132, 115, 0, 0, 250, 229, 254, 215, 174, 199, 93, 87, 238, 28, 89, 174, 204, 157, 73, 19, 208, 153, 137, 189, 235, 17, 79, 62, 180, 18, 169, 124, 14, 0, 64, 15, 125, 225, 161, 189, 113, 214, 158, 166, 113, 73, 153, 59, 237, 8, 232, 76, 78, 201, 9, 232, 115, 247, 164, 113, 254, 254, 41, 246, 5, 0, 0, 26, 56, 184, 59, 141, 79, 223, 191, 167, 164, 69, 121, 120, 86, 230, 206, 56, 4, 116, 166, 238, 205, 215, 36, 113, 247, 171, 12, 157, 3, 0, 208, 111, 247, 94, 181, 30, 119, 95, 185, 179, 93, 104, 238, 144, 50, 247, 197, 39, 160, 51, 85, 23, 31, 138, 248, 248, 157, 94, 118, 0, 0, 204, 135, 47, 28, 223, 87, 93, 234, 110, 52, 154, 142, 72, 74, 76, 205, 142, 213, 136, 167, 142, 175, 196, 206, 213, 89, 247, 4, 0, 0, 234, 57, 176, 43, 137, 47, 29, 223, 123, 250, 231, 234, 210, 240, 10, 238, 67, 167, 132, 168, 196, 100, 228, 156, 120, 222, 115, 115, 26, 231, 237, 139, 248, 139, 191, 156, 65, 127, 106, 155, 163, 19, 96, 79, 74, 173, 56, 99, 109, 53, 137, 29, 171, 110, 223, 128, 182, 178, 44, 139, 127, 245, 253, 151, 226, 7, 63, 116, 158, 3, 182, 75, 146, 46, 63, 103, 235, 239, 235, 188, 253, 43, 113, 213, 5, 107, 241, 123, 223, 249, 97, 141, 214, 89, 131, 125, 159, 105, 155, 101, 217, 153, 223, 47, 203, 34, 198, 253, 93, 179, 172, 246, 225, 183, 29, 179, 162, 127, 76, 135, 128, 206, 212, 252, 252, 55, 55, 226, 231, 191, 89, 222, 38, 27, 123, 230, 203, 122, 143, 188, 24, 217, 255, 182, 54, 197, 235, 178, 162, 118, 57, 203, 199, 110, 91, 99, 187, 172, 98, 127, 249, 235, 170, 126, 239, 146, 101, 121, 251, 222, 182, 137, 111, 128, 1, 128, 45, 245, 131, 92, 117, 208, 46, 88, 63, 188, 93, 206, 126, 146, 225, 109, 183, 181, 73, 114, 151, 39, 5, 203, 139, 218, 215, 85, 29, 128, 155, 27, 111, 159, 174, 193, 230, 133, 18, 119, 150, 87, 89, 184, 44, 12, 231, 69, 219, 55, 57, 233, 245, 224, 4, 153, 119, 82, 47, 60, 209, 23, 127, 0, 36, 73, 210, 240, 3, 34, 25, 250, 31, 0, 48, 159, 134, 63, 211, 103, 16, 206, 115, 183, 172, 14, 240, 221, 234, 193, 117, 93, 47, 250, 64, 87, 140, 160, 211, 189, 158, 150, 94, 87, 142, 206, 215, 220, 203, 120, 155, 77, 250, 239, 36, 137, 178, 190, 37, 145, 212, 251, 253, 147, 164, 160, 175, 21, 251, 31, 248, 240, 107, 54, 170, 94, 85, 82, 5, 0, 204, 86, 55, 1, 183, 222, 23, 250, 37, 109, 26, 13, 46, 244, 85, 155, 107, 27, 165, 230, 203, 66, 64, 167, 55, 186, 9, 208, 68, 68, 73, 208, 174, 209, 166, 52, 164, 71, 84, 125, 184, 108, 125, 0, 183, 158, 64, 165, 147, 15, 33, 175, 41, 0, 22, 89, 191, 3, 91, 243, 42, 187, 194, 29, 213, 90, 54, 50, 122, 222, 228, 24, 75, 108, 179, 100, 190, 180, 197, 180, 186, 66, 8, 232, 204, 147, 137, 142, 66, 79, 98, 223, 19, 62, 153, 213, 9, 225, 131, 205, 243, 70, 209, 27, 135, 244, 205, 61, 109, 170, 23, 212, 183, 180, 15, 236, 227, 240, 65, 12, 0, 211, 212, 252, 222, 232, 138, 246, 109, 70, 201, 251, 60, 194, 190, 109, 18, 184, 130, 209, 241, 214, 19, 197, 13, 111, 107, 20, 126, 30, 8, 232, 44, 128, 38, 19, 158, 45, 178, 161, 50, 244, 186, 1, 126, 172, 144, 190, 117, 188, 136, 186, 95, 68, 20, 125, 96, 207, 38, 184, 3, 0, 109, 180, 159, 248, 172, 69, 48, 31, 107, 244, 188, 193, 254, 103, 168, 238, 4, 112, 147, 152, 124, 142, 126, 16, 208, 89, 78, 115, 26, 10, 107, 223, 75, 222, 116, 251, 178, 144, 30, 81, 51, 168, 71, 140, 83, 53, 208, 228, 195, 69, 152, 7, 128, 110, 77, 55, 228, 213, 60, 86, 23, 225, 124, 164, 93, 201, 164, 183, 11, 49, 170, 236, 26, 105, 81, 8, 232, 244, 194, 164, 239, 63, 111, 180, 255, 22, 33, 112, 234, 1, 114, 36, 88, 87, 143, 162, 55, 14, 233, 91, 235, 34, 106, 252, 221, 228, 149, 82, 117, 199, 55, 197, 0, 48, 79, 58, 28, 213, 46, 88, 55, 86, 56, 31, 227, 56, 48, 45, 2, 58, 221, 90, 202, 17, 206, 126, 221, 107, 94, 103, 251, 210, 144, 30, 209, 65, 80, 63, 115, 164, 81, 203, 248, 26, 1, 128, 69, 54, 225, 251, 196, 91, 133, 243, 54, 10, 158, 153, 94, 244, 156, 116, 232, 128, 128, 206, 124, 232, 117, 240, 63, 51, 106, 157, 36, 73, 163, 81, 244, 109, 237, 183, 5, 233, 226, 199, 154, 141, 132, 235, 170, 81, 244, 220, 54, 21, 229, 242, 117, 131, 122, 89, 155, 66, 77, 63, 200, 250, 252, 111, 15, 0, 139, 100, 74, 97, 179, 110, 136, 46, 105, 87, 63, 156, 151, 143, 158, 47, 70, 121, 123, 123, 89, 150, 85, 252, 77, 152, 96, 110, 90, 4, 116, 40, 209, 174, 100, 125, 32, 40, 215, 12, 223, 197, 187, 106, 58, 138, 94, 63, 164, 71, 148, 220, 2, 80, 103, 196, 60, 239, 195, 176, 211, 47, 84, 124, 24, 0, 192, 220, 106, 58, 162, 93, 209, 190, 48, 80, 215, 9, 231, 85, 251, 82, 222, 78, 15, 8, 232, 204, 185, 69, 30, 93, 109, 51, 138, 94, 176, 125, 65, 208, 175, 29, 212, 35, 234, 207, 12, 95, 164, 215, 213, 16, 0, 64, 99, 93, 4, 219, 113, 131, 121, 225, 182, 109, 203, 223, 243, 203, 219, 231, 159, 145, 240, 190, 19, 208, 161, 68, 211, 146, 245, 14, 14, 88, 94, 86, 62, 176, 174, 85, 72, 143, 24, 47, 168, 15, 110, 95, 176, 143, 74, 109, 63, 228, 4, 124, 0, 24, 95, 95, 194, 102, 205, 126, 52, 15, 230, 155, 91, 85, 181, 29, 119, 244, 124, 174, 238, 63, 111, 243, 28, 117, 102, 70, 64, 135, 25, 43, 255, 18, 160, 97, 57, 124, 221, 144, 94, 216, 118, 107, 139, 26, 65, 125, 107, 31, 195, 38, 29, 160, 125, 208, 0, 192, 124, 105, 248, 217, 93, 121, 95, 120, 233, 254, 186, 8, 231, 99, 92, 107, 20, 4, 247, 209, 64, 159, 229, 180, 135, 51, 4, 116, 22, 207, 92, 140, 176, 150, 4, 239, 54, 163, 232, 133, 219, 111, 125, 8, 212, 31, 77, 223, 218, 255, 160, 90, 143, 171, 171, 243, 129, 51, 23, 255, 70, 0, 64, 169, 14, 67, 102, 173, 201, 218, 154, 6, 243, 156, 109, 26, 79, 10, 87, 56, 123, 123, 151, 132, 117, 206, 16, 208, 161, 99, 219, 71, 196, 139, 38, 138, 43, 219, 102, 100, 109, 68, 73, 41, 123, 97, 72, 143, 104, 30, 212, 115, 183, 25, 220, 122, 140, 192, 158, 187, 35, 31, 68, 0, 176, 204, 26, 5, 229, 14, 130, 121, 225, 49, 203, 70, 207, 199, 57, 110, 75, 147, 251, 18, 128, 121, 33, 160, 195, 176, 177, 158, 59, 62, 198, 204, 236, 141, 70, 209, 199, 8, 233, 185, 251, 25, 220, 95, 228, 31, 191, 193, 61, 230, 101, 31, 174, 99, 135, 119, 0, 96, 33, 180, 122, 132, 89, 101, 80, 109, 118, 111, 122, 227, 112, 62, 210, 180, 238, 241, 4, 108, 218, 17, 208, 89, 60, 99, 5, 236, 41, 29, 103, 236, 81, 244, 234, 125, 21, 222, 55, 94, 90, 198, 94, 18, 212, 7, 183, 221, 210, 228, 25, 239, 99, 126, 64, 9, 246, 0, 48, 91, 51, 121, 54, 120, 237, 145, 227, 230, 147, 198, 141, 21, 206, 59, 24, 61, 159, 249, 132, 114, 70, 227, 231, 146, 128, 78, 119, 150, 226, 190, 226, 142, 71, 202, 219, 140, 162, 231, 182, 169, 24, 77, 143, 168, 8, 234, 81, 210, 215, 40, 62, 209, 119, 248, 111, 63, 147, 139, 2, 0, 96, 58, 198, 10, 141, 227, 77, 26, 87, 255, 153, 233, 229, 225, 188, 243, 209, 243, 186, 127, 7, 2, 246, 82, 18, 208, 153, 185, 69, 28, 49, 45, 29, 13, 111, 50, 138, 158, 27, 210, 35, 70, 202, 221, 35, 234, 141, 166, 23, 180, 31, 106, 48, 244, 115, 71, 19, 195, 149, 30, 19, 0, 152, 75, 19, 9, 145, 237, 38, 140, 171, 31, 204, 115, 142, 85, 25, 206, 199, 25, 61, 47, 109, 89, 179, 29, 203, 66, 64, 135, 10, 245, 195, 246, 152, 35, 229, 67, 235, 170, 67, 122, 193, 254, 10, 70, 211, 35, 42, 130, 122, 68, 69, 112, 206, 251, 224, 48, 57, 28, 0, 208, 214, 248, 51, 170, 231, 239, 173, 73, 48, 207, 57, 126, 211, 112, 222, 113, 8, 47, 15, 245, 13, 70, 245, 59, 232, 11, 179, 35, 160, 51, 115, 133, 37, 217, 19, 61, 104, 141, 242, 241, 226, 141, 107, 181, 109, 54, 138, 222, 97, 72, 143, 40, 12, 234, 17, 53, 194, 122, 206, 246, 57, 27, 84, 172, 143, 209, 190, 1, 0, 75, 164, 163, 32, 88, 35, 136, 150, 222, 30, 87, 103, 212, 60, 167, 93, 101, 0, 46, 9, 239, 245, 75, 226, 187, 52, 206, 109, 152, 244, 145, 128, 206, 156, 171, 25, 150, 155, 126, 9, 48, 246, 68, 115, 13, 70, 209, 199, 9, 233, 17, 213, 37, 239, 133, 109, 183, 182, 168, 8, 235, 131, 219, 15, 26, 107, 102, 123, 0, 128, 154, 26, 132, 215, 202, 57, 107, 234, 142, 154, 231, 180, 205, 15, 216, 201, 96, 131, 234, 125, 182, 93, 167, 234, 112, 105, 9, 232, 80, 67, 103, 247, 148, 183, 13, 233, 133, 199, 107, 30, 212, 55, 183, 170, 17, 214, 135, 247, 149, 199, 189, 229, 0, 64, 149, 22, 161, 179, 214, 36, 178, 77, 103, 94, 207, 123, 28, 91, 221, 17, 247, 194, 46, 84, 132, 238, 146, 107, 70, 136, 16, 208, 97, 64, 87, 101, 238, 85, 33, 187, 234, 56, 53, 67, 122, 68, 243, 160, 190, 165, 98, 100, 253, 116, 179, 186, 127, 31, 147, 254, 80, 241, 5, 0, 176, 136, 92, 144, 67, 174, 70, 79, 116, 25, 247, 121, 233, 181, 194, 121, 157, 80, 95, 86, 218, 62, 238, 200, 122, 121, 219, 90, 97, 190, 225, 249, 37, 153, 214, 99, 138, 169, 36, 160, 179, 152, 234, 156, 100, 170, 218, 52, 57, 81, 181, 185, 167, 189, 176, 116, 125, 123, 72, 223, 108, 210, 50, 168, 15, 111, 151, 187, 237, 224, 94, 138, 79, 238, 83, 157, 55, 192, 69, 44, 0, 44, 148, 177, 31, 171, 90, 235, 154, 160, 89, 233, 120, 237, 81, 243, 49, 103, 116, 47, 58, 110, 121, 219, 38, 215, 89, 174, 147, 22, 137, 128, 206, 124, 232, 224, 91, 189, 182, 147, 209, 53, 31, 9, 111, 184, 109, 141, 144, 63, 126, 80, 143, 226, 190, 142, 121, 191, 121, 87, 207, 43, 95, 196, 199, 236, 1, 192, 188, 235, 234, 115, 190, 93, 39, 198, 31, 101, 174, 187, 175, 174, 194, 121, 155, 209, 243, 233, 149, 183, 247, 224, 223, 148, 74, 2, 58, 108, 83, 117, 143, 120, 217, 166, 77, 239, 39, 175, 27, 210, 99, 164, 93, 243, 160, 62, 184, 175, 45, 21, 213, 3, 69, 58, 46, 127, 234, 197, 5, 0, 0, 48, 27, 147, 124, 92, 88, 217, 179, 210, 199, 14, 230, 163, 237, 218, 60, 142, 109, 100, 219, 198, 95, 4, 176, 104, 4, 116, 22, 64, 211, 50, 160, 193, 77, 155, 141, 204, 119, 63, 233, 91, 157, 144, 94, 208, 46, 106, 4, 245, 205, 149, 185, 191, 75, 254, 7, 91, 141, 191, 139, 54, 31, 12, 238, 109, 2, 128, 197, 48, 213, 160, 216, 77, 41, 121, 147, 231, 140, 23, 239, 171, 109, 56, 159, 194, 223, 91, 227, 18, 121, 250, 68, 64, 167, 59, 125, 155, 92, 34, 167, 63, 245, 202, 220, 203, 79, 106, 147, 9, 233, 49, 186, 143, 136, 122, 143, 84, 139, 146, 160, 62, 184, 175, 45, 165, 255, 70, 69, 31, 26, 29, 253, 187, 250, 214, 23, 0, 200, 53, 185, 123, 210, 39, 17, 204, 243, 247, 91, 39, 156, 143, 206, 49, 84, 222, 190, 74, 251, 107, 171, 164, 86, 160, 119, 13, 55, 45, 2, 58, 116, 57, 89, 92, 225, 54, 85, 33, 125, 180, 77, 241, 177, 139, 239, 43, 31, 60, 209, 151, 62, 22, 110, 88, 229, 239, 215, 230, 164, 220, 163, 47, 109, 0, 128, 9, 153, 214, 200, 112, 221, 166, 13, 67, 121, 233, 49, 186, 10, 231, 237, 180, 155, 105, 221, 168, 250, 188, 16, 208, 153, 31, 165, 39, 165, 6, 19, 182, 141, 51, 89, 220, 208, 177, 199, 155, 48, 46, 255, 91, 211, 241, 70, 211, 75, 218, 15, 237, 127, 75, 97, 96, 31, 60, 70, 158, 214, 85, 17, 190, 113, 5, 0, 106, 26, 179, 218, 174, 222, 189, 217, 5, 109, 10, 183, 173, 19, 204, 115, 218, 141, 51, 170, 63, 246, 232, 121, 197, 163, 117, 153, 59, 2, 58, 189, 208, 118, 134, 245, 226, 29, 215, 252, 166, 113, 140, 199, 164, 213, 42, 117, 143, 168, 53, 51, 123, 254, 104, 122, 228, 239, 111, 100, 159, 131, 237, 135, 182, 25, 58, 206, 176, 210, 208, 158, 119, 220, 186, 250, 116, 171, 3, 0, 48, 93, 19, 14, 137, 205, 38, 74, 107, 58, 90, 94, 188, 205, 248, 225, 188, 226, 190, 245, 214, 101, 250, 44, 18, 1, 29, 10, 85, 221, 91, 94, 115, 36, 189, 205, 227, 211, 138, 190, 40, 232, 104, 182, 246, 178, 147, 125, 173, 240, 94, 188, 227, 241, 183, 5, 0, 150, 222, 248, 129, 180, 198, 118, 147, 8, 230, 133, 251, 173, 154, 84, 174, 168, 31, 99, 220, 126, 216, 240, 247, 170, 223, 31, 166, 73, 64, 103, 190, 76, 178, 204, 189, 206, 104, 123, 173, 17, 249, 186, 33, 61, 70, 218, 149, 143, 166, 143, 182, 159, 228, 108, 237, 227, 156, 176, 91, 133, 122, 0, 96, 161, 76, 54, 252, 53, 216, 119, 101, 63, 154, 4, 243, 130, 246, 117, 195, 121, 217, 147, 119, 10, 246, 61, 251, 16, 237, 254, 245, 105, 18, 208, 233, 141, 153, 151, 185, 231, 111, 28, 85, 97, 187, 253, 132, 111, 77, 38, 122, 43, 190, 231, 188, 217, 228, 111, 101, 39, 250, 241, 255, 13, 102, 255, 1, 2, 0, 44, 142, 49, 175, 43, 218, 220, 143, 30, 13, 131, 121, 225, 241, 106, 140, 156, 143, 93, 218, 222, 180, 196, 95, 184, 158, 39, 2, 58, 203, 161, 238, 35, 215, 234, 62, 131, 188, 77, 72, 143, 232, 224, 241, 105, 53, 203, 216, 167, 50, 99, 187, 147, 62, 0, 80, 101, 66, 95, 226, 119, 117, 63, 122, 76, 38, 152, 23, 238, 183, 117, 240, 206, 217, 95, 195, 1, 169, 252, 235, 87, 102, 77, 64, 103, 254, 116, 84, 230, 190, 217, 186, 219, 144, 30, 81, 99, 86, 246, 210, 99, 228, 180, 45, 220, 119, 222, 182, 249, 219, 143, 28, 59, 79, 171, 42, 3, 0, 128, 9, 153, 224, 253, 232, 211, 127, 28, 91, 203, 109, 27, 221, 123, 222, 5, 215, 121, 211, 38, 160, 211, 173, 150, 39, 136, 164, 238, 73, 160, 195, 115, 133, 211, 14, 0, 0, 83, 81, 115, 64, 164, 240, 182, 207, 145, 237, 179, 130, 117, 121, 203, 203, 150, 101, 67, 127, 30, 94, 198, 180, 164, 179, 238, 0, 0, 0, 0, 32, 160, 3, 0, 0, 64, 47, 8, 232, 0, 0, 0, 208, 3, 2, 58, 0, 0, 0, 244, 128, 128, 14, 0, 0, 0, 61, 32, 160, 3, 0, 0, 64, 15, 8, 232, 0, 0, 0, 208, 3, 2, 58, 0, 0, 0, 244, 128, 128, 14, 0, 0, 0, 61, 32, 160, 3, 0, 0, 64, 15, 8, 232, 0, 0, 0, 208, 3, 2, 58, 0, 0, 0, 244, 128, 128, 14, 0, 0, 0, 61, 32, 160, 3, 0, 0, 64, 15, 8, 232, 0, 0, 0, 208, 3, 2, 58, 0, 0, 0, 244, 128, 128, 14, 0, 0, 0, 61, 32, 160, 3, 0, 0, 64, 15, 8, 232, 0, 0, 0, 208, 3, 2, 58, 0, 0, 0, 244, 128, 128, 14, 0, 0, 0, 61, 32, 160, 3, 0, 0, 64, 15, 8, 232, 0, 0, 0, 208, 3, 2, 58, 0, 0, 0, 244, 128, 128, 14, 0, 0, 0, 61, 32, 160, 3, 0, 0, 64, 15, 8, 232, 0, 0, 0, 208, 3, 2, 58, 0, 0, 0, 244, 128, 128, 14, 0, 0, 0, 61, 32, 160, 3, 0, 0, 64, 15, 8, 232, 0, 0, 0, 208, 3, 2, 58, 0, 0, 0, 244, 128, 128, 14, 0, 0, 0, 61, 32, 160, 3, 0, 0, 64, 15, 8, 232, 0, 0, 0, 208, 3, 2, 58, 0, 0, 0, 244, 128, 128, 14, 0, 0, 0, 61, 32, 160, 3, 0, 0, 64, 15, 8, 232, 0, 0, 0, 208, 3, 2, 58, 0, 0, 0, 244, 128, 128, 14, 0, 0, 0, 61, 32, 160, 3, 0, 0, 64, 15, 8, 232, 0, 0, 0, 208, 3, 2, 58, 0, 0, 0, 244, 128, 128, 14, 0, 0, 0, 61, 32, 160, 3, 0, 0, 64, 15, 8, 232, 0, 0, 0, 208, 3, 2, 58, 0, 0, 0, 244, 128, 128, 14, 0, 0, 0, 61, 32, 160, 3, 0, 0, 64, 15, 8, 232, 0, 0, 0, 208, 3, 2, 58, 0, 0, 0, 244, 128, 128, 14, 0, 0, 0, 61, 32, 160, 3, 0, 0, 64, 15, 8, 232, 0, 0, 0, 208, 3, 2, 58, 0, 0, 0, 244, 128, 128, 14, 0, 0, 0, 61, 32, 160, 3, 0, 0, 64, 15, 8, 232, 0, 0, 0, 208, 3, 2, 58, 0, 0, 0, 244, 128, 128, 14, 0, 0, 0, 61, 32, 160, 3, 0, 0, 64, 15, 8, 232, 0, 0, 0, 208, 3, 2, 58, 0, 0, 0, 244, 128, 128, 14, 0, 0, 0, 61, 32, 160, 3, 0, 0, 64, 15, 8, 232, 0, 0, 0, 208, 3, 2, 58, 0, 0, 0, 244, 128, 128, 14, 0, 0, 0, 61, 32, 160, 3, 0, 0, 64, 15, 8, 232, 0, 0, 0, 208, 3, 2, 58, 0, 0, 0, 244, 128, 128, 14, 0, 0, 0, 61, 32, 160, 3, 0, 0, 64, 15, 8, 232, 0, 0, 0, 208, 3, 2, 58, 0, 0, 0, 244, 128, 128, 14, 0, 0, 0, 61, 32, 160, 3, 0, 0, 64, 15, 8, 232, 0, 0, 0, 208, 3, 2, 58, 0, 0, 0, 244, 128, 128, 14, 0, 0, 0, 61, 32, 160, 3, 0, 0, 64, 15, 8, 232, 0, 0, 0, 208, 3, 2, 58, 0, 0, 0, 244, 128, 128, 14, 0, 0, 0, 61, 32, 160, 3, 0, 0, 64, 15, 8, 232, 0, 0, 0, 84, 200, 102, 221, 129, 165, 32, 160, 119, 40, 203, 178, 193, 31, 6, 215, 76, 189, 47, 0, 0, 0, 19, 49, 144, 117, 182, 101, 32, 90, 19, 208, 123, 197, 139, 27, 0, 0, 152, 38, 25, 164, 79, 4, 244, 105, 170, 249, 77, 211, 233, 117, 190, 141, 2, 0, 0, 186, 116, 42, 99, 212, 202, 35, 3, 237, 153, 14, 1, 125, 34, 154, 148, 124, 120, 193, 3, 0, 0, 125, 80, 158, 77, 50, 183, 241, 78, 156, 128, 62, 19, 94, 204, 0, 0, 64, 159, 201, 44, 179, 32, 160, 119, 109, 220, 137, 226, 148, 142, 0, 0, 0, 179, 208, 164, 234, 87, 249, 251, 68, 9, 232, 211, 86, 121, 31, 122, 197, 61, 33, 222, 4, 0, 0, 64, 29, 5, 217, 225, 76, 214, 24, 93, 239, 254, 243, 217, 18, 208, 123, 161, 228, 133, 95, 242, 230, 1, 0, 0, 168, 86, 103, 18, 106, 121, 163, 15, 4, 244, 57, 150, 121, 19, 1, 0, 0, 3, 100, 132, 249, 38, 160, 207, 163, 188, 111, 190, 202, 238, 119, 87, 154, 2, 0, 0, 243, 109, 228, 154, 190, 162, 20, 93, 6, 152, 75, 2, 250, 60, 80, 230, 14, 0, 0, 140, 165, 78, 121, 59, 125, 33, 160, 207, 57, 37, 44, 0, 0, 64, 132, 108, 176, 8, 4, 244, 121, 213, 180, 204, 29, 0, 0, 88, 16, 202, 219, 23, 149, 128, 190, 44, 114, 222, 164, 190, 97, 3, 0, 128, 126, 201, 189, 70, 23, 184, 151, 134, 128, 222, 169, 108, 99, 38, 71, 21, 180, 1, 0, 96, 169, 205, 42, 19, 36, 89, 246, 242, 76, 14, 188, 160, 4, 244, 78, 37, 63, 152, 117, 15, 148, 185, 3, 0, 192, 34, 171, 40, 111, 159, 212, 81, 11, 142, 149, 37, 61, 200, 64, 11, 68, 64, 239, 82, 150, 253, 213, 192, 15, 3, 139, 123, 18, 148, 251, 210, 15, 0, 0, 160, 158, 94, 94, 195, 111, 203, 58, 2, 122, 135, 4, 244, 14, 101, 49, 24, 208, 171, 91, 143, 46, 154, 196, 155, 175, 124, 159, 202, 227, 1, 0, 160, 31, 170, 175, 205, 39, 112, 237, 158, 155, 65, 234, 31, 39, 105, 148, 129, 168, 34, 160, 119, 235, 47, 35, 98, 251, 139, 124, 172, 146, 243, 236, 212, 166, 194, 51, 0, 0, 208, 157, 51, 25, 163, 89, 54, 57, 181, 241, 232, 159, 55, 78, 101, 32, 58, 33, 160, 119, 42, 251, 179, 122, 205, 102, 88, 254, 62, 206, 108, 238, 190, 40, 0, 0, 128, 118, 42, 174, 169, 251, 48, 123, 123, 86, 56, 208, 88, 108, 35, 73, 254, 116, 66, 221, 89, 74, 2, 122, 151, 178, 228, 251, 219, 223, 88, 85, 65, 124, 70, 19, 186, 9, 220, 0, 0, 208, 111, 211, 184, 102, 207, 29, 77, 207, 25, 208, 43, 168, 10, 206, 34, 139, 149, 100, 227, 251, 19, 233, 219, 146, 18, 208, 59, 148, 69, 252, 73, 173, 86, 195, 75, 114, 191, 169, 42, 42, 115, 23, 174, 1, 0, 128, 58, 182, 103, 135, 178, 242, 246, 234, 1, 197, 130, 35, 36, 117, 50, 16, 117, 9, 232, 29, 90, 75, 95, 158, 220, 183, 71, 93, 127, 131, 54, 180, 63, 101, 238, 0, 0, 48, 33, 77, 203, 219, 39, 124, 237, 223, 165, 52, 91, 51, 130, 222, 33, 1, 189, 67, 127, 21, 233, 139, 83, 61, 96, 199, 111, 52, 51, 186, 3, 0, 192, 116, 117, 126, 13, 62, 229, 129, 181, 191, 74, 178, 23, 166, 122, 192, 5, 39, 160, 119, 40, 217, 243, 242, 31, 198, 4, 106, 208, 79, 151, 155, 52, 158, 113, 17, 0, 0, 88, 78, 219, 51, 68, 235, 201, 169, 243, 183, 223, 56, 251, 192, 191, 249, 87, 237, 118, 204, 32, 1, 189, 67, 207, 127, 238, 194, 127, 159, 68, 124, 47, 34, 74, 30, 181, 54, 25, 219, 190, 121, 107, 113, 188, 210, 111, 240, 148, 185, 3, 0, 64, 51, 37, 215, 208, 173, 70, 207, 7, 159, 12, 53, 237, 1, 188, 211, 199, 78, 94, 252, 149, 159, 186, 252, 7, 211, 61, 248, 98, 19, 208, 187, 150, 197, 31, 22, 174, 170, 12, 237, 195, 35, 229, 229, 7, 106, 220, 22, 0, 0, 152, 83, 53, 174, 233, 155, 84, 220, 150, 181, 173, 249, 88, 232, 36, 217, 248, 151, 213, 7, 162, 9, 1, 189, 99, 89, 36, 255, 162, 232, 81, 107, 249, 203, 202, 222, 60, 205, 130, 117, 87, 223, 156, 25, 69, 7, 0, 128, 14, 76, 106, 244, 188, 213, 126, 234, 230, 143, 242, 28, 147, 69, 22, 145, 37, 255, 119, 195, 131, 83, 65, 64, 239, 88, 22, 241, 123, 103, 126, 168, 24, 49, 175, 249, 205, 84, 245, 65, 203, 247, 61, 214, 46, 133, 116, 0, 0, 24, 223, 36, 195, 121, 199, 215, 255, 149, 149, 190, 5, 235, 55, 34, 254, 183, 177, 15, 74, 46, 1, 189, 99, 73, 188, 244, 187, 101, 235, 171, 159, 47, 216, 164, 116, 61, 111, 79, 69, 219, 53, 223, 159, 89, 221, 1, 0, 160, 91, 227, 93, 99, 231, 111, 51, 246, 245, 122, 110, 121, 123, 221, 103, 163, 111, 107, 32, 160, 119, 76, 64, 239, 88, 154, 165, 29, 191, 72, 135, 102, 93, 108, 18, 220, 59, 24, 233, 46, 124, 211, 27, 69, 7, 0, 128, 124, 5, 215, 202, 157, 12, 128, 141, 145, 7, 178, 38, 247, 166, 55, 144, 102, 107, 2, 122, 199, 4, 244, 142, 125, 243, 217, 35, 255, 111, 146, 196, 159, 109, 95, 58, 195, 48, 155, 149, 124, 43, 54, 153, 71, 45, 0, 0, 192, 242, 234, 252, 26, 123, 186, 79, 135, 42, 54, 114, 236, 239, 63, 119, 242, 92, 207, 64, 239, 152, 128, 222, 181, 36, 201, 178, 141, 248, 159, 171, 191, 29, 107, 82, 66, 82, 52, 138, 46, 32, 3, 0, 64, 111, 244, 98, 0, 171, 232, 249, 231, 5, 163, 250, 149, 183, 224, 230, 173, 205, 34, 34, 126, 107, 172, 238, 81, 74, 64, 159, 128, 36, 137, 111, 157, 254, 161, 201, 132, 11, 103, 22, 150, 172, 43, 80, 187, 173, 81, 116, 0, 0, 232, 165, 178, 209, 243, 70, 219, 213, 105, 91, 51, 155, 20, 228, 153, 36, 178, 231, 234, 31, 148, 186, 4, 244, 9, 216, 200, 94, 206, 121, 177, 86, 205, 216, 222, 48, 232, 150, 188, 177, 26, 143, 222, 11, 233, 0, 0, 208, 206, 36, 75, 219, 243, 154, 151, 61, 6, 173, 113, 95, 170, 170, 123, 71, 215, 175, 164, 241, 205, 134, 7, 161, 6, 1, 125, 2, 246, 253, 197, 234, 183, 147, 72, 94, 202, 125, 211, 228, 189, 208, 115, 31, 183, 54, 198, 27, 188, 232, 141, 56, 141, 0, 157, 101, 130, 58, 0, 0, 203, 103, 90, 215, 193, 157, 94, 235, 15, 151, 191, 71, 254, 0, 96, 206, 190, 179, 200, 34, 137, 228, 135, 7, 94, 138, 127, 50, 198, 129, 169, 32, 160, 79, 192, 63, 248, 27, 135, 255, 109, 68, 246, 219, 157, 236, 108, 232, 141, 82, 119, 244, 125, 234, 163, 232, 93, 239, 7, 0, 0, 250, 110, 98, 215, 208, 45, 70, 207, 183, 237, 118, 40, 116, 119, 212, 223, 44, 203, 158, 255, 198, 201, 163, 255, 174, 147, 157, 177, 141, 128, 62, 57, 191, 122, 250, 79, 121, 223, 60, 117, 81, 230, 158, 167, 205, 55, 107, 93, 61, 14, 66, 72, 7, 0, 96, 209, 53, 188, 230, 109, 245, 248, 226, 137, 86, 202, 214, 204, 42, 131, 247, 159, 39, 217, 223, 239, 224, 192, 228, 16, 208, 39, 36, 221, 216, 12, 232, 219, 223, 136, 109, 191, 233, 42, 154, 205, 61, 95, 39, 207, 89, 28, 151, 146, 119, 0, 0, 22, 209, 140, 175, 115, 43, 175, 241, 139, 102, 111, 31, 179, 50, 119, 219, 92, 90, 167, 254, 188, 17, 171, 191, 82, 175, 183, 52, 37, 160, 79, 200, 111, 198, 225, 127, 18, 17, 255, 250, 244, 130, 177, 102, 115, 111, 162, 198, 232, 119, 157, 210, 153, 174, 70, 209, 43, 246, 7, 0, 0, 115, 103, 204, 107, 219, 102, 163, 231, 197, 183, 162, 22, 95, 147, 183, 44, 97, 111, 52, 123, 123, 124, 247, 249, 167, 207, 253, 95, 198, 59, 16, 85, 4, 244, 73, 57, 153, 108, 68, 196, 255, 56, 186, 162, 106, 66, 184, 130, 111, 188, 134, 247, 82, 54, 138, 62, 161, 89, 217, 91, 133, 116, 65, 29, 0, 128, 121, 213, 226, 122, 182, 85, 105, 123, 233, 142, 139, 183, 207, 31, 29, 223, 236, 205, 246, 245, 101, 57, 100, 120, 253, 169, 37, 27, 217, 47, 71, 146, 184, 184, 159, 16, 1, 125, 130, 54, 178, 248, 197, 136, 142, 74, 205, 107, 61, 175, 176, 98, 148, 62, 119, 121, 179, 19, 70, 171, 223, 69, 80, 7, 0, 96, 158, 180, 188, 126, 109, 30, 206, 107, 78, 228, 92, 241, 100, 168, 122, 235, 154, 57, 93, 222, 190, 146, 253, 221, 214, 59, 163, 144, 128, 62, 65, 63, 60, 124, 248, 215, 34, 226, 251, 167, 23, 212, 46, 115, 111, 54, 139, 99, 85, 219, 145, 19, 195, 44, 67, 250, 214, 126, 5, 117, 0, 0, 250, 170, 131, 235, 213, 174, 195, 121, 221, 153, 219, 203, 122, 148, 251, 115, 179, 242, 246, 63, 89, 127, 249, 232, 111, 52, 56, 40, 13, 9, 232, 19, 244, 59, 31, 73, 126, 152, 101, 217, 127, 55, 186, 166, 170, 204, 125, 120, 221, 233, 5, 219, 218, 22, 151, 174, 12, 183, 175, 19, 210, 171, 247, 177, 109, 113, 87, 85, 1, 194, 58, 0, 0, 125, 208, 225, 181, 105, 235, 178, 246, 178, 112, 94, 53, 81, 116, 197, 163, 213, 202, 38, 135, 171, 42, 111, 143, 141, 236, 151, 126, 227, 100, 242, 82, 105, 7, 104, 69, 64, 159, 176, 36, 221, 248, 59, 17, 3, 111, 170, 156, 111, 163, 178, 220, 111, 168, 170, 222, 188, 67, 219, 182, 126, 244, 66, 243, 19, 81, 167, 179, 196, 11, 235, 0, 0, 76, 219, 4, 174, 65, 199, 187, 70, 110, 55, 120, 86, 56, 115, 123, 213, 241, 6, 7, 244, 242, 114, 197, 214, 126, 183, 218, 167, 241, 119, 234, 117, 148, 113, 37, 179, 238, 192, 194, 203, 178, 228, 214, 175, 125, 247, 15, 34, 137, 87, 38, 91, 127, 221, 73, 18, 177, 237, 207, 17, 73, 206, 178, 173, 159, 147, 161, 159, 139, 215, 143, 174, 219, 190, 44, 34, 25, 254, 39, 79, 134, 95, 2, 5, 47, 137, 145, 118, 131, 91, 76, 248, 101, 84, 114, 108, 0, 0, 168, 109, 194, 131, 65, 165, 225, 188, 139, 210, 246, 138, 123, 207, 235, 63, 90, 109, 116, 253, 104, 64, 207, 134, 2, 122, 246, 7, 223, 122, 250, 200, 171, 77, 16, 55, 89, 70, 208, 39, 45, 73, 178, 44, 178, 95, 24, 93, 145, 55, 242, 221, 164, 12, 165, 106, 125, 254, 27, 185, 250, 27, 189, 25, 143, 164, 231, 30, 32, 27, 253, 31, 0, 0, 148, 153, 242, 53, 228, 36, 70, 206, 43, 195, 249, 224, 146, 177, 75, 223, 203, 171, 121, 179, 211, 225, 62, 249, 121, 225, 124, 242, 4, 244, 41, 120, 41, 91, 253, 47, 146, 72, 126, 152, 91, 230, 30, 91, 139, 234, 76, 250, 80, 242, 102, 58, 179, 163, 202, 254, 84, 223, 195, 210, 124, 191, 217, 169, 255, 166, 38, 239, 132, 43, 192, 3, 0, 44, 143, 158, 92, 15, 214, 186, 14, 30, 227, 154, 187, 214, 181, 117, 173, 153, 219, 107, 228, 131, 138, 137, 226, 146, 72, 94, 122, 41, 91, 249, 175, 170, 59, 68, 91, 106, 135, 167, 228, 182, 175, 190, 248, 139, 89, 18, 111, 143, 56, 85, 18, 158, 83, 182, 94, 86, 202, 62, 178, 110, 104, 253, 230, 143, 195, 219, 21, 181, 63, 189, 215, 194, 117, 35, 219, 150, 182, 27, 222, 202, 203, 10, 0, 128, 197, 215, 58, 68, 23, 180, 43, 159, 224, 57, 231, 30, 241, 210, 137, 225, 6, 219, 148, 148, 190, 231, 236, 227, 116, 63, 146, 248, 187, 223, 122, 250, 200, 99, 57, 191, 8, 29, 51, 130, 62, 37, 89, 18, 255, 225, 246, 5, 205, 202, 82, 234, 76, 248, 144, 63, 97, 92, 213, 104, 121, 217, 186, 129, 55, 241, 96, 187, 190, 141, 166, 3, 0, 192, 20, 213, 30, 53, 31, 185, 110, 206, 185, 190, 222, 106, 91, 182, 159, 109, 219, 111, 95, 94, 94, 218, 94, 221, 166, 106, 244, 60, 34, 34, 205, 146, 191, 89, 114, 16, 58, 36, 160, 79, 201, 183, 158, 57, 242, 219, 73, 150, 61, 55, 186, 166, 126, 89, 74, 173, 251, 70, 78, 239, 162, 224, 77, 88, 251, 155, 185, 10, 53, 75, 233, 5, 117, 0, 0, 22, 69, 237, 235, 219, 22, 215, 213, 181, 30, 169, 214, 160, 180, 189, 81, 134, 200, 207, 21, 255, 248, 155, 207, 28, 254, 173, 252, 142, 208, 53, 1, 125, 138, 54, 34, 126, 54, 98, 224, 77, 87, 250, 200, 181, 166, 193, 182, 236, 219, 177, 146, 111, 204, 106, 133, 244, 38, 39, 134, 252, 99, 8, 234, 0, 0, 204, 171, 70, 215, 179, 117, 103, 107, 207, 105, 91, 126, 140, 178, 10, 220, 150, 217, 161, 228, 209, 106, 27, 145, 253, 108, 195, 157, 211, 130, 128, 62, 69, 207, 103, 71, 254, 251, 44, 203, 254, 247, 209, 53, 121, 165, 233, 49, 180, 172, 206, 253, 37, 177, 189, 77, 205, 82, 247, 105, 132, 244, 173, 227, 8, 235, 0, 0, 204, 131, 177, 174, 93, 187, 12, 231, 227, 148, 182, 143, 145, 29, 202, 70, 212, 179, 108, 227, 119, 191, 157, 29, 253, 31, 70, 55, 98, 82, 4, 244, 105, 58, 153, 108, 68, 108, 156, 140, 40, 24, 69, 143, 173, 69, 229, 101, 40, 227, 151, 186, 79, 48, 164, 55, 156, 41, 83, 88, 7, 0, 160, 111, 198, 190, 70, 45, 189, 30, 238, 62, 156, 231, 238, 191, 97, 102, 40, 11, 248, 167, 251, 147, 38, 207, 110, 102, 24, 166, 197, 116, 219, 211, 150, 101, 201, 173, 95, 127, 225, 159, 69, 164, 215, 36, 57, 179, 181, 111, 253, 92, 54, 163, 251, 230, 143, 69, 235, 243, 218, 228, 175, 31, 93, 94, 48, 3, 251, 200, 204, 237, 21, 47, 155, 26, 51, 189, 23, 110, 234, 37, 9, 0, 192, 20, 181, 26, 48, 170, 28, 164, 170, 30, 4, 27, 39, 156, 231, 150, 182, 143, 19, 208, 11, 218, 100, 145, 69, 150, 101, 255, 244, 249, 103, 142, 220, 224, 217, 231, 211, 101, 4, 125, 218, 146, 36, 139, 44, 158, 141, 152, 212, 40, 122, 222, 62, 134, 215, 55, 24, 73, 207, 149, 109, 223, 199, 232, 129, 27, 143, 168, 15, 30, 127, 248, 63, 0, 0, 232, 66, 103, 215, 154, 149, 215, 187, 21, 215, 203, 3, 253, 25, 217, 239, 182, 125, 140, 46, 111, 87, 218, 94, 127, 244, 60, 137, 141, 103, 132, 243, 233, 51, 92, 57, 35, 183, 126, 245, 133, 223, 136, 36, 185, 179, 108, 20, 125, 243, 255, 198, 29, 73, 63, 243, 79, 219, 201, 72, 122, 225, 168, 120, 141, 151, 80, 139, 17, 245, 210, 221, 122, 249, 2, 0, 144, 99, 98, 131, 60, 181, 6, 161, 234, 205, 221, 212, 62, 156, 183, 44, 109, 47, 25, 61, 79, 178, 248, 245, 231, 158, 61, 242, 166, 252, 95, 132, 73, 50, 130, 62, 43, 171, 171, 159, 73, 34, 94, 30, 29, 69, 111, 121, 50, 201, 217, 79, 39, 35, 233, 133, 223, 18, 214, 248, 118, 176, 197, 136, 122, 233, 110, 107, 254, 7, 0, 192, 98, 152, 217, 245, 95, 173, 235, 217, 130, 235, 226, 156, 109, 187, 15, 231, 227, 202, 9, 231, 17, 47, 167, 171, 233, 103, 90, 238, 152, 49, 25, 130, 156, 161, 91, 190, 250, 194, 207, 39, 73, 242, 129, 136, 129, 209, 224, 36, 137, 238, 70, 209, 7, 150, 13, 182, 43, 187, 167, 60, 103, 180, 187, 211, 209, 244, 202, 125, 0, 0, 64, 15, 52, 10, 191, 99, 142, 154, 143, 180, 105, 16, 206, 183, 181, 105, 63, 122, 126, 186, 180, 125, 35, 251, 185, 231, 78, 30, 253, 88, 238, 239, 195, 196, 25, 65, 159, 161, 151, 178, 213, 167, 34, 226, 223, 140, 174, 25, 250, 38, 171, 213, 253, 232, 57, 111, 236, 145, 111, 241, 138, 71, 210, 55, 215, 118, 56, 154, 62, 188, 143, 9, 140, 172, 3, 0, 192, 88, 26, 95, 163, 182, 24, 53, 223, 106, 183, 109, 95, 163, 203, 167, 17, 206, 7, 252, 105, 186, 35, 121, 102, 180, 163, 76, 139, 128, 62, 67, 191, 125, 242, 188, 239, 38, 89, 246, 229, 136, 129, 55, 108, 157, 103, 21, 230, 104, 28, 210, 75, 218, 140, 119, 66, 217, 222, 122, 236, 176, 46, 176, 3, 0, 48, 45, 99, 93, 135, 86, 92, 235, 142, 53, 224, 213, 85, 56, 175, 80, 114, 223, 249, 230, 31, 54, 190, 240, 155, 95, 57, 242, 199, 245, 118, 198, 36, 168, 51, 158, 181, 44, 75, 110, 253, 250, 119, 127, 45, 34, 222, 20, 113, 170, 156, 124, 204, 9, 227, 202, 219, 20, 181, 43, 110, 51, 186, 174, 100, 98, 182, 202, 146, 245, 150, 47, 53, 37, 241, 0, 0, 180, 209, 213, 253, 218, 13, 247, 95, 126, 191, 249, 208, 126, 199, 8, 231, 219, 219, 142, 95, 218, 30, 89, 246, 143, 191, 245, 204, 145, 187, 205, 220, 62, 91, 70, 208, 103, 45, 73, 178, 116, 99, 245, 99, 73, 196, 95, 158, 94, 86, 244, 205, 86, 197, 27, 111, 187, 14, 70, 210, 71, 214, 69, 241, 196, 27, 181, 31, 53, 49, 230, 251, 125, 248, 219, 77, 35, 238, 0, 0, 12, 235, 252, 154, 177, 198, 53, 108, 193, 254, 115, 175, 155, 123, 22, 206, 183, 36, 17, 63, 200, 178, 248, 168, 112, 62, 123, 2, 122, 15, 124, 243, 228, 185, 127, 144, 101, 241, 84, 68, 117, 169, 123, 179, 103, 26, 182, 9, 233, 99, 148, 188, 23, 180, 205, 105, 52, 122, 140, 54, 202, 78, 196, 85, 255, 3, 0, 160, 95, 102, 126, 109, 87, 243, 90, 181, 228, 152, 245, 74, 218, 103, 31, 206, 183, 250, 185, 177, 145, 61, 254, 252, 201, 163, 191, 159, 251, 203, 48, 85, 234, 134, 251, 226, 100, 150, 222, 154, 126, 247, 31, 68, 196, 61, 17, 195, 179, 186, 111, 46, 25, 252, 185, 254, 204, 238, 121, 109, 6, 150, 13, 183, 45, 155, 225, 61, 119, 125, 197, 243, 200, 27, 151, 166, 123, 73, 2, 0, 48, 77, 13, 131, 125, 201, 23, 1, 245, 230, 109, 42, 30, 85, 159, 69, 56, 79, 34, 251, 135, 207, 61, 125, 228, 1, 163, 231, 253, 96, 4, 189, 47, 78, 38, 27, 89, 186, 246, 222, 200, 178, 239, 143, 181, 125, 151, 35, 233, 85, 37, 239, 117, 203, 222, 7, 219, 215, 254, 70, 51, 27, 250, 31, 0, 0, 116, 105, 140, 235, 205, 138, 107, 218, 194, 114, 246, 170, 146, 246, 206, 195, 121, 51, 73, 150, 253, 201, 95, 174, 172, 189, 87, 56, 239, 15, 1, 189, 71, 158, 127, 234, 156, 239, 36, 105, 124, 56, 98, 115, 186, 134, 136, 40, 254, 198, 43, 239, 254, 243, 174, 66, 122, 110, 187, 178, 245, 91, 173, 74, 130, 250, 214, 54, 141, 203, 143, 134, 79, 160, 194, 59, 0, 0, 85, 58, 184, 134, 172, 113, 237, 90, 58, 63, 83, 110, 127, 242, 215, 119, 23, 206, 27, 141, 158, 103, 47, 71, 246, 147, 191, 243, 228, 185, 47, 142, 254, 2, 204, 138, 128, 222, 51, 207, 61, 125, 244, 239, 37, 89, 252, 141, 136, 129, 18, 153, 73, 132, 244, 130, 55, 123, 245, 104, 122, 217, 250, 173, 86, 89, 241, 201, 106, 120, 219, 86, 247, 10, 149, 157, 120, 5, 122, 0, 128, 197, 49, 165, 235, 190, 6, 161, 188, 222, 196, 201, 229, 215, 207, 35, 215, 223, 53, 174, 215, 71, 218, 13, 109, 91, 183, 180, 61, 178, 236, 103, 190, 253, 236, 5, 223, 40, 248, 53, 153, 145, 213, 89, 119, 128, 81, 71, 175, 60, 252, 196, 119, 126, 255, 197, 107, 34, 146, 251, 179, 200, 54, 239, 241, 206, 178, 83, 247, 115, 103, 17, 3, 63, 103, 89, 118, 234, 30, 242, 83, 203, 183, 217, 92, 118, 166, 77, 108, 111, 183, 109, 159, 113, 122, 249, 246, 246, 131, 237, 98, 116, 31, 91, 235, 35, 114, 239, 55, 63, 115, 111, 75, 201, 189, 229, 121, 39, 192, 137, 60, 86, 77, 72, 7, 0, 224, 148, 134, 3, 69, 149, 131, 79, 57, 91, 148, 181, 169, 30, 53, 223, 190, 60, 119, 112, 110, 168, 93, 237, 112, 30, 241, 143, 46, 184, 242, 200, 179, 57, 59, 98, 198, 204, 200, 213, 83, 119, 252, 204, 139, 231, 110, 188, 148, 253, 78, 22, 201, 133, 17, 99, 76, 26, 151, 211, 54, 119, 226, 184, 109, 237, 134, 150, 143, 108, 51, 220, 118, 180, 125, 113, 187, 193, 45, 198, 124, 217, 121, 22, 58, 0, 0, 227, 24, 179, 106, 179, 121, 40, 223, 220, 170, 172, 221, 200, 173, 165, 227, 132, 243, 118, 35, 231, 127, 184, 107, 109, 227, 134, 127, 244, 149, 99, 227, 205, 125, 197, 68, 73, 60, 61, 118, 219, 215, 94, 188, 42, 139, 120, 46, 34, 14, 68, 116, 19, 210, 171, 219, 197, 200, 186, 234, 144, 62, 180, 175, 202, 182, 195, 91, 118, 248, 50, 20, 226, 1, 0, 150, 75, 171, 91, 38, 135, 118, 85, 167, 226, 178, 110, 48, 207, 105, 91, 56, 106, 62, 210, 182, 226, 118, 213, 162, 118, 213, 225, 252, 255, 91, 89, 93, 185, 227, 55, 159, 60, 255, 119, 11, 126, 9, 102, 76, 154, 233, 185, 91, 190, 250, 194, 3, 105, 146, 254, 114, 22, 217, 106, 82, 22, 188, 199, 14, 233, 69, 109, 135, 150, 143, 108, 51, 220, 54, 127, 155, 234, 246, 5, 77, 189, 52, 1, 0, 152, 160, 90, 97, 252, 116, 227, 178, 182, 77, 131, 249, 208, 54, 181, 38, 113, 30, 63, 156, 111, 46, 201, 34, 137, 228, 135, 47, 101, 47, 63, 252, 91, 207, 94, 240, 15, 115, 127, 13, 122, 193, 36, 113, 61, 247, 252, 179, 71, 255, 126, 100, 47, 127, 52, 162, 232, 36, 50, 244, 237, 88, 229, 196, 113, 37, 223, 198, 109, 107, 187, 189, 253, 214, 54, 229, 147, 200, 13, 110, 83, 50, 105, 70, 141, 111, 57, 179, 130, 255, 0, 0, 160, 137, 177, 175, 43, 75, 175, 93, 11, 174, 121, 107, 77, 2, 215, 180, 164, 125, 140, 112, 190, 173, 229, 214, 178, 141, 159, 18, 206, 251, 207, 48, 229, 156, 184, 229, 235, 47, 62, 157, 100, 241, 181, 136, 188, 82, 247, 205, 165, 131, 203, 114, 71, 200, 11, 70, 199, 235, 141, 166, 15, 173, 27, 217, 46, 175, 125, 241, 182, 163, 171, 187, 123, 41, 26, 125, 7, 0, 88, 14, 157, 14, 224, 84, 14, 34, 213, 191, 31, 189, 116, 196, 124, 164, 125, 197, 168, 249, 182, 246, 57, 109, 75, 6, 232, 178, 51, 65, 254, 43, 207, 63, 123, 244, 175, 21, 255, 2, 244, 133, 36, 51, 71, 110, 59, 249, 194, 95, 203, 210, 228, 241, 136, 41, 134, 244, 146, 109, 242, 183, 205, 219, 102, 100, 101, 201, 186, 38, 251, 1, 0, 128, 134, 26, 221, 179, 222, 108, 146, 184, 209, 96, 62, 180, 143, 146, 224, 62, 169, 112, 30, 27, 217, 207, 124, 235, 228, 209, 39, 115, 58, 70, 15, 73, 63, 115, 230, 214, 175, 189, 240, 179, 17, 201, 231, 34, 134, 70, 138, 11, 238, 73, 223, 252, 99, 189, 251, 210, 183, 183, 45, 106, 159, 179, 46, 119, 219, 109, 43, 242, 151, 151, 236, 171, 146, 224, 14, 0, 64, 9, 90, 21, 182, 0, 0, 8, 249, 73, 68, 65, 84, 153, 177, 38, 143, 171, 216, 166, 96, 159, 149, 193, 124, 100, 219, 162, 96, 62, 176, 174, 106, 210, 184, 138, 123, 206, 35, 34, 146, 44, 254, 211, 231, 158, 61, 242, 201, 220, 78, 211, 75, 82, 206, 188, 201, 178, 228, 182, 175, 125, 247, 111, 101, 73, 124, 34, 162, 171, 144, 190, 125, 249, 104, 208, 238, 40, 168, 231, 110, 159, 219, 168, 70, 155, 49, 8, 245, 0, 0, 243, 169, 195, 153, 218, 135, 118, 220, 234, 216, 109, 130, 249, 232, 246, 229, 247, 166, 143, 17, 206, 255, 214, 115, 207, 28, 254, 116, 36, 137, 137, 156, 230, 136, 196, 50, 167, 110, 249, 218, 119, 190, 154, 68, 250, 204, 214, 207, 133, 143, 96, 27, 88, 86, 93, 242, 190, 125, 187, 250, 101, 239, 57, 235, 115, 247, 49, 178, 178, 120, 93, 254, 6, 13, 219, 3, 0, 64, 68, 173, 32, 190, 173, 121, 211, 80, 158, 115, 140, 113, 202, 217, 183, 109, 87, 86, 210, 62, 176, 126, 184, 164, 125, 243, 135, 191, 254, 173, 103, 143, 60, 94, 208, 81, 122, 76, 226, 153, 99, 185, 19, 199, 69, 148, 134, 244, 205, 63, 214, 31, 77, 223, 222, 126, 116, 93, 147, 71, 173, 149, 134, 245, 210, 253, 53, 229, 101, 13, 0, 176, 28, 58, 24, 28, 174, 243, 132, 161, 22, 207, 62, 175, 85, 206, 62, 178, 93, 179, 112, 190, 185, 196, 132, 112, 139, 64, 146, 153, 115, 183, 127, 237, 59, 63, 153, 197, 202, 207, 101, 145, 173, 69, 212, 155, 60, 110, 243, 143, 205, 158, 131, 94, 90, 246, 158, 187, 109, 73, 187, 194, 125, 150, 80, 158, 14, 0, 64, 27, 13, 202, 228, 139, 3, 121, 68, 189, 80, 62, 218, 174, 73, 57, 251, 72, 251, 26, 147, 193, 37, 145, 188, 20, 177, 241, 169, 231, 158, 57, 250, 115, 197, 125, 167, 239, 164, 158, 5, 112, 243, 215, 191, 115, 111, 154, 165, 191, 20, 17, 7, 34, 42, 66, 250, 192, 242, 110, 30, 175, 214, 100, 6, 247, 234, 151, 91, 163, 208, 94, 235, 152, 0, 0, 44, 133, 49, 239, 83, 47, 15, 227, 167, 91, 53, 56, 102, 205, 17, 243, 145, 237, 107, 142, 154, 15, 44, 63, 19, 206, 227, 47, 94, 206, 226, 157, 223, 126, 246, 200, 175, 228, 119, 148, 121, 33, 213, 44, 136, 59, 126, 250, 123, 175, 123, 249, 165, 151, 191, 17, 73, 114, 81, 196, 184, 37, 239, 197, 109, 202, 67, 250, 232, 250, 252, 125, 212, 104, 63, 178, 249, 20, 95, 162, 66, 62, 0, 192, 108, 76, 108, 18, 184, 188, 67, 213, 61, 86, 147, 80, 62, 218, 190, 85, 57, 123, 81, 155, 156, 146, 246, 200, 178, 63, 140, 44, 125, 228, 91, 39, 15, 255, 243, 130, 142, 49, 71, 36, 146, 5, 114, 207, 207, 252, 209, 161, 191, 124, 41, 253, 175, 179, 72, 238, 139, 40, 10, 233, 155, 107, 134, 151, 181, 153, 185, 189, 125, 88, 175, 216, 174, 108, 11, 161, 26, 0, 128, 1, 245, 3, 248, 182, 173, 170, 118, 90, 107, 187, 113, 71, 204, 71, 182, 45, 41, 105, 223, 92, 122, 106, 228, 124, 35, 251, 141, 44, 210, 119, 126, 235, 228, 225, 127, 93, 208, 65, 230, 140, 116, 179, 96, 222, 254, 139, 217, 202, 119, 254, 143, 239, 62, 29, 73, 60, 29, 17, 105, 68, 253, 146, 247, 205, 63, 142, 63, 115, 123, 126, 88, 238, 98, 22, 247, 233, 188, 76, 133, 125, 0, 128, 217, 24, 47, 84, 143, 117, 164, 154, 205, 154, 221, 131, 222, 44, 152, 111, 95, 95, 57, 106, 62, 176, 124, 96, 166, 246, 44, 178, 248, 15, 46, 184, 242, 240, 147, 255, 205, 59, 146, 151, 75, 58, 203, 156, 145, 72, 22, 212, 45, 95, 127, 225, 45, 73, 150, 252, 124, 68, 28, 138, 168, 49, 154, 62, 180, 188, 237, 35, 214, 138, 195, 110, 197, 75, 110, 172, 144, 236, 101, 12, 0, 64, 196, 88, 179, 186, 87, 126, 57, 144, 191, 190, 249, 51, 208, 183, 175, 111, 18, 204, 55, 151, 158, 190, 223, 252, 143, 95, 206, 54, 62, 240, 237, 103, 47, 248, 70, 73, 167, 153, 83, 146, 205, 2, 187, 233, 167, 191, 119, 254, 202, 203, 27, 191, 16, 17, 199, 183, 150, 53, 25, 77, 223, 252, 177, 253, 35, 214, 202, 71, 166, 107, 190, 4, 167, 62, 186, 237, 173, 1, 0, 48, 89, 211, 187, 239, 124, 243, 112, 45, 239, 61, 143, 154, 161, 60, 247, 88, 37, 19, 199, 213, 31, 53, 143, 36, 178, 95, 219, 72, 119, 188, 239, 249, 167, 206, 249, 78, 97, 39, 153, 107, 82, 200, 162, 203, 178, 228, 214, 175, 190, 248, 217, 36, 77, 126, 58, 139, 88, 143, 104, 62, 154, 190, 249, 99, 197, 168, 121, 167, 207, 67, 55, 147, 59, 0, 0, 13, 140, 93, 34, 95, 190, 93, 87, 207, 63, 207, 221, 87, 179, 81, 243, 127, 191, 177, 145, 125, 229, 249, 103, 143, 252, 199, 145, 36, 83, 254, 102, 131, 105, 146, 104, 150, 196, 173, 79, 125, 239, 178, 216, 177, 241, 159, 69, 196, 61, 91, 203, 38, 18, 212, 115, 182, 41, 108, 87, 184, 207, 50, 94, 178, 0, 0, 52, 209, 167, 231, 159, 15, 111, 83, 30, 204, 35, 34, 146, 44, 251, 205, 141, 44, 62, 252, 252, 201, 163, 191, 95, 210, 57, 22, 132, 180, 179, 76, 178, 44, 185, 253, 171, 223, 125, 247, 70, 26, 255, 81, 228, 221, 155, 30, 81, 250, 104, 181, 242, 89, 223, 115, 218, 143, 236, 175, 162, 237, 182, 205, 218, 190, 52, 189, 180, 1, 0, 22, 91, 187, 129, 228, 234, 137, 233, 198, 123, 246, 121, 238, 254, 107, 63, 114, 109, 112, 212, 60, 249, 243, 36, 54, 190, 252, 205, 167, 143, 252, 231, 70, 205, 151, 135, 20, 179, 132, 238, 249, 153, 63, 58, 244, 239, 95, 74, 159, 73, 34, 249, 68, 22, 177, 18, 49, 126, 80, 223, 252, 177, 109, 88, 47, 217, 166, 172, 181, 146, 118, 0, 0, 114, 52, 159, 21, 126, 156, 199, 172, 213, 152, 205, 125, 140, 96, 30, 17, 27, 145, 101, 127, 251, 229, 213, 149, 47, 254, 214, 147, 231, 127, 175, 188, 99, 44, 26, 9, 103, 137, 221, 252, 245, 23, 174, 76, 55, 226, 111, 70, 146, 60, 176, 181, 172, 77, 80, 223, 92, 52, 137, 71, 173, 117, 251, 50, 21, 236, 1, 0, 230, 67, 247, 143, 95, 171, 177, 191, 214, 143, 88, 203, 219, 71, 173, 96, 30, 73, 22, 191, 158, 36, 233, 103, 191, 249, 204, 249, 255, 107, 117, 71, 89, 68, 146, 10, 113, 219, 201, 239, 188, 57, 75, 146, 175, 70, 146, 92, 187, 181, 172, 60, 168, 111, 182, 40, 95, 239, 81, 107, 0, 0, 76, 211, 140, 31, 177, 214, 240, 89, 232, 131, 193, 60, 203, 178, 127, 26, 217, 198, 179, 207, 159, 60, 246, 203, 21, 29, 98, 193, 73, 53, 108, 202, 178, 228, 230, 175, 189, 112, 34, 77, 146, 175, 70, 36, 215, 109, 45, 110, 28, 212, 115, 219, 108, 45, 158, 199, 199, 173, 141, 107, 94, 250, 9, 0, 48, 174, 57, 185, 45, 122, 98, 143, 87, 43, 218, 119, 253, 96, 30, 89, 246, 123, 89, 108, 124, 245, 249, 103, 46, 248, 37, 247, 153, 19, 33, 69, 48, 236, 100, 150, 222, 178, 242, 226, 155, 211, 141, 248, 124, 150, 36, 183, 15, 174, 234, 50, 172, 111, 174, 154, 82, 121, 251, 220, 132, 122, 0, 0, 74, 117, 82, 242, 94, 189, 143, 210, 210, 250, 182, 161, 60, 34, 98, 35, 251, 159, 146, 200, 126, 246, 185, 56, 250, 203, 113, 50, 217, 168, 236, 16, 75, 67, 114, 161, 208, 29, 39, 95, 188, 241, 165, 52, 62, 159, 70, 242, 214, 44, 178, 181, 173, 229, 35, 65, 61, 162, 94, 88, 47, 108, 59, 184, 74, 121, 59, 0, 0, 109, 52, 11, 241, 149, 247, 185, 215, 125, 22, 122, 78, 187, 109, 247, 151, 71, 242, 195, 44, 201, 254, 94, 100, 241, 179, 223, 122, 230, 200, 111, 55, 234, 36, 75, 67, 178, 161, 210, 77, 63, 253, 189, 243, 211, 151, 94, 126, 44, 201, 226, 131, 145, 38, 175, 29, 92, 87, 47, 172, 111, 182, 44, 84, 51, 148, 79, 119, 114, 55, 111, 13, 0, 128, 201, 154, 94, 69, 119, 237, 201, 230, 58, 120, 14, 250, 200, 104, 121, 100, 127, 16, 89, 246, 11, 47, 175, 174, 254, 151, 102, 101, 167, 138, 20, 66, 125, 89, 150, 220, 241, 245, 239, 190, 241, 229, 44, 123, 87, 36, 201, 219, 226, 212, 179, 212, 35, 10, 130, 122, 196, 216, 207, 65, 175, 222, 190, 206, 166, 94, 222, 0, 0, 139, 168, 213, 236, 238, 109, 239, 73, 47, 216, 126, 251, 104, 121, 252, 73, 100, 217, 127, 27, 73, 252, 237, 231, 158, 62, 242, 77, 247, 151, 83, 151, 4, 195, 88, 238, 58, 153, 173, 254, 32, 121, 241, 158, 200, 146, 119, 36, 105, 156, 136, 136, 243, 6, 215, 55, 15, 236, 103, 182, 108, 68, 8, 7, 0, 96, 208, 84, 158, 129, 158, 55, 82, 30, 223, 139, 141, 236, 27, 47, 39, 217, 47, 238, 202, 142, 254, 250, 111, 156, 76, 94, 106, 216, 17, 16, 208, 233, 192, 201, 44, 189, 253, 229, 23, 175, 219, 88, 141, 7, 147, 52, 30, 140, 44, 189, 57, 139, 108, 117, 176, 73, 97, 96, 143, 104, 16, 178, 167, 244, 114, 21, 250, 1, 0, 166, 163, 243, 231, 156, 23, 30, 168, 102, 179, 146, 153, 220, 135, 246, 145, 68, 242, 195, 136, 141, 111, 71, 196, 175, 166, 27, 241, 171, 191, 249, 236, 145, 127, 102, 164, 156, 182, 36, 17, 58, 247, 200, 201, 23, 118, 255, 217, 202, 203, 55, 110, 100, 43, 183, 39, 89, 114, 107, 150, 196, 77, 17, 113, 246, 96, 155, 210, 192, 126, 186, 81, 219, 151, 167, 151, 55, 0, 192, 98, 106, 153, 131, 107, 124, 49, 144, 51, 66, 254, 167, 17, 241, 237, 200, 178, 111, 173, 36, 201, 55, 15, 110, 100, 191, 253, 141, 147, 71, 255, 93, 187, 142, 192, 118, 18, 12, 83, 113, 211, 95, 255, 163, 99, 233, 95, 165, 175, 77, 178, 228, 117, 73, 196, 85, 17, 217, 101, 89, 36, 151, 68, 196, 145, 24, 120, 29, 214, 10, 238, 131, 140, 118, 3, 0, 48, 168, 225, 168, 252, 80, 16, 207, 34, 146, 23, 146, 216, 248, 195, 200, 146, 255, 107, 35, 226, 247, 34, 178, 223, 141, 149, 29, 255, 252, 249, 167, 206, 249, 78, 167, 253, 132, 28, 210, 13, 51, 245, 208, 127, 242, 127, 238, 252, 139, 63, 61, 248, 138, 36, 141, 35, 27, 201, 15, 15, 197, 70, 156, 155, 69, 156, 19, 145, 236, 75, 210, 228, 96, 150, 69, 146, 68, 182, 35, 146, 216, 19, 145, 78, 173, 95, 38, 152, 3, 0, 152, 172, 86, 19, 189, 53, 182, 17, 145, 197, 191, 205, 34, 249, 171, 36, 137, 44, 219, 200, 254, 60, 34, 251, 139, 36, 226, 79, 34, 141, 63, 78, 179, 181, 239, 103, 27, 241, 226, 190, 179, 255, 252, 255, 249, 149, 159, 186, 252, 7, 83, 236, 24, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 205, 253, 255, 176, 67, 170, 3, 226, 197, 142, 62, 0, 0, 0, 0, 73, 69, 78, 68, 174, 66, 96, 130}} 11 | -------------------------------------------------------------------------------- /ImageViewer/data/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Palexer/image-viewer/a508a64a42558fe13afe93b612601d8f9bb32745/ImageViewer/data/icon.png -------------------------------------------------------------------------------- /ImageViewer/data/icon.svg: -------------------------------------------------------------------------------- 1 | 2 | 17 | 19 | 23 | 28 | 34 | 39 | 44 | 50 | 51 | 55 | 60 | 66 | 71 | 76 | 82 | 83 | 84 | 103 | 105 | 106 | 108 | image/svg+xml 109 | 111 | 112 | 113 | 114 | 115 | 119 | 130 | 136 | 153 | 171 | 172 | 173 | 174 | -------------------------------------------------------------------------------- /ImageViewer/fileio.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "errors" 5 | "fmt" 6 | "image/gif" 7 | "image/jpeg" 8 | "image/png" 9 | "os" 10 | "path/filepath" 11 | "sort" 12 | "strings" 13 | 14 | "fyne.io/fyne/v2" 15 | "fyne.io/fyne/v2/container" 16 | "fyne.io/fyne/v2/dialog" 17 | "fyne.io/fyne/v2/storage" 18 | 19 | "github.com/disintegration/imageorient" 20 | ) 21 | 22 | func (a *App) openFileDialog() { 23 | dialog := dialog.NewFileOpen(func(reader fyne.URIReadCloser, err error) { 24 | if err != nil { 25 | dialog.ShowError(err, a.mainWin) 26 | return 27 | } 28 | if err == nil && reader == nil { 29 | return 30 | } 31 | 32 | file, err := os.Open(reader.URI().String()[7:]) 33 | if err != nil { 34 | dialog.ShowError(err, a.mainWin) 35 | return 36 | } 37 | 38 | err = a.open(file, true) 39 | if err != nil { 40 | dialog.ShowError(err, a.mainWin) 41 | return 42 | } 43 | defer reader.Close() 44 | }, a.mainWin) 45 | dialog.SetFilter(storage.NewExtensionFileFilter([]string{".png", ".jpeg", ".jpg", ".gif"})) 46 | dialog.Show() 47 | } 48 | 49 | func (a *App) open(file *os.File, folder bool) error { 50 | defer file.Close() 51 | 52 | // decode and update the image + get image path 53 | var err error 54 | a.img.OriginalImage, _, err = imageorient.Decode(file) 55 | if err != nil { 56 | return fmt.Errorf("Unable to decode image %v", err) 57 | } 58 | a.img.Path = file.Name() 59 | a.image.Image = a.img.OriginalImage 60 | a.image.Refresh() 61 | 62 | // get and display FileInfo 63 | a.img.FileData, err = os.Stat(a.img.Path) 64 | if err != nil { 65 | return err 66 | } 67 | 68 | a.imgSize.SetText(fmt.Sprintf("Size: %.2f Mb", float64(a.img.FileData.Size())/1000000)) 69 | 70 | a.imgLastMod.SetText(fmt.Sprintf("Last modified: \n%s", a.img.FileData.ModTime().Format("02-01-2006"))) 71 | 72 | // save all images from folder for next/back 73 | if folder { 74 | a.img.Directory = filepath.Dir(file.Name()) 75 | openFolder, _ := os.Open(a.img.Directory) 76 | a.img.ImagesInFolder, _ = openFolder.Readdirnames(0) 77 | 78 | // filter image files 79 | imgList := []string{} 80 | for _, v := range a.img.ImagesInFolder { 81 | if strings.HasSuffix(strings.ToLower(v), ".png") || strings.HasSuffix(strings.ToLower(v), ".jpg") || strings.HasSuffix(strings.ToLower(v), ".jpeg") || strings.HasSuffix(strings.ToLower(v), ".gif") { 82 | imgList = append(imgList, v) 83 | } 84 | } 85 | a.img.ImagesInFolder = imgList 86 | sort.Strings(a.img.ImagesInFolder) // sort array alphabetically 87 | 88 | // get first index value 89 | for i, v := range a.img.ImagesInFolder { 90 | if filepath.Base(file.Name()) == v { 91 | a.img.index = i 92 | } 93 | } 94 | } 95 | 96 | a.widthLabel.SetText(fmt.Sprintf("Width: %dpx", a.img.OriginalImage.Bounds().Max.X)) 97 | a.heightLabel.SetText(fmt.Sprintf("Height: %dpx", a.img.OriginalImage.Bounds().Max.Y)) 98 | 99 | a.mainWin.SetTitle(fmt.Sprintf("Image Viewer - %v", (strings.Split(a.img.Path, "/")[len(strings.Split(a.img.Path, "/"))-1]))) 100 | 101 | // append to last opened images 102 | a.lastOpened = append(a.lastOpened, file.Name()) 103 | a.app.Preferences().SetString("lastOpened", strings.Join(a.lastOpened, ",")) 104 | 105 | // reset editing history 106 | a.img.lastFilters = nil 107 | a.img.lastFiltersUndone = nil 108 | 109 | a.resetZoom() 110 | 111 | // activate widgets 112 | a.reset() 113 | a.resetBtn.Enable() 114 | a.leftArrow.Enable() 115 | a.rightArrow.Enable() 116 | a.deleteBtn.Enable() 117 | a.renameBtn.Enable() 118 | a.zoomIn.Enable() 119 | a.zoomOut.Enable() 120 | a.resetZoomBtn.Enable() 121 | return nil 122 | } 123 | 124 | func (a *App) saveFileDialog() { 125 | if a.img.OriginalImage == nil { 126 | dialog.ShowError(errors.New("no image opened"), a.mainWin) 127 | return 128 | } 129 | if a.img.EditedImage == nil { 130 | a.apply() 131 | } 132 | 133 | dialog.ShowFileSave(func(writer fyne.URIWriteCloser, err error) { 134 | err = a.save(writer) 135 | if err != nil { 136 | dialog.ShowError(err, a.mainWin) 137 | return 138 | } 139 | }, a.mainWin) 140 | } 141 | 142 | func (a *App) save(writer fyne.URIWriteCloser) error { 143 | if writer == nil { 144 | return nil 145 | } 146 | 147 | switch writer.URI().Extension() { 148 | case ".jpeg": 149 | jpeg.Encode(writer, a.img.EditedImage, nil) 150 | case ".jpg": 151 | jpeg.Encode(writer, a.img.EditedImage, nil) 152 | case ".png": 153 | png.Encode(writer, a.img.EditedImage) 154 | case ".gif": 155 | gif.Encode(writer, a.img.EditedImage, nil) 156 | default: 157 | os.Remove(writer.URI().String()[7:]) 158 | return errors.New("unsupported file extension\n supported extensions: .jpg, .png, .gif") 159 | } 160 | return nil 161 | } 162 | 163 | func (a *App) deleteFile() { 164 | if err := os.Remove(a.img.Path); err != nil { 165 | dialog.NewError(err, a.mainWin) 166 | return 167 | } 168 | if a.img.index == len(a.img.ImagesInFolder)-1 { 169 | a.nextImage(false, true) 170 | } else if len(a.img.ImagesInFolder) == 1 { 171 | a.image.Image = nil 172 | a.img.EditedImage = nil 173 | a.img.OriginalImage = nil 174 | a.rightArrow.Disable() 175 | a.leftArrow.Disable() 176 | a.deleteBtn.Disable() 177 | a.image.Refresh() 178 | } else { 179 | a.nextImage(true, true) 180 | } 181 | } 182 | 183 | func (a *App) renameDialog() { 184 | entry := newEnterEntry() 185 | entry.enterFunc = func(s string) { 186 | newPath := strings.TrimSuffix(a.img.Path, filepath.Base(a.img.Path)) + s 187 | if err := os.Rename(a.img.Path, newPath); err != nil { 188 | dialog.ShowError(fmt.Errorf("failed to rename file: %v", err), a.mainWin) 189 | return 190 | } 191 | a.img.Path = newPath 192 | a.mainWin.SetTitle("Image Viewer - " + s) 193 | a.mainWin.Canvas().Overlays().Top().Hide() 194 | } 195 | 196 | entry.SetPlaceHolder(filepath.Base(a.img.Path)) 197 | dialog.ShowCustomConfirm("Rename Image", "Ok", "Cancel", container.NewVBox(entry), func(b bool) { 198 | if b { 199 | newPath := strings.TrimSuffix(a.img.Path, filepath.Base(a.img.Path)) + entry.Text 200 | if err := os.Rename(a.img.Path, newPath); err != nil { 201 | dialog.ShowError(fmt.Errorf("failed to rename file: %v", err), a.mainWin) 202 | return 203 | } 204 | a.img.Path = newPath 205 | a.mainWin.SetTitle("Image Viewer - " + entry.Text) 206 | } 207 | }, a.mainWin) 208 | } 209 | -------------------------------------------------------------------------------- /ImageViewer/gen.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | fyne bundle data/icon.png > bundled.go 3 | -------------------------------------------------------------------------------- /ImageViewer/gifted.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "github.com/disintegration/gift" 4 | 5 | // gifted extends gift.GIFT with a Remove and a Replace function 6 | type gifted struct { 7 | *gift.GIFT 8 | } 9 | 10 | // remove removes the filter passed into the function 11 | func (g *gifted) remove(filter gift.Filter) bool { 12 | for i, f := range g.Filters { 13 | if f == filter { 14 | copy(g.Filters[i:], g.Filters[i+1:]) // Shift a[i+1:] left one index. 15 | g.Filters[len(g.Filters)-1] = nil // Erase last element (write zero value). 16 | g.Filters = g.Filters[:len(g.Filters)-1] // Truncate slice. 17 | return true 18 | } 19 | } 20 | return false 21 | } 22 | 23 | // replace replaces the old with the new filter. If the old filter doesn't exist, it applys the new filter. 24 | func (g *gifted) replace(old, new gift.Filter) bool { 25 | for i, f := range g.Filters { 26 | if f == old { 27 | g.Filters[i] = new 28 | return true 29 | } 30 | } 31 | g.Add(new) 32 | return false 33 | } 34 | -------------------------------------------------------------------------------- /ImageViewer/go.mod: -------------------------------------------------------------------------------- 1 | module github.com/Palexer/image-viewer/ImageViewer 2 | 3 | go 1.15 4 | 5 | require ( 6 | fyne.io/fyne/v2 v2.0.0 7 | github.com/disintegration/gift v1.2.1 8 | github.com/disintegration/imageorient v0.0.0-20180920195336-8147d86e83ec 9 | ) 10 | -------------------------------------------------------------------------------- /ImageViewer/go.sum: -------------------------------------------------------------------------------- 1 | fyne.io/fyne/v2 v2.0.0 h1:TfsS3bNq5663BpXsoz1OfzyjcaMqqOf9usI8ZKkw4IE= 2 | fyne.io/fyne/v2 v2.0.0/go.mod h1:FmobqvPpBW+nG1nDyxZWf1SQLED9g/vXIxiIIVjHazY= 3 | github.com/Kodeworks/golang-image-ico v0.0.0-20141118225523-73f0f4cfade9/go.mod h1:7uhhqiBaR4CpN0k9rMjOtjpcfGd6DG2m04zQxKnWQ0I= 4 | github.com/akavel/rsrc v0.8.0/go.mod h1:uLoCtb9J+EyAqh+26kdrTgmzRBFPGOolLWKpdxkKq+c= 5 | github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 6 | github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= 7 | github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 8 | github.com/disintegration/gift v1.1.2/go.mod h1:Jh2i7f7Q2BM7Ezno3PhfezbR1xpUg9dUg3/RlKGr4HI= 9 | github.com/disintegration/gift v1.2.1 h1:Y005a1X4Z7Uc+0gLpSAsKhWi4qLtsdEcMIbbdvdZ6pc= 10 | github.com/disintegration/gift v1.2.1/go.mod h1:Jh2i7f7Q2BM7Ezno3PhfezbR1xpUg9dUg3/RlKGr4HI= 11 | github.com/disintegration/imageorient v0.0.0-20180920195336-8147d86e83ec h1:YrB6aVr9touOt75I9O1SiancmR2GMg45U9UYf0gtgWg= 12 | github.com/disintegration/imageorient v0.0.0-20180920195336-8147d86e83ec/go.mod h1:K0KBFIr1gWu/C1Gp10nFAcAE4hsB7JxE6OgLijrJ8Sk= 13 | github.com/fredbi/uri v0.0.0-20181227131451-3dcfdacbaaf3 h1:FDqhDm7pcsLhhWl1QtD8vlzI4mm59llRvNzrFg6/LAA= 14 | github.com/fredbi/uri v0.0.0-20181227131451-3dcfdacbaaf3/go.mod h1:CzM2G82Q9BDUvMTGHnXf/6OExw/Dz2ivDj48nVg7Lg8= 15 | github.com/fsnotify/fsnotify v1.4.9 h1:hsms1Qyu0jgnwNXIxa+/V/PDsU6CfLf6CNO8H7IWoS4= 16 | github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= 17 | github.com/fyne-io/mobile v0.1.2 h1:0HaXDtOOwyOTn3Umi0uKVCOgJtfX73c6unC4U8i5VZU= 18 | github.com/fyne-io/mobile v0.1.2/go.mod h1:/kOrWrZB6sasLbEy2JIvr4arEzQTXBTZGb3Y96yWbHY= 19 | github.com/go-gl/gl v0.0.0-20190320180904-bf2b1f2f34d7 h1:SCYMcCJ89LjRGwEa0tRluNRiMjZHalQZrVrvTbPh+qw= 20 | github.com/go-gl/gl v0.0.0-20190320180904-bf2b1f2f34d7/go.mod h1:482civXOzJJCPzJ4ZOX/pwvXBWSnzD4OKMdH4ClKGbk= 21 | github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200625191551-73d3c3675aa3 h1:q521PfSp5/z6/sD9FZZOWj4d1MLmfQW8PkRnI9M6PCE= 22 | github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200625191551-73d3c3675aa3/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= 23 | github.com/godbus/dbus/v5 v5.0.3 h1:ZqHaoEF7TBzh4jzPmqVhE/5A1z9of6orkAe5uHoAeME= 24 | github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= 25 | github.com/goki/freetype v0.0.0-20181231101311-fa8a33aabaff h1:W71vTCKoxtdXgnm1ECDFkfQnpdqAO00zzGXLA5yaEX8= 26 | github.com/goki/freetype v0.0.0-20181231101311-fa8a33aabaff/go.mod h1:wfqRWLHRBsRgkp5dmbG56SA0DmVtwrF5N3oPdI8t+Aw= 27 | github.com/jackmordaunt/icns v0.0.0-20181231085925-4f16af745526/go.mod h1:UQkeMHVoNcyXYq9otUupF7/h/2tmHlhrS2zw7ZVvUqc= 28 | github.com/josephspurrier/goversioninfo v0.0.0-20200309025242-14b0ab84c6ca/go.mod h1:eJTEwMjXb7kZ633hO3Ln9mBUCOjX2+FlTljvpl9SYdE= 29 | github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= 30 | github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= 31 | github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= 32 | github.com/lucor/goinfo v0.0.0-20200401173949-526b5363a13a/go.mod h1:ORP3/rB5IsulLEBwQZCJyyV6niqmI7P4EWSmkug+1Ng= 33 | github.com/nfnt/resize v0.0.0-20180221191011-83c6a9932646/go.mod h1:jpp1/29i3P1S/RLdc7JQKbRpFeM1dOBd8T9ki5s+AY8= 34 | github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= 35 | github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= 36 | github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 37 | github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 38 | github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= 39 | github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= 40 | github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= 41 | github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= 42 | github.com/srwiley/oksvg v0.0.0-20200311192757-870daf9aa564 h1:HunZiaEKNGVdhTRQOVpMmj5MQnGnv+e8uZNu3xFLgyM= 43 | github.com/srwiley/oksvg v0.0.0-20200311192757-870daf9aa564/go.mod h1:afMbS0qvv1m5tfENCwnOdZGOF8RGR/FsZ7bvBxQGZG4= 44 | github.com/srwiley/rasterx v0.0.0-20200120212402-85cb7272f5e9 h1:m59mIOBO4kfcNCEzJNy71UkeF4XIx2EVmL9KLwDQdmM= 45 | github.com/srwiley/rasterx v0.0.0-20200120212402-85cb7272f5e9/go.mod h1:mvWM0+15UqyrFKqdRjY6LuAVJR0HOVhJlEgZ5JWtSWU= 46 | github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 47 | github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= 48 | github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= 49 | github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= 50 | github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= 51 | golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= 52 | golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= 53 | golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= 54 | golang.org/x/image v0.0.0-20200430140353-33d19683fad8 h1:6WW6V3x1P/jokJBpRQYUJnMHRP6isStQwCozxnU7XQw= 55 | golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= 56 | golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= 57 | golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= 58 | golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 59 | golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= 60 | golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e h1:3G+cUijn7XD+S4eJFddp53Pv7+slrESplyjG25HgL+k= 61 | golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= 62 | golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 63 | golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= 64 | golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 65 | golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 66 | golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 67 | golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 68 | golang.org/x/sys v0.0.0-20200720211630-cb9d2d5c5666 h1:gVCS+QOncANNPlmlO1AhlU3oxs4V9z+gTtPwIk3p2N8= 69 | golang.org/x/sys v0.0.0-20200720211630-cb9d2d5c5666/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= 70 | golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 71 | golang.org/x/text v0.3.2 h1:tW2bmiBqwgJj/UpqtC8EpXEZVYOwU0yG4iWbprSVAcs= 72 | golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= 73 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= 74 | golang.org/x/tools v0.0.0-20190808195139-e713427fea3f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 75 | golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= 76 | golang.org/x/tools v0.0.0-20200328031815-3db5fc6bac03/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= 77 | golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 78 | golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 79 | golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= 80 | gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 81 | gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= 82 | gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= 83 | gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 84 | gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10= 85 | gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= 86 | -------------------------------------------------------------------------------- /ImageViewer/img.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "image" 5 | "os" 6 | "strconv" 7 | 8 | "github.com/disintegration/gift" 9 | ) 10 | 11 | // Img is used for the whole image editing process 12 | type Img struct { 13 | OriginalImage image.Image 14 | FileData os.FileInfo 15 | EditedImage *image.RGBA 16 | gifted *gifted 17 | Path string 18 | ImagesInFolder []string 19 | index int 20 | Directory string 21 | 22 | zoom int 23 | 24 | // saved filters 25 | // general 26 | brightness gift.Filter 27 | contrast gift.Filter 28 | gamma gift.Filter 29 | hue gift.Filter 30 | saturation gift.Filter 31 | 32 | // filters 33 | grayscale gift.Filter 34 | sepia gift.Filter 35 | blur gift.Filter 36 | 37 | // color balance red, green, blue 38 | cbRed gift.Filter 39 | cbGreen gift.Filter 40 | cbBlue gift.Filter 41 | 42 | // transform 43 | resize gift.Filter 44 | 45 | lastFilters []gift.Filter 46 | lastFiltersUndone []gift.Filter 47 | } 48 | 49 | func (i *Img) init() { 50 | i.gifted = &gifted{} 51 | i.gifted.GIFT = gift.New() 52 | } 53 | 54 | func (a *App) changeParameter(filterVar *gift.Filter, newFilter gift.Filter) { 55 | if a.img.OriginalImage == nil { 56 | return 57 | } 58 | 59 | a.img.gifted.replace(*filterVar, newFilter) 60 | *filterVar = newFilter 61 | a.img.lastFilters = append(a.img.lastFilters, newFilter) 62 | go a.apply() 63 | 64 | } 65 | 66 | func (a *App) addParameter(filter gift.Filter) { 67 | if a.img.OriginalImage == nil { 68 | return 69 | } 70 | a.img.gifted.Add(filter) 71 | a.img.lastFilters = append(a.img.lastFilters, filter) 72 | go a.apply() 73 | } 74 | 75 | func (a *App) apply() { 76 | // apply filters 77 | a.img.EditedImage = image.NewRGBA(a.img.gifted.Bounds(a.img.OriginalImage.Bounds())) 78 | a.img.gifted.Draw(a.img.EditedImage, a.img.OriginalImage) 79 | 80 | // show new image 81 | a.image.Image = a.img.EditedImage 82 | a.image.Refresh() 83 | } 84 | 85 | func (a *App) reset() { 86 | defer a.image.Refresh() 87 | 88 | // reset values 89 | a.sliderBrightness.SetValue(0) 90 | a.sliderContrast.SetValue(0) 91 | a.sliderHue.SetValue(0) 92 | a.sliderColorBalanceR.SetValue(0) 93 | a.sliderColorBalanceG.SetValue(0) 94 | a.sliderColorBalanceB.SetValue(0) 95 | a.sliderSepia.SetValue(0) 96 | a.sliderSaturation.SetValue(0) 97 | a.sliderBlur.SetValue(0) 98 | 99 | // clear filters 100 | a.img.gifted.Empty() 101 | a.img.lastFilters = nil 102 | a.img.lastFiltersUndone = nil 103 | 104 | a.img.EditedImage = nil 105 | a.image.Image = a.img.OriginalImage 106 | } 107 | 108 | func (a *App) undo() { 109 | if len(a.img.lastFilters) > 0 { 110 | filterToUndo := a.img.lastFilters[len(a.img.lastFilters)-1] 111 | a.img.gifted.remove(filterToUndo) 112 | a.img.lastFiltersUndone = append(a.img.lastFiltersUndone, filterToUndo) 113 | a.img.lastFilters = a.img.lastFilters[:len(a.img.lastFilters)-1] 114 | a.apply() 115 | } 116 | } 117 | 118 | func (a *App) redo() { 119 | if len(a.img.lastFiltersUndone) > 0 { 120 | filterToRedo := a.img.lastFiltersUndone[len(a.img.lastFiltersUndone)-1] 121 | a.img.gifted.Add(filterToRedo) 122 | a.img.lastFilters = append(a.img.lastFilters, filterToRedo) 123 | a.img.lastFiltersUndone = a.img.lastFiltersUndone[:len(a.img.lastFiltersUndone)-1] 124 | a.apply() 125 | } 126 | } 127 | 128 | func (a *App) zoomImageIn() { 129 | if a.img.OriginalImage == nil { 130 | return 131 | } 132 | 133 | src := a.img.OriginalImage 134 | 135 | my_width := src.Bounds().Dx() - a.img.zoom 136 | my_height := src.Bounds().Dy() - a.img.zoom 137 | 138 | if a.img.zoom < my_width { 139 | a.img.zoom += 25 140 | } 141 | g := gift.New( 142 | gift.Crop(image.Rect(a.img.zoom, a.img.zoom, my_width, my_height)), 143 | ) 144 | dst := image.NewRGBA(g.Bounds(src.Bounds())) 145 | g.Draw(dst, src) 146 | 147 | // show new image 148 | a.image.Image = dst 149 | a.image.Refresh() 150 | 151 | // show zoom level 152 | a.zoomLabel.SetText(strconv.Itoa(100+a.img.zoom) + "%") 153 | } 154 | 155 | func (a *App) zoomImageOut() { 156 | if a.img.OriginalImage == nil { 157 | return 158 | } 159 | if a.img.zoom > 0 { 160 | a.img.zoom -= 25 161 | 162 | } 163 | src := a.img.OriginalImage 164 | 165 | my_width := src.Bounds().Dx() - a.img.zoom 166 | my_height := src.Bounds().Dy() - a.img.zoom 167 | 168 | g := gift.New( 169 | gift.Crop(image.Rect(a.img.zoom, a.img.zoom, my_width, my_height)), 170 | ) 171 | dst := image.NewRGBA(g.Bounds(src.Bounds())) 172 | g.Draw(dst, src) 173 | 174 | // show new image 175 | a.image.Image = dst 176 | a.image.Refresh() 177 | 178 | // show zoom level 179 | a.zoomLabel.SetText(strconv.Itoa(100+a.img.zoom) + "%") 180 | } 181 | 182 | func (a *App) resetZoom() { 183 | a.img.zoom = 0 184 | a.zoomLabel.SetText("100%") 185 | 186 | // show new image 187 | a.image.Image = a.img.OriginalImage 188 | a.image.Refresh() 189 | } 190 | -------------------------------------------------------------------------------- /ImageViewer/main.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "net/url" 6 | "os" 7 | 8 | "fyne.io/fyne/v2" 9 | "fyne.io/fyne/v2/app" 10 | "fyne.io/fyne/v2/canvas" 11 | "fyne.io/fyne/v2/container" 12 | "fyne.io/fyne/v2/data/binding" 13 | "fyne.io/fyne/v2/driver/desktop" 14 | "fyne.io/fyne/v2/layout" 15 | "fyne.io/fyne/v2/theme" 16 | "fyne.io/fyne/v2/widget" 17 | ) 18 | 19 | type enterEntry struct { 20 | widget.Entry 21 | enterFunc func(s string) 22 | } 23 | 24 | func (e *enterEntry) TypedKey(key *fyne.KeyEvent) { 25 | switch key.Name { 26 | case fyne.KeyReturn: 27 | e.enterFunc(e.Text) 28 | default: 29 | e.Entry.TypedKey(key) 30 | } 31 | } 32 | 33 | func newEnterEntry() *enterEntry { 34 | entry := &enterEntry{} 35 | entry.ExtendBaseWidget(entry) 36 | return entry 37 | } 38 | 39 | type editingSlider struct { 40 | widget.Slider 41 | dragEndFunc func(float64) 42 | } 43 | 44 | func (e *editingSlider) DragEnd() { 45 | e.dragEndFunc(e.Value) 46 | } 47 | 48 | func newEditingSlider(min, max float64) *editingSlider { 49 | editSlider := &editingSlider{} 50 | editSlider.Max = max 51 | editSlider.Min = min 52 | editSlider.ExtendBaseWidget(editSlider) 53 | return editSlider 54 | } 55 | 56 | // newEditingOption creates a new VBox, that includes an info text and a widget to edit the parameter 57 | func newEditingOption(infoText string, slider *editingSlider, defaultValue float64) *fyne.Container { 58 | data := binding.BindFloat(&defaultValue) 59 | text := widget.NewLabel(infoText) 60 | value := widget.NewLabelWithData(binding.FloatToStringWithFormat(data, "%.0f")) 61 | slider.Bind(data) 62 | slider.Step = 1 63 | 64 | return container.NewVBox( 65 | container.NewHBox( 66 | text, 67 | layout.NewSpacer(), 68 | value, 69 | ), 70 | slider, 71 | ) 72 | } 73 | 74 | func parseURL(urlStr string) *url.URL { 75 | link, err := url.Parse(urlStr) 76 | if err != nil { 77 | fyne.LogError("Could not parse URL", err) 78 | } 79 | return link 80 | } 81 | 82 | // App represents the whole application with all its windows, widgets and functions 83 | type App struct { 84 | app fyne.App 85 | mainWin fyne.Window 86 | 87 | img Img 88 | mainModKey desktop.Modifier 89 | focus bool 90 | lastOpened []string 91 | 92 | image *canvas.Image 93 | 94 | sliderBrightness *editingSlider 95 | sliderContrast *editingSlider 96 | sliderHue *editingSlider 97 | sliderSaturation *editingSlider 98 | sliderColorBalanceR *editingSlider 99 | sliderColorBalanceG *editingSlider 100 | sliderColorBalanceB *editingSlider 101 | sliderSepia *editingSlider 102 | sliderBlur *editingSlider 103 | resetBtn *widget.Button 104 | 105 | split *container.Split 106 | widthLabel *widget.Label 107 | heightLabel *widget.Label 108 | imgSize *widget.Label 109 | imgLastMod *widget.Label 110 | 111 | statusBar *fyne.Container 112 | leftArrow *widget.Button 113 | rightArrow *widget.Button 114 | deleteBtn *widget.Button 115 | renameBtn *widget.Button 116 | zoomIn *widget.Button 117 | zoomOut *widget.Button 118 | zoomLabel *widget.Label 119 | resetZoomBtn *widget.Button 120 | 121 | fullscreenWin fyne.Window 122 | } 123 | 124 | func reverseArray(arr []string) []string { 125 | for i := 0; i < len(arr)/2; i++ { 126 | j := len(arr) - i - 1 127 | arr[i], arr[j] = arr[j], arr[i] 128 | } 129 | return arr 130 | } 131 | 132 | func (a *App) init() { 133 | a.img = Img{} 134 | a.img.init() 135 | 136 | // theme 137 | switch a.app.Preferences().StringWithFallback("Theme", "Dark") { 138 | case "Light": 139 | a.app.Settings().SetTheme(theme.LightTheme()) 140 | case "Dark": 141 | a.app.Settings().SetTheme(theme.DarkTheme()) 142 | } 143 | 144 | // show/hide statusbar 145 | if a.app.Preferences().BoolWithFallback("statusBarVisible", true) == false { 146 | a.statusBar.Hide() 147 | } 148 | } 149 | 150 | func main() { 151 | a := app.NewWithID("io.github.palexer.image-viewer") 152 | w := a.NewWindow("Image Viewer") 153 | a.SetIcon(resourceIconPng) 154 | w.SetIcon(resourceIconPng) 155 | ui := &App{app: a, mainWin: w} 156 | ui.init() 157 | w.SetContent(ui.loadMainUI()) 158 | if len(os.Args) > 1 { 159 | file, err := os.Open(os.Args[1]) 160 | if err != nil { 161 | fmt.Printf("error while opening the file: %v\n", err) 162 | } 163 | ui.open(file, true) 164 | } 165 | w.Resize(fyne.NewSize(1200, 750)) 166 | w.ShowAndRun() 167 | } 168 | -------------------------------------------------------------------------------- /ImageViewer/settings.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fyne.io/fyne/v2" 5 | "fyne.io/fyne/v2/container" 6 | "fyne.io/fyne/v2/theme" 7 | "fyne.io/fyne/v2/widget" 8 | ) 9 | 10 | func (a *App) loadSettingsUI() { 11 | winSettings := a.app.NewWindow("Settings") 12 | 13 | themeSelector := widget.NewSelect([]string{"System Default", "Light", "Dark"}, func(selected string) { 14 | switch selected { 15 | case "System Default": 16 | a.app.Settings().SetTheme(theme.DefaultTheme()) 17 | case "Light": 18 | a.app.Settings().SetTheme(theme.LightTheme()) 19 | case "Dark": 20 | a.app.Settings().SetTheme(theme.DarkTheme()) 21 | } 22 | a.app.Preferences().SetString("Theme", selected) 23 | }) 24 | themeSelector.SetSelected(a.app.Preferences().StringWithFallback("Theme", "System Default")) 25 | 26 | winSettings.SetContent(container.NewVBox( 27 | container.NewHBox( 28 | widget.NewLabel("Theme"), 29 | themeSelector, 30 | ), 31 | )) 32 | winSettings.Resize(fyne.NewSize(300, 150)) 33 | winSettings.Show() 34 | } 35 | -------------------------------------------------------------------------------- /ImageViewer/shortcuts.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fyne.io/fyne/v2" 5 | "fyne.io/fyne/v2/dialog" 6 | "fyne.io/fyne/v2/driver/desktop" 7 | "fyne.io/fyne/v2/widget" 8 | ) 9 | 10 | func (a *App) loadKeyboardShortcuts() { 11 | // keyboard shortcuts 12 | // ctrl+o to open file 13 | a.mainWin.Canvas().AddShortcut(&desktop.CustomShortcut{ 14 | KeyName: fyne.KeyO, 15 | Modifier: a.mainModKey, 16 | }, func(shortcut fyne.Shortcut) { a.openFileDialog() }) 17 | 18 | // ctrl+s to save file 19 | a.mainWin.Canvas().AddShortcut(&desktop.CustomShortcut{ 20 | KeyName: fyne.KeyS, 21 | Modifier: a.mainModKey, 22 | }, func(shortcut fyne.Shortcut) { a.saveFileDialog() }) 23 | 24 | // ctrl+z to undo 25 | a.mainWin.Canvas().AddShortcut(&desktop.CustomShortcut{ 26 | KeyName: fyne.KeyZ, 27 | Modifier: a.mainModKey, 28 | }, func(shortcut fyne.Shortcut) { a.undo() }) 29 | 30 | // ctrl+y to redo 31 | a.mainWin.Canvas().AddShortcut(&desktop.CustomShortcut{ 32 | KeyName: fyne.KeyY, 33 | Modifier: a.mainModKey, 34 | }, func(shortcut fyne.Shortcut) { a.redo() }) 35 | 36 | // ctrl+q to quit application 37 | a.mainWin.Canvas().AddShortcut(&desktop.CustomShortcut{ 38 | KeyName: fyne.KeyQ, 39 | Modifier: a.mainModKey, 40 | }, func(shortcut fyne.Shortcut) { a.app.Quit() }) 41 | 42 | a.mainWin.Canvas().SetOnTypedKey(func(key *fyne.KeyEvent) { 43 | switch key.Name { 44 | // move forward/back within the current folder of images 45 | case fyne.KeyRight: 46 | a.nextImage(true, false) 47 | case fyne.KeyLeft: 48 | a.nextImage(false, false) 49 | // delete images with delete key 50 | case fyne.KeyDelete: 51 | if a.image.Image != nil { 52 | dialog.ShowConfirm("Delte file?", "Do you really want to delete this image?\n This action can't be undone.", func(b bool) { 53 | if b { 54 | a.deleteFile() 55 | } 56 | }, a.mainWin) 57 | } 58 | // close dialogs with esc key 59 | case fyne.KeyEscape: 60 | if len(a.mainWin.Canvas().Overlays().List()) > 0 { 61 | a.mainWin.Canvas().Overlays().Top().Hide() 62 | } 63 | case fyne.KeyF11: 64 | if a.image.Image == nil { 65 | return 66 | } 67 | a.fullscreenMode() 68 | case fyne.KeyF2: 69 | if a.image.Image == nil { 70 | return 71 | } 72 | a.renameDialog() 73 | case fyne.KeyPlus: 74 | a.zoomImageIn() 75 | case fyne.KeyMinus: 76 | a.zoomImageOut() 77 | case fyne.KeyEqual: 78 | a.resetZoom() 79 | } 80 | }) 81 | } 82 | 83 | func (a *App) showShortcuts() { 84 | shortcuts := []string{ 85 | "Ctrl+O", "Ctrl+S", "Ctrl+Z", 86 | "Ctrl+Y", "Ctrl+Q", "F11", 87 | "Arrow Right", "Arrow Left", "Delete", 88 | "F2", "Escape", "Plus", "Minus", "Equal"} 89 | descriptions := []string{ 90 | "Open File", "Save File", "Undo", 91 | "Redo", "Quit Application", "Fullscreen View", 92 | "Next Image", "Last Image", "Delete Image", 93 | "Rename", "Close dialog", "Zoom In", "Zoom Out", 94 | "Zoom to 100%"} 95 | 96 | win := a.app.NewWindow("Keyboard Shortcuts") 97 | table := widget.NewTable( 98 | func() (int, int) { return len(shortcuts), 2 }, 99 | func() fyne.CanvasObject { 100 | return widget.NewLabel("") 101 | }, 102 | func(id widget.TableCellID, obj fyne.CanvasObject) { 103 | label := obj.(*widget.Label) 104 | if id.Row == 0 { 105 | if id.Col == 0 { 106 | label.SetText("Description") 107 | label.TextStyle.Bold = true 108 | } else { 109 | label.SetText("Shortcut") 110 | label.TextStyle.Bold = true 111 | } 112 | } else { 113 | if id.Col == 0 { 114 | label.SetText(descriptions[id.Row-1]) 115 | } else { 116 | label.SetText(descriptions[id.Row-1]) 117 | } 118 | } 119 | }, 120 | ) 121 | table.SetColumnWidth(0, 250) 122 | table.SetColumnWidth(1, 250) 123 | win.SetContent(table) 124 | win.Resize(fyne.NewSize(500, 500)) 125 | win.Show() 126 | } 127 | -------------------------------------------------------------------------------- /ImageViewer/ui.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "fmt" 5 | "os" 6 | "runtime" 7 | "strconv" 8 | 9 | "fyne.io/fyne/v2" 10 | "fyne.io/fyne/v2/canvas" 11 | "fyne.io/fyne/v2/container" 12 | "fyne.io/fyne/v2/dialog" 13 | "fyne.io/fyne/v2/driver/desktop" 14 | "fyne.io/fyne/v2/layout" 15 | "fyne.io/fyne/v2/theme" 16 | "fyne.io/fyne/v2/widget" 17 | "github.com/disintegration/gift" 18 | ) 19 | 20 | func removeDuplicates(elements []string) []string { 21 | // Use map to record duplicates as we find them. 22 | encountered := map[string]bool{} 23 | result := []string{} 24 | 25 | for i := range elements { 26 | if !encountered[elements[i]] { 27 | // Record this element as an encountered element. 28 | encountered[elements[i]] = true 29 | // Append to result slice. 30 | result = append(result, elements[i]) 31 | } 32 | } 33 | return result 34 | } 35 | 36 | func (a *App) nextImage(forward, folder bool) { 37 | if a.img.OriginalImage == nil || len(a.img.ImagesInFolder) < 2 { 38 | return 39 | } 40 | 41 | if forward { 42 | if a.img.index == len(a.img.ImagesInFolder)-1 { 43 | return 44 | } 45 | a.img.index++ 46 | } else { 47 | if a.img.index == 0 { 48 | return 49 | } 50 | a.img.index-- 51 | } 52 | 53 | file, err := os.Open(a.img.Directory + "/" + a.img.ImagesInFolder[a.img.index]) 54 | if err != nil { 55 | dialog.ShowError(err, a.mainWin) 56 | return 57 | } 58 | if folder { 59 | a.open(file, true) 60 | } else { 61 | a.open(file, false) 62 | } 63 | } 64 | 65 | func (a *App) fullscreenMode() { 66 | if !a.focus { 67 | a.fullscreenWin = a.app.NewWindow("Image Viewer - " + a.img.Path) 68 | a.fullscreenWin.SetFullScreen(true) 69 | a.fullscreenWin.Canvas().SetOnTypedKey(func(key *fyne.KeyEvent) { 70 | switch key.Name { 71 | case fyne.KeyEscape: 72 | a.fullscreenWin.Close() 73 | case fyne.KeyF11: 74 | a.fullscreenWin.Close() 75 | case fyne.KeyRight: 76 | a.nextImage(true, false) 77 | case fyne.KeyLeft: 78 | a.nextImage(false, false) 79 | } 80 | }) 81 | a.fullscreenWin.SetContent(a.image) 82 | a.fullscreenWin.Show() 83 | a.focus = true 84 | } else { 85 | a.fullscreenWin.Hide() 86 | a.focus = false 87 | } 88 | } 89 | 90 | func (a *App) loadStatusBar() *fyne.Container { 91 | a.leftArrow = widget.NewButtonWithIcon("", theme.NavigateBackIcon(), func() { 92 | a.nextImage(false, false) 93 | }) 94 | 95 | a.rightArrow = widget.NewButtonWithIcon("", theme.NavigateNextIcon(), func() { 96 | a.nextImage(true, false) 97 | }) 98 | a.leftArrow.Disable() 99 | a.rightArrow.Disable() 100 | 101 | a.deleteBtn = widget.NewButtonWithIcon("", theme.DeleteIcon(), func() { 102 | dialog.ShowConfirm("Delte file?", "Do you really want to delete this image?\n This action can't be undone.", func(b bool) { 103 | if b { 104 | a.deleteFile() 105 | } 106 | }, a.mainWin) 107 | }) 108 | a.deleteBtn.Disable() 109 | 110 | a.renameBtn = widget.NewButtonWithIcon("", theme.DocumentCreateIcon(), a.renameDialog) 111 | a.renameBtn.Disable() 112 | 113 | a.zoomIn = widget.NewButtonWithIcon("", theme.ZoomInIcon(), a.zoomImageIn) 114 | a.zoomIn.Disable() 115 | 116 | a.zoomOut = widget.NewButtonWithIcon("", theme.ZoomOutIcon(), a.zoomImageOut) 117 | a.zoomOut.Disable() 118 | 119 | a.zoomLabel = widget.NewLabel("") 120 | 121 | a.resetZoomBtn = widget.NewButtonWithIcon("", theme.ZoomFitIcon(), a.resetZoom) 122 | a.resetZoomBtn.Disable() 123 | 124 | a.statusBar = container.NewVBox( 125 | widget.NewSeparator(), 126 | container.NewHBox( 127 | a.leftArrow, 128 | a.rightArrow, 129 | layout.NewSpacer(), 130 | a.zoomLabel, 131 | a.resetZoomBtn, 132 | a.zoomOut, 133 | a.zoomIn, 134 | a.renameBtn, 135 | a.deleteBtn, 136 | ), 137 | ) 138 | return a.statusBar 139 | } 140 | 141 | // loadEditorTab returns the editor tab 142 | func (a *App) loadEditorTab() *container.TabItem { 143 | a.sliderBrightness = newEditingSlider(-100, 100) 144 | a.sliderBrightness.dragEndFunc = func(f float64) { a.changeParameter(&a.img.brightness, gift.Brightness(float32(f))) } 145 | editBrightness := newEditingOption( 146 | "Brightness: ", 147 | a.sliderBrightness, 148 | 0, 149 | ) 150 | 151 | a.sliderContrast = newEditingSlider(-100, 100) 152 | a.sliderContrast.dragEndFunc = func(f float64) { a.changeParameter(&a.img.contrast, gift.Contrast(float32(f))) } 153 | editContrast := newEditingOption( 154 | "Contrast: ", 155 | a.sliderContrast, 156 | 0, 157 | ) 158 | 159 | a.sliderHue = newEditingSlider(-180, 180) 160 | a.sliderHue.dragEndFunc = func(f float64) { a.changeParameter(&a.img.hue, gift.Hue(float32(f))) } 161 | editHue := newEditingOption( 162 | "Hue: ", 163 | a.sliderHue, 164 | 0, 165 | ) 166 | 167 | a.sliderSaturation = newEditingSlider(-100, 500) 168 | a.sliderSaturation.dragEndFunc = func(f float64) { a.changeParameter(&a.img.saturation, gift.Saturation(float32(f))) } 169 | editSaturation := newEditingOption("Saturation: ", a.sliderSaturation, 0) 170 | 171 | a.sliderColorBalanceR = newEditingSlider(-100, 500) 172 | a.sliderColorBalanceR.dragEndFunc = func(f float64) { 173 | a.changeParameter(&a.img.cbRed, gift.ColorBalance( 174 | float32(f), float32(a.sliderColorBalanceG.Value), float32(a.sliderColorBalanceB.Value))) 175 | } 176 | editColorBalanceR := newEditingOption( 177 | "Red: ", 178 | a.sliderColorBalanceR, 179 | 0, 180 | ) 181 | 182 | a.sliderColorBalanceG = newEditingSlider(-100, 500) 183 | a.sliderColorBalanceG.dragEndFunc = func(f float64) { 184 | a.changeParameter(&a.img.cbGreen, gift.ColorBalance( 185 | float32(a.sliderColorBalanceR.Value), float32(f), float32(a.sliderColorBalanceB.Value))) 186 | } 187 | editColorBalanceG := newEditingOption( 188 | "Green: ", 189 | a.sliderColorBalanceG, 190 | 0, 191 | ) 192 | 193 | a.sliderColorBalanceB = newEditingSlider(-100, 500) 194 | a.sliderColorBalanceB.dragEndFunc = func(f float64) { 195 | a.changeParameter(&a.img.cbBlue, gift.ColorBalance( 196 | float32(a.sliderColorBalanceR.Value), float32(a.sliderColorBalanceG.Value), float32(f))) 197 | } 198 | editColorBalanceB := newEditingOption( 199 | "Blue: ", 200 | a.sliderColorBalanceB, 201 | 0, 202 | ) 203 | 204 | rotate90Btn := widget.NewButton("Rotate 90°", func() { a.addParameter(gift.Rotate90()) }) 205 | flipVerticalBtn := widget.NewButton("Flip Vertically", func() { a.addParameter(gift.FlipVertical()) }) 206 | flipHorizontalBtn := widget.NewButton("Flip Horizontally", func() { a.addParameter(gift.FlipHorizontal()) }) 207 | resizeBtn := widget.NewButton("Resize", func() { 208 | var keepAspectRatio bool 209 | 210 | widthEntry := widget.NewEntry() 211 | heightEntry := widget.NewEntry() 212 | widthEntry.SetPlaceHolder("Width") 213 | heightEntry.SetPlaceHolder("Height") 214 | widthEntry.Validator = func(s string) error { 215 | if _, err := strconv.Atoi(s); err != nil { 216 | return fmt.Errorf("input is not a valid number") 217 | } 218 | return nil 219 | } 220 | heightEntry.Validator = func(s string) error { 221 | if _, err := strconv.Atoi(s); err != nil { 222 | return fmt.Errorf("input is not a valid number") 223 | } 224 | return nil 225 | } 226 | 227 | dialog.ShowCustom("Resize", "Cancel", container.NewVBox( 228 | container.NewHBox( 229 | widthEntry, 230 | heightEntry, 231 | ), 232 | container.NewHBox( 233 | widget.NewCheck("Keep Aspect Ratio", func(b bool) { 234 | if b { 235 | keepAspectRatio = true 236 | } else { 237 | keepAspectRatio = false 238 | } 239 | }), 240 | widget.NewButton("Apply", func() { 241 | if err := widthEntry.Validate(); err != nil { 242 | dialog.ShowError(err, a.mainWin) 243 | return 244 | } 245 | if err := heightEntry.Validate(); err != nil { 246 | dialog.ShowError(err, a.mainWin) 247 | return 248 | } 249 | 250 | width, _ := strconv.Atoi(widthEntry.Text) 251 | height, _ := strconv.Atoi(heightEntry.Text) 252 | if keepAspectRatio { 253 | a.changeParameter(&a.img.resize, gift.ResizeToFit(width, height, gift.LinearResampling)) 254 | } else { 255 | a.changeParameter(&a.img.resize, gift.ResizeToFill(width, height, gift.LinearResampling, gift.BottomAnchor)) 256 | } 257 | a.mainWin.Canvas().Overlays().Top().Hide() 258 | }), 259 | ), 260 | ), a.mainWin) 261 | }) 262 | 263 | grayscaleBtn := widget.NewButton("Grayscale", func() { a.changeParameter(&a.img.grayscale, gift.Grayscale()) }) 264 | 265 | a.sliderSepia = newEditingSlider(0, 100) 266 | a.sliderSepia.dragEndFunc = func(f float64) { a.changeParameter(&a.img.sepia, gift.Sepia(float32(f))) } 267 | editSepia := newEditingOption("Sepia: ", a.sliderSepia, 0) 268 | 269 | a.sliderBlur = newEditingSlider(0, 100) 270 | a.sliderBlur.dragEndFunc = func(f float64) { a.changeParameter(&a.img.blur, gift.GaussianBlur(float32(f))) } 271 | editBlur := newEditingOption("Blur: ", a.sliderBlur, 0) 272 | 273 | a.resetBtn = widget.NewButtonWithIcon("Reset All", theme.ContentClearIcon(), a.reset) 274 | a.resetBtn.Disable() 275 | 276 | return container.NewTabItem("Editor", container.NewScroll( 277 | container.NewVBox( 278 | widget.NewAccordion( 279 | widget.NewAccordionItem( 280 | "General", 281 | container.NewVBox( 282 | editBrightness, 283 | editContrast, 284 | editHue, 285 | editSaturation, 286 | ), 287 | ), 288 | widget.NewAccordionItem( 289 | "Color Balance", 290 | container.NewVBox( 291 | editColorBalanceR, 292 | editColorBalanceG, 293 | editColorBalanceB, 294 | ), 295 | ), 296 | widget.NewAccordionItem( 297 | "Transform", 298 | container.NewVBox( 299 | rotate90Btn, 300 | flipHorizontalBtn, 301 | flipVerticalBtn, 302 | resizeBtn, 303 | ), 304 | ), 305 | widget.NewAccordionItem( 306 | "Filter", 307 | container.NewVBox( 308 | editSepia, 309 | editBlur, 310 | grayscaleBtn, 311 | ), 312 | ), 313 | ), 314 | layout.NewSpacer(), 315 | a.resetBtn, 316 | ))) 317 | } 318 | 319 | func (a *App) loadInformationTab() *container.TabItem { 320 | a.widthLabel = widget.NewLabel("Width: ") 321 | a.heightLabel = widget.NewLabel("Height: ") 322 | a.imgSize = widget.NewLabel("Size: ") 323 | a.imgLastMod = widget.NewLabel("Last modified: ") 324 | return container.NewTabItem("Information", container.NewScroll( 325 | container.NewVBox( 326 | a.widthLabel, 327 | a.heightLabel, 328 | a.imgSize, 329 | a.imgLastMod, 330 | ), 331 | )) 332 | } 333 | 334 | func (a *App) loadMainUI() fyne.CanvasObject { 335 | a.mainWin.SetMaster() 336 | // set main mod key to super on darwin hosts, else set it to ctrl 337 | if runtime.GOOS == "darwin" { 338 | a.mainModKey = desktop.SuperModifier 339 | } else { 340 | a.mainModKey = desktop.ControlModifier 341 | } 342 | 343 | // main menu 344 | mainMenu := fyne.NewMainMenu( 345 | fyne.NewMenu("File", 346 | fyne.NewMenuItem("Open", a.openFileDialog), 347 | fyne.NewMenuItem("Save As", a.saveFileDialog), 348 | // recent, 349 | ), 350 | fyne.NewMenu("Edit", 351 | fyne.NewMenuItem("Undo", a.undo), 352 | fyne.NewMenuItem("Redo", a.redo), 353 | fyne.NewMenuItem("Delete Image", a.deleteFile), 354 | fyne.NewMenuItem("Keyboard Shortucts", a.showShortcuts), 355 | fyne.NewMenuItem("Preferences", a.loadSettingsUI), 356 | ), 357 | fyne.NewMenu("View", 358 | fyne.NewMenuItem("Fullscreen", func() { 359 | if a.image.Image == nil { 360 | return 361 | } 362 | a.fullscreenMode() 363 | }), 364 | fyne.NewMenuItem("Next Image", func() { 365 | a.nextImage(true, false) 366 | }), 367 | fyne.NewMenuItem("Last Image", func() { 368 | a.nextImage(false, false) 369 | }), 370 | ), 371 | fyne.NewMenu("Help", 372 | fyne.NewMenuItem("About", func() { 373 | dialog.ShowCustom("About", "Ok", container.NewVBox( 374 | widget.NewLabel("A simple image viewer with some editing functionality."), 375 | widget.NewHyperlink("Help and more information on Github", parseURL("https://github.com/Palexer/image-viewer")), 376 | widget.NewLabel("v1.2 | License: MIT"), 377 | ), a.mainWin) 378 | }), 379 | ), 380 | ) 381 | a.mainWin.SetMainMenu(mainMenu) 382 | a.loadKeyboardShortcuts() 383 | 384 | // image canvas 385 | a.image = &canvas.Image{} 386 | a.image.FillMode = canvas.ImageFillContain 387 | 388 | a.split = container.NewHSplit( 389 | a.image, 390 | container.NewAppTabs( 391 | a.loadInformationTab(), 392 | a.loadEditorTab(), 393 | ), 394 | ) 395 | a.split.SetOffset(0.90) 396 | layout := container.NewBorder(nil, a.loadStatusBar(), nil, nil, a.split) 397 | return layout 398 | } 399 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2021 Palexer 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. -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | 2 | 3 | # Image Viewer 4 | 5 | ## About 6 | 7 | This is a simple image viewer written in Go (and the technologies listed below). 8 | It also includes some basic editing functionality. 9 | Prebuilt packages are currently available for Windows, macOS and Linux [here](https://github.com/Palexer/image-viewer/releases/). 10 | 11 | ## Screenshot 12 | 13 | ![Screenshot](screenshot.png) 14 | 15 | ## Used Tools 16 | 17 | - language: Go 18 | - UI framework: fyne 19 | - image processing backend: gift 20 | - cross compilation: fyne-cross 21 | 22 | ## Installation 23 | 24 | Packages are currently available for Windows, macOS and Linux. 25 | On Windows and macOS, just download the packages from the [releases section](https://github.com/Palexer/image-viewer/releases) 26 | and install it as usual. 27 | 28 | *Note for Mac users: There might be a warning, that the OS doesn't trust the application. In this case press Ctrl+left click on the 29 | application and select open. Next time the app should open like any other program. 30 | 31 | On Linux you'll need download the package from the [releases section](https://github.com/Palexer/image-viewer/releases) too. 32 | Then extract the archive. 33 | To install type (in the folder that contains the Makefile): 34 | 35 | ``` bash 36 | sudo make install 37 | ``` 38 | 39 | To uninstall type: 40 | ``` bash 41 | sudo make uninstall 42 | ``` 43 | 44 | ## Contributing 45 | 46 | 1. Fork this repository to your local machine 47 | 2. Add a new branch, make changes, merge to master branch 48 | 3. Make a pull request 49 | 50 | ## ToDo 51 | 52 | - undo/redo: change parameter values back to default 53 | - open recent images 54 | - write tests 55 | 56 | ## Help 57 | 58 | If you need any help, feel free to open a [new Issue](https://github.com/Palexer/image-viewer/issues/new). 59 | 60 | ## License 61 | 62 | [MIT](LICENSE) 63 | -------------------------------------------------------------------------------- /screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Palexer/image-viewer/a508a64a42558fe13afe93b612601d8f9bb32745/screenshot.png --------------------------------------------------------------------------------