From 071ad6bec53d1ce98f3c0784c5adbc11158ce0bc Mon Sep 17 00:00:00 2001 From: Jeena Date: Mon, 25 Nov 2013 17:16:52 +0100 Subject: [PATCH] added images and texture for gl renderer --- app/Game/Client/GameController.js | 6 + app/Game/Client/View/CameraController.js | 6 +- app/Game/Client/View/ViewController.js | 62 +- app/Game/Config/Settings.js | 2 +- app/Game/Core/Loader/Level.js | 7 +- app/Lib/Vendor/Three/Three.js | 1459 ++++++++--------- static/html/index.html | 2 +- static/img/10.gif | Bin 0 -> 1508 bytes static/img/Characters/Chuck/arm_back_top.png | Bin 0 -> 145 bytes static/img/Characters/Chuck/arm_down_back.png | Bin 0 -> 148 bytes .../img/Characters/Chuck/arm_down_front.png | Bin 0 -> 148 bytes static/img/Characters/Chuck/arm_front_top.png | Bin 0 -> 170 bytes static/img/Characters/Chuck/chest.png | Bin 0 -> 257 bytes static/img/Characters/Chuck/chuck.png | Bin 0 -> 729 bytes static/img/Characters/Chuck/head.png | Bin 0 -> 499 bytes static/img/Characters/Chuck/leg_down.png | Bin 0 -> 158 bytes static/img/Characters/Chuck/leg_top.png | Bin 0 -> 144 bytes static/img/Characters/Chuck/shorts.png | Bin 0 -> 158 bytes .../img/Characters/Chuck/shorts_down_back.png | Bin 0 -> 131 bytes .../Characters/Chuck/shorts_down_front.png | Bin 0 -> 137 bytes static/img/Characters/Chuck/shorts_top.png | Bin 0 -> 152 bytes .../img/Characters/Gogo (Zimbabwe)/chest.gif | Bin 0 -> 222 bytes .../img/Characters/Gogo (Zimbabwe)/foot.gif | Bin 0 -> 58 bytes .../img/Characters/Gogo (Zimbabwe)/hand.gif | Bin 0 -> 82 bytes .../img/Characters/Gogo (Zimbabwe)/head.gif | Bin 0 -> 355 bytes static/img/Characters/Nini (China)/chest.gif | Bin 0 -> 132 bytes static/img/Characters/Nini (China)/foot.gif | Bin 0 -> 60 bytes static/img/Characters/Nini (China)/hand.gif | Bin 0 -> 80 bytes static/img/Characters/Nini (China)/head.gif | Bin 0 -> 196 bytes .../img/Characters/Omma (Germany)/chest.gif | Bin 0 -> 205 bytes static/img/Characters/Omma (Germany)/foot.gif | Bin 0 -> 73 bytes static/img/Characters/Omma (Germany)/hand.gif | Bin 0 -> 82 bytes static/img/Characters/Omma (Germany)/head.gif | Bin 0 -> 260 bytes static/img/Items/kitchen/banana.gif | Bin 0 -> 61 bytes static/img/Items/kitchen/can.gif | Bin 0 -> 153 bytes static/img/Items/kitchen/cleaver_large.gif | Bin 0 -> 104 bytes static/img/Items/kitchen/cleaver_small.gif | Bin 0 -> 92 bytes static/img/Items/kitchen/coffeemachine.gif | Bin 0 -> 145 bytes static/img/Items/kitchen/cup.gif | Bin 0 -> 114 bytes .../img/Items/kitchen/cupboard_dishwasher.gif | Bin 0 -> 227 bytes static/img/Items/kitchen/cupboard_oven.gif | Bin 0 -> 259 bytes static/img/Items/kitchen/cupboard_shelf.gif | Bin 0 -> 210 bytes .../img/Items/kitchen/cupboard_sink_left.gif | Bin 0 -> 233 bytes .../img/Items/kitchen/cupboard_sink_right.gif | Bin 0 -> 233 bytes .../Items/kitchen/cupboard_triple_draw.gif | Bin 0 -> 239 bytes static/img/Items/kitchen/fork.gif | Bin 0 -> 116 bytes static/img/Items/kitchen/fork_meat.gif | Bin 0 -> 117 bytes static/img/Items/kitchen/fridge.gif | Bin 0 -> 238 bytes static/img/Items/kitchen/herb_chopper.gif | Bin 0 -> 85 bytes static/img/Items/kitchen/knife.gif | Bin 0 -> 85 bytes static/img/Items/kitchen/knife_big.gif | Bin 0 -> 297 bytes static/img/Items/kitchen/microwave.gif | Bin 0 -> 342 bytes static/img/Items/kitchen/pan.gif | Bin 0 -> 94 bytes static/img/Items/kitchen/plate.gif | Bin 0 -> 321 bytes static/img/Items/kitchen/rolling_pin.gif | Bin 0 -> 97 bytes static/img/Items/kitchen/spoon.gif | Bin 0 -> 179 bytes static/img/Items/kitchen/table.gif | Bin 0 -> 188 bytes static/img/Items/kitchen/tap.gif | Bin 0 -> 80 bytes static/img/Items/kitchen/tile.gif | Bin 0 -> 72 bytes static/img/Items/kitchen/toaster.gif | Bin 0 -> 95 bytes static/img/Items/kitchen/tomato.gif | Bin 0 -> 79 bytes static/img/Items/kitchen/tong.gif | Bin 0 -> 105 bytes static/img/Items/kitchen/vase.gif | Bin 0 -> 529 bytes static/img/Items/kitchen/window_curtain.gif | Bin 0 -> 2200 bytes static/img/Items/laundry/hamper.gif | Bin 0 -> 643 bytes static/img/Items/laundry/laundry_machine.gif | Bin 0 -> 355 bytes static/img/Items/laundry/laundry_powder.gif | Bin 0 -> 206 bytes static/img/Items/livingroom/book_bible.gif | Bin 0 -> 88 bytes static/img/Items/livingroom/book_blue.gif | Bin 0 -> 88 bytes static/img/Items/livingroom/book_red.gif | Bin 0 -> 85 bytes static/img/Items/livingroom/bookshelf.gif | Bin 0 -> 868 bytes static/img/Items/livingroom/cactus.gif | Bin 0 -> 235 bytes .../Items/livingroom/candleholder_empty.gif | Bin 0 -> 87 bytes .../Items/livingroom/candleholder_full.gif | Bin 0 -> 123 bytes static/img/Items/livingroom/couch.gif | Bin 0 -> 273 bytes static/img/Items/livingroom/flower_pot.gif | Bin 0 -> 120 bytes .../Items/livingroom/flower_pot_triple.gif | Bin 0 -> 161 bytes static/img/Items/livingroom/office_chair.gif | Bin 0 -> 609 bytes static/img/Items/livingroom/piano.gif | Bin 0 -> 2293 bytes static/img/Items/livingroom/picture_omma.gif | Bin 0 -> 462 bytes static/img/Items/livingroom/plant.gif | Bin 0 -> 324 bytes static/img/Items/livingroom/speaker.gif | Bin 0 -> 217 bytes static/img/Items/livingroom/stereo.gif | Bin 0 -> 227 bytes static/img/Items/livingroom/television.gif | Bin 0 -> 192 bytes static/img/Items/livingroom/telly_cabinet.gif | Bin 0 -> 148 bytes static/img/Items/livingroom/tuba.gif | Bin 0 -> 596 bytes static/img/Items/livingroom/ventilator.gif | Bin 0 -> 1081 bytes static/img/Items/outdoor/fence.gif | Bin 0 -> 1708 bytes static/img/Items/outdoor/fence_door.gif | Bin 0 -> 1447 bytes static/img/Tiles/GrassSoil/10.gif | Bin 0 -> 1441 bytes static/img/Tiles/GrassSoil/10c.gif | Bin 0 -> 1410 bytes static/img/Tiles/GrassSoil/13c.gif | Bin 0 -> 1411 bytes static/img/Tiles/GrassSoil/20.gif | Bin 0 -> 1201 bytes static/img/Tiles/GrassSoil/21.gif | Bin 0 -> 1202 bytes static/img/Tiles/GrassSoil/22.gif | Bin 0 -> 1199 bytes static/img/Tiles/GrassSoil/23.gif | Bin 0 -> 1205 bytes static/img/Tiles/GrassSoil/30.gif | Bin 0 -> 635 bytes static/img/Tiles/GrassSoil/31.gif | Bin 0 -> 661 bytes static/img/Tiles/GrassSoil/32.gif | Bin 0 -> 645 bytes static/img/Tiles/GrassSoil/33.gif | Bin 0 -> 630 bytes static/img/Tiles/GrassSoil/40.gif | Bin 0 -> 1330 bytes static/img/Tiles/GrassSoil/41.gif | Bin 0 -> 1321 bytes static/img/Tiles/GrassSoil/42.gif | Bin 0 -> 1330 bytes static/img/Tiles/GrassSoil/43.gif | Bin 0 -> 1310 bytes static/img/Tiles/GrassSoil/43c.gif | Bin 0 -> 1340 bytes static/img/Tiles/GrassSoil/50.gif | Bin 0 -> 637 bytes static/img/Tiles/GrassSoil/51.gif | Bin 0 -> 630 bytes static/img/Tiles/GrassSoil/52.gif | Bin 0 -> 645 bytes static/img/Tiles/GrassSoil/53.gif | Bin 0 -> 661 bytes static/img/Tiles/GrassSoil/60.gif | Bin 0 -> 1331 bytes static/img/Tiles/GrassSoil/61.gif | Bin 0 -> 1311 bytes static/img/Tiles/GrassSoil/61c.gif | Bin 0 -> 1337 bytes static/img/Tiles/GrassSoil/62.gif | Bin 0 -> 1326 bytes static/img/Tiles/GrassSoil/63.gif | Bin 0 -> 1314 bytes static/img/Tiles/GrassSoil/70.gif | Bin 0 -> 336 bytes static/img/Tiles/GrassSoil/71.gif | Bin 0 -> 354 bytes static/img/Tiles/GrassSoil/72.gif | Bin 0 -> 356 bytes static/img/Tiles/GrassSoil/73.gif | Bin 0 -> 336 bytes static/img/Tiles/GrassSoil/80.gif | Bin 0 -> 1365 bytes static/img/Tiles/GrassSoil/81.gif | Bin 0 -> 1432 bytes static/img/Tiles/GrassSoil/82.gif | Bin 0 -> 1432 bytes static/img/Tiles/GrassSoil/83.gif | Bin 0 -> 1365 bytes static/img/Tiles/Metal/10.gif | Bin 0 -> 1086 bytes static/img/Tiles/Metal/20.gif | Bin 0 -> 873 bytes static/img/Tiles/Metal/21.gif | Bin 0 -> 834 bytes static/img/Tiles/Metal/22.gif | Bin 0 -> 884 bytes static/img/Tiles/Metal/23.gif | Bin 0 -> 888 bytes static/img/Tiles/Metal/30.gif | Bin 0 -> 701 bytes static/img/Tiles/Metal/31.gif | Bin 0 -> 661 bytes static/img/Tiles/Metal/32.gif | Bin 0 -> 717 bytes static/img/Tiles/Metal/33.gif | Bin 0 -> 700 bytes static/img/Tiles/Metal/40.gif | Bin 0 -> 1017 bytes static/img/Tiles/Metal/41.gif | Bin 0 -> 982 bytes static/img/Tiles/Metal/42.gif | Bin 0 -> 999 bytes static/img/Tiles/Metal/43.gif | Bin 0 -> 1020 bytes static/img/Tiles/Metal/50.gif | Bin 0 -> 717 bytes static/img/Tiles/Metal/51.gif | Bin 0 -> 701 bytes static/img/Tiles/Metal/52.gif | Bin 0 -> 672 bytes static/img/Tiles/Metal/53.gif | Bin 0 -> 694 bytes static/img/Tiles/Metal/60.gif | Bin 0 -> 1431 bytes static/img/Tiles/Metal/61.gif | Bin 0 -> 1005 bytes static/img/Tiles/Metal/62.gif | Bin 0 -> 964 bytes static/img/Tiles/Metal/63.gif | Bin 0 -> 1036 bytes static/img/Tiles/Metal/70.gif | Bin 0 -> 379 bytes static/img/Tiles/Metal/71.gif | Bin 0 -> 396 bytes static/img/Tiles/Metal/72.gif | Bin 0 -> 606 bytes static/img/Tiles/Metal/73.gif | Bin 0 -> 399 bytes static/img/Tiles/Metal/80.gif | Bin 0 -> 1066 bytes static/img/Tiles/Metal/81.gif | Bin 0 -> 1049 bytes static/img/Tiles/Metal/82.gif | Bin 0 -> 1062 bytes static/img/Tiles/Metal/83.gif | Bin 0 -> 1077 bytes static/img/Tiles/Metal3/10.gif | Bin 0 -> 1005 bytes static/img/Tiles/Metal3/20.gif | Bin 0 -> 790 bytes static/img/Tiles/Metal3/21.gif | Bin 0 -> 784 bytes static/img/Tiles/Metal3/22.gif | Bin 0 -> 780 bytes static/img/Tiles/Metal3/23.gif | Bin 0 -> 798 bytes static/img/Tiles/Metal3/30.gif | Bin 0 -> 636 bytes static/img/Tiles/Metal3/31.gif | Bin 0 -> 625 bytes static/img/Tiles/Metal3/32.gif | Bin 0 -> 641 bytes static/img/Tiles/Metal3/33.gif | Bin 0 -> 633 bytes static/img/Tiles/Metal3/40.gif | Bin 0 -> 898 bytes static/img/Tiles/Metal3/41.gif | Bin 0 -> 901 bytes static/img/Tiles/Metal3/42.gif | Bin 0 -> 898 bytes static/img/Tiles/Metal3/43.gif | Bin 0 -> 920 bytes static/img/Tiles/Metal3/50.gif | Bin 0 -> 635 bytes static/img/Tiles/Metal3/51.gif | Bin 0 -> 632 bytes static/img/Tiles/Metal3/52.gif | Bin 0 -> 646 bytes static/img/Tiles/Metal3/53.gif | Bin 0 -> 626 bytes static/img/Tiles/Metal3/60.gif | Bin 0 -> 921 bytes static/img/Tiles/Metal3/61.gif | Bin 0 -> 900 bytes static/img/Tiles/Metal3/62.gif | Bin 0 -> 884 bytes static/img/Tiles/Metal3/63.gif | Bin 0 -> 905 bytes static/img/Tiles/Metal3/70.gif | Bin 0 -> 350 bytes static/img/Tiles/Metal3/71.gif | Bin 0 -> 351 bytes static/img/Tiles/Metal3/72.gif | Bin 0 -> 550 bytes static/img/Tiles/Metal3/73.gif | Bin 0 -> 549 bytes static/img/Tiles/Metal3/80.gif | Bin 0 -> 970 bytes static/img/Tiles/Metal3/81.gif | Bin 0 -> 975 bytes static/img/Tiles/Metal3/82.gif | Bin 0 -> 960 bytes static/img/Tiles/Metal3/83.gif | Bin 0 -> 969 bytes static/img/Tiles/Rock/10.gif | Bin 0 -> 823 bytes static/img/Tiles/Rock/20.gif | Bin 0 -> 588 bytes static/img/Tiles/Rock/21.gif | Bin 0 -> 582 bytes static/img/Tiles/Rock/22.gif | Bin 0 -> 596 bytes static/img/Tiles/Rock/23.gif | Bin 0 -> 583 bytes static/img/Tiles/Rock/30.gif | Bin 0 -> 433 bytes static/img/Tiles/Rock/31.gif | Bin 0 -> 422 bytes static/img/Tiles/Rock/32.gif | Bin 0 -> 437 bytes static/img/Tiles/Rock/33.gif | Bin 0 -> 422 bytes static/img/Tiles/Rock/40.gif | Bin 0 -> 713 bytes static/img/Tiles/Rock/41.gif | Bin 0 -> 717 bytes static/img/Tiles/Rock/42.gif | Bin 0 -> 704 bytes static/img/Tiles/Rock/43.gif | Bin 0 -> 715 bytes static/img/Tiles/Rock/50.gif | Bin 0 -> 428 bytes static/img/Tiles/Rock/51.gif | Bin 0 -> 416 bytes static/img/Tiles/Rock/52.gif | Bin 0 -> 436 bytes static/img/Tiles/Rock/53.gif | Bin 0 -> 420 bytes static/img/Tiles/Rock/60.gif | Bin 0 -> 709 bytes static/img/Tiles/Rock/61.gif | Bin 0 -> 714 bytes static/img/Tiles/Rock/62.gif | Bin 0 -> 698 bytes static/img/Tiles/Rock/63.gif | Bin 0 -> 720 bytes static/img/Tiles/Rock/70.gif | Bin 0 -> 351 bytes static/img/Tiles/Rock/71.gif | Bin 0 -> 351 bytes static/img/Tiles/Rock/72.gif | Bin 0 -> 348 bytes static/img/Tiles/Rock/73.gif | Bin 0 -> 349 bytes static/img/Tiles/Rock/80.gif | Bin 0 -> 791 bytes static/img/Tiles/Rock/81.gif | Bin 0 -> 791 bytes static/img/Tiles/Rock/82.gif | Bin 0 -> 791 bytes static/img/Tiles/Rock/83.gif | Bin 0 -> 791 bytes static/img/Tiles/Rooftop/10.gif | Bin 0 -> 705 bytes static/img/Tiles/Rooftop/20.gif | Bin 0 -> 537 bytes static/img/Tiles/Rooftop/21.gif | Bin 0 -> 527 bytes static/img/Tiles/Rooftop/22.gif | Bin 0 -> 527 bytes static/img/Tiles/Rooftop/23.gif | Bin 0 -> 531 bytes static/img/Tiles/Rooftop/30.gif | Bin 0 -> 405 bytes static/img/Tiles/Rooftop/31.gif | Bin 0 -> 398 bytes static/img/Tiles/Rooftop/32.gif | Bin 0 -> 408 bytes static/img/Tiles/Rooftop/33.gif | Bin 0 -> 400 bytes static/img/Tiles/Rooftop/40.gif | Bin 0 -> 635 bytes static/img/Tiles/Rooftop/41.gif | Bin 0 -> 634 bytes static/img/Tiles/Rooftop/42.gif | Bin 0 -> 617 bytes static/img/Tiles/Rooftop/43.gif | Bin 0 -> 640 bytes static/img/Tiles/Rooftop/50.gif | Bin 0 -> 410 bytes static/img/Tiles/Rooftop/51.gif | Bin 0 -> 399 bytes static/img/Tiles/Rooftop/52.gif | Bin 0 -> 414 bytes static/img/Tiles/Rooftop/53.gif | Bin 0 -> 400 bytes static/img/Tiles/Rooftop/60.gif | Bin 0 -> 624 bytes static/img/Tiles/Rooftop/61.gif | Bin 0 -> 643 bytes static/img/Tiles/Rooftop/62.gif | Bin 0 -> 619 bytes static/img/Tiles/Rooftop/63.gif | Bin 0 -> 623 bytes static/img/Tiles/Rooftop/70.gif | Bin 0 -> 342 bytes static/img/Tiles/Rooftop/71.gif | Bin 0 -> 346 bytes static/img/Tiles/Rooftop/72.gif | Bin 0 -> 340 bytes static/img/Tiles/Rooftop/73.gif | Bin 0 -> 236 bytes static/img/Tiles/Rooftop/80.gif | Bin 0 -> 672 bytes static/img/Tiles/Rooftop/81.gif | Bin 0 -> 675 bytes static/img/Tiles/Rooftop/82.gif | Bin 0 -> 666 bytes static/img/Tiles/Rooftop/83.gif | Bin 0 -> 677 bytes static/img/Tiles/Soil/10.gif | Bin 0 -> 976 bytes static/img/Tiles/Soil/20.gif | Bin 0 -> 791 bytes static/img/Tiles/Soil/21.gif | Bin 0 -> 787 bytes static/img/Tiles/Soil/22.gif | Bin 0 -> 797 bytes static/img/Tiles/Soil/23.gif | Bin 0 -> 779 bytes static/img/Tiles/Soil/30.gif | Bin 0 -> 634 bytes static/img/Tiles/Soil/31.gif | Bin 0 -> 634 bytes static/img/Tiles/Soil/32.gif | Bin 0 -> 640 bytes static/img/Tiles/Soil/33.gif | Bin 0 -> 632 bytes static/img/Tiles/Soil/40.gif | Bin 0 -> 861 bytes static/img/Tiles/Soil/41.gif | Bin 0 -> 880 bytes static/img/Tiles/Soil/42.gif | Bin 0 -> 856 bytes static/img/Tiles/Soil/43.gif | Bin 0 -> 875 bytes static/img/Tiles/Soil/50.gif | Bin 0 -> 633 bytes static/img/Tiles/Soil/51.gif | Bin 0 -> 632 bytes static/img/Tiles/Soil/52.gif | Bin 0 -> 636 bytes static/img/Tiles/Soil/53.gif | Bin 0 -> 633 bytes static/img/Tiles/Soil/60.gif | Bin 0 -> 858 bytes static/img/Tiles/Soil/61.gif | Bin 0 -> 878 bytes static/img/Tiles/Soil/62.gif | Bin 0 -> 854 bytes static/img/Tiles/Soil/63.gif | Bin 0 -> 881 bytes static/img/Tiles/Soil/70.gif | Bin 0 -> 346 bytes static/img/Tiles/Soil/71.gif | Bin 0 -> 352 bytes static/img/Tiles/Soil/72.gif | Bin 0 -> 344 bytes static/img/Tiles/Soil/73.gif | Bin 0 -> 344 bytes static/img/Tiles/Soil/80.gif | Bin 0 -> 932 bytes static/img/Tiles/Soil/81.gif | Bin 0 -> 941 bytes static/img/Tiles/Soil/82.gif | Bin 0 -> 936 bytes static/img/Tiles/Soil/83.gif | Bin 0 -> 947 bytes static/img/Tiles/Stones/10.gif | Bin 0 -> 1508 bytes static/img/Tiles/Stones/20.gif | Bin 0 -> 802 bytes static/img/Tiles/Stones/21.gif | Bin 0 -> 808 bytes static/img/Tiles/Stones/22.gif | Bin 0 -> 813 bytes static/img/Tiles/Stones/23.gif | Bin 0 -> 806 bytes static/img/Tiles/Stones/30.gif | Bin 0 -> 637 bytes static/img/Tiles/Stones/31.gif | Bin 0 -> 636 bytes static/img/Tiles/Stones/32.gif | Bin 0 -> 646 bytes static/img/Tiles/Stones/33.gif | Bin 0 -> 630 bytes static/img/Tiles/Stones/40.gif | Bin 0 -> 951 bytes static/img/Tiles/Stones/41.gif | Bin 0 -> 971 bytes static/img/Tiles/Stones/42.gif | Bin 0 -> 959 bytes static/img/Tiles/Stones/43.gif | Bin 0 -> 971 bytes static/img/Tiles/Stones/50.gif | Bin 0 -> 643 bytes static/img/Tiles/Stones/51.gif | Bin 0 -> 631 bytes static/img/Tiles/Stones/52.gif | Bin 0 -> 645 bytes static/img/Tiles/Stones/53.gif | Bin 0 -> 636 bytes static/img/Tiles/Stones/60.gif | Bin 0 -> 957 bytes static/img/Tiles/Stones/61.gif | Bin 0 -> 962 bytes static/img/Tiles/Stones/62.gif | Bin 0 -> 952 bytes static/img/Tiles/Stones/63.gif | Bin 0 -> 980 bytes static/img/Tiles/Stones/70.gif | Bin 0 -> 353 bytes static/img/Tiles/Stones/71.gif | Bin 0 -> 354 bytes static/img/Tiles/Stones/72.gif | Bin 0 -> 349 bytes static/img/Tiles/Stones/73.gif | Bin 0 -> 349 bytes static/img/Tiles/Stones/80.gif | Bin 0 -> 1463 bytes static/img/Tiles/Stones/81.gif | Bin 0 -> 1045 bytes static/img/Tiles/Stones/82.gif | Bin 0 -> 1466 bytes static/img/Tiles/Stones/83.gif | Bin 0 -> 1047 bytes static/img/Tiles/Wood/10.gif | Bin 0 -> 1318 bytes static/img/Tiles/Wood/20.gif | Bin 0 -> 1221 bytes static/img/Tiles/Wood/21.gif | Bin 0 -> 1210 bytes static/img/Tiles/Wood/22.gif | Bin 0 -> 1215 bytes static/img/Tiles/Wood/23.gif | Bin 0 -> 1211 bytes static/img/Tiles/Wood/30.gif | Bin 0 -> 642 bytes static/img/Tiles/Wood/31.gif | Bin 0 -> 636 bytes static/img/Tiles/Wood/32.gif | Bin 0 -> 641 bytes static/img/Tiles/Wood/33.gif | Bin 0 -> 633 bytes static/img/Tiles/Wood/40.gif | Bin 0 -> 1368 bytes static/img/Tiles/Wood/41.gif | Bin 0 -> 1377 bytes static/img/Tiles/Wood/42.gif | Bin 0 -> 1367 bytes static/img/Tiles/Wood/43.gif | Bin 0 -> 1367 bytes static/img/Tiles/Wood/50.gif | Bin 0 -> 636 bytes static/img/Tiles/Wood/51.gif | Bin 0 -> 632 bytes static/img/Tiles/Wood/52.gif | Bin 0 -> 643 bytes static/img/Tiles/Wood/53.gif | Bin 0 -> 632 bytes static/img/Tiles/Wood/60.gif | Bin 0 -> 1367 bytes static/img/Tiles/Wood/61.gif | Bin 0 -> 1387 bytes static/img/Tiles/Wood/62.gif | Bin 0 -> 1361 bytes static/img/Tiles/Wood/63.gif | Bin 0 -> 1371 bytes static/img/Tiles/Wood/70.gif | Bin 0 -> 551 bytes static/img/Tiles/Wood/71.gif | Bin 0 -> 350 bytes static/img/Tiles/Wood/72.gif | Bin 0 -> 348 bytes static/img/Tiles/Wood/73.gif | Bin 0 -> 547 bytes static/img/Tiles/Wood/80.gif | Bin 0 -> 1450 bytes static/img/Tiles/Wood/81.gif | Bin 0 -> 1462 bytes static/img/Tiles/Wood/82.gif | Bin 0 -> 1442 bytes static/img/Tiles/Wood/83.gif | Bin 0 -> 1446 bytes static/img/Tiles/metalpattern.gif | Bin 0 -> 676 bytes static/img/Tiles/metaltest.psd | Bin 0 -> 28069 bytes static/img/Tiles/smallrooftoppattern.gif | Bin 0 -> 157 bytes static/img/Tiles/stony2pattern.gif | Bin 0 -> 1515 bytes static/img/Tiles/woodpattern.gif | Bin 0 -> 1284 bytes static/img/Weapons/elegtro_maknetizer.png | Bin 0 -> 414 bytes static/img/Weapons/hook_gun.png | Bin 0 -> 436 bytes 332 files changed, 754 insertions(+), 790 deletions(-) create mode 100644 static/img/10.gif create mode 100644 static/img/Characters/Chuck/arm_back_top.png create mode 100644 static/img/Characters/Chuck/arm_down_back.png create mode 100644 static/img/Characters/Chuck/arm_down_front.png create mode 100644 static/img/Characters/Chuck/arm_front_top.png create mode 100644 static/img/Characters/Chuck/chest.png create mode 100644 static/img/Characters/Chuck/chuck.png create mode 100644 static/img/Characters/Chuck/head.png create mode 100644 static/img/Characters/Chuck/leg_down.png create mode 100644 static/img/Characters/Chuck/leg_top.png create mode 100644 static/img/Characters/Chuck/shorts.png create mode 100644 static/img/Characters/Chuck/shorts_down_back.png create mode 100644 static/img/Characters/Chuck/shorts_down_front.png create mode 100644 static/img/Characters/Chuck/shorts_top.png create mode 100644 static/img/Characters/Gogo (Zimbabwe)/chest.gif create mode 100644 static/img/Characters/Gogo (Zimbabwe)/foot.gif create mode 100644 static/img/Characters/Gogo (Zimbabwe)/hand.gif create mode 100644 static/img/Characters/Gogo (Zimbabwe)/head.gif create mode 100644 static/img/Characters/Nini (China)/chest.gif create mode 100644 static/img/Characters/Nini (China)/foot.gif create mode 100644 static/img/Characters/Nini (China)/hand.gif create mode 100644 static/img/Characters/Nini (China)/head.gif create mode 100644 static/img/Characters/Omma (Germany)/chest.gif create mode 100644 static/img/Characters/Omma (Germany)/foot.gif create mode 100644 static/img/Characters/Omma (Germany)/hand.gif create mode 100644 static/img/Characters/Omma (Germany)/head.gif create mode 100644 static/img/Items/kitchen/banana.gif create mode 100644 static/img/Items/kitchen/can.gif create mode 100644 static/img/Items/kitchen/cleaver_large.gif create mode 100644 static/img/Items/kitchen/cleaver_small.gif create mode 100644 static/img/Items/kitchen/coffeemachine.gif create mode 100644 static/img/Items/kitchen/cup.gif create mode 100644 static/img/Items/kitchen/cupboard_dishwasher.gif create mode 100644 static/img/Items/kitchen/cupboard_oven.gif create mode 100644 static/img/Items/kitchen/cupboard_shelf.gif create mode 100644 static/img/Items/kitchen/cupboard_sink_left.gif create mode 100644 static/img/Items/kitchen/cupboard_sink_right.gif create mode 100644 static/img/Items/kitchen/cupboard_triple_draw.gif create mode 100644 static/img/Items/kitchen/fork.gif create mode 100644 static/img/Items/kitchen/fork_meat.gif create mode 100644 static/img/Items/kitchen/fridge.gif create mode 100644 static/img/Items/kitchen/herb_chopper.gif create mode 100644 static/img/Items/kitchen/knife.gif create mode 100644 static/img/Items/kitchen/knife_big.gif create mode 100644 static/img/Items/kitchen/microwave.gif create mode 100644 static/img/Items/kitchen/pan.gif create mode 100644 static/img/Items/kitchen/plate.gif create mode 100644 static/img/Items/kitchen/rolling_pin.gif create mode 100644 static/img/Items/kitchen/spoon.gif create mode 100644 static/img/Items/kitchen/table.gif create mode 100644 static/img/Items/kitchen/tap.gif create mode 100644 static/img/Items/kitchen/tile.gif create mode 100644 static/img/Items/kitchen/toaster.gif create mode 100644 static/img/Items/kitchen/tomato.gif create mode 100644 static/img/Items/kitchen/tong.gif create mode 100644 static/img/Items/kitchen/vase.gif create mode 100644 static/img/Items/kitchen/window_curtain.gif create mode 100644 static/img/Items/laundry/hamper.gif create mode 100644 static/img/Items/laundry/laundry_machine.gif create mode 100644 static/img/Items/laundry/laundry_powder.gif create mode 100644 static/img/Items/livingroom/book_bible.gif create mode 100644 static/img/Items/livingroom/book_blue.gif create mode 100644 static/img/Items/livingroom/book_red.gif create mode 100644 static/img/Items/livingroom/bookshelf.gif create mode 100644 static/img/Items/livingroom/cactus.gif create mode 100644 static/img/Items/livingroom/candleholder_empty.gif create mode 100644 static/img/Items/livingroom/candleholder_full.gif create mode 100644 static/img/Items/livingroom/couch.gif create mode 100644 static/img/Items/livingroom/flower_pot.gif create mode 100644 static/img/Items/livingroom/flower_pot_triple.gif create mode 100644 static/img/Items/livingroom/office_chair.gif create mode 100644 static/img/Items/livingroom/piano.gif create mode 100644 static/img/Items/livingroom/picture_omma.gif create mode 100644 static/img/Items/livingroom/plant.gif create mode 100644 static/img/Items/livingroom/speaker.gif create mode 100644 static/img/Items/livingroom/stereo.gif create mode 100644 static/img/Items/livingroom/television.gif create mode 100644 static/img/Items/livingroom/telly_cabinet.gif create mode 100644 static/img/Items/livingroom/tuba.gif create mode 100644 static/img/Items/livingroom/ventilator.gif create mode 100644 static/img/Items/outdoor/fence.gif create mode 100644 static/img/Items/outdoor/fence_door.gif create mode 100644 static/img/Tiles/GrassSoil/10.gif create mode 100644 static/img/Tiles/GrassSoil/10c.gif create mode 100644 static/img/Tiles/GrassSoil/13c.gif create mode 100644 static/img/Tiles/GrassSoil/20.gif create mode 100644 static/img/Tiles/GrassSoil/21.gif create mode 100644 static/img/Tiles/GrassSoil/22.gif create mode 100644 static/img/Tiles/GrassSoil/23.gif create mode 100644 static/img/Tiles/GrassSoil/30.gif create mode 100644 static/img/Tiles/GrassSoil/31.gif create mode 100644 static/img/Tiles/GrassSoil/32.gif create mode 100644 static/img/Tiles/GrassSoil/33.gif create mode 100644 static/img/Tiles/GrassSoil/40.gif create mode 100644 static/img/Tiles/GrassSoil/41.gif create mode 100644 static/img/Tiles/GrassSoil/42.gif create mode 100644 static/img/Tiles/GrassSoil/43.gif create mode 100644 static/img/Tiles/GrassSoil/43c.gif create mode 100644 static/img/Tiles/GrassSoil/50.gif create mode 100644 static/img/Tiles/GrassSoil/51.gif create mode 100644 static/img/Tiles/GrassSoil/52.gif create mode 100644 static/img/Tiles/GrassSoil/53.gif create mode 100644 static/img/Tiles/GrassSoil/60.gif create mode 100644 static/img/Tiles/GrassSoil/61.gif create mode 100644 static/img/Tiles/GrassSoil/61c.gif create mode 100644 static/img/Tiles/GrassSoil/62.gif create mode 100644 static/img/Tiles/GrassSoil/63.gif create mode 100644 static/img/Tiles/GrassSoil/70.gif create mode 100644 static/img/Tiles/GrassSoil/71.gif create mode 100644 static/img/Tiles/GrassSoil/72.gif create mode 100644 static/img/Tiles/GrassSoil/73.gif create mode 100644 static/img/Tiles/GrassSoil/80.gif create mode 100644 static/img/Tiles/GrassSoil/81.gif create mode 100644 static/img/Tiles/GrassSoil/82.gif create mode 100644 static/img/Tiles/GrassSoil/83.gif create mode 100644 static/img/Tiles/Metal/10.gif create mode 100644 static/img/Tiles/Metal/20.gif create mode 100644 static/img/Tiles/Metal/21.gif create mode 100644 static/img/Tiles/Metal/22.gif create mode 100644 static/img/Tiles/Metal/23.gif create mode 100644 static/img/Tiles/Metal/30.gif create mode 100644 static/img/Tiles/Metal/31.gif create mode 100644 static/img/Tiles/Metal/32.gif create mode 100644 static/img/Tiles/Metal/33.gif create mode 100644 static/img/Tiles/Metal/40.gif create mode 100644 static/img/Tiles/Metal/41.gif create mode 100644 static/img/Tiles/Metal/42.gif create mode 100644 static/img/Tiles/Metal/43.gif create mode 100644 static/img/Tiles/Metal/50.gif create mode 100644 static/img/Tiles/Metal/51.gif create mode 100644 static/img/Tiles/Metal/52.gif create mode 100644 static/img/Tiles/Metal/53.gif create mode 100644 static/img/Tiles/Metal/60.gif create mode 100644 static/img/Tiles/Metal/61.gif create mode 100644 static/img/Tiles/Metal/62.gif create mode 100644 static/img/Tiles/Metal/63.gif create mode 100644 static/img/Tiles/Metal/70.gif create mode 100644 static/img/Tiles/Metal/71.gif create mode 100644 static/img/Tiles/Metal/72.gif create mode 100644 static/img/Tiles/Metal/73.gif create mode 100644 static/img/Tiles/Metal/80.gif create mode 100644 static/img/Tiles/Metal/81.gif create mode 100644 static/img/Tiles/Metal/82.gif create mode 100644 static/img/Tiles/Metal/83.gif create mode 100644 static/img/Tiles/Metal3/10.gif create mode 100644 static/img/Tiles/Metal3/20.gif create mode 100644 static/img/Tiles/Metal3/21.gif create mode 100644 static/img/Tiles/Metal3/22.gif create mode 100644 static/img/Tiles/Metal3/23.gif create mode 100644 static/img/Tiles/Metal3/30.gif create mode 100644 static/img/Tiles/Metal3/31.gif create mode 100644 static/img/Tiles/Metal3/32.gif create mode 100644 static/img/Tiles/Metal3/33.gif create mode 100644 static/img/Tiles/Metal3/40.gif create mode 100644 static/img/Tiles/Metal3/41.gif create mode 100644 static/img/Tiles/Metal3/42.gif create mode 100644 static/img/Tiles/Metal3/43.gif create mode 100644 static/img/Tiles/Metal3/50.gif create mode 100644 static/img/Tiles/Metal3/51.gif create mode 100644 static/img/Tiles/Metal3/52.gif create mode 100644 static/img/Tiles/Metal3/53.gif create mode 100644 static/img/Tiles/Metal3/60.gif create mode 100644 static/img/Tiles/Metal3/61.gif create mode 100644 static/img/Tiles/Metal3/62.gif create mode 100644 static/img/Tiles/Metal3/63.gif create mode 100644 static/img/Tiles/Metal3/70.gif create mode 100644 static/img/Tiles/Metal3/71.gif create mode 100644 static/img/Tiles/Metal3/72.gif create mode 100644 static/img/Tiles/Metal3/73.gif create mode 100644 static/img/Tiles/Metal3/80.gif create mode 100644 static/img/Tiles/Metal3/81.gif create mode 100644 static/img/Tiles/Metal3/82.gif create mode 100644 static/img/Tiles/Metal3/83.gif create mode 100644 static/img/Tiles/Rock/10.gif create mode 100644 static/img/Tiles/Rock/20.gif create mode 100644 static/img/Tiles/Rock/21.gif create mode 100644 static/img/Tiles/Rock/22.gif create mode 100644 static/img/Tiles/Rock/23.gif create mode 100644 static/img/Tiles/Rock/30.gif create mode 100644 static/img/Tiles/Rock/31.gif create mode 100644 static/img/Tiles/Rock/32.gif create mode 100644 static/img/Tiles/Rock/33.gif create mode 100644 static/img/Tiles/Rock/40.gif create mode 100644 static/img/Tiles/Rock/41.gif create mode 100644 static/img/Tiles/Rock/42.gif create mode 100644 static/img/Tiles/Rock/43.gif create mode 100644 static/img/Tiles/Rock/50.gif create mode 100644 static/img/Tiles/Rock/51.gif create mode 100644 static/img/Tiles/Rock/52.gif create mode 100644 static/img/Tiles/Rock/53.gif create mode 100644 static/img/Tiles/Rock/60.gif create mode 100644 static/img/Tiles/Rock/61.gif create mode 100644 static/img/Tiles/Rock/62.gif create mode 100644 static/img/Tiles/Rock/63.gif create mode 100644 static/img/Tiles/Rock/70.gif create mode 100644 static/img/Tiles/Rock/71.gif create mode 100644 static/img/Tiles/Rock/72.gif create mode 100644 static/img/Tiles/Rock/73.gif create mode 100644 static/img/Tiles/Rock/80.gif create mode 100644 static/img/Tiles/Rock/81.gif create mode 100644 static/img/Tiles/Rock/82.gif create mode 100644 static/img/Tiles/Rock/83.gif create mode 100644 static/img/Tiles/Rooftop/10.gif create mode 100644 static/img/Tiles/Rooftop/20.gif create mode 100644 static/img/Tiles/Rooftop/21.gif create mode 100644 static/img/Tiles/Rooftop/22.gif create mode 100644 static/img/Tiles/Rooftop/23.gif create mode 100644 static/img/Tiles/Rooftop/30.gif create mode 100644 static/img/Tiles/Rooftop/31.gif create mode 100644 static/img/Tiles/Rooftop/32.gif create mode 100644 static/img/Tiles/Rooftop/33.gif create mode 100644 static/img/Tiles/Rooftop/40.gif create mode 100644 static/img/Tiles/Rooftop/41.gif create mode 100644 static/img/Tiles/Rooftop/42.gif create mode 100644 static/img/Tiles/Rooftop/43.gif create mode 100644 static/img/Tiles/Rooftop/50.gif create mode 100644 static/img/Tiles/Rooftop/51.gif create mode 100644 static/img/Tiles/Rooftop/52.gif create mode 100644 static/img/Tiles/Rooftop/53.gif create mode 100644 static/img/Tiles/Rooftop/60.gif create mode 100644 static/img/Tiles/Rooftop/61.gif create mode 100644 static/img/Tiles/Rooftop/62.gif create mode 100644 static/img/Tiles/Rooftop/63.gif create mode 100644 static/img/Tiles/Rooftop/70.gif create mode 100644 static/img/Tiles/Rooftop/71.gif create mode 100644 static/img/Tiles/Rooftop/72.gif create mode 100644 static/img/Tiles/Rooftop/73.gif create mode 100644 static/img/Tiles/Rooftop/80.gif create mode 100644 static/img/Tiles/Rooftop/81.gif create mode 100644 static/img/Tiles/Rooftop/82.gif create mode 100644 static/img/Tiles/Rooftop/83.gif create mode 100644 static/img/Tiles/Soil/10.gif create mode 100644 static/img/Tiles/Soil/20.gif create mode 100644 static/img/Tiles/Soil/21.gif create mode 100644 static/img/Tiles/Soil/22.gif create mode 100644 static/img/Tiles/Soil/23.gif create mode 100644 static/img/Tiles/Soil/30.gif create mode 100644 static/img/Tiles/Soil/31.gif create mode 100644 static/img/Tiles/Soil/32.gif create mode 100644 static/img/Tiles/Soil/33.gif create mode 100644 static/img/Tiles/Soil/40.gif create mode 100644 static/img/Tiles/Soil/41.gif create mode 100644 static/img/Tiles/Soil/42.gif create mode 100644 static/img/Tiles/Soil/43.gif create mode 100644 static/img/Tiles/Soil/50.gif create mode 100644 static/img/Tiles/Soil/51.gif create mode 100644 static/img/Tiles/Soil/52.gif create mode 100644 static/img/Tiles/Soil/53.gif create mode 100644 static/img/Tiles/Soil/60.gif create mode 100644 static/img/Tiles/Soil/61.gif create mode 100644 static/img/Tiles/Soil/62.gif create mode 100644 static/img/Tiles/Soil/63.gif create mode 100644 static/img/Tiles/Soil/70.gif create mode 100644 static/img/Tiles/Soil/71.gif create mode 100644 static/img/Tiles/Soil/72.gif create mode 100644 static/img/Tiles/Soil/73.gif create mode 100644 static/img/Tiles/Soil/80.gif create mode 100644 static/img/Tiles/Soil/81.gif create mode 100644 static/img/Tiles/Soil/82.gif create mode 100644 static/img/Tiles/Soil/83.gif create mode 100644 static/img/Tiles/Stones/10.gif create mode 100644 static/img/Tiles/Stones/20.gif create mode 100644 static/img/Tiles/Stones/21.gif create mode 100644 static/img/Tiles/Stones/22.gif create mode 100644 static/img/Tiles/Stones/23.gif create mode 100644 static/img/Tiles/Stones/30.gif create mode 100644 static/img/Tiles/Stones/31.gif create mode 100644 static/img/Tiles/Stones/32.gif create mode 100644 static/img/Tiles/Stones/33.gif create mode 100644 static/img/Tiles/Stones/40.gif create mode 100644 static/img/Tiles/Stones/41.gif create mode 100644 static/img/Tiles/Stones/42.gif create mode 100644 static/img/Tiles/Stones/43.gif create mode 100644 static/img/Tiles/Stones/50.gif create mode 100644 static/img/Tiles/Stones/51.gif create mode 100644 static/img/Tiles/Stones/52.gif create mode 100644 static/img/Tiles/Stones/53.gif create mode 100644 static/img/Tiles/Stones/60.gif create mode 100644 static/img/Tiles/Stones/61.gif create mode 100644 static/img/Tiles/Stones/62.gif create mode 100644 static/img/Tiles/Stones/63.gif create mode 100644 static/img/Tiles/Stones/70.gif create mode 100644 static/img/Tiles/Stones/71.gif create mode 100644 static/img/Tiles/Stones/72.gif create mode 100644 static/img/Tiles/Stones/73.gif create mode 100644 static/img/Tiles/Stones/80.gif create mode 100644 static/img/Tiles/Stones/81.gif create mode 100644 static/img/Tiles/Stones/82.gif create mode 100644 static/img/Tiles/Stones/83.gif create mode 100644 static/img/Tiles/Wood/10.gif create mode 100644 static/img/Tiles/Wood/20.gif create mode 100644 static/img/Tiles/Wood/21.gif create mode 100644 static/img/Tiles/Wood/22.gif create mode 100644 static/img/Tiles/Wood/23.gif create mode 100644 static/img/Tiles/Wood/30.gif create mode 100644 static/img/Tiles/Wood/31.gif create mode 100644 static/img/Tiles/Wood/32.gif create mode 100644 static/img/Tiles/Wood/33.gif create mode 100644 static/img/Tiles/Wood/40.gif create mode 100644 static/img/Tiles/Wood/41.gif create mode 100644 static/img/Tiles/Wood/42.gif create mode 100644 static/img/Tiles/Wood/43.gif create mode 100644 static/img/Tiles/Wood/50.gif create mode 100644 static/img/Tiles/Wood/51.gif create mode 100644 static/img/Tiles/Wood/52.gif create mode 100644 static/img/Tiles/Wood/53.gif create mode 100644 static/img/Tiles/Wood/60.gif create mode 100644 static/img/Tiles/Wood/61.gif create mode 100644 static/img/Tiles/Wood/62.gif create mode 100644 static/img/Tiles/Wood/63.gif create mode 100644 static/img/Tiles/Wood/70.gif create mode 100644 static/img/Tiles/Wood/71.gif create mode 100644 static/img/Tiles/Wood/72.gif create mode 100644 static/img/Tiles/Wood/73.gif create mode 100644 static/img/Tiles/Wood/80.gif create mode 100644 static/img/Tiles/Wood/81.gif create mode 100644 static/img/Tiles/Wood/82.gif create mode 100644 static/img/Tiles/Wood/83.gif create mode 100644 static/img/Tiles/metalpattern.gif create mode 100644 static/img/Tiles/metaltest.psd create mode 100644 static/img/Tiles/smallrooftoppattern.gif create mode 100644 static/img/Tiles/stony2pattern.gif create mode 100644 static/img/Tiles/woodpattern.gif create mode 100644 static/img/Weapons/elegtro_maknetizer.png create mode 100644 static/img/Weapons/hook_gun.png diff --git a/app/Game/Client/GameController.js b/app/Game/Client/GameController.js index b2a34ae..7405882 100755 --- a/app/Game/Client/GameController.js +++ b/app/Game/Client/GameController.js @@ -124,5 +124,11 @@ function (Box2D, Parent, PhysicsEngine, ViewController, PlayerController, Notifi player.spawn(x, y); } + GameController.prototype.loadLevel = function (path) { + Parent.prototype.loadLevel.call(this, path); + var tiles = this.level.levelObject.tiles; + this.viewController.loadMeshes(tiles); + } + return GameController; }); diff --git a/app/Game/Client/View/CameraController.js b/app/Game/Client/View/CameraController.js index 9883db0..11632f7 100755 --- a/app/Game/Client/View/CameraController.js +++ b/app/Game/Client/View/CameraController.js @@ -6,7 +6,6 @@ define(['Lib/Vendor/Three', 'Game/Config/Settings'], function (Three, Settings) ? true : isOrthographic; - if(isOrthographic) { this.camera = new Three.OrthographicCamera( @@ -29,6 +28,7 @@ define(['Lib/Vendor/Three', 'Game/Config/Settings'], function (Three, Settings) } this.camera.position.z = 481; + this.setPosition(0,0); } CameraController.prototype.getCamera = function () { @@ -36,8 +36,8 @@ define(['Lib/Vendor/Three', 'Game/Config/Settings'], function (Three, Settings) } CameraController.prototype.setPosition = function (x, y) { - this.camera.position.x = x; - this.camera.position.y = y; + this.camera.position.x = x + Settings.STAGE_WIDTH / 2; + this.camera.position.y = y - Settings.STAGE_HEIGHT / 2; } diff --git a/app/Game/Client/View/ViewController.js b/app/Game/Client/View/ViewController.js index 3088750..b0623bc 100755 --- a/app/Game/Client/View/ViewController.js +++ b/app/Game/Client/View/ViewController.js @@ -34,11 +34,11 @@ define(requires, function (DomController, Three, Settings, CameraController) { preserveDrawingBuffer: true }; - if(isWebGlEnabled()) { + //if(isWebGlEnabled()) { this.renderer = new Three.WebGLRenderer(rendererOptions); - } else { - this.renderer = new Three.CanvasRenderer(rendererOptions); - } + //} else { + //this.renderer = new Three.CanvasRenderer(rendererOptions); + //} this.renderer.setClearColorHex(0x333333, 1); this.renderer.setSize(Settings.STAGE_WIDTH, Settings.STAGE_HEIGHT); @@ -50,15 +50,15 @@ define(requires, function (DomController, Three, Settings, CameraController) { } this.scene = new Three.Scene(); - this.scene.add(this.cameraController.getCamera()); + this.scene.add(this.cameraController.getCamera()); - var ambientLight = new Three.AmbientLight(0xffffff); + var ambientLight = new Three.AmbientLight(0xffffff); this.scene.add(ambientLight); - var directionalLight = new Three.DirectionalLight(0xffffff); - directionalLight.position.set(1, 0, 10).normalize(); - this.scene.add(directionalLight); + //var directionalLight = new Three.DirectionalLight(0xffffff); + //directionalLight.position.set(1, 0, 10).normalize(); + //this.scene.add(directionalLight); this.createMesh(100, 100, 100, 100, 'static/img/100.png', function (mesh) { @@ -74,15 +74,36 @@ define(requires, function (DomController, Three, Settings, CameraController) { //this.animate(this); } - ViewController.prototype.update = function () { + ViewController.prototype.loadMeshes = function(objects) { + var self = this; + for (var i = 0; i < objects.length; i++) { + (function() { + var o = objects[i]; + var x = o.x * Settings.TILE_SIZE; + var y = (-o.y) * Settings.TILE_SIZE; + var r = o.r ? o.r : 0; + var rad = 0.5 * Math.PI * -r; - if(this.mesh) { - this.mesh.rotation.z += .01; - this.mesh.position.z += 1; - this.mesh.position.x += .4; - this.mesh.position.y += .4; + var material = self.tileAtPositionExists(objects, o.x, o.y -1) ? "Soil" : "GrassSoil"; + + self.createMesh(Settings.TILE_SIZE, Settings.TILE_SIZE, x, y, 'static/img/Tiles/' + material + '/' + o.s + '' + o.r + '.gif', function(mesh) { + self.scene.add(mesh); + //mesh.rotation.z = rad; + }); + })(); + }; + }; + + ViewController.prototype.tileAtPositionExists = function(objects, x, y) { + + for (var i = 0; i < objects.length; i++) { + var o = objects[i]; + if(o.x == x && o.y == y) return true; } + return false; + }; + ViewController.prototype.update = function () { this.render(); } @@ -93,17 +114,18 @@ define(requires, function (DomController, Three, Settings, CameraController) { ViewController.prototype.createMesh = function (width, height, x, y, imgPath, callback) { var textureImg = new Image(); - textureImg.onload = function () { + textureImg.onload = function () { // FIXME: perhaps not needed to load double? var material = new Three.MeshLambertMaterial({ - map: Three.ImageUtils.loadTexture(imgPath) + map: Three.ImageUtils.loadTexture(imgPath), + transparent: true }); var mesh = new Three.Mesh(new Three.PlaneGeometry(width, height), material); - mesh.overdraw = true;/* - mesh.position.z = 0; + mesh.overdraw = true; + //mesh.position.z = 1; mesh.position.x = x; mesh.position.y = y; - */ + callback(mesh); }; textureImg.src = imgPath; diff --git a/app/Game/Config/Settings.js b/app/Game/Config/Settings.js index b914398..d1723d5 100755 --- a/app/Game/Config/Settings.js +++ b/app/Game/Config/Settings.js @@ -3,7 +3,6 @@ define({ STAGE_HEIGHT: 400, // BOX2D INITIALATORS - RATIO: 35, BOX2D_WORLD_AABB_SIZE: 3000, BOX2D_ALLOW_SLEEP: true, BOX2D_GRAVITY: 16, @@ -16,6 +15,7 @@ define({ GRAPHICS_SUBPATH_ITEMS: 'items/', GRAPHICS_SUBPATH_CHARACTERS: 'characters/', + RATIO: 35, TILE_SIZE: 15, // GAME PLAY diff --git a/app/Game/Core/Loader/Level.js b/app/Game/Core/Loader/Level.js index 91ddabc..799332b 100755 --- a/app/Game/Core/Loader/Level.js +++ b/app/Game/Core/Loader/Level.js @@ -1,4 +1,8 @@ -define(["Game/Config/Settings", "Lib/Vendor/Box2D", "Game/Core/Collision/Detector"], function (Settings, Box2D, CollisionDetector) { +define([ + "Game/Config/Settings", + "Lib/Vendor/Box2D", + "Game/Core/Collision/Detector" +], function (Settings, Box2D, CollisionDetector) { // Public function Level (path, engine) { @@ -179,6 +183,7 @@ define(["Game/Config/Settings", "Lib/Vendor/Box2D", "Game/Core/Collision/Detecto this.levelObject = { tiles: [ +{s:1, x:1, y:1, r:0}, {s:1, x:3, y:18}, {s:1, x:37, y:27}, {s:1, x:20, y:24}, diff --git a/app/Lib/Vendor/Three/Three.js b/app/Lib/Vendor/Three/Three.js index 4cd1ca1..640d0b2 100644 --- a/app/Lib/Vendor/Three/Three.js +++ b/app/Lib/Vendor/Three/Three.js @@ -1,770 +1,701 @@ -// Three.js r47 - http://github.com/mrdoob/three.js -'use strict';var THREE=THREE||{};if(!self.Int32Array)self.Int32Array=Array,self.Float32Array=Array; -(function(){for(var a=0,b=["ms","moz","webkit","o"],c=0;c>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},getHex:function(){return Math.floor(255*this.r)<<16^Math.floor(255*this.g)<<8^Math.floor(255*this.b)},getContextStyle:function(){return"rgb("+Math.floor(255*this.r)+","+Math.floor(255*this.g)+","+Math.floor(255*this.b)+")"},clone:function(){return(new THREE.Color).setRGB(this.r,this.g,this.b)}};THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0}; -THREE.Vector2.prototype={constructor:THREE.Vector2,set:function(a,b){this.x=a;this.y=b;return this},copy:function(a){this.x=a.x;this.y=a.y;return this},clone:function(){return new THREE.Vector2(this.x,this.y)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this}, -divideScalar:function(a){a?(this.x/=a,this.y/=a):this.set(0,0);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.lengthSq())},normalize:function(){return this.divideScalar(this.length())},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,a=this.y-a.y;return b*b+a*a},setLength:function(a){return this.normalize().multiplyScalar(a)}, -equals:function(a){return a.x===this.x&&a.y===this.y}};THREE.Vector3=function(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0}; -THREE.Vector3.prototype={constructor:THREE.Vector3,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},clone:function(){return new THREE.Vector3(this.x,this.y,this.z)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;return this}, -addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},multiply:function(a,b){this.x=a.x*b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},multiplySelf:function(a){this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},divideSelf:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this}, -divideScalar:function(a){a?(this.x/=a,this.y/=a,this.z/=a):this.z=this.y=this.x=0;return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.lengthSq())},lengthManhattan:function(){return this.x+this.y+this.z},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)}, -cross:function(a,b){this.x=a.y*b.z-a.z*b.y;this.y=a.z*b.x-a.x*b.z;this.z=a.x*b.y-a.y*b.x;return this},crossSelf:function(a){var b=this.x,c=this.y,d=this.z;this.x=c*a.z-d*a.y;this.y=d*a.x-b*a.z;this.z=b*a.y-c*a.x;return this},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){return(new THREE.Vector3).sub(this,a).lengthSq()},setPositionFromMatrix:function(a){this.x=a.n14;this.y=a.n24;this.z=a.n34},setRotationFromMatrix:function(a){var b=Math.cos(this.y); -this.y=Math.asin(a.n13);1.0E-5this.lengthSq()}};THREE.Vector4=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1}; -THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)},add:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},addSelf:function(a){this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},sub:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z- -b.z;this.w=a.w-b.w;return this},subSelf:function(a){this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this},divideScalar:function(a){a?(this.x/=a,this.y/=a,this.z/=a,this.w/=a):(this.z=this.y=this.x=0,this.w=1);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.dot(this)},length:function(){return Math.sqrt(this.lengthSq())}, -normalize:function(){return this.divideScalar(this.length())},setLength:function(a){return this.normalize().multiplyScalar(a)},lerpSelf:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this}};THREE.Frustum=function(){this.planes=[new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4,new THREE.Vector4]}; -THREE.Frustum.prototype.setFromMatrix=function(a){var b,c=this.planes;c[0].set(a.n41-a.n11,a.n42-a.n12,a.n43-a.n13,a.n44-a.n14);c[1].set(a.n41+a.n11,a.n42+a.n12,a.n43+a.n13,a.n44+a.n14);c[2].set(a.n41+a.n21,a.n42+a.n22,a.n43+a.n23,a.n44+a.n24);c[3].set(a.n41-a.n21,a.n42-a.n22,a.n43-a.n23,a.n44-a.n24);c[4].set(a.n41-a.n31,a.n42-a.n32,a.n43-a.n33,a.n44-a.n34);c[5].set(a.n41+a.n31,a.n42+a.n32,a.n43+a.n33,a.n44+a.n34);for(a=0;6>a;a++)b=c[a],b.divideScalar(Math.sqrt(b.x*b.x+b.y*b.y+b.z*b.z))}; -THREE.Frustum.prototype.contains=function(a){for(var b=this.planes,c=a.matrixWorld,d=THREE.Frustum.__v1.set(c.getColumnX().length(),c.getColumnY().length(),c.getColumnZ().length()),d=-a.geometry.boundingSphere.radius*Math.max(d.x,Math.max(d.y,d.z)),e=0;6>e;e++)if(a=b[e].x*c.n14+b[e].y*c.n24+b[e].z*c.n34+b[e].w,a<=d)return!1;return!0};THREE.Frustum.__v1=new THREE.Vector3; -THREE.Ray=function(a,b){function c(a,b,c){o.sub(c,a);r=o.dot(b);s=p.add(a,m.copy(b).multiplyScalar(r));return t=c.distanceTo(s)}function d(a,b,c,d){o.sub(d,b);p.sub(c,b);m.sub(a,b);u=o.dot(o);v=o.dot(p);x=o.dot(m);B=p.dot(p);D=p.dot(m);C=1/(u*B-v*v);A=(B*x-v*D)*C;H=(u*D-v*x)*C;return 0<=A&&0<=H&&1>A+H}this.origin=a||new THREE.Vector3;this.direction=b||new THREE.Vector3;this.intersectScene=function(a){return this.intersectObjects(a.children)};this.intersectObjects=function(a){var b,c,d=[];for(b=0, -c=a.length;ba.scale.x)return[];b={distance:o,point:a.position,face:null,object:a};m.push(b)}else if(a instanceof THREE.Mesh){o=c(this.origin,this.direction,a.matrixWorld.getPosition());p=THREE.Frustum.__v1.set(a.matrixWorld.getColumnX().length(),a.matrixWorld.getColumnY().length(),a.matrixWorld.getColumnZ().length());if(o>a.geometry.boundingSphere.radius*Math.max(p.x,Math.max(p.y,p.z)))return m;var r,s,j=a.geometry,t=j.vertices,y;a.matrixRotationWorld.extractRotation(a.matrixWorld); -for(o=0,p=j.faces.length;oMath.abs(r))&&(s=n.dot(k)/r,!(0>s)&&(a.doubleSided||(a.flipSided?0r))))if(q.add(i,l.multiplyScalar(s)),b instanceof THREE.Face3)e=y.multiplyVector3(e.copy(t[b.a].position)),f=y.multiplyVector3(f.copy(t[b.b].position)),g=y.multiplyVector3(g.copy(t[b.c].position)), -d(q,e,f,g)&&(b={distance:i.distanceTo(q),point:q.clone(),face:b,object:a},m.push(b));else if(b instanceof THREE.Face4&&(e=y.multiplyVector3(e.copy(t[b.a].position)),f=y.multiplyVector3(f.copy(t[b.b].position)),g=y.multiplyVector3(g.copy(t[b.c].position)),h=y.multiplyVector3(h.copy(t[b.d].position)),d(q,e,f,h)||d(q,f,g,h)))b={distance:i.distanceTo(q),point:q.clone(),face:b,object:a},m.push(b)}return m};var o=new THREE.Vector3,p=new THREE.Vector3,m=new THREE.Vector3,r,s,t,u,v,x,B,D,C,A,H}; -THREE.Rectangle=function(){function a(){f=d-b;g=e-c}var b,c,d,e,f,g,h=!0;this.getX=function(){return b};this.getY=function(){return c};this.getWidth=function(){return f};this.getHeight=function(){return g};this.getLeft=function(){return b};this.getTop=function(){return c};this.getRight=function(){return d};this.getBottom=function(){return e};this.set=function(f,g,k,n){h=!1;b=f;c=g;d=k;e=n;a()};this.addPoint=function(f,g){h?(h=!1,b=f,c=g,d=f,e=g):(b=bf?d:f,e=e>g?e:g);a()};this.add3Points= -function(f,g,k,n,q,o){h?(h=!1,b=fk?f>q?f:q:k>q?k:q,e=g>n?g>o?g:o:n>o?n:o):(b=fk?f>q?f>d?f:d:q>d?q:d:k>q?k>d?k:d:q>d?q:d,e=g>n?g>o?g>e?g:e:o>e?o:e:n>o?n>e?n:e:o>e?o:e);a()};this.addRectangle=function(f){h?(h=!1,b=f.getLeft(),c=f.getTop(),d=f.getRight(),e=f.getBottom()):(b=bf.getRight()?d:f.getRight(),e=e> -f.getBottom()?e:f.getBottom());a()};this.inflate=function(f){b-=f;c-=f;d+=f;e+=f;a()};this.minSelf=function(f){b=b>f.getLeft()?b:f.getLeft();c=c>f.getTop()?c:f.getTop();d=da.getRight()||ea.getBottom()?!1:!0};this.empty=function(){h=!0;e=d=c=b=0;a()};this.isEmpty=function(){return h}}; -THREE.Math={clamp:function(a,b,c){return ac?c:a},clampBottom:function(a,b){return ae&&0>f||0>g&&0>h)return!1;0>e?c=Math.max(c,e/(e-f)):0>f&&(d=Math.min(d,e/(e-f)));0>g?c=Math.max(c,g/(g-h)):0>h&&(d=Math.min(d,g/(g-h)));if(dg&&h.positionScreen.z(R.positionScreen.x-S.positionScreen.x)*(T.positionScreen.y-S.positionScreen.y)-(R.positionScreen.y-S.positionScreen.y)*(T.positionScreen.x- -S.positionScreen.x)))ka=q[n]=q[n]||new THREE.RenderableFace3,n++,k=ka,k.v1.copy(S),k.v2.copy(T),k.v3.copy(R);else continue;else if(y instanceof THREE.Face4)if(S=l[y.a],T=l[y.b],R=l[y.c],ka=l[y.d],S.visible&&T.visible&&R.visible&&ka.visible&&(ga.doubleSided||ga.flipSided!=(0>(ka.positionScreen.x-S.positionScreen.x)*(T.positionScreen.y-S.positionScreen.y)-(ka.positionScreen.y-S.positionScreen.y)*(T.positionScreen.x-S.positionScreen.x)||0>(T.positionScreen.x-R.positionScreen.x)*(ka.positionScreen.y- -R.positionScreen.y)-(T.positionScreen.y-R.positionScreen.y)*(ka.positionScreen.x-R.positionScreen.x))))la=p[o]=p[o]||new THREE.RenderableFace4,o++,k=la,k.v1.copy(S),k.v2.copy(T),k.v3.copy(R),k.v4.copy(ka);else continue;k.normalWorld.copy(y.normal);ba.multiplyVector3(k.normalWorld);k.centroidWorld.copy(y.centroid);V.multiplyVector3(k.centroidWorld);k.centroidScreen.copy(k.centroidWorld);C.multiplyVector3(k.centroidScreen);R=y.vertexNormals;for(S=0,T=R.length;SD.z))g=v[u]=v[u]||new THREE.RenderableParticle,u++,t=g,t.x= -D.x/D.w,t.y=D.y/D.w,t.z=D.z,t.rotation=ga.rotation.z,t.scale.x=ga.scale.x*Math.abs(t.x-(D.x+e.projectionMatrix.n11)/(D.w+e.projectionMatrix.n14)),t.scale.y=ga.scale.y*Math.abs(t.y-(D.y+e.projectionMatrix.n22)/(D.w+e.projectionMatrix.n24)),t.material=ga.material,x.elements.push(t);f&&x.elements.sort(c);return x}};THREE.Quaternion=function(a,b,c,d){this.set(a||0,b||0,c||0,void 0!==d?d:1)}; -THREE.Quaternion.prototype={constructor:THREE.Quaternion,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=a.w;return this},setFromEuler:function(a){var b=Math.PI/360,c=a.x*b,d=a.y*b,e=a.z*b,a=Math.cos(d),d=Math.sin(d),b=Math.cos(-e),e=Math.sin(-e),f=Math.cos(c),c=Math.sin(c),g=a*b,h=d*e;this.w=g*f-h*c;this.x=g*c+h*f;this.y=d*b*f+a*e*c;this.z=a*e*f-d*b*c;return this},setFromAxisAngle:function(a,b){var c=b/2,d=Math.sin(c); -this.x=a.x*d;this.y=a.y*d;this.z=a.z*d;this.w=Math.cos(c);return this},setFromRotationMatrix:function(a){var b=Math.pow(a.determinant(),1/3);this.w=Math.sqrt(Math.max(0,b+a.n11+a.n22+a.n33))/2;this.x=Math.sqrt(Math.max(0,b+a.n11-a.n22-a.n33))/2;this.y=Math.sqrt(Math.max(0,b-a.n11+a.n22-a.n33))/2;this.z=Math.sqrt(Math.max(0,b-a.n11-a.n22+a.n33))/2;this.x=0>a.n32-a.n23?-Math.abs(this.x):Math.abs(this.x);this.y=0>a.n13-a.n31?-Math.abs(this.y):Math.abs(this.y);this.z=0>a.n21-a.n12?-Math.abs(this.z):Math.abs(this.z); -this.normalize();return this},calculateW:function(){this.w=-Math.sqrt(Math.abs(1-this.x*this.x-this.y*this.y-this.z*this.z));return this},inverse:function(){this.x*=-1;this.y*=-1;this.z*=-1;return this},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w)},normalize:function(){var a=Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w);0===a?this.w=this.z=this.y=this.x=0:(a=1/a,this.x*=a,this.y*=a,this.z*=a,this.w*=a);return this},multiplySelf:function(a){var b= -this.x,c=this.y,d=this.z,e=this.w,f=a.x,g=a.y,h=a.z,a=a.w;this.x=b*a+e*f+c*h-d*g;this.y=c*a+e*g+d*f-b*h;this.z=d*a+e*h+b*g-c*f;this.w=e*a-b*f-c*g-d*h;return this},multiply:function(a,b){this.x=a.x*b.w+a.y*b.z-a.z*b.y+a.w*b.x;this.y=-a.x*b.z+a.y*b.w+a.z*b.x+a.w*b.y;this.z=a.x*b.y-a.y*b.x+a.z*b.w+a.w*b.z;this.w=-a.x*b.x-a.y*b.y-a.z*b.z+a.w*b.w;return this},multiplyVector3:function(a,b){b||(b=a);var c=a.x,d=a.y,e=a.z,f=this.x,g=this.y,h=this.z,i=this.w,l=i*c+g*e-h*d,k=i*d+h*c-f*e,n=i*e+f*d-g*c,c=-f* -c-g*d-h*e;b.x=l*i+c*-f+k*-h-n*-g;b.y=k*i+c*-g+n*-f-l*-h;b.z=n*i+c*-h+l*-g-k*-f;return b}}; -THREE.Quaternion.slerp=function(a,b,c,d){var e=a.w*b.w+a.x*b.x+a.y*b.y+a.z*b.z;0>e?(c.w=-b.w,c.x=-b.x,c.y=-b.y,c.z=-b.z,e=-e):c.copy(b);if(1<=Math.abs(e))return c.w=a.w,c.x=a.x,c.y=a.y,c.z=a.z,c;var f=Math.acos(e),e=Math.sqrt(1-e*e);if(0.001>Math.abs(e))return c.w=0.5*(a.w+b.w),c.x=0.5*(a.x+b.x),c.y=0.5*(a.y+b.y),c.z=0.5*(a.z+b.z),c;b=Math.sin((1-d)*f)/e;d=Math.sin(d*f)/e;c.w=a.w*b+c.w*d;c.x=a.x*b+c.x*d;c.y=a.y*b+c.y*d;c.z=a.z*b+c.z*d;return c};THREE.Vertex=function(a){this.position=a||new THREE.Vector3}; -THREE.Face3=function(a,b,c,d,e,f){this.a=a;this.b=b;this.c=c;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.color=e instanceof THREE.Color?e:new THREE.Color;this.vertexColors=e instanceof Array?e:[];this.vertexTangents=[];this.materialIndex=f;this.centroid=new THREE.Vector3}; -THREE.Face4=function(a,b,c,d,e,f,g){this.a=a;this.b=b;this.c=c;this.d=d;this.normal=e instanceof THREE.Vector3?e:new THREE.Vector3;this.vertexNormals=e instanceof Array?e:[];this.color=f instanceof THREE.Color?f:new THREE.Color;this.vertexColors=f instanceof Array?f:[];this.vertexTangents=[];this.materialIndex=g;this.centroid=new THREE.Vector3};THREE.UV=function(a,b){this.u=a||0;this.v=b||0}; -THREE.UV.prototype={constructor:THREE.UV,set:function(a,b){this.u=a;this.v=b;return this},copy:function(a){this.u=a.u;this.v=a.v;return this},clone:function(){return new THREE.UV(this.u,this.v)}}; -THREE.Geometry=function(){this.id=THREE.GeometryCount++;this.vertices=[];this.colors=[];this.materials=[];this.faces=[];this.faceUvs=[[]];this.faceVertexUvs=[[]];this.morphTargets=[];this.morphColors=[];this.skinWeights=[];this.skinIndices=[];this.boundingSphere=this.boundingBox=null;this.dynamic=this.hasTangents=!1}; -THREE.Geometry.prototype={constructor:THREE.Geometry,applyMatrix:function(a){var b=new THREE.Matrix4;b.extractRotation(a,new THREE.Vector3(1,1,1));for(var c=0,d=this.vertices.length;ce?-1:1,f.vertexTangents[d]=new THREE.Vector4($.x,$.y,$.z,e)}this.hasTangents=!0},computeBoundingBox:function(){if(0c.x)c.x=a.x;if(a.yc.y)c.y=a.y;if(a.zc.z)c.z=a.z}}},computeBoundingSphere:function(){for(var a,b=0,c=0,d=this.vertices.length;cb&&(b=a);this.boundingSphere={radius:b}},mergeVertices:function(){var a={},b=[],c=[],d,e=Math.pow(10,4),f,g;for(f=0,g=this.vertices.length;fthis.points.length-2?f:f+1;c[3]=f>this.points.length-3?f:f+2;l=this.points[c[0]];k=this.points[c[1]]; -n=this.points[c[2]];q=this.points[c[3]];h=g*g;i=g*h;d.x=b(l.x,k.x,n.x,q.x,g,h,i);d.y=b(l.y,k.y,n.y,q.y,g,h,i);d.z=b(l.z,k.z,n.z,q.z,g,h,i);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;athis.duration||0>this.time){this.direction*=-1;if(this.time>this.duration)this.time=this.duration,this.directionBackwards=!0;if(0>this.time)this.time=0,this.directionBackwards=!1}}else this.time%=this.duration;a=THREE.Math.clamp(Math.floor(this.time/b),0,this.geometry.morphTargets.length-1);if(a!=this.currentKeyframe)this.morphTargetInfluences[this.lastKeyframe]= -0,this.morphTargetInfluences[this.currentKeyframe]=1,this.morphTargetInfluences[a]=0,this.lastKeyframe=this.currentKeyframe,this.currentKeyframe=a;b=this.time%b/b;this.directionBackwards&&(b=1-b);this.morphTargetInfluences[this.currentKeyframe]=b;this.morphTargetInfluences[this.lastKeyframe]=1-b};THREE.Ribbon=function(a,b){THREE.Object3D.call(this);this.geometry=a;this.material=b};THREE.Ribbon.prototype=new THREE.Object3D;THREE.Ribbon.prototype.constructor=THREE.Ribbon; -THREE.LOD=function(){THREE.Object3D.call(this);this.LODs=[]};THREE.LOD.prototype=new THREE.Object3D;THREE.LOD.prototype.constructor=THREE.LOD;THREE.LOD.prototype.supr=THREE.Object3D.prototype;THREE.LOD.prototype.addLevel=function(a,b){void 0===b&&(b=0);for(var b=Math.abs(b),c=0;c=this.LODs[b].visibleAtDistance)this.LODs[b-1].object3D.visible=!1,this.LODs[b].object3D.visible=!0;else break;for(;bs&&m.clearRect(Math.floor(Ba.getX()),Math.floor(Ba.getY()),Math.floor(Ba.getWidth()),Math.floor(Ba.getHeight())),0=h||(h*=g.intensity,d.r+=aa.r*h,d.g+=aa.g*h,d.b+=aa.b*h)):g instanceof THREE.PointLight&&(j=g.matrixWorld.getPosition(),h=c.dot(Ea.sub(j,b).normalize()),0>=h||(h*=0==g.distance?1:1-Math.min(b.distanceTo(j)/g.distance,1),0!=h&&(h*=g.intensity,d.r+=aa.r*h,d.g+=aa.g*h,d.b+=aa.b*h)))}function r(a,f,g){b(g.opacity);c(g.blending);var aa,j,h,i,l,k;if(g instanceof THREE.ParticleBasicMaterial){if(g.map)i= -g.map.image,l=i.width>>1,k=i.height>>1,g=f.scale.x*o,h=f.scale.y*p,aa=g*l,j=h*k,ja.set(a.x-aa,a.y-j,a.x+aa,a.y+j),ra.intersects(ja)&&(m.save(),m.translate(a.x,a.y),m.rotate(-f.rotation),m.scale(g,-h),m.translate(-l,-k),m.drawImage(i,0,0),m.restore())}else g instanceof THREE.ParticleCanvasMaterial&&(aa=f.scale.x*o,j=f.scale.y*p,ja.set(a.x-aa,a.y-j,a.x+aa,a.y+j),ra.intersects(ja)&&(d(g.color.getContextStyle()),e(g.color.getContextStyle()),m.save(),m.translate(a.x,a.y),m.rotate(-f.rotation),m.scale(aa, -j),g.program(m),m.restore()))}function s(a,e,f,g){b(g.opacity);c(g.blending);m.beginPath();m.moveTo(a.positionScreen.x,a.positionScreen.y);m.lineTo(e.positionScreen.x,e.positionScreen.y);m.closePath();if(g instanceof THREE.LineBasicMaterial){a=g.linewidth;if(B!=a)m.lineWidth=B=a;a=g.linecap;if(D!=a)m.lineCap=D=a;a=g.linejoin;if(C!=a)m.lineJoin=C=a;d(g.color.getContextStyle());m.stroke();ja.inflate(2*g.linewidth)}}function t(a,d,e,g,h,l,P,O){f.info.render.vertices+=3;f.info.render.faces++;b(O.opacity); -c(O.blending);Q=a.positionScreen.x;L=a.positionScreen.y;G=d.positionScreen.x;j=d.positionScreen.y;W=e.positionScreen.x;y=e.positionScreen.y;v(Q,L,G,j,W,y);if(O instanceof THREE.MeshBasicMaterial)if(O.map)O.map.mapping instanceof THREE.UVMapping&&(Da=P.uvs[0],Lc(Q,L,G,j,W,y,Da[g].u,Da[g].v,Da[h].u,Da[h].v,Da[l].u,Da[l].v,O.map));else if(O.envMap){if(O.envMap.mapping instanceof THREE.SphericalReflectionMapping)a=k.matrixWorldInverse,Ea.copy(P.vertexNormalsWorld[g]),$a=0.5*(Ea.x*a.n11+Ea.y*a.n12+Ea.z* -a.n13)+0.5,Ta=0.5*-(Ea.x*a.n21+Ea.y*a.n22+Ea.z*a.n23)+0.5,Ea.copy(P.vertexNormalsWorld[h]),ib=0.5*(Ea.x*a.n11+Ea.y*a.n12+Ea.z*a.n13)+0.5,db=0.5*-(Ea.x*a.n21+Ea.y*a.n22+Ea.z*a.n23)+0.5,Ea.copy(P.vertexNormalsWorld[l]),Wa=0.5*(Ea.x*a.n11+Ea.y*a.n12+Ea.z*a.n13)+0.5,Xa=0.5*-(Ea.x*a.n21+Ea.y*a.n22+Ea.z*a.n23)+0.5,Lc(Q,L,G,j,W,y,$a,Ta,ib,db,Wa,Xa,O.envMap)}else O.wireframe?Fb(O.color,O.wireframeLinewidth,O.wireframeLinecap,O.wireframeLinejoin):Ab(O.color);else if(O instanceof THREE.MeshLambertMaterial)O.map&& -!O.wireframe&&(O.map.mapping instanceof THREE.UVMapping&&(Da=P.uvs[0],Lc(Q,L,G,j,W,y,Da[g].u,Da[g].v,Da[h].u,Da[h].v,Da[l].u,Da[l].v,O.map)),c(THREE.SubtractiveBlending)),ab?!O.wireframe&&O.shading==THREE.SmoothShading&&3==P.vertexNormalsWorld.length?(ba.r=ca.r=da.r=aa.r,ba.g=ca.g=da.g=aa.g,ba.b=ca.b=da.b=aa.b,n(i,P.v1.positionWorld,P.vertexNormalsWorld[0],ba),n(i,P.v2.positionWorld,P.vertexNormalsWorld[1],ca),n(i,P.v3.positionWorld,P.vertexNormalsWorld[2],da),ba.r=Math.max(0,Math.min(O.color.r*ba.r, -1)),ba.g=Math.max(0,Math.min(O.color.g*ba.g,1)),ba.b=Math.max(0,Math.min(O.color.b*ba.b,1)),ca.r=Math.max(0,Math.min(O.color.r*ca.r,1)),ca.g=Math.max(0,Math.min(O.color.g*ca.g,1)),ca.b=Math.max(0,Math.min(O.color.b*ca.b,1)),da.r=Math.max(0,Math.min(O.color.r*da.r,1)),da.g=Math.max(0,Math.min(O.color.g*da.g,1)),da.b=Math.max(0,Math.min(O.color.b*da.b,1)),ha.r=0.5*(ca.r+da.r),ha.g=0.5*(ca.g+da.g),ha.b=0.5*(ca.b+da.b),Ja=vc(ba,ca,da,ha),Yb(Q,L,G,j,W,y,0,0,1,0,0,1,Ja)):(V.r=aa.r,V.g=aa.g,V.b=aa.b,n(i, -P.centroidWorld,P.normalWorld,V),V.r=Math.max(0,Math.min(O.color.r*V.r,1)),V.g=Math.max(0,Math.min(O.color.g*V.g,1)),V.b=Math.max(0,Math.min(O.color.b*V.b,1)),O.wireframe?Fb(V,O.wireframeLinewidth,O.wireframeLinecap,O.wireframeLinejoin):Ab(V)):O.wireframe?Fb(O.color,O.wireframeLinewidth,O.wireframeLinecap,O.wireframeLinejoin):Ab(O.color);else if(O instanceof THREE.MeshDepthMaterial)za=k.near,Aa=k.far,ba.r=ba.g=ba.b=1-Tb(a.positionScreen.z,za,Aa),ca.r=ca.g=ca.b=1-Tb(d.positionScreen.z,za,Aa),da.r= -da.g=da.b=1-Tb(e.positionScreen.z,za,Aa),ha.r=0.5*(ca.r+da.r),ha.g=0.5*(ca.g+da.g),ha.b=0.5*(ca.b+da.b),Ja=vc(ba,ca,da,ha),Yb(Q,L,G,j,W,y,0,0,1,0,0,1,Ja);else if(O instanceof THREE.MeshNormalMaterial)V.r=Zb(P.normalWorld.x),V.g=Zb(P.normalWorld.y),V.b=Zb(P.normalWorld.z),O.wireframe?Fb(V,O.wireframeLinewidth,O.wireframeLinecap,O.wireframeLinejoin):Ab(V)}function u(a,d,e,g,h,O,l,P,m){f.info.render.vertices+=4;f.info.render.faces++;b(P.opacity);c(P.blending);if(P.map||P.envMap)t(a,d,g,0,1,3,l,P,m), -t(h,e,O,1,2,3,l,P,m);else if(Q=a.positionScreen.x,L=a.positionScreen.y,G=d.positionScreen.x,j=d.positionScreen.y,W=e.positionScreen.x,y=e.positionScreen.y,E=g.positionScreen.x,S=g.positionScreen.y,T=h.positionScreen.x,R=h.positionScreen.y,ka=O.positionScreen.x,ga=O.positionScreen.y,P instanceof THREE.MeshBasicMaterial)x(Q,L,G,j,W,y,E,S),P.wireframe?Fb(P.color,P.wireframeLinewidth,P.wireframeLinecap,P.wireframeLinejoin):Ab(P.color);else if(P instanceof THREE.MeshLambertMaterial)ab?!P.wireframe&&P.shading== -THREE.SmoothShading&&4==l.vertexNormalsWorld.length?(ba.r=ca.r=da.r=ha.r=aa.r,ba.g=ca.g=da.g=ha.g=aa.g,ba.b=ca.b=da.b=ha.b=aa.b,n(i,l.v1.positionWorld,l.vertexNormalsWorld[0],ba),n(i,l.v2.positionWorld,l.vertexNormalsWorld[1],ca),n(i,l.v4.positionWorld,l.vertexNormalsWorld[3],da),n(i,l.v3.positionWorld,l.vertexNormalsWorld[2],ha),ba.r=Math.max(0,Math.min(P.color.r*ba.r,1)),ba.g=Math.max(0,Math.min(P.color.g*ba.g,1)),ba.b=Math.max(0,Math.min(P.color.b*ba.b,1)),ca.r=Math.max(0,Math.min(P.color.r*ca.r, -1)),ca.g=Math.max(0,Math.min(P.color.g*ca.g,1)),ca.b=Math.max(0,Math.min(P.color.b*ca.b,1)),da.r=Math.max(0,Math.min(P.color.r*da.r,1)),da.g=Math.max(0,Math.min(P.color.g*da.g,1)),da.b=Math.max(0,Math.min(P.color.b*da.b,1)),ha.r=Math.max(0,Math.min(P.color.r*ha.r,1)),ha.g=Math.max(0,Math.min(P.color.g*ha.g,1)),ha.b=Math.max(0,Math.min(P.color.b*ha.b,1)),Ja=vc(ba,ca,da,ha),v(Q,L,G,j,E,S),Yb(Q,L,G,j,E,S,0,0,1,0,0,1,Ja),v(T,R,W,y,ka,ga),Yb(T,R,W,y,ka,ga,1,0,1,1,0,1,Ja)):(V.r=aa.r,V.g=aa.g,V.b=aa.b,n(i, -l.centroidWorld,l.normalWorld,V),V.r=Math.max(0,Math.min(P.color.r*V.r,1)),V.g=Math.max(0,Math.min(P.color.g*V.g,1)),V.b=Math.max(0,Math.min(P.color.b*V.b,1)),x(Q,L,G,j,W,y,E,S),P.wireframe?Fb(V,P.wireframeLinewidth,P.wireframeLinecap,P.wireframeLinejoin):Ab(V)):(x(Q,L,G,j,W,y,E,S),P.wireframe?Fb(P.color,P.wireframeLinewidth,P.wireframeLinecap,P.wireframeLinejoin):Ab(P.color));else if(P instanceof THREE.MeshNormalMaterial)V.r=Zb(l.normalWorld.x),V.g=Zb(l.normalWorld.y),V.b=Zb(l.normalWorld.z),x(Q, -L,G,j,W,y,E,S),P.wireframe?Fb(V,P.wireframeLinewidth,P.wireframeLinecap,P.wireframeLinejoin):Ab(V);else if(P instanceof THREE.MeshDepthMaterial)za=k.near,Aa=k.far,ba.r=ba.g=ba.b=1-Tb(a.positionScreen.z,za,Aa),ca.r=ca.g=ca.b=1-Tb(d.positionScreen.z,za,Aa),da.r=da.g=da.b=1-Tb(g.positionScreen.z,za,Aa),ha.r=ha.g=ha.b=1-Tb(e.positionScreen.z,za,Aa),Ja=vc(ba,ca,da,ha),v(Q,L,G,j,E,S),Yb(Q,L,G,j,E,S,0,0,1,0,0,1,Ja),v(T,R,W,y,ka,ga),Yb(T,R,W,y,ka,ga,1,0,1,1,0,1,Ja)}function v(a,b,c,d,e,f){m.beginPath();m.moveTo(a, -b);m.lineTo(c,d);m.lineTo(e,f);m.lineTo(a,b);m.closePath()}function x(a,b,c,d,e,f,g,aa){m.beginPath();m.moveTo(a,b);m.lineTo(c,d);m.lineTo(e,f);m.lineTo(g,aa);m.lineTo(a,b);m.closePath()}function Fb(a,b,c,e){if(B!=b)m.lineWidth=B=b;if(D!=c)m.lineCap=D=c;if(C!=e)m.lineJoin=C=e;d(a.getContextStyle());m.stroke();ja.inflate(2*b)}function Ab(a){e(a.getContextStyle());m.fill()}function Lc(a,b,c,d,f,g,aa,j,h,P,i,l,O){if(0!=O.image.width){if(!0==O.needsUpdate||void 0==Qa[O.id]){var k=O.wrapS==THREE.RepeatWrapping, -n=O.wrapT==THREE.RepeatWrapping;Qa[O.id]=m.createPattern(O.image,k&&n?"repeat":k&&!n?"repeat-x":!k&&n?"repeat-y":"no-repeat");O.needsUpdate=!1}e(Qa[O.id]);var k=O.offset.x/O.repeat.x,n=O.offset.y/O.repeat.y,q=O.image.width*O.repeat.x,Ea=O.image.height*O.repeat.y,aa=(aa+k)*q,j=(j+n)*Ea,c=c-a,d=d-b,f=f-a,g=g-b,h=(h+k)*q-aa,P=(P+n)*Ea-j,i=(i+k)*q-aa,l=(l+n)*Ea-j,k=h*l-i*P;if(0==k){if(void 0===la[O.id])b=document.createElement("canvas"),b.width=O.image.width,b.height=O.image.height,b=b.getContext("2d"), -b.drawImage(O.image,0,0),la[O.id]=b.getImageData(0,0,O.image.width,O.image.height).data;b=la[O.id];aa=4*(Math.floor(aa)+Math.floor(j)*O.image.width);V.setRGB(b[aa]/255,b[aa+1]/255,b[aa+2]/255);Ab(V)}else k=1/k,O=(l*c-P*f)*k,P=(l*d-P*g)*k,c=(h*f-i*c)*k,d=(h*g-i*d)*k,a=a-O*aa-c*j,aa=b-P*aa-d*j,m.save(),m.transform(O,P,c,d,a,aa),m.fill(),m.restore()}}function Yb(a,b,c,d,e,f,g,aa,j,h,P,i,O){var l,k;l=O.width-1;k=O.height-1;g*=l;aa*=k;c-=a;d-=b;e-=a;f-=b;j=j*l-g;h=h*k-aa;P=P*l-g;i=i*k-aa;k=1/(j*i-P*h); -l=(i*c-h*e)*k;h=(i*d-h*f)*k;c=(j*e-P*c)*k;d=(j*f-P*d)*k;a=a-l*g-c*aa;b=b-h*g-d*aa;m.save();m.transform(l,h,c,d,a,b);m.clip();m.drawImage(O,0,0);m.restore()}function vc(a,b,c,d){var e=~~(255*a.r),f=~~(255*a.g),a=~~(255*a.b),g=~~(255*b.r),aa=~~(255*b.g),b=~~(255*b.b),j=~~(255*c.r),h=~~(255*c.g),c=~~(255*c.b),P=~~(255*d.r),i=~~(255*d.g),d=~~(255*d.b);eb[0]=0>e?0:255f?0:255a?0:255g?0:255aa?0:255b?0:255j?0:255h?0:255c?0:255P?0:255i?0:255d?0:255a?0:1=l||(l*=g.intensity,d.r+=h.r*l,d.g+=h.g*l,d.b+=h.b*l)):g instanceof THREE.PointLight&&(i=g.matrixWorld.getPosition(),l=c.dot(A.sub(i,b).normalize()),0>=l||(l*=0==g.distance?1:1-Math.min(b.distanceTo(i)/g.distance,1),0!=l&&(l*=g.intensity,d.r+=h.r*l,d.g+=h.g*l,d.b+=h.b*l)))}function b(a){null==H[a]&&(H[a]=document.createElementNS("http://www.w3.org/2000/svg", -"path"),0==Q&&H[a].setAttribute("shape-rendering","crispEdges"));return H[a]}function c(a){a=0.5*(a+1);return 0>a?0:1 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n#endif\n#ifdef WRAP_AROUND\nuniform vec3 wrapRGB;\n#endif", -lights_lambert_vertex:"vLightWeighting = vec3( 0.0 );\n#if MAX_DIR_LIGHTS > 0\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\n#ifdef WRAP_AROUND\nfloat directionalLightWeightingFull = max( dot( transformedNormal, dirVector ), 0.0 );\nfloat directionalLightWeightingHalf = max( 0.5 * dot( transformedNormal, dirVector ) + 0.5, 0.0 );\nvec3 directionalLightWeighting = mix( vec3( directionalLightWeightingFull ), vec3( directionalLightWeightingHalf ), wrapRGB );\n#else\nfloat directionalLightWeighting = max( dot( transformedNormal, dirVector ), 0.0 );\n#endif\nvLightWeighting += directionalLightColor[ i ] * directionalLightWeighting;\n}\n#endif\n#if MAX_POINT_LIGHTS > 0\nfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\n#ifdef WRAP_AROUND\nfloat pointLightWeightingFull = max( dot( transformedNormal, lVector ), 0.0 );\nfloat pointLightWeightingHalf = max( 0.5 * dot( transformedNormal, lVector ) + 0.5, 0.0 );\nvec3 pointLightWeighting = mix( vec3 ( pointLightWeightingFull ), vec3( pointLightWeightingHalf ), wrapRGB );\n#else\nfloat pointLightWeighting = max( dot( transformedNormal, lVector ), 0.0 );\n#endif\nvLightWeighting += pointLightColor[ i ] * pointLightWeighting * lDistance;\n}\n#endif\nvLightWeighting = vLightWeighting * diffuse + ambient * ambientLightColor;", -lights_phong_pars_vertex:"#if MAX_POINT_LIGHTS > 0\n#ifndef PHONG_PER_PIXEL\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];\n#endif\n#endif",lights_phong_vertex:"#if MAX_POINT_LIGHTS > 0\n#ifndef PHONG_PER_PIXEL\nfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nvPointLight[ i ] = vec4( lVector, lDistance );\n}\n#endif\n#endif", -lights_phong_pars_fragment:"uniform vec3 ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\n#ifdef PHONG_PER_PIXEL\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n#else\nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];\n#endif\n#endif\n#ifdef WRAP_AROUND\nuniform vec3 wrapRGB;\n#endif\nvarying vec3 vViewPosition;\nvarying vec3 vNormal;", -lights_phong_fragment:"vec3 normal = normalize( vNormal );\nvec3 viewPosition = normalize( vViewPosition );\n#if MAX_POINT_LIGHTS > 0\nvec3 pointDiffuse = vec3( 0.0 );\nvec3 pointSpecular = vec3( 0.0 );\nfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\n#ifdef PHONG_PER_PIXEL\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz + vViewPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\n#else\nvec3 lVector = normalize( vPointLight[ i ].xyz );\nfloat lDistance = vPointLight[ i ].w;\n#endif\n#ifdef WRAP_AROUND\nfloat pointDiffuseWeightFull = max( dot( normal, lVector ), 0.0 );\nfloat pointDiffuseWeightHalf = max( 0.5 * dot( normal, lVector ) + 0.5, 0.0 );\nvec3 pointDiffuseWeight = mix( vec3 ( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );\n#else\nfloat pointDiffuseWeight = max( dot( normal, lVector ), 0.0 );\n#endif\npointDiffuse += diffuse * pointLightColor[ i ] * pointDiffuseWeight * lDistance;\nvec3 pointHalfVector = normalize( lVector + viewPosition );\nfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\nfloat pointSpecularWeight = max( pow( pointDotNormalHalf, shininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nvec3 schlick = specular + vec3( 1.0 - specular ) * pow( dot( lVector, pointHalfVector ), 5.0 );\npointSpecular += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * lDistance;\n#else\npointSpecular += specular * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * lDistance;\n#endif\n}\n#endif\n#if MAX_DIR_LIGHTS > 0\nvec3 dirDiffuse = vec3( 0.0 );\nvec3 dirSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\n#ifdef WRAP_AROUND\nfloat dirDiffuseWeightFull = max( dot( normal, dirVector ), 0.0 );\nfloat dirDiffuseWeightHalf = max( 0.5 * dot( normal, dirVector ) + 0.5, 0.0 );\nvec3 dirDiffuseWeight = mix( vec3( dirDiffuseWeightFull ), vec3( dirDiffuseWeightHalf ), wrapRGB );\n#else\nfloat dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );\n#endif\ndirDiffuse += diffuse * directionalLightColor[ i ] * dirDiffuseWeight;\nvec3 dirHalfVector = normalize( dirVector + viewPosition );\nfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\nfloat dirSpecularWeight = max( pow( dirDotNormalHalf, shininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nvec3 schlick = specular + vec3( 1.0 - specular ) * pow( dot( dirVector, dirHalfVector ), 5.0 );\ndirSpecular += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight;\n#else\ndirSpecular += specular * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight;\n#endif\n}\n#endif\nvec3 totalDiffuse = vec3( 0.0 );\nvec3 totalSpecular = vec3( 0.0 );\n#if MAX_DIR_LIGHTS > 0\ntotalDiffuse += dirDiffuse;\ntotalSpecular += dirSpecular;\n#endif\n#if MAX_POINT_LIGHTS > 0\ntotalDiffuse += pointDiffuse;\ntotalSpecular += pointSpecular;\n#endif\n#ifdef METAL\ngl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * ambient + totalSpecular );\n#else\ngl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * ambient ) + totalSpecular;\n#endif", -color_pars_fragment:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_fragment:"#ifdef USE_COLOR\ngl_FragColor = gl_FragColor * vec4( vColor, opacity );\n#endif",color_pars_vertex:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n#ifdef GAMMA_INPUT\nvColor = color * color;\n#else\nvColor = color;\n#endif\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\nuniform mat4 boneGlobalMatrices[ MAX_BONES ];\n#endif",skinning_vertex:"#ifdef USE_SKINNING\ngl_Position = ( boneGlobalMatrices[ int( skinIndex.x ) ] * skinVertexA ) * skinWeight.x;\ngl_Position += ( boneGlobalMatrices[ int( skinIndex.y ) ] * skinVertexB ) * skinWeight.y;\ngl_Position = projectionMatrix * viewMatrix * objectMatrix * gl_Position;\n#endif", -morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\nuniform float morphTargetInfluences[ 8 ];\n#endif",morphtarget_vertex:"#ifdef USE_MORPHTARGETS\nvec3 morphed = vec3( 0.0, 0.0, 0.0 );\nmorphed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\nmorphed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\nmorphed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\nmorphed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\nmorphed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\nmorphed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\nmorphed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\nmorphed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\nmorphed += position;\ngl_Position = projectionMatrix * modelViewMatrix * vec4( morphed, 1.0 );\n#endif", -default_vertex:"#ifndef USE_MORPHTARGETS\n#ifndef USE_SKINNING\ngl_Position = projectionMatrix * mvPosition;\n#endif\n#endif",shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\nuniform sampler2D shadowMap[ MAX_SHADOWS ];\nuniform vec2 shadowMapSize[ MAX_SHADOWS ];\nuniform float shadowDarkness[ MAX_SHADOWS ];\nuniform float shadowBias[ MAX_SHADOWS ];\nvarying vec4 vShadowCoord[ MAX_SHADOWS ];\nfloat unpackDepth( const in vec4 rgba_depth ) {\nconst vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\nfloat depth = dot( rgba_depth, bit_shift );\nreturn depth;\n}\n#endif", -shadowmap_fragment:"#ifdef USE_SHADOWMAP\nvec3 shadowColor = vec3( 1.0 );\nfloat fDepth;\nfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\nvec3 shadowCoord = vShadowCoord[ i ].xyz / vShadowCoord[ i ].w;\nif ( shadowCoord.z <= 1.0 ) {\nshadowCoord.z += shadowBias[ i ];\nbvec4 shadowTest = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\nif ( all( shadowTest ) ) {\n#ifdef SHADOWMAP_SOFT\nfloat shadow = 0.0;\nconst float shadowDelta = 1.0 / 9.0;\nfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\nfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\nfloat dx0 = -1.25 * xPixelOffset;\nfloat dy0 = -1.25 * yPixelOffset;\nfloat dx1 = 1.25 * xPixelOffset;\nfloat dy1 = 1.25 * yPixelOffset;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\n#else\nvec4 rgbaDepth = texture2D( shadowMap[ i ], shadowCoord.xy );\nfloat fDepth = unpackDepth( rgbaDepth );\nif ( fDepth < shadowCoord.z )\nshadowColor = shadowColor * vec3( 1.0 - shadowDarkness[ i ] );\n#endif\n}\n}\n}\n#ifdef GAMMA_OUTPUT\nshadowColor *= shadowColor;\n#endif\ngl_FragColor.xyz = gl_FragColor.xyz * shadowColor;\n#endif", -shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\nvarying vec4 vShadowCoord[ MAX_SHADOWS ];\nuniform mat4 shadowMatrix[ MAX_SHADOWS ];\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\nfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\n#ifdef USE_MORPHTARGETS\nvShadowCoord[ i ] = shadowMatrix[ i ] * objectMatrix * vec4( morphed, 1.0 );\n#else\nvShadowCoord[ i ] = shadowMatrix[ i ] * objectMatrix * vec4( position, 1.0 );\n#endif\n}\n#endif",alphatest_fragment:"#ifdef ALPHATEST\nif ( gl_FragColor.a < ALPHATEST ) discard;\n#endif", -linear_to_gamma_fragment:"#ifdef GAMMA_OUTPUT\ngl_FragColor.xyz = sqrt( gl_FragColor.xyz );\n#endif"}; +// three.js r63 - http://github.com/mrdoob/three.js +'use strict';var THREE={REVISION:"63"};self.console=self.console||{info:function(){},log:function(){},debug:function(){},warn:function(){},error:function(){}};String.prototype.trim=String.prototype.trim||function(){return this.replace(/^\s+|\s+$/g,"")};THREE.extend=function(a,b){if(Object.keys)for(var c=Object.keys(b),d=0,e=c.length;d>16&255)/255;this.g=(a>>8&255)/255;this.b=(a&255)/255;return this},setRGB:function(a,b,c){this.r=a;this.g=b;this.b=c;return this},setHSL:function(a,b,c){if(0===b)this.r=this.g=this.b=c;else{var d=function(a,b,c){0>c&&(c+=1);1c?b:c<2/3?a+6*(b-a)*(2/3-c):a},b=0.5>=c?c*(1+b):c+b-c*b,c=2*c-b;this.r=d(c,b,a+1/3);this.g=d(c,b,a);this.b=d(c,b,a-1/3)}return this},setStyle:function(a){if(/^rgb\((\d+), ?(\d+), ?(\d+)\)$/i.test(a))return a=/^rgb\((\d+), ?(\d+), ?(\d+)\)$/i.exec(a),this.r=Math.min(255,parseInt(a[1],10))/255,this.g=Math.min(255,parseInt(a[2],10))/255,this.b=Math.min(255,parseInt(a[3],10))/255,this;if(/^rgb\((\d+)\%, ?(\d+)\%, ?(\d+)\%\)$/i.test(a))return a=/^rgb\((\d+)\%, ?(\d+)\%, ?(\d+)\%\)$/i.exec(a),this.r= +Math.min(100,parseInt(a[1],10))/100,this.g=Math.min(100,parseInt(a[2],10))/100,this.b=Math.min(100,parseInt(a[3],10))/100,this;if(/^\#([0-9a-f]{6})$/i.test(a))return a=/^\#([0-9a-f]{6})$/i.exec(a),this.setHex(parseInt(a[1],16)),this;if(/^\#([0-9a-f])([0-9a-f])([0-9a-f])$/i.test(a))return a=/^\#([0-9a-f])([0-9a-f])([0-9a-f])$/i.exec(a),this.setHex(parseInt(a[1]+a[1]+a[2]+a[2]+a[3]+a[3],16)),this;if(/^(\w+)$/i.test(a))return this.setHex(THREE.ColorKeywords[a]),this},copy:function(a){this.r=a.r;this.g= +a.g;this.b=a.b;return this},copyGammaToLinear:function(a){this.r=a.r*a.r;this.g=a.g*a.g;this.b=a.b*a.b;return this},copyLinearToGamma:function(a){this.r=Math.sqrt(a.r);this.g=Math.sqrt(a.g);this.b=Math.sqrt(a.b);return this},convertGammaToLinear:function(){var a=this.r,b=this.g,c=this.b;this.r=a*a;this.g=b*b;this.b=c*c;return this},convertLinearToGamma:function(){this.r=Math.sqrt(this.r);this.g=Math.sqrt(this.g);this.b=Math.sqrt(this.b);return this},getHex:function(){return 255*this.r<<16^255*this.g<< +8^255*this.b<<0},getHexString:function(){return("000000"+this.getHex().toString(16)).slice(-6)},getHSL:function(){var a={h:0,s:0,l:0};return function(){var b=this.r,c=this.g,d=this.b,e=Math.max(b,c,d),f=Math.min(b,c,d),h,g=(f+e)/2;if(f===e)f=h=0;else{var i=e-f,f=0.5>=g?i/(e+f):i/(2-e-f);switch(e){case b:h=(c-d)/i+(cf&&c>b?(c=2*Math.sqrt(1+c-f-b),this._w=(i-h)/c,this._x=0.25*c, +this._y=(a+e)/c,this._z=(d+g)/c):f>b?(c=2*Math.sqrt(1+f-c-b),this._w=(d-g)/c,this._x=(a+e)/c,this._y=0.25*c,this._z=(h+i)/c):(c=2*Math.sqrt(1+b-c-f),this._w=(e-a)/c,this._x=(d+g)/c,this._y=(h+i)/c,this._z=0.25*c);this._updateEuler();return this},inverse:function(){this.conjugate().normalize();return this},conjugate:function(){this._x*=-1;this._y*=-1;this._z*=-1;this._updateEuler();return this},lengthSq:function(){return this._x*this._x+this._y*this._y+this._z*this._z+this._w*this._w},length:function(){return Math.sqrt(this._x* +this._x+this._y*this._y+this._z*this._z+this._w*this._w)},normalize:function(){var a=this.length();0===a?(this._z=this._y=this._x=0,this._w=1):(a=1/a,this._x*=a,this._y*=a,this._z*=a,this._w*=a);return this},multiply:function(a,b){return void 0!==b?(console.warn("DEPRECATED: Quaternion's .multiply() now only accepts one argument. Use .multiplyQuaternions( a, b ) instead."),this.multiplyQuaternions(a,b)):this.multiplyQuaternions(this,a)},multiplyQuaternions:function(a,b){var c=a._x,d=a._y,e=a._z,f= +a._w,h=b._x,g=b._y,i=b._z,k=b._w;this._x=c*k+f*h+d*i-e*g;this._y=d*k+f*g+e*h-c*i;this._z=e*k+f*i+c*g-d*h;this._w=f*k-c*h-d*g-e*i;this._updateEuler();return this},multiplyVector3:function(a){console.warn("DEPRECATED: Quaternion's .multiplyVector3() has been removed. Use is now vector.applyQuaternion( quaternion ) instead.");return a.applyQuaternion(this)},slerp:function(a,b){var c=this._x,d=this._y,e=this._z,f=this._w,h=f*a._w+c*a._x+d*a._y+e*a._z;0>h?(this._w=-a._w,this._x=-a._x,this._y=-a._y,this._z= +-a._z,h=-h):this.copy(a);if(1<=h)return this._w=f,this._x=c,this._y=d,this._z=e,this;var g=Math.acos(h),i=Math.sqrt(1-h*h);if(0.0010>Math.abs(i))return this._w=0.5*(f+this._w),this._x=0.5*(c+this._x),this._y=0.5*(d+this._y),this._z=0.5*(e+this._z),this;h=Math.sin((1-b)*g)/i;g=Math.sin(b*g)/i;this._w=f*h+this._w*g;this._x=c*h+this._x*g;this._y=d*h+this._y*g;this._z=e*h+this._z*g;this._updateEuler();return this},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._w===this._w}, +fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];this._w=a[3];this._updateEuler();return this},toArray:function(){return[this._x,this._y,this._z,this._w]},clone:function(){return new THREE.Quaternion(this._x,this._y,this._z,this._w)}};THREE.Quaternion.slerp=function(a,b,c,d){return c.copy(a).slerp(b,d)};THREE.Vector2=function(a,b){this.x=a||0;this.y=b||0}; +THREE.Vector2.prototype={constructor:THREE.Vector2,set:function(a,b){this.x=a;this.y=b;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;default:throw Error("index is out of range: "+a);}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;default:throw Error("index is out of range: "+a);}},copy:function(a){this.x=a.x;this.y=a.y;return this},add:function(a, +b){if(void 0!==b)return console.warn("DEPRECATED: Vector2's .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;return this},addScalar:function(a){this.x+=a;this.y+=a;return this},sub:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector2's .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-= +a.y;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;return this},divideScalar:function(a){0!==a?(a=1/a,this.x*=a,this.y*=a):this.y=this.x=0;return this},min:function(a){this.x>a.x&&(this.x=a.x);this.y>a.y&&(this.y=a.y);return this},max:function(a){this.xb.x&&(this.x=b.x);this.yb.y&&(this.y=b.y); +return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y},lengthSq:function(){return this.x*this.x+this.y*this.y},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},normalize:function(){return this.divideScalar(this.length())},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,a=this.y-a.y;return b*b+a*a},setLength:function(a){var b=this.length();0!==b&&a!==b&&this.multiplyScalar(a/ +b);return this},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;return this},equals:function(a){return a.x===this.x&&a.y===this.y},fromArray:function(a){this.x=a[0];this.y=a[1];return this},toArray:function(){return[this.x,this.y]},clone:function(){return new THREE.Vector2(this.x,this.y)}};THREE.Vector3=function(a,b,c){this.x=a||0;this.y=b||0;this.z=c||0}; +THREE.Vector3.prototype={constructor:THREE.Vector3,set:function(a,b,c){this.x=a;this.y=b;this.z=c;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;default:throw Error("index is out of range: "+a);}},getComponent:function(a){switch(a){case 0:return this.x;case 1:return this.y;case 2:return this.z;default:throw Error("index is out of range: "+ +a);}},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;return this},add:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector3's .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;return this},addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;return this},sub:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector3's .sub() now only accepts one argument. Use .subVectors( a, b ) instead."), +this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;return this},multiply:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector3's .multiply() now only accepts one argument. Use .multiplyVectors( a, b ) instead."),this.multiplyVectors(a,b);this.x*=a.x;this.y*=a.y;this.z*=a.z;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;return this},multiplyVectors:function(a,b){this.x=a.x* +b.x;this.y=a.y*b.y;this.z=a.z*b.z;return this},applyMatrix3:function(a){var b=this.x,c=this.y,d=this.z,a=a.elements;this.x=a[0]*b+a[3]*c+a[6]*d;this.y=a[1]*b+a[4]*c+a[7]*d;this.z=a[2]*b+a[5]*c+a[8]*d;return this},applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12];this.y=a[1]*b+a[5]*c+a[9]*d+a[13];this.z=a[2]*b+a[6]*c+a[10]*d+a[14];return this},applyProjection:function(a){var b=this.x,c=this.y,d=this.z,a=a.elements,e=1/(a[3]*b+a[7]*c+a[11]*d+a[15]); +this.x=(a[0]*b+a[4]*c+a[8]*d+a[12])*e;this.y=(a[1]*b+a[5]*c+a[9]*d+a[13])*e;this.z=(a[2]*b+a[6]*c+a[10]*d+a[14])*e;return this},applyQuaternion:function(a){var b=this.x,c=this.y,d=this.z,e=a.x,f=a.y,h=a.z,a=a.w,g=a*b+f*d-h*c,i=a*c+h*b-e*d,k=a*d+e*c-f*b,b=-e*b-f*c-h*d;this.x=g*a+b*-e+i*-h-k*-f;this.y=i*a+b*-f+k*-e-g*-h;this.z=k*a+b*-h+g*-f-i*-e;return this},transformDirection:function(a){var b=this.x,c=this.y,d=this.z,a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d;this.y=a[1]*b+a[5]*c+a[9]*d;this.z=a[2]* +b+a[6]*c+a[10]*d;this.normalize();return this},divide:function(a){this.x/=a.x;this.y/=a.y;this.z/=a.z;return this},divideScalar:function(a){0!==a?(a=1/a,this.x*=a,this.y*=a,this.z*=a):this.z=this.y=this.x=0;return this},min:function(a){this.x>a.x&&(this.x=a.x);this.y>a.y&&(this.y=a.y);this.z>a.z&&(this.z=a.z);return this},max:function(a){this.xb.x&&(this.x=b.x);this.y< +a.y?this.y=a.y:this.y>b.y&&(this.y=b.y);this.zb.z&&(this.z=b.z);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z},length:function(){return Math.sqrt(this.x*this.x+this.y*this.y+this.z*this.z)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)},normalize:function(){return this.divideScalar(this.length())}, +setLength:function(a){var b=this.length();0!==b&&a!==b&&this.multiplyScalar(a/b);return this},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;return this},cross:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector3's .cross() now only accepts one argument. Use .crossVectors( a, b ) instead."),this.crossVectors(a,b);var c=this.x,d=this.y,e=this.z;this.x=d*a.z-e*a.y;this.y=e*a.x-c*a.z;this.z=c*a.y-d*a.x;return this},crossVectors:function(a,b){var c= +a.x,d=a.y,e=a.z,f=b.x,h=b.y,g=b.z;this.x=d*g-e*h;this.y=e*f-c*g;this.z=c*h-d*f;return this},angleTo:function(a){a=this.dot(a)/(this.length()*a.length());return Math.acos(THREE.Math.clamp(a,-1,1))},distanceTo:function(a){return Math.sqrt(this.distanceToSquared(a))},distanceToSquared:function(a){var b=this.x-a.x,c=this.y-a.y,a=this.z-a.z;return b*b+c*c+a*a},setEulerFromRotationMatrix:function(){console.error("REMOVED: Vector3's setEulerFromRotationMatrix has been removed in favor of Euler.setFromRotationMatrix(), please update your code.")}, +setEulerFromQuaternion:function(){console.error("REMOVED: Vector3's setEulerFromQuaternion: has been removed in favor of Euler.setFromQuaternion(), please update your code.")},getPositionFromMatrix:function(a){this.x=a.elements[12];this.y=a.elements[13];this.z=a.elements[14];return this},getScaleFromMatrix:function(a){var b=this.set(a.elements[0],a.elements[1],a.elements[2]).length(),c=this.set(a.elements[4],a.elements[5],a.elements[6]).length(),a=this.set(a.elements[8],a.elements[9],a.elements[10]).length(); +this.x=b;this.y=c;this.z=a;return this},getColumnFromMatrix:function(a,b){var c=4*a,d=b.elements;this.x=d[c];this.y=d[c+1];this.z=d[c+2];return this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z},fromArray:function(a){this.x=a[0];this.y=a[1];this.z=a[2];return this},toArray:function(){return[this.x,this.y,this.z]},clone:function(){return new THREE.Vector3(this.x,this.y,this.z)}}; +THREE.extend(THREE.Vector3.prototype,{applyEuler:function(){var a=new THREE.Quaternion;return function(b){!1===b instanceof THREE.Euler&&console.error("ERROR: Vector3's .applyEuler() now expects a Euler rotation rather than a Vector3 and order. Please update your code.");this.applyQuaternion(a.setFromEuler(b));return this}}(),applyAxisAngle:function(){var a=new THREE.Quaternion;return function(b,c){this.applyQuaternion(a.setFromAxisAngle(b,c));return this}}(),projectOnVector:function(){var a=new THREE.Vector3; +return function(b){a.copy(b).normalize();b=this.dot(a);return this.copy(a).multiplyScalar(b)}}(),projectOnPlane:function(){var a=new THREE.Vector3;return function(b){a.copy(this).projectOnVector(b);return this.sub(a)}}(),reflect:function(){var a=new THREE.Vector3;return function(b){a.copy(this).projectOnVector(b).multiplyScalar(2);return this.subVectors(a,this)}}()});THREE.Vector4=function(a,b,c,d){this.x=a||0;this.y=b||0;this.z=c||0;this.w=void 0!==d?d:1}; +THREE.Vector4.prototype={constructor:THREE.Vector4,set:function(a,b,c,d){this.x=a;this.y=b;this.z=c;this.w=d;return this},setX:function(a){this.x=a;return this},setY:function(a){this.y=a;return this},setZ:function(a){this.z=a;return this},setW:function(a){this.w=a;return this},setComponent:function(a,b){switch(a){case 0:this.x=b;break;case 1:this.y=b;break;case 2:this.z=b;break;case 3:this.w=b;break;default:throw Error("index is out of range: "+a);}},getComponent:function(a){switch(a){case 0:return this.x; +case 1:return this.y;case 2:return this.z;case 3:return this.w;default:throw Error("index is out of range: "+a);}},copy:function(a){this.x=a.x;this.y=a.y;this.z=a.z;this.w=void 0!==a.w?a.w:1;return this},add:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector4's .add() now only accepts one argument. Use .addVectors( a, b ) instead."),this.addVectors(a,b);this.x+=a.x;this.y+=a.y;this.z+=a.z;this.w+=a.w;return this},addScalar:function(a){this.x+=a;this.y+=a;this.z+=a;this.w+=a;return this}, +addVectors:function(a,b){this.x=a.x+b.x;this.y=a.y+b.y;this.z=a.z+b.z;this.w=a.w+b.w;return this},sub:function(a,b){if(void 0!==b)return console.warn("DEPRECATED: Vector4's .sub() now only accepts one argument. Use .subVectors( a, b ) instead."),this.subVectors(a,b);this.x-=a.x;this.y-=a.y;this.z-=a.z;this.w-=a.w;return this},subVectors:function(a,b){this.x=a.x-b.x;this.y=a.y-b.y;this.z=a.z-b.z;this.w=a.w-b.w;return this},multiplyScalar:function(a){this.x*=a;this.y*=a;this.z*=a;this.w*=a;return this}, +applyMatrix4:function(a){var b=this.x,c=this.y,d=this.z,e=this.w,a=a.elements;this.x=a[0]*b+a[4]*c+a[8]*d+a[12]*e;this.y=a[1]*b+a[5]*c+a[9]*d+a[13]*e;this.z=a[2]*b+a[6]*c+a[10]*d+a[14]*e;this.w=a[3]*b+a[7]*c+a[11]*d+a[15]*e;return this},divideScalar:function(a){0!==a?(a=1/a,this.x*=a,this.y*=a,this.z*=a,this.w*=a):(this.z=this.y=this.x=0,this.w=1);return this},setAxisAngleFromQuaternion:function(a){this.w=2*Math.acos(a.w);var b=Math.sqrt(1-a.w*a.w);1E-4>b?(this.x=1,this.z=this.y=0):(this.x=a.x/b, +this.y=a.y/b,this.z=a.z/b);return this},setAxisAngleFromRotationMatrix:function(a){var b,c,d,a=a.elements,e=a[0];d=a[4];var f=a[8],h=a[1],g=a[5],i=a[9];c=a[2];b=a[6];var k=a[10];if(0.01>Math.abs(d-h)&&0.01>Math.abs(f-c)&&0.01>Math.abs(i-b)){if(0.1>Math.abs(d+h)&&0.1>Math.abs(f+c)&&0.1>Math.abs(i+b)&&0.1>Math.abs(e+g+k-3))return this.set(1,0,0,0),this;a=Math.PI;e=(e+1)/2;g=(g+1)/2;k=(k+1)/2;d=(d+h)/4;f=(f+c)/4;i=(i+b)/4;e>g&&e>k?0.01>e?(b=0,d=c=0.707106781):(b=Math.sqrt(e),c=d/b,d=f/b):g>k?0.01>g? +(b=0.707106781,c=0,d=0.707106781):(c=Math.sqrt(g),b=d/c,d=i/c):0.01>k?(c=b=0.707106781,d=0):(d=Math.sqrt(k),b=f/d,c=i/d);this.set(b,c,d,a);return this}a=Math.sqrt((b-i)*(b-i)+(f-c)*(f-c)+(h-d)*(h-d));0.0010>Math.abs(a)&&(a=1);this.x=(b-i)/a;this.y=(f-c)/a;this.z=(h-d)/a;this.w=Math.acos((e+g+k-1)/2);return this},min:function(a){this.x>a.x&&(this.x=a.x);this.y>a.y&&(this.y=a.y);this.z>a.z&&(this.z=a.z);this.w>a.w&&(this.w=a.w);return this},max:function(a){this.xb.x&&(this.x=b.x);this.yb.y&&(this.y=b.y);this.zb.z&&(this.z=b.z);this.wb.w&&(this.w=b.w);return this},negate:function(){return this.multiplyScalar(-1)},dot:function(a){return this.x*a.x+this.y*a.y+this.z*a.z+this.w*a.w},lengthSq:function(){return this.x*this.x+this.y*this.y+this.z*this.z+this.w*this.w},length:function(){return Math.sqrt(this.x* +this.x+this.y*this.y+this.z*this.z+this.w*this.w)},lengthManhattan:function(){return Math.abs(this.x)+Math.abs(this.y)+Math.abs(this.z)+Math.abs(this.w)},normalize:function(){return this.divideScalar(this.length())},setLength:function(a){var b=this.length();0!==b&&a!==b&&this.multiplyScalar(a/b);return this},lerp:function(a,b){this.x+=(a.x-this.x)*b;this.y+=(a.y-this.y)*b;this.z+=(a.z-this.z)*b;this.w+=(a.w-this.w)*b;return this},equals:function(a){return a.x===this.x&&a.y===this.y&&a.z===this.z&& +a.w===this.w},fromArray:function(a){this.x=a[0];this.y=a[1];this.z=a[2];this.w=a[3];return this},toArray:function(){return[this.x,this.y,this.z,this.w]},clone:function(){return new THREE.Vector4(this.x,this.y,this.z,this.w)}};THREE.Euler=function(a,b,c,d){this._x=a||0;this._y=b||0;this._z=c||0;this._order=d||THREE.Euler.DefaultOrder};THREE.Euler.RotationOrders="XYZ YZX ZXY XZY YXZ ZYX".split(" ");THREE.Euler.DefaultOrder="XYZ"; +THREE.Euler.prototype={constructor:THREE.Euler,_x:0,_y:0,_z:0,_order:THREE.Euler.DefaultOrder,_quaternion:void 0,_updateQuaternion:function(){void 0!==this._quaternion&&this._quaternion.setFromEuler(this,!1)},get x(){return this._x},set x(a){this._x=a;this._updateQuaternion()},get y(){return this._y},set y(a){this._y=a;this._updateQuaternion()},get z(){return this._z},set z(a){this._z=a;this._updateQuaternion()},get order(){return this._order},set order(a){this._order=a;this._updateQuaternion()}, +set:function(a,b,c,d){this._x=a;this._y=b;this._z=c;this._order=d||this._order;this._updateQuaternion();return this},copy:function(a){this._x=a._x;this._y=a._y;this._z=a._z;this._order=a._order;this._updateQuaternion();return this},setFromRotationMatrix:function(a,b){function c(a){return Math.min(Math.max(a,-1),1)}var d=a.elements,e=d[0],f=d[4],h=d[8],g=d[1],i=d[5],k=d[9],m=d[2],l=d[6],d=d[10],b=b||this._order;"XYZ"===b?(this._y=Math.asin(c(h)),0.99999>Math.abs(h)?(this._x=Math.atan2(-k,d),this._z= +Math.atan2(-f,e)):(this._x=Math.atan2(l,i),this._z=0)):"YXZ"===b?(this._x=Math.asin(-c(k)),0.99999>Math.abs(k)?(this._y=Math.atan2(h,d),this._z=Math.atan2(g,i)):(this._y=Math.atan2(-m,e),this._z=0)):"ZXY"===b?(this._x=Math.asin(c(l)),0.99999>Math.abs(l)?(this._y=Math.atan2(-m,d),this._z=Math.atan2(-f,i)):(this._y=0,this._z=Math.atan2(g,e))):"ZYX"===b?(this._y=Math.asin(-c(m)),0.99999>Math.abs(m)?(this._x=Math.atan2(l,d),this._z=Math.atan2(g,e)):(this._x=0,this._z=Math.atan2(-f,i))):"YZX"===b?(this._z= +Math.asin(c(g)),0.99999>Math.abs(g)?(this._x=Math.atan2(-k,i),this._y=Math.atan2(-m,e)):(this._x=0,this._y=Math.atan2(h,d))):"XZY"===b?(this._z=Math.asin(-c(f)),0.99999>Math.abs(f)?(this._x=Math.atan2(l,i),this._y=Math.atan2(h,e)):(this._x=Math.atan2(-k,d),this._y=0)):console.warn("WARNING: Euler.setFromRotationMatrix() given unsupported order: "+b);this._order=b;this._updateQuaternion();return this},setFromQuaternion:function(a,b,c){function d(a){return Math.min(Math.max(a,-1),1)}var e=a.x*a.x,f= +a.y*a.y,h=a.z*a.z,g=a.w*a.w,b=b||this._order;"XYZ"===b?(this._x=Math.atan2(2*(a.x*a.w-a.y*a.z),g-e-f+h),this._y=Math.asin(d(2*(a.x*a.z+a.y*a.w))),this._z=Math.atan2(2*(a.z*a.w-a.x*a.y),g+e-f-h)):"YXZ"===b?(this._x=Math.asin(d(2*(a.x*a.w-a.y*a.z))),this._y=Math.atan2(2*(a.x*a.z+a.y*a.w),g-e-f+h),this._z=Math.atan2(2*(a.x*a.y+a.z*a.w),g-e+f-h)):"ZXY"===b?(this._x=Math.asin(d(2*(a.x*a.w+a.y*a.z))),this._y=Math.atan2(2*(a.y*a.w-a.z*a.x),g-e-f+h),this._z=Math.atan2(2*(a.z*a.w-a.x*a.y),g-e+f-h)):"ZYX"=== +b?(this._x=Math.atan2(2*(a.x*a.w+a.z*a.y),g-e-f+h),this._y=Math.asin(d(2*(a.y*a.w-a.x*a.z))),this._z=Math.atan2(2*(a.x*a.y+a.z*a.w),g+e-f-h)):"YZX"===b?(this._x=Math.atan2(2*(a.x*a.w-a.z*a.y),g-e+f-h),this._y=Math.atan2(2*(a.y*a.w-a.x*a.z),g+e-f-h),this._z=Math.asin(d(2*(a.x*a.y+a.z*a.w)))):"XZY"===b?(this._x=Math.atan2(2*(a.x*a.w+a.y*a.z),g-e+f-h),this._y=Math.atan2(2*(a.x*a.z+a.y*a.w),g+e-f-h),this._z=Math.asin(d(2*(a.z*a.w-a.x*a.y)))):console.warn("WARNING: Euler.setFromQuaternion() given unsupported order: "+ +b);this._order=b;!1!==c&&this._updateQuaternion();return this},reorder:function(){var a=new THREE.Quaternion;return function(b){a.setFromEuler(this);this.setFromQuaternion(a,b)}}(),fromArray:function(a){this._x=a[0];this._y=a[1];this._z=a[2];void 0!==a[3]&&(this._order=a[3]);this._updateQuaternion();return this},toArray:function(){return[this._x,this._y,this._z,this._order]},equals:function(a){return a._x===this._x&&a._y===this._y&&a._z===this._z&&a._order===this._order},clone:function(){return new THREE.Euler(this._x, +this._y,this._z,this._order)}};THREE.Line3=function(a,b){this.start=void 0!==a?a:new THREE.Vector3;this.end=void 0!==b?b:new THREE.Vector3}; +THREE.Line3.prototype={constructor:THREE.Line3,set:function(a,b){this.start.copy(a);this.end.copy(b);return this},copy:function(a){this.start.copy(a.start);this.end.copy(a.end);return this},center:function(a){return(a||new THREE.Vector3).addVectors(this.start,this.end).multiplyScalar(0.5)},delta:function(a){return(a||new THREE.Vector3).subVectors(this.end,this.start)},distanceSq:function(){return this.start.distanceToSquared(this.end)},distance:function(){return this.start.distanceTo(this.end)},at:function(a, +b){var c=b||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},closestPointToPointParameter:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d){a.subVectors(c,this.start);b.subVectors(this.end,this.start);var e=b.dot(b),e=b.dot(a)/e;d&&(e=THREE.Math.clamp(e,0,1));return e}}(),closestPointToPoint:function(a,b,c){a=this.closestPointToPointParameter(a,b);c=c||new THREE.Vector3;return this.delta(c).multiplyScalar(a).add(this.start)},applyMatrix4:function(a){this.start.applyMatrix4(a); +this.end.applyMatrix4(a);return this},equals:function(a){return a.start.equals(this.start)&&a.end.equals(this.end)},clone:function(){return(new THREE.Line3).copy(this)}};THREE.Box2=function(a,b){this.min=void 0!==a?a:new THREE.Vector2(Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector2(-Infinity,-Infinity)}; +THREE.Box2.prototype={constructor:THREE.Box2,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},setFromPoints:function(a){if(0this.max.x&&(this.max.x=b.x),b.ythis.max.y&&(this.max.y=b.y)}else this.makeEmpty();return this},setFromCenterAndSize:function(){var a=new THREE.Vector2;return function(b,c){var d=a.copy(c).multiplyScalar(0.5); +this.min.copy(b).sub(d);this.max.copy(b).add(d);return this}}(),copy:function(a){this.min.copy(a.min);this.max.copy(a.max);return this},makeEmpty:function(){this.min.x=this.min.y=Infinity;this.max.x=this.max.y=-Infinity;return this},empty:function(){return this.max.xthis.max.x||a.ythis.max.y?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y?!0:!1},getParameter:function(a){return new THREE.Vector2((a.x-this.min.x)/(this.max.x-this.min.x), +(a.y-this.min.y)/(this.max.y-this.min.y))},isIntersectionBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y?!1:!0},clampPoint:function(a,b){return(b||new THREE.Vector2).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new THREE.Vector2;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max); +return this},translate:function(a){this.min.add(a);this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)},clone:function(){return(new THREE.Box2).copy(this)}};THREE.Box3=function(a,b){this.min=void 0!==a?a:new THREE.Vector3(Infinity,Infinity,Infinity);this.max=void 0!==b?b:new THREE.Vector3(-Infinity,-Infinity,-Infinity)}; +THREE.Box3.prototype={constructor:THREE.Box3,set:function(a,b){this.min.copy(a);this.max.copy(b);return this},addPoint:function(a){a.xthis.max.x&&(this.max.x=a.x);a.ythis.max.y&&(this.max.y=a.y);a.zthis.max.z&&(this.max.z=a.z)},setFromPoints:function(a){if(0this.max.x||a.ythis.max.y||a.zthis.max.z?!1:!0},containsBox:function(a){return this.min.x<=a.min.x&&a.max.x<=this.max.x&&this.min.y<=a.min.y&&a.max.y<=this.max.y&&this.min.z<=a.min.z&&a.max.z<=this.max.z?!0:!1},getParameter:function(a){return new THREE.Vector3((a.x-this.min.x)/(this.max.x-this.min.x), +(a.y-this.min.y)/(this.max.y-this.min.y),(a.z-this.min.z)/(this.max.z-this.min.z))},isIntersectionBox:function(a){return a.max.xthis.max.x||a.max.ythis.max.y||a.max.zthis.max.z?!1:!0},clampPoint:function(a,b){return(b||new THREE.Vector3).copy(a).clamp(this.min,this.max)},distanceToPoint:function(){var a=new THREE.Vector3;return function(b){return a.copy(b).clamp(this.min,this.max).sub(b).length()}}(),getBoundingSphere:function(){var a= +new THREE.Vector3;return function(b){b=b||new THREE.Sphere;b.center=this.center();b.radius=0.5*this.size(a).length();return b}}(),intersect:function(a){this.min.max(a.min);this.max.min(a.max);return this},union:function(a){this.min.min(a.min);this.max.max(a.max);return this},applyMatrix4:function(){var a=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];return function(b){a[0].set(this.min.x,this.min.y, +this.min.z).applyMatrix4(b);a[1].set(this.min.x,this.min.y,this.max.z).applyMatrix4(b);a[2].set(this.min.x,this.max.y,this.min.z).applyMatrix4(b);a[3].set(this.min.x,this.max.y,this.max.z).applyMatrix4(b);a[4].set(this.max.x,this.min.y,this.min.z).applyMatrix4(b);a[5].set(this.max.x,this.min.y,this.max.z).applyMatrix4(b);a[6].set(this.max.x,this.max.y,this.min.z).applyMatrix4(b);a[7].set(this.max.x,this.max.y,this.max.z).applyMatrix4(b);this.makeEmpty();this.setFromPoints(a);return this}}(),translate:function(a){this.min.add(a); +this.max.add(a);return this},equals:function(a){return a.min.equals(this.min)&&a.max.equals(this.max)},clone:function(){return(new THREE.Box3).copy(this)}};THREE.Matrix3=function(a,b,c,d,e,f,h,g,i){this.elements=new Float32Array(9);this.set(void 0!==a?a:1,b||0,c||0,d||0,void 0!==e?e:1,f||0,h||0,g||0,void 0!==i?i:1)}; +THREE.Matrix3.prototype={constructor:THREE.Matrix3,set:function(a,b,c,d,e,f,h,g,i){var k=this.elements;k[0]=a;k[3]=b;k[6]=c;k[1]=d;k[4]=e;k[7]=f;k[2]=h;k[5]=g;k[8]=i;return this},identity:function(){this.set(1,0,0,0,1,0,0,0,1);return this},copy:function(a){a=a.elements;this.set(a[0],a[3],a[6],a[1],a[4],a[7],a[2],a[5],a[8]);return this},multiplyVector3:function(a){console.warn("DEPRECATED: Matrix3's .multiplyVector3() has been removed. Use vector.applyMatrix3( matrix ) instead.");return a.applyMatrix3(this)}, +multiplyVector3Array:function(){var a=new THREE.Vector3;return function(b){for(var c=0,d=b.length;cd?c.copy(this.origin):c.copy(this.direction).multiplyScalar(d).add(this.origin)},distanceToPoint:function(){var a=new THREE.Vector3;return function(b){var c=a.subVectors(b,this.origin).dot(this.direction);if(0>c)return this.origin.distanceTo(b);a.copy(this.direction).multiplyScalar(c).add(this.origin);return a.distanceTo(b)}}(),distanceSqToSegment:function(a,b,c,d){var e=a.clone().add(b).multiplyScalar(0.5),f=b.clone().sub(a).normalize(),h=0.5*a.distanceTo(b), +g=this.origin.clone().sub(e),a=-this.direction.dot(f),b=g.dot(this.direction),i=-g.dot(f),k=g.lengthSq(),m=Math.abs(1-a*a),l,p;0<=m?(g=a*i-b,l=a*b-i,p=h*m,0<=g?l>=-p?l<=p?(h=1/m,g*=h,l*=h,a=g*(g+a*l+2*b)+l*(a*g+l+2*i)+k):(l=h,g=Math.max(0,-(a*l+b)),a=-g*g+l*(l+2*i)+k):(l=-h,g=Math.max(0,-(a*l+b)),a=-g*g+l*(l+2*i)+k):l<=-p?(g=Math.max(0,-(-a*h+b)),l=0a.normal.dot(this.direction)*b?!0:!1},distanceToPlane:function(a){var b=a.normal.dot(this.direction);if(0==b)return 0==a.distanceToPoint(this.origin)? +0:null;a=-(this.origin.dot(a.normal)+a.constant)/b;return 0<=a?a:null},intersectPlane:function(a,b){var c=this.distanceToPlane(a);return null===c?null:this.at(c,b)},isIntersectionBox:function(){var a=new THREE.Vector3;return function(b){return null!==this.intersectBox(b,a)}}(),intersectBox:function(a,b){var c,d,e,f,h;d=1/this.direction.x;f=1/this.direction.y;h=1/this.direction.z;var g=this.origin;0<=d?(c=(a.min.x-g.x)*d,d*=a.max.x-g.x):(c=(a.max.x-g.x)*d,d*=a.min.x-g.x);0<=f?(e=(a.min.y-g.y)*f,f*= +a.max.y-g.y):(e=(a.max.y-g.y)*f,f*=a.min.y-g.y);if(c>f||e>d)return null;if(e>c||c!==c)c=e;if(fh||e>d)return null;if(e>c||c!==c)c=e;if(hd?null:this.at(0<=c?c:d,b)},intersectTriangle:function(){var a=new THREE.Vector3,b=new THREE.Vector3,c=new THREE.Vector3,d=new THREE.Vector3;return function(e,f,h,g,i){b.subVectors(f,e);c.subVectors(h,e);d.crossVectors(b,c);f=this.direction.dot(d);if(0< +f){if(g)return null;g=1}else if(0>f)g=-1,f=-f;else return null;a.subVectors(this.origin,e);e=g*this.direction.dot(c.crossVectors(a,c));if(0>e)return null;h=g*this.direction.dot(b.cross(a));if(0>h||e+h>f)return null;e=-g*a.dot(d);return 0>e?null:this.at(e/f,i)}}(),applyMatrix4:function(a){this.direction.add(this.origin).applyMatrix4(a);this.origin.applyMatrix4(a);this.direction.sub(this.origin);this.direction.normalize();return this},equals:function(a){return a.origin.equals(this.origin)&&a.direction.equals(this.direction)}, +clone:function(){return(new THREE.Ray).copy(this)}};THREE.Sphere=function(a,b){this.center=void 0!==a?a:new THREE.Vector3;this.radius=void 0!==b?b:0}; +THREE.Sphere.prototype={constructor:THREE.Sphere,set:function(a,b){this.center.copy(a);this.radius=b;return this},setFromPoints:function(){var a=new THREE.Box3;return function(b,c){var d=this.center;void 0!==c?d.copy(c):a.setFromPoints(b).center(d);for(var e=0,f=0,h=b.length;f=this.radius},containsPoint:function(a){return a.distanceToSquared(this.center)<= +this.radius*this.radius},distanceToPoint:function(a){return a.distanceTo(this.center)-this.radius},intersectsSphere:function(a){var b=this.radius+a.radius;return a.center.distanceToSquared(this.center)<=b*b},clampPoint:function(a,b){var c=this.center.distanceToSquared(a),d=b||new THREE.Vector3;d.copy(a);c>this.radius*this.radius&&(d.sub(this.center).normalize(),d.multiplyScalar(this.radius).add(this.center));return d},getBoundingBox:function(a){a=a||new THREE.Box3;a.set(this.center,this.center);a.expandByScalar(this.radius); +return a},applyMatrix4:function(a){this.center.applyMatrix4(a);this.radius*=a.getMaxScaleOnAxis();return this},translate:function(a){this.center.add(a);return this},equals:function(a){return a.center.equals(this.center)&&a.radius===this.radius},clone:function(){return(new THREE.Sphere).copy(this)}};THREE.Frustum=function(a,b,c,d,e,f){this.planes=[void 0!==a?a:new THREE.Plane,void 0!==b?b:new THREE.Plane,void 0!==c?c:new THREE.Plane,void 0!==d?d:new THREE.Plane,void 0!==e?e:new THREE.Plane,void 0!==f?f:new THREE.Plane]}; +THREE.Frustum.prototype={constructor:THREE.Frustum,set:function(a,b,c,d,e,f){var h=this.planes;h[0].copy(a);h[1].copy(b);h[2].copy(c);h[3].copy(d);h[4].copy(e);h[5].copy(f);return this},copy:function(a){for(var b=this.planes,c=0;6>c;c++)b[c].copy(a.planes[c]);return this},setFromMatrix:function(a){var b=this.planes,c=a.elements,a=c[0],d=c[1],e=c[2],f=c[3],h=c[4],g=c[5],i=c[6],k=c[7],m=c[8],l=c[9],p=c[10],t=c[11],s=c[12],q=c[13],n=c[14],c=c[15];b[0].setComponents(f-a,k-h,t-m,c-s).normalize();b[1].setComponents(f+ +a,k+h,t+m,c+s).normalize();b[2].setComponents(f+d,k+g,t+l,c+q).normalize();b[3].setComponents(f-d,k-g,t-l,c-q).normalize();b[4].setComponents(f-e,k-i,t-p,c-n).normalize();b[5].setComponents(f+e,k+i,t+p,c+n).normalize();return this},intersectsObject:function(){var a=new THREE.Sphere;return function(b){var c=b.geometry;null===c.boundingSphere&&c.computeBoundingSphere();a.copy(c.boundingSphere);a.applyMatrix4(b.matrixWorld);return this.intersectsSphere(a)}}(),intersectsSphere:function(a){for(var b=this.planes, +c=a.center,a=-a.radius,d=0;6>d;d++)if(b[d].distanceToPoint(c)e;e++){var f=d[e];a.x=0h&&0>f)return!1}return!0}}(),containsPoint:function(a){for(var b= +this.planes,c=0;6>c;c++)if(0>b[c].distanceToPoint(a))return!1;return!0},clone:function(){return(new THREE.Frustum).copy(this)}};THREE.Plane=function(a,b){this.normal=void 0!==a?a:new THREE.Vector3(1,0,0);this.constant=void 0!==b?b:0}; +THREE.Plane.prototype={constructor:THREE.Plane,set:function(a,b){this.normal.copy(a);this.constant=b;return this},setComponents:function(a,b,c,d){this.normal.set(a,b,c);this.constant=d;return this},setFromNormalAndCoplanarPoint:function(a,b){this.normal.copy(a);this.constant=-b.dot(this.normal);return this},setFromCoplanarPoints:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(c,d,e){d=a.subVectors(e,d).cross(b.subVectors(c,d)).normalize();this.setFromNormalAndCoplanarPoint(d, +c);return this}}(),copy:function(a){this.normal.copy(a.normal);this.constant=a.constant;return this},normalize:function(){var a=1/this.normal.length();this.normal.multiplyScalar(a);this.constant*=a;return this},negate:function(){this.constant*=-1;this.normal.negate();return this},distanceToPoint:function(a){return this.normal.dot(a)+this.constant},distanceToSphere:function(a){return this.distanceToPoint(a.center)-a.radius},projectPoint:function(a,b){return this.orthoPoint(a,b).sub(a).negate()},orthoPoint:function(a, +b){var c=this.distanceToPoint(a);return(b||new THREE.Vector3).copy(this.normal).multiplyScalar(c)},isIntersectionLine:function(a){var b=this.distanceToPoint(a.start),a=this.distanceToPoint(a.end);return 0>b&&0a&&0f||1e;e++)8==e||13==e||18==e||23==e?b[e]="-":14==e?b[e]="4":(2>=c&&(c=33554432+16777216*Math.random()|0),d=c&15,c>>=4,b[e]=a[19==e?d&3|8:d]);return b.join("")}}(),clamp:function(a,b,c){return ac?c:a},clampBottom:function(a,b){return a=c)return 1;a=(a-b)/(c-b);return a*a*(3-2*a)},smootherstep:function(a,b,c){if(a<=b)return 0;if(a>=c)return 1;a=(a-b)/(c-b);return a*a*a*(a*(6*a-15)+10)},random16:function(){return(65280*Math.random()+255*Math.random())/65535},randInt:function(a,b){return a+Math.floor(Math.random()*(b-a+1))},randFloat:function(a,b){return a+Math.random()*(b-a)},randFloatSpread:function(a){return a*(0.5-Math.random())},sign:function(a){return 0>a?-1:0this.points.length-2?this.points.length-1:f+1;c[3]=f>this.points.length-3?this.points.length-1: +f+2;k=this.points[c[0]];m=this.points[c[1]];l=this.points[c[2]];p=this.points[c[3]];g=h*h;i=h*g;d.x=b(k.x,m.x,l.x,p.x,h,g,i);d.y=b(k.y,m.y,l.y,p.y,h,g,i);d.z=b(k.z,m.z,l.z,p.z,h,g,i);return d};this.getControlPointsArray=function(){var a,b,c=this.points.length,d=[];for(a=0;a=b.x+b.y}}(); +THREE.Triangle.prototype={constructor:THREE.Triangle,set:function(a,b,c){this.a.copy(a);this.b.copy(b);this.c.copy(c);return this},setFromPointsAndIndices:function(a,b,c,d){this.a.copy(a[b]);this.b.copy(a[c]);this.c.copy(a[d]);return this},copy:function(a){this.a.copy(a.a);this.b.copy(a.b);this.c.copy(a.c);return this},area:function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(){a.subVectors(this.c,this.b);b.subVectors(this.a,this.b);return 0.5*a.cross(b).length()}}(),midpoint:function(a){return(a|| +new THREE.Vector3).addVectors(this.a,this.b).add(this.c).multiplyScalar(1/3)},normal:function(a){return THREE.Triangle.normal(this.a,this.b,this.c,a)},plane:function(a){return(a||new THREE.Plane).setFromCoplanarPoints(this.a,this.b,this.c)},barycoordFromPoint:function(a,b){return THREE.Triangle.barycoordFromPoint(a,this.a,this.b,this.c,b)},containsPoint:function(a){return THREE.Triangle.containsPoint(a,this.a,this.b,this.c)},equals:function(a){return a.a.equals(this.a)&&a.b.equals(this.b)&&a.c.equals(this.c)}, +clone:function(){return(new THREE.Triangle).copy(this)}};THREE.Vertex=function(a){console.warn("THREE.Vertex has been DEPRECATED. Use THREE.Vector3 instead.");return a};THREE.UV=function(a,b){console.warn("THREE.UV has been DEPRECATED. Use THREE.Vector2 instead.");return new THREE.Vector2(a,b)};THREE.Clock=function(a){this.autoStart=void 0!==a?a:!0;this.elapsedTime=this.oldTime=this.startTime=0;this.running=!1}; +THREE.Clock.prototype={constructor:THREE.Clock,start:function(){this.oldTime=this.startTime=void 0!==self.performance&&void 0!==self.performance.now?self.performance.now():Date.now();this.running=!0},stop:function(){this.getElapsedTime();this.running=!1},getElapsedTime:function(){this.getDelta();return this.elapsedTime},getDelta:function(){var a=0;this.autoStart&&!this.running&&this.start();if(this.running){var b=void 0!==self.performance&&void 0!==self.performance.now?self.performance.now():Date.now(), +a=0.0010*(b-this.oldTime);this.oldTime=b;this.elapsedTime+=a}return a}};THREE.EventDispatcher=function(){}; +THREE.EventDispatcher.prototype={constructor:THREE.EventDispatcher,apply:function(a){a.addEventListener=THREE.EventDispatcher.prototype.addEventListener;a.hasEventListener=THREE.EventDispatcher.prototype.hasEventListener;a.removeEventListener=THREE.EventDispatcher.prototype.removeEventListener;a.dispatchEvent=THREE.EventDispatcher.prototype.dispatchEvent},addEventListener:function(a,b){void 0===this._listeners&&(this._listeners={});var c=this._listeners;void 0===c[a]&&(c[a]=[]);-1===c[a].indexOf(b)&& +c[a].push(b)},hasEventListener:function(a,b){if(void 0===this._listeners)return!1;var c=this._listeners;return void 0!==c[a]&&-1!==c[a].indexOf(b)?!0:!1},removeEventListener:function(a,b){if(void 0!==this._listeners){var c=this._listeners,d=c[a].indexOf(b);-1!==d&&c[a].splice(d,1)}},dispatchEvent:function(){var a=[];return function(b){if(void 0!==this._listeners){var c=this._listeners[b.type];if(void 0!==c){b.target=this;for(var d=c.length,e=0;ef.scale.x)return t;t.push({distance:s,point:f.position,face:null,object:f})}else if(f instanceof +a.LOD)d.getPositionFromMatrix(f.matrixWorld),s=m.ray.origin.distanceTo(d),k(f.getObjectForDistance(s),m,t);else if(f instanceof a.Mesh){var q=f.geometry;null===q.boundingSphere&&q.computeBoundingSphere();b.copy(q.boundingSphere);b.applyMatrix4(f.matrixWorld);if(!1===m.ray.isIntersectionSphere(b))return t;e.getInverse(f.matrixWorld);c.copy(m.ray).applyMatrix4(e);if(null!==q.boundingBox&&!1===c.isIntersectionBox(q.boundingBox))return t;if(q instanceof a.BufferGeometry){var n=f.material;if(void 0=== +n||!1===q.dynamic)return t;var u,r,v=m.precision;if(void 0!==q.attributes.index)for(var z=q.offsets,G=q.attributes.index.array,w=q.attributes.position.array,y=q.offsets.length,E=q.attributes.index.array.length/3,E=0;Em.far)||t.push({distance:s,point:u,face:null,faceIndex:null,object:f}));else{w=q.attributes.position.array;E=q.attributes.position.array.length;for(q=0;qm.far)||t.push({distance:s,point:u,face:null,faceIndex:null,object:f}))}}else if(q instanceof a.Geometry){G=f.material instanceof a.MeshFaceMaterial;w=!0===G?f.material.materials:null;v=m.precision;z=q.vertices;y=0;for(E=q.faces.length;ym.far)||t.push({distance:s,point:u,face:A,faceIndex:y,object:f})))}}else if(f instanceof a.Line){v=m.linePrecision;n=v*v;q=f.geometry;null===q.boundingSphere&&q.computeBoundingSphere();b.copy(q.boundingSphere);b.applyMatrix4(f.matrixWorld);if(!1===m.ray.isIntersectionSphere(b))return t;e.getInverse(f.matrixWorld);c.copy(m.ray).applyMatrix4(e);if(q instanceof a.Geometry){z=q.vertices;v=z.length;u=new a.Vector3;r=new a.Vector3;E=f.type===a.LineStrip?1: +2;for(q=0;qn||(s=c.origin.distanceTo(r),sm.far||t.push({distance:s,point:u.clone().applyMatrix4(f.matrixWorld),face:null,faceIndex:null,object:f}))}}},m=function(a,b,c){for(var a=a.getDescendants(),d=0,e=a.length;de&&0>f||0>h&&0>g)return!1;0>e?c=Math.max(c,e/(e-f)):0>f&&(d=Math.min(d,e/(e-f)));0>h?c=Math.max(c,h/(h-g)):0>g&&(d=Math.min(d,h/(h-g)));if(dg.positionScreen.x||1g.positionScreen.y||1g.positionScreen.z||1< +g.positionScreen.z)}ea=0;for(Q=sa.length;ea(ha.positionScreen.x-V.positionScreen.x)*(P.positionScreen.y-V.positionScreen.y)-(ha.positionScreen.y-V.positionScreen.y)*(P.positionScreen.x-V.positionScreen.x),Y===THREE.DoubleSide|| +E===(Y===THREE.FrontSide)){if(p===s){var Da=new THREE.RenderableFace3;t.push(Da);s++;p++;l=Da}else l=t[p++];l.id=U.id;l.v1.copy(V);l.v2.copy(P);l.v3.copy(ha);l.normalModel.copy($.normal);!1===E&&(Y===THREE.BackSide||Y===THREE.DoubleSide)&&l.normalModel.negate();l.normalModel.applyMatrix3(M).normalize();l.normalModelView.copy(l.normalModel).applyMatrix3(J);l.centroidModel.copy($.centroid).applyMatrix4(I);ha=$.vertexNormals;V=0;for(P=Math.min(ha.length,3);VA.z&&(z===w?(sa=new THREE.RenderableSprite,G.push(sa),w++,z++,v=sa):v=G[z++],v.id=U.id,v.x=A.x*ka,v.y=A.y*ka,v.z=A.z,v.object=U,v.rotation=U.rotation,v.scale.x=U.scale.x*Math.abs(v.x-(A.x+f.projectionMatrix.elements[0])/(A.w+f.projectionMatrix.elements[12])), +v.scale.y=U.scale.y*Math.abs(v.y-(A.y+f.projectionMatrix.elements[5])/(A.w+f.projectionMatrix.elements[13])),v.material=U.material,y.elements.push(v)));!0===m&&y.elements.sort(b);return y}};THREE.Face3=function(a,b,c,d,e,f){this.a=a;this.b=b;this.c=c;this.normal=d instanceof THREE.Vector3?d:new THREE.Vector3;this.vertexNormals=d instanceof Array?d:[];this.color=e instanceof THREE.Color?e:new THREE.Color;this.vertexColors=e instanceof Array?e:[];this.vertexTangents=[];this.materialIndex=void 0!==f?f:0;this.centroid=new THREE.Vector3}; +THREE.Face3.prototype={constructor:THREE.Face3,clone:function(){var a=new THREE.Face3(this.a,this.b,this.c);a.normal.copy(this.normal);a.color.copy(this.color);a.centroid.copy(this.centroid);a.materialIndex=this.materialIndex;var b,c;b=0;for(c=this.vertexNormals.length;bd?-1:1,e.vertexTangents[c]=new THREE.Vector4(z.x,z.y,z.z,d)}this.hasTangents=!0},computeLineDistances:function(){for(var a=0,b=this.vertices,c=0,d=b.length;cd;d++)if(e[d]==e[(d+1)%3]){a.push(f);break}}for(f=a.length-1;0<=f;f--){e=a[f];this.faces.splice(e,1);c=0;for(h=this.faceVertexUvs.length;cb.max.x&&(b.max.x=c),db.max.y&&(b.max.y=d),eb.max.z&&(b.max.z=e)}if(void 0===a||0===a.length)this.boundingBox.min.set(0,0,0),this.boundingBox.max.set(0,0,0)},computeBoundingSphere:function(){var a= +new THREE.Box3,b=new THREE.Vector3;return function(){null===this.boundingSphere&&(this.boundingSphere=new THREE.Sphere);var c=this.attributes.position.array;if(c){for(var d=this.boundingSphere.center,e=0,f=c.length;eR?-1:1;h[4*a]=J.x;h[4*a+1]=J.y;h[4*a+2]=J.z;h[4*a+3]=C}if(void 0===this.attributes.index||void 0===this.attributes.position||void 0===this.attributes.normal||void 0===this.attributes.uv)console.warn("Missing required attributes (index, position, normal or uv) in BufferGeometry.computeTangents()");else{var b=this.attributes.index.array,c=this.attributes.position.array,d=this.attributes.normal.array,e=this.attributes.uv.array,f=c.length/3;void 0===this.attributes.tangent&& +(this.attributes.tangent={itemSize:4,array:new Float32Array(4*f)});for(var h=this.attributes.tangent.array,g=[],i=[],k=0;ka.length?".":a.join("/"))+"/"},initMaterials:function(a,b){for(var c=[],d=0;da.opacity)i.transparent=a.transparent;void 0!==a.depthTest&&(i.depthTest=a.depthTest);void 0!==a.depthWrite&&(i.depthWrite=a.depthWrite);void 0!==a.visible&&(i.visible=a.visible);void 0!==a.flipSided&&(i.side=THREE.BackSide); +void 0!==a.doubleSided&&(i.side=THREE.DoubleSide);void 0!==a.wireframe&&(i.wireframe=a.wireframe);void 0!==a.vertexColors&&("face"===a.vertexColors?i.vertexColors=THREE.FaceColors:a.vertexColors&&(i.vertexColors=THREE.VertexColors));a.colorDiffuse?i.color=f(a.colorDiffuse):a.DbgColor&&(i.color=a.DbgColor);a.colorSpecular&&(i.specular=f(a.colorSpecular));a.colorAmbient&&(i.ambient=f(a.colorAmbient));a.transparency&&(i.opacity=a.transparency);a.specularCoef&&(i.shininess=a.specularCoef);a.mapDiffuse&& +b&&e(i,"map",a.mapDiffuse,a.mapDiffuseRepeat,a.mapDiffuseOffset,a.mapDiffuseWrap,a.mapDiffuseAnisotropy);a.mapLight&&b&&e(i,"lightMap",a.mapLight,a.mapLightRepeat,a.mapLightOffset,a.mapLightWrap,a.mapLightAnisotropy);a.mapBump&&b&&e(i,"bumpMap",a.mapBump,a.mapBumpRepeat,a.mapBumpOffset,a.mapBumpWrap,a.mapBumpAnisotropy);a.mapNormal&&b&&e(i,"normalMap",a.mapNormal,a.mapNormalRepeat,a.mapNormalOffset,a.mapNormalWrap,a.mapNormalAnisotropy);a.mapSpecular&&b&&e(i,"specularMap",a.mapSpecular,a.mapSpecularRepeat, +a.mapSpecularOffset,a.mapSpecularWrap,a.mapSpecularAnisotropy);a.mapBumpScale&&(i.bumpScale=a.mapBumpScale);a.mapNormal?(g=THREE.ShaderLib.normalmap,k=THREE.UniformsUtils.clone(g.uniforms),k.tNormal.value=i.normalMap,a.mapNormalFactor&&k.uNormalScale.value.set(a.mapNormalFactor,a.mapNormalFactor),i.map&&(k.tDiffuse.value=i.map,k.enableDiffuse.value=!0),i.specularMap&&(k.tSpecular.value=i.specularMap,k.enableSpecular.value=!0),i.lightMap&&(k.tAO.value=i.lightMap,k.enableAO.value=!0),k.uDiffuseColor.value.setHex(i.color), +k.uSpecularColor.value.setHex(i.specular),k.uAmbientColor.value.setHex(i.ambient),k.uShininess.value=i.shininess,void 0!==i.opacity&&(k.uOpacity.value=i.opacity),g=new THREE.ShaderMaterial({fragmentShader:g.fragmentShader,vertexShader:g.vertexShader,uniforms:k,lights:!0,fog:!0}),i.transparent&&(g.transparent=!0)):g=new THREE[g](i);void 0!==a.DbgName&&(g.name=a.DbgName);return g}};THREE.XHRLoader=function(a){this.manager=void 0!==a?a:THREE.DefaultLoadingManager}; +THREE.XHRLoader.prototype={constructor:THREE.XHRLoader,load:function(a,b,c,d){var e=this,f=new XMLHttpRequest;void 0!==b&&f.addEventListener("load",function(c){b(c.target.responseText);e.manager.itemEnd(a)},!1);void 0!==c&&f.addEventListener("progress",function(a){c(a)},!1);void 0!==d&&f.addEventListener("error",function(a){d(a)},!1);void 0!==this.crossOrigin&&(f.crossOrigin=this.crossOrigin);f.open("GET",a,!0);f.send(null);e.manager.itemStart(a)},setCrossOrigin:function(a){this.crossOrigin=a}};THREE.ImageLoader=function(a){this.manager=void 0!==a?a:THREE.DefaultLoadingManager}; +THREE.ImageLoader.prototype={constructor:THREE.ImageLoader,load:function(a,b,c,d){var e=this,f=document.createElement("img");void 0!==b&&f.addEventListener("load",function(){e.manager.itemEnd(a);b(this)},!1);void 0!==c&&f.addEventListener("progress",function(a){c(a)},!1);void 0!==d&&f.addEventListener("error",function(a){d(a)},!1);void 0!==this.crossOrigin&&(f.crossOrigin=this.crossOrigin);f.src=a;e.manager.itemStart(a);return f},setCrossOrigin:function(a){this.crossOrigin=a}};THREE.JSONLoader=function(a){THREE.Loader.call(this,a);this.withCredentials=!1};THREE.JSONLoader.prototype=Object.create(THREE.Loader.prototype);THREE.JSONLoader.prototype.load=function(a,b,c){c=c&&"string"===typeof c?c:this.extractUrlBase(a);this.onLoadStart();this.loadAjaxJSON(this,a,b,c)}; +THREE.JSONLoader.prototype.loadAjaxJSON=function(a,b,c,d,e){var f=new XMLHttpRequest,h=0;f.onreadystatechange=function(){if(f.readyState===f.DONE)if(200===f.status||0===f.status){if(f.responseText){var g=JSON.parse(f.responseText),g=a.parse(g,d);c(g.geometry,g.materials)}else console.warn("THREE.JSONLoader: ["+b+"] seems to be unreachable or file there is empty");a.onLoadComplete()}else console.error("THREE.JSONLoader: Couldn't load ["+b+"] ["+f.status+"]");else f.readyState===f.LOADING?e&&(0===h&& +(h=f.getResponseHeader("Content-Length")),e({total:h,loaded:f.responseText.length})):f.readyState===f.HEADERS_RECEIVED&&void 0!==e&&(h=f.getResponseHeader("Content-Length"))};f.open("GET",b,!0);f.withCredentials=this.withCredentials;f.send(null)}; +THREE.JSONLoader.prototype.parse=function(a,b){var c=new THREE.Geometry,d=void 0!==a.scale?1/a.scale:1,e,f,h,g,i,k,m,l,p,t,s,q,n,u,r=a.faces;p=a.vertices;var v=a.normals,z=a.colors,G=0;if(void 0!==a.uvs){for(e=0;ef;f++)l=r[g++],u=n[2*l],l=n[2*l+1],u=new THREE.Vector2(u,l),2!==f&&c.faceVertexUvs[e][h].push(u),0!==f&&c.faceVertexUvs[e][h+1].push(u)}m&&(m=3*r[g++],t.normal.set(v[m++],v[m++],v[m]),q.normal.copy(t.normal));if(s)for(e=0;4>e;e++)m=3*r[g++],s=new THREE.Vector3(v[m++], +v[m++],v[m]),2!==e&&t.vertexNormals.push(s),0!==e&&q.vertexNormals.push(s);k&&(k=r[g++],k=z[k],t.color.setHex(k),q.color.setHex(k));if(p)for(e=0;4>e;e++)k=r[g++],k=z[k],2!==e&&t.vertexColors.push(new THREE.Color(k)),0!==e&&q.vertexColors.push(new THREE.Color(k));c.faces.push(t);c.faces.push(q)}else{t=new THREE.Face3;t.a=r[g++];t.b=r[g++];t.c=r[g++];h&&(h=r[g++],t.materialIndex=h);h=c.faces.length;if(e)for(e=0;ef;f++)l=r[g++],u=n[2*l],l=n[2*l+1], +u=new THREE.Vector2(u,l),c.faceVertexUvs[e][h].push(u)}m&&(m=3*r[g++],t.normal.set(v[m++],v[m++],v[m]));if(s)for(e=0;3>e;e++)m=3*r[g++],s=new THREE.Vector3(v[m++],v[m++],v[m]),t.vertexNormals.push(s);k&&(k=r[g++],t.color.setHex(z[k]));if(p)for(e=0;3>e;e++)k=r[g++],t.vertexColors.push(new THREE.Color(z[k]));c.faces.push(t)}if(a.skinWeights){g=0;for(i=a.skinWeights.length;gx.parameters.opacity&&(x.parameters.transparent=!0);x.parameters.normalMap?(K=THREE.ShaderLib.normalmap,F=THREE.UniformsUtils.clone(K.uniforms),u=x.parameters.color,O=x.parameters.specular,n=x.parameters.ambient, +D=x.parameters.shininess,F.tNormal.value=y.textures[x.parameters.normalMap],x.parameters.normalScale&&F.uNormalScale.value.set(x.parameters.normalScale[0],x.parameters.normalScale[1]),x.parameters.map&&(F.tDiffuse.value=x.parameters.map,F.enableDiffuse.value=!0),x.parameters.envMap&&(F.tCube.value=x.parameters.envMap,F.enableReflection.value=!0,F.uReflectivity.value=x.parameters.reflectivity),x.parameters.lightMap&&(F.tAO.value=x.parameters.lightMap,F.enableAO.value=!0),x.parameters.specularMap&& +(F.tSpecular.value=y.textures[x.parameters.specularMap],F.enableSpecular.value=!0),x.parameters.displacementMap&&(F.tDisplacement.value=y.textures[x.parameters.displacementMap],F.enableDisplacement.value=!0,F.uDisplacementBias.value=x.parameters.displacementBias,F.uDisplacementScale.value=x.parameters.displacementScale),F.uDiffuseColor.value.setHex(u),F.uSpecularColor.value.setHex(O),F.uAmbientColor.value.setHex(n),F.uShininess.value=D,x.parameters.opacity&&(F.uOpacity.value=x.parameters.opacity), +s=new THREE.ShaderMaterial({fragmentShader:K.fragmentShader,vertexShader:K.vertexShader,uniforms:F,lights:!0,fog:!0})):s=new THREE[x.type](x.parameters);s.name=I;y.materials[I]=s}for(I in A.materials)if(x=A.materials[I],x.parameters.materials){B=[];for(u=0;ug.end&&(g.end=e);b||(b=h)}}a.firstAnimation=b}; +THREE.MorphAnimMesh.prototype.setAnimationLabel=function(a,b,c){this.geometry.animations||(this.geometry.animations={});this.geometry.animations[a]={start:b,end:c}};THREE.MorphAnimMesh.prototype.playAnimation=function(a,b){var c=this.geometry.animations[a];c?(this.setFrameRange(c.start,c.end),this.duration=1E3*((c.end-c.start)/b),this.time=0):console.warn("animation["+a+"] undefined")}; +THREE.MorphAnimMesh.prototype.updateAnimation=function(a){var b=this.duration/this.length;this.time+=this.direction*a;if(this.mirroredLoop){if(this.time>this.duration||0>this.time)this.direction*=-1,this.time>this.duration&&(this.time=this.duration,this.directionBackwards=!0),0>this.time&&(this.time=0,this.directionBackwards=!1)}else this.time%=this.duration,0>this.time&&(this.time+=this.duration);a=this.startKeyframe+THREE.Math.clamp(Math.floor(this.time/b),0,this.length-1);a!==this.currentKeyframe&& +(this.morphTargetInfluences[this.lastKeyframe]=0,this.morphTargetInfluences[this.currentKeyframe]=1,this.morphTargetInfluences[a]=0,this.lastKeyframe=this.currentKeyframe,this.currentKeyframe=a);b=this.time%b/b;this.directionBackwards&&(b=1-b);this.morphTargetInfluences[this.currentKeyframe]=b;this.morphTargetInfluences[this.lastKeyframe]=1-b}; +THREE.MorphAnimMesh.prototype.clone=function(a){void 0===a&&(a=new THREE.MorphAnimMesh(this.geometry,this.material));a.duration=this.duration;a.mirroredLoop=this.mirroredLoop;a.time=this.time;a.lastKeyframe=this.lastKeyframe;a.currentKeyframe=this.currentKeyframe;a.direction=this.direction;a.directionBackwards=this.directionBackwards;THREE.Mesh.prototype.clone.call(this,a);return a};THREE.LOD=function(){THREE.Object3D.call(this);this.objects=[]};THREE.LOD.prototype=Object.create(THREE.Object3D.prototype);THREE.LOD.prototype.addLevel=function(a,b){void 0===b&&(b=0);for(var b=Math.abs(b),c=0;c=this.objects[d].distance)this.objects[d-1].object.visible=!1,this.objects[d].object.visible=!0;else break;for(;d=g||(g*=f.intensity,c.add(Ka.multiplyScalar(g)))}else f instanceof THREE.PointLight&&(h=ta.getPositionFromMatrix(f.matrixWorld),g=b.dot(ta.subVectors(h,a).normalize()),0>=g||(g*=0==f.distance?1:1-Math.min(a.distanceTo(h)/f.distance,1),0!=g&&(g*=f.intensity,c.add(Ka.multiplyScalar(g)))))}} +function c(a,b,c,d){m(b);l(c);p(d);t(a.getStyle());D.stroke();Ea.expandByScalar(2*b)}function d(a){s(a.getStyle());D.fill()}function e(a,b,c,e,f,h,g,j,i,k,m,l,n){if(!(n instanceof THREE.DataTexture||void 0===n.image||0===n.image.width)){if(!0===n.needsUpdate){var p=n.wrapS===THREE.RepeatWrapping,q=n.wrapT===THREE.RepeatWrapping;Ga[n.id]=D.createPattern(n.image,!0===p&&!0===q?"repeat":!0===p&&!1===q?"repeat-x":!1===p&&!0===q?"repeat-y":"no-repeat");n.needsUpdate=!1}void 0===Ga[n.id]?s("rgba(0,0,0,1)"): +s(Ga[n.id]);var p=n.offset.x/n.repeat.x,q=n.offset.y/n.repeat.y,t=n.image.width*n.repeat.x,r=n.image.height*n.repeat.y,g=(g+p)*t,j=(1-j+q)*r,c=c-a,e=e-b,f=f-a,h=h-b,i=(i+p)*t-g,k=(1-k+q)*r-j,m=(m+p)*t-g,l=(1-l+q)*r-j,p=i*l-m*k;0===p?(void 0===ka[n.id]&&(b=document.createElement("canvas"),b.width=n.image.width,b.height=n.image.height,b=b.getContext("2d"),b.drawImage(n.image,0,0),ka[n.id]=b.getImageData(0,0,n.image.width,n.image.height).data),b=ka[n.id],g=4*(Math.floor(g)+Math.floor(j)*n.image.width), +V.setRGB(b[g]/255,b[g+1]/255,b[g+2]/255),d(V)):(p=1/p,n=(l*c-k*f)*p,k=(l*e-k*h)*p,c=(i*f-m*c)*p,e=(i*h-m*e)*p,a=a-n*g-c*j,g=b-k*g-e*j,D.save(),D.transform(n,k,c,e,a,g),D.fill(),D.restore())}}function f(a,b,c,d,e,f,h,g,j,i,k,m,n){var l,p;l=n.width-1;p=n.height-1;h*=l;g*=p;c-=a;d-=b;e-=a;f-=b;j=j*l-h;i=i*p-g;k=k*l-h;m=m*p-g;p=1/(j*m-k*i);l=(m*c-i*e)*p;i=(m*d-i*f)*p;c=(j*e-k*c)*p;d=(j*f-k*d)*p;a=a-l*h-c*g;b=b-i*h-d*g;D.save();D.transform(l,i,c,d,a,b);D.clip();D.drawImage(n,0,0);D.restore()}function h(a, +b,c,d){ua[0]=255*a.r|0;ua[1]=255*a.g|0;ua[2]=255*a.b|0;ua[4]=255*b.r|0;ua[5]=255*b.g|0;ua[6]=255*b.b|0;ua[8]=255*c.r|0;ua[9]=255*c.g|0;ua[10]=255*c.b|0;ua[12]=255*d.r|0;ua[13]=255*d.g|0;ua[14]=255*d.b|0;j.putImageData(Oa,0,0);Fa.drawImage(Pa,0,0);return La}function g(a,b,c){var d=b.x-a.x,e=b.y-a.y,f=d*d+e*e;0!==f&&(c/=Math.sqrt(f),d*=c,e*=c,b.x+=d,b.y+=e,a.x-=d,a.y-=e)}function i(a){x!==a&&(x=D.globalAlpha=a)}function k(a){I!==a&&(a===THREE.NormalBlending?D.globalCompositeOperation="source-over": +a===THREE.AdditiveBlending?D.globalCompositeOperation="lighter":a===THREE.SubtractiveBlending&&(D.globalCompositeOperation="darker"),I=a)}function m(a){J!==a&&(J=D.lineWidth=a)}function l(a){ca!==a&&(ca=D.lineCap=a)}function p(a){na!==a&&(na=D.lineJoin=a)}function t(a){B!==a&&(B=D.strokeStyle=a)}function s(a){M!==a&&(M=D.fillStyle=a)}function q(a,b){if(pa!==a||C!==b)D.setLineDash([a,b]),pa=a,C=b}console.log("THREE.CanvasRenderer",THREE.REVISION);var n=THREE.Math.smoothstep,a=a||{},u=this,r,v,z,G= +new THREE.Projector,w=void 0!==a.canvas?a.canvas:document.createElement("canvas"),y=w.width,E=w.height,A=Math.floor(y/2),K=Math.floor(E/2),D=w.getContext("2d"),F=new THREE.Color(0),O=0,x=1,I=0,B=null,M=null,J=null,ca=null,na=null,pa=null,C=0,Q,R,L,da;new THREE.RenderableVertex;new THREE.RenderableVertex;var za,Ba,ba,Aa,$,ea,V=new THREE.Color,P=new THREE.Color,Y=new THREE.Color,U=new THREE.Color,ja=new THREE.Color,sa=new THREE.Color,ha=new THREE.Color,Ka=new THREE.Color,Ga={},ka={},Da,Ua,Qa,wa,bb, +cb,Ma,fb,sb,pb,va=new THREE.Box2,la=new THREE.Box2,Ea=new THREE.Box2,gb=new THREE.Color,ra=new THREE.Color,fa=new THREE.Color,ta=new THREE.Vector3,Pa,j,Oa,ua,La,Fa,Ra=16;Pa=document.createElement("canvas");Pa.width=Pa.height=2;j=Pa.getContext("2d");j.fillStyle="rgba(0,0,0,1)";j.fillRect(0,0,2,2);Oa=j.getImageData(0,0,2,2);ua=Oa.data;La=document.createElement("canvas");La.width=La.height=Ra;Fa=La.getContext("2d");Fa.translate(-Ra/2,-Ra/2);Fa.scale(Ra,Ra);Ra--;void 0===D.setLineDash&&(D.setLineDash= +void 0!==D.mozDash?function(a){D.mozDash=null!==a[0]?a:null}:function(){});this.domElement=w;this.devicePixelRatio=void 0!==a.devicePixelRatio?a.devicePixelRatio:void 0!==self.devicePixelRatio?self.devicePixelRatio:1;this.sortElements=this.sortObjects=this.autoClear=!0;this.info={render:{vertices:0,faces:0}};this.supportsVertexTextures=function(){};this.setFaceCulling=function(){};this.setSize=function(a,b,c){y=a*this.devicePixelRatio;E=b*this.devicePixelRatio;A=Math.floor(y/2);K=Math.floor(E/2); +w.width=y;w.height=E;1!==this.devicePixelRatio&&!1!==c&&(w.style.width=a+"px",w.style.height=b+"px");va.set(new THREE.Vector2(-A,-K),new THREE.Vector2(A,K));la.set(new THREE.Vector2(-A,-K),new THREE.Vector2(A,K));x=1;I=0;na=ca=J=M=B=null};this.setClearColor=function(a,b){F.set(a);O=void 0!==b?b:1;la.set(new THREE.Vector2(-A,-K),new THREE.Vector2(A,K))};this.setClearColorHex=function(a,b){console.warn("DEPRECATED: .setClearColorHex() is being removed. Use .setClearColor() instead.");this.setClearColor(a, +b)};this.getMaxAnisotropy=function(){return 0};this.clear=function(){D.setTransform(1,0,0,-1,A,K);!1===la.empty()&&(la.intersect(va),la.expandByScalar(2),1>O&&D.clearRect(la.min.x|0,la.min.y|0,la.max.x-la.min.x|0,la.max.y-la.min.y|0),0R.positionScreen.z||1L.positionScreen.z||1da.positionScreen.z||1 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_HEMI_LIGHTS > 0\nuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\nuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\nuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n#endif\n#if MAX_SPOT_LIGHTS > 0\nuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\nuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\nuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\nuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\nuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\nuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\n#endif\n#ifdef WRAP_AROUND\nuniform vec3 wrapRGB;\n#endif", +lights_lambert_vertex:"vLightFront = vec3( 0.0 );\n#ifdef DOUBLE_SIDED\nvLightBack = vec3( 0.0 );\n#endif\ntransformedNormal = normalize( transformedNormal );\n#if MAX_DIR_LIGHTS > 0\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\nfloat dotProduct = dot( transformedNormal, dirVector );\nvec3 directionalLightWeighting = vec3( max( dotProduct, 0.0 ) );\n#ifdef DOUBLE_SIDED\nvec3 directionalLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n#ifdef WRAP_AROUND\nvec3 directionalLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n#endif\n#endif\n#ifdef WRAP_AROUND\nvec3 directionalLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\ndirectionalLightWeighting = mix( directionalLightWeighting, directionalLightWeightingHalf, wrapRGB );\n#ifdef DOUBLE_SIDED\ndirectionalLightWeightingBack = mix( directionalLightWeightingBack, directionalLightWeightingHalfBack, wrapRGB );\n#endif\n#endif\nvLightFront += directionalLightColor[ i ] * directionalLightWeighting;\n#ifdef DOUBLE_SIDED\nvLightBack += directionalLightColor[ i ] * directionalLightWeightingBack;\n#endif\n}\n#endif\n#if MAX_POINT_LIGHTS > 0\nfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\nfloat dotProduct = dot( transformedNormal, lVector );\nvec3 pointLightWeighting = vec3( max( dotProduct, 0.0 ) );\n#ifdef DOUBLE_SIDED\nvec3 pointLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n#ifdef WRAP_AROUND\nvec3 pointLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n#endif\n#endif\n#ifdef WRAP_AROUND\nvec3 pointLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\npointLightWeighting = mix( pointLightWeighting, pointLightWeightingHalf, wrapRGB );\n#ifdef DOUBLE_SIDED\npointLightWeightingBack = mix( pointLightWeightingBack, pointLightWeightingHalfBack, wrapRGB );\n#endif\n#endif\nvLightFront += pointLightColor[ i ] * pointLightWeighting * lDistance;\n#ifdef DOUBLE_SIDED\nvLightBack += pointLightColor[ i ] * pointLightWeightingBack * lDistance;\n#endif\n}\n#endif\n#if MAX_SPOT_LIGHTS > 0\nfor( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - worldPosition.xyz ) );\nif ( spotEffect > spotLightAngleCos[ i ] ) {\nspotEffect = max( pow( spotEffect, spotLightExponent[ i ] ), 0.0 );\nfloat lDistance = 1.0;\nif ( spotLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / spotLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\nfloat dotProduct = dot( transformedNormal, lVector );\nvec3 spotLightWeighting = vec3( max( dotProduct, 0.0 ) );\n#ifdef DOUBLE_SIDED\nvec3 spotLightWeightingBack = vec3( max( -dotProduct, 0.0 ) );\n#ifdef WRAP_AROUND\nvec3 spotLightWeightingHalfBack = vec3( max( -0.5 * dotProduct + 0.5, 0.0 ) );\n#endif\n#endif\n#ifdef WRAP_AROUND\nvec3 spotLightWeightingHalf = vec3( max( 0.5 * dotProduct + 0.5, 0.0 ) );\nspotLightWeighting = mix( spotLightWeighting, spotLightWeightingHalf, wrapRGB );\n#ifdef DOUBLE_SIDED\nspotLightWeightingBack = mix( spotLightWeightingBack, spotLightWeightingHalfBack, wrapRGB );\n#endif\n#endif\nvLightFront += spotLightColor[ i ] * spotLightWeighting * lDistance * spotEffect;\n#ifdef DOUBLE_SIDED\nvLightBack += spotLightColor[ i ] * spotLightWeightingBack * lDistance * spotEffect;\n#endif\n}\n}\n#endif\n#if MAX_HEMI_LIGHTS > 0\nfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );\nvec3 lVector = normalize( lDirection.xyz );\nfloat dotProduct = dot( transformedNormal, lVector );\nfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\nfloat hemiDiffuseWeightBack = -0.5 * dotProduct + 0.5;\nvLightFront += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\n#ifdef DOUBLE_SIDED\nvLightBack += mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeightBack );\n#endif\n}\n#endif\nvLightFront = vLightFront * diffuse + ambient * ambientLightColor + emissive;\n#ifdef DOUBLE_SIDED\nvLightBack = vLightBack * diffuse + ambient * ambientLightColor + emissive;\n#endif", +lights_phong_pars_vertex:"#ifndef PHONG_PER_PIXEL\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];\n#endif\n#if MAX_SPOT_LIGHTS > 0\nuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\nuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\nvarying vec4 vSpotLight[ MAX_SPOT_LIGHTS ];\n#endif\n#endif\n#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP )\nvarying vec3 vWorldPosition;\n#endif", +lights_phong_vertex:"#ifndef PHONG_PER_PIXEL\n#if MAX_POINT_LIGHTS > 0\nfor( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nvPointLight[ i ] = vec4( lVector, lDistance );\n}\n#endif\n#if MAX_SPOT_LIGHTS > 0\nfor( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( spotLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / spotLightDistance[ i ] ), 1.0 );\nvSpotLight[ i ] = vec4( lVector, lDistance );\n}\n#endif\n#endif\n#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP )\nvWorldPosition = worldPosition.xyz;\n#endif", +lights_phong_pars_fragment:"uniform vec3 ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_HEMI_LIGHTS > 0\nuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\nuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\nuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\n#ifdef PHONG_PER_PIXEL\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n#else\nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];\n#endif\n#endif\n#if MAX_SPOT_LIGHTS > 0\nuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\nuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\nuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\nuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\nuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\n#ifdef PHONG_PER_PIXEL\nuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\n#else\nvarying vec4 vSpotLight[ MAX_SPOT_LIGHTS ];\n#endif\n#endif\n#if MAX_SPOT_LIGHTS > 0 || defined( USE_BUMPMAP )\nvarying vec3 vWorldPosition;\n#endif\n#ifdef WRAP_AROUND\nuniform vec3 wrapRGB;\n#endif\nvarying vec3 vViewPosition;\nvarying vec3 vNormal;", +lights_phong_fragment:"vec3 normal = normalize( vNormal );\nvec3 viewPosition = normalize( vViewPosition );\n#ifdef DOUBLE_SIDED\nnormal = normal * ( -1.0 + 2.0 * float( gl_FrontFacing ) );\n#endif\n#ifdef USE_NORMALMAP\nnormal = perturbNormal2Arb( -vViewPosition, normal );\n#elif defined( USE_BUMPMAP )\nnormal = perturbNormalArb( -vViewPosition, normal, dHdxy_fwd() );\n#endif\n#if MAX_POINT_LIGHTS > 0\nvec3 pointDiffuse = vec3( 0.0 );\nvec3 pointSpecular = vec3( 0.0 );\nfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\n#ifdef PHONG_PER_PIXEL\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz + vViewPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\n#else\nvec3 lVector = normalize( vPointLight[ i ].xyz );\nfloat lDistance = vPointLight[ i ].w;\n#endif\nfloat dotProduct = dot( normal, lVector );\n#ifdef WRAP_AROUND\nfloat pointDiffuseWeightFull = max( dotProduct, 0.0 );\nfloat pointDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\nvec3 pointDiffuseWeight = mix( vec3 ( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );\n#else\nfloat pointDiffuseWeight = max( dotProduct, 0.0 );\n#endif\npointDiffuse += diffuse * pointLightColor[ i ] * pointDiffuseWeight * lDistance;\nvec3 pointHalfVector = normalize( lVector + viewPosition );\nfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\nfloat pointSpecularWeight = specularStrength * max( pow( pointDotNormalHalf, shininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;\nvec3 schlick = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( lVector, pointHalfVector ), 5.0 );\npointSpecular += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * lDistance * specularNormalization;\n#else\npointSpecular += specular * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * lDistance;\n#endif\n}\n#endif\n#if MAX_SPOT_LIGHTS > 0\nvec3 spotDiffuse = vec3( 0.0 );\nvec3 spotSpecular = vec3( 0.0 );\nfor ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\n#ifdef PHONG_PER_PIXEL\nvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz + vViewPosition.xyz;\nfloat lDistance = 1.0;\nif ( spotLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / spotLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\n#else\nvec3 lVector = normalize( vSpotLight[ i ].xyz );\nfloat lDistance = vSpotLight[ i ].w;\n#endif\nfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );\nif ( spotEffect > spotLightAngleCos[ i ] ) {\nspotEffect = max( pow( spotEffect, spotLightExponent[ i ] ), 0.0 );\nfloat dotProduct = dot( normal, lVector );\n#ifdef WRAP_AROUND\nfloat spotDiffuseWeightFull = max( dotProduct, 0.0 );\nfloat spotDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\nvec3 spotDiffuseWeight = mix( vec3 ( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );\n#else\nfloat spotDiffuseWeight = max( dotProduct, 0.0 );\n#endif\nspotDiffuse += diffuse * spotLightColor[ i ] * spotDiffuseWeight * lDistance * spotEffect;\nvec3 spotHalfVector = normalize( lVector + viewPosition );\nfloat spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );\nfloat spotSpecularWeight = specularStrength * max( pow( spotDotNormalHalf, shininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;\nvec3 schlick = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( lVector, spotHalfVector ), 5.0 );\nspotSpecular += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * lDistance * specularNormalization * spotEffect;\n#else\nspotSpecular += specular * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * lDistance * spotEffect;\n#endif\n}\n}\n#endif\n#if MAX_DIR_LIGHTS > 0\nvec3 dirDiffuse = vec3( 0.0 );\nvec3 dirSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_DIR_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\nfloat dotProduct = dot( normal, dirVector );\n#ifdef WRAP_AROUND\nfloat dirDiffuseWeightFull = max( dotProduct, 0.0 );\nfloat dirDiffuseWeightHalf = max( 0.5 * dotProduct + 0.5, 0.0 );\nvec3 dirDiffuseWeight = mix( vec3( dirDiffuseWeightFull ), vec3( dirDiffuseWeightHalf ), wrapRGB );\n#else\nfloat dirDiffuseWeight = max( dotProduct, 0.0 );\n#endif\ndirDiffuse += diffuse * directionalLightColor[ i ] * dirDiffuseWeight;\nvec3 dirHalfVector = normalize( dirVector + viewPosition );\nfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\nfloat dirSpecularWeight = specularStrength * max( pow( dirDotNormalHalf, shininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;\nvec3 schlick = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( dirVector, dirHalfVector ), 5.0 );\ndirSpecular += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;\n#else\ndirSpecular += specular * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight;\n#endif\n}\n#endif\n#if MAX_HEMI_LIGHTS > 0\nvec3 hemiDiffuse = vec3( 0.0 );\nvec3 hemiSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );\nvec3 lVector = normalize( lDirection.xyz );\nfloat dotProduct = dot( normal, lVector );\nfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\nvec3 hemiColor = mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\nhemiDiffuse += diffuse * hemiColor;\nvec3 hemiHalfVectorSky = normalize( lVector + viewPosition );\nfloat hemiDotNormalHalfSky = 0.5 * dot( normal, hemiHalfVectorSky ) + 0.5;\nfloat hemiSpecularWeightSky = specularStrength * max( pow( hemiDotNormalHalfSky, shininess ), 0.0 );\nvec3 lVectorGround = -lVector;\nvec3 hemiHalfVectorGround = normalize( lVectorGround + viewPosition );\nfloat hemiDotNormalHalfGround = 0.5 * dot( normal, hemiHalfVectorGround ) + 0.5;\nfloat hemiSpecularWeightGround = specularStrength * max( pow( hemiDotNormalHalfGround, shininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat dotProductGround = dot( normal, lVectorGround );\nfloat specularNormalization = ( shininess + 2.0001 ) / 8.0;\nvec3 schlickSky = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( lVector, hemiHalfVectorSky ), 5.0 );\nvec3 schlickGround = specular + vec3( 1.0 - specular ) * pow( 1.0 - dot( lVectorGround, hemiHalfVectorGround ), 5.0 );\nhemiSpecular += hemiColor * specularNormalization * ( schlickSky * hemiSpecularWeightSky * max( dotProduct, 0.0 ) + schlickGround * hemiSpecularWeightGround * max( dotProductGround, 0.0 ) );\n#else\nhemiSpecular += specular * hemiColor * ( hemiSpecularWeightSky + hemiSpecularWeightGround ) * hemiDiffuseWeight;\n#endif\n}\n#endif\nvec3 totalDiffuse = vec3( 0.0 );\nvec3 totalSpecular = vec3( 0.0 );\n#if MAX_DIR_LIGHTS > 0\ntotalDiffuse += dirDiffuse;\ntotalSpecular += dirSpecular;\n#endif\n#if MAX_HEMI_LIGHTS > 0\ntotalDiffuse += hemiDiffuse;\ntotalSpecular += hemiSpecular;\n#endif\n#if MAX_POINT_LIGHTS > 0\ntotalDiffuse += pointDiffuse;\ntotalSpecular += pointSpecular;\n#endif\n#if MAX_SPOT_LIGHTS > 0\ntotalDiffuse += spotDiffuse;\ntotalSpecular += spotSpecular;\n#endif\n#ifdef METAL\ngl_FragColor.xyz = gl_FragColor.xyz * ( emissive + totalDiffuse + ambientLightColor * ambient + totalSpecular );\n#else\ngl_FragColor.xyz = gl_FragColor.xyz * ( emissive + totalDiffuse + ambientLightColor * ambient ) + totalSpecular;\n#endif", +color_pars_fragment:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_fragment:"#ifdef USE_COLOR\ngl_FragColor = gl_FragColor * vec4( vColor, 1.0 );\n#endif",color_pars_vertex:"#ifdef USE_COLOR\nvarying vec3 vColor;\n#endif",color_vertex:"#ifdef USE_COLOR\n#ifdef GAMMA_INPUT\nvColor = color * color;\n#else\nvColor = color;\n#endif\n#endif",skinning_pars_vertex:"#ifdef USE_SKINNING\n#ifdef BONE_TEXTURE\nuniform sampler2D boneTexture;\nuniform int boneTextureWidth;\nuniform int boneTextureHeight;\nmat4 getBoneMatrix( const in float i ) {\nfloat j = i * 4.0;\nfloat x = mod( j, float( boneTextureWidth ) );\nfloat y = floor( j / float( boneTextureWidth ) );\nfloat dx = 1.0 / float( boneTextureWidth );\nfloat dy = 1.0 / float( boneTextureHeight );\ny = dy * ( y + 0.5 );\nvec4 v1 = texture2D( boneTexture, vec2( dx * ( x + 0.5 ), y ) );\nvec4 v2 = texture2D( boneTexture, vec2( dx * ( x + 1.5 ), y ) );\nvec4 v3 = texture2D( boneTexture, vec2( dx * ( x + 2.5 ), y ) );\nvec4 v4 = texture2D( boneTexture, vec2( dx * ( x + 3.5 ), y ) );\nmat4 bone = mat4( v1, v2, v3, v4 );\nreturn bone;\n}\n#else\nuniform mat4 boneGlobalMatrices[ MAX_BONES ];\nmat4 getBoneMatrix( const in float i ) {\nmat4 bone = boneGlobalMatrices[ int(i) ];\nreturn bone;\n}\n#endif\n#endif", +skinbase_vertex:"#ifdef USE_SKINNING\nmat4 boneMatX = getBoneMatrix( skinIndex.x );\nmat4 boneMatY = getBoneMatrix( skinIndex.y );\n#endif",skinning_vertex:"#ifdef USE_SKINNING\n#ifdef USE_MORPHTARGETS\nvec4 skinVertex = vec4( morphed, 1.0 );\n#else\nvec4 skinVertex = vec4( position, 1.0 );\n#endif\nvec4 skinned = boneMatX * skinVertex * skinWeight.x;\nskinned \t += boneMatY * skinVertex * skinWeight.y;\n#endif",morphtarget_pars_vertex:"#ifdef USE_MORPHTARGETS\n#ifndef USE_MORPHNORMALS\nuniform float morphTargetInfluences[ 8 ];\n#else\nuniform float morphTargetInfluences[ 4 ];\n#endif\n#endif", +morphtarget_vertex:"#ifdef USE_MORPHTARGETS\nvec3 morphed = vec3( 0.0 );\nmorphed += ( morphTarget0 - position ) * morphTargetInfluences[ 0 ];\nmorphed += ( morphTarget1 - position ) * morphTargetInfluences[ 1 ];\nmorphed += ( morphTarget2 - position ) * morphTargetInfluences[ 2 ];\nmorphed += ( morphTarget3 - position ) * morphTargetInfluences[ 3 ];\n#ifndef USE_MORPHNORMALS\nmorphed += ( morphTarget4 - position ) * morphTargetInfluences[ 4 ];\nmorphed += ( morphTarget5 - position ) * morphTargetInfluences[ 5 ];\nmorphed += ( morphTarget6 - position ) * morphTargetInfluences[ 6 ];\nmorphed += ( morphTarget7 - position ) * morphTargetInfluences[ 7 ];\n#endif\nmorphed += position;\n#endif", +default_vertex:"vec4 mvPosition;\n#ifdef USE_SKINNING\nmvPosition = modelViewMatrix * skinned;\n#endif\n#if !defined( USE_SKINNING ) && defined( USE_MORPHTARGETS )\nmvPosition = modelViewMatrix * vec4( morphed, 1.0 );\n#endif\n#if !defined( USE_SKINNING ) && ! defined( USE_MORPHTARGETS )\nmvPosition = modelViewMatrix * vec4( position, 1.0 );\n#endif\ngl_Position = projectionMatrix * mvPosition;",morphnormal_vertex:"#ifdef USE_MORPHNORMALS\nvec3 morphedNormal = vec3( 0.0 );\nmorphedNormal += ( morphNormal0 - normal ) * morphTargetInfluences[ 0 ];\nmorphedNormal += ( morphNormal1 - normal ) * morphTargetInfluences[ 1 ];\nmorphedNormal += ( morphNormal2 - normal ) * morphTargetInfluences[ 2 ];\nmorphedNormal += ( morphNormal3 - normal ) * morphTargetInfluences[ 3 ];\nmorphedNormal += normal;\n#endif", +skinnormal_vertex:"#ifdef USE_SKINNING\nmat4 skinMatrix = skinWeight.x * boneMatX;\nskinMatrix \t+= skinWeight.y * boneMatY;\n#ifdef USE_MORPHNORMALS\nvec4 skinnedNormal = skinMatrix * vec4( morphedNormal, 0.0 );\n#else\nvec4 skinnedNormal = skinMatrix * vec4( normal, 0.0 );\n#endif\n#endif",defaultnormal_vertex:"vec3 objectNormal;\n#ifdef USE_SKINNING\nobjectNormal = skinnedNormal.xyz;\n#endif\n#if !defined( USE_SKINNING ) && defined( USE_MORPHNORMALS )\nobjectNormal = morphedNormal;\n#endif\n#if !defined( USE_SKINNING ) && ! defined( USE_MORPHNORMALS )\nobjectNormal = normal;\n#endif\n#ifdef FLIP_SIDED\nobjectNormal = -objectNormal;\n#endif\nvec3 transformedNormal = normalMatrix * objectNormal;", +shadowmap_pars_fragment:"#ifdef USE_SHADOWMAP\nuniform sampler2D shadowMap[ MAX_SHADOWS ];\nuniform vec2 shadowMapSize[ MAX_SHADOWS ];\nuniform float shadowDarkness[ MAX_SHADOWS ];\nuniform float shadowBias[ MAX_SHADOWS ];\nvarying vec4 vShadowCoord[ MAX_SHADOWS ];\nfloat unpackDepth( const in vec4 rgba_depth ) {\nconst vec4 bit_shift = vec4( 1.0 / ( 256.0 * 256.0 * 256.0 ), 1.0 / ( 256.0 * 256.0 ), 1.0 / 256.0, 1.0 );\nfloat depth = dot( rgba_depth, bit_shift );\nreturn depth;\n}\n#endif",shadowmap_fragment:"#ifdef USE_SHADOWMAP\n#ifdef SHADOWMAP_DEBUG\nvec3 frustumColors[3];\nfrustumColors[0] = vec3( 1.0, 0.5, 0.0 );\nfrustumColors[1] = vec3( 0.0, 1.0, 0.8 );\nfrustumColors[2] = vec3( 0.0, 0.5, 1.0 );\n#endif\n#ifdef SHADOWMAP_CASCADE\nint inFrustumCount = 0;\n#endif\nfloat fDepth;\nvec3 shadowColor = vec3( 1.0 );\nfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\nvec3 shadowCoord = vShadowCoord[ i ].xyz / vShadowCoord[ i ].w;\nbvec4 inFrustumVec = bvec4 ( shadowCoord.x >= 0.0, shadowCoord.x <= 1.0, shadowCoord.y >= 0.0, shadowCoord.y <= 1.0 );\nbool inFrustum = all( inFrustumVec );\n#ifdef SHADOWMAP_CASCADE\ninFrustumCount += int( inFrustum );\nbvec3 frustumTestVec = bvec3( inFrustum, inFrustumCount == 1, shadowCoord.z <= 1.0 );\n#else\nbvec2 frustumTestVec = bvec2( inFrustum, shadowCoord.z <= 1.0 );\n#endif\nbool frustumTest = all( frustumTestVec );\nif ( frustumTest ) {\nshadowCoord.z += shadowBias[ i ];\n#if defined( SHADOWMAP_TYPE_PCF )\nfloat shadow = 0.0;\nconst float shadowDelta = 1.0 / 9.0;\nfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\nfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\nfloat dx0 = -1.25 * xPixelOffset;\nfloat dy0 = -1.25 * yPixelOffset;\nfloat dx1 = 1.25 * xPixelOffset;\nfloat dy1 = 1.25 * yPixelOffset;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nfDepth = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\nif ( fDepth < shadowCoord.z ) shadow += shadowDelta;\nshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\n#elif defined( SHADOWMAP_TYPE_PCF_SOFT )\nfloat shadow = 0.0;\nfloat xPixelOffset = 1.0 / shadowMapSize[ i ].x;\nfloat yPixelOffset = 1.0 / shadowMapSize[ i ].y;\nfloat dx0 = -1.0 * xPixelOffset;\nfloat dy0 = -1.0 * yPixelOffset;\nfloat dx1 = 1.0 * xPixelOffset;\nfloat dy1 = 1.0 * yPixelOffset;\nmat3 shadowKernel;\nmat3 depthKernel;\ndepthKernel[0][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy0 ) ) );\ndepthKernel[0][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, 0.0 ) ) );\ndepthKernel[0][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx0, dy1 ) ) );\ndepthKernel[1][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy0 ) ) );\ndepthKernel[1][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy ) );\ndepthKernel[1][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( 0.0, dy1 ) ) );\ndepthKernel[2][0] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy0 ) ) );\ndepthKernel[2][1] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, 0.0 ) ) );\ndepthKernel[2][2] = unpackDepth( texture2D( shadowMap[ i ], shadowCoord.xy + vec2( dx1, dy1 ) ) );\nvec3 shadowZ = vec3( shadowCoord.z );\nshadowKernel[0] = vec3(lessThan(depthKernel[0], shadowZ ));\nshadowKernel[0] *= vec3(0.25);\nshadowKernel[1] = vec3(lessThan(depthKernel[1], shadowZ ));\nshadowKernel[1] *= vec3(0.25);\nshadowKernel[2] = vec3(lessThan(depthKernel[2], shadowZ ));\nshadowKernel[2] *= vec3(0.25);\nvec2 fractionalCoord = 1.0 - fract( shadowCoord.xy * shadowMapSize[i].xy );\nshadowKernel[0] = mix( shadowKernel[1], shadowKernel[0], fractionalCoord.x );\nshadowKernel[1] = mix( shadowKernel[2], shadowKernel[1], fractionalCoord.x );\nvec4 shadowValues;\nshadowValues.x = mix( shadowKernel[0][1], shadowKernel[0][0], fractionalCoord.y );\nshadowValues.y = mix( shadowKernel[0][2], shadowKernel[0][1], fractionalCoord.y );\nshadowValues.z = mix( shadowKernel[1][1], shadowKernel[1][0], fractionalCoord.y );\nshadowValues.w = mix( shadowKernel[1][2], shadowKernel[1][1], fractionalCoord.y );\nshadow = dot( shadowValues, vec4( 1.0 ) );\nshadowColor = shadowColor * vec3( ( 1.0 - shadowDarkness[ i ] * shadow ) );\n#else\nvec4 rgbaDepth = texture2D( shadowMap[ i ], shadowCoord.xy );\nfloat fDepth = unpackDepth( rgbaDepth );\nif ( fDepth < shadowCoord.z )\nshadowColor = shadowColor * vec3( 1.0 - shadowDarkness[ i ] );\n#endif\n}\n#ifdef SHADOWMAP_DEBUG\n#ifdef SHADOWMAP_CASCADE\nif ( inFrustum && inFrustumCount == 1 ) gl_FragColor.xyz *= frustumColors[ i ];\n#else\nif ( inFrustum ) gl_FragColor.xyz *= frustumColors[ i ];\n#endif\n#endif\n}\n#ifdef GAMMA_OUTPUT\nshadowColor *= shadowColor;\n#endif\ngl_FragColor.xyz = gl_FragColor.xyz * shadowColor;\n#endif", +shadowmap_pars_vertex:"#ifdef USE_SHADOWMAP\nvarying vec4 vShadowCoord[ MAX_SHADOWS ];\nuniform mat4 shadowMatrix[ MAX_SHADOWS ];\n#endif",shadowmap_vertex:"#ifdef USE_SHADOWMAP\nfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\nvShadowCoord[ i ] = shadowMatrix[ i ] * worldPosition;\n}\n#endif",alphatest_fragment:"#ifdef ALPHATEST\nif ( gl_FragColor.a < ALPHATEST ) discard;\n#endif",linear_to_gamma_fragment:"#ifdef GAMMA_OUTPUT\ngl_FragColor.xyz = sqrt( gl_FragColor.xyz );\n#endif"}; THREE.UniformsUtils={merge:function(a){var b,c,d,e={};for(b=0;bn;n++){m=k;r=n;if(G.autoScaleCubemaps){if(s=h.image[n],E=ab,!(s.width<=E&&s.height<=E))v=Math.max(s.width,s.height),t=Math.floor(s.width* -E/v),E=Math.floor(s.height*E/v),v=document.createElement("canvas"),v.width=t,v.height=E,v.getContext("2d").drawImage(s,0,0,s.width,s.height,0,0,t,E),s=v}else s=h.image[n];m[r]=s}n=k[0];m=0===(n.width&n.width-1)&&0===(n.height&n.height-1);r=B(h.format);s=B(h.type);u(j.TEXTURE_CUBE_MAP,h,m);for(n=0;6>n;n++)j.texImage2D(j.TEXTURE_CUBE_MAP_POSITIVE_X+n,0,r,r,s,k[n]);h.generateMipmaps&&m&&j.generateMipmap(j.TEXTURE_CUBE_MAP);h.needsUpdate=!1;if(h.onUpdated)h.onUpdated()}else j.activeTexture(j.TEXTURE0+ -k),j.bindTexture(j.TEXTURE_CUBE_MAP,h.image.__webglTextureCube)}else n instanceof THREE.WebGLRenderTargetCube?(h=n,j.activeTexture(j.TEXTURE0+k),j.bindTexture(j.TEXTURE_CUBE_MAP,h.__webglTexture)):G.setTexture(n,k)}else if("tv"===m){if(!h._array){h._array=[];for(m=0,r=h.texture.length;m -l&&(k=n,l=h[k]);j.bindBuffer(j.ARRAY_BUFFER,e.__webglMorphTargetsBuffers[k]);j.vertexAttribPointer(c["morphTarget"+g],3,j.FLOAT,!1,0,0);f.__webglMorphTargetInfluences[g]=l;i[k]=1;l=-1;g++}}null!==d.program.uniforms.morphTargetInfluences&&j.uniform1fv(d.program.uniforms.morphTargetInfluences,f.__webglMorphTargetInfluences)}if(a){if(e.__webglCustomAttributesList)for(g=0,h=e.__webglCustomAttributesList.length;gma;ma++)Ob=ac[ma],hb[Pa]=Ob.x,hb[Pa+1]=Ob.y,hb[Pa+2]=Ob.z,Pa+=3;else for(ma=0;3>ma;ma++)hb[Pa]=Hb.x,hb[Pa+1]=Hb.y,hb[Pa+2]=Hb.z,Pa+=3;for(F=0,U=oa.length;Fma;ma++)Ob=ac[ma],hb[Pa]=Ob.x,hb[Pa+1]=Ob.y,hb[Pa+ -2]=Ob.z,Pa+=3;else for(ma=0;4>ma;ma++)hb[Pa]=Hb.x,hb[Pa+1]=Hb.y,hb[Pa+2]=Hb.z,Pa+=3;j.bindBuffer(j.ARRAY_BUFFER,ea.__webglNormalBuffer);j.bufferData(j.ARRAY_BUFFER,hb,bb)}if(ad&&Rc&&Xc){for(F=0,U=na.length;Fma;ma++)dc=bc[ma],oc[Cb]=dc.u,oc[Cb+1]=dc.v,Cb+=2;for(F=0,U=oa.length;Fma;ma++)dc=bc[ma],oc[Cb]=dc.u,oc[Cb+1]=dc.v,Cb+=2;0ma;ma++)ec=cc[ma],pc[Db]=ec.u,pc[Db+1]=ec.v,Db+=2;for(F=0,U=oa.length;Fma;ma++)ec=cc[ma],pc[Db]=ec.u,pc[Db+1]=ec.v,Db+=2;0c;c++){a.__webglFramebuffer[c]=j.createFramebuffer();a.__webglRenderbuffer[c]=j.createRenderbuffer();j.texImage2D(j.TEXTURE_CUBE_MAP_POSITIVE_X+c,0,d,a.width,a.height,0,d,e,null);var f=a,g=j.TEXTURE_CUBE_MAP_POSITIVE_X+c;j.bindFramebuffer(j.FRAMEBUFFER,a.__webglFramebuffer[c]);j.framebufferTexture2D(j.FRAMEBUFFER,j.COLOR_ATTACHMENT0,g,f.__webglTexture,0);v(a.__webglRenderbuffer[c],a)}}else a.__webglFramebuffer= -j.createFramebuffer(),a.__webglRenderbuffer=j.createRenderbuffer(),j.bindTexture(j.TEXTURE_2D,a.__webglTexture),u(j.TEXTURE_2D,a,c),j.texImage2D(j.TEXTURE_2D,0,d,a.width,a.height,0,d,e,null),d=j.TEXTURE_2D,j.bindFramebuffer(j.FRAMEBUFFER,a.__webglFramebuffer),j.framebufferTexture2D(j.FRAMEBUFFER,j.COLOR_ATTACHMENT0,d,a.__webglTexture,0),v(a.__webglRenderbuffer,a);b?j.bindTexture(j.TEXTURE_CUBE_MAP,null):j.bindTexture(j.TEXTURE_2D,null);j.bindRenderbuffer(j.RENDERBUFFER,null);j.bindFramebuffer(j.FRAMEBUFFER, -null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,d=a.width,a=a.height,c=e=0):(b=null,d=Da,a=$a,e=Aa,c=Ja);b!==E&&(j.bindFramebuffer(j.FRAMEBUFFER,b),j.viewport(e,c,d,a),E=b);Ta=d;ib=a};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin);this.addPostPlugin(new THREE.SpritePlugin);this.addPostPlugin(new THREE.LensFlarePlugin)}; -THREE.WebGLRenderTarget=function(a,b,c){this.width=a;this.height=b;c=c||{};this.wrapS=void 0!==c.wrapS?c.wrapS:THREE.ClampToEdgeWrapping;this.wrapT=void 0!==c.wrapT?c.wrapT:THREE.ClampToEdgeWrapping;this.magFilter=void 0!==c.magFilter?c.magFilter:THREE.LinearFilter;this.minFilter=void 0!==c.minFilter?c.minFilter:THREE.LinearMipMapLinearFilter;this.offset=new THREE.Vector2(0,0);this.repeat=new THREE.Vector2(1,1);this.format=void 0!==c.format?c.format:THREE.RGBAFormat;this.type=void 0!==c.type?c.type: -THREE.UnsignedByteType;this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0;this.generateMipmaps=!0}; -THREE.WebGLRenderTarget.prototype.clone=function(){var a=new THREE.WebGLRenderTarget(this.width,this.height);a.wrapS=this.wrapS;a.wrapT=this.wrapT;a.magFilter=this.magFilter;a.minFilter=this.minFilter;a.offset.copy(this.offset);a.repeat.copy(this.repeat);a.format=this.format;a.type=this.type;a.depthBuffer=this.depthBuffer;a.stencilBuffer=this.stencilBuffer;return a};THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeCubeFace=0}; -THREE.WebGLRenderTargetCube.prototype=new THREE.WebGLRenderTarget;THREE.WebGLRenderTargetCube.prototype.constructor=THREE.WebGLRenderTargetCube;THREE.RenderableVertex=function(){this.positionWorld=new THREE.Vector3;this.positionScreen=new THREE.Vector4;this.visible=!0};THREE.RenderableVertex.prototype.copy=function(a){this.positionWorld.copy(a.positionWorld);this.positionScreen.copy(a.positionScreen)}; -THREE.RenderableFace3=function(){this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.v3=new THREE.RenderableVertex;this.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.vertexNormalsWorld=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.faceMaterial=this.material=null;this.uvs=[[]];this.z=null}; -THREE.RenderableFace4=function(){this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.v3=new THREE.RenderableVertex;this.v4=new THREE.RenderableVertex;this.centroidWorld=new THREE.Vector3;this.centroidScreen=new THREE.Vector3;this.normalWorld=new THREE.Vector3;this.vertexNormalsWorld=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.faceMaterial=this.material=null;this.uvs=[[]];this.z=null};THREE.RenderableObject=function(){this.z=this.object=null}; -THREE.RenderableParticle=function(){this.rotation=this.z=this.y=this.x=null;this.scale=new THREE.Vector2;this.material=null};THREE.RenderableLine=function(){this.z=null;this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.material=null}; -THREE.ColorUtils={adjustHSV:function(a,b,c,d){var e=THREE.ColorUtils.__hsv;THREE.ColorUtils.rgbToHsv(a,e);e.h=THREE.Math.clamp(e.h+b,0,1);e.s=THREE.Math.clamp(e.s+c,0,1);e.v=THREE.Math.clamp(e.v+d,0,1);a.setHSV(e.h,e.s,e.v)},rgbToHsv:function(a,b){var c=a.r,d=a.g,e=a.b,f=Math.max(Math.max(c,d),e),g=Math.min(Math.min(c,d),e);if(g===f)g=c=0;else{var h=f-g,g=h/f,c=(c===f?(d-e)/h:d===f?2+(e-c)/h:4+(c-d)/h)/6;0>c&&(c+=1);1a?b(c,e-1):l[e]n-1?e-1:n-1,o=(n+1)%e,p=0>k-1?d-1:k-1,m=(k+1)%d,r=[],s=[0,0,h[4*(n*d+k)]/255*b];r.push([-1,0,h[4*(n*d+p)]/255*b]);r.push([-1,-1,h[4*(q*d+p)]/255*b]);r.push([0,-1,h[4*(q*d+k)]/255*b]);r.push([1, --1,h[4*(q*d+m)]/255*b]);r.push([1,0,h[4*(n*d+m)]/255*b]);r.push([1,1,h[4*(o*d+m)]/255*b]);r.push([0,1,h[4*(o*d+k)]/255*b]);r.push([-1,1,h[4*(o*d+p)]/255*b]);q=[];p=r.length;for(o=0;o 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];\n#endif\n#ifdef WRAP_AROUND\nuniform vec3 wrapRGB;\n#endif\nvarying vec3 vViewPosition;", -THREE.ShaderChunk.shadowmap_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,"void main() {\ngl_FragColor = vec4( vec3( 1.0 ), uOpacity );\nvec3 specularTex = vec3( 1.0 );\nvec3 normalTex = texture2D( tNormal, vUv ).xyz * 2.0 - 1.0;\nnormalTex.xy *= uNormalScale;\nnormalTex = normalize( normalTex );\nif( enableDiffuse ) {\n#ifdef GAMMA_INPUT\nvec4 texelColor = texture2D( tDiffuse, vUv );\ntexelColor.xyz *= texelColor.xyz;\ngl_FragColor = gl_FragColor * texelColor;\n#else\ngl_FragColor = gl_FragColor * texture2D( tDiffuse, vUv );\n#endif\n}\nif( enableAO ) {\n#ifdef GAMMA_INPUT\nvec4 aoColor = texture2D( tAO, vUv );\naoColor.xyz *= aoColor.xyz;\ngl_FragColor.xyz = gl_FragColor.xyz * aoColor.xyz;\n#else\ngl_FragColor.xyz = gl_FragColor.xyz * texture2D( tAO, vUv ).xyz;\n#endif\n}\nif( enableSpecular )\nspecularTex = texture2D( tSpecular, vUv ).xyz;\nmat3 tsb = mat3( normalize( vTangent ), normalize( vBinormal ), normalize( vNormal ) );\nvec3 finalNormal = tsb * normalTex;\nvec3 normal = normalize( finalNormal );\nvec3 viewPosition = normalize( vViewPosition );\n#if MAX_POINT_LIGHTS > 0\nvec3 pointDiffuse = vec3( 0.0 );\nvec3 pointSpecular = vec3( 0.0 );\nfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec3 pointVector = normalize( vPointLight[ i ].xyz );\nfloat pointDistance = vPointLight[ i ].w;\n#ifdef WRAP_AROUND\nfloat pointDiffuseWeightFull = max( dot( normal, pointVector ), 0.0 );\nfloat pointDiffuseWeightHalf = max( 0.5 * dot( normal, pointVector ) + 0.5, 0.0 );\nvec3 pointDiffuseWeight = mix( vec3 ( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );\n#else\nfloat pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );\n#endif\npointDiffuse += pointDistance * pointLightColor[ i ] * uDiffuseColor * pointDiffuseWeight;\nvec3 pointHalfVector = normalize( pointVector + viewPosition );\nfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\nfloat pointSpecularWeight = specularTex.r * max( pow( pointDotNormalHalf, uShininess ), 0.0 );\npointSpecular += pointDistance * pointLightColor[ i ] * uSpecularColor * pointSpecularWeight * pointDiffuseWeight;\n}\n#endif\n#if MAX_DIR_LIGHTS > 0\nvec3 dirDiffuse = vec3( 0.0 );\nvec3 dirSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\n#ifdef WRAP_AROUND\nfloat directionalLightWeightingFull = max( dot( normal, dirVector ), 0.0 );\nfloat directionalLightWeightingHalf = max( 0.5 * dot( normal, dirVector ) + 0.5, 0.0 );\nvec3 dirDiffuseWeight = mix( vec3( directionalLightWeightingFull ), vec3( directionalLightWeightingHalf ), wrapRGB );\n#else\nfloat dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );\n#endif\ndirDiffuse += directionalLightColor[ i ] * uDiffuseColor * dirDiffuseWeight;\nvec3 dirHalfVector = normalize( dirVector + viewPosition );\nfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\nfloat dirSpecularWeight = specularTex.r * max( pow( dirDotNormalHalf, uShininess ), 0.0 );\ndirSpecular += directionalLightColor[ i ] * uSpecularColor * dirSpecularWeight * dirDiffuseWeight;\n}\n#endif\nvec3 totalDiffuse = vec3( 0.0 );\nvec3 totalSpecular = vec3( 0.0 );\n#if MAX_DIR_LIGHTS > 0\ntotalDiffuse += dirDiffuse;\ntotalSpecular += dirSpecular;\n#endif\n#if MAX_POINT_LIGHTS > 0\ntotalDiffuse += pointDiffuse;\ntotalSpecular += pointSpecular;\n#endif\ngl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * uAmbientColor) + totalSpecular;\nif ( enableReflection ) {\nvec3 wPos = cameraPosition - vViewPosition;\nvec3 vReflect = reflect( normalize( wPos ), normal );\nvec4 cubeColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );\n#ifdef GAMMA_INPUT\ncubeColor.xyz *= cubeColor.xyz;\n#endif\ngl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, specularTex.r * uReflectivity );\n}", -THREE.ShaderChunk.shadowmap_fragment,THREE.ShaderChunk.linear_to_gamma_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n"),vertexShader:["attribute vec4 tangent;\nuniform vec2 uOffset;\nuniform vec2 uRepeat;\n#ifdef VERTEX_TEXTURES\nuniform sampler2D tDisplacement;\nuniform float uDisplacementScale;\nuniform float uDisplacementBias;\n#endif\nvarying vec3 vTangent;\nvarying vec3 vBinormal;\nvarying vec3 vNormal;\nvarying vec2 vUv;\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\nvarying vec4 vPointLight[ MAX_POINT_LIGHTS ];\n#endif\nvarying vec3 vViewPosition;", -THREE.ShaderChunk.shadowmap_pars_vertex,"void main() {\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\nvViewPosition = -mvPosition.xyz;\nvNormal = normalMatrix * normal;\nvTangent = normalMatrix * tangent.xyz;\nvBinormal = cross( vNormal, vTangent ) * tangent.w;\nvUv = uv * uRepeat + uOffset;\n#if MAX_POINT_LIGHTS > 0\nfor( int i = 0; i < MAX_POINT_LIGHTS; i++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 lVector = lPosition.xyz - mvPosition.xyz;\nfloat lDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\nlDistance = 1.0 - min( ( length( lVector ) / pointLightDistance[ i ] ), 1.0 );\nlVector = normalize( lVector );\nvPointLight[ i ] = vec4( lVector, lDistance );\n}\n#endif\n#ifdef VERTEX_TEXTURES\nvec3 dv = texture2D( tDisplacement, uv ).xyz;\nfloat df = uDisplacementScale * dv.x + uDisplacementBias;\nvec4 displacedPosition = vec4( normalize( vNormal.xyz ) * df, 0.0 ) + mvPosition;\ngl_Position = projectionMatrix * displacedPosition;\n#else\ngl_Position = projectionMatrix * mvPosition;\n#endif", -THREE.ShaderChunk.shadowmap_vertex,"}"].join("\n")},cube:{uniforms:{tCube:{type:"t",value:1,texture:null},tFlip:{type:"f",value:-1}},vertexShader:"varying vec3 vViewPosition;\nvoid main() {\nvec4 mPosition = objectMatrix * vec4( position, 1.0 );\nvViewPosition = cameraPosition - mPosition.xyz;\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",fragmentShader:"uniform samplerCube tCube;\nuniform float tFlip;\nvarying vec3 vViewPosition;\nvoid main() {\nvec3 wPos = cameraPosition - vViewPosition;\ngl_FragColor = textureCube( tCube, vec3( tFlip * wPos.x, wPos.yz ) );\n}"}}}; -THREE.BufferGeometry=function(){this.id=THREE.GeometryCount++;this.vertexColorArray=this.vertexUvArray=this.vertexNormalArray=this.vertexPositionArray=this.vertexIndexArray=this.vertexColorBuffer=this.vertexUvBuffer=this.vertexNormalBuffer=this.vertexPositionBuffer=this.vertexIndexBuffer=null;this.dynamic=!1;this.boundingSphere=this.boundingBox=null;this.morphTargets=[]};THREE.BufferGeometry.prototype={constructor:THREE.BufferGeometry,computeBoundingBox:function(){},computeBoundingSphere:function(){}}; -THREE.Curve=function(){};THREE.Curve.prototype.getPoint=function(){console.log("Warning, getPoint() not implemented!");return null};THREE.Curve.prototype.getPointAt=function(a){return this.getPoint(this.getUtoTmapping(a))};THREE.Curve.prototype.getPoints=function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPoint(b/a));return c};THREE.Curve.prototype.getSpacedPoints=function(a){a||(a=5);var b,c=[];for(b=0;b<=a;b++)c.push(this.getPointAt(b/a));return c}; -THREE.Curve.prototype.getLength=function(){var a=this.getLengths();return a[a.length-1]};THREE.Curve.prototype.getLengths=function(a){a||(a=200);if(this.cacheArcLengths&&this.cacheArcLengths.length==a+1)return this.cacheArcLengths;var b=[],c,d=this.getPoint(0),e,f=0;b.push(0);for(e=1;e<=a;e++)c=this.getPoint(e/a),f+=c.distanceTo(d),b.push(f),d=c;return this.cacheArcLengths=b}; -THREE.Curve.prototype.getUtoTmapping=function(a,b){var c=this.getLengths(),d=0,e=c.length,f;f=b?b:a*c[e-1];for(var g=0,h=e-1,i;g<=h;)if(d=Math.floor(g+(h-g)/2),i=c[d]-f,0>i)g=d+1;else if(0b&&(b=0);1d.length-2?a:a+1;c[3]=a>d.length-3?a:a+2;b.x=THREE.Curve.Utils.interpolate(d[c[0]].x,d[c[1]].x,d[c[2]].x,d[c[3]].x,e);b.y=THREE.Curve.Utils.interpolate(d[c[0]].y,d[c[1]].y,d[c[2]].y,d[c[3]].y,e);return b};THREE.ArcCurve=function(a,b,c,d,e,f){this.aX=a;this.aY=b;this.aRadius=c;this.aStartAngle=d;this.aEndAngle=e;this.aClockwise=f}; -THREE.ArcCurve.prototype=new THREE.Curve;THREE.ArcCurve.prototype.constructor=THREE.ArcCurve;THREE.ArcCurve.prototype.getPoint=function(a){var b=this.aEndAngle-this.aStartAngle;this.aClockwise||(a=1-a);b=this.aStartAngle+a*b;a=this.aX+this.aRadius*Math.cos(b);b=this.aY+this.aRadius*Math.sin(b);return new THREE.Vector2(a,b)}; +THREE.UniformsLib={common:{diffuse:{type:"c",value:new THREE.Color(15658734)},opacity:{type:"f",value:1},map:{type:"t",value:null},offsetRepeat:{type:"v4",value:new THREE.Vector4(0,0,1,1)},lightMap:{type:"t",value:null},specularMap:{type:"t",value:null},envMap:{type:"t",value:null},flipEnvMap:{type:"f",value:-1},useRefract:{type:"i",value:0},reflectivity:{type:"f",value:1},refractionRatio:{type:"f",value:0.98},combine:{type:"i",value:0},morphTargetInfluences:{type:"f",value:0}},bump:{bumpMap:{type:"t", +value:null},bumpScale:{type:"f",value:1}},normalmap:{normalMap:{type:"t",value:null},normalScale:{type:"v2",value:new THREE.Vector2(1,1)}},fog:{fogDensity:{type:"f",value:2.5E-4},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},fogColor:{type:"c",value:new THREE.Color(16777215)}},lights:{ambientLightColor:{type:"fv",value:[]},directionalLightDirection:{type:"fv",value:[]},directionalLightColor:{type:"fv",value:[]},hemisphereLightDirection:{type:"fv",value:[]},hemisphereLightSkyColor:{type:"fv", +value:[]},hemisphereLightGroundColor:{type:"fv",value:[]},pointLightColor:{type:"fv",value:[]},pointLightPosition:{type:"fv",value:[]},pointLightDistance:{type:"fv1",value:[]},spotLightColor:{type:"fv",value:[]},spotLightPosition:{type:"fv",value:[]},spotLightDirection:{type:"fv",value:[]},spotLightDistance:{type:"fv1",value:[]},spotLightAngleCos:{type:"fv1",value:[]},spotLightExponent:{type:"fv1",value:[]}},particle:{psColor:{type:"c",value:new THREE.Color(15658734)},opacity:{type:"f",value:1},size:{type:"f", +value:1},scale:{type:"f",value:1},map:{type:"t",value:null},fogDensity:{type:"f",value:2.5E-4},fogNear:{type:"f",value:1},fogFar:{type:"f",value:2E3},fogColor:{type:"c",value:new THREE.Color(16777215)}},shadowmap:{shadowMap:{type:"tv",value:[]},shadowMapSize:{type:"v2v",value:[]},shadowBias:{type:"fv1",value:[]},shadowDarkness:{type:"fv1",value:[]},shadowMatrix:{type:"m4v",value:[]}}}; +THREE.ShaderLib={basic:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.fog,THREE.UniformsLib.shadowmap]),vertexShader:[THREE.ShaderChunk.map_pars_vertex,THREE.ShaderChunk.lightmap_pars_vertex,THREE.ShaderChunk.envmap_pars_vertex,THREE.ShaderChunk.color_pars_vertex,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,THREE.ShaderChunk.shadowmap_pars_vertex,"void main() {",THREE.ShaderChunk.map_vertex,THREE.ShaderChunk.lightmap_vertex,THREE.ShaderChunk.color_vertex, +THREE.ShaderChunk.skinbase_vertex,"#ifdef USE_ENVMAP",THREE.ShaderChunk.morphnormal_vertex,THREE.ShaderChunk.skinnormal_vertex,THREE.ShaderChunk.defaultnormal_vertex,"#endif",THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.skinning_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.worldpos_vertex,THREE.ShaderChunk.envmap_vertex,THREE.ShaderChunk.shadowmap_vertex,"}"].join("\n"),fragmentShader:["uniform vec3 diffuse;\nuniform float opacity;",THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.map_pars_fragment, +THREE.ShaderChunk.lightmap_pars_fragment,THREE.ShaderChunk.envmap_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.shadowmap_pars_fragment,THREE.ShaderChunk.specularmap_pars_fragment,"void main() {\ngl_FragColor = vec4( diffuse, opacity );",THREE.ShaderChunk.map_fragment,THREE.ShaderChunk.alphatest_fragment,THREE.ShaderChunk.specularmap_fragment,THREE.ShaderChunk.lightmap_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.envmap_fragment,THREE.ShaderChunk.shadowmap_fragment, +THREE.ShaderChunk.linear_to_gamma_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n")},lambert:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.fog,THREE.UniformsLib.lights,THREE.UniformsLib.shadowmap,{ambient:{type:"c",value:new THREE.Color(16777215)},emissive:{type:"c",value:new THREE.Color(0)},wrapRGB:{type:"v3",value:new THREE.Vector3(1,1,1)}}]),vertexShader:["#define LAMBERT\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\nvarying vec3 vLightBack;\n#endif", +THREE.ShaderChunk.map_pars_vertex,THREE.ShaderChunk.lightmap_pars_vertex,THREE.ShaderChunk.envmap_pars_vertex,THREE.ShaderChunk.lights_lambert_pars_vertex,THREE.ShaderChunk.color_pars_vertex,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,THREE.ShaderChunk.shadowmap_pars_vertex,"void main() {",THREE.ShaderChunk.map_vertex,THREE.ShaderChunk.lightmap_vertex,THREE.ShaderChunk.color_vertex,THREE.ShaderChunk.morphnormal_vertex,THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.skinnormal_vertex, +THREE.ShaderChunk.defaultnormal_vertex,THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.skinning_vertex,THREE.ShaderChunk.default_vertex,THREE.ShaderChunk.worldpos_vertex,THREE.ShaderChunk.envmap_vertex,THREE.ShaderChunk.lights_lambert_vertex,THREE.ShaderChunk.shadowmap_vertex,"}"].join("\n"),fragmentShader:["uniform float opacity;\nvarying vec3 vLightFront;\n#ifdef DOUBLE_SIDED\nvarying vec3 vLightBack;\n#endif",THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.map_pars_fragment,THREE.ShaderChunk.lightmap_pars_fragment, +THREE.ShaderChunk.envmap_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.shadowmap_pars_fragment,THREE.ShaderChunk.specularmap_pars_fragment,"void main() {\ngl_FragColor = vec4( vec3 ( 1.0 ), opacity );",THREE.ShaderChunk.map_fragment,THREE.ShaderChunk.alphatest_fragment,THREE.ShaderChunk.specularmap_fragment,"#ifdef DOUBLE_SIDED\nif ( gl_FrontFacing )\ngl_FragColor.xyz *= vLightFront;\nelse\ngl_FragColor.xyz *= vLightBack;\n#else\ngl_FragColor.xyz *= vLightFront;\n#endif",THREE.ShaderChunk.lightmap_fragment, +THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.envmap_fragment,THREE.ShaderChunk.shadowmap_fragment,THREE.ShaderChunk.linear_to_gamma_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n")},phong:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.bump,THREE.UniformsLib.normalmap,THREE.UniformsLib.fog,THREE.UniformsLib.lights,THREE.UniformsLib.shadowmap,{ambient:{type:"c",value:new THREE.Color(16777215)},emissive:{type:"c",value:new THREE.Color(0)},specular:{type:"c", +value:new THREE.Color(1118481)},shininess:{type:"f",value:30},wrapRGB:{type:"v3",value:new THREE.Vector3(1,1,1)}}]),vertexShader:["#define PHONG\nvarying vec3 vViewPosition;\nvarying vec3 vNormal;",THREE.ShaderChunk.map_pars_vertex,THREE.ShaderChunk.lightmap_pars_vertex,THREE.ShaderChunk.envmap_pars_vertex,THREE.ShaderChunk.lights_phong_pars_vertex,THREE.ShaderChunk.color_pars_vertex,THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,THREE.ShaderChunk.shadowmap_pars_vertex, +"void main() {",THREE.ShaderChunk.map_vertex,THREE.ShaderChunk.lightmap_vertex,THREE.ShaderChunk.color_vertex,THREE.ShaderChunk.morphnormal_vertex,THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.skinnormal_vertex,THREE.ShaderChunk.defaultnormal_vertex,"vNormal = normalize( transformedNormal );",THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.skinning_vertex,THREE.ShaderChunk.default_vertex,"vViewPosition = -mvPosition.xyz;",THREE.ShaderChunk.worldpos_vertex,THREE.ShaderChunk.envmap_vertex, +THREE.ShaderChunk.lights_phong_vertex,THREE.ShaderChunk.shadowmap_vertex,"}"].join("\n"),fragmentShader:["uniform vec3 diffuse;\nuniform float opacity;\nuniform vec3 ambient;\nuniform vec3 emissive;\nuniform vec3 specular;\nuniform float shininess;",THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.map_pars_fragment,THREE.ShaderChunk.lightmap_pars_fragment,THREE.ShaderChunk.envmap_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.lights_phong_pars_fragment,THREE.ShaderChunk.shadowmap_pars_fragment, +THREE.ShaderChunk.bumpmap_pars_fragment,THREE.ShaderChunk.normalmap_pars_fragment,THREE.ShaderChunk.specularmap_pars_fragment,"void main() {\ngl_FragColor = vec4( vec3 ( 1.0 ), opacity );",THREE.ShaderChunk.map_fragment,THREE.ShaderChunk.alphatest_fragment,THREE.ShaderChunk.specularmap_fragment,THREE.ShaderChunk.lights_phong_fragment,THREE.ShaderChunk.lightmap_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.envmap_fragment,THREE.ShaderChunk.shadowmap_fragment,THREE.ShaderChunk.linear_to_gamma_fragment, +THREE.ShaderChunk.fog_fragment,"}"].join("\n")},particle_basic:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.particle,THREE.UniformsLib.shadowmap]),vertexShader:["uniform float size;\nuniform float scale;",THREE.ShaderChunk.color_pars_vertex,THREE.ShaderChunk.shadowmap_pars_vertex,"void main() {",THREE.ShaderChunk.color_vertex,"vec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\n#ifdef USE_SIZEATTENUATION\ngl_PointSize = size * ( scale / length( mvPosition.xyz ) );\n#else\ngl_PointSize = size;\n#endif\ngl_Position = projectionMatrix * mvPosition;", +THREE.ShaderChunk.worldpos_vertex,THREE.ShaderChunk.shadowmap_vertex,"}"].join("\n"),fragmentShader:["uniform vec3 psColor;\nuniform float opacity;",THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.map_particle_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,THREE.ShaderChunk.shadowmap_pars_fragment,"void main() {\ngl_FragColor = vec4( psColor, opacity );",THREE.ShaderChunk.map_particle_fragment,THREE.ShaderChunk.alphatest_fragment,THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.shadowmap_fragment, +THREE.ShaderChunk.fog_fragment,"}"].join("\n")},dashed:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.common,THREE.UniformsLib.fog,{scale:{type:"f",value:1},dashSize:{type:"f",value:1},totalSize:{type:"f",value:2}}]),vertexShader:["uniform float scale;\nattribute float lineDistance;\nvarying float vLineDistance;",THREE.ShaderChunk.color_pars_vertex,"void main() {",THREE.ShaderChunk.color_vertex,"vLineDistance = scale * lineDistance;\nvec4 mvPosition = modelViewMatrix * vec4( position, 1.0 );\ngl_Position = projectionMatrix * mvPosition;\n}"].join("\n"), +fragmentShader:["uniform vec3 diffuse;\nuniform float opacity;\nuniform float dashSize;\nuniform float totalSize;\nvarying float vLineDistance;",THREE.ShaderChunk.color_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,"void main() {\nif ( mod( vLineDistance, totalSize ) > dashSize ) {\ndiscard;\n}\ngl_FragColor = vec4( diffuse, opacity );",THREE.ShaderChunk.color_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n")},depth:{uniforms:{mNear:{type:"f",value:1},mFar:{type:"f",value:2E3},opacity:{type:"f", +value:1}},vertexShader:"void main() {\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",fragmentShader:"uniform float mNear;\nuniform float mFar;\nuniform float opacity;\nvoid main() {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat color = 1.0 - smoothstep( mNear, mFar, depth );\ngl_FragColor = vec4( vec3( color ), opacity );\n}"},normal:{uniforms:{opacity:{type:"f",value:1}},vertexShader:["varying vec3 vNormal;",THREE.ShaderChunk.morphtarget_pars_vertex,"void main() {\nvNormal = normalize( normalMatrix * normal );", +THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.default_vertex,"}"].join("\n"),fragmentShader:"uniform float opacity;\nvarying vec3 vNormal;\nvoid main() {\ngl_FragColor = vec4( 0.5 * normalize( vNormal ) + 0.5, opacity );\n}"},normalmap:{uniforms:THREE.UniformsUtils.merge([THREE.UniformsLib.fog,THREE.UniformsLib.lights,THREE.UniformsLib.shadowmap,{enableAO:{type:"i",value:0},enableDiffuse:{type:"i",value:0},enableSpecular:{type:"i",value:0},enableReflection:{type:"i",value:0},enableDisplacement:{type:"i", +value:0},tDisplacement:{type:"t",value:null},tDiffuse:{type:"t",value:null},tCube:{type:"t",value:null},tNormal:{type:"t",value:null},tSpecular:{type:"t",value:null},tAO:{type:"t",value:null},uNormalScale:{type:"v2",value:new THREE.Vector2(1,1)},uDisplacementBias:{type:"f",value:0},uDisplacementScale:{type:"f",value:1},uDiffuseColor:{type:"c",value:new THREE.Color(16777215)},uSpecularColor:{type:"c",value:new THREE.Color(1118481)},uAmbientColor:{type:"c",value:new THREE.Color(16777215)},uShininess:{type:"f", +value:30},uOpacity:{type:"f",value:1},useRefract:{type:"i",value:0},uRefractionRatio:{type:"f",value:0.98},uReflectivity:{type:"f",value:0.5},uOffset:{type:"v2",value:new THREE.Vector2(0,0)},uRepeat:{type:"v2",value:new THREE.Vector2(1,1)},wrapRGB:{type:"v3",value:new THREE.Vector3(1,1,1)}}]),fragmentShader:["uniform vec3 uAmbientColor;\nuniform vec3 uDiffuseColor;\nuniform vec3 uSpecularColor;\nuniform float uShininess;\nuniform float uOpacity;\nuniform bool enableDiffuse;\nuniform bool enableSpecular;\nuniform bool enableAO;\nuniform bool enableReflection;\nuniform sampler2D tDiffuse;\nuniform sampler2D tNormal;\nuniform sampler2D tSpecular;\nuniform sampler2D tAO;\nuniform samplerCube tCube;\nuniform vec2 uNormalScale;\nuniform bool useRefract;\nuniform float uRefractionRatio;\nuniform float uReflectivity;\nvarying vec3 vTangent;\nvarying vec3 vBinormal;\nvarying vec3 vNormal;\nvarying vec2 vUv;\nuniform vec3 ambientLightColor;\n#if MAX_DIR_LIGHTS > 0\nuniform vec3 directionalLightColor[ MAX_DIR_LIGHTS ];\nuniform vec3 directionalLightDirection[ MAX_DIR_LIGHTS ];\n#endif\n#if MAX_HEMI_LIGHTS > 0\nuniform vec3 hemisphereLightSkyColor[ MAX_HEMI_LIGHTS ];\nuniform vec3 hemisphereLightGroundColor[ MAX_HEMI_LIGHTS ];\nuniform vec3 hemisphereLightDirection[ MAX_HEMI_LIGHTS ];\n#endif\n#if MAX_POINT_LIGHTS > 0\nuniform vec3 pointLightColor[ MAX_POINT_LIGHTS ];\nuniform vec3 pointLightPosition[ MAX_POINT_LIGHTS ];\nuniform float pointLightDistance[ MAX_POINT_LIGHTS ];\n#endif\n#if MAX_SPOT_LIGHTS > 0\nuniform vec3 spotLightColor[ MAX_SPOT_LIGHTS ];\nuniform vec3 spotLightPosition[ MAX_SPOT_LIGHTS ];\nuniform vec3 spotLightDirection[ MAX_SPOT_LIGHTS ];\nuniform float spotLightAngleCos[ MAX_SPOT_LIGHTS ];\nuniform float spotLightExponent[ MAX_SPOT_LIGHTS ];\nuniform float spotLightDistance[ MAX_SPOT_LIGHTS ];\n#endif\n#ifdef WRAP_AROUND\nuniform vec3 wrapRGB;\n#endif\nvarying vec3 vWorldPosition;\nvarying vec3 vViewPosition;", +THREE.ShaderChunk.shadowmap_pars_fragment,THREE.ShaderChunk.fog_pars_fragment,"void main() {\ngl_FragColor = vec4( vec3( 1.0 ), uOpacity );\nvec3 specularTex = vec3( 1.0 );\nvec3 normalTex = texture2D( tNormal, vUv ).xyz * 2.0 - 1.0;\nnormalTex.xy *= uNormalScale;\nnormalTex = normalize( normalTex );\nif( enableDiffuse ) {\n#ifdef GAMMA_INPUT\nvec4 texelColor = texture2D( tDiffuse, vUv );\ntexelColor.xyz *= texelColor.xyz;\ngl_FragColor = gl_FragColor * texelColor;\n#else\ngl_FragColor = gl_FragColor * texture2D( tDiffuse, vUv );\n#endif\n}\nif( enableAO ) {\n#ifdef GAMMA_INPUT\nvec4 aoColor = texture2D( tAO, vUv );\naoColor.xyz *= aoColor.xyz;\ngl_FragColor.xyz = gl_FragColor.xyz * aoColor.xyz;\n#else\ngl_FragColor.xyz = gl_FragColor.xyz * texture2D( tAO, vUv ).xyz;\n#endif\n}\nif( enableSpecular )\nspecularTex = texture2D( tSpecular, vUv ).xyz;\nmat3 tsb = mat3( normalize( vTangent ), normalize( vBinormal ), normalize( vNormal ) );\nvec3 finalNormal = tsb * normalTex;\n#ifdef FLIP_SIDED\nfinalNormal = -finalNormal;\n#endif\nvec3 normal = normalize( finalNormal );\nvec3 viewPosition = normalize( vViewPosition );\n#if MAX_POINT_LIGHTS > 0\nvec3 pointDiffuse = vec3( 0.0 );\nvec3 pointSpecular = vec3( 0.0 );\nfor ( int i = 0; i < MAX_POINT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( pointLightPosition[ i ], 1.0 );\nvec3 pointVector = lPosition.xyz + vViewPosition.xyz;\nfloat pointDistance = 1.0;\nif ( pointLightDistance[ i ] > 0.0 )\npointDistance = 1.0 - min( ( length( pointVector ) / pointLightDistance[ i ] ), 1.0 );\npointVector = normalize( pointVector );\n#ifdef WRAP_AROUND\nfloat pointDiffuseWeightFull = max( dot( normal, pointVector ), 0.0 );\nfloat pointDiffuseWeightHalf = max( 0.5 * dot( normal, pointVector ) + 0.5, 0.0 );\nvec3 pointDiffuseWeight = mix( vec3 ( pointDiffuseWeightFull ), vec3( pointDiffuseWeightHalf ), wrapRGB );\n#else\nfloat pointDiffuseWeight = max( dot( normal, pointVector ), 0.0 );\n#endif\npointDiffuse += pointDistance * pointLightColor[ i ] * uDiffuseColor * pointDiffuseWeight;\nvec3 pointHalfVector = normalize( pointVector + viewPosition );\nfloat pointDotNormalHalf = max( dot( normal, pointHalfVector ), 0.0 );\nfloat pointSpecularWeight = specularTex.r * max( pow( pointDotNormalHalf, uShininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat specularNormalization = ( uShininess + 2.0001 ) / 8.0;\nvec3 schlick = uSpecularColor + vec3( 1.0 - uSpecularColor ) * pow( 1.0 - dot( pointVector, pointHalfVector ), 5.0 );\npointSpecular += schlick * pointLightColor[ i ] * pointSpecularWeight * pointDiffuseWeight * pointDistance * specularNormalization;\n#else\npointSpecular += pointDistance * pointLightColor[ i ] * uSpecularColor * pointSpecularWeight * pointDiffuseWeight;\n#endif\n}\n#endif\n#if MAX_SPOT_LIGHTS > 0\nvec3 spotDiffuse = vec3( 0.0 );\nvec3 spotSpecular = vec3( 0.0 );\nfor ( int i = 0; i < MAX_SPOT_LIGHTS; i ++ ) {\nvec4 lPosition = viewMatrix * vec4( spotLightPosition[ i ], 1.0 );\nvec3 spotVector = lPosition.xyz + vViewPosition.xyz;\nfloat spotDistance = 1.0;\nif ( spotLightDistance[ i ] > 0.0 )\nspotDistance = 1.0 - min( ( length( spotVector ) / spotLightDistance[ i ] ), 1.0 );\nspotVector = normalize( spotVector );\nfloat spotEffect = dot( spotLightDirection[ i ], normalize( spotLightPosition[ i ] - vWorldPosition ) );\nif ( spotEffect > spotLightAngleCos[ i ] ) {\nspotEffect = max( pow( spotEffect, spotLightExponent[ i ] ), 0.0 );\n#ifdef WRAP_AROUND\nfloat spotDiffuseWeightFull = max( dot( normal, spotVector ), 0.0 );\nfloat spotDiffuseWeightHalf = max( 0.5 * dot( normal, spotVector ) + 0.5, 0.0 );\nvec3 spotDiffuseWeight = mix( vec3 ( spotDiffuseWeightFull ), vec3( spotDiffuseWeightHalf ), wrapRGB );\n#else\nfloat spotDiffuseWeight = max( dot( normal, spotVector ), 0.0 );\n#endif\nspotDiffuse += spotDistance * spotLightColor[ i ] * uDiffuseColor * spotDiffuseWeight * spotEffect;\nvec3 spotHalfVector = normalize( spotVector + viewPosition );\nfloat spotDotNormalHalf = max( dot( normal, spotHalfVector ), 0.0 );\nfloat spotSpecularWeight = specularTex.r * max( pow( spotDotNormalHalf, uShininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat specularNormalization = ( uShininess + 2.0001 ) / 8.0;\nvec3 schlick = uSpecularColor + vec3( 1.0 - uSpecularColor ) * pow( 1.0 - dot( spotVector, spotHalfVector ), 5.0 );\nspotSpecular += schlick * spotLightColor[ i ] * spotSpecularWeight * spotDiffuseWeight * spotDistance * specularNormalization * spotEffect;\n#else\nspotSpecular += spotDistance * spotLightColor[ i ] * uSpecularColor * spotSpecularWeight * spotDiffuseWeight * spotEffect;\n#endif\n}\n}\n#endif\n#if MAX_DIR_LIGHTS > 0\nvec3 dirDiffuse = vec3( 0.0 );\nvec3 dirSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_DIR_LIGHTS; i++ ) {\nvec4 lDirection = viewMatrix * vec4( directionalLightDirection[ i ], 0.0 );\nvec3 dirVector = normalize( lDirection.xyz );\n#ifdef WRAP_AROUND\nfloat directionalLightWeightingFull = max( dot( normal, dirVector ), 0.0 );\nfloat directionalLightWeightingHalf = max( 0.5 * dot( normal, dirVector ) + 0.5, 0.0 );\nvec3 dirDiffuseWeight = mix( vec3( directionalLightWeightingFull ), vec3( directionalLightWeightingHalf ), wrapRGB );\n#else\nfloat dirDiffuseWeight = max( dot( normal, dirVector ), 0.0 );\n#endif\ndirDiffuse += directionalLightColor[ i ] * uDiffuseColor * dirDiffuseWeight;\nvec3 dirHalfVector = normalize( dirVector + viewPosition );\nfloat dirDotNormalHalf = max( dot( normal, dirHalfVector ), 0.0 );\nfloat dirSpecularWeight = specularTex.r * max( pow( dirDotNormalHalf, uShininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat specularNormalization = ( uShininess + 2.0001 ) / 8.0;\nvec3 schlick = uSpecularColor + vec3( 1.0 - uSpecularColor ) * pow( 1.0 - dot( dirVector, dirHalfVector ), 5.0 );\ndirSpecular += schlick * directionalLightColor[ i ] * dirSpecularWeight * dirDiffuseWeight * specularNormalization;\n#else\ndirSpecular += directionalLightColor[ i ] * uSpecularColor * dirSpecularWeight * dirDiffuseWeight;\n#endif\n}\n#endif\n#if MAX_HEMI_LIGHTS > 0\nvec3 hemiDiffuse = vec3( 0.0 );\nvec3 hemiSpecular = vec3( 0.0 );\nfor( int i = 0; i < MAX_HEMI_LIGHTS; i ++ ) {\nvec4 lDirection = viewMatrix * vec4( hemisphereLightDirection[ i ], 0.0 );\nvec3 lVector = normalize( lDirection.xyz );\nfloat dotProduct = dot( normal, lVector );\nfloat hemiDiffuseWeight = 0.5 * dotProduct + 0.5;\nvec3 hemiColor = mix( hemisphereLightGroundColor[ i ], hemisphereLightSkyColor[ i ], hemiDiffuseWeight );\nhemiDiffuse += uDiffuseColor * hemiColor;\nvec3 hemiHalfVectorSky = normalize( lVector + viewPosition );\nfloat hemiDotNormalHalfSky = 0.5 * dot( normal, hemiHalfVectorSky ) + 0.5;\nfloat hemiSpecularWeightSky = specularTex.r * max( pow( hemiDotNormalHalfSky, uShininess ), 0.0 );\nvec3 lVectorGround = -lVector;\nvec3 hemiHalfVectorGround = normalize( lVectorGround + viewPosition );\nfloat hemiDotNormalHalfGround = 0.5 * dot( normal, hemiHalfVectorGround ) + 0.5;\nfloat hemiSpecularWeightGround = specularTex.r * max( pow( hemiDotNormalHalfGround, uShininess ), 0.0 );\n#ifdef PHYSICALLY_BASED_SHADING\nfloat dotProductGround = dot( normal, lVectorGround );\nfloat specularNormalization = ( uShininess + 2.0001 ) / 8.0;\nvec3 schlickSky = uSpecularColor + vec3( 1.0 - uSpecularColor ) * pow( 1.0 - dot( lVector, hemiHalfVectorSky ), 5.0 );\nvec3 schlickGround = uSpecularColor + vec3( 1.0 - uSpecularColor ) * pow( 1.0 - dot( lVectorGround, hemiHalfVectorGround ), 5.0 );\nhemiSpecular += hemiColor * specularNormalization * ( schlickSky * hemiSpecularWeightSky * max( dotProduct, 0.0 ) + schlickGround * hemiSpecularWeightGround * max( dotProductGround, 0.0 ) );\n#else\nhemiSpecular += uSpecularColor * hemiColor * ( hemiSpecularWeightSky + hemiSpecularWeightGround ) * hemiDiffuseWeight;\n#endif\n}\n#endif\nvec3 totalDiffuse = vec3( 0.0 );\nvec3 totalSpecular = vec3( 0.0 );\n#if MAX_DIR_LIGHTS > 0\ntotalDiffuse += dirDiffuse;\ntotalSpecular += dirSpecular;\n#endif\n#if MAX_HEMI_LIGHTS > 0\ntotalDiffuse += hemiDiffuse;\ntotalSpecular += hemiSpecular;\n#endif\n#if MAX_POINT_LIGHTS > 0\ntotalDiffuse += pointDiffuse;\ntotalSpecular += pointSpecular;\n#endif\n#if MAX_SPOT_LIGHTS > 0\ntotalDiffuse += spotDiffuse;\ntotalSpecular += spotSpecular;\n#endif\n#ifdef METAL\ngl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * uAmbientColor + totalSpecular );\n#else\ngl_FragColor.xyz = gl_FragColor.xyz * ( totalDiffuse + ambientLightColor * uAmbientColor ) + totalSpecular;\n#endif\nif ( enableReflection ) {\nvec3 vReflect;\nvec3 cameraToVertex = normalize( vWorldPosition - cameraPosition );\nif ( useRefract ) {\nvReflect = refract( cameraToVertex, normal, uRefractionRatio );\n} else {\nvReflect = reflect( cameraToVertex, normal );\n}\nvec4 cubeColor = textureCube( tCube, vec3( -vReflect.x, vReflect.yz ) );\n#ifdef GAMMA_INPUT\ncubeColor.xyz *= cubeColor.xyz;\n#endif\ngl_FragColor.xyz = mix( gl_FragColor.xyz, cubeColor.xyz, specularTex.r * uReflectivity );\n}", +THREE.ShaderChunk.shadowmap_fragment,THREE.ShaderChunk.linear_to_gamma_fragment,THREE.ShaderChunk.fog_fragment,"}"].join("\n"),vertexShader:["attribute vec4 tangent;\nuniform vec2 uOffset;\nuniform vec2 uRepeat;\nuniform bool enableDisplacement;\n#ifdef VERTEX_TEXTURES\nuniform sampler2D tDisplacement;\nuniform float uDisplacementScale;\nuniform float uDisplacementBias;\n#endif\nvarying vec3 vTangent;\nvarying vec3 vBinormal;\nvarying vec3 vNormal;\nvarying vec2 vUv;\nvarying vec3 vWorldPosition;\nvarying vec3 vViewPosition;", +THREE.ShaderChunk.skinning_pars_vertex,THREE.ShaderChunk.shadowmap_pars_vertex,"void main() {",THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.skinnormal_vertex,"#ifdef USE_SKINNING\nvNormal = normalize( normalMatrix * skinnedNormal.xyz );\nvec4 skinnedTangent = skinMatrix * vec4( tangent.xyz, 0.0 );\nvTangent = normalize( normalMatrix * skinnedTangent.xyz );\n#else\nvNormal = normalize( normalMatrix * normal );\nvTangent = normalize( normalMatrix * tangent.xyz );\n#endif\nvBinormal = normalize( cross( vNormal, vTangent ) * tangent.w );\nvUv = uv * uRepeat + uOffset;\nvec3 displacedPosition;\n#ifdef VERTEX_TEXTURES\nif ( enableDisplacement ) {\nvec3 dv = texture2D( tDisplacement, uv ).xyz;\nfloat df = uDisplacementScale * dv.x + uDisplacementBias;\ndisplacedPosition = position + normalize( normal ) * df;\n} else {\n#ifdef USE_SKINNING\nvec4 skinVertex = vec4( position, 1.0 );\nvec4 skinned = boneMatX * skinVertex * skinWeight.x;\nskinned \t += boneMatY * skinVertex * skinWeight.y;\ndisplacedPosition = skinned.xyz;\n#else\ndisplacedPosition = position;\n#endif\n}\n#else\n#ifdef USE_SKINNING\nvec4 skinVertex = vec4( position, 1.0 );\nvec4 skinned = boneMatX * skinVertex * skinWeight.x;\nskinned \t += boneMatY * skinVertex * skinWeight.y;\ndisplacedPosition = skinned.xyz;\n#else\ndisplacedPosition = position;\n#endif\n#endif\nvec4 mvPosition = modelViewMatrix * vec4( displacedPosition, 1.0 );\nvec4 worldPosition = modelMatrix * vec4( displacedPosition, 1.0 );\ngl_Position = projectionMatrix * mvPosition;\nvWorldPosition = worldPosition.xyz;\nvViewPosition = -mvPosition.xyz;\n#ifdef USE_SHADOWMAP\nfor( int i = 0; i < MAX_SHADOWS; i ++ ) {\nvShadowCoord[ i ] = shadowMatrix[ i ] * worldPosition;\n}\n#endif\n}"].join("\n")}, +cube:{uniforms:{tCube:{type:"t",value:null},tFlip:{type:"f",value:-1}},vertexShader:"varying vec3 vWorldPosition;\nvoid main() {\nvec4 worldPosition = modelMatrix * vec4( position, 1.0 );\nvWorldPosition = worldPosition.xyz;\ngl_Position = projectionMatrix * modelViewMatrix * vec4( position, 1.0 );\n}",fragmentShader:"uniform samplerCube tCube;\nuniform float tFlip;\nvarying vec3 vWorldPosition;\nvoid main() {\ngl_FragColor = textureCube( tCube, vec3( tFlip * vWorldPosition.x, vWorldPosition.yz ) );\n}"}, +depthRGBA:{uniforms:{},vertexShader:[THREE.ShaderChunk.morphtarget_pars_vertex,THREE.ShaderChunk.skinning_pars_vertex,"void main() {",THREE.ShaderChunk.skinbase_vertex,THREE.ShaderChunk.morphtarget_vertex,THREE.ShaderChunk.skinning_vertex,THREE.ShaderChunk.default_vertex,"}"].join("\n"),fragmentShader:"vec4 pack_depth( const in float depth ) {\nconst vec4 bit_shift = vec4( 256.0 * 256.0 * 256.0, 256.0 * 256.0, 256.0, 1.0 );\nconst vec4 bit_mask = vec4( 0.0, 1.0 / 256.0, 1.0 / 256.0, 1.0 / 256.0 );\nvec4 res = fract( depth * bit_shift );\nres -= res.xxyz * bit_mask;\nreturn res;\n}\nvoid main() {\ngl_FragData[ 0 ] = pack_depth( gl_FragCoord.z );\n}"}};THREE.WebGLRenderer=function(a){function b(a,b){var c=a.vertices.length,d=b.material;if(d.attributes){void 0===a.__webglCustomAttributesList&&(a.__webglCustomAttributesList=[]);for(var e in d.attributes){var f=d.attributes[e];if(!f.__webglInitialized||f.createUniqueBuffers){f.__webglInitialized=!0;var h=1;"v2"===f.type?h=2:"v3"===f.type?h=3:"v4"===f.type?h=4:"c"===f.type&&(h=3);f.size=h;f.array=new Float32Array(c*h);f.buffer=j.createBuffer();f.buffer.belongsToAttribute=e;f.needsUpdate=!0}a.__webglCustomAttributesList.push(f)}}} +function c(a,b){var c=b.geometry,h=a.faces3,g=3*h.length,i=1*h.length,k=3*h.length,h=d(b,a),m=f(h),l=e(h),n=h.vertexColors?h.vertexColors:!1;a.__vertexArray=new Float32Array(3*g);l&&(a.__normalArray=new Float32Array(3*g));c.hasTangents&&(a.__tangentArray=new Float32Array(4*g));n&&(a.__colorArray=new Float32Array(3*g));m&&(0l;l++)L.autoScaleCubemaps&&!f?(n=k,r=l,s=c.image[l],v=ac,s.width<=v&&s.height<=v||(z=Math.max(s.width,s.height),u=Math.floor(s.width*v/z),v=Math.floor(s.height*v/z),z=document.createElement("canvas"),z.width=u,z.height=v,z.getContext("2d").drawImage(s,0,0,s.width,s.height,0,0,u,v),s=z),n[r]=s):k[l]=c.image[l];l=k[0];n=0===(l.width&l.width-1)&&0===(l.height&l.height-1);r=I(c.format);s=I(c.type);F(j.TEXTURE_CUBE_MAP, +c,n);for(l=0;6>l;l++)if(f){v=k[l].mipmaps;z=0;for(x=v.length;z=Mb&&console.warn("WebGLRenderer: trying to use "+a+" texture units while this GPU supports only "+Mb);P+=1;return a}function w(a,b,c,d){a[b]=c.r*c.r*d;a[b+1]=c.g*c.g*d;a[b+2]=c.b*c.b*d}function y(a,b,c,d){a[b]=c.r*d;a[b+1]=c.g*d;a[b+2]=c.b*d}function E(a){a!==wa&&(j.lineWidth(a),wa=a)}function A(a,b,c){Da!==a&&(a?j.enable(j.POLYGON_OFFSET_FILL):j.disable(j.POLYGON_OFFSET_FILL),Da=a); +if(a&&(Ua!==b||Qa!==c))j.polygonOffset(b,c),Ua=b,Qa=c}function K(a){for(var a=a.split("\n"),b=0,c=a.length;bb;b++)j.deleteFramebuffer(a.__webglFramebuffer[b]),j.deleteRenderbuffer(a.__webglRenderbuffer[b]); +else j.deleteFramebuffer(a.__webglFramebuffer),j.deleteRenderbuffer(a.__webglRenderbuffer);L.info.memory.textures--},Fb=function(a){a=a.target;a.removeEventListener("dispose",Fb);Gb(a)},Hb=function(a){void 0!==a.__webglVertexBuffer&&j.deleteBuffer(a.__webglVertexBuffer);void 0!==a.__webglNormalBuffer&&j.deleteBuffer(a.__webglNormalBuffer);void 0!==a.__webglTangentBuffer&&j.deleteBuffer(a.__webglTangentBuffer);void 0!==a.__webglColorBuffer&&j.deleteBuffer(a.__webglColorBuffer);void 0!==a.__webglUVBuffer&& +j.deleteBuffer(a.__webglUVBuffer);void 0!==a.__webglUV2Buffer&&j.deleteBuffer(a.__webglUV2Buffer);void 0!==a.__webglSkinIndicesBuffer&&j.deleteBuffer(a.__webglSkinIndicesBuffer);void 0!==a.__webglSkinWeightsBuffer&&j.deleteBuffer(a.__webglSkinWeightsBuffer);void 0!==a.__webglFaceBuffer&&j.deleteBuffer(a.__webglFaceBuffer);void 0!==a.__webglLineBuffer&&j.deleteBuffer(a.__webglLineBuffer);void 0!==a.__webglLineDistanceBuffer&&j.deleteBuffer(a.__webglLineDistanceBuffer);if(void 0!==a.__webglCustomAttributesList)for(var b in a.__webglCustomAttributesList)j.deleteBuffer(a.__webglCustomAttributesList[b].buffer); +L.info.memory.geometries--},Gb=function(a){var b=a.program;if(void 0!==b){a.program=void 0;var c,d,e=!1,a=0;for(c=da.length;ad.numSupportedMorphTargets?(l.sort(k),l.length=d.numSupportedMorphTargets):l.length>d.numSupportedMorphNormals?l.sort(k):0===l.length&&l.push([0,0]);for(m=0;mCa;Ca++)Ga=Q[Ca],Ma[hb]=Ga.x,Ma[hb+1]=Ga.y,Ma[hb+2]=Ga.z,hb+=3;else for(Ca=0;3>Ca;Ca++)Ma[hb]=U.x,Ma[hb+1]=U.y,Ma[hb+2]=U.z,hb+=3;j.bindBuffer(j.ARRAY_BUFFER,w.__webglNormalBuffer);j.bufferData(j.ARRAY_BUFFER,Ma,D)}if(yb&&Cb&&L){C=0;for(J=aa.length;CCa;Ca++)Fa=za[Ca],bb[Oa]=Fa.x,bb[Oa+1]=Fa.y,Oa+=2;0Ca;Ca++)Ka=$[Ca],cb[Pa]=Ka.x,cb[Pa+1]=Ka.y,Pa+=2;0f;f++){a.__webglFramebuffer[f]=j.createFramebuffer();a.__webglRenderbuffer[f]=j.createRenderbuffer();j.texImage2D(j.TEXTURE_CUBE_MAP_POSITIVE_X+f,0,d,a.width,a.height,0,d,e,null);var h=a,g=j.TEXTURE_CUBE_MAP_POSITIVE_X+f;j.bindFramebuffer(j.FRAMEBUFFER,a.__webglFramebuffer[f]);j.framebufferTexture2D(j.FRAMEBUFFER,j.COLOR_ATTACHMENT0,g,h.__webglTexture,0);O(a.__webglRenderbuffer[f],a)}c&&j.generateMipmap(j.TEXTURE_CUBE_MAP)}else a.__webglFramebuffer=j.createFramebuffer(),a.__webglRenderbuffer= +a.shareDepthFrom?a.shareDepthFrom.__webglRenderbuffer:j.createRenderbuffer(),j.bindTexture(j.TEXTURE_2D,a.__webglTexture),F(j.TEXTURE_2D,a,c),j.texImage2D(j.TEXTURE_2D,0,d,a.width,a.height,0,d,e,null),d=j.TEXTURE_2D,j.bindFramebuffer(j.FRAMEBUFFER,a.__webglFramebuffer),j.framebufferTexture2D(j.FRAMEBUFFER,j.COLOR_ATTACHMENT0,d,a.__webglTexture,0),a.shareDepthFrom?a.depthBuffer&&!a.stencilBuffer?j.framebufferRenderbuffer(j.FRAMEBUFFER,j.DEPTH_ATTACHMENT,j.RENDERBUFFER,a.__webglRenderbuffer):a.depthBuffer&& +a.stencilBuffer&&j.framebufferRenderbuffer(j.FRAMEBUFFER,j.DEPTH_STENCIL_ATTACHMENT,j.RENDERBUFFER,a.__webglRenderbuffer):O(a.__webglRenderbuffer,a),c&&j.generateMipmap(j.TEXTURE_2D);b?j.bindTexture(j.TEXTURE_CUBE_MAP,null):j.bindTexture(j.TEXTURE_2D,null);j.bindRenderbuffer(j.RENDERBUFFER,null);j.bindFramebuffer(j.FRAMEBUFFER,null)}a?(b=b?a.__webglFramebuffer[a.activeCubeFace]:a.__webglFramebuffer,c=a.width,a=a.height,e=d=0):(b=null,c=Ma,a=fb,d=bb,e=cb);b!==ba&&(j.bindFramebuffer(j.FRAMEBUFFER,b), +j.viewport(d,e,c,a),ba=b);sb=c;pb=a};this.shadowMapPlugin=new THREE.ShadowMapPlugin;this.addPrePlugin(this.shadowMapPlugin);this.addPostPlugin(new THREE.SpritePlugin);this.addPostPlugin(new THREE.LensFlarePlugin)};THREE.WebGLRenderTarget=function(a,b,c){this.width=a;this.height=b;c=c||{};this.wrapS=void 0!==c.wrapS?c.wrapS:THREE.ClampToEdgeWrapping;this.wrapT=void 0!==c.wrapT?c.wrapT:THREE.ClampToEdgeWrapping;this.magFilter=void 0!==c.magFilter?c.magFilter:THREE.LinearFilter;this.minFilter=void 0!==c.minFilter?c.minFilter:THREE.LinearMipMapLinearFilter;this.anisotropy=void 0!==c.anisotropy?c.anisotropy:1;this.offset=new THREE.Vector2(0,0);this.repeat=new THREE.Vector2(1,1);this.format=void 0!==c.format?c.format: +THREE.RGBAFormat;this.type=void 0!==c.type?c.type:THREE.UnsignedByteType;this.depthBuffer=void 0!==c.depthBuffer?c.depthBuffer:!0;this.stencilBuffer=void 0!==c.stencilBuffer?c.stencilBuffer:!0;this.generateMipmaps=!0;this.shareDepthFrom=null}; +THREE.WebGLRenderTarget.prototype={constructor:THREE.WebGLRenderTarget,clone:function(){var a=new THREE.WebGLRenderTarget(this.width,this.height);a.wrapS=this.wrapS;a.wrapT=this.wrapT;a.magFilter=this.magFilter;a.minFilter=this.minFilter;a.anisotropy=this.anisotropy;a.offset.copy(this.offset);a.repeat.copy(this.repeat);a.format=this.format;a.type=this.type;a.depthBuffer=this.depthBuffer;a.stencilBuffer=this.stencilBuffer;a.generateMipmaps=this.generateMipmaps;a.shareDepthFrom=this.shareDepthFrom; +return a},dispose:function(){this.dispatchEvent({type:"dispose"})}};THREE.EventDispatcher.prototype.apply(THREE.WebGLRenderTarget.prototype);THREE.WebGLRenderTargetCube=function(a,b,c){THREE.WebGLRenderTarget.call(this,a,b,c);this.activeCubeFace=0};THREE.WebGLRenderTargetCube.prototype=Object.create(THREE.WebGLRenderTarget.prototype);THREE.RenderableVertex=function(){this.positionWorld=new THREE.Vector3;this.positionScreen=new THREE.Vector4;this.visible=!0};THREE.RenderableVertex.prototype.copy=function(a){this.positionWorld.copy(a.positionWorld);this.positionScreen.copy(a.positionScreen)};THREE.RenderableFace3=function(){this.id=0;this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.v3=new THREE.RenderableVertex;this.centroidModel=new THREE.Vector3;this.normalModel=new THREE.Vector3;this.normalModelView=new THREE.Vector3;this.vertexNormalsLength=0;this.vertexNormalsModel=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.vertexNormalsModelView=[new THREE.Vector3,new THREE.Vector3,new THREE.Vector3];this.material=this.color=null;this.uvs=[[]];this.z= +0};THREE.RenderableObject=function(){this.id=0;this.object=null;this.z=0};THREE.RenderableSprite=function(){this.id=0;this.object=null;this.rotation=this.z=this.y=this.x=0;this.scale=new THREE.Vector2;this.material=null};THREE.RenderableLine=function(){this.id=0;this.v1=new THREE.RenderableVertex;this.v2=new THREE.RenderableVertex;this.vertexColors=[new THREE.Color,new THREE.Color];this.material=null;this.z=0};THREE.GeometryUtils={merge:function(a,b,c){var d,e,f=a.vertices.length,h=b instanceof THREE.Mesh?b.geometry:b,g=a.vertices,i=h.vertices,k=a.faces,m=h.faces,a=a.faceVertexUvs[0],h=h.faceVertexUvs[0];void 0===c&&(c=0);b instanceof THREE.Mesh&&(b.matrixAutoUpdate&&b.updateMatrix(),d=b.matrix,e=(new THREE.Matrix3).getNormalMatrix(d));for(var b=0,l=i.length;ba?b(c,e-1):k[e]>8&255,i>>16&255,i>>24&255)),d}d.mipmapCount=1;g[2]&131072&&!1!==b&&(d.mipmapCount=Math.max(1,g[7]));d.isCubemap=g[28]&512?!0:!1;d.width=g[4];d.height=g[3];for(var g=g[1]+4,f=d.width,h=d.height,i=d.isCubemap?6:1,m=0;ml-1?0:l-1,t=l+1>e-1?e-1:l+1,s=0>m-1?0:m-1,q=m+1>d-1?d-1:m+1,n=[],u=[0,0,g[4*(l*d+m)]/255*b];n.push([-1,0,g[4*(l*d+s)]/255*b]);n.push([-1,-1,g[4*(p*d+s)]/255*b]);n.push([0,-1,g[4*(p*d+m)]/255*b]);n.push([1,-1,g[4*(p*d+q)]/255*b]);n.push([1,0,g[4*(l*d+q)]/255*b]);n.push([1,1,g[4*(t*d+q)]/255*b]);n.push([0,1,g[4*(t*d+m)]/255*b]);n.push([-1,1,g[4*(t*d+s)]/255*b]);p=[];s=n.length;for(t=0;te)return null;var f=[],h=[],g=[],i,k,m;if(0=l--){console.log("Warning, unable to triangulate polygon!");break}i=k;e<=i&&(i=0);k=i+1;e<=k&&(k=0);m=k+1;e<=m&&(m=0);var p;a:{var t=p=void 0,s=void 0,q=void 0,n=void 0,u=void 0,r=void 0,v=void 0,z= +void 0,t=a[h[i]].x,s=a[h[i]].y,q=a[h[k]].x,n=a[h[k]].y,u=a[h[m]].x,r=a[h[m]].y;if(1E-10>(q-t)*(r-s)-(n-s)*(u-t))p=!1;else{var G=void 0,w=void 0,y=void 0,E=void 0,A=void 0,K=void 0,D=void 0,F=void 0,O=void 0,x=void 0,O=F=D=z=v=void 0,G=u-q,w=r-n,y=t-u,E=s-r,A=q-t,K=n-s;for(p=0;pi)h=d+1;else if(0b&&(b=0);1d.length-2?a:a+1;c[3]=a>d.length-3?a:a+2;b.x=THREE.Curve.Utils.interpolate(d[c[0]].x,d[c[1]].x,d[c[2]].x,d[c[3]].x,e);b.y=THREE.Curve.Utils.interpolate(d[c[0]].y,d[c[1]].y,d[c[2]].y,d[c[3]].y,e);b.z=THREE.Curve.Utils.interpolate(d[c[0]].z,d[c[1]].z,d[c[2]].z,d[c[3]].z,e);return b}); -THREE.CurvePath=function(){this.curves=[];this.bends=[];this.autoClose=!1};THREE.CurvePath.prototype=new THREE.Curve;THREE.CurvePath.prototype.constructor=THREE.CurvePath;THREE.CurvePath.prototype.add=function(a){this.curves.push(a)};THREE.CurvePath.prototype.checkConnection=function(){};THREE.CurvePath.prototype.closePath=function(){var a=this.curves[0].getPoint(0),b=this.curves[this.curves.length-1].getPoint(1);a.equals(b)||this.curves.push(new THREE.LineCurve(b,a))}; +THREE.Curve.create=function(a,b){a.prototype=Object.create(THREE.Curve.prototype);a.prototype.getPoint=b;return a};THREE.CurvePath=function(){this.curves=[];this.bends=[];this.autoClose=!1};THREE.CurvePath.prototype=Object.create(THREE.Curve.prototype);THREE.CurvePath.prototype.add=function(a){this.curves.push(a)};THREE.CurvePath.prototype.checkConnection=function(){};THREE.CurvePath.prototype.closePath=function(){var a=this.curves[0].getPoint(0),b=this.curves[this.curves.length-1].getPoint(1);a.equals(b)||this.curves.push(new THREE.LineCurve(b,a))}; THREE.CurvePath.prototype.getPoint=function(a){for(var b=a*this.getLength(),c=this.getCurveLengths(),a=0;a=b)return b=c[a]-b,a=this.curves[a],b=1-b/a.getLength(),a.getPointAt(b);a++}return null};THREE.CurvePath.prototype.getLength=function(){var a=this.getCurveLengths();return a[a.length-1]}; THREE.CurvePath.prototype.getCurveLengths=function(){if(this.cacheLengths&&this.cacheLengths.length==this.curves.length)return this.cacheLengths;var a=[],b=0,c,d=this.curves.length;for(c=0;cb)b=f.x;else if(f.xc)c=f.y;else if(f.y -h&&(h+=c.length);h%=c.length;0>g&&(g+=l.length);g%=l.length;e=0<=h-1?h-1:c.length-1;f=0<=g-1?g-1:l.length-1;m=[l[g],c[h],c[e]];m=THREE.FontUtils.Triangulate.area(m);r=[l[g],l[f],c[h]];r=THREE.FontUtils.Triangulate.area(r);n+q>m+r&&(h=o,g=k,0>h&&(h+=c.length),h%=c.length,0>g&&(g+=l.length),g%=l.length,e=0<=h-1?h-1:c.length-1,f=0<=g-1?g-1:l.length-1);n=c.slice(0,h);q=c.slice(h);o=l.slice(g);k=l.slice(0,g);f=[l[g],l[f],c[h]];p.push([l[g],c[h],c[e]]);p.push(f);c=n.concat(o).concat(k).concat(q)}return{shape:c, -isolatedPts:p,allpoints:d}},triangulateShape:function(a,b){var c=THREE.Shape.Utils.removeHoles(a,b),d=c.allpoints,e=c.isolatedPts,c=THREE.FontUtils.Triangulate(c.shape,!1),f,g,h,i,l={};for(f=0,g=d.length;fd;d++)i=h[d].x+":"+h[d].y,i=l[i],void 0!==i&&(h[d]=i)}for(f=0,g=e.length;fd;d++)i=h[d].x+":"+h[d].y,i=l[i],void 0!==i&&(h[d]=i)}return c.concat(e)}, +THREE.CurvePath.prototype.getBoundingBox=function(){var a=this.getPoints(),b,c,d,e,f,h;b=c=Number.NEGATIVE_INFINITY;e=f=Number.POSITIVE_INFINITY;var g,i,k,m,l=a[0]instanceof THREE.Vector3;m=l?new THREE.Vector3:new THREE.Vector2;i=0;for(k=a.length;ib?b=g.x:g.xc?c=g.y:g.yd?d=g.z:g.zMath.abs(d.x-c[0].x)&&1E-10>Math.abs(d.y-c[0].y)&&c.splice(c.length-1,1);b&&c.push(c[0]);return c}; +THREE.Path.prototype.toShapes=function(a){var b,c,d,e,f=[],h=new THREE.Path;b=0;for(c=this.actions.length;b +g&&(g+=c.length);g%=c.length;0>h&&(h+=k.length);h%=k.length;e=0<=g-1?g-1:c.length-1;f=0<=h-1?h-1:k.length-1;q=[k[h],c[g],c[e]];q=THREE.FontUtils.Triangulate.area(q);n=[k[h],k[f],c[g]];n=THREE.FontUtils.Triangulate.area(n);l+p>q+n&&(g=t,h=m,0>g&&(g+=c.length),g%=c.length,0>h&&(h+=k.length),h%=k.length,e=0<=g-1?g-1:c.length-1,f=0<=h-1?h-1:k.length-1);l=c.slice(0,g);p=c.slice(g);t=k.slice(h);m=k.slice(0,h);f=[k[h],k[f],c[g]];s.push([k[h],c[g],c[e]]);s.push(f);c=l.concat(t).concat(m).concat(p)}return{shape:c, +isolatedPts:s,allpoints:d}},triangulateShape:function(a,b){var c=THREE.Shape.Utils.removeHoles(a,b),d=c.allpoints,e=c.isolatedPts,c=THREE.FontUtils.Triangulate(c.shape,!1),f,h,g,i,k={};f=0;for(h=d.length;fd;d++)i=g[d].x+":"+g[d].y,i=k[i],void 0!==i&&(g[d]=i)}f=0;for(h=e.length;fd;d++)i=g[d].x+":"+g[d].y,i=k[i],void 0!==i&&(g[d]=i)}return c.concat(e)}, isClockWise:function(a){return 0>THREE.FontUtils.Triangulate.area(a)},b2p0:function(a,b){var c=1-a;return c*c*b},b2p1:function(a,b){return 2*(1-a)*a*b},b2p2:function(a,b){return a*a*b},b2:function(a,b,c,d){return this.b2p0(a,b)+this.b2p1(a,c)+this.b2p2(a,d)},b3p0:function(a,b){var c=1-a;return c*c*c*b},b3p1:function(a,b){var c=1-a;return 3*c*c*a*b},b3p2:function(a,b){return 3*(1-a)*a*a*b},b3p3:function(a,b){return a*a*a*b},b3:function(a,b,c,d,e){return this.b3p0(a,b)+this.b3p1(a,c)+this.b3p2(a,d)+ -this.b3p3(a,e)}};THREE.TextPath=function(a,b){THREE.Path.call(this);this.parameters=b||{};this.set(a)};THREE.TextPath.prototype.set=function(a,b){b=b||this.parameters;this.text=a;var c=void 0!==b.curveSegments?b.curveSegments:4,d=void 0!==b.font?b.font:"helvetiker",e=void 0!==b.weight?b.weight:"normal",f=void 0!==b.style?b.style:"normal";THREE.FontUtils.size=void 0!==b.size?b.size:100;THREE.FontUtils.divisions=c;THREE.FontUtils.face=d;THREE.FontUtils.weight=e;THREE.FontUtils.style=f}; -THREE.TextPath.prototype.toShapes=function(){for(var a=THREE.FontUtils.drawText(this.text).paths,b=[],c=0,d=a.length;ca.hierarchy[c].keys[d].time)a.hierarchy[c].keys[d].time= -0;if(void 0!==a.hierarchy[c].keys[d].rot&&!(a.hierarchy[c].keys[d].rot instanceof THREE.Quaternion)){var h=a.hierarchy[c].keys[d].rot;a.hierarchy[c].keys[d].rot=new THREE.Quaternion(h[0],h[1],h[2],h[3])}}if(a.hierarchy[c].keys.length&&void 0!==a.hierarchy[c].keys[0].morphTargets){h={};for(d=0;dm;m++){c=b[m];g=i.prevKey[c];h=i.nextKey[c];if(h.time<=q){if(nd||1d?0:1;if("pos"===c)if(c=a.position,this.interpolationType===THREE.AnimationHandler.LINEAR)c.x=e[0]+(f[0]-e[0])*d,c.y=e[1]+(f[1]-e[1])*d,c.z=e[2]+(f[2]-e[2])*d;else{if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)if(this.points[0]= -this.getPrevKeyWith("pos",o,g.index-1).pos,this.points[1]=e,this.points[2]=f,this.points[3]=this.getNextKeyWith("pos",o,h.index+1).pos,d=0.33*d+0.33,e=this.interpolateCatmullRom(this.points,d),c.x=e[0],c.y=e[1],c.z=e[2],this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)d=this.interpolateCatmullRom(this.points,1.01*d),this.target.set(d[0],d[1],d[2]),this.target.subSelf(c),this.target.y=0,this.target.normalize(),d=Math.atan2(this.target.x,this.target.z),a.rotation.set(0,d,0)}else if("rot"=== -c)THREE.Quaternion.slerp(e,f,a.quaternion,d);else if("scl"===c)c=a.scale,c.x=e[0]+(f[0]-e[0])*d,c.y=e[1]+(f[1]-e[1])*d,c.z=e[2]+(f[2]-e[2])*d}}if(this.JITCompile&&void 0===k[0][l]){this.hierarchy[0].updateMatrixWorld(!0);for(o=0;oa.length-2?f:f+1;c[3]=f>a.length-3?f:f+2;f=a[c[0]];h=a[c[1]];i=a[c[2]];l=a[c[3]];c=e*e;g=e*c;d[0]=this.interpolate(f[0],h[0],i[0],l[0],e,c,g);d[1]=this.interpolate(f[1],h[1],i[1],l[1],e,c,g);d[2]=this.interpolate(f[2],h[2],i[2],l[2],e,c,g);return d}; -THREE.Animation.prototype.interpolate=function(a,b,c,d,e,f,g){a=0.5*(c-a);d=0.5*(d-b);return(2*(b-c)+a+d)*g+(-3*(b-c)-2*a-d)*f+a*e+b};THREE.Animation.prototype.getNextKeyWith=function(a,b,c){for(var d=this.data.hierarchy[b].keys,c=this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD?cd.length-2?d.length-1:a+1;c[3]=a>d.length-3?d.length-1:a+2;b.x=THREE.Curve.Utils.interpolate(d[c[0]].x,d[c[1]].x,d[c[2]].x,d[c[3]].x,e);b.y=THREE.Curve.Utils.interpolate(d[c[0]].y,d[c[1]].y,d[c[2]].y,d[c[3]].y,e);return b};THREE.EllipseCurve=function(a,b,c,d,e,f,h){this.aX=a;this.aY=b;this.xRadius=c;this.yRadius=d;this.aStartAngle=e;this.aEndAngle=f;this.aClockwise=h};THREE.EllipseCurve.prototype=Object.create(THREE.Curve.prototype); +THREE.EllipseCurve.prototype.getPoint=function(a){var b;b=this.aEndAngle-this.aStartAngle;0>b&&(b+=2*Math.PI);b>2*Math.PI&&(b-=2*Math.PI);b=!0===this.aClockwise?this.aEndAngle+(1-a)*(2*Math.PI-b):this.aStartAngle+a*b;a=this.aX+this.xRadius*Math.cos(b);b=this.aY+this.yRadius*Math.sin(b);return new THREE.Vector2(a,b)};THREE.ArcCurve=function(a,b,c,d,e,f){THREE.EllipseCurve.call(this,a,b,c,c,d,e,f)};THREE.ArcCurve.prototype=Object.create(THREE.EllipseCurve.prototype);THREE.LineCurve3=THREE.Curve.create(function(a,b){this.v1=a;this.v2=b},function(a){var b=new THREE.Vector3;b.subVectors(this.v2,this.v1);b.multiplyScalar(a);b.add(this.v1);return b});THREE.QuadraticBezierCurve3=THREE.Curve.create(function(a,b,c){this.v0=a;this.v1=b;this.v2=c},function(a){var b,c;b=THREE.Shape.Utils.b2(a,this.v0.x,this.v1.x,this.v2.x);c=THREE.Shape.Utils.b2(a,this.v0.y,this.v1.y,this.v2.y);a=THREE.Shape.Utils.b2(a,this.v0.z,this.v1.z,this.v2.z);return new THREE.Vector3(b,c,a)});THREE.CubicBezierCurve3=THREE.Curve.create(function(a,b,c,d){this.v0=a;this.v1=b;this.v2=c;this.v3=d},function(a){var b,c;b=THREE.Shape.Utils.b3(a,this.v0.x,this.v1.x,this.v2.x,this.v3.x);c=THREE.Shape.Utils.b3(a,this.v0.y,this.v1.y,this.v2.y,this.v3.y);a=THREE.Shape.Utils.b3(a,this.v0.z,this.v1.z,this.v2.z,this.v3.z);return new THREE.Vector3(b,c,a)});THREE.SplineCurve3=THREE.Curve.create(function(a){this.points=void 0==a?[]:a},function(a){var b=new THREE.Vector3,c=[],d=this.points,e,a=(d.length-1)*a;e=Math.floor(a);a-=e;c[0]=0==e?e:e-1;c[1]=e;c[2]=e>d.length-2?d.length-1:e+1;c[3]=e>d.length-3?d.length-1:e+2;e=d[c[0]];var f=d[c[1]],h=d[c[2]],c=d[c[3]];b.x=THREE.Curve.Utils.interpolate(e.x,f.x,h.x,c.x,a);b.y=THREE.Curve.Utils.interpolate(e.y,f.y,h.y,c.y,a);b.z=THREE.Curve.Utils.interpolate(e.z,f.z,h.z,c.z,a);return b});THREE.ClosedSplineCurve3=THREE.Curve.create(function(a){this.points=void 0==a?[]:a},function(a){var b=new THREE.Vector3,c=[],d=this.points,e;e=(d.length-0)*a;a=Math.floor(e);e-=a;a+=0a.hierarchy[c].keys[d].time&& +(a.hierarchy[c].keys[d].time=0),void 0!==a.hierarchy[c].keys[d].rot&&!(a.hierarchy[c].keys[d].rot instanceof THREE.Quaternion)){var g=a.hierarchy[c].keys[d].rot;a.hierarchy[c].keys[d].rot=new THREE.Quaternion(g[0],g[1],g[2],g[3])}if(a.hierarchy[c].keys.length&&void 0!==a.hierarchy[c].keys[0].morphTargets){g={};for(d=0;dt;t++){c=b[t];h=i.prevKey[c];g=i.nextKey[c];if(g.time<=m){if(kd||1d?0:1;if("pos"===c)if(c=a.position,this.interpolationType===THREE.AnimationHandler.LINEAR)c.x=e[0]+(f[0]-e[0])*d,c.y=e[1]+(f[1]-e[1])*d,c.z=e[2]+ +(f[2]-e[2])*d;else{if(this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD)this.points[0]=this.getPrevKeyWith("pos",l,h.index-1).pos,this.points[1]=e,this.points[2]=f,this.points[3]=this.getNextKeyWith("pos",l,g.index+1).pos,d=0.33*d+0.33,e=this.interpolateCatmullRom(this.points,d),c.x=e[0],c.y=e[1],c.z=e[2],this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD&&(d=this.interpolateCatmullRom(this.points,1.01*d), +this.target.set(d[0],d[1],d[2]),this.target.sub(c),this.target.y=0,this.target.normalize(),d=Math.atan2(this.target.x,this.target.z),a.rotation.set(0,d,0))}else"rot"===c?THREE.Quaternion.slerp(e,f,a.quaternion,d):"scl"===c&&(c=a.scale,c.x=e[0]+(f[0]-e[0])*d,c.y=e[1]+(f[1]-e[1])*d,c.z=e[2]+(f[2]-e[2])*d)}}}}; +THREE.Animation.prototype.interpolateCatmullRom=function(a,b){var c=[],d=[],e,f,h,g,i,k;e=(a.length-1)*b;f=Math.floor(e);e-=f;c[0]=0===f?f:f-1;c[1]=f;c[2]=f>a.length-2?f:f+1;c[3]=f>a.length-3?f:f+2;f=a[c[0]];g=a[c[1]];i=a[c[2]];k=a[c[3]];c=e*e;h=e*c;d[0]=this.interpolate(f[0],g[0],i[0],k[0],e,c,h);d[1]=this.interpolate(f[1],g[1],i[1],k[1],e,c,h);d[2]=this.interpolate(f[2],g[2],i[2],k[2],e,c,h);return d}; +THREE.Animation.prototype.interpolate=function(a,b,c,d,e,f,h){a=0.5*(c-a);d=0.5*(d-b);return(2*(b-c)+a+d)*h+(-3*(b-c)-2*a-d)*f+a*e+b};THREE.Animation.prototype.getNextKeyWith=function(a,b,c){for(var d=this.data.hierarchy[b].keys,c=this.interpolationType===THREE.AnimationHandler.CATMULLROM||this.interpolationType===THREE.AnimationHandler.CATMULLROM_FORWARD?c(a*=2)?0.5*a*a:-0.5*(--a*(a-2)-1)}function d(a,b){return function(){b.apply(a,arguments)}}function e(a,b,c,d){var e={name:c,fps:0.6,length:d,hierarchy:[]},f,g=b.getControlPointsArray(),h=b.getLength(),r=g.length,s=0;f=r-1;b={parent:-1,keys:[]};b.keys[0]={time:0,pos:g[0],rot:[0,0,0,1],scl:[1,1,1]};b.keys[f]={time:d,pos:g[f],rot:[0,0,0,1],scl:[1,1,1]};for(f=1;fi)?1:i));this.object.translateX(b*l);this.object.translateY(b*k);g&&(this.roll+=this.rollSpeed*a*h);if(this.forward.y>this.constrainVertical[1])this.forward.y=this.constrainVertical[1],this.forward.normalize();else if(this.forward.yc.maxDistance*c.maxDistance&&c.object.position.setLength(c.maxDistance),f.lengthSq()o;o++)this.materials.push(g)}o=0;r=1;p=2;s= -3;m=4;t=5}else this.materials=[];this.sides={px:!0,nx:!0,py:!0,ny:!0,pz:!0,nz:!0};if(void 0!=h)for(var u in h)void 0!==this.sides[u]&&(this.sides[u]=h[u]);this.sides.px&&i("z","y",-1,-1,c,b,k,o);this.sides.nx&&i("z","y",1,-1,c,b,-k,r);this.sides.py&&i("x","z",1,1,a,c,n,p);this.sides.ny&&i("x","z",1,-1,a,c,-n,s);this.sides.pz&&i("x","y",1,-1,a,b,q,m);this.sides.nz&&i("x","y",-1,-1,a,b,-q,t);this.computeCentroids();this.mergeVertices()};THREE.CubeGeometry.prototype=new THREE.Geometry; -THREE.CubeGeometry.prototype.constructor=THREE.CubeGeometry; -THREE.CylinderGeometry=function(a,b,c,d,e,f){THREE.Geometry.call(this);var a=void 0!==a?a:20,b=void 0!==b?b:20,c=void 0!==c?c:100,g=c/2,d=d||8,e=e||1,h,i,l=[],k=[];for(i=0;i<=e;i++){var n=[],q=[],o=i/e,p=o*(b-a)+a;for(h=0;h<=d;h++){var m=h/d,r=p*Math.sin(2*m*Math.PI),s=-o*c+g,t=p*Math.cos(2*m*Math.PI);this.vertices.push(new THREE.Vertex(new THREE.Vector3(r,s,t)));n.push(this.vertices.length-1);q.push(new THREE.UV(m,o))}l.push(n);k.push(q)}for(i=0;ig?(b=Math.atan2(b.y-a.y,b.x-a.x),a=Math.atan2(c.y-a.y,c.x-a.x),b>a&&(a+=2*Math.PI),c=(b+a)/2,a=-Math.cos(c),c=-Math.sin(c),new THREE.Vector2(a,c)):d.multiplyScalar(g).addSelf(h).subSelf(a).clone()}function e(a){for(j=a.length;0<=--j;){y=j;E=j-1;0>E&&(E=a.length-1);for(var b= -0,c=o+2*k,b=0;bh?(h=new THREE.Face3(a.index,b.index,c.index,[a.position,b.position,c.position]),h.centroid.addSelf(a.position).addSelf(b.position).addSelf(c.position).divideScalar(3),h.normal=h.centroid.clone().normalize(), -g.faces.push(h),h=Math.atan2(h.centroid.z,-h.centroid.x),g.faceVertexUvs[0].push([f(a.uv,a.position,h),f(b.uv,b.position,h),f(c.uv,c.position,h)])):(h-=1,d(a,e(a,b),e(a,c),h),d(e(a,b),b,e(b,c),h),d(e(a,c),e(b,c),c,h),d(e(a,b),e(b,c),e(a,c),h))}function e(a,b){h[a.index]||(h[a.index]=[]);h[b.index]||(h[b.index]=[]);var d=h[a.index][b.index];void 0===d&&(h[a.index][b.index]=h[b.index][a.index]=d=c((new THREE.Vector3).add(a.position,b.position).divideScalar(2)));return d}function f(a,b,c){0>c&&1===a.u&& -(a=new THREE.UV(a.u-1,a.v));0===b.x&&0===b.z&&(a=new THREE.UV(c/2/Math.PI+0.5,a.v));return a}THREE.Geometry.call(this);var b=b||0,g=this;c(new THREE.Vector3(1,0,0));c(new THREE.Vector3(-1,0,0));c(new THREE.Vector3(0,1,0));c(new THREE.Vector3(0,-1,0));c(new THREE.Vector3(0,0,1));c(new THREE.Vector3(0,0,-1));var h=[],i=this.vertices;d(i[0],i[2],i[4],b);d(i[0],i[4],i[3],b);d(i[0],i[3],i[5],b);d(i[0],i[5],i[2],b);d(i[1],i[2],i[5],b);d(i[1],i[5],i[3],b);d(i[1],i[3],i[4],b);d(i[1],i[4],i[2],b);this.boundingSphere= -{radius:a}};THREE.OctahedronGeometry.prototype=new THREE.Geometry;THREE.OctahedronGeometry.prototype.constructor=THREE.OctahedronGeometry; -THREE.PlaneGeometry=function(a,b,c,d){THREE.Geometry.call(this);for(var e=a/2,f=b/2,c=c||1,d=d||1,g=c+1,h=d+1,i=a/c,l=b/d,k=new THREE.Vector3(0,0,1),a=0;ae)return null;var f=[],g=[],h=[],i,l,k;if(0=n--){console.log("Warning, unable to triangulate polygon!");break}i=l;e<=i&&(i=0);l=i+1;e<=l&&(l=0);k=l+1;e<=k&&(k=0);var q;a:{q=a;var o=i,p=l,m=k,r=e,s=g,t=void 0,u=void 0,v=void 0,x=void 0,B=void 0, -D=void 0,C=void 0,A=void 0,H=void 0,u=q[s[o]].x,v=q[s[o]].y,x=q[s[p]].x,B=q[s[p]].y,D=q[s[m]].x,C=q[s[m]].y;if(1.0E-10>(x-u)*(C-v)-(B-v)*(D-u))q=!1;else{for(t=0;to;o++){n=i[o];k=new THREE.Color;k.setRGB(0,0,0);for(var p=0;pu.length&&(n[o]=!0)}for(o in p)if(u=p[o],s=u[0],u=u[1],x=o.split("_"),B=x[0],x=x[1],r=new THREE.Vector3,n[o]?(r.addSelf(h[B].position),r.addSelf(h[x].position),r.multiplyScalar(0.5)):(r.addSelf(l[s]),r.addSelf(l[u]),r.addSelf(h[B].position),r.addSelf(h[x].position),r.multiplyScalar(0.25)), -k[o]=t+d.length+v,i.push(new THREE.Vertex(r)),v++,g.supportUVs&&0!=q.length)u=new THREE.UV,u.u=q[B].u+q[x].u,u.v=q[B].v+q[x].v,u.u/=2,u.v/=2,q.push(u);var I,N;x=["123","12","2","23"];r=["123","23","3","31"];var A=["123","31","1","12"],H=["1234","12","2","23"],$=["1234","23","3","34"],K=["1234","34","4","41"],Q=["1234","41","1","12"];for(o=0,p=l.length;oa.length?"":a.join("/")+"/"},initMaterials:function(a,b,c){a.materials=[];for(var d=0;da.opacity)l.transparent=a.transparent;if(void 0!==a.depthTest)l.depthTest=a.depthTest;if(void 0!==a.vertexColors)if("face"==a.vertexColors)l.vertexColors=THREE.FaceColors;else if(a.vertexColors)l.vertexColors= -THREE.VertexColors;if(a.colorDiffuse)l.color=g(a.colorDiffuse);else if(a.DbgColor)l.color=a.DbgColor;if(a.colorSpecular)l.specular=g(a.colorSpecular);if(a.colorAmbient)l.ambient=g(a.colorAmbient);if(a.transparency)l.opacity=a.transparency;if(a.specularCoef)l.shininess=a.specularCoef;a.mapDiffuse&&b&&f(l,"map",a.mapDiffuse,a.mapDiffuseRepeat,a.mapDiffuseOffset,a.mapDiffuseWrap);a.mapLight&&b&&f(l,"lightMap",a.mapLight,a.mapLightRepeat,a.mapLightOffset,a.mapLightWrap);a.mapNormal&&b&&f(l,"normalMap", -a.mapNormal,a.mapNormalRepeat,a.mapNormalOffset,a.mapNormalWrap);a.mapSpecular&&b&&f(l,"specularMap",a.mapSpecular,a.mapSpecularRepeat,a.mapSpecularOffset,a.mapSpecularWrap);if(a.mapNormal){var i=THREE.ShaderUtils.lib.normal,k=THREE.UniformsUtils.clone(i.uniforms);k.tNormal.texture=l.normalMap;if(a.mapNormalFactor)k.uNormalScale.value=a.mapNormalFactor;if(l.map)k.tDiffuse.texture=l.map,k.enableDiffuse.value=!0;if(l.specularMap)k.tSpecular.texture=l.specularMap,k.enableSpecular.value=!0;if(l.lightMap)k.tAO.texture= -l.lightMap,k.enableAO.value=!0;k.uDiffuseColor.value.setHex(l.color);k.uSpecularColor.value.setHex(l.specular);k.uAmbientColor.value.setHex(l.ambient);k.uShininess.value=l.shininess;if(void 0!==l.opacity)k.uOpacity.value=l.opacity;l=new THREE.ShaderMaterial({fragmentShader:i.fragmentShader,vertexShader:i.vertexShader,uniforms:k,lights:!0,fog:!0})}else l=new THREE[i](l);if(void 0!==a.DbgName)l.name=a.DbgName;return l}};THREE.BinaryLoader=function(a){THREE.Loader.call(this,a)}; -THREE.BinaryLoader.prototype=new THREE.Loader;THREE.BinaryLoader.prototype.constructor=THREE.BinaryLoader;THREE.BinaryLoader.prototype.supr=THREE.Loader.prototype; -THREE.BinaryLoader.prototype.load=function(a,b,c,d){if(a instanceof Object)console.warn("DEPRECATED: BinaryLoader( parameters ) is now BinaryLoader( url, callback, texturePath, binaryPath )."),d=a,a=d.model,b=d.callback,c=d.texture_path,d=d.bin_path;var c=c?c:this.extractUrlbase(a),d=d?d:this.extractUrlbase(a),e=this.showProgress?THREE.Loader.prototype.updateProgress:null;this.onLoadStart();this.loadAjaxJSON(this,a,b,c,d,e)}; -THREE.BinaryLoader.prototype.loadAjaxJSON=function(a,b,c,d,e,f){var g=new XMLHttpRequest;g.onreadystatechange=function(){if(4==g.readyState)if(200==g.status||0==g.status)try{var h=JSON.parse(g.responseText);void 0===h.metadata||void 0===h.metadata.formatVersion||3!==h.metadata.formatVersion?console.error("Deprecated file format."):a.loadAjaxBuffers(h,c,e,d,f)}catch(i){console.error(i),console.warn("DEPRECATED: ["+b+"] seems to be using old model format")}else console.error("Couldn't load ["+b+"] ["+ -g.status+"]")};g.open("GET",b,!0);g.overrideMimeType&&g.overrideMimeType("text/plain; charset=x-user-defined");g.setRequestHeader("Content-Type","text/plain");g.send(null)}; -THREE.BinaryLoader.prototype.loadAjaxBuffers=function(a,b,c,d,e){var f=new XMLHttpRequest,g=c+"/"+a.buffers,h=0;f.onreadystatechange=function(){4==f.readyState?200==f.status||0==f.status?THREE.BinaryLoader.prototype.createBinModel(f.response,b,d,a.materials):console.error("Couldn't load ["+g+"] ["+f.status+"]"):3==f.readyState?e&&(0==h&&(h=f.getResponseHeader("Content-Length")),e({total:h,loaded:f.responseText.length})):2==f.readyState&&(h=f.getResponseHeader("Content-Length"))};f.open("GET",g,!0); -f.responseType="arraybuffer";f.send(null)}; -THREE.BinaryLoader.prototype.createBinModel=function(a,b,c,d){var e=function(b){var c,e,i,l,k,n,q,o,p,m,r,s,t,u,v,x;function B(a){return a%4?4-a%4:0}function D(a,b){return(new Uint8Array(a,b,1))[0]}function C(a,b){return(new Uint32Array(a,b,1))[0]}function A(b,c){var d,e,f,g,h,i,l,k,m=new Uint32Array(a,c,3*b);for(d=0;da.length?"":a.join("/")+"/");if((a=V.evaluate("//dae:asset",V,W,XPathResult.ORDERED_NODE_ITERATOR_TYPE,null).iterateNext())&&a.childNodes)for(e=0;ep)break}if(!s){s=new j(p);t=-1;u=0;for(v=d.length;u=p&&(t=u);p=t;d.splice(-1==p?d.length:p,0,s)}s.addTarget(f,l,g,r)}}else console.log('Could not find transform "'+b.sid+'" in node '+ -this.id)}for(c=0;cthis.set)this.set=0;return this};D.prototype.parse=function(a){this.id=a.getAttribute("id");for(var b=0;bthis.transparency,c;for(c in this)switch(c){case "ambient":case "emission":case "diffuse":case "specular":var d=this[c];if(d instanceof A)if(d.isTexture()){if(this.effect.sampler&&this.effect.surface&&this.effect.sampler.source==this.effect.surface.sid){var e=Qa[this.effect.surface.init_from];if(e)e=THREE.ImageUtils.loadTexture(ib+e.init_from),e.wrapS=d.texOpts.wrapU?THREE.RepeatWrapping:THREE.ClampToEdgeWrapping, -e.wrapT=d.texOpts.wrapV?THREE.RepeatWrapping:THREE.ClampToEdgeWrapping,e.offset.x=d.texOpts.offsetU,e.offset.y=d.texOpts.offsetV,e.repeat.x=d.texOpts.repeatU,e.repeat.y=d.texOpts.repeatV,a.map=e}}else"diffuse"==c?a.color=d.color.getHex():b||(a[c]=d.color.getHex());break;case "shininess":case "reflectivity":a[c]=this[c];break;case "transparency":if(b)a.transparent=!0,a.opacity=this[c],b=!0}a.shading=Xa;return this.material=new THREE.MeshLambertMaterial(a)};I.prototype.parse=function(a){for(var b=0;b< -a.childNodes.length;b++){var c=a.childNodes[b];if(1==c.nodeType)switch(c.nodeName){case "init_from":this.init_from=c.textContent;break;case "format":this.format=c.textContent;break;default:console.log("unhandled Surface prop: "+c.nodeName)}}return this};N.prototype.parse=function(a){for(var b=0;bf||1f?0:1;if(h.length)for(var e=[],i=0;ir.parameters.opacity)r.parameters.transparent=!0;if(r.parameters.normalMap){k=THREE.ShaderUtils.lib.normal;a=THREE.UniformsUtils.clone(k.uniforms);m=r.parameters.color;N=r.parameters.specular;c=r.parameters.ambient;Q=r.parameters.shininess;a.tNormal.texture=y.textures[r.parameters.normalMap];if(r.parameters.normalMapFactor)a.uNormalScale.value= -r.parameters.normalMapFactor;if(r.parameters.map)a.tDiffuse.texture=r.parameters.map,a.enableDiffuse.value=!0;if(r.parameters.lightMap)a.tAO.texture=r.parameters.lightMap,a.enableAO.value=!0;if(r.parameters.specularMap)a.tSpecular.texture=y.textures[r.parameters.specularMap],a.enableSpecular.value=!0;a.uDiffuseColor.value.setHex(m);a.uSpecularColor.value.setHex(N);a.uAmbientColor.value.setHex(c);a.uShininess.value=Q;if(r.parameters.opacity)a.uOpacity.value=r.parameters.opacity;r=new THREE.ShaderMaterial({fragmentShader:k.fragmentShader, -vertexShader:k.vertexShader,uniforms:a,lights:!0,fog:!0})}else r=new THREE[r.type](r.parameters);y.materials[n]=r}e();i.callbackSync(y);h()};THREE.UTF8Loader=function(){};THREE.UTF8Loader.prototype=new THREE.UTF8Loader;THREE.UTF8Loader.prototype.constructor=THREE.UTF8Loader; -THREE.UTF8Loader.prototype.load=function(a,b,c){if(a instanceof Object)console.warn("DEPRECATED: UTF8Loader( parameters ) is now UTF8Loader( url, callback, metaData )."),c=a,a=c.model,b=c.callback,c={scale:c.scale,offsetX:c.offsetX,offsetY:c.offsetY,offsetZ:c.offsetZ};var d=new XMLHttpRequest,e=void 0!==c.scale?c.scale:1,f=void 0!==c.offsetX?c.offsetX:0,g=void 0!==c.offsetY?c.offsetY:0,h=void 0!==c.offsetZ?c.offsetZ:0;d.onreadystatechange=function(){4==d.readyState?200==d.status||0==d.status?THREE.UTF8Loader.prototype.createModel(d.responseText, -b,e,f,g,h):alert("Couldn't load ["+a+"] ["+d.status+"]"):3!=d.readyState&&2==d.readyState&&d.getResponseHeader("Content-Length")};d.open("GET",a,!0);d.send(null)};THREE.UTF8Loader.prototype.decompressMesh=function(a){var b=a.charCodeAt(0);57344<=b&&(b-=2048);b++;for(var c=new Float32Array(8*b),d=1,e=0;8>e;e++){for(var f=0,g=0;g>1^-(h&1));c[8*g+e]=f}d+=b}b=a.length-d;f=new Uint16Array(b);for(e=g=0;e=this.maxCount-3&&h(this)};this.begin=function(){this.count=0; -this.hasNormal=this.hasPos=!1};this.end=function(a){if(0!==this.count){for(var b=3*this.count;bn&&(n=1);i=Math.floor(i+h);i>this.size-1&&(i=this.size-1);var q=Math.floor(l-h);1>q&&(q=1);l=Math.floor(l+h);l>this.size-1&&(l=this.size-1);var o=Math.floor(k-h);1>o&&(o=1);h=Math.floor(k+h);h>this.size-1&&(h=this.size- -1);for(var p,m,r,s,t,u,v,k=n;kl&&(o=l);for(e=0;ek&&(p=k);for(f=0;fk&&(p=k);for(g=0;g=b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS)?(l=!1,k=a(THREE.ShaderFlares.lensFlare)):(l=!0,k=a(THREE.ShaderFlares.lensFlareVertexTexture));n={};q={};n.vertex=b.getAttribLocation(k,"position");n.uv=b.getAttribLocation(k,"uv");q.renderType=b.getUniformLocation(k,"renderType");q.map=b.getUniformLocation(k,"map");q.occlusionMap=b.getUniformLocation(k,"occlusionMap");q.opacity=b.getUniformLocation(k,"opacity");q.color=b.getUniformLocation(k, -"color");q.scale=b.getUniformLocation(k,"scale");q.rotation=b.getUniformLocation(k,"rotation");q.screenPosition=b.getUniformLocation(k,"screenPosition");o=!1};this.render=function(a,d,e,s){var a=a.__webglFlares,t=a.length;if(t){var u=new THREE.Vector3,v=s/e,x=0.5*e,B=0.5*s,D=16/s,C=new THREE.Vector2(D*v,D),A=new THREE.Vector3(1,1,0),H=new THREE.Vector2(1,1),I=q,D=n;b.useProgram(k);o||(b.enableVertexAttribArray(n.vertex),b.enableVertexAttribArray(n.uv),o=!0);b.uniform1i(I.occlusionMap,0);b.uniform1i(I.map, -1);b.bindBuffer(b.ARRAY_BUFFER,f);b.vertexAttribPointer(D.vertex,2,b.FLOAT,!1,16,0);b.vertexAttribPointer(D.uv,2,b.FLOAT,!1,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g);b.disable(b.CULL_FACE);b.depthMask(!1);var N,$,K,Q,L;for(N=0;N=h?b.interpolate(c,h):b.interpolate(c,c.time)}this.data.hierarchy[a].node.updateMatrix();d.matrixWorldNeedsUpdate=!0}}if(this.JITCompile&&void 0===f[0][e]){this.hierarchy[0].updateMatrixWorld(!0);for(a=0;ag?(b=Math.atan2(b.y-a.y,b.x-a.x),a=Math.atan2(c.y-a.y,c.x-a.x),b>a&&(a+=2*Math.PI),c=(b+a)/2,a=-Math.cos(c),c=-Math.sin(c),new THREE.Vector2(a,c)):d.multiplyScalar(g).add(h).sub(a).clone()}function e(c,d){var e,f;for(C=c.length;0<=--C;){e=C;f=C-1;0>f&&(f=c.length-1);for(var g=0,h=t+2*m, +g=0;gMath.abs(c-i)?[new THREE.Vector2(b,1-e),new THREE.Vector2(d,1-f),new THREE.Vector2(k,1-h),new THREE.Vector2(l,1-a)]:[new THREE.Vector2(c,1-e),new THREE.Vector2(i,1-f),new THREE.Vector2(m,1-h),new THREE.Vector2(p,1-a)]}};THREE.ExtrudeGeometry.__v1=new THREE.Vector2;THREE.ExtrudeGeometry.__v2=new THREE.Vector2;THREE.ExtrudeGeometry.__v3=new THREE.Vector2;THREE.ExtrudeGeometry.__v4=new THREE.Vector2; +THREE.ExtrudeGeometry.__v5=new THREE.Vector2;THREE.ExtrudeGeometry.__v6=new THREE.Vector2;THREE.ShapeGeometry=function(a,b){THREE.Geometry.call(this);!1===a instanceof Array&&(a=[a]);this.shapebb=a[a.length-1].getBoundingBox();this.addShapeList(a,b);this.computeCentroids();this.computeFaceNormals()};THREE.ShapeGeometry.prototype=Object.create(THREE.Geometry.prototype);THREE.ShapeGeometry.prototype.addShapeList=function(a,b){for(var c=0,d=a.length;cc&&1===a.x&&(a=new THREE.Vector2(a.x-1,a.y));0===b.x&&0===b.z&&(a=new THREE.Vector2(c/2/Math.PI+0.5,a.y));return a.clone()}THREE.Geometry.call(this);for(var c=c||1,d=d||0,g=this,i=0,k=a.length;ip&&(0.2>a&&(d[0].x+=1),0.2>b&&(d[1].x+=1),0.2>m&&(d[2].x+=1));i=0;for(k=this.vertices.length;ic.y?this.quaternion.set(1,0,0,0):(a.set(c.z,0,-c.x).normalize(),b=Math.acos(c.y),this.quaternion.setFromAxisAngle(a,b))}}();THREE.ArrowHelper.prototype.setLength=function(a){this.scale.set(a,a,a)}; +THREE.ArrowHelper.prototype.setColor=function(a){this.line.material.color.setHex(a);this.cone.material.color.setHex(a)};THREE.BoxHelper=function(a){var b=[new THREE.Vector3(1,1,1),new THREE.Vector3(-1,1,1),new THREE.Vector3(-1,-1,1),new THREE.Vector3(1,-1,1),new THREE.Vector3(1,1,-1),new THREE.Vector3(-1,1,-1),new THREE.Vector3(-1,-1,-1),new THREE.Vector3(1,-1,-1)];this.vertices=b;var c=new THREE.Geometry;c.vertices.push(b[0],b[1],b[1],b[2],b[2],b[3],b[3],b[0],b[4],b[5],b[5],b[6],b[6],b[7],b[7],b[4],b[0],b[4],b[1],b[5],b[2],b[6],b[3],b[7]);THREE.Line.call(this,c,new THREE.LineBasicMaterial({color:16776960}),THREE.LinePieces); +void 0!==a&&this.update(a)};THREE.BoxHelper.prototype=Object.create(THREE.Line.prototype); +THREE.BoxHelper.prototype.update=function(a){var b=a.geometry;null===b.boundingBox&&b.computeBoundingBox();var c=b.boundingBox.min,b=b.boundingBox.max,d=this.vertices;d[0].set(b.x,b.y,b.z);d[1].set(c.x,b.y,b.z);d[2].set(c.x,c.y,b.z);d[3].set(b.x,c.y,b.z);d[4].set(b.x,b.y,c.z);d[5].set(c.x,b.y,c.z);d[6].set(c.x,c.y,c.z);d[7].set(b.x,c.y,c.z);this.geometry.computeBoundingSphere();this.geometry.verticesNeedUpdate=!0;this.matrixAutoUpdate=!1;this.matrixWorld=a.matrixWorld};THREE.BoundingBoxHelper=function(a,b){var c=b||8947848;this.object=a;this.box=new THREE.Box3;THREE.Mesh.call(this,new THREE.CubeGeometry(1,1,1),new THREE.MeshBasicMaterial({color:c,wireframe:!0}))};THREE.BoundingBoxHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.BoundingBoxHelper.prototype.update=function(){this.box.setFromObject(this.object);this.box.size(this.scale);this.box.center(this.position)};THREE.CameraHelper=function(a){function b(a,b,d){c(a,d);c(b,d)}function c(a,b){d.vertices.push(new THREE.Vector3);d.colors.push(new THREE.Color(b));void 0===f[a]&&(f[a]=[]);f[a].push(d.vertices.length-1)}var d=new THREE.Geometry,e=new THREE.LineBasicMaterial({color:16777215,vertexColors:THREE.FaceColors}),f={};b("n1","n2",16755200);b("n2","n4",16755200);b("n4","n3",16755200);b("n3","n1",16755200);b("f1","f2",16755200);b("f2","f4",16755200);b("f4","f3",16755200);b("f3","f1",16755200);b("n1","f1",16755200); +b("n2","f2",16755200);b("n3","f3",16755200);b("n4","f4",16755200);b("p","n1",16711680);b("p","n2",16711680);b("p","n3",16711680);b("p","n4",16711680);b("u1","u2",43775);b("u2","u3",43775);b("u3","u1",43775);b("c","t",16777215);b("p","c",3355443);b("cn1","cn2",3355443);b("cn3","cn4",3355443);b("cf1","cf2",3355443);b("cf3","cf4",3355443);THREE.Line.call(this,d,e,THREE.LinePieces);this.camera=a;this.matrixWorld=a.matrixWorld;this.matrixAutoUpdate=!1;this.pointMap=f;this.update()}; +THREE.CameraHelper.prototype=Object.create(THREE.Line.prototype); +THREE.CameraHelper.prototype.update=function(){var a=new THREE.Vector3,b=new THREE.Camera,c=new THREE.Projector;return function(){function d(d,h,g,i){a.set(h,g,i);c.unprojectVector(a,b);d=e.pointMap[d];if(void 0!==d){h=0;for(g=d.length;hd;d++)c.faces[d].color=this.colors[4>d?0:1];d=new THREE.MeshBasicMaterial({vertexColors:THREE.FaceColors,wireframe:!0});this.lightSphere=new THREE.Mesh(c,d);this.add(this.lightSphere); +this.update()};THREE.HemisphereLightHelper.prototype=Object.create(THREE.Object3D.prototype);THREE.HemisphereLightHelper.prototype.dispose=function(){this.lightSphere.geometry.dispose();this.lightSphere.material.dispose()}; +THREE.HemisphereLightHelper.prototype.update=function(){var a=new THREE.Vector3;return function(){this.colors[0].copy(this.light.color).multiplyScalar(this.light.intensity);this.colors[1].copy(this.light.groundColor).multiplyScalar(this.light.intensity);this.lightSphere.lookAt(a.getPositionFromMatrix(this.light.matrixWorld).negate());this.lightSphere.geometry.colorsNeedUpdate=!0}}();THREE.PointLightHelper=function(a,b){this.light=a;this.light.updateMatrixWorld();var c=new THREE.SphereGeometry(b,4,2),d=new THREE.MeshBasicMaterial({wireframe:!0,fog:!1});d.color.copy(this.light.color).multiplyScalar(this.light.intensity);THREE.Mesh.call(this,c,d);this.matrixWorld=this.light.matrixWorld;this.matrixAutoUpdate=!1};THREE.PointLightHelper.prototype=Object.create(THREE.Mesh.prototype);THREE.PointLightHelper.prototype.dispose=function(){this.geometry.dispose();this.material.dispose()}; +THREE.PointLightHelper.prototype.update=function(){this.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)};THREE.SpotLightHelper=function(a){THREE.Object3D.call(this);this.light=a;this.light.updateMatrixWorld();this.matrixWorld=a.matrixWorld;this.matrixAutoUpdate=!1;a=new THREE.CylinderGeometry(0,1,1,8,1,!0);a.applyMatrix((new THREE.Matrix4).makeTranslation(0,-0.5,0));a.applyMatrix((new THREE.Matrix4).makeRotationX(-Math.PI/2));var b=new THREE.MeshBasicMaterial({wireframe:!0,fog:!1});this.cone=new THREE.Mesh(a,b);this.add(this.cone);this.update()};THREE.SpotLightHelper.prototype=Object.create(THREE.Object3D.prototype); +THREE.SpotLightHelper.prototype.dispose=function(){this.cone.geometry.dispose();this.cone.material.dispose()};THREE.SpotLightHelper.prototype.update=function(){var a=new THREE.Vector3,b=new THREE.Vector3;return function(){var c=this.light.distance?this.light.distance:1E4,d=c*Math.tan(this.light.angle);this.cone.scale.set(d,d,c);a.getPositionFromMatrix(this.light.matrixWorld);b.getPositionFromMatrix(this.light.target.matrixWorld);this.cone.lookAt(b.sub(a));this.cone.material.color.copy(this.light.color).multiplyScalar(this.light.intensity)}}();THREE.VertexNormalsHelper=function(a,b,c,d){this.object=a;this.size=b||1;for(var b=c||16711680,d=d||1,c=new THREE.Geometry,a=a.geometry.faces,e=0,f=a.length;el;l++){b[0]=m[e[l]];b[1]=m[e[(l+1)%3]];b.sort(d);var p=b.toString();void 0===c[p]&&(f.vertices.push(h[b[0]]),f.vertices.push(h[b[1]]),c[p]=!0)}THREE.Line.call(this,f,new THREE.LineBasicMaterial({color:16777215}),THREE.LinePieces);this.matrixAutoUpdate=!1;this.matrixWorld=a.matrixWorld}; +THREE.WireframeHelper.prototype=Object.create(THREE.Line.prototype);THREE.ImmediateRenderObject=function(){THREE.Object3D.call(this);this.render=function(){}};THREE.ImmediateRenderObject.prototype=Object.create(THREE.Object3D.prototype);THREE.LensFlare=function(a,b,c,d,e){THREE.Object3D.call(this);this.lensFlares=[];this.positionScreen=new THREE.Vector3;this.customUpdateCallback=void 0;void 0!==a&&this.add(a,b,c,d,e)};THREE.LensFlare.prototype=Object.create(THREE.Object3D.prototype); +THREE.LensFlare.prototype.add=function(a,b,c,d,e,f){void 0===b&&(b=-1);void 0===c&&(c=0);void 0===f&&(f=1);void 0===e&&(e=new THREE.Color(16777215));void 0===d&&(d=THREE.NormalBlending);c=Math.min(c,Math.max(0,c));this.lensFlares.push({texture:a,size:b,distance:c,x:0,y:0,z:0,scale:1,rotation:1,opacity:f,color:e,blending:d})}; +THREE.LensFlare.prototype.updateLensFlares=function(){var a,b=this.lensFlares.length,c,d=2*-this.positionScreen.x,e=2*-this.positionScreen.y;for(a=0;ag.end&&(g.end=f);c||(c=i)}}for(i in d)g=d[i],this.createAnimation(i,g.start,g.end,a);this.firstAnimation=c}; +THREE.MorphBlendMesh.prototype.setAnimationDirectionForward=function(a){if(a=this.animationsMap[a])a.direction=1,a.directionBackwards=!1};THREE.MorphBlendMesh.prototype.setAnimationDirectionBackward=function(a){if(a=this.animationsMap[a])a.direction=-1,a.directionBackwards=!0};THREE.MorphBlendMesh.prototype.setAnimationFPS=function(a,b){var c=this.animationsMap[a];c&&(c.fps=b,c.duration=(c.end-c.start)/c.fps)}; +THREE.MorphBlendMesh.prototype.setAnimationDuration=function(a,b){var c=this.animationsMap[a];c&&(c.duration=b,c.fps=(c.end-c.start)/c.duration)};THREE.MorphBlendMesh.prototype.setAnimationWeight=function(a,b){var c=this.animationsMap[a];c&&(c.weight=b)};THREE.MorphBlendMesh.prototype.setAnimationTime=function(a,b){var c=this.animationsMap[a];c&&(c.time=b)};THREE.MorphBlendMesh.prototype.getAnimationTime=function(a){var b=0;if(a=this.animationsMap[a])b=a.time;return b}; +THREE.MorphBlendMesh.prototype.getAnimationDuration=function(a){var b=-1;if(a=this.animationsMap[a])b=a.duration;return b};THREE.MorphBlendMesh.prototype.playAnimation=function(a){var b=this.animationsMap[a];b?(b.time=0,b.active=!0):console.warn("animation["+a+"] undefined")};THREE.MorphBlendMesh.prototype.stopAnimation=function(a){if(a=this.animationsMap[a])a.active=!1}; +THREE.MorphBlendMesh.prototype.update=function(a){for(var b=0,c=this.animationsList.length;bd.duration||0>d.time)d.direction*=-1,d.time>d.duration&&(d.time=d.duration,d.directionBackwards=!0),0>d.time&&(d.time=0,d.directionBackwards=!1)}else d.time%=d.duration,0>d.time&&(d.time+=d.duration);var f=d.startFrame+THREE.Math.clamp(Math.floor(d.time/e),0,d.length-1),h=d.weight; +f!==d.currentFrame&&(this.morphTargetInfluences[d.lastFrame]=0,this.morphTargetInfluences[d.currentFrame]=1*h,this.morphTargetInfluences[f]=0,d.lastFrame=d.currentFrame,d.currentFrame=f);e=d.time%e/e;d.directionBackwards&&(e=1-e);this.morphTargetInfluences[d.currentFrame]=e*h;this.morphTargetInfluences[d.lastFrame]=(1-e)*h}}};THREE.LensFlarePlugin=function(){function a(a,c){var d=b.createProgram(),e=b.createShader(b.FRAGMENT_SHADER),f=b.createShader(b.VERTEX_SHADER),g="precision "+c+" float;\n";b.shaderSource(e,g+a.fragmentShader);b.shaderSource(f,g+a.vertexShader);b.compileShader(e);b.compileShader(f);b.attachShader(d,e);b.attachShader(d,f);b.linkProgram(d);return d}var b,c,d,e,f,h,g,i,k,m,l,p,t;this.init=function(s){b=s.context;c=s;d=s.getPrecision();e=new Float32Array(16);f=new Uint16Array(6);s=0;e[s++]=-1;e[s++]=-1; +e[s++]=0;e[s++]=0;e[s++]=1;e[s++]=-1;e[s++]=1;e[s++]=0;e[s++]=1;e[s++]=1;e[s++]=1;e[s++]=1;e[s++]=-1;e[s++]=1;e[s++]=0;e[s++]=1;s=0;f[s++]=0;f[s++]=1;f[s++]=2;f[s++]=0;f[s++]=2;f[s++]=3;h=b.createBuffer();g=b.createBuffer();b.bindBuffer(b.ARRAY_BUFFER,h);b.bufferData(b.ARRAY_BUFFER,e,b.STATIC_DRAW);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g);b.bufferData(b.ELEMENT_ARRAY_BUFFER,f,b.STATIC_DRAW);i=b.createTexture();k=b.createTexture();b.bindTexture(b.TEXTURE_2D,i);b.texImage2D(b.TEXTURE_2D,0,b.RGB,16,16, +0,b.RGB,b.UNSIGNED_BYTE,null);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.NEAREST);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.NEAREST);b.bindTexture(b.TEXTURE_2D,k);b.texImage2D(b.TEXTURE_2D,0,b.RGBA,16,16,0,b.RGBA,b.UNSIGNED_BYTE,null);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_S,b.CLAMP_TO_EDGE);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_WRAP_T,b.CLAMP_TO_EDGE); +b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MAG_FILTER,b.NEAREST);b.texParameteri(b.TEXTURE_2D,b.TEXTURE_MIN_FILTER,b.NEAREST);0>=b.getParameter(b.MAX_VERTEX_TEXTURE_IMAGE_UNITS)?(m=!1,l=a(THREE.ShaderFlares.lensFlare,d)):(m=!0,l=a(THREE.ShaderFlares.lensFlareVertexTexture,d));p={};t={};p.vertex=b.getAttribLocation(l,"position");p.uv=b.getAttribLocation(l,"uv");t.renderType=b.getUniformLocation(l,"renderType");t.map=b.getUniformLocation(l,"map");t.occlusionMap=b.getUniformLocation(l,"occlusionMap");t.opacity= +b.getUniformLocation(l,"opacity");t.color=b.getUniformLocation(l,"color");t.scale=b.getUniformLocation(l,"scale");t.rotation=b.getUniformLocation(l,"rotation");t.screenPosition=b.getUniformLocation(l,"screenPosition")};this.render=function(a,d,e,f){var a=a.__webglFlares,r=a.length;if(r){var v=new THREE.Vector3,z=f/e,G=0.5*e,w=0.5*f,y=16/f,E=new THREE.Vector2(y*z,y),A=new THREE.Vector3(1,1,0),K=new THREE.Vector2(1,1),D=t,y=p;b.useProgram(l);b.enableVertexAttribArray(p.vertex);b.enableVertexAttribArray(p.uv); +b.uniform1i(D.occlusionMap,0);b.uniform1i(D.map,1);b.bindBuffer(b.ARRAY_BUFFER,h);b.vertexAttribPointer(y.vertex,2,b.FLOAT,!1,16,0);b.vertexAttribPointer(y.uv,2,b.FLOAT,!1,16,8);b.bindBuffer(b.ELEMENT_ARRAY_BUFFER,g);b.disable(b.CULL_FACE);b.depthMask(!1);var F,O,x,I,B;for(F=0;FE;E++)z[E]=new THREE.Vector3,r[E]=new THREE.Vector3;z=G.shadowCascadeNearZ[v];G=G.shadowCascadeFarZ[v];r[0].set(-1,-1,z);r[1].set(1,-1,z);r[2].set(-1, +1,z);r[3].set(1,1,z);r[4].set(-1,-1,G);r[5].set(1,-1,G);r[6].set(-1,1,G);r[7].set(1,1,G);y.originalCamera=p;r=new THREE.Gyroscope;r.position=q.shadowCascadeOffset;r.add(y);r.add(y.target);p.add(r);q.shadowCascadeArray[u]=y;console.log("Created virtualLight",y)}v=q;z=u;G=v.shadowCascadeArray[z];G.position.copy(v.position);G.target.position.copy(v.target.position);G.lookAt(G.target);G.shadowCameraVisible=v.shadowCameraVisible;G.shadowDarkness=v.shadowDarkness;G.shadowBias=v.shadowCascadeBias[z];r=v.shadowCascadeNearZ[z]; +v=v.shadowCascadeFarZ[z];G=G.pointsFrustum;G[0].z=r;G[1].z=r;G[2].z=r;G[3].z=r;G[4].z=v;G[5].z=v;G[6].z=v;G[7].z=v;w[n]=y;n++}else w[n]=q,n++;t=0;for(s=w.length;tv;v++)z=G[v],z.copy(r[v]),THREE.ShadowMapPlugin.__projector.unprojectVector(z,u),z.applyMatrix4(n.matrixWorldInverse),z.xk.x&&(k.x=z.x),z.yk.y&&(k.y=z.y),z.zk.z&& +(k.z=z.z);n.left=i.x;n.right=k.x;n.top=k.y;n.bottom=i.y;n.updateProjectionMatrix()}n=q.shadowMap;r=q.shadowMatrix;u=q.shadowCamera;u.position.getPositionFromMatrix(q.matrixWorld);m.getPositionFromMatrix(q.target.matrixWorld);u.lookAt(m);u.updateMatrixWorld();u.matrixWorldInverse.getInverse(u.matrixWorld);q.cameraHelper&&(q.cameraHelper.visible=q.shadowCameraVisible);q.shadowCameraVisible&&q.cameraHelper.update();r.set(0.5,0,0,0.5,0,0.5,0,0.5,0,0,0.5,0.5,0,0,0,1);r.multiply(u.projectionMatrix);r.multiply(u.matrixWorldInverse); +g.multiplyMatrices(u.projectionMatrix,u.matrixWorldInverse);h.setFromMatrix(g);b.setRenderTarget(n);b.clear();G=l.__webglObjects;q=0;for(n=G.length;q 0 ) {\nfloat depth = gl_FragCoord.z / gl_FragCoord.w;\nfloat fogFactor = 0.0;\nif ( fogType == 1 ) {\nfogFactor = smoothstep( fogNear, fogFar, depth );\n} else {\nconst float LOG2 = 1.442695;\nfloat fogFactor = exp2( - fogDensity * fogDensity * depth * depth * LOG2 );\nfogFactor = 1.0 - clamp( fogFactor, 0.0, 1.0 );\n}\ngl_FragColor = mix( gl_FragColor, vec4( fogColor, gl_FragColor.w ), fogFactor );\n}\n}"].join("\n")); +r.compileShader(D);r.compileShader(F);r.attachShader(u,D);r.attachShader(u,F);r.linkProgram(u);A=u;q=r.getAttribLocation(A,"position");n=r.getAttribLocation(A,"uv");a=r.getUniformLocation(A,"uvOffset");b=r.getUniformLocation(A,"uvScale");c=r.getUniformLocation(A,"rotation");d=r.getUniformLocation(A,"scale");e=r.getUniformLocation(A,"color");f=r.getUniformLocation(A,"map");h=r.getUniformLocation(A,"opacity");g=r.getUniformLocation(A,"modelViewMatrix");i=r.getUniformLocation(A,"projectionMatrix");k= +r.getUniformLocation(A,"fogType");m=r.getUniformLocation(A,"fogDensity");l=r.getUniformLocation(A,"fogNear");p=r.getUniformLocation(A,"fogFar");t=r.getUniformLocation(A,"fogColor");s=r.getUniformLocation(A,"alphaTest");u=document.createElement("canvas");u.width=8;u.height=8;D=u.getContext("2d");D.fillStyle="#ffffff";D.fillRect(0,0,u.width,u.height);z=new THREE.Texture(u);z.needsUpdate=!0};this.render=function(w,D){var F=w.__webglSprites,G=F.length;if(G){r.useProgram(A);r.enableVertexAttribArray(q); +r.enableVertexAttribArray(n);r.disable(r.CULL_FACE);r.enable(r.BLEND);r.bindBuffer(r.ARRAY_BUFFER,y);r.vertexAttribPointer(q,2,r.FLOAT,!1,16,0);r.vertexAttribPointer(n,2,r.FLOAT,!1,16,8);r.bindBuffer(r.ELEMENT_ARRAY_BUFFER,E);r.uniformMatrix4fv(i,!1,D.projectionMatrix.elements);r.activeTexture(r.TEXTURE0);r.uniform1i(f,0);var x=0,I=0,B=w.fog;B?(r.uniform3f(t,B.color.r,B.color.g,B.color.b),B instanceof THREE.Fog?(r.uniform1f(l,B.near),r.uniform1f(p,B.far),r.uniform1i(k,1),I=x=1):B instanceof THREE.FogExp2&& +(r.uniform1f(m,B.density),r.uniform1i(k,2),I=x=2)):(r.uniform1i(k,0),I=x=0);for(var M,J,ca=[],B=0;B diff --git a/static/img/10.gif b/static/img/10.gif new file mode 100644 index 0000000000000000000000000000000000000000..99e566394c998c2d0933d494f926f57f1cc1eecd GIT binary patch literal 1508 zcmeH`-A_|@9LB%D)6@2>1$tU=f+miN|Ev^Xjvd4z8!3#5FwU`M$ML$WEb16Ffm(p<>vm0-R!w|Za>MB&y%?; zBPG=k1yS%PKyPpF&6_tbT)5ED(Q)b0C6~)JFfh>5(_=Q9uV24@>(;II_V%k+ue#mt z6DLlbJ9o}xGTpv?yREIQv$ON^<;xC-qqerTuCC5%wKg?1@jQR$&Yj`m;ZvthojG&H zX0x34`PN#ElaPZ2ND`(H1t*)-NSS&R)HTUn|KYjXi zV`Jm-pdRN$jHcz8#iWWXV0HMKRP~{Ns0|$;AIilC=CnqQK^YaS}3*Wwdd+**oK@g4|JGOuSew|KdFc=;` zeq2ycaP8W)+}zym?(Wjk(u)@_E-WlOd-lxh^)4MEDK0Md z`Fux@9-W_`SF6=iQ&WDwe{OEBq@?8e^XD&LzI^fGMOj(d-o1Ov%gcA~-aS1%{qW(# zSFc{>z90k&v@NoG5_8G(n21+!eVJtUd-AQ0i3V~s4g(=QLzZjI10J@&>;(XlMcVFF;E zL~soC)DpfUY#I7l7ogQ~i8@;)<+Di1RaGf5g4&T#FcG4zjIA?Eq;#BT88L*IfVots zFw?Q&+qt+ReNa@d(wT;Kh5IrH2_^&n9pJcFDbrIl5^z-fy?&rFQw<6^CQzQ8Vmy3B zh~QcuOm9Ns3bE1g=KYLl%BKuhMGGXjvs;G0f>HGk zG0g9P5gG>AE@hQ~2y3g%P7sT2-GLdCSUdT$=_P9ZQ%jKbdE=@e$Psq_|U%Rv2Tx zCN};^LFktidMg%D$N{dZ0v>H~yLqyd170G;kPJ#?QCg{zU+@tCPA?%%=PioZp`aQ= zECqPd_`9dl@bsWpveM`@WfLT*l?jPF7WUmZYXU0H0}^SZ(*zqL1qj>DF9{G;!-z~O z9aksCoIyc^f@5ZJXjYvWkBmqHYzM6s$%*X&BwxWZ=|F}|x{yRp(Y=z)MMI}-m5%#O zkuVB=X z&C#h5RGL^6$-Ty-z{TS!zfkJld9*9DiC`&T)ED|@Om3~Dr&ZOjNk$AD_w(B1c)CoE z6O?yNu8v;7q&61BVTsG#c*!5@GTIY<4NQ{ddRGBR-Y+$%R^wzEQjo|b-5AZAFom-@ Ioq=tC1FfO2RsaA1 literal 0 HcmV?d00001 diff --git a/static/img/Characters/Chuck/arm_back_top.png b/static/img/Characters/Chuck/arm_back_top.png new file mode 100644 index 0000000000000000000000000000000000000000..5a15fbebfb3fe24409fbcf9eeda7ac08b951828c GIT binary patch literal 145 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-R!3-pye7;uzq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c74Zl7gt(rW9lfn5B)ZrqIMdZH+39lb$Gbo&2~QWtkcwML p2}wx_X-Nr*X$dI~ZVZfU42%T~VlyIFr2^G3c)I$ztaD0e0suQdDv|&I literal 0 HcmV?d00001 diff --git a/static/img/Characters/Chuck/arm_down_back.png b/static/img/Characters/Chuck/arm_down_back.png new file mode 100644 index 0000000000000000000000000000000000000000..fb43dd59175fcfebcd3dca2291122613ea36c273 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-a!3-oLa?h>8U}fi7AzZCsS>JiZ}y&LR`}1C8Q)YD66qGFaRyFWMH51n)f77mci52&t;ucLK6U*m@AP0 literal 0 HcmV?d00001 diff --git a/static/img/Characters/Chuck/arm_down_front.png b/static/img/Characters/Chuck/arm_down_front.png new file mode 100644 index 0000000000000000000000000000000000000000..2d643270775743cff921e773d8144bd036dd22b8 GIT binary patch literal 148 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-a!3-oLa?h>8U}fi7AzZCsS>JiZ}y&LR`1?gq)cj{r~^}?XlT2fr88>L4Lvi|1(@a#p?*< q3VFIXhE&{2N=Qj)P*!7WU;tWT$-qA2HSbBFEQ6=3pUXO@geCx?Yb&w< literal 0 HcmV?d00001 diff --git a/static/img/Characters/Chuck/arm_front_top.png b/static/img/Characters/Chuck/arm_front_top.png new file mode 100644 index 0000000000000000000000000000000000000000..44bf6cf377ca6cbfbff29fc6266ae4dacaf2203e GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^%s|Y+0V25#xB3Ao$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1GLIFM@u4iUPZ|ez(F81+Db_&jP{r~^J>RF{JKv}kuAirQB z_y2!}&HI<^2a3pex;TbZ+)7GFN=i*gN=!>gOiN2hNO3*Rz{tkH!opzfwtcTFP#uG( LtDnm{r-UW|_~$iM literal 0 HcmV?d00001 diff --git a/static/img/Characters/Chuck/chest.png b/static/img/Characters/Chuck/chest.png new file mode 100644 index 0000000000000000000000000000000000000000..f487a70b697c133607fecf14e2e4e680b3fe549b GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJz!3-qJI&EZtlw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlBFg}u5Z8ptfaoHh)cO#=WGDA18_yWq;0#yCAoGA!XV-Ac z@LUhqFw1}xXWt}8p9K5hOjm0!!{}n4|Ns9x=-pNZ8X{a0{( zJaZG%Q-e|yQz{EjrrIztFvyPk zK81m@#x5ECnKnsolJTyR!I`e^Q8q~_={vjpFD^_7&Ty3$<1Gx3^Ng`QF+FlYl~=Tr z#QGNhU>ngRlfxW?%+oXTmN)o>*@@-&%3fHQu&K>IAk{h7Pv*>==o>3j4b>#Vb3JaZ zPInEnjB%DcHZwXQB|qIuMqNR~$3k>YncKd}VZKR@>zjR|9Knl=M<~xMiNzAMCh=__mF(Xn!g!{tUbvvYnI(sZp_q2tB=cl`kq1Rnj?Sg|TO*mQ}fg2L* zi@?Q5^W`Zi)o$rx6OyC4E9RcQ+io+_?DOB66A?Hh)0 hx@W0%A6?JD%y6jDp|kcMS0>QQ44$rjF6*2Ung9uYTW$aV literal 0 HcmV?d00001 diff --git a/static/img/Characters/Chuck/head.png b/static/img/Characters/Chuck/head.png new file mode 100644 index 0000000000000000000000000000000000000000..f8e36a1825ed34decb0fb683654b9bc4363e5b7b GIT binary patch literal 499 zcmeAS@N?(olHy`uVBq!ia0vp^AT|#NGmy;LdS?=lk}PqJC<)F_D=AMbN@Z|N$xljE z@XSq2PYp^zOunKqG5Jo(M}Q<7A9nC$&PW1H^sfKD2%UXhuOb(qGq?_X>Grhp+#>&(LSIHAIB9BZ8P4LqO`2_>H6afZ<&^O0{hE;mHIEGZ*k~tPCcE~`) z^`dn4q^d&wckj;4{=b4_PXA^z4HNY>jD8%xfgLU?hV7Ld;a7UiMHsIi-M#$r9IylHmNblJdl&R0hYC{G?O` z&)mfH)S%SFl*+=BsWw1G5&=FTuEnL5bqy`XE*VKF=?N+M>6v*EQSk*uWnnkt9sDSr z1<%~X^wgl##FWaylc_d9MQi~+A+B`|EybmkSzE3x0*VNGx;TbZ+)7GFNk~XYIiSGE a#KXW)!N6&ya+w1t&EVDSr z1<%~X^wgl##FWaylc_d9MLYpMA+B`|EybmkNh#^ZE*V~TTO5Gm!k#XUAr-fh5)#r9 gQj!iRFf#ElFd8sOR;*q=11Qbl>FVdQ&MBb@00(I$I{*Lx literal 0 HcmV?d00001 diff --git a/static/img/Characters/Chuck/shorts_top.png b/static/img/Characters/Chuck/shorts_top.png new file mode 100644 index 0000000000000000000000000000000000000000..f6a70eb204fb8e713c2f3a367430cac84ba8e86c GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0vp^Y(UJy!3-p4-P%_Oq$EpRBT9nv(@M${i&7aJQ}UBi z6+Ckj(^G>|6H_V+Po~-c6^RD;gt!)$R@ODN7`tR7q~xb(=0!xs7ZjDT+IzWyO!0Ja u45_%4l#ra3mYABDkdl+kdHcO1GXrzC?*3a; zQd(Kx(pcgq8gAWK85R-F%pT`lX~dM`K66TJ)ZCaDhItF(I9M5$uUxTu6)UTdAcHjk D2zp5H literal 0 HcmV?d00001 diff --git a/static/img/Characters/Gogo (Zimbabwe)/foot.gif b/static/img/Characters/Gogo (Zimbabwe)/foot.gif new file mode 100644 index 0000000000000000000000000000000000000000..adb7092926c011975bfd841f68e6655e13abbffc GIT binary patch literal 58 zcmZ?wbhEHb3ks|NjGpfI#sl3nK#qD}xS*15(St gEFQ68fkIQK;iJXhBDZ^SCOlweQLIax$iQF?02x~p!2kdN literal 0 HcmV?d00001 diff --git a/static/img/Characters/Gogo (Zimbabwe)/head.gif b/static/img/Characters/Gogo (Zimbabwe)/head.gif new file mode 100644 index 0000000000000000000000000000000000000000..2fbb0fb67533bab576c1a8b37ec0b3dc9b09cc13 GIT binary patch literal 355 zcmZ?wbhEHblwuHPI3ma}ErxHyh7F}2+y@RENK8y*U|_Jewr*@}T(oGBzrX+dB>ssW z4F4GzHslEY|NlQPFR#IY0muL9?D!+!Cyn!JuXj{-;IysoFtZ%UX~^lj+Y^*pQbaiuW_&(7rR6{j=H@8!R1 zmwk6HRi9x&TKB9p-4ccQ+(He4ntrZ9jBK@aOd7T+)r_p|T}(_ROic#-?CF7Qtn(Kv zT*&EX5SX7?ypV4-E2qJdwDzgRbqg65a|$k5v1J+q*Y<_VoT)WkTvNGDZkaOuh<^t+ zcQNl&Ca$ehN>n(b*sd_}^4=;D*m_5WZSLh4btMcupLnzr<{r5D^u_tF9i68?toq2T SbZDk^I!mU-Vi#o=25SI-CU;r@ literal 0 HcmV?d00001 diff --git a/static/img/Characters/Nini (China)/chest.gif b/static/img/Characters/Nini (China)/chest.gif new file mode 100644 index 0000000000000000000000000000000000000000..358b106a3f57c6d171fc60b2bc6b33f09dc11578 GIT binary patch literal 132 zcmZ?wbhEHb6lD-&n8?fk1fHIr8#ZkC|Np<@PZmZ724)5wkSIu=fhly3_ymUM`PY(o zcCB2o%_I4)%?4)jbB#q97_0$HV=%e^ literal 0 HcmV?d00001 diff --git a/static/img/Characters/Nini (China)/foot.gif b/static/img/Characters/Nini (China)/foot.gif new file mode 100644 index 0000000000000000000000000000000000000000..38b990f04295cb6e6ff8a72f771b341e23ac1545 GIT binary patch literal 60 zcmZ?wbhEHbjo}Qln|NmF~$->CMz|5cn5(UXKF!8q7avtQ_+%%)8 Kqu`JRgEatveGTaV literal 0 HcmV?d00001 diff --git a/static/img/Characters/Nini (China)/hand.gif b/static/img/Characters/Nini (China)/hand.gif new file mode 100644 index 0000000000000000000000000000000000000000..b563e1bb35cacc670b9c2fcc3017d7858298d3f4 GIT binary patch literal 80 zcmZ?wbhEHbWMklDSj58M>FLS9z;Jht=(|0^|Ns97vLQh6CkrD30}F!=hznB7z%1&q bVSzxS;>zAma? dYpba5&>&@Fs3+Z_#;z=5pW5H;p)AN?4FFdxL;L^$ literal 0 HcmV?d00001 diff --git a/static/img/Characters/Omma (Germany)/chest.gif b/static/img/Characters/Omma (Germany)/chest.gif new file mode 100644 index 0000000000000000000000000000000000000000..3ff3a3e4085206d8cb59ff3e1f880900186afae6 GIT binary patch literal 205 zcmZ?wbhEHb6lD-+Sj5iIz`$^qfnhfT!!ibj0|yQi6cqdi1I3>#j0_Cy3_1)z08-1q zJgH*Uh2H|(B(F1OLF)8Yp>%G8hX zrt^I2*va_e@s$ZnHm*3ZMfF6Vbm+AijI*}SWYZDXWolqNFTFf(GwbJynS8PDzgCv! z@~ literal 0 HcmV?d00001 diff --git a/static/img/Characters/Omma (Germany)/hand.gif b/static/img/Characters/Omma (Germany)/hand.gif new file mode 100644 index 0000000000000000000000000000000000000000..6605b2ccd443f5490c5053e809caae4806b89143 GIT binary patch literal 82 zcmZ?wbhEHbWMklDSj5WEz`$^Kj_5K5hTRMd@Ad@$|Nox>3>1H|FfuT(GU$MKAhit4 f;t?AbC^U5%K3e=Oa=RC2!UI+o#k$0a3=Gx)b=(#> literal 0 HcmV?d00001 diff --git a/static/img/Characters/Omma (Germany)/head.gif b/static/img/Characters/Omma (Germany)/head.gif new file mode 100644 index 0000000000000000000000000000000000000000..01b3b0266d5e7f23f08d350f5f759eb84a389954 GIT binary patch literal 260 zcmZ?wbhEHb6k`x)*v!oU1P2ZrxI0I*prGK(wW;s+1b;Z1)!@MJ|NsA&2QnY8wF5Fh zieNzTCkrD312=;XNC0F81IxyOla`Hp8?v$vbHpX&PW{R&&ro%fZH|0JRYr8@0NM6Gg80V``oXR;Vmk+M+E#Pmrl6?2M`g}EjznAcfZ z(O4|Rxngox5!=KmA~|fEHs!GIUAukRu8N&SD%`UVZd!coc*>lK1!trRQjQ5SSOWlE CgJu%| literal 0 HcmV?d00001 diff --git a/static/img/Items/kitchen/banana.gif b/static/img/Items/kitchen/banana.gif new file mode 100644 index 0000000000000000000000000000000000000000..2bce6fc496b2297ab8959c3c2ef15e7f7ec5d49e GIT binary patch literal 61 zcmZ?wbhEHbWM$xFn8?iV|345lG&lgs|B63Z7#SFt8FUzc03^@A#CM0GNbtsn1QQRY KG literal 0 HcmV?d00001 diff --git a/static/img/Items/kitchen/can.gif b/static/img/Items/kitchen/can.gif new file mode 100644 index 0000000000000000000000000000000000000000..98a58bf9d345244247860a60b872d495dd10f988 GIT binary patch literal 153 zcmZ?wbhEHbWMN=uI3mQLTO+z@(uNR-Mjz)|Ia`iQ2fcl$iN`PpaW74vXg;TY=H>Nq{9rpOpI(F S84hh=@M>ge7n!KYU=09#xE}TZ literal 0 HcmV?d00001 diff --git a/static/img/Items/kitchen/cleaver_large.gif b/static/img/Items/kitchen/cleaver_large.gif new file mode 100644 index 0000000000000000000000000000000000000000..5988ee21897382a353a0ed1a4f0df4b80512d9c0 GIT binary patch literal 104 zcmZ?wbhEHb+b*R`@Su{pIzmZ H5Q8-Uf_^9i literal 0 HcmV?d00001 diff --git a/static/img/Items/kitchen/cleaver_small.gif b/static/img/Items/kitchen/cleaver_small.gif new file mode 100644 index 0000000000000000000000000000000000000000..272b0faec0b740701049e412daa2983b3db57a00 GIT binary patch literal 92 zcmZ?wbhEHbWMdFySj5gSfByUf2M%<1cNZ5I&ktZ|aA2sbtNZ`|zv538Mg|6U1|0?< u0I6kQR+Z^0jO06$YubU!N6j7!P9}kz@6vi3f7xupC>nG|Nq~*b?e!)XXnqK|M20%-@ku%?b`L^$&<5Z&)&Fk ztb|wL+?l-Gfsj Lm_et}mBAVSGp;cW literal 0 HcmV?d00001 diff --git a/static/img/Items/kitchen/cupboard_dishwasher.gif b/static/img/Items/kitchen/cupboard_dishwasher.gif new file mode 100644 index 0000000000000000000000000000000000000000..e152e8789d3f730cf30b61393d924506973a5339 GIT binary patch literal 227 zcmZ?wbhEHb6lYLi*v!Ci?ZwsYx3(3|E_k&$b4R1uq5}(CSG7#tHf7C;)l1ed>0aNp z}s&(EBQ#NoYtlNDr!|;0f zBXw=rx23@xEL{)!Iu5_&+VkwKfom#KtpquAPQn@-ZO^ngI literal 0 HcmV?d00001 diff --git a/static/img/Items/kitchen/cupboard_shelf.gif b/static/img/Items/kitchen/cupboard_shelf.gif new file mode 100644 index 0000000000000000000000000000000000000000..64fff59fe2e462ae230183daad890f65ac7dc4e6 GIT binary patch literal 210 zcmZ?wbhEHb6lYLi*v!CCIJ@B5i>upjZHsM=+0khBYIA1ms+Kh;R!`kFWzm6!Th0NM zpa8|6EMUG4hy}s&(EBQ#NoYtlNF>h2iyz zNq5@ra;pp6VRMpx$6;}WuWd!5!&0&J*OwLTEZLW2*wA=9R`JM_A}@2fRo5FFf8Fgl zf8T27Y`tyoui86SMW;40FqOw})ppdUc6;=;WKHZ$o!Xb>HmOE^_OzJ!GgB8$UefL# a6dW3{cEwz+4vx+2TUUiLuMHPuum%94u3}FB literal 0 HcmV?d00001 diff --git a/static/img/Items/kitchen/cupboard_sink_right.gif b/static/img/Items/kitchen/cupboard_sink_right.gif new file mode 100644 index 0000000000000000000000000000000000000000..41a21925a7c86390d9bb2045fec505ae29cda48b GIT binary patch literal 233 zcmZ?wbhEHb6lYLi*v!Ci?ZwsYx3(3|E@)lV@@jMDjz+Vo+omi!uyD}s&(EBQ#NoYtlNF>h2iyz zNq5@ra;pp6VRMpx$6;}WuWd!5!&0&J*OwLTEZLW2*wA=9R`JM_A}@2fRo5FFf8Fgl zf8T27Y`ty#^(Br~dJXxGOg3CK?VU9q9n~fMWtmM{hc Zg)&F1ojZGe2ghditwF(|Yr_Q@tN}u+U`7A{ literal 0 HcmV?d00001 diff --git a/static/img/Items/kitchen/cupboard_triple_draw.gif b/static/img/Items/kitchen/cupboard_triple_draw.gif new file mode 100644 index 0000000000000000000000000000000000000000..e95ab430f3d4f3a0ca4f95e1bb17b6393e6db7bb GIT binary patch literal 239 zcmZ?wbhEHb6lYLi*v!Ci?ZwsYx3(3|E@)lVvZK-L)#l8p+omi!uyD%=p>wrj*84N6QHk|NWJyqrP*=oK7jlL9)IT@?g`7%t|z@e~i z_q`W}*DEI7X}img??7>+72| zY0|=l3;+NB&j1FBKUo+V7FG Q)-dEQF0GU)W?`@f04!H3p8x;= literal 0 HcmV?d00001 diff --git a/static/img/Items/kitchen/fork_meat.gif b/static/img/Items/kitchen/fork_meat.gif new file mode 100644 index 0000000000000000000000000000000000000000..bbb86654da48eb7d1096b4dba8f0a37ef448e5cb GIT binary patch literal 117 zcmZ?wbhEHbWM&X!*v!w+;K0z`-93N){7suSH8eC#nlx$d+_`;yee>qcD=sdss;cVj z?Cj|1m^EwG!i5X}|NpP}lZBCifuBK#0SG{5Ft8{U>`|QOz&|tHOY7QaizH>aM@nqj VzZdW;Yb7Z$mH&IdBIv?k4FK_#EY|=4 literal 0 HcmV?d00001 diff --git a/static/img/Items/kitchen/fridge.gif b/static/img/Items/kitchen/fridge.gif new file mode 100644 index 0000000000000000000000000000000000000000..897b75c149889c853b3f418a3ec2ed463015a996 GIT binary patch literal 238 zcmZ?wbhEHblxHwySj50^_wL=cwzkEK7k~Kh;nJl`^XJcJ00YIJEMQs(M1s^ZFmIOF zb>|Jz&ibRwqFjf=H<)t> zOq%-0i*2dL?9kUjOHMMaYgzuCOCbGZ-0f@A|E(*|T$$jv{`UK?rRn!OZhmNJEY_-N z%~$K_%+JlM%PH*6&6vGr}j*qJ8Pzo`{J0i(D0CjKC9F7W7khjTxPc- mV8NzEYm8^l+qZj{&-^)uB%4lD_O;d2#h<)jc;*ZzgEat`6>W_G literal 0 HcmV?d00001 diff --git a/static/img/Items/kitchen/herb_chopper.gif b/static/img/Items/kitchen/herb_chopper.gif new file mode 100644 index 0000000000000000000000000000000000000000..9e7599418e8b66db4cb52b21b97ec00df888709b GIT binary patch literal 85 zcmZ?wbhEHb^S7Z(@*|NkGz1p>vNEQ|~ctPDCJ4oEEn jvy?>OnN??Xg}7y#jheU_oDFMwKFoDeUZXvkfx#L80e%-* literal 0 HcmV?d00001 diff --git a/static/img/Items/kitchen/knife.gif b/static/img/Items/kitchen/knife.gif new file mode 100644 index 0000000000000000000000000000000000000000..2e8631cadd87b61afb1e6af41dec907b50bed439 GIT binary patch literal 85 zcmZ?wbhEHbWMSZESj5iI-Q7KZ{`><64ipy`H#jiN4`66$X!!sCzv538Mg|6U1|0?< n0I6kQmeSb1Q2cF!h4hT11m3T*4+;d1I?Z|-A$4pj1A{dH)G8e4 literal 0 HcmV?d00001 diff --git a/static/img/Items/kitchen/knife_big.gif b/static/img/Items/kitchen/knife_big.gif new file mode 100644 index 0000000000000000000000000000000000000000..022ac276053767267a62defa96e1fbc81c115ddb GIT binary patch literal 297 zcmZ?wbhEHbWML3zxT?f(;J|_6;^O)9=XZB^&ktZ|aA24_ckaA-^Ex{_`}+FY+uIi| zT-eaiuxZn#%F4>FuC8_K)=ir>ZTa%$vu4dIEG#T3DVaQZa#K@NZ*T9RLx*~LdOA8f zjvP5Md-m*u2M_Mvy?fH6NmW%<|NsAIpbb#`$->CMpv0g9G9Kh71~xZ`hKw5mT`b3# zT`~+f9NGFf6n`+tadSEtzhp4zWPaduHiV6dKXpR}%Y}9ar6kTAkuHZ54>^7?E3vXT RH?=f3HuLZ>GdnU^0|3e!SI+Ow z_wLv zx^(K)sXKS>T)%$(=FOXzFJE4^Y}xVS$8X)bwPy9|UAuN2J$iJ-iWR$e@7}a&)5VJy z*REZA7?r5$huy*gttH`mt*(ck?Q+a2{O1ATfD;BTM4Gx^!k1$A6DDPJhlKEs;|fR>35~ zBqY|_R;FLS9z%YOQ`~wFL6c-oA$H#YfcmMzYU-2gkBLf3FgAP!Z w0i>3JS-E0E&A(Lw%54l67(I2*`Rrg(;S6bV6p6@Oq%~Xf!>`6iH7X3&0C2D#^#A|> literal 0 HcmV?d00001 diff --git a/static/img/Items/kitchen/plate.gif b/static/img/Items/kitchen/plate.gif new file mode 100644 index 0000000000000000000000000000000000000000..5d330f38c16bb8b441cf03724ee1666a081b482c GIT binary patch literal 321 zcmZ?wbhEHb}Khm13m TdW)~x;Mi_4~GB$|1&T!DE?$&WME)p&;hc6 zloSI4vs#AOf>U{>>@RtkMU*x?yLT-$iDS}p^HtBH7UligRPfuUJml%LNem3u0MnEn Ao&W#< literal 0 HcmV?d00001 diff --git a/static/img/Items/kitchen/spoon.gif b/static/img/Items/kitchen/spoon.gif new file mode 100644 index 0000000000000000000000000000000000000000..7304ebe7a1f95eca41ad56142526d4dfd072af84 GIT binary patch literal 179 zcmV;k08IZ!Nk%w1VFUmb0K^^ui;Ih&Pym2H0H2?qfPjFRnVEHUb)=-Eb8~Zketw~$ zp`4tYkB^UoK>($trFnUIn3$NSr>BF1gMEE{mzS5Go}Pbyf0~+_mX?-|j*etxWNmG2 ze0+SPqoe=-{{R30A^8LW0015UEC2ui00aOP000FrAd?Y<*94v?pennjZ<|t13LRS7%0>d0$VrE%(G^(Ta|#rZxRjX1UHY;AF4{00zrV&Hw-a literal 0 HcmV?d00001 diff --git a/static/img/Items/kitchen/tap.gif b/static/img/Items/kitchen/tap.gif new file mode 100644 index 0000000000000000000000000000000000000000..7b327dea0ad98926f43b1554c7b2d391b70f28d2 GIT binary patch literal 80 zcmZ?wbhEHbuuDUTlffDQ=QbAi literal 0 HcmV?d00001 diff --git a/static/img/Items/kitchen/tile.gif b/static/img/Items/kitchen/tile.gif new file mode 100644 index 0000000000000000000000000000000000000000..d775b725507fd968636e28ef6acc0b7d37edab22 GIT binary patch literal 72 zcmZ?wbhEHbWMg1sSj52a^5x6-@83Uo@ZialCvV=oVSoX}pDbXe4u}M)Wnkv@*vP}D PWTO#3N9pxM1_o;Yu>KXo literal 0 HcmV?d00001 diff --git a/static/img/Items/kitchen/toaster.gif b/static/img/Items/kitchen/toaster.gif new file mode 100644 index 0000000000000000000000000000000000000000..51ba67f1d3066de7f8d2bb2a451300fd24e2d1a4 GIT binary patch literal 95 zcmZ?wbhEHbxoPmMi|Ns9$5(pH3vM@3*urla?I3TqQ u%qkI5ch(v-cxDD9pNMjmJ95ldjCMz`~#d;)2vNFpGF- Z-TK7KpxDXdc+c?DF;NDlKvxw8YXEqq5L*BM literal 0 HcmV?d00001 diff --git a/static/img/Items/kitchen/tong.gif b/static/img/Items/kitchen/tong.gif new file mode 100644 index 0000000000000000000000000000000000000000..2ef67b8a1fb1135795aad72e607423c3650d23c4 GIT binary patch literal 105 zcmZ?wbhEHbNi4U}$h)C@wDk|NlP&7%2W^VPs%nWzYffKx!G7 z^&$e!1SXntJX%ubrXU?Y{fc3d$E*h-tIj^o(EV-3WP6oo9{bC5LD2f4u0}o9@-8>*nlg zT5w>}#`Ezt3)0(`AA0wH;>ODpHeA|#_GQ{J!MG`^87!OxSq7bn@l}M_mtGmmZma_+`bkomoAbXYYI5yy9{~{ldh$#R=657N2;t;NZjJ ziJNBZxu4&=KCN~6x~qR??s>4|#+T0J$D0=(Oz&7fZTqeN|Nk=#C{X;#!pOi7%Af;s z1t?A!*z+1f1^LCinS4V#b=dXYIy)Jd_{{q|jeMqt3UjhBPc^Y)WbAiP&=v{g>h#d^ zH)Bu=HE@V6b9!QuULyWY*(#@sv}uw{;b_u#uJw(lnJ>9H7W15p3Nl T#KWy371D3$=&sS($Y2csx>3s3 literal 0 HcmV?d00001 diff --git a/static/img/Items/kitchen/window_curtain.gif b/static/img/Items/kitchen/window_curtain.gif new file mode 100644 index 0000000000000000000000000000000000000000..80bc27a92d8ae8c71f1c46eb76f5623d6a474706 GIT binary patch literal 2200 zcmds$`CH5j1I5pGYQ{_@gP2zDq@)sBG!m}SLe@JJB9~S-En05qT1P3PqA5d*ZHkgq zCT)_s)4r#qRB~G=X&sS@(&gWHKR=)6InQ~X&)K|XlgS!~RalMjY*cjg&&d{< zq5l?MoyCu*n0bbuOy}T7E~auIxsST;!N#89>aKyj0~ivbvZH@08~wK-Nx*bAs=YCC zAGJR-XYpQuDsOy<#`IH+rQls8s(tWpD2C(k`5_w5;9CYduHf|rwDa)h5?-Cd=@ff*>FUc5BLuWV!Zlf(2d3I>Ih_)aM3(*&gk2f)qj*c+A zJcXunsP{+75!C#JfxGCvf#(NM=ZEKZcyR)ip6I!OS7*={gR0JfCN8FPQS5?dF2*0@ zdlp)QFepT+E1J)v{W4zm3{QygH5HTTcpZQ*k1+ZG6OZvZ3FU4m{S&o+q2XuUpD1)f zu`_z2P;eMx2TWz6^D3V1L+x>VN}}OEdh9U4P6naJC3rW=;q@M50XT*UPR+*l)K}_N#y^5uW9HCM};R| zp2oLKWc-eXl?ghW->FFk(Q@PCT>q%;9!L+{tVU!MSV2A=Ao<6L23 z0M%3HV1+2IIEbd9tjZI16VePL$9CKFd*$KGwQj1F5#5E?X#Y#L(b?544w8}g=Y1{} z5SrWra<-Kj4mB~xUcK$D5^exlD{at#|L(GC{QA?%mdS#L)=BgQn)*J)VFX8IN{-6T zPHD|>tyX^9Hs)@dBJ&`)%c4v?hrWVBZK=+A-0{zuo|jpnjI`zCMS9YcoO1Rh3mpog zx91viLDF;IloFlpR1rL;X~ij{NRhXAC-GBq4SSoR=?rFU=FwNlv%R*8xbtYr6xOYZ zBIU0=HL*)p`NRI?NJrr%6_&m_p{OLKz@>kRHyL~#tHPN{Jf@a+Vz@C~Zvy6_#3mh% zKV!rGt*P&BT;InM-pM~bF}g;8WwK$rHp)|M0%kEvjhThcb4>J=`~?l0Te;*#(VYRo zJM7I!ny=VgVrid<x}tI^w1%YrkEetsw2sETen;n3?#4Z&#+ZC^`8_zivt}*5K8mgjk}lJbv13x5xBIriOGT9-bKM@J9%WaOnt|> z>h%Lo;kJ}XNvV=oyN_5dhIK*3gd=3@q`Srz=Etr{iK)`dlQYVai{NY|sZb5#7w=Ti zH#=apbjYaQOog4{E+=Qp+{Vxd7V*j} z+dP!o+%i15Z@!q8KuR`ghUF;ds(3r)N!ifb9GUa8ehV-+maK2*-B64Z`LOJ?E#Jwm zJH~#$Zly)B+(MpMN)VB$?%%$6T(RpzTzDG$BWLw}GKFTf#&Ow6alXFG5yWv(uy>76``8KOdlSvuHhJ(cqsbvn_`(-_B_jV@#bvi1}jwui)$QGeq>Tfvn?-# zCR)5O%YR)^CZy(b%&DEF(p1+gmosGM)Ye6p87m8~9C7Dqy{9wf}SNYAV_o*9Q zDl2)Bg2YwO-Pb}c2twq=Xw7*>t)}6B literal 0 HcmV?d00001 diff --git a/static/img/Items/laundry/hamper.gif b/static/img/Items/laundry/hamper.gif new file mode 100644 index 0000000000000000000000000000000000000000..0e20bf3091db343629c3430109c817ab273a9ee0 GIT binary patch literal 643 zcmZ?wbhEHblxE;zc;?SgHF=xEyqi6H?|3h{W6*cfV%o)sm3NdHc1u-k7S5QLvi6Q< z`yt`NH4KtARom{EOgfvt>5g#1gr=Q$gdwE@LBB{irmJhuourm+ay8o-2TeSJMFvggw$-~w5SpG&J*@6Vl%CrzVfhF**4RZ6~Z2w3{nmZ zN1rAR37Vk!-OUNmD`vMOC#&Il}^~k zAmjG`|9^%-1{8m?FfuUsGw6Wa1&R{}_6H3X49zXA3_8AUa!z)d&OXLomiF>`Kt)Xc zvu0`d3;FZ;3;1*Sv-vaoGdlWv`p;n6q+ujv$fqQr!X?8d&Md+x!OHKl;keHHg^QOi zU%A?!)t|**;rMa69lQ4IJ8{AA(mmG<@#sl2%GIG4JOl*dtV4hCxg DfIPww literal 0 HcmV?d00001 diff --git a/static/img/Items/laundry/laundry_machine.gif b/static/img/Items/laundry/laundry_machine.gif new file mode 100644 index 0000000000000000000000000000000000000000..380526d025437a31f29bc9bbc43d299c028b2482 GIT binary patch literal 355 zcmZ?wbhEHblwgo&IKsei_wL;fA3n6TwS@!+KYjXi)22;l&z{}2YnQjTx3jaeovrQ6 znKPFzT{?B@)J+>VW@lwBSg>HqlqnlFY&do5)Z)d983+NzpDbV{Iv^5cCj;w)1ckno z%t;Qb*5z<>Feb>f`P}|G=YD>T0s8@c3lXN?gK~K*lRqV_TfrT+B5M7O9LBO&^A=nx z;L@2kDRS8hOI4*E_ZMBWdLVY={kt2leAGGQxEi_mnJTNR7;2fCID30rSy;7FO1ioF zIA+c)5t>{zwV`(w^Acvhl1W~jb&Z@emu@KGPM*&qAjq_C!^XNTIoo!u-@Rn&zSZ5k zcJm(DyK2G7r6Q-7Pds+~0yFPv<`u%%x;PHs$=iI5fxD7#!xfgN&z@JRKGDf$V11GQ eWMzBc_cHF^FBG+mQxzPm%7wIIb{McQSOWm|VUS(` literal 0 HcmV?d00001 diff --git a/static/img/Items/laundry/laundry_powder.gif b/static/img/Items/laundry/laundry_powder.gif new file mode 100644 index 0000000000000000000000000000000000000000..d183610fe1e28a2d403f912131e4f33c2a525a54 GIT binary patch literal 206 zcmZ?wbhEHbVGj{sou%6i) z>b3^9PK|7zoi%;Uy2S@4Pu_UUYu3cjX_rkVF%SV1f3kp8>3~R(oeZqr35s3(i9(Kw zvd1?$Fc>V!$vJLPz;o(=O4k)7vpuYGhuN4ml$bEFNE|wtqO^eXp2O{CzC1I=Z{LMy Y9Bp|UnUGO^KG!)#XvOXKUj-Pf0kMWff&c&j literal 0 HcmV?d00001 diff --git a/static/img/Items/livingroom/book_bible.gif b/static/img/Items/livingroom/book_bible.gif new file mode 100644 index 0000000000000000000000000000000000000000..006c11457cb2d988f45a69d850cb3183ec2d95f2 GIT binary patch literal 88 zcmZ?wbhEHbpq1_o;Y;))ts literal 0 HcmV?d00001 diff --git a/static/img/Items/livingroom/book_blue.gif b/static/img/Items/livingroom/book_blue.gif new file mode 100644 index 0000000000000000000000000000000000000000..32541cfec519b3cc9933119461167bcdbbcae59c GIT binary patch literal 88 zcmZ?wbhEHbV302F0l_|GsKDBAGAj@A4N8Jh)I6{cQVV;1nDYNcn| z`O8g7YdcB~hi~Hd4Y!wj+aYbIclmrQS4CA5S3**RKTCH{Z+B2uYn32>HDgDSasUg@ z+C21#IJa)wzBPz5W^q+T!p7RozMR6xj-S{ac#4%j zuFY@8iX%I&?m889$`mqz?uhfQiZZ5-UJeQ(s?r7>~|?f>+J zjZLEESMX8UrsiKij?Q*xSm4ma+R8YgT_MrFjgQmeLeYlB$NO%n>8;rD{?YyhDa-$Q z5hpjPHcb%G)w9toNS@Yj5icd9xw&C~n?|mirNfpLfr}1y9MQ4doVa{S5TD5mudS~d zm&}}|^`+BLgJq##U)Nr#OY?3D-aof8_H@{z$jv|QZR*w*XJuh1|GcP_`{Vgz`x)Qu z3O=gA@GvxrA)kjcB*E>lr1Ih`$JM%$j!lv`yZ2|tN|6II0_~pZRBd{GzR}rwo=?@+ z!%+IBKxqrc51&P?rw5O&^s$MYHfuM)0QzMWnio-_T=|1U?U-}B=5 zvYoYB_=mW{!-lWCGvb@rKd~z|e>Sa!XW)0afu$OhcUPbNH<443F z2hMa8S3G!F)VBA}#-)MLX*;j__g{T@zM8$|WnWROZOSv7j8&R~vrTwQBBsY*n!e0F zX_kp}E`#M0PmM~e4bN?A%|f5eZ56G`VC>AZyj|($Te)mrk&xr^V1Ca~(OSNitoe&) qrfqteJVh*3bIy!UCsQVCic~&X^Y{w`-`X8*hnd#g2@zmoum%8t+IG?a literal 0 HcmV?d00001 diff --git a/static/img/Items/livingroom/cactus.gif b/static/img/Items/livingroom/cactus.gif new file mode 100644 index 0000000000000000000000000000000000000000..3d14f92e419191298d9902f0fa8800abfb049667 GIT binary patch literal 235 zcmZ?wbhEHb6l9QR*v!cgr_aC;$^ZoU<_rv#4AZ?C8XOoVdN9lnVEF(4KS%-S*1i)MS`OBO1gW>>Kj=nPHJNiV(6bVbBgfv&RNw{=ggSTyl~p$$qPj0vaek? Wdv!hA<}FJL+Uu6B?%5^CU=0BFFit%H literal 0 HcmV?d00001 diff --git a/static/img/Items/livingroom/candleholder_empty.gif b/static/img/Items/livingroom/candleholder_empty.gif new file mode 100644 index 0000000000000000000000000000000000000000..1f9abea23878f2641d1e0ebf5be3aa41f21bd90f GIT binary patch literal 87 zcmZ?wbhEHb|_lB|Ns9Pz(DaQ3nK#qD}xS*2U5$x z>=0pc^>&x*k2z~DznZ%-y-|U|)nb}brCIhyHWlgVg&cQ2@E!%Q<{q8SI@xI5E~o&Pt% zj^|JTk1ZiFg>15vL|-z{6vCi9DGP$+y0A3u*3b-)zr#kP=yWRAsgSXa6bL^vYD-T) z-uG-)0DOHve^x>^W?O}ZK8tTJgpDtMPkEAq78NU-6_zVdlbQsjrl+S5sH>(AXd99Q zK#8)Budq49?09q_4Z2$lO literal 0 HcmV?d00001 diff --git a/static/img/Items/livingroom/flower_pot_triple.gif b/static/img/Items/livingroom/flower_pot_triple.gif new file mode 100644 index 0000000000000000000000000000000000000000..7254d06bbd6fe408f942d64288eba21f44dd9172 GIT binary patch literal 161 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 W*@1%y^UbSwZJECi-hOR}0029r9DEA^ literal 0 HcmV?d00001 diff --git a/static/img/Items/livingroom/speaker.gif b/static/img/Items/livingroom/speaker.gif new file mode 100644 index 0000000000000000000000000000000000000000..45df8293256ad2c78caa16812c71fc532c911904 GIT binary patch literal 217 zcmV;~04D!ONk%w1VH5x)0HOu}J3Bjaa&o}Hz+7BhwY9ZMN=pC#{{R30A^8LW000I6 zEC2ui02BZu000A?Xt3PQipWXpT;yq%K@MOjia>z@W0RU53NFGBFJXDsaXz?#-M%`V z%lGNYj=3T013)?jC}K3|j4q>3r1fT`LSI*4R>|#AdD0p{hz^q&tMX``p4;nc8p+*T zAN4(aenK^FgH>Q$Ovq(XsWJh0C=t-&vb3y^ZN#+VEO={ z@J9?5hb~x%m1W*8rfl-i*hA~TviH(eodVG|No_IfgkAz5ZMo*TbSX7XlpihZ< dS*|&uvRJgYx2|-(oNvH}X}-P_!N&y&06Vq|VV(d0 literal 0 HcmV?d00001 diff --git a/static/img/Items/livingroom/television.gif b/static/img/Items/livingroom/television.gif new file mode 100644 index 0000000000000000000000000000000000000000..a15131e3186e7876a9784a5f1a9269a22d67346b GIT binary patch literal 192 zcmZ?wbhEHblwc5L*v!pPSXii~p7+7)(Iz3nKb>cd-`@j5AMUI4d8Chb7-BuNx+EuuBTTAZw zopPV|$?I`23#A@bKDA;`?kqLdU`<~+(MypF4!o_}f8RmdL2vf?jKe<)I5u2-Qnqug k7>iJD%^lh6yFZq)H8r=iu(vfab2In!_VrKb5@fIj0DI6zJ^%m! literal 0 HcmV?d00001 diff --git a/static/img/Items/livingroom/telly_cabinet.gif b/static/img/Items/livingroom/telly_cabinet.gif new file mode 100644 index 0000000000000000000000000000000000000000..8773fc9d7b5d53a222b3e613550b55baaaa32f8c GIT binary patch literal 148 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 literal 0 HcmV?d00001 diff --git a/static/img/Items/outdoor/fence_door.gif b/static/img/Items/outdoor/fence_door.gif new file mode 100644 index 0000000000000000000000000000000000000000..561d35a087d1cdd31f87f827d0d4b64c5b14042e GIT binary patch literal 1447 zcmWmDiBD4p0D$plv9ux%3M$NFrBDG&k(S={mEQMzuk_?WOAks*X`vjY99lVxhN5`>4oDz^CXJzj2 zXxl4QEiPrNL)vJQ8O78PS_~KG%h=gg70W24SC#N2v=2f~wOv`z>{K^Z$V?)NoI#3I zsXD5)1C17hza?l>>Ftv$KL$X={b35@NMgYEbF6o`Bw= zX4V+ER#joRLhgdu5udKnDhZ-Oogi0Rl-*HN53X@Q2fMMxvMAvP+dhHR3E4++^7 z<6}o)eoh@)+~wB~Hd$&*MP@NoU%Zu-ogOTg1}s8GPI@K6Etlt`5{l0VR;ZaWW=2g3 ztI-TLlnLulp$q1?5nhK&t}WW?hFDEjaoC}Nxa3fUG+4^_o4`6V=+!ZUrC^{;R$nRz zI~C^-H@J00CNSHBFwY(cxDk%u$m{Vz^{6OZCTy|Gr-tg9Y|X8ox=<=|ci$us?{nbzHZO*Bd~(0(uoI%P69B`%CJ}L}8mKWLJh9$_A^X!782X z^Gx=8{gz_CMFf_79+i0xdH%U02O%G|4#t;7!dpXjfEP$k}MpZN9jGg4--m# z59Wt^`X)MK2|M>F#S4Q;8Pc9a31)6pn#g&2)^}=OYGv)c=P2f+dU(akwu|^@*Zb3Q zzP{~D1mY1IL3uh|eQfsn{tcPJ6H@QKn?i!^GB7%&z#gPp64%b?CF;afhT;9Z5AUSm z2`Dp?OTezajBWlj(xpt(QiHQJ{q)QA@h6fb=*<0#dGwP>Gbyu6p4H`j>n}XSTv>Lh z5;E4mY4<+s9(_`j{+ZynyI;iNleaxDzCqyMs>Kp(bNJctY@cFVV)v`o%A5TZ&YthZ z$kX19qFc^iew-`d^*_p8={q8ho9lndEZiAey7+YLn-#d}<4)E@lt|2`47~z=*tE)X zbS=1JWU+T3kF26Sz~$d0%yPvM=OTTWwtyoMm+oH0(f1}tpM94{i(Tx@p;Vt9OD9J&l=!d*U2^5(Qn1O;H8HC#Ai+hp7$NJ+)X|; zzbqb)UmBPSGR8A-LszfiddmM^8p~|{DoS{Q_TJ8ap1v$i8>yn* zNFv(CuxI|XtrI7;bN|6@eApcAmEj4~KWi|g$U@w@3muDB%moveE7(Vn`znDFUB0?@ z75Qz?hIz`{Jp3Q{<2Q;wswE|*CeR-z%Tn}J1jY1Zw*mmFhG0|HNV7q+dFpWrrT;O* y2y=eFXw(U@ER(+N-l2O2STOe&ZV-K;vsl9~%&2=L{A;2aq(_sF{hOK$@c#qT&kODV literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/10.gif b/static/img/Tiles/GrassSoil/10.gif new file mode 100644 index 0000000000000000000000000000000000000000..05f5f0578ece5d7f003b51de1fd65989aa432706 GIT binary patch literal 1441 zcmc)J+iz2K00;2X+j>sVrN5rG+v#mPz1quhZD~8Y*{!GD)|R&P!Y&NF&`CGPHYU3@ z+Zft*1G+JAQ^ZTe%(y5RFpL=GK}=_60)oaw9?%Cf)GfsLfG>!=Aox%CefYk9zAxYK zj*z#$TLCGczac1P#66R;HnTWwB4Ro$VZg&QmRhpJ^|)hL647Gq7T}Z#lLoxaOeBqX z?GRuFL6}BEHK;0qxW=V19o}IDtu<&DBZ+D;OE2M>kVSQP%0xKFNcV&+VI-WRq+^tf zpE5;tSWJ&6^mx)p)DBD9tsq3Bu?1rTg*0o>HjCJulLj=XW8^W7CX9HS1=LSh#tnEt zEo!p@*ErcYUFFWn?1v<-oHS`5)JeoSDotC&{({Oj2okTE%{_!)C2CTk5gN4(0G|Ts zv;n_b)NTM2BmiMe8T4LM6R@2sG2EcTyHN5YeNCx=DF+UbWXQO&Z1Z zQ*!G7h%OkKXVl&*#77}bQwmcrVann`4a)QbQx6e3M*EIXF+CR4h}>gRTNVV>qTpd= z_^2+uU`tzoeOTh^uk2XzHmgzl2K%YSy+ov zVVD^Lts2zUOYC{eQ+p7kkK5|xNJNW=#sI}>Lkffx&ij}Vx}fhq!t!qe zc85Tt=9X6Ocds)w$re^m(i|atb7ByK0@>mjj;=K82!`@cd0sYk&G!DLZmh9(Jp`O% z2}$UemetOlRpiRzULaqU=K@t!Qop8IQc zZP9e#^BfjUxn8>H{5Tum&p)wqzS=uiYB)Xr_k1hF!%TBomSrdQ;oPiQzW=+kCbjQ!5j{y|$~@1P+h>IL zkxONPB1;F*?m^B%p<*IGQy{Lrm=SVs?}oV7k;fRdzMSVM;u|;lf{3GxRzdk94+8nT zfZTw~d`%0l6@jRGNBLAa(hT!%QPt4Sua=93t0~E^5ZvcjBV)3BQ84FSEx*Bij%K&v zZ?kg%J-0Zc_R|H7)U01F*P;*ZvPZ5Xy0y|BoMu&5+#Bn7@9gpkTO8gfLrU|ZAn$p1 zdWL6{foe|m`cgqOm`jzR)Un-PV|?}6aVva<&5o>yUZL;4zOwZo%ggp{1W{)uQ{akj zeR6=K#8@kb@0){&vt6Kwh%%WBz2kJI09CVlpv%{FC`(Ql_CUCpO_z}`+{t literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/10c.gif b/static/img/Tiles/GrassSoil/10c.gif new file mode 100644 index 0000000000000000000000000000000000000000..acea0274d9fb6b99debf78dba11bee2937f09e6e GIT binary patch literal 1410 zcmeHG?`s=%82?^!N$z_0z5AxgwMmyOmrE{QvaqEzb#3O{UD76567qx8!F00gtaiVO z>5tS_RIX{QeNiM6bwwt$BBN|?f(%62i<|A(gep_|!okFd`a0*G% z`C-8iOA^~NX-n}`!cC>URFbDk5>u9#B;UGW^CBDyqKuc$`RJm^q`Xwz)s_)j5=_EF zr3E_chvguf^iTzVYfGnideB1+g<25!TnH)dw!FynRP6vdI>$hmJXjvV`{K$+YHk70B3ZXU`ZH zdW8+2N6PfRqpv%q5g3_lPkUj~L-$Q{;W2AbLfu_NQDRF$)IZCWL#Th6i(cRk*)7Mq z$c!JR1uE->(kL5uQ_*pI=sfCi67hL=E&!wBw#Y<#AdWPFB9-S#{Z=c@AbW(0K^mUm-I*C_ScskudPI69cc;B*+#GIR=(LEe)0Rwa|V$% zk>rV+CH|8IqY0XDP`SIs1aM_R_1_=A6tC5rT(I6!0KNfB9Odc zF_ZoopsD)XgmrtMqG~&HEFW<-Uy`wT(ie}O{b&`808{A5()Be(v)UPSzbR}O;D9@+ z&wZ)Y02RCJ?LMO$6*HRgHkwaiAQLc4jSg+e(9tE$ARXYWA+!AC-*Ew)-a$3vHUf#atRL#6X+&+WISi{!lNmH? zq{*>ssgC}=3QW-(JiyVw?maVftYX7%l?TxFuu*fIxT39^;`iT?u@^RP>sachwu#dV zs)hyc>NPT4`3+$vRLAkyP(_13l93v2r;Bq&5Y_-y<(gL+YppFvOm)GTMRDh@fc=itX?AvFj)N2?9j{F0o-4qT0 literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/13c.gif b/static/img/Tiles/GrassSoil/13c.gif new file mode 100644 index 0000000000000000000000000000000000000000..9dbfc75cdfebce041361a325861870549e7c7044 GIT binary patch literal 1411 zcmeHG-%ne06#w4ex7_=^_x2aG(AwLdxh)M`(ry+8@%C2Q+Sc|qWy|(3y&xO9iD4iF zbTKU}lNlenY&xS^WX3GMiE$>(rwc3*6CbKEWF|BI2w}dGkSN*WEdCF^c^=NgIp^~u zpX6koODFnAoxlnH1V9VIVgMHWFz;haL0ArPr68C0!HUG^d~C5b_rt80)k0h$080T_ zmiX9=H6t=9H=R#ww$je!KFM**2m@p zuoC9e9;Os%ZP|>-4tto9NDBgwM}(xitr+BDv$j%@?-S`^kxjMWemLxA`fOC*&t`os zhy0M!lyot9KR4hs6?|;k&E$fxbm)+ibUxjp^{@jDx*`c(MN_uwca=;73mvgZd*m!1 zJtrjRx`y6xO5;$Tv1Gk4?O_vh_UNQplZ3ubT9f#4Sm2l3$+3x=!=C{36M)bzWz`^Rs972}c8c%z7C+lB*C_=cz!sU()cWGn-InZ% zK<2I`Uin)8>C3a#DrV^!q?^7=SD=iujnr=a{lUK5*}G%A4Fj#}<9oju_c+WXO$m)( zLG9=;Ib_1g=hGd>a9VF{)(}PrjY#`qtxCrp7^f^t%_W2e^NmJzoq`BDBCBd0pxpiM znlEjY>gaJ(obDS#F@pTdWq{u|YX<3hR{^Jo#@=E8m=yftN?89n=arwqZuX>KKFr&{3si5{op1M9KEAp zMBC#j5+@#i{~{7v1672&i(exi-PD&H-TN{EQN5YeI~`4fq!A4;p;a-}Mmhu(vx<8g zW=a;f+lig`1cr`+Q3BJ%bs8O?*hK7qfTRVtt^RUaxO1>RjR?&e&aQn`1z}ywfPutA z7j?s|WC-U;S)nW^mQ}#$#wHV?#gCN!wNFvfORu0<0M{vEZ0W<(v;2IxiBW8019}R2 zQx)tNLkh(Nv|9)sm4S-voLs`t0zk=&d$Zu3w{M9jsD}swsKEysMt!^>ZZEQp2#!#a ow(~hyezcOj*`s3}S6;3Dya;{wMz11{H&0=Z1{;@A0td(b0qb5100000 literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/20.gif b/static/img/Tiles/GrassSoil/20.gif new file mode 100644 index 0000000000000000000000000000000000000000..6c58161db667418338d78e9b47e78596a190ec07 GIT binary patch literal 1201 zcmdUu-A`I~0EQ1ORe|&I;~b8B>EIlM9)t+=00WB@aC}q{k00FBt zCqpjxh!Rple{4aV9^saaj)KgLH^y{Gl!gZx%$CLb4X8RUvgZjGPnst|pB}MgiM}?( zm_RL4(&zs?=L}fKB(P?rwrPUXqk~4woRAt{M{U!%;S3UOL)a|gE;hT0q;*Q#-70bL zvK|UdS-jS4sDw<%q)sd0)(6B8>xJPl$3YBNdl0tsL`;u$71Z|3fv19yXoO#lFPR$um>jWOrp`Asgr>I~?5qFa4HGrrNF(-g| z6mSf|F(5jpcV*?w7{(;f&KY@ELE)d(MJR;L5w?u9SBE-sq@9;pCP9Qo-FecS1Zse;}~Yi zNOi+-XpVNI$bq9+aF%X~i~Q$Qo`R~YsIW64OM(ovN+uk87e{N_n zIP$G;_vQt`Ov~E&8?5Pl)LrR$r(S(5_~@r2E2ksAGxt9+HRf+`>@9D9XcvOaFXO@; zTU{!?wO$w8`M{6+%iDfmW2-N7$#$~NL4@dy-5>DVpKI?cBt|;cvbJ9lLkQp+MVEcY y>QtZX(Or{xZ>PKMkbYqEh~>e+mQcuyOykg zY>Y_&7ru?59mMWJ3V;tc<;fB zU5t8tlWL#_f9-<7sw~^Kx{Bg74KobPGSD$gxGR#B3FgdL&Vmoj5n~qIdJP*~k|m9( zt1R&>NOKnKf&qzB2)iW9FnEfFNfS(&Pt0ayXkQj;B zX9)W&!7j>}Ntialgb_^|p}Q<~FG#&=;hQGtS(IiN%w3i^=f&ZEBx}YaBr>=pPt#cR z)PX|A+upDN@m5scvVyvT3|8d{3WoZTgb7U;VQ5)1TvTSwn6o5tSEM7iRGCvgN7$zD z7>SN=JCig_Z83w3GQY0Rb_4g-714Dv&A^eG(lf2dZP@KoM6jV9R*RxdgQp&R5#QB;!Lt|`38a1Hj zw4ykL4prrTohU+`c1OKc*=SQU+R)mj@e6vySCgBsV!o;}s6)Ipd1$$Rpg;_(ghMLf zn3WjSh!Ql6trB-3n_#gkV0QHj30bmz6Ug@ts0fZ-jC)CBeo!|<02R$C+1bBcp zR^~y+_<%<|{4y`*Wm`P1&XIrTm}&^*0+7AgdBGJ@pnI7}dC$~=GPK7#!|rb% z1>2DBaG$c>W1NDoeX-dNKi<$_%Wp(l^DiK+wTITY`9uCg=ezq;#qf1rt1mghk|jav z)9gBblUcrr-6bX}vf_U5+XP@fuG?-$9jjk~=g%l!VEq$47`k+tf8|5l?xW5AJC7n8 zuU`j0HvbR?bU)PDPQ3fx{^iVqt^RlMc~}yBpn7_cJ8W`)?u|bKuA|_VW(#b(KKSKm zE!1l(ErC4vlOrW8ciZ`IxVL}(NhCY?Z8gf(S0PvRteFXSDz!BUd`)G3YR_|g* zk8M-&yqwKv(F(BoOxF@~3JT;cliq=BQ}&Kpboc!&cf wBkvz=_56({QaE_R-|5}|?y<%SL?#}J=IL$Tlh5}GYRk*Lf-Tj0I{?o83x}5aQUCw| literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/22.gif b/static/img/Tiles/GrassSoil/22.gif new file mode 100644 index 0000000000000000000000000000000000000000..cef55c4d9f5a00cd2f35d855a62f7ea1bc2ec550 GIT binary patch literal 1199 zcmZ?wbhEHblw^=(_`Z}sGka-8_)zr?$C)A&hp$AB@!0JVv5n+rj?>z zio8y;++NB&UP`=9)lyc4;sI)W`b9#9CBinf68=DTo`6;gzqs ztqhk|2ES#Em|L5IpDM3SmAG-1SYW%hc8Y*wgS3?-r(2`EajuYUm4rqLzgilfNw%nd zk)U0Tw51ehh?am=rI=Nfn7<0IR<=Np2ETR|zmF2HTdAT&wWwK@sI(uaagMNiqq1{@ zw4*$?L7sqDtBOvRfSUq$V4t=@v7n|xqH3vpmX+d;GTatb zqE6Madbt8t5*%g{9Ko6b_EMZ)D!lHkO2);)|NsAI7zH>&K=CIFBLl-i1|5(*C{HkO z{AXb1knz~Cz_E$li=pe_qoX1m>^B%@yjbAOBE%rYu%aRTf*|8Uu?-9YOoy5}*%&wi zEI%%B6ZR3aV36bx5t8n*IKq(N(A>y8QAviw*fUvGN87P2Dv|lpY+=DgDYp(g_VRlb z9VxL~*f?RnDBBb+1CdqyGqhc#_Cy3V9$~Y}+ms>snRRmKl!Z=?C%TuNQCC-uICbN} ziVi+~#fmdKTg>z0v=*-NXk=hGa)g(m>cvFHhBLAj!m`g+_4oCj&*P_bZ2cTFkn2uD|#Z=cte6~ zlMstATS$+*!vcrKH`_QBBn%W-`&dlo#b^Y`?afu>6k&PT)YQbTz@f3Ap>~_%gM&QN zIxd`4w78(o*tjjz$XUtx0E4r#*o=?tEv)Yhm{|Fr7|OHB+%j`wW7*K|$j3P)Bbtrh z!-1J~lE8ySxxPCtv~f$=6fDlwTyyYbnf)y@24SCv0CbQPL)JHWwo!gEatD CXZ>LS literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/23.gif b/static/img/Tiles/GrassSoil/23.gif new file mode 100644 index 0000000000000000000000000000000000000000..5a27b32fa4924c0f5b5819fd88c84c11cd0c403f GIT binary patch literal 1205 zcmdUu+fQ2s0Ef>hlu~-m>ACc@rx(`CX%DBD(UxA;vbLkJmX1Oxf@Urz4rFD)mbCQZ zX*=-1xQWbFmKcUUFm=Wy%d%;lKJ1}GNH(1bZYIX)gE29gi4S`)ahjmAKf~Ya_wao$ zzups3pMO*dD1krk14$E{eB10P%WSx)pN8WGXqc5c^Y{>hs1ss$iSTixErSl4U}v5f zG{WW-VxPwL|JhG6()JAM$YIU`ku)L0W~nWOna?230?xbw$BnQnPxvcxUxjo`V?C`B z4=3x>LzYR@U6NVTs3VVii=@A-@N)`ZSz%2fmI>*I8I9>6M;41M8oH~ku4y7zRk~j# z=~J*PLz+h6&Z?q4jYa3Q5x&)vll2)OXOZxa<4FhVt&j?-JX0-Wb(N%oB(^0=YS&-y{u|)$ZIuC*_)yJE!r;g5H%OJX4BbK@nZj zxj8aaRu8ji;yh!Y!Xi4zc|bX`TPx|&N@99QGbj#KR3jEN@fMS~$oQ*rZ-MNmkw8^7 z)P}kWL_j6>mSyczXh10r&8SDLXk=dREs>#Fb&^3GlX#3qIxEURg<{8Hf0`Iz&^Qg- zQmAblO|nFiMdR}(UtYmZNZAz9c}@{5Q{fppriWcc!kNPcXv9+_-JHyxL1PBQUm|U3 z)Kww^6}2Oa57yWSr#+@_@f{dB^$;r!Rh0fR)q9TaGr+DK;mYE!lB{=`wx{vl1$~I4 z%o9?34x>*&(RqVsihQn38ksR@65{ZzDo|DhE0miR+f!tBt0bD!`YU97k?~~7=dGwU zCADYKP)QZjNjxR_k%}DnKTQ8uBM1QZ0o$|KXP*F?{{=3IHL;spcjrLFGD7|QaC^B~ z*vvn5@H_#r9oGR+iC$+Los(s7oiR1gm{?lRW**6uy&>c7Y9;AR`Nw|uwhWZP|SOt=OvfeR=U zqPoQIv!-r2S19PC%ZZUQsKFPg!SCL#=+>rSRVC)H z${*OHZBQ(vl`Rmg!LOChr;*C1mda;dDe6=$<*mYNULvZOE8wokV_G4imBsI;!spm1 zXHhI>QX%5jDDS1hYu6xYR3xZp#i5bJr=26@ht;8Fs z#^=&s1Ep3WEAqi<6q zX;C8K(xPZsBxobS7CO-)P>o+LjZaUR)uc?sAWg)gQq)?4&8%F+sajSqPr$lb;{X5u z3`79MpDc_F48;sOAhn=4VPL<};9lI^(%RPEQrOYmlgZgLp;eG);#2`XmZ=l?MQ6_H z*5Go{p5Gysnv=A&ojoknUTAe|Ms|Ti%%&D5XRl;i-krq^Voq+190ytRigLM3^ma0{ z>2R`puwOJ%S5S`AwA;iSplcAp<)^lZfr*LHl+irVdi86Dv@Aw>Iq5HwlC0tPZYUg1 z^w!jpxR%PP;KV({eZJb085bN|S>z1WCjJmP)WD!AE@q-xbTU|#A#k6Bgu#M?l71`` nLX(&nj<>2v2(VNNHaIZ&a&rZ|*yOUJP11ka3ynZc0S0RTso0!A literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/31.gif b/static/img/Tiles/GrassSoil/31.gif new file mode 100644 index 0000000000000000000000000000000000000000..43196e8b7e0e89825ec4df519fd667e27458ed5c GIT binary patch literal 661 zcmZ?wbhEHblw^=(c$UFnS}77RQPZGMP$x&gutZ2RjnA|~L@!UkpjgNR$S4#vDHAp> z74}i)H7ph~EC#ZLOe;hUONC9!M2yRXHB$MsvjzNAcnyjKwQ~gY3j|dYc`d3$ZE7X7 zQuy`r1k5T$oMgEzt3*w*MGf)>H#tQuy6ll}t*6%_>Fpi-ZhIguRq_0{gTrN+h&X1iV^R42lKa+7yh7g#*<1-D{M! zGWdPERUI3oO)Eu>bA-*RM2)k=Ov*&9D#a`-#jOg(EhXP4WecdK^8Nq+pMe@c@h1x-149Ob4#+T2oG`F|YG7?% z`9xg>-Tke$GV=#oa7*hbhou{)iTava^GMq}3i4-UFfa>iB_w%kYuIv$amtIZ>c=}p zX1FjtdLk3&CE;+W;N>ER!&(fICwLq$JIOTFGORN&WOQ&Al4KAGk@|jtbC$>>r+W=d zja_04D$C|DBqYnsVpWViw#Px)v0017sf0mLxVLehZL9)gz_aIe3p|{k?YQ8Oc4>LW fET_3%TUT9O9kDsTZLCG zh1Xf0TO*avuvpltO3Yc7+rB~CUzOLmSU5ymKs${uP*1?TQcNdXz@$RNqEalhQrky` z&sUkxtW?CYM#{KUSUX3+wM9WIgWq43Prp#mU6I?TQ(ZNY*Q`?1ph(c9OjIXRFhD~f zY?^^(jd-ZGfLohFh^By-5|2rVux1)xfGS_02ERp>xN(`Vd6~GkGLJ!_VB~aDzkZEC zHU1!Ve!~(WjTHWfR(+jZ0Y7D4Z)Ltta1J27=He^^jtMf}H8F8Js;vd7nz;CY2 z!t$WmLF7w1mrw%7w`^qG!>iTW(@pbiPwWTlfq Qd@|D(Wh#g|D==6C0JQ&<4FCWD literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/33.gif b/static/img/Tiles/GrassSoil/33.gif new file mode 100644 index 0000000000000000000000000000000000000000..318b330e7a9dae0c45f8475f4e477eb492bb9f7e GIT binary patch literal 630 zcma)(Sx*yD0EO=$YiI7aG!zLX^$60#fv$MFfP3 zh=`b&=nwEm^ojUr;*0T#C;x+n1j|40JfEDC@0@T{?F&wsfC>CAfRqH4BCAO-A;6>v z$3!|Vz;PLcEo4HV#zg4JGrdLDD>tPiI?9u-JmX!`E30hAh7uxlE#h&R?pZOUMCh2u zniYkfbvWm7Acj;673ZlK57n}HaLuT!u=ZIL=V9P!`#k+e>N4kFF+?n6?<$+_M%HOMu*!NJ&6}OZq4eT?;tnME!ZAJIA;S40o4ITWOC?j$nA;icu(3=MDx9PTt;rSCtwAZteGkCS7qj8f9881J))o?{egStx~#Zp73 zH4s=EXj&^3b`sDAXJUuRfs41My%OJ7Z=)#ehhI5dfK)%6bD;F&Tt`Q_V2 ZeceGR=*fffXYiN%=^JjSpfUgh{{Y)FkWv5u literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/40.gif b/static/img/Tiles/GrassSoil/40.gif new file mode 100644 index 0000000000000000000000000000000000000000..c4448ce3a94271ae9b132e065b9fedaddbc9c803 GIT binary patch literal 1330 zcmdUu+fQ3{0LOoawovG~{Lbk)<=R0{FPvV0Qz%eiVB0Y`w2YpnY$JvsmvO(fwB@#u zoDK#ZBU;&#L9!?@YQPwSW*W_6QZ}chFB ziRdukq7iRe%nzCg&sD8smUb>M&C;2=MaDFQmrcUDh1{wM^*OD|F{`$W5qy|558;*( z!e_vovAlqZaLm(!PE|Fl_8agHBkn26DI0~gVa6V%9AU<%M=QbSHs`6v`FFbz|5`8esf5soQ_k5Cuic6#+# z`%PnD&C1VE?JVXu671{fIjOK_o(Yu0vT3q$F|Q`Vv|iJny_RR6A}?8?*MPZ~iYlhb zpc(hXi@iEDkg#^Fm@R`ui^SR^WX;?w5v0JP=3(46PWU&>Rbv`KGVrH}c8t@n#S8dp z(r>~oSBQ(Zs_hXqXH^O}Y)x~8_88T)RB&O1tDdGE5p~%ZSv{dC9V8liavK(MPfkw2 z|2evsas+@Bu$_)L{RB{+00k%%_ID1J<)ccN*#GIkJz8#y3S^hM+WOBATU~$jYI?S| zg#7oCeNW+t-NRiO-_myY=NE37 zRM|cMY*+S4&z+{&%k$qn^xReyPK@kZ9xaodU7wrP-p&tI(R=qp^^yzZoJCihiVtox zs=n@z(|`71cS|d?LcDyKmS<_n?hEjWUc=TPu z^Og6*S|gac zPo(%qt2c_FnB>*H$STJClF5gjy0mYokKf%g{Ca*_R=;zYVg~+A3kWbMfgI^dKamr= zR9lWEsf%Z3IYqf5bp#&9vikv|M7X{bS|@Ej(jao^X6VFV20)>NWTIW{nu&BmDJ%2& zu`6f2Cdu9F&xDTlz7A zK97T}-*o^W1D~W>>TB~OZK%fk=n}1BwQ&39v-AvawPpNKoHRIA1nDihX4Qo literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/41.gif b/static/img/Tiles/GrassSoil/41.gif new file mode 100644 index 0000000000000000000000000000000000000000..88bd4ee8d4dc123a5d0adadfd2c05806c1bdde61 GIT binary patch literal 1321 zcmeH`+fQ0|0Dym>!ohRS@BDzn0Y!xa2g)r90~OKg!3#KKa2VA!S+md%o5ovI)Csy4 zyv*7fTau>TvaLgxH2AVO*S%~n*tn#9SYj8K>}hd#_tGp&li9sE`+w|v{ocOh3%(lg zwp^?NRp6f@XiU?Bi4^kIm>KpNhzLi9jihrzE|_7&NJdRCVj>+QC~6|(7Rtp)`wV2C zk#tQdq8u5s!1^&1Vu>(EMmT7_3>#<53gkN-5nlN>@tZQA@jYc;{SgXqoHCY6TPQVe#0y-Cu_X=Z)@BMchgW z78uMKqh_ixt!hcD9b?F^!`m|Iws$pwoX(r3TeY&Vfe5mA$Vm3*y#bbR459N5Mf<$g zc7^JktF9kKo+)K}rYdeh!DWLtqw2_2J4Vsj8kuKU%`lzoT_>Tq9%@yw{)DP_w%b8>P5{s#c|MY#xoB5=Hn@$w0Poq!6g zrgyvGUyxc}dvQt3OMsIv?t{XnMOM29w&clg37OP$?)ZyGY_?KG0pUsE(lV?E2gPjY zw_MBXH3JKrsM{hVA`gl0#0Plm1I_ozzusQ`K-u=$!__<3`U7U{@quW!ET30*2pi&3 zqCy_MX@2^r@sBb>c{Q8V#FwL6(m{CL^x^MMwCeCzd%J(L--Li$vXSO(dy8;R^s7}N z;cswv!F=%;@GH`f>OS@v2Symi=ByI$_vWj?tk2$(Pn2q_LG_)$m#a5qY>dM`pIk+X zDvkIG_Oz7EiN22cOCY->VP5$G@VSIIhc^@5C+`d3-)BHnO&8zFF6A^db3Bd;D2HL2 zpLRwICxAMtc>Kw=x}#=&=J|&7Fef@%35g^q`y=qpmUbnTMfFchP?7Mb%jm;$={kY< zYdV;?f3>pc&59+xJG-oD#JM1b#q$e`#qrxbCZh`_G32*-rDQz81IAG@>YD|jR1tqB z$FBPh-vGCY-f=&WYXm+;?&}|c#38S{*N(EHHPrTwK_pA=l$BrD+$oipaoZ(Eb1?f0 zybw-w-KX`u{|vTvyNs5s85Z>NEBP}vS51zG74tv$Pz*{eVinx@mI&jVdk8%*NTH-4 M5lVOONyYuUmcpgqZIVUHy zKj`V7Y6tD$?+xHCD3UA@V~D5`PhPZy^myDv@bj`LLyU4%#E3f;;*^=}nS=IO=vtsH z$4Pfyp^c+SGZ{8u&a6Caz*8L6n^(lv%n6p@GjeA}e%LNcn8@B7-Ln&AB>2;^pdJew ziD->Yn24B(=wDR%JEcQqZODK--jj`5sNS5yxj?&ev}-{=xTw}8&=`X!STe#8@sBuX zhUSiuAw6cBfnyfv)u3^Pu+2htib%4g< zMV(nX&Jw|Lw_^^*F0g(b=9rg-78y-Qk~CAHZakpFhR<{aO4>1t%svMLddy$aj@KNa zGLte>w&UbrJ36RAQyd((LS7-Zr762yJkT!X=b&FF-CJyrd|={fvH3V@n}*gjWj;oZ z+n|GP8$Q$N&M8tK+5#1w=Zw;mQF+v8WCzAd1ef(Gj@-Mb^=c#o?`ww29l;gGaa!&v zD6BJZ{Gx}?$YSSN*DO71fe|BNID!p#on!gDMKF^6D&1Y)OhFBqa0~ZL;EQ>P*lfFWM5GkUo%Gxcw(K4GUUOX z5p&Aan$6#d4ej*6QGEqvq-Nr#slbk-le$jHduNpP8Q51)gpK%HpSq(a!g_)l(n>v9 zP09kdx3|InO@>z@1b_`-e+~Zn6F{;J&`;`PoU~kFBhS2#ljF;{Xl~%Xf3sxhxxs@H zn0!>x$iT|T=#-GxI6U=#kxgHTWlG^=lSJQNok$aR~k8f{o zR^nv;3F73z>S$E#xpnsyXr1c`X1WYduHE|OirDwpAET7AC9yly}v_=%5!!R`N4K+mC;It;a|-VsP4Q3z;Lj&96h_yNdEB~ zA_kabYXd&%ZGf@qp(~;y6*OGHE_;1Oqk%e zOTe=FYOC?R2#QdqI{6dYHha(Vg~~p^Pr6i3r)|6MQgB)R^}X~yO#STb8Gs;Q&wuAA BLURBB literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/43.gif b/static/img/Tiles/GrassSoil/43.gif new file mode 100644 index 0000000000000000000000000000000000000000..9ded3662cf4b23443458c6083085147b22bb78e8 GIT binary patch literal 1310 zcmds0+fQ0|0RA0BLC%!}M=k}qorBzLQ7#_qWgJwbK=7#8cFrv5thQAvLqT9`MyYn% zxXf)$XVrTMtKQG-^V52II{bo1y#~Nrx5=ABqebG{6Bp9MmKJTKHJBdca2X&{$W& z;7-fB=M4?BWOJ^j+kgc0NUxP>n^iGPDlcYN>@3mmob67)y3|uh=QU*_2&SqP^W*2DCk+bWc$AW27fTb?D&ETDUPObEjml&3Ic**_>5|XwsInXhdRGyeUU{lJbLt1Mq)`;V&Tsz&dao1wHx%5FdaG)tVq5&tDbGjE)^=3DKA} zUEFVv`z7j8{{F~WXP)$X2YJEgUD1M)`F8Rd>nwd>K0CDZ^GD{rTSC>Z5&rSszED%` zxSYH58WFA#%kix&bbab$8!0A0Nq@6&MxdNOUtR#)z_R&7 zr7xBWQc3OZ@L?2a@3Xq)PoDnGO#osreChiHA?sS7{%%ZvD_!pBqo1aqC?&oGS0NCuZ&Zngei8_z zYw-t2GDNSA=fTNNp2M1oU-?8eH=s>{;2W?hqE>$7mV}z( rhRE~q>uUhk=YNnxefyPmje2bd(qe0zFfShQ-S%X5Ux!ek5VZUUO64%9 literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/43c.gif b/static/img/Tiles/GrassSoil/43c.gif new file mode 100644 index 0000000000000000000000000000000000000000..f0ba799ac2906aa84da2735e4a9169ddffdbe15f GIT binary patch literal 1340 zcmcJO>u*wL0LEV^wG=q#yywONdOh4q>7hWm3nHMF3XD>Vjd34rr!6gQDWyOGyLqga z#CnNy$yOJWxy>&#o7)F9&5|vkR?X(J#Vn06SyDgEWp3GwiJC3x^pDu{2Ry$#`Q-`k z>~(ualt2lduY-gRiJsEMwMbMgv*wAI2IL^nK2CR>jMbxr{9!==bt|=H*BXJF4Q;MxQ!jy)#A{l>Gu0dj2L^pzjkFvXs zFs?;C6}f2=+KZI0tg=m$<}7ZXCHq)uLXYiOWV15qFX1(lGdrYD-07 z+Xs^d%rr&}=rQXwX~__d5^c>AJq2>h0%Mye-SdoXhUN}H(Vm<&N@tmNmMBk= z_O(ilY3M02t}^W|GkuHdfllZzH`xnh=ulhufHGk~<2tl^3inj#?rFlDf;~CXmL~@c zXzyWl*97F`4gQj9TZ^eZT6HE);t;0zS4?Ec#UJ83KUfxDRjqdtE<2` z=cs-TbC>0g4C9<+T=Vj{9(B#o{x+$7lD5nejy$#Nw4=9O+LI@?FKT*nglz)%R#fI$ z+?;`fMrasCZ4;DzjtaA~-KWf3`6g}}Ml~`=k@A)qM~*Tx4VE0?86$ixlFbW@BTI)4 zs=B9PPEp|SmdA9yU2|jG>FJ8X%I4>UhEO_QZyP`&sP3S=U+bqxBIsN99 zmC^mmD&tHUuD(co#ooU%&f-7gt82AI`p4@ptM7_GXipz<-hCKY`hu1IcVa!f0z8JdMZeedJlK?d{)Ujqe=O}{9<&1ymfTgXmoI=D zt;!V!n4j(p@Up%bXc8g!SRS3>hXJNr37>>^E&wDQq8ogD!+1MjsN~t>u2pI{cx;^$ zu5$at6F)SXF1=L~vA6J$jRH4-h_S;a_oomv3L4?X?G2RglfzQq3cS_uw)SQ~M2Zsv zw`4h3m1lcz9|f5N3^fLQc&$NoaWO2S7Uxc=MgIzK$u9k20b=K~`!_$jAcnzB=~gzt hZvR{<=n&)|3LfrWdI|oj?G*{{f~xRfYfn literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/50.gif b/static/img/Tiles/GrassSoil/50.gif new file mode 100644 index 0000000000000000000000000000000000000000..25ede01497c6a38dbb93106a1b3ac98e2fd7ed55 GIT binary patch literal 637 zcmZ?wbhEHblw^=(cvj5dugYs$DH5Q{>!-r2S19PC%ZZUQsKFPg!SCL#=+>rSRVC)H z${*OHZBQ(vl`Rmg!LOChr;*C1mda;dDe6=$<*mYNULvZOE8wokV_G4imBsI;!spm1 zXHhI>QX%5jDDS1hYu6xYR3xZp#i5bJr=26@ht;8Fs z#^=&s1Ep3WEAqi<6q zX;C8K(xPZsBxobS7CO-)P>o+LjZaUR)uc?sAWg)gQq)?4&8%F+sajSqPr$lb;{X5u z3`79MpDc_F48;sOAhn=4VPL=2P~6nq(%RPS-rm(+*xlE{nb|*?M{sf<3!lLBZWdAg zIqljmTpA18l5$eTmbVDmhla7QZH{p$$j;bO%xjzM<;=93gVD`NjA4tO30H1W9_to% z4|Yx+Hs-ZP9!0tNC$780ZE(nq!@4&S=WW#B_3@w46L+RvN>Xh0!u6Zd4R6 zb!g-Hs;A1Z*wv*$=ZitWLzhKCJaR%IB{L=@GcETK=rV~caO`4WR@77c@a2I|Gb1xk pP3NQwfecKHaV(AviYHlR7-slrElfT&SyD0qP^EU4+iY6)9L8MqB$wIkmzxvD?S!UeRREmYsr!B)AR9V8Er!)~tlcZwDN8QL( zAiZ-aU2os;^jB?zEA7E0%h0+bUgJVVb0}g|oWziwNbyh;NKYOOIdIud?Fbwlh#?!B;_S%c-azn;N4{=+ewL&WVFl#JqAsn5>CQjGKZHeU3G+QpJxW81sHfj z58846Jd*NMR-)n#BD82uu+TS$GG3~;X!S49{u1rHhi64HAmceVQeJTG88qsmG9nqC zZXU4VNxnW{9f6Kjn6tAp@PBfi>M#IGzuNeNH@UVN+l<$GyaJO;sKaM4 zj{j9Y=_gM>4D|I?I{;Dc*T&S{7NvlWf2^&x;diBOAY9UwPGLn9#jk`8;vl ZtUCqh*Hrc!7D(v$Bkem_6RQAR`3H<5ix>a^ literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/52.gif b/static/img/Tiles/GrassSoil/52.gif new file mode 100644 index 0000000000000000000000000000000000000000..2b4837b92eca051be4fb581e4c9692c783e8bc06 GIT binary patch literal 645 zcmZ?wbhEHblw^=(c$UFnS}77RQ8QSB-ymOD+KTZLCG zh1Xf0TO*avuvpltO3Yc7+rB~CUzOLmSU5ymKs${uP*1?TQcNdXz@$RNqEalhQrky` z&sUkxtW?CYM#{KUSUX3+wM9WIgWq43Prp#mU6I?TQ(ZNY*Q`?1ph(c9OjIXRFhD~f zY?^^(jd-ZGfLohFh^By-5|2rVux1)xfGS_02ERp>xN(`Vd6~GkGLJ!_VB~aDzkZEC zHU1!Ve!~(WjTHWfR(+jZ0Y7D4Z)LtbRm4E0?sJ{pf19H!}U{O9a=aG+5@Tu^l441t5q94wNe zjt+|!axlp#UUbR4z~DG}N=CqppN*+JKD==T5e=PeO$?0T6=D*ngn0!u^}Eyz14Ve* P`Fy2KT$>ZK6d0@lnst!b literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/53.gif b/static/img/Tiles/GrassSoil/53.gif new file mode 100644 index 0000000000000000000000000000000000000000..2fce2355b60ce5efcef7b237c713eb3c8d30c22f GIT binary patch literal 661 zcmZ?wbhEHblw^=(c$UFnS}77RQPZGMP$x&gutZ2RjnA|~L@!UkpjgNR$S4#vDHAp> z74}i)H7ph~EC#ZLOe;hUONC9!M2yRXHB$MsvjzNAcnyjKwQ~gY3j|dYc`d3$ZE7X7 zQuy`r1k5T$oMgEzt3*w*MGf)>H#tQuy6ll}t*6%_>Fpi-ZhIguRq_0{gTrN+h&X1iV^R42lKa+7yh7g#*<1-D{M! zGWdPERUI3oO)Eu>bA-*RM2)k=Ov*&9D#a`-#jOg(EhXP4WecdK^8Nq+pMe@c@h1x-149Ob4#+T2oG`F|YG7tnVErU)#T-~gyq=T7FhYa3%ZK(F)(v8v#9d0 z7%R<+j##}QgJ00mUYf_+)K@gkFg;9JN1EFrke~S!lS@XVQ@lQ_h&-nlm#v1jcT$3u z@XCw~j-R?2&MA@+nE@ACy(JVRrc^v^(2w6Ik}>B6b3@uBCI+KP84L+cC#QPyeGV+y zu|P>mn!(RUkP68_~DKPeOn>1U=L~iC`P|<7AlI>b{uvNx; fu~m-3)>T(mM{Lfzdur?I>+2H^ckPwpV6X-NoiClL literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/60.gif b/static/img/Tiles/GrassSoil/60.gif new file mode 100644 index 0000000000000000000000000000000000000000..1bfc1f6a165eace4da5cd911da65b044ae87c2c4 GIT binary patch literal 1331 zcmdUu+fQ3{0LOo)J zxlD>|fyB!+8av~RPK{fPQInZ;%!jFo*~6mqjm6FFahfIS6K;Qo-^cIg>6=f!f#(K% zZ6lSS68v2R5{nMn(9kv;wxS^m618J)S`}fj$kX16N_H$_Lt`8sv>;&{Y8pa@9K;}t zMmd~6ONwSBWI??Pw0Dt?aada)8Rf8mNgJ}F1G8pdmhnt6N1cQ(UEXWdwkInjJ3eT` zBo^z=R>mB-f2qbZNBb6;KKW2vma&gv^=FB;#fs**uD3?(nbSEZaXv{p#xUnN9n$+$C=C&`4YNMn-X$7oNAmh5QT4BaqIG^HtF zwuT$W-APKw)O5^MxZ;FsjF7gQ17>Z*Su$kB0`nH%OnJzRdNMk86m3kA(F=7=3Ccc- zHf1P2MM@men4lUb$)Fi+U1GvEj8BlYXYhfXF|cM9*DT#~rD#H;4#E}3B@T;jIqN3z zmPOh#uZuZ}n1g6e(?JW`wNllZW%wl3FhPh%n2u?>VTz2naL+Wur>Ud6zMvHi=h^71 zb$p5nThIuLTZWNdxw>V6i8c`RGh|m*-;!nm%ht|iy?dHGR!0PFXwQnFafXaJFn`V% zG$YZ?y1{ja^E5snTij`~W&WuMQnVnBGni`%k8C@dC(A|I#y>-}XNo?YtKw(Kh#hmD z!jHb@b*FV)om$**b)D8Bp8)CukSjBYR|_|C3e4Hb3E=z&k@H^P8I$_XDJGx1c{)n!8`!e4VTweSRdLx_0TjwsrWMs}HWIJ|CVowRF0b$otisIw8ZbN|GW|Y!2ia?&8;6dRh7rQcW;ABa_#Y7mLGq)*RR(e zYwu}e_5iMd)QI%$!|=O~&2}+ZWsP1&{D>&?nhR!32@9J0w+25szA>=;=bd|M^FTg_ zNCgvAVrt5|a+gN~JDn%|kG8y)o1a0-Ws_PG6lJPR{T-p?_dVDaAMUys(+e^L^!$Oi z4+433^~9}rGNY?YFV7-|rkw?01J#$qe6ONp-FWKb9lz~LCx63O4g&}v3aMy4yq(-o za*q;%@}>JAh&AgAeZVBhJ!^-T#A)>p_I-sEMd6y||kmWfLJ zFa+=Cwo8Yk`;d}`3Jw91aIy0av5bHiVDreLa~7TbF#K} o|Gi3~gpCiMqSVOaty0pp2M!SiLJ$C|5P$+{__dhQ!Z7Ig4<@rX9smFU literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/61.gif b/static/img/Tiles/GrassSoil/61.gif new file mode 100644 index 0000000000000000000000000000000000000000..2eb0d031de96308b40bf68295c7e07be0b1bee05 GIT binary patch literal 1311 zcmds0-Ah|{0R83rn){iLYhsKh_a-;Zml`#R(Wo=gCNW9#p;4HHO~po6b*3?iF%@=A zw42nft=KZgHtd+AbQ{Q!vZoPUSG&PL#D`KgXnok+!=MbtHrR0bZ|poB&dcGP!}0g} zT&*KjpbGrC4Pp!$T4f@7G^|5IG!kXdAdQ61INCTXO_+!%gT)P4RFB4uc)tRMP*+}InIhV=sz8x$o*|JtvPFG1DciF(vga(!MO^$jM#vmGx7SmN|0J zLWFc!b53R+#{)EKog$huvLKB*XXUOrMVLl{3>vlK!IC~=z`R#g)-j?nEp_JQ1FH?4 zS(WWgsc{VVnNep}9;DFDywW~N)+MEmJlU;*durjPw9KBBy~0*^)xb@e)3GF`B<82! zz8elr0(KWv?s=tqfao_9&Pjz~6t&Nu7Dc${6(JoGH{cxwW$U~$s7Jju;+TlBNMA6qo1>$y@I~Z}fcZ{c>sQ!c$Xkajl`4 z5Z~rJmN`553qd-OP<#EUtI&`4wQe z9Q}=RZyI-LclQRlJYfGv%YyIUfgvF>JU#L++kWv?80z?G2N#3Dgs*FqBdWM*6aemL z>V1w-ft0`D5zxktK(OWP!e^lOcp`y%OC;cKA9R&?u9tg22-#Nn9~>uukhiq9tQYpg z-UgL6c9F}o#g4?5=aksXwWm0I@v3CUMB4indCIY)MV_dfX2qJoaM{DOZLwVQ)WHtw zPHmM0)*hCHpQ3D8Sgn5ajH_KA@rdA!bT>x!Y?OfTzJHg~_5^Uj#s!I<3qxCv?>ZJX rb~yahv1fu@07Ycm9xLZ-549{$2yp}a>igqm&UIysw!D^762Sc*n(HM4 literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/61c.gif b/static/img/Tiles/GrassSoil/61c.gif new file mode 100644 index 0000000000000000000000000000000000000000..c9ff39e61b404fd5f61f00d744e583efc1ec1067 GIT binary patch literal 1337 zcmcJO>u*zK0LI^L9qZbjbKZ07ZQa(p?b>ebdZ(qdWm`vAyR(}?n1RKuySD3kTU#c! z+qe$m1SP16DYp+|Ob8M~qQ;I0^1&b%HD*RrAxgq05=oFRPWU5y{(#?;U!FX{o!w5? zs2GUBvnpWJNbhlVM1}M!_~tYbRw8|Bq+f%YQ-m=FojF<;MTc~-PlZ@AoLSm14gCis+X^DfUO1%1 zj8URrgPCKbDNfjOv^ha^WXNrcLdyc_To793Xu}vZ&ftM!bFUILXGp^=?kz|hSpj2s zp^thBLfr(`9;GcY+Oa?n>98FwJYyWTj$@7jZAlU#B@$8~wk#czBOy7T(L!S!w`XW) zPUy{vdSv|82~0PRhE#|0H2H9hq27Tfc*Jx95+w5OTZ zIt^Vpp(9T_^TM7bMZXSu^NrRF8F;%TI3{MaXhe;+&El>C-4-L-CtydCw4}*?E!tgD z=%=7TQ18u2b~N!?hIqEDz o38^bDGN;L~>cy;hsHn6pP`<3>l?k+KzS)rx+EY}Y z0dwXBwz$wfBXleXA{x{&M|)d%)*0F~PuSAbzzJKojMtGSI+v6kNy0LPy9<)`dAvOi z2V0?b9JNeQ))W<#^M{YOZ!b0)Vz5`qw`D1JUT8~F?ZSFfl5j-{PZM|RqR^J01N$Xy zF&J7_g%$j+g%)o{;>k$*)L3^$zPY&x{?EvtvsnOCf#GGz%TEB#CaC2|dlIs1%N(+K zB;Xt1lGmq8Q<+DHj!0S5^wZBD-@w?XC$HWeQg#c5#Ws!gPuV*)?CuNT%bHqT@aDaN zOYCO@KOBjV-=3|xF(IzO(ex#0sdDtZ|Kh%;$M2mx*3_pd>xR#q_~_F;j-)JA#r+gI zYl^+9y@W2EyqoRXC|3>(sN0vH@7}-m$}-%-|w zwfC#qYH^*rH&MgoztlKe&+n-+4@(CR)9imvHk%}XeGfFN`b(wnkKdF`-1j~Kjw1R~ z1aIv4Yh(Ari>tMw-~JdpKiY6iyWhJ3irkI3a1*XIRP;M|qV@8XjE@D7En|~`2Z2L1 zZa(|(E50SRc#l|CDc0p2e$iGSy9rK7PXUVvyt_I8#xB=$T6QJ;toJ>j1neV~V{LEr ztW_M;>B=%o_SM;Ckg`4*Wsx#@EsJ>i-D+gZF2-m6{X##hZiG`_X9-O3R)ZE^21ww} z(i%WU0IRmh+zE5$S4^e4Pp&4GY>@+I9-D$??`)7W)k7dW`|~3K`^;G|8Du{2vuhF$qS)8Jfa}10)m{s~f#qB3 is&$`l(fCwQiPnAbZNRUsqZrm)`pM3Uq>~~baQ_Fg30gq_ literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/62.gif b/static/img/Tiles/GrassSoil/62.gif new file mode 100644 index 0000000000000000000000000000000000000000..ec753521bf56dc7848246f5af120370ffad9113e GIT binary patch literal 1326 zcmdUu+fP$>0LOnl6ni_D-)Vcw0g65C={cTWr0v?0(t)(pwWY1S4B6ORTyba=gj5P0 zt&p|i1rZV4hRpa-l|^MYrZ2uMK{T5$OI)%onk@?^?(TzgW@GMw;h(YZ*~AR-3Tp_Zh0yuKe=_e1B9 z%CrY}536hAvLug(^$N$JGOR~a0^u4~$ENrMhuO1AM^@QsB@;&6l~dKPM;S2t02yQy zVFMPO@Y*ST4L!TtV&5!wcOqh{aX2!LUrVb(XNv4dvHrPH1`nv zZoI<+ZK@5e2kYE9b?TTUFsAh!q&!)Tr%D!ChcRQpqfAP`w~W+!X=&3a-BPLvjFEfD0CBnbw?|A_9B=z^ zZcBsjk|L~lirm$7R|F7%zJHzeg7OUoFf_PUe*qvmyE%$v?qBhXXU|Qzs#`4*3Bb2_ zE;B#-D?Q;@WO?wKaY}#n3CL$Iy?sGDzVXYh`QK&JMBn9=%+l2xrO0zT?|I*?L{Ndw z74PhlCA9hr53gUoH*k}rW^$#ck8koo!{8?)??eyV?LldF_)%M>-0@a@-|8wUE;cWA z0_g+(n~+RtkNN*_oU-w{1;8*OaQ=l}(EV6BwuC5HO{Of~5j?$({6X5qrA43ko#wq~ zOL~7%T%j3RvtBEM;>LZq$A^=3OU3k%VVrn0id6o2(xn!PKYlyzBv+P0RiB2x5&^#4 z`Z^->T-DXhKm6iz@xRm}V(fWR4oK?eZj8N&FzK829gi}8SV8-AqsWJ+edFrR^s*R% ztZzb-WPG}s!z&e|72q;#4? zOi8kGZ%TlA5T(Zu-Y7Wa^wsw`~&L3UaN^d@QC$ey5r{c~bYH|7O-j5bH Ih{5y!0bDCWp#T5? literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/63.gif b/static/img/Tiles/GrassSoil/63.gif new file mode 100644 index 0000000000000000000000000000000000000000..79459d3c162f5ee31b54dcb11339e1cb3f09af94 GIT binary patch literal 1314 zcmeH`+fQ3{0Dym|H`<;{e{D}MP@t#nY3(ggppcdg)^ceJ9DA`aaT3>!i^$DF0cnBk z6vhB01~wk1*+OA6X^aoJCrykgXmA=IX5`64Q^^*MF(%a|D#ldyfB3zAZ(s8HJA5wp zl~Pa&{>*~t^H;v&2uKE#=}iEgCcu z&NrdiFO?tdE4f#MEwhfx^Y?5 zA_Y#nTHc&0jhdlnT+TK6*AIH_u7HFYD( z$f~V=maLhUchR^eC~8P4S}V}7Nn#$5_-1s~6VN&!iCQ2-6YUjf&qj5FTF4l%#-uW0 zfv$OlX^>#vGFDGXO#`@N;;gE~TOl?L5p`qosD-c%!0IWPJEd?XlnqJJ%W9%lXdQ)} zH14}Wb?NY?l-fsO4M~M{L}D9}__b(bO6i1XmmmaS_d~-V+o|%J7$6V*~&^}W@y6#jleV-(63SNJu z`_*96$p3yuEwS>Yz`e3q&a({5 zII+$2^+!fq3*9EYy7ZOld#;#Si{+2_968K@oKJw_G>8@1j7G5}`N{VA8`p1k-2C@Bl?a5V9Jnt%cid!7HA@-F{h zJTEK>l8)ReZ@TwzoiIBN1;+9RXeHfbm@Z^mA!3v&Xj~|w zmn-P4#A}o*z9*R4g1a!Q8Dw*{?-2pjXRBnb)FH)V@~Av`o~m zTO+Vt+agQSTbb9jL_s@Mz*~t&KVQ(LLC&Z^NF#~QBwN&~NW!#8#H2vjrBuPM#ZV_* zKrc_wI#Hv*x!AwB}a@&R9j0d(1cOnR6;~XrN&c%nT65J*n&l>-`$YeoRL+BolTW>mMbr_ Sq%tFu5u3Og(=umA25SJt6jihU literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/71.gif b/static/img/Tiles/GrassSoil/71.gif new file mode 100644 index 0000000000000000000000000000000000000000..3aa4b74db4690388ab7dae252819bf7decc19b7e GIT binary patch literal 354 zcmZ?wbhEHblw^=(xN6E^S}77RQPZGM&^Sv>GmXzjnO7%Az@$P%FHgX*M98#4#7l|C zxKzlvRM@0U#5h+-J4L`CPas%Bz^zf1N;Gt$g<2Y)VX^T4|Nj~A0>z&!j0_B>3_2iHAU`p%)gNdm@Q}IIcj8H4 z!lwv62Brm95;Pc2<@hdesF4X|U}6wR*y_1Cp`de7TBndRhmRa^WUvMRIWSxA literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/72.gif b/static/img/Tiles/GrassSoil/72.gif new file mode 100644 index 0000000000000000000000000000000000000000..856cbae8535a67da88d023357638367346b809b7 GIT binary patch literal 356 zcmZ?wbhEHblw^=(xN6E^S}77RQPZGM&^Sv>GmXzjnO7%Az@$P%FHgX*M98#4#7l|C zxKzlvRM@0U#5h+-J4L`CPas%Bz^zf1N;Gt$g<2Y)VX^T4|Nj~A0>z&!j0_B>3_2iHAU`p%H6EB%;32}+cS2>; zi8YKOJ#L&13^F=$lNUs?a4;~ih(7qCAQJt~ATV1cZN;n955B8Al}@HiUbrWNt*qQh z(NtYPTULsXjiK4ch+o1$RJXU^M}a{_$1q`rtDvctG7mHJ0v|nYcJ37`eHd6-H~6y3 ZZ1vULxo7Xb{Ra*nI(+2lv7L?#)&PW+To(WU literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/73.gif b/static/img/Tiles/GrassSoil/73.gif new file mode 100644 index 0000000000000000000000000000000000000000..163115d8aab42c002085b7ef4d4146bc7ef66a40 GIT binary patch literal 336 zcmZ?wbhEHblw^=(xN61V-J@zK!fsV4?x(`5md0mRENWUI>eHfbm@Z^mA!3v&Xj~|w zmn-P4#A}o*z9*R4g1a!Q8Dw*{?-2pjXRBnb)FH)V@~Av`o~m zTO+Vt+agQSTbb9jL_s@Mz*~t&KVQ(LLC&Z^NF#~QBwN&~NW!#8#H2vjrBuPM#ZV_* zKrc_wI#*j0({fW#X0=2w+f=5s@&}XEgC=kYcegHe+OAR`6qBRb^w>VP!ODHuPm+ SQWIx0Vq#R5Waf2bum%97=TI5| literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/80.gif b/static/img/Tiles/GrassSoil/80.gif new file mode 100644 index 0000000000000000000000000000000000000000..4cf279862b6f0588dd9aa3b815d203957c1c06a6 GIT binary patch literal 1365 zcmeH`+fQ3{0LOo)*VCTc@AO6sWj*KgvI1>s*TM=6c3PkeYm~4shNuSgwWPgJ1ejmTd_w(>c zzVV@0xNFJ+Ea0ylAUKJ%oya(d6o+S>M9xKKon(q5M%+}^L1gSi+Cc~|GUuj}96sVE z6D*#x6CKNjjFT8`fjKvsWbv_9IMPC89Av)@OR!j+!D0;7-;DVRwBVvrCj=*%w&R1g zlO7*!g(*AUw_*`oM6S}-U1*3{u>^;AEjNU3ng*M(ez7SuXUsaOG)H8dWXy)SW=Q80 z5nRyaTvU6J4lNo689c!ep+$Y$H0)Y2_FJ`a7LT)7k|Toi`Xo#Ey3v>oPdmu=1(&eo}(w{K4OmKjrc7?;x??4E&n%JteXytbcGb*|*QP#k7YS=Ct@3K!KY{VDIw7+M(Jn?|3gg+B)T3`QhR4V=#38 zM_2{3qM?u6-q~>;5F4sfbpr%IrqG(!59&vxMm9o?|wEh>|1&cNm_pc)imQAeZW2JjRqy#zeUqN<7`TRNX>CRzb!MSP$R7Qj=5@ zKtBNXlm>S}QZH;#K%l7q2BZ51#|Z|A2eFQS53ct!u%4Da#hr6IDUyp#y=LKHf7vj|j If`FcX0T+r9X8-^I literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/81.gif b/static/img/Tiles/GrassSoil/81.gif new file mode 100644 index 0000000000000000000000000000000000000000..c2446bd91d6debc1d6dcc029596eed1862931f67 GIT binary patch literal 1432 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 literal 0 HcmV?d00001 diff --git a/static/img/Tiles/GrassSoil/83.gif b/static/img/Tiles/GrassSoil/83.gif new file mode 100644 index 0000000000000000000000000000000000000000..92cd962cb38f458ccf631e378b2cd606f869d706 GIT binary patch literal 1365 zcmeH`-A`L(0LI_bp0=kw=RN0bdw>?&^qhWKpumALD3EQZw6vwI?db{|da*zT`;ZL^ zE1$!8TG(Ksv7l2>6HzhoBQeZyv3Ny|D7(;Lwu{A>I1^o>F>2z4GciH-CwT93`6SQp z;+H&;?y$dYzzodbuXP}~V8Q{DP8hdSDHlw;>6D9(+hNATq?|D6fC(p*+;rN*#OzeY zLq~Zk?tn*T*rW^gRHL+qj`37)4a!tANhck&kx`zEaAcSxgI2PBOfR{a_#weXCmd9l z?XahMYEaxk9h)^vZkS%IZ6B)$SjecIYMZI>Un%dhl0mtudAKa)ViI$SUZT?X3K&WU4*A1JQ=e?-$i4LhxP45*hVFsbi*Z- zax?y1`O#TZz^d~-QyzEF5gXNMA?y0cbUkVsH?)qIbzZSnpQW3pjNwBLM|p>lKY)Z$ zeY;uPkk$Khrj(OzyliY7*4J^Wb`#Mu!?ujG^;st7fDNPi`VoCgj!n5~Zz~~rm?%fZ z9EZA)G0^BALxdi#o+jlhNXqidZahLb82 zL5O1;c!hNDe&9qQE@MvsuvC->yDi71N4!$=MG?~&_Hcny`RXCA2|6$^zmKXQ@3&v|o!xTG6+!8Sb4itS?`?`}}urv(C9;F z1ta?Sm)r8w59cf5`*S?vg3EPQoLCd_f|9la8H5;aL*u&f^Ayl8y^;k`J^f=|-6e=S z7#+n$>~-zdPOoukv!vE|0wom}5(3%K9X5#R2ozYjxxG;W+PwjwC?bT7=Ais4P!%9qwL-CkIexhLEl^8Ejl!3ZN>x}QEGrc# zEUyDXkdfle@LN~u`w}2FzZyEfeEqZ>z$U&9$*3`zng4^|!}t0Z9UblN?j9K#sjsh}o0}UP9JJYN?d|PjV`Iz9%k%T|6B85T zec&CJZq&dv@G4^K}| zS65f>?CjLk)EpijnoOqN-rmm6&bGF;+S*#D)7j9_U^bh#wzis^n+*m-RaMpGT6%nZTv=JUy}iA%veMGh zQdU-0Qc_Y;QBhuAetv##u~>?Vii(Si3kwVNdcD`{JvcZxJv}`+Ik~vFI6FJ@`~5jN zIYy%~FE3B0(|J6e{QUfaf&%dWBmRr=UnJqJ-#!888^}Z>d1zL;h~NqpDI#z~n$Z&S zVTwdT5(z9`oHCRVBhI`V#rXhJD>&@;Q$Ef}QV3(1ndy&Fg!SZUq8Ls3Qn1QP`C5a^ zjPc5+D!Evy%1lH#N(pv5k}3V@0n6Mwv$9GCp$wlMsTB2*|nOjc!pC}|KbNQ(PZ zE>|184Ln(xn$oF&g(F!}=ZYOBD8}MbF#s$$CxSmKd-fU_Q0Z1$Ht(ey24OE=Wh9%F zRv`<+DCn*=Fz8lBA)hoTICq3u>P06FXZ`;7B_!Qc(_j*w;5d0nMUI(ZsNu# z$$)y)W9CcV*kAqT7c=qTn1n2-G$5_`b0&2XfCj7NW^`%>Ver*{#^+3`{bFEXGaor} z{gAF=zjI421Mm<5^jP4(c2Epj@I81HC{vopWPAZHaIWgWnIz*XJDUY~VOcwVNU}Hx zAL_AWCt{0>h$Kjt>KFi$4_-erc{%K`6e`yxKEQd1j<^=*9CNu`+PBwoH)UZ)S2zp+ z5!oR9BMs%HKT3n9kT5-EXE1PWA9$D2dV<1bKbt~trIJeC{RHI!h`_Z*0aFWsK2}3O z8k(l{2;QqFk?=3DR?j!lcEAV@eF1$z#O$TJ4|OyIpy`3_n#M&me?T-C)2TElB{$LN z`hbtikF^2rcfS&VcMnq6$PSJ0 PJP-H#0T`SkFmV50ZWDCT literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal/20.gif b/static/img/Tiles/Metal/20.gif new file mode 100644 index 0000000000000000000000000000000000000000..90d36db6f61dea8086052fdfa92c22d58d677c89 GIT binary patch literal 873 zcmcJM+fPz)0Dyl74scXLrU`1pk(#A5J*%admf-SIZO*pZY_&A&!L1ixoVckw2M(7I z;h?A}UJ&tq!@J;R2TDYrc<7Ci@skgVcySsa6XlP(yz+^I6t=7}i z)8XOa+1c5%vonLiP*YP=Ute#t*;-p$x3{+&8X5?K&}cM+gM%$CEp2UWot>RVqp_>2 zYiw++uC7k0RJz@6wOYNkwdHg=4-O7SMn-mab{ZQS_xAQSH#a9HCJqk|XJ%%mrlvMF zHl$LiOeU+Xt<~vt$tE;PzkB`gB%GTG{ zcXxMHD%HZmg2UlhT3R|fI&!&OUaxm~d3k<*{`~x0uh&;qRe3xf9LMEyd3kyH+}vDc zWhF&X7>1RWmi~(a{xjE)VF-W%5P#{pd;(Y(ScK%--2$ab{ZVs0JqQ4e!N5<>&PmYM zHW$DQ!K-UJ(yZ|h=JH-9pdp<$Rk% zLR?Yr*T!4o0QP-mVJIr5%egVR_MRN^;2+ps9kM%Z`6k{$$KTj zcQSfJFtLt(6T&RcckS;YQbOQ#Mkp%5Gn5ehwlv-kv)~8=)lx>UI6#32iF`amg3DM> zm1&rd`T#?Ewh^@A6peAil;-8~7PpZwcCzmWktv5Wd15S22+L^8oM_)F2tzgzZHbG| iZz)kQo@;${2>Col1q4L<05kEm?-NLrVssu3KS}FmZEtVy?d_d6 zZ{GCj(;FHZX3w6zV#SK`^78)v{+5=OIdkSLSg@d}scGWGiHjC3%FN81Idf)nb8|;W zM|XGk+_`fXFJ8QC*|NsQ#Iw=93JVMK^Yc?uQgU)~va_>eVq#XWUR_yPxqbWg9XocE zmX@ZarES`@>Cc}(fB*gkdYNI+0L7myj0_Bc3_2hef#QUL{eOeF9Jjixf~KIJ3af?? z6TdKrhKwwmn1Hc{wTif;nvkbHzr2osz81f_peC=d0jGp7gCZ{@zk!7VqX-+LfH_AK zv#5-arH?xU1LHgq9Zh2k8C70mUM_K24Gt+MW#v;0dTcC=oKmbhye6WW(k$Gp3Wp_J z9tNuNh_VVwvokX)J((cr#K^?Xs=#tkfX`tHucFwN2nH2LCLwJJhZ_wGT05mBdQ5tR zTAMoM*<@50J}MpRmrxL3`Jk|n<8ZY~_LhWzgaZs>JZw)a3LF|)q?FrQnw=&s;o@f2 zJ8(ka;6Y|_LoI~^j0+E*SQf~3BxB?6tTUPE%7;M@L6{dwWey&6h7<=FXkFXwjmIii!ynCNwuUcXxMBnKEV4q)C$}Pi|{# zn>TOXs#U9I&z?PF#*DhUx{{KT&d$!(*470J7R;YNzqYovy1M%B-@h9+Y*?{k#mA2y zmn~aXT3Whp-MU$`W)&9~FIlprzP|qZ_wTP>z1qBa^N$}tX3m_Mo15Fx((?K9=hdrM zPn$Mv&6+ipm6dPbzJ34xeSd%d^y$;f%F2HJ{JDSs{*48T z`rp5QA3AjC&!0cQz+s>DVw}01L=-uN^f;LOI9Y|+#n_~@ zJnSq&7+f4g6ci1Z_~q;j)R={31e6rmBe$kzts_$-<&%VUqEH;ow9jc7-h^C*OOwh^ezQL?|eAbntR|eXwYF zc(9q*YA~t6iF^B> zoIf)X6+4=kv}V+NIN*G=g^`7gVcQO-?&(}kLU%eIE8@9b{|oQ literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal/23.gif b/static/img/Tiles/Metal/23.gif new file mode 100644 index 0000000000000000000000000000000000000000..a311b112d2de0aeaceddf0b712a0e6f74c957acd GIT binary patch literal 888 zcmV-;1Bd)aNk%w1VHp4!0Ooc8`uh5snwpiBm8z<$tgNh;mzSuhsHdl=q@<*upP!MD zk&cdzrlzLf-`|v!l%SxXxw*NVoSe6}x3jaeqobpRg@v1&o3F30larIFsj27Z=Y)iW zw6wH>f`Xx;p_!SPy1KfhrKOgZmfqgptE;P?o}T37DNnC|ZGyu7@z zv9XGZihh26|NsB3t*yVmzk7Ro<>lq_^76H{wX(9ZwzjsSqN2UMy?A(d=;-L`>gtP& zi`(1VdU|@0kdW=|?bp}Wu&}V^=H~D3@AdWd+}zy8#>Rnxf$;F~z`(%P*4FXy@#5m* ziHV7gjg4}0a_sEv_xJa0ZEfM<;jXT(Z*OmLadBK+T!4UpW@cvl`}==?e`{-N;NalG z!otYN$cTuDX=!POhK68ZVB_QCd3kyK{QT3?)AaQ8b#-;!-QACmkCKv-hlhu5Zf;%fetS! zID&Mh0SOKX0(_topg;fzA2xJo6l};35FA?EAfUj92ofhQEO@cQP^b}VAjB|m0YnP{ z3j!qIK)}a~I)>I188Jb|0UIeZBzQm}!GQ!We83?DfE5xQ6C^}HP{8T~1_MGcAmPEq zhFTicgcO0GL&k{@0!rY}L7_l~3`ypAh%yqGh6X)YK!CtxfPfDdWJm}RfC32?I22S6 z0L+L9FegqxI1r#j34{g?FgTFG00IIjEG)1?Wy+7RSBOZMz#v760T*!Wya9p<2iYiK z)MzjP1c3+)BsdRXAqNXF1OgCXkt9rx1t^x=xG}+jg907~M8NQX00bL3479j#fry15 z7J5ifQ2>Jj5pQ51f&eO%;2#13WWWFg5qR*x2MQ-QT}|*RNl{a^=dtzP>G6wsdxO&Ye5=&!0cFwY9Tn&u(vT z|Ni~^=g*&~PoKVQ*|G@}CNwrS?%A{F%a<=de*Dy_wV1kcke!U z@Zi_4U(?gmw{PFRVZ(+gQ>JX)y0xyZZrZeI+1c5prKRQN<&!2&>gedm$jI2XZ5z;c z41*ge{$ycfVDMtl0XY*CCk*WW8zjt>nZ4TDJ36~Wl^7VhCQMYf@iJ|lIHOHoLPZbJljD|)%Nga_?6_4$Ijqh0v55&be9v$Uo<~1sL&~R8$jfuZxLd1lFO-yWz z0$)zCsI;(%F>;*A5O~1e!fWcMI^lt08#gO&l8S+1!*owqE*TXL$EE{}lH6hmb0j(0 zS~>V_WH=lSyD*6|DL9-~c_`h?!zjfhVer7gm9cQ98pi>K56x`KvMnM43mR81a$v9q E0BJhytN;K2 literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal/31.gif b/static/img/Tiles/Metal/31.gif new file mode 100644 index 0000000000000000000000000000000000000000..ea267ffbec6478ad39ff2ad62ba830cff2c6c75b GIT binary patch literal 661 zcmZ?wbhEHblw^=(c;?CQ|NsBm+S-POhTh)Zo}QkiOP98`wsv)OH8nL&nKGrmzP`A) zc=F`Q)22-;D=S;LaA8eNO-oD5f&~ly{{1_1=FG;%#=gG32@@t%RaGrpwydqKZT(OEWVwXV0EJZ{EDMYuBcyr*GW2@%QiF$;rtRCr-@B z$e2ETdVYTX{Q2`YY}l}6%a*BAr)FhkZQ8UcCnu-Bzkk-OS(7GB0(y;M&;!MvEQ|~c zo(wu5mxAJif&Ehht0cdHI)@ggfjo}@6Q`t*nhLXsnH--6o2dA>MEf=?xhzX+|w}RoOO+4DHtRhSjY@BVqd}RIsfvJ1L7v9K$tFzWNUD&E=T>B%p|&g0I)EY2&&Y-nWTe9yN-yq}p-#D$CHLc+qf z7DffJJgtHiS$9uuU44Ch!r`u7aSjG+ E0FceZW&i*H literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal/32.gif b/static/img/Tiles/Metal/32.gif new file mode 100644 index 0000000000000000000000000000000000000000..0b43185a614b79edea1edbd78da6ae90a49f947e GIT binary patch literal 717 zcmZ?wbhEHblw^=(coxp^|NsAAzkXF#RyH>`S5#D#m6g@k*S~u8s;Q}|wzl@;$B(6@ zr4uGh`10jTUS8g;S+nx<^JmPMF=fh>>C>lob#+aiJbBTgMN5}1t*WZ}`t@sJVPR`) z>$h*;dV719ELpN};li4lnx8*^c6N6D`0?Y@r%!+X{_W}MDK0LaHf`F=moI<+{#{*N zT~}8(ckbNA#>R$*hN)Ah&YwSj=FFK-pFVx~@ZpLTE85!H7B61h-rinPQu6xs>+|cytQlBPMkO~ zBO~L@n>VXhuTD)(&Cbq_i;K(2$(b`}&XXrk5)u+xT3UdCz%W2S@h1x-14B524#<8` zoG`HeZwPN{Zt+kQmlHSCwv-lh;^AgxYMC0YrN}Po?QUzy#P1i(=b}EXg^@vv%~?=_ zl|$BCSAZ{Yc?*NGCbN=&3oEOvhJsJPj%Ef)D=9lB1vM5{dnRkC6DO6~B{*2lxrs7s zhu&ynkTKEWW3lEDlV|Y{dfLQmY|PDh$I#PEO5n>n7KMe6kGAkz!~`%H9&k9IE!kiq zdEh{7iyXHPD-XkxgG|huYxe+_?XbZz{1a3l<~l^iAUK$z@jH|5lg3( zS4)70gTgaW28J$=9|6hEO)PHxlPnaNTR8=t7fpMxz~NA{igb*N=#qwGtzsfwZlP{R z53xwAX&s9@IpxtoLG2=D8IGXFf0S0RT DEi46L literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal/33.gif b/static/img/Tiles/Metal/33.gif new file mode 100644 index 0000000000000000000000000000000000000000..b98b3c89fe5a363b3ace2d3e84002700f1f5986a GIT binary patch literal 700 zcmZ?wbhEHblw^=(c$UKO>({R>Tef`s__4dYd)l;VU0q$PSFis6|NpXO%Vy4;+1JFJp`apL63lbf2FUcP+!;>C-#Yu7e5Ha>s;{MoZ-ixw@qapT6_yLWHiyt#1U z!utC9ckkX!m@uKYx3|B)f5V0iQ>RXyGiT2F_3K+(Tj$T8UtC;VP*CvU!-wzRzrTI^ zcGap?)2B~=`t<4h_wVoAxzp0p^6J&A{QUgF!ooFc)|8Z#Y~H-Nva+(gy!`9euerIo z&CSiVwY8r=f4+6=)}%?3%F4=q{PCMkiwt?G8hym4DA0K zQkt4uTHD$?I=i}idi(k(Oq?`%%G7C-+1aNuFj-pYOk(g=5E8Ogo)DG76cQWH;$z-7 zC)hGV!-#|1%&TXPs<^E?(!o_1@ zAbv!GQ(%EpGn-mjM8JfFO^s6AVLT_7C?D+GjbI7)kaUo-mtOQ3y!-7W#TMXhN8XOLoI=1mKt5kIePIG7Hl}f7kAW+!Z#40Zt f$Ma*uBj>|Rd<_;Ajfo8GQrt!f1p%&J3Jlf&AIvDV literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal/40.gif b/static/img/Tiles/Metal/40.gif new file mode 100644 index 0000000000000000000000000000000000000000..a4e8ea35d0155825fe3fd37156ea115482379f5c GIT binary patch literal 1017 zcma))`A?d60EfRX?~5=Ld5hS3uoaK0>!_vHWVACD@lLyrHLkObS)@r9ySl8ysHjt4 z4l5!mc;BMpjf(fJfOu^t+RY`~eli}@n5f`=C9eGs_WAkw<;n924G&@8<2wRJ@UH;q zbh@^-HjPG8Sy|cM-dyQ`|IT3T9KTU*P^%PT4> z#>U2!N@Z79msYDC85!y5=;-Y1l*wczB_(}*ec9RBWo2dc_4OGU8H0m^O-)S&1qBw1 zB_}7RwzgIxkqitBTwY#|j*ez#X7={>=H=yyM54O7y5izusZ{#*?c1K7p5)}@)YR1B z;ogwX+;=;nh?CfkxN=kfu{QUg<>FH@)TwG#e z;>O0t$;rve%8FjE7YGCi2?=X!YwzvA|C`Gx0s$ZZ%n$g7CV+5>J^VQ`D)>t;L6$sQ zAt!z8e&5e6%+D&PR8FS{-FEbg@aMUelqr~3$S~{sSN`0{U@uu?7RerlId>n>-MRjS z_Z!M!r(5)Uw|?`0Cp3?vO$yeX8xHUf&wTMX=1vtQQJ?QjEGi6JQLhK-!WIqr1q2A7JY^vKjzIRXA)?EADg7fE zf<=o%N=OiO%}eFYg$Um`6T?^>>>n!S5|y3sU5#WS?I{yuEC=P;Lb7K}F(A-@hy9a1j06CAt!$F?fHzJ$Q!lDC7U&ZRNC$f|Os~gZ)u^T9YlsSG>q&bfxq`Z*VkDexeohJf3)RDb-j#tr2v-MDKIuKy zKaB%y)PTbQB^NLL6O%Y2(Yp5^iRI}Lrw9>7yIs0&z*#eN;JG)0!yzIO3=TvPstw5J g?j|Gh@DVDq#xv0X0y?PH17Zw#3A+MI00VsSAD%I*Qvd(} literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal/41.gif b/static/img/Tiles/Metal/41.gif new file mode 100644 index 0000000000000000000000000000000000000000..92c440ceb61816812528499ae0ff9a1b73ceac3b GIT binary patch literal 982 zcmcJM*-s*O0Dylp%nXbiB3-%~aRsq0YmpV#SXa$5;HtDuTitFNx@`>An$mPlSmS|s z4RVM#;)RNeH{N(7UW0_H55{e?ubbG~G~1+)eQ5Q;cK?We|G<}gU;c-A84tdR0WskB zB5-qav$(i8K0faA`343CoK9y?PtWr5^62R3+6@6mgeW@x3{-9Ha6PZ+if;mS6A2U?Ci?QN^^7b$jHdn)>bGKG8&Bs2M2z?KM)A) z?ChA$=DE2!yWMUwnQCfk#>U3_`}=2RW~^3gMMcHl-rnZsW^Zrr;o;%n;9z-qd0kyy zb#--BRn_tFF-1{lXJ^4+&|ol}oSf|M?_XbEmz0#8o}TJ-y2{GR-QC@*tE=<#bBDtb z4u^}2i_6N&N=r){8yo*C1O9(R{~!Fn z;DT&*E+553dC^G`vP^!uh|B*PfL0m8O-PPsM~nCp9FvIHXo5oV^fHT;j$-NA7ecMj z3^7%Yr3Kvy`PN&RKSDaWlA@vFl#6J+s>zPu(de`v9OW>hcql{j+)P<8PAcLd$C+k2 z{5Z}26V?3aUL^dj>%|cqiJ=jizb^=D#0=-5g}|w{0TxH-O|%msn2eWZ_zOYUB3A4h zBwQ^8Xxy7yj+7u3vcUIc8n2_|(Ni{E=6GF5D(O3T>NCGyL|XCapN){5G|^DY+s`sU z0%ZdXq=GW3Qej%0#$Dj?AndyY>@X-V36tQ`quKljftWGMlpo0FVT*;C=FIlJ(7O9x z6=8dR9|2oY8pj37O*kutCQ)x){YoH^(3qVfpRzf5pJ51J!3o^vAZahXzf2_eyz{9) ze8g&d`P~?RSjrGh@E1_AKRzK~#y!b6W%%MOB@_|$r|$?T-5!YX-jl*6kga_kX2&M# zb8x&@53|1Ptu98Aj8PB@0TGSPM4%kryLv7JW&P$2-ls(hgi4H|_Pm1QgcQ+Pr1k(r h#Z{X6;_@5-0Dyn*`*OS}mA4i|Jm!mniYGF+Vs$B4+qtAQy7*yfnvE`OGo~hLrdCCL zxfB%@Pw)osTfFgxd89L2GWT`M!dBDtBlAAX+W%qCAMkv5p3lE{Bu;qF0UYo~4%}{c zOG`^nPfulKrNv?y931TH>l+&z)9G|mQ&X+2tqlzgZEbChjg4JhUA?`%{r&x;qoXx7 zHAbVcv$J!2e0*|pa$sO!Vq(HzFm!Zu)YsRWOs1isp}M*{v)Md7Jv}lqQe9oG*XuPJ zjY_4OpP#R&sL*P)rKP2Fb8}TyRkO3R-QC?~Wo2r$njnbg=4ORLadL8Ud3kwrbF;j> z+}_?^Qc_Y}TwGpWUQkdlJUm=mTievsl#`QlettePGqb+FetLSkva)h`cxbg+udlC< zj*jy4^A{EtHa9nwO6AVZPF`N#($doI?(W*!n%!={y1H^W9LLAUXJ=U~(?{P5xw_zVqU~w3Nc>R%fpX?J2MLrJZ{KXfca5O3m zh7dF$CLt~QPRwVwP+qDDd;JJuaMF`>+@JilH19OIK>80-OBJT$vbZ-uPx021XyGbC zi}1^N7958uWF$4$1XK`>#O!%yAk0-NB+%yoQT`nOGoa9}r&cb};LCw?bxxd6-}X-r z|4Qg|Xn|*Ziqiq@Pzr8~vM?9%kmM2R_RDc9xel1Y@cz;An?%zP7Rr>rlu5MJzM?M` z1ZDvm%Ez2c+zgUcI3AxA?!=`UGM|@aOOy}*CDS!l%wa#kr~xvu%mI`v-YchYhzk(( zQ@e@CN!HbQ1x2JNRayrK1h2q8{!$J2PoiwImhWhX7)v+e`d38)e(?qccSb2CV44uM z1V2<@A-OQuq6p+pK2eE#-z ztsBbFKzHrmOUZYS?V9GacR%c~Vk7X!(Mot>SltE-llmh0>5!otGn=;(cYeY?B6xw*N-#KgS3 zyyoWS*VosPk&%juihO*0b#--jcX!_2-jtM-gM)*Ae}9XMi}v>RaBy&Tc6R^&|G>b& z!NI}G%F5^G=f1wad3kwrb8~HNZR6wP+uPgt`1t(%{KLb;g@uLl^YiKH>1AbQ(b3U# zbad_Q?dt04?Ck7>goMY($HvCS+}zyM)YQnx$k5Qx;NalN$;tKg^}W5l-QC^&{r&In z?}CDYetv$~*x2Rek-aH*sm2>_soHVGJ# z91w8=0RRRas94e>2F3ywC`6!$5JLnD0sshDz#wG70ZU7A7=fU|01*>9N~BE%WH?ergrEm7U^o~7Ktlk&3U>I&;DBm@5e-gQSQ}@Fkq`s(AW$YAaH>U0R#|(8#zoc zLk$=_sDKLvKv2MRP`FS-1q!I~#s?ONki`u$oJau&4eaoQ0{{RZ0S;j7@WBi|v|$EW z0tVyMGORRz<~iTSfIiH1PEXO1p;Vbfee;hrJv}{Z*RE}CZQZ(c z>%xT#tE#FhDk_#PUAk-6u4&Vzy?*`r#ful)w{O34RFY}xYi<;yi| z)+|}Fq_nhj&YU^VpFeMFYnwQ6Vtsx6qD6~t-@d(f@7|)KqOV`SK79D_!Gj00XU}eL zZ{N0U+x6?$H*DCDn3z~tSh#-u`r_i^%F4>cix=O&e?K!bbN~MRckkZ)@#9BqZ0x;z z_xA1E*V);boSeL8&z}7J{EZto_V@RH`SRu6yLaEee}DV-?S~H^8X6j!o14qa%m4oU zd+XM%0|yRFm@uKEqvPARZ>v_VTDfxNiWMt%?%bJ?k&%{`mY$w|_3G8?>gv9}zTdxp zPo6v(7(NW-0>z&!j0_Ap3_2hKKykvr{=Xroskx=Kjfq!Hp{=KvAy|>KcXBfmznZG+ zlqn46VH~EjdzqBX1+5k?YGZJT*3R%;)uxwj#G2~6sfCx@CW+7AZdVhNs0A~dp-klA zoDeZ%78Yi8^|M)eEYb;1DQSm!8ThkxMPwaib}=dP3)vcRamdK-Vh|M-@ROI&*RkKk zRM0U)!Lg~0nKR--uxcLTbbdiIi3<}QCuy*Sra2fGJv-2*$i{Xg;OYYoP7W=DiUo{{ z43mY#bteQEDzdXODVu0WTyPa>VD;i#kP)ch(7^0woRjoH^=KofHB$w{B1W%1lZa`z zA`Fr`*;yD3Y8E&yc%-H)rm|qhf&~sO9NJokEF3mu2nlIwa<~{WG&?aeD{yHP6f{oa YHRIBYX)t_nRFs8Prb2Rpf&hax0Gnq!DgXcg literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal/51.gif b/static/img/Tiles/Metal/51.gif new file mode 100644 index 0000000000000000000000000000000000000000..dafe6a5b76acb57d656f37a649925632469a1c23 GIT binary patch literal 701 zcmZ?wbhEHblw^=(coxR+>({UU|NqaNIdk&l$unlmm^W|Uf&~j^&6+iJ>eT-J{_o$v zPntAo+O%nN=FI8s?fv-iV^dSp;>C;S&!0bi`t*12-c6Y@<;#~ZeSLjBJw2a4f9~k$ z`1$ka@87>SY}l}T`SP~5w#LTB*4EaA3m3k5^XA8oAMfA4pF4N%vSrJC&aMXU|@@Ze3?*=ZY08CQO*{?c2AB6DMxjvgPa7uTP&o-L-4i=FOW| zuU`G&!GpJN-)`Kvv7w=1$&w{4EiDxl747ZqrKP3MpFdx-W=(f@cYS^RpFe*-eE6_x z)vB#qx4wAs;@PujH8nNO&CNwcMSJ(|ef|3Nwr$%UK73ePTMP6)!@vQ>pDc_F3}Fm9 zASZz0gn|8kLs(ODOKV$uM`u@ePj6rUgo%?TPnkNIk&$7VnT<04tjQ+kVq8lXOkm@a zH`nHpkzU@*q{PgtAjTl=$uHAqsHH2U5#X#UCMmPk=8-RZ@kqn^T@e zPTh{r%|ugNOqxrC|5m$^nvRu{fB}b~7Po@GueA%qj5hr$4u?X;gH6mVF(M8MO%9Db zA{r?hgjPE=b8)c5BqS_wZckw2s(9g$aD;6tQRN@HW=`t|Fl zO`A4p(xhd}mMvJYATKYkt*ve4%9YK{&54PL1qB67O-++0Po6t>ZcR;1Wo6}r2^0SQ z{aaB{v1rkv;^N}$?CjO6SC^KSrl+Tum6fHWr1bXo=H%qm*4A#`ym`iq8Gru#nLmGi zXJ=-O#2ySloTE?v5O`SSk${(yjh#fulWx3~B8^|iFLY}l|NH8nLqKY!M& zS###hNlQ!n{rh)!clX-0YnLopQdCs5Zr!?x6DL+xRV`e&aO%{lF)=Yf-!Tksp!k!8 zk%7UBK?meaP@FKZ|83Cb)8u32bapUgl2GE;viF)eX)+TpD-W*_o0*Hdq%gz6$&0-> zCD?hH<&;%9Y~(!`YAu<}!^13Yz$Pyz!?Iw}mPx!^wqoim0=jHgCJPx3O=4tZVb_(A zQRcThe{qtKp0)y`h@uFa;@x{*;>@N_s*)lsDz9F1F-eK4ONy!~ecPjG@nDey7l)c0 z%NMqXZ9I&!LOwS(8q8u4uvF492++T=%Y#dV<$}P1rilU4c3x5qDUHnx7B;Iwf)+Tp zC~yd!21{jI*s}5>n~Xw3s07ox3u%*_ U4lG!`K`E_uql4zO5CsNn0E#iuZ2$lO literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal/53.gif b/static/img/Tiles/Metal/53.gif new file mode 100644 index 0000000000000000000000000000000000000000..8f86ec82e8b3e245708353ef0a95eb7a07494720 GIT binary patch literal 694 zcmZ?wbhEHblw^=(coxX;|NsAAzkW3~Ha0ai{rU5!v$M0Nre?~NDIFahU0q$>-QBIN ztrZm&6DLk=Z*OmDX_-HN{)7n=`uqFq>+662{#{sDxNzaZHEY(aUcLI`$B#dM{+u^& zUSD5dZf@?kZ{Ma*pFVl=d3jx3-K<%& z{{H=2P*AXR>C&%XzgAXOmX($D^z?lH{(brK<+Zi7>(;HSs;XMNc=3-PKfZkVvTWJ1 zyu7@$w6v*Hr!H8q;PdCt+1c4ESFUVsZf)h2WOiXzn z<6t)O3s7T|b=|@!DaBwbtI5RUEzBh*V9LzFDj>k5t{WK0BB!%OMAyb&mPwVJi{D6| zn@^CL$>8Zz#w`p?CW!)v89G_nT{JWfG`6i`75(*f@l52Wu?9dK0PIRpj&ba*92AR1I!1uW((gxG}n9ky1Tn8KEJwq Ndi(nOyBZl7tO50~>)ikV literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal/60.gif b/static/img/Tiles/Metal/60.gif new file mode 100644 index 0000000000000000000000000000000000000000..86cdbd0b47b145c628c2f7063c74422a1efdf90b GIT binary patch literal 1431 zcmeH`>rYd60EU0(oZcz*AeGw~E0>HesRkD{=xTC6Vco`(Zki>__|Pd~5@j52S^?o4 zN~K(c1LY1%Tak-^R^={`Lt7AV3*9h*Ah!k>9pC`P00Lq9SM1B)f8fdcym`O;Dm3uq z&+fn-Y?7e1wpORp)z{ZIHZ~dzhKCOy-oAbN@#Du$O-&^wB@GP?_wL=RuC6XFF1~yB zZg+S0{rmUt+__U)T3S?8)ZX6y=+UFRyu9Y-W{RRnlB}$()a&(CRaN=<`9`DBZnxLf z)jfFdpslSfCnx90lP3iQ1r-$)ot>TU-o4XkG+M28eSJMMGqb$BytTFU)~#C|9UXmr zeJw35OG`_GgM$`}B_kt4rBW>}E_QWw_4M@A)YQ;4{q*Tmf*{_!c{4dVSyon-l$4a5 zoIEo#Gc+_bJw2VBoxQxgoRyVjv)R;Y^~T1=*w|QZZf<&ddVhcawQJX|U%$S!wWUxf zrlzI}3ky?HQl33~rc^4gUcI`%zu(*2o0^(>6fK@5F!3h9B+!jqUqw)z=)kh$!{OL$7FX)$di9ICZ!DkDD5Vkr*8&kM%Vd`Z=ER z{CoCdRz7yF7YreW5C9M#nS0#AO;YH4N`|4f5SPQhMs7e(7f3E}6)4by{h=C2^0|Tv zP!P`2UvNx3t2fQNI=dAqY|bXwpX;-gK=~j!4osfgK5+8WaJe2Qa2YKkN#N{>0-7{y z`7nGI3lIfyol!d;#Ncyq8iM>Vf`3$_2yy+sUPr=5_yojqlFQA2CB`vF|3IrAoIEcN zW}TQn0oYJ3YGE-%m0Dyll@5?Dz4^(ux0y1kWQ*0}<&ea!0jV4`fV-sUcMmM7_F0LAHqauRf zg(!HVqT+plH=gfXH6Afa*Dw394|ZFYEHTl>D{72u|A#$)!1LjGqGO^$p1k%1p5UKU zaC>`eu~>S0d;9wOy1KedCez5s$k5PGXJ_a1^mKD`b8BmBPfyR_;Na-!=)l0h!otGD z#6*34{qXQ`cX#*Xu&CSiq%F5i_Tw7b4 zTrSt?bQ>ERrKP3g=jT^fSI^JS%gf74N=k}~iWCY(et!Pu=H}VincZ&R-`_tyJ z+TGnfIy%b8$jHphTv}S%+uKV|PcJMi+}_^CalD|QASWm1v-tHbx!$V$vAN(|x9cxQP9C#is z_afaLJVXyfalsO{fNi_)PJoEdc^z)TIFUDOG`@(60VxP?`Vn|u>LR2E5dJzc}6z52^Fi)8f_MQhQRH74|#oS? z8ss|{wk-&e$RVakm-sIZX}TG_d|3mhyy8psB7c4vAOT5;=yAetFiwFZhLt~m#MT%- zfk+r?KXA_`dn)4nWP#-#d`I3NmMp#k(D_~htSE(~gbss*3X+@jSVDNHc?Tn2f7>xY z=g8i=3D~Ftkfd@93Z&yoGLj;MUo+xOxC_B3_h8UWY6M2oWEIZhkOR!&oA?h9}JPzp?>f66K}=K%Ol7|;?p j$PgvG2fW>0z?d@G$ zTwGgQo1UKb`~4n|Cm0Ow?CjX>_WAkw?d@%fqKro4($Z3UdwXAB-`?I{XJ_Z(;bBit z&)nSH`ue)fW@~6@XlrZR+}vz!Z4HORTU%Ql9UWa=U3$HKe}A7O$)=_zv)SC-+`O@| zq0{M(kB{r?>(9^6Pft%Z8cjSNudAy&I5^O1wI?Shjg5_0S663eXDux)M@L7swYC4H z0RDF*?+_3Go&$H@o8LbHmm*okwGdP6cAu4Cx!bHV9^fn~O z1alZ-oXbeMEhsM$6(D!9;v(_&o18qQG&P4=#)M@b;rCU!&~?_0^@j=;w}`mM$`<6M zb5qzqJx$JHL(Ft(?r&Uy1Z42IQel32Zb4BMBPE^5%dZtF?oj}U@lzF*JgL&e;m9v5 zpUDuK3wE9t#QY~I$;?*Vx$RROR_?wmMAr$GJY^b2WSfA z)r&OV8VEKCS-9KogJ}r9X0k+mQ2=9!Sc)%Sf}nt}O^M)MBQ*I{q9>vt062+{RDX?M zP!z(0Uj;ByMvyl$q=?6P@!Ih;4bl8^8I1z02L^+9NnHlA^OZ+2LTxuf!wqUu9f{Ih z`Qw{J4MkX)>>N$_ZOIo9_cN0kx6|f+-mNEYRjdZ(0T8>|Tje83q{5|FRY@3Watzf( z91@iLD?{}wX}>@qIICG7F7ZEN!{85Z6hHsYG^c@v5c#q&5TQAD3%#TYx;%Z68Sq_{ zyx2^Vl(9eMV5AYKe5=e9XX4*wd|2%zn2bA-(xi`d`VTC4JoY_w?b}EMbyeV$7604) znw=`gBA+|HIrG^*d4iQn&^NjmWP2PB0)^r~{}BUK<*lVCPI$7NQvJJZCj|fx{sm81 BOd$XO literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal/63.gif b/static/img/Tiles/Metal/63.gif new file mode 100644 index 0000000000000000000000000000000000000000..efa86cd42a8c1ee472348ea0dc06ac74310acc26 GIT binary patch literal 1036 zcma)(*H0UF0DymYKHFzwY(va4v^j!9OA6#55KKc;8z>|sYN-^Zv}z-#@Q^k@P0gNO z7_%|c?7f%SQ{phA2vLbhRn#{ig|flSvLxF42mPMEr|+0&7nwn~BYbz@&Yiep58XEHQ@){c(RVr0=b#*~OL3?|9Zf)eK>FI@qg-WIJ`uaK}BO@Upp{1pzudgpPH8m|Qt*oqUbab@2xj7{zB`GPX zzP?_o)eZ~{TwGjKR8-{W=XZ5=b$55`bULY2dT?+cm&=Qaii(SiJ3BjLVqz2uMP_DZ za&mHFVq$-Pe@;$Ld3kw!eEi7B$mQkb;NW0sX=zVS&*tW4NlD4@@bKB$+1A!pTU*=Y z}yz8-^MIOrbKFUb^KUAFDjQkrqN&KMR>-_xT2c9YJN7vvpdb zt#Og(L*>&qfijgb%_fq-Z2v;!tef_LCKkagt|Tzj<(+;u)rgDn32dd5j5=_6!y>(0 zN|)#ZBJ`NwTa}$-A{%=LtEr@Gx)>Ki{z05C7jZEbEM!}m;pp5ONRF`Szg9?fGXFn4 z@0R&$FyO8DfI+dLnG(|^69-rf0)<2{=bKUFx^oFWN`bYE-n*35~ar9+Q+8bvhum5B;vzgiYi zLLUj209A=mOh0iG2%s?Bg+Q=G%T)HALLI^S2*G_Is2}%1gpM@;F!j%7I3!E4;3vc> z1WHB8V#pswaf47}<@L26jl`1*(C>5xg5k@v{SAWu2wb&!J$@jEjSzt^go^QbI+;0fhcXNk%w1VHp4!0M$GI|NsArii)D5qMx6ibaZr#jEs$qjf8}Rqobo{W@c_~ zZhn4#`}_NbhK6fvYlnx2uCA_yg@yY1`gnMFfq{X8gM+4~rv3f>q@<*Fc6O|+tdf$F zkB^V2sHl~dm9MX_adB~XcXytio~x^?prD{>X=!k9aDae-j*gC&mX>>adt+l`i;Ih@ zs;aZIvzM2bb8~ZTZEc#Gnvs!_oSd9;a&l#5W&Hg7b#--}otyrNlq`M85F&#jk%+`}>lT zl5cNs?d|P&czE^o^=)l!cXxM=j*j>D_j7Y|fPjGb`1pQ)eu9F6si~=Xd3mR&r*w35 ziHV7Jc6OMUn2U>xrKP2rnVIkJ?|OQAq@<*fkdTawjH;@th=_=wprDqPmSJIG?(XjN z^z@I9k8*NygoK2Ffr0Go?D_fmmzS6G^YiKH>Few3@bK_|e}9~uobvMWuCA`5qoe=- z{{R30A^8LW002G!EC2ui02u%o000K5K%a0(L?l2OOp37icz85RPC%^s5QyD{@-a*r zA&jOm30R2<06%wO0SXEM4-a@~6*vqV0u%uS92pH}heH4r z3=SC`1rY`u0t=Ny0}NLL2P7vk3lO8EY7!#~aYq@U# literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal/72.gif b/static/img/Tiles/Metal/72.gif new file mode 100644 index 0000000000000000000000000000000000000000..47715896b3fbec087958a44f6f3a500cbef9caec GIT binary patch literal 606 zcmZ?wbhEHblw^=(coxp^>({UU|NpnPwpLeHKY#wbxw(1r>Xd0Vz@`TF(it5>g{Jb99vo4ab&sz;9=6%-WQxpU{)vuAVX z&i(S`%fyKjw{PFx-``(ZS^4zo)A{q~_w@9`a{P}ZZW8<}J z*Z%zZlbV|P`}gm4>(>4F@uRo5clz|{d3kv+UcBh)>MAWQ-LYc_Fa#I|2q^w!VPs$k zXV3xJ4~i28_T3HPP0cN>ZS5VMUEMvsef<+APMSPr>a@v>jMEr=J!GdaI0v(+O=e)> zXAw4^#Hb^n$tf8$(VNH8LP){hWC8<^I-jGEjD$}=gSD2Kv=|qwgi7CXB_%<2E-^V5 z=3WL_2R=UoWi}ZmCdnQ~e`5h|JuY^3=@4f3?pa1&w%qdirW$K93>R=I^YUv%7z!yl yI?IYriU|l&X=~%)uv5?wT*@RO$L7Eh(DI0jNnTXSMJ|X{{8pw-@ktS>h0~FK7IPMY11Z7oH${^gwD>+ z_V)H~-@g6%^QWh$XTydKbLPzX`0-4J9qBdwQHN2nr6LC2w6(R>*4Fm)^fWg&_xAR7babfIYL!aW-``(ZSy@m}pwVcChljhnyGu(; z^YZeVnwnZ#S_TIPl}cr2XXn`1*!1-D+}vDQSy@q0QAtTjV`F1iSJ%+cP+wo)=;-M9 z`1sAu4MkCfg@yI?^{J_;H8nLA6&2;><@x#fb#-;Qxw(^*lQ}s#a=Cn9U|?cmVq|1Q zCX-cHS1&Iw7Z(>_TwIVOnUh?}%G;C?>=fHskrf@CkB$=HSp(ZfwG07zaH6+6MLyb-s7YFS_fiITaK2aP{=I z;E4Ui0rzZOEnbBNtCT937WCNM%hA);*ViJ*-QDub=Q}T-mAwq@l!!!Jl8*DXC!nyT50A8Xu*&fVfNyV0#0-v!|5c2aNJd$> z^WMZrTl9IKz3#rRuGW$igd%R5-}NK~j;*3_%{!{t{GpkkN-LRXAojl)eiHF1hK2s7 zdDdD?L2`_bL^-M70hr}t9-bs2o{*+IL0FjhS3!QD9g3(iQbYm1i_;mGH2Rn()+O8v z5LvJjzfdRQleu^9c=N(YXub?H4{bFd5;=`aaaudTQw#o|N>jMz-J6hNj| zjJx2AI0MWU{0Sf!6ykv9PT;~E+FK{F%;L$b10kyYQLAU$$6#gV;Q&z!l}1H2zHAQ(L4x= rjsZ&y1Yi>0f0;g>cAyaBUa9DXUFQL8>^6=AmdA%h4#Q>vLxJCaq%4ROGj`2xz&Hz5YyvJpKnis15MlyBCZ)|%gd8axazHhU5IZx* z2D2M5VD>Tlj@frGHj7J(AW{!GRYX;*9Ftp$D$(Xo^!-qWlp`oGC(b2`l#i^;O!NI}d;o;fY*^Z8mwzjshv9a3P+L@UdlgZ?8I3_12X`0^H z*jQLtn4X@t*=!XR72Vz4jg5^hEiD5B1I^9NX0v%@WTd^ly{oIsYPB{rH1zfLb#`|4 z^z@96kFTz-PE1Vn_Vz9pMF;RaI5>_4T{EyOouddwY9DMMY<4 zXC9B|{QNvGFYn;sz-Tm56qTQ!zrVllcDoA-3QkW?udc2N3k!>jiw_SEtE;O|PEMRo z=kf7zZf@>>O~C&}*xv{QKsHc(5q^0BSl1*RF1RI-Cq|1PKMa%cP`PhVAlt_`@yQ)L zI37-qP2hzGs<`N_V1HjZg9-bl#PB0IJotVGgY8Evy2jf4B4M1gK@`O-1KSULiC6FotI8kb Nw-qHSS zjgx|EA!*zPt&mYeiUc`Pmlu+UEHAG5o^~*w!$dpo@3Q80A$~0P?5k{rym<~7O zP{IVoZyM!$7!3*d%#HAQZ&8 zHb2)#!D^Dj`TdDSIc#SHMG#sc^#^5;#EKGWha|-$7CconN$f{P?%l^(v|a~e7!*R9 z->TdcQ-I?eKJ?))LMX#3X@gPB;CFikry&MUaSul;L2q*kQ?nNj-f7JqBl0U5mX*WM51H|Tlg%OrZH3Lo8gdtylCfxuZCENnxB;n+z zDk#7nnev!8LWPb^WitZ|Ge}xR%KF{TBZdhJH$Y7wY%A zK;>eIM4yr&FPn}jBt#bkglO~!#_y~@KZJEjdIJy;j%VeFmLynDyIv58KW!mVSbXV% f=KJ*&tG=rTir~Jcov2JR4RL)cEN^-!0KWMb{wZPN literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal/82.gif b/static/img/Tiles/Metal/82.gif new file mode 100644 index 0000000000000000000000000000000000000000..569efe30df3180e075cbdd66f37c93dac7838248 GIT binary patch literal 1062 zcmb7>*H2q_07ifJUSInH7qGz$2Lq;zQsPom+5kx*HY&MVWir{+)Ko=9MN3PI zTrM9P8k(4xC@Lx%85wD4Xb_9V5{YDXb~Yy`XJ%%mzP?^063x%gXJuuLj*i~n-&a>x z=jZ2lcXzL@uCA}I=jG+8)#~*0^yK8^<>lq+>FLbO%(b<(($dnoxw-7@Y@twidwWX| z#MahUd3kwUT-?dYNos0pMn*lqZ#>V#c_WAjFZf>qtt4&Ny)MzxZ zv9XJbi+6W-H#av&M@MOCX$J=fQBhF~3ky3tJ1Ujx`1ttn@bK*HEIK+mDJkjV;^Or5 zbZ>7@AP^)ZBwSx#e^dtlXErw^2mk?Ke}X=J0w@mz>`sC)e@{JzG3|S2Tavxo>n9`& zj-POz0jSm>O=TCvCx$T>mY%%?@%M){)_c9z{ zFb-b-!nZZ?Dy3VYeq=Wn%#I)W8xygo(ERB(Y!_EQGYq4-nCY|GRA=5BdlRyrDgI8X zh)_cq&B&YzSP)8woqR_``6#MmfyF2lJW?Kmh7+8Mur*Z2!RmPTuXPB)p|I+SU4Rhg zI!<}S3v;s&(mdm7pkQa`8s+=0{W&5 z0!1`qhu}~yS3*MV=rI^8OoX5V-;($?1R}NxbSzQvlmJIROOVzp_SZ}qL)M#AZ_-iO zql-vuz~cEE(aZ^HfX0>(L5A&ej1T=@BeJ)8{9a37Ql?h9K;5%Zk#T(k@paJO`eJy{ zQww939lPGZ^24r1?@K9nh0Mf-8j3YHoD2c?_guYz$Z&7)ImVOVj0pj3@>D>jGOY(7 zvhlAT3Za27v4L1Tm2-%XLDfEx853;Ceh7|V&A>S_I8XFd2Y};Qn|}ylBQD2|`9iMt z(}yEDDi>G|NQRdG_~jdXO{Hpde~btSH)CXV?}O(hdqT=LA2@4t_?;@MiSDf?QBXPu zV7e&{8sv+lAQjA+@QBnG^z5TB&JXg2bbB}uIV4`iMcxJmMlwQPO#|4#H$;S(x68OJ G@a#X4FPn(~ literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal/83.gif b/static/img/Tiles/Metal/83.gif new file mode 100644 index 0000000000000000000000000000000000000000..22efa788241825f0c22f5f94999a74e8621fc830 GIT binary patch literal 1077 zcmaKq>rYc>0Egf6_MBcuOG_=%YQ;hom|!T$q6Ng9(xSK_GLl7LagzoXdS4Gj%VO--GhojRSaySuxqtIK3E_4f8YeE6`XrKO^xqP@L+bab?_v9YSE zYI1V2t*x!Uzkg(8q_wrRuCA`8rlzB#gCxn};o*USfzr~_p`oGT;^OA!=ANFO`uh62 zckimz>cYZ8tycTs!GrPf@uH%l>gsBP!H|=aGd4ChI5;>lF`?0D?%lh0|Ni~i+1awP zvPX{|J$dpZKR>^`y!_zcU}|b=ZEdZ#wl*&>FEcZ9etv#>dU|njv9hw#Y&H`F@#@v9 zy}iAXl9Gagg52EPnVA{8-LBW`_xJZzDphuNc2-u_vuDp178aJ5mu)ti)oQ(S=g!W~ zj>Tem{P=N7O3Lfkujl6G($dm4H#eU@e}3b}jijWc_wU~?EiLWt?rv>uefaPpH8u6! zyLTHK8yOiH>+9=ErE+CuB{4Da_U+p@Z{AE!PTt<$UR_;%`SRu4w{Jgcga4h!KPUn~ zI`I2MeQE+|2SmDBlOB-}6vt$GxkBv91rL$inea1Ob=WmU8t{b21r%YVoQ;YilY9-* zh~y}Qb~4<@)#;=^=7yl(#QvfUi}*2)hOn=QeU2Xv5l?yu!oQEzgeCqIbd1aN55a=H zF8aE2uoFz*ke}7kYe7LQF4fHwJLfO=_zU~>uzQ2KTSH;-{AqM%xE{>ZLor18salPe z#mFK8G}aQ~8E`~zNEOQ&XD^Gc^LHRdb7erK<2NzW#gj|lx^8OMR(f4NM~ePbS#?wx z9pe+P(Ygj5;__d};0#30HuaeT+8~V&(OY&-!fc6@E(9;kBwm8?4x-EWmk@*^hNnal zN!w>`EV>WK!aeC)Cz`w80sshbrAUlGNyriQu{cnMSk(jv^%C+)j+~$dcrzWDZ!GZ? z5Fu&R+f)cV8u>fjWCrD*`$dxu7dZ~GL!x%0GW1d@b~MILLJ|^;Kw%L-AVFQgAQeoh z5~v^=SoQDUsjZY!7SGu}r6N_)@Dy`YDYJ&r+^EthIqIz-ahfv8KcaAs&GIk_`-y+@TZPHc+n{>1aj0zB4G0TG;3&Wn;hvsC2MOIOcpT@1f;Jne22tmq;u!S=q56*d o@pOojP-MZrl1Lz1CIJY=BgbTh>=;fhGN#s9XaTDZnFs{`2daUsS^xk5 literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal3/10.gif b/static/img/Tiles/Metal3/10.gif new file mode 100644 index 0000000000000000000000000000000000000000..c7835c5dec99f9c7ab39aa1bdbfe01a8065fccee GIT binary patch literal 1005 zcmZ?wbhEHblw^=(c*elc*x1P+wo)+S=OO+}zUA(%#(;GYxw5RRtgx`KqN2ja#%A^E)oa$QS+#0a zN=iyrR@S0LimmH*4EZ;+qP}eq)DZv zrBP8)D^{#9H8r)eva++YTe4)y%$YM6FJ5eBW|owcWMpKtef##Rs;ZovoGDYL#KgoD z6%{2XC!3g<#K*^LYimDz_;B{@*{4sRo;Ppav}x0(PMvCKXqcOu8yg#|udjdV)F}%K zi-ijp78DdjMn*r_GFw|) z2GW7zPZqEy9S{kM69)GG4Z)!zroz_zrV{+h%EBVT5)(v3l==D7)MGOxBrVdFRaE#b zEck_&O`bHBF*}fq_SrlZAnm+m(rdk(o=MNy$xHTY*KFosmt4OPY_B(Vo?p zjgQfp)8E@%#gtQ5o`sE*&B%<6mFG8XTJb*uBt*c)&4<-MS+s;J^ZA zemNhLj0A>-hnP6HbAo0rIM^g0rkx-n;H<#F$i&JeP~cFygqc$y?UKdB$L(AUiB%#O zo@PI2s9}_PaY2LGl|@0~zlOnt0}hRCTwFCq4U@kd4`&thE2+x!h)P8IuAG#^X?wt5J^cdP-)}lTmG!iXMzJ06FY~J zbcM%020dn_ybp2$i|cZu7^N?W1zb?jm2%u;(86lllF-P>5tZP`!K3w}MOfV>B0(f( z4+Aq({EY-BNqL!sR!)rt4(FugZ+vJJ;@HsWBoet|0TT!7i3i*a1{@n$b(us28~DBE zd_BbAyQP7J&r@eZBLla}%|hi%*@=dVZ)j=Ym$uyLN4CZ0yF38<#9uVq;@d zSXj7d(V{6+rc_r~*VfkN<>jTMq)eJL$fj>WMpKdr>E!U=5F7<{qW(#_wV1IIdf)IR8(bUrK6*xgM-8W|Nj~21r&d> zFfuU2FzA3R1jPvh`~L>-nC6z&w)U1V{*IoW&;X6zNiEjCuI!U1SxPdQS@k~!^Rj>nQ%!KaTX`%-3BUBOeTy>4BRtT7+Ug22%Y5; zFj~IA+LT3*lT(~?o1^psl{pOjYZw{yL?iiTDylFDFp2UrbG#N%zaVwCs!_R7n2kv; zf}OgQ4)%%)b%B;)u&taY8EqLTvWg@q1{3>Hi;G#C;N@G_VPh&UuHc&xw| z!ePNs@bD0~nw`iVjm!g$3`-rksBX*Dlk|B0B3^&TmS$7 literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal3/21.gif b/static/img/Tiles/Metal3/21.gif new file mode 100644 index 0000000000000000000000000000000000000000..937e4913ec6605787e1c29f93a71e93f4211a347 GIT binary patch literal 784 zcmZ?wbhEHblw^=(c$Uo2+S=OO+}zUA($v({*x0yf)27XvH#amiY}l}&zP`S_y?xcH zRa>@fS-W;^XJ=Cc{uW#kbmEGOladB~FWo2n;X(}oz_V)Ignwqt>wX0XJuB)q?IC0{lMT-&>6W6R+ zGhxDng$oyIX=xP{6ciN|IXOA0si|pbXaofX)zs9)#KgF|x~^EUB0fGoBO_z$)~z`? zIR*v>j~+d;v$IP`NXW~}OHWTXGc%h!d2(!Qtecx#d3kw7MMZvozPr17baeExWy@yI zo_+fC>FwLMpFDX|U0vPB$7jZj8H$RE!NI}B#l_m%+E!Lp3JMBgVPU1Er70;XmoHzo zw6rWKDJd*0tg5Q||NlP&4S?cL7Dfh!WCk6O*`PRKVE^A>@6XE0#>2|d%El_z+1k>| zp~dbT7{|uJW7E;r&cVUPCM~^4M@AtsS&mm$gqcNyQC66Ros(HtWGkbYp{a6mGOw5= zlNAFq6E~L?<5pp2a|TA+u!w`nQXG=no(v3vTndWonHby@84^XsZzOZ`vNLjWvM@4p zvNQkUWK@$dYS@{*;9yJx1D}Y^548i04eTriAqyVr&0ynZ5=lA1;NZwm%#^k8hNF|$ z(F7iefQttjow+$>gFGf2ILJ6%S=Ep2b3s!RLngDG9E*a3N9!D`<314v4W1ngpIl}M zI5K5k@)uC3=}=&FV&ULh=ksx*h_nqWgGF7y1f64(BvW(G&Z`i8aGSxTL4~0Vg`-YYg7orLev~egf@%KMuTzZ0!iSNLJ3PnljmHhlH2?r8)6i*gbn^2TlMcDA;* z_Vx93b#-mrxUr+7BQ-U3%a$$K+1cIQ-TnRjH8nL!NlC@U#c642y}iBV<>hsCbv->j zDJdz*$;kx;1?$(Z&&kQLv$HcdH#apk-LYdwQBl#7B}-~+YfDQ@SFT*SYSpTel9K%V zdtc;9|ty{NRSy>ep7EYQpDKj&3;>3wIHa3$d zPp+z}iiwHQ*VhjT2}w^+H#0MvIdkUh*|P%!1D7pZW@2J;|Ni~s$B!>vy42Ox)xp7G z-MV$YzP~| z*cq64v{<>XXX|EV7vs=qSa6`3mFuUh zMgVi1jjoxGfP+DvvOR-_nT+s-#$!iA4FXIO4k$9S%85vPxR7{+v6b7;Z(UPD(t#uF z!dx02+no+hkWngGx2a$uQv>s!q=($?jV+f#6}3!GOh`-(=i`ys@}jUby_K1(#V^Al zk*QU}GxK!T&BQ~QYZ$mV9X4o%bGL{YncYY}z;fW;zSUMWHyZdk8MGuODa5Hdx;3)# z>x4{bNdBb7BW1RrmZ5pUb3Sp7n%fs|eqN=uA~=HMQPm6$jB`j6zUUs4fZum%8$I`@kJ literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal3/23.gif b/static/img/Tiles/Metal3/23.gif new file mode 100644 index 0000000000000000000000000000000000000000..b57a1695eba1d6ff2715e57cc9eaec5e649c7a95 GIT binary patch literal 798 zcmZ?wbhEHblw^=(cvj3%UtizU)YRD6*wE0>*VotH-dhvEb~!mYxw*L}CMHHkMvosqUbJY@wQJW(N=nwRUw`Y?t+i{{?%TKT z@ZrM;4jeEwH7zYIjf;!(@bH*6ZJME>p@V}%e0=+S++}d0t*#E-o&yv9ZgRElWyDa&~rJym;}B9XodK-hK1t%>@e< zSXfxhpFe-yx^>sDU;qFAKLZg!@h1x-14A)`4oEF1P8it#HxxHDx3so3i?nxj$%}UP zH}m@iPv}>OlHi%z#b>V0E;PH1Up(6~S$|Orzr3oHoW{yk#cR|#m>J?+H@lhG7#ezU zv0JS&;j|YKi00*HPhF(IsmjW;-xOsos`Sh_GD;g=K?F!`XcsG*}pNkBnh)7lH|+^Ql85*PRx7-AR= zA{qi1T5X-gCmh*0LGf@S7yF``ts4)zweol_sZpG=fOj$*OLgCw8H_3JjOMaNB`+8l z`6g(GD&2i?X#vADrbH{Q4}uA_ozAmF2=@)R(Vc{`0ZYhryCV~p>JrYI* z6&4fH`sS!Jge>vcsKCl4%SDtX{pkuCA`Rxw*2k zGBPr9!h{JH78dK)ty{8W$+Bh3($dmON=iygOSf#FYn&HyQ!&Z@#4kPr%!KhZ*OaB3k(b_D=X{l z>swJ#5fKrQot?d6#R`9a|MTb1$H&K; zo16Fc_L`cS78e&EJb2K{%gfW#GcPaC&dzT0=FKNgoN#k)&>2s-C?_}j*>9$FbRe({JL3rM3QBf@>27lvFxz*b2_t+SuR<4#|y`ruY&^>YC6;=+BzJM7H ziY**kY>GTPHa4&`ax;jf{A@YE!Y1p)v?M?v@lc1qbJvau6P#R|*>qJ(7KEQXz$Br{ g@?wfYg7aj}SuQCB4u=kQC}?z9H6|?$QedzK0Byk1V*mgE literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal3/31.gif b/static/img/Tiles/Metal3/31.gif new file mode 100644 index 0000000000000000000000000000000000000000..94e98661c97ead2a18e538390b49f9f4125ac8da GIT binary patch literal 625 zcmZ?wbhEHblw^=(c;?HnapT7N`ufeAH*eUmVcoiQn>KA~X=%~a)NF5WZ)BVWprD|oOPA{D>22G#Ob7GNrn@T2)n5O-;?#*0#8~I3*=z@#4kJ&CQP~H#R&uZxdtCqW@cLjRv8ASZe|A7u09rJFF`&lRSRYo({>gH zVPV!@VI~G4Lv9HpcVAx-4M7zy4o04hI^2x>_D-UTayIO1*Q&7?aB6e$un9@&vavBb z@G1!$I=ohyg;PFP#_ix&?simc*tE;Q0r>CZ-X5z$&>({T3jg4(+bIE?d`3rtLyCS zoHAvKm6g?&EnBLqt8Hv-OifKIDk@4#OY7_F+uPd@9z2+ml45CTdHeQlYisMm!os+? zxTvV8<;$06XJ_Z-9wzl)<&v$fm%*n~g%*>oL zY0|P~%goKqeSCbJoSYs!cratejN01Tg$oxJ6%`c}6vW5JmzS3xJ$iJ}qD2-K7OPgR z+O}=m|Ns9P1`|;H$->CM5Wt`Vaug^|7})PM1T;0bG-)}jGjlNWGs|;unCi4nX%hAJ z@9pJ~XJ&AmIz>TJpMi;mNytZ)M`Ga=HyJTTb`~Q>HUrJ|t-@l;?Ba|pY^4<9}}b?VfVl$5@{zWn_B)YR0h ztgN=Sw(|1w#>U3Fy1LBF%#xB4Gcz+=TU%peV;dWr;^N}?_;@QTD?2;8hK7dy`}fb7 zF=NGw6(%MoJv}}3_4SJvFJ8KI>E+9pckbL-Sy_4G#tjP#i-{8_YHDg`WMt&#=H9w> zD=jT;{`~nQU1etrA)?cLqoj~+d$ zs;b((d$*yXVOd$(gb5S=|NqZG1EBbmg^__FnL!6+HYiRQ*snDtH#N7kwzYS3c6Imk z_VrJgIBD{fsne#ZZWL; zd6av&d0BLf3|Kh@1hkp?x+1v!qs3j-)fsOoF=_;MuyC=*>$1r@dWOfD1>4JMB($;f za)}9s3dkF?2@5G0x;Xe82xt;$lrx`W@bQBqPb-fkn~FdYqX!=&o68ib%Pfr|T!|7q zH#RD^@bgGp@CYn$WM-FhUoj=%l4FCY3O@sb0;57JCj(y@Q^kZs2Pd$rxxL_EVXy`O D@1o!P literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal3/40.gif b/static/img/Tiles/Metal3/40.gif new file mode 100644 index 0000000000000000000000000000000000000000..0e6a38115597a0068be7d7bc7d8c1f82dca2f203 GIT binary patch literal 898 zcmZ?wbhEHblw^=(c$Ur3(9qD*($d)2*xlV-UtizT)6?48+T7gS*4Eb4)YRG8+1}n> zS6A23(b3!6+uz?`RaKRime$qP)z{Z&ZEamrQc_b>Q&CZ2V`EcVT3S?8w0!w;3k!?d z+S=&o=rwEBtXsEk!h{J+mo8noa%E0V&g#{xSFKvLcJ12g>gvkM%83&vZrr$W(xgdK zr%p{xO-)HjnLmI2(Mhlj_kS+nx;@@CAK z5g#AFY}vBSn>QyWCazeq!ra_EGBR?`oHn5bv9st*))iWzQlotwUacEnS0~on3Z* ztC~CuJ0}AJ<6MnZ*$Q@ST+28Zxp%X$%vZ4F;N{rM#>6hf%p)+bFVQ$ootc$iSlCcU zhhK}&B8Ig?SyhQ$j`1|(ayD*mA-6PUwnMGbs+_4t8yGk8uox(8(7VCJAYdbKYGYDE z6O)jW&xC*l2N>A-bnHqD9vp07n-?L=kZ|BY11qOggp0w#157Mj7ON^6l$$3Dsxb(} zd|2Pi!2F*{BEi9ADGLi{M*>6Pqk|lrd?G9y7ZT<&Fom--rEYX|Xi<>%>F`i+Yw%-Z zSog|gc9=txA;W!}9S4kv-Y~j-m`>M52$QVOo+TL&yZlt$#BGJgDlUaJsC#K zr*1 n?)YT`E4xU+0v6VwgaeHHz%Xd+6p=Z|%o;VvqfNAtfx#L8s1Q6f literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal3/41.gif b/static/img/Tiles/Metal3/41.gif new file mode 100644 index 0000000000000000000000000000000000000000..e07ad3562c10ebf094a06e896b5459a947873b0e GIT binary patch literal 901 zcmZ?wbhEHblw^=(c$Ul1)YR14+S=II*wWI{*49>EU%zqV#^&bcj*gC=o}TXR?uLej z{{H^<_V&%2H*eUmVat{+U0q$PSFf(Dteh}mLV9|7Sy|bpO`AG9JL~G|`uh5MdwXkY zYU1MJN=iyBEiIQWUAlJd+EuGotyr<5qM{-zD{I}lb(1DdvaqmNxpL*2HEYt+(mXso zii?X=Qc{eKjWaSb7A{;E8yl;yufKfx^78WXi4!N<+Su+K*!bEO zFIIEb$<-9%RA6A2WZ=|fVP|FFQQ+og;N~>53eVLNQebys*`UN}&&v^0!PAS4UDZ? z>V7#l5`vkT89dS?a+D9-Ikla#e5F@ojk@0|JG3!6h6B|skPZ?#O;K{w5 zarg`e=NUDR1r6%VyeyBr7D(K7bK;odJ)3DpN8^EL9^ow}$zRu(BG1&%{Y zwyt2=#a_d*Zh-|Ox6Yw0atoD~3h?dVlmD<)h5gAjF9(~I7ZiwLp;JI1?lD5{Etp-6e{yb#4}gPOLiv3YesQITko@ wT0gn&#v;tZ=*+5J65+_I_n_dgnAo%fOkDB{3J$aDELw1kJs{$Sn*xJ10L!j4*Z=?k literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal3/42.gif b/static/img/Tiles/Metal3/42.gif new file mode 100644 index 0000000000000000000000000000000000000000..f8b4b79a77f56f578d9c534e591cf0b9b1525510 GIT binary patch literal 898 zcmZ?wbhEHblw^=(c$Ul1*x1Bw#}P2_x1I4cX!v;)^6FdW!<`U{r&yDy}ilF$s0CoShZ@Eg@r{~Sy@(A zR$N@%#*G^%PMnyTnORy|YGPuNnwq+H?b>C_mYJKI7Z(>tL_}0pR+^cag@lBxT)8qW zEiExIv9PePsHkZ9^5ubnfu~NLTC--&iWMtXuU>6$Z$Dwegy7&{Z*T9&$jI#M?EL)v zDO0AbU%x&tFK^PMNl8gbGiJ>2@$t#Y$tf={kB^Vvx^=6cpI>!#wUw3C{Q2|K)6*?2 zExo+FqN1XrqoXHJo?K8+5EBy<8X6iK8@p)Hq9sd~1Ox;a85#Nd`Yv9)cZo;r1^o15G8>C>-Vxssck>+0(I=+UG9|Nk?P1r&d> zFfuUYGU$MGgW`mN{eMG_F>8wls|2esKfi<=zg&AuH-Cn{ab~-43adz`aJ!uFeAa$e z4}JzuNfiM@MkY2EF&!obPDXiE2KH?nF$^+VDkAIjm|2)4dGxk2=rD&dbF)P7Ik~Et zh%kz4GBa{B%Sy8_Ffz)zadWL#7IKx6G~r}o=VWJN6XIlGVBuupQ~0cYfKfnLq>d*c zJb=NPl}mu7K%n8k>L?bDh6@u68k$%c#h3~XC^RuMF|(+6C@9A7R{z=J9pM0!C(bE**sv3mTj|j8tjA4qENDv-gR-q;|ZETbhrDLE)i8NHO;tNd|)hpBluJZk@&#{jXZ5~eTwWO|9W+M8=uCO3(PzQIR#Gai7XNe_&j%9ILzQ9 raj{W?&&tC^RA^7bAy%!F84tPA3l21kD|PK~5_`5(;}LHo1A{dHjpr?b literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal3/43.gif b/static/img/Tiles/Metal3/43.gif new file mode 100644 index 0000000000000000000000000000000000000000..651931350e850b85634117205f8de3aefd38c6e8 GIT binary patch literal 920 zcmV;J184k4Nk%w1VHp4!0OolBfq{X7f`Wg4e}jXAjg5_jgoJ*6euagFiHV7TfPjyW zkA{YZh=_=aii(Gahmeqvva+&~k&%v$j(vT7XJ=Cx($mw^XlQ7B ze0;RDw0L-UZ*Om(pP$gs(A3n_Yinz2YHD6yUTJA*qobpFd3iK6G+ z$;raP!ZtQG;Nale+S*P|PTk$z;^N|!m6bCyGh$+5zrVl4#KgV5z0AzatE;Qd&d!*a zn3tEA-{0T5y1KBiu$`TqJUl%A|Nj6000000000000000000000A^8LW004OaEC2ui z02u%o000O7fO&$0go09TE*ubw5H1i9b3}!cXLK7bC>$J_5GZy4W|M_88wwFg0tpEM z7F_~0W1@p67&rh~0bUCX15^c2MIo|+D{Kr02R1>-D8QefY2_=xg uLJvK_a03ZM{Gh`CB`je=2qIJJMQO-)TjMMb8j zrfF$u&d$!&)zvmOHj5T5GBGhpO-*fWZM|{h#`WvhTUuIdZEelX&2w{eFI~D+TwGjO zSlH0eFmd9Z(Iwr9_t3l}a#MMYh{eA(F8`2YX^4D7NN_EyCbPb5bPktIW*Ii4!Mwc6K&3H7#4VZ29u#mX?;iy}c7AOlWIsTf26xjg3uOT3Ua9 ze|2?rOiWCEe!jcAdqYFRh7B9GY}wM-*tlxds`mEwy1F_$JG+*amc@$~XJlkVM@Jtz zbZGwk`872)v9YmBmoBZUs;aH6-M4Swk|j%uii+~`@@CAK5f>M?Xwf2DTU#e5r|sLf zCnqQ0xN##lH+SpSt$lrc4h|0H=H~bA-3tf^NJ>gtuwcRe|Nj{VJy86~!pOkj$)E#r zDJV`D*snHtHZ`}jwzYS3c6Imk_VrJgIBD{fsne#H?Cg2dey2`jg5`X&CMG&Y}mAEQ$s^TM@Prj zty|mL+Io6=HgDd%e*OC8%a^ybw6wOiu3fvftE)>#N5{m(WaiA7D_5?}$jB%wD@#gB zQdd`Zb#>L$)KpPXiI0!h($ebe?CkFD-m+!O;>C+=YHI51>y?$2Yinz(tE&?e6Z`u5 zPM<#Q;o)IyZ0zObwPeYX6)RS#s;a7~skytm&zd#s(W6I^k&&LBp8ERwOP4Nnb93|d z_D)DhFgG`kh=|C{%oT!(sBrKz@kww>$MjE_*dG?n!NAAe!NkC7I%$5tfP}Ik zBbz#-j+?B^g89rWo@@$&jDo5m8tdjW2=lmy3-KrgI2-St#4OCnCCJLDX=im}5g)i406!B3?qAl93N4&Jbr%=4Ex2dp&_A$ePWMQ(Nro1S2+)0}B(q+6Dg0 z$qHO(XzEb#5VBJ;aCBl2wbk-?;*{XPAT0eSm!&{~OHAU6nUll^mLu)G{bD*A9~O)H uFtSYB(;(^9(LLQ}rohD$lTWiMaCF~#5cp-{G&SFyA)TjGnXfu9SOWmaEXzm$ literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal3/53.gif b/static/img/Tiles/Metal3/53.gif new file mode 100644 index 0000000000000000000000000000000000000000..cbe71699bd6a9d8315d3c56d8cce3a7e806fa81f GIT binary patch literal 626 zcmZ?wbhEHblw^=(c;?TrapT73=H`}`mQ9;BH8nMD-n_ZBwY8z4p|P=X%a$#PiHX(K z)#m2r8#ZhR3k!>jiwg+}*}8RWU0q#$eSLX(d0ShXkB?7gW@d77vX_@vP*6~5X=z7C z$FgP1e0_a$a&pSb%1lj7V`F0{Oqh_JoxOhj`ihE*)2B}t7Z*D@IaO9xCM6~L`}=R- zzTMW=wy&=*FE6jKuyE(jodpF2W@cvX?d?mJEb;dCc64;Kv$MN#<3?a$;K73jSFBiJ zWMpJvVKHgaq_niO=;-JfGiDq(aA4iKbyKHK&B(~;?(SZ-YE@59kG;LUpP%1_3m3L+ z+xGwee}+K@6o0ZXGBEfv=z!b>iW3I*^9?q>R_ZQB%&xqwtegxC%>5HNCp#PZ`^!r^ zFbMK83ktIKb@wrM>H4vVO`k3%pe^Fz$;Kkgq-@5)!N{R6%jmASW{o)?6F2`Jc3Vaz zQ5hy#HZF0K!-wVcoD_uEMEONbWf&Q`wB&iNUzZec6uHaJ!otqP$Yk*H)pct=6*YD? zo-3=%73c5EmQzSz*qCsrkyA+Ihebs|bB82L&y;{oitMgkIx+$g4UDXP{qn|3Di%0M joa&dF@u%Wv5$D<27R9gboZP(p{CtOIE?F-V0S0RT^YXM@ literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal3/60.gif b/static/img/Tiles/Metal3/60.gif new file mode 100644 index 0000000000000000000000000000000000000000..d7e42d819373bac037ecad6ee2ffcefd4a1c7287 GIT binary patch literal 921 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 S8hNC1E*$LE$q?jVum%9tp(P9e literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal3/70.gif b/static/img/Tiles/Metal3/70.gif new file mode 100644 index 0000000000000000000000000000000000000000..64ee9075ca36b42046848b32491487b95f10a425 GIT binary patch literal 350 zcmZ?wbhEHblw^=(xN6DJ+S3Tsn3&ku*r=hQv3Bj+q@*NkYwIglt|%)jYieq4-@bkQ`t_$zpRTN| zY;SL0v}jRNQ&W0+dP+*l%9Sf!TwEF&8gg@U9UUFFZry5OVbRyuH+k~plP6DxhK4R% zw(QZPM@2J?%*;_R&=;&s;ARqFV39WxYpDX7tD@T67ca>!XR5?EErE-PGkacw m4vX>JCGnbzSH*LxuS+o5v~}C|9XogJ-m`b#{sVg)8LR=LEQ&n< literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal3/71.gif b/static/img/Tiles/Metal3/71.gif new file mode 100644 index 0000000000000000000000000000000000000000..945f889045d76e787de16f1abf17ade9a4dd2cf9 GIT binary patch literal 351 zcmZ?wbhEHblw^=(xN5=B)YPC&YeHf-3kWlK_0QbIz)%$YOG%gX};1D7pZ=IH2HQBl#~-(OQx)6&v%^5n_% z^z_u!R0|6WGc&WUuC8m>uGQDqJ2*HL6%~1TdF|f4yREIQva-^~#>Uv#_~FBcy}i9# zw{G?I^^J{<-L`F8X=$mYrDaxDR$^jea&mHGV`Fr5^#A|=8L$DxpDc_F3>FMJAW4v) z7}#nY<`j5{w1r7a92Vr@nK#L)P)o(cXYB!_4;2hCAz4hx0SqE*+7v!=23w2V_6$(G zkj8HQ)l5);ML>g7t}29sm5qTxio3Ekm_wzLLB^;*M37Zd$y954h_H}?xaRy2Zhb@L hWivSX*0>6YZ3t1_vVF(SUAy<}-M9b1!7Yvq)&Px-fqeh~ literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal3/72.gif b/static/img/Tiles/Metal3/72.gif new file mode 100644 index 0000000000000000000000000000000000000000..e6b9770c5c3c3cdfceebba20cefd301fd0aae87b GIT binary patch literal 550 zcmZ?wbhEHblw^=(c;>=z=gu8-b8~BJ>zg-k-oJl8Gcz+UFYnNyLzgaH+P;1Jlqpke zY-~1d+Vt?@!gu$#G*eSkeSQ5aSFYT?ecRaB*viVPwY4=jH}}DV2aS!5 z6DLlzv$I>caA9w6@9Nd7qoSfpOH19{+~&`pfA{X)2@@vt_4U=&)upGW2LuFIT3W`& z#yU7Sq^71878bU*x7XL#*VNR^o;|y%sVOcluBfO;TU)!hxVXH$JU>6bxw+ZQ%xuGk z4Og#T?da$*G&GElkMHmA-?nYr|Ns9Ph8j@($->CM;KHB-ayTeX7}%Q|T$-9&THD$? zI=i}idi(k(Oq?`%%G7DoXUtHW&MY{Mg$;O*6o}QkPlG4!7kd~Gf9UZ-B(W2F>S0^PUH8wVumX?;4m2KIw zB{MT~*|KF>Sy_`NO)4)hpD*3+i+S=ON+iP!czkK=fy1KgK z$B!>vx->U8H#Ro*^5x6s=H|u4#f621+qZA8tgI|3D6qA)-MDdMMMZ^$g@uEILq|tP zb#--re}8v(cVAzhrKP2vo!!KV6QiP{Iy*ZvGBT2rlNT&laOcjQ4I4ICSy^RgXS=(* zH#IeF-MaPv|Njg_87Tf_VPs%%V9)`10u(0<>`e_0P0cN>ZS5VMUEMvsef<+APMSPr z>a^)I6lPfJPM2X-o+ir8&py>&MZ&~vij{`GxF*A7DK-viRU45>th`)YN@@%&6Io?- zECe_?<#;BrvGLl;GjTBSGxl=}8!$5I2^tHs-0U?KFy~`tW_ZKLex!#-Oi|lfQb^rU NOUTH!r;&ld8UQc4h3EhP literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal3/80.gif b/static/img/Tiles/Metal3/80.gif new file mode 100644 index 0000000000000000000000000000000000000000..8c3cb4e1bee31a6a82011bdbfb9934c50802bc10 GIT binary patch literal 970 zcmbW!=}($>0KoCzb8(4Ct94$r(&?NXt0Gz7M=`SvqL9q|rAv@x@GBf@!m)S+dz=FVI-fhrP2fsY1!W1UR+%4?Ck95=+J01wY9Z9Jv~`jSvxyB+1c4zt#)Z? zX?1nAy}f;JZ?CPbZFhHfb8}Ot(@jlH2?Th6A!O+mq zaBy&tk&&^!zTVs0t5&NE3kyq2OSxQbZfsTU(8d zjhB~~XJ=>o`}=%8e{OE>`1ttn@KB*pq^GA(PfzoBypxlY;^N}8w6w0SE|14kQBe^H z1i=4|^A?2w&;jl{;N25I4d7oZ+3chWb|i;mtwMDZq+M5A&gLY_ES99CDD~+US*+b77E>8t(2x{^!Ve%l z#7ObKxlR4PAS66(`N~URSa7T{=EzH!v5>`0_9L~-WcjoDeuWaeg3%j+C)vwv!WOEN z(c{D<5aT~Xua4ljv2&btKUM6MtD(owWC*+T*eS+oQLr)Mn*wYIPIdB>q!xee`yHGD z=S#|Wp{m;@@&%_Bv4_n*7J~zV;M5n{o|8Vm@CgvQ`8WU0yF@-(*VugiXQLs&^ID=f zPtMc)SZTu_B33#xB1`(4mq1w25hZ@H{^j$Kx2f~w7BC|W`YjPKqt^{rKIl=;wvQQI zD*lxsm~8T42mgAknyG82e@Yuzc46H zc>xlAarHDfwDmNf`u;!id1_u)%F{%K^d}s>mi-|Q4vzyI$u(j1xgee=);WiU0rr literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal3/81.gif b/static/img/Tiles/Metal3/81.gif new file mode 100644 index 0000000000000000000000000000000000000000..e3e1615abeb3af6377deda5f10d1cdff4f9c1581 GIT binary patch literal 975 zcmZ?wbhEHblw^=(cvisB)YR0{($d)2*xcOQ+S=OQ-rmsAP+wo)(b3V?)>ch%X33Hz85tRAX=&Bf)j2si78VwRYp>FF(9x-=yv z<^TWx45R?XpDc_F3{6^=`Z$894N znJp?B5*&Ql6y$wo9B6Rtuasn2(#q&z^MACAo&RZq<{J}~==J}=O4 zXt<;IB!*2<*u`7n0rxc32M>?DSa6`FQ}N%q(sjLIEd07|N7&f~lv@N2u}Nnn%xAO6 z`EZy`@ruDQE*B1tb^&FD4Qw11PYhg`9U2xivMF&CFo>i?aJaL}9$|10+QV|;5QF9i zB`1bhjfF}wS_&Tza5EJgXyh@Nqi}$Qucg3Er`6hM!eMFkDF>K2RVO?+%&l@Ez_G#l dP@#*YM#u&y0rQZ6gS^^vZn{lB$I8TD4FLFqOSJ$1 literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Metal3/82.gif b/static/img/Tiles/Metal3/82.gif new file mode 100644 index 0000000000000000000000000000000000000000..0325698cf4482e7695ce449936196c7a79d104e3 GIT binary patch literal 960 zcmZ?wbhEHblw^=(c$UJ@+}zyM)YRD6*wD~WUtizW*4EkC+1}pX($dn?)6><})!N!x zS68=b)280u-p!jgcXxMh*s#Ie+`O-^Z_Ab~X=!PbCQa(-=-9Y%!PBff`Wpwva-_B(&FOcl9H0Bs3->qhyMQl>gwv{%a<=( zwrs+L2^kp~j*gC%m6he?8Po6w;=1db4lc1oWrAwD)XJ_l^=v=vS#njZ)$jE5X zqD9lDO?&w8p{=d$)~#Fr|NqZGZJ_v*g^__Fg+T{oFepwK*#9>qy7Tk%whBtL@OE_b zO7QZEv?M6G$B0av(K$(?pI=aLV%rQRD=9lZT}CDzCeBC}W)==DXC@|wbWz5iRB>&12fPClYX3PU^v9eATB1MQSk7(f?tP!jm!`nF6MRZ~oEND2)%*f$0 z#kBcgL#X{88wum3o=ogwNl^t4A1&?X7Y?b}kf3^qMcBZPRe00e15NeZMot9<513e3 zrFcRl7@J$$7&JWAyfR-fbssYWhXKb0QI{UBSS6E22E|4u_PqZ$_2xccXkujNJEt0O zk(q6>4C|3X6NUpb8(H~8WD;g5IQnwi2A%mJa5|ZhfhUPm;zDm@dP5gu$OMNrW=1hC zApy4y4R7qv__;9sIN-#CQ%qct@(kdTmhd3n9Py{4w7xVX4(Zft|>FHx*V@OCyU|?Xkx3@h#JuomZt*x!UzrQ#* zIIys=yu7?RIy(RV{{R30000000000000000000000000000000A^8LW004FXEC2ui z02u%o000O7fOdj|gmy%95H2_n7>tfXQ-y^xF>w$e5I7hv7>f`ASdxQU6(9=;FG~Rd z00a?60VFJ|Z0RsR5 z0s{iw01pj2vxJmcHw^~>4h;%qeB}d3Ir%afIxst1`#e4kmrCZ z5{+H|KlBJdK!9BV2?88I&K=gvqFLE}000FI6*V+yuwX$%k`pOJkQd*g{S+uIL}+0120Vf; z8O|ixut0@~3@POB01P&yaKZ@=z>vWTSM<bad3$*LQe$I5aeLaB#4cPft&8 zZ|}*;Nmo}_BoYaS!<=Lr3?&3M;%C!D*J193T zf7-^L<(QRki8B{Vky=~I1lLm7c~MK&4q8Ocaze3YKjK-wk4+D^> z^-9tsWB_np-;<0WtgEf>aVNKAy*SEw8|OREelLtrRc;VeMGaO6l=4E;PF=X;^Jn); z`a{$*>%Hl>BhQ=J%U1>S6(l6!`B8oyJ(pk3Ak`hJUx4`6*059hOt=B*OZ7iU>E3}{_`Gut96q&%?(v=*mspFV~x~uE2Ow0FHD$p4E?KI{@nO41B z*vMK53;$YCAPSoT>B#NSoMz>DTf}(q&r80E4r*AJM22dIaSL>EVof zG!+o!*k2-hX9AT<-@FT$4u6sGTvCVHYXin}5)J5n+qJkKf~+bb&>l?|AoP_g33)47 jMC*x?N>+ZQbhzDjO#Mr17EXpqLolzxpdh0%03ZAd68;Vw literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rock/20.gif b/static/img/Tiles/Rock/20.gif new file mode 100644 index 0000000000000000000000000000000000000000..5c8e91cfe24b0493e7fe5053634609624852db3a GIT binary patch literal 588 zcmaLSNlz1D0D$4|n@*?8Ks$7ujzej&Bvm;e5u=glP#Y;xlTl74CW3fC6O+bpt7)ct zp?fLa*oL;Ww1sXbj{`T22NN~HKVXO_Jb3U_!yoWHKbLoQ?!m3wiw0l--={!2o!;Es zTwh<$<#LfoB%jY$tJR&IopQOnx3^a)6iTI1DwRqk67hI^V`C$e$?Wg%*J`z7GFhoq zwzjr*cXx}$Vm6yyTU(1pqX!2E+uPf*SZsB5H5?8%o6V!6qei1quh&DN5YO}7Zuju; zu+!-TgTYp-WR?e%(Yx7+9QwcBmK-|uufT`pI@-v|HA{1=4)Oo8zWb@2qS zzQDY7j8h5wC-md1H+TKj%m;F!^!4Y`N|@<=j+;&IEW+$D^iVW&_OinLa99)b@2yXs zYm`t!4!BSip(BO{^~#6K!&()p!PHXS(()w>iReT)qE|_-E~wS?unY|8smr=i@QfZY zh)t>iy%_^Gj_ov#kGp*Wr2r42guV&n~mY%AB&w}1PIcTD#FT} zeJSPO0DJxgu|-ks^n{ZDC&Ab9;hQFgwaj1;7?Ug4OEd5u<)9bN&4?GVhoYxI5OGU1 z!;5NBS0F0x?S?-(N2L_9QQxht1dBTsWclYesv**s8J9+Zt z`Sa)Z_V)Jo_b*wpWa-kS6DCYpxpL*gg$w7+o7dCRGjZa?#fukDpFVxgoHUcY|* zs#U8hD=TYiYFb)a)~#DtS6BD{|9=Lef#OdVMg|5$1|5(Nke?XX{vSA^tWXl-AnVE0 z_(Fg|$hYB>K#7=y;2}pv9S6oEuE|j%F3k={6ACOOrbs+FFvEwZwL_s$gF%duU5HOm zL|TN`(2$vfOPPb4fk%{)Hwsmxr!X4poF}*408_C!Y)SXS`{Wi9)78_{yn@xLZ`Zzx!45dxw(W@g~eD!Qzf~W zZ{G>yV3^NqAjHHiAR@sg^{z`pf<-{!K%-L=?<5u;iGqVo_O8lIEk6!BGP1L?2nn2E zczD>^mG6e5M?s=PBZIu0jljo8ioC@JwZ#+Re_xz+rJQDNBP%SYUz&!$T&P+&EFe4;%QMnYooOwJ|X) ub6n3}TOTv}tqa&Yd!4%A7fKCQX{OV#SI@ixw?ix^%{j8GU_y6DCYpy?S+LXJ(;GWwQA+cm5UcI?(XhxYHDg}X<4&oO?7qk z+O=!j+uO6UvYMNlH*DCje*OB&%F2d@hK(CH*4Ebk|Nox>FHro+!pOj2%Af;M1@aRE z+kXf5l?I-^Ed3KWm@OPQq&=7wHC!2l+}>Kv5DnoJY7LsnV9@NU^gz)=kJ%-+dnSuR zLr0=RLjs4SJOh&gr&y?9v8fb0uQ-z|mmD*@6gNMYwye4igD@*omnkC)n-CYbf*d0s z2S1YpuZFaeOy(j}SypyVCTS;mb_uS1lFG}37+mgvza zRcLAE;Ja|HGT}iJhhW6EQ)>$u7+F}jbbRhaGdDGH^1J0I*rc~KGh|7eHxyWOF!H3S TQ^b#k%5#l7=4!JsGFSruvDv^i literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rock/23.gif b/static/img/Tiles/Rock/23.gif new file mode 100644 index 0000000000000000000000000000000000000000..221085e5ed13b78eaf37e85214bd86eabc940e3b GIT binary patch literal 583 zcmZ?wbhEHblw^=(xN62QZQ8WOix*FtG->YKxl5KT>FeuTwrp8XPtT%7izZB%Fl*MV zsZ*y;pFVxclqoZ2%$PTC-u(IV`}_MBELgB`;lha%C$3nrV(HSQot>SlR;}vj=;-e5 zo;-Q-%$YOi%$c)#_3GKPXD?sAe9f9QwY9ZvZEam$U9GLH>({UE?d@H;a%ELjRZUIJ z#*G`BnwnZ#TGp*w*U-?=-rl}x)26j+*ETjbHa9nK-n{w$|NjiQf#OdVMg|5m1|5(R zke?XX{yWSr@X(QJ?_V4g*`PDu*};LKR?0`rA#^6Eqd?c%kE~J-Oj3q{3nN$(7WGHn z(BKgeJG{_9oI!z0np;{_EK5nVj-6l9NJ2Y_L$yOhOI22ZlQUXaP+m)1OoxY?iB}<% zNsO0|K~RyIMN*E5B|w0WjZsj9fuDt$Nkk^fn@N1FusRR3h6-!7$ZRhTISzhVMg(DMl6dtUT$t>j*NoDCWi(#Hz%J214joI zA!WWj4;&gpTDXs}mD4QdL4lJaixMlBk3rx=$3|ZEfCj_R zgAUVD#8^Fe5-%v;<`R$;D+wr2aBSe!Woij9U_8U9$eBUU8r+Bs#< zj0=k#1=cc|HET^VbjX<5d-Tu;S2r#Who3VzIplgu4FfoMREi!gRhZy%rBaHMSw@z< z(twAbjYEe?sgglKKvYF3u84t&Q`Ne+ev29^xgnLyuJ0|4rUhK~RM literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rock/31.gif b/static/img/Tiles/Rock/31.gif new file mode 100644 index 0000000000000000000000000000000000000000..091dd33d1a72675221258e002070cb31a86935c8 GIT binary patch literal 422 zcmZ?wbhEHblw^=(xN5>MdGh4BbLVz;c21cxW%1(0Q>RW{vSi89rAwzzpWfHk*Wcg2 za^=d|vuCeZv0~=TnG+^Vm^W|U#EBDodV0FMyB955G;P|nj*gC5vu4ehF=N@XW%K9H zpEGC9q)C%nTU#3%8dk4f-O|#saN)v@8#gXkuweP}guYhs#>#V&DynV zYinzpo11%kduwWH+S=O6%ga}-T2)24*f9j|~eBRyi^-SOWm7Xwjm{lPAxgKY#l4=?fPwoHAufPft&GclV4LGv>~nJA3x* zwzjqj6DCZXHf`$Esa;)ND^{#ny?S+TZ||f@ljh8sGi%nY1q&9eTD7X9qoc2{Z^@D+ zt*x!gmMv>&Xz1+hoHuXY%9Se@FJ9cz($e4GzjW!+l9H0<=H@kP*3{M2H8nL&oH%jA zh7C0}H8W?h3OQ>dtl~h0~m-@08 z2~H*+HE}Tprdn4~er{D+5e5cv?k*Q2eHKPWHW6lFu4yjP416470)iZDi=3II1eur> zIRwPlI&+E2$@2=z3+!-WXVPU<$z(s|#3U)mz|1ao+Sq_WTUkcA^9mQE5MSm8~Jhd_YlgJ#CZOy@ifI6UNGW{^3@@zlUk HfWaC7CF7K+ literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rock/33.gif b/static/img/Tiles/Rock/33.gif new file mode 100644 index 0000000000000000000000000000000000000000..ecd8663f0d6a0148e96fb3f103d83710be6d7444 GIT binary patch literal 422 zcma*iw@v~99Dwn^S3QazAmAY?SYpExC&fjL1&t42988Fl2?@qHxDZZy@4a`97IJT3 z;-Z_252FjlH}IQ(%XfZpwzqF&fPt@FD3wZqK!D@8OePZwg&K{9*Xzw@vp%2C@Ap?K zm1s0tEEdbzSU|C27_+5+ithJT&_;1<8U~5p0`*m@pwEIiwyFNw%b(oS<=|#`ZF*BZYd9WoV`Kp#g9a(9 zS1;JK{Eo4ZdLiS?np!l6U5ya}0#Irh#jq*Sc7b8=D5HdL9?3$xYd@T!*8GmXrwbTS}vt h!4aC?0hwuSR)E9Aj7Y?Y#mtYM9)GPWSn>$q;1|-xgscDn literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rock/40.gif b/static/img/Tiles/Rock/40.gif new file mode 100644 index 0000000000000000000000000000000000000000..1edfaabbac4d82405553f28bf0b91c8803b3b823 GIT binary patch literal 713 zcmZ{h&recu0KmVG_jvE|_>H6wM17z*HC(3VuRP!)#np@sw%n+&wbsFw9ooorKH#B< zKM+w7e?C9~6%lV8pU9kT9lF#yILDT2tu7wxMEM8wxqeQceY(0kTUz^7Km|TGgGeM2 z4u@A(R+g5Qd_LdC#zrg_+uGV%SXkKH+?<`AWmz^Fjjpe+Z*Om}uC9hcq51jwnVFfz z#l^X~xp+Ljyu3U;Jsk`NcXoCHfq>udA0Ho2Bob?DYg1EGV`F1puXlHMcVc3Krs>Ja zNsq_la5(n%_S|mw{{Ftx=^Py$JvcaE7$%)gyIihRDm6SjoJ=N%hKB5R`^d;hKA#8w zLHh@R0B8n=OMlq}(7cg*X*Q^RCO_vG&~-B(c;Av|=D6=y1KH>IAkQHuY06xCeIC+0 zU?4`;mUvZsazv>fJriRRLia>ghLn|u7SEXW^ zzPZT|RLL-XwFE6m%H@1PEm}jN2t?6eWyaf0!Xol?CC7d7ibeIvZxH2Nh|r*^vOt`J z$X6)S7B&l`x*jvtp+hhMFy6o&EWmI9(wP1fcHa9A6+f=BX|*ON+9k9lWR$C#FTm~A zL5kBOu+{W~)p86(Nv!4^ci2i45G+YO%{oN_!%2qAW!!0&>kz#x1K@EZ0Z e$n{O|3Q})u+^LZV(7IfQP=4NPd<*}(e)BJtjPMu$ literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rock/41.gif b/static/img/Tiles/Rock/41.gif new file mode 100644 index 0000000000000000000000000000000000000000..a4163280dab26a9156e2bb32a1a61c299d87e558 GIT binary patch literal 717 zcmZ|K+iOyB0KoCzxq5Ue$NMF3+uVvRnxiIG3{+y(if}Pv&>qgBhxHIx4>7{!IqJO4 zZR*^`O`T5NoYPHw=phIcAtH(z6f`K+7*tY<_+|nM|hB>BYsxXf!%AGZT-;S65f(=H>!{ zz}D7QHk%EH!K3^ylnx3Ba`~AgYF%pSvZf@@E z?0CK2a=AP;HB~B=TrL;GFm}7$>2yv`PP*N0nx-q2io@ZkR;wP5XLonE*=&OU*LsXX z02sm96LRtd@MaBp1@=)i#2Y{e2v54)^-lPdi~;gK=0IScA)rB!THLL07w2ENCGGYQ9>^=@hacqfsGhQIaqT0j(A#loc(B zU+6}NtOVlrO4PW74R4A&z-iFlZIB{aBZ>hL408k>vc3_;DK1~ygDS8+8Jo}H&@!z| zk9G-467n2JwrA7}08c-BK1?ArB6RheOy)ZL%mvURGjl^H(($?D6hIN|%%6P_F?(nm zJUFhWAS*6}^@&KM$LvC!nwvTU1$F%7$yF$qvgCM>(>yX^yI1qERfY@X5CkE3TS#Lj z85$Rg#im;N0CKZ&>lKRnIPg9S-5xa=vkVQl6ZANES74!1W%$s3RCo0Q;fSs`Q|9qn z_;RWba{F1V`}WuNbgl7RiH=g>2MiHNr#xjf58XurmqI2x(?HyJ)b^u;&)%=xUdW%e zrLo`x9WFmq*DW+psIPnh{q8aB<-_4F`hZD_FstL5?YHF#?~UF(@!iI}#U)j(T6fC= eYP(XNs%t1vMFlRgK3aO#3_PI$ktQEP|xo3 zvU!<0r&G7-+`R5+FVag6A|!iIN(drQe95=!!4k5Ce?Z^Y&(pW=YOV47eI-zWol4N( z-`~^IGc`3eF)=YdK0Y)w6bJ-{hleAP$mHbY$jHdd%*^QMsL$u~`~9(4Y;bUJZf-6b zjrR8Tc6WD=jg3uDPj_{71%ttbg@sTk6b^?IiNx&e?7+Z4UteE59-p6|_jo+Z%gbJ` zH#(k&^x%QU+VJP!gzvD{ls(a5*g!i3EQ_dgH<>Mf0P?VG zgD&5-LHv~IVPa2{q97vf^>AzzAK8}6Ua$wy^A!LSqjxiaPuwz?H<&Aqy62!!%W}~| zRt#(F&D#+x7Nbp{n#_ACRw&i3o6Y+uifNSPW=>?c@%g&7od86gh`NohwpKYEM9~?n zJf#VGE@jqy;GS87yPGB8^B3C6T2WO6OP4ViP-WNLz4v5KXBVI~+K=D?fSEjnhv8oT z@)Au4TgBFMRwq;;zYmZ1-eY`2<8?C=PT}NcK#Ou zhnGhLK@kx_eBn({@qJ#~fIM*MplPjBvrZj4c&!V~KcMgVbNN1e)NSk-Py!|R(he3D z79x?z%F0SS9?xVlGcz;u^YhEg%WG?E(P%WA%`Pr3CX>mHjg43=wz|5SN~M;TmO`OW zFc_Sho12=NN+c4qv$I=UTj_LqdV1RL_ph(72Lb`F*PGAhbGh8)^^&&AK*m@1rqOTT8YOmEraV5ga4N?jw5gAHI z_>y64l#h`ds7BGiN2?)RV*qYzULumVp<-@h6GmtVg<_QO)N#20li|WT`N%t~Lda{t z5I_<@Dyotxntu->enti?6wNTwk_it|Su+E4twtNp z02iw5(3edPD^VlB>8E58K&Ze3$~4Jie~HxHK%ctBa0KXWj2-Yu2n;{r&yz?d_{quU@rk z)#AmAdwP0i%$Tuq<;o>Xmh|=YEnT{_s;a84uCBMYx2dUV&6+ihjg1{09c^uG3l=O` zw{BfSL&Js*8=9M&D=I4L>+5T3YFb-c*RNmy|NnmmLO}5+3nK%A34;zuA;?b*Y$qLN z6?o`Kwa;E$^fJP#lkHNm)CQlqETNxQ=}0i#dE98I(bBunr=?Uah;QQ2Rkkh+Ozo0$ z%^Y*Nm=vmwm>GnaJahTEbj2CPqtj*OrC2$cd2_|&IC&)`M457@ib<6T$)pSN%d?6L z3NQ#vVwM!<;@-iLsBg&2Aj&DiBqWz8q$jE*D#69ftsbMyAtuaN!N<(Q5+kChV8Fqq z$;QvQC|H7W0Re$V2LT3a0EZcm AkN^Mx literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rock/51.gif b/static/img/Tiles/Rock/51.gif new file mode 100644 index 0000000000000000000000000000000000000000..15a900b860751636eb191570e08648d4fded3db9 GIT binary patch literal 416 zcmZ?wbhEHblw^=(xT?i4Z{ECV)21z3wydwOZ|>Z=bLPxhuwcRB#fuj%TsU>=)Y-FV zPnclY$^)7#tI*R5N(a^=e2-rf}}Rx~s;)YR0hS+i#2#*M31t!is)`~Uwx z17$$*CkrD3gBF7h$QY2H7})kYOfB%xk?KFOr08Uh)%*)9O1#!at-rx#wjm;dxqZD1NmMvR0VZwx&GiUbp_BJ&&H8eD=S+l0Oxp~Ek75Vx3ZEbC9 z*RJjA>Z+@&Te))O>eZ|N|NqZG3Q+vX!pOj2z@P)t1o9ID+r;$9P4RhfRHIwKIr|hlhbfif=;v)BqMPW;RYfaW&lqf&B8~a)OF_jKZq}1bHPC zm{>UYwgs>=vWPMW9X{YM!o;Q|E5UoxUsO?nS%{VYk^vjHFq1gz?K}KTVw{g|%X14z zy}W&+HSaN(oCx=0e0@ literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rock/53.gif b/static/img/Tiles/Rock/53.gif new file mode 100644 index 0000000000000000000000000000000000000000..e2279a651d3dd99fc7e1958324ca82d065702dec GIT binary patch literal 420 zcmZ?wbhEHblw^=(xT?=EfByXG)2GjvF=OJyiOZHPTeWJ{qD6~l&YZbm!GcMXCQY6^ zxwp5szrTOs!i9Z(eJfY4?C9v2GG$70bMu@zb2>XaCrp^IV#SJ{o}ML3mdu_#ySux4 z+O%m?r%r8ZYMM81-qNK@*RNmS*4DOs`SSMm_WJtzHEY()ojZ5dtXW-MU5ghluCA_L zy?S*+L&L_68}sw?|NsBbKq655$->CMpwFNK(g*Sr1KU9d=Pu_ANw$UVFB>~#r239A zDll>iG@N{$Di9$&`MBd2Mg{}MqYeU^3_{EY%BmNz$VoOF6N%tl#Ks~n%q767SX?ZX z&BV>k!OSPf!y+jqDj~tF(b>r;E+E9t$|B0gz$7cAE-lAAcP=A`n9^oO9u*zdN>=U- z8^i?Ub68rrWVn=h_V4Fq6lD|TkrO^Dbmk0WX#uA=EANdPB3j%$Z1Q3cAL_Akh{(Qr f#mUY1@ng}qpTBHU!m literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rock/60.gif b/static/img/Tiles/Rock/60.gif new file mode 100644 index 0000000000000000000000000000000000000000..1b1a0a4eb91d6a3f3355374b49eb588c202a888b GIT binary patch literal 709 zcmaLS?N1VM0KoCz9p`btaUM_dAR#ImCUdl9qwL{8)7)C)B`=)Abj=s8*~W|Lh1~IQ zfDed@2#9(Iim0eqt@#qQ)~l9pYOSpe`V)FpuW0@QeP4gxe20byZFk1BKnuS1g3Zm% z_4W1b?d@1BmP)18*49>5R&u%A+}vC~pXYggd3kwfXQx;!Mx)Wy)m4t;ve|5*P>9Fl zTU%S1OeUF3CK8GL{rz-0Jv%!)KR>^*v9Y+gxU{siu&{7&aIm|(8;L}Yj*dd1P&gcB zS$1!4k6{>^rcX{z4i67YrBWaeI6gium&-n%Z)Rr3>-Bm(o?tLouh+qUYyFEr0Q3UO zmAZNYXuXn|er(Z&qxs*b=3B|j9}~{ARPGZU@lCnU{YaIz`EQJ@1tC#jvq# zl=k;c-bVq7shuL|S|=o_`A`o7K z$NMG9Zf*N@Sglkywkik#qA-bJg6I{zfG`rpNgy>!Thv6irO`qvFn}rKSiA6s{H;hT z(KJ9!1g`fAZ=zCFTa&KDQ55UPwH7SGo%tak*D1f#bTgpD0JyF22meS@Tk2K35@Mwt zx2Me2Dhwe;r=^V4J~EWdh-e_r;r|62+B`PuOTeF%S)DekoeBf7(LGtIT|f<({=Id8 z5}ka80q|@n8C=?6^bGe+~@Avt9>+9>0NMw9`Jef>pv)Mo( zu(h?dySwZ0c)VV(+wGPlX?uHne}8{xXJ=?=NDu^36h}rzhKGkQE-t`-Wc~{g0GdGK zrM-Lt_(h?3BsJG{@80(OWKI&L^Qa{`*cSO%Q$;uc$h}Gle$8G;RwUH0VNb`!2f5f$ zx9gmN26Vt#&LXA?43IRfkRegcyE-Rx)(wNWwet88Ww#TMehdnQvjc+A8?2vS+8y2ysC4m8UUnF&y3r-s z4p!%sWIgeRKNBz-;Gnt7En?rV8S%P4Dk&45&^jGax&u9BNWVSMSpcBgbiI!&C3*R> zyww&ia6wdcs&SXl!a}gywDjYVsg$K|=QIgc-hGnSbxcl`F1uj!txh+2P zehg|+Teehi`_xRa{cLf6IfDF1Xg-PiTQmKndu!b=)5%fWb)Bz2J*G S1a^4H_j6nrg(e*Z!L5J7s^+5r literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rock/62.gif b/static/img/Tiles/Rock/62.gif new file mode 100644 index 0000000000000000000000000000000000000000..2a1cd8d5438449727ab4982fcfb5978f2982d713 GIT binary patch literal 698 zcmZ|K%TLpA0KoBIw|2DKx^-nQV3Wdl6htLJhzJRV5uJ&NJ9si4I>JE=F*_J#JhFBh z8;=2F(6KQX+jx&R7mN}!P>46V7*8e~&?px%(L@vD41a*%^XKxtb^GS^I$I9N0q<); zB9VwhB8!WQ(P&fNTPj2h>T(xN{Ru3<^l|tmB}$GPg;Vw30f-=SBNFq3YnI| zNQs>Sxui}7K{_%^jbGKZsI^K{UOujXFkOy{K$J#!SE@s#n87qxEW0cX1`(DvUdqL? zcVU%YkuN5U3Ou)c&u~R|tx$uDb2RrEHr=`p$tn1b-k#<;M5zazrwk8B6~PtQ3dNyP zl748lfqhR_f2z&ObsX}T8kVEyJjBDGN_{@rbjW=mq$pL-u+1UdWO$Ocnn6~zyox!e zOh*uG5VZt|12@Rh#FEvFnZdF}HRTM)zV>TCNq9@cp1HG?OhY`5j^l^`tnpTL2P8#l zOXpSsc8T;ImJ*)fVI^8AXNffDLdZt_TWQlydn8&)bRM&Ek5EcmY_=D*eT0%^wupi; z7cMKmXR*F~j*~L@0Z_$38-R(86-_2z4)%NiABSbu+iDwP@<8cL_rlarItXmoUR)aUcX zAQFjWGMR;ih57k;zu)h6yS-lT z^78W1(vr*N>gnlWS$1V*#p!fgwv++FG$#1piBSgg^i= zpyn7JKLM<`$?k>(Xrp1bLr05MBI&;F+0&B{(voYqXqMefvUvqA-nMO4TPeW~m!?f} z%}xTaAojc*DwUyn5=R+^ceV`CP$hRESb&iPPM#;|Q&K7*ks6RvNTsTRNv%^25F>I1 zmJ$I*S49zsh^M%K(-N&jW2mmw0;NA7B-8>5Z-vF!3AlvMtHAge2ES%nYs+PPKB(0z zVIE9ma3N29NMb-#V<{my2u0iLnI>9SaET7P)FFmL2^0dif3q@3C?@M|tz>>1JS<%& zGP$@Kc`T}PdTq2`ED}|A9_1j;@k>xvAI{jna&AGJ{z2G&f6oIe85{r$$^ygR&^lq; z=3oiVZrC`$k-|1V{^-^>hghRGo9^rvI3=a9n+m!}iDypvAe}} zb^qQ+udUGVA}jx_*#H)ZkGc<%^I{I2bY8?t2J)%p=D8z0>E!-%y^Tj d`zLsd5%PG|2R_^mINoWIg@q)vv4I3v{sDdW<;DO2 literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rock/70.gif b/static/img/Tiles/Rock/70.gif new file mode 100644 index 0000000000000000000000000000000000000000..7b61c81c66587ce974a8668e744702756f6ab4b6 GIT binary patch literal 351 zcmZ?wbhEHblw^=(xT?x9VZwyDbLY;SIdl5-=~JgpUAc1Qym|Bb`};dPJG;BP=g*(t z*Vngn>C#!VX3d^Gd-dwoy}iBb*ROACYML`=&f>+37c5w?Y}v9!ix&0t^h}&Mv8}DG ztE+3qj2V+AOOf zG9n`7I}V!2*zpO9S0yrVsqmDsFtk*&FtIW)F!m;jODHq)`Atn=5@2TFn42iX%QTssu*v^@*IDw{73CbJy-Yd-v@>aB#09gEat}0dsf& literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rock/71.gif b/static/img/Tiles/Rock/71.gif new file mode 100644 index 0000000000000000000000000000000000000000..bfa9bd7582ef1f0e89d735b88dfb74531b965277 GIT binary patch literal 351 zcmZ?wbhEHblw^=(xT?-DZQ8W?^XJc)F=O%K#S0fMT(Drllqpk|ELk#P!h|_<=B!w; zqN}TG>eQ*--QE5D{e69XlP6DZZ*O0-6c<=gph9bm`KG6DRie_I7r5u3fvf zr>AG;%$e)fty{l-{mPXqo0^(BIy&0g+UCxk+tARkY}vBevuFSR|DSduIDZ?n%+7=?f!_CRTk<=f;CeO?zDmf#RwO5W| nL5dVJ`?6434*u1lY|I-%S8dt8W9P2jd-m?zf8gK-M+R#ESetaN literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rock/72.gif b/static/img/Tiles/Rock/72.gif new file mode 100644 index 0000000000000000000000000000000000000000..cfe20d08e13aeb73d5e2fe6ef99bc54c4b0ff0de GIT binary patch literal 348 zcmZ?wbhEHblw^=(xT?v}-`_uF%9O>67tfnFZ|>Z=vu4d&y?XV+g$pN7p4{5nx@gg& zIdkSLSg>H)v}r3>uADGo!u@{oFG&eWTm@#A0q)Dq*t@{7}KLf=; z@h1x-1A``m4#*^spBUIG4@@cW(2?ptv83o^j@A4ND@wf9My-!{^H7Q*LU@k*)lVCz zteE1H_-Lw{NYgPTg{ul$tiFc?SR0)9Ss0i^0{9qN)C74MIE4IF*oBz|7+Bc2Mg4eq qB*n$q83hD|YJ51M_?VPr8JVS7l$lu_8LRuysvSrKq`}=3koY~pg+1A$9(a|w$)~p#bW~^VozPr17 z_3G6dHf&h6YSn}Z6B-&C+S}VFPoBJX?b`qU|1;14DE?$&WMEKc&;gkZ@)HAF)q#lx z9y(I}CzceQ%(0q(VMU48+NkvrjMo}>TJdmbuMqGIVQ)LO)Y+9sj=?RJi^D*t<)rhh z4=Q5vOl(|%EDT)2A|m2Ei~$^COiTjIjDq~deu7E@ob0TOLVWB|zEbQgGQ5ne+zg7` X?7j@lLXxb~ylet25?qPijttfSXG~(R literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rock/80.gif b/static/img/Tiles/Rock/80.gif new file mode 100644 index 0000000000000000000000000000000000000000..f5600a51fd60a8eae3364e5e713340692171b493 GIT binary patch literal 791 zcmZwCUq};i0KoCz{eI`&&fRS{JvY~EZaSyP3ZoJ0FNaDl=;5-U5k5??$Y^n3gu&3; zU!9veb^f1voByWs&)ic)(E3L`#Ug|r3hW{1(cbE5(R<(5&(pW#+EvH-ZavV0LkF0e zno6Zo>2x}gNQ{k*EiEl2lgah<^|iINjg5`@`T5Do$?56o(b3VBm6h@F@x{f(xw*M$ zG#Zb`XJ%#=78WKZCRSHhBaw(K%R@s$v$L~XTU(h-W_x>kb8|DB&5n$W#A31G;o;@w z<#0G03WauecYQwJ&dyFS7~I?2%jI(W`}=;s|KQ*t5D4`3^$iXVdc9tc$CJ z7$}uW;D4F_;1~c7VEc#vo&ZtegYVrg+r%> zMAl%u-8vR=o6H?qErnY9h3W<+(`;=vKXJIqNd&R7dUKt+sZtZxJYgVfJi%egvn^^! zC@fStQ{O`q#BIDrSxeR!OrQo0VAxGkgIGP(80%iL9HT&|>&#WPosgkv+(2pTjLNbK zEr%*u>ZFCdfs+Q0POY<4H&j5CLEEg>Rx6ucNO{@62`T%UXqVdns#V+(W7AGcx(wyL>{7t<2r zFsmKJC47WspyPv6=5f5YlXF&@+R8X9Eo20U2q)e$%pOP}2rE^IT)PP=RcxO6q5ob8 zYG|AEMLx><==PfS(6Jj}fP`H)g_JJ7(ih5^5YiS`&EL(xm!S$LeDFh;3HG8Vw6N>QRn%?&Av)TjqH`2l&?cY5z~>o*M- zJ6ym8{;CJd%gd{)tI1??e0+R*dU|SVYI1TiolY+-EX>W#&CbqlZ*Px{jg5|uE-fv^ z!{K=I7_v*Vj|2R3?*|n3z~wTie*!*xA|H+S=ON+gn^*j7Foo zySpPJBaujCcz8G*4j&#K9vmF>_4N%53{8 zkEtj+19aXJy91W62f{EeWod_@EPloAwOugsG-D&HDm|118f=`E*OfA^a%cWRDYhI# zx7FQZaoP-wlhSdOe;~HRIOx{Rpx>07v`T}YF5WD}(pM$!;% zuQo*>QUC$mQfpmDv;5PiAi*4`#7LEwWbViHk7V#U2XazM0mZ=i=R9DvM-*V%y8e0H z0i#B%iOXqeSz$eF4^ANzHtXB)ZNE>%I=i3jme1!gI9G%JWgvlmVj05r3?2Wt=C{{@vH;Y4c+(-!Zvbm|!*SWEbCq3-0XC@LQlB9R>ko!Ben z_LKhwkzlBXwO^{Z&DNcLdMTsmDU$KSiqlsG2tkh|-z(5U6UvzG=5=S=;#$4__Y@2k zlHjw4B)TX52`d7miX68aczCF3B5-_vqEX)E>oX&TD!)iFoa94gKi9rwjVBG)81Tja DXAu0| literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rock/82.gif b/static/img/Tiles/Rock/82.gif new file mode 100644 index 0000000000000000000000000000000000000000..7a39581e901a38da6ef97cef2ae7b7e1498dcbe1 GIT binary patch literal 791 zcmZ|K%}739r{XG&D3aGBP|oJTNdYI5@bqwH1rS zJRZ;b`nn(pPN&oDc5iQQ_xAS2<8hbEl}IG)cKgoGPJe$t&-2M-vZtq~udgqg&4T~O z{zV}GszJpGIe7wjmV@3Ut!DGg8zXnzm`h-xfK^uM#McZpq@l9y*Zwhi3N(awS@S8( zg~R2fT6}-y;9==4prI*+qzEHWG6$B+ixFLsgetDmAs30_!U8R;XP7(*o~tWSswq_t zVMhVzet>DHddL97=TJ0H2N8KBrOhdkUoS0qtzz9^{SwmXuU;)!qe-*fN00k(1_=kQ{i(oKr z5_Q}Q8OC&V0+Zt{*!>+1g65F3d*7JbCM5Wj=PVIzH_>|7jgWC&dkc$tGuUy=lu82> z8Zt*;ruBP}_KbLx!X09Z51*9{E qrUBUYDhR2iRscz3Rwt%z2I8vgPC literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rock/83.gif b/static/img/Tiles/Rock/83.gif new file mode 100644 index 0000000000000000000000000000000000000000..08afd029e64623416a02dde6d02af58229e56e69 GIT binary patch literal 791 zcmajaNlz1D0D$4|o0(3hD>IY9F0xEZElaAYvDO-mPNC6CKp|11i7~A!F&ug@1~G-1 zDJ`Y!P|6OaEM;k-F){JLVL%TaJYb@cW6^j=PcDZVe}V7$xxAOJTymZD8-M|Pa)9~y z`FK1&G&D3aGLlFnMn^|iR#sM5SI5T2CMG79mX@Zcr)OtplgZ@d7?ti}m*QX0zFF zI2?&YL{VH@TN@l4;=!OSA0>oeufMDiRm_lD;+Vamam>$meQ)SEBOd zdx!M(WlJ2>m&-LeXuui$qY4dafqG?$xm?L$gb|aOZaiZsB2i4^Ww6v@ELIoAJbu=w zRr_^Xg)UHpFr*cFpvr_*6GUSTqNR$7Cr5BATZfRS(o(vuvRdv^l@&OB)O75j17g;q zQbuMwRue|3Qwl)R)eMTaG~|awiBQN(^tS-u7=kndZZA~_2|Mrv4&5BD`OVyN*=teU zF4so)^8h0h)CCYQ`T20L@@7V#GjU=8sGYWV`Fj!wVka2aE)UN{bb1TR@uD36<8^V+ zS0^X{!DoFO7RB^twXeN^vAuipr-3a%86cBkgU|4zll;A2p&sI z9i$_Xvt^(mN_C@PThz@w{xlIHvY;ZuE|MP}00a04 zK-*Cv+~oOHn@t3u9YNv%#32+RY{#%Tf+Q;|SMBzs%hiElB7(G|XwvPDVOR{uJ8)bo zDiSeFDlC)=3OXq&>G6mtDiTD5qBdQwPLhnH=yjUzAjvmgZ>LNqIUF4X5hDnxq(rjY zV-yvU%cbIC$?23zOS>pa#PK*yM@TXzm&a35x)h2iO}C+F8-hfY%7{z`{*UDV`#0E+ zdHe|whl$W`fSSdKtp&A{L+*NuyC=JiX@f)lRjz`a;(rVD1jaY}W~P;|q}zM@j&wr5 zZ21iIX1Nih;Y=$EfQ&*_0P_P%2T)5<2E(Ds3Z{MI&4@no5SXW-A_wj=(43_=YxWg^frWdK1I^&+;874Hu zj`#4g&|#3JuX zC(fI{>fiAU>mIkT`_J><3&H>zv)teU!p5_g^S18p56k_%X3RJH1A;HLG1EkN1~)g5 zhvsF|x>Hd5qE)ksne~y&p^RQ`g+Dh}QQGrqbkVye)SY&g2XkBcqYB`w4^DFKZQ$D& YsOO+GPjGV9u@tzMFW+Vvo&gnq0l`AY761SM literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rooftop/20.gif b/static/img/Tiles/Rooftop/20.gif new file mode 100644 index 0000000000000000000000000000000000000000..7058bc8702a3550cac07a29aea58768541a80e36 GIT binary patch literal 537 zcmZvXJ7`m37>2+9{QtS;oHQ4kHkXow;82=0Nhy+|$jQ}XXi3{ZC{8gJ!RBJX#X%$` zP$X5VAee}VUA&-RuyC@*Q*2HgY8SypQM)*Z2)ei!)7^J^;CYt!%-K|A?z|oB@IC@- z0BZ>KWqEgMstM4cs1Crc-`_!~NKqw*X(FUePnQVM0)c)sS|mhIB#Id8@wgTY>akdb z=e1Bs9hMZO5>n>*5>4yTXfK&;V%#J|W!VnKC6;aRe2Zn(VIK~wG+pMnCd0G@p_fXv zhD_7<2bh#CtwC$Tv7avtwaO* zt46Z%_^!?Ym%Y^WEt6OK$~wu{w(5-yTlMOG@-1F+OfLNVa{TrRF}l!770jFk2^5{H z;t4Ntr5$b|mLH=ygN3zncAwFo&(Oq#3uLmglr;hvoMXTfC!6zR(Fh|5Cdwh%(B`$} zCj@1TS$tFg9XcxMkfKU8Cnyak~UVHDixo~FDjN_$|Q8Ql|ed$QLaataZWGuZ6k(E4hHoE=I)y! z%pxxe1tnPcm6&u4;sp2vE+qK3O|{`NiM_Cafr(9=HS(!<+aum4t~@2Fmgxr?nw&Wu zG#)H1JUYRdVFHhVLr`)9+wlboiUoek3t1&4Og0@m^UPPrKsKK5lcxp)1G9;&fT8Mx literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rooftop/22.gif b/static/img/Tiles/Rooftop/22.gif new file mode 100644 index 0000000000000000000000000000000000000000..4ee355f61995983ed7992fc35fd9e3b77d4fc684 GIT binary patch literal 527 zcmZ?wbhEHblw^=(xN5?X#lVoo$T)+6;iQAZVQua03=G>D8MB#~4(sS-Gc(U%WIW;G zvYm-3hmCCp6VoE*Dn%;e41|ExH zTqD9N%9$ZnnIX5IrG|-pO}iXdmq3Wl1r#FL*Z5t=&3`WM8?CjfESY|LWop5yA&dfZ6m32E4Qw}TZ zAzj@=1_m>jnNK)4Y-453<={Bs;&RB?cpE$WOis>Rpe{DHL;CtBoSbHIa2zr+%ID$9 z0Sa<+&*J4h?&`Xohv&GvdmcCUaZk?^Zf^ho|7XAf6o0ZXGBB7k=z!!weqvzze_(cj zhmKTx$KoJO554(LN0}IEjWQ-VgmP|36>3{+_~2m5vZO~x0}2FK9)9s1;X`qK=LV&ZjBW=Uwn{T_t*8iO zY}_TvX`?Byr0bRd7n_yEgg`~5Hr`65nka^c4P4yfU-lR#q&Ks$z4}x!i(zr9g+YTk z-^>hwM&}0B?+i;>6do}(GjsZ7Bos_=Y!K%6QsHP&VB=zD6SCQGfW2{MxFZ9DH2~=+ BjUxa6 literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rooftop/30.gif b/static/img/Tiles/Rooftop/30.gif new file mode 100644 index 0000000000000000000000000000000000000000..d0a814fd0b528f182017f74e4ca298ff32b8215f GIT binary patch literal 405 zcmZ?wbhEHblw^=(xT?jF#lUb_Tl=JgLlz_B3gb+@sw9M;h}q_01NjV+snWjh1IAtR#`PELpP^p3l^op5%Z0aVYzlEcEXPfzcJ zi^~jV=3GwBLk0%hI63pUxDFW_=JW7uV`bgO#+Jv;ebUkKxU1{`|Nj{%1ByRc7#SF} z7<53!fc(V3w#lJ8%R@)1-$k)#ClAMr3ra@>)=KGhYMBH$WX$C6QU2s=w`<;~iA)9p z46l?H7+4;7?EJ3DAmc%(025~oW4)gmmpZR(1up}$po#)>1)C@b504USWR{;Q3yYU&*Ku#mLSqDJ@nexhW*{SSbS!6Zf-X?odYtYXB2LTMPgI literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rooftop/31.gif b/static/img/Tiles/Rooftop/31.gif new file mode 100644 index 0000000000000000000000000000000000000000..5dad8c07a6154d9bdb03f25ad5235cc8f20b87df GIT binary patch literal 398 zcmZ?wbhEHblw^=(xT?dD#lUb_Tl=JgLlz_Bc1Fe-3=A`vn6@)8ad0?fX!!sCe+F`a z;!hSv1_m7<1Okws7}!=jw5e=dsKe5J;^Yzq2|31-j?5gKLToOs6Ep+1wOo4eqO(MT zNu7b&azg~8tB~LWvju!i>;ijpe&pvfGBC3;^Rz@V@(c6UFmSLnHZllsGPiJPGSBg4 zR$yS7Jejdlr6!X#TR<#i@#4}5W+h)`4s9l}_3Pc)d6`S)S%tZG@8+Jds+ocH*f9n^ rc8wOTbLUFM+pb;9;JkgC@&2R7Po6$|{^I4U*Kgjwd;j6SBZD;nCPZmL literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rooftop/32.gif b/static/img/Tiles/Rooftop/32.gif new file mode 100644 index 0000000000000000000000000000000000000000..1a69c3a83d495af2ea4e69a6979cf51697efdf58 GIT binary patch literal 408 zcmZ?wbhEHblw^=(xT?;O#lVoo$avDhVFm-kVQua03=G*!OxeuL+gMm;FfwjuWSqgo zl*7U@laq5h6Vps~_8eB$Y!;S7dU_{ZTxKvc=W=k&U|~7o?0iU9_ppx6Nk_+RoScXB z^$!^t9d~s-?&vs!jqLk2`K(#VPs%XXV3we2l5jG z+tve<3p_-$*ch9ZO1ti*AsVG1;mCNhkxwa9OGC3Df`R2Nv%oSn#x^y^po!bM z86192_^u$qUhXOxrOGHF&cU10WX0VRwyN{ndhC;w0CTd4AuaBzh3A7 literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rooftop/33.gif b/static/img/Tiles/Rooftop/33.gif new file mode 100644 index 0000000000000000000000000000000000000000..71e02d5f84223205d7c5580f7dd29c60d372d614 GIT binary patch literal 400 zcmbV{yGue*9Dsl4+;h*p=X!m=9~JfnuMeEG7O#)8h9(JV2nr$4YlyTKL=8nmn_MGs zX>gHf(KW6^y0x@4Ha4|3nf(iW-}Y_a=GI0kec%T_yem)zs3J7ZWORT5z%UZ2VLZUN z#&H_Y4;4j6s4fU2RUIItbKEGKHDWPsTJrfCA#IbX&)8U1HA3o)8PVu~Xg4HpuJ41QB(qV zqsQi0TkE`aPquq|Pi4iB%Fvxh==;_J(zEv?^3Zcb)mxgFZ$6@W&i*H literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rooftop/40.gif b/static/img/Tiles/Rooftop/40.gif new file mode 100644 index 0000000000000000000000000000000000000000..a1f499fe149691e449092412e810e96ddd16b29b GIT binary patch literal 635 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 PYr(i2u6j=e!G!f+L}p5q literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rooftop/52.gif b/static/img/Tiles/Rooftop/52.gif new file mode 100644 index 0000000000000000000000000000000000000000..262a55df862167161e5144d71e98cac1ddca537c GIT binary patch literal 414 zcmZ?wbhEHblw^=(xT?)?(!t@dwssZ+!wd$7EJnud3=G*!Of!HCM#e+Bx+feRx3REf zGc)I~uxw*vJFKH~NMApPjqQZ9^EOu26HZPiTwD(6>CNQiJn87Torx)%h2@Ze!69Sg z87wThoSfS@IdeHU@;EtXu(IZ`vuClec>4UOz`1gQYi~!6p|EA_F!gd4&oQ#Rx03P&F>8qkl>JIpY-eD|W??z3qjSQ^ z>4c+W4jWrGGxH%s!x_xXIjpQF9UZqbGtcDY+{Vtnjg2jrlXE5q$00qvL%O;%n3xV3 z7|dW}o5{|e$IZQsgCm=XX*&~BE<5{iSJxBH&IfdL4;dTh^YHxt|DSP2F{jlUTFpvLBW=`HpUJnR&id2)R_!be67>l zxVS~-IAw(La(IMAmM&`(W#)|+W1BR4+SX;9@$4;9JiE6Xn9j)9*CE1r>J-CFCU#!s lOPADCj-0%;b^U_}1&^OSfAR9w>o;%Tz5np>(tGn literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rooftop/60.gif b/static/img/Tiles/Rooftop/60.gif new file mode 100644 index 0000000000000000000000000000000000000000..c807b2f8725266203371e47b0a06ea13bc48ac40 GIT binary patch literal 624 zcmZ|K&r6eW90%~v_xb(oc{X*fx%mrSD>r?%`3p20@jTA8MI_3G23}l{$Tn?y6AE?B znYCc2_NY8e!f4^e4hswsVT|wBBqzp+aHd~mY3IhWfijvE4 zxnzP^W!ZuxWpO-Ak{N=?u&j(>Q#7qO97<>BY8mbAdAD1}@oAN6ie)o2J;g8?l`2fr zs|=%bcgyAFj*h&?^N{EBUT+Y?ra3OdaivlT{*&fE1On&*;j+K{1XL-v9`Opb%PVg$ zCdGx9#X9Mz0Gs)Wg`|a_yk|1+1K8tY)1$r^@k|moXU0Dae;>c7G@KCJOy~|@J74e9 z;H0+Z%B%-57J`IC1*&(@1da67ZnYmx_*3K-uvpc)3#Uz$ZMKytBlzx)aaH)}M}}Nf z>D5|Y&(TGgk{A(=P!gnQEUPtXeru3urCs;;_qW6em_1UTXGOZwuTz(*w86F8BG|3$%*s+Ps?XFox;X= zOr?#UcrB79mwllzCQxsa@Hs{qwB8}#xeo%w*K_M(v3W_ijpc@Y5XHOvEzalZC5WjE ziMj9(@g3ruTK~>%r4Mn&D!`eq2NEvBpfeq*5}7q?P1w+}k@_~O*EpY|m7fTXwM267 m^!=}q$h8OrHWP2`o%Ta7q+y9+{pRA)P5@WeX><$*eg6Pb+p?hm literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rooftop/61.gif b/static/img/Tiles/Rooftop/61.gif new file mode 100644 index 0000000000000000000000000000000000000000..779a6ec036db973ad6c3e324c58d00a18b57688a GIT binary patch literal 643 zcmZ?wbhEHblw^=(xN6Ff#lUdV!6A#0@vydbHWSkf28J1ojN2I*PdGXr*3sF{z>v+% zd`MR}n}uaN6H^Y5WM)3$UEeA*fWp#9Bva=s| zcb~<>lgrM&ormYRo7;9?-v9sqGvEb^KUo+V7)%*-K&n7~Vqp94aO`D(f)5kdS>-^> zEAuYA*u2?OG>KWo?SO-W#ifFW_jA28#~L)YUjG@m{8QrkR6JXGX;a z#lu`qj0zk(mT|K(Xhyo+>0&w5(7+kTqoWb1$jr_dWalyI(-_0cO@=-?)A!aj; zfXlC+H!%uoNUXTXbAa`50q>IF-CHNHZBU80BGB+;R!iY6F&E_xh0HA}cSJlC1XviX E0Wzzy`Tzg` literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rooftop/62.gif b/static/img/Tiles/Rooftop/62.gif new file mode 100644 index 0000000000000000000000000000000000000000..5c054d4cc55717892716b037d5221dd1fcf09664 GIT binary patch literal 619 zcmZ{f-Ahwp9DslCIq!MT*QQf9w}~G|vs`m?&P8eo?QCwEkd2^F@Iuqd=C%^NC|Tg7 z=EsyY`Zxx`ATPXYP)&%exd~1x3BfMHpzcB_@Fwu0R{jA!Ja^C4({|e1)ZAwTBWyQ< zAHa`LrnYv&=~Ms|gqHsakg-^nDQbwK0)%8`c?jbq#tKEHt=6o|HAK@{w>w=|7r;2% z+8SV(AkQZW*^p(0kR;Ei>+2Pa(>B`z%LZ9CZMO$GF3GYA!zeVp!1K#Aopv~q3=?44 z1&&+yctWBW;`wW8^<$MP>vSeXF)0Y^ZEYbz$mMeIA1e1T0%!!wK|go`l53Q0biiOAa0sxV z1vpC;A{+)?eniy!p@=sK`hw~xwCnXx^MqJ2iQXbd!YbacvF1tLB?Lo7`vdA#N=0f6 z6)FdFT%*dHEnr_)ttB|xh%3w1K7TMW=w<2rbYaSd7z3x95H*5M5;*~ttHCXTI1uYR z@B0YvS47%p8gqBbtom3&GMwwZBjrb`swYQ+7r2&Z=EOIsnwwG8P~l<6c;}<3EpIq+ zUAm;z*^3ub-Z;8F=_&7B9F!u?6+m4k&D^d$=GqOJ2DhZtDXq>m(*UVChdxGj46)1o z@6dBfa`@u%1Yeq-eG&_NDkY|+`&NA9x^h@<>1)P!*j^MUK$->CMV8NgRk_7pQf$jeR zHlD-{rYs!pPKyXeOwo7q_y82Pyw85y|PwFMcN1m-g82(U0VTWHng zu`-J4aceTFie)h>2@6OzHLDeRc=2+{v5E+Zad$EEXR)lc;B-HE&G%Hi0GlAMyyCeuKNEZ*BI(b`C@ym4YTmph+%s6hcxEz53(7p}6ku57%)+^ktKf%m>H$uH^k)w{ z(i$9_Ii;CS-elBKuV#$_qhlL`(4sR61ucFKoxMUlFQz>5R2P*oQD{;YJkHd^ zC*mgeFKtm_5W(T^byj@_wSWfW;~;pOGV^5VijCqFCA5>m@*(*2sXZ0)*L v%ywHOrq57X!>h)iz>=8YlC+Ca$#h4wITNeu^4fI@4GZJc&3TxBabpbtX~?sL literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rooftop/70.gif b/static/img/Tiles/Rooftop/70.gif new file mode 100644 index 0000000000000000000000000000000000000000..92dfaf33c41958a55618b79b4f7e98fb17e3e551 GIT binary patch literal 342 zcmZ?wbhEHblw^=(xT?Z%(!n8%f#I;Wb~Y2!b_Rw+y1LsL8D}ssoN#nJtfP~~$heJ# zC5MIOq@!atGxH24rWuTkxtyGbjEqh=IUUm1-_Fc@$k1>b8`}vNmsvbKGdVbBu(9Q^ zvCUv+KJMzejhlNL2ge~}<7^g|Lwb7u|Nm#8Hcb58E5FPfFe$ic!qFEN>WNn+%RrK{JjTfbrB Qrp;TnZri?Niz9JLj;l9MaR9$<4iulXDw8`!-hA6HZQtbaiL2 zv1KzeAJ)-1?&^9-Uw<1H*Z=?j8E69(f3h$#FeowTfQ$$EiGi)$VPb)Yh!CG_W8(t` z53!ji7I=ti$$7ajGW^O|9-8H_Kv9EX9-AT)M>uPPW3YjT%&ojtjT0Fd)L1wfD?_6g zrFnT|np;BHley!2Lm7pHCDJE{it;mx^~`c*6BiL!7^)b(Jd|Bzb?CD7n>KIRx^4T8 Nox67LS?$PR4FFF&O345K literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rooftop/72.gif b/static/img/Tiles/Rooftop/72.gif new file mode 100644 index 0000000000000000000000000000000000000000..b1d98b56624013cbc97ed97c47d6f441410b2da7 GIT binary patch literal 340 zcmZ?wbhEHblw^=(xT?aC#lVoo$he(>VFm+34hu^*3(H|`?HNo=CmkG4I67uCGtXdT zJfx>LgPD07J9{=0Q!XcG9w+B^M#d9PPTPUX932lC8Rc?t95OWA#>RF?S2u@^?S!-Q zaaY$IR@NCTEZbOF59#Y~kR+My2(l)N6Hmn8~lbju_I3(m67*)9V)LB^4 zePs(76;opU#e|u7x!5?Biu_o4MER6i*@Pvld}AdT1?5?!SOs~deH2*4SvdF@x#T!S JxcD6ztN~{mKJWkl literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rooftop/73.gif b/static/img/Tiles/Rooftop/73.gif new file mode 100644 index 0000000000000000000000000000000000000000..efca65dfc909709c62a2c70416d0ea8552fbe531 GIT binary patch literal 236 zcmV0K+USw*UahL`0YY z0c->W$v{B20|T}O2Er~b$w5KLLPBi`377%`ZVL;?Mn;$e1DXsB!YwVrFE5w`1Zx8W zw*dib1O)&8{{R30A^8LW0015UEC2ui02u%o000GPpeK%GX`X1Ru59bRa4gSsZQpo+ zKf=8v1zUjNFw_pfiG=omG!zS+EHGFY0EdkXz(4>5fJ7q}U_1fC!UXo{8UzQT1@OvL mIEFzSp&3Y7Q~(zp7y|$b0#q#m5C{|l5)lqy0uezgApkpEfoL<5KQD3^O# zcEN6M+->voMVb!mRvgzTleu;UjGN-(T!ifG?7;t)`G+6?6KMC~-X~yo%n#|6`aZ(r zNJ8c2cuX^tHKI14NmQMfQKOqSc5bQWvZRb~k#V&_Lqm1vR)67B;9%2)<9P)Z4sxwP zv49`(EhwHl@W5O5m@~-tC9%{ZSVQ_Ya~XNhBw&_^!Z z!*%J3HVvZNI_NZQs-hZ{{C*Iq6nX2qe0b1L<(z+^miAHVw@8_ibofRmW7ewsa@036LL!VUXWDl4`YiH6VwP@g z<5PHvXLD4|h5^Mq89VKO=Wo8^ld1~stL?VoUXTsVwAj1RWI5J~+*0&*&+M=)cB%j9 zMWSqKsGW%2TIKv*YnjpSnNqly=VIdM7+o?2qc77pKAvG6g9YlUmSln)%f=snGkyy` m)K&5goEv%{dyO@8%!Zjh`2uRLFgW3ya)_yTXPz*}!-;>VNx=O8 literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rooftop/81.gif b/static/img/Tiles/Rooftop/81.gif new file mode 100644 index 0000000000000000000000000000000000000000..60babf7dbce718ca05e9117aaa509648f4824c22 GIT binary patch literal 675 zcmZ|K+e?#i9Dwof?>)cortbB$Lz$b0*>clOQZy^x9W4qxMu(eTS7gjNjI0bIXSrpC zqDe4?XcS#|AlAZnT?D!5*bECRw7c%QD#%EL@M7s7&~yE{d76&9>Ki)MpoX3Z&JYhCVEbAr7Nt*WV0GbZr_$0$5YHC6h)x$6;r!y@G5=BWnhT{?z zi;ra|SvKWzg-BA8$x=;CK92L!^psql$zHZQ3pbm_?WcLZEjIi>f^_55k+J^hw z`Q!sT4r;R|@1rmgsUIsKT)+KiX9C2+xIv-EE-otu6ml86=&U#mSIAJt9@iCBkUt}sedd82f@VUJ7bI#&~L4Rk-C1cB&n+zjMg zrDbW;%nElG3RQBI7Ti`pl-ij3b8#MSHz!TeuxKCZ!1uMZCBw<~GUQ!q5SoD$Vf0P> z>fl35S)F%GXbq3!Y>tLdoe-xCeBb`1d4!S$hn{FQ`YzA zqcd0#JGL76^{1WaYP7$6{&g<6p8rUFfx5Y&jA|3tA`WZmefc~+(O*7dU*mdxTS>*O ih`*zDy6*@)T?be_?S{4{6KGmlqwj;**Apz$B%tiWsl literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rooftop/82.gif b/static/img/Tiles/Rooftop/82.gif new file mode 100644 index 0000000000000000000000000000000000000000..6f5e218cd3ae3b5a795dcd56d806f2c3cae68f0c GIT binary patch literal 666 zcmZXPTS!xJ9LInEb3bPnZ_Bxrwk?~I+uR(Iqlhy%r#>uaMVT3`p;$UY@`6Z_t-Otd zz{s;8CZuBdB4ryv!FEPDWrRXPP!9@bA_YDa)YH=EzE591U--bcy4F=;yQ%^etl6Lq zpbeo!Nr?ck#PjVK7DXrukgTlqQ&c;SM+ibd$WIWW$&_?Dg}q`lCJY7v!#Y@2EG=EK z+oL$1wA)3CCBm{1k`!>fogk79hd@ywnifd1gJBk{s-hScp(sC1M`&6!n>%Paw8vd8 z(Q1uKrD9px4VF#1T%kP)!#t5n{Un*>`H(~sHyT46mrkeQzi9sw2*3u0{bm0XP-%W~ zM=U=s3>QIi~>SEVuzL3d&$X9~$V z&YKM=6ONPM#gJkY)9G#kQK%qErU=0Vb#LMzH(5{C6-cZv3UA9ZE+A9AS2d^UuRqp* zgtF)xi*VMb%ppBgue?>8|51%|^4t{LnQ~?HfC`~OcC1b|_5sN>Z1(p|1=P>T2<66v zQb*?B33J`*w_3A1o`p*lOkeEB=>lYK9(eBE5J4@;s2J_>1rEzJn3Lb#kqzZa)l6Re zC_j`{`>QFjI=Q@{C_d$$T-SVsXba*#dmisN0$ez_>Aj}g4$C*0N3qty)oC2K&7|e0 zTxfK1%=Neyf_jK-2@ic!cVBiIf(srjux#!9w6zV>?($1ec(P(eLIz0f@2y#0%V)7+ zYS+D1jXm=PCrp17z|KOs{1&zzhc_u(P2c@4jT2eu`R3S)-ncV-MQj*(>eDK}%)a_I nbXI&#JihFiJJ5Nt8FH5N?`me6jDa(3c4n%PKaZ1kfD``!_QcDV literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Rooftop/83.gif b/static/img/Tiles/Rooftop/83.gif new file mode 100644 index 0000000000000000000000000000000000000000..8ef8d868aba2497763193beb269c27fa5eddac60 GIT binary patch literal 677 zcma)(-Ahwp0EgfAJ>T9 zuCPQsizQhUA(TR~Q3knVVam;W=ez^;v}LMd8GLHy&MG4!spoWW7UedS}QEhaKCR4jX`2Mu7&kRaf2pFB0DcB48}kYtDkvg8u(~xAJ@-fg#A5AQLWr&-21ItesHmb&G$SE#Th$fMXOb~IZjQmb@Z6tiP58+ z2{k_*GRUrx-)isD;}GPSmr*|45e{?F_^;Z@t`z1`=9Vm4iR*(ig(Evoui-U){Kba8 zVP<}q&TmI`fj5FYjNC?bv!QV+(nWM$TF~%=SGsCSbz}Fh8Y8L&QQW?@h~2UGq3A|P zkA}Es{lW!rzXPem_(#n;NJUiWhP@_yub3gH-H$fUfJs`b)vyQeI+P&KQh);^|9qSS hCd-yVaOCvSdYo<<_)chwW}7@Ge?~~QtZ4Vq+J7e4z(D{2 literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Soil/10.gif b/static/img/Tiles/Soil/10.gif new file mode 100644 index 0000000000000000000000000000000000000000..fff3c7d0e3387ba84dd48a5286b87f6a67b1859c GIT binary patch literal 976 zcmcIiOKTff6u$S)$ePjIJ2SH0ie$}5qv=SoYdI;#d6AJFJuIox2+6I}rwxruLknsh z3T>f`Tt7nU7L_I~=}InHB;bXkLNRnRPDpSdfzU$mQYvofw#%&2N&iF7;&3>R@B29C z6lU{NCl*5>1fBw5BuP~vl>{lraV<&eDqlt!c9lHvOS)*0g0j6+HApmQNlG<$Va)?j*5-6*wDnb!38zBmL&%%`BiqCy>BJ*iN!I@_0er-RN%6D};@U+(LGi~7Af{IhF%Z(kieSXhhx+PL!?pSSH9fcD0KrypVbErv{zas}a|e2m z!&+Yk(Y1$wo;-cI^HCcFg6s5r{gR?JQdBzkOb&=gqC5Z$vEbuiQ@2>mIZ! zLIyI6+2b_2*PyHizgv*nwJ4Wor$akgc4rSUe_sHQ>nr<9xr}7dv4w?iPdH!k*VsoN zc4vLyl0gX*mpUT*$nx#An_|mE?+nfz7KK^RA46vj`u7}X_mV%p-u}!7uD~p?7X+SO ZlcwkkKZ8@-EzADj$H7lC7lRBq^)JLj&rJXT literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Soil/20.gif b/static/img/Tiles/Soil/20.gif new file mode 100644 index 0000000000000000000000000000000000000000..c3578be532dfe8f5bc436b2fcd62369b57e70aa9 GIT binary patch literal 791 zcmc(c%WD%+6vpp7lFVf8y)#XtP0~l^k&H8Kgb1Q-igntilQGYUsX<(nq$?MK5nQ+t zr%lsTTSZ$7Er>)KM4{cd=+-I-b?w4!ap79TjjK5QD?F>i;dj38gD-Q<9G|F%K^Xk3 zf?^Ei6=cUzDUQl2&d1yZXJuH?_?(PNF_e>`t@1?$mEDU=s@Rgaq6=#{BXYCDoF%~< zqe3x;D>^@~3$sx!7jp%1-hGerX4HjoMZgZb%hp6?k3at7C#0h3OG)Ugu3$ zS%Q`bZ4IZwY+2>A63j%o`B5RK;F8McBxGwsA%?F;SW8BgQK6LJd%Yg`e_}f zaT?*Y6X5GPm#WQ`)@pkN5NjJ7WODuKW|Jg2a%(fWy}i3pmR~Wi+XNhl$OheQB}jTU zk^%b%Rcb(*9GD=yhg}d3uuQ-U5I&%3a2|TVxBf&I2hULi^@Jxqd%F;btdC$nhPWuT z>*>4b^M~RAMEe88)K*YSuqWv+kSVFgjy)FGqkLyI>0XloXN1%raB@UHGuZ`t&0b0` zqrr&5G&*L>k5S=$;De@qhK|2~ zwmuM0wk`fjqPG@NzA^Y=Fss%vP0# literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Soil/21.gif b/static/img/Tiles/Soil/21.gif new file mode 100644 index 0000000000000000000000000000000000000000..02af83c9f041ef9e163bb61c9b11ad08cfb2da56 GIT binary patch literal 787 zcmc(c%WD&16ve+uCiBRA^JtB25|ULp#_B+ z(xP->H`0Pq5(*+}A>F8pF2-V4Zu|!fQla=jD6K9;A&!5AcXhe^?l}iedOQ_7bI}7l zV7CHtGM$m=LXge}>7v49WNTq`5tdZe5b3;38zL+yY)+z!*2N+fMiZ!<1*=S&r$+sh zCcud>my?-Nh%JY>(Ew%0mLQX{-h*r^V8KjDWik>>@l;x%#(0?Kp)Sz6NNXa@N|uY| z%M=uPEI?%~M+uff+=$PqiPVUn(j_`2z(F@r3NZ;ERSa>u6;fez37%Kk$`LLVfXP0p z9AZrwD>}_}uiwvBfUnLOs1UC@x2l zis%F?^mqk?GEVaSpj$wn*{D`UC}bU;aSZR$5uCIiC5J}6%eG2;q35^*JH#B8b50zA zM6Y-KL%ZU4;XT1_0OZqQH-fpAmOc?2da#+$Hk!403>%jD6Kl!Z9n1#!rT35OIBZ{7 zY#{(87n~q!Zmd1T?N9k=HTkAShgajbK_g)-5695YA5F7?aSCVhjmPh1$!L7VVQvG$ z|71WlcfM>IcHkqP^YI5{_gVhO*Q^PU)oC{eu2(1HFAsb%Vs0y0$F!;8{ku2Y^;djN zn{BSu?q8Z;zg*pK-b3u6NZIU~ZQEbVJ;_E3nYn5U-b#5B%^O?Dh!|aIRqNmCRNsre h*3R4S^{Fd=Vtc=TDqwr^T4r?`o!Kok`ymR3{sJ(&quT%g literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Soil/22.gif b/static/img/Tiles/Soil/22.gif new file mode 100644 index 0000000000000000000000000000000000000000..e91c16ba3e6ab05aceaeae771dce1643ec1f8292 GIT binary patch literal 797 zcmc(c%WD%+6vl66CdnlC&Yj7ldDKZVuZ)wVLam6g3Qf{BnNHqK9BKqf!G+L`?uxh= zrL6@)x^vM|D~gB+KG1~}qz?pL6e@yr(S;}oZbZe6ZsPQ>@T?Ap-}$}|zS2Z7dvZDo zqTs6uY6?@4nMRVSCz+;-D~i2fLqaW$ElW&YVagI}sBBGUn)byeRjiA!X2TjT32-z9 zbrGFOb2SCGQfxcLjV54Ou?2C(eowN+gbm}ChAT2E3a})?aRHSCWQdF*F}j4Rvh8B~ z;)cqMCt%fflu;|i6?m^M!9olgGE)@MaD;B9aGrIBcib zqOB|RJ@EfV{6jea zFu}k2~NkLBuIAC~R1P zARm12=JWnb0(F3p>kb`pGqjOg$`uyQuFm}2xjbE3gyiIh=d)wm96?OIU1i4R79irk j7eDFNqPD)=7Y6dHU(Q=ACm)3KOvfo;3`7Z+C{TJCrlptm+z)oVy<5(~>JDC7t9Hl%_Bv!xTjsicA@sQEWuflHyWaF0nM6 zlHig{R8T1{B*I-r6efnCso=DXru(^4oXm$|F)o;HNR5~ZTGsi>h>(_0G6KtSKJ7Zo z$e_s5$#lqH)Ob@y83~q$g{(pf8lRQ1r3*_cnH}&OQCu1p3Zs0x-3I@!GfCRg z1%iWUV9d5ZfqQkXA6Rq__yw@G(`;?kA&M9~e(L0a-~3FUItz<1IPuc9IHsvgsp87^ z{72k#qVB(5w-deullq%_Vd zWbaTR!P)^@9la&cS{)(Fr62V@euKQX&*yB`=0tM(>MMAE+WBnFy`5r$-nY(}F3g;X NeG~B4Pk{q7{{VD_l??y@ literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Soil/30.gif b/static/img/Tiles/Soil/30.gif new file mode 100644 index 0000000000000000000000000000000000000000..e27c46c494b4d8a8b736f03dc2dfe6d360edc7a1 GIT binary patch literal 634 zcmZ?wbhEHblw^=(c;?LDr^4&6%Il-d8=%VTt;FM@$m6fd=dQr*t-|XK6jbB)SK$rT z;1AT`_fq2VQsNC%lH?55;PY1E4b>6|))H`%j1lix#uCrF*&PX%Z=ub(QPn-;IHGM~RHzncP2pq_x0 z1c$dW&;S4b8HONG{K>+|z~IcF19CekP8is)H*h;Qx3spkw=i{d_i%9ZOlaj*oH$j? z!glHemN~O}n0a`F=XJ1aa5F4vcd*t~5M0%2#Kgqvw6TR*f}M|5e1|imG{2+>>j5S` zPA)Am)g26+jM_YG<`+yjm?U`FR<2^uw3J@KV6~BvnVFG+?@iN^moEi5xCBI3G4k>< zDVYih`)yDtb#UIrrJQiYz_D=(yR=-*9)pAjj*MK6HijMs3QX)wLVPI#2?v51IK+h* v7z7p^Ze-#U37sX-z{1Wd#Zj{1`GaT`CMLT-6#`oh@G#h@oM;i@V6X-NhvZ_d literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Soil/31.gif b/static/img/Tiles/Soil/31.gif new file mode 100644 index 0000000000000000000000000000000000000000..24fb39557d5ef85f26d90f195663b0dde823d1cc GIT binary patch literal 634 zcmdUsyKd899L4{i?ZkGziyZ~pIL*bE&#B{5+vqmjw+x^jOwp zp^5tr8T)!pWi`@TN%^==Jko}RiivdBS2JzR2{ zTD;V8dT5eSON&i%w63Lm38$&cLZ9Aq*ud37lMJ`?y|R)xWU*Mle;Dhpga88Ayxe~I z3CQOYsf0*fMo;0HfW#YZS(H|&BH-t`daFW3v9+ykt(Ap+k4QU~5(EvtD%KHwv8y0e zlZ9*esRd};4<;ASXnrNP zdU4T^5HC-xP6r@=`uflLwEcw1_1PJq2?Jt$&mNiqDy{pQU(Sl~SP;DILFXmcWJaWu i`H=u<`{dWRublH?55;PY1E4b>6|))H`%j1lix#uCrF*&PX%Z=ub(QPn-;IHGM~RHzncP2pq_x0 z1c$dW&;S4b8HONG{K>+|z~IcF19CekP8itlHaIsmw=^*c*)SNh$}{oX_p-E3ZerjQ z;F4vL;*wEe6rM7fiI0_C7O0U^T!3-WWHu&Ab|DrSL1s>#4XutMto&?j`gU?=a(i1v z)C>)jMVT3;*iW_Ss0$03Dlzf$uD{kSI)h^;?))G-EP+YKJ0h5T4%?*Kd4_cY{_!1-%0w+vhVq!U= zVX4B@A!gmML53-Tu`5eQ-5|lCNUd?car>78iHa{K2=MkOIV6;LxGv^qVq~xe0C4AH A`2YX_ literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Soil/33.gif b/static/img/Tiles/Soil/33.gif new file mode 100644 index 0000000000000000000000000000000000000000..2355fc12bfc3600b33a74d27ee13d6fdc8fee27b GIT binary patch literal 632 zcmdUs%}x_x7=_;sGt-%VKlAkmXrZ;={89#@CB|5*MwpSA+Nsl)mc)e{cWz9)1ZWiy z5i25+xG}~H@DfOfiAy&oUV+!3t5Pn*vpkFEImrnh1hrdF3Q&MQKExJj+oWZZj!hy1 zH+0;#X~Fpm%k7t+ zK=Rj?KN!AvxwE_XYX9}Yo5Q!GcSrA!Kb(9#Jrzy_$Q-Z9l-@a7&gBG&!3a$+I8q^* zx_$_CVA&NdSt>~f_DvZQsZ3SQB*gOmtTZDNpvnzX7GdtwZrYP_F3uxJ8`IZ{kkWRt zz$IEpEeZ39DM9|bH`+Sayt_*E(NFJeJE;o%#|mE^!WH>3Pd`%ztd{%oTZeObR(<+4 kU;Vr-&#PQy-&SED&nUPC_k-^-j3njx+0+oSiYUPC3xmg5p#T5? literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Soil/40.gif b/static/img/Tiles/Soil/40.gif new file mode 100644 index 0000000000000000000000000000000000000000..20f2455d8b98fa5da463b36fb86980aec409e376 GIT binary patch literal 861 zcmchU%}>){0LI_G>(-U`qXi~z>awzoI4` z447Y-7&RU=z`>ZPiHM0&Pa6<|i3jly5aYpk)SI4g{1ZOcC(rZzk|)s{Z$EI-2Yld1 z0azNzsw5L6X$AM`G^dfAMpFtNFoblFNKtkCOkg3;+cX-rU^$1aKQRD2$gTCZ|e*XGi%?Iljw-_Dw%19BCWU8yWbp z%%A|?t~G$YGZP%-;ci27X&n2!z%fk>Z}hjB064}T_H2PL%sgp^qGS2(H2*~6x%Vz7 zzvf_A!CU5h92QvUZ2Bmz0hTl&$0S^DT|3fI%7U6%sn-^03#h+t$>+%ksWS#&vy4uGw=iTmfLz)Z<)_j)A}-2 zy#s0HvbYv|T&z51JKe>|cc=6Af#nC_v;&`^r!vN+(fB>IRg|urU#^Zp*m3RMLUp|8 z+CBfx+c0;0C;Z*vJFya(ba}A(XK>bzLGH{HADqA1wTBDBmtG*>WZ3=hCU)|7?atv> zSLfYOwu@6R+g_||-PV2%bcmJK#VBKbl43tAvyHEBD63K7Lj6d7n0bGn1v!0A6}wz( J%@GM4{0E3Dw~YV* literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Soil/41.gif b/static/img/Tiles/Soil/41.gif new file mode 100644 index 0000000000000000000000000000000000000000..65d143bd29cab0067e3d61bc8c7d32c9018c6483 GIT binary patch literal 880 zcmchU-ET`_0LI_<^t7j^@5gz&wzAr~p3|Pz={mBBF`sEWYtK%nJ=L0ziZCunYzP-3 zEZs1I#7Gzk$;6HC)DR+sEF{9nLL@Fm2odfiNVuBrpYYs1d7kH&JgN3%%lr*q;00fc zzzmU$N;-lh9l*IT&4x%eM2!H>Yf?H$3K7M>PIO*YV)DaXq6EnX@wXHS*}Tih%@0wrpAl_ zX;*Nvo+OnDHtmeEjsPx1q!m%7%g9iWQ6bl8HZ18fUhEaK4U!oqW&=z4aZVw)hq)kz7!0%X_*t8I?D zn(3m&3q6oSb7r}VR%px3Bh+@&hg^Or9G@ooJKeR#Q_{tz+4R|rS~AmxW$ro-qhj%V zmEEz*HL(Oq&X`9M8^op>SMvv}lbfry2tOg=oo>5qiq<1l@If~m|FpD^Z!L&@rQx@h zxwI&;ly|@Nnz4pn0*?l1E)|B-_Bal1!z1P+qdwhb;T&In* z_}cx#u7{D`?}txYcswk!Go#$VyW*aW_HwD^P|fKfH8xIKb^>w4Q@-3U_WL~gnDxfP z)-9KW;lH=yPvG`#RA$dY7x(i$p5FF9J9^Q8y?W2F@gMNWp<3^^!5II$yQ!ZKmKkuY g+$xU(q3|WQk6ZdN&Z3QFh?m*Ri8gDG(+(E?10bHh+5i9m literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Soil/42.gif b/static/img/Tiles/Soil/42.gif new file mode 100644 index 0000000000000000000000000000000000000000..434f30f4725b7afc74b7bad5c3b346d8cfa36856 GIT binary patch literal 856 zcmchU$!il~0L8y=W|BlvR6p{;)Y=C6^xS-O!Lh=gL{kW(JnE)|EVm8>cNG?Ef3MptpK1d9e8VXIzxEK=B zGRg;OQKJQorX&<^b0j5Xs6sACvwornn$37ySkz^lUo02Wev%2`Opqj{W?W23IN?L- z=5$CbG*b%g_M()GQ!+9&A?9^t0<;)zGSF@xO8HR2i%Jofu8@pObeZ&Of*EqgeaO&6 z-A{UCoD7qs+{C7(h?w&7wj>XNzPk?Qq$^_gr$cG$O7J?DLT1G6;c13i$oFa=_3Fl`n zvJAxD>kyij6+@gCxCIWfPcOn;JL3|pP>gkS5vv{E;x4hkB0{@m9d9k%h`<147zC}e zmqzYUd(h!nkC$L=*%~}<9h>Di8@4#RJNs6@+I-;I&)Y*)2DP;vALJUtsAnG-9sM%R zd8pa=2of(LY!honrE&RMtv6Tr5L zuSxCI*cmi8P^s6Wv*%e)m@CJtVZbVo6Nf=;$kM*?*tOo$>zb8+!t-aNG4HJ+&Zs}nO5oPUXnkBW}_EB836lk@fC7k>DLsWSB* zN7<8`ITK{xP9DtNy!vS>G98ETgs0q9em?(b$D=X0sUkH#?Vq`O_+1wm1iQ!kjy^QD zPW?Ip%(>A)X8Z21pU1vM`s>_zH?#I`e$}o!HP>?YzPp?z=|ADwew=fDoG&++?ODG!00Q9a z2rwhKq~fB23t?2zNI8Pb5n_Zj? zE4C{_`hze>QI5izE~JBP1%*^&HUsGo!CVLq1mV`WWJGX*VuRu>x=@RHGa+c|q7lY} z6lG&LOKohjH7*vzs1_B5<6>Th28D)Au9LDRvqD&C>`uUPZ z78Vx3e-!=0F#wE!#A4^-Pk?*D8flE5YcPDA9ZD`k@pQMBJwM4#xEt+v!YBJ<6Oz#vwt*WSO@yLw`V{)Z=rt4*Yoz-m?i1GLHX!Pw!UwT z*7Y>~{DQ?>)2)x9!d&Kr7`QaQr!MSjzwe&})RK3-c~ak#yglF`%X<>nz5VsN`{wka z>0h*N&qTPHM@@%wsq5^Ai=T!0Go3Io{JT%CU%=g`Cepx_oa^dfz`W(%F?urP^{iF^ UYA@b?!F)Pxrgu71A`dqF14wwbSpWb4 literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Soil/50.gif b/static/img/Tiles/Soil/50.gif new file mode 100644 index 0000000000000000000000000000000000000000..b938b373bf90a109f1977521fbd979d3a1411d90 GIT binary patch literal 633 zcmZ?wbhEHblw^=(c;?LDr^4&6%Il-d8=%VTt;FM@$m6fd=dQr*t-|XK6jbB)SK$rT z;1AT`_fq2VQsNC%lH?55;PY1E4b>6|))H`%j1lix#uCrF*&PX%Z=ub(QPn-;IHGM~RHzncP2pq_x0 z1c$dW&;S4b8HONG{K>+|z~IcF19CekP8is)H8?jlx3so3bGLVOGj;d1aB%cbR^*-B zXKNugy_;p;oOWRz9_9sY4BQ&*%UT2#bgdoMG&`{}F&S-k7H8#Smsq-)RYa0snsKwL zm=+hOUhf)nHXdz8PKGrMY`hXo940rGSuw1Tw$yw$hnsNmle~41##?5QX&Nkf(eII7=5?66#;hsy| zCW;*r&q|N=95VFTz-OH*?o`RZqg{tY7D{Z=DxK{gniO7A#$Ezx)K!KPIj1 z7cXDEezWs-_ubz9!TZAxM<0(*K7BqFPjm3)61JmhlBYYfgkUE=3o=CX)gx@;}X}0U32`b8}_f&`RpFt#fmn*7jEe flRq2>pj@ZYPxb8Ecj4B=C^pW6lq41;5$^p1A6r>L literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Soil/52.gif b/static/img/Tiles/Soil/52.gif new file mode 100644 index 0000000000000000000000000000000000000000..5b32ea3146dd53d395b6d19168b4ee70b9ae7e89 GIT binary patch literal 636 zcmdUsJ8#oa0EMp|$BuKKNfVKzPU3f+Q1J$}p`xT#Z8r{%O#)&?VqidmN=!_VKrBGo z%nW6Lkr5%W08@ubAi)3<11zOTEOde?O@9VwJj3@L>G*5j!s7KZD1%)WL?-T8xNG3p z!l8}=4fQPIt1vWiI4y13GjZRci9gYJJN!P@I1|tKzRp`~>puv0%#ujnwFmXt1 z6HkR*0}YzYS5at?!BN)HuvbSb3hbJst-w}U?mHyZ@s%d)H`z)R#tw@t>}zPbBCk$4 zHVvja6R)bM-=KktF3-`(oWgNr5wD3a8Kh@XPesWw)+%K}15G9q@E=C|CvX6`VE%CX z;U_@)Iu!W&GQFQZ4VLn}JKESB&2XlYtq9dDBVfEW;@A-x0In*f$&+VeB&TwUkeAB5 z_;Rauu6E(LDAIJH{bnpxxKzZDHNZyXm2ssN>lplPhyZX6t^2|oa_BE-NCXvGRb zs0&>v5<^)l7#M+}D`H`wV+0fG#KIKPpTQZ=@H|I4(N5UfxL-w8^eaHA4MPV87Gw@2 zCW#F)bZDgG#D-*Ey2{Xov8RkYrEikH2_u&dY={kCg( zIv!YL;BfR&T*A^ zuCrlVC*!6P>ty$`lG<}Pqz(;zxNFg&ql7vct+BQ$B^H^@X6QeR@mJ&!3ec5{?H8Y* z!uLJQOHdJoLU&!@c=UpMSy&-lSquWnXoSc^z%Ng7h6w0zWE}TbL(1m{lPS>EP9fMxV@c& lEz)}YY5FsX79RfibNv4J>rwY5 zn53f>^-u*tsz?<*2r7k&iuMq@xZFw=gnDTeR}_jA)Kg9W3E%bc-uuB*dSg3xl^Q`K z_*?)P38g$J=|%|`%zANJLTL%BF4!+~2{+35_@t+1p_Ch?B$So8v2>X3p zTx8Q8+%My-j1_^6wpd~UoAGif4^Fy}>aI1zyq{M^m|idE;x3eM!-NOLgj$?e1lZ$b zqp zY~F$PgID#fz$!IECrjKcP$r3%y0GEK~v+4LI?IRJ`2703^ax0YS*GZNIqiD3FWx4 zz;rW9bAfBR$)Y{{Qw(%!lymUMfm_0~2JD2rVZ2n*XQ|o-G(+tDRhsHtMiCJ>? z<3w>ruUqv~#i&*x0lhhQJwExoVsq?GZU_k`sg7uw68OqHK)~=}jjt+h5>LE?3HXn!M6WdQd418%~?4gdfE literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Soil/61.gif b/static/img/Tiles/Soil/61.gif new file mode 100644 index 0000000000000000000000000000000000000000..4d4851eb67ee67a5eee33d502acf853bb0a0e853 GIT binary patch literal 878 zcmchU%TE(w0K~sacCN+pZC@nrDeBi>Am(SxbWKjB;_GxJME>q>3eI^+Q! z@MQoPL6TEQRwkJME`(@4Nb*6d2XL>-XJk?g3t7doNKPiXAStMPULi(^8bO+taBrAT zODM0P9s)?w>>qv>n2=O_EW&=c*t!CU85p)UXSIhZyfMjHxQAkR(;({jP-F}p| zro%$PN(JdIAJQbONvNpuNuMJl)82^1KzI3(=104Is6Se-2T4XExrLs zdVq9EI29o&$-<`nQ6U?^#W3F&71AQoC8S&AD$R%Zw1~HRxO|K^Ld1v(njfbm+~Gsp z+-xpHtJNy_kCOh_Apip)wz|3c38<@@jI$*f#m(_l zB3ZV*;l*;e(GAfz?`CMXXSnyv4#E>yOIiGyaWJ3b?8cR=m04NZ|IC<{80IWrBEs9N z3A5EPDS-H3Aj!-#tlJ`n%34<`ZX}e&)3f^N*rjR3L~ZR8mltPcc&qK?ce@a|+cm8u zKiFp;sf!Gt%Do%iW;f)-smV>1ND1QMQn`Hj=Eh_FeEP5_p}ec>TiO5~yty`7V{0u= zPB}SXYvsJ1WpQQUe5y%tjfBk$@OBxT+ENhb${3aszkixz4?&METqug?K(lh(J7qlg zjIveMTPfWx-O-?!K6CNV{CYoX=>$EWl1w9a@W|lbkzY2O@CV7TGpV?e$hg-LjzZzTzM Z@AQIeO=aaH7p(aq9Q)1$8VI;|j7vQdXy#AW3PBX1t|MPN_JzP%b5dB(34JPU1=oDT8+UQ9{KD6%|Y=<`>f%?QLr?(9Qr#1W>mh^@TktgQQiGQpsjhDp>B0 z0J2Rv6(l_>j<=Dx+Q6oLVL21T1xwlzmXiufsVLPTH)$>;B^A8U>&itWJ4Eb=oCx5! ziaY#heXBDYqVx0f;5SPB&OrdSg2=+=!Y9BnUz8#57y*E1%Vo$4qUF?StH$sJ2xYe) zL*_)8338+bvFAPRVL|dROS5o{orav$3jEyvORnYx=UU!%jtA3#y8>MT*%*m6<3B}F zchQORB~E~dVW$4A!Z5I}gkAu%KCpWg-oVy>ZL6^O@*1ogGkMe6uHzs!-JjEExs?9SWV_i+lMDt+% z+NTadcnwNQ{dNpAulNhgEAMuen~+ZdR;8tg1i%?JJvxdVeVG^4;vJSbI~5sc51FR~ z$jPh6E4#y(H2J!YE73b(Xw27bR|m@{rTbB1ZiYF|^s_hq@%$Z)4vSs=t{0xRT1jLM zKiUhvJina$@94fWo9bX>`t&;y+smx6GtzG-)r?Om#B^6Q#i%A7% zgRG#jyv7nTj=HUJ8Rt|n6J!H^nhMmL$+k8rrI74$xtR3RbbzFTG%nZUQbHy%A5PY% z!&1JU3b9@fPADXy;G!n>c&zCFE40-aSg#K!d^qO8gYAu}5KSvIrO>UKSPa{uKAh8} zl%Mu1B;H2jN*$XGwo3zkQVfgR+NGq7QwmPi$u*W$#iUF&yM%0qm{V!4LrVBaTp>{p z-r%%kRJOFV1pcFx-v|O=fR5$O=R03jrJLLJ8z;j&0Uf98l(CaWs4U*BcdM)Ol z1G-E?bBot%c0x0eU=bSbra_;u;t~&icI>%sW^{et3>ypstE9@w#J-BUTkol6^zAsXLZsX* z2erc!CNORQXBAHCP-y1l2j3<}5ieYi{2DtH7aXl*cqB4XY5=b3O&|w~rM>cfH;}7S zGZUOMY3V%IiY8508Uaww05Ea`>Xp6wAux@d{nQQ6FgW<^75AX_^Y)JMvA6F|riZ@n ze0b{PqZqi?`sUWW1?k31-O{kK^4bHeM|N}OKBrpko4pE9(}8;r-}jhK*w$*tU-+Nc zpgFony*wMWp60Z!k!CqZRMp^JtgjTK}Sa&Iv8-@u7+|z@W{b z12O~TCkD3i10oCp3L;z#{4E9&Yvx^eF}YEwfrH^-rg4PLk_XR|9SkhmrnGv9@=fNN z%>PJ;V+PCH4G9-C6@_FZc`6gdTzDCk*`!*k*cl`kc-eXr85D&|1*ax*a=7r#N#tT* ivM8}sV0oe_J9h5cy=R9bgEau>=|@li literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Soil/71.gif b/static/img/Tiles/Soil/71.gif new file mode 100644 index 0000000000000000000000000000000000000000..d19c5848e57f86f75065b490e705bf434de8f391 GIT binary patch literal 352 zcmZ?wbhEHblw^=(xT?+Ir^4%_%p0i27of`PugV*&!SANP+|z@W{b z12O~TCkD3K15*n;M3}S~U6~X%aCq>$t@03MV`6uC!5|^Rrs1%aE095@!6DsApyT+J z!=jfpYIzng?0LnpM394zg{3-FkXM;goPmM0HI$7_rjDtvKSWBBQA9m|x+{+wx3t{+ nP$ng2fn}ju+%0QD_?b6`ZrQqH=dRs*_U_w%;NYQ+jttfS>A*yA literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Soil/72.gif b/static/img/Tiles/Soil/72.gif new file mode 100644 index 0000000000000000000000000000000000000000..112c35afea8e899d0fcc82ccc690f1d314c5942c GIT binary patch literal 344 zcmZ?wbhEHblw^=(xT?+Ir^4%_%p0i27of`PugV*&!SANP+|z@W{b z12O~TCkD3C15*n;bfo%EEGasfV>SQ6iW0B2QR^dg9!RZ-P;7MgxhstWud`0X&j2oE)mM%vF9&YKh_;^1`etep*W0A`A?CY%I+DzWm(G d(&|hMEDB5-JU-0KECO;2tgI}V44RG%)&PgEIsE_t literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Soil/73.gif b/static/img/Tiles/Soil/73.gif new file mode 100644 index 0000000000000000000000000000000000000000..a414c28a4f4f9a81391147cecaf953af5ae5a2db GIT binary patch literal 344 zcmZ?wbhEHblw^=(xT?+Ir^4%_%p0i27of`PugV*&!SANP+|z@W{b z12O~TCkD3C15*n;bfo%EEGasfV>SQ6iW0B2QR{Cwek)Yf2?;ylpt7RMj9a*w%Oa3T z^6VA`1{Mpp<}C~iF+$3`f`Ke7d>kB%WqbjQ3T*PKyb_Fz?EVZ)EW)x~LJV92eheDS dtjrATiX7}yeKmRbRhYy|Ik^}`8GIZWtN})PIiUam literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Soil/80.gif b/static/img/Tiles/Soil/80.gif new file mode 100644 index 0000000000000000000000000000000000000000..769c21e2d1f41052906a215e109c23b831f21997 GIT binary patch literal 932 zcmchU&5Ijl9LJw|-ON1mJoBWRU3b<=GcTERvS!PyXoW0)x;ieTXsA=K0Eiaj<8AeIurf@AxZMmYssxH+{ z)V6Uk4&9Vo)?iJSmMqjsla?J~XnBrQb=WYab~;QY*TTgFTuS1K4ois;Mx78aqBzY zmR%dS)3~amf(i?9ST}K5mnsRVnZ&Jwq-~RxM@TJn#bG%ixi)DS(qToY>*(-Iq?IQ5 zxY)GhW=5_Wu$?BIv|I_FG|_lG2LH?G|F9GQU66TTd(a7(7<=qsAA>p8j8YUA?|w8q z)1@hiohAZToQf$-JT@B9ViW*}q305_7svr>W5`9BO(62jp?P!CdS;5>K1;`UsN~}X zNKa-GGLpB29mWOIN9VKCJf+d}G`&IXfJ@*e-~hYt>#4`Y(Y-sj@870={%mG(?o(+Q zC{*mo7X&%YAdhX9SV{cs-ylixl(i z@nh!<|J|vsbHNH+n73Jg^wCw}JxE*x#ex^IrcwGWlqH*bA7`(LGvSzcTvLgHij0?|f2R ztvz&OeyF|$F47BTEa(S5=9t3g!%^U!X9tb%7~%;crKxIl&CBz&0Zv&&+qebzMQ2qB zN literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Soil/81.gif b/static/img/Tiles/Soil/81.gif new file mode 100644 index 0000000000000000000000000000000000000000..e54be830648e59bc2fcd0a0508647f2ea7115ea5 GIT binary patch literal 941 zcmchU%WoT16o>D;JmZ;r?_68PwOu=&vB#rv6QWcgaFar8r+(Bn_86yCg&JunT_Ds& zkgA9Ui}qI@0$Y z{f_i2oh)XKy&DE$@W&D`Q>decp)a4x?EJGiVEu~w3sGM!`0BKBc!ZKwIpn%T?)+(X}Fd^O;!%iN@nG_+LhS&Qbs@fvFd1FFFDI*k*+g&rvi309*Bk z4)gRS?-ot7T-Vza=uw!;-2o`ji`Xa^K9%}UHIFi}pO2>+7x_OYWrZ+uwNE3YbvmI}g4ZwbG*cPd;FCLp2b=u(d>`cbD-`*5|jJ&#S-EgR9 zOZ4Jb+IG&9hG%+x)q2$Cr#9y8UptRB<=KDJ%HGPFz@fe6Gr*a9KJ9@QKQgi>2Jip$ z1p(a4&weRzq}K-YiGot2wyytUGcfd|fbR=ioZtHE4&aUs@^)t_qYTjmYv*XJks)bJKDtL?p6tJ;DOW;8RJd+%J?7Ljbpn$bKuV;eQ4Y2w%o8I58|kyL5KII0a*tG+f} zgtX9lYsWT(v;}!nxi8vu(FC$cC@CaaNq#gb!Qi$jBoGoULK-L~X;*!LI{7DhRtLWC z@H_C!AI(i3d^HAQ;6VepI;v=>tfEp1)(l+L{RLHZ?3q$UMO7bZ$Te`$r>2yb#exD$ zD)LO6O^B``1D$EmAXm4ILXJ1w|~Y(6f9BT^(nWVnxGwMVv|cGMe>;6f9{d zmlX4|e~X=XXeJ@f__BdYDlBWboI*82sv1%zF6I?jHE=c_Dx^?Rg#{UUW90C#a406Y zrsSH~vv5H{PF!>nVoAk01?H2ms^MCicqXZjlcJxM5OYcBnxve9Q!$~Wps6Tdvq&Zp zs_Ig8LMo(0&myyyl=q)hQNP~@|H~+UF%$p|F!3bqNhg5oFS12^FcN%;;%G&R2O=T} z^9Bz9%P@y&ngsL5yg@R|ar^7WsKK<`Jmd~gR3b^I2cOdpRjl=x6r=;~C>R-KD0Yg$ zM`}Vmt<^PhRRpBNA}v@Nf5?b>z&jVV5hO%tH};v zAI;J73Ay7?d!h{A?b;BInCqLoeRumS3VzW1y}JlMCdSJ37dv*~h3pb@^A+7|=<>`^53sL%LI@A0{{z|()VBZt literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Soil/83.gif b/static/img/Tiles/Soil/83.gif new file mode 100644 index 0000000000000000000000000000000000000000..1b6f8b5cbd611c795327a39dd033dc48785b797b GIT binary patch literal 947 zcmchU-HRJl7>Ca}nM~&EoH-lPO|qM>`N%LymnG_=>1ypH+kBXWWMZOhYg0!pML}UJ zTk&#|bk~daVigxJ{AgBKSWu*QrGhZ47WSgx7TP;O3nF?~L24BtPX7tts~4W<<@ds` z_FT1i?3Fl(gI@>0&f>O?TN-YvQr94ztiRw+mh?=yt>KQ3bZi@>;ZswtWyHE7H8tEb z$x2eR4Y`^T8;aD<;(m^HO<%(=4Pt5VhllPP&V+q z(8>MR`V$qRZ*p8SeNsdw6pkdg;ec zoqempvhfJN7j|e7B4g?Gf;)L%hV25lpt*r)k8py0Z+HW+b?)cF&S*%LaDg7W2bXyC zwOzdZOMv6S+h^^9Y(Bxv)(fO!-YY3)@)ei@5U%F?f<(3 zfD2|)=M!G^wa^zRQv9>%DHaPgX4Q0}!JsTwEpN?xBM@2qBoU+TXmeIvyEC{p`5win z@umgPTfax1%%9x5zrVRPd+~bEL^~x;c!nuB3&7nzSm{f9_q5>?jPM!v?%G#Cm;pl3 zbdaZC&=>A(53O$nn0Z)n%29VLr4F-ObCX5)ANhk@2aDcm7lCITgop)J2DbI;N09mQ zyxV`Lq!MVXpSwEx>&SZ^z~@5l=m%h@;DfunlTmnURn>*CXEA|w=jxRQyAQd|?BkzX n%+0%5@cc!^Q8%qw3si6E_kW_syp!1v=gHyAFys_k8SwOfatX-* literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Stones/10.gif b/static/img/Tiles/Stones/10.gif new file mode 100644 index 0000000000000000000000000000000000000000..99e566394c998c2d0933d494f926f57f1cc1eecd GIT binary patch literal 1508 zcmeH`-A_|@9LB%D)6@2>1$tU=f+miN|Ev^Xjvd4z8!3#5FwU`M$ML$WEb16Ffm(p<>vm0-R!w|Za>MB&y%?; zBPG=k1yS%PKyPpF&6_tbT)5ED(Q)b0C6~)JFfh>5(_=Q9uV24@>(;II_V%k+ue#mt z6DLlbJ9o}xGTpv?yREIQv$ON^<;xC-qqerTuCC5%wKg?1@jQR$&Yj`m;ZvthojG&H zX0x34`PN#ElaPZ2ND`(H1t*)-NSS&R)HTUn|KYjXi zV`Jm-pdRN$jHcz8#iWWXV0HMKRP~{Ns0|$;AIilC=CnqQK^YaS}3*Wwdd+**oK@g4|JGOuSew|KdFc=;` zeq2ycaP8W)+}zym?(Wjk(u)@_E-WlOd-lxh^)4MEDK0Md z`Fux@9-W_`SF6=iQ&WDwe{OEBq@?8e^XD&LzI^fGMOj(d-o1Ov%gcA~-aS1%{qW(# zSFc{>z90k&v@NoG5_8G(n21+!eVJtUd-AQ0i3V~s4g(=QLzZjI10J@&>;(XlMcVFF;E zL~soC)DpfUY#I7l7ogQ~i8@;)<+Di1RaGf5g4&T#FcG4zjIA?Eq;#BT88L*IfVots zFw?Q&+qt+ReNa@d(wT;Kh5IrH2_^&n9pJcFDbrIl5^z-fy?&rFQw<6^CQzQ8Vmy3B zh~QcuOm9Ns3bE1g=KYLl%BKuhMGGXjvs;G0f>HGk zG0g9P5gG>AE@hQ~2y3g%P7sT2-GLdCSUdT$=_P9ZQ%jKbdE=@e$Psq_|U%Rv2Tx zCN};^LFktidMg%D$N{dZ0v>H~yLqyd170G;kPJ#?QCg{zU+@tCPA?%%=PioZp`aQ= zECqPd_`9dl@bsWpveM`@WfLT*l?jPF7WUmZYXU0H0}^SZ(*zqL1qj>DF9{G;!-z~O z9aksCoIyc^f@5ZJXjYvWkBmqHYzM6s$%*X&BwxWZ=|F}|x{yRp(Y=z)MMI}-m5%#O zkuVB=X z&C#h5RGL^6$-Ty-z{TS!zfkJld9*9DiC`&T)ED|@Om3~Dr&ZOjNk$AD_w(B1c)CoE z6O?yNu8v;7q&61BVTsG#c*!5@GTIY<4NQ{ddRGBR-Y+$%R^wzEQjo|b-5AZAFom-@ Ioq=tC1FfO2RsaA1 literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Stones/20.gif b/static/img/Tiles/Stones/20.gif new file mode 100644 index 0000000000000000000000000000000000000000..6298f1cc249763b327c1e41a77e97c560ac002e1 GIT binary patch literal 802 zcmZ?wbhEHblw^=(cvi}=Y}vBevu976Hm$L-aplUD^XAQ~t*vctZk{=F=F+80=g*&C zUS8hY+uP94(9_d1dGh2%ixw?du%NH6ucD%2#*7(FO-*y=%-OPK%i6VTr%s)^diCn+ z>gv|k)+I}pOqw)l?%cWS)~zcmD_g&Q{e}%2rca+lSFb*rGDAU{8U*REZusi~`0t?KXZU%q_##*G`3l9F0lTCQHbT2)oG zZ{NO}nwqe%u<-Ek$jHcqgoNYAj~_gEFfcH%qoZT*-n|nhOsK4^Ja+7upP%2gYuAn* zJ?ic49S{((aN)wDqN3p7;6sNF?bxwn^XARlw{I^lE{=CMP|BbKQU!_=2KN6Ae5K7T zt!?csLINE)r==k(sT66&zsRBDj+2&!#}@Wi;sn;Uub!&1Ba}9jFgqz z`erfP42Dc+1y<>uJV{Q4N-AQiX&meMH5r-Y8TkyEMYxwUG4My)W!r1;IO`|R=VIVx z;A9nZwMwzk5uPE+uy$SM~s7GhlRxSNBKnN1>L%i`vV+)Ng0I07CzP35=LnscMj;esL; zdtXRKLo>$~VO};J3r6K5EuxNmj2r<=Tt!UPxL6tzmE8JyjrRyJ3LT476l1HGxDs(e z!KsOX^O?oZ!lf(?%p7hi8v{EUm^is47#bWJyLcH{1z1jRf5OwjEX00QVWP4uo0@*h z0nG;t3~d=kc{Y+8l9*>Z>Yd{8aAzn@7_5Yw)E6)=WE7EaWMHrc09~3n^#A|> literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Stones/21.gif b/static/img/Tiles/Stones/21.gif new file mode 100644 index 0000000000000000000000000000000000000000..fbdfa86edbb3a1f8ede619d58d0e6ed1fe40a39b GIT binary patch literal 808 zcmZ?wbhEHblw^=(c$USmY}vBevuDqrKY!)Ql^q=&lP6DJvSi7eIdl5@`kI@YSFc{Z zXwjm1^XAQ*Idj2+1vND_OP4O4G-=X|88aqKn9$qXTUJ)q+ScjCl}jg5^yK0fQ$uV1@%Z9_xD^y$-ca&k&aO3KU26B837A|ftaxNz{` z!5uqxw6(Qu*|H@jCT88bb!*nF>FVm5Hf>sAVc~`i8_t|LbMxlSii(P~w6wguylvaI z<>uyAS65%XdUfj5srmW&-QC?$QBlFc!3!5Itg5P7wQ5ydT-=o_SI(b5zkmP!%*@P_ zCr?I3MxHx&Zujop$B!Qm3k&n|@=8ul_V)H}X=yod;DEose`;##tXZ?#+uKV^OZV;D zw`b3u?CfkmKfn6=`l6zu@bK`2goKS7H(tJcIV2>+(a|w0E32}y^8f$;43q)IpDc_F z3|S01AY(vr!odE&L6S+r)Y>qShk=ttL`;WSf|-rkK!BH1mrI7*NG(%Y!Yq0y0@$u6W|X9M&5P3#P8S3I^VwDAfuxJkr` zF*ZEqWD{9)tLz{sPQ7U3Yg;F}RA zr$7cn>Cx{-;VeNsjEOZjTX{Jw=49;4VQ^%;GQChCQ1!QwtmPj4#Y%ON3Jlf&>=Py@ literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Stones/22.gif b/static/img/Tiles/Stones/22.gif new file mode 100644 index 0000000000000000000000000000000000000000..e314bea0ba2f06691611eb6400f9eb8255dd73cd GIT binary patch literal 813 zcmZ?wbhEHblw^=(c$UU6dGh3?OP4NKuwdT2d3}9-vuDq4ZEc-DfBupsOBO9!G-Jk$ zWy_ZJ^z^J;xpKmU2^}3BbLPyMIdf)pb#-lRZC6*<>eZ{u%gb|ea+;c&nwy*J>guLX zpI%>IUs+jMRaLcq{rX9hCaqYpV%@rR)22^JKR+=saoe_SWo2cNk&(&C$sQgaAt51Gu3Yi)@yX84zIpTJ(W6H_Jv~E1L;L&t zH*DB2ckbN%`}c3%x^>p9S-W=aDk&*xYim1y{`~*{{~4$U6o0ZXGBBhu=zxp_#R&uZ z{{|j*?O1<%7iMlY5f(O8UTt0uUL{6BNe$67PLX6G89zC8K|w2nBsEcWPCjl{1_4gB zv@~%Oaj_t79wsIReSTrB07gZ283_(qzAb6i*1=(Vd;($|jBElb{M?G1l8k1I0%y~_ z+_`x9+2lhlJ!~zF6$M$CxJ9INpQbUebF*{Y`0((6_e2(EH4TXa3)%#EC4S8Ge7L}Y zk%m~Cz}ny`%H+c^ zf#Eib09Vnhn+#1XT#N#8a|8;QPY5w8Ptr6^PCVSqD78P~<;R0AZJewwIi}1@&a^Y? zcI8beXk=#GA)t3{R_4JI$9V)TgcuYA84k1UO%q9xP;hXY!6$AK(y)+u<4j=|gFPNf z4-YnSC0vR6=Wu|Tg_VuT#W3aaBt-_6W~NJ-y+0-{bt#Kt;F$2!ue*)?)0S;4Obpfl8Z#+H literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Stones/23.gif b/static/img/Tiles/Stones/23.gif new file mode 100644 index 0000000000000000000000000000000000000000..2bcae8fe4261ee2ec3e510580c2e0fe910604715 GIT binary patch literal 806 zcmb`^=}Ve%0KoCzqh@CMq}_tmWB0Xk)JE$VPpw)m7Ec?LF&JhGq=Q1b&qp7RvO`x{ znjKC%?J_Dl2r_k18jRkA^loG9)n4r727^Zb!@hsO=gs$}pfu-MEeCMG4+&UaUS3#O z7#tilo6Y0n<0~sGU0q#^i;I(!lbxNNCX-38*AoO`u~_>1`(-kj!C>g_?(XgFot~av zUtb>`9aSooMx$|ids{A-<2c^Y(V0w>gsB0 zYD%ZmU0htKRI2Lg>dVVZr_<^6dL7pr@C5kZ z;}SWcP^ySzwMN54Mzlm4yIiLQ9{^9UA^XLUs3sMZMT>&N0?CP)@5qn1z>+{OEv|}3I3#+cDITJ}&5bHZV}P6}J@qLi^+{v_ z^Hm1mgy@1|zd+=q_w3@i!jC0hD-$l_3Q@#GO$o-iD9>uLP$F`1nUtVF0X#$q&`*9) z37@+*R3vs1{;&rK5X9j}iiJ}|NZd6GW>C6B7|*FDhlfh+qDy}{o0Oez7Ss{4$h_yF zfQ33_Mb*Jv47GaL5y5Zlzs}`eB|U~f5EM<8sURcB4*0g@RgoAO-$ha}I!vciqwq>I zq{vK4^toAh5u7UE^M#n(%`D`?p^fY}vBevuCedxw5ynciy~teSLk?rcEm^FJH1`$>hnCo0^*D z&!6Ae*jQUzyL9Q&EnBuMSg>Hmj2Wv}uU@ohQEO}K)TvYF&Yj!b+#C@Rap1s#Ns}f` zoH(()y?w=s6$uFmbLPyMIdkUPwQKwP`}gkMTU}k<($dn<(6D32j+~sF%F4>imoFC- z6nJ}k-@bjjuC6XTJUlx)J1s4(ySv-Z&u{wl>3Mm1iHV86zP_hUo$~SVS-yOEN=nL< zDN}-jgF8ApYHDhZ963@{RMgYc6BQM;e*O9l8#Ww2emp-vKQuJ7tE($1De2_NlmGw! zXBezN@h1x-1A`BP4#+&HGiT16FkwPZPtWSrt0zyMTvJoi z+}vDJQnFydf<=oK?cKX~(xgdCmMrP*?VUY)c1}*tiWMuSPMzA<*H>0n*3r??-rj!U z!UbPn->$B%>gwv$)YQ3i=Pq5kw7k50-n@C2FJEqIYFf8$-HaJCii(QXuU{V?9=>MH znjJfK?Ao;}At7Py+O<_xRR<0nXl!h(t*za^fB(dZ6L;_4edf%W+0^D#{4j`aXHe;y zA@Q(L*`3pP+650mm1&-RoF+aW7#}_L=4KSSu|+ds`T6+{&0MlxTUK0L>@is@_Ebr_ H0)sUGZb-^b literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Stones/32.gif b/static/img/Tiles/Stones/32.gif new file mode 100644 index 0000000000000000000000000000000000000000..7dcefe2acf38bd35c63753d7086a9d5041381b75 GIT binary patch literal 646 zcmZ?wbhEHblw^=(c;?Embm`JXixy3uJbB5IC4GH;&CSjA_4O-OtY~U#nm2D=U0vPk z)vIUEo;`Es%#|xwHa0f4wzjTaySA#TsF(}sYirxNbLXm6s}?U_JZaLTu&}W5^70uo zX5{DRx3{irgfg4(zE(y~S#eHFCNVCK(=E)RIzmEBTEhJD*ISIm z6t$FD9IZ7UH#2ZCF*2ygGV#7^mQpgbkP>HQdm^mj($>epDq?WLAYekLFmuNeql+6( zbTTMdFgOS-N)nVZ7ttyBc<8YJzlhk6gcpX>o4HwR#0)1i%wV1A%4JZ&z^LB9!lv;+ eXOmMy!$J)^1BoaX7tUoY9tOILdNR8l7_0$g{JVt! literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Stones/33.gif b/static/img/Tiles/Stones/33.gif new file mode 100644 index 0000000000000000000000000000000000000000..7e55104e1e0c05dab797d6deb515ab9ade1d7a6f GIT binary patch literal 630 zcmZ?wbhEHblw^=(c;?42Z{ECR%a$!&x^(5rmG$-YeSLjBJw26`m9uBho-t#_%$YN% zO`BF#RaIVI-rnBc)zvk1>eNMx7L}Eity{Nl!GZ;?t*s3W4NXl=YuB!gjEtN#X;Mv1 zO)1)~#ECfq^+WIS~;NwY9aUPMyln z&+qK)oIij5#*G`JqM{BQI8azvIA_kB9Xobx-MV$>&Yb}P0Yybcp`oECPo7-3aN(9M zTUM-C@&EsShQS9Ef3h$#F!(X(fSd-369)Fn4Sr3{Ev;?s9i3g>J-vPX6DCfYJZ0*% z=`&_WWGtQfwS;f(kxL+*^bhnAMHE zgmnaBju<#;Ftmx9IlW;>IIw`3MYqmH<6Ig_f3f3L5vuCA_ndU~|9w0L-Uii(P@t*woXje&uIkB^UccXxh%eusyLSy@@A zsHoZ5*{Z6ld3kxizrST=Wy#6Ou&}UweSNsNxR8*L#KgpDX=!R|YNw~Cv9YmqbaYo& zSG~QxOiWCMhK5m5QDI?Wb8~ZviHTZTT9lNOW@cu~%gd~+tdWtCi;Ih$ot?qK!B|*W zZfgO~Amw$H&LR!^6J5zQx7Gqobp@ zx3{~yyU57MZ*OnV(9qV_*4oeI52^>{Aj+J;O4Lve4Z9tZYP*++~ZaxMCMW2Nj z7Ze2&4+Q`P17fOp90~+XkP0^e0S8M7pFRr^6$=zoKfeYXEOb|u6&54_Z%!Zr9S;H~ z4-fyR_2oS?Xk`E;$ z5OM(Efe{u~SS&H&#D$AA9|VlR5#{dfl~qi0}dH92sp4qO$QDtDAVFLnS;P?t06Q!>a4`S? literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Stones/41.gif b/static/img/Tiles/Stones/41.gif new file mode 100644 index 0000000000000000000000000000000000000000..87ae5def05edbb68aefad99701073c9b14a63593 GIT binary patch literal 971 zcmV;+12p_cNk%w1VHp4!0OorDrlzKzo}Q_xshpggpP!$bo12-LnV_Jcj*gC#lar*R zq@|^$gM)*2cXy(qqJ@Qpjg5_xl9H>dtAc`pmX?-%eSLv}fp&IwudlC&h=`Gqk!);i zsHmuzn3#-=jDUcEe0+SZt*wfRih6o_m6esfy}g&0m#(g^kdTmvhlhWEf4RB2w6wH% zczDpz&}L?4s;a8Z&CPUlblKV2v9YmOSXiB%oyy9}b#--FSy^&&a*KUVvmoH zzrVk4Z*QZcqtw*Yr>Cdd+S-18e!jlGOiWBuQ&U1hLetaJ$H&J=NJ!7m&t+w0R#sMI zWMsCswqs*s$;rt}OH0Ve$X{PyPft%yPEK)gaa2@PwY9ZPO-)xl9 zX;4s5xVX5yyu8cH%f!UQaBy(DySuu&y8r+G000000000000000A^8LW004UcEC2ui z02u%o000O7fDi;FOh!#Q0RTuM5DzN?B?1ZpCkq`DLlOuMA~H%JMf)(!|6qH~=;X#oC z6WAEB@qmGf5f6CR0RvA=@PQL(B$0v&A6U?U3OX?7ohupCkVP9f1W*7TGDJ}U4=?!O z-5wlN009CGd@xc03k)$w4QEK`od5&oNk%w1VHp4!0Oo!Go}QkjrlymVlboEKj*gC*nVF@frJ$goo12@1gM*@? zqJMvXq@<*)tE-=%pNx!*g@uKwsi}&JikO&~f`Wo~cXyDGkal)rStu&}Ula&lHyR&{lCZEbC%qocpS zzoDU_X=!Q0!^4Y&pVq#28OjuZ0#l^*D zW@ggT(m_E%zP`T7%F48~w8zKCV`F1*aB$Af&cwvTYinz9adA;mQPtJefPjFvx3|W| z#@gE2ySuw*XJ^gL&CJZq(b3UrYHCzeRAFIZ&(F_>hKB$D{{R30A^8LW004dfEC2ui z02u%o000O7fDaB!I7u%#009Y99}rCuOc4wb9tH&oeGLQ(LN_D}dl?4>1vEuaBMm7E z76Awy0}3Mv9UD1p6=(qu2L}Q-8W<}(1|<#)6bvvH9~U=HPFh|j76TOw1`q=w8UZB= z2?k3B15ra&Rbx^U5gHI2NKa~aPg5lY1P3w_F(ecU4IDra;2?kl0(53r0PsTr01OiV zND#0g289g|A_$@Np&Ei8Ed(Gqz@SB%3>gGmfU)9%jsgq@6lj2iNwo<)tmqlSgUALE z6(kU-u|>x=2?4kq@c@7Y3IGHIOln|Y0SW~MRA3M=;X{ZsJ~*5hup>)>4%`k5P?6$5 zkU3)i4om>SK!6GaB3vMNkb}a63MVuG5b48)5e~B!An+g}fPflOx_oKz;fM_zd^i9g zv8IWM9t=PfGf{9wfB*noP|$84&=^h7%wF z=)=MyN{j|YX!w~PzygB?G?H|R4`d(#00|(l z00b0L=wKTckdOxvNEraYgC&+2Mh$LQ!9xKLNHBo_0>l_21O?zAhYSaF@Bjin`Z$Fg h2MMI`0vJjpnIsS}pg;hLQYLx94jE*br4E4r06R#Uc(VWi literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Stones/43.gif b/static/img/Tiles/Stones/43.gif new file mode 100644 index 0000000000000000000000000000000000000000..25c58937bf7e15cdf90b2281c60d99a13ab81d11 GIT binary patch literal 971 zcmV;+12p_cNk%w1VHp4!0OorDo}QkirKOIJj+>jCprD|prlzE%q?41AmX?;HqN16Z znW?F%fq{X7f`WK>c!Pt3sHmuzn3#ZofO~s;uCA_pe0+q2gp7=gt*xz`oSc7ue|>#@ zh=_=*tE+c+cb}i1g@uKFetwjcly-J@udlC)ii(hske8R2hK7c1ZEcd0lB%kzv9Ymw zdV09HxRsTad3kxdy1Ivlhmnzyb#--(jg544bhNazOiWB{Y;4NP%D}+DU|?X2i;JP5 zp}oDmr>Cb_SXkNF+0oI_ot>RwVPUMSti;5`aBy(2u&}wgxo2l*T3TA#+S+MpY0%Kn za&mIDwYAB~$yQcY!^6Y8yu72Mqsz<7&CShZWMorQQ`FSdzP`S=@r z06hmO8x6$+J~Iac1O_umEfWVGFbo&8CIbpNOm1yCJW?QV&_lo&FH>mA10di4qYeQi zh)56s#fAe4Xys9$qJj(p892NkK&8nL0w-XRy2BuX2Lv1dtdk=|2MG)oLJXilYDNt) zO@yQ&0l>i#B`d5L00vUDU<3<>0upi{umFGn zkU1^?QiSN>Vn-nZ9d<-fF=9i84=)5X7_npmhYua1@Feu$Km#WuBCNPUB?bur6*5Es zw%~*SLO)!L7*Jyaiz_4$FkleE1P2Ei06a@U2muH<0~*}uLd3!Y4HGO}m{0=1g8>pi z3~C^u2#y0XLP%iXK?9T#FwXEOQ6K;S4Ic&t(SjokfB{Hs(5WzC4HG?VQYg64BZ7zn zf-VT~AferWieRWw1PujPpgb>;6VfhEP#M0 tXBxo30{{rnU_%QykO4w88;X!c5HJ9sAOj^huz>>stdM{NP)rdB06PUocWnRw literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Stones/50.gif b/static/img/Tiles/Stones/50.gif new file mode 100644 index 0000000000000000000000000000000000000000..35f9120900079ce03ee58680b0697ed7692c2db5 GIT binary patch literal 643 zcmZ?wbhEHblw^=(coxL4bm`LO=H|-E%6aqV)z{be_4W1i^i)?@*VfinR8-8IIdk^x z*-lP6DJxpHM=W8>7RQ&+EEy=c**Y15`HSg>H-x^-*UuFcKO-LPT9vSrK4%gg7? znbXwNR99CQ85y}^#fnv{R<*XaPMFn&x%gf8m z%=Gm1Ja+6@SXkKBty`+Z^fgy-N2jm=3oG`FIXb5U*ZfR|67Hse8 z7VGY7VRG%C%pg6vkB5b6dbcNs%$#;9CVsYsZLGSs_RCus6ghag);0%-C^0f@39=Al zM(ir;f)0n4vrDUKGVm#}F6Z!5kz!%y zVijM`$i~jYtjW!Q0pgj~+HLG5h;m$T-01+Qz_T@WaBXv9pnN z4x7aR2Nus(27y_7B8pBP>Sgsx^QbuB?9j~QtYlZCrv}DPW88c=qUAlC^f(5<3y;W6J?d|QYt*tdRHObLPyZrl!f0Cx?ZFB_t%2l$5MmwW_wZ_SUUi8#Zi+ zjg6f?eR@|{m$$cfe}DhRjT?)Kii(SiCrp@7QBl#+(Q)L+k+QO~ef#$9-McqGKR+ug zYu&naX=!OeK|$B9T|05&L|k0l#EBDqe0-KKU%q3FVWG(sb|Dr9Msbx%V$4cxmTne|LKB4ftk_sY zZ5Wl=y!!aX4U{?5f&xW&IM}&*R+w@7xEM1rdZ=5ADN1$8YASGYaR~A;3Iy15>&P?6 zbuhDXvI;Tq>aw}AFe%wGF^4hSOweFt=-Rm5GtT F8URpd#%%xq literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Stones/52.gif b/static/img/Tiles/Stones/52.gif new file mode 100644 index 0000000000000000000000000000000000000000..d19cbd85a2c2735f1710efbbb84b4f5a50ad3202 GIT binary patch literal 645 zcmZ?wbhEHblw^=(c;?5jY}vA&o}M{#=FFczf9A}YD_5?ZFk!;%*|QfcSg?2R-pP|E zx3;$S_4Uo0H?O0kqqnzr$&w|BiHXh4%~e%Zt5>fsFE8J)VM9|>Q*CW+V`F1vWMoN6 z$)rh>a&mG~Q&ZQjUAt(}q8T%0l$Dij*|NpQ$7kBKY15}qudc4n&(F`x%ZrGJaCCG` zPEPLc?_aZK&6O)xJUl$MZQIt~-o9$ps_yRY!otFUfPkq}r>n zKPxM1-MV!L4<0;z{CHPaS4~Y#U0q#6L&L<06IZNQ(b?I#fB*iubLY0Sv>Z5a;PU0m zQBhI<|Nmzgd_eIh3nK%AAA=6aX`nb^V1LxW$jm8bsAtW~AjHSd?bknHVn2_9yR@*2 zpfCpui}$1j{X#ObrnaIw42&EcTniWQC`rr78K@YuF^R5Updn~urmdyO%Ev9gXOg&r z2nRP8GXpcv$w{(|tR{;Y+1S~yPLyI1U}6!`=VW^@k;%!C!N=Z?SN-(_ehCK;3pFOC zZxcjLSOh3_HZWK+*zIC;a1`bhEYYYD(Pd^};AQbCDPnS9XMR@wQJYTo;^D!C#R~as;6P$xVpv$%l`B^wBO@6ztlyYvRO- zMMXtzZEZVu?yRh=%*x98|NlS3paF_MSr{1@0vU8bE&{~~1N+SeZaxib8zUcKMrC$x zE+RQV3J@^V_-RbnxD(fTt(Ym#e+lKm6efQMC!o< zH61o5D<)w9O<_?^g^)Qj%>56wGciw7;S^MA>{eIO5>Vk_cIi>%kuo^Mc;wiTP6h=J z0RvvACJ}l2ZyzQuW?<%F4qCRw!0Bi^k5MY0_C#a#=6MdyT(VwUR$N@{Fq literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Stones/60.gif b/static/img/Tiles/Stones/60.gif new file mode 100644 index 0000000000000000000000000000000000000000..6ffed4cb0bac1f5ecf99a916e758f78bc8b75b8c GIT binary patch literal 957 zcmV;u148^qNk%w1VHp4!0OoiArlzKzo}QMLmX3~&o12@ZrKO;tpp%o6fq{X8gM*}` zq^YT?f`WpWn3#8WccP-AdwY9+etw*soSB)KsHmulii)3~pL%+FjEsz{tE+r`e66jm ze}8|juC8`=c6oVujg5_kg@t{6eTayNY;0_JczBYMl9iQ}s;a7hfPj>gl!SzYw6wIZ zudkPvmz|xRu&}U^k&(p2#M;{0YHDg=U|?2OR&;c9v9YmkZf=K%hgw=%iHV85y}iuL z%w=U|kB^U1t#qobqQ+1bFrz+quwVq#*sxw)sOr;w14a&mIX$;ryf%DA|= zy1Kg2(a~2|S6NwESXfwwhK8)HtXy1N&(F_qZ*N^)U2t%4#l^)`R8-d1*45S3Yinz9 zadE@L!^_LdPft(5!NE~cQE6#uyu7@1b#+owQog>v$jHdEv$JMqW>ZsBx3{;(#>Pua zOGrpaO-)U2pEtJLsMN^BsC-g4iy7ab2f(o5C;Ju2MP-r z1rY}i1tB5_4TUZe9#<148af6NIwuA)Gf@Ttl!F2<5->1f(7=I!5djVmxKqSOiwy}P z5a@shfQlV9j!20ypv;USSXu-qAtMP2A_`U%pn$>x00aO41bD&YOO!PfN=U=uqyv!$ zDl`;eAV33v1u!;bcwoiH1^_9ZB?w?ZNstRUB4l`CBt}dCOB7@$nG*EGXf(Q@;9Hihypg+B zh7$o`0Kf)15C8=ZLLlIkM;gBu8V(?9_x7;u6E4ICwa0G54FLjWhFal-|2AQ8eE fDHbdszz5I}$k@bG~KB@}?d11T_JLm&V<(jsg# literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Stones/61.gif b/static/img/Tiles/Stones/61.gif new file mode 100644 index 0000000000000000000000000000000000000000..3a2c21940ca038924e8cf0989d7b92c9ae47d460 GIT binary patch literal 962 zcmV;z13mmlNk%w1VHp4!0Oo%HrlzKzo}QbVn~si-nVFfOprEO#shpgglarHocXxw> zgP)(Dm6erPM=rKP2KczB|sqLPx5jg5_ee}8s%c9xcwfq{X2eSL+6g^G%b zn3$NWtE+;7f`o*GfPjE|dwYC*e3zG(udlD2ot>_(uCTDMkdTmidU{z|S+umYk&%&f zbaZTNY=?)3v9YnOt*xl2sG*^us;a82tgK8-Ol4(dr>Cdc+1ZbekG;LUVPRofT3T0E zS58h&zrVk_y1H<1aKyyKd3kxk!NI`5z`41($;rvb$H%_DzF=TrQBhH8X=!U~Yj1CF zUteFhx3{>sxNU81b8~am)zxuvanR7vb#--PV`EQGPiAIj&d$z@i;ISahSt{BXlQ6t zQ&Za7+OxB>YHDh{yu8E1!_(8#qobqL)YOTIiCtY?K|w*r#>PlUNLyQ5%*@Qo%gbbB zWSW|qZfL6V{h6E0Rx30VMw z1qdw-qLLIAEjKrAHZ&*)2@Vh%2eFV(d_P)jJ{$%O8YF2~TyVmV9ugf38VCyj3j<{^ zC?zuz(^C%yU8EE!0s=EE2<{HkJp>L11RYg7>;x`7c%ZmgBJ6;O4FJv*F%cjHf&df{ zI55xwf-njqk^mtw;(&!U1SW`hQQ$xW2Eq`$5OATyfd^JR5J)hhL4XMYfaHk9004p> zK6t2LL7_;F9CkfB_j`#36A3gNF<{UL>dxDTD(hD=uho@_0p*5+4*)Nb%vp)&P+> zC@2hq#}5PzDuBQ+TZn}SWR@Vb_{ebs6=7^p2_Qg7izgyP+<3!8#S{V$Hb9b*fr5?% zAPP7T0Kp3rA6Z}lzy}1J&;||#Oz?;S-E;$h1S5=r!vz5lz))FVAYp<64Ak(54sdM~ z!w_O5fkXfg01(4ULBJpZ22Dh;#{hrOu>}SbaR9*t1u&2R2V`A9SO!Eu5rB_a{9!{M k9U2q>KmZ0XAcqPm1Rz5JAgB>R2oXR)g9H^&p+_J9JDHAw=>Px# literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Stones/62.gif b/static/img/Tiles/Stones/62.gif new file mode 100644 index 0000000000000000000000000000000000000000..f2c684afa521d545e7bf9323990a754632b5f785 GIT binary patch literal 952 zcmV;p14sNvNk%w1VHp4!0OorDrlzKxoSc)Blcc1ipP!$Oj*f$agQcaVqN1Xno}Pk& zf|;3_prD|ssi~Wrn}LCWkdTmfcXz9+t9^Zah=_=on3#=?jh2>{ii(PijEt|ZuZ4w$ zsHmuwm6dyYdw_s|e0+R%c6NGtdabRketv$vy}go>lB%kzuCA_;k&$d{YSuw6tw)ZP3urv9Ym#e}7?NVY#`vmzS5r!^2ouSlQXx)z#I>$;oPJ zYN4T_wY9aszrSv7Zmg`V+S=NLgoLoLuwGtXz`($3Yio0Jb8>QW%gf8b!NFNsSz20J z(b3U$b#-81U}a@xW@cv8)YNHdX=i6=#KgqByu6Exi_Xr@nwpxFl$58Zr_9XEQBhG% zO-*BCV{dP7aBy(GzP?*qTU=aR&CSh1LPB|YdAho~N=izGhK8e~qf}H>S65fh&(F5D zw$szox3{;CkB?JRQ%FciySux_#>Q4wR{#J1000000000000000A^8LW004UcEC2ui z02u%o000O7fEENLMsh<-2>=Ed78^GWB@F`&CK*0qM02&xcgoSdAWpP!$1yu&}U!fq{mGhS}NKy}i9zSy`c> zpCdE!NGBHah;u=NJvP-!^6$Z&C}D~vj(b3Vmy1LfZ*0#2`Qc_a5xVTaJP;2M6#@YWIu~{hHYzI#U=j@h0W~00EEgLN z5d{VV3=S-I9WhQq8FU2-1Ox*rFB3T!0v-(s77r^Cc6KT=Ge}w~5eyj*0vrq>8U-E> z2m)UM49!=0NV9;R00Sg$~ zFwxN9LX^O&p=1bkufB*m_(13wXsPM!DADztG-*+11sxdiCl>ixzcvcl-JI_4oIurlvMEHPzSGU%q^K$&w`=9v%@95m{MT zj*gC1RaJ?JiMhGC`}gnPyLa!588b>tOV_MfB+Q;YJ3l}Fz<~oB zHf-qZ?3_1m-h>GgN=ix!3JP*^a>ByGs;jG$laq^zineXr*52NJ{P^+z|Nk?f0>z&! zj0_A`3_2iTke?XX>JA)GII?SEj$XsTjUF%NU3gK<)Oo;4jK5bwV9k;T%N-TFbNNgi z8XP#<)!PMICuz=&V=a$po#bI*ti-EZl_)B}&&>#xHHm6{8xxqf?%26&_ny7`_8&NS=l(s#>{n<&q^!X3m_s zdiCn2rl#4mXU~{1qpPcH-MV!(H8pG3uAMMpLV0=loH=tAELhOj*VowC*wE0hYuB!@ zu&|RSPxkcmbaZsgpFe-+&YjbzPj7E;udAz@I(2GmYimVC#k6VDa&mI^?%g|Y-n`P% z(zdp??(XiWsHn=y$|+N(czJoPTD5A=o;~&T_5c6>XTS>-f3h$#FqksvfK-9}#K2a6 zU{-;L$TWuz5v9fk1`(Evi#$ZLRJbQ424!$)v3YKlI=F_Rk-vAMh0n1Rf5ij^hO`E* zJ*PM|^u$>CmDQ?4nfbK%nKYPr+CtgcnMCv@WG94*=!)wZO3w^s&|x;z?mX?;Osi~!hfq{XOlaq{$jFOU)qN1XEdwYO@fLU2ty1KfTmzTuE#8y^T za&mHqhliAul(@LKxw*NCiHWDDr(j@U$H&KZc6OMUn5(O+s;a7OZEeZP$!u(FtgNhb zbab_~wRw4Yz`($1X=$OMprlzK-sHoP~*8l(i0000000000 z00000A^8LW0027xEC2ui02u%o000Jhz@2bNEER1Ox#VFEaoQB`p<9ISvpZ2Q>!!58$kd&g-ni; literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Stones/73.gif b/static/img/Tiles/Stones/73.gif new file mode 100644 index 0000000000000000000000000000000000000000..48e6a2a8fc413930bd1866b5c1d4f35c0a9b0430 GIT binary patch literal 349 zcmZ?wbhEHblw^=(xN5?%Y}vB;^XIQzxw5*tdiwO~GiJ<~H*emSEnE8g`xh)&uw==S z#>U3kvuF49_3hoex4gW(x3{;owROdc6-$>cojP@DL_|bGLql+Ia7RankB?7sa`McX zGn0~%^78U3D=TYjYfqgz= zZf;(*Xi-8!LRwnd#EBD+967Rf?b>P6rv3l_pMeli{K>+|z+l3l15ya`69Ze7!>j@i z9jX2kONvhBSk1q%qQq-$)cP9?WehtGG2DH{Nqi!~+kVar#m^{u6!b_YZtC-^_PEz|Yew!5-LyFDfuH zGSc7Q-_z5h)9D%;8(UjjU%Yss)oPVW<+Eqc8X6ipIy!oLd%L>2goy#3XDeM)YMddetvCj?YnpHo;-Qd+}xaz zkSks;a@k!N-pu z>-GBC*;$E1GBY!imX@}?y`7z%{rvg!xw*OB-Ce0vnx3A%xw#n}9GsMt6c7*)A0NNA zwsw4cytlXa_U&7dNE8wh^5DUPm6esl!^5Maqc?BfEG{mFg@qj)9DMxvacgU9e}6wb zJbYtgBR4m9d3iZ2D{FOi_0_9aadB~(nVF%Xq37r4;D7$x0xo}3Aplh1+E?w@CjjFd z*r02FCSKIIL4Z%{bqdrM`#w-0CMk6`&K?3zi_Ub>^=6Jt>&bzt9fDVUgs{a-Ku9>D zwGhc-$`9d=UOAsv)LhgVS4-q36?%(#g&Foa_**ABnrz^^{>r-=YvwT%a+L@QU*-A( zJ|w?(y~98zx`0YpkRBr>%|i+J$gzT(Ng=Q@86Q2TE3$yStS{@D%nun0e z`^|?>P(-tM72|@Z1t7m9YaRkNCR9=}{KgW+CdP%N{cO}Ln2bk!F=FSB-34w83yy^T zI3;2RJ<9H-UGh95XmQho*(Nc=Rspri?*@TB1s7Lb}CLN*0@1O~p|(N9B=6rAkztxhi6 zUA0Q%aYzKnfC6~U5|wa_P6|VO_dO*%;)FqTxc7{N0MAG=jm3l?xJ()q*lpoM6G*X_ bE^@qe82*QYg)mc{#X<#g=}dng2Y3Djt*)~L literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Stones/81.gif b/static/img/Tiles/Stones/81.gif new file mode 100644 index 0000000000000000000000000000000000000000..4e9ecf32ff4ae80254350d7ca8103e7cd701703b GIT binary patch literal 1045 zcmV+w1nT=oNk%w1VHp4!0OorDrlzKzo}QbVo1mbesi~=@rKOIJj+~sFf`WpRlarsH zpP8ANq@<*lmX@NTqJ4dRn3$M@gM+K9tA&MyjEszskdSwGcZ!ONfq{XDh=`4ijd*x? zt*x!7sHl>Xl6!l5udlCwfPi{>dVha^m6er;hlj4Nu6%rac6N5Ow6wUmxRH^Os;a7l zgoJEtY`wj`baZrCSy^>;b!BB`+S=M}ZEay;VOUsLetv$iu&}_uz|hdpU|?XEmzQ~Y zd2n!WYinyvOiZz{v07SMzrVj@V`E84Nu#5q%F4=}ot?qK!BhK7byQ&Z2+&uVIFzP`TA&CPLfaiO81$jHda$;n<`UR_;XQc_aW)6+pg zLDJIFnwpx&$H$9{i_Xr@+1c5-xw*{D%>V!Y000000000000000A^8LW004UcEC2ui z02u%o000O7fEoi)Ibcmr0RSx*1`{d-F9Zw(CIt%!6A}gv7ce3rHX;fO3py%R911}HEyGe$uy6$cg!1rrA+82}v) z5d~2N2TVL(VsbYS1Q`<`T|0MrJ8c~c1_J;WI2#BK5)@2Gpa6gZ16+hu2(ZRMfCmr) zP)Ok70fHJD2-u;ep@IMb16Cve$za8g4<8a(@PUECjRg!2ERc}pg+~ZAVvKQ9gNKU- z78u1a@?_fu0CAL<2#_*>h6Ix&6c~}fLAD1TAZU0{hX@D=2V}fi;Ne7x0S8Ku7$Akl zoB<90k|ii1ph1!Y6x1MCV4*>V03HMo!BYhU2Lw0-m>>Zl!H_35maNdAga!>WAOdW_ zl840+2H`reC>R1jfdB_GWZ8kH!v;n|keE2)Ai;?O2pWh0Kp;md2Tjs&01(1Oj|l+= zXrbc+2o4DfPn=g{D8s+XYg>rg#fye!3|{u0Yd-+`~U-T z6DNEy!w_)9Py>(vcJKfN23Qcn01OCF02x#)VS@~cEI=iI1RQh_01ot!f))(~u)tEi zoe5wCJ+x2|2UyU+1`-khzyV!$0=PvO7!*JN1O<3700|aAz*_@_0vN;>6X+8F0VK>2 PgAW08FhHdM1_A&(e`1Yg literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Stones/82.gif b/static/img/Tiles/Stones/82.gif new file mode 100644 index 0000000000000000000000000000000000000000..196bab74221a665fadd474eb4f3dff9e71188888 GIT binary patch literal 1466 zcmeH`+fP$>0Dynz(sEj>oI+t#FrEUNAa%op8JxzPmZ4>Xtq=k&A*mdywY9Z0P3Pp~)YsRSm6c6RP2InL-)uHlS65%T za;31a@X@13)6>(lv$KnfiyDn)e0;pLwA5;~HZ?Upc<>-AD{F3UuBfO;tJO9(HYO$} z4h;=GeE6`Yrsm?si?Ok>2?+^1J3A>UDGrBYeSLjqX2x!}KYjYNudgpTIa#OEEi5d& zef##=vuE4e+j)6;dc8h3H`nQO=I7^My?Qk}JDcOU%a<=lM@KI&FVD}n z$D5m*Z{EB~OG{I$)z65MU-`@xS^IsH@{e?mRn1KAF{Nob< z+Xq^leP=s==yM2&oZP$0gKlAdK?VcF(NGXUTw>Bz5ux_1F5KXKiy6DR)U)c!aSWkE0usPymXDn5>thf)yWqvgko~pyE;ZVt!N<9M9Bsk`i z$0th6yObDP04qFU7->Rz8np=p;V$Jj2j6pRd{9V4@DP*);tZo&ihlPqfdP$)1?cw@ zG2|u7iNncp(*{m~%nfH1dcsePdMKV40CFZiv>I{dt9^ZagM)*vuC9E1e0X?xe}8|dsHm;2t%rw) zudlC+jEs$qjg^&^c6N4zgoKcgkau@?h=_=Jd3k$#dxeFCfPjF8hK722dbG5(Y;0_b zii(eqkE*Jwl$4Zpb#;DzezCE!k&%(Wz`(e;xSgGySy@?FSXig0r@Feju&}V%+1bg- z$-ch6mzS4dU|?-+ZP3urp`oF4baYHiOufCmT3T9hadB2wR&#T6i;Ih+qoc#a!?m@w zVq#)xX=%B+xo~iByu7^2%ga$wQLL=2)z#IBiHXF-#KFPA+S=N;x3^qeTvb(7#l^+U z%*@o()XvV%)6>(+%F4*d$Zl?K&CShUUteZsW@>6`R8&;P#>QJ)Tbi1hWo2d7*49%~ zQ%Fci$H&Ld&(G4*(rasLVPRopWMpV)XurR|Z*Ol>Qd0l_{{R30A^8LW004dfEC2ui z02u%o000O7fPR95gnk7nHU>uq2?iAd3lu35g@p?>Hai*;9}FS@0S^ug8kK`Y2M;kD z69_Q_844H;2_+(?ej*Md2?Hk%79;=}3={)Y0}iGJStlG~Lt|k>J{b!I2LLTH7nKSC z3I$X%E;mFB0uvAdOb;v*4TTW}A^`yhG!gd+G*c!f4?vVa(1Fkb30QvAgTMj@8#gS1 z2qAERNdX*llnequW=jPDCL##%@Su@|0T>=I7?5H@gav}=)ZhTbK@2YoB3RgPz`=$O z2b^%RbASLXKN|uNxZ$8f5)=?d5FjBy-<}>-IA~}vAwY!>03IOuf+q(J4_kWlsKY_P z1uatlUNlKyEW?X$2mlNaaDxPvAwM!)$WmZNnF>u9z_2i&0Ra;L4Di^*;0hWI01&Vs zKtaF(9dAmokRicF4H^Jai%1}$#*+vjCOA;=p+Ex=dQ6Z|AmK>`1Re;0qVS+W6c7+z ztZ=e}g9{Z7AcPoT07wA~1{SRNVPix94>D$CC4d0I1Q#SOU=VOkh=l}4RuDLGCqRQ0 zU2cS+fI&rw4kff8KnV7o009NIp#X&yFl>MU3J8pVK@uQbutpFq=p_IK-vmHH4ssZ= zga83dQ3M|rSO5nSec&L(0v)sf0SpghFo6dJjDW%c2?W5B6*;640{|f`z(X5491uZt z2LTumjshM4zyJX&=s*B_A4wL64;4^Az!hLf;Q|mLe4~LDT$tg50386JK~g)+zyJbK zr~tzuXQ+WdBM=M_!2utP06}B~5Kw>&B?KV=0U#8if)P-hkc|Kae2@nYDkzWv5eT$U Rf(aK4@B#xUETKdo06VN4ky8Kw literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Wood/10.gif b/static/img/Tiles/Wood/10.gif new file mode 100644 index 0000000000000000000000000000000000000000..95bce37730090722e9a788fbb881c261d1960804 GIT binary patch literal 1318 zcmeH`+fQ3{0LOpycJ3D}LYqM;tc4a1rL<7m(w5QFa@ulh4-_cZa_IzQ`c*=FgW z*+ro+Tzps*woX~H7>Gvq2n&;8OeCm_4Eb60AHmH5&s85GlRPfqd535BwOxPqxaSUQP4jJ<$SyE}pjE%duPr1oy55?q)=SNwq3R;P}+bU6tB=e-AQ73uYO*+(2 zaltXS{^iz6tjmNZhaKKB*r&5bzQtMPstp^=M6 zS@Lu})n-7MW0H{*L|rk|V3JLHsbD4MEQTyqZe5O?a#I~9G-$%kMVyW0 z=mbX%*ojCTIp!pX>_nFtzZ!Le|M%Yo3jP%RE14I3@d*Gw2hvBGhV4WWfr-R)t6!Me zc%JbOZvP;8zZU3#OsO0K0&(*bSicIy3QM6G&|vFraqN$AX8+flahuhXO&56802sl@ zEckpM7UXqLf9W6nU{MGQJVaReg+RBo@OXGH@O3fpQ0COLtFs9a{n5Mf?Z8e;Dk=*o z!8^Cwgea(thd=!4Fg1bwKDp`rx#imHp&R#kmFNLoYdJVdFEildiO$DF`jv(~b_r8n zipPI!5mKU_XO}*e%9WmPUD^Jp8=-W5C;Qz|LdcU7=l;gS4@J9&;3Z}~@JQ?-`JW!{ zls4-AHN;46T0#=)O5F zyH6jBOSq=90WqgqmnC9MlO`@>hi|M=s!37e4La2>1?y8HFH#bB3B>J_E6xVOw#he1 z6Y4FcGM2%US?R3+RHhDJh)aFJgFM3)I3V9MC%ysvZ6qs5jX${te0Nr1z5?uLaPvjG zJEONPYnj}*EFkfydp20FnpwK8oB_)ciRQu4HY%eH_cQ0?moGw7VLF+m_(YiLIst0_ E0TJ&b-~a#s literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Wood/20.gif b/static/img/Tiles/Wood/20.gif new file mode 100644 index 0000000000000000000000000000000000000000..8025dd15b8323e3279f72d9bc12f5dd7af6ab069 GIT binary patch literal 1221 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 CXlqyi literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Wood/41.gif b/static/img/Tiles/Wood/41.gif new file mode 100644 index 0000000000000000000000000000000000000000..7c99f31ef3f5bb4121c2a3521f3f7e37ef1db813 GIT binary patch literal 1377 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 O%cNItJv5LcF#QM5BXx-Y literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Wood/43.gif b/static/img/Tiles/Wood/43.gif new file mode 100644 index 0000000000000000000000000000000000000000..436bee0ed1a28cd12198d5bc570441c9b3b1063a GIT binary patch literal 1367 zcmd6mYj0C^0Ehpl?b>tcxvuRPPH0Pa>HVy0*LLge^xmy29qVv6dRfPY+HDsuxL+$S4jL9x+A+U$ zA+75%V+kvsXcf=*Yr{r7V#HS`+lzyGp9ULt;=MMqm{fN(lRIscy9wzu(JSM&pq^OC zwXTd?oel6*Oc`N`sV+sEN;DH?d>S<4CVUzsZYKI{;+UD{n&5;5UmADq-L5)3%!YL6 z@`NX-L3VSDRSA34=-${icLQQoin1KNvrX#P;a(kSH7I8Xnqy|>KzHrI0n_#tJlaA} zhR89$Y@iLF?x2DOqO(~X){CbjblQP;HDmo&EEkp?f5V=1l2VBz<0QrcGQS3!j!>@p z7a+{1hGQmiame6mMEcq&`Iap)7R`EPDJL~(!%yd(?Tz?ki1ul*{&sqplkD5k4c09_WyBzrPB-c=1zrRc3(cpUmH6%eqSUlsxEed#kK(~<5M@-d& zcCn)Y%R2F_mnjYz6EE43Y(d)PhC@ooA0cO+9fw`7q9Xe z9zbuE`kvg^5j=^1dLa;+139Lwv{MV$$DkcIF9di1AS8SKf;wNQ=@ll$1@Mii0FaKm zTtLEIa=&*%VN)s#+mUmu-^M))Y)zMb)%`%1p*i7~MF}`@XtW@?rK^3+?ty>^GN<9< zn{&dm$|=udu)YTICd|Em=Z}=(&1MAd`|!92;zK(Tu6)tUn7Z_uVBz}HHSonBnR&E|p$drLXr&qmqH}Yo{ZTh(G_g020!6`7 z?&H6Gn*(?b+y>ESY(&U6_XO#4&QI!8d}mbwT33Dgizznr6e0pQDJ9x3yZ ztMW?-|Ep%7Z0nEmBUl!$AoYrI+s{z_b2-OXe^y>(;A{CscJ)k!6Oy{pgPQL_n!}c6 zFDL5G=ki|o*zt4#MfAsAW-Tp=%&M!<}Bi=&ztHblx)wJ zV$bic%iSEQ?X1n^q0c)d*W6x%v&=^*$(Gkeo6Avy!(ER%*pw&8n7cLBaB7~Vr80Y% z1)qZkr>z=?mm$B47I(S7SedV|ijq=@DNneSP_d_=hLX(Gd}}Ke_H-A~csl_vLjiYv zesd*ucU?|XWiDF{-ejQFc6>f2!olW3HmdCY#=L$;JS|Z=&bk6_x_kkq{BhQNK1O^Y z=DZ$yJYEL8Q*z8w9R*$W_ybJ%d`*NStp)8hxSh2)eGR$oHMo*(c|**2Ld|%*^tnUK z`9dxD<863dwK-jNxDy>ke2oR1H90&D_*DuPY47Uh?Cxt}_3xi-Y&p44($;Z$ zw*@QnoOU;EHr|D89@@eSmNzrV@^F~0ZRRuJVs+n=%*f!x!^F6IFC!CE?^-?1#1Jl~ zz%8QDQlTtt5^L?^nHjuTSk^2IQ{R5M@`YP%wDtpuk`a02if<#sB~S literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Wood/51.gif b/static/img/Tiles/Wood/51.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e37841612222a042b83051757ca9d12915973f6 GIT binary patch literal 632 zcmZ?wbhEHblw^=(c$Uvl>MhV5sWm0XG}(?f*p$ajhcm^Ve@d=Juqk&-oMy74V2Xo4 zxu0mbDUXX5caSl+n+{j9Jzt@(Vwtb7l?r=^8BcSRcCsCxmmXKCx1hTow~G#+gC>`` z5_?~+t+tv%MSw(Eux615&`h&jH=!ICzE~>(byZb2EsmN9eN$zwR7b&d7tv%}UOO$p zmS|mn6FvnwITvl7aF7GE1o-(&gVZC;c?!J5@?80norI?3ntSSTIcoD*s&GVD@ObL- z^yfKv==0jDaoVeKCff2&E3hf^5lXb-4Ym+=(&Tc{@ z>LgSXY2cvA?X1P+qQmQ;#p|lW>utyvZY5OiFJ2m~k?qXqrps@o!dc`g)R$u$Wx;Eq z%rQ03(nF8OU5B&GS0uoc-&2pz&!j0_C<3_2iv zpg3V*zuJ)B)ZEhA*51+C)!ozE*FRz6q{&mJPMbc1X{M#|G^Rja3)U%2KIW<{i9(au z6L@3gIGH7RCMYXq`kOHDNV0Kd^f7rja*8u>^RO5(YKZhO26HknGwkTP3a$&rv)aQHO0u%VIzhr<#!X{HpbIXi-$HFWbgbtU|m=yHP3Fgna(1A_}I VkGflx&w>DkQ*CPQCM--0)&M^Rk`4d> literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Wood/52.gif b/static/img/Tiles/Wood/52.gif new file mode 100644 index 0000000000000000000000000000000000000000..14c381d7b0a32685b45e3e8884bbd8363716a315 GIT binary patch literal 643 zcmZ?wbhEHblw^=(cvirWY{%OisWm0XG}x4TO0M~oT#IBoz7R8BHyzGWZ-EpCfhjp= zEpeLRrra$tdMWn&+0Oi_PC_{@e5sB?3UYE2@|{|u^^zTh%X~#D{3RkS_`}V(Go1vo zodtXh`9dxDGoAQ?P5I-kd1@l`3)}@tyaY?U1oGYZ6Kr@}V)PSi`C6iND*_}+yoH*h zv=i-xiadq#T=|o1`3k*6!Yl;b^|%x5_=>%S+;zE|BelKsdEIrnnxk}@qIBY|d6Vq; zE5h_jyhWzwSxhUi4YwA~b>%Dd77Q`r4m0I-QfK!u778`vYl|}qG3P7t5J<4*DfSY` zauZK?5lyn?jkVdUby^A(M<67baLbq#4u;4BB6v%So{r~?z11Ui9CkrD3 zLji*hNE0Yd7}y^)=t%^#rHe5z@Q2!{Y83QOnAq>cCc@yQ%^;#9&k`_cK|fQHCzmx7 zr!Xfwqxr%Gk+B)^%!~}245p0h7qA2>hB33I3cGRG?wQ0Gohiw|sMf)Ja+0NtcMda? z?xiae`4rq^*jbE%817Bf%=gISU=nA0@v@&$R@#x7&!7Lx1V(`~9SaT~ac8OT=kmBv z(0YPNl*3i@V?h#cqqyKhk&cTETswQD(oHTjH8XfHs@(F(U=lhfAd#q$kh$|fC!dk- nLyjMTjgIFS5^A2w7`i$7Svc^>v@U-3AW+}?;f)R{4hCxgP8p_} literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Wood/53.gif b/static/img/Tiles/Wood/53.gif new file mode 100644 index 0000000000000000000000000000000000000000..0d1dcb4dbb211c3cd249c9078e4ef40052bcd326 GIT binary patch literal 632 zcmZ?wbhEHblw^=(c$UbJY{y&bEzlgP<)*`#Y|rPe%av@$SL!2}>LfHJ$27o%FWp5n z*p$1}N4VHaFvOg1N{(5QEnk_RXrdi&s-s|ko`Z)zZ;CyCnXhn~vq*}AKt+H=OSEoZ zj*YjmV5k{)Yl3c+C9jhvXJ4*;Tavz)p+LTeP@FZ7pQ&hbq;_qLiMEDWMwzcjtPRkeKm&P{6cnOugxqyG3;mSBE&1#< zxXb;;{fxM4A`OC!xjYT{qO65NE%=+FbVP)OgUxs%EqRMQ1&aKY6Kr_<^Bt$=S^64s zsVFHG`K#o+^9LDoC))BR+4Hx=Y55uP6#6Q*CF=PY3;LP}m-+}L+VOen^Zx(;pMhpT z@h1x-14AN%4#);joG`FoZICe+SYkC9tR0O5 z_)H~S1qAi9oz0{e84_mCX60m;jN@nGvyk4#tD_Yq&gRKrwPgzfBMU2&x*-EIr;n%+ zBcqUzaNwy^?95Cdirl(PvcBva#Y4H6@81_tv(b0=k2u399nQtg^YM}7#-M}kj4W(S zH76$t#2u&zz81*f;Bt_k#gf5}$D`o@iy)I7LqtO2V>d-FmM;q$7PNRy_SlgzQheqShTK~WcpggElOd?NQ?*e1Pp|>UJ=rx6Fwr*ilrQ6P>(tr&<+DS+oLI_w4)wr z&`5e2JZKWzYN4cqaH){#b~0=v!UlxX5QSm2SuQLN=||kMqi&+#N_CmB9xK_Rgo+7G zXCvNY6K5Q_O$o6oG~u8U4l?B=ST#Nq7I`(WM+Hr_QyGqqw@`i!oU&sHJ0_J#!X~1t ziJI_HX$KzGqf6tCz7|n)9hPyDUJcgQB2IIXwVaJ*M3<(VUCnf;knN@Pa;ac1LwFg)t0kRvP}EE;=i1^HJg7sGt=MYT5;0*t7HnQp-8^MCYDkL7J^c{aQF;KnCq%w+fCnk@049lp|aWUK}=3B-yeb z<5Wmv|&Y2 zBB_ZV{z`&m$yS{kNy_u1u6O8Zoqda9Nl0~^*?^1}%ICs|ZhSLV^4%5I2X)}&=9}ML z?%9xU{8q~Y#m;lR*^Gc$UfNf_6_KUqOPYzA$c+y^p?SQVX1*v_+(4I+eW?pOb8Hg5 zYJddCe;!-NV`I*%r+<37&hopt6=-f7bbsWpW0C|AV%w$aPwyD-8Q_yI^Spdsj?*$` z+pWCK%JUHXkB{B^D|68YNb3p@Tf1^m(5OESV8vN%6KF*-!((}E7O)5+qXe=yAko>H zy6oje=IB#H7tJ3Tz4*3aee+WFlNiT?KekSPInXay2mHq`N}w7Dw&%6*tNunSRpu`{ zp-i7c*I%R_f)I$71XXwPe3J^>ez)PshKo}L9?|!)$}7o|plq^>Q}8OUeO(8Sl%8p4 zp_E&gHss6k%J6jn63qA4_B2f9JJiCsS)MmNDlFucKT6&!qRN=t%U6KgsOrHg8>s)K b-2jBo%zvDxuZ{f)Bzkl5Jg=OkDA4*J>{Vn8 literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Wood/61.gif b/static/img/Tiles/Wood/61.gif new file mode 100644 index 0000000000000000000000000000000000000000..360b5c64cab4f1f03bf3658725cb1f2c1b07e3fa GIT binary patch literal 1387 zcmZvbTTD|20ESO*^z__YS_D)mw9p&9Q`$-|r#*-E6xv!#MG6SLp*Xn-0zR;$g~Hs- z#Kn@#%_U6tuo#nRyv&Eqw2Fo-x*5Y39(<_Do)%}Enb9Rn7{2d+{a?O(e|~?!XR{}3 zfEwWKJ76)cPP@>VF2dI$D2!S%ZoJz9r(IZvB#uzxQ<3VKpl~)+InyOfyRm#<%Rw9N z*FuaADU8_)qiwSxakm9IJL(wriu^iwF|H|$SqtN~)p2{uiJb^F%!MUKX~}%taCXcU zYeQBi+86sY`2qc~M-(=}b0JC0g3>BMen@ki!s!;&+Q=XF2p9WWVpeQ*+%_AQc+`j(97hX82HhW!#4JwxRpv{J0$t8qtROdS|m>ZvU=?6HB;- zGf_p@OpN%drz6ezAvL3i^Zh!nN-*XlR>s|=5KYAdxmUqwv{2kBneHSKPU1wkF=|HaGX5}C z)g+Tmg=&0iFl2znJMe>6yx)$@bP{P7e#nAQDk$Z~J2VKbLBa<3pankSC8TwANf#D0 zptKqq>%hY%WT+jX)G(uk?Q(F)flLL6L_0Frj+q<454;$qB_bAl(vM5T;!&EIV(_FB zT{>(GXyKF-&3Hs9y8o&%CE{wHBS~0&C_O(E>G1baA*=I$9dN^#} zK|;G*;ZYhV)lhpAM5+WhhQ->jqyz0TVjd;vYz8S6IOy0J7YrNWrKGNZA9~D#PX~lS z6Lu<6lW?H!W^lSoG~_^2F5J80ha^Z9Jjzs^>=O6dkWL+x_K3U9JI0`%Hk8)DF%uNf zqpK79PB6lmkYth(1`W_ruP|y8&Gl%LZtP@Kxs=on(~?md>#-5r+uOkZrQshg3jp2$ zE$_?sp8&vZU|9KzkWvMJ1$|?_{zvWIj|iFTMVSm|^#B{WLZ+zOW<>spJgY+&5HUAT zknF5X^BdhcZ&>cAU{`1{eC=}qaT#jK15Y1(ya<4`&zOeu z4-E~gFAr3IpY?n3_<2FIu4Bl}TQz^> zN(&rx{6J$F`NjVF&wS!}DJOQ;SA)_b^o$|Nz43f1OLI59d8c`x?Bfmmnkd!ZV+^dy z&Ue?(&`nom%dqSw!2u!gi62@YNtZa0Y?9&D(ln>}%Yi2gfU0qg=Qv~FFg0Gg7s=Gt=35i>; zSrwMz+xsxDyvf0adm{_hi?PdR5I^{e(BIKUN@!G?qto+SmzG(3_Xw9w1R(YB@CWC! zP3(>7pPG2`YZbtj;q@Y~w#ej4auE;-g8cFgn#J0@yurCv{hY*rZ>NH0rj*Dl?Gb=e mt1MHeZO?xB7x!Gn)^k96O1eY(hNZW?f(I&w}F%Z literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Wood/62.gif b/static/img/Tiles/Wood/62.gif new file mode 100644 index 0000000000000000000000000000000000000000..e1801fea41b4e88b5a4164f66d587194e94c6da6 GIT binary patch literal 1361 zcmcJO`%hbS0L8y8rH|YD>T}%yy+AkUgHrki+S}f~OCNNlg93xn0t11vGAObIlLCcp zLIzAQnD_%TI&qmsw`mr2k;gQ;;liRZONNusZZL~bRgo8q~ZP{z;ew(}Dtnrp2X4GJ3c+%6m5 zpyOT|FncSJ@n&@!wxI9=r8WJs~j6=cV={9xL0EaYiCcy7<2t5^$ zPmRqaE8}LQsaDWb!@rawr{jv{K~q%6JrgRetHMJXZYENe2?(Z|6;T5+7M2V+(GfpC zqUH8Guv2zH)QEOd{IDLI?oc}9kYB?~kVvBmpK4LG)L_GPJfDhdmqEF>!X}68GESob zbspH%aKem8OG+*ckablUS;i5IL_JPXOEnTFF_#h|UU{X%f~VY~pa$!A3(_9EwHEKP zBK2CtQO@eMA8eE-EvTo06End{O4wG5blFArGFHTZjrfHL5i(*EbZlaE1)Ea#Vz>!pe<%V5*DP-jxD4er#-mk7~3sp2dkjt8g57pg>`7|WMwE&^pqLSv zKTS27kkJNNk4qfULMKevXh6_lfKS$-Q9W{|Ub>VrH0a?$53iHNC^?#-gh?ybr00gT z@EI?bu;K|TZ+_5fsw^FJ9h6bER>M6`@kl_JYgN6`svGhjiW(7zoYPC8J~eXMjds++ zdgZGvmD~m`*QMaZ46v^f?xqC8;bSQm+G2veDtM+{<5VKUKD=HF_qqCupo6B!T$a}`2SV>4}%84W1xJAdie>!-UkH| zlODXu0ze$t!>4}Da_EIHwY=+_=O4ZCTKO(xeVz$Ek-S)+@Lorx>^Yiv+CE!EgKiVM z$AUAb7<3|xJ7+%D7Vz=gjqIlL^!(qI+0wh*6}Q&L94iOMrNDk=qlQmpClDC$*y3k9 zbD}Cu)I_XeH;X8SS0XC0ZL%Lenvp&K>oO?FQ<--c`n{T>ckT+G^<_6^X&7TKS^Shn zE6Bh4Zj5*BNFG_iv`KaW8v`_S?9tZd0~Q<E_k`MNWu4 zVvdMS=O+t@wGFW*Z_ZPPtfVLC%z^UVtX@vo984P6xF=3YcWiVZ+{>fgS3kMWk$g?h zGLA|XXh5e1lZrOBV^aIw_kVI&H?Aiy7XQ?-XlF5_2QejKhfQ<~*G}S%<*Qj^;m**U zthCog<%CR};+NuJv*Qtc#qFn_~=9CTYpSA zAn}6u{Z8-79+h`z<;v6dB)1|thImZBEI0rBQQOvN7a~6N<^yOee@%u@V0WH>c~KW(tlK{Ob~6jWw&tsW KTiZ+qsQnLIDQWEh literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Wood/63.gif b/static/img/Tiles/Wood/63.gif new file mode 100644 index 0000000000000000000000000000000000000000..6a01e2dde644c5609e7d4ad7c17698449d734ac1 GIT binary patch literal 1371 zcmcJOYfoEs0EhoArJSCgYi}#txD-k`y+M2EonB5a&?``&Y@_4SQWzUyjBzJ2ZAT$f zVa$c;OtyqAPU8|y)i=gu3d@`>&IR4FsL`-FUudF{%&9ES;PxSWzQB{`m;C&}dW$t# z2nxa98zALGXWLcdVWM8cYc=x6!{qXyG3CU186xGvdR=&*TTrio1J!7DzqZwgOhu*s zD*jwTGae!P++@E`+~*O*%;*8H$ghR{T7FQ6g=sQajV>QHw^{I*8Ed4Gpbn23@$rb@ zug+|-Cs4+u3H|m#BFHGO|}{kM#($i5%xH+(Gb~WKu1Hwd{1?+SCs8i zW;?2knvxy|>QnP48^tX({D}r(()rY4IocrWwiBJTsHYO@Wdw~hf2f}9uwfo0ygX=1 z)FLSdTCc_Z)p(r-?Q{@c4VH9b174zvDvQvVn}UKm)L97ybmXhU_K~LYb{p1a#`}C? zuZkD9;oT0@r9>h%WOpqZx1eJ!lurqDJBgSP4e9aGAX%ruBGvpLEez|BgaeP6Fee3< z78lp4dDilR{yK?I4X3=)utDNg!L#k^X2a78o`XUSr3Fn!VKWUc9dRe^2tz?03hHr- z5>8^DjYvM--z&AsAx4ExG>9WQe%wavu@HS8QNK^ppoiN`NVgqp)WLx&WHhP>>+yOO z)M62gg#~?XEF0Ij6g(p0PRE#v1hxOQ4i1aFX z;~`?AK{OE-EFJM!<#3M+Z#EJ(c|o&@Y z7V`ig41u*9cUdGWF#JkQ;!Jj@aeby0{3e6J=oGQZl>1qvy630Wi#=bkS->=NyH3u^ z%VT$SL8U2Z3F7W_|03qxSHsI6A8XyS$N<0=_@LpRp)`wo_sK`HmGq09-zk*n*kU@f zPo(ID(w7k~!3z1*(R=Bl9W_$w-!})C^q~S^-vmhHjgI3Hw-&5jUw}D(Nv0ENE`UqY zrPDF~uD3Z5c4|w{zC3?rgT~(nE15jW`Pf-mGqaX4loMKtnEt&%30b9QFaF47vtZTK zApvuT#orx$VKgUqvp=bjQy}NK1+kx_W7|xr(5RuMqV%b`L;r+(Wm{WCc@Hi>Ix@_O zSSna~9GLwi;j4KENqadwu)cO|UViF4E(O3{w)XwiOf}snegvYD>XterwD6RmG(f$s6&`?0a7VWiFY?FO582)KLfN$gUzz zZWh_2BUbs)bn30{{@la)_FLEPomjapN`r+7ZuE2h>m4ikRkqky0K2&=zjVHM^I-wS zImaNvuYbLh;pHz_1}e2LKe`tyI<2Dt{QT-LGdA)3A3@a}B6pSkAbT+*_%?bWnhS|< UFLEolXqMSb(ivkRhXZQ=0|Lxx8UO$Q literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Wood/70.gif b/static/img/Tiles/Wood/70.gif new file mode 100644 index 0000000000000000000000000000000000000000..fce3e3b4333e66ebce3238eadef5c1762767c1d1 GIT binary patch literal 551 zcmZ?wbhEHblw^=(c;>>8Y{xq#$Fw<8E7+8~#9OF2O558=u+&>1*`BW@O2j{erBhI@kSUrglzGkIAUKTBv6DZXx5R Xuiw7^`1$MipTGb9GyG&_Vz34P-Kl2e literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Wood/71.gif b/static/img/Tiles/Wood/71.gif new file mode 100644 index 0000000000000000000000000000000000000000..bfe3d0871b11128d16210ff96b6ab7c2016509d7 GIT binary patch literal 350 zcmZ?wbhEHblw^=(xN5^t>Mf9L$6MwroNUKe<|CAB&o?E<)LoaW)LSskS;S3;Gu2Tr z(VovuhbzdK+tYwA!b-s3gg3;DC&)r5!G^ccSFtb0Cd@)0z=W^ZQy|?{OjJZ9*p#~^ zTG!KnKh%t;FUPJg*RDO;&_kcs*O03UsG-9@x5$spZDtkg%iHp<9UM?Tt$ zx5!`FUXv%nf;Y*QH^WuDIZ`XtNytu}qbAZI-j+Ynj@MJ4*F%rz|Ns9CFrfI8g^_{5 zhCv4;0P+(9TeZWy0uPZOHft#*w%`UIO~G{@qFgp?k*CY77cw-uZ@p!(CT5M-!VR7^ z$3mUeLYNp>SlBq@w(j9b;N}x#uL)%=tCTPmY71rNuoUc2?hEA;7T{!(nHDN5z-r7p nFO*%2J85Z%6eHK_eya_k;+wZ^-?4Mo?mc_=?LV;Dk--`O?WV(7>Mf9L$LFlY>21hkrNWV7&+ly{7;3@a z60Pf|!!tYf7F)uqltd z26wo%u&o-Wxe`aREw8r$ue&a{hd%GrJc}}4VRv0FXI+652LXQ*zKQ?|Pkr8Uf3XmA zK6gECI}PqMXAvI*u2LT%M=dUAO-?5reg{o14?UhTA0ZcQo+MkomKeP$x#s`>|7T!e zQ2fcl$iQI7paWzBeI&`iz*gxnzraIBs{h22qLVpR^DnF@@md?TKH|+IFTn^-7X7OX z3_L3sotYH+_#}2YH7TDpVcNb)y=x*b6FZAwuCInQySj}$3v0R`pMj#19;3dtC9fYh s4~Lptd6aikfykgfEJfDzb=P`s)@0hvLk~v0Hy>^F8}}l literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Wood/73.gif b/static/img/Tiles/Wood/73.gif new file mode 100644 index 0000000000000000000000000000000000000000..c15a39615f11473dfd30b17678fc7f5a8b43fe27 GIT binary patch literal 547 zcmZ?wbhEHblw^=(c;?8EY{y&bEifh5VoHu_bEH;^J%5UWK%@nKj*CFKpQxJ-XR;k% zsgGbwoTi5kx0fD|f}C8Dr$Dd?x2q0ss*_NvqhPcJUxWouS%_AYl|Y)CgqsdmbCgbN zf=-AzubB$>)O>4aZEj~RZf||=Bzt~$UG5|Yf#yi<92dS|6P`Rb{z4DIz8ssH2>n7& z;b?Ondo|7}Ic7;fOM}#ly+q1GwOw?0MMXr?UBvqHoeF&wL##y0e1#Kj`TFzhOT7ha zA`Slk|IaXFf#OdVMg|5)1|5(OKykvr-q7IK)ZEhA*51+C)!ozE*FRz6q{&mJPMbc1 zc?Of#bS6FaY0TP^8dD8T*f}hxFbVSO$TCi5HnQVo;9;A@;=s$uz$l_NQP+x%=b)xA z>jVjggZ4s-oHktjrWWRmDoPv-qH-*K#;godW-|H$+|n!ty|&8Y)~X6(oZMXMeDXbw G4Aua>epy8T literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Wood/80.gif b/static/img/Tiles/Wood/80.gif new file mode 100644 index 0000000000000000000000000000000000000000..5ec9f6ed28d0402450ef85e3c0c4971b8f0c338b GIT binary patch literal 1450 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 literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Wood/82.gif b/static/img/Tiles/Wood/82.gif new file mode 100644 index 0000000000000000000000000000000000000000..125d426bdfc2f9b26bd14ba93b68cecb8a817e87 GIT binary patch literal 1442 zcmW-gTTD}T0LK4qDLp;+b9%}}H-#3kH%e*g4SG4fw@{!$<$fttP^4TGis+WCi~_?L z>5@8)aS1Wb;e$p^mdwp$CCZYiGm^Q*Oigf_>BE+}&22G`Fx>a{C13K(@8RdVghBDR|O~AOMPl2pdpUMEMWuM=b$D-d39Q(&q2>bRE>JH$A-;xEB$ITq$l>* z7EZS+57y_VhfIwXNU}|Je5BH)fWt<7wzuq9%sLUIqju6?hV|H~UMm(hU_mV&He$&x z`SD?MlbLKXkx>U#Q;sLw)w@hYcNIDoDz?kug%RgisKhRVnk(sKN7-0_iU+AyGkUO2 zY}+A>2SxQ2SdEsdED|*6kgh7sTm-dSM7=DT>{7TCLbFt0+W|$Y&|a46v*UwqYL_0V zEk_nc9Abtkl1SWgs8}kk(NWzN(yc-c?cCaF-9*sgicM1@Y9qX*u&)%U)4<&pyx)_% z(?AY;34bX%6vz#z(ft9@WPM(<9&zk|+AFa(GqKynIClu#Dtx?}s@I{q?b%Iw#G`;m zyhOVhYcNtXo#owDVy06w;3R_@WY|mgSg~FQV=IPQ4CpQ+ksdZp)H19Bi@I`IIUEl% zrZVYHEz)AbTnZ#u1~;3D20iXl!eKo&QI~sc$UfpD+p1`n5*hLkEk-p79MmFeJtTn;1(GXWyy%03hHQMG3t;D+f0~8h1Kgt zZY6r4PU==7e)Xn4>Xbp&5~x}YyOnUVL+w(cb_LO-M*~`sp|qgef)#Arw%18D=wNRt z(OHE~?#$okB+@a1M=9Lr#G9)`K9w+H!<&p)y$*9IkWnAuRTCyDG!kH%%v9J!w_E6# z8;@6$W7VWf4#nK0y+mk~2>P6iM~SvsMAL1m0|9bjn4PE-dlkZ%hltv#K@UAvO@|DO zS}xt#*Z}{h@KqKEfOVjH)82dnKpQ~WGCh@X5&+}`WgPzx9GFYTzVP&<=WDMPG6fA~VVPx4WR&YI1ItTSBK$lD&C?lf%`30Qns_Qi5jrqw#FXxoijy zo>~!jvkMFH(MOk}$t0JXbN*0sBC*6HZ=S#3c$2dB2+)d2PH(ao7GI1nKYMaR0ReZ| zf92<8@*)J@O^Jwpj_1cyD_at^i1YNTZ4X;gU~1NOPcq4kWafc-`lWa&wUU`K?05M$ z_C^3W!txt5&li^uUy$2dWUu$H0p!6|as87Q0~eIS=EtLi;_-7ffpSc1?+cKVcUe#{ z8k#dRXGs@NkaDon*UV2m&O%Nuf=T1HOF2pC`G)w-$*2ZFo86D|)I~OdQBor51~nYiFzT``LbebKvhWyfQz+I)flaR%=2n zqg>5Lnd=Ek2@)Bwe(#$*xrKRaEEjh}c*XX!>{0ZqU;&U_?F;SsxP6rm#M1khZ*1kI z7hUCZXyk@=i+}O?nROXwiYFVTr>ynk^fb8s*6-DyoG5rN&0C7AQ@7y3`Nz2S_+MI{ zbnyGN43~em?Nd3%_M?>L zbzWwRbKIHWAyLPdOW@bcl{*6XsP1bzhfE-L?DL-A&WykK<6FLoyu2*Rk-hM7(;tu| GsQM4Xs+$A= literal 0 HcmV?d00001 diff --git a/static/img/Tiles/Wood/83.gif b/static/img/Tiles/Wood/83.gif new file mode 100644 index 0000000000000000000000000000000000000000..cc44959249fc69fa64913c086c00a6efdd6c2c69 GIT binary patch literal 1446 zcmWlY=}*&l0EfS=J%0B^L2#%o6-((|X!*7Dq&F>Xfg5?A_7xp^ofR-E&(UWc3={7~LlR4xP9f|DpsgUMsG;Jql59*ROBA~(h+=YG(zBp97 zIB06BLVaq~ug1nhOr0D~*-5t&&$x-C6`$=^9ElViOKE*7IIKsS(mM&t24Q!CeZ}CWDWqGzU!7OsB>rhh3F$tOoCKi57><6XC*E0~Xd}ueR%3&CF~< zIqV~oHvIH}F{r2K2W&I#%5)uLm6IdkvV@iJDBz<9)DAh4sKsI|!^#M$L=rWSAsyag z#DhA_tw23WEaNLQNrh&8`B=0(q(vHyRLVx29JISC(NRA&QZI_LSR0GEmDtHaN5W3W zjabrx9gUWRbaci|rJZ!Q1q*7>dL8N4peZZvtbon?Ag`M8s)$07$XSWDnMm=TJ?&lm$INu7#sU;Yl06Q3wo4Z?;Bgio3({>Y-cmz)lz5#SiB=OQhn$TD zvb_fDveETgJgCLGtwd{WL8yueXo=x~Xw*-R1;{}!)l|cb_{fZhc2;681!k`#o2rmD zYhk-pbhK4nuSVKgtiyyg*3dy6(V#;DYBXu5(^lM3i41rMha9%c;8p`_F5h-8^lG-9 zllgpJ@{Gp;APODUWS5u&Gpfiql_7UDq;$;r!z5GjKA+1!-i_vjZZEgyW$5r!u@ z&~i30B^!r8Tny$F3p=?n@tyTsW&!5`f(fg40#JrryP?ei9(cj{?AFRJRifO5yQPi~ z`5ewgvi|k`8@anVtcn85TVzDi0>Agi4_h3l%r5{jXkq@Q^k$Wa?BAFQ7hL&V?a#-h z>FM3;;r@jm^sEO2^VK&QZGQ7I_VX@uzEwlJh%|eGTKaHq+rca^@FbRfS=ZjbpsUTLH|Qjnee$pf2sz>? z&vNnkpGf+JH=QVVo$J>iCpOpi?(SLO1KuSmc=4h$>ZGkK zKd8G~v9*dEUfPTmb21A+O81MeCtzO6!R11^h!H8CPR{S`j)NPxRF&les524dT1z)U zR1v!RCb#^4G-3%ti5!o@R=y>sc~l+xNSttd^6c^0R7J_@bJx{BZDffZV9WW|aPzWc zR(6b9m;#Fx(p65m`+JZ4g~oIKI?1&s-d$+%2rd-7yztHL&bb{P_-}UQHuuZ3E+;1E H@j&f=NpP4( literal 0 HcmV?d00001 diff --git a/static/img/Tiles/metalpattern.gif b/static/img/Tiles/metalpattern.gif new file mode 100644 index 0000000000000000000000000000000000000000..ee5301b6a2b897ff4896215783e162816d6dc396 GIT binary patch literal 676 zcmV;V0$cq@Nk%w1VHp4!0M!5hfPjF3fq{R2e}aO7goK2Jg@uTSh=zuSjEszjhlh)c zi-UuMii(PUetwOOjfshgkB^Uzj*gI!kaTo(dU|?ta&mWfcc!MMk&%&oeSLFtb9;Mx zb#--ld3k(%e0X?xTU%RTU|?QeUZtg_q@<*Fc6MD|U0+{cWo2btTwI@@pP8ANsi~=y zl$4W`lc1oWXJ==Ul9F0lTCT3HW@ct-X=$sgtD>T!adB~@qoc5}u&Ai00000000000 z00000A^8LV00000EC2ui02u%o000L6K!^k3h(r{MqQjv;AQ;S|!~v-?9t^|N@IWfC zjB8lIAR-Zs24VydGy-cu8=ec;1qf1L05}v_1R@0s1Um;O1OovV3nm1K7X^p|1qTNq z9|e_x76c2LA{Ks+Asv1I0RVgeZF6=30;!4t3$=*}ng@@#36=x}1D?Tz!~+Wky?%bc zwF3gN&j1+>&kY+CLMt;w5JnOaLf}Ra5)vyq5#_OrDT%+22L|#62UrF+3@Aiz0U#56 zvsAHKr7Bg53D2$|Xu>ebLMIH67-`}p$$(+G1|=|1fIyaw5z820f{5CDQ&8aZ-UDV1|UfQ)Ats-Or!WeLP5NU&%P zv0>wbcpD4!LT0nqFI@!!{OY)Xf(H*2Hh4(WU>e<40xn+MLx4kx2@^C-;J{%*1r3M? zYpB4OvEd0gK6FT+!a|7-6b`5;@!><}7Zf^NGw{NK=>rQGnbAmKK05TQ9)_F39G|`_91T KgYWW!002Ap%>s)6 literal 0 HcmV?d00001 diff --git a/static/img/Tiles/metaltest.psd b/static/img/Tiles/metaltest.psd new file mode 100644 index 0000000000000000000000000000000000000000..bc56014390fdf33846d2a01c62b6d0860ea5b6e2 GIT binary patch literal 28069 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 literal 0 HcmV?d00001 diff --git a/static/img/Tiles/smallrooftoppattern.gif b/static/img/Tiles/smallrooftoppattern.gif new file mode 100644 index 0000000000000000000000000000000000000000..8785c434452085fa60510cec3135891be857da35 GIT binary patch literal 157 zcmZ?wbhEHblw^=(Sj51P#lWzgfnf#%!(nahlMW6HFrfI81S&*nTrk>Z9Dk7&)B9eX5ZVW{?GRD?xqS-fv#b>l8a4qonl2K z7I`(_c$~RA%VEDyq;T}yStqY=a=)FczBh4sMP1nK%N48dovqt`(7!N%lffDQiF-Fd literal 0 HcmV?d00001 diff --git a/static/img/Tiles/stony2pattern.gif b/static/img/Tiles/stony2pattern.gif new file mode 100644 index 0000000000000000000000000000000000000000..7e0a3cd02fdb1d468169496cce5e18c763d5d5e9 GIT binary patch literal 1515 zcmeH`+fP$>0LOpl^t3&_z)nlWDiaTkWe~|y3^S;hoz{xo=&}-!ixzi^kb$5SC~}8i zYYXVOl>1#<;r!RFfcH1U2if`W>Qit6g>k&%(Iva-_B((Bi+x3sj}xpN0X zXfztf#>R?^i-(4W8X6j|T)ASkTJPSyTUAw+m6bI-Je-!6rdF#B27|-ln3$L-DJdBr zAHRJ0a(sL|!!SifMWdsmuU@^%&(AL}FHcHJdhp;uPfyRIM~|kare2kR|E-vobvuD}a+4t|?kB*M+?CeZQNx66L-p0np%*;$eLc+?*ireje{`~pNmoHr| zS8QzTwQJYb*4ECRJ*&}Z>g(&zojaG4lXL0PrKeAyPESvR|Mwpi2>5{gYYzRyPoDtz zN8lH{`$kb)dk6s%MrK4stZ#)f*|v@`p_0RD2nQ_|0j&&9bU;o66>!)9X%s^KXQWxL z3798BeQQ8E1u2tn>=BqAMw?9nwp1w#vnzkub7;b$(Y-aYIjrEw7Z71^+?(^abcc$P z`i8EoSZTnr_+-z3V{a`>)odIG+tx1>2)<9EQP}`QF@4I;8-%R@USd?QB2rHpC0;_k zZHqAj1XEeTDl`j4f#T*Nq}N%)7W#)S+WM+~=7ku#e{WK#tSsLMb-O+7w|H;hQT{=I zC=2irt5;;yNj9D|7TxZ!^J{&g{kK2jzuH_J3FdEmN5SuVzQVkNet-%F@kjSB?vhRy zB1GayC`nn&QQ+)!5^@g!EA&4FV=$i2iyXICQ8z(hal1CfUZMFL6W>w>7=T1VqxeTv zm;#fMgxlBOfXGolp@u;M0SyHqa@s8l06TI%H-Z2Nt%uRxK^o}urOM_K?cvyi5Wd$r{NmP=lBk7VePHnrdT39K_RGikuqZ5H6M&bsHe@% zB}>DVJP{p$L4fBLwJmA@oph(->-y9a3Hnelvn12+;|?5$|^-aZ4eBOX`vho QRLUTq&~Bd=AqY7B50PNLzW@LL literal 0 HcmV?d00001 diff --git a/static/img/Tiles/woodpattern.gif b/static/img/Tiles/woodpattern.gif new file mode 100644 index 0000000000000000000000000000000000000000..f8edf49550111a5932cff8c8528d24e97abdb894 GIT binary patch literal 1284 zcmeH`+e@2g0LI@Omhb)E?~rermbAubG&YGwbB>8Qn0ztEnd~zf4{g;X&NOkU8m*&+ z7LuBd$vTOw9fgijWOy~1^AR#W1rNVa9Ak)PPRd$%qck2gM^+ zBB;d!?a7)kDL{yJlO6<6eECj``xXBrox}3AcO~jZL%?8Ay-GsjbAGV+=7Zo$0;chbA3B@#> z>7~M5DC?n4^pL0hVwIxdxD`!0$%L8kX&`67$L+*oSe&queI58hSRB)%xuCdTk60Bp zXhJhA&8i`*f#W@-NrB~j^n{ZdGNWlP?Nej3emc~N$Bn2@1Hu3Kj|?b&6aKrbecsPM z0pMQ%6P^X0>OV-awgIl0!1){5Yx^Yt5Tz5TJ>bq8fDfJ0o9i_`;DN`@p1zouuj!`e zAM%tunC@>OdBrb_>I-^_?b_GLO9tJfG{oG<0ihA@hgzQ=i!9H-2c$De?_e3x(%<=T znJvpUPoCqFn$I^Noo{3^^iQi<{EMx%^$zw*;Y0f1rb_S`iDNqtrk->Zw@z~O)rCwn z^t!HO4i)PZe39Uya^r3P4kusP{gZNh!=`C#7x_tXSal1e2Bc^H*xo50mFdh&4W?Q7 zu0W_%de+~>R}TSg6n|D-lhS1R?k}e<9^D`R)cv!|z2@XALMyBk1&%1=vJyYx|Yf$OjG3iFLjt!^_>c>rE})OL%xf8o&gRNcoZ zraqHTG4R~9M-~y#MIX_te#VC)fAKqT{kE`rO7y~Z4U?4)JTlR}N}LyZS8~6&`0b0e zCfVizphRJA2zx^PFce}X1wqiB<=x@<`ITw-vY}dg%O&;R=DGm52MUMFd#g9Dme#zn nvn5fmfvfmJ4V3{7HElH?<|QP1EplU7;su@M_jlgm@qpuR6BPSx literal 0 HcmV?d00001 diff --git a/static/img/Weapons/elegtro_maknetizer.png b/static/img/Weapons/elegtro_maknetizer.png new file mode 100644 index 0000000000000000000000000000000000000000..4a7f7ab51bfaf43cfe7f77d7b4ddfda108c69ece GIT binary patch literal 414 zcmeAS@N?(olHy`uVBq!ia0vp^LO{&P!3-oh7<+7ilw^r(L`iUdT1k0gQ7VIDN`6wR zf@f}GdTLN=VoGJ<$y6JlqOJg+5ZAuGK66vk>SYgS&6>p#edhG()4v!Z9z1w(^2Etw z$Bq>g6vRYFr=_M|IDcWzoH?y6Ewg6MI(zo)^5x5~UcEYb^5pKWuDyHrwzRZ1H-W&_ zt5fxjbZx}+FnesX#UOo<)6{|wD8kgmn-OR?gQu&X%Q~loCIH|k*=PU& literal 0 HcmV?d00001 diff --git a/static/img/Weapons/hook_gun.png b/static/img/Weapons/hook_gun.png new file mode 100644 index 0000000000000000000000000000000000000000..706c47c2135f50a2e4b521954a7d966eb24b179a GIT binary patch literal 436 zcmeAS@N?(olHy`uVBq!ia0vp^VnEEr!3-qZ>*8JlDajJoh?3y^w370~qErUQl>DSr z1<%~X^wgl##FWaylc_d9MZEz&A+GCpPUPn1Ha9f|3hddlrzj^UqLt~LzW#MSJ}Dli zU|-*fTU@-|G@>H|D$BFB`3o)a5SXiynV|BiDf7?sU)^PlxM>Vb@6-^-w^AA!%_O)pgB;=29lZ1Opm3*N~+Co2N^?Nw4G z({%0^#fRSeZ5{Lb{Aa0U3