diff --git a/.gitignore b/.gitignore index 2979fcc6..c209df46 100644 --- a/.gitignore +++ b/.gitignore @@ -139,4 +139,22 @@ dmypy.json ## Git .DS_Store -/aibox/runs \ No newline at end of file + +# Project specific directories and files +aibox/resources/datasets/ +aibox/resources/old_code/Testing/ +aibox/resources/fruithands.csv +aibox/resources/hands_fp_raw.csv +aibox/resources/object_detector_idea.pdf +aibox/example_gpu.sh +aibox/UOS_HPC_Guide.md +flobox/experiment/analysis/Ramon/ +flobox/experiment/forms/ +flobox/experiment/plots/ +flobox/experiment/Abrechnung_VPgelder.pdf +flobox/experiment/Data_Analysis.zip +flobox/resources/Copenhagen/ +flobox/resources/OptiVisT_Retreat_Poster.pdf +flobox/resources/OptiVisT_Workshop_Program.pdf +flobox/resources/OptiVisT_Workshop_Timetable.pdf +flobox/Powell2024-Helping_Blind_People_Grasp.pdf diff --git a/README.md b/README.md index a0f8249e..8f34e03a 100644 --- a/README.md +++ b/README.md @@ -38,3 +38,24 @@ You do not need all the YOLOv5 files, just the following: - export.py If you clone this repo, YOLOv5 is already set up properly and you only need to separately install the YOLOv8 packages into your environment. + + +### Exporting models for use with the NLInterface Android App + +These models can be used in the Android app developed during the study project "Making blind people grasp" in 2023/2024 lead by Peter König. +The script for that is located in `aibox/app_export.py` and works for the hand detection as well as object detection. + +To export the hand detection model, first export it as a tensorflow saved model using the default export script. + +```bash +$ cd aibox +$ python export.py --weights hand.pt --include saved_model --keras +``` +This will create the `hand_saved_model` directory. + +After that you can convert it for the Tensorflow-Lite Runtime using + +```bash +$ python app_export.py --hands hand_saved_model --output hands.tflite +``` +To run the master.py file, change directory into the aibox folder before executing the code (pathing issue). \ No newline at end of file diff --git a/Shape_detection/Images/0.jpg b/Shape_detection/Images/0.jpg new file mode 100644 index 00000000..b5fe20fd Binary files /dev/null and b/Shape_detection/Images/0.jpg differ diff --git a/Shape_detection/Images/1.jpg b/Shape_detection/Images/1.jpg new file mode 100644 index 00000000..dc0e7b71 Binary files /dev/null and b/Shape_detection/Images/1.jpg differ diff --git a/Shape_detection/Images/2.jpg b/Shape_detection/Images/2.jpg new file mode 100644 index 00000000..36157ce6 Binary files /dev/null and b/Shape_detection/Images/2.jpg differ diff --git a/Shape_detection/Images/3.jpg b/Shape_detection/Images/3.jpg new file mode 100644 index 00000000..6e3600bb Binary files /dev/null and b/Shape_detection/Images/3.jpg differ diff --git a/Shape_detection/Images/4.jpg b/Shape_detection/Images/4.jpg new file mode 100644 index 00000000..20f8e949 Binary files /dev/null and b/Shape_detection/Images/4.jpg differ diff --git a/Shape_detection/Images/5.jpg b/Shape_detection/Images/5.jpg new file mode 100644 index 00000000..56f8a78c Binary files /dev/null and b/Shape_detection/Images/5.jpg differ diff --git a/Shape_detection/Images/6.jpg b/Shape_detection/Images/6.jpg new file mode 100644 index 00000000..eaeb27e5 Binary files /dev/null and b/Shape_detection/Images/6.jpg differ diff --git a/Shape_detection/Images/7.jpg b/Shape_detection/Images/7.jpg new file mode 100644 index 00000000..45cf8e84 Binary files /dev/null and b/Shape_detection/Images/7.jpg differ diff --git a/Shape_detection/Images/8.jpg b/Shape_detection/Images/8.jpg new file mode 100644 index 00000000..7a2522dc Binary files /dev/null and b/Shape_detection/Images/8.jpg differ diff --git a/Shape_detection/Images/9.jpg b/Shape_detection/Images/9.jpg new file mode 100644 index 00000000..f2adea44 Binary files /dev/null and b/Shape_detection/Images/9.jpg differ diff --git a/Shape_detection/Images/a.jpg b/Shape_detection/Images/a.jpg new file mode 100644 index 00000000..cd0d53ee Binary files /dev/null and b/Shape_detection/Images/a.jpg differ diff --git a/Shape_detection/Images/b.jpg b/Shape_detection/Images/b.jpg new file mode 100644 index 00000000..d3170488 Binary files /dev/null and b/Shape_detection/Images/b.jpg differ diff --git a/Shape_detection/Images/c.jpg b/Shape_detection/Images/c.jpg new file mode 100644 index 00000000..48753bf3 Binary files /dev/null and b/Shape_detection/Images/c.jpg differ diff --git a/Shape_detection/Images/d.jpg b/Shape_detection/Images/d.jpg new file mode 100644 index 00000000..dbd30a82 Binary files /dev/null and b/Shape_detection/Images/d.jpg differ diff --git a/Shape_detection/Images/e.jpg b/Shape_detection/Images/e.jpg new file mode 100644 index 00000000..85a7a25a Binary files /dev/null and b/Shape_detection/Images/e.jpg differ diff --git a/Shape_detection/Images/emnist.zip b/Shape_detection/Images/emnist.zip new file mode 100644 index 00000000..0e514d36 --- /dev/null +++ b/Shape_detection/Images/emnist.zip @@ -0,0 +1,1458 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Information Technology Laboratory | NIST + + + + + + + + + + + Skip to main content + + +
+ + +
+
+
+
+
+ U.S. flag +
+
+

An official website of the United States government

+ +
+ +
+
+
+
+
+ +
+

+ Official websites use .gov +
+ A .gov website belongs to an official government organization in the United States. +

+
+
+
+ +
+

+ Secure .gov websites use HTTPS +
+ A lock ( + + + + +) or https:// means you’ve safely connected to the .gov website. Share sensitive information only on official, secure websites. +

+
+
+
+
+
+
+ + + +
+ + + + +
+ + +
+ +
+ + + + +
+ + + + + +
+ + + + + + + + + + + +
+ + + +
+
+
+
+ +

Information Technology Laboratory

+ + +
+
+
+
+ + +
+
+ + + + +
+ +
+ + + + + + +
+

WELCOME TO THE INFORMATION TECHNOLOGY LABORATORY

+ +
+

ITL’s Purpose | Cultivating Trust in IT and Metrology

+
+ +

The Information Technology Laboratory (ITL) is one of NIST’s six research laboratories. ITL focuses on IT measurements, testing, and standards, and is a globally recognized and trusted source of high-quality, independent, and unbiased research and data. ITL’s mission, to cultivate trust in information technology (IT) and metrology, is accomplished using its world-class measurement and testing facilities and encompassing a wide range of areas of computer science, mathematics, statistics, and systems engineering.

+ +

This non-regulatory role, along with ITL’s deep technical expertise in all fields of information technology, helps increase trust in IT worldwide.

+ +
+
+

ITL Newsletters

+ +

Published bimonthly, the ITL Newsletter features news articles on ITL's programs, projects, activities, and accomplishments. It announces selected new ITL publications and describes upcoming technical conferences and workshops. 

+ +

Sign up for ITL Newsletters!

+
+ +
+

ITL BULLETINS

+ +

The ITL Bulletin focuses on ITL’s research and collaborative activities in cybersecurity. It often announces new ITL publications in information security and gives an overview of the research contained within.

+ +

Sign up for ITL Bulletins!

+
+
+ +
+ + +
+
+ +

News and Updates
+

+ +
+ + + + + + + + +
+ +
+
+ +
+
+ +
+
+
+
+ + +
+
+
+

NIST Publishes Automated Vehicles Workshop Report +

+
+
+
+ +
+ +
+
+
NIST held a virtual workshop in September 2023 on Standards and Performance Metrics for On-Road Automated Vehicles, attracting over 600 attendees from industry + +
+ +
+
+
+
+ + + + + + + + + +
+
+
+ + +
+ +
+ + + + + +
+
+ +

Awards
+

+ +
+ + + + + + + + +
+ + +
+
+ + +
+
+ + +
+
+ + +
+ + + + + + + + + +
+
+
+ + +
+ +
+ + + +
+ +
+ + +
+
+ + + +
+ +
+ +
+ +

Contacts

+ + + +
+ +
+ + + +
+ +
+ +
+ +
+ + + +
+ + + +
+ + + + +
+ +
+ + + + + + + + + diff --git a/Shape_detection/Images/f.jpg b/Shape_detection/Images/f.jpg new file mode 100644 index 00000000..fddb05db Binary files /dev/null and b/Shape_detection/Images/f.jpg differ diff --git a/Shape_detection/Images/g.jpg b/Shape_detection/Images/g.jpg new file mode 100644 index 00000000..30b42239 Binary files /dev/null and b/Shape_detection/Images/g.jpg differ diff --git a/Shape_detection/Images/h.jpg b/Shape_detection/Images/h.jpg new file mode 100644 index 00000000..f10bd5f9 Binary files /dev/null and b/Shape_detection/Images/h.jpg differ diff --git a/Shape_detection/Images/i.jpg b/Shape_detection/Images/i.jpg new file mode 100644 index 00000000..deb15eeb Binary files /dev/null and b/Shape_detection/Images/i.jpg differ diff --git a/Shape_detection/Images/j.jpg b/Shape_detection/Images/j.jpg new file mode 100644 index 00000000..e10c29b4 Binary files /dev/null and b/Shape_detection/Images/j.jpg differ diff --git a/Shape_detection/Images/k.jpg b/Shape_detection/Images/k.jpg new file mode 100644 index 00000000..29139f44 Binary files /dev/null and b/Shape_detection/Images/k.jpg differ diff --git a/Shape_detection/Images/l.jpg b/Shape_detection/Images/l.jpg new file mode 100644 index 00000000..498d493e Binary files /dev/null and b/Shape_detection/Images/l.jpg differ diff --git a/Shape_detection/Images/m.jpg b/Shape_detection/Images/m.jpg new file mode 100644 index 00000000..18ecb042 Binary files /dev/null and b/Shape_detection/Images/m.jpg differ diff --git a/Shape_detection/Images/n.jpg b/Shape_detection/Images/n.jpg new file mode 100644 index 00000000..9551ab0d Binary files /dev/null and b/Shape_detection/Images/n.jpg differ diff --git a/Shape_detection/Images/p.jpg b/Shape_detection/Images/p.jpg new file mode 100644 index 00000000..0ffe94aa Binary files /dev/null and b/Shape_detection/Images/p.jpg differ diff --git a/Shape_detection/Images/q.jpg b/Shape_detection/Images/q.jpg new file mode 100644 index 00000000..25927482 Binary files /dev/null and b/Shape_detection/Images/q.jpg differ diff --git a/Shape_detection/Images/r.jpg b/Shape_detection/Images/r.jpg new file mode 100644 index 00000000..51a685a9 Binary files /dev/null and b/Shape_detection/Images/r.jpg differ diff --git a/Shape_detection/Images/s.jpg b/Shape_detection/Images/s.jpg new file mode 100644 index 00000000..56f8a78c Binary files /dev/null and b/Shape_detection/Images/s.jpg differ diff --git a/Shape_detection/Images/t.jpg b/Shape_detection/Images/t.jpg new file mode 100644 index 00000000..001c55f8 Binary files /dev/null and b/Shape_detection/Images/t.jpg differ diff --git a/Shape_detection/Images/try.jpg b/Shape_detection/Images/try.jpg new file mode 100644 index 00000000..ebaa8105 Binary files /dev/null and b/Shape_detection/Images/try.jpg differ diff --git a/Shape_detection/Images/u.jpg b/Shape_detection/Images/u.jpg new file mode 100644 index 00000000..89994c05 Binary files /dev/null and b/Shape_detection/Images/u.jpg differ diff --git a/Shape_detection/Images/v.jpg b/Shape_detection/Images/v.jpg new file mode 100644 index 00000000..b453ce36 Binary files /dev/null and b/Shape_detection/Images/v.jpg differ diff --git a/Shape_detection/Images/w.jpg b/Shape_detection/Images/w.jpg new file mode 100644 index 00000000..ab609918 Binary files /dev/null and b/Shape_detection/Images/w.jpg differ diff --git a/Shape_detection/Images/x.jpg b/Shape_detection/Images/x.jpg new file mode 100644 index 00000000..194af951 Binary files /dev/null and b/Shape_detection/Images/x.jpg differ diff --git a/Shape_detection/Images/y.jpg b/Shape_detection/Images/y.jpg new file mode 100644 index 00000000..a740ea99 Binary files /dev/null and b/Shape_detection/Images/y.jpg differ diff --git a/Shape_detection/Images/z.jpg b/Shape_detection/Images/z.jpg new file mode 100644 index 00000000..27cf1ce2 Binary files /dev/null and b/Shape_detection/Images/z.jpg differ diff --git a/Shape_detection/Participants/0/alpha intensity_0.txt b/Shape_detection/Participants/0/alpha intensity_0.txt new file mode 100644 index 00000000..977ec505 --- /dev/null +++ b/Shape_detection/Participants/0/alpha intensity_0.txt @@ -0,0 +1,5 @@ +int_top: 94 +int_bottom: 94 +int_left: 94 +int_right: 94 +avg_int: 94 diff --git a/Shape_detection/Participants/0/alpha training_0.txt b/Shape_detection/Participants/0/alpha training_0.txt new file mode 100644 index 00000000..caf9f73a --- /dev/null +++ b/Shape_detection/Participants/0/alpha training_0.txt @@ -0,0 +1,13 @@ +Participant ID: 0 +Intensity for top and bottom: 94 +Intensity for right and left: 94 +Average intensity: 94 +Training task: 2 set/sets + +Set 1 block accuracies: [87.5, 62.5, 100.0] +Set 1 average accuracy: 83.33% + +Set 2 block accuracies: [100.0, 81.25, 100.0] +Set 2 average accuracy: 93.75% + +Overall training completed with an average accuracy of 88.54% diff --git a/Shape_detection/Participants/0/alpha training_0.xlsx b/Shape_detection/Participants/0/alpha training_0.xlsx new file mode 100644 index 00000000..ab5d0634 Binary files /dev/null and b/Shape_detection/Participants/0/alpha training_0.xlsx differ diff --git a/Shape_detection/Participants/0/alpha_0_120.png b/Shape_detection/Participants/0/alpha_0_120.png new file mode 100644 index 00000000..1b34e401 Binary files /dev/null and b/Shape_detection/Participants/0/alpha_0_120.png differ diff --git a/Shape_detection/Participants/0/alpha_cm_0_Set 1.png b/Shape_detection/Participants/0/alpha_cm_0_Set 1.png new file mode 100644 index 00000000..d3f7f06b Binary files /dev/null and b/Shape_detection/Participants/0/alpha_cm_0_Set 1.png differ diff --git a/Shape_detection/Participants/0/alpha_cm_0_Set 2.png b/Shape_detection/Participants/0/alpha_cm_0_Set 2.png new file mode 100644 index 00000000..ae47e617 Binary files /dev/null and b/Shape_detection/Participants/0/alpha_cm_0_Set 2.png differ diff --git a/Shape_detection/Participants/0/beta intensity_0.txt b/Shape_detection/Participants/0/beta intensity_0.txt new file mode 100644 index 00000000..d67e99d9 --- /dev/null +++ b/Shape_detection/Participants/0/beta intensity_0.txt @@ -0,0 +1,6 @@ +preference: Interval +int_top: 83 +int_bottom: 83 +int_left: 83 +int_right: 83 +avg_int: 83 diff --git a/Shape_detection/Participants/0/beta training_0.txt b/Shape_detection/Participants/0/beta training_0.txt new file mode 100644 index 00000000..9946e4be --- /dev/null +++ b/Shape_detection/Participants/0/beta training_0.txt @@ -0,0 +1,17 @@ +Participant ID: 0 +Diagonal pattern: Simultaneous +Intensity for top and bottom: 83 +Intensity for right and left: 83 +Average intensity: 83 +Training task: 4 set/sets + +Set 1 block accuracies: [56.25, 62.5, 31.25] +Set 1 average accuracy: 50.00% + +Set 2 block accuracies: [37.5, 43.75, 43.75] +Set 2 average accuracy: 41.67% + +Set 3 block accuracies: [37.5, 43.75, 43.75] +Set 3 average accuracy: 41.67% + +Overall training completed with an average accuracy of 44.44% diff --git a/Shape_detection/Participants/0/beta training_0.xlsx b/Shape_detection/Participants/0/beta training_0.xlsx new file mode 100644 index 00000000..e6798770 Binary files /dev/null and b/Shape_detection/Participants/0/beta training_0.xlsx differ diff --git a/Shape_detection/Participants/0/beta_0_60.png b/Shape_detection/Participants/0/beta_0_60.png new file mode 100644 index 00000000..0f70eb6a Binary files /dev/null and b/Shape_detection/Participants/0/beta_0_60.png differ diff --git a/Shape_detection/Participants/0/beta_cm_0_Set 1.png b/Shape_detection/Participants/0/beta_cm_0_Set 1.png new file mode 100644 index 00000000..4cf1103f Binary files /dev/null and b/Shape_detection/Participants/0/beta_cm_0_Set 1.png differ diff --git a/Shape_detection/Participants/0/beta_cm_0_Set 2.png b/Shape_detection/Participants/0/beta_cm_0_Set 2.png new file mode 100644 index 00000000..9a9fa1bb Binary files /dev/null and b/Shape_detection/Participants/0/beta_cm_0_Set 2.png differ diff --git a/Shape_detection/Participants/0/beta_cm_0_Set 3.png b/Shape_detection/Participants/0/beta_cm_0_Set 3.png new file mode 100644 index 00000000..434d7f4f Binary files /dev/null and b/Shape_detection/Participants/0/beta_cm_0_Set 3.png differ diff --git a/Shape_detection/Participants/1/alpha intensity_1.txt b/Shape_detection/Participants/1/alpha intensity_1.txt new file mode 100644 index 00000000..2904b25b --- /dev/null +++ b/Shape_detection/Participants/1/alpha intensity_1.txt @@ -0,0 +1,5 @@ +int_top: 10 +int_bottom: 10 +int_left: 10 +int_right: 10 +avg_int: 10 diff --git a/Shape_detection/Participants/1/alpha order_1.txt b/Shape_detection/Participants/1/alpha order_1.txt new file mode 100644 index 00000000..4ebc0cd1 --- /dev/null +++ b/Shape_detection/Participants/1/alpha order_1.txt @@ -0,0 +1,30 @@ + +Starting category: numbers +7 +9 +6 +3 +0 +2 +1 +5 +8 +4 + +Starting category: letters +p +d +c +j +b +s +a +e +g +l +q +h +i +u +f +t diff --git a/Shape_detection/Participants/1/alpha training_1.txt b/Shape_detection/Participants/1/alpha training_1.txt new file mode 100644 index 00000000..7afcabba --- /dev/null +++ b/Shape_detection/Participants/1/alpha training_1.txt @@ -0,0 +1,13 @@ +Participant ID: 1 +Intensity for top and bottom: 10 +Intensity for right and left: 10 +Average intensity: 10 +Training task: 2 set/sets + +Set 1 block accuracies: [62.5, 87.5, 75.0] +Set 1 average accuracy: 75.00% + +Set 2 block accuracies: [100.0, 100.0, 100.0] +Set 2 average accuracy: 100.00% + +Overall training completed with an average accuracy of 87.50% diff --git a/Shape_detection/Participants/1/alpha training_1.xlsx b/Shape_detection/Participants/1/alpha training_1.xlsx new file mode 100644 index 00000000..5e3a7727 Binary files /dev/null and b/Shape_detection/Participants/1/alpha training_1.xlsx differ diff --git a/Shape_detection/Participants/1/alpha_1_120.png b/Shape_detection/Participants/1/alpha_1_120.png new file mode 100644 index 00000000..802769c7 Binary files /dev/null and b/Shape_detection/Participants/1/alpha_1_120.png differ diff --git a/Shape_detection/Participants/1/alpha_1_60.png b/Shape_detection/Participants/1/alpha_1_60.png new file mode 100644 index 00000000..ef72211d Binary files /dev/null and b/Shape_detection/Participants/1/alpha_1_60.png differ diff --git a/Shape_detection/Participants/1/alpha_cm_1_Set 1.png b/Shape_detection/Participants/1/alpha_cm_1_Set 1.png new file mode 100644 index 00000000..aa8f9fc8 Binary files /dev/null and b/Shape_detection/Participants/1/alpha_cm_1_Set 1.png differ diff --git a/Shape_detection/Participants/1/alpha_cm_1_Set 2.png b/Shape_detection/Participants/1/alpha_cm_1_Set 2.png new file mode 100644 index 00000000..87ff1bde Binary files /dev/null and b/Shape_detection/Participants/1/alpha_cm_1_Set 2.png differ diff --git a/Shape_detection/Participants/1/beta intensity_1.txt b/Shape_detection/Participants/1/beta intensity_1.txt new file mode 100644 index 00000000..28f4202e --- /dev/null +++ b/Shape_detection/Participants/1/beta intensity_1.txt @@ -0,0 +1,6 @@ +preference: Interval +int_top: 15 +int_bottom: 15 +int_left: 15 +int_right: 15 +avg_int: 15 diff --git a/Shape_detection/Participants/1/beta order_1.txt b/Shape_detection/Participants/1/beta order_1.txt new file mode 100644 index 00000000..f2c7a880 --- /dev/null +++ b/Shape_detection/Participants/1/beta order_1.txt @@ -0,0 +1,41 @@ + +Starting category: numbers +7 +5 +1 +4 +9 +0 +8 +2 +3 +6 + +Starting category: letters +u +i +h +q +b +p +f +e +t +l +s +d +c +a +j +g + +Starting category: beta +z +n +x +k +w +v +r +m +y diff --git a/Shape_detection/Participants/1/beta training_1.txt b/Shape_detection/Participants/1/beta training_1.txt new file mode 100644 index 00000000..aad0b66e --- /dev/null +++ b/Shape_detection/Participants/1/beta training_1.txt @@ -0,0 +1,11 @@ +Participant ID: 1 +Diagonal pattern: Interval +Intensity for top and bottom: 15 +Intensity for right and left: 15 +Average intensity: 15 +Training task: 1 set/sets + +Set 1 block accuracies: [93.75, 93.75, 87.5] +Set 1 average accuracy: 91.67% + +Overall training completed with an average accuracy of 91.67% diff --git a/Shape_detection/Participants/1/beta training_1.xlsx b/Shape_detection/Participants/1/beta training_1.xlsx new file mode 100644 index 00000000..c9654d36 Binary files /dev/null and b/Shape_detection/Participants/1/beta training_1.xlsx differ diff --git a/Shape_detection/Participants/1/beta_1_60.png b/Shape_detection/Participants/1/beta_1_60.png new file mode 100644 index 00000000..aaa7c6dc Binary files /dev/null and b/Shape_detection/Participants/1/beta_1_60.png differ diff --git a/Shape_detection/Participants/1/beta_cm_1_Set 1.png b/Shape_detection/Participants/1/beta_cm_1_Set 1.png new file mode 100644 index 00000000..de8351e5 Binary files /dev/null and b/Shape_detection/Participants/1/beta_cm_1_Set 1.png differ diff --git a/Shape_detection/Participants/2/alpha intensity_2.txt b/Shape_detection/Participants/2/alpha intensity_2.txt new file mode 100644 index 00000000..a8f76cd6 --- /dev/null +++ b/Shape_detection/Participants/2/alpha intensity_2.txt @@ -0,0 +1,5 @@ +int_top: 86 +int_bottom: 86 +int_left: 83 +int_right: 83 +avg_int: 84 diff --git a/Shape_detection/Participants/2/alpha order_2.txt b/Shape_detection/Participants/2/alpha order_2.txt new file mode 100644 index 00000000..95393510 --- /dev/null +++ b/Shape_detection/Participants/2/alpha order_2.txt @@ -0,0 +1,30 @@ + +Starting category: numbers +8 +0 +5 +7 +1 +9 +4 +3 +2 +6 + +Starting category: letters +c +b +l +u +g +q +j +p +a +s +f +d +i +h +e +t diff --git a/Shape_detection/Participants/2/alpha training_2.txt b/Shape_detection/Participants/2/alpha training_2.txt new file mode 100644 index 00000000..11be612d --- /dev/null +++ b/Shape_detection/Participants/2/alpha training_2.txt @@ -0,0 +1,16 @@ +Participant ID: 2 +Intensity for top and bottom: 86 +Intensity for right and left: 83 +Average intensity: 84 +Training task: 3 set/sets + +Set 1 block accuracies: [81.25, 62.5, 93.75] +Set 1 average accuracy: 79.17% + +Set 2 block accuracies: [81.25, 100.0, 87.5] +Set 2 average accuracy: 89.58% + +Set 3 block accuracies: [81.25, 93.75, 100.0] +Set 3 average accuracy: 91.67% + +Overall training completed with an average accuracy of 86.81% diff --git a/Shape_detection/Participants/2/alpha training_2.xlsx b/Shape_detection/Participants/2/alpha training_2.xlsx new file mode 100644 index 00000000..803760fa Binary files /dev/null and b/Shape_detection/Participants/2/alpha training_2.xlsx differ diff --git a/Shape_detection/Participants/2/alpha_2_120.png b/Shape_detection/Participants/2/alpha_2_120.png new file mode 100644 index 00000000..a395ab95 Binary files /dev/null and b/Shape_detection/Participants/2/alpha_2_120.png differ diff --git a/Shape_detection/Participants/2/alpha_2_60.png b/Shape_detection/Participants/2/alpha_2_60.png new file mode 100644 index 00000000..bce29706 Binary files /dev/null and b/Shape_detection/Participants/2/alpha_2_60.png differ diff --git a/Shape_detection/Participants/2/alpha_cm_2_Set 1.png b/Shape_detection/Participants/2/alpha_cm_2_Set 1.png new file mode 100644 index 00000000..34a4710d Binary files /dev/null and b/Shape_detection/Participants/2/alpha_cm_2_Set 1.png differ diff --git a/Shape_detection/Participants/2/alpha_cm_2_Set 2.png b/Shape_detection/Participants/2/alpha_cm_2_Set 2.png new file mode 100644 index 00000000..c5371d27 Binary files /dev/null and b/Shape_detection/Participants/2/alpha_cm_2_Set 2.png differ diff --git a/Shape_detection/Participants/2/alpha_cm_2_Set 3.png b/Shape_detection/Participants/2/alpha_cm_2_Set 3.png new file mode 100644 index 00000000..c30df47a Binary files /dev/null and b/Shape_detection/Participants/2/alpha_cm_2_Set 3.png differ diff --git a/Shape_detection/Participants/2/beta intensity_2.txt b/Shape_detection/Participants/2/beta intensity_2.txt new file mode 100644 index 00000000..890e7616 --- /dev/null +++ b/Shape_detection/Participants/2/beta intensity_2.txt @@ -0,0 +1,6 @@ +preference: Interval +int_top: 94 +int_bottom: 94 +int_left: 94 +int_right: 94 +avg_int: 94 diff --git a/Shape_detection/Participants/2/beta order_2.txt b/Shape_detection/Participants/2/beta order_2.txt new file mode 100644 index 00000000..3b71df19 --- /dev/null +++ b/Shape_detection/Participants/2/beta order_2.txt @@ -0,0 +1,41 @@ + +Starting category: numbers +9 +4 +2 +1 +6 +5 +3 +8 +7 +0 + +Starting category: letters +i +h +b +f +t +q +d +j +g +p +c +a +l +u +s +e + +Starting category: beta +n +v +x +y +w +z +r +k +m diff --git a/Shape_detection/Participants/2/beta training_2.txt b/Shape_detection/Participants/2/beta training_2.txt new file mode 100644 index 00000000..49d47b5f --- /dev/null +++ b/Shape_detection/Participants/2/beta training_2.txt @@ -0,0 +1,17 @@ +Participant ID: 2 +Diagonal pattern: Interval +Intensity for top and bottom: 94 +Intensity for right and left: 94 +Average intensity: 94 +Training task: 4 set/sets + +Set 1 block accuracies: [68.75, 87.5, 81.25] +Set 1 average accuracy: 79.17% + +Set 2 block accuracies: [62.5, 93.75, 31.25] +Set 2 average accuracy: 62.50% + +Set 3 block accuracies: [75.0, 93.75, 87.5] +Set 3 average accuracy: 85.42% + +Overall training completed with an average accuracy of 75.69% diff --git a/Shape_detection/Participants/2/beta training_2.xlsx b/Shape_detection/Participants/2/beta training_2.xlsx new file mode 100644 index 00000000..fd8ec3bd Binary files /dev/null and b/Shape_detection/Participants/2/beta training_2.xlsx differ diff --git a/Shape_detection/Participants/2/beta_2_60.png b/Shape_detection/Participants/2/beta_2_60.png new file mode 100644 index 00000000..0e4984cc Binary files /dev/null and b/Shape_detection/Participants/2/beta_2_60.png differ diff --git a/Shape_detection/Participants/2/beta_cm_2_Set 1.png b/Shape_detection/Participants/2/beta_cm_2_Set 1.png new file mode 100644 index 00000000..ba8afe18 Binary files /dev/null and b/Shape_detection/Participants/2/beta_cm_2_Set 1.png differ diff --git a/Shape_detection/Participants/2/beta_cm_2_Set 2.png b/Shape_detection/Participants/2/beta_cm_2_Set 2.png new file mode 100644 index 00000000..c1769bf1 Binary files /dev/null and b/Shape_detection/Participants/2/beta_cm_2_Set 2.png differ diff --git a/Shape_detection/Participants/2/beta_cm_2_Set 3.png b/Shape_detection/Participants/2/beta_cm_2_Set 3.png new file mode 100644 index 00000000..e8836abb Binary files /dev/null and b/Shape_detection/Participants/2/beta_cm_2_Set 3.png differ diff --git a/Shape_detection/Participants/3/alpha intensity_3.txt b/Shape_detection/Participants/3/alpha intensity_3.txt new file mode 100644 index 00000000..7d878070 --- /dev/null +++ b/Shape_detection/Participants/3/alpha intensity_3.txt @@ -0,0 +1,5 @@ +int_top: 87 +int_bottom: 87 +int_left: 87 +int_right: 87 +avg_int: 87 diff --git a/Shape_detection/Participants/3/alpha order_3.txt b/Shape_detection/Participants/3/alpha order_3.txt new file mode 100644 index 00000000..aa39e5ec --- /dev/null +++ b/Shape_detection/Participants/3/alpha order_3.txt @@ -0,0 +1,30 @@ + +Starting category: numbers +9 +1 +3 +0 +7 +5 +6 +4 +8 +2 + +Starting category: letters +i +q +t +a +g +h +l +s +u +d +j +c +f +b +e +p diff --git a/Shape_detection/Participants/3/alpha training_3.txt b/Shape_detection/Participants/3/alpha training_3.txt new file mode 100644 index 00000000..ae048149 --- /dev/null +++ b/Shape_detection/Participants/3/alpha training_3.txt @@ -0,0 +1,10 @@ +Participant ID: 3 +Intensity for top and bottom: 87 +Intensity for right and left: 87 +Average intensity: 87 +Training task: 1 set/sets + +Set 1 block accuracies: [100.0, 100.0, 100.0] +Set 1 average accuracy: 100.00% + +Overall training completed with an average accuracy of 100.00% diff --git a/Shape_detection/Participants/3/alpha training_3.xlsx b/Shape_detection/Participants/3/alpha training_3.xlsx new file mode 100644 index 00000000..40041f00 Binary files /dev/null and b/Shape_detection/Participants/3/alpha training_3.xlsx differ diff --git a/Shape_detection/Participants/3/alpha_3_60.png b/Shape_detection/Participants/3/alpha_3_60.png new file mode 100644 index 00000000..0ee60cad Binary files /dev/null and b/Shape_detection/Participants/3/alpha_3_60.png differ diff --git a/Shape_detection/Participants/3/alpha_cm_3_Set 1.png b/Shape_detection/Participants/3/alpha_cm_3_Set 1.png new file mode 100644 index 00000000..3c669d07 Binary files /dev/null and b/Shape_detection/Participants/3/alpha_cm_3_Set 1.png differ diff --git a/Shape_detection/Participants/3/beta intensity_3.txt b/Shape_detection/Participants/3/beta intensity_3.txt new file mode 100644 index 00000000..ce3de0cd --- /dev/null +++ b/Shape_detection/Participants/3/beta intensity_3.txt @@ -0,0 +1,6 @@ +preference: Interval +int_top: 89 +int_bottom: 89 +int_left: 91 +int_right: 91 +avg_int: 90 diff --git a/Shape_detection/Participants/3/beta order_3.txt b/Shape_detection/Participants/3/beta order_3.txt new file mode 100644 index 00000000..125c726e --- /dev/null +++ b/Shape_detection/Participants/3/beta order_3.txt @@ -0,0 +1,41 @@ + +Starting category: numbers +0 +5 +6 +3 +1 +4 +9 +7 +8 +2 + +Starting category: letters +u +p +q +f +c +h +a +t +l +i +j +s +d +g +b +e + +Starting category: beta +w +x +k +r +m +n +z +v +y diff --git a/Shape_detection/Participants/3/beta training_3.txt b/Shape_detection/Participants/3/beta training_3.txt new file mode 100644 index 00000000..c7e3b899 --- /dev/null +++ b/Shape_detection/Participants/3/beta training_3.txt @@ -0,0 +1,11 @@ +Participant ID: 3 +Diagonal pattern: Interval +Intensity for top and bottom: 89 +Intensity for right and left: 91 +Average intensity: 90 +Training task: 1 set/sets + +Set 1 block accuracies: [100.0, 100.0, 100.0] +Set 1 average accuracy: 100.0% + +Overall training completed with an average accuracy of 100.0% diff --git a/Shape_detection/Participants/3/beta training_3.xlsx b/Shape_detection/Participants/3/beta training_3.xlsx new file mode 100644 index 00000000..8d44d41a Binary files /dev/null and b/Shape_detection/Participants/3/beta training_3.xlsx differ diff --git a/Shape_detection/Participants/3/beta_3_120.png b/Shape_detection/Participants/3/beta_3_120.png new file mode 100644 index 00000000..59841670 Binary files /dev/null and b/Shape_detection/Participants/3/beta_3_120.png differ diff --git a/Shape_detection/Participants/3/beta_3_60.png b/Shape_detection/Participants/3/beta_3_60.png new file mode 100644 index 00000000..17c51c8e Binary files /dev/null and b/Shape_detection/Participants/3/beta_3_60.png differ diff --git a/Shape_detection/Participants/3/beta_cm_3_Set 1.png b/Shape_detection/Participants/3/beta_cm_3_Set 1.png new file mode 100644 index 00000000..2fe54115 Binary files /dev/null and b/Shape_detection/Participants/3/beta_cm_3_Set 1.png differ diff --git a/Shape_detection/Participants/4/alpha intensity_4.txt b/Shape_detection/Participants/4/alpha intensity_4.txt new file mode 100644 index 00000000..4b3e6dfa --- /dev/null +++ b/Shape_detection/Participants/4/alpha intensity_4.txt @@ -0,0 +1,5 @@ +int_top: 90 +int_bottom: 90 +int_left: 90 +int_right: 90 +avg_int: 90 diff --git a/Shape_detection/Participants/4/alpha order_4.txt b/Shape_detection/Participants/4/alpha order_4.txt new file mode 100644 index 00000000..a99b880e --- /dev/null +++ b/Shape_detection/Participants/4/alpha order_4.txt @@ -0,0 +1,30 @@ + +Starting category: numbers +2 +1 +0 +5 +7 +3 +8 +6 +9 +4 + +Starting category: letters +q +g +a +t +u +e +d +s +i +b +j +h +c +l +p +f diff --git a/Shape_detection/Participants/4/alpha training_4.txt b/Shape_detection/Participants/4/alpha training_4.txt new file mode 100644 index 00000000..225683e0 --- /dev/null +++ b/Shape_detection/Participants/4/alpha training_4.txt @@ -0,0 +1,10 @@ +Participant ID: 4 +Intensity for top and bottom: 90 +Intensity for right and left: 90 +Average intensity: 90 +Training task: 1 set/sets + +Set 1 block accuracies: [81.25, 100.0, 100.0] +Set 1 average accuracy: 93.75% + +Overall training completed with an average accuracy of 93.75% diff --git a/Shape_detection/Participants/4/alpha training_4.xlsx b/Shape_detection/Participants/4/alpha training_4.xlsx new file mode 100644 index 00000000..4f5621ef Binary files /dev/null and b/Shape_detection/Participants/4/alpha training_4.xlsx differ diff --git a/Shape_detection/Participants/4/alpha_4_60.png b/Shape_detection/Participants/4/alpha_4_60.png new file mode 100644 index 00000000..6b9616f9 Binary files /dev/null and b/Shape_detection/Participants/4/alpha_4_60.png differ diff --git a/Shape_detection/Participants/4/alpha_cm_4_Set 1.png b/Shape_detection/Participants/4/alpha_cm_4_Set 1.png new file mode 100644 index 00000000..74149c3b Binary files /dev/null and b/Shape_detection/Participants/4/alpha_cm_4_Set 1.png differ diff --git a/Shape_detection/Participants/4/beta intensity_4.txt b/Shape_detection/Participants/4/beta intensity_4.txt new file mode 100644 index 00000000..d8dffab9 --- /dev/null +++ b/Shape_detection/Participants/4/beta intensity_4.txt @@ -0,0 +1,6 @@ +preference: Interval +int_top: 97 +int_bottom: 97 +int_left: 97 +int_right: 97 +avg_int: 97 diff --git a/Shape_detection/Participants/4/beta order_4.txt b/Shape_detection/Participants/4/beta order_4.txt new file mode 100644 index 00000000..29c7b6a6 --- /dev/null +++ b/Shape_detection/Participants/4/beta order_4.txt @@ -0,0 +1,41 @@ + +Starting category: numbers +0 +8 +9 +6 +1 +2 +5 +4 +7 +3 + +Starting category: letters +s +i +p +f +j +a +h +b +t +l +g +u +e +d +q +c + +Starting category: beta +n +z +x +k +y +w +r +v +m diff --git a/Shape_detection/Participants/4/beta training_4.txt b/Shape_detection/Participants/4/beta training_4.txt new file mode 100644 index 00000000..3ef34cf5 --- /dev/null +++ b/Shape_detection/Participants/4/beta training_4.txt @@ -0,0 +1,11 @@ +Participant ID: 4 +Diagonal pattern: Interval +Intensity for top and bottom: 97 +Intensity for right and left: 97 +Average intensity: 97 +Training task: 1 set/sets + +Set 1 block accuracies: [100.0, 93.75, 87.5] +Set 1 average accuracy: 93.75% + +Overall training completed with an average accuracy of 93.75% diff --git a/Shape_detection/Participants/4/beta training_4.xlsx b/Shape_detection/Participants/4/beta training_4.xlsx new file mode 100644 index 00000000..e5ef0f7b Binary files /dev/null and b/Shape_detection/Participants/4/beta training_4.xlsx differ diff --git a/Shape_detection/Participants/4/beta_4_60.png b/Shape_detection/Participants/4/beta_4_60.png new file mode 100644 index 00000000..ffb3ebdf Binary files /dev/null and b/Shape_detection/Participants/4/beta_4_60.png differ diff --git a/Shape_detection/Participants/4/beta_cm_4_Set 1.png b/Shape_detection/Participants/4/beta_cm_4_Set 1.png new file mode 100644 index 00000000..c9f9438e Binary files /dev/null and b/Shape_detection/Participants/4/beta_cm_4_Set 1.png differ diff --git a/Shape_detection/Participants/5/alpha intensity_5.txt b/Shape_detection/Participants/5/alpha intensity_5.txt new file mode 100644 index 00000000..ac248d40 --- /dev/null +++ b/Shape_detection/Participants/5/alpha intensity_5.txt @@ -0,0 +1,5 @@ +int_top: 45 +int_bottom: 45 +int_left: 45 +int_right: 45 +avg_int: 45 diff --git a/Shape_detection/Participants/5/alpha order_5.txt b/Shape_detection/Participants/5/alpha order_5.txt new file mode 100644 index 00000000..ea5729f7 --- /dev/null +++ b/Shape_detection/Participants/5/alpha order_5.txt @@ -0,0 +1,30 @@ + +Starting category: numbers +2 +5 +1 +0 +7 +4 +3 +6 +8 +9 + +Starting category: letters +j +u +c +f +a +e +s +t +l +p +g +h +i +q +b +d diff --git a/Shape_detection/Participants/5/alpha training_5.txt b/Shape_detection/Participants/5/alpha training_5.txt new file mode 100644 index 00000000..15ddb200 --- /dev/null +++ b/Shape_detection/Participants/5/alpha training_5.txt @@ -0,0 +1,10 @@ +Participant ID: 5 +Intensity for top and bottom: 45 +Intensity for right and left: 45 +Average intensity: 45 +Training task: 1 set/sets + +Set 1 block accuracies: [81.25, 100.0, 100.0] +Set 1 average accuracy: 93.75% + +Overall training completed with an average accuracy of 91.67% diff --git a/Shape_detection/Participants/5/alpha training_5.xlsx b/Shape_detection/Participants/5/alpha training_5.xlsx new file mode 100644 index 00000000..8fa28082 Binary files /dev/null and b/Shape_detection/Participants/5/alpha training_5.xlsx differ diff --git a/Shape_detection/Participants/5/alpha_5_60.png b/Shape_detection/Participants/5/alpha_5_60.png new file mode 100644 index 00000000..4a899d2a Binary files /dev/null and b/Shape_detection/Participants/5/alpha_5_60.png differ diff --git a/Shape_detection/Participants/5/alpha_cm_5_Set 1.png b/Shape_detection/Participants/5/alpha_cm_5_Set 1.png new file mode 100644 index 00000000..4f315002 Binary files /dev/null and b/Shape_detection/Participants/5/alpha_cm_5_Set 1.png differ diff --git a/Shape_detection/Participants/5/beta intensity_5.txt b/Shape_detection/Participants/5/beta intensity_5.txt new file mode 100644 index 00000000..22434a5d --- /dev/null +++ b/Shape_detection/Participants/5/beta intensity_5.txt @@ -0,0 +1,6 @@ +preference: Interval +int_top: 53 +int_bottom: 53 +int_left: 53 +int_right: 53 +avg_int: 53 diff --git a/Shape_detection/Participants/5/beta order_5.txt b/Shape_detection/Participants/5/beta order_5.txt new file mode 100644 index 00000000..9f9f2e7d --- /dev/null +++ b/Shape_detection/Participants/5/beta order_5.txt @@ -0,0 +1,41 @@ + +Starting category: numbers +3 +5 +8 +4 +0 +1 +7 +9 +6 +2 + +Starting category: letters +s +p +f +b +u +i +a +c +l +e +j +h +g +t +d +q + +Starting category: beta +m +x +v +n +z +k +w +r +y diff --git a/Shape_detection/Participants/5/beta training_5.txt b/Shape_detection/Participants/5/beta training_5.txt new file mode 100644 index 00000000..8e3c876d --- /dev/null +++ b/Shape_detection/Participants/5/beta training_5.txt @@ -0,0 +1,11 @@ +Participant ID: 5 +Diagonal pattern: Interval +Intensity for top and bottom: 53 +Intensity for right and left: 53 +Average intensity: 53 +Training task: 1 set/sets + +Set 1 block accuracies: [93.75, 93.75, 100.0] +Set 1 average accuracy: 95.83% + +Overall training completed with an average accuracy of 95.83% diff --git a/Shape_detection/Participants/5/beta training_5.xlsx b/Shape_detection/Participants/5/beta training_5.xlsx new file mode 100644 index 00000000..4d6779cb Binary files /dev/null and b/Shape_detection/Participants/5/beta training_5.xlsx differ diff --git a/Shape_detection/Participants/5/beta_5_60.png b/Shape_detection/Participants/5/beta_5_60.png new file mode 100644 index 00000000..b73d27fc Binary files /dev/null and b/Shape_detection/Participants/5/beta_5_60.png differ diff --git a/Shape_detection/Participants/5/beta_cm_5_Set 1.png b/Shape_detection/Participants/5/beta_cm_5_Set 1.png new file mode 100644 index 00000000..925f3515 Binary files /dev/null and b/Shape_detection/Participants/5/beta_cm_5_Set 1.png differ diff --git a/Shape_detection/Participants/6/alpha intensity_6.txt b/Shape_detection/Participants/6/alpha intensity_6.txt new file mode 100644 index 00000000..8d183904 --- /dev/null +++ b/Shape_detection/Participants/6/alpha intensity_6.txt @@ -0,0 +1,5 @@ +int_top: 53 +int_bottom: 53 +int_left: 53 +int_right: 53 +avg_int: 53 diff --git a/Shape_detection/Participants/6/alpha training_6.txt b/Shape_detection/Participants/6/alpha training_6.txt new file mode 100644 index 00000000..05316537 --- /dev/null +++ b/Shape_detection/Participants/6/alpha training_6.txt @@ -0,0 +1,10 @@ +Participant ID: 6 +Intensity for top and bottom: 53 +Intensity for right and left: 53 +Average intensity: 53 +Training task: 1 set/sets + +Set 1 block accuracies: [100.0, 100.0, 100.0] +Set 1 average accuracy: 100.00% + +Overall training completed with an average accuracy of 100.00% diff --git a/Shape_detection/Participants/6/alpha training_6.xlsx b/Shape_detection/Participants/6/alpha training_6.xlsx new file mode 100644 index 00000000..35f88de6 Binary files /dev/null and b/Shape_detection/Participants/6/alpha training_6.xlsx differ diff --git a/Shape_detection/Participants/6/alpha_6_60.png b/Shape_detection/Participants/6/alpha_6_60.png new file mode 100644 index 00000000..892ca005 Binary files /dev/null and b/Shape_detection/Participants/6/alpha_6_60.png differ diff --git a/Shape_detection/Participants/6/alpha_cm_6_Set 1.png b/Shape_detection/Participants/6/alpha_cm_6_Set 1.png new file mode 100644 index 00000000..ac6c99bd Binary files /dev/null and b/Shape_detection/Participants/6/alpha_cm_6_Set 1.png differ diff --git a/Shape_detection/Participants/6/beta intensity_6.txt b/Shape_detection/Participants/6/beta intensity_6.txt new file mode 100644 index 00000000..2aafadf7 --- /dev/null +++ b/Shape_detection/Participants/6/beta intensity_6.txt @@ -0,0 +1,6 @@ +preference: Simultaneous +int_top: 83 +int_bottom: 83 +int_left: 83 +int_right: 83 +avg_int: 83 diff --git a/Shape_detection/Participants/6/beta training_6.txt b/Shape_detection/Participants/6/beta training_6.txt new file mode 100644 index 00000000..4e3d6fbc --- /dev/null +++ b/Shape_detection/Participants/6/beta training_6.txt @@ -0,0 +1,11 @@ +Participant ID: 6 +Diagonal pattern: Simultaneous +Intensity for top and bottom: 83 +Intensity for right and left: 83 +Average intensity: 83 +Training task: 1 set/sets + +Set 1 block accuracies: [100.0, 100.0, 100.0] +Set 1 average accuracy: 100.00% + +Overall training completed with an average accuracy of 100.00% diff --git a/Shape_detection/Participants/6/beta training_6.xlsx b/Shape_detection/Participants/6/beta training_6.xlsx new file mode 100644 index 00000000..c22a51be Binary files /dev/null and b/Shape_detection/Participants/6/beta training_6.xlsx differ diff --git a/Shape_detection/Participants/6/beta_6_60.png b/Shape_detection/Participants/6/beta_6_60.png new file mode 100644 index 00000000..a8cd4320 Binary files /dev/null and b/Shape_detection/Participants/6/beta_6_60.png differ diff --git a/Shape_detection/Participants/6/beta_cm_6_Set 1.png b/Shape_detection/Participants/6/beta_cm_6_Set 1.png new file mode 100644 index 00000000..36f46871 Binary files /dev/null and b/Shape_detection/Participants/6/beta_cm_6_Set 1.png differ diff --git a/Shape_detection/Participants/Pilot/drawing order alpha_1.txt b/Shape_detection/Participants/Pilot/drawing order alpha_1.txt new file mode 100644 index 00000000..be1ae229 --- /dev/null +++ b/Shape_detection/Participants/Pilot/drawing order alpha_1.txt @@ -0,0 +1,30 @@ + +Starting category: numbers +3 +2 +6 +8 +4 +5 +9 +0 +7 +1 + +Starting category: letters +h +i +e +l +s +j +u +b +d +p +q +a +c +f +g +t diff --git a/Shape_detection/Participants/Pilot/drawing order beta_1.txt b/Shape_detection/Participants/Pilot/drawing order beta_1.txt new file mode 100644 index 00000000..1e1a96f7 --- /dev/null +++ b/Shape_detection/Participants/Pilot/drawing order beta_1.txt @@ -0,0 +1,41 @@ + +Starting category: numbers +3 +9 +1 +4 +7 +8 +6 +0 +2 +5 + +Starting category: letters +p +b +c +q +e +t +f +l +g +s +h +j +d +u +i +a + +Starting category: beta +x +n +w +m +k +r +z +v +y diff --git a/Shape_detection/Participants/Pilot/intensity alpha_1.txt b/Shape_detection/Participants/Pilot/intensity alpha_1.txt new file mode 100644 index 00000000..bbac3601 --- /dev/null +++ b/Shape_detection/Participants/Pilot/intensity alpha_1.txt @@ -0,0 +1,5 @@ +int_top: 47 +int_bottom: 47 +int_left: 47 +int_right: 47 +avg_int: 47 \ No newline at end of file diff --git a/Shape_detection/Participants/Pilot/intensity beta_1.txt b/Shape_detection/Participants/Pilot/intensity beta_1.txt new file mode 100644 index 00000000..b23a433e --- /dev/null +++ b/Shape_detection/Participants/Pilot/intensity beta_1.txt @@ -0,0 +1,6 @@ +preference: Interval +int_top: 60 +int_bottom: 60 +int_left: 60 +int_right: 60 +avg_int: 60 \ No newline at end of file diff --git a/Shape_detection/analyst.py b/Shape_detection/analyst.py new file mode 100644 index 00000000..46587ac7 --- /dev/null +++ b/Shape_detection/analyst.py @@ -0,0 +1,118 @@ +import cv2 +import numpy as np +from scipy.interpolate import Rbf +import matplotlib.pyplot as plt + +def get_edge_points(image_path): + # Load the image + image = cv2.imread(image_path) + if image is None: + print(f"Error: No image found at {image_path}.") + return [] + + # Convert to grayscale + gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY) + + # Apply Canny edge detector + edge_image = cv2.Canny(gray_image, 100, 200) + + # Extract coordinates of non-zero points + coordinates = [(x, y) for y in range(edge_image.shape[0]) for x in range(edge_image.shape[1]) if edge_image[y, x] > 0] + + return coordinates + +def apply_tps_transformation(source_coords, target_coords, source_image_path): + # Load the source image + source_image = cv2.imread(source_image_path) + if source_image is None: + print(f"Error: Source image not found at {source_image_path}.") + return None, None + + # Ensure the coordinates have the same length + if len(source_coords) != len(target_coords): + print(f"Error: Number of source coordinates ({len(source_coords)}) does not match number of target coordinates ({len(target_coords)}).") + return None, None + + # Convert coordinates to numpy arrays + source_points = np.array(source_coords) + target_points = np.array(target_coords) + + # Create RBF interpolation functions + try: + rbf_x = Rbf(source_points[:, 0], source_points[:, 1], target_points[:, 0], function='thin_plate') + rbf_y = Rbf(source_points[:, 0], source_points[:, 1], target_points[:, 1], function='thin_plate') + except Exception as e: + print(f"Error creating RBF functions: {e}") + return None, None + + # Create a mesh grid of the image + rows, cols, _ = source_image.shape + x, y = np.meshgrid(np.arange(cols), np.arange(rows)) + x_flat = x.flatten() + y_flat = y.flatten() + + # Apply the TPS transformation + try: + x_new = rbf_x(x_flat, y_flat).reshape(rows, cols) + y_new = rbf_y(x_flat, y_flat).reshape(rows, cols) + except Exception as e: + print(f"Error applying TPS transformation: {e}") + return None, None + + # Remap source image to target using the new coordinates + try: + remapped_image = cv2.remap(source_image, x_new.astype(np.float32), y_new.astype(np.float32), interpolation=cv2.INTER_LINEAR) + except Exception as e: + print(f"Error remapping image: {e}") + return None, None + + return source_image, remapped_image + +def plot_images_with_coordinates(source_image, target_image, transformed_image, source_coords, target_coords): + plt.figure(figsize=(15, 5)) + + # Plot source image with coordinates + plt.subplot(1, 3, 1) + plt.title('Source Image with Coordinates') + plt.imshow(cv2.cvtColor(source_image, cv2.COLOR_BGR2RGB)) + plt.scatter(*zip(*source_coords), color='red', s=1) # Plot source coordinates + plt.axis('off') + + # Plot target image with coordinates + plt.subplot(1, 3, 2) + plt.title('Target Image with Coordinates') + plt.imshow(cv2.cvtColor(target_image, cv2.COLOR_BGR2RGB)) + plt.scatter(*zip(*target_coords), color='red', s=1) # Plot target coordinates + plt.axis('off') + + # Plot transformed image + plt.subplot(1, 3, 3) + plt.title('Transformed Image') + plt.imshow(cv2.cvtColor(transformed_image, cv2.COLOR_BGR2RGB)) + plt.axis('off') + + plt.show() + +# Example usage +source_image_path = 'D:/WWU/M8 - Master Thesis/Project/Code/Images/source.jpg' +target_image_path = 'D:/WWU/M8 - Master Thesis/Project/Code/Images/target.jpg' + +# Extract edge points +source_edge_coords = get_edge_points(source_image_path) +target_edge_coords = get_edge_points(target_image_path) + +# Ensure we have corresponding points +if len(source_edge_coords) == 0 or len(target_edge_coords) == 0: + print("Error: Edge points could not be extracted from one or both images.") +else: + # Apply TPS transformation + source_img, transformed_img = apply_tps_transformation(source_edge_coords, target_edge_coords, source_image_path) + + if source_img is not None and transformed_img is not None: + # Load target image for plotting + target_img = cv2.imread(target_image_path) + + # Plot the results with coordinates + plot_images_with_coordinates(source_img, target_img, transformed_img, source_edge_coords, target_edge_coords) + else: + print("Error: TPS transformation failed.") diff --git a/Shape_detection/auto_connect.py b/Shape_detection/auto_connect.py new file mode 100644 index 00000000..bce31216 --- /dev/null +++ b/Shape_detection/auto_connect.py @@ -0,0 +1,119 @@ +#! /usr/bin/env python +# encoding: utf-8 +import logging +import sys + +import serial +import pybelt +from serial.tools import list_ports + +from pybelt.belt_controller import BeltController, BeltConnectionState +from pybelt.belt_scanner import BeltScanner + + +def setup_logger(): + """Setups the logger to output debug of pyBelt on console. + """ + logger = pybelt.logger + + logger.setLevel(logging.DEBUG) + sh = logging.StreamHandler(sys.stdout) + sh_format = logging.Formatter('\033[92m %(levelname)s: %(message)s \033[0m') + sh.setFormatter(sh_format) + sh.setLevel(logging.DEBUG) + logger.addHandler(sh) + + +def interactive_belt_connect(belt_controller): + """Interactive procedure to connect a belt. The interface to use is asked via the console. + + :param BeltController belt_controller: The belt controller to connect. + """ + + # Ask for the interface + #interface = input("Connect via Bluetooth or USB? [b,u]") + interface = "" + #print("Connect via Bluetooth or USB? [b,u]", end="") + while interface == "": + interface = input("Connect via Bluetooth or USB? [b,u]") + if interface.lower() == "b": + # Scan for advertising belt + with pybelt.belt_scanner.create() as scanner: + print("Start BLE scan.") + belts = scanner.scan() + print("BLE scan completed.") + if len(belts) == 0: + print("No belt found.") + return belt_controller + if len(belts) > 1: + print("Select the belt to connect.") + for i, belt in enumerate(belts): + print("{}. {} - {}".format((i + 1), belt.name, belt.address)) + belt_selection = input("[1-{}]".format(len(belts))) + try: + belt_selection_int = int(belt_selection) + except ValueError: + print("Unrecognized input.") + return belt_controller + print("Connect the belt.") + belt_controller.connect(belts[belt_selection_int - 1]) + else: + print("Connect the belt.") + belt_controller.connect(belts[0]) + + elif interface.lower() == "u": + # List serial COM ports + ports = serial.tools.list_ports.comports() + if ports is None or len(ports) == 0: + print("No serial port found.") + return belt_controller + if len(ports) == 1: + connect_ack = 'y' + if connect_ack.lower() == "y" or connect_ack.lower() == "yes": + print("Connect the belt.") + belt_controller.connect(ports[0][0]) + else: + print("Unrecognized input.") + return belt_controller + else: + print("Select the serial COM port to use.") + for i, port in enumerate(ports): + print("{}. {}".format((i + 1), port[0])) + belt_selection = input("[1-{}]".format(len(ports))) + try: + belt_selection_int = int(belt_selection) + except ValueError: + print("Unrecognized input.") + return belt_controller + print("Connect the belt.") + belt_controller.connect(ports[belt_selection_int - 1][0]) + + else: + print("Unrecognized input.") + return belt_controller + + return belt_controller + + +def main(): + + setup_logger() + + # Interactive script to connect the belt + belt_controller = BeltController() + interactive_belt_connect(belt_controller) + if belt_controller.get_connection_state() == BeltConnectionState.CONNECTED: + print("Connection successful.") + print("Belt firmware version: {}".format(belt_controller.get_firmware_version())) + print("Belt mode: {}".format(belt_controller.get_belt_mode())) + print("Belt default vibration intensity: {}".format(belt_controller.get_default_intensity())) + print("Disconnect belt.") + else: + print("Connection failed.") + belt_controller.disconnect_belt() + + return 0 + + +if __name__ == "__main__": + main() diff --git a/Shape_detection/bracelet.py b/Shape_detection/bracelet.py new file mode 100644 index 00000000..13ee496c --- /dev/null +++ b/Shape_detection/bracelet.py @@ -0,0 +1,392 @@ +# region Setup + +import time +from pybelt.belt_controller import (BeltConnectionState, BeltController, + BeltControllerDelegate, BeltMode, + BeltOrientationType, + BeltVibrationTimerOption) +from auto_connect import interactive_belt_connect, setup_logger +import threading +import sys +from pynput.keyboard import Key, Listener +import numpy as np + +# endregion + +class Delegate(BeltControllerDelegate): + # Belt controller delegate + pass + + +def connect_belt(): + setup_logger() + + belt_controller_delegate = Delegate() + belt_controller = BeltController(belt_controller_delegate) + + # Interactive script to connect the belt + interactive_belt_connect(belt_controller) + if belt_controller.get_connection_state() != BeltConnectionState.CONNECTED: + print("Connection failed.") + global mock_belt + #mock_belt = 1 + return False, belt_controller + else: + # Change belt mode to APP mode + belt_controller.set_belt_mode(BeltMode.APP_MODE) + return True, belt_controller + + +def abort(key): + # Check if the pressed key is the left clicker key + if key == Key.esc: + sys.exit() + + +def on_click(key): + # Check if the pressed key is the right clicker key + if key == Key.enter: + return False + + +def listener(): + # listen for clicker + with Listener(on_press=abort) as listener: + listener.join() + + +def start_listener(): + global termination_signal, one_round + existing_thread = threading.enumerate() + listener_thread = None + + for thread in existing_thread: + if thread.name == 'clicker': + listener_thread = thread + termination_signal = False + break + + if listener_thread is None: + if one_round == 0: + listener_thread = threading.Thread(target=listener, name='clicker') + listener_thread.start() + one_round += 1 + else: + termination_signal = True + + return termination_signal + + +def choose_detection(bboxes, previous_bbox=None): + # Hyperparameters + track_id_weight = np.inf + exponential_weight = 2 + distance_weight = 100 + + #print(f'\nPrevious BB: {previous_bbox}') + + candidates = [] + for bbox in bboxes: # x, y, w, h, id, cls, conf + # bbox has to be within image dimensions + if bbox[0] <= w and bbox[1] <= h: + # confidence score + confidence = bbox[6] # in [0,1] + confidence_score = exponential_weight**confidence - 1 # exponential growth in [0,1], could also use np.exp() and normalize + # tracking score + current_track_id = bbox[4] + previous_track_id = previous_bbox[4] if previous_bbox is not None else -1 + track_id_score = track_id_weight if current_track_id == previous_track_id else 1 # 1|ꝏ + # distance score + if previous_bbox is None: + distance = None + distance_inverted = 1 + else: + current_location = bbox[:2] + previous_location = previous_bbox[:2] + distance = np.linalg.norm(current_location - previous_location) + distance_inverted = 1 / distance if distance >= 1 else distance_weight + + # total score + score = track_id_score * confidence_score * distance_inverted + #print(f'Current BB: {bbox}') + #print(f'TrackID = {current_track_id}, confidence = {confidence}, distance = {distance}') + #print(f'Score {score} = {track_id_score} * {confidence_score} * {distance_inverted}\n') + + # Possible scores: + # ꝏ -- same trackingID + # 100 -- different trackingID, matching BBs (max. 1px deviation), conf=1 + # [0,1] -- different trackingID, BBs distance in [1., sqrt(w^2*h^2)], conf=1 + candidates.append(score) + else: + candidates.append(0) + + true_detection = bboxes[np.argmax(candidates)] if len(candidates) else None + + return true_detection + + +# Threading vars +termination_signal = False +one_round = 0 + +# Navigation vars +prev_hand = None +prev_target = None +w,h = 1920, 1080 + +def navigate_hand( + belt_controller, + bboxes, + search_key_obj: str, + search_key_hand: list, + hor_correct: bool = False, + ver_correct: bool = False, + grasp: bool = False, + obj_seen_prev: bool = False, + search: bool = False, + count_searching: int = 0, + count_see_object: int = 0, + jitter_guard: int = 0, + navigating: bool = False + ): + + ''' + Function that navigates the hand to the target object. Handles cases when either hand or target is not detected + Input: + • bboxes - list containing following information about each prediction: 0-3: bbox xywh, 4: trackID, 5: class, 6: confidence + • search_key_obj - integer representing target object class + • search_key_hand - list of integers containing hand detection classes used for navigation + • hor_correct - boolean representing whether hand and object are assumed to be aligned horizontally; by default False + • ver_correct - boolean representing whether hand and object are assumed to be aligned vertically; by default False + • grasp - boolean representing whether grasp command has been sent; by default False + • x_threshold - + • y_threshold - + + Output: + • horizontal - boolean representing whether hand and object are aligned horizontally after execution of the function; by default False + • vertical - boolean representing whether hand and object are aligned vertically after execution of the function; by default False + • grasp - boolean representing whether grasp command has been sent; by default False + • check + • check_dur + ''' + + global termination_signal + global prev_hand, prev_target + + # Navigation vars + vibration_intensity = 100 + min_hand_confidence = 0.5 + min_obj_confidence = 0.5 + hand, target = None, None + horizontal, vertical = False, False + w,h = 1920, 1080 + + if belt_controller: + termination_signal = start_listener() + + if termination_signal: + print('Manual Abort') + belt_controller.stop_vibration() + sys.exit() + + # Search for object and hand with the highest prediction confidence + # Filter for hand detections + bboxes_hands = [detection for detection in bboxes if detection[5] in search_key_hand] + hand = choose_detection(bboxes_hands, prev_hand) + prev_hand = hand + + # Filter for target detections + bboxes_objects = [detection for detection in bboxes if detection[5] == search_key_obj] + target = choose_detection(bboxes_objects, prev_target) + prev_target = target + + # Getting horizontal and vertical position of the bounding box around target object and hand + if hand is not None: + x_center_hand, y_center_hand = hand[0], hand[1] + # move the y_center of the hand in the direction of the fingertips to help avoid occlusions (testing) + hand_upper_bound = y_center_hand - hand[3]//2 + hand_lower_bound = y_center_hand + hand[3]//2 + + if target is not None: + target_width = target[2] + target_height = target[3] + target_left_bound = target[0] - target_width//2 + target_right_bound = target[0] + target_width//2 + target_lower_bound = target[1] + target_height//2 + target_upper_bound = target[1] - target_height//2 + + + # 1. Grasping: Hand is detected and horizontally and vertically aligned with target --> send grasp (target might be occluded in frame) + if hand is not None and hor_correct and ver_correct: + obj_seen_prev = False + search = False + count_searching = 0 + count_see_object = 0 + jitter_guard = 0 + navigating = 0 + + if belt_controller: + belt_controller.stop_vibration() + belt_controller.send_pulse_command( + channel_index=0, + orientation_type=BeltOrientationType.ANGLE, + orientation=90, + intensity=vibration_intensity, + on_duration_ms=150, + pulse_period=500, + pulse_iterations=5, + series_period=5000, + series_iterations=1, + timer_option=BeltVibrationTimerOption.RESET_TIMER, + exclusive_channel=False, + clear_other_channels=False + ) + + print("G R A S P !") + + # End guidance RT measure + print('Please use the clicker to indicate you have grasped the object.') + + # listen for clicker + with Listener(on_press=on_click) as listener: + # End trial time measure + listener.join() + + grasp = True + + return horizontal, vertical, grasp, obj_seen_prev, search, count_searching, count_see_object, jitter_guard, navigating + + + # 2. Guidance: If the camera can see both hand and object but not yet aligned, navigate the hand to the object, horizontal first + if hand is not None and target is not None: + obj_seen_prev = False + search = False + count_searching = 0 + count_see_object = 0 + jitter_guard = 0 + threshold = 20 * target[2] / hand[2] + + # Start guidance RT measure + + # Horizontal movement logic + # Centers of the hand and object bounding boxes further away than x_threshold - move hand horizontally + horizontal = False + if x_center_hand < target_left_bound: + print('right') + if belt_controller: + belt_controller.vibrate_at_angle(120, channel_index=0, intensity=vibration_intensity) + navigating = True + elif x_center_hand > target_right_bound: + print('left') + if belt_controller: + belt_controller.vibrate_at_angle(45, channel_index=0, intensity=vibration_intensity) + navigating = True + else: + horizontal = True + + # Vertical movement logic + # Centers of the hand and object bounding boxes further away than y_threshold - move hand vertically + if horizontal == True: + vertical = False + if hand_lower_bound < target_upper_bound: # - threshold: # dynamic grasp triggering + print('down') + if belt_controller: + belt_controller.vibrate_at_angle(60, channel_index=0, intensity=vibration_intensity) + navigating = True + elif hand_upper_bound > target_lower_bound: # + threshold: + print('up') + if belt_controller: + belt_controller.vibrate_at_angle(90, channel_index=0, intensity=vibration_intensity) + navigating = True + else: + vertical = True + + return horizontal, vertical, grasp, obj_seen_prev, search, count_searching, count_see_object, jitter_guard, navigating + + + # 3. Lost target: If the camera cannot see the hand or the object, tell them they need to move around + if target is None and grasp == False: + if obj_seen_prev == True: + jitter_guard = 0 + obj_seen_prev = False + + #print("Lost target from the field of view.") + + jitter_guard += 1 + if jitter_guard >= 40: + count_see_object = 0 + navigating = False + + if belt_controller: + if search == False: + belt_controller.stop_vibration() + # left + belt_controller.send_pulse_command( + channel_index=0, + orientation_type=BeltOrientationType.ANGLE, + orientation=45, + intensity=vibration_intensity, + on_duration_ms=100, + pulse_period=500, + pulse_iterations=3, + series_period=5000, + series_iterations=1, + timer_option=BeltVibrationTimerOption.RESET_TIMER, + exclusive_channel=False, + clear_other_channels=False + ) + search = True + + count_searching += 1 + if count_searching >= 150: + search = False + count_searching = 0 + + return horizontal, vertical, grasp, obj_seen_prev, search, count_searching, count_see_object, jitter_guard, navigating + + + # 4. Lost hand: If the camera cannot see the hand but the object is visible, tell them to move the hand around + if target is not None: + + if search == True: + jitter_guard = 0 + search = False + + jitter_guard += 1 + if jitter_guard >= 40: + navigating = False + count_searching = 0 + + #print("Lost hand from the field of view.") + + if obj_seen_prev == False: + if belt_controller: + belt_controller.stop_vibration() + #down + belt_controller.send_pulse_command( + channel_index=0, + orientation_type=BeltOrientationType.ANGLE, + orientation=120, + intensity=vibration_intensity, + on_duration_ms=100, + pulse_period=500, + pulse_iterations=3, + series_period=5000, + series_iterations=1, + timer_option=BeltVibrationTimerOption.RESET_TIMER, + exclusive_channel=False, + clear_other_channels=False + ) + obj_seen_prev = True + + count_see_object += 1 + if count_see_object >= 150: + obj_seen_prev = False + count_see_object = 0 + + return horizontal, vertical, grasp, obj_seen_prev, search, count_searching, count_see_object, jitter_guard, navigating + + else: + print('Condition not covered by logic. Maintaining variables and standing by.') + grasp = False + return horizontal, vertical, grasp, obj_seen_prev, search, count_searching, count_see_object, jitter_guard, navigating \ No newline at end of file diff --git a/Shape_detection/calibration_alpha.py b/Shape_detection/calibration_alpha.py new file mode 100644 index 00000000..a1b7c67f --- /dev/null +++ b/Shape_detection/calibration_alpha.py @@ -0,0 +1,772 @@ +import numpy as np +import os +import random +import time +import sys +import pandas as pd +import keyboard +import threading +from sklearn.metrics import confusion_matrix +import seaborn as sns +import matplotlib.pyplot as plt +from auto_connect import interactive_belt_connect, setup_logger +from pybelt.belt_controller import (BeltConnectionState, BeltController, + BeltControllerDelegate, BeltMode, + BeltOrientationType, + BeltVibrationTimerOption, BeltVibrationPattern) +from pybelt.belt_scanner import BeltScanner +from openpyxl.workbook import Workbook +from bracelet import connect_belt + +# Define the event for stopping vibration +stop_event = threading.Event() + +def esc_key_listener(stop_event): + """ + Function to listen for ESC key press and set the stop event. + """ + while not stop_event.is_set(): + if keyboard.is_pressed('esc'): + stop_event.set() + break + time.sleep(0.1) # Sleep to avoid high CPU usage + +# Function to capture the keyboard input for direction +def capture_direction(): + while True: + if keyboard.is_pressed('up'): + return 'top' + elif keyboard.is_pressed('down'): + return 'down' + elif keyboard.is_pressed('right'): + return 'right' + elif keyboard.is_pressed('left'): + return 'left' + +def start_key_listener(stop_event): + """ + Start the ESC key listener thread. + """ + key_listener_thread = threading.Thread(target=esc_key_listener, args=(stop_event,)) + key_listener_thread.daemon = True # Ensure the thread exits with the main program + key_listener_thread.start() + + +# Calibration function to determine optimal vibration intensity +def display_intensity(intensity): + print(f"\nCurrent intensity: {intensity}") + +def get_step_value(): + while True: + try: + step_value = int(input("Enter the initial increment/decrement step value: ")) + if step_value <= 0: + print("Step value must be a positive integer. Please try again.") + else: + return step_value + except ValueError: + print("Invalid input. Please enter an integer.") + +def get_user_input_for_calibration(): + while True: + try: + inputs = [] + print("Enter four numbers for calibration:") + for i in range(4): + num = int(input(f"Number {i+1}: ")) + inputs.append(num) + return inputs + except ValueError: + print("Invalid input. Please enter numeric values.") + +def select_vibromotor(): + while True: + print("\nSelect the vibromotor to calibrate:") + print("0. Finish calibration") + print("1. Down") + print("2. Right") + choice = input("Enter the number corresponding to your choice: ") + if choice == '1': + return 60 + elif choice == '2': + return 120 + elif choice == '0': + return None # Finish calibration + else: + print("Invalid choice. Please select a valid option.") + +def staircase_method(orientation): + """ + Perform the staircase method to determine the threshold intensity for the given orientation. + """ + initial_value = 100 + step_sizes = [64, 32, 16, 8, 4, 2, 1, 0] + step_size_index = 0 + step_size = step_sizes[step_size_index] + current_value = initial_value + values = [current_value] + reversal_points = [] + reversal_indices = [] + direction = None + direction_changes = 0 + max_reversals = 7 + max_trials = 20 + trial_count = 0 + + print("Press 'up' to increase, 'down' to decrease, 'right' to repeat, and 'esc' to exit.") + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=100, + orientation_type=BeltOrientationType.ANGLE, + orientation=orientation, + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + time.sleep(1) + belt_controller.stop_vibration() + + while direction_changes < max_reversals and trial_count < max_trials: + key = keyboard.read_event() + + # Only handle the event if it's a key press + if key.event_type == keyboard.KEY_DOWN: + if key.name == 'esc': + break + elif key.name == 'up': + if direction == 'down': + # Capture reversal index before appending the new value + reversal_points.append(current_value) + reversal_indices.append(len(values) - 1) + direction_changes += 1 + step_size_index = (step_size_index + 1) % len(step_sizes) + step_size = step_sizes[step_size_index] + print(f"\nDirection changed to 'up'. New step size: {step_size}") + direction = 'up' + current_value += step_size + if current_value > 100: # Ensure it doesn't go above 100 + current_value = 100 + values.append(current_value) + print(f"Increasing by {step_size}. New value: {current_value}") + + elif key.name == 'down': + if direction == 'up': + # Capture reversal index before appending the new value + reversal_points.append(current_value) + reversal_indices.append(len(values) - 1) + direction_changes += 1 + step_size_index = (step_size_index + 1) % len(step_sizes) + step_size = step_sizes[step_size_index] + print(f"\nDirection changed to 'down'. New step size: {step_size}") + direction = 'down' + current_value -= step_size + if current_value < 0: # Ensure it doesn't go below 0 + current_value = 0 + values.append(current_value) + print(f"Decreasing by {step_size}. New value: {current_value}") + + elif key.name == 'right': + values.append(current_value) + print(f"\nRepeating value: {current_value}") + + trial_count += 1 + + # Send vibration command with current value (intensity) + if belt_controller: + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=current_value, + orientation_type=BeltOrientationType.ANGLE, + orientation=orientation, + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + time.sleep(1) + belt_controller.stop_vibration() + + # Calculate the average of the last 4 direction changes + if len(reversal_points) >= 4: + threshold = sum(reversal_points[-4:]) / 4 + # Only plot the last 4 reversal points + plot_reversal_points = reversal_points[-4:] + plot_reversal_indices = reversal_indices[-4:] + else: + threshold = sum(reversal_points) / len(reversal_points) + # Plot all the reversal points if there are less than 4 + plot_reversal_points = reversal_points + plot_reversal_indices = reversal_indices + + print(f"Estimated Threshold: {threshold:.2f}") + + # Plot the entire sequence of values + plt.figure() + plt.plot(values, marker='o', linestyle='-', color='b', label='Values') + + # Plot only the last 4 reversal points with red circles + if len(reversal_points) > 0: + plt.plot(plot_reversal_indices, plot_reversal_points, marker='o', linestyle='None', color='r', label='Last 4 Reversal Points') + + plt.xlabel('Trials') + plt.ylabel('Value') + plt.title(f'Staircase Method_{orientation}_alpha') + plt.legend() + plt.grid(True) + plt.savefig(f'D:/WWU/M8 - Master Thesis/Project/Code/Bracelet/Shape_detection/Participants/{participant_ID}/alpha_{participant_ID}_{orientation}') + + return threshold + +def calibrate_intensity(orientation): + global calibrated_intensity # Declare that we are using the global variable + + print(f"Calibrating intensity for orientation: {orientation}\n") + + # Run staircase method to determine the optimal intensity + calibrated_intensity = staircase_method(orientation) + calibrated_intensity = int(calibrated_intensity) + print(f'User-calibrated intensity: {calibrated_intensity:.2f}') + + if belt_controller: + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=calibrated_intensity, + orientation_type=BeltOrientationType.ANGLE, + orientation=orientation, + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + time.sleep(2) + belt_controller.stop_vibration() + + return calibrated_intensity + +# Function to send vibration for a given direction +def vibrate_direction(direction, stop_event, int_top, int_bottom, int_right, int_left): + # Check if belt_controller is initialized + if not belt_controller: + print("Error: Belt controller not initialized.") + return + + try: + if direction == 'top': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_top, + orientation_type=BeltOrientationType.ANGLE, + orientation=90, # Top + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + elif direction == 'down': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_bottom, + orientation_type=BeltOrientationType.ANGLE, + orientation=60, # Down + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + elif direction == 'right': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_right, + orientation_type=BeltOrientationType.ANGLE, + orientation=120, # Right + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + elif direction == 'left': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_left, + orientation_type=BeltOrientationType.ANGLE, + orientation=45, # Left + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + else: + print(f"Direction '{direction}' not recognized.") + return + + # Keep vibrating until the stop event is set + while not stop_event.is_set(): + time.sleep(0.1) + + except Exception as e: + print(f"Exception occurred: {e}") + finally: + # Ensure vibrations are stopped + belt_controller.stop_vibration() + +# Directions for training +directions = ['top', 'down', 'right', 'left'] + +# Familiarization phase +def familiarization_phase(int_top, int_bottom, int_right, int_left, avg_int): + print("\nFamiliarization Phase") + time.sleep(3) + + for direction in directions: + while True: + stop_event = threading.Event() # Event to stop vibration + + print(f"Vibrating for {direction}.") + # Start the vibration in a separate thread + vibration_thread = threading.Thread( + target=vibrate_direction, + args=(direction, stop_event, int_top, int_bottom, int_right, int_left) + ) + vibration_thread.start() + user_response = capture_direction() + print(f"User response: {user_response}") + stop_event.set() # Signal the vibration thread to stop + vibration_thread.join() # Wait for the vibration thread to stop + belt_controller.stop_vibration() + time.sleep(1) # Short delay between each trial + + if user_response == direction: + break # Exit the loop if the user response is correct + else: + print("Incorrect response. Please try again.") + + if belt_controller: + belt_controller.stop_vibration() + belt_controller.send_pulse_command( + channel_index=0, + orientation_type=BeltOrientationType.ANGLE, + orientation=90, + intensity=int_top, + on_duration_ms=150, + pulse_period=500, + pulse_iterations=5, + series_period=5000, + series_iterations=1, + timer_option=BeltVibrationTimerOption.RESET_TIMER, + exclusive_channel=False, + clear_other_channels=False) + +def comfortness(): + while True: + response = input("\nIs the intensity good for all motors? (yes/no): ").strip().lower() + if response in ['yes', 'no']: + return response == 'yes' + else: + print("Invalid response. Please enter 'yes' or 'no'.") + +def apply_intensity (intensities): + print("Applying intensities to vibromotors:") + for orientation, intensity in intensities.items(): + if intensity is not None: + print(f"Applying intensity {intensity} to orientation {orientation} vibromotor.") + +def main_calibration_process(): + """ + Main control loop to orchestrate the steps. + """ + + intensities = { + 90: None, # Top + 60: None, # Bottom + 120: None, # Right + 45: None # Left + } + # applied_intensities = {} + # Track whether bottom and right calibrations have been performed + calibrated_bottom = False + calibrated_right = False + + while True: + # Calibration and Familiarization with the selected motor + orientation = select_vibromotor() + if orientation is None: + break + + # Calibrate intensity for the selected orientation + calibrated_intensity = calibrate_intensity(orientation) + + if orientation == 60: # Bottom + intensities[60] = calibrated_intensity + intensities[90] = calibrated_intensity # Top has same intensity as Bottom + calibrated_bottom = True + elif orientation == 120: # Right + intensities[120] = calibrated_intensity + intensities[45] = calibrated_intensity # Left has same intensity as Right + calibrated_right = True + + print(f"Calibration for orientation {orientation} is complete with intensity {calibrated_intensity}.") + + # Small delay before proceeding to familiarization + time.sleep(1) + + # Proceed with familiarization only if necessary intensities are calibrated + if calibrated_bottom or calibrated_right: + # Safely convert to integer + int_bottom = int(intensities[60] if intensities[60] is not None else 0) + int_right = int(intensities[120] if intensities[120] is not None else 0) + + # Assign corresponding values based on available calibrations + if calibrated_bottom and calibrated_right: + int_top = int_bottom + int_left = int_right + avg_int = int((int_top + int_right) // 2) + elif calibrated_bottom: + int_top = int_bottom + int_left = int_right = avg_int = int_bottom + elif calibrated_right: + int_left = int_right + int_top = int_bottom = avg_int = int_right + + # Start familiarization phase with the selected intensity + familiarization_phase(int_top, int_bottom, int_right, int_left, avg_int) + + + # Ask if intensity is good + if comfortness(): + if calibrated_bottom or calibrated_right: + # At least one of Bottom or Right has been calibrated + if calibrated_bottom and calibrated_right: + # Both Bottom and Right have been calibrated + print("\nApplying different intensities based on calibrations for Bottom and Right.") + # Apply Bottom intensity to Bottom and Top + if intensities[60] is not None: + intensities[90] = intensities[60] + # Apply Right intensity to Right and Left + if intensities[120] is not None: + intensities[45] = intensities[120] + else: + # Only one of Bottom or Right has been calibrated + print("\nApplying the calibrated intensity to all vibromotors.") + if calibrated_bottom: + all_intensity = intensities[60] + else: + all_intensity = intensities[120] + # Apply the same intensity to all motors + intensities[60] = intensities[90] = intensities[120] = intensities[45] = all_intensity + + int_top = int(intensities[90]) + int_bottom = int(intensities[60]) + int_right = int(intensities[120]) + int_left = int(intensities[45]) + avg_int = int((int_top + int_right) // 2) + + # Apply intensities + apply_intensity(intensities) + break + else: + print("Repeating calibration and familiarization for the selected motor.") + continue + + return int_top, int_bottom, int_right, int_left, avg_int + +def load_calibration_data(participant_ID): + directory = f"D:/WWU/M8 - Master Thesis/Project/Code/Bracelet/Shape_detection/Participants/{participant_ID}/" + #directory = f"C:/Users/feelspace/OptiVisT/tactile-guidance/Shape_detection/Participants/{participant_ID}/" + file_path = os.path.join(directory, f'alpha intensity_{participant_ID}.txt') + + calibration_data = {} + + # Read values from the text file + with open(file_path, 'r') as file: + for line in file: + key, value = line.strip().split(": ") + # Convert value to integer if it's a number + calibration_data[key] = int(value) if value.isdigit() else value + + return calibration_data + +def training_task(int_top, int_bottom, int_right, int_left, avg_int): + #directory = r"C:/Users/feelspace/OptiVisT/tactile-guidance/Shape_detection" + directory = f"D:/WWU/M8 - Master Thesis/Project/Code/Bracelet/Shape_detection/Participants/{participant_ID}" + time.sleep(10) + print("\nPress 'Enter' to proceed the training task") + while True: + if keyboard.is_pressed('enter'): + break + print("Training Task will start") + + all_set_accuracies = [] + all_block_accuracies = [] + max_sets = 3 # Maximum number of sets allowed + set_count = 0 # Counter for the number of sets + all_set_results = {} + + for set_count in range(1, max_sets + 1): + print(f"Starting Training Set {set_count}") + correct_responses_per_block = [] + blocks = 3 + trials_per_block = 16 + block_accuracies = [] + block_results = {} + combined_results = { + 'Trial' : [], + 'Block' : [], + 'Actual Direction' : [], + 'Predicted Direction' : [], + 'Response Time (s)' : [] + } + for block in range(blocks): + correct_responses = 0 + time.sleep(5) + + # Create a list with two of each direction and shuffle it + block_directions = directions * 4 + random.shuffle(block_directions) + + actual_directions =[] + predicted_directions = [] + response_times = [] + trial_numbers = [] + + for trial_num, direction in enumerate(block_directions[:trials_per_block], start = 1): + print(f"Trial {trial_num}: Vibration direction is {direction}.") + + # Setup for vibration + stop_event = threading.Event() # Event to stop vibration + vibration_thread = threading.Thread( + target=vibrate_direction, + args=(direction, stop_event, int_top, int_bottom, int_right, int_left)) + vibration_thread.start() + + start_time = time.time() + user_response = capture_direction() + end_time = time.time() + response_time = end_time - start_time + + print(f"User response: {user_response}") + stop_event.set() # Signal the vibration thread to stop + vibration_thread.join() # Wait for the vibration thread to stop + belt_controller.stop_vibration() + time.sleep(1) + + trial_numbers.append(trial_num) + actual_directions.append(direction) + predicted_directions.append(user_response) + response_times.append(response_time) + + # Add to combined results + combined_results['Trial'].append(trial_num) + combined_results['Block'].append(block + 1) + combined_results['Actual Direction'].append(direction) + combined_results['Predicted Direction'].append(user_response) + combined_results['Response Time (s)'].append(response_time) + + if user_response == direction: + correct_responses += 1 + + # Store the results for the current block + block_results[f'Block {block + 1}'] = { + 'Trial': trial_numbers, + 'Actual Direction': actual_directions, + 'Predicted Direction': predicted_directions, + 'Response Time (s)': response_times + } + + # Stop vibration after completing a block with custom stop signal + if belt_controller: + belt_controller.stop_vibration() + belt_controller.send_pulse_command( + channel_index=0, + orientation_type=BeltOrientationType.ANGLE, + orientation=90, + intensity=int_top, + on_duration_ms=150, + pulse_period=500, + pulse_iterations=5, + series_period=5000, + series_iterations=1, + timer_option=BeltVibrationTimerOption.RESET_TIMER, + exclusive_channel=False, + clear_other_channels=False) + + # Calculate accuracy for the block + block_accuracy = (correct_responses / trials_per_block) * 100 + block_accuracies.append(block_accuracy) + correct_responses_per_block.append(correct_responses) + print(f"Block {block + 1} complete. Accuracy: {block_accuracy:.2f}%\n") + + # Calculate and store the average accuracy for the set + set_average_accuracy = np.mean(block_accuracies) + all_set_accuracies.append(set_average_accuracy) + all_block_accuracies.append(block_accuracies) + print(f"Set {set_count} average accuracy: {set_average_accuracy:.2f}%") + + # Save results for the set + all_set_results[f'Set {set_count}'] = combined_results + + # Determine if the training accuracy is sufficient + if set_average_accuracy >= 90: + print(f"Training completed with an accuracy of {set_average_accuracy:.2f}%") + break + else: + print(f"Training accuracy below 90% with an accuracy of {set_average_accuracy:.2f}%") + set_count +=1 + + print("\nPress 'Enter' to proceed the next training set") + while True: + if keyboard.is_pressed('enter'): + break + + if set_count == max_sets and all(acc < 90 for acc in all_set_accuracies): + print("Maximum sets reached, but training accuracy is still below 90%.") + + # Save result to .txt file + directory = f"D:/WWU/M8 - Master Thesis/Project/Code/Bracelet/Shape_detection/Participants/{participant_ID}" + file_path = os.path.join(directory, f"alpha training_{participant_ID}.txt") + with open(file_path, 'w') as file: + file.write(f"Participant ID: {participant_ID}\n") + file.write(f"Intensity for top and bottom: {int_top}\n") + file.write(f"Intensity for right and left: {int_left}\n") + file.write(f"Average intensity: {avg_int}\n") + file.write(f"Training task: {set_count} set/sets\n") + for i, accuracies in enumerate(all_block_accuracies, start=1): + file.write(f"\nSet {i} block accuracies: {accuracies}\n") + file.write(f"Set {i} average accuracy: {all_set_accuracies[i-1]:.2f}%\n") + file.write(f"\nOverall training completed with an average accuracy of {np.mean(all_set_accuracies):.2f}%\n") + print(f'\nResults saved to {file_path}') + + # Excel output + #with pd.ExcelWriter('C:/Users/feelspace/OptiVisT/tactile-guidance/Shape_detection/alpha training_{participant_ID}.xlsx') as writer: + with pd.ExcelWriter(f'D:/WWU/M8 - Master Thesis/Project/Code/Bracelet/Shape_detection/Participants/{participant_ID}/alpha training_{participant_ID}.xlsx') as writer: + # Write each set's results to its own sheet + for set_name, results in all_set_results.items(): + df = pd.DataFrame(results) + df.to_excel(writer, sheet_name=set_name, index=False) + + return + #return average_accuracy, block_accuracies, actual_directions, predicted_directions + +def visualize_confusion_matrix(excel_file_path): + # Load the Excel file + with pd.ExcelFile(excel_file_path) as xls: + # Iterate over each sheet in the Excel file + for sheet_name in xls.sheet_names: + # Load the data from the current sheet + df = pd.read_excel(xls, sheet_name=sheet_name) + + # Extract the actual and predicted directions + actual_directions = df['Actual Direction'] + predicted_directions = df['Predicted Direction'] + + # Compute the confusion matrix + cm = confusion_matrix(actual_directions, predicted_directions) + + # Plot the confusion matrix using Seaborn + plt.figure(figsize=(8, 6)) + sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', cbar=False, + xticklabels=df['Actual Direction'].unique(), + yticklabels=df['Actual Direction'].unique()) + plt.xlabel('Predicted Direction') + plt.ylabel('Actual Direction') + plt.title(f'Confusion Matrix of Actual vs. Predicted Directions_{participant_ID}_{sheet_name}') + plt.savefig(f'D:/WWU/M8 - Master Thesis/Project/Code/Bracelet/Shape_detection/Participants/{participant_ID}/alpha_cm_{participant_ID}_{sheet_name}') + plt.show() + +def save_calibration_data(participant_ID, int_top, int_bottom, int_left, int_right, avg_int): + #directory = r"C:/Users/feelspace/OptiVisT/tactile-guidance/Shape_detection" + directory = f"D:/WWU/M8 - Master Thesis/Project/Code/Bracelet/Shape_detection/Participants/{participant_ID}" + file_path = os.path.join(directory, f'alpha intensity_{participant_ID}.txt') + calibration_data = ( + f"int_top: {int_top}\n" + f"int_bottom: {int_bottom}\n" + f"int_left: {int_left}\n" + f"int_right: {int_right}\n" + f"avg_int: {avg_int}\n") + + # Save values to the text file + with open(file_path, 'w') as file: + file.write(calibration_data) + print(f"Calibration data saved to {file_path}") + +def end_signal(int_top): + if belt_controller: + belt_controller.stop_vibration() + belt_controller.send_pulse_command( + channel_index=0, + orientation_type=BeltOrientationType.ANGLE, + orientation=90, + intensity=int_top, + on_duration_ms=150, + pulse_period=500, + pulse_iterations=5, + series_period=5000, + series_iterations=1, + timer_option=BeltVibrationTimerOption.RESET_TIMER, + exclusive_channel=False, + clear_other_channels=False) + +if __name__ == "__main__": + connection_check, belt_controller = connect_belt() + if connection_check: + print('Bracelet connection successful.') + else: + print('Error connecting bracelet. Aborting.') + sys.exit() + + participant_ID = input("Enter Participant ID: ") + + while True: + # Display menu options + print("\nChoose an option:") + print("0: Finish") + print("1: Calibration") + print("2: Familiarization phase") + print("3: Training task") + print("4: End Signal") + + choice = input("\nEnter 0, 1, or 2: ") + if choice == '0': + print("Exiting") + break + elif choice == '1': + int_top, int_bottom, int_right, int_left, avg_int = main_calibration_process() + elif choice == '2': + familiarization_phase(int_top, int_bottom, int_right, int_left, avg_int) + elif choice == '3': + training_task(int_top, int_bottom, int_right, int_left, avg_int) + visualize_confusion_matrix(f'D:/WWU/M8 - Master Thesis/Project/Code/Bracelet/Shape_detection/Participants/{participant_ID}/alpha training_{participant_ID}.xlsx') + save_calibration_data(participant_ID, int_top, int_bottom, int_left, int_right, avg_int) + elif choice == '4': + end_signal(int_top) + else: + print("Invalid choice. Please enter 0, 1, or 2.") + + # Calibration + '''int_top, int_bottom, int_right, int_left, avg_int = main_calibration_process() + calibration_data = load_calibration_data(participant_ID) + + # Access the values + int_top = calibration_data['int_top'] + int_bottom = calibration_data['int_bottom'] + int_left = calibration_data['int_left'] + int_right = calibration_data['int_right'] + avg_int = calibration_data['avg_int'] + + # Training task + training_task(int_top, int_bottom, int_right, int_left, avg_int) + + # Run confusion matrix + #visualize_confusion_matrix('C:/Users/feelspace/OptiVisT/tactile-guidance/Shape_detection/alpha training_{participant_ID}.xlsx') + visualize_confusion_matrix(f'D:/WWU/M8 - Master Thesis/Project/Code/Bracelet/Shape_detection/Participants/{participant_ID}/alpha training_{participant_ID}.xlsx') + save_calibration_data(participant_ID, int_top, int_bottom, int_left, int_right, avg_int)''' + + belt_controller.disconnect_belt() if belt_controller else None + sys.exit() \ No newline at end of file diff --git a/Shape_detection/calibration_beta.py b/Shape_detection/calibration_beta.py new file mode 100644 index 00000000..fd266878 --- /dev/null +++ b/Shape_detection/calibration_beta.py @@ -0,0 +1,1153 @@ +import numpy as np +import os +import random +import time +import sys +import pandas as pd +import keyboard +import threading +from sklearn.metrics import confusion_matrix +import seaborn as sns +import matplotlib.pyplot as plt +from auto_connect import interactive_belt_connect, setup_logger +from pybelt.belt_controller import (BeltConnectionState, BeltController, + BeltControllerDelegate, BeltMode, + BeltOrientationType, + BeltVibrationTimerOption, BeltVibrationPattern) +from pybelt.belt_scanner import BeltScanner +from openpyxl.workbook import Workbook +from bracelet import connect_belt + + +# Define the event for stopping vibration +stop_event = threading.Event() + +def esc_key_listener(stop_event): + """ + Function to listen for ESC key press and set the stop event. + """ + while not stop_event.is_set(): + if keyboard.is_pressed('esc'): + stop_event.set() + break + time.sleep(0.1) # Sleep to avoid high CPU usage + +# Function to capture the keyboard input for direction +def capture_direction(): + while True: + if keyboard.is_pressed('up'): + time.sleep(0.1) # Debounce delay + if keyboard.is_pressed('right'): + return 'top right' + elif keyboard.is_pressed('left'): + return 'top left' + return 'top' + elif keyboard.is_pressed('down'): + time.sleep(0.1) # Debounce delay + if keyboard.is_pressed('right'): + return 'bottom right' + elif keyboard.is_pressed('left'): + return 'bottom left' + return 'down' + elif keyboard.is_pressed('right'): + time.sleep(0.1) # Debounce delay + if keyboard.is_pressed('up'): + return 'top right' + elif keyboard.is_pressed('down'): + return 'bottom right' + return 'right' + elif keyboard.is_pressed('left'): + time.sleep(0.1) # Debounce delay + if keyboard.is_pressed('up'): + return 'top left' + elif keyboard.is_pressed('down'): + return 'bottom left' + return 'left' + +def interval_vibration(): + """ + Function to run interval vibration pattern until stopped. + """ + while not stop_event.is_set(): + calibrated_intensity = 100 + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.SINGLE_SHORT, + intensity=calibrated_intensity, + orientation_type=BeltOrientationType.ANGLE, + orientation=60, # down + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + + if stop_event.is_set(): + break + + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.SINGLE_SHORT, + intensity=calibrated_intensity, + orientation_type=BeltOrientationType.ANGLE, + orientation=120, + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + + if stop_event.is_set(): + break + + belt_controller.stop_vibration() + +def simultaneous_vibration(): + """ + Function to run simultaneous vibration pattern until stopped. + """ + while not stop_event.is_set(): + calibrated_intensity = 100 + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=calibrated_intensity, + orientation_type=BeltOrientationType.BINARY_MASK, + orientation=0b101000, # Combination of orientations + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + + if stop_event.is_set(): + break + + belt_controller.stop_vibration() + +def start_key_listener(stop_event): + """ + Start the ESC key listener thread. + """ + key_listener_thread = threading.Thread(target=esc_key_listener, args=(stop_event,)) + key_listener_thread.daemon = True # Ensure the thread exits with the main program + key_listener_thread.start() + +def preference_test(): + """ + Run the preference test for vibration patterns. + """ + print("\nYou will now experience two vibration patterns.") + time.sleep(2) + print("Pattern 1: Interval") + time.sleep(1) + # Start the ESC key listener + start_key_listener(stop_event) + + # Start interval vibration pattern + interval_vibration_thread = threading.Thread(target=interval_vibration) + interval_vibration_thread.start() + + # Wait for user input or ESC key press + input("Press Enter to switch to the next pattern") + + # Stop interval vibration and start simultaneous pattern + stop_event.set() + interval_vibration_thread.join() + + stop_event.clear() # Reset stop event for the next pattern + + print("Pattern 2: Simultaneous") + time.sleep(1) + simultaneous_vibration_thread = threading.Thread(target=simultaneous_vibration) + simultaneous_vibration_thread.start() + + # Wait for user input or ESC key press + input("Press Enter to end the test and choose your preference") + + stop_event.set() + simultaneous_vibration_thread.join() + + # Ask for user preference + while True: + preference = input("\nWhich vibration pattern did you prefer? Enter '1' for Interval or '2' for Simultaneous: ") + if preference == '1': + return 'Interval' + elif preference == '2': + return 'Simultaneous' + else: + print("Invalid input. Please enter '1' or '2'.") + +# Calibration function to determine optimal vibration intensity +def display_intensity(intensity): + print(f"\nCurrent intensity: {intensity}") + +def get_step_value(): + while True: + try: + step_value = int(input("Enter the initial increment/decrement step value: ")) + if step_value <= 0: + print("Step value must be a positive integer. Please try again.") + else: + return step_value + except ValueError: + print("Invalid input. Please enter an integer.") + +def get_user_input_for_calibration(): + while True: + try: + inputs = [] + print("Enter four numbers for calibration:") + for i in range(4): + num = int(input(f"Number {i+1}: ")) + inputs.append(num) + return inputs + except ValueError: + print("Invalid input. Please enter numeric values.") + +def select_vibromotor(): + while True: + print("\nSelect the vibromotor to calibrate:") + print("0. Finish calibration") + print("1. Down") + print("2. Right") + choice = input("Enter the number corresponding to your choice: ") + if choice == '1': + return 60 + elif choice == '2': + return 120 + elif choice == '0': + return None # Finish calibration + else: + print("Invalid choice. Please select a valid option.") + +def staircase_method(orientation): + """ + Perform the staircase method to determine the threshold intensity for the given orientation. + """ + initial_value = 100 + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=100, + orientation_type=BeltOrientationType.ANGLE, + orientation=orientation, + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + time.sleep(1) + belt_controller.stop_vibration() + + step_sizes = [64, 32, 16, 8, 4, 2, 1, 0] + step_size_index = 0 + step_size = step_sizes[step_size_index] + current_value = initial_value + values = [current_value] + reversal_points = [] + reversal_indices = [] + direction = None + direction_changes = 0 + max_reversals = 7 + max_trials = 20 + trial_count = 0 + + print("Press 'up' to increase, 'down' to decrease, 'right' to repeat, and 'esc' to exit.") + + while direction_changes < max_reversals and trial_count < max_trials: + key = keyboard.read_event() + + # Only handle the event if it's a key press + if key.event_type == keyboard.KEY_DOWN: + if key.name == 'esc': + break + elif key.name == 'up': + if direction == 'down': + # Capture reversal index before appending the new value + reversal_points.append(current_value) + reversal_indices.append(len(values) - 1) + direction_changes += 1 + step_size_index = (step_size_index + 1) % len(step_sizes) + step_size = step_sizes[step_size_index] + print(f"\nDirection changed to 'up'. New step size: {step_size}") + direction = 'up' + current_value += step_size + if current_value > 100: # Ensure it doesn't go above 100 + current_value = 100 + values.append(current_value) + print(f"Increasing by {step_size}. New value: {current_value}") + + elif key.name == 'down': + if direction == 'up': + # Capture reversal index before appending the new value + reversal_points.append(current_value) + reversal_indices.append(len(values) - 1) + direction_changes += 1 + step_size_index = (step_size_index + 1) % len(step_sizes) + step_size = step_sizes[step_size_index] + print(f"\nDirection changed to 'down'. New step size: {step_size}") + direction = 'down' + current_value -= step_size + if current_value < 0: # Ensure it doesn't go below 0 + current_value = 0 + values.append(current_value) + print(f"Decreasing by {step_size}. New value: {current_value}") + + elif key.name == 'right': + values.append(current_value) + print(f"\nRepeating value: {current_value}") + + trial_count += 1 + + # Send vibration command with current value (intensity) + if belt_controller: + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=current_value, + orientation_type=BeltOrientationType.ANGLE, + orientation=orientation, + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + time.sleep(1) + belt_controller.stop_vibration() + + # Calculate the average of the last 4 direction changes + if len(reversal_points) >= 4: + threshold = sum(reversal_points[-4:]) / 4 + # Only plot the last 4 reversal points + plot_reversal_points = reversal_points[-4:] + plot_reversal_indices = reversal_indices[-4:] + else: + threshold = sum(reversal_points) / len(reversal_points) + # Plot all the reversal points if there are less than 4 + plot_reversal_points = reversal_points + plot_reversal_indices = reversal_indices + + print(f"Estimated Threshold: {threshold:.2f}") + + # Plot the entire sequence of values + plt.figure() + plt.plot(values, marker='o', linestyle='-', color='b', label='Values') + + # Plot only the last 4 reversal points with red circles + if len(reversal_points) > 0: + plt.plot(plot_reversal_indices, plot_reversal_points, marker='o', linestyle='None', color='r', label='Last 4 Reversal Points') + + plt.xlabel('Trials') + plt.ylabel('Value') + plt.title(f'Staircase Method_{orientation}_beta') + plt.legend() + plt.grid(True) + plt.savefig(f'D:/WWU/M8 - Master Thesis/Project/Code/Bracelet/Shape_detection/Participants/{participant_ID}/beta_{participant_ID}_{orientation}') + + return threshold + +def calibrate_intensity(orientation): + global calibrated_intensity # Declare that we are using the global variable + + print(f"Calibrating intensity for orientation: {orientation}\n") + + # Run staircase method to determine the optimal intensity + calibrated_intensity = staircase_method(orientation) + calibrated_intensity = int(calibrated_intensity) + print(f'User-calibrated intensity: {calibrated_intensity:.2f}') + + if belt_controller: + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=calibrated_intensity, + orientation_type=BeltOrientationType.ANGLE, + orientation=orientation, + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + time.sleep(2) + belt_controller.stop_vibration() + + return calibrated_intensity + +# Function to send vibration for a given direction +def vibrate_direction(direction, stop_event, preference, int_top, int_bottom, int_right, int_left, avg_int): + # Check if belt_controller is initialized + if not belt_controller: + print("Error: Belt controller not initialized.") + return + + try: + if preference == 'Interval': + while not stop_event.is_set(): + if direction == 'top': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_top, + orientation_type=BeltOrientationType.ANGLE, + orientation=90, # Top + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + elif direction == 'down': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_bottom, + orientation_type=BeltOrientationType.ANGLE, + orientation=60, # Down + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + elif direction == 'right': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_right, + orientation_type=BeltOrientationType.ANGLE, + orientation=120, # Right + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + elif direction == 'left': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_left, + orientation_type=BeltOrientationType.ANGLE, + orientation=45, # Left + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + elif direction == 'top right': + while not stop_event.is_set(): + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.SINGLE_SHORT, + intensity=int_top, + orientation_type=BeltOrientationType.ANGLE, + orientation=90, # Top + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + if stop_event.is_set(): + break + belt_controller.send_vibration_command( + channel_index=1, + pattern=BeltVibrationPattern.SINGLE_SHORT, + intensity=int_right, + orientation_type=BeltOrientationType.ANGLE, + orientation=120, # Right + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + if stop_event.is_set(): + break + elif direction == 'top left': + while not stop_event.is_set(): + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.SINGLE_SHORT, + intensity=int_top, + orientation_type=BeltOrientationType.ANGLE, + orientation=90, # Top + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + if stop_event.is_set(): + break + belt_controller.send_vibration_command( + channel_index=1, + pattern=BeltVibrationPattern.SINGLE_SHORT, + intensity=int_left, + orientation_type=BeltOrientationType.ANGLE, + orientation=45, # Left + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + if stop_event.is_set(): + break + elif direction == 'bottom right': + while not stop_event.is_set(): + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.SINGLE_SHORT, + intensity=int_bottom, + orientation_type=BeltOrientationType.ANGLE, + orientation=60, # Down + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + if stop_event.is_set(): + break + belt_controller.send_vibration_command( + channel_index=1, + pattern=BeltVibrationPattern.SINGLE_SHORT, + intensity=int_right, + orientation_type=BeltOrientationType.ANGLE, + orientation=120, # Right + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + if stop_event.is_set(): + break + elif direction == 'bottom left': + while not stop_event.is_set(): + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.SINGLE_SHORT, + intensity=int_bottom, + orientation_type=BeltOrientationType.ANGLE, + orientation=60, # Down + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + if stop_event.is_set(): + break + belt_controller.send_vibration_command( + channel_index=1, + pattern=BeltVibrationPattern.SINGLE_SHORT, + intensity=int_left, + orientation_type=BeltOrientationType.ANGLE, + orientation=45, # Left + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + if stop_event.is_set(): + break + else: + print(f"Direction '{direction}' not recognized.") + break + + elif preference == 'Simultaneous': + while not stop_event.is_set(): + if direction == 'top': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_top, + orientation_type=BeltOrientationType.ANGLE, + orientation=90, # Top + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + if stop_event.is_set(): + break + elif direction == 'down': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_bottom, + orientation_type=BeltOrientationType.ANGLE, + orientation=60, # Down + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + if stop_event.is_set(): + break + elif direction == 'right': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_right, + orientation_type=BeltOrientationType.ANGLE, + orientation=120, # Right + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + if stop_event.is_set(): + break + elif direction == 'left': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_left, + orientation_type=BeltOrientationType.ANGLE, + orientation=45, # Left + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + if stop_event.is_set(): + break + elif direction == 'top right': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_top, + orientation_type=BeltOrientationType.ANGLE, + orientation=90, # Top + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + time.sleep(0.2) + belt_controller.send_vibration_command( + channel_index=1, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_right, + orientation_type=BeltOrientationType.ANGLE, + orientation=120, # Right + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + time.sleep(0.2) + if stop_event.is_set(): + break + elif direction == 'bottom right': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_bottom, + orientation_type=BeltOrientationType.ANGLE, + orientation=60, + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + belt_controller.send_vibration_command( + channel_index=1, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_right, + orientation_type=BeltOrientationType.ANGLE, + orientation=120, + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + if stop_event.is_set(): + break + elif direction == 'top left': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_top, + orientation_type=BeltOrientationType.ANGLE, + orientation=90, # Top + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + belt_controller.send_vibration_command( + channel_index=1, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_left, + orientation_type=BeltOrientationType.ANGLE, + orientation=45, + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + if stop_event.is_set(): + break + elif direction == 'bottom left': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_bottom, + orientation_type=BeltOrientationType.ANGLE, + orientation=60, + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + belt_controller.send_vibration_command( + channel_index=1, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_left, + orientation_type=BeltOrientationType.ANGLE, + orientation=45, + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + if stop_event.is_set(): + break + else: + print(f"Direction '{direction}' not recognized.") + return + + + except Exception as e: + print(f"Exception occurred: {e}") + finally: + # Ensure vibrations are stopped + belt_controller.stop_vibration() + +# Directions for training +directions = ['top', 'down', 'right', 'left', 'top right', 'bottom right', 'top left', 'bottom left'] + +# Familiarization phase +def familiarization_phase(preference, int_top, int_bottom, int_right, int_left, avg_int): + print("\nFamiliarization Phase") + time.sleep(3) + + for direction in directions: + while True: + stop_event = threading.Event() # Event to stop vibration + + print(f"Vibrating for {direction}.") + # Start the vibration in a separate thread + vibration_thread = threading.Thread( + target=vibrate_direction, + args=(direction, stop_event, preference, int_top, int_bottom, int_right, int_left, avg_int) + ) + vibration_thread.start() + user_response = capture_direction() + print(f"User response: {user_response}") + stop_event.set() # Signal the vibration thread to stop + vibration_thread.join() # Wait for the vibration thread to stop + belt_controller.stop_vibration() + time.sleep(1) # Short delay between each trial + + if user_response == direction: + break # Exit the loop if the user response is correct + else: + print("Incorrect response. Please try again.") + + if belt_controller: + belt_controller.stop_vibration() + belt_controller.send_pulse_command( + channel_index=0, + orientation_type=BeltOrientationType.BINARY_MASK, + orientation=0b111100, + intensity=avg_int, + on_duration_ms=150, + pulse_period=500, + pulse_iterations=5, + series_period=5000, + series_iterations=1, + timer_option=BeltVibrationTimerOption.RESET_TIMER, + exclusive_channel=False, + clear_other_channels=False) + +def comfortness(): + while True: + response = input("\nIs the intensity good for all motors? (yes/no): ").strip().lower() + if response in ['yes', 'no']: + return response == 'yes' + else: + print("Invalid response. Please enter 'yes' or 'no'.") + +def apply_intensity (intensities): + print("Applying intensities to vibromotors:") + for orientation, intensity in intensities.items(): + if intensity is not None: + print(f"Applying intensity {intensity} to orientation {orientation} vibromotor.") + +def main_calibration_process(): + """ + Main control loop to orchestrate the steps. + """ + # Preference Test + preference = preference_test() + print(f"Selected preference: {preference}") + + intensities = { + 90: None, # Top + 60: None, # Bottom + 120: None, # Right + 45: None # Left + } + # applied_intensities = {} + # Track whether bottom and right calibrations have been performed + calibrated_bottom = False + calibrated_right = False + + while True: + # Calibration and Familiarization with the selected motor + orientation = select_vibromotor() + if orientation is None: + break + + # Calibrate intensity for the selected orientation + calibrated_intensity = calibrate_intensity(orientation) + + if orientation == 60: # Bottom + intensities[60] = calibrated_intensity + intensities[90] = calibrated_intensity # Top has same intensity as Bottom + calibrated_bottom = True + elif orientation == 120: # Right + intensities[120] = calibrated_intensity + intensities[45] = calibrated_intensity # Left has same intensity as Right + calibrated_right = True + + print(f"Calibration for orientation {orientation} is complete with intensity {calibrated_intensity}.") + + # Small delay before proceeding to familiarization + time.sleep(1) + + # Proceed with familiarization only if necessary intensities are calibrated + if calibrated_bottom or calibrated_right: + # Safely convert to integer + int_bottom = int(intensities[60] if intensities[60] is not None else 0) + int_right = int(intensities[120] if intensities[120] is not None else 0) + + # Assign corresponding values based on available calibrations + if calibrated_bottom and calibrated_right: + int_top = int_bottom + int_left = int_right + avg_int = int((int_top + int_right) // 2) + elif calibrated_bottom: + int_top = int_bottom + int_left = int_right = avg_int = int_bottom + elif calibrated_right: + int_left = int_right + int_top = int_bottom = avg_int = int_right + + # Start familiarization phase with the selected intensity + familiarization_phase(preference, int_top, int_bottom, int_right, int_left, avg_int) + + + # Ask if intensity is good + if comfortness(): + if calibrated_bottom or calibrated_right: + # At least one of Bottom or Right has been calibrated + if calibrated_bottom and calibrated_right: + # Both Bottom and Right have been calibrated + print("\nApplying different intensities based on calibrations for Bottom and Right.") + # Apply Bottom intensity to Bottom and Top + if intensities[60] is not None: + intensities[90] = intensities[60] + # Apply Right intensity to Right and Left + if intensities[120] is not None: + intensities[45] = intensities[120] + else: + # Only one of Bottom or Right has been calibrated + print("\nApplying the calibrated intensity to all vibromotors.") + if calibrated_bottom: + all_intensity = intensities[60] + else: + all_intensity = intensities[120] + # Apply the same intensity to all motors + intensities[60] = intensities[90] = intensities[120] = intensities[45] = all_intensity + + int_top = int(intensities[90]) + int_bottom = int(intensities[60]) + int_right = int(intensities[120]) + int_left = int(intensities[45]) + avg_int = int((int_top + int_right) // 2) + + # Apply intensities + apply_intensity(intensities) + break + else: + print("Repeating calibration and familiarization for the selected motor.") + continue + + return preference, int_top, int_bottom, int_right, int_left, avg_int + +def training_task(preference, int_top, int_bottom, int_right, int_left, avg_int): + directory = f"D:/WWU/M8 - Master Thesis/Project/Code/Bracelet/Shape_detection/Participants/{participant_ID}" + time.sleep(10) + print("\nPress 'Enter' to proceed the training task") + while True: + if keyboard.is_pressed('enter'): + break + print("Training Task will start") + + all_set_accuracies = [] + all_block_accuracies = [] + max_sets = 3 # Maximum number of sets allowed + set_count = 0 # Counter for the number of sets + all_set_results = {} + + for set_count in range(1, max_sets + 1): + print(f"Starting Training Set {set_count}") + correct_responses_per_block = [] + blocks = 3 + trials_per_block = 16 + block_accuracies = [] + block_results = {} + combined_results = { + 'Trial' : [], + 'Block' : [], + 'Actual Direction' : [], + 'Predicted Direction' : [], + 'Response Time (s)' : [] + } + for block in range(blocks): + correct_responses = 0 + time.sleep(5) + + # Create a list with two of each direction and shuffle it + block_directions = directions * 2 + random.shuffle(block_directions) + + actual_directions =[] + predicted_directions = [] + response_times = [] + trial_numbers = [] + + for trial_num, direction in enumerate(block_directions[:trials_per_block], start = 1): + print(f"Trial {trial_num}: Vibration direction is {direction}.") + + # Setup for vibration + stop_event = threading.Event() # Event to stop vibration + vibration_thread = threading.Thread( + target=vibrate_direction, + args=(direction, stop_event, preference, int_top, int_bottom, int_right, int_left, avg_int)) + vibration_thread.start() + + start_time = time.time() + user_response = capture_direction() + end_time = time.time() + response_time = end_time - start_time + + print(f"User response: {user_response}") + stop_event.set() # Signal the vibration thread to stop + vibration_thread.join() # Wait for the vibration thread to stop + belt_controller.stop_vibration() + time.sleep(1) + + trial_numbers.append(trial_num) + actual_directions.append(direction) + predicted_directions.append(user_response) + response_times.append(response_time) + + # Add to combined results + combined_results['Trial'].append(trial_num) + combined_results['Block'].append(block + 1) + combined_results['Actual Direction'].append(direction) + combined_results['Predicted Direction'].append(user_response) + combined_results['Response Time (s)'].append(response_time) + + if user_response == direction: + correct_responses += 1 + + # Store the results for the current block + block_results[f'Block {block + 1}'] = { + 'Trial': trial_numbers, + 'Actual Direction': actual_directions, + 'Predicted Direction': predicted_directions, + 'Response Time (s)': response_times + } + + # Stop vibration after completing a block with custom stop signal + if belt_controller: + belt_controller.stop_vibration() + belt_controller.send_pulse_command( + channel_index=0, + orientation_type=BeltOrientationType.BINARY_MASK, + orientation=0b111100, + intensity=avg_int, + on_duration_ms=150, + pulse_period=500, + pulse_iterations=5, + series_period=5000, + series_iterations=1, + timer_option=BeltVibrationTimerOption.RESET_TIMER, + exclusive_channel=False, + clear_other_channels=False) + + # Calculate accuracy for the block + block_accuracy = (correct_responses / trials_per_block) * 100 + block_accuracies.append(block_accuracy) + correct_responses_per_block.append(correct_responses) + print(f"Block {block + 1} complete. Accuracy: {block_accuracy:.2f}%\n") + + # Calculate and store the average accuracy for the set + set_average_accuracy = np.mean(block_accuracies) + all_set_accuracies.append(set_average_accuracy) + all_block_accuracies.append(block_accuracies) + print(f"Set {set_count} average accuracy: {set_average_accuracy:.2f}%") + + # Save results for the set + all_set_results[f'Set {set_count}'] = combined_results + + # Determine if the training accuracy is sufficient + if set_average_accuracy >= 90: + print(f"Training completed with an accuracy of {set_average_accuracy:.2f}%") + break + else: + print(f"Training accuracy below 90% with an accuracy of {set_average_accuracy:.2f}%") + set_count +=1 + + print("\nPress 'Enter' to proceed the next training set") + while True: + if keyboard.is_pressed('enter'): + break + + if set_count == max_sets and set_average_accuracy < 90: + print("Maximum sets reached, but training accuracy is still below 90%.") + + # Save result to .txt file + directory = f"D:/WWU/M8 - Master Thesis/Project/Code/Bracelet/Shape_detection/Participants/{participant_ID}" + file_path = os.path.join(directory, f"beta training_{participant_ID}.txt") + with open(file_path, 'w') as file: + file.write(f"Participant ID: {participant_ID}\n") + file.write(f"Diagonal pattern: {preference}\n") + file.write(f"Intensity for top and bottom: {int_top}\n") + file.write(f"Intensity for right and left: {int_left}\n") + file.write(f"Average intensity: {avg_int}\n") + file.write(f"Training task: {set_count} set/sets\n") + for i, accuracies in enumerate(all_block_accuracies, start=1): + file.write(f"\nSet {i} block accuracies: {accuracies}\n") + file.write(f"Set {i} average accuracy: {all_set_accuracies[i-1]:.2f}%\n") + file.write(f"\nOverall training completed with an average accuracy of {np.mean(all_set_accuracies):.2f}%\n") + print(f'\nResults saved to {file_path}') + + # Excel output + #with pd.ExcelWriter('C:/Users/feelspace/OptiVisT/tactile-guidance/Shape_detection/beta training.xlsx') as writer: + with pd.ExcelWriter(f'D:/WWU/M8 - Master Thesis/Project/Code/Bracelet/Shape_detection/Participants/{participant_ID}/beta training_{participant_ID}.xlsx') as writer: + # Write each set's results to its own sheet + for set_name, results in all_set_results.items(): + df = pd.DataFrame(results) + df.to_excel(writer, sheet_name=set_name, index=False) + + return + #return average_accuracy, block_accuracies, actual_directions, predicted_directions + +def visualize_confusion_matrix(excel_file_path): + # Load the Excel file + with pd.ExcelFile(excel_file_path) as xls: + # Iterate over each sheet in the Excel file + for sheet_name in xls.sheet_names: + # Load the data from the current sheet + df = pd.read_excel(xls, sheet_name=sheet_name) + + # Extract the actual and predicted directions + actual_directions = df['Actual Direction'] + predicted_directions = df['Predicted Direction'] + + # Compute the confusion matrix + cm = confusion_matrix(actual_directions, predicted_directions) + + # Plot the confusion matrix using Seaborn + plt.figure(figsize=(8, 6)) + sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', cbar=False, + xticklabels=df['Actual Direction'].unique(), + yticklabels=df['Actual Direction'].unique()) + plt.xlabel('Predicted Direction') + plt.ylabel('Actual Direction') + plt.title(f'Confusion Matrix of Actual vs. Predicted Directions_{participant_ID}_{sheet_name}') + plt.savefig(f'D:/WWU/M8 - Master Thesis/Project/Code/Bracelet/Shape_detection/Participants/{participant_ID}/beta_cm_{participant_ID}_{sheet_name}') + plt.show() + +def save_calibration_data(participant_ID, preference, int_top, int_bottom, int_left, int_right, avg_int): + directory = f"D:/WWU/M8 - Master Thesis/Project/Code/Bracelet/Shape_detection/Participants/{participant_ID}" + file_path = os.path.join(directory, f'beta intensity_{participant_ID}.txt') + calibration_data = ( + f"preference: {preference}\n" + f"int_top: {int_top}\n" + f"int_bottom: {int_bottom}\n" + f"int_left: {int_left}\n" + f"int_right: {int_right}\n" + f"avg_int: {avg_int}\n") + + # Save values to the text file + with open(file_path, 'w') as file: + file.write(calibration_data) + print(f"Calibration data saved to {file_path}") + +def end_signal(avg_int): + if belt_controller: + belt_controller.stop_vibration() + belt_controller.send_pulse_command( + channel_index=0, + orientation_type=BeltOrientationType.BINARY_MASK, + orientation=0b111100, + intensity=avg_int, + on_duration_ms=150, + pulse_period=500, + pulse_iterations=5, + series_period=5000, + series_iterations=1, + timer_option=BeltVibrationTimerOption.RESET_TIMER, + exclusive_channel=False, + clear_other_channels=False) + +if __name__ == "__main__": + connection_check, belt_controller = connect_belt() + if connection_check: + print('Bracelet connection successful.') + else: + print('Error connecting bracelet. Aborting.') + sys.exit() + + participant_ID = input("Enter Participant ID: ") + + while True: + # Display menu options + print("\nChoose an option:") + print("0: Finish") + print("1: Calibration") + print("2: Familiarization phase") + print("3: Training task") + print("4: End Signal") + + choice = input("\nEnter 0, 1, or 2: ") + if choice == '0': + print("Exiting") + break + elif choice == '1': + preference, int_top, int_bottom, int_right, int_left, avg_int = main_calibration_process() + elif choice == '2': + familiarization_phase(preference, int_top, int_bottom, int_right, int_left, avg_int) + elif choice == '3': + training_task(preference, int_top, int_bottom, int_right, int_left, avg_int) + visualize_confusion_matrix(f'D:/WWU/M8 - Master Thesis/Project/Code/Bracelet/Shape_detection/Participants/{participant_ID}/beta training_{participant_ID}.xlsx') + save_calibration_data(participant_ID, preference, int_top, int_bottom, int_left, int_right, avg_int) + elif choice == '4': + end_signal(avg_int) + else: + print("Invalid choice. Please enter 0, 1, or 2.") + + '''# Calibration + preference, int_top, int_bottom, int_right, int_left, avg_int = main_calibration_process() + + # Training task + training_task(preference, int_top, int_bottom, int_right, int_left, avg_int) + + # Run confusion matrix + #visualize_confusion_matrix('C:/Users/feelspace/OptiVisT/tactile-guidance/Shape_detection/beta training.xlsx') + visualize_confusion_matrix(f'D:/WWU/M8 - Master Thesis/Project/Code/Bracelet/Shape_detection/Participants/{participant_ID}/beta training_{participant_ID}.xlsx') + save_calibration_data(participant_ID, preference, int_top, int_bottom, int_left, int_right, avg_int)''' + + belt_controller.disconnect_belt() if belt_controller else None + sys.exit() \ No newline at end of file diff --git a/Shape_detection/data_analyst.py b/Shape_detection/data_analyst.py new file mode 100644 index 00000000..014a27f2 --- /dev/null +++ b/Shape_detection/data_analyst.py @@ -0,0 +1,42 @@ +import cv2 +import numpy as np +import matplotlib.pyplot as plt + +# Load the original and drawing images +original = cv2.imread('D:/WWU/M8 - Master Thesis/Project/Code/Images/2.jpg') +drawing = cv2.imread('D:/WWU/M8 - Master Thesis/Project/Code/Images/two.jpg') + +# Convert to grayscale +original_gray = cv2.cvtColor(original, cv2.COLOR_BGR2GRAY) +drawing_gray = cv2.cvtColor(drawing, cv2.COLOR_BGR2GRAY) + +# Resize the drawing to match the original image size +drawing_gray_resized = cv2.resize(drawing_gray, (original_gray.shape[1], original_gray.shape[0])) + +# Calculate the absolute difference between the original and the drawing +difference = cv2.absdiff(original_gray, drawing_gray_resized) + +# Apply a binary threshold to highlight significant differences +_, thresholded_diff = cv2.threshold(difference, 30, 255, cv2.THRESH_BINARY) + +# Display the original, drawing, and difference images +plt.figure(figsize=(10, 5)) +plt.subplot(1, 3, 1) +plt.title("Original") +plt.imshow(original_gray, cmap='gray') +plt.axis('off') + +plt.subplot(1, 3, 2) +plt.title("Drawing") +plt.imshow(drawing_gray_resized, cmap='gray') +plt.axis('off') + +plt.subplot(1, 3, 3) +plt.title("Difference") +plt.imshow(thresholded_diff, cmap='gray') +plt.axis('off') + +plt.show() + +# Optionally, save the difference image +cv2.imwrite('difference_image.png', thresholded_diff) diff --git a/Shape_detection/drawing.py b/Shape_detection/drawing.py new file mode 100644 index 00000000..d16c1d56 --- /dev/null +++ b/Shape_detection/drawing.py @@ -0,0 +1,849 @@ +import numpy as np +import time +import sys +import random +import keyboard +from auto_connect import interactive_belt_connect, setup_logger +from pybelt.belt_controller import (BeltConnectionState, BeltController, + BeltControllerDelegate, BeltMode, + BeltOrientationType, + BeltVibrationTimerOption, BeltVibrationPattern) +from bracelet import connect_belt +import threading +from threading import Event, Thread +import os + +# Define shapes with vertices +shapes = { + 'cross': [(0, 0), (2, 0), (2, 2), (4, 2), (4, 0), (6, 0), (6, -2), (4, -2), (4, -4), (2, -4), (2, -2), (0, -2), (0, 0)], + 'square': [(0, 0), (0, 2), (2, 2), (2, 0), (0, 0)], + 'octagon': [(0, 0), (2, 2), (4, 2), (6, 0), (6, -2), (4, -4), (2, -4), (0, -2), (0, 0)], + 'star': [(0, 0), (3, 5), (6, 0), (0, 3), (6, 3), (0, 0)], + '0': [(0, 0), (2, 0), (2, -4), (0, -4), (0, 0), (0, 0)], + '1': [(0, 0), (0, -4)], + '2': [(0, 0), (2, 0), (2, -2), (0, -2), (0, -4), (2, -4)], + '3': [(0, 0), (2, 0), (2, -2), (0, -2), (2, -2), (2, -4), (0, -4)], + '4': [(0, 0), (0, -2), (2, -2), (2, 0), (2, -4)], + '5': [(0, 0), (-2, 0), (-2, -2), (0, -2), (0, -4), (-2, -4)], + '6': [(0, 0), (0, -4), (2, -4), (2, -2), (0, -2)], + '7': [(0, 0), (2, 0), (2, -4)], + '8': [(0, 0), (2, 0), (2, -2), (0, -2), (0, -4), (2, -4), (2, -2), (0, -2), (0, 0)], + '9': [(0, 0), (-2, 0), (-2, -2), (0, -2), (0, 0), (0, -4), (-2, -4)], + 'a': [(0, 0), (-2, 0), (-2, 2), (0, 2), (0, -0.2), (0.2, -0.2)], + 'b': [(0, 0), (2, 0), (2, -2), (0, -2), (0, 2)], + 'c': [(0, 0), (-2, 0), (-2, -4), (0, -4)], + 'd': [(0, 0), (-2, 0), (-2, -2), (0, -2), (0, 2)], + 'e': [(0, 0), (2, 0), (2, 2), (0, 2), (0, -2), (2, -2)], + 'f': [(0, 0), (-2, 0), (-2, -4), (-2, -2), (0, -2)], + 'g': [(0, 0), (-2, 0), (-2, -4), (0, -4), (0, -2), (-1, -2)], + 'h': [(0, 0), (0, -4), (0, -2), (2, -2), (2, -4)], + 'i': [(0, 0), (2, 0), (1, 0), (1, -4), (0, -4), (2, -4)], + 'j': [(0, 0), (2, 0), (2, -4), (0, -4)], + 'k': [(0, 0), (0, -4), (2, -2), (1, -3), (2, -4)], + 'l': [(0, 0), (0, -4), (2, -4)], + 'm': [(0, 0), (0, 4), (2, 2), (4, 4), (4, 0)], + 'n': [(0, 0), (0, 4), (2, 0), (2, 4)], + 'p': [(0, 0), (2, 0), (2, 2), (0, 2), (0, -2)], + 'q': [(0, 0), (-2, 0), (-2, 2), (0, 2), (0, -2), (0.2, -2)], + 's': [(0, 0), (-2, 0), (-2, -2), (0, -2), (0, -4), (-2, -4)], + 't': [(0, 0), (2, 0), (1, 0), (1, -4)], + 'u': [(0, 0), (0, -2), (2, -2), (2, 0)], + 'r': [(0, 0), (2, 0), (2, 2), (0, 2), (0, -2), (0,0), (2,-2)], + 'v': [(0, 0), (2, -4), (4, 0)], + 'w': [(0, 0), (0, -4), (2, -2), (4, -4), (4, 0)], + 'x': [(0, 0), (2, -4), (1, -2), (2, 0), (0, -4)], + 'y': [(0, 0), (2, -2), (4, 0), (0, -4)], + 'z': [(0, 0), (2, 0), (0, -2), (2, -2)] +} + +def alpha(): + # Function to load calibration values + def load_calibration_data(participant_ID): + #directory = f"D:/WWU/M8 - Master Thesis/Project/Code/Bracelet/Shape_detection/Participants/{participant_ID}/" + directory = f"C:/Users/feelspace/OptiVisT/tactile-guidance/Shape_detection/Participants/{participant_ID}/" + file_path = os.path.join(directory, f'alpha intensity_{participant_ID}.txt') + + calibration_data = {} + + # Read values from the text file + with open(file_path, 'r') as file: + for line in file: + key, value = line.strip().split(": ") + # Convert value to integer if it's a number + calibration_data[key] = int(value) if value.isdigit() else value + + return calibration_data + + def calculate_direction_and_time(start, end, int_top, int_left, int_bottom, int_right, avg_int, speed=1.5): + dx = end[0] - start[0] + dy = end[1] - start[1] + distance = np.sqrt(dx**2 + dy**2) + time_required = distance / speed + + # Handle simultaneous vibration for each direction + if dx > 0 and dy == 0: + if belt_controller: + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_right, + orientation_type=BeltOrientationType.ANGLE, + orientation=120, + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False + ) + return 'right', time_required + elif dx < 0 and dy == 0: + if belt_controller: + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_left, + orientation_type=BeltOrientationType.ANGLE, + orientation=45, + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False + ) + return 'left', time_required + elif dy > 0 and dx == 0: + if belt_controller: + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_top, + orientation_type=BeltOrientationType.ANGLE, + orientation=90, + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False + ) + return 'top', time_required + elif dy < 0 and dx == 0: + if belt_controller: + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_bottom, + orientation_type=BeltOrientationType.ANGLE, + orientation=60, + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False + ) + return 'down', time_required + else: + return 'none', 0 + + # Function to simulate tactile feedback based on shape + def simulate_tactile_feedback(shape, speed=1.5): + vertices = shapes[shape] + vertices.append(vertices[-1]) # Add the last vertex again to complete the shape + + for i in range(len(vertices) - 1): + start = vertices[i] + end = vertices[i + 1] + direction, time_required = calculate_direction_and_time(start, end, int_top, int_left, int_bottom, int_right, avg_int, speed) + if direction != 'none': + time.sleep(0.2) + print(f"{direction} for {time_required:.2f} seconds") + time.sleep(time_required) # Simulate the time required for the movement + belt_controller.stop_vibration() + time.sleep(1) + + # Function for drawing examples + def draw_examples(): + examples = { + 'cardinal': ['square', 'cross'], + } + + for category, items in examples.items(): + print(f"\nStarting example category: {category}") + for item in items: + time.sleep(5) + print(f'Start Now: \n{item}') + time.sleep(1) + simulate_tactile_feedback(item) + print("stop \n") + if belt_controller: + belt_controller.stop_vibration() + belt_controller.send_pulse_command( + channel_index=0, + orientation_type=BeltOrientationType.ANGLE, + orientation=90, + intensity=avg_int, + on_duration_ms=150, + pulse_period=500, + pulse_iterations=5, + series_period=5000, + series_iterations=1, + timer_option=BeltVibrationTimerOption.RESET_TIMER, + exclusive_channel=False, + clear_other_channels=False) + time.sleep(5) # 5 second pause after each shape + + def draw_categories(): + categories = { + 'numbers': ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'], + 'letters': ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'l', 'p', 'q', 's', 't', 'u'], + } + + # Shuffle the items within each category for each participant + for category, items in categories.items(): + random.shuffle(items) + + total_figures = 0 + + # Open a file to save the drawing order + directory = f"C:/Users/feelspace/OptiVisT/tactile-guidance/Shape_detection/Participants/{participant_ID}/" + #directory = f"D:/WWU/M8 - Master Thesis/Project/Code/Bracelet/Shape_detection/Participants/{participant_ID}/" + file_path = os.path.join(directory, f"alpha order_{participant_ID}.txt") + with open(file_path, 'w') as file: + # Execute drawing tasks for each category sequentially + for category, items in categories.items(): + file.write(f"\nStarting category: {category}\n") + print(f"\nStarting category: {category}") + for index, item in enumerate(items): + file.write(f'{item}\n') # Save each item to the file + time.sleep(3) + print(f'Start Now: \n{item}') + time.sleep(2) + simulate_tactile_feedback(item) + print("stop \n") + if belt_controller: + belt_controller.stop_vibration() + belt_controller.send_pulse_command( + channel_index=0, + orientation_type=BeltOrientationType.ANGLE, + orientation=90, + intensity=avg_int, + on_duration_ms=150, + pulse_period=500, + pulse_iterations=5, + series_period=5000, + series_iterations=1, + timer_option=BeltVibrationTimerOption.RESET_TIMER, + exclusive_channel=False, + clear_other_channels=False) + time.sleep(5) # 5 second pause after each shape + + # 30 seconds pause after every 19 figures + total_figures += 1 + if total_figures % 19 == 0: + print("Taking 15 seconds pause") + time.sleep(15) + + # Prompt the user to press 'Enter' to continue + print("Press 'Enter' to proceed to the next figure \n") + while True: + if keyboard.is_pressed('enter'): + break + + if __name__ == "__main__": + # Load the calibration data + calibration_data = load_calibration_data(participant_ID) + + # Access the values + int_top = calibration_data['int_top'] + int_bottom = calibration_data['int_bottom'] + int_left = calibration_data['int_left'] + int_right = calibration_data['int_right'] + avg_int = calibration_data['avg_int'] + + while True: + # Display menu options + print("\nChoose an option:") + print("0: Finish") + print("1: Drawing Examples") + print("2: Drawing Categories") + + choice = input("\nEnter 0, 1, or 2: ") + + if choice == '0': + print("Exiting") + break + elif choice == '1': + draw_examples() + elif choice == '2': + draw_categories() + else: + print("Invalid choice. Please enter 0, 1, or 2.") + + +def beta(): + # Function to load calibration values + def load_calibration_data(participant_ID): + directory = f"C:/Users/feelspace/OptiVisT/tactile-guidance/Shape_detection/Participants/{participant_ID}/" + #directory = f"D:/WWU/M8 - Master Thesis/Project/Code/Bracelet/Shape_detection/Participants/{participant_ID}/" + file_path = os.path.join(directory, f'beta intensity_{participant_ID}.txt') + + calibration_data = {} + + # Read values from the text file + with open(file_path, 'r') as file: + for line in file: + key, value = line.strip().split(": ") + # Convert value to integer if it's a number + calibration_data[key] = int(value) if value.isdigit() else value + + return calibration_data + + # Define stop_event globally + stop_event = Event() + + def calculate_direction_and_time(start, end, speed=1.5): + dx = end[0] - start[0] + dy = end[1] - start[1] + distance = np.sqrt(dx**2 + dy**2) + time_required = distance / speed + + if dx > 0 and dy == 0: + direction = 'right' + elif dx < 0 and dy == 0: + direction = 'left' + elif dy > 0 and dx == 0: + direction = 'top' + elif dy < 0 and dx == 0: + direction = 'down' + elif dx > 0 and dy > 0: + direction = 'top right' + elif dx > 0 and dy < 0: + direction = 'bottom right' + elif dx < 0 and dy > 0: + direction = 'top left' + elif dx < 0 and dy < 0: + direction = 'bottom left' + else: + direction = 'none' + + return direction, time_required + + def vibrate_direction(direction, stop_event, preference, int_top, int_bottom, int_right, int_left, avg_int): + # Check if belt_controller is initialized + if not belt_controller: + print("Error: Belt controller not initialized.") + return + + try: + if preference == 'Interval': + while not stop_event.is_set(): + if direction == 'top': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_top, + orientation_type=BeltOrientationType.ANGLE, + orientation=90, # Top + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + elif direction == 'down': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_bottom, + orientation_type=BeltOrientationType.ANGLE, + orientation=60, # Down + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + elif direction == 'right': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_right, + orientation_type=BeltOrientationType.ANGLE, + orientation=120, # Right + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + elif direction == 'left': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_left, + orientation_type=BeltOrientationType.ANGLE, + orientation=45, # Left + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + elif direction == 'top right': + while not stop_event.is_set(): + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.SINGLE_SHORT, + intensity=int_top, + orientation_type=BeltOrientationType.ANGLE, + orientation=90, # Top + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + time.sleep(0.2) + belt_controller.send_vibration_command( + channel_index=1, + pattern=BeltVibrationPattern.SINGLE_SHORT, + intensity=int_right, + orientation_type=BeltOrientationType.ANGLE, + orientation=120, # Right + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + time.sleep(0.2) + elif direction == 'top left': + while not stop_event.is_set(): + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.SINGLE_SHORT, + intensity=int_top, + orientation_type=BeltOrientationType.ANGLE, + orientation=90, # Top + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + time.sleep(0.2) + belt_controller.send_vibration_command( + channel_index=1, + pattern=BeltVibrationPattern.SINGLE_SHORT, + intensity=int_left, + orientation_type=BeltOrientationType.ANGLE, + orientation=45, # Left + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + time.sleep(0.2) + elif direction == 'bottom right': + while not stop_event.is_set(): + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.SINGLE_SHORT, + intensity=int_bottom, + orientation_type=BeltOrientationType.ANGLE, + orientation=60, # Down + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + time.sleep(0.2) + belt_controller.send_vibration_command( + channel_index=1, + pattern=BeltVibrationPattern.SINGLE_SHORT, + intensity=int_right, + orientation_type=BeltOrientationType.ANGLE, + orientation=120, # Right + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + time.sleep(0.2) + elif direction == 'bottom left': + while not stop_event.is_set(): + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.SINGLE_SHORT, + intensity=int_bottom, + orientation_type=BeltOrientationType.ANGLE, + orientation=60, # Down + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + time.sleep(0.2) + belt_controller.send_vibration_command( + channel_index=1, + pattern=BeltVibrationPattern.SINGLE_SHORT, + intensity=int_left, + orientation_type=BeltOrientationType.ANGLE, + orientation=45, # Left + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + time.sleep(0.2) + else: + print(f"Direction '{direction}' not recognized.") + break + + elif preference == 'Simultaneous': + while not stop_event.is_set(): + if direction == 'top': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_top, + orientation_type=BeltOrientationType.ANGLE, + orientation=90, # Top + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + if stop_event.is_set(): + break + elif direction == 'down': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_bottom, + orientation_type=BeltOrientationType.ANGLE, + orientation=60, # Down + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + if stop_event.is_set(): + break + elif direction == 'right': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_right, + orientation_type=BeltOrientationType.ANGLE, + orientation=120, # Right + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + if stop_event.is_set(): + break + elif direction == 'left': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_left, + orientation_type=BeltOrientationType.ANGLE, + orientation=45, # Left + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + if stop_event.is_set(): + break + elif direction == 'top right': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_top, + orientation_type=BeltOrientationType.ANGLE, + orientation=90, # Top + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + belt_controller.send_vibration_command( + channel_index=1, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_right, + orientation_type=BeltOrientationType.ANGLE, + orientation=120, # Right + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + if stop_event.is_set(): + break + elif direction == 'bottom right': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_bottom, + orientation_type=BeltOrientationType.ANGLE, + orientation=60, + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + belt_controller.send_vibration_command( + channel_index=1, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_right, + orientation_type=BeltOrientationType.ANGLE, + orientation=120, + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + if stop_event.is_set(): + break + elif direction == 'top left': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_top, + orientation_type=BeltOrientationType.ANGLE, + orientation=90, # Top + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + belt_controller.send_vibration_command( + channel_index=1, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_left, + orientation_type=BeltOrientationType.ANGLE, + orientation=45, + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + if stop_event.is_set(): + break + elif direction == 'bottom left': + belt_controller.send_vibration_command( + channel_index=0, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_bottom, + orientation_type=BeltOrientationType.ANGLE, + orientation=60, + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + belt_controller.send_vibration_command( + channel_index=1, + pattern=BeltVibrationPattern.CONTINUOUS, + intensity=int_left, + orientation_type=BeltOrientationType.ANGLE, + orientation=45, + pattern_iterations=None, + pattern_period=500, + pattern_start_time=0, + exclusive_channel=False, + clear_other_channels=False) + if stop_event.is_set(): + break + else: + print(f"Direction '{direction}' not recognized.") + return + + + except Exception as e: + print(f"Exception occurred: {e}") + finally: + # Ensure vibrations are stopped + belt_controller.stop_vibration() + + + # Function to simulate tactile feedback based on shape + def simulate_tactile_feedback(shape, preference, speed=1.5): + vertices = shapes[shape] + vertices.append(vertices[-1]) # Add the last vertex again to complete the shape + + for i in range(len(vertices) - 1): + start = vertices[i] + end = vertices[i + 1] + direction, time_required = calculate_direction_and_time(start, end, speed) + + if direction != 'none': + # Create and start a new thread for vibration simulation + stop_event = threading.Event() + vibration_thread = threading.Thread( + target=vibrate_direction, + args=(direction, stop_event, preference, int_top, int_bottom, int_right, int_left, avg_int) + ) + vibration_thread.start() + + # Wait for the required time while the thread simulates vibration + print(f"{direction} for {time_required:.2f} seconds") + time.sleep(time_required) + + # Stop the vibration + stop_event.set() + vibration_thread.join() # Wait for the vibration thread to finish + + # Ensure there is a pause before starting the next segment + time.sleep(1) + + # Function for drawing examples + def draw_examples(): + examples = { + 'cardinal': ['square', 'cross'], + 'oblique' : ['octagon', 'star'] + } + + for category, items in examples.items(): + print(f"\nStarting example category: {category}") + for item in items: + time.sleep(5) + print(f'Start Now: \n{item}') + time.sleep(1) + simulate_tactile_feedback(item, preference) + print("stop \n") + if belt_controller: + belt_controller.stop_vibration() + belt_controller.send_pulse_command( + channel_index=0, + orientation_type=BeltOrientationType.BINARY_MASK, + orientation=0b111100, + intensity=avg_int, + on_duration_ms=150, + pulse_period=500, + pulse_iterations=5, + series_period=5000, + series_iterations=1, + timer_option=BeltVibrationTimerOption.RESET_TIMER, + exclusive_channel=False, + clear_other_channels=False) + time.sleep(5) # 5 second pause after each shape + + def draw_categories(): + categories = { + 'numbers': ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9'], + 'letters': ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'l', 'p', 'q', 's', 't', 'u'], + 'beta': ['k', 'm', 'n', 'r', 'v', 'w', 'x', 'y', 'z'] + } + + # Shuffle the items within each category for each participant + for category, items in categories.items(): + random.shuffle(items) + + total_figures = 0 + + # Open a file to save the drawing order + directory = f"C:/Users/feelspace/OptiVisT/tactile-guidance/Shape_detection/Participants/{participant_ID}/" + #directory = f"D:/WWU/M8 - Master Thesis/Project/Code/Bracelet/Shape_detection/Participants/{participant_ID}/" + file_path = os.path.join(directory, f"beta order_{participant_ID}.txt") + with open(file_path, 'w') as file: + # Execute drawing tasks for each category sequentially + for category, items in categories.items(): + file.write(f"\nStarting category: {category}\n") + print(f"\nStarting category: {category}") + for index, item in enumerate(items): + file.write(f'{item}\n') # Save each item to the file + time.sleep(3) + print(f'Start Now: \n{item}') + time.sleep(2) + simulate_tactile_feedback(item, preference) + print("stop \n") + if belt_controller: + belt_controller.stop_vibration() + belt_controller.send_pulse_command( + channel_index=0, + orientation_type=BeltOrientationType.BINARY_MASK, + orientation=0b111100, + intensity=avg_int, + on_duration_ms=150, + pulse_period=500, + pulse_iterations=5, + series_period=5000, + series_iterations=1, + timer_option=BeltVibrationTimerOption.RESET_TIMER, + exclusive_channel=False, + clear_other_channels=False) + time.sleep(5) # 5 second pause after each shape + + # 30 seconds pause after every 19 figures + total_figures += 1 + if total_figures % 19 == 0: + print("Taking 15 seconds pause") + time.sleep(15) + + # Prompt the user to press 'Enter' to continue + print("Press 'Enter' to proceed to the next figure \n") + while True: + if keyboard.is_pressed('enter'): + break + + if __name__ == "__main__": + # Load the calibration data + calibration_data = load_calibration_data(participant_ID) + + # Access the values + preference = calibration_data['preference'] + int_top = calibration_data['int_top'] + int_bottom = calibration_data['int_bottom'] + int_left = calibration_data['int_left'] + int_right = calibration_data['int_right'] + avg_int = calibration_data['avg_int'] + + + while True: + # Display menu options + print("\nChoose an option:") + print("0: Finish") + print("1: Drawing Examples") + print("2: Drawing Categories") + + choice = input("\nEnter 0, 1, or 2: ") + + if choice == '0': + print("Exiting") + break + elif choice == '1': + draw_examples() + elif choice == '2': + draw_categories() + else: + print("Invalid choice. Please enter 0, 1, or 2.") + +if __name__ == "__main__": + # Connect to the belt + connection_check, belt_controller = connect_belt() + if connection_check: + print('Bracelet connection successful.') + else: + print('Error connecting bracelet. Aborting.') + sys.exit() + + participant_ID = input("Enter Participant ID: ") + + while True: + # Display menu options + print("\nChoose an option:") + print("0: Finish") + print("1: Alpha") + print("2: Beta") + + choice = input("\nEnter 0, 1, or 2: ") + + if choice == '0': + print("Exiting") + break + elif choice == '1': + alpha() + elif choice == '2': + beta() + else: + print("Invalid choice. Please enter 0, 1, or 2.") + + belt_controller.disconnect_belt() if belt_controller else None + sys.exit() + diff --git a/Shape_detection/rescale.py b/Shape_detection/rescale.py new file mode 100644 index 00000000..73118866 --- /dev/null +++ b/Shape_detection/rescale.py @@ -0,0 +1,56 @@ +from PIL import Image +import numpy as np +import string + +def load_and_preprocess_image(image_path): + # Load the image + image = Image.open(image_path) + + # Convert the image to grayscale + image = image.convert('L') + #print(image) + #data=np.asarray(image) + #print(data) + #image.show() + image = Image.eval(image, lambda x: 0 if x<255 else 255) + #image.show() + image = Image.eval(image, lambda x: 255 - x) + + # Resize the image to 28x28 pixels + image = image.resize((28, 28)) + + # Convert the image to a numpy array + image_array = np.array(image) + + # If necessary, reshape the array to match the format of EMNIST images + # Assuming that you want the array to have a shape of (28, 28, 1) + image_array = image_array.reshape(28, 28, 1) + + return image_array + + +def int_labels_to_emnist_format(int_labels): + """Reshapes a list of integer labels to match the format of EMNIST labels.""" + + # Reshape the integer labels to match the format of EMNIST labels + emnist_format_labels = np.array(int_labels) + + return emnist_format_labels + +def index_to_letter(index): + """Convert an index to its corresponding letter (a-z).""" + + return chr(index + ord('a')) + + +if __name__ == '__main__': + # Example usage + image_path = 'D:/WWU/M8 - Master Thesis/Project/Code/Images/one.jpg' # Replace with your image path + preprocessed_image = load_and_preprocess_image(image_path) + + # You can visualize the preprocessed image using Matplotlib + import matplotlib.pyplot as plt + + plt.imshow(preprocessed_image[..., 0], cmap='gray') # Use ... to access the first channel + plt.axis('off') + plt.show() \ No newline at end of file diff --git a/Shape_detection/staircase.py b/Shape_detection/staircase.py new file mode 100644 index 00000000..697cd206 --- /dev/null +++ b/Shape_detection/staircase.py @@ -0,0 +1,98 @@ +import matplotlib.pyplot as plt +import keyboard + +def staircase_method(): + initial_value = 80 + step_sizes = [20, 10, 8, 6, 4, 2, 1] + step_size_index = 0 + step_size = step_sizes[step_size_index] + current_value = initial_value + values = [current_value] + reversal_points = [] + reversal_indices = [] + direction = None + direction_changes = 0 + max_reversals = 7 + max_trials = 20 + trial_count = 0 + + print("Press 'up' to increase, 'down' to decrease, 'right' to repeat, and 'esc' to exit.") + + while direction_changes < max_reversals and trial_count < max_trials: + key = keyboard.read_event() + + # Only handle the event if it's a key press + if key.event_type == keyboard.KEY_DOWN: + if key.name == 'esc': + break + elif key.name == 'up': + if direction == 'down': + # Capture reversal index before appending the new value + reversal_points.append(current_value) + reversal_indices.append(len(values) - 1) + direction_changes += 1 + step_size_index = (step_size_index + 1) % len(step_sizes) + step_size = step_sizes[step_size_index] + print(f"\n Direction changed to 'up'. New step size: {step_size}") + direction = 'up' + current_value += step_size + values.append(current_value) + print(f"Increasing by {step_size}. New value: {current_value}") + + elif key.name == 'down': + if direction == 'up': + # Capture reversal index before appending the new value + reversal_points.append(current_value) + reversal_indices.append(len(values) - 1) + direction_changes += 1 + step_size_index = (step_size_index + 1) % len(step_sizes) + step_size = step_sizes[step_size_index] + print(f"\n Direction changed to 'down'. New step size: {step_size}") + direction = 'down' + current_value -= step_size + values.append(current_value) + print(f"Decreasing by {step_size}. New value: {current_value}") + + elif key.name == 'right': + values.append(current_value) + print(f"\n Repeating value: {current_value}") + + trial_count += 1 + + # Include the last value and the last 3 reversal points for threshold calculation + '''last_points = reversal_points[-3:] + [values[-1]] + last_indices = reversal_indices[-3:] + [len(values) - 1] + + # Calculate the average of these last 4 points + threshold = sum(last_points) / 4 + print(f"Estimated Threshold: {threshold:.2f}")''' + + # Calculate the average of the last 4 direction changes + if len(reversal_points) >= 4: + threshold = sum(reversal_points[-4:]) / 4 + else: + threshold = sum(reversal_points) / len(reversal_points) + + print(f"Estimated Threshold: {threshold:.2f}") + + # Plot the entire sequence of values + plt.figure() + plt.plot(values, marker='o', linestyle='-', color='b', label='Values') + + # Highlight the last 4 points (including the last value and 3 last reversal points) + '''if len(last_points) > 0: + plt.plot(last_indices, last_points, marker='o', linestyle='None', color='r', label='Last 4 Points')''' + if len(reversal_points) > 0: + plt.plot(reversal_indices, reversal_points, marker='o', linestyle='None', color='r', label='Last 4 Reversal Points') + + plt.xlabel('Trials') + plt.ylabel('Value') + plt.title('Staircase Method') + plt.legend() + plt.grid(True) + plt.show() + + return threshold + +# Run the staircase method +threshold = staircase_method() diff --git a/Shape_detection/test_digit.py b/Shape_detection/test_digit.py new file mode 100644 index 00000000..55560e8e --- /dev/null +++ b/Shape_detection/test_digit.py @@ -0,0 +1,88 @@ +import torch +from emnist import extract_test_samples +import numpy as np +import idx2numpy +import matplotlib.pyplot as plt +from rescale import (load_and_preprocess_image, int_labels_to_emnist_format, index_to_letter) +import torch.nn.functional as F + +def softmax(x): + exp_x = np.exp(x - np.max(x, axis=1, keepdims=True)) # Subtract max for numerical stability + return exp_x / np.sum(exp_x, axis=1, keepdims=True) + +def test(cnn): + '''Calculates the accuracy of the CNN on the test data''' + cnn.eval() + with torch.no_grad(): + correct = 0 + for images, labels in test_loader: + #images, labels = images.cuda(), labels.cuda() + test_output = cnn.forward(images) + pred_y = torch.max(test_output, 1)[1] + + print(f"Prediction: {pred_y}, label: {labels}") + correct += (pred_y == labels).sum() + + ''' + probabilities = F.softmax(test_output, dim=1) + #print(probabilities) + #print(probabilities.shape) + + for number, i in enumerate(pred_y): + predicted_value = i.item() + print(predicted_value, 'probability:', probabilities[number][predicted_value]*100,'%') ''' + + #accuracy = correct / 400 # Our digits test data has 40,000 images + accuracy = 100 * (correct/len(pred_y)) + print('Test Data Accuracy: {0:.2f}'.format(accuracy)) + return accuracy + + +def load_images(path, targets): + + images = [] + + for target in targets: + image = load_and_preprocess_image(path + target + '.jpg') + images.append(image) + test_images = np.stack(images) + + return test_images + +if __name__ == '__main__': + # Load EMNIST training dataset + #test_images, test_labels = extract_test_samples('digits') + + participant_ID = input("Enter Participant ID: ") + + image_path = (f'D:/WWU/M8 - Master Thesis/Project/Code/Result/{participant_ID}/') + #image_path = 'C:/Users/feelspace/OptiVisT/tactile-guidance/Shape_detection/Images/' + targets = ['a_0', 'a_1', 'a_2', 'a_3', 'a_4', 'a_5', 'a_6', 'a_7', 'a_8', 'a_9'] + test_labels = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + + test_images, test_labels = load_images(image_path, targets), int_labels_to_emnist_format(test_labels) + + #test_images = torch.tensor((test_images/255-0.5).reshape(40000, 1, 28, 28)) + test_images = torch.tensor((test_images/255-0.5).reshape(10, 1, 28, 28)) + test_data = list(zip(test_images.float(), test_labels.astype('int64'))) + + # Load and test CNN + test_loader = torch.utils.data.DataLoader(test_data, batch_size=min(10000,len(test_labels)), shuffle=False) + cnn = torch.load('torch_emnistcnn_checkpoint.pt', map_location=torch.device("cpu")) + #cnn.cuda() + test(cnn) + + targets = ['b_0','b_1', 'b_2', 'b_3', 'b_4', 'b_5', 'b_6', 'b_7', 'b_8', 'b_9'] + test_labels = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] + + test_images, test_labels = load_images(image_path, targets), int_labels_to_emnist_format(test_labels) + + #test_images = torch.tensor((test_images/255-0.5).reshape(40000, 1, 28, 28)) + test_images = torch.tensor((test_images/255-0.5).reshape(10, 1, 28, 28)) + test_data = list(zip(test_images.float(), test_labels.astype('int64'))) + + # Load and test CNN + test_loader = torch.utils.data.DataLoader(test_data, batch_size=min(10000,len(test_labels)), shuffle=False) + cnn = torch.load('torch_emnistcnn_checkpoint.pt', map_location=torch.device("cpu")) + #cnn.cuda() + test(cnn) diff --git a/Shape_detection/test_letter.py b/Shape_detection/test_letter.py new file mode 100644 index 00000000..7219186b --- /dev/null +++ b/Shape_detection/test_letter.py @@ -0,0 +1,92 @@ +import torch +from emnist import extract_test_samples +import numpy as np +import idx2numpy +import matplotlib.pyplot as plt +from rescale import (load_and_preprocess_image, int_labels_to_emnist_format, index_to_letter) +import torch.nn.functional as F + +def softmax(x): + exp_x = np.exp(x - np.max(x, axis=1, keepdims=True)) # Subtract max for numerical stability + return exp_x / np.sum(exp_x, axis=1, keepdims=True) + +def test(cnn): + '''Calculates the accuracy of the CNN on the test data''' + cnn.eval() + with torch.no_grad(): + correct = 0 + for images, labels in test_loader: + #images, labels = images.cuda(), labels.cuda() + test_output = cnn.forward(images) + pred_y = torch.max(test_output, 1)[1] + + pred_letters = [index_to_letter(idx) for idx in pred_y] + label_letters = [index_to_letter(idx) for idx in labels] + + print(f"Prediction: {pred_letters}, label: {label_letters}") + correct += (pred_y == labels).sum() + + ''' + probabilities = F.softmax(test_output, dim=1) + #print(probabilities) + #print(probabilities.shape) + + for number, i in enumerate(pred_y): + predicted_value = i.item() + print(predicted_value, 'probability:', probabilities[number][predicted_value]*100,'%') ''' + + accuracy = correct / 208 # Our letters test data has 20,800 images + accuracy = 100 * (correct/len(pred_y)) + print('Test Data Accuracy: {0:.2f}'.format(accuracy)) + return accuracy + + +def load_images(path, targets): + + images = [] + + for target in targets: + image = load_and_preprocess_image(path + target + '.jpg') + images.append(image) + test_images = np.stack(images) + + return test_images + +if __name__ == '__main__': + # Load EMNIST training dataset + '''test_images, test_labels = extract_test_samples('letters')''' + + participant_ID = input("Enter Participant ID: ") + + image_path = (f'D:/WWU/M8 - Master Thesis/Project/Code/Result/{participant_ID}/') + #image_path = 'C:/Users/feelspace/OptiVisT/tactile-guidance/Shape_detection/Images/' + + targets = ['a_a', 'a_b', 'a_c', 'a_d', 'a_e', 'a_f', 'a_g', 'a_h', 'a_i', 'a_j', 'a_l', 'a_p', 'a_q', + 'a_s', 'a_t', 'a_u'] + test_labels = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 15, 16, 18, 19, 20] + test_images, test_labels = load_images(image_path, targets), int_labels_to_emnist_format(test_labels) + + #test_images = torch.tensor((test_images/255-0.5).reshape(20800, 1, 28, 28)) + test_images = torch.tensor((test_images/255-0.5).reshape(16, 1, 28, 28)) + test_data = list(zip(test_images.float(), test_labels.astype('int64'))) + + # Load and test CNN + test_loader = torch.utils.data.DataLoader(test_data, batch_size=min(10000,len(test_labels)), shuffle=False) + cnn = torch.load('torch_emnistcnn_letter_v2.pt', map_location=torch.device("cpu")) + #cnn.cuda() + test(cnn) + + targets = ['b_a', 'b_b', 'b_c', 'b_d', 'b_e', 'b_f', 'b_g', 'b_h', 'b_i', 'b_j', 'b_l', 'b_p', 'b_q', 'b_s', 'b_t', 'b_u', + 'b_k', 'b_m', 'b_n', 'b_r', 'b_v', 'b_w', 'b_x', 'b_y', 'b_z'] + test_labels = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 15, 16, 18, 19, 20, 10, 12, 13, 17, 21, 22, 23, 24, 25] + test_images, test_labels = load_images(image_path, targets), int_labels_to_emnist_format(test_labels) + + #test_images = torch.tensor((test_images/255-0.5).reshape(20800, 1, 28, 28)) + test_images = torch.tensor((test_images/255-0.5).reshape(25, 1, 28, 28)) + test_data = list(zip(test_images.float(), test_labels.astype('int64'))) + + # Load and test CNN + test_loader = torch.utils.data.DataLoader(test_data, batch_size=min(10000,len(test_labels)), shuffle=False) + cnn = torch.load('torch_emnistcnn_letter_v2.pt', map_location=torch.device("cpu")) + #cnn.cuda() + test(cnn) \ No newline at end of file diff --git a/Shape_detection/torch_cnn.py b/Shape_detection/torch_cnn.py new file mode 100644 index 00000000..564d08f4 --- /dev/null +++ b/Shape_detection/torch_cnn.py @@ -0,0 +1,27 @@ +from torch import nn + +class EMNISTCNN(nn.Module): + def __init__(self, fmaps1, fmaps2, dense, dropout): + super(EMNISTCNN, self).__init__() + self.conv1 = nn.Sequential( + nn.Conv2d(in_channels=1, out_channels=fmaps1, kernel_size=5, stride=1, padding='same'), + nn.LeakyReLU(), + nn.MaxPool2d(kernel_size=2), + ) + self.conv2 = nn.Sequential( + nn.Conv2d(in_channels=fmaps1, out_channels=fmaps2, kernel_size=5, stride=1, padding='same'), + nn.LeakyReLU(), + nn.MaxPool2d(kernel_size=2), + ) + self.fcon1 = nn.Sequential(nn.Linear(49*fmaps2, dense), nn.LeakyReLU()) + #self.fcon2 = nn.Linear(dense, 10) + self.fcon2 = nn.Linear(dense, 26) + self.dropout = nn.Dropout(p=dropout) + + def forward(self, x): + x = self.conv1(x) + x = self.conv2(x) + x = x.view(x.size(0), -1) + x = self.dropout(self.fcon1(x)) + x = self.fcon2(x) + return x \ No newline at end of file diff --git a/Shape_detection/torch_emnistcnn_checkpoint.pt b/Shape_detection/torch_emnistcnn_checkpoint.pt new file mode 100644 index 00000000..3b24cc91 Binary files /dev/null and b/Shape_detection/torch_emnistcnn_checkpoint.pt differ diff --git a/Shape_detection/torch_emnistcnn_letter.pt b/Shape_detection/torch_emnistcnn_letter.pt new file mode 100644 index 00000000..1f518c1d Binary files /dev/null and b/Shape_detection/torch_emnistcnn_letter.pt differ diff --git a/Shape_detection/torch_emnistcnn_letter_v2.pt b/Shape_detection/torch_emnistcnn_letter_v2.pt new file mode 100644 index 00000000..7b09e42f Binary files /dev/null and b/Shape_detection/torch_emnistcnn_letter_v2.pt differ diff --git a/Shape_detection/train.py b/Shape_detection/train.py new file mode 100644 index 00000000..e3474655 --- /dev/null +++ b/Shape_detection/train.py @@ -0,0 +1,129 @@ +import torch +from emnist import extract_training_samples +import torch_cnn +import itertools +import matplotlib.pyplot as plt +import math + +def train(num_epochs, cnn, train_loader, valid_loader, optimiser, loss_func, scheduler=None): + '''Trains the CNN with given parameters''' + valid_accuracy = [] + for epoch in range(num_epochs): + cnn.train() + for (images, labels) in train_loader: + #images, labels = images.cuda(), labels.cuda() + output = cnn.forward(images) + loss = loss_func(output, labels) + + optimiser.zero_grad() + loss.backward() + optimiser.step() + + if scheduler != None: + scheduler.step() + + print('Epoch [{}/{}]'.format(epoch + 1, num_epochs)) + valid_accuracy.append(valid(cnn, valid_loader).item()) + return valid_accuracy + +def valid(cnn, valid_loader): + '''Calculates the accuracy of the CNN on the validation data''' + cnn.eval() + with torch.no_grad(): + correct = 0 + for images, labels in valid_loader: + #images, labels = images.cuda(), labels.cuda() + test_output = cnn.forward(images) + y = torch.max(test_output, 1)[1] + correct += (y == labels).sum() + #accuracy = correct / 400 # Our validation data has 40,000 images + accuracy = correct / 248 # validation data has 24,800 letters + print('Validation Data Accuracy: {0:.2f}'.format(accuracy)) + return accuracy + +def train_plot_params(epochs, train_data, valid_data): + '''Plots accuracy on validation data for all combinations of given parameters''' + # Take subset of data to save time + train_data = train_data[:50000] + # Parameters + fmaps1s = [40] + fmaps2s = [160] + denses = [200] + droupouts = [0.4] + batch_sizes = [5] + + # Train and save accuracies + plots = [] + for params in list(itertools.product(fmaps1s, fmaps2s, denses, droupouts, batch_sizes)): + train_loader = torch.utils.data.DataLoader(train_data, batch_size=params[4], shuffle=True) + valid_loader = torch.utils.data.DataLoader(valid_data, batch_size=10000, shuffle=False) + cnn = torch_cnn.EMNISTCNN(*params[:4]) + #cnn.cuda() + + loss_func = torch.nn.CrossEntropyLoss() + optimiser = torch.optim.SGD(cnn.parameters(), lr = 0.02*math.sqrt(params[4])) + scheduler = torch.optim.lr_scheduler.StepLR(optimiser, step_size=10, gamma=0.5) + + plots.append((train(epochs, cnn, train_loader, valid_loader, optimiser, loss_func, scheduler=scheduler), *params)) + + # Plot accuracies + for plot in plots: + plt.plot(range(epochs), plot[0], label=str(plot[1:])[1:-1]) + plt.legend() + plt.xlabel('epoch') + plt.ylabel('validation accuracy') + plt.title('Validation accuracy of fmaps1, fmaps2, dense, dropout, batch_size') + plt.savefig('validation_plot.png') + +def train_save(epochs, train_data, valid_data): + # Train the network and save it + train_loader = torch.utils.data.DataLoader(train_data, batch_size=5, shuffle=True) + valid_loader = torch.utils.data.DataLoader(valid_data, batch_size=10000, shuffle=False) + + cnn = torch_cnn.EMNISTCNN(40, 160, 200, 0.4) + #cnn.cuda() + valid(cnn, valid_loader) + + loss_func = torch.nn.CrossEntropyLoss() + optimiser = torch.optim.SGD(cnn.parameters(), lr = 0.045) + scheduler = torch.optim.lr_scheduler.StepLR(optimiser, step_size=15, gamma=0.5) + + train(epochs, cnn, train_loader, valid_loader, optimiser, loss_func, scheduler=scheduler) + torch.save(cnn, 'torch_emnistcnn_letter_v2.pt') + +if __name__ == '__main__': + epochs = 15 + # Load EMNIST letters dataset + images, labels = extract_training_samples('letters') + print(images.shape) + #image 240.000, letters 124.800 + labels = [i-1 for i in labels] + + # Prepare training and validation data + train_images = torch.tensor((images[:100000] / 255 - 0.5).reshape(100000, 1, 28, 28)).float() + train_labels = torch.tensor(labels[:100000]).long() + valid_images = torch.tensor((images[100000:] / 255 - 0.5).reshape(24800, 1, 28, 28)).float() + valid_labels = torch.tensor(labels[100000:]).long() + + print(valid_labels) + print(min(train_labels)) + print(max(train_labels)) + + # Create datasets + train_data = list(zip(train_images, train_labels)) + valid_data = list(zip(valid_images, valid_labels)) + + # Filter out any invalid labels (if necessary) + '''valid_train_data = [(img, label) for img, label in train_data if 1 <= label < 27] + valid_valid_data = [(img, label) for img, label in valid_data if 1 <= label < 27]''' + + valid_train_data = [(img, label) for img, label in train_data if 0 <= label < 26] + valid_valid_data = [(img, label) for img, label in valid_data if 0 <= label < 26] + + # Proceed with training using the corrected data + train_save(epochs, valid_train_data, valid_valid_data) + + # Train and save the model + # train_save(epochs, train_data, valid_data) + # Optionally, plot parameters + # train_plot_params(epochs, train_data, valid_data) diff --git a/Shape_detection/visualization.py b/Shape_detection/visualization.py new file mode 100644 index 00000000..d6a2e927 --- /dev/null +++ b/Shape_detection/visualization.py @@ -0,0 +1,115 @@ +import matplotlib.pyplot as plt +import numpy as np +import os +import pandas as pd +from sklearn.metrics import confusion_matrix +import seaborn as sns + +# Define shapes with vertices +shapes = { + '0': [(0, 0), (2, 0), (2, -4), (0, -4), (0, 0), (0, 0)], + '1': [(0, 0), (0, -4)], + '2': [(0, 0), (2, 0), (2, -2), (0, -2), (0, -4), (2, -4)], + '3': [(0, 0), (2, 0), (2, -2), (0, -2), (2, -2), (2, -4), (0, -4)], + '4': [(0, 0), (0, -2), (2, -2), (2, 0), (2, -4)], + '5': [(0, 0), (-2, 0), (-2, -2), (0, -2), (0, -4), (-2, -4)], + '6': [(0, 0), (0, -4), (2, -4), (2, -2), (0, -2)], + '7': [(0, 0), (2, 0), (2, -4)], + '8': [(0, 0), (2, 0), (2, -2), (0, -2), (0, -4), (2, -4), (2, -2), (0, -2), (0, 0)], + '9': [(0, 0), (-2, 0), (-2, -2), (0, -2), (0, 0), (0, -4), (-2, -4)], + 'a': [(0, 0), (-2, 0), (-2, 2), (0, 2), (0, -0.2), (0.2, -0.2)], + 'b': [(0, 0), (2, 0), (2, -2), (0, -2), (0, 2)], + 'c': [(0, 0), (-2, 0), (-2, -4), (0, -4)], + 'd': [(0, 0), (-2, 0), (-2, -2), (0, -2), (0, 2)], + 'e': [(0, 0), (2, 0), (2, 2), (0, 2), (0, -2), (2, -2)], + 'f': [(0, 0), (-2, 0), (-2, -4), (-2, -2), (0, -2)], + 'g': [(0, 0), (-2, 0), (-2, -4), (0, -4), (0, -2), (-1, -2)], + 'h': [(0, 0), (0, -4), (0, -2), (2, -2), (2, -4)], + 'i': [(0, 0), (2, 0), (1, 0), (1, -4), (0, -4), (2, -4)], + 'j': [(0, 0), (2, 0), (2, -4), (0, -4)], + 'k': [(0, 0), (0, -4), (2, -2), (1, -3), (2, -4)], + 'l': [(0, 0), (0, -4), (2, -4)], + 'm': [(0, 0), (0, 4), (2, 2), (4, 4), (4, 0)], + 'n': [(0, 0), (0, 4), (2, 0), (2, 4)], + 'p': [(0, 0), (2, 0), (2, 2), (0, 2), (0, -2)], + 'q': [(0, 0), (-2, 0), (-2, 2), (0, 2), (0, -2), (0.2, -2)], + 's': [(0, 0), (-2, 0), (-2, -2), (0, -2), (0, -4), (-2, -4)], + 't': [(0, 0), (2, 0), (1, 0), (1, -4)], + 'u': [(0, 0), (0, -2), (2, -2), (2, 0)], + 'r': [(0, 0), (2, 0), (2, 2), (0, 2), (0, -2), (0,0), (2,-2)], + 'v': [(0, 0), (2, -4), (4, 0)], + 'w': [(0, 0), (0, -4), (2, -2), (4, -4), (4, 0)], + 'x': [(0, 0), (2, -4), (1, -2), (2, 0), (0, -4)], + 'y': [(0, 0), (2, -2), (4, 0), (0, -4)], + 'z': [(0, 0), (2, 0), (0, -2), (2, -2)] +} + +# Function to visualize and save shapes with arrows +def visualize_and_save_shapes_with_arrows(shapes, save_path): + if not os.path.exists(save_path): + os.makedirs(save_path) + + for shape_name, vertices in shapes.items(): + plt.figure() + plt.axis('off') # Turn off the axis + + for i in range(len(vertices) - 1): + start = vertices[i] + end = vertices[i + 1] + plt.plot([start[0], end[0]], [start[1], end[1]], marker='o') + #with arrow + plt.arrow(start[0], start[1], end[0] - start[0], end[1] - start[1], + head_width=0.2, length_includes_head=True, color='blue') + + plt.gca().set_aspect('equal', adjustable='box') + + # Save the figure as a JPEG file + plt.savefig(os.path.join(save_path, f"{shape_name}.jpg"), bbox_inches='tight', pad_inches=0, format='jpg') + plt.close() + +'''# Path to save the figures +save_path = r"D:\WWU\M8 - Master Thesis\Project\Code\Images" + +# Visualize and save all shapes with arrows +visualize_and_save_shapes_with_arrows(shapes, save_path)''' + +import pandas as pd +import matplotlib.pyplot as plt +import seaborn as sns +from sklearn.metrics import confusion_matrix + +def visualize_confusion_matrix(excel_file_path): + # Load the Excel file + with pd.ExcelFile(excel_file_path) as xls: + # Define the order of labels + labels = ['down', 'left', 'right', 'top'] + + # Iterate over each sheet in the Excel file + for sheet_name in xls.sheet_names: + # Load the data from the current sheet + df = pd.read_excel(xls, sheet_name=sheet_name) + + # Filter to only include rows with ID 3, 4, or 5 + df = df[df['ID'].isin([3, 4, 5])] + df = df[df['Actual Direction'].isin(labels)] # Use predefined labels for filtering + + # Extract the actual and predicted directions + actual_directions = df['Actual Direction'] + predicted_directions = df['Predicted Direction'] + + # Compute the confusion matrix with specified labels + cm = confusion_matrix(actual_directions, predicted_directions, labels=labels) + + # Plot the confusion matrix using Seaborn + plt.figure(figsize=(8, 6)) + sns.heatmap(cm, annot=True, fmt='d', cmap='Blues', cbar=False, + xticklabels=labels, + yticklabels=labels) + plt.xlabel('Predicted Direction') + plt.ylabel('Actual Direction') + plt.title(f'Confusion Matrix of Actual vs. Predicted Directions - {sheet_name}') + plt.savefig(f'D:/WWU/M8 - Master Thesis/Project/Code/Result/cm_{sheet_name}.png') # Ensure .png extension + plt.show() + +if __name__ == "__main__": + visualize_confusion_matrix(f'D:/WWU/M8 - Master Thesis/Project/Code/Result/training.xlsx') diff --git a/Shape_detection/without_bracelet.py b/Shape_detection/without_bracelet.py new file mode 100644 index 00000000..6757548d --- /dev/null +++ b/Shape_detection/without_bracelet.py @@ -0,0 +1,107 @@ +import numpy as np +import time +import sys +import random + +# Define shapes with vertices +shapes = { + '0': [(0, 0), (0, 4), (2, 4), (2, 0), (0, 0)], + '1': [(0, 0), (0, -2)], + '2': [(0, 0), (2, 0), (2, -2), (0, -2), (0, -4), (2, -4)], + '3': [(0, 0), (2, 0), (2, -2), (0, -2), (2, -2), (2, -4), (0, -4)], + '4': [(0, 0), (0, -2), (2, -2), (2, 0), (2, -4)], + '5': [(0, 0), (-2, 0), (-2, -2), (0, -2), (0, -4), (-2, -4)], + '6': [(0, 0), (-2, 0), (-2, -4), (0, -4), (0, -2), (-2, -2)], + '7': [(0, 0), (2, 0), (2, -4)], + '8': [(0, 0), (-2, 0), (-2, -2), (0, -2), (0, -4), (-2, -4), (-2, -2), (0, -2), (0, 0)], + '9': [(0, 0), (-2, 0), (-2, -2), (0, -2), (0, 0), (0, -4), (-2, -4)], + 'a': [(0, 0), (-2, 0), (-2, -2), (0, -2), (0, 0), (0, -2.5)], + 'b': [(0, 0), (0, -4), (2, -4), (2, -2), (0, -2)], + 'c': [(0, 0), (-2, 0), (-2, -2), (0, -2)], + 'd': [(0, 0), (0, -4), (-2, -4), (-2, -2), (0, -2)], + 'e': [(0, 0), (2, 0), (2, 2), (0, 2), (0, -2), (2, -2)], + 'f': [(0, 0), (-2, 0), (-2, -4), (-2, -2), (0, -2)], + 'h': [(0, 0), (0, -4), (0, -2), (2, -2), (2, -4)], + 'i': [(0, 0), (4, 0), (2, 0), (2, -4), (0, -4), (4, -4)], + 'j': [(0, 0), (2, 0), (2, -4), (0, -4), (0, -2)], + 'k': [(0, 0), (0, -4), (2, -2), (1, -3), (2, -4)], + 'l': [(0, 0), (0, -4), (2, -4)], + 'm': [(0, 0), (0, 4), (2, 2), (4, 4), (4, 0)], + 'n': [(0, 0), (0, 4), (2, 0), (2, 4)], + 'p': [(0, 0), (0, 4), (2, 4), (2, 2), (0, 2)], + 'q': [(0, 0), (0, 4), (-2, 4), (-2, 2), (0, 2)], + 'u': [(0, 0), (0, -2), (2, -2), (2, 0)], + 'r': [(0, 0), (0, 4), (2, 4), (2, 2), (0, 2), (2, 0)], + 'v': [(0, 0), (2, -4), (4, 0)], + 'w': [(0, 0), (0, -4), (2, -2), (4, -4), (4, 0)], + 'y': [(0, 0), (2, -2), (4, 0), (0, -4)], + 'z': [(0, 0), (2, 0), (0, -2), (2, -2)] +} + +# Function to calculate direction and distance +def calculate_direction_and_time(start, end, speed=1): + dx = end[0] - start[0] + dy = end[1] - start[1] + distance = np.sqrt(dx**2 + dy**2) + time_required = distance / speed + + vibration_intensity = 50 + + if dx > 0 and dy == 0: + return 'right', time_required + elif dx < 0 and dy == 0: + return 'left', time_required + elif dy > 0 and dx == 0: + return 'top', time_required + elif dy < 0 and dx == 0: + return 'down', time_required + elif dx > 0 and dy > 0: + return 'diagonal right top', time_required + elif dx > 0 and dy < 0: + return 'diagonal right bottom', time_required + elif dx < 0 and dy > 0: + return 'diagonal left top', time_required + elif dx < 0 and dy < 0: + return 'diagonal left bottom', time_required + else: + return 'none', 0 + + +# Function to simulate tactile feedback based on shape +def simulate_tactile_feedback(shape, speed=1): + vertices = shapes[shape] + vertices.append(vertices[-1]) # Add the last vertex again to complete the shape + + for i in range(len(vertices) - 1): + start = vertices[i] + end = vertices[i + 1] + direction, time_required = calculate_direction_and_time(start, end, speed) + if direction != 'none': + print(f"{direction} for {time_required:.2f} seconds") + time.sleep(time_required) # Simulate the time required for the movement + +# Define the categories and their items +categories = { + 'numbers': ['1', '2', '3', '4', '5', '6', '7', '8', '9'], + 'letters': ['a', 'b', 'c', 'd', 'e', 'f', 'h', 'i', 'j', 'l', 'p', 'q', 'u'], + 'beta': ['k', 'm', 'n', 'r', 'v', 'w', 'y', 'z'] +} + +# Shuffle the items within each category for each participant +for category, items in categories.items(): + random.shuffle(items) + +# Execute drawing tasks for each category sequentially +for category, items in categories.items(): + print(f"Starting category: {category}") + for index, item in enumerate(items): + time.sleep(3) + print(item) + simulate_tactile_feedback(item) + print("stop \n") + time.sleep(4) # Pause after each shape + + # Add a 5-second rest after every 5 items within the category + if (index + 1) % 5 == 0: + print("5-second rest \n") + time.sleep(5) \ No newline at end of file diff --git a/aibox/MiDaS/midas/backbones/beit.py b/aibox/MiDaS/midas/backbones/beit.py new file mode 100644 index 00000000..7a24e02c --- /dev/null +++ b/aibox/MiDaS/midas/backbones/beit.py @@ -0,0 +1,196 @@ +import timm +import torch +import types + +import numpy as np +import torch.nn.functional as F + +from .utils import forward_adapted_unflatten, make_backbone_default +from timm.models.beit import gen_relative_position_index +from torch.utils.checkpoint import checkpoint +from typing import Optional + + +def forward_beit(pretrained, x): + return forward_adapted_unflatten(pretrained, x, "forward_features") + + +def patch_embed_forward(self, x): + """ + Modification of timm.models.layers.patch_embed.py: PatchEmbed.forward to support arbitrary window sizes. + """ + x = self.proj(x) + if self.flatten: + x = x.flatten(2).transpose(1, 2) + x = self.norm(x) + return x + + +def _get_rel_pos_bias(self, window_size): + """ + Modification of timm.models.beit.py: Attention._get_rel_pos_bias to support arbitrary window sizes. + """ + old_height = 2 * self.window_size[0] - 1 + old_width = 2 * self.window_size[1] - 1 + + new_height = 2 * window_size[0] - 1 + new_width = 2 * window_size[1] - 1 + + old_relative_position_bias_table = self.relative_position_bias_table + + old_num_relative_distance = self.num_relative_distance + new_num_relative_distance = new_height * new_width + 3 + + old_sub_table = old_relative_position_bias_table[:old_num_relative_distance - 3] + + old_sub_table = old_sub_table.reshape(1, old_width, old_height, -1).permute(0, 3, 1, 2) + new_sub_table = F.interpolate(old_sub_table, size=(new_height, new_width), mode="bilinear") + new_sub_table = new_sub_table.permute(0, 2, 3, 1).reshape(new_num_relative_distance - 3, -1) + + new_relative_position_bias_table = torch.cat( + [new_sub_table, old_relative_position_bias_table[old_num_relative_distance - 3:]]) + + key = str(window_size[1]) + "," + str(window_size[0]) + if key not in self.relative_position_indices.keys(): + self.relative_position_indices[key] = gen_relative_position_index(window_size) + + relative_position_bias = new_relative_position_bias_table[ + self.relative_position_indices[key].view(-1)].view( + window_size[0] * window_size[1] + 1, + window_size[0] * window_size[1] + 1, -1) # Wh*Ww,Wh*Ww,nH + relative_position_bias = relative_position_bias.permute(2, 0, 1).contiguous() # nH, Wh*Ww, Wh*Ww + return relative_position_bias.unsqueeze(0) + + +def attention_forward(self, x, resolution, shared_rel_pos_bias: Optional[torch.Tensor] = None): + """ + Modification of timm.models.beit.py: Attention.forward to support arbitrary window sizes. + """ + B, N, C = x.shape + + qkv_bias = torch.cat((self.q_bias, self.k_bias, self.v_bias)) if self.q_bias is not None else None + qkv = F.linear(input=x, weight=self.qkv.weight, bias=qkv_bias) + qkv = qkv.reshape(B, N, 3, self.num_heads, -1).permute(2, 0, 3, 1, 4) + q, k, v = qkv.unbind(0) # make torchscript happy (cannot use tensor as tuple) + + q = q * self.scale + attn = (q @ k.transpose(-2, -1)) + + if self.relative_position_bias_table is not None: + window_size = tuple(np.array(resolution) // 16) + attn = attn + self._get_rel_pos_bias(window_size) + if shared_rel_pos_bias is not None: + attn = attn + shared_rel_pos_bias + + attn = attn.softmax(dim=-1) + attn = self.attn_drop(attn) + + x = (attn @ v).transpose(1, 2).reshape(B, N, -1) + x = self.proj(x) + x = self.proj_drop(x) + return x + + +def block_forward(self, x, resolution, shared_rel_pos_bias: Optional[torch.Tensor] = None): + """ + Modification of timm.models.beit.py: Block.forward to support arbitrary window sizes. + """ + if self.gamma_1 is None: + x = x + self.drop_path(self.attn(self.norm1(x), resolution, shared_rel_pos_bias=shared_rel_pos_bias)) + x = x + self.drop_path(self.mlp(self.norm2(x))) + else: + x = x + self.drop_path(self.gamma_1 * self.attn(self.norm1(x), resolution, + shared_rel_pos_bias=shared_rel_pos_bias)) + x = x + self.drop_path(self.gamma_2 * self.mlp(self.norm2(x))) + return x + + +def beit_forward_features(self, x): + """ + Modification of timm.models.beit.py: Beit.forward_features to support arbitrary window sizes. + """ + resolution = x.shape[2:] + + x = self.patch_embed(x) + x = torch.cat((self.cls_token.expand(x.shape[0], -1, -1), x), dim=1) + if self.pos_embed is not None: + x = x + self.pos_embed + x = self.pos_drop(x) + + rel_pos_bias = self.rel_pos_bias() if self.rel_pos_bias is not None else None + for blk in self.blocks: + if self.grad_checkpointing and not torch.jit.is_scripting(): + x = checkpoint(blk, x, shared_rel_pos_bias=rel_pos_bias) + else: + x = blk(x, resolution, shared_rel_pos_bias=rel_pos_bias) + x = self.norm(x) + return x + + +def _make_beit_backbone( + model, + features=[96, 192, 384, 768], + size=[384, 384], + hooks=[0, 4, 8, 11], + vit_features=768, + use_readout="ignore", + start_index=1, + start_index_readout=1, +): + backbone = make_backbone_default(model, features, size, hooks, vit_features, use_readout, start_index, + start_index_readout) + + backbone.model.patch_embed.forward = types.MethodType(patch_embed_forward, backbone.model.patch_embed) + backbone.model.forward_features = types.MethodType(beit_forward_features, backbone.model) + + for block in backbone.model.blocks: + attn = block.attn + attn._get_rel_pos_bias = types.MethodType(_get_rel_pos_bias, attn) + attn.forward = types.MethodType(attention_forward, attn) + attn.relative_position_indices = {} + + block.forward = types.MethodType(block_forward, block) + + return backbone + + +def _make_pretrained_beitl16_512(pretrained, use_readout="ignore", hooks=None): + model = timm.create_model("beit_large_patch16_512", pretrained=pretrained) + + hooks = [5, 11, 17, 23] if hooks is None else hooks + + features = [256, 512, 1024, 1024] + + return _make_beit_backbone( + model, + features=features, + size=[512, 512], + hooks=hooks, + vit_features=1024, + use_readout=use_readout, + ) + + +def _make_pretrained_beitl16_384(pretrained, use_readout="ignore", hooks=None): + model = timm.create_model("beit_large_patch16_384", pretrained=pretrained) + + hooks = [5, 11, 17, 23] if hooks is None else hooks + return _make_beit_backbone( + model, + features=[256, 512, 1024, 1024], + hooks=hooks, + vit_features=1024, + use_readout=use_readout, + ) + + +def _make_pretrained_beitb16_384(pretrained, use_readout="ignore", hooks=None): + model = timm.create_model("beit_base_patch16_384", pretrained=pretrained) + + hooks = [2, 5, 8, 11] if hooks is None else hooks + return _make_beit_backbone( + model, + features=[96, 192, 384, 768], + hooks=hooks, + use_readout=use_readout, + ) diff --git a/aibox/MiDaS/midas/backbones/levit.py b/aibox/MiDaS/midas/backbones/levit.py new file mode 100644 index 00000000..6d023a98 --- /dev/null +++ b/aibox/MiDaS/midas/backbones/levit.py @@ -0,0 +1,106 @@ +import timm +import torch +import torch.nn as nn +import numpy as np + +from .utils import activations, get_activation, Transpose + + +def forward_levit(pretrained, x): + pretrained.model.forward_features(x) + + layer_1 = pretrained.activations["1"] + layer_2 = pretrained.activations["2"] + layer_3 = pretrained.activations["3"] + + layer_1 = pretrained.act_postprocess1(layer_1) + layer_2 = pretrained.act_postprocess2(layer_2) + layer_3 = pretrained.act_postprocess3(layer_3) + + return layer_1, layer_2, layer_3 + + +def _make_levit_backbone( + model, + hooks=[3, 11, 21], + patch_grid=[14, 14] +): + pretrained = nn.Module() + + pretrained.model = model + pretrained.model.blocks[hooks[0]].register_forward_hook(get_activation("1")) + pretrained.model.blocks[hooks[1]].register_forward_hook(get_activation("2")) + pretrained.model.blocks[hooks[2]].register_forward_hook(get_activation("3")) + + pretrained.activations = activations + + patch_grid_size = np.array(patch_grid, dtype=int) + + pretrained.act_postprocess1 = nn.Sequential( + Transpose(1, 2), + nn.Unflatten(2, torch.Size(patch_grid_size.tolist())) + ) + pretrained.act_postprocess2 = nn.Sequential( + Transpose(1, 2), + nn.Unflatten(2, torch.Size((np.ceil(patch_grid_size / 2).astype(int)).tolist())) + ) + pretrained.act_postprocess3 = nn.Sequential( + Transpose(1, 2), + nn.Unflatten(2, torch.Size((np.ceil(patch_grid_size / 4).astype(int)).tolist())) + ) + + return pretrained + + +class ConvTransposeNorm(nn.Sequential): + """ + Modification of + https://github.com/rwightman/pytorch-image-models/blob/master/timm/models/levit.py: ConvNorm + such that ConvTranspose2d is used instead of Conv2d. + """ + + def __init__( + self, in_chs, out_chs, kernel_size=1, stride=1, pad=0, dilation=1, + groups=1, bn_weight_init=1): + super().__init__() + self.add_module('c', + nn.ConvTranspose2d(in_chs, out_chs, kernel_size, stride, pad, dilation, groups, bias=False)) + self.add_module('bn', nn.BatchNorm2d(out_chs)) + + nn.init.constant_(self.bn.weight, bn_weight_init) + + @torch.no_grad() + def fuse(self): + c, bn = self._modules.values() + w = bn.weight / (bn.running_var + bn.eps) ** 0.5 + w = c.weight * w[:, None, None, None] + b = bn.bias - bn.running_mean * bn.weight / (bn.running_var + bn.eps) ** 0.5 + m = nn.ConvTranspose2d( + w.size(1), w.size(0), w.shape[2:], stride=self.c.stride, + padding=self.c.padding, dilation=self.c.dilation, groups=self.c.groups) + m.weight.data.copy_(w) + m.bias.data.copy_(b) + return m + + +def stem_b4_transpose(in_chs, out_chs, activation): + """ + Modification of + https://github.com/rwightman/pytorch-image-models/blob/master/timm/models/levit.py: stem_b16 + such that ConvTranspose2d is used instead of Conv2d and stem is also reduced to the half. + """ + return nn.Sequential( + ConvTransposeNorm(in_chs, out_chs, 3, 2, 1), + activation(), + ConvTransposeNorm(out_chs, out_chs // 2, 3, 2, 1), + activation()) + + +def _make_pretrained_levit_384(pretrained, hooks=None): + model = timm.create_model("levit_384", pretrained=pretrained) + + hooks = [3, 11, 21] if hooks == None else hooks + return _make_levit_backbone( + model, + hooks=hooks + ) diff --git a/aibox/MiDaS/midas/backbones/next_vit.py b/aibox/MiDaS/midas/backbones/next_vit.py new file mode 100644 index 00000000..8afdd8b7 --- /dev/null +++ b/aibox/MiDaS/midas/backbones/next_vit.py @@ -0,0 +1,39 @@ +import timm + +import torch.nn as nn + +from pathlib import Path +from .utils import activations, forward_default, get_activation + +from ..external.next_vit.classification.nextvit import * + + +def forward_next_vit(pretrained, x): + return forward_default(pretrained, x, "forward") + + +def _make_next_vit_backbone( + model, + hooks=[2, 6, 36, 39], +): + pretrained = nn.Module() + + pretrained.model = model + pretrained.model.features[hooks[0]].register_forward_hook(get_activation("1")) + pretrained.model.features[hooks[1]].register_forward_hook(get_activation("2")) + pretrained.model.features[hooks[2]].register_forward_hook(get_activation("3")) + pretrained.model.features[hooks[3]].register_forward_hook(get_activation("4")) + + pretrained.activations = activations + + return pretrained + + +def _make_pretrained_next_vit_large_6m(hooks=None): + model = timm.create_model("nextvit_large") + + hooks = [2, 6, 36, 39] if hooks == None else hooks + return _make_next_vit_backbone( + model, + hooks=hooks, + ) diff --git a/aibox/MiDaS/midas/backbones/swin.py b/aibox/MiDaS/midas/backbones/swin.py new file mode 100644 index 00000000..f8c71367 --- /dev/null +++ b/aibox/MiDaS/midas/backbones/swin.py @@ -0,0 +1,13 @@ +import timm + +from .swin_common import _make_swin_backbone + + +def _make_pretrained_swinl12_384(pretrained, hooks=None): + model = timm.create_model("swin_large_patch4_window12_384", pretrained=pretrained) + + hooks = [1, 1, 17, 1] if hooks == None else hooks + return _make_swin_backbone( + model, + hooks=hooks + ) diff --git a/aibox/MiDaS/midas/backbones/swin2.py b/aibox/MiDaS/midas/backbones/swin2.py new file mode 100644 index 00000000..ce4c8f1d --- /dev/null +++ b/aibox/MiDaS/midas/backbones/swin2.py @@ -0,0 +1,34 @@ +import timm + +from .swin_common import _make_swin_backbone + + +def _make_pretrained_swin2l24_384(pretrained, hooks=None): + model = timm.create_model("swinv2_large_window12to24_192to384_22kft1k", pretrained=pretrained) + + hooks = [1, 1, 17, 1] if hooks == None else hooks + return _make_swin_backbone( + model, + hooks=hooks + ) + + +def _make_pretrained_swin2b24_384(pretrained, hooks=None): + model = timm.create_model("swinv2_base_window12to24_192to384_22kft1k", pretrained=pretrained) + + hooks = [1, 1, 17, 1] if hooks == None else hooks + return _make_swin_backbone( + model, + hooks=hooks + ) + + +def _make_pretrained_swin2t16_256(pretrained, hooks=None): + model = timm.create_model("swinv2_tiny_window16_256", pretrained=pretrained) + + hooks = [1, 1, 5, 1] if hooks == None else hooks + return _make_swin_backbone( + model, + hooks=hooks, + patch_grid=[64, 64] + ) diff --git a/aibox/MiDaS/midas/backbones/swin_common.py b/aibox/MiDaS/midas/backbones/swin_common.py new file mode 100644 index 00000000..94d63d40 --- /dev/null +++ b/aibox/MiDaS/midas/backbones/swin_common.py @@ -0,0 +1,52 @@ +import torch + +import torch.nn as nn +import numpy as np + +from .utils import activations, forward_default, get_activation, Transpose + + +def forward_swin(pretrained, x): + return forward_default(pretrained, x) + + +def _make_swin_backbone( + model, + hooks=[1, 1, 17, 1], + patch_grid=[96, 96] +): + pretrained = nn.Module() + + pretrained.model = model + pretrained.model.layers[0].blocks[hooks[0]].register_forward_hook(get_activation("1")) + pretrained.model.layers[1].blocks[hooks[1]].register_forward_hook(get_activation("2")) + pretrained.model.layers[2].blocks[hooks[2]].register_forward_hook(get_activation("3")) + pretrained.model.layers[3].blocks[hooks[3]].register_forward_hook(get_activation("4")) + + pretrained.activations = activations + + if hasattr(model, "patch_grid"): + used_patch_grid = model.patch_grid + else: + used_patch_grid = patch_grid + + patch_grid_size = np.array(used_patch_grid, dtype=int) + + pretrained.act_postprocess1 = nn.Sequential( + Transpose(1, 2), + nn.Unflatten(2, torch.Size(patch_grid_size.tolist())) + ) + pretrained.act_postprocess2 = nn.Sequential( + Transpose(1, 2), + nn.Unflatten(2, torch.Size((patch_grid_size // 2).tolist())) + ) + pretrained.act_postprocess3 = nn.Sequential( + Transpose(1, 2), + nn.Unflatten(2, torch.Size((patch_grid_size // 4).tolist())) + ) + pretrained.act_postprocess4 = nn.Sequential( + Transpose(1, 2), + nn.Unflatten(2, torch.Size((patch_grid_size // 8).tolist())) + ) + + return pretrained diff --git a/aibox/MiDaS/midas/backbones/utils.py b/aibox/MiDaS/midas/backbones/utils.py new file mode 100644 index 00000000..0558899d --- /dev/null +++ b/aibox/MiDaS/midas/backbones/utils.py @@ -0,0 +1,249 @@ +import torch + +import torch.nn as nn + + +class Slice(nn.Module): + def __init__(self, start_index=1): + super(Slice, self).__init__() + self.start_index = start_index + + def forward(self, x): + return x[:, self.start_index:] + + +class AddReadout(nn.Module): + def __init__(self, start_index=1): + super(AddReadout, self).__init__() + self.start_index = start_index + + def forward(self, x): + if self.start_index == 2: + readout = (x[:, 0] + x[:, 1]) / 2 + else: + readout = x[:, 0] + return x[:, self.start_index:] + readout.unsqueeze(1) + + +class ProjectReadout(nn.Module): + def __init__(self, in_features, start_index=1): + super(ProjectReadout, self).__init__() + self.start_index = start_index + + self.project = nn.Sequential(nn.Linear(2 * in_features, in_features), nn.GELU()) + + def forward(self, x): + readout = x[:, 0].unsqueeze(1).expand_as(x[:, self.start_index:]) + features = torch.cat((x[:, self.start_index:], readout), -1) + + return self.project(features) + + +class Transpose(nn.Module): + def __init__(self, dim0, dim1): + super(Transpose, self).__init__() + self.dim0 = dim0 + self.dim1 = dim1 + + def forward(self, x): + x = x.transpose(self.dim0, self.dim1) + return x + + +activations = {} + + +def get_activation(name): + def hook(model, input, output): + activations[name] = output + + return hook + + +def forward_default(pretrained, x, function_name="forward_features"): + exec(f"pretrained.model.{function_name}(x)") + + layer_1 = pretrained.activations["1"] + layer_2 = pretrained.activations["2"] + layer_3 = pretrained.activations["3"] + layer_4 = pretrained.activations["4"] + + if hasattr(pretrained, "act_postprocess1"): + layer_1 = pretrained.act_postprocess1(layer_1) + if hasattr(pretrained, "act_postprocess2"): + layer_2 = pretrained.act_postprocess2(layer_2) + if hasattr(pretrained, "act_postprocess3"): + layer_3 = pretrained.act_postprocess3(layer_3) + if hasattr(pretrained, "act_postprocess4"): + layer_4 = pretrained.act_postprocess4(layer_4) + + return layer_1, layer_2, layer_3, layer_4 + + +def forward_adapted_unflatten(pretrained, x, function_name="forward_features"): + b, c, h, w = x.shape + + exec(f"glob = pretrained.model.{function_name}(x)") + + layer_1 = pretrained.activations["1"] + layer_2 = pretrained.activations["2"] + layer_3 = pretrained.activations["3"] + layer_4 = pretrained.activations["4"] + + layer_1 = pretrained.act_postprocess1[0:2](layer_1) + layer_2 = pretrained.act_postprocess2[0:2](layer_2) + layer_3 = pretrained.act_postprocess3[0:2](layer_3) + layer_4 = pretrained.act_postprocess4[0:2](layer_4) + + unflatten = nn.Sequential( + nn.Unflatten( + 2, + torch.Size( + [ + h // pretrained.model.patch_size[1], + w // pretrained.model.patch_size[0], + ] + ), + ) + ) + + if layer_1.ndim == 3: + layer_1 = unflatten(layer_1) + if layer_2.ndim == 3: + layer_2 = unflatten(layer_2) + if layer_3.ndim == 3: + layer_3 = unflatten(layer_3) + if layer_4.ndim == 3: + layer_4 = unflatten(layer_4) + + layer_1 = pretrained.act_postprocess1[3: len(pretrained.act_postprocess1)](layer_1) + layer_2 = pretrained.act_postprocess2[3: len(pretrained.act_postprocess2)](layer_2) + layer_3 = pretrained.act_postprocess3[3: len(pretrained.act_postprocess3)](layer_3) + layer_4 = pretrained.act_postprocess4[3: len(pretrained.act_postprocess4)](layer_4) + + return layer_1, layer_2, layer_3, layer_4 + + +def get_readout_oper(vit_features, features, use_readout, start_index=1): + if use_readout == "ignore": + readout_oper = [Slice(start_index)] * len(features) + elif use_readout == "add": + readout_oper = [AddReadout(start_index)] * len(features) + elif use_readout == "project": + readout_oper = [ + ProjectReadout(vit_features, start_index) for out_feat in features + ] + else: + assert ( + False + ), "wrong operation for readout token, use_readout can be 'ignore', 'add', or 'project'" + + return readout_oper + + +def make_backbone_default( + model, + features=[96, 192, 384, 768], + size=[384, 384], + hooks=[2, 5, 8, 11], + vit_features=768, + use_readout="ignore", + start_index=1, + start_index_readout=1, +): + pretrained = nn.Module() + + pretrained.model = model + pretrained.model.blocks[hooks[0]].register_forward_hook(get_activation("1")) + pretrained.model.blocks[hooks[1]].register_forward_hook(get_activation("2")) + pretrained.model.blocks[hooks[2]].register_forward_hook(get_activation("3")) + pretrained.model.blocks[hooks[3]].register_forward_hook(get_activation("4")) + + pretrained.activations = activations + + readout_oper = get_readout_oper(vit_features, features, use_readout, start_index_readout) + + # 32, 48, 136, 384 + pretrained.act_postprocess1 = nn.Sequential( + readout_oper[0], + Transpose(1, 2), + nn.Unflatten(2, torch.Size([size[0] // 16, size[1] // 16])), + nn.Conv2d( + in_channels=vit_features, + out_channels=features[0], + kernel_size=1, + stride=1, + padding=0, + ), + nn.ConvTranspose2d( + in_channels=features[0], + out_channels=features[0], + kernel_size=4, + stride=4, + padding=0, + bias=True, + dilation=1, + groups=1, + ), + ) + + pretrained.act_postprocess2 = nn.Sequential( + readout_oper[1], + Transpose(1, 2), + nn.Unflatten(2, torch.Size([size[0] // 16, size[1] // 16])), + nn.Conv2d( + in_channels=vit_features, + out_channels=features[1], + kernel_size=1, + stride=1, + padding=0, + ), + nn.ConvTranspose2d( + in_channels=features[1], + out_channels=features[1], + kernel_size=2, + stride=2, + padding=0, + bias=True, + dilation=1, + groups=1, + ), + ) + + pretrained.act_postprocess3 = nn.Sequential( + readout_oper[2], + Transpose(1, 2), + nn.Unflatten(2, torch.Size([size[0] // 16, size[1] // 16])), + nn.Conv2d( + in_channels=vit_features, + out_channels=features[2], + kernel_size=1, + stride=1, + padding=0, + ), + ) + + pretrained.act_postprocess4 = nn.Sequential( + readout_oper[3], + Transpose(1, 2), + nn.Unflatten(2, torch.Size([size[0] // 16, size[1] // 16])), + nn.Conv2d( + in_channels=vit_features, + out_channels=features[3], + kernel_size=1, + stride=1, + padding=0, + ), + nn.Conv2d( + in_channels=features[3], + out_channels=features[3], + kernel_size=3, + stride=2, + padding=1, + ), + ) + + pretrained.model.start_index = start_index + pretrained.model.patch_size = [16, 16] + + return pretrained diff --git a/aibox/MiDaS/midas/backbones/vit.py b/aibox/MiDaS/midas/backbones/vit.py new file mode 100644 index 00000000..413f9693 --- /dev/null +++ b/aibox/MiDaS/midas/backbones/vit.py @@ -0,0 +1,221 @@ +import torch +import torch.nn as nn +import timm +import types +import math +import torch.nn.functional as F + +from .utils import (activations, forward_adapted_unflatten, get_activation, get_readout_oper, + make_backbone_default, Transpose) + + +def forward_vit(pretrained, x): + return forward_adapted_unflatten(pretrained, x, "forward_flex") + + +def _resize_pos_embed(self, posemb, gs_h, gs_w): + posemb_tok, posemb_grid = ( + posemb[:, : self.start_index], + posemb[0, self.start_index:], + ) + + gs_old = int(math.sqrt(len(posemb_grid))) + + posemb_grid = posemb_grid.reshape(1, gs_old, gs_old, -1).permute(0, 3, 1, 2) + posemb_grid = F.interpolate(posemb_grid, size=(gs_h, gs_w), mode="bilinear") + posemb_grid = posemb_grid.permute(0, 2, 3, 1).reshape(1, gs_h * gs_w, -1) + + posemb = torch.cat([posemb_tok, posemb_grid], dim=1) + + return posemb + + +def forward_flex(self, x): + b, c, h, w = x.shape + + pos_embed = self._resize_pos_embed( + self.pos_embed, h // self.patch_size[1], w // self.patch_size[0] + ) + + B = x.shape[0] + + if hasattr(self.patch_embed, "backbone"): + x = self.patch_embed.backbone(x) + if isinstance(x, (list, tuple)): + x = x[-1] # last feature if backbone outputs list/tuple of features + + x = self.patch_embed.proj(x).flatten(2).transpose(1, 2) + + if getattr(self, "dist_token", None) is not None: + cls_tokens = self.cls_token.expand( + B, -1, -1 + ) # stole cls_tokens impl from Phil Wang, thanks + dist_token = self.dist_token.expand(B, -1, -1) + x = torch.cat((cls_tokens, dist_token, x), dim=1) + else: + if self.no_embed_class: + x = x + pos_embed + cls_tokens = self.cls_token.expand( + B, -1, -1 + ) # stole cls_tokens impl from Phil Wang, thanks + x = torch.cat((cls_tokens, x), dim=1) + + if not self.no_embed_class: + x = x + pos_embed + x = self.pos_drop(x) + + for blk in self.blocks: + x = blk(x) + + x = self.norm(x) + + return x + + +def _make_vit_b16_backbone( + model, + features=[96, 192, 384, 768], + size=[384, 384], + hooks=[2, 5, 8, 11], + vit_features=768, + use_readout="ignore", + start_index=1, + start_index_readout=1, +): + pretrained = make_backbone_default(model, features, size, hooks, vit_features, use_readout, start_index, + start_index_readout) + + # We inject this function into the VisionTransformer instances so that + # we can use it with interpolated position embeddings without modifying the library source. + pretrained.model.forward_flex = types.MethodType(forward_flex, pretrained.model) + pretrained.model._resize_pos_embed = types.MethodType( + _resize_pos_embed, pretrained.model + ) + + return pretrained + + +def _make_pretrained_vitl16_384(pretrained, use_readout="ignore", hooks=None): + model = timm.create_model("vit_large_patch16_384", pretrained=pretrained) + + hooks = [5, 11, 17, 23] if hooks == None else hooks + return _make_vit_b16_backbone( + model, + features=[256, 512, 1024, 1024], + hooks=hooks, + vit_features=1024, + use_readout=use_readout, + ) + + +def _make_pretrained_vitb16_384(pretrained, use_readout="ignore", hooks=None): + model = timm.create_model("vit_base_patch16_384", pretrained=pretrained) + + hooks = [2, 5, 8, 11] if hooks == None else hooks + return _make_vit_b16_backbone( + model, features=[96, 192, 384, 768], hooks=hooks, use_readout=use_readout + ) + + +def _make_vit_b_rn50_backbone( + model, + features=[256, 512, 768, 768], + size=[384, 384], + hooks=[0, 1, 8, 11], + vit_features=768, + patch_size=[16, 16], + number_stages=2, + use_vit_only=False, + use_readout="ignore", + start_index=1, +): + pretrained = nn.Module() + + pretrained.model = model + + used_number_stages = 0 if use_vit_only else number_stages + for s in range(used_number_stages): + pretrained.model.patch_embed.backbone.stages[s].register_forward_hook( + get_activation(str(s + 1)) + ) + for s in range(used_number_stages, 4): + pretrained.model.blocks[hooks[s]].register_forward_hook(get_activation(str(s + 1))) + + pretrained.activations = activations + + readout_oper = get_readout_oper(vit_features, features, use_readout, start_index) + + for s in range(used_number_stages): + value = nn.Sequential(nn.Identity(), nn.Identity(), nn.Identity()) + exec(f"pretrained.act_postprocess{s + 1}=value") + for s in range(used_number_stages, 4): + if s < number_stages: + final_layer = nn.ConvTranspose2d( + in_channels=features[s], + out_channels=features[s], + kernel_size=4 // (2 ** s), + stride=4 // (2 ** s), + padding=0, + bias=True, + dilation=1, + groups=1, + ) + elif s > number_stages: + final_layer = nn.Conv2d( + in_channels=features[3], + out_channels=features[3], + kernel_size=3, + stride=2, + padding=1, + ) + else: + final_layer = None + + layers = [ + readout_oper[s], + Transpose(1, 2), + nn.Unflatten(2, torch.Size([size[0] // 16, size[1] // 16])), + nn.Conv2d( + in_channels=vit_features, + out_channels=features[s], + kernel_size=1, + stride=1, + padding=0, + ), + ] + if final_layer is not None: + layers.append(final_layer) + + value = nn.Sequential(*layers) + exec(f"pretrained.act_postprocess{s + 1}=value") + + pretrained.model.start_index = start_index + pretrained.model.patch_size = patch_size + + # We inject this function into the VisionTransformer instances so that + # we can use it with interpolated position embeddings without modifying the library source. + pretrained.model.forward_flex = types.MethodType(forward_flex, pretrained.model) + + # We inject this function into the VisionTransformer instances so that + # we can use it with interpolated position embeddings without modifying the library source. + pretrained.model._resize_pos_embed = types.MethodType( + _resize_pos_embed, pretrained.model + ) + + return pretrained + + +def _make_pretrained_vitb_rn50_384( + pretrained, use_readout="ignore", hooks=None, use_vit_only=False +): + model = timm.create_model("vit_base_resnet50_384", pretrained=pretrained) + + hooks = [0, 1, 8, 11] if hooks == None else hooks + return _make_vit_b_rn50_backbone( + model, + features=[256, 512, 768, 768], + size=[384, 384], + hooks=hooks, + use_vit_only=use_vit_only, + use_readout=use_readout, + ) diff --git a/aibox/MiDaS/midas/base_model.py b/aibox/MiDaS/midas/base_model.py new file mode 100644 index 00000000..5cf43023 --- /dev/null +++ b/aibox/MiDaS/midas/base_model.py @@ -0,0 +1,16 @@ +import torch + + +class BaseModel(torch.nn.Module): + def load(self, path): + """Load model from file. + + Args: + path (str): file path + """ + parameters = torch.load(path, map_location=torch.device('cpu')) + + if "optimizer" in parameters: + parameters = parameters["model"] + + self.load_state_dict(parameters) diff --git a/aibox/MiDaS/midas/blocks.py b/aibox/MiDaS/midas/blocks.py new file mode 100644 index 00000000..6d87a006 --- /dev/null +++ b/aibox/MiDaS/midas/blocks.py @@ -0,0 +1,439 @@ +import torch +import torch.nn as nn + +from .backbones.beit import ( + _make_pretrained_beitl16_512, + _make_pretrained_beitl16_384, + _make_pretrained_beitb16_384, + forward_beit, +) +from .backbones.swin_common import ( + forward_swin, +) +from .backbones.swin2 import ( + _make_pretrained_swin2l24_384, + _make_pretrained_swin2b24_384, + _make_pretrained_swin2t16_256, +) +from .backbones.swin import ( + _make_pretrained_swinl12_384, +) +from .backbones.levit import ( + _make_pretrained_levit_384, + forward_levit, +) +from .backbones.vit import ( + _make_pretrained_vitb_rn50_384, + _make_pretrained_vitl16_384, + _make_pretrained_vitb16_384, + forward_vit, +) + +def _make_encoder(backbone, features, use_pretrained, groups=1, expand=False, exportable=True, hooks=None, + use_vit_only=False, use_readout="ignore", in_features=[96, 256, 512, 1024]): + if backbone == "beitl16_512": + pretrained = _make_pretrained_beitl16_512( + use_pretrained, hooks=hooks, use_readout=use_readout + ) + scratch = _make_scratch( + [256, 512, 1024, 1024], features, groups=groups, expand=expand + ) # BEiT_512-L (backbone) + elif backbone == "beitl16_384": + pretrained = _make_pretrained_beitl16_384( + use_pretrained, hooks=hooks, use_readout=use_readout + ) + scratch = _make_scratch( + [256, 512, 1024, 1024], features, groups=groups, expand=expand + ) # BEiT_384-L (backbone) + elif backbone == "beitb16_384": + pretrained = _make_pretrained_beitb16_384( + use_pretrained, hooks=hooks, use_readout=use_readout + ) + scratch = _make_scratch( + [96, 192, 384, 768], features, groups=groups, expand=expand + ) # BEiT_384-B (backbone) + elif backbone == "swin2l24_384": + pretrained = _make_pretrained_swin2l24_384( + use_pretrained, hooks=hooks + ) + scratch = _make_scratch( + [192, 384, 768, 1536], features, groups=groups, expand=expand + ) # Swin2-L/12to24 (backbone) + elif backbone == "swin2b24_384": + pretrained = _make_pretrained_swin2b24_384( + use_pretrained, hooks=hooks + ) + scratch = _make_scratch( + [128, 256, 512, 1024], features, groups=groups, expand=expand + ) # Swin2-B/12to24 (backbone) + elif backbone == "swin2t16_256": + pretrained = _make_pretrained_swin2t16_256( + use_pretrained, hooks=hooks + ) + scratch = _make_scratch( + [96, 192, 384, 768], features, groups=groups, expand=expand + ) # Swin2-T/16 (backbone) + elif backbone == "swinl12_384": + pretrained = _make_pretrained_swinl12_384( + use_pretrained, hooks=hooks + ) + scratch = _make_scratch( + [192, 384, 768, 1536], features, groups=groups, expand=expand + ) # Swin-L/12 (backbone) + elif backbone == "next_vit_large_6m": + from .backbones.next_vit import _make_pretrained_next_vit_large_6m + pretrained = _make_pretrained_next_vit_large_6m(hooks=hooks) + scratch = _make_scratch( + in_features, features, groups=groups, expand=expand + ) # Next-ViT-L on ImageNet-1K-6M (backbone) + elif backbone == "levit_384": + pretrained = _make_pretrained_levit_384( + use_pretrained, hooks=hooks + ) + scratch = _make_scratch( + [384, 512, 768], features, groups=groups, expand=expand + ) # LeViT 384 (backbone) + elif backbone == "vitl16_384": + pretrained = _make_pretrained_vitl16_384( + use_pretrained, hooks=hooks, use_readout=use_readout + ) + scratch = _make_scratch( + [256, 512, 1024, 1024], features, groups=groups, expand=expand + ) # ViT-L/16 - 85.0% Top1 (backbone) + elif backbone == "vitb_rn50_384": + pretrained = _make_pretrained_vitb_rn50_384( + use_pretrained, + hooks=hooks, + use_vit_only=use_vit_only, + use_readout=use_readout, + ) + scratch = _make_scratch( + [256, 512, 768, 768], features, groups=groups, expand=expand + ) # ViT-H/16 - 85.0% Top1 (backbone) + elif backbone == "vitb16_384": + pretrained = _make_pretrained_vitb16_384( + use_pretrained, hooks=hooks, use_readout=use_readout + ) + scratch = _make_scratch( + [96, 192, 384, 768], features, groups=groups, expand=expand + ) # ViT-B/16 - 84.6% Top1 (backbone) + elif backbone == "resnext101_wsl": + pretrained = _make_pretrained_resnext101_wsl(use_pretrained) + scratch = _make_scratch([256, 512, 1024, 2048], features, groups=groups, expand=expand) # efficientnet_lite3 + elif backbone == "efficientnet_lite3": + pretrained = _make_pretrained_efficientnet_lite3(use_pretrained, exportable=exportable) + scratch = _make_scratch([32, 48, 136, 384], features, groups=groups, expand=expand) # efficientnet_lite3 + else: + print(f"Backbone '{backbone}' not implemented") + assert False + + return pretrained, scratch + + +def _make_scratch(in_shape, out_shape, groups=1, expand=False): + scratch = nn.Module() + + out_shape1 = out_shape + out_shape2 = out_shape + out_shape3 = out_shape + if len(in_shape) >= 4: + out_shape4 = out_shape + + if expand: + out_shape1 = out_shape + out_shape2 = out_shape*2 + out_shape3 = out_shape*4 + if len(in_shape) >= 4: + out_shape4 = out_shape*8 + + scratch.layer1_rn = nn.Conv2d( + in_shape[0], out_shape1, kernel_size=3, stride=1, padding=1, bias=False, groups=groups + ) + scratch.layer2_rn = nn.Conv2d( + in_shape[1], out_shape2, kernel_size=3, stride=1, padding=1, bias=False, groups=groups + ) + scratch.layer3_rn = nn.Conv2d( + in_shape[2], out_shape3, kernel_size=3, stride=1, padding=1, bias=False, groups=groups + ) + if len(in_shape) >= 4: + scratch.layer4_rn = nn.Conv2d( + in_shape[3], out_shape4, kernel_size=3, stride=1, padding=1, bias=False, groups=groups + ) + + return scratch + + +def _make_pretrained_efficientnet_lite3(use_pretrained, exportable=False): + efficientnet = torch.hub.load( + "rwightman/gen-efficientnet-pytorch", + "tf_efficientnet_lite3", + pretrained=use_pretrained, + exportable=exportable + ) + return _make_efficientnet_backbone(efficientnet) + + +def _make_efficientnet_backbone(effnet): + pretrained = nn.Module() + + pretrained.layer1 = nn.Sequential( + effnet.conv_stem, effnet.bn1, effnet.act1, *effnet.blocks[0:2] + ) + pretrained.layer2 = nn.Sequential(*effnet.blocks[2:3]) + pretrained.layer3 = nn.Sequential(*effnet.blocks[3:5]) + pretrained.layer4 = nn.Sequential(*effnet.blocks[5:9]) + + return pretrained + + +def _make_resnet_backbone(resnet): + pretrained = nn.Module() + pretrained.layer1 = nn.Sequential( + resnet.conv1, resnet.bn1, resnet.relu, resnet.maxpool, resnet.layer1 + ) + + pretrained.layer2 = resnet.layer2 + pretrained.layer3 = resnet.layer3 + pretrained.layer4 = resnet.layer4 + + return pretrained + + +def _make_pretrained_resnext101_wsl(use_pretrained): + resnet = torch.hub.load("facebookresearch/WSL-Images", "resnext101_32x8d_wsl") + return _make_resnet_backbone(resnet) + + + +class Interpolate(nn.Module): + """Interpolation module. + """ + + def __init__(self, scale_factor, mode, align_corners=False): + """Init. + + Args: + scale_factor (float): scaling + mode (str): interpolation mode + """ + super(Interpolate, self).__init__() + + self.interp = nn.functional.interpolate + self.scale_factor = scale_factor + self.mode = mode + self.align_corners = align_corners + + def forward(self, x): + """Forward pass. + + Args: + x (tensor): input + + Returns: + tensor: interpolated data + """ + + x = self.interp( + x, scale_factor=self.scale_factor, mode=self.mode, align_corners=self.align_corners + ) + + return x + + +class ResidualConvUnit(nn.Module): + """Residual convolution module. + """ + + def __init__(self, features): + """Init. + + Args: + features (int): number of features + """ + super().__init__() + + self.conv1 = nn.Conv2d( + features, features, kernel_size=3, stride=1, padding=1, bias=True + ) + + self.conv2 = nn.Conv2d( + features, features, kernel_size=3, stride=1, padding=1, bias=True + ) + + self.relu = nn.ReLU(inplace=True) + + def forward(self, x): + """Forward pass. + + Args: + x (tensor): input + + Returns: + tensor: output + """ + out = self.relu(x) + out = self.conv1(out) + out = self.relu(out) + out = self.conv2(out) + + return out + x + + +class FeatureFusionBlock(nn.Module): + """Feature fusion block. + """ + + def __init__(self, features): + """Init. + + Args: + features (int): number of features + """ + super(FeatureFusionBlock, self).__init__() + + self.resConfUnit1 = ResidualConvUnit(features) + self.resConfUnit2 = ResidualConvUnit(features) + + def forward(self, *xs): + """Forward pass. + + Returns: + tensor: output + """ + output = xs[0] + + if len(xs) == 2: + output += self.resConfUnit1(xs[1]) + + output = self.resConfUnit2(output) + + output = nn.functional.interpolate( + output, scale_factor=2, mode="bilinear", align_corners=True + ) + + return output + + + + +class ResidualConvUnit_custom(nn.Module): + """Residual convolution module. + """ + + def __init__(self, features, activation, bn): + """Init. + + Args: + features (int): number of features + """ + super().__init__() + + self.bn = bn + + self.groups=1 + + self.conv1 = nn.Conv2d( + features, features, kernel_size=3, stride=1, padding=1, bias=True, groups=self.groups + ) + + self.conv2 = nn.Conv2d( + features, features, kernel_size=3, stride=1, padding=1, bias=True, groups=self.groups + ) + + if self.bn==True: + self.bn1 = nn.BatchNorm2d(features) + self.bn2 = nn.BatchNorm2d(features) + + self.activation = activation + + self.skip_add = nn.quantized.FloatFunctional() + + def forward(self, x): + """Forward pass. + + Args: + x (tensor): input + + Returns: + tensor: output + """ + + out = self.activation(x) + out = self.conv1(out) + if self.bn==True: + out = self.bn1(out) + + out = self.activation(out) + out = self.conv2(out) + if self.bn==True: + out = self.bn2(out) + + if self.groups > 1: + out = self.conv_merge(out) + + return self.skip_add.add(out, x) + + # return out + x + + +class FeatureFusionBlock_custom(nn.Module): + """Feature fusion block. + """ + + def __init__(self, features, activation, deconv=False, bn=False, expand=False, align_corners=True, size=None): + """Init. + + Args: + features (int): number of features + """ + super(FeatureFusionBlock_custom, self).__init__() + + self.deconv = deconv + self.align_corners = align_corners + + self.groups=1 + + self.expand = expand + out_features = features + if self.expand==True: + out_features = features//2 + + self.out_conv = nn.Conv2d(features, out_features, kernel_size=1, stride=1, padding=0, bias=True, groups=1) + + self.resConfUnit1 = ResidualConvUnit_custom(features, activation, bn) + self.resConfUnit2 = ResidualConvUnit_custom(features, activation, bn) + + self.skip_add = nn.quantized.FloatFunctional() + + self.size=size + + def forward(self, *xs, size=None): + """Forward pass. + + Returns: + tensor: output + """ + output = xs[0] + + if len(xs) == 2: + res = self.resConfUnit1(xs[1]) + output = self.skip_add.add(output, res) + # output += res + + output = self.resConfUnit2(output) + + if (size is None) and (self.size is None): + modifier = {"scale_factor": 2} + elif size is None: + modifier = {"size": self.size} + else: + modifier = {"size": size} + + output = nn.functional.interpolate( + output, **modifier, mode="bilinear", align_corners=self.align_corners + ) + + output = self.out_conv(output) + + return output + diff --git a/aibox/MiDaS/midas/dpt_depth.py b/aibox/MiDaS/midas/dpt_depth.py new file mode 100644 index 00000000..3129d09c --- /dev/null +++ b/aibox/MiDaS/midas/dpt_depth.py @@ -0,0 +1,166 @@ +import torch +import torch.nn as nn + +from .base_model import BaseModel +from .blocks import ( + FeatureFusionBlock_custom, + Interpolate, + _make_encoder, + forward_beit, + forward_swin, + forward_levit, + forward_vit, +) +from .backbones.levit import stem_b4_transpose +from timm.models.layers import get_act_layer + + +def _make_fusion_block(features, use_bn, size = None): + return FeatureFusionBlock_custom( + features, + nn.ReLU(False), + deconv=False, + bn=use_bn, + expand=False, + align_corners=True, + size=size, + ) + + +class DPT(BaseModel): + def __init__( + self, + head, + features=256, + backbone="vitb_rn50_384", + readout="project", + channels_last=False, + use_bn=False, + **kwargs + ): + + super(DPT, self).__init__() + + self.channels_last = channels_last + + # For the Swin, Swin 2, LeViT and Next-ViT Transformers, the hierarchical architectures prevent setting the + # hooks freely. Instead, the hooks have to be chosen according to the ranges specified in the comments. + hooks = { + "beitl16_512": [5, 11, 17, 23], + "beitl16_384": [5, 11, 17, 23], + "beitb16_384": [2, 5, 8, 11], + "swin2l24_384": [1, 1, 17, 1], # Allowed ranges: [0, 1], [0, 1], [ 0, 17], [ 0, 1] + "swin2b24_384": [1, 1, 17, 1], # [0, 1], [0, 1], [ 0, 17], [ 0, 1] + "swin2t16_256": [1, 1, 5, 1], # [0, 1], [0, 1], [ 0, 5], [ 0, 1] + "swinl12_384": [1, 1, 17, 1], # [0, 1], [0, 1], [ 0, 17], [ 0, 1] + "next_vit_large_6m": [2, 6, 36, 39], # [0, 2], [3, 6], [ 7, 36], [37, 39] + "levit_384": [3, 11, 21], # [0, 3], [6, 11], [14, 21] + "vitb_rn50_384": [0, 1, 8, 11], + "vitb16_384": [2, 5, 8, 11], + "vitl16_384": [5, 11, 17, 23], + }[backbone] + + if "next_vit" in backbone: + in_features = { + "next_vit_large_6m": [96, 256, 512, 1024], + }[backbone] + else: + in_features = None + + # Instantiate backbone and reassemble blocks + self.pretrained, self.scratch = _make_encoder( + backbone, + features, + False, # Set to true of you want to train from scratch, uses ImageNet weights + groups=1, + expand=False, + exportable=False, + hooks=hooks, + use_readout=readout, + in_features=in_features, + ) + + self.number_layers = len(hooks) if hooks is not None else 4 + size_refinenet3 = None + self.scratch.stem_transpose = None + + if "beit" in backbone: + self.forward_transformer = forward_beit + elif "swin" in backbone: + self.forward_transformer = forward_swin + elif "next_vit" in backbone: + from .backbones.next_vit import forward_next_vit + self.forward_transformer = forward_next_vit + elif "levit" in backbone: + self.forward_transformer = forward_levit + size_refinenet3 = 7 + self.scratch.stem_transpose = stem_b4_transpose(256, 128, get_act_layer("hard_swish")) + else: + self.forward_transformer = forward_vit + + self.scratch.refinenet1 = _make_fusion_block(features, use_bn) + self.scratch.refinenet2 = _make_fusion_block(features, use_bn) + self.scratch.refinenet3 = _make_fusion_block(features, use_bn, size_refinenet3) + if self.number_layers >= 4: + self.scratch.refinenet4 = _make_fusion_block(features, use_bn) + + self.scratch.output_conv = head + + + def forward(self, x): + if self.channels_last == True: + x.contiguous(memory_format=torch.channels_last) + + layers = self.forward_transformer(self.pretrained, x) + if self.number_layers == 3: + layer_1, layer_2, layer_3 = layers + else: + layer_1, layer_2, layer_3, layer_4 = layers + + layer_1_rn = self.scratch.layer1_rn(layer_1) + layer_2_rn = self.scratch.layer2_rn(layer_2) + layer_3_rn = self.scratch.layer3_rn(layer_3) + if self.number_layers >= 4: + layer_4_rn = self.scratch.layer4_rn(layer_4) + + if self.number_layers == 3: + path_3 = self.scratch.refinenet3(layer_3_rn, size=layer_2_rn.shape[2:]) + else: + path_4 = self.scratch.refinenet4(layer_4_rn, size=layer_3_rn.shape[2:]) + path_3 = self.scratch.refinenet3(path_4, layer_3_rn, size=layer_2_rn.shape[2:]) + path_2 = self.scratch.refinenet2(path_3, layer_2_rn, size=layer_1_rn.shape[2:]) + path_1 = self.scratch.refinenet1(path_2, layer_1_rn) + + if self.scratch.stem_transpose is not None: + path_1 = self.scratch.stem_transpose(path_1) + + out = self.scratch.output_conv(path_1) + + return out + + +class DPTDepthModel(DPT): + def __init__(self, path=None, non_negative=True, **kwargs): + features = kwargs["features"] if "features" in kwargs else 256 + head_features_1 = kwargs["head_features_1"] if "head_features_1" in kwargs else features + head_features_2 = kwargs["head_features_2"] if "head_features_2" in kwargs else 32 + kwargs.pop("head_features_1", None) + kwargs.pop("head_features_2", None) + + head = nn.Sequential( + nn.Conv2d(head_features_1, head_features_1 // 2, kernel_size=3, stride=1, padding=1), + Interpolate(scale_factor=2, mode="bilinear", align_corners=True), + nn.Conv2d(head_features_1 // 2, head_features_2, kernel_size=3, stride=1, padding=1), + nn.ReLU(True), + nn.Conv2d(head_features_2, 1, kernel_size=1, stride=1, padding=0), + nn.ReLU(True) if non_negative else nn.Identity(), + nn.Identity(), + ) + + super().__init__(head, **kwargs) + + if path is not None: + self.load(path) + + def forward(self, x): + return super().forward(x).squeeze(dim=1) diff --git a/aibox/MiDaS/midas/midas_net.py b/aibox/MiDaS/midas/midas_net.py new file mode 100644 index 00000000..8a954977 --- /dev/null +++ b/aibox/MiDaS/midas/midas_net.py @@ -0,0 +1,76 @@ +"""MidashNet: Network for monocular depth estimation trained by mixing several datasets. +This file contains code that is adapted from +https://github.com/thomasjpfan/pytorch_refinenet/blob/master/pytorch_refinenet/refinenet/refinenet_4cascade.py +""" +import torch +import torch.nn as nn + +from .base_model import BaseModel +from .blocks import FeatureFusionBlock, Interpolate, _make_encoder + + +class MidasNet(BaseModel): + """Network for monocular depth estimation. + """ + + def __init__(self, path=None, features=256, non_negative=True): + """Init. + + Args: + path (str, optional): Path to saved model. Defaults to None. + features (int, optional): Number of features. Defaults to 256. + backbone (str, optional): Backbone network for encoder. Defaults to resnet50 + """ + print("Loading weights: ", path) + + super(MidasNet, self).__init__() + + use_pretrained = False if path is None else True + + self.pretrained, self.scratch = _make_encoder(backbone="resnext101_wsl", features=features, use_pretrained=use_pretrained) + + self.scratch.refinenet4 = FeatureFusionBlock(features) + self.scratch.refinenet3 = FeatureFusionBlock(features) + self.scratch.refinenet2 = FeatureFusionBlock(features) + self.scratch.refinenet1 = FeatureFusionBlock(features) + + self.scratch.output_conv = nn.Sequential( + nn.Conv2d(features, 128, kernel_size=3, stride=1, padding=1), + Interpolate(scale_factor=2, mode="bilinear"), + nn.Conv2d(128, 32, kernel_size=3, stride=1, padding=1), + nn.ReLU(True), + nn.Conv2d(32, 1, kernel_size=1, stride=1, padding=0), + nn.ReLU(True) if non_negative else nn.Identity(), + ) + + if path: + self.load(path) + + def forward(self, x): + """Forward pass. + + Args: + x (tensor): input data (image) + + Returns: + tensor: depth + """ + + layer_1 = self.pretrained.layer1(x) + layer_2 = self.pretrained.layer2(layer_1) + layer_3 = self.pretrained.layer3(layer_2) + layer_4 = self.pretrained.layer4(layer_3) + + layer_1_rn = self.scratch.layer1_rn(layer_1) + layer_2_rn = self.scratch.layer2_rn(layer_2) + layer_3_rn = self.scratch.layer3_rn(layer_3) + layer_4_rn = self.scratch.layer4_rn(layer_4) + + path_4 = self.scratch.refinenet4(layer_4_rn) + path_3 = self.scratch.refinenet3(path_4, layer_3_rn) + path_2 = self.scratch.refinenet2(path_3, layer_2_rn) + path_1 = self.scratch.refinenet1(path_2, layer_1_rn) + + out = self.scratch.output_conv(path_1) + + return torch.squeeze(out, dim=1) diff --git a/aibox/MiDaS/midas/midas_net_custom.py b/aibox/MiDaS/midas/midas_net_custom.py new file mode 100644 index 00000000..50e4acb5 --- /dev/null +++ b/aibox/MiDaS/midas/midas_net_custom.py @@ -0,0 +1,128 @@ +"""MidashNet: Network for monocular depth estimation trained by mixing several datasets. +This file contains code that is adapted from +https://github.com/thomasjpfan/pytorch_refinenet/blob/master/pytorch_refinenet/refinenet/refinenet_4cascade.py +""" +import torch +import torch.nn as nn + +from .base_model import BaseModel +from .blocks import FeatureFusionBlock, FeatureFusionBlock_custom, Interpolate, _make_encoder + + +class MidasNet_small(BaseModel): + """Network for monocular depth estimation. + """ + + def __init__(self, path=None, features=64, backbone="efficientnet_lite3", non_negative=True, exportable=True, channels_last=False, align_corners=True, + blocks={'expand': True}): + """Init. + + Args: + path (str, optional): Path to saved model. Defaults to None. + features (int, optional): Number of features. Defaults to 256. + backbone (str, optional): Backbone network for encoder. Defaults to resnet50 + """ + print("Loading weights: ", path) + + super(MidasNet_small, self).__init__() + + use_pretrained = False if path else True + + self.channels_last = channels_last + self.blocks = blocks + self.backbone = backbone + + self.groups = 1 + + features1=features + features2=features + features3=features + features4=features + self.expand = False + if "expand" in self.blocks and self.blocks['expand'] == True: + self.expand = True + features1=features + features2=features*2 + features3=features*4 + features4=features*8 + + self.pretrained, self.scratch = _make_encoder(self.backbone, features, use_pretrained, groups=self.groups, expand=self.expand, exportable=exportable) + + self.scratch.activation = nn.ReLU(False) + + self.scratch.refinenet4 = FeatureFusionBlock_custom(features4, self.scratch.activation, deconv=False, bn=False, expand=self.expand, align_corners=align_corners) + self.scratch.refinenet3 = FeatureFusionBlock_custom(features3, self.scratch.activation, deconv=False, bn=False, expand=self.expand, align_corners=align_corners) + self.scratch.refinenet2 = FeatureFusionBlock_custom(features2, self.scratch.activation, deconv=False, bn=False, expand=self.expand, align_corners=align_corners) + self.scratch.refinenet1 = FeatureFusionBlock_custom(features1, self.scratch.activation, deconv=False, bn=False, align_corners=align_corners) + + + self.scratch.output_conv = nn.Sequential( + nn.Conv2d(features, features//2, kernel_size=3, stride=1, padding=1, groups=self.groups), + Interpolate(scale_factor=2, mode="bilinear"), + nn.Conv2d(features//2, 32, kernel_size=3, stride=1, padding=1), + self.scratch.activation, + nn.Conv2d(32, 1, kernel_size=1, stride=1, padding=0), + nn.ReLU(True) if non_negative else nn.Identity(), + nn.Identity(), + ) + + if path: + self.load(path) + + + def forward(self, x): + """Forward pass. + + Args: + x (tensor): input data (image) + + Returns: + tensor: depth + """ + if self.channels_last==True: + print("self.channels_last = ", self.channels_last) + x.contiguous(memory_format=torch.channels_last) + + + layer_1 = self.pretrained.layer1(x) + layer_2 = self.pretrained.layer2(layer_1) + layer_3 = self.pretrained.layer3(layer_2) + layer_4 = self.pretrained.layer4(layer_3) + + layer_1_rn = self.scratch.layer1_rn(layer_1) + layer_2_rn = self.scratch.layer2_rn(layer_2) + layer_3_rn = self.scratch.layer3_rn(layer_3) + layer_4_rn = self.scratch.layer4_rn(layer_4) + + + path_4 = self.scratch.refinenet4(layer_4_rn) + path_3 = self.scratch.refinenet3(path_4, layer_3_rn) + path_2 = self.scratch.refinenet2(path_3, layer_2_rn) + path_1 = self.scratch.refinenet1(path_2, layer_1_rn) + + out = self.scratch.output_conv(path_1) + + return torch.squeeze(out, dim=1) + + + +def fuse_model(m): + prev_previous_type = nn.Identity() + prev_previous_name = '' + previous_type = nn.Identity() + previous_name = '' + for name, module in m.named_modules(): + if prev_previous_type == nn.Conv2d and previous_type == nn.BatchNorm2d and type(module) == nn.ReLU: + # print("FUSED ", prev_previous_name, previous_name, name) + torch.quantization.fuse_modules(m, [prev_previous_name, previous_name, name], inplace=True) + elif prev_previous_type == nn.Conv2d and previous_type == nn.BatchNorm2d: + # print("FUSED ", prev_previous_name, previous_name) + torch.quantization.fuse_modules(m, [prev_previous_name, previous_name], inplace=True) + # elif previous_type == nn.Conv2d and type(module) == nn.ReLU: + # print("FUSED ", previous_name, name) + # torch.quantization.fuse_modules(m, [previous_name, name], inplace=True) + + prev_previous_type = previous_type + prev_previous_name = previous_name + previous_type = type(module) + previous_name = name \ No newline at end of file diff --git a/aibox/MiDaS/midas/model_loader.py b/aibox/MiDaS/midas/model_loader.py new file mode 100644 index 00000000..f1cd1f2d --- /dev/null +++ b/aibox/MiDaS/midas/model_loader.py @@ -0,0 +1,242 @@ +import cv2 +import torch + +from midas.dpt_depth import DPTDepthModel +from midas.midas_net import MidasNet +from midas.midas_net_custom import MidasNet_small +from midas.transforms import Resize, NormalizeImage, PrepareForNet + +from torchvision.transforms import Compose + +default_models = { + "dpt_beit_large_512": "weights/dpt_beit_large_512.pt", + "dpt_beit_large_384": "weights/dpt_beit_large_384.pt", + "dpt_beit_base_384": "weights/dpt_beit_base_384.pt", + "dpt_swin2_large_384": "weights/dpt_swin2_large_384.pt", + "dpt_swin2_base_384": "weights/dpt_swin2_base_384.pt", + "dpt_swin2_tiny_256": "weights/dpt_swin2_tiny_256.pt", + "dpt_swin_large_384": "weights/dpt_swin_large_384.pt", + "dpt_next_vit_large_384": "weights/dpt_next_vit_large_384.pt", + "dpt_levit_224": "weights/dpt_levit_224.pt", + "dpt_large_384": "weights/dpt_large_384.pt", + "dpt_hybrid_384": "weights/dpt_hybrid_384.pt", + "midas_v21_384": "weights/midas_v21_384.pt", + "midas_v21_small_256": "weights/midas_v21_small_256.pt", + "openvino_midas_v21_small_256": "weights/openvino_midas_v21_small_256.xml", +} + + +def load_model(device, model_path, model_type="dpt_large_384", optimize=True, height=None, square=False): + """Load the specified network. + + Args: + device (device): the torch device used + model_path (str): path to saved model + model_type (str): the type of the model to be loaded + optimize (bool): optimize the model to half-integer on CUDA? + height (int): inference encoder image height + square (bool): resize to a square resolution? + + Returns: + The loaded network, the transform which prepares images as input to the network and the dimensions of the + network input + """ + if "openvino" in model_type: + from openvino.runtime import Core + + keep_aspect_ratio = not square + + if model_type == "dpt_beit_large_512": + model = DPTDepthModel( + path=model_path, + backbone="beitl16_512", + non_negative=True, + ) + net_w, net_h = 512, 512 + resize_mode = "minimal" + normalization = NormalizeImage(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]) + + elif model_type == "dpt_beit_large_384": + model = DPTDepthModel( + path=model_path, + backbone="beitl16_384", + non_negative=True, + ) + net_w, net_h = 384, 384 + resize_mode = "minimal" + normalization = NormalizeImage(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]) + + elif model_type == "dpt_beit_base_384": + model = DPTDepthModel( + path=model_path, + backbone="beitb16_384", + non_negative=True, + ) + net_w, net_h = 384, 384 + resize_mode = "minimal" + normalization = NormalizeImage(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]) + + elif model_type == "dpt_swin2_large_384": + model = DPTDepthModel( + path=model_path, + backbone="swin2l24_384", + non_negative=True, + ) + net_w, net_h = 384, 384 + keep_aspect_ratio = False + resize_mode = "minimal" + normalization = NormalizeImage(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]) + + elif model_type == "dpt_swin2_base_384": + model = DPTDepthModel( + path=model_path, + backbone="swin2b24_384", + non_negative=True, + ) + net_w, net_h = 384, 384 + keep_aspect_ratio = False + resize_mode = "minimal" + normalization = NormalizeImage(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]) + + elif model_type == "dpt_swin2_tiny_256": + model = DPTDepthModel( + path=model_path, + backbone="swin2t16_256", + non_negative=True, + ) + net_w, net_h = 256, 256 + keep_aspect_ratio = False + resize_mode = "minimal" + normalization = NormalizeImage(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]) + + elif model_type == "dpt_swin_large_384": + model = DPTDepthModel( + path=model_path, + backbone="swinl12_384", + non_negative=True, + ) + net_w, net_h = 384, 384 + keep_aspect_ratio = False + resize_mode = "minimal" + normalization = NormalizeImage(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]) + + elif model_type == "dpt_next_vit_large_384": + model = DPTDepthModel( + path=model_path, + backbone="next_vit_large_6m", + non_negative=True, + ) + net_w, net_h = 384, 384 + resize_mode = "minimal" + normalization = NormalizeImage(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]) + + # We change the notation from dpt_levit_224 (MiDaS notation) to levit_384 (timm notation) here, where the 224 refers + # to the resolution 224x224 used by LeViT and 384 is the first entry of the embed_dim, see _cfg and model_cfgs of + # https://github.com/rwightman/pytorch-image-models/blob/main/timm/models/levit.py + # (commit id: 927f031293a30afb940fff0bee34b85d9c059b0e) + elif model_type == "dpt_levit_224": + model = DPTDepthModel( + path=model_path, + backbone="levit_384", + non_negative=True, + head_features_1=64, + head_features_2=8, + ) + net_w, net_h = 224, 224 + keep_aspect_ratio = False + resize_mode = "minimal" + normalization = NormalizeImage(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]) + + elif model_type == "dpt_large_384": + model = DPTDepthModel( + path=model_path, + backbone="vitl16_384", + non_negative=True, + ) + net_w, net_h = 384, 384 + resize_mode = "minimal" + normalization = NormalizeImage(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]) + + elif model_type == "dpt_hybrid_384": + model = DPTDepthModel( + path=model_path, + backbone="vitb_rn50_384", + non_negative=True, + ) + net_w, net_h = 384, 384 + resize_mode = "minimal" + normalization = NormalizeImage(mean=[0.5, 0.5, 0.5], std=[0.5, 0.5, 0.5]) + + elif model_type == "midas_v21_384": + model = MidasNet(model_path, non_negative=True) + net_w, net_h = 384, 384 + resize_mode = "upper_bound" + normalization = NormalizeImage( + mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225] + ) + + elif model_type == "midas_v21_small_256": + model = MidasNet_small(model_path, features=64, backbone="efficientnet_lite3", exportable=True, + non_negative=True, blocks={'expand': True}) + net_w, net_h = 256, 256 + resize_mode = "upper_bound" + normalization = NormalizeImage( + mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225] + ) + + elif model_type == "openvino_midas_v21_small_256": + ie = Core() + uncompiled_model = ie.read_model(model=model_path) + model = ie.compile_model(uncompiled_model, "CPU") + net_w, net_h = 256, 256 + resize_mode = "upper_bound" + normalization = NormalizeImage( + mean=[0.485, 0.456, 0.406], std=[0.229, 0.224, 0.225] + ) + + else: + print(f"model_type '{model_type}' not implemented, use: --model_type large") + assert False + + if not "openvino" in model_type: + print("Model loaded, number of parameters = {:.0f}M".format(sum(p.numel() for p in model.parameters()) / 1e6)) + else: + print("Model loaded, optimized with OpenVINO") + + if "openvino" in model_type: + keep_aspect_ratio = False + + if height is not None: + net_w, net_h = height, height + + transform = Compose( + [ + Resize( + net_w, + net_h, + resize_target=None, + keep_aspect_ratio=keep_aspect_ratio, + ensure_multiple_of=32, + resize_method=resize_mode, + image_interpolation_method=cv2.INTER_CUBIC, + ), + normalization, + PrepareForNet(), + ] + ) + + if not "openvino" in model_type: + model.eval() + + if optimize and (device == torch.device("cuda")): + if not "openvino" in model_type: + model = model.to(memory_format=torch.channels_last) + model = model.half() + else: + print("Error: OpenVINO models are already optimized. No optimization to half-float possible.") + exit() + + if not "openvino" in model_type: + model.to(device) + + return model, transform, net_w, net_h diff --git a/aibox/MiDaS/midas/transforms.py b/aibox/MiDaS/midas/transforms.py new file mode 100644 index 00000000..350cbc11 --- /dev/null +++ b/aibox/MiDaS/midas/transforms.py @@ -0,0 +1,234 @@ +import numpy as np +import cv2 +import math + + +def apply_min_size(sample, size, image_interpolation_method=cv2.INTER_AREA): + """Rezise the sample to ensure the given size. Keeps aspect ratio. + + Args: + sample (dict): sample + size (tuple): image size + + Returns: + tuple: new size + """ + shape = list(sample["disparity"].shape) + + if shape[0] >= size[0] and shape[1] >= size[1]: + return sample + + scale = [0, 0] + scale[0] = size[0] / shape[0] + scale[1] = size[1] / shape[1] + + scale = max(scale) + + shape[0] = math.ceil(scale * shape[0]) + shape[1] = math.ceil(scale * shape[1]) + + # resize + sample["image"] = cv2.resize( + sample["image"], tuple(shape[::-1]), interpolation=image_interpolation_method + ) + + sample["disparity"] = cv2.resize( + sample["disparity"], tuple(shape[::-1]), interpolation=cv2.INTER_NEAREST + ) + sample["mask"] = cv2.resize( + sample["mask"].astype(np.float32), + tuple(shape[::-1]), + interpolation=cv2.INTER_NEAREST, + ) + sample["mask"] = sample["mask"].astype(bool) + + return tuple(shape) + + +class Resize(object): + """Resize sample to given size (width, height). + """ + + def __init__( + self, + width, + height, + resize_target=True, + keep_aspect_ratio=False, + ensure_multiple_of=1, + resize_method="lower_bound", + image_interpolation_method=cv2.INTER_AREA, + ): + """Init. + + Args: + width (int): desired output width + height (int): desired output height + resize_target (bool, optional): + True: Resize the full sample (image, mask, target). + False: Resize image only. + Defaults to True. + keep_aspect_ratio (bool, optional): + True: Keep the aspect ratio of the input sample. + Output sample might not have the given width and height, and + resize behaviour depends on the parameter 'resize_method'. + Defaults to False. + ensure_multiple_of (int, optional): + Output width and height is constrained to be multiple of this parameter. + Defaults to 1. + resize_method (str, optional): + "lower_bound": Output will be at least as large as the given size. + "upper_bound": Output will be at max as large as the given size. (Output size might be smaller than given size.) + "minimal": Scale as least as possible. (Output size might be smaller than given size.) + Defaults to "lower_bound". + """ + self.__width = width + self.__height = height + + self.__resize_target = resize_target + self.__keep_aspect_ratio = keep_aspect_ratio + self.__multiple_of = ensure_multiple_of + self.__resize_method = resize_method + self.__image_interpolation_method = image_interpolation_method + + def constrain_to_multiple_of(self, x, min_val=0, max_val=None): + y = (np.round(x / self.__multiple_of) * self.__multiple_of).astype(int) + + if max_val is not None and y > max_val: + y = (np.floor(x / self.__multiple_of) * self.__multiple_of).astype(int) + + if y < min_val: + y = (np.ceil(x / self.__multiple_of) * self.__multiple_of).astype(int) + + return y + + def get_size(self, width, height): + # determine new height and width + scale_height = self.__height / height + scale_width = self.__width / width + + if self.__keep_aspect_ratio: + if self.__resize_method == "lower_bound": + # scale such that output size is lower bound + if scale_width > scale_height: + # fit width + scale_height = scale_width + else: + # fit height + scale_width = scale_height + elif self.__resize_method == "upper_bound": + # scale such that output size is upper bound + if scale_width < scale_height: + # fit width + scale_height = scale_width + else: + # fit height + scale_width = scale_height + elif self.__resize_method == "minimal": + # scale as least as possbile + if abs(1 - scale_width) < abs(1 - scale_height): + # fit width + scale_height = scale_width + else: + # fit height + scale_width = scale_height + else: + raise ValueError( + f"resize_method {self.__resize_method} not implemented" + ) + + if self.__resize_method == "lower_bound": + new_height = self.constrain_to_multiple_of( + scale_height * height, min_val=self.__height + ) + new_width = self.constrain_to_multiple_of( + scale_width * width, min_val=self.__width + ) + elif self.__resize_method == "upper_bound": + new_height = self.constrain_to_multiple_of( + scale_height * height, max_val=self.__height + ) + new_width = self.constrain_to_multiple_of( + scale_width * width, max_val=self.__width + ) + elif self.__resize_method == "minimal": + new_height = self.constrain_to_multiple_of(scale_height * height) + new_width = self.constrain_to_multiple_of(scale_width * width) + else: + raise ValueError(f"resize_method {self.__resize_method} not implemented") + + return (new_width, new_height) + + def __call__(self, sample): + width, height = self.get_size( + sample["image"].shape[1], sample["image"].shape[0] + ) + + # resize sample + sample["image"] = cv2.resize( + sample["image"], + (width, height), + interpolation=self.__image_interpolation_method, + ) + + if self.__resize_target: + if "disparity" in sample: + sample["disparity"] = cv2.resize( + sample["disparity"], + (width, height), + interpolation=cv2.INTER_NEAREST, + ) + + if "depth" in sample: + sample["depth"] = cv2.resize( + sample["depth"], (width, height), interpolation=cv2.INTER_NEAREST + ) + + sample["mask"] = cv2.resize( + sample["mask"].astype(np.float32), + (width, height), + interpolation=cv2.INTER_NEAREST, + ) + sample["mask"] = sample["mask"].astype(bool) + + return sample + + +class NormalizeImage(object): + """Normlize image by given mean and std. + """ + + def __init__(self, mean, std): + self.__mean = mean + self.__std = std + + def __call__(self, sample): + sample["image"] = (sample["image"] - self.__mean) / self.__std + + return sample + + +class PrepareForNet(object): + """Prepare sample for usage as network input. + """ + + def __init__(self): + pass + + def __call__(self, sample): + image = np.transpose(sample["image"], (2, 0, 1)) + sample["image"] = np.ascontiguousarray(image).astype(np.float32) + + if "mask" in sample: + sample["mask"] = sample["mask"].astype(np.float32) + sample["mask"] = np.ascontiguousarray(sample["mask"]) + + if "disparity" in sample: + disparity = sample["disparity"].astype(np.float32) + sample["disparity"] = np.ascontiguousarray(disparity) + + if "depth" in sample: + depth = sample["depth"].astype(np.float32) + sample["depth"] = np.ascontiguousarray(depth) + + return sample diff --git a/aibox/MiDaS/run.py b/aibox/MiDaS/run.py new file mode 100644 index 00000000..5696ef05 --- /dev/null +++ b/aibox/MiDaS/run.py @@ -0,0 +1,277 @@ +"""Compute depth maps for images in the input folder. +""" +import os +import glob +import torch +import utils +import cv2 +import argparse +import time + +import numpy as np + +from imutils.video import VideoStream +from midas.model_loader import default_models, load_model + +first_execution = True +def process(device, model, model_type, image, input_size, target_size, optimize, use_camera): + """ + Run the inference and interpolate. + + Args: + device (torch.device): the torch device used + model: the model used for inference + model_type: the type of the model + image: the image fed into the neural network + input_size: the size (width, height) of the neural network input (for OpenVINO) + target_size: the size (width, height) the neural network output is interpolated to + optimize: optimize the model to half-floats on CUDA? + use_camera: is the camera used? + + Returns: + the prediction + """ + global first_execution + + if "openvino" in model_type: + if first_execution or not use_camera: + print(f" Input resized to {input_size[0]}x{input_size[1]} before entering the encoder") + first_execution = False + + sample = [np.reshape(image, (1, 3, *input_size))] + prediction = model(sample)[model.output(0)][0] + prediction = cv2.resize(prediction, dsize=target_size, + interpolation=cv2.INTER_CUBIC) + else: + sample = torch.from_numpy(image).to(device).unsqueeze(0) + + if optimize and device == torch.device("cuda"): + if first_execution: + print(" Optimization to half-floats activated. Use with caution, because models like Swin require\n" + " float precision to work properly and may yield non-finite depth values to some extent for\n" + " half-floats.") + sample = sample.to(memory_format=torch.channels_last) + sample = sample.half() + + if first_execution or not use_camera: + height, width = sample.shape[2:] + print(f" Input resized to {width}x{height} before entering the encoder") + first_execution = False + + prediction = model.forward(sample) + prediction = ( + torch.nn.functional.interpolate( + prediction.unsqueeze(1), + size=target_size[::-1], + mode="bicubic", + align_corners=False, + ) + .squeeze() + .cpu() + .numpy() + ) + + return prediction + + +def create_side_by_side(image, depth, grayscale): + """ + Take an RGB image and depth map and place them side by side. This includes a proper normalization of the depth map + for better visibility. + + Args: + image: the RGB image + depth: the depth map + grayscale: use a grayscale colormap? + + Returns: + the image and depth map place side by side + """ + depth_min = depth.min() + depth_max = depth.max() + normalized_depth = 255 * (depth - depth_min) / (depth_max - depth_min) + normalized_depth *= 3 + + right_side = np.repeat(np.expand_dims(normalized_depth, 2), 3, axis=2) / 3 + if not grayscale: + right_side = cv2.applyColorMap(np.uint8(right_side), cv2.COLORMAP_INFERNO) + + if image is None: + return right_side + else: + return np.concatenate((image, right_side), axis=1) + + +def run(input_path, output_path, model_path, model_type="dpt_beit_large_512", optimize=False, side=False, height=None, + square=False, grayscale=False): + """Run MonoDepthNN to compute depth maps. + + Args: + input_path (str): path to input folder + output_path (str): path to output folder + model_path (str): path to saved model + model_type (str): the model type + optimize (bool): optimize the model to half-floats on CUDA? + side (bool): RGB and depth side by side in output images? + height (int): inference encoder image height + square (bool): resize to a square resolution? + grayscale (bool): use a grayscale colormap? + """ + print("Initialize") + + # select device + device = torch.device("cuda" if torch.cuda.is_available() else "cpu") + print("Device: %s" % device) + + model, transform, net_w, net_h = load_model(device, model_path, model_type, optimize, height, square) + + # get input + if input_path is not None: + image_names = glob.glob(os.path.join(input_path, "*")) + num_images = len(image_names) + else: + print("No input path specified. Grabbing images from camera.") + + # create output folder + if output_path is not None: + os.makedirs(output_path, exist_ok=True) + + print("Start processing") + + if input_path is not None: + if output_path is None: + print("Warning: No output path specified. Images will be processed but not shown or stored anywhere.") + for index, image_name in enumerate(image_names): + + print(" Processing {} ({}/{})".format(image_name, index + 1, num_images)) + + # input + original_image_rgb = utils.read_image(image_name) # in [0, 1] + image = transform({"image": original_image_rgb})["image"] + + # compute + with torch.no_grad(): + prediction = process(device, model, model_type, image, (net_w, net_h), original_image_rgb.shape[1::-1], + optimize, False) + + # output + if output_path is not None: + filename = os.path.join( + output_path, os.path.splitext(os.path.basename(image_name))[0] + '-' + model_type + ) + if not side: + utils.write_depth(filename, prediction, grayscale, bits=2) + else: + original_image_bgr = np.flip(original_image_rgb, 2) + content = create_side_by_side(original_image_bgr*255, prediction, grayscale) + cv2.imwrite(filename + ".png", content) + utils.write_pfm(filename + ".pfm", prediction.astype(np.float32)) + + else: + with torch.no_grad(): + fps = 1 + video = VideoStream(0).start() + time_start = time.time() + frame_index = 0 + while True: + frame = video.read() + if frame is not None: + original_image_rgb = np.flip(frame, 2) # in [0, 255] (flip required to get RGB) + image = transform({"image": original_image_rgb/255})["image"] + + prediction = process(device, model, model_type, image, (net_w, net_h), + original_image_rgb.shape[1::-1], optimize, True) + + original_image_bgr = np.flip(original_image_rgb, 2) if side else None + content = create_side_by_side(original_image_bgr, prediction, grayscale) + cv2.imshow('MiDaS Depth Estimation - Press Escape to close window ', content/255) + + if output_path is not None: + filename = os.path.join(output_path, 'Camera' + '-' + model_type + '_' + str(frame_index)) + cv2.imwrite(filename + ".png", content) + + alpha = 0.1 + if time.time()-time_start > 0: + fps = (1 - alpha) * fps + alpha * 1 / (time.time()-time_start) # exponential moving average + time_start = time.time() + print(f"\rFPS: {round(fps,2)}", end="") + + if cv2.waitKey(1) == 27: # Escape key + break + + frame_index += 1 + print() + + print("Finished") + + +if __name__ == "__main__": + parser = argparse.ArgumentParser() + + parser.add_argument('-i', '--input_path', + default=None, + help='Folder with input images (if no input path is specified, images are tried to be grabbed ' + 'from camera)' + ) + + parser.add_argument('-o', '--output_path', + default=None, + help='Folder for output images' + ) + + parser.add_argument('-m', '--model_weights', + default=None, + help='Path to the trained weights of model' + ) + + parser.add_argument('-t', '--model_type', + default='dpt_beit_large_512', + help='Model type: ' + 'dpt_beit_large_512, dpt_beit_large_384, dpt_beit_base_384, dpt_swin2_large_384, ' + 'dpt_swin2_base_384, dpt_swin2_tiny_256, dpt_swin_large_384, dpt_next_vit_large_384, ' + 'dpt_levit_224, dpt_large_384, dpt_hybrid_384, midas_v21_384, midas_v21_small_256 or ' + 'openvino_midas_v21_small_256' + ) + + parser.add_argument('-s', '--side', + action='store_true', + help='Output images contain RGB and depth images side by side' + ) + + parser.add_argument('--optimize', dest='optimize', action='store_true', help='Use half-float optimization') + parser.set_defaults(optimize=False) + + parser.add_argument('--height', + type=int, default=None, + help='Preferred height of images feed into the encoder during inference. Note that the ' + 'preferred height may differ from the actual height, because an alignment to multiples of ' + '32 takes place. Many models support only the height chosen during training, which is ' + 'used automatically if this parameter is not set.' + ) + parser.add_argument('--square', + action='store_true', + help='Option to resize images to a square resolution by changing their widths when images are ' + 'fed into the encoder during inference. If this parameter is not set, the aspect ratio of ' + 'images is tried to be preserved if supported by the model.' + ) + parser.add_argument('--grayscale', + action='store_true', + help='Use a grayscale colormap instead of the inferno one. Although the inferno colormap, ' + 'which is used by default, is better for visibility, it does not allow storing 16-bit ' + 'depth values in PNGs but only 8-bit ones due to the precision limitation of this ' + 'colormap.' + ) + + args = parser.parse_args() + + + if args.model_weights is None: + args.model_weights = default_models[args.model_type] + + # set torch options + torch.backends.cudnn.enabled = True + torch.backends.cudnn.benchmark = True + + # compute depth maps + run(args.input_path, args.output_path, args.model_weights, args.model_type, args.optimize, args.side, args.height, + args.square, args.grayscale) diff --git a/aibox/deep_sort_pytorch/deep_sort/deep/checkpoint/ckpt.t7 b/aibox/MiDaS/weights/midas_v21_small_256.pt similarity index 52% rename from aibox/deep_sort_pytorch/deep_sort/deep/checkpoint/ckpt.t7 rename to aibox/MiDaS/weights/midas_v21_small_256.pt index d253aae6..e224b2be 100644 Binary files a/aibox/deep_sort_pytorch/deep_sort/deep/checkpoint/ckpt.t7 and b/aibox/MiDaS/weights/midas_v21_small_256.pt differ diff --git a/aibox/Testing/live_session.sh b/aibox/Testing/live_session.sh deleted file mode 100755 index 3bebf3ed..00000000 --- a/aibox/Testing/live_session.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/bash - -python HPC/optivist/ultralytics/detect.py --weights HPC/optivist/ultralytics/runs/train/exp8/weights/best.pt --source 0 --data -../OptiVisT/aibox/datasets/cocohands/cocohands.yaml --view-img diff --git a/aibox/Testing/test_detection.py b/aibox/Testing/test_detection.py deleted file mode 100644 index 423bba97..00000000 --- a/aibox/Testing/test_detection.py +++ /dev/null @@ -1,12 +0,0 @@ -import subprocess - -# Command to run in the terminal -command = "python ultralytics/detect.py --weights ultralytics/runs/train/exp8/weights/best.pt --source battery/" - -# Run the command and capture the output -try: - output = subprocess.check_output(command, shell=True, universal_newlines=True) - print("Command output:") - print(output) -except subprocess.CalledProcessError as e: - print(f"Error running command: {e}") \ No newline at end of file diff --git a/aibox/Testing/testing.ipynb b/aibox/Testing/testing.ipynb deleted file mode 100644 index 25d80ffc..00000000 --- a/aibox/Testing/testing.ipynb +++ /dev/null @@ -1,196 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "id": "f2719e30-5bb3-4848-96f6-204db87a3a69", - "metadata": {}, - "source": [ - "# Testing trained network on unseen data" - ] - }, - { - "cell_type": "markdown", - "id": "6dcf7a14-fe3a-4676-bd29-aba31fa2b909", - "metadata": {}, - "source": [ - "Import necessary packages." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "id": "bc07ffc0-b4be-4ffb-b013-33ba9cecf368", - "metadata": {}, - "outputs": [], - "source": [ - "import os\n", - "import torch\n", - "import ultralytics" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "id": "7c3fadbc-f24f-43c4-9e40-039171a6d9f0", - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "\u001b[34m\u001b[1mdetect: \u001b[0mweights=['HPC/optivist/ultralytics/runs/train/exp5_full_train/weights/best.pt'], source=test-trials/example.mp4, data=../OptiVisT/aibox/datasets/cocohands/cocohands.yaml, imgsz=[640, 640], conf_thres=0.25, iou_thres=0.45, max_det=1000, device=, view_img=False, save_txt=False, save_conf=False, save_crop=False, nosave=False, classes=None, agnostic_nms=False, augment=False, visualize=False, update=False, project=HPC/optivist/ultralytics/runs/detect, name=exp, exist_ok=False, line_thickness=3, hide_labels=False, hide_conf=False, half=False, dnn=False, vid_stride=1\n", - "YOLOv5 🚀 2023-7-3 Python-3.11.3 torch-2.0.1 CPU\n", - "\n", - "Fusing layers... \n", - "Model summary: 157 layers, 7077550 parameters, 0 gradients, 16.0 GFLOPs\n", - "video 1/1 (1/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 3 cell phones, 1 clock, 342.7ms\n", - "video 1/1 (2/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 3 cell phones, 1 clock, 288.3ms\n", - "video 1/1 (3/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 3 cell phones, 2 clocks, 279.6ms\n", - "video 1/1 (4/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 269.9ms\n", - "video 1/1 (5/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 289.4ms\n", - "video 1/1 (6/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 265.2ms\n", - "video 1/1 (7/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 2 cell phones, 2 clocks, 263.0ms\n", - "video 1/1 (8/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 264.1ms\n", - "video 1/1 (9/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 267.3ms\n", - "video 1/1 (10/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 616.0ms\n", - "video 1/1 (11/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 281.1ms\n", - "video 1/1 (12/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 264.6ms\n", - "video 1/1 (13/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 262.8ms\n", - "video 1/1 (14/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 279.7ms\n", - "video 1/1 (15/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 265.1ms\n", - "video 1/1 (16/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 266.8ms\n", - "video 1/1 (17/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 260.4ms\n", - "video 1/1 (18/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 261.5ms\n", - "video 1/1 (19/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 267.3ms\n", - "video 1/1 (20/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 260.2ms\n", - "video 1/1 (21/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 259.7ms\n", - "video 1/1 (22/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 269.7ms\n", - "video 1/1 (23/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 268.1ms\n", - "video 1/1 (24/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 267.0ms\n", - "video 1/1 (25/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 265.8ms\n", - "video 1/1 (26/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 259.2ms\n", - "video 1/1 (27/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 264.3ms\n", - "video 1/1 (28/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 284.0ms\n", - "video 1/1 (29/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 271.9ms\n", - "video 1/1 (30/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 257.6ms\n", - "video 1/1 (31/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 263.0ms\n", - "video 1/1 (32/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 269.0ms\n", - "video 1/1 (33/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 272.5ms\n", - "video 1/1 (34/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 258.8ms\n", - "video 1/1 (35/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 262.9ms\n", - "video 1/1 (36/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 261.3ms\n", - "video 1/1 (37/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 284.1ms\n", - "video 1/1 (38/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 356.9ms\n", - "video 1/1 (39/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 359.2ms\n", - "video 1/1 (40/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 282.5ms\n", - "video 1/1 (41/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 267.9ms\n", - "video 1/1 (42/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 339.2ms\n", - "video 1/1 (43/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 296.1ms\n", - "video 1/1 (44/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 264.2ms\n", - "video 1/1 (45/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 303.6ms\n", - "video 1/1 (46/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 290.4ms\n", - "video 1/1 (47/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 301.3ms\n", - "video 1/1 (48/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 298.2ms\n", - "video 1/1 (49/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 272.8ms\n", - "video 1/1 (50/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 260.4ms\n", - "video 1/1 (51/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 256.9ms\n", - "video 1/1 (52/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 259.3ms\n", - "video 1/1 (53/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 265.5ms\n", - "video 1/1 (54/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 281.8ms\n", - "video 1/1 (55/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 257.3ms\n", - "video 1/1 (56/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 275.3ms\n", - "video 1/1 (57/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 422.4ms\n", - "video 1/1 (58/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 300.4ms\n", - "video 1/1 (59/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 336.8ms\n", - "video 1/1 (60/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 269.1ms\n", - "video 1/1 (61/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 302.2ms\n", - "video 1/1 (62/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 289.5ms\n", - "video 1/1 (63/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 328.8ms\n", - "video 1/1 (64/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 275.0ms\n", - "video 1/1 (65/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 574.8ms\n", - "video 1/1 (66/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 318.1ms\n", - "video 1/1 (67/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 297.5ms\n", - "video 1/1 (68/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 316.0ms\n", - "video 1/1 (69/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 287.0ms\n", - "video 1/1 (70/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 277.0ms\n", - "video 1/1 (71/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 328.1ms\n", - "video 1/1 (72/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 325.2ms\n", - "video 1/1 (73/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 3 clocks, 290.3ms\n", - "video 1/1 (74/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 3 clocks, 254.9ms\n", - "video 1/1 (75/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 258.1ms\n", - "video 1/1 (76/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 2 clocks, 323.2ms\n", - "video 1/1 (77/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 315.4ms\n", - "video 1/1 (78/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 2 clocks, 422.7ms\n", - "video 1/1 (79/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 3 clocks, 400.9ms\n", - "video 1/1 (80/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 3 clocks, 353.7ms\n", - "video 1/1 (81/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 3 clocks, 294.0ms\n", - "video 1/1 (82/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 3 clocks, 331.5ms\n", - "video 1/1 (83/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 309.5ms\n", - "video 1/1 (84/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 361.7ms\n", - "video 1/1 (85/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 298.8ms\n", - "video 1/1 (86/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 2 clocks, 270.1ms\n", - "video 1/1 (87/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 277.1ms\n", - "video 1/1 (88/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 2 clocks, 271.0ms\n", - "video 1/1 (89/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 2 clocks, 287.0ms\n", - "video 1/1 (90/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 (no detections), 283.4ms\n", - "video 1/1 (91/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 (no detections), 255.7ms\n", - "video 1/1 (92/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 (no detections), 265.5ms\n", - "video 1/1 (93/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 262.3ms\n", - "video 1/1 (94/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 271.4ms\n", - "video 1/1 (95/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 254.1ms\n", - "video 1/1 (96/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 263.0ms\n", - "video 1/1 (97/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 293.2ms\n", - "video 1/1 (98/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 (no detections), 310.0ms\n", - "video 1/1 (99/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 (no detections), 325.9ms\n", - "video 1/1 (100/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 (no detections), 288.7ms\n", - "video 1/1 (101/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 269.4ms\n", - "video 1/1 (102/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 (no detections), 256.3ms\n", - "video 1/1 (103/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 (no detections), 309.3ms\n", - "video 1/1 (104/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 (no detections), 282.5ms\n", - "video 1/1 (105/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 360.5ms\n", - "video 1/1 (106/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 272.5ms\n", - "video 1/1 (107/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 305.1ms\n", - "video 1/1 (108/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 (no detections), 310.8ms\n", - "video 1/1 (109/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 (no detections), 316.7ms\n", - "video 1/1 (110/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 (no detections), 261.8ms\n", - "video 1/1 (111/111) /Users/florian/Documents/Studium/NBP/OptiVisT/AIBox/test-trials/example.mp4: 384x640 1 cell phone, 320.4ms\n", - "Speed: 1.1ms pre-process, 295.0ms inference, 1.7ms NMS per image at shape (1, 3, 640, 640)\n", - "Results saved to \u001b[1mHPC/optivist/ultralytics/runs/detect/exp4\u001b[0m\n" - ] - } - ], - "source": [ - "!python HPC/optivist/ultralytics/detect.py --weights HPC/optivist/ultralytics/runs/train/exp5_full_train/weights/best.pt --source test-trials/example.mp4 --data ../OptiVisT/aibox/datasets/cocohands/cocohands.yaml" - ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "658afbf1-db2c-4b0b-a363-0960a6bb23c6", - "metadata": {}, - "outputs": [], - "source": [] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.11.3" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/aibox/Testing/testing.sh b/aibox/Testing/testing.sh deleted file mode 100755 index 33537d70..00000000 --- a/aibox/Testing/testing.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/bash - -python3 ../Training/optivist/ultralytics/detect.py --weights ../Training/optivist/ultralytics/runs/train/5sHands/weights/best.pt --source /Users/florian/Documents/Studium/NBP/Projects/OptiVisT/AIBox/Testing diff --git a/aibox/Training/UOS_HPC_Guide.md b/aibox/Training/UOS_HPC_Guide.md deleted file mode 100644 index 61e1abda..00000000 --- a/aibox/Training/UOS_HPC_Guide.md +++ /dev/null @@ -1,115 +0,0 @@ -Uni-Osnabrück HPC Guide - -The following guide will help you get started on the university's high-performance computing network. Note that the HPC is entirely terminal-based and has no GUI. - -// Resources // - -First, the basics of what hardware you're accessing and how things are laid out: - -The main section of the HPC which you will be using contains: -- 51 CPU nodes, each containing 128 CPU cores and 1TB of memory -- 2 GPU nodes, each containing 128 CPU cores, 1TB of memory, and 4 NVIDIA A100 GPUs - -On the HPC, you have a home directory under /home/student/(first letter of your last name)/(your username)/. Programs and data are stored in the /share/ directory. In the case of the NBP, our data and project folders can be found in /share/neurobiopsychologie/. To store code you will be using in your personal work, create a directory named with your username within the neurobiopsychologie directory (using the mkdir command). Projects with multiple members have their own directories (when working in these, please refer to the section of this guide dealing with permissions to ensure that your teammates can access any files you edit or create in the project directories). - -Note that the share directory has no backup, so it is advisable to maintain a copy of your code elsewhere as well. All nodes on the HPC have access to the internet so you can use git to maintain your code in an external repo if desired. - -// Accessing the HPC // - -You access the HPC by logging into the master management login node - HPC3. This is achieved via an ssh connection when connected to the university network either via eduroam or via the university's VPN. So, as follows: - -- In a terminal, type the following command: ssh (network username)@hpc3.rz.uos.de -- You will then be prompted for your network password (same as when you log into your email). You have 3 tries to enter this correctly before the node kicks you off and you have to ssh back in again. -- Note that it is also possible to set up an ssh key to allow for passwordless connection between your laptop and the network, exactly like when you access a project hosted on GitHub/GitLab, but this is not covered in this guide. - -Once you log in, a startup text block will be printed in your terminal (begins with "Dieses Cluster wurde durch die DFG finanziert..."). Once you see this, you have successfully logged into the login node of the HPC cluster. Note that this node is not intended for computations! You should NEVER run any programs on this node, although minor operations (directory creation and management, etc.) are fine. - -By default, the log in node will open to your home directory. You can confirm this by running the command ls in the terminal. If you are just starting with the HPC, this directory may be empty. Later, this will usually be where your conda environments are stored. - -// Running Programs on the HPC - Interactive Sessions // - -There are two ways to run jobs on the HPC - via a submitted Slurm job or within an interactive session. Typically, you will want to work in an interactive session when debugging or testing code, and to submit a job when you are confident your code is clean and can allow the system to schedule it when the appropriate resources are available. - -You may access either the CPU nodes or the GPU nodes for both jobs and interactive sessions. - -Let's start with how to access an interactive session first: - -To request an interactive session on the CPUs, input the following command into your terminal: - -salloc -p workq -n 1 -c 10 --mem 20G srun --pty bash - -- salloc is the command requesting that the Slurm management system allocate you resources for your session -- the -p argument specifies which partition you wish to have the interactive session on; in ths case we ask for workq, the CPU partition -- the -n argument specifies how many nodes you wish to have allocated to you; this should almost always be 1 -- the -c command specifies how many CPU cores you want allocated to you; this should never be more than 10 -- the --mem command specifies how much RAM you want allocated to you; try not to take more than you need, which you can estimate by evaluating what data your program actively maintains in memory (i.e., do you have growing lists that sit in memory, does it load a dataframe combining multiple individual data files, etc.) -- the srun --pty bash command loads your interactive session with conda already activated and ready to use (this guide covers the creation of conda environments on the HPC later) - -To request an interactive session on the GPUs, input the following command into your terminal: - -salloc -p gpu -n 1 -c 10 --mem 20G --gres=gpu:A100:1 srun --pty bash - -- in this case, we set the partition to gpu, the name of the GPU partition -- we add the additional argument --gres, which specifies the exact GPU being used, in this case the NVIDIA A100 - -Once you input the command to request an interactive session, the management system will check if the resources you requested are available. If so, you will see the following: - -salloc: Pending job allocation X -salloc: job X queued and waiting for resources -salloc: job X has been allocated resources -salloc: Granted job allocation X -salloc: Waiting for resource configuration -salloc: Nodes X are ready for job - -If the resources are not available, you will only see the first two lines and will have to wait until the resources are freed up as other jobs are completed. Because of the high demand on the GPUs, you may have to wait quite a while before the system can grant your request. You will usually be granted an interactive session on the CPUs faster, but during high-demand periods, you may also have to wait for a session on these nodes as well. - -// Python Environments on the HPC // - -Whether you are running a program in a job or in an interactive session, you will of course need a Python environment. The HPC already contains multiple packages that will be useful for you when running programs, including miniconda. Using the pre-installed miniconda on the HPC is in fact the recommended way to create and manage environments on the HPC, so let's cover this method: - -- run export TMPDIR=/share/neurobiopsychologie/(your username)/ - this will change the temporary directory to your directory on the share drive, crucial when installing many packages at once or very large packages, since the default temporary folder is rather small (if you forget this step, you will get an OS memory error when installing the package(s)) -- load an interactive session on a CPU node using the method above (this will ensure you have sufficient memory for installing large packages) -- run spack load miniconda3 -- run conda create --name (name) to create a new environment accessible from the root with the given name -- if you have a requirements.txt file or an environment.yml file that lists the packages you want installed in your new environment, follow the following steps: -- say you have a requirements.txt file in /share/neurobiopsychologie/(your username)/ -- first run the command cd /share/neurobiopyschologie/(your username) command to change to the directory with the environment file -- run conda env create -f requirements.txt to create the environment with the environment file (note the addition of env before create!) - -With your environment created, you can now use it in an interactive session or in a job. Let's start with an interactive session: -- request an interactive session with the steps above -- run spack load miniconda3 -- run conda activate (your environment) -- cd to the directory with the program you want to run -- run python your_file.py to run the program -- the program will run live in your terminal - -// Running Programs on the HPC - Standard Submission // - -Now let's cover submitting a job, which is how you'll usually run your programs. To do this, you first need to create an .sh file, which lists the parameters and commands for your job (essentially what you put in when you request and use an interactive session). An example .sh file (example_cpu.sh) can be found in /share/neurobiopsychologie/ and demonstrates how to structure this file for submitting a job to the CPU nodes. The file example_gpu.sh demonstrates the same for submitting to the GPU nodes. - -Your .sh job file is usually placed in the same directory as the program you want to run. - -To submit your job, cd to the directory where your .sh file is located and enter the command sbatch yourfile.sh, which will submit your job to the Slurm management system. You will receive a confirmation printout that your job has been submitted which includes the job number it was assigned. - -Once your job has been submitted, you can monitor its progress in the Slurm system by running the command squeue -u (your username). This will list all jobs you currently have running, along with their job number, the partition they were submitted to, the amount of time they have been running, and their current status and the reason for that status. The following statuses are possible: - -- R: your job is currently running, the time counter will tell you how long it has been running for -- PD: your job is currently pending, usually because there are no resources available. This status will usually be accompanied by the reason Priority, meaning your job is ready to go but there are no resources for it at this time. You may also see Resources, which means your job will have the requested resources reserved specifically for it (this status can mean your job will cause problems in the queue, so if you see it, either wait and submit your job later, or use advanced queueing to have it submitted only after a current job is finished; this is covered in the example .sh files). You may also see Dependency, which means your job is ready for it to go but is waiting for another of your jobs to finish running before it runs. -- CG: your program is terminating. - -You may also check the status of partitions by running the squeue -p command, specifying either gpu or workq after the -p to see the queue for that partition. This can give you an idea of the current load on that partition and therefore how long you might expect it to take before your job is run. - -When your program runs, all output files will appear in the directory where your .sh file is. Unlike with terminal outputs, the output of a job is split into two files - one for outputs, and one for errors. This can make debugging easier if your job encounters an error when running. You can adjust the names of these files as desired. Note that you do not need to change the name on each running of the job, as Slurm will automatically append the job number to the end of the output and error files to distinguish them. - -The Slurm system can email you when specific events occur, such as when a queued job starts running or when it finishes. The commands for this are included in the example .sh files. - -// Updating Permissions for Project Files // - -After you finish running a job, working in an interactive session, or otherwise add or edit files that are part of a project directory, make sure to update the permissions of those files so your teammates can access them. By default, only you will have read and write access to them. In order to grant others access, run the command chmod -R g+rw (directory name) in the parent directory of the directory containing the files you want to update the permissions for. Note that this could also be done with the chmod -R 0777 or similar commands, but this has previously resulted in a glitch wiping all permissions (even yours) to the files, and is so not recommended. The -R parameter ensures that permissions for all files in the folder are recursively updated. - - - - - - diff --git a/aibox/Training/example_cpu.sh b/aibox/Training/example_cpu.sh deleted file mode 100644 index 02b10d30..00000000 --- a/aibox/Training/example_cpu.sh +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/bash - -## set the maximum time your job will run for (the absolute maximum is 48 hours) -#SBATCH --time=12:00:00 - -## set the number of nodes being requested (nearly always 1) -#SBATCH --nodes 1 - -## set the number of tasks per node (usually 1) -#SBATCH --ntasks-per-node=1 - -## set the amount of RAM you're requesting -#SBATCH --mem 75G - -## set the number of CPUs you're requesting (max is 10) -#SBATCH -c 10 - -## set the partition you want to submit your job to, here the CPUs -#SBATCH -p workq - -## name the error file as desired -#SBATCH --error=error_nc.o%j - -## name the output file as desired -#SBATCH --output=output_nc.o%j - -## if you want your job to run only after another job has run, remove one # and enter that job's ID here (which you can get by running squeue -u your_username) -##SBATCH --dependency=afterok:(job ID) ## without the parentheses, ex afterok:123456 - -## add your university email so the system can email you updates on your job -#SBATCH --mail-user=ppowell@uni-osnabrueck.de - -## remove one # from this if you want the system to email you when the job starts -##SBATCH --mail-type=BEGIN - -## remove one # from this if you want the system to email you when the job ends -##SBATCH --mail-type=END - -## remove one # from this if you want the system to email you if your job fails (encounters an error) -##SBATCH --mail-type=FAIL - -## remove one # from this if you want the system to email you for all events -##SBATCH --mail-type=ALL - -## These are just general commands -echo "running in shell: " "$SHELL" -export NCCL_SOCKET_IFNAME=lo - -## load miniconda, activate your environment, and set the TMPDIR to your folder on the shared drive in case your program creates any temporary files -spack load miniconda3 -eval "$(conda shell.bash hook)" -conda activate (your environment) -export TMPDIR='/share/neurobiopsychologie/(yourusername)' - -## run your program -srun python /full/path/to/yourfile.py \ No newline at end of file diff --git a/aibox/Training/example_gpu.sh b/aibox/Training/example_gpu.sh deleted file mode 100644 index 422c0dc7..00000000 --- a/aibox/Training/example_gpu.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/bash - -## set the maximum time your job will run for (the absolute maximum is 48 hours) -#SBATCH --time=12:00:00 - -## set the number of nodes being requested (nearly always 1) -#SBATCH --nodes 1 - -## set the number of tasks per node (usually 1) -#SBATCH --ntasks-per-node=1 - -## set the amount of RAM you're requesting -#SBATCH --mem 75G - -## set the number of CPUs you're requesting (max is 10) -#SBATCH -c 10 - -## set the partition you want to submit your job to, here the GPUs -#SBATCH -p gpu - -## set the GPU you want to use -#SBATCH --gres=gpu:H100.10gb:1 - -## name the error file as desired -#SBATCH --error=error_nc.o%j - -## name the output file as desired -#SBATCH --output=output_nc.o%j - -## if you want your job to run only after another job has run, remove one # and enter that job's ID here (which you can get by running squeue -u your_username) -##SBATCH --dependency=afterok:(job ID) ## without the parentheses, ex afterok:123456 - -## add your university email so the system can email you updates on your job -#SBATCH --mail-user=ppowell@uni-osnabrueck.de - -## remove one # from this if you want the system to email you when the job starts -##SBATCH --mail-type=BEGIN - -## remove one # from this if you want the system to email you when the job ends -##SBATCH --mail-type=END - -## remove one # from this if you want the system to email you if your job fails (encounters an error) -##SBATCH --mail-type=FAIL - -## remove one # from this if you want the system to email you for all events -##SBATCH --mail-type=ALL - -## These are just general commands -echo "running in shell: " "$SHELL" -export NCCL_SOCKET_IFNAME=lo - -## load miniconda, activate your environment, and set the TMPDIR to your folder on the shared drive in case your program creates any temporary files -spack load miniconda3 -eval "$(conda shell.bash hook)" -conda activate (your environment) -export TMPDIR='/share/neurobiopsychologie/(yourusername)' - -## run your program -srun python /full/path/to/yourfile.py \ No newline at end of file diff --git a/aibox/app_export.py b/aibox/app_export.py new file mode 100644 index 00000000..feed2e4f --- /dev/null +++ b/aibox/app_export.py @@ -0,0 +1,167 @@ +# Utilities to export the hand and object detection model as tflite models enriched with metadate for use in Android Studio + +import argparse +import tensorflow as tf + +# Library for tflite metadata as recommended in: https://www.tensorflow.org/lite/models/convert/metadata +from tflite_support import flatbuffers +from tflite_support import metadata as _metadata +from tflite_support import metadata_schema_py_generated as _metadata_fb + +from six import text_type +from pathlib import Path + + +def get_hand_model_meta() -> _metadata_fb.ModelMetadataT: + model_meta = _metadata_fb.ModelMetadataT() + model_meta.name = "YOLOv5 Hand Detection" + model_meta.description = "A YOLOv5 model trained on the Egohands dataset." + model_meta.version = "v1" + model_meta.author = "Optivist Research Group" + return model_meta + + +def get_object_model_meta() -> _metadata_fb.ModelMetadataT: + model_meta = _metadata_fb.ModelMetadataT() + model_meta.name = "YOLOv5 Object Detection" + model_meta.description = "A YOLOv5 object detection model." + model_meta.version = "v1" + model_meta.author = "Optivist Research Group" + return model_meta + + +def get_input_meta() -> _metadata_fb.TensorMetadataT: + input_meta = _metadata_fb.TensorMetadataT() + input_meta.name = "image" + input_meta.description = "Input image to be classified." + input_meta.content = _metadata_fb.ContentT() + input_meta.content.contentProperties = _metadata_fb.ImagePropertiesT() + input_meta.content.contentProperties.colorSpace = _metadata_fb.ColorSpaceType.RGB + input_meta.content.contentPropertiesType = ( + _metadata_fb.ContentProperties.ImageProperties + ) + input_normalization = _metadata_fb.ProcessUnitT() + input_normalization.optionsType = ( + _metadata_fb.ProcessUnitOptions.NormalizationOptions + ) + input_normalization.options = _metadata_fb.NormalizationOptionsT() + input_normalization.options.mean = [127.5] + input_normalization.options.std = [127.5] + input_meta.processUnits = [input_normalization] + input_stats = _metadata_fb.StatsT() + input_stats.max = [255] + input_stats.min = [0] + input_meta.stats = input_stats + return input_meta + + +def get_hand_output_meta() -> _metadata_fb.TensorMetadataT: + output_meta = _metadata_fb.TensorMetadataT() + output_meta.name = "output tensor" + output_meta.description = "A float32 tensor consisting of 4 one-hot-encoded classes [myleft, myright, yourleft, yourright], the bounding box described by [x, y, width, height], and the confidence (also called objectness)." + + return output_meta + + +def get_object_output_meta() -> _metadata_fb.TensorMetadataT: + output_meta = _metadata_fb.TensorMetadataT() + output_meta.name = "output tensor" + output_meta.description = "A float32 tensor for 80 hot-encoded classes of the COCO dataset, the bounding box described by [x, y, width, height], and the confidence (also called objectness)." + return output_meta + + +def generate_metadata(tflite_model, model_type: str) -> bytes | text_type: + if model_type == "hands": + model_meta = get_hand_model_meta() + output_meta = get_hand_output_meta() + elif model_type == "objects": + model_meta = get_object_model_meta() + output_meta = get_object_output_meta() + else: + raise ValueError(f"Unsupported model type: '{model_type}'") + + # Create input, output and graph metadata + subgraph = _metadata_fb.SubGraphMetadataT() + subgraph.inputTensorMetadata = [get_input_meta()] + subgraph.outputTensorMetadata = [output_meta] + model_meta.subgraphMetadata = [subgraph] + + # Put the metadata into the .tflite binary object + b = flatbuffers.Builder(0) + b.Finish(model_meta.Pack(b), _metadata.MetadataPopulator.METADATA_FILE_IDENTIFIER) + metadata_buf = b.Output() + populator = _metadata.MetadataPopulator.with_model_buffer(tflite_model) + populator.load_metadata_buffer(metadata_buf) + populator.populate() + return populator.get_model_buffer() + + +def export_tflite_model( + tf_saved_model_dir: str | Path, storage_path: str | Path, model_type: str +) -> None: + tf_saved_model_dir = Path(tf_saved_model_dir) + storage_path = Path(storage_path) + + converter = tf.lite.TFLiteConverter.from_saved_model(str(tf_saved_model_dir)) + + # Apply post-training float16 quantization for reduced model size + converter.optimizations = [tf.lite.Optimize.DEFAULT] + # converter.target_spec.supported_types = [tf.float16] + converter.target_spec.supported_ops = [ + tf.lite.OpsSet.TFLITE_BUILTINS, # enable TensorFlow Lite ops. + tf.lite.OpsSet.SELECT_TF_OPS, # enable TensorFlow ops. + ] + + tflite_model = converter.convert() + + # Create and add the metadata to the model + tflite_model = generate_metadata(tflite_model, model_type) + + with storage_path.open("wb") as save_loc: + save_loc.write(tflite_model) + + +def parse_opt(): + parser = argparse.ArgumentParser() + parser.add_argument( + "--hands", type=str, required=False, help="hand saved_model path" + ) + parser.add_argument( + "--objects", type=str, required=False, help="object saved_model path" + ) + parser.add_argument("--output", type=str, required=True, help="output path") + return parser.parse_args() + + +def main(opts) -> None: + commands = vars(opts) + + if commands["hands"] and commands["objects"]: + return None + elif commands["hands"] is not None: + print(f"Exporting tensorflow-lite model from: {commands['hands']}.") + save_model_dir = commands["hands"] + model_type = "hands" + elif commands["objects"] is not None: + print(f"Hands option was set {commands['objects']}.") + save_model_dir = commands["objects"] + model_type = "objects" + else: + return None + + export_tflite_model(save_model_dir, commands["output"], model_type) + + print(f"Done. Exported model to {commands['output']}.") + + +if __name__ == "__main__": + opts = parse_opt() + main(opts) + + # Assumes yolo models already exported as tf-saved_model + + # displayer = _metadata.MetadataDisplayer.with_model_file("test.tflite") + # print(displayer.get_metadata_json()) + + # python app_export --hands --output + # python app_export --objects --output diff --git a/aibox/bracelet.py b/aibox/bracelet.py index b8dc0a37..13ee496c 100644 --- a/aibox/bracelet.py +++ b/aibox/bracelet.py @@ -1,27 +1,23 @@ +# region Setup + import time from pybelt.belt_controller import (BeltConnectionState, BeltController, BeltControllerDelegate, BeltMode, BeltOrientationType, BeltVibrationTimerOption) - from auto_connect import interactive_belt_connect, setup_logger - import threading import sys - from pynput.keyboard import Key, Listener +import numpy as np - -# Variable that determines if belt is connected -# If belt is not connected value is set to 1 and instead of vibrations print commands serve as guidance -mock_belt = 0 -vibration_intensity = 100 -one_round = 0 +# endregion class Delegate(BeltControllerDelegate): # Belt controller delegate pass + def connect_belt(): setup_logger() @@ -40,17 +36,132 @@ def connect_belt(): belt_controller.set_belt_mode(BeltMode.APP_MODE) return True, belt_controller -def navigate_hand(belt_controller,bboxs_hands,bboxs_objs, search_key_obj: str, search_key_hand: list, hor_correct: bool = False, ver_correct: bool = False, grasp: bool = False, obj_seen_prev: bool = False, search: bool = False, count_searching: int = 0, count_see_object: int = 0, jitter_guard: int=0, navigating: bool = False): + +def abort(key): + # Check if the pressed key is the left clicker key + if key == Key.esc: + sys.exit() + + +def on_click(key): + # Check if the pressed key is the right clicker key + if key == Key.enter: + return False + + +def listener(): + # listen for clicker + with Listener(on_press=abort) as listener: + listener.join() + + +def start_listener(): + global termination_signal, one_round + existing_thread = threading.enumerate() + listener_thread = None + + for thread in existing_thread: + if thread.name == 'clicker': + listener_thread = thread + termination_signal = False + break + + if listener_thread is None: + if one_round == 0: + listener_thread = threading.Thread(target=listener, name='clicker') + listener_thread.start() + one_round += 1 + else: + termination_signal = True + + return termination_signal + + +def choose_detection(bboxes, previous_bbox=None): + # Hyperparameters + track_id_weight = np.inf + exponential_weight = 2 + distance_weight = 100 + + #print(f'\nPrevious BB: {previous_bbox}') + + candidates = [] + for bbox in bboxes: # x, y, w, h, id, cls, conf + # bbox has to be within image dimensions + if bbox[0] <= w and bbox[1] <= h: + # confidence score + confidence = bbox[6] # in [0,1] + confidence_score = exponential_weight**confidence - 1 # exponential growth in [0,1], could also use np.exp() and normalize + # tracking score + current_track_id = bbox[4] + previous_track_id = previous_bbox[4] if previous_bbox is not None else -1 + track_id_score = track_id_weight if current_track_id == previous_track_id else 1 # 1|ꝏ + # distance score + if previous_bbox is None: + distance = None + distance_inverted = 1 + else: + current_location = bbox[:2] + previous_location = previous_bbox[:2] + distance = np.linalg.norm(current_location - previous_location) + distance_inverted = 1 / distance if distance >= 1 else distance_weight + + # total score + score = track_id_score * confidence_score * distance_inverted + #print(f'Current BB: {bbox}') + #print(f'TrackID = {current_track_id}, confidence = {confidence}, distance = {distance}') + #print(f'Score {score} = {track_id_score} * {confidence_score} * {distance_inverted}\n') + + # Possible scores: + # ꝏ -- same trackingID + # 100 -- different trackingID, matching BBs (max. 1px deviation), conf=1 + # [0,1] -- different trackingID, BBs distance in [1., sqrt(w^2*h^2)], conf=1 + candidates.append(score) + else: + candidates.append(0) + + true_detection = bboxes[np.argmax(candidates)] if len(candidates) else None + + return true_detection + + +# Threading vars +termination_signal = False +one_round = 0 + +# Navigation vars +prev_hand = None +prev_target = None +w,h = 1920, 1080 + +def navigate_hand( + belt_controller, + bboxes, + search_key_obj: str, + search_key_hand: list, + hor_correct: bool = False, + ver_correct: bool = False, + grasp: bool = False, + obj_seen_prev: bool = False, + search: bool = False, + count_searching: int = 0, + count_see_object: int = 0, + jitter_guard: int = 0, + navigating: bool = False + ): ''' Function that navigates the hand to the target object. Handles cases when either hand or target is not detected Input: - • bbox_info - structure containing following information about each prediction: "class","label","confidence","bbox" + • bboxes - list containing following information about each prediction: 0-3: bbox xywh, 4: trackID, 5: class, 6: confidence • search_key_obj - integer representing target object class • search_key_hand - list of integers containing hand detection classes used for navigation • hor_correct - boolean representing whether hand and object are assumed to be aligned horizontally; by default False • ver_correct - boolean representing whether hand and object are assumed to be aligned vertically; by default False • grasp - boolean representing whether grasp command has been sent; by default False + • x_threshold - + • y_threshold - + Output: • horizontal - boolean representing whether hand and object are aligned horizontally after execution of the function; by default False • vertical - boolean representing whether hand and object are aligned vertically after execution of the function; by default False @@ -58,63 +169,20 @@ def navigate_hand(belt_controller,bboxs_hands,bboxs_objs, search_key_obj: str, s • check • check_dur ''' - global mock_belt, one_round - - horizontal, vertical = False, False - - max_hand_confidence = 0 - max_obj_confidence = 0 - - # Diffrence between the hand xy and object xy - x_threshold = 50 - y_threshold = 50 - - global termination_signal - termination_signal = False - - #print(bbox_info) - bbox_hand, bbox_obj = None, None + global termination_signal + global prev_hand, prev_target - def abort(key): - # Check if the pressed key is the left clicker key - if key == Key.page_up: - sys.exit() - - def on_click(key): - # Check if the pressed key is the right clicker key - if key == Key.page_down: - return False - - def listener(): - - # listen for clicker - with Listener(on_press=abort) as listener: - listener.join() - - def start_listener(): - - global termination_signal, one_round - existing_thead = threading.enumerate() - listener_thread = None - - for thread in existing_thead: - if thread.name == 'clicker': - listener_thread = thread - termination_signal = False - break - - if listener_thread is None: - if one_round == 0: - listener_thread = threading.Thread(target=listener, name='clicker') - listener_thread.start() - one_round += 1 - else: - termination_signal = True - - return termination_signal + # Navigation vars + vibration_intensity = 100 + min_hand_confidence = 0.5 + min_obj_confidence = 0.5 + hand, target = None, None + horizontal, vertical = False, False + w,h = 1920, 1080 - termination_signal = start_listener() + if belt_controller: + termination_signal = start_listener() if termination_signal: print('Manual Abort') @@ -122,34 +190,34 @@ def start_listener(): sys.exit() # Search for object and hand with the highest prediction confidence - for bbox in bboxs_hands: - if bbox["class"] in search_key_hand and bbox["confidence"] > max_hand_confidence: - bbox_hand = bbox.get("bbox") - max_hand_confidence = bbox["confidence"] - #print(f"hand confidence: {bbox['confidence']} \n") - - for bbox in bboxs_objs: - if bbox["label"] == search_key_obj and bbox["confidence"] > max_obj_confidence: - #print(f"label: {bbox['label']}") - bbox_obj = bbox.get("bbox") - max_obj_confidence = bbox["confidence"] - #print(f"obj confidence: {bbox['confidence']} \n") - - # Getting horizontal and vertical position of the bounding box around tbarget object and hand - if bbox_hand != None: - - x_center_hand, y_center_hand = bbox_hand[0], bbox_hand[1] - y_center_hand = y_center_hand - (bbox_hand[3]/2) - - if bbox_obj != None: - - x_center_obj, y_center_obj = bbox_obj[0], bbox_obj[1] + # Filter for hand detections + bboxes_hands = [detection for detection in bboxes if detection[5] in search_key_hand] + hand = choose_detection(bboxes_hands, prev_hand) + prev_hand = hand + + # Filter for target detections + bboxes_objects = [detection for detection in bboxes if detection[5] == search_key_obj] + target = choose_detection(bboxes_objects, prev_target) + prev_target = target + + # Getting horizontal and vertical position of the bounding box around target object and hand + if hand is not None: + x_center_hand, y_center_hand = hand[0], hand[1] + # move the y_center of the hand in the direction of the fingertips to help avoid occlusions (testing) + hand_upper_bound = y_center_hand - hand[3]//2 + hand_lower_bound = y_center_hand + hand[3]//2 + + if target is not None: + target_width = target[2] + target_height = target[3] + target_left_bound = target[0] - target_width//2 + target_right_bound = target[0] + target_width//2 + target_lower_bound = target[1] + target_height//2 + target_upper_bound = target[1] - target_height//2 - # Hand is detected, object is not detected, and they are aligned horizontally and vertically - send grasp command - # Assumption: occlusion of the object by hand - - if bbox_hand != None and hor_correct and ver_correct: + # 1. Grasping: Hand is detected and horizontally and vertically aligned with target --> send grasp (target might be occluded in frame) + if hand is not None and hor_correct and ver_correct: obj_seen_prev = False search = False count_searching = 0 @@ -157,175 +225,161 @@ def start_listener(): jitter_guard = 0 navigating = 0 - #if not mock_belt: - belt_controller.stop_vibration() + if belt_controller: + belt_controller.stop_vibration() + belt_controller.send_pulse_command( + channel_index=0, + orientation_type=BeltOrientationType.ANGLE, + orientation=90, + intensity=vibration_intensity, + on_duration_ms=150, + pulse_period=500, + pulse_iterations=5, + series_period=5000, + series_iterations=1, + timer_option=BeltVibrationTimerOption.RESET_TIMER, + exclusive_channel=False, + clear_other_channels=False + ) print("G R A S P !") - #if not mock_belt: - belt_controller.send_pulse_command( - channel_index=0, - orientation_type=BeltOrientationType.ANGLE, - orientation=90, - intensity=vibration_intensity, - on_duration_ms=150, - pulse_period=500, - pulse_iterations=5, - series_period=5000, - series_iterations=1, - timer_option=BeltVibrationTimerOption.RESET_TIMER, - exclusive_channel=False, - clear_other_channels=False - ) - - print('Please use the clicker to indicate you have grasped the object') + # End guidance RT measure + print('Please use the clicker to indicate you have grasped the object.') # listen for clicker with Listener(on_press=on_click) as listener: + # End trial time measure listener.join() grasp = True return horizontal, vertical, grasp, obj_seen_prev, search, count_searching, count_see_object, jitter_guard, navigating - - # If the camera can see both hand and object but not yet aligned, navigate the hand to the object, horizontal first - if bbox_hand != None and bbox_obj != None: + + # 2. Guidance: If the camera can see both hand and object but not yet aligned, navigate the hand to the object, horizontal first + if hand is not None and target is not None: obj_seen_prev = False search = False count_searching = 0 count_see_object = 0 jitter_guard = 0 + threshold = 20 * target[2] / hand[2] - # if not mock_belt: - #belt_controller.stop_vibration() - - if navigating == False: - belt_controller.stop_vibration() + # Start guidance RT measure # Horizontal movement logic # Centers of the hand and object bounding boxes further away than x_threshold - move hand horizontally - if abs(x_center_hand - x_center_obj) > x_threshold: - horizontal = False - if x_center_hand < x_center_obj: - print('right') - #if not mock_belt: + horizontal = False + if x_center_hand < target_left_bound: + print('right') + if belt_controller: belt_controller.vibrate_at_angle(120, channel_index=0, intensity=vibration_intensity) - elif x_center_hand > x_center_obj: - print('left') - #if not mock_belt: + navigating = True + elif x_center_hand > target_right_bound: + print('left') + if belt_controller: belt_controller.vibrate_at_angle(45, channel_index=0, intensity=vibration_intensity) - navigating = True - else: horizontal = True - # Vertical movement logic # Centers of the hand and object bounding boxes further away than y_threshold - move hand vertically if horizontal == True: - if abs(y_center_hand - y_center_obj) > y_threshold: - vertical = False - if y_center_hand < y_center_obj: - print('down') - #if not mock_belt: + vertical = False + if hand_lower_bound < target_upper_bound: # - threshold: # dynamic grasp triggering + print('down') + if belt_controller: belt_controller.vibrate_at_angle(60, channel_index=0, intensity=vibration_intensity) - elif y_center_hand > y_center_obj: - print('up') - #if not mock_belt: + navigating = True + elif hand_upper_bound > target_lower_bound: # + threshold: + print('up') + if belt_controller: belt_controller.vibrate_at_angle(90, channel_index=0, intensity=vibration_intensity) - navigating = True - else: vertical = True return horizontal, vertical, grasp, obj_seen_prev, search, count_searching, count_see_object, jitter_guard, navigating - # if the camera cannot see the hand or the object, tell them they need to move around - if bbox_obj == None and grasp == False: + # 3. Lost target: If the camera cannot see the hand or the object, tell them they need to move around + if target is None and grasp == False: if obj_seen_prev == True: jitter_guard = 0 obj_seen_prev = False + + #print("Lost target from the field of view.") jitter_guard += 1 - if jitter_guard >= 40: - count_see_object = 0 navigating = False - #if not mock_belt: - if search == False: - - belt_controller.stop_vibration() + if belt_controller: + if search == False: + belt_controller.stop_vibration() + # left + belt_controller.send_pulse_command( + channel_index=0, + orientation_type=BeltOrientationType.ANGLE, + orientation=45, + intensity=vibration_intensity, + on_duration_ms=100, + pulse_period=500, + pulse_iterations=3, + series_period=5000, + series_iterations=1, + timer_option=BeltVibrationTimerOption.RESET_TIMER, + exclusive_channel=False, + clear_other_channels=False + ) + search = True - #left - belt_controller.send_pulse_command( - channel_index=0, - orientation_type=BeltOrientationType.ANGLE, - orientation=45, - intensity=vibration_intensity, - on_duration_ms=100, - pulse_period=500, - pulse_iterations=3, - series_period=5000, - series_iterations=1, - timer_option=BeltVibrationTimerOption.RESET_TIMER, - exclusive_channel=False, - clear_other_channels=False - ) - - search = True - count_searching += 1 - if count_searching >= 150: search = False count_searching = 0 return horizontal, vertical, grasp, obj_seen_prev, search, count_searching, count_see_object, jitter_guard, navigating - - # if the camera cannot see the hand but the object is visible, tell them to move the hand around - if bbox_obj != None: + + + # 4. Lost hand: If the camera cannot see the hand but the object is visible, tell them to move the hand around + if target is not None: if search == True: jitter_guard = 0 search = False jitter_guard += 1 - - if jitter_guard >= 40: - + if jitter_guard >= 40: navigating = False count_searching = 0 + + #print("Lost hand from the field of view.") if obj_seen_prev == False: - - belt_controller.stop_vibration() - - #down - belt_controller.send_pulse_command( - channel_index=0, - orientation_type=BeltOrientationType.ANGLE, - orientation=120, - intensity=vibration_intensity, - on_duration_ms=100, - pulse_period=500, - pulse_iterations=3, - series_period=5000, - series_iterations=1, - timer_option=BeltVibrationTimerOption.RESET_TIMER, - exclusive_channel=False, - clear_other_channels=False - ) - + if belt_controller: + belt_controller.stop_vibration() + #down + belt_controller.send_pulse_command( + channel_index=0, + orientation_type=BeltOrientationType.ANGLE, + orientation=120, + intensity=vibration_intensity, + on_duration_ms=100, + pulse_period=500, + pulse_iterations=3, + series_period=5000, + series_iterations=1, + timer_option=BeltVibrationTimerOption.RESET_TIMER, + exclusive_channel=False, + clear_other_channels=False + ) obj_seen_prev = True - - count_see_object += 1 + count_see_object += 1 if count_see_object >= 150: obj_seen_prev = False count_see_object = 0 @@ -333,9 +387,6 @@ def start_listener(): return horizontal, vertical, grasp, obj_seen_prev, search, count_searching, count_see_object, jitter_guard, navigating else: - print('Condition not covered by logic. Maintaining variables and standing by.') - - return horizontal, vertical, grasp, obj_seen_prev, search, count_searching, count_see_object, jitter_guard, navigating - - + grasp = False + return horizontal, vertical, grasp, obj_seen_prev, search, count_searching, count_see_object, jitter_guard, navigating \ No newline at end of file diff --git a/aibox/egohands_labels.txt b/aibox/egohands_labels.txt new file mode 100644 index 00000000..c2450d02 --- /dev/null +++ b/aibox/egohands_labels.txt @@ -0,0 +1,4 @@ +myleft +myright +yourleft +yourright \ No newline at end of file diff --git a/aibox/labels.py b/aibox/labels.py new file mode 100644 index 00000000..a00ef0bd --- /dev/null +++ b/aibox/labels.py @@ -0,0 +1,82 @@ +coco_labels = { +0: "person", +1: "bicycle", +2: "car", +3: "motorcycle", +4: "airplane", +5: "bus", +6: "train", +7: "truck", +8: "boat", +9: "traffic light", +10: "fire hydrant", +11: "stop sign", +12: "parking meter", +13: "bench", +14: "bird", +15: "cat", +16: "dog", +17: "horse", +18: "sheep", +19: "cow", +20: "elephant", +21: "bear", +22: "zebra", +23: "giraffe", +24: "backpack", +25: "umbrella", +26: "handbag", +27: "tie", +28: "suitcase", +29: "frisbee", +30: "skis", +31: "snowboard", +32: "sports ball", +33: "kite", +34: "baseball bat", +35: "baseball glove", +36: "skateboard", +37: "surfboard", +38: "tennis racket", +39: "bottle", +40: "wine glass", +41: "cup", +42: "fork", +43: "knife", +44: "spoon", +45: "bowl", +46: "banana", +47: "apple", +48: "sandwich", +49: "orange", +50: "broccoli", +51: "carrot", +52: "hot dog", +53: "pizza", +54: "donut", +55: "cake", +56: "chair", +57: "couch", +58: "potted plant", +59: "bed", +60: "dining table", +61: "toilet", +62: "tv", +63: "laptop", +64: "mouse", +65: "remote", +66: "keyboard", +67: "cell phone", +68: "microwave", +69: "oven", +70: "toaster", +71: "sink", +72: "refrigerator", +73: "book", +74: "clock", +75: "vase", +76: "scissors", +77: "teddy bear", +78: "hair drier", +79: "toothbrush" +} \ No newline at end of file diff --git a/aibox/master.py b/aibox/master.py index aa09dc03..b32af78d 100644 --- a/aibox/master.py +++ b/aibox/master.py @@ -1,503 +1,492 @@ -# YOLOv5 🚀 by Ultralytics, AGPL-3.0 license -""" -Run YOLOv5 detection inference on images, videos, directories, globs, YouTube, webcam, streams, etc. - -Usage - sources: - $ python detect.py --weights yolov5s.pt --source 0 # webcam - img.jpg # image - vid.mp4 # video - screen # screenshot - path/ # directory - list.txt # list of images - list.streams # list of streams - 'path/*.jpg' # glob - 'https://youtu.be/Zgi9g1ksQHc' # YouTube - 'rtsp://example.com/media.mp4' # RTSP, RTMP, HTTP stream - -Usage - formats: - $ python detect.py --weights yolov5s.pt # PyTorch - yolov5s.torchscript # TorchScript - yolov5s.onnx # ONNX Runtime or OpenCV DNN with --dnn - yolov5s_openvino_model # OpenVINO - yolov5s.engine # TensorRT - yolov5s.mlmodel # CoreML (macOS-only) - yolov5s_saved_model # TensorFlow SavedModel - yolov5s.pb # TensorFlow GraphDef - yolov5s.tflite # TensorFlow Lite - yolov5s_edgetpu.tflite # TensorFlow Edge TPU - yolov5s_paddle_model # PaddlePaddle -""" - -import os -import platform -import sys -from pathlib import Path -import keyboard -import itertools -import torch -from models.common import DetectMultiBackend -from utils.dataloaders import IMG_FORMATS, VID_FORMATS, LoadImages, LoadScreenshots, LoadStreams -from utils.general import (LOGGER, Profile, check_file, check_img_size, check_imshow, check_requirements, colorstr, cv2, - increment_path, non_max_suppression, print_args, scale_boxes, strip_optimizer, xyxy2xywh) -from utils.plots import Annotator, colors, save_one_box -from utils.torch_utils import select_device, smart_inference_mode -from bracelet import navigate_hand, connect_belt -from playsound import playsound -import threading - -#print(torch.version.cuda) - -FILE = Path(__file__).resolve() -ROOT = FILE.parents[0] # YOLOv5 root directory -if str(ROOT) not in sys.path: - sys.path.append(str(ROOT)) # add ROOT to PATH -ROOT = Path(os.path.relpath(ROOT, Path.cwd())) # relative - - -# Yolov5 objects and their IDs -obj_name_dict = { -0: "person", -1: "bicycle", -2: "car", -3: "motorcycle", -4: "airplane", -5: "bus", -6: "train", -7: "truck", -8: "boat", -9: "traffic light", -10: "fire hydrant", -11: "stop sign", -12: "parking meter", -13: "bench", -14: "bird", -15: "cat", -16: "dog", -17: "horse", -18: "sheep", -19: "cow", -20: "elephant", -21: "bear", -22: "zebra", -23: "giraffe", -24: "backpack", -25: "umbrella", -26: "handbag", -27: "tie", -28: "suitcase", -29: "frisbee", -30: "skis", -31: "snowboard", -32: "sports ball", -33: "kite", -34: "baseball bat", -35: "baseball glove", -36: "skateboard", -37: "surfboard", -38: "tennis racket", -39: "bottle", -40: "wine glass", -41: "cup", -42: "fork", -43: "knife", -44: "spoon", -45: "bowl", -46: "banana", -47: "apple", -48: "sandwich", -49: "orange", -50: "broccoli", -51: "carrot", -52: "hot dog", -53: "pizza", -54: "donut", -55: "cake", -56: "chair", -57: "couch", -58: "potted plant", -59: "bed", -60: "dining table", -61: "toilet", -62: "tv", -63: "laptop", -64: "mouse", -65: "remote", -66: "keyboard", -67: "cell phone", -68: "microwave", -69: "oven", -70: "toaster", -71: "sink", -72: "refrigerator", -73: "book", -74: "clock", -75: "vase", -76: "scissors", -77: "teddy bear", -78: "hair drier", -79: "toothbrush" -} - -def playstart(): - file = ROOT / f'sound/beginning.mp3' - playsound(str(file)) - -def play_start(): - play_start_thread = threading.Thread(target=playstart, name='play_start') - play_start_thread.start() - -@smart_inference_mode() -def run( - weights_obj=ROOT / 'yolov5s.pt', # model_obj path or triton URL - weights_hand=ROOT / 'hand.pt', # model_obj path or triton URL - source=ROOT / 'data/images', # file/dir/URL/glob/screen/0(webca - iou_thres=0.45, # NMS IOU threshold - max_det=1000, # maximum detections per image - device='', # cuda device, i.e. 0 or 0,1,2,3 or cpu - view_img=False, # show results - save_txt=False, # save results to *.txtm) - #data_obj=ROOT / 'coco.yaml', # dataset.yaml path - #data_hand=ROOT / 'data.yaml', # dataset.yaml path - imgsz=(640, 640), # inference size (height, width) - conf_thres=0.7, # confidence threshold - save_conf=False, # save confidences in --save-txt labels - save_crop=False, # save cropped prediction boxes - nosave=False, # do not save images/videos - classes_obj=[1,39,40,41,45,46,47,58,74], # filter by class / check coco.yaml file or obj_name_dict variable in this script - classes_hand=[0,1], - class_hand_nav=[80,81], - agnostic_nms=False, # class-agnostic NMS - augment=False, # augmented inference - visualize=False, # visualize features - update=False, # update all models - project=ROOT / 'runs/detect', # save results to project/name - name='exp', # save results to project/name - exist_ok=False, # existing project/name ok, do not increment - line_thickness=3, # bounding box thickness (pixels) - hide_labels=False, # hide labels - hide_conf=False, # hide confidences - half=False, # use FP16 half-precision inference - dnn=False, # use OpenCV DNN for ONNX inference - vid_stride=1, # video frame-rate stride_obj - manual_entry=False # True means you will control the exp manually versus the standard automatic running -): - - if manual_entry == False: - target_objs = ['cup','banana','potted plant','bicycle','apple','clock','wine glass'] - #target_objs = ['wine glass'] - obj_index = 0 - gave_command = False - - print('The experiment will be run automatically. The selected target objects, in sequence, are:') - print(target_objs) - - else: - print('The experiment will be run manually. You will enter the desired target for each run yourself.') - - connection_check, belt_controller = connect_belt() - if connection_check: - print('Belt connection successful') - else: - print('Error connecting belt. Aborting.') - sys.exit() - - try: - source = str(source) - print('Camera connection successful') - except: - print('Cannot access selected source. Aborting.') - sys.exit() - - play_start() - - save_img = not nosave and not source.endswith('.txt') # save inference images - is_file = Path(source).suffix[1:] in (IMG_FORMATS + VID_FORMATS) - is_url = source.lower().startswith(('rtsp://', 'rtmp://', 'http://', 'https://')) - webcam = source.isnumeric() or source.endswith('.streams') or (is_url and not is_file) - screenshot = source.lower().startswith('screen') - if is_url and is_file: - source = check_file(source) # download - - # Directories - save_dir = increment_path(Path(project) / name, exist_ok=exist_ok) # increment run - (save_dir / 'labels' if save_txt else save_dir).mkdir(parents=True, exist_ok=True) # make dir - - # Load model_obj - device = select_device(device) - model_obj = DetectMultiBackend(weights_obj, device=device, dnn=dnn, fp16=half) - model_hand = DetectMultiBackend(weights_hand, device=device, dnn=dnn, fp16=half) - stride_obj, names_obj, pt_obj = model_obj.stride, model_obj.names, model_obj.pt - stride_hand, names_hand, pt_hand = model_hand.stride, model_hand.names, model_hand.pt - imgsz = check_img_size(imgsz, s=stride_obj) # check image size - - # Dataloader - bs = 1 # batch_size - view_img = check_imshow(warn=True) - dataset = LoadStreams(source, img_size=imgsz, stride=stride_obj, auto=True, vid_stride=vid_stride) - bs = len(dataset) - vid_path, vid_writer = [None] * bs, [None] * bs - - # Run inference - model_obj.warmup(imgsz=(1 if pt_obj or model_obj.triton else bs, 3, *imgsz)) # warmup - model_hand.warmup(imgsz=(1 if pt_hand or model_hand.triton else bs, 3, *imgsz)) # warmup - - seen, windows, dt = 0, [], (Profile(), Profile(), Profile()) - - # # Initialize a list to store bounding boxes for hands and objects - bboxs_hands = [] - bboxs_objs = [] - - horizontal_in, vertical_in = False, False - target_entered = False - - for path, im, im0s, vid_cap, s in dataset: - with dt[0]: - im_obj = torch.from_numpy(im).to(model_obj.device) - im_obj = im_obj.half() if model_obj.fp16 else im_obj.float() # uint8 to fp16/32 - im_obj /= 255 # 0 - 255 to 0.0 - 1.0 - if len(im_obj.shape) == 3: - im_obj = im_obj[None] # expand for batch dim - - im_hand = torch.from_numpy(im).to(model_hand.device) - im_hand = im_hand.half() if model_hand.fp16 else im_hand.float() # uint8 to fp16/32 - im_hand /= 255 # 0 - 255 to 0.0 - 1.0 - if len(im_hand.shape) == 3: - im_hand = im_hand[None] # expand for batch dim - - # Inference - with dt[1]: - visualize = increment_path(save_dir / Path(path).stem, mkdir=True) if visualize else False - pred_obj = model_obj(im_obj, augment=augment, visualize=visualize) - pred_hand = model_hand(im_hand, augment=augment, visualize=visualize) - - # NMS - with dt[2]: - pred_obj = non_max_suppression(pred_obj, conf_thres, iou_thres, classes_obj, agnostic_nms, max_det=max_det) - pred_hand = non_max_suppression(pred_hand, conf_thres, iou_thres, classes_hand, agnostic_nms, max_det=max_det) - - p, im0, frame = path[0], im0s[0].copy(), dataset.count - s += f'{0}: ' - - index_add = len(names_obj) - labels_hand_adj = {key + index_add: value for key, value in names_hand.items()} - master_label = names_obj|labels_hand_adj - - # Process hand predictions - for i, (hand,object) in enumerate(itertools.zip_longest(pred_hand,pred_obj)): # per image - - i = 0 - seen += 1 - - p, im0, frame = path[i], im0s[i].copy(), dataset.count - s += f'{i}: ' - - p = Path(p) # to Path - save_path = str(save_dir / p.name) # im.jpg - txt_path = str(save_dir / 'labels' / p.stem) + ('' if dataset.mode == 'image' else f'_{frame}') # im.txt - s += '%gx%g ' % im.shape[2:] # print string - gn = torch.tensor(im0.shape)[[1, 0, 1, 0]] # normalization gain whwh - imc = im0.copy() if save_crop else im0 # for save_crop - annotator = Annotator(im0, line_width=line_thickness, example=str(names_obj)) - - if len(hand): - - # Rescale boxes from img_size to im0 size - hand[:, :4] = scale_boxes(im.shape[2:], hand[:, :4], im0.shape).round() - - for k, (*xyxy, conf, cls) in enumerate(reversed(hand)): - hand[-k-1][-1] = cls + index_add - - # Print results - for c in hand[:, 5].unique(): - n = (hand[:, 5] == c).sum() # detections per class - s += f"{n} {master_label[int(c)]}{'s' * (n > 1)}, " # add to string - - # Write results - for *xyxy, conf, cls in reversed(hand): - # Milad s - # Collect bounding box information - bbox = xyxy2xywh(torch.tensor(xyxy).view(1, 4)).view(-1).tolist() - - bboxs_hands.append({ - "class": int(cls), - "label": master_label[int(cls)], - "confidence": conf, - "bbox": bbox - }) - - if len(object): - # Rescale boxes from img_size to im0 size - object[:, :4] = scale_boxes(im.shape[2:], object[:, :4], im0.shape).round() - - # Print results - for c in object[:, 5].unique(): - n = (object[:, 5] == c).sum() # detections per class - s += f"{n} {master_label[int(c)]}{'s' * (n > 1)}, " # add to string - - for *xyxy, conf, cls in reversed(object): - # Milad s - # Collect bounding box information - bbox = xyxy2xywh(torch.tensor(xyxy).view(1, 4)).view(-1).tolist() - - bboxs_objs.append({ - "class": int(cls), - "label": master_label[int(cls)], - "confidence": conf, - "bbox": bbox - }) - - if len(object) and len(hand): - boxes = torch.cat((object, hand), dim=0) - else: - boxes = object if len(object) else hand - - - for *xyxy, conf, cls in reversed(boxes): - - if save_img or save_crop or view_img: # Add bbox to image - c = int(cls) # integer class - label = None if hide_labels else (master_label[c] if hide_conf else f'{master_label[c]} {conf:.2f}') - annotator.box_label(xyxy, label, color=colors(c, True)) - - # Stream results - im0 = annotator.result() - if view_img: - if platform.system() == 'Linux' and p not in windows: - windows.append(p) - cv2.namedWindow(str(p), cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO) # allow window resize (Linux) - cv2.resizeWindow(str(p), im0.shape[1], im0.shape[0]) - cv2.imshow(str(p), im0) - cv2.waitKey(1) # 1 millisecond - - #Save results (image with detections) - if save_img: - if dataset.mode == 'image': - cv2.imwrite(save_path, im0) - else: # 'video' or 'stream' - if vid_path[i] != save_path: # new video - vid_path[i] = save_path - if isinstance(vid_writer[i], cv2.VideoWriter): - vid_writer[i].release() # release previous video writer - if vid_cap: # video - fps = vid_cap.get(cv2.CAP_PROP_FPS) - w = int(vid_cap.get(cv2.CAP_PROP_FRAME_WIDTH)) - h = int(vid_cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) - else: # stream - fps, w, h = 30, im0.shape[1], im0.shape[0] - save_path = str(Path(save_path).with_suffix('.mp4')) # force *.mp4 suffix on results videos - vid_writer[i] = cv2.VideoWriter(save_path, cv2.VideoWriter_fourcc(*'mp4v'), fps, (w, h)) - vid_writer[i].write(im0) - - # Print time (inference-only) - #LOGGER.info(f"{s}{'' if len(hand) or len(object) else '(no detections), '}{dt[1].dt * 1E3:.1f}ms") - - # Hand navigation loop - # After passing target object class hand is navigated in each frame until grasping command is sent - - if manual_entry == True: - if target_entered == False: - user_in = "n" - while user_in == "n": - print("These are the available objects:") - print(obj_name_dict) - target_obj_verb = input('Enter the object you want to target: ') - - if target_obj_verb in obj_name_dict.values(): - user_in = input("Selected object is " + target_obj_verb + ". Correct? [y,n]") - file = ROOT / f'sound/{target_obj_verb}.mp3' - playsound(str(file)) - else: - print(f'The object {target_obj_verb} is not in the list of available targets. Please reselect.') - - target_entered = True - grasp = False - horizontal_in, horizontal_out = False, False - vertical_in, vertical_out = False, False - obj_seen_prev, search, navigating = False, False, False - count_searching, count_see_object, jitter_guard = 0,0,0 - - elif target_entered: - pass - - # Navigate the hand based on information from last frame and current frame detections - horizontal_out, vertical_out, grasp, obj_seen_prev, search, count_searching, count_see_object, jitter_guard, navigating = navigate_hand(belt_controller,bboxs_hands,bboxs_objs,target_obj_verb, class_hand_nav, horizontal_in, vertical_in, grasp, obj_seen_prev, search, count_searching, count_see_object, jitter_guard,navigating) - - # Exit the loop if hand and object aligned horizontally and vertically and grasp signal was sent - if grasp: - target_entered = False - - #horizontal_in, vertical_in = False, False - - # Set values of the inputs for the next loop iteration - if horizontal_out: - horizontal_in = True - if vertical_out: - vertical_in = True - - # Clear bbox_info after applying navigation logic for the current frame - bboxs_hands = [] - bboxs_objs = [] - - else: - - target_obj_verb = target_objs[obj_index] - - if gave_command == False: - file = ROOT / f'sound/{target_obj_verb}.mp3' - playsound(str(file)) - grasp = False - horizontal_in, horizontal_out = False, False - vertical_in, vertical_out = False, False - gave_command = True - obj_seen_prev, search, navigating = False, False, False - count_searching, count_see_object, jitter_guard = 0,0,0 - - # Navigate the hand based on information from last frame and current frame detections - horizontal_out, vertical_out, grasp, obj_seen_prev, search, count_searching, count_see_object, jitter_guard, navigating = navigate_hand(belt_controller,bboxs_hands,bboxs_objs,target_obj_verb, class_hand_nav, horizontal_in, vertical_in, grasp, obj_seen_prev, search, count_searching, count_see_object, jitter_guard,navigating) - - if grasp and ((obj_index+1)<=len(target_objs)): - gave_command = False - obj_index += 1 - - if obj_index == len(target_objs): - file = ROOT / f'sound/ending.mp3' - playsound(str(file)) - print('Experiment Completed') - break - - # Exit the loop if hand and object aligned horizontally and vertically and grasp signal was sent - if horizontal_out and vertical_out and grasp: - target_entered = False - - #horizontal_in, vertical_in = False, False - - # Set values of the inputs for the next loop iteration - if horizontal_out: - horizontal_in = True - if vertical_out: - vertical_in = True - - # Clear bbox_info after applying navigation logic for the current frame - bboxs_hands = [] - bboxs_objs = [] - - -# def main(weights_obj, weights_hand, source): -# ''' -# Function that navigates hand toward target object based on input from object and hand detectors. -# Input: -# • weights_obj - weights for the object detector model -# • weights_hand - weights for the hand detector model -# • source - source of the visual data for which navigation will be applied; for default system camera type 0 or "0" -# ''' -# #check_requirements(ROOT / 'requirements.txt', exclude=('tensorboard', 'thop')) -# run(weights_obj=weights_obj, weights_hand= weights_hand, source=source) - - -if __name__ == '__main__': - weights_obj = 'aibox/yolov5s.pt' # Object model weights path - weights_hand = 'aibox/hand.pt'# Hands model weights path - source = '1' # Input image path - # Add other parameters as needed - - run(weights_obj=weights_obj, weights_hand=weights_hand, source=source) +""" +This script is using code from the following sources: +- YOLOv5 🚀 by Ultralytics, AGPL-3.0 license, https://github.com/ultralytics/yolov5 +- StrongSORT MOT, https://github.com/dyhBUPT/StrongSORT, https://pypi.org/project/strongsort/ +- Youtube Tutorial "Simple YOLOv8 Object Detection & Tracking with StrongSORT & ByteTrack" by Nicolai Nielsen, https://www.youtube.com/watch?v=oDALtKbprHg +- https://github.com/zenjieli/Yolov5StrongSORT/blob/master/track.py, original: https://github.com/mikel-brostrom/yolo_tracking/commit/9fec03ddba453959f03ab59bffc36669ae2e932a +""" + +# region Setup + +# System +import os +import requests +import platform +import sys +from pathlib import Path +import itertools +import time +import numpy as np + +# Use the project file packages instead of the conda packages, i.e. add to system path for import +file = Path(__file__).resolve() +root = file.parents[0] +sys.path.append(str(root) + '/yolov5') +sys.path.append(str(root) + '/strongsort') +sys.path.append(str(root) + '/MiDaS') + +# Object tracking +import torch +from labels import coco_labels # COCO labels dictionary +from yolov5.models.common import DetectMultiBackend +from yolov5.utils.dataloaders import IMG_FORMATS, VID_FORMATS, LoadImages, LoadScreenshots, LoadStreams +from yolov5.utils.general import (LOGGER, Profile, check_file, check_img_size, check_imshow, check_requirements, colorstr, cv2, + increment_path, non_max_suppression, print_args, scale_boxes, strip_optimizer, xyxy2xywh) +from yolov5.utils.plots import Annotator, colors, save_one_box +from yolov5.utils.torch_utils import select_device, smart_inference_mode +from strongsort.strong_sort import StrongSORT # there is also a pip install, but it has multiple errors + +# DE +from MiDaS.midas.model_loader import default_models, load_model +from MiDaS.run import create_side_by_side, process + +# Navigation +from bracelet import navigate_hand, connect_belt + +# Utility +import keyboard +from playsound import playsound +import threading + +# endregion + +# region Helpers + +def playstart(): + file = 'resources/sound/beginning.mp3' # ROOT + playsound(str(file)) + + +def play_start(): + play_start_thread = threading.Thread(target=playstart, name='play_start') + play_start_thread.start() + + +def close_app(controller): + print("Application will be closed") + cv2.destroyAllWindows() + # As far as I understood, all threads are properly closed by releasing their locks before being stopped + threads = threading.enumerate() + for thread in threads: + thread._tstate_lock = None + thread._stop() + controller.disconnect_belt() if controller else None + sys.exit() + + +def get_midas_weights(model_type): + + path = f'./MiDaS/weights/{model_type}.pt' + + # Download weights if not available + if not os.path.exists(path): + print("File does not exist. Downloading weights...") + + # Get version from model type + if 'v21' in model_type: + version = 'v2_1' + elif model_type == 'dpt_large_384' or model_type == 'dpt_hybrid_384': + version = 'v3' + else: + print('Fallback to latest version V3.1 (May 2024).') + version = 'v3_1' + + # Create and download from URL + url = f'https://github.com/isl-org/MiDaS/releases/download/{version}/{model_type}.pt' + response = requests.get(url) + if response.status_code == 200: + with open(path, 'wb') as file: + file.write(response.content) + print("Weights downloaded successfully!") + else: + print("Failed to download weights file. Status code:", response.status_code) + else: + print("Weights already exists!") + + weights = f'./MiDaS/weights/{model_type}.pt' + + return weights + + +def get_depth(image, transform, device, model, model_type, net_w, net_h, vis=False, sides=False): + """ + Depth Estimation with MiDaS. + """ + if image.max() > 1: + img = np.flip(image, 2) # in [0, 255] (flip required to get RGB) + img = img/255 + img_resized = transform({"image": img})["image"] + + depth = process(device, model, model_type, img_resized, (net_w, net_h), + image.shape[1::-1], False, True) + + if vis: + original_image_bgr = np.flip(image, 2) if sides else None + content = create_side_by_side(original_image_bgr, depth, False) + cv2.imshow('MiDaS Depth Estimation', content/255) + + return depth + + +def xyxy_to_xywh(bb): + x1, y1, x2, y2 = bb + w = abs(x2 - x1) + h = abs(y2 - y1) + x = x1 + w//2 + y = y1 + h//2 + return [x, y, w, h] + +# endregion + +@smart_inference_mode() +def run(weights_obj='yolov5s.pt', # model_obj path or triton URL # ROOT + weights_hand='hand.pt', # model_obj path or triton URL # ROOT + weights_tracker='osnet_x0_25_market1501.pt', # ROOT + source='data/images', # file/dir/URL/glob/screen/0(webcam) # ROOT + iou_thres=0.45, # NMS IOU threshold + max_det=1000, # maximum detections per image + device='', # cuda device, i.e. 0 or 0,1,2,3 or cpu + view_img=False, # show results + save_txt=False, # save results to *.txtm) + imgsz=(640, 640), # inference size (height, width) + conf_thres=0.7, # confidence threshold + save_conf=False, # save confidences in --save-txt labels + save_crop=False, # save cropped prediction boxes + nosave=False, # do not save images/videos + classes_obj=[1,39,40,41,45,46,47,58,74], # filter by class / check coco.yaml file or coco_labels variable in this script + classes_hand=[0,1], + class_hand_nav=[80,81], + agnostic_nms=False, # class-agnostic NMS + augment=False, # augmented inference + visualize=False, # visualize features + update=False, # update all models + project='runs/detect', # save results to project/name # ROOT + name='video', # save results to project/name + exist_ok=False, # existing project/name ok, do not increment + line_thickness=3, # bounding box thickness (pixels) + hide_labels=False, # hide labels + hide_conf=False, # hide confidences + half=False, # use FP16 half-precision inference + dnn=False, # use OpenCV DNN for ONNX inference + vid_stride=1, # video frame-rate stride_obj + manual_entry=False, # True means you will control the exp manually versus the standard automatic running + mock_navigate=True, # True means that navigation will be conducted only via print commands without connecting the bracelet + run_object_tracker=True # True means that the object tracker model will be initialized and used + ): + + # region main setup + + # Experiment setup + if not manual_entry: + target_objs = ['apple','banana','potted plant','bicycle','cup','clock','wine glass'] + target_objs = ['bottle' for _ in range(5)] # debugging + obj_index = 0 + print(f'The experiment will be run automatically. The selected target objects, in sequence, are:\n{target_objs}') + else: + print('The experiment will be run manually. You will enter the desired target for each run yourself.') + + target_entered = False + play_start() # play welcome sound + + # Configure saving + save_img = not nosave and not source.endswith('.txt') # save inference images + is_file = Path(source).suffix[1:] in (IMG_FORMATS + VID_FORMATS) + is_url = source.lower().startswith(('rtsp://', 'rtmp://', 'http://', 'https://')) + webcam = source.isnumeric() or source.endswith('.streams') or (is_url and not is_file) + screenshot = source.lower().startswith('screen') + + if is_url and is_file: + source = check_file(source) # download + + save_dir = increment_path(Path(project) / name, exist_ok=exist_ok) # increment run + if save_img: + (save_dir / 'labels' if save_txt else save_dir).mkdir(parents=True, exist_ok=True) # make dir + + # Load object detection models + print(f'\nLOADING OBJECT DETECTORS') + device = select_device(device) + model_obj = DetectMultiBackend(weights_obj, device=device, dnn=dnn, fp16=half) + model_hand = DetectMultiBackend(weights_hand, device=device, dnn=dnn, fp16=half) + + stride_obj, names_obj, pt_obj = model_obj.stride, model_obj.names, model_obj.pt + stride_hand, names_hand, pt_hand = model_hand.stride, model_hand.names, model_hand.pt + imgsz = check_img_size(imgsz, s=stride_obj) # check image size + dt = (Profile(), Profile(), Profile()) + + # Load data stream + bs = 1 # batch_size + view_img = check_imshow(warn=True) + try: + dataset = LoadStreams(source, img_size=imgsz, stride=stride_obj, auto=True, vid_stride=vid_stride) + except AssertionError: + while True: + change_camera = input(f'Failed to open camera with index {source}. Do you want to continue with webcam? (Y/N)') + if change_camera == 'Y': + source = '0' + dataset = LoadStreams(source, img_size=imgsz, stride=stride_obj, auto=True, vid_stride=vid_stride) + break + elif change_camera == 'N': + exit() + bs = len(dataset) + vid_path, vid_writer = [None] * bs, [None] * bs + + # Create combined label dictionary + index_add = len(names_obj) + labels_hand_adj = {key + index_add: value for key, value in names_hand.items()} + master_label = names_obj | labels_hand_adj + + # Load tracker model + if run_object_tracker: + print(f'LOADING OBJECT TRACKER') + tracker = StrongSORT( + model_weights=weights_tracker, + device=device, + fp16=False, + max_dist=0.5, # The matching threshold. Samples with larger distance are considered an invalid match + max_iou_distance=0.7, # Gating threshold. Associations with cost larger than this value are disregarded. + max_age=70, # Maximum number of missed misses (prediction calls, i.e. frames I think) before a track is deleted + n_init=1, # Number of frames that a track remains in initialization phase --> if 0, track is confirmed on first detection + nn_budget=100, # Maximum size of the appearance descriptors gallery + mc_lambda=0.995, # matching with both appearance (1 - MC_LAMBDA) and motion cost + ema_alpha=0.9 # updates appearance state in an exponential moving average manner + ) + else: + print('SKIPPING OBJECT TRACKER INITIALIZATION') + + # Load depth estimator + print(f'\nLOADING DEPTH ESTIMATOR') + model_type = 'midas_v21_small_256' # smallest and fastest model + #model_type = 'dpt_large_384' # baseline model (~3FPS, better accuracy) + weights_DE = get_midas_weights(model_type) + model, transform, net_w, net_h = load_model(device, weights_DE, model_type, optimize=False, height=640, square=False) + + # Warmup models + model_obj.warmup(imgsz=(1 if pt_obj or model_obj.triton else bs, 3, *imgsz)) + model_hand.warmup(imgsz=(1 if pt_hand or model_hand.triton else bs, 3, *imgsz)) + if run_object_tracker: + tracker.model.warmup() + + # endregion + + + # region main tracking + + print(f'\nSTARTING MAIN LOOP') + + # Initialize vars for tracking + prev_frames = None + curr_frames = None + fpss = [] + outputs = [] + + # Data processing: Iterate over each frame of the live stream + for frame, (path, im, im0s, vid_cap, _) in enumerate(dataset): + + # Start timer for FPS measure + start = time.perf_counter() + + # Setup saving and visualization + p, im0 = Path(path[0]), im0s[0].copy() # idx 0 is for first source (and we only have one source) + save_path = str(save_dir / p.name) # im.jpg + annotator = Annotator(im0, line_width=line_thickness, example=str(names_obj)) + + # Image pre-processing + with dt[0]: + image = torch.from_numpy(im).to(model_obj.device) + image = image.half() if model_obj.fp16 else image.float() # uint8 to fp16/32 + image /= 255 # 0 - 255 to 0.0 - 1.0 + if len(image.shape) == 3: + image = image[None] # expand for batch dim + + # Object detection inference + with dt[1]: + visualize = increment_path(save_dir / Path(path).stem, mkdir=True) if visualize else False + pred_target = model_obj(image, augment=augment, visualize=visualize) + pred_hand = model_hand(image, augment=augment, visualize=visualize) + + # Non-maximal supression + with dt[2]: + pred_target = non_max_suppression(pred_target, conf_thres, iou_thres, classes_obj, agnostic_nms, max_det=max_det) # list containing one tensor (n,6) + pred_hand = non_max_suppression(pred_hand, conf_thres, iou_thres, classes_hand, agnostic_nms, max_det=max_det) # list containing one tensor (n,6) + + for hand in pred_hand[0]: + if len(hand): + hand[5] += index_add # assign correct classID by adding len(coco_labels) + + # Camera motion compensation for tracker (ECC) + if run_object_tracker: + curr_frames = im0 + tracker.tracker.camera_update(prev_frames, curr_frames) + + # Initialize/clear detections + xywhs = torch.empty(0,4) + confs = torch.empty(0) + clss = torch.empty(0) + + # Process object detections + preds = torch.cat((pred_target[0], pred_hand[0]), dim=0) + if len(preds) > 0: + preds[:, :4] = scale_boxes(im.shape[2:], preds[:, :4], im0.shape).round() + xywhs = xyxy2xywh(preds[:, :4]) + confs = preds[:, 4] + clss = preds[:, 5] + + # Depth estimation + depth = get_depth(im0, transform, device, model, model_type, net_w, net_h) + print(f'Depth {depth.shape}, min {depth.min()}, max {depth.max()}') + + # Generate tracker outputs for navigation + if run_object_tracker: + outputs = tracker.update(xywhs.cpu(), confs.cpu(), clss.cpu(), im0) # returns xyxys again + + # Get FPS + end = time.perf_counter() + runtime = end - start + fps = 1 / runtime + fpss.append(fps) + prev_frames = curr_frames + + # region visualization + # Write results + for *xyxy, obj_id, cls, conf in outputs: + id, cls = int(obj_id), int(cls) + if save_img or save_crop or view_img: + label = None if hide_labels else (f'ID: {id} {master_label[cls]}' if hide_conf else (f'ID: {id} {master_label[cls]} {conf:.2f}')) + annotator.box_label(xyxy, label, color=colors(cls, True)) + + # Display results + im0 = annotator.result() + if view_img: + #cv2.namedWindow("AIBox", cv2.WINDOW_NORMAL | cv2.WINDOW_KEEPRATIO) # for resizing + cv2.putText(im0, f'FPS: {int(fps)}, Avg: {int(np.mean(fpss))}', (20,70), cv2.FONT_HERSHEY_SIMPLEX, 1.0, (0,255,0), 1) + #cv2.imshow("AIBox", im0) # original image only + side_by_side = create_side_by_side(im0, depth, False) # original image & depth side-by-side + cv2.imshow("AIBox & Depth", side_by_side) + #cv2.resizeWindow("AIBox", im0.shape[1]//2, im0.shape[0]//2) # for resizing + if cv2.waitKey(1) & 0xFF == ord('q'): + break + + # Save results + if save_img: + if dataset.mode == 'image': + cv2.imwrite(save_path, im0) + else: # 'video' or 'stream' + if vid_path[0] != save_path: # new video + vid_path[0] = save_path + if isinstance(vid_writer[0], cv2.VideoWriter): + vid_writer[0].release() # release previous video writer + if vid_cap: # video + fps = vid_cap.get(cv2.CAP_PROP_FPS) + w = int(vid_cap.get(cv2.CAP_PROP_FRAME_WIDTH)) + h = int(vid_cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) + else: # stream + fps, w, h = 30, im0.shape[1], im0.shape[0] + save_path = str(Path(save_path).with_suffix('.mp4')) # force *.mp4 suffix on results videos + vid_writer[0] = cv2.VideoWriter(save_path, cv2.VideoWriter_fourcc(*'mp4v'), fps, (w, h)) + vid_writer[0].write(im0) + + # endregion + + # Convert BBs after display + if len(outputs) > 0: + for det in range(len(outputs)): + outputs[det, :4] = xyxy_to_xywh(outputs[det, :4]) + + # endregion + + + # region main navigation + # Get the target object class + if not target_entered: + if manual_entry: + user_in = "n" + while user_in == "n": + print("These are the available objects:") + print(coco_labels) + target_obj_verb = input('Enter the object you want to target: ') + + if target_obj_verb in coco_labels.values(): + user_in = input("Selected object is " + target_obj_verb + ". Correct? [y,n]") + class_target_obj = next(key for key, value in coco_labels.items() if value == target_obj_verb) + file = f'resources/sound/{target_obj_verb}.mp3' + playsound(str(file)) + # Start trial time measure (end in navigate_hand(...)) + else: + print(f'The object {target_obj_verb} is not in the list of available targets. Please reselect.') + else: + target_obj_verb = target_objs[obj_index] + class_target_obj = next(key for key, value in coco_labels.items() if value == target_obj_verb) + file = f'resources/sound/{target_obj_verb}.mp3' + #playsound(str(file)) + # Start trial time measure (end in navigate_hand(...)) + + target_entered = True + + # Navigate the hand based on information from last frame and current frame detections + if frame == 0: # Initialize navigation + horizonal, vertical, grasp, obj_seen_prev, search, count_searching, count_see_object, jitter_guard, navigating = \ + navigate_hand(belt_controller, outputs, class_target_obj, class_hand_nav) + + horizonal, vertical, grasp, obj_seen_prev, search, count_searching, count_see_object, jitter_guard, navigating = \ + navigate_hand(belt_controller, + outputs, + class_target_obj, + class_hand_nav, + horizonal, + vertical, + grasp, + obj_seen_prev, + search, + count_searching, + count_see_object, + jitter_guard, + navigating) + + # Exit the loop if hand and object aligned horizontally and vertically and grasp signal was sent + if grasp: + if manual_entry and ((obj_index+1)<=len(target_objs)): + obj_index += 1 + target_entered = False + + # endregion + + +if __name__ == '__main__': + + #check_requirements(requirements='../requirements.txt', exclude=('tensorboard', 'thop')) + + weights_obj = 'yolov5s.pt' # Object model weights path + weights_hand = 'hand.pt' # Hands model weights path + weights_tracker = 'osnet_x0_25_market1501.pt' # ReID weights path + source = '1' # image/video path or camera source (0 = webcam, 1 = external, ...) + mock_navigate = True # Navigate without the bracelet using only print commands + belt_controller = None + run_object_tracker = True + + print(f'\nLOADING CAMERA AND BRACELET') + + # Check camera connection + try: + source = str(source) + print('Camera connection successful') + except: + print('Cannot access selected source. Aborting.') + sys.exit() + + # Check bracelet connection + if not mock_navigate: + connection_check, belt_controller = connect_belt() + if connection_check: + print('Bracelet connection successful.') + else: + print('Error connecting bracelet. Aborting.') + sys.exit() + + try: + run(weights_obj=weights_obj, weights_hand=weights_hand, weights_tracker=weights_tracker, source=source, run_object_tracker=run_object_tracker, nosave=True) + close_app(belt_controller) + except KeyboardInterrupt: + close_app(belt_controller) + + # In the end, kill everything + close_app(belt_controller) diff --git a/aibox/old/fruithands.csv b/aibox/old/fruithands.csv deleted file mode 100644 index 79cfa44b..00000000 --- a/aibox/old/fruithands.csv +++ /dev/null @@ -1,1583 +0,0 @@ -filename,width,height,class,xmin,ymin,xmax,ymax -000000034212.jpg,612,612,banana,46.92,416.34,87.24,446.76 -000000017953.jpg,640,427,apple,536.56,323.09,565.52,354.78 -000000019028.jpg,428,640,apple,403.22,336.5,428,356.45 -000000034212.jpg,612,612,apple,534.8,467.45,561.29,490.38 -000000012326.jpg,640,427,banana,448.34,224.2,470.14,239.93 -000000012326.jpg,640,427,apple,401.58,243.63,444.55,257.07 -000000034212.jpg,612,612,orange,3.23,423.56,38.69,457.37 -000000034212.jpg,612,612,orange,533.98,465.94,560.62,490.39 -000000012326.jpg,640,427,orange,419.18,248.58,430.11,256.28 -000000017953.jpg,640,427,apple,587.44,331.52,617.33,358.35 -000000012754.jpg,640,640,apple,56.31,146.55,81.39,152.72 -000000019028.jpg,428,640,apple,213.34,340.3,225.97,348.69 -000000012754.jpg,640,640,apple,79.97,146.03,94.64,153.44 -000000019028.jpg,428,640,apple,197.09,332.98,215.17,348.98 -000000003067.jpg,640,480,apple,137.46,170.25,232.11,272.79 -000000029465.jpg,640,428,apple,259.86,220.73,284.44,237.3 -000000029465.jpg,640,428,apple,566.03,146.28,589.33,161.22 -000000000715.jpg,640,480,banana,238.81,243.61,301.02,322.84 -000000028864.jpg,500,384,banana,149.29,111.32,243.34,263.19 -000000000715.jpg,640,480,banana,461.66,324.67,517.75,406.65 -000000031796.jpg,640,480,banana,158.74,180.92,229.31,239.07 -000000025316.jpg,640,480,banana,76.58,0,622.38,471.04 -000000000715.jpg,640,480,banana,227.25,244.91,510.31,433.89 -000000025521.jpg,640,480,banana,306.07,109.55,405.46,181.84 -000000025521.jpg,640,480,banana,413.36,223.62,527.44,334.31 -000000031796.jpg,640,480,apple,234.77,106.58,338.42,220.76 -000000034915.jpg,414,500,apple,71.67,175.01,97.75,189.57 -000000025316.jpg,640,480,apple,487.28,83.76,640,313.08 -000000025316.jpg,640,480,apple,0,81.32,135.53,220.24 -000000025316.jpg,640,480,apple,0,169.85,79.81,366.57 -000000021397.jpg,640,429,orange,209.9,252.56,275.76,382.11 -000000009077.jpg,640,427,orange,519.96,196.38,621.75,281.71 -000000007913.jpg,500,375,orange,32.78,109.81,59.24,133.35 -000000007913.jpg,500,375,orange,57.03,99.4,82.47,128.42 -000000007913.jpg,500,375,orange,109.86,103.17,118.13,114.31 -000000009077.jpg,640,427,orange,330.06,233.26,339.51,243.52 -000000021397.jpg,640,429,orange,265.32,229.78,410.46,385.03 -000000021397.jpg,640,429,orange,146.36,226.11,253.36,360.36 -000000009077.jpg,640,427,orange,314.98,235.59,325.66,246.26 -000000007913.jpg,500,375,orange,99.41,97.88,117.3,118.95 -000000025521.jpg,640,480,banana,111.68,159.07,204.55,197.84 -000000009077.jpg,640,427,banana,297.28,104.05,329.3,138.14 -000000009077.jpg,640,427,banana,378.45,76.38,411.81,121.24 -000000009077.jpg,640,427,banana,449.36,63.91,487.98,105.06 -000000009077.jpg,640,427,banana,517.18,52.95,571.74,122.39 -000000009077.jpg,640,427,banana,563.32,47.35,613.92,132.08 -000000009077.jpg,640,427,banana,441.45,298.93,485.68,339.2 -000000009077.jpg,640,427,banana,483.34,57.42,540.03,111.74 -000000009077.jpg,640,427,banana,466.95,323.03,528.79,366.61 -000000009077.jpg,640,427,banana,415.47,71.93,453.43,124.26 -000000009077.jpg,640,427,banana,470.7,104.57,490.71,151.88 -000000009077.jpg,640,427,banana,534.61,306.23,554.73,349.48 -000000009077.jpg,640,427,banana,369.61,204.99,405.12,231.26 -000000021397.jpg,640,429,apple,55.85,217.58,201.22,315.97 -000000007913.jpg,500,375,apple,170.88,180.59,500,375 -000000003742.jpg,640,480,apple,245.38,173.99,464.93,319.28 -000000021397.jpg,640,429,apple,8.66,186.56,141.4,276.01 -000000007913.jpg,500,375,apple,102.81,218.96,255.34,334.41 -000000028864.jpg,500,384,apple,67.31,201.92,271.82,342.58 -000000009077.jpg,640,427,apple,334.54,335.58,350.89,353.76 -000000003742.jpg,640,480,apple,122.97,278.11,208.18,366.56 -000000003742.jpg,640,480,apple,199.02,304.51,282.13,368.36 -000000003742.jpg,640,480,apple,168.79,347.84,282.74,448.7 -000000009077.jpg,640,427,apple,311.02,336.01,361.94,378.45 -000000028864.jpg,500,384,apple,55.23,65.87,245.07,203.08 -000000009077.jpg,640,427,apple,345.52,300.64,401.56,343.59 -000000028864.jpg,500,384,apple,200.2,246.8,356.39,326.18 -000000003742.jpg,640,480,apple,373.09,325.93,460.97,416.85 -000000007913.jpg,500,375,apple,159.27,191.99,199.72,229.07 -000000028864.jpg,500,384,apple,290.8,63.05,462.53,240.81 -000000009077.jpg,640,427,apple,327.13,291.9,362.88,329.36 -000000028864.jpg,500,384,apple,326.18,10.95,467.7,133.49 -000000000715.jpg,640,480,apple,33.65,141.22,50.05,160.25 -000000028864.jpg,500,384,apple,353.73,151.35,463.57,307.89 -000000009077.jpg,640,427,apple,368.4,227.26,429.76,271.13 -000000000715.jpg,640,480,apple,24.03,142.99,35.34,158.37 -000000007913.jpg,500,375,apple,243.23,139.45,271.19,159.02 -000000000715.jpg,640,480,apple,49.96,146.83,68.96,165.26 -000000007913.jpg,500,375,apple,187.8,139.73,238.48,171.35 -000000000715.jpg,640,480,apple,7.48,140.32,24.43,155.16 -000000007913.jpg,500,375,apple,176.31,141.74,191.93,156.6 -000000028864.jpg,500,384,apple,88.88,289.94,326.18,347.76 -000000007913.jpg,500,375,apple,125.85,162.2,154.33,185.15 -000000007913.jpg,500,375,apple,346.65,147.8,382.68,175.15 -000000000715.jpg,640,480,apple,4.84,137.94,17.66,151.59 -000000007913.jpg,500,375,apple,98.23,207.99,170.46,261.16 -000000007913.jpg,500,375,apple,210.57,150.13,336.17,263.07 -000000007913.jpg,500,375,apple,341.39,170.66,383.44,208.94 -000000034915.jpg,414,500,orange,47.72,352.67,75.34,385.03 -000000034915.jpg,414,500,orange,61.47,342.12,91.18,362.61 -000000034915.jpg,414,500,orange,75.42,357.49,101.82,387.29 -000000000715.jpg,640,480,orange,136.2,270.78,168.89,304.39 -000000000715.jpg,640,480,orange,287.13,154.15,324.31,199.07 -000000000715.jpg,640,480,orange,196.31,146.7,573.84,282.61 -000000034915.jpg,414,500,orange,53.26,387.53,78.78,412.6 -000000000715.jpg,640,480,orange,147.11,142.74,174.9,169.11 -000000000715.jpg,640,480,orange,112.2,146.07,154.81,183.35 -000000034915.jpg,414,500,orange,20.71,366.08,38.91,390.94 -000000000715.jpg,640,480,orange,88.2,285.29,122.8,317.08 -000000000715.jpg,640,480,orange,238.1,337.96,280.96,380.31 -000000000715.jpg,640,480,orange,349.78,396.45,391.51,439.59 -000000000715.jpg,640,480,orange,461.66,415.28,509.12,467.06 -000000000715.jpg,640,480,orange,482.16,373.21,530.7,417.44 -000000025521.jpg,640,480,apple,366.85,258.18,395.61,304.85 -000000000715.jpg,640,480,apple,84.77,156.3,101.22,172.14 -000000028864.jpg,500,384,apple,237.38,156.59,370.04,334.13 -000000000715.jpg,640,480,apple,71.42,152.91,89.75,170.31 -000000007913.jpg,500,375,apple,97.4,113.96,221.1,236.69 -000000025521.jpg,640,480,apple,151.71,254.92,179.07,288.5 -000000034915.jpg,414,500,orange,358.76,53.74,394.75,67.73 -000000009077.jpg,640,427,orange,276.23,320.96,291.2,335.35 -000000000715.jpg,640,480,orange,169.64,317.06,207.68,351.4 -000000000715.jpg,640,480,orange,128.22,303.17,164.81,335.56 -000000009077.jpg,640,427,orange,285.37,313.16,300.71,328.08 -000000034915.jpg,414,500,orange,344.6,54.45,365.65,70.75 -000000034915.jpg,414,500,orange,308.66,63.64,326.71,76.79 -000000009077.jpg,640,427,orange,286.9,296.28,300.21,311.12 -000000009077.jpg,640,427,orange,292,330.47,305.32,344.49 -000000009077.jpg,640,427,orange,272.69,333.72,288.55,346.87 -000000009077.jpg,640,427,orange,291.3,344.04,306.4,354.42 -000000009077.jpg,640,427,orange,304.3,327.11,318.98,337.91 -000000009077.jpg,640,427,orange,301.49,318.63,315.3,329.96 -000000009077.jpg,640,427,orange,293.5,297.12,308.15,320.28 -000000009077.jpg,640,427,banana,525.42,311.07,545.92,349.55 -000000010324.jpg,425,640,apple,226.03,396.88,248.68,413.92 -000000009077.jpg,640,427,apple,429.56,176.03,440.29,184.71 -000000007913.jpg,500,375,apple,151.19,105.97,204.33,148.88 -000000009077.jpg,640,427,apple,418.32,174.67,429.02,182.65 -000000025521.jpg,640,480,apple,315.01,241.93,337.36,265.27 -000000009077.jpg,640,427,apple,393.04,183.57,445.09,194.9 -000000025521.jpg,640,480,apple,199.92,248.57,232.6,284.75 -000000009077.jpg,640,427,apple,390.21,192.72,396.84,197.44 -000000025521.jpg,640,480,apple,245.51,286.93,288.74,325.47 -000000025521.jpg,640,480,apple,391.03,259.67,425.4,304.42 -000000025521.jpg,640,480,apple,278.06,236.88,318.96,267.21 -000000025521.jpg,640,480,apple,351.33,235.57,387.05,262.59 -000000025521.jpg,640,480,apple,320.45,256.75,368.21,285.8 -000000025521.jpg,640,480,apple,248.76,228.69,278.61,254.07 -000000025521.jpg,640,480,apple,480.5,160.97,578.91,237.22 -000000009077.jpg,640,427,orange,273.88,310.09,287.18,322.85 -000000000715.jpg,640,480,orange,486.72,346.82,526.49,382.7 -000000003742.jpg,640,480,apple,277.18,334.28,369.38,429.82 -000000034915.jpg,414,500,orange,325.67,59.29,346.64,72.91 -000000007913.jpg,500,375,orange,10.29,113.07,28.36,137.57 -000000025521.jpg,640,480,apple,413.01,224.33,518.6,334.9 -000000013980.jpg,640,457,apple,244.09,12.9,357,131.19 -000000021776.jpg,640,360,apple,206.68,159.25,320.19,237.18 -000000030447.jpg,640,480,apple,273.16,0.11,467.63,124.89 -000000030447.jpg,640,480,apple,80.19,0,273.32,124.24 -000000018336.jpg,480,640,apple,72.28,159.62,272.56,338.82 -000000015953.jpg,480,640,apple,0,56.45,271.14,364.42 -000000021776.jpg,640,360,apple,354.19,122.59,467.04,239.46 -000000021217.jpg,639,640,apple,430.54,216.16,614.47,404.04 -000000021217.jpg,639,640,apple,137.28,144.45,314.99,315.87 -000000015947.jpg,640,480,banana,213.6,232.21,243.53,250.07 -000000015947.jpg,640,480,apple,151.21,233.84,181.08,247.51 -000000020908.jpg,612,612,orange,254.77,98.51,287.74,127.96 -000000020908.jpg,612,612,apple,204.72,107.22,231.57,127.36 -000000030932.jpg,330,500,apple,114,308.52,131.46,324.32 -000000030932.jpg,330,500,apple,135.2,291.96,149.23,307.6 -000000030932.jpg,330,500,apple,103.58,295.11,117.58,311.03 -000000030932.jpg,330,500,apple,117.77,297.81,128.81,309.98 -000000017909.jpg,479,640,apple,211.99,317.05,271.5,373.51 -000000017909.jpg,479,640,apple,334.56,303.19,367.59,338.94 -000000017909.jpg,479,640,apple,282.89,325.99,305.58,350.54 -000000000715.jpg,640,480,orange,49,155,506,479 -000000009077.jpg,640,427,orange,305,239,472,282 -000000007913.jpg,500,375,apple,21,95,499,244 -000000007934.jpg,640,480,banana,0,2.16,482.16,305.26 -000000008562.jpg,640,417,banana,118.6,213.44,216.5,405.47 -000000000902.jpg,640,427,banana,166,139.2,271.55,257.22 -000000009511.jpg,640,480,banana,180.13,58.25,545.8,298.79 -000000002902.jpg,640,427,banana,225.65,0,525.31,379.68 -000000026625.jpg,453,640,banana,116.57,340.8,256.9,538.15 -000000009511.jpg,640,480,banana,34.22,148.7,197.44,338.09 -000000007367.jpg,640,480,banana,348.4,213.57,640,476.76 -000000020966.jpg,640,480,banana,178.01,93.05,206.63,116.43 -000000016123.jpg,480,640,banana,0,18.26,477.48,377.81 -000000033946.jpg,483,640,banana,202.79,106.52,343.73,533.67 -000000026812.jpg,333,500,banana,78.48,355.49,147.98,441.82 -000000024714.jpg,640,426,banana,210.53,182.25,241.6,225.96 -000000026812.jpg,333,500,banana,187.14,361.1,237.97,476.62 -000000026812.jpg,333,500,banana,95.51,356.18,202.25,494.38 -000000026041.jpg,640,426,banana,301.55,71.8,458.55,162.74 -000000035820.jpg,640,480,banana,395.87,33.44,506.97,117.57 -000000026041.jpg,640,426,banana,111.26,91.21,229.54,264.62 -000000021260.jpg,480,640,banana,214.33,335.88,368.71,599.68 -000000007367.jpg,640,480,banana,115.2,13.55,592.94,211.2 -000000026812.jpg,333,500,banana,0,370.98,104.2,497.99 -000000026041.jpg,640,426,banana,249.59,75.18,361.85,169.4 -000000026041.jpg,640,426,banana,159.93,102.83,234.66,270.8 -000000021260.jpg,480,640,banana,282.13,342.03,480,594.19 -000000026812.jpg,333,500,banana,0,353.13,42.62,425.36 -000000021447.jpg,640,276,banana,228.2,10.38,366.44,72.78 -000000035820.jpg,640,480,banana,567.8,1.49,633.18,132.75 -000000035820.jpg,640,480,banana,609.47,39.18,640,84.26 -000000026041.jpg,640,426,banana,210.49,115.97,245.58,268.32 -000000026812.jpg,333,500,banana,119.81,82.05,138.24,116.53 -000000026812.jpg,333,500,banana,157.75,64.79,243.66,152.11 -000000026812.jpg,333,500,banana,223.44,351.77,268.15,435.51 -000000023363.jpg,640,467,apple,276.9,107.68,471.4,287.89 -000000002902.jpg,640,427,apple,119.56,157.74,282.32,328.54 -000000012073.jpg,500,375,apple,1.76,3.53,282.35,165 -000000020966.jpg,640,480,apple,143.79,107.75,180.23,121.17 -000000034086.jpg,640,480,apple,469.06,169.89,533.8,234.63 -000000024714.jpg,640,426,apple,265.7,206.83,275.69,215.89 -000000022374.jpg,640,480,apple,32.36,104.48,74.05,134.94 -000000026041.jpg,640,426,apple,331.78,138.32,473.11,258.61 -000000012073.jpg,500,375,apple,286.97,133.8,500,370.6 -000000025411.jpg,314,500,apple,61.03,30.52,281.69,241.78 -000000009866.jpg,640,480,apple,219.15,250.69,342.23,350.44 -000000000670.jpg,640,427,apple,187.25,241.33,246.18,309.77 -000000006753.jpg,443,640,apple,211.96,445.76,233.08,471.42 -000000007944.jpg,640,411,apple,201.64,167.87,312.59,267.25 -000000009185.jpg,640,428,apple,424.78,115.78,560.49,238.44 -000000009866.jpg,640,480,apple,265.41,185.22,376.09,265.41 -000000024714.jpg,640,426,apple,258.68,188.83,282.06,216.49 -000000021286.jpg,375,500,apple,52.69,1.61,182.75,100.59 -000000001888.jpg,640,427,apple,0,258.21,127.6,372.75 -000000012428.jpg,640,480,apple,308.33,110.68,423.53,214.59 -000000033297.jpg,640,427,apple,100.41,361.36,120.55,379.23 -000000009185.jpg,640,428,apple,212.49,179.26,412.89,298.09 -000000024849.jpg,480,640,apple,178.57,383.2,207.41,410.54 -000000017629.jpg,385,500,apple,115.29,322.35,258.82,462.35 -000000008562.jpg,640,417,apple,361.89,178,417.56,231.73 -000000034570.jpg,640,509,apple,448,408.63,496.35,455.46 -000000026041.jpg,640,426,apple,218.29,163.25,339.38,267.67 -000000024714.jpg,640,426,apple,329.36,190.95,363.9,213.61 -000000005469.jpg,438,640,apple,202.16,480.7,274.16,551.15 -000000022142.jpg,640,517,apple,280.7,406.92,314.94,446.11 -000000009866.jpg,640,480,apple,334.22,195.16,542.88,346.21 -000000005469.jpg,438,640,apple,199.02,469.38,260.98,511.12 -000000009038.jpg,640,427,apple,77.36,92.43,416.95,400.88 -000000007934.jpg,640,480,apple,1.13,89.22,638.12,474.35 -000000026041.jpg,640,426,apple,527.87,176.87,563.56,244.23 -000000007367.jpg,640,480,apple,143.44,166.02,312.85,336.56 -000000033297.jpg,640,427,apple,108.65,372.64,127.36,391.35 -000000034104.jpg,640,480,apple,133.92,325.16,371.62,410.85 -000000034104.jpg,640,480,apple,311.96,134.59,446.89,215.87 -000000020966.jpg,640,480,apple,149.37,91.78,174.17,104.84 -000000010196.jpg,640,443,apple,1.69,187.25,209.28,443 -000000009038.jpg,640,427,apple,420.97,71.33,640,193.91 -000000009511.jpg,640,480,apple,281.61,165.12,514.82,398.98 -000000022142.jpg,640,517,apple,105.01,461.32,198.86,511.43 -000000007934.jpg,640,480,apple,404.33,10.16,640,215.72 -000000009511.jpg,640,480,apple,229.16,213.41,295.66,290.28 -000000022256.jpg,428,640,apple,293.41,362.85,307.59,376.24 -000000012428.jpg,640,480,apple,180.99,62.54,268.4,147.46 -000000026662.jpg,612,612,apple,244.98,451.18,334.13,543.76 -000000014783.jpg,640,427,apple,2,17.1,545,422.1 -000000017108.jpg,480,640,apple,0,493.58,216.43,640 -000000033297.jpg,640,427,apple,120.17,368.18,133.18,384.85 -000000033946.jpg,483,640,apple,161.53,238.13,214.94,325.47 -000000021447.jpg,640,276,apple,109.81,93.3,179.26,165.31 -000000006753.jpg,443,640,apple,155.58,390.64,282.37,557.33 -000000008114.jpg,500,339,apple,420.99,308.69,447.7,333.88 -000000006792.jpg,640,427,apple,309.03,53.58,411.89,202.6 -000000021447.jpg,640,276,apple,181.8,65.94,249.98,143.97 -000000021447.jpg,640,276,apple,123.51,163.58,196.49,235.16 -000000021447.jpg,640,276,apple,161.2,144.57,206.02,182.88 -000000024714.jpg,640,426,apple,355.97,200.1,367.9,209.81 -000000024714.jpg,640,426,apple,286.57,187.12,307.61,204 -000000000670.jpg,640,427,apple,131.31,245.68,211.5,311.83 -000000008562.jpg,640,417,apple,414.56,203.84,460.64,251.83 -000000008562.jpg,640,417,apple,311.28,177.36,362.99,226.09 -000000021447.jpg,640,276,apple,72.73,148.72,137.03,228.59 -000000024877.jpg,640,427,apple,58.77,0.74,534.12,422.54 -000000022142.jpg,640,517,apple,558.57,478,609.49,517 -000000005469.jpg,438,640,apple,189.11,546.36,264.97,622.22 -000000022142.jpg,640,517,apple,426.79,458.16,454.88,484.27 -000000021447.jpg,640,276,apple,53.08,129.66,113.16,205.35 -000000006792.jpg,640,427,apple,246.97,54.26,412.61,225.11 -000000005469.jpg,438,640,apple,250.05,457.29,331.26,579.1 -000000000670.jpg,640,427,apple,263.99,324.46,314.75,362.21 -000000008562.jpg,640,417,apple,329.88,296.7,383.72,357.39 -000000008562.jpg,640,417,apple,381.15,230.12,425.11,273.51 -000000005469.jpg,438,640,apple,151.36,503.39,214.57,574.8 -000000008562.jpg,640,417,apple,289.37,331.63,344.34,386.14 -000000000670.jpg,640,427,apple,42.36,202.87,97.21,248.88 -000000032665.jpg,640,640,apple,462.9,454.37,478.16,468.7 -000000008562.jpg,640,417,apple,427.48,317.26,485.99,374.49 -000000000670.jpg,640,427,apple,0,51.21,112.61,113 -000000008562.jpg,640,417,apple,408.51,162.22,455.19,205.06 -000000009866.jpg,640,480,orange,227.68,89.42,336.02,198.44 -000000010037.jpg,640,426,orange,334,293.1,429,382.1 -000000023363.jpg,640,467,orange,279.1,290.09,502.16,436.23 -000000009866.jpg,640,480,orange,144.44,133.19,241.61,244.12 -000000026041.jpg,640,426,orange,466.4,184.75,550.74,262.47 -000000009866.jpg,640,480,orange,224.75,31.62,319.62,107.29 -000000021260.jpg,480,640,orange,218.81,229.51,331.83,342.53 -000000002902.jpg,640,427,orange,330.55,57.27,443.08,192.9 -000000008562.jpg,640,417,orange,559.2,207.31,588.24,235.16 -000000007367.jpg,640,480,orange,198.97,306.99,375.46,474.49 -000000009185.jpg,640,428,orange,243.71,226.59,640,419.94 -000000027190.jpg,640,426,orange,246.42,285.2,304.89,350.65 -000000026041.jpg,640,426,orange,310.1,149.72,371.47,198.04 -000000035741.jpg,640,480,orange,213.81,145.49,219.42,151.62 -000000026041.jpg,640,426,orange,121.74,151.31,147.24,188.02 -000000010196.jpg,640,443,orange,380.75,153.65,528.07,291.63 -000000035741.jpg,640,480,orange,208.73,145.39,214.09,150.85 -000000008562.jpg,640,417,orange,573.37,190.93,604.97,221.51 -000000009185.jpg,640,428,orange,308.89,63.09,486.55,238.73 -000000021260.jpg,480,640,orange,329.47,208.2,442.73,318.38 -000000009185.jpg,640,428,orange,63.44,0.07,335.35,212.56 -000000035741.jpg,640,480,orange,197.89,144.53,237.55,186.23 -000000010037.jpg,640,426,orange,592.39,244.57,638.5,347.82 -000000010196.jpg,640,443,orange,524.3,126.19,640,264.83 -000000009866.jpg,640,480,orange,316.58,57.11,406.27,137.43 -000000035741.jpg,640,480,orange,226.8,143.29,254.94,178.51 -000000008562.jpg,640,417,orange,575.9,227.65,611.71,262.96 -000000009185.jpg,640,428,orange,2.01,204.43,181.27,413.9 -000000022256.jpg,428,640,orange,277.79,375.02,297.02,394.87 -000000010196.jpg,640,443,orange,528.67,1.57,640,133.21 -000000009185.jpg,640,428,orange,10.07,266.87,249.75,422.96 -000000033946.jpg,483,640,orange,19.14,268.31,211.59,473.16 -000000035741.jpg,640,480,orange,412.41,172.69,457.49,203.89 -000000010037.jpg,640,426,orange,356.54,374.65,462.44,426 -000000010037.jpg,640,426,orange,278.92,360.23,369.74,426 -000000023363.jpg,640,467,orange,150.89,265.99,295.18,409.18 -000000005469.jpg,438,640,orange,144.99,259,296.4,420.24 -000000008562.jpg,640,417,orange,548.96,234.76,580.06,269.12 -000000010196.jpg,640,443,orange,480.52,248.15,634.79,379.49 -000000022256.jpg,428,640,orange,288.96,388.09,306.95,402.15 -000000033946.jpg,483,640,orange,287.77,240.63,356.44,317.04 -000000010037.jpg,640,426,orange,505.19,277.65,600.41,363.85 -000000026041.jpg,640,426,orange,458.78,146.74,529.52,199.79 -000000022256.jpg,428,640,orange,304.81,374.17,314.33,391.43 -000000032665.jpg,640,640,orange,560.51,453.7,570.65,464.37 -000000005469.jpg,438,640,orange,36.23,381.13,212.83,541.13 -000000021260.jpg,480,640,orange,239.81,141.03,355.22,251.95 -000000021260.jpg,480,640,orange,158.47,186.59,246.53,272.24 -000000021260.jpg,480,640,orange,117.43,257.49,227.33,356.84 -000000021260.jpg,480,640,orange,78.69,210.42,165.19,291.66 -000000021260.jpg,480,640,orange,0,177.69,96.38,311.72 -000000005469.jpg,438,640,orange,353.21,349.43,427.17,424.91 -000000032665.jpg,640,640,banana,513.61,366.05,551.98,404.16 -000000017108.jpg,480,640,banana,144.65,436.94,164.09,456.9 -000000006753.jpg,443,640,banana,199.03,277.3,217.99,312.74 -000000035741.jpg,640,480,banana,546.82,269.32,609.39,303.08 -000000017108.jpg,480,640,banana,159.02,498.07,170.28,534.38 -000000024849.jpg,480,640,banana,263.74,327.74,317.58,370.63 -000000006753.jpg,443,640,banana,179.03,308.29,217.44,340.92 -000000010784.jpg,640,423,banana,464.08,141.17,483.6,178.89 -000000010784.jpg,640,423,banana,283.27,145.32,298,180.98 -000000010784.jpg,640,423,banana,313.39,143.81,356.52,188.87 -000000026812.jpg,333,500,banana,134.51,54.32,164.24,120.24 -000000032665.jpg,640,640,banana,468.97,403.55,518.72,439.65 -000000017108.jpg,480,640,banana,148.37,495.61,164.09,532.35 -000000002429.jpg,640,480,banana,372.39,255.23,400.59,269.53 -000000017108.jpg,480,640,banana,184.16,538.69,196.56,569.25 -000000032665.jpg,640,640,banana,565.94,354.26,619.7,392.33 -000000006753.jpg,443,640,banana,227.47,282.91,241.01,312.43 -000000017108.jpg,480,640,banana,192.87,546.98,245.87,580.39 -000000032665.jpg,640,640,banana,621.04,385.28,640,402.58 -000000032068.jpg,640,480,banana,215.93,104.19,230.41,121.14 -000000006753.jpg,443,640,banana,232.34,285.1,248.9,309.51 -000000006753.jpg,443,640,banana,186.9,254.67,205.59,271.21 -000000017108.jpg,480,640,banana,194.9,513.89,255.59,558.24 -000000026812.jpg,333,500,banana,127.44,108.68,157.19,152.48 -000000006753.jpg,443,640,banana,191.76,247.66,222.44,276.38 -000000032665.jpg,640,640,banana,618.83,359.89,633.63,382.74 -000000017108.jpg,480,640,banana,308.74,215.57,313.59,231.42 -000000006753.jpg,443,640,banana,211.98,249.21,232.87,277.14 -000000032665.jpg,640,640,banana,611.01,419.75,639.73,446.4 -000000032665.jpg,640,640,banana,572.96,419.4,611.39,442.33 -000000035741.jpg,640,480,banana,601.87,252.22,632.35,292.61 -000000032665.jpg,640,640,banana,424.85,369.81,464.41,409.37 -000000032665.jpg,640,640,banana,398.62,375.71,417.81,405.49 -000000035741.jpg,640,480,banana,620.13,228.41,630.56,257.43 -000000006753.jpg,443,640,banana,218.04,249.11,238.8,279.15 -000000006753.jpg,443,640,banana,209.13,279.57,222.97,307.65 -000000006753.jpg,443,640,banana,217.57,282.27,234.77,312.21 -000000032665.jpg,640,640,banana,364.34,369.82,392.17,408.69 -000000035741.jpg,640,480,banana,555.68,220.69,603.45,261.12 -000000032665.jpg,640,640,banana,383.64,375.29,407.96,402.62 -000000032665.jpg,640,640,banana,359.28,367,379.45,389.54 -000000017108.jpg,480,640,banana,98.36,507.39,142.9,530.26 -000000035741.jpg,640,480,banana,563.83,244.85,606.45,279.52 -000000035741.jpg,640,480,banana,542.88,217.16,570.66,253.6 -000000035741.jpg,640,480,banana,540.86,243.37,554,277.48 -000000017108.jpg,480,640,banana,311.48,163.23,326.32,176.45 -000000035741.jpg,640,480,banana,538.94,264.57,580.36,296.88 -000000017108.jpg,480,640,banana,172.89,460.46,215.54,489.26 -000000035741.jpg,640,480,banana,604.99,248.85,616.77,272.61 -000000035741.jpg,640,480,banana,599.31,223.71,624.94,256.31 -000000035741.jpg,640,480,banana,580.41,278.7,639.3,311.28 -000000017108.jpg,480,640,banana,297.84,169.48,325.46,211.51 -000000017108.jpg,480,640,banana,339.81,212.67,368.39,239.5 -000000018312.jpg,640,480,apple,224.5,281.18,257.13,311.97 -000000032068.jpg,640,480,apple,206.92,113.61,216.49,121.37 -000000034570.jpg,640,509,apple,485.37,400.64,528.27,427.96 -000000003242.jpg,612,612,apple,534.83,288.02,548.56,299.72 -000000029342.jpg,500,500,apple,338.79,8.78,354.91,34.43 -000000027190.jpg,640,426,apple,181.92,290.48,253.19,351.88 -000000014366.jpg,640,426,apple,323.49,259.57,404.41,341.3 -000000020966.jpg,640,480,apple,162.4,115.89,180.76,124.15 -000000035741.jpg,640,480,apple,253.06,184.93,276.24,194.51 -000000034104.jpg,640,480,apple,93.18,285.23,169.33,307.69 -000000026812.jpg,333,500,apple,2.25,188.76,333,370.79 -000000001401.jpg,354,500,apple,56.27,315.74,115.88,371.14 -000000035741.jpg,640,480,apple,151.58,182.23,273.29,227.56 -000000010478.jpg,640,426,apple,67.01,55,640,401.58 -000000034086.jpg,640,480,apple,547.94,173.82,604.43,227.51 -000000019528.jpg,640,480,apple,480.66,87.28,497.7,106.79 -000000034086.jpg,640,480,apple,507.31,102.91,570.17,163.81 -000000012428.jpg,640,480,apple,591.01,159.6,640,257.17 -000000003242.jpg,612,612,apple,555.2,288.74,572.8,301.33 -000000027718.jpg,640,480,apple,95.51,262.71,131.99,294.69 -000000022142.jpg,640,517,apple,379.71,214.12,409.54,241.43 -000000001401.jpg,354,500,apple,6.73,340.36,79.6,433.41 -000000010784.jpg,640,423,apple,0,333.46,17.58,346.47 -000000002429.jpg,640,480,apple,329.79,269.56,349.01,287.28 -000000010478.jpg,640,426,apple,122.06,236.23,251.57,373.89 -000000021260.jpg,480,640,apple,138.42,400.31,209.07,476.53 -000000000670.jpg,640,427,apple,190.5,324.02,244.68,371.79 -000000026625.jpg,453,640,apple,98.02,424.87,123.93,448.74 -000000022953.jpg,640,478,apple,476.34,91.44,488.54,103.07 -000000000670.jpg,640,427,apple,297.37,317.9,352.92,355.91 -000000022142.jpg,640,517,apple,126.15,460.38,137.04,473.16 -000000003242.jpg,612,612,apple,560.96,275.23,574.14,289.38 -000000022256.jpg,428,640,apple,296.78,375.11,309.01,388.05 -000000003242.jpg,612,612,apple,562.02,258.58,582.88,278.24 -000000006753.jpg,443,640,apple,368.74,397,439.43,423.22 -000000021740.jpg,640,480,apple,277.45,225.5,299.53,244.85 -000000032068.jpg,640,480,apple,202.3,109.95,209.07,118.68 -000000017488.jpg,640,428,apple,575.12,2.17,639.14,67.51 -000000022953.jpg,640,478,apple,477.35,106.95,493.08,117.44 -000000008691.jpg,427,640,apple,272.29,104.19,297.58,125.27 -000000006753.jpg,443,640,apple,162.45,269.75,172.92,283.46 -000000022142.jpg,640,517,apple,46.2,375.69,77.88,405.25 -000000022256.jpg,428,640,apple,261.24,379.9,288.78,402.17 -000000003242.jpg,612,612,apple,572.31,280.54,586.97,293.55 -000000010784.jpg,640,423,apple,0,332.18,147.01,382.46 -000000031157.jpg,640,480,apple,545.31,295.62,588.83,339.49 -000000035820.jpg,640,480,apple,475.69,21.27,640,152.09 -000000010784.jpg,640,423,apple,54.62,366.34,206.32,404.88 -000000008691.jpg,427,640,apple,322.48,122.64,346.61,142.56 -000000022142.jpg,640,517,apple,609.7,496.21,640,517 -000000014366.jpg,640,426,apple,150.3,258.47,230.09,334.7 -000000018312.jpg,640,480,apple,262.28,73.01,337.38,153.06 -000000006753.jpg,443,640,apple,0,256.91,118.59,277.56 -000000008691.jpg,427,640,apple,362.06,139.07,388.82,155.29 -000000014366.jpg,640,426,apple,192.42,55.52,267.09,110.09 -000000003242.jpg,612,612,apple,579.35,321.31,598.42,342.71 -000000021260.jpg,480,640,apple,1.44,313.51,204.68,554.23 -000000003242.jpg,612,612,apple,580.71,288,601.38,318.3 -000000003242.jpg,612,612,apple,555.88,300.99,580.93,334.55 -000000006753.jpg,443,640,apple,0,237.51,117.64,258.11 -000000003242.jpg,612,612,apple,56.83,177.6,70.95,190.41 -000000008691.jpg,427,640,apple,260.43,168.11,286.86,195.08 -000000003242.jpg,612,612,apple,261.57,302.92,274.72,316.07 -000000003242.jpg,612,612,apple,523.99,327.74,542.17,343.36 -000000027190.jpg,640,426,apple,351.76,316.41,367.02,329.96 -000000026625.jpg,453,640,apple,33.73,230.9,76.68,268.9 -000000014366.jpg,640,426,apple,294.16,62.1,367.52,111.01 -000000022953.jpg,640,478,apple,468.99,93.53,479.98,108.3 -000000015759.jpg,640,640,apple,0,2.39,640,576.38 -000000008691.jpg,427,640,apple,205.86,53.16,426.82,216.08 -000000003242.jpg,612,612,apple,521.4,289.51,536.51,300.98 -000000006753.jpg,443,640,apple,2.78,218.69,118.87,239.36 -000000014366.jpg,640,426,apple,82.78,59.65,155.49,111.64 -000000008691.jpg,427,640,apple,0,75.98,152.45,231.31 -000000027190.jpg,640,426,apple,374.02,328.68,389.64,341.2 -000000006753.jpg,443,640,apple,131.63,263.78,187.94,284.51 -000000027190.jpg,640,426,apple,403.17,337,417.66,350.59 -000000008691.jpg,427,640,apple,118.28,69.35,269.35,227.85 -000000027190.jpg,640,426,apple,299.08,284.91,435.72,351.74 -000000006753.jpg,443,640,apple,1.62,279.35,115.7,297.02 -000000027190.jpg,640,426,apple,407.84,323.48,424.27,340.27 -000000006753.jpg,443,640,apple,1.76,200.14,121.72,219.27 -000000032665.jpg,640,640,apple,519.7,401.06,551.23,439.83 -000000018312.jpg,640,480,apple,394.75,217.81,466.69,289.75 -000000018312.jpg,640,480,apple,272.14,327.71,355.25,410.35 -000000014366.jpg,640,426,apple,471.44,59.21,541.58,109.69 -000000018312.jpg,640,480,apple,97.55,261.07,152.42,326.74 -000000018312.jpg,640,480,apple,191.95,306.54,227.43,344.59 -000000018312.jpg,640,480,apple,91.17,195.54,122.16,229.35 -000000018312.jpg,640,480,apple,175.01,266.36,209.78,296.86 -000000018312.jpg,640,480,apple,470.03,331.45,513.82,391.03 -000000027190.jpg,640,426,apple,612.76,294.25,640,317.4 -000000018312.jpg,640,480,apple,422.69,336.27,482.75,391.57 -000000027190.jpg,640,426,apple,430.53,343.2,449.08,353.31 -000000026812.jpg,333,500,orange,273.89,172.08,311,197.89 -000000024714.jpg,640,426,orange,115.34,225.71,141.9,241.77 -000000024714.jpg,640,426,orange,130.1,233.62,152.57,251.56 -000000023363.jpg,640,467,orange,438.37,79.57,578.96,192.6 -000000009185.jpg,640,428,orange,495.03,112.18,640,300.3 -000000020966.jpg,640,480,orange,183.41,87.68,195.86,96.36 -000000006753.jpg,443,640,orange,348.25,475.83,353.77,483.85 -000000024849.jpg,480,640,orange,309.54,357.48,334.97,378.72 -000000026625.jpg,453,640,orange,86.97,185.43,112.71,208.28 -000000006753.jpg,443,640,orange,333.9,456.59,373.56,505.43 -000000024714.jpg,640,426,orange,129.33,247.87,155.17,259.97 -000000026812.jpg,333,500,orange,309.06,177.29,333,200.58 -000000024849.jpg,480,640,orange,308.24,330.12,331.23,357.74 -000000009185.jpg,640,428,orange,0,143.31,34.62,214.48 -000000020966.jpg,640,480,orange,149.08,114.45,185.28,138.68 -000000022484.jpg,640,480,orange,259.82,173.81,266.79,180.36 -000000008691.jpg,427,640,orange,160.16,328.24,363.2,404.38 -000000023363.jpg,640,467,orange,13.64,200.44,167.91,293.84 -000000035741.jpg,640,480,orange,304.73,296.88,342.71,329.04 -000000010784.jpg,640,423,orange,223.12,363.69,240.66,374.99 -000000009866.jpg,640,480,orange,172.88,205.18,269.33,312.01 -000000026625.jpg,453,640,orange,69.8,163.06,96.72,184.4 -000000026812.jpg,333,500,orange,28.61,349.26,77.73,390.87 -000000009866.jpg,640,480,orange,203.56,106.11,246.8,148.45 -000000000670.jpg,640,427,orange,392.06,231.61,543.66,347.81 -000000022484.jpg,640,480,orange,273.85,178.87,284.19,186.95 -000000022484.jpg,640,480,orange,263.47,180.81,273.58,188.72 -000000026625.jpg,453,640,orange,115.24,230.54,137.04,252.88 -000000022484.jpg,640,480,orange,257.13,179.21,264.49,186.77 -000000026625.jpg,453,640,orange,116.54,245.76,145.8,268.2 -000000022484.jpg,640,480,orange,248.32,181.12,258.72,188.09 -000000020966.jpg,640,480,orange,142.14,81.92,161.84,94.36 -000000020966.jpg,640,480,orange,167.29,109.24,172.52,114.73 -000000022484.jpg,640,480,orange,239.79,176.89,249.35,186.77 -000000026812.jpg,333,500,orange,14.88,288.77,50.29,321.74 -000000020966.jpg,640,480,orange,127.05,89.41,145.66,95.92 -000000022484.jpg,640,480,orange,246.38,168.84,258.85,177.33 -000000010784.jpg,640,423,orange,204.64,360.49,223.85,371.62 -000000010784.jpg,640,423,orange,227.86,354.62,243.13,365.57 -000000022484.jpg,640,480,orange,230.69,183.09,242.17,191.36 -000000022484.jpg,640,480,orange,265.11,175.55,274.19,183.83 -000000022484.jpg,640,480,orange,248.01,175.96,256.74,181.9 -000000022484.jpg,640,480,orange,231.43,188.19,245.85,201.94 -000000022484.jpg,640,480,orange,242.11,185.53,254.57,194.73 -000000026812.jpg,333,500,banana,245.45,349.35,333,480.52 -000000010784.jpg,640,423,banana,450.18,119.2,510.38,181.56 -000000026812.jpg,333,500,banana,87.88,69.34,124.06,109.62 -000000024714.jpg,640,426,banana,315.8,185.4,341.9,206.39 -000000021260.jpg,480,640,banana,320.83,305.87,480,447.17 -000000010784.jpg,640,423,banana,115.01,169.22,149.66,229.21 -000000031157.jpg,640,480,banana,590,245,640,345 -000000010784.jpg,640,423,banana,204.9,154.65,256.08,204.87 -000000024714.jpg,640,426,banana,244.76,186.75,255.88,195.02 -000000006753.jpg,443,640,banana,178.73,378.83,241.4,430.51 -000000010784.jpg,640,423,banana,612.45,117.84,639.99,178.81 -000000006753.jpg,443,640,banana,186.83,276.02,201.79,303.47 -000000010784.jpg,640,423,banana,152.21,164.3,186.3,225.45 -000000010784.jpg,640,423,banana,169.15,157.06,218.44,220.43 -000000010784.jpg,640,423,banana,556.36,116.23,609.92,176.49 -000000010784.jpg,640,423,banana,351.85,119.66,395.39,186.86 -000000010784.jpg,640,423,banana,504.29,121.7,560.19,181.69 -000000033601.jpg,426,640,apple,184.27,602.29,199.02,622.44 -000000016123.jpg,480,640,apple,22.4,437.35,78.38,493.65 -000000025167.jpg,640,480,apple,443.84,390.23,506.18,456.31 -000000017488.jpg,640,428,apple,448.1,19.32,640,234.72 -000000022484.jpg,640,480,apple,462.4,170.63,473.98,178.89 -000000001888.jpg,640,427,apple,0,157.15,16.64,208.17 -000000031157.jpg,640,480,apple,553.17,264.27,595.02,300.49 -000000020966.jpg,640,480,apple,120.86,77.66,162.86,95.78 -000000008562.jpg,640,417,apple,371.59,324.79,427.43,379.79 -000000024849.jpg,480,640,apple,294.38,380.98,315.12,401.09 -000000020966.jpg,640,480,apple,133.81,94.95,149.56,101.66 -000000032665.jpg,640,640,apple,414.5,435.54,480.33,490.97 -000000009866.jpg,640,480,apple,348.96,117.78,465.39,231.61 -000000018312.jpg,640,480,apple,292.95,135.17,367.36,206.58 -000000027718.jpg,640,480,apple,61.12,288.15,147.53,346.22 -000000010037.jpg,640,426,apple,539.49,268.89,599.7,289.6 -000000022142.jpg,640,517,apple,403.16,326.45,429.5,345.65 -000000024714.jpg,640,426,apple,236.89,193.65,259.58,217.99 -000000027718.jpg,640,480,apple,0.06,308.44,77.82,365.22 -000000022484.jpg,640,480,apple,455.53,191.56,461.89,197.21 -000000008562.jpg,640,417,apple,274.74,274.2,333.38,332.84 -000000033946.jpg,483,640,apple,177.87,413.92,330.81,503.69 -000000022142.jpg,640,517,apple,512.88,350.73,534.25,375.41 -000000022142.jpg,640,517,apple,593.25,38.5,620.87,63.55 -000000022484.jpg,640,480,apple,296.36,171.56,307.67,180.75 -000000026625.jpg,453,640,apple,18.51,268.16,73.3,305.31 -000000024714.jpg,640,426,apple,374.95,198.98,383.83,205.36 -000000033601.jpg,426,640,apple,197.69,596.49,208.38,612.12 -000000035741.jpg,640,480,apple,278.67,181.23,309.52,199.09 -000000022484.jpg,640,480,apple,304.2,168.2,313.14,177.21 -000000000902.jpg,640,427,apple,189.16,232.31,290.94,277.66 -000000014366.jpg,640,426,apple,383.84,67.8,453.23,116.72 -000000021740.jpg,640,480,apple,259.46,225.06,277.86,242.33 -000000035741.jpg,640,480,apple,146.16,148.13,166.09,188.15 -000000022142.jpg,640,517,apple,104.45,371.42,140.65,401.59 -000000026625.jpg,453,640,apple,1,442.28,102.04,521.67 -000000032665.jpg,640,640,apple,310.38,471.93,363.25,501.31 -000000022484.jpg,640,480,apple,506.31,194.37,511.31,199.5 -000000035741.jpg,640,480,apple,299.5,168.15,309.89,175 -000000032665.jpg,640,640,apple,318.41,426.37,361.77,455.65 -000000022374.jpg,640,480,apple,3.98,81.3,44.38,113.67 -000000022484.jpg,640,480,apple,150.51,185.88,225.26,206.35 -000000033601.jpg,426,640,apple,209.72,629.08,222.09,640 -000000026625.jpg,453,640,apple,50.58,424.05,74.49,446.96 -000000026625.jpg,453,640,apple,0,293.19,161.94,451.69 -000000022484.jpg,640,480,apple,447.68,169.35,456.44,176.74 -000000022484.jpg,640,480,apple,313.28,167.64,329.48,178.39 -000000032665.jpg,640,640,apple,343.18,478.93,415.93,520.82 -000000022484.jpg,640,480,apple,217.61,174.85,235.95,182.36 -000000022484.jpg,640,480,apple,347.74,171.39,356.98,179.66 -000000022484.jpg,640,480,apple,361.11,167.62,383.8,180.15 -000000033601.jpg,426,640,apple,163.42,627.61,183.07,640 -000000033601.jpg,426,640,apple,149.69,619.59,166.31,640 -000000033601.jpg,426,640,apple,162.99,612.97,178.42,628.09 -000000033601.jpg,426,640,apple,142.86,609.93,157.98,625.99 -000000022374.jpg,640,480,orange,0,115.62,34.96,140.65 -000000019528.jpg,640,480,orange,465.13,89.96,478.87,104.83 -000000000670.jpg,640,427,orange,473.95,246.81,602.2,334.17 -000000012428.jpg,640,480,orange,418.85,194.19,482.59,254.92 -000000032665.jpg,640,640,orange,557.15,453.56,601.61,470.91 -000000000670.jpg,640,427,orange,316.97,102.4,340.94,126.18 -000000010037.jpg,640,426,orange,606.66,349.27,640,392.48 -000000032665.jpg,640,640,orange,72.44,379.39,123.35,411.39 -000000020966.jpg,640,480,orange,157.75,110.8,163.19,115.99 -000000026625.jpg,453,640,orange,104.33,211.97,121.57,229.63 -000000026625.jpg,453,640,orange,200.22,213.57,216.25,228.37 -000000006753.jpg,443,640,orange,386.46,441.45,395.04,451.49 -000000000670.jpg,640,427,orange,257.51,80.53,291.15,98.32 -000000026625.jpg,453,640,orange,216.74,221.11,228.47,228.87 -000000023363.jpg,640,467,orange,467,122.51,640,303.25 -000000032665.jpg,640,640,orange,551.12,450.89,562.54,460.84 -000000032665.jpg,640,640,orange,549.42,460.48,559.25,468.68 -000000008114.jpg,500,339,orange,440.71,308.51,465.83,325.38 -000000012428.jpg,640,480,orange,481.25,173.3,543.58,225.66 -000000026625.jpg,453,640,orange,234.27,193.95,252.11,209.7 -000000000670.jpg,640,427,orange,297.54,132.81,324.8,155.73 -000000000670.jpg,640,427,orange,266.75,130.06,301,158.85 -000000026625.jpg,453,640,orange,244.95,208.7,256.62,228.79 -000000000670.jpg,640,427,orange,153.76,84.33,188.62,134.43 -000000032665.jpg,640,640,orange,539.45,452.74,550.46,460.52 -000000023363.jpg,640,467,orange,141.92,118.87,298.39,269.28 -000000023363.jpg,640,467,orange,249.23,234.83,413.77,349.77 -000000000670.jpg,640,427,orange,99.64,47.16,149.4,87.47 -000000023363.jpg,640,467,orange,0,83.7,162.54,214.7 -000000000670.jpg,640,427,orange,131.34,86.04,172.58,130.17 -000000023363.jpg,640,467,orange,284.39,1.21,447.63,134.33 -000000000670.jpg,640,427,orange,180.78,106.47,240.67,137.53 -000000026625.jpg,453,640,orange,229.37,205.5,249.64,223.1 -000000023363.jpg,640,467,orange,250.81,73.61,305.02,140.69 -000000000670.jpg,640,427,orange,184.5,95.29,210.73,116.83 -000000000670.jpg,640,427,orange,166.88,129.32,208.91,152.16 -000000026625.jpg,453,640,orange,223,228.84,236.8,243.8 -000000026625.jpg,453,640,orange,214.9,234.71,225.68,244.92 -000000032665.jpg,640,640,banana,305.87,317.71,334.1,350.16 -000000035820.jpg,640,480,banana,137.96,198.09,202.24,240.22 -000000026812.jpg,333,500,banana,71.14,100.68,138.12,145.34 -000000006753.jpg,443,640,banana,223.32,252.95,239.42,277.81 -000000017108.jpg,480,640,banana,181.84,472.02,230.1,515.45 -000000010784.jpg,640,423,banana,384.35,134.43,429.99,173.72 -000000009296.jpg,640,425,apple,270.7,163.51,285.85,171.09 -000000022142.jpg,640,517,apple,409.1,471.96,444.49,502.77 -000000018312.jpg,640,480,apple,210.02,350.82,237.92,375.9 -000000003242.jpg,612,612,apple,31.96,138.29,64.12,158.82 -000000022484.jpg,640,480,apple,282.11,174.54,290.91,182 -000000027190.jpg,640,426,apple,392.58,292,488.61,351.58 -000000035741.jpg,640,480,apple,265.57,197.08,269.46,200.52 -000000026041.jpg,640,426,apple,443.63,153.99,471.07,172.79 -000000002429.jpg,640,480,apple,70.62,251.03,79.66,259.76 -000000029342.jpg,500,500,apple,337.98,34.22,347.98,59.84 -000000006753.jpg,443,640,apple,134.24,299.33,148.58,314.63 -000000000670.jpg,640,427,apple,234.75,329.57,284.89,371.23 -000000010196.jpg,640,443,apple,250.36,1.05,412.35,141.87 -000000035820.jpg,640,480,apple,469.49,42.92,528.9,94.54 -000000002429.jpg,640,480,apple,78.71,249.74,87.57,257.51 -000000035820.jpg,640,480,apple,516.25,67.77,567.13,113.98 -000000006753.jpg,443,640,apple,198.9,449.74,214.92,473.47 -000000026625.jpg,453,640,orange,65.6,175.51,90.7,199.31 -000000009185.jpg,640,428,orange,586.63,298.12,640,415.78 -000000009185.jpg,640,428,orange,217.95,283.84,300.12,425.32 -000000022484.jpg,640,480,orange,260.72,170.66,269.65,175.9 -000000026812.jpg,333,500,orange,284.83,347.42,330.96,369.37 -000000005469.jpg,438,640,orange,280.34,334.64,350.81,403.2 -000000010784.jpg,640,423,orange,247.95,369.45,268.17,387.03 -000000000670.jpg,640,427,orange,147.85,64.1,176.54,88.38 -000000010784.jpg,640,423,orange,255.92,351.75,275.31,370.76 -000000026812.jpg,333,500,orange,306.66,194,327.94,219.54 -000000010784.jpg,640,423,orange,267.78,353.15,350.55,390.43 -000000017488.jpg,640,428,apple,453.64,259.14,640,422.98 -000000001906.jpg,500,333,apple,117.36,104.44,129.27,111.13 -000000002892.jpg,640,426,apple,290.66,128.13,463.72,292.32 -000000033297.jpg,640,427,apple,91.31,366.83,101.45,373.99 -000000017488.jpg,640,428,apple,319.42,114.95,522.66,325.44 -000000017488.jpg,640,428,apple,64.48,140.07,150.08,216.78 -000000017488.jpg,640,428,apple,222.34,123.4,365.75,312.38 -000000017488.jpg,640,428,apple,249.02,309.98,458.02,423.37 -000000033946.jpg,483,640,orange,288.19,275.26,473.67,471.66 -000000024714.jpg,640,426,orange,110.99,237.44,132.01,256.66 -000000009185.jpg,640,428,orange,22.23,152.3,225.67,289.04 -000000026812.jpg,333,500,orange,195.3,316.09,247.23,366.52 -000000009296.jpg,640,425,apple,286.99,165.54,299.91,171.19 -000000009296.jpg,640,425,apple,300.42,166.4,312.44,171.58 -000000009296.jpg,640,425,apple,258.75,156.38,378.02,171.72 -000000025411.jpg,314,500,orange,38.37,234.53,263.61,472.15 -000000035741.jpg,640,480,orange,247.71,149.71,253.46,155.45 -000000035741.jpg,640,480,orange,273.53,154.95,293.51,178.65 -000000000670.jpg,640,427,orange,144,65,461,371 -000000010784.jpg,640,423,banana,253,126,458,197 -000000022142.jpg,640,517,apple,71,4,464,516 -000000017108.jpg,480,640,banana,102,144,340,536 -000000032665.jpg,640,640,banana,237,343,442,413 -000000018312.jpg,640,480,apple,184,80,337,373 -000000003242.jpg,612,612,apple,20,103,518,239 -000000022484.jpg,640,480,orange,155,167,526,215 -000000026625.jpg,453,640,orange,151,191,248,343 -000000006753.jpg,443,640,banana,206,280,240,314 -000000011360.jpg,640,480,banana,407.98,211.03,548.67,281.14 -000000003093.jpg,640,480,banana,373.21,23.8,576,210.41 -000000001153.jpg,500,375,banana,152.65,198.38,487.06,336.91 -000000001153.jpg,500,375,banana,2.65,97.06,375.88,242.65 -000000001153.jpg,500,375,banana,85.59,85.59,408.53,291.18 -000000001153.jpg,500,375,banana,4.41,59.01,402.35,194.01 -000000011172.jpg,612,612,orange,310.88,352.25,334.99,374.8 -000000011172.jpg,612,612,banana,127.59,275.8,168.3,323.4 -000000011360.jpg,640,480,banana,443.96,273.12,467.69,289.77 -000000011360.jpg,640,480,orange,500.68,246,533.71,271.27 -000000011172.jpg,612,612,orange,287.36,374.73,308.82,392.41 -000000011172.jpg,612,612,orange,185.3,396.01,215.07,415.24 -000000004749.jpg,640,429,banana,205.39,49.85,499.2,246.61 -000000019358.jpg,640,426,banana,49.67,222.5,162.38,297.01 -000000019358.jpg,640,426,banana,0,139.77,50.74,222.09 -000000019358.jpg,640,426,banana,170.45,155.89,282.78,241.31 -000000019358.jpg,640,426,banana,158.23,219.09,235.68,288.79 -000000019358.jpg,640,426,banana,409.4,19.92,500.14,90.73 -000000019358.jpg,640,426,banana,235.68,320.88,340.8,361.82 -000000019358.jpg,640,426,banana,480.68,81.45,518.57,120.32 -000000017179.jpg,640,425,banana,550.85,44.83,595.02,81.27 -000000022090.jpg,640,480,banana,132.08,0.1,640,380.24 -000000016521.jpg,414,640,banana,237.41,411.54,276.85,451.61 -000000003817.jpg,640,425,banana,204.69,194.69,398.03,283.39 -000000014592.jpg,427,640,banana,90.45,267.52,242.15,334.57 -000000008711.jpg,640,480,banana,103.55,136.99,310.65,306.34 -000000016161.jpg,500,375,banana,40.59,7.06,483.53,351.18 -000000016161.jpg,500,375,banana,0,151.98,442.62,375 -000000016161.jpg,500,375,banana,148.24,0,500,210.88 -000000003703.jpg,640,427,banana,185.91,200.41,299.28,345.04 -000000003703.jpg,640,427,banana,186.33,217.41,266.61,396.97 -000000003703.jpg,640,427,banana,156.66,231.26,224.77,357.3 -000000016161.jpg,500,375,orange,245.29,49.41,463.24,251.47 -000000003703.jpg,640,427,orange,149.4,143.16,210.49,208.6 -000000022090.jpg,640,480,orange,1.13,0,504.85,460.8 -000000016521.jpg,414,640,banana,176.6,78.71,209.47,124.01 -000000020906.jpg,426,640,banana,188.31,260.42,298.27,373.97 -000000010432.jpg,640,480,banana,187.69,164.85,303.1,274.88 -000000010432.jpg,640,480,banana,223.1,72.01,262.29,157.42 -000000020906.jpg,426,640,banana,94.92,211.18,208.54,278.77 -000000020906.jpg,426,640,banana,327,35.75,399.74,119.4 -000000010432.jpg,640,480,banana,266.19,146.93,345.18,257.23 -000000010432.jpg,640,480,banana,391.86,361.63,490.24,480 -000000020906.jpg,426,640,banana,164.12,14.25,333.02,126.27 -000000010432.jpg,640,480,banana,313.44,269.53,391.64,397.84 -000000010432.jpg,640,480,banana,357.74,232.66,469.87,367.34 -000000010432.jpg,640,480,banana,449.83,217.65,525.48,321.65 -000000010432.jpg,640,480,banana,206.17,316.88,254.5,446.82 -000000010432.jpg,640,480,banana,117.57,168.27,237.3,293.39 -000000010432.jpg,640,480,banana,268.19,287.41,321.22,403.71 -000000010432.jpg,640,480,banana,421.89,225.89,489.85,340.36 -000000022090.jpg,640,480,orange,424.1,0,618.07,72.54 -000000010432.jpg,640,480,banana,90.28,74.12,186.09,171.75 -000000020906.jpg,426,640,banana,270.7,371.59,359.49,486.17 -000000016161.jpg,500,375,banana,143.44,25.65,267.8,216.06 -000000010432.jpg,640,480,banana,499.51,203.97,587.3,285.19 -000000012153.jpg,500,333,banana,170,54.66,192.8,69.05 -000000023840.jpg,640,427,banana,337.89,155.61,637.1,425.91 -000000010432.jpg,640,480,banana,0,0,639,479 -000000014034.jpg,640,426,banana,5.72,72.52,622.32,420.37 -000000025234.jpg,606,640,banana,240.92,374.2,351.61,426.65 -000000009148.jpg,640,480,banana,242.69,265,275.33,280.28 -000000020857.jpg,640,480,banana,0,97.25,444.24,267.36 -000000000142.jpg,480,640,banana,106.19,374.53,378.83,566.82 -000000011702.jpg,500,333,banana,360.07,169.34,447.63,194.14 -000000006407.jpg,375,500,banana,20.17,360.45,258.36,500 -000000021292.jpg,640,426,banana,121.92,279.8,203.23,422.5 -000000020311.jpg,640,425,banana,131.5,194.16,241.47,258.19 -000000008773.jpg,424,640,banana,51.78,83.18,392.63,408.21 -000000023729.jpg,640,480,banana,38.83,11.94,578.16,472.52 -000000025616.jpg,480,640,banana,0.86,461.09,136,618.08 -000000018554.jpg,427,640,banana,127.56,296.69,289.33,638.78 -000000002624.jpg,427,640,banana,0,69.49,272.83,237.57 -000000012357.jpg,500,375,banana,215.48,96.02,337.41,232.85 -000000015126.jpg,480,640,banana,0,54.53,480,470.67 -000000021020.jpg,640,429,banana,315.08,231.24,339.57,246.65 -000000009651.jpg,640,427,banana,263.47,94.01,548.51,256.41 -000000013731.jpg,480,640,banana,220.51,0.53,401.02,131.07 -000000024882.jpg,640,478,banana,327.62,134.34,640,348.1 -000000023054.jpg,640,427,banana,148.4,147.44,358.07,260.41 -000000007251.jpg,640,480,banana,0,0,360.54,277.67 -000000003518.jpg,640,427,banana,141.7,20.68,500.72,165.25 -000000013922.jpg,612,612,banana,332.07,142.85,605.14,426.89 -000000003518.jpg,640,427,banana,186.03,279.28,444.35,377.6 -000000020765.jpg,426,640,banana,72.27,47.49,266.84,214.17 -000000000984.jpg,480,640,banana,85.73,254.75,315.67,560.66 -000000006407.jpg,375,500,banana,225.84,446.07,344.94,500 -000000000984.jpg,480,640,banana,381.94,311.01,480,404.85 -000000024520.jpg,640,480,banana,320.9,421.05,407.41,466.04 -000000014036.jpg,640,554,banana,514.22,387.19,637.98,481.48 -000000021921.jpg,427,640,banana,101.36,152.78,381.65,373.4 -000000016680.jpg,640,161,banana,504.29,17.03,581.91,121.69 -000000019836.jpg,640,426,banana,314.95,57.44,396.32,225.92 -000000006809.jpg,640,480,banana,133.75,25.89,394.79,322.52 -000000025616.jpg,480,640,banana,224.68,130.7,257.02,236.23 -000000020133.jpg,640,480,banana,23.29,39,262.91,140.34 -000000006151.jpg,640,427,banana,292.5,240.01,358.31,279.82 -000000020599.jpg,427,640,banana,120.85,397.93,263.83,447.29 -000000000984.jpg,480,640,banana,254.56,43.24,340.85,204.32 -000000018670.jpg,640,464,banana,228.35,31.28,305.51,92.8 -000000011677.jpg,612,612,banana,234.46,314.08,297.92,351.2 -000000000984.jpg,480,640,banana,2.88,66.16,139.51,153.89 -000000020599.jpg,427,640,banana,106.21,425.91,226.9,475.16 -000000024428.jpg,427,640,banana,222.68,314.81,277.33,375.08 -000000016680.jpg,640,161,banana,399.12,61.6,452.71,161 -000000021921.jpg,427,640,banana,24.45,132.31,427,493.3 -000000009768.jpg,640,425,banana,36,1,640,382 -000000018670.jpg,640,464,banana,301.08,92.36,332.18,123.09 -000000016680.jpg,640,161,banana,448.85,40.93,496.03,144.98 -000000006407.jpg,375,500,banana,340.42,319.79,375,404.29 -000000015726.jpg,360,640,banana,101.92,130.94,191.53,365.23 -000000010403.jpg,640,416,banana,0.98,98.86,134.1,185 -000000000984.jpg,480,640,banana,0,240.8,52.39,399.51 -000000011677.jpg,612,612,banana,238.46,79.53,264.13,120.07 -000000002624.jpg,427,640,banana,272.74,124.4,354.47,214.78 -000000011677.jpg,612,612,banana,490.22,60.83,559.06,153.36 -000000016680.jpg,640,161,banana,456.71,4.16,525.67,74.33 -000000018670.jpg,640,464,banana,358.14,89.14,403.54,119.88 -000000014036.jpg,640,554,banana,0,436.54,80.7,490.45 -000000020599.jpg,427,640,banana,233.9,402.71,297.22,437.44 -000000007781.jpg,640,480,banana,475.02,259.22,625.68,360.72 -000000019151.jpg,480,640,banana,38.84,540.38,291.4,640 -000000010403.jpg,640,416,banana,12.93,172.52,183.86,257.69 -000000014036.jpg,640,554,banana,415.52,413.42,522.92,500.89 -000000016494.jpg,427,640,banana,218.35,355.39,382.49,542.12 -000000010303.jpg,640,468,banana,137.65,276.4,549.49,456.99 -000000016494.jpg,427,640,banana,0.8,356.28,271.73,517.44 -000000018670.jpg,640,464,banana,371.2,63.14,426.88,95.89 -000000014036.jpg,640,554,banana,313.37,342.13,366.78,382.12 -000000025616.jpg,480,640,banana,187.74,176.4,216.17,232.52 -000000010403.jpg,640,416,banana,22.51,60.69,219.26,114.52 -000000011677.jpg,612,612,banana,410.3,37.24,491.52,120.69 -000000024516.jpg,640,427,banana,75.53,54.38,542.81,300.11 -000000009148.jpg,640,480,banana,252.19,257.87,273.92,266.3 -000000011677.jpg,612,612,banana,366.8,67.86,381.38,87 -000000020857.jpg,640,480,banana,0,41.86,348.99,141.25 -000000009148.jpg,640,480,banana,333.47,269.57,366.98,281.39 -000000011677.jpg,612,612,banana,300.96,13.06,429.12,200.26 -000000010403.jpg,640,416,banana,111.59,92.69,301.48,330.54 -000000020599.jpg,427,640,orange,0,523.85,40.48,610.02 -000000021213.jpg,427,640,orange,368.16,458.94,417.28,531.58 -000000009768.jpg,640,425,orange,321.4,0.97,493.34,112.38 -000000018670.jpg,640,464,banana,233.21,72.84,461.73,156.4 -000000019609.jpg,612,612,banana,159.09,245.68,287.73,325.14 -000000000984.jpg,480,640,banana,422.55,382.49,480,495.4 -000000016629.jpg,640,480,banana,615.08,238.8,639.73,296.44 -000000009452.jpg,425,640,banana,197.9,303.67,425,519.49 -000000008356.jpg,640,480,banana,444.21,231.59,495.55,253.6 -000000017573.jpg,375,500,banana,175.42,205.21,200.32,231.84 -000000019609.jpg,612,612,banana,304.86,276.61,366.3,339.77 -000000009452.jpg,425,640,banana,41.71,283.33,368.18,539.33 -000000004376.jpg,640,424,banana,374.48,221.3,417.44,246.2 -000000004376.jpg,640,424,banana,377.61,256.26,401.75,266.69 -000000023298.jpg,640,427,banana,449.27,186.98,467.39,198.19 -000000002624.jpg,427,640,banana,4.31,157.12,40.27,231.91 -000000017573.jpg,375,500,banana,217.1,177,233.55,206.19 -000000002279.jpg,500,333,banana,193.67,142.61,221.85,187.57 -000000000984.jpg,480,640,banana,154.44,316.59,269.18,499.12 -000000023298.jpg,640,427,banana,433.73,187.55,445.13,197.5 -000000020599.jpg,427,640,banana,201.18,531.67,426.37,614.66 -000000016629.jpg,640,480,banana,281.02,231.79,353.89,267.12 -000000000984.jpg,480,640,banana,314.97,75.26,380.96,187.51 -000000021213.jpg,427,640,banana,202.03,324.73,310.18,383.43 -000000016680.jpg,640,161,banana,345.44,85.48,400.6,161 -000000002279.jpg,500,333,banana,235.66,145.14,251.54,191.38 -000000011677.jpg,612,612,banana,238.94,13.36,269.89,64.48 -000000004376.jpg,640,424,banana,451.56,203.68,494.41,237.15 -000000009452.jpg,425,640,banana,0,237.98,335.1,607.6 -000000016680.jpg,640,161,banana,439.02,32.53,463.63,60.22 -000000002279.jpg,500,333,banana,226.87,200.57,249.02,263.11 -000000009452.jpg,425,640,banana,3.3,504.64,214.71,640 -000000009148.jpg,640,480,banana,301.22,262.83,337.77,273.67 -000000016629.jpg,640,480,banana,552.58,231.83,586.71,293.61 -000000010303.jpg,640,468,banana,364.17,72.67,590.77,275.46 -000000021213.jpg,427,640,banana,295.29,246.15,402.67,405.16 -000000008081.jpg,385,640,banana,67.6,61.4,251.69,441.09 -000000009148.jpg,640,480,banana,321.07,257.85,345.54,264.08 -000000009452.jpg,425,640,banana,199.91,539.33,425,629.93 -000000009148.jpg,640,480,banana,341.82,264.64,362.63,270.94 -000000011041.jpg,425,640,banana,239.12,470.76,323.34,564.81 -000000004376.jpg,640,424,banana,317.39,199.96,358.54,237.26 -000000023875.jpg,640,428,banana,0,239.98,26.7,273 -000000009398.jpg,640,480,banana,83.95,80.29,221.7,212.66 -000000019609.jpg,612,612,banana,146.68,338.64,303.65,383.72 -000000009398.jpg,640,480,banana,492.19,108,640,307.53 -000000004376.jpg,640,424,banana,408.57,202.34,459.84,233.6 -000000019609.jpg,612,612,banana,362.68,536.16,581.18,612 -000000011041.jpg,425,640,banana,59.57,270.73,143.39,358.04 -000000014036.jpg,640,554,banana,66.67,304.18,104.76,331.89 -000000019609.jpg,612,612,banana,413.25,420.39,530.99,493.9 -000000014036.jpg,640,554,banana,537.41,367.54,593.13,383.98 -000000011041.jpg,425,640,banana,181.83,493.99,216.19,570.38 -000000009148.jpg,640,480,banana,405.77,270.04,430.41,277 -000000006151.jpg,640,427,banana,331.04,66.45,472.1,150.89 -000000002279.jpg,500,333,banana,290.36,213.89,302.17,261.13 -000000004376.jpg,640,424,banana,336.47,238.49,382.04,267.9 -000000011041.jpg,425,640,banana,104.79,417.51,220.44,490.31 -000000021213.jpg,427,640,banana,57.47,320.16,88.06,354.8 -000000006151.jpg,640,427,banana,205.36,241.56,283.17,282.94 -000000016680.jpg,640,161,banana,368.1,67.21,405.53,98.84 -000000021213.jpg,427,640,banana,77.31,291.31,100.33,321.63 -000000009148.jpg,640,480,banana,266.86,256.93,320.45,278.93 -000000016629.jpg,640,480,banana,221.31,237.55,287.91,273.18 -000000011041.jpg,425,640,banana,97.95,450.5,182.24,557.04 -000000002279.jpg,500,333,banana,170.25,62.63,318,301.13 -000000006151.jpg,640,427,banana,268.67,277.73,311.42,288.79 -000000011041.jpg,425,640,banana,26.16,415.8,136.23,529.09 -000000021213.jpg,427,640,banana,5.5,359.26,101.23,419.48 -000000009452.jpg,425,640,banana,53.44,72.67,266.01,289.26 -000000016629.jpg,640,480,banana,227.18,214.06,278.26,245.76 -000000002279.jpg,500,333,banana,420,207.3,458.99,250.83 -000000009452.jpg,425,640,banana,306.21,74.79,425,155.74 -000000011041.jpg,425,640,banana,14.94,498.51,97.75,606.14 -000000021213.jpg,427,640,banana,60.7,323.25,123.75,371.46 -000000009452.jpg,425,640,banana,302.12,54.81,425,140.49 -000000002279.jpg,500,333,banana,456.41,191.81,500,257.61 -000000009452.jpg,425,640,banana,265.05,112.15,319.75,156.56 -000000004376.jpg,640,424,banana,313.2,235.42,342.97,259.91 -000000011041.jpg,425,640,banana,181.08,279.12,269.04,333.67 -000000011041.jpg,425,640,banana,149.19,188.59,194.4,243.64 -000000011041.jpg,425,640,banana,127.72,293.7,204.09,367.34 -000000021213.jpg,427,640,banana,4.34,276.98,65.13,352.83 -000000021213.jpg,427,640,banana,50.45,278.37,128.62,332.97 -000000016629.jpg,640,480,banana,233.83,209.8,270.68,224.08 -000000016629.jpg,640,480,banana,206.85,269.67,290.66,304.23 -000000011041.jpg,425,640,banana,217.08,542.57,324.21,640 -000000004376.jpg,640,424,banana,302.95,211.89,329.4,224.74 -000000011041.jpg,425,640,banana,190.59,198.2,211,249.24 -000000004376.jpg,640,424,banana,453.79,260.46,486.94,277.47 -000000019609.jpg,612,612,banana,492.47,297.29,531.33,361.41 -000000016629.jpg,640,480,banana,511.29,231.89,554.08,295.16 -000000019609.jpg,612,612,banana,476.23,270.66,562.71,314.73 -000000019609.jpg,612,612,banana,372.38,285.34,454.81,319.74 -000000004376.jpg,640,424,banana,440.16,232.6,469.77,259.15 -000000004376.jpg,640,424,banana,325.28,220.89,372.05,241.68 -000000016629.jpg,640,480,banana,319.05,248.35,369.2,277.12 -000000004376.jpg,640,424,banana,338.2,237.1,348.73,247.47 -000000019609.jpg,612,612,banana,214.21,455.13,368.04,583.65 -000000016629.jpg,640,480,banana,77.47,227.68,116.81,249.4 -000000016629.jpg,640,480,banana,310.03,289.43,325.45,295.6 -000000016629.jpg,640,480,banana,538.04,229.18,540.36,235.16 -000000019609.jpg,612,612,banana,513.72,386.32,612,459.32 -000000019609.jpg,612,612,banana,353.44,244.79,431.25,296.53 -000000000984.jpg,480,640,orange,127.31,458.05,229.35,609.1 -000000010403.jpg,640,416,orange,416.93,365.52,535.66,410.39 -000000000984.jpg,480,640,orange,258.39,547.53,327.56,630.45 -000000000984.jpg,480,640,orange,371.06,207.1,450.16,284.76 -000000010403.jpg,640,416,orange,581.26,305.93,640,416 -000000010403.jpg,640,416,orange,247.73,55.16,387.02,187.9 -000000010403.jpg,640,416,orange,279.51,229.03,361.78,315.04 -000000000984.jpg,480,640,orange,342.29,133.51,424.27,221.24 -000000000984.jpg,480,640,orange,307.76,226.9,383.61,286.27 -000000010403.jpg,640,416,orange,60.75,336.97,175.83,416 -000000010403.jpg,640,416,orange,41.5,176.7,109.16,212.52 -000000000984.jpg,480,640,orange,233.57,417.93,248.94,469.34 -000000010403.jpg,640,416,orange,247.01,308.45,293.53,368.75 -000000019151.jpg,480,640,banana,226.3,521.55,480,640 -000000010303.jpg,640,468,banana,71.32,79.86,301.46,282.86 -000000019609.jpg,612,612,banana,369.31,314.46,445.29,375.79 -000000016680.jpg,640,161,banana,435.12,64.42,567.13,161 -000000012704.jpg,612,612,banana,316.72,235.77,365.16,289.05 -000000016680.jpg,640,161,banana,566.03,109.17,640,160.75 -000000009148.jpg,640,480,banana,210.71,268.19,223.86,279.09 -000000016680.jpg,640,161,banana,517.88,1.42,639.07,128.12 -000000021213.jpg,427,640,banana,113.99,297.29,214.28,400.37 -000000021213.jpg,427,640,banana,13.53,243.26,75.59,289.08 -000000016680.jpg,640,161,banana,321.33,82.74,358.7,133.98 -000000021213.jpg,427,640,banana,225.96,348.09,315.74,405.57 -000000002279.jpg,500,333,banana,128.23,283.15,202.33,333 -000000021213.jpg,427,640,banana,215.91,261.42,306.3,342.43 -000000009148.jpg,640,480,banana,189.38,273.07,211.9,282.72 -000000009148.jpg,640,480,banana,266.68,174.98,285.72,185.86 -000000009148.jpg,640,480,banana,383.64,263.92,474.07,278.26 -000000000984.jpg,480,640,orange,376.67,177.62,457.44,242.03 -000000000984.jpg,480,640,orange,431.62,298.3,480,350.31 -000000009768.jpg,640,425,orange,455.83,1.23,573.64,104.73 -000000000984.jpg,480,640,orange,372.74,253.57,471.38,324.65 -000000000984.jpg,480,640,orange,449.77,200.23,479.85,302.39 -000000000984.jpg,480,640,orange,202.93,571.54,278.62,639.15 -000000000984.jpg,480,640,orange,218.53,471.67,271.24,553.81 -000000004376.jpg,640,424,banana,372.62,201.44,412.39,234.4 -000000016629.jpg,640,480,banana,287.88,206.79,350.52,234.78 -000000011041.jpg,425,640,banana,188.12,235.36,311.27,318.58 -000000009148.jpg,640,480,banana,359.14,262.55,371.76,275.02 -000000019609.jpg,612,612,banana,433.17,286.48,503.84,370.52 -000000009398.jpg,640,480,banana,393.01,61.33,502.37,186.67 -000000009398.jpg,640,480,banana,256.17,41.87,465.08,196.06 -000000011677.jpg,612,612,banana,447.69,195.47,478.73,229.71 -000000000984.jpg,480,640,banana,1.57,375.85,47.16,468.47 -000000000984.jpg,480,640,banana,109.25,139.52,233.71,178.59 -000000020599.jpg,427,640,banana,198,517.96,310.2,625.85 -000000009398.jpg,640,480,banana,452.57,164.04,533.97,293.65 -000000009398.jpg,640,480,banana,0,69.64,176.58,176.58 -000000009398.jpg,640,480,banana,29.95,48.04,267.33,133.31 -000000009398.jpg,640,480,banana,1.25,200.73,152.1,286.75 -000000009398.jpg,640,480,banana,1.23,194.04,75.27,265.61 -000000009398.jpg,640,480,banana,401.78,28.15,500.84,114.62 -000000009398.jpg,640,480,banana,148.32,174.71,215.57,270.62 -000000009398.jpg,640,480,banana,401.31,14.96,616.65,124.08 -000000000984.jpg,480,640,orange,450.95,485.29,480,517.44 -000000021213.jpg,427,640,orange,394.2,430.98,416.33,446.65 -000000021213.jpg,427,640,banana,32.27,313.88,77.29,365.62 -000000000984.jpg,480,640,orange,145,6,479,612 -000000011041.jpg,425,640,banana,4,166,408,622 -000000019609.jpg,612,612,banana,147,72,611,381 -000000016629.jpg,640,480,banana,0,201,639,306 -000000004376.jpg,640,424,banana,296,192,500,407 -000000004731.jpg,640,425,orange,408.32,368.47,437.19,393.08 -000000004731.jpg,640,425,orange,482.48,367.16,511.27,393.78 -000000014821.jpg,491,640,orange,141.79,462.61,211.4,523.93 -000000004731.jpg,640,425,orange,388.11,362.18,411.74,385.61 -000000026051.jpg,640,427,orange,577.15,353.75,615.95,389.46 -000000026051.jpg,640,427,orange,607.85,379.7,635.51,398.26 -000000026051.jpg,640,427,orange,365.6,287.05,390.17,302.18 -000000004731.jpg,640,425,orange,422.17,363.34,435.12,371.31 -000000031000.jpg,640,480,orange,3.24,0.33,636.03,448.99 -000000035368.jpg,612,612,banana,326.31,153.16,405.81,415.4 -000000035368.jpg,612,612,banana,359.08,118.42,557.78,409.63 -000000035368.jpg,612,612,banana,301.67,300.9,355.57,429.62 -000000035368.jpg,612,612,banana,240.84,410.16,421.99,516.72 -000000019167.jpg,432,499,orange,90.41,287.66,246.56,446.16 -000000019167.jpg,432,499,orange,26.88,76.07,426.55,454.71 -000000022775.jpg,640,429,orange,256.46,44.61,413.55,208.99 -000000035368.jpg,612,612,orange,381.16,484.95,495.93,598 -000000008473.jpg,480,640,orange,1.43,117.54,480,631.55 -000000013145.jpg,640,436,orange,199.93,99.53,608.82,394.34 -000000013145.jpg,640,436,orange,2.26,0,218.57,314.83 -000000035368.jpg,612,612,orange,418.43,434.12,536.2,509.11 -000000035395.jpg,375,500,orange,263.71,379.3,287.93,413.25 -000000011925.jpg,640,427,orange,465.18,215.01,575.7,398.87 -000000025202.jpg,480,640,orange,60.38,172.08,243.02,449.81 -000000035395.jpg,375,500,orange,65.73,369.2,94.08,405.05 -000000035395.jpg,375,500,orange,231.78,350.2,322.61,432.2 -000000035395.jpg,375,500,orange,89.63,369.87,115.69,400.93 -000000025202.jpg,480,640,orange,0,126.04,196.23,360 -000000035395.jpg,375,500,orange,85.7,394.42,122.82,421.8 -000000035395.jpg,375,500,orange,122.14,359.88,148.71,385.06 -000000035395.jpg,375,500,orange,117.64,335.28,144.96,363.9 -000000035395.jpg,375,500,orange,104.03,354.1,136.83,399.13 -000000035395.jpg,375,500,orange,49.43,384.54,81.33,416.06 -000000035395.jpg,375,500,orange,99.35,337.12,118.07,362.62 -000000035395.jpg,375,500,orange,270.39,344.08,302.17,365.91 -000000035395.jpg,375,500,orange,79.32,349.12,103.37,373.43 -000000007398.jpg,640,360,orange,0,44.97,189.62,296.54 -000000028463.jpg,612,612,orange,0,232.82,25.98,276.87 -000000006220.jpg,640,425,orange,11.2,142.31,73.31,179.75 -000000006220.jpg,640,425,orange,20.97,104.81,92.18,181.53 -000000006220.jpg,640,425,orange,20.79,120.29,74.57,165.19 -000000028451.jpg,612,612,banana,79.77,239.3,541.86,496.48 -000000031062.jpg,640,425,orange,362.08,1.66,542.01,149.41 -000000030674.jpg,427,640,orange,3.01,414.12,266.54,630.96 -000000012902.jpg,332,500,orange,3.53,34.12,111.76,183.53 -000000031733.jpg,640,480,orange,451.7,122.83,512.83,187.36 -000000007945.jpg,640,520,orange,364.67,0,503.64,136 -000000016757.jpg,640,359,orange,263.55,195.13,361.53,280.44 -000000028287.jpg,640,478,orange,197.16,268.09,365.53,359.11 -000000032757.jpg,640,480,orange,373.98,75.52,504.36,145.97 -000000013893.jpg,427,640,orange,215.87,484.97,265.92,532.46 -000000018292.jpg,640,480,orange,211.2,180.71,398.68,352.38 -000000029875.jpg,375,500,orange,222.06,454.75,274.68,493.58 -000000007945.jpg,640,520,orange,244.71,0,386.64,74.64 -000000003917.jpg,640,480,orange,267.58,271.25,359.79,350.72 -000000026078.jpg,640,427,orange,560.23,264.34,577.46,274.97 -000000029875.jpg,375,500,orange,240.43,137.15,262.78,159.5 -000000020882.jpg,640,427,orange,29.07,175.21,290.68,422.79 -000000013893.jpg,427,640,orange,138.6,487.37,184.41,535.02 -000000028451.jpg,612,612,orange,165.41,134.13,317.28,290.51 -000000023400.jpg,612,612,orange,126.72,194.4,465.12,521.28 -000000009113.jpg,640,427,orange,444.52,151.95,459.35,157.43 -000000023400.jpg,612,612,orange,428.8,104.59,594.13,478.75 -000000023400.jpg,612,612,orange,171.36,74.88,518.4,185.76 -000000015851.jpg,640,444,orange,316.82,51.15,330.23,66.91 -000000031733.jpg,640,480,orange,251.77,20.85,307.94,77.02 -000000023400.jpg,612,612,orange,14.37,73.27,195.38,278.7 -000000015653.jpg,640,360,orange,438.55,123.05,494.44,169.2 -000000012902.jpg,332,500,orange,52.94,1.18,241.18,180 -000000018292.jpg,640,480,orange,170.14,20.28,353.8,202.82 -000000013893.jpg,427,640,orange,181.23,451.23,211.18,472.63 -000000029875.jpg,375,500,orange,229.5,435.66,267.75,466.52 -000000033009.jpg,426,640,orange,250.65,504.49,273.07,525.36 -000000023400.jpg,612,612,orange,105.37,106.81,441.68,303.11 -000000013893.jpg,427,640,orange,50.83,426.08,292.11,558.58 -000000035514.jpg,334,500,orange,3.94,20.67,169.29,158.46 -000000015851.jpg,640,444,orange,190.69,0.36,203.52,13.19 -000000031733.jpg,640,480,orange,156.99,32.75,221.36,86.96 -000000035514.jpg,334,500,orange,47.42,333.69,165.04,383.67 -000000035514.jpg,334,500,orange,249.41,173.98,305.88,216.33 -000000018292.jpg,640,480,orange,321.07,66.74,495.35,232.87 -000000018292.jpg,640,480,orange,384.3,199.65,565.17,383.05 -000000018292.jpg,640,480,orange,160.01,254.53,304,408.12 -000000033009.jpg,426,640,orange,269.96,501.7,296.17,526.03 -000000023400.jpg,612,612,orange,15.13,261.3,159.53,533.61 -000000035514.jpg,334,500,orange,85.28,167.42,166.18,214.61 -000000003464.jpg,427,640,orange,221.92,474.84,265.45,514.49 -000000035514.jpg,334,500,orange,261.93,4.99,313.23,54.03 -000000019637.jpg,640,427,orange,545.42,231.28,552.83,233.92 -000000029154.jpg,640,480,orange,305.63,342.27,385.55,423.49 -000000026764.jpg,480,640,orange,352.53,167.22,416.41,268.73 -000000005483.jpg,640,568,orange,275.08,333.14,327.31,360.47 -000000033009.jpg,426,640,orange,290.01,520.09,310.14,535.37 -000000015089.jpg,640,426,orange,165.91,365.29,182.01,375.04 -000000003464.jpg,427,640,orange,170.31,495.14,215.3,529.98 -000000013912.jpg,640,427,orange,324.1,300.81,391.97,372.28 -000000026764.jpg,480,640,orange,119.92,173.43,249.05,277.16 -000000029154.jpg,640,480,orange,240.69,330.34,305.49,407.9 -000000018292.jpg,640,480,orange,335.46,319.1,416.36,373.03 -000000014483.jpg,640,425,orange,245.45,122.25,441.24,318.03 -000000007945.jpg,640,520,orange,466.56,0.47,511.37,35.97 -000000012805.jpg,640,480,orange,256.67,264.84,275.69,286.44 -000000018292.jpg,640,480,orange,196.31,184.27,242.7,234.97 -000000003464.jpg,427,640,orange,174.24,475.37,216.39,498.54 -000000033009.jpg,426,640,orange,229.06,526.12,261.93,553.15 -000000003464.jpg,427,640,orange,214.46,512.48,249.8,531.48 -000000014483.jpg,640,425,orange,238.76,0,433.6,152.09 -000000019637.jpg,640,427,orange,542.55,234.26,553.05,244.39 -000000029875.jpg,375,500,orange,134.94,148.81,157.2,170.75 -000000026764.jpg,480,640,orange,32.22,112.22,157.42,231.79 -000000026764.jpg,480,640,orange,144.38,116.73,228.66,188.29 -000000005483.jpg,640,568,orange,374.59,240.68,391.28,262.11 -000000005483.jpg,640,568,orange,406.98,246.54,424.45,257.59 -000000014483.jpg,640,425,orange,445.8,17.12,637.76,168.02 -000000014483.jpg,640,425,orange,447.92,166.24,640,331.47 -000000014483.jpg,640,425,orange,462.27,317.74,640,425 -000000005483.jpg,640,568,orange,390.71,317.5,446.1,371.91 -000000014483.jpg,640,425,orange,241.13,294.15,444.51,424.91 -000000029154.jpg,640,480,orange,224.7,281.18,300.24,340.25 -000000005483.jpg,640,568,orange,374.6,357.67,396.08,371.72 -000000014483.jpg,640,425,orange,0,261.48,217.88,425 -000000005483.jpg,640,568,orange,355.06,356.78,374.38,374.07 -000000003464.jpg,427,640,orange,262.26,481.55,289.51,512.34 -000000029154.jpg,640,480,orange,261.9,249.51,335.62,314.25 -000000014483.jpg,640,425,orange,1.29,145.11,194.94,314.99 -000000005483.jpg,640,568,orange,456.1,345.33,478.04,365.85 -000000014483.jpg,640,425,orange,1.91,6.69,186.24,157.58 -000000005483.jpg,640,568,orange,358.91,248.58,383.87,267.47 -000000014483.jpg,640,425,orange,24.83,0.96,201.52,42.98 -000000005483.jpg,640,568,orange,284.74,358.8,305.78,376.94 -000000029154.jpg,640,480,orange,192.44,238.33,261.56,305.72 -000000014483.jpg,640,425,orange,447.92,1.19,615.06,44.17 -000000029154.jpg,640,480,orange,188.27,308.11,237.61,356.84 -000000005483.jpg,640,568,orange,582.77,281.32,597.08,294.37 -000000029154.jpg,640,480,orange,122.6,300.62,196.61,375.25 -000000005483.jpg,640,568,orange,572.57,281,584.73,293.74 -000000029154.jpg,640,480,orange,136.4,241.48,195.3,298.53 -000000029154.jpg,640,480,orange,294.18,312.51,366.49,361.32 -000000029154.jpg,640,480,orange,392,257.35,450.1,300.14 -000000005483.jpg,640,568,orange,585.58,307.73,598.32,323.02 -000000023735.jpg,612,612,orange,19.47,348.39,131.32,485.2 -000000028451.jpg,612,612,orange,315.18,132.45,465.96,284.86 -000000015851.jpg,640,444,orange,328.65,44.05,344.23,58.03 -000000026764.jpg,480,640,orange,219.26,113.58,321.58,199.97 -000000023735.jpg,612,612,orange,0,273.54,130.41,403.96 -000000029154.jpg,640,480,orange,273.32,407.68,406.38,480 -000000015851.jpg,640,444,orange,311.26,70.61,325.47,85 -000000026529.jpg,640,428,orange,151.5,74.34,235.02,149.02 -000000025172.jpg,640,478,orange,535.46,31.43,640,198.96 -000000026764.jpg,480,640,orange,242.03,141.03,386.92,276.33 -000000003464.jpg,427,640,orange,214.2,476.93,235.73,496.57 -000000015653.jpg,640,360,orange,375.11,121.94,429.79,186.35 -000000029154.jpg,640,480,orange,381.1,290.86,439.75,337.65 -000000003464.jpg,427,640,orange,250.06,501.99,279.36,529.3 -000000000009.jpg,640,480,orange,376.2,40.36,451.75,86.89 -000000026764.jpg,480,640,orange,207.21,62.66,294.57,138.56 -000000000009.jpg,640,480,orange,465.78,38.97,523.85,85.64 -000000013912.jpg,640,427,orange,302.69,263.18,315.58,275.94 -000000026764.jpg,480,640,orange,312.52,127.53,359.19,154.2 -000000003464.jpg,427,640,orange,203.25,493.48,226.87,515.53 -000000000009.jpg,640,480,orange,385.7,73.66,469.72,144.17 -000000003464.jpg,427,640,orange,164.24,494.54,193.27,526.92 -000000013912.jpg,640,427,orange,267.38,252.66,344.52,280.04 -000000000009.jpg,640,480,orange,364.05,2.49,458.81,73.56 -000000026764.jpg,480,640,orange,84.57,223.98,122.36,255.48 -000000005483.jpg,640,568,orange,304.78,385.23,323.48,405.39 -000000029154.jpg,640,480,orange,340.4,215.37,409.54,280.04 -000000015089.jpg,640,426,orange,139.71,352.96,161.73,374.76 -000000015089.jpg,640,426,orange,123.47,351.03,144.43,363 -000000001306.jpg,500,333,orange,331.43,181.83,340.86,193.37 -000000035514.jpg,334,500,orange,299.14,166.71,331.19,211 -000000015851.jpg,640,444,orange,172.05,0,187.54,13.64 -000000008734.jpg,640,480,orange,523.73,96.73,595.09,173.99 -000000007179.jpg,640,506,orange,375.58,363.48,469.34,464.31 -000000028287.jpg,640,478,orange,433.33,267.04,489.03,318.26 -000000033009.jpg,426,640,orange,295.39,533.1,314.08,554.9 -000000005483.jpg,640,568,orange,253,227,603,410 -PUZZLE_COURTYARD_T_H_frame_0988_jpg.rf.aeec9ddfef50984d03326b8333feb40c.jpg,720,1280,right_hand,482,197,955,519 -PUZZLE_LIVINGROOM_T_B_frame_0131_jpg.rf.433610eaa9cc184369c27ccb71bd7d84.jpg,720,1280,right_hand,526,598,976,717 -CARDS_LIVINGROOM_S_H_frame_0096_jpg.rf.aa9d52c75ba7afe37a0a471b5ebc02a7.jpg,720,1280,left_hand,359,599,512,716 -CARDS_COURTYARD_S_H_frame_2292_jpg.rf.c6bf1f2856424f374638bd37abbeca6f.jpg,720,1280,right_hand,556,580,840,716 -JENGA_LIVINGROOM_H_B_frame_1393_jpg.rf.35dd7253187418d0d377227ec614df21.jpg,720,1280,right_hand,730,216,1031,700 -JENGA_LIVINGROOM_T_S_frame_2093_jpg.rf.05fc6979a1b2af728e05bc95d4916021.jpg,720,1280,left_hand,2,370,388,710 -PUZZLE_OFFICE_B_H_frame_2377_jpg.rf.c7220e33a66d655e8ddf52249b0439f6.jpg,720,1280,right_hand,542,455,796,718 -CHESS_COURTYARD_T_B_frame_1014_jpg.rf.3c2e228ae29c891eb89c12f31a0c1d50.jpg,720,1280,right_hand,325,625,624,716 -CARDS_COURTYARD_T_B_frame_1226_jpg.rf.547c3961e2670e11a0b6798e230dbb1e.jpg,720,1280,left_hand,200,669,379,714 -PUZZLE_COURTYARD_S_B_frame_0983_jpg.rf.fcbfbfeb6e8e988811a515dd3927c369.jpg,720,1280,right_hand,618,593,947,716 -CARDS_LIVINGROOM_H_S_frame_2174_jpg.rf.ccd15295e8467e36bb967c11cdd0f57d.jpg,720,1280,right_hand,586,565,920,719 -JENGA_COURTYARD_T_S_frame_0332_jpg.rf.0757d6a89b6d5f29757de5b99056f502.jpg,720,1280,right_hand,534,424,876,693 -JENGA_LIVINGROOM_S_T_frame_0691_jpg.rf.74dedd9cbb0f4282a0f58eb732579969.jpg,720,1280,left_hand,1,339,450,693 -JENGA_LIVINGROOM_T_S_frame_1466_jpg.rf.0469c1e04502da8f36bf7e6bcd99c194.jpg,720,1280,left_hand,234,715,270,719 -CARDS_LIVINGROOM_S_H_frame_0246_jpg.rf.941d0f58efeeb6ea119bac9407f80f82.jpg,720,1280,left_hand,404,674,488,718 -CARDS_LIVINGROOM_S_H_frame_2279_jpg.rf.b33c0fe1ffe4afaea22fe13ea745c29a.jpg,720,1280,left_hand,99,513,505,718 -PUZZLE_OFFICE_T_S_frame_1846_jpg.rf.9a607d00f5a48a5a100c77ed25d6c133.jpg,720,1280,right_hand,585,302,857,662 -CARDS_COURTYARD_B_T_frame_1338_jpg.rf.931b507004dd634e598be9170349b85a.jpg,720,1280,right_hand,711,640,771,714 -PUZZLE_OFFICE_H_B_frame_1833_jpg.rf.f93eee67f384759c58b3486bea9e0faf.jpg,720,1280,left_hand,108,633,351,716 -JENGA_LIVINGROOM_H_B_frame_2233_jpg.rf.c380c012ff04bf4dd507c94d1ea1eef5.jpg,720,1280,right_hand,646,198,901,553 -CARDS_OFFICE_H_T_frame_2131_jpg.rf.2b72dcac3de795ec0b6a7d95473285fe.jpg,720,1280,right_hand,594,288,1008,549 -CARDS_LIVINGROOM_B_T_frame_2037_jpg.rf.456026495b6f227f94a3dfa3394e4dd1.jpg,720,1280,right_hand,590,646,853,718 -PUZZLE_LIVINGROOM_S_H_frame_0183_jpg.rf.09298ac6692f7932cc22e60e9bd058da.jpg,720,1280,left_hand,183,540,550,716 -PUZZLE_LIVINGROOM_H_S_frame_1466_jpg.rf.4cbc2e4f5b11283c43961bf5de618b09.jpg,720,1280,left_hand,9,555,366,715 -JENGA_LIVINGROOM_H_B_frame_0365_jpg.rf.673950ea2e2ec5de9cd7d7311d84fcde.jpg,720,1280,right_hand,534,295,820,621 -JENGA_OFFICE_T_H_frame_2665_jpg.rf.bb3ceea1fd1d236e272a48f795008034.jpg,720,1280,left_hand,7,329,210,617 -CARDS_OFFICE_H_T_frame_0160_jpg.rf.85008ce1df993758d9c467df63414719.jpg,720,1280,left_hand,174,654,253,718 -CARDS_LIVINGROOM_H_S_frame_2279_jpg.rf.58db4eb017610fee2f1b4b10764e4781.jpg,720,1280,right_hand,765,381,1104,719 -CHESS_OFFICE_T_H_frame_1366_jpg.rf.e35a72d5e250103dc7814d3eab178864.jpg,720,1280,left_hand,259,650,498,718 -PUZZLE_OFFICE_B_H_frame_2377_jpg.rf.c7220e33a66d655e8ddf52249b0439f6.jpg,720,1280,left_hand,150,430,508,714 -CHESS_LIVINGROOM_T_H_frame_2417_jpg.rf.3c1a4ad615012e19abd1ad16b0f0c478.jpg,720,1280,left_hand,0,331,76,545 -CHESS_COURTYARD_T_B_frame_0982_jpg.rf.3975b84f67a3c60718246a647a967006.jpg,720,1280,right_hand,276,655,546,718 -PUZZLE_OFFICE_T_S_frame_1830_jpg.rf.0e04695ff54853f329e46f63ef97b75f.jpg,720,1280,left_hand,108,477,436,719 -PUZZLE_LIVINGROOM_H_S_frame_0149_jpg.rf.2b96c30e985a282fae953f06d94a5aef.jpg,720,1280,left_hand,91,552,378,717 -CARDS_LIVINGROOM_T_B_frame_0797_jpg.rf.77d8ab22efd8eb5b53b65cf50eb76d29.jpg,720,1280,left_hand,5,544,457,719 -PUZZLE_LIVINGROOM_T_B_frame_0307_jpg.rf.054b4d7adf7204f75d79d39915fc5839.jpg,720,1280,right_hand,539,556,1168,717 -CARDS_OFFICE_H_T_frame_1614_jpg.rf.1c96bb2745f5dd60a6a1e3a54bd3e1b0.jpg,720,1280,right_hand,507,531,894,718 -PUZZLE_OFFICE_T_S_frame_1555_jpg.rf.3cbacdcc88f3d2c6c174e20c4430141e.jpg,720,1280,right_hand,581,555,857,719 -CARDS_LIVINGROOM_B_T_frame_0145_jpg.rf.127cb3f8fba0002c3935685f49ef5a88.jpg,720,1280,right_hand,762,650,972,718 -CHESS_COURTYARD_T_B_frame_0918_jpg.rf.a31bd9d08cfc0fbe468c21490d31fba8.jpg,720,1280,right_hand,317,625,671,717 -CARDS_OFFICE_T_H_frame_1021_jpg.rf.8df06c4119187211722880eefbeb6c27.jpg,720,1280,left_hand,200,651,319,719 -CHESS_OFFICE_S_B_frame_0460_jpg.rf.dba2956e45f028662fa109918186e277.jpg,720,1280,right_hand,779,546,1152,716 -CARDS_OFFICE_T_H_frame_2622_jpg.rf.50e4e2764f0afa7d3c7ec09c326eba1c.jpg,720,1280,right_hand,497,596,686,719 -JENGA_COURTYARD_H_B_frame_1961_jpg.rf.dc93322594f45bd61af7a7037f980124.jpg,720,1280,left_hand,1,101,300,479 -PUZZLE_COURTYARD_S_B_frame_0165_jpg.rf.759dfb04559f21c24546099500a1862a.jpg,720,1280,left_hand,216,576,489,718 -JENGA_OFFICE_T_H_frame_2530_jpg.rf.d8bf278dbca370764b32f3dc123a2c4d.jpg,720,1280,left_hand,204,267,439,477 -JENGA_LIVINGROOM_T_S_frame_0094_jpg.rf.68d7228e2c672387cd0c914fa49ab4ed.jpg,720,1280,left_hand,118,277,428,632 -PUZZLE_OFFICE_T_S_frame_0459_jpg.rf.307773daa4067110b2aa6af8be8b67f7.jpg,720,1280,left_hand,218,579,563,715 -CHESS_COURTYARD_T_B_frame_0947_jpg.rf.3789496cfb354c1e7e33663bd61d2472.jpg,720,1280,right_hand,382,622,656,718 -JENGA_OFFICE_B_S_frame_0519_jpg.rf.e80cf92ef9e55fcede271d5a61effa85.jpg,720,1280,right_hand,493,429,828,716 -PUZZLE_LIVINGROOM_B_T_frame_0385_jpg.rf.90caf4efda9c176cf3e1623570c8e0ef.jpg,720,1280,right_hand,704,582,1075,715 -CHESS_COURTYARD_T_B_frame_1816_jpg.rf.99b6342579a6866aeea92a97aa6c3486.jpg,720,1280,left_hand,106,600,428,718 -CHESS_OFFICE_S_B_frame_0640_jpg.rf.528881781397ddb2565054e365bf57f0.jpg,720,1280,right_hand,612,614,1031,717 -PUZZLE_COURTYARD_S_B_frame_0165_jpg.rf.759dfb04559f21c24546099500a1862a.jpg,720,1280,right_hand,514,567,820,718 -JENGA_COURTYARD_T_S_frame_1320_jpg.rf.fe5fbf6e5d6d46c13fc4ae400b3b7d60.jpg,720,1280,right_hand,492,180,926,537 -CHESS_LIVINGROOM_H_T_frame_0972_jpg.rf.f53408b35293a7aecc5c94071513517d.jpg,720,1280,right_hand,1067,606,1279,718 -JENGA_LIVINGROOM_S_T_frame_2426_jpg.rf.a02eeb37b848061522e4cead0ec5eaf3.jpg,720,1280,left_hand,3,341,236,718 -CHESS_LIVINGROOM_T_H_frame_1271_jpg.rf.68c333e868cf9e82dc9a6250fb36d7a2.jpg,720,1280,right_hand,752,512,1199,719 -JENGA_LIVINGROOM_H_B_frame_0365_jpg.rf.673950ea2e2ec5de9cd7d7311d84fcde.jpg,720,1280,right_hand,534,295,820,621 -CARDS_COURTYARD_S_H_frame_2165_jpg.rf.73fab304d0cc49a438dd0371b86627ac.jpg,720,1280,left_hand,147,576,419,718 -PUZZLE_LIVINGROOM_T_B_frame_2166_jpg.rf.62339887d71f8b7bf0b25b0699c9fe0a.jpg,720,1280,right_hand,448,384,1084,716 -JENGA_LIVINGROOM_S_T_frame_2287_jpg.rf.6e6bc5d77fee2d37e0e13235206dafae.jpg,720,1280,right_hand,1044,699,1107,718 -CARDS_LIVINGROOM_T_B_frame_1566_jpg.rf.22515489a9704d14f2b79490ccb7fd3c.jpg,720,1280,right_hand,463,502,944,719 -PUZZLE_OFFICE_T_S_frame_0580_jpg.rf.6f56c2765020d77446cf3fb492cb68be.jpg,720,1280,left_hand,6,438,272,719 -JENGA_COURTYARD_T_S_frame_2296_jpg.rf.fe475c2ba02a416f4c830d12360b4394.jpg,720,1280,right_hand,499,436,825,712 -JENGA_LIVINGROOM_B_H_frame_1673_jpg.rf.011a1b52cc151f0fcc31587c08541f2d.jpg,720,1280,right_hand,905,195,1273,405 -PUZZLE_LIVINGROOM_T_B_frame_2482_jpg.rf.a48efd85f3a14466b3f18d18fc61d517.jpg,720,1280,left_hand,10,605,217,712 -PUZZLE_LIVINGROOM_S_H_frame_0266_jpg.rf.b0e48a5cd4a8cbc7e6aefd5b5353c3d5.jpg,720,1280,right_hand,567,525,908,718 -CHESS_COURTYARD_H_S_frame_0223_jpg.rf.897a2e123b7c9aad6a6e589a5b0a6772.jpg,720,1280,right_hand,767,479,1225,717 -JENGA_LIVINGROOM_S_T_frame_2310_jpg.rf.19a123d4848617ebf5496ba5fc1b5b6f.jpg,720,1280,right_hand,344,534,762,718 -CARDS_LIVINGROOM_T_B_frame_1076_jpg.rf.91c165b35c340eedbaddf436e010e28d.jpg,720,1280,left_hand,7,623,266,719 -PUZZLE_COURTYARD_H_T_frame_0819_jpg.rf.f00f992ecae041080f5d3bab3dac7a4e.jpg,720,1280,right_hand,1060,563,1278,718 -CHESS_OFFICE_T_H_frame_2312_jpg.rf.6b4407f15c331fc7473bc9fdf3c10a0d.jpg,720,1280,left_hand,181,635,389,716 -PUZZLE_OFFICE_H_B_frame_1926_jpg.rf.8c3aa708643c413ede85821036caba3d.jpg,720,1280,left_hand,355,553,633,719 -PUZZLE_OFFICE_T_S_frame_0981_jpg.rf.bb291ac5aaa52997e94fadd6f85be383.jpg,720,1280,left_hand,8,451,313,710 -PUZZLE_OFFICE_S_T_frame_0585_jpg.rf.6f80b4e7880dba2832cab7d70b8f9564.jpg,720,1280,left_hand,118,580,435,714 -PUZZLE_LIVINGROOM_H_S_frame_1072_jpg.rf.aa78d645e1b674066a64a251621a04bd.jpg,720,1280,left_hand,81,534,431,713 -PUZZLE_LIVINGROOM_S_H_frame_1062_jpg.rf.fe3b23a0abd19d7d27d0f0655bb4e25d.jpg,720,1280,left_hand,96,602,457,718 -CARDS_OFFICE_T_H_frame_2689_jpg.rf.ee23c2c848553e1000011a7403ea4117.jpg,720,1280,right_hand,556,651,700,719 -CHESS_LIVINGROOM_S_B_frame_1541_jpg.rf.9a0a6c6a7b77380a09ef1175c2f06e19.jpg,720,1280,left_hand,19,537,424,717 -PUZZLE_COURTYARD_H_T_frame_1892_jpg.rf.803f883ae5de1cd5bee37ad8e498c7b8.jpg,720,1280,right_hand,693,516,906,718 -CHESS_COURTYARD_H_S_frame_1068_jpg.rf.3f709c6b67be28324d3d915330650a80.jpg,720,1280,right_hand,784,582,1018,716 -CARDS_COURTYARD_S_H_frame_0896_jpg.rf.38e3196d1446550e43e5df33a6b3f477.jpg,720,1280,left_hand,158,652,426,719 -CHESS_OFFICE_T_H_frame_1997_jpg.rf.cbf75491f5f24f5b8116249b2d0c7896.jpg,720,1280,left_hand,106,588,342,716 -CARDS_LIVINGROOM_T_B_frame_0001_jpg.rf.7ecdaf099e600bdc6e9e25354724d094.jpg,720,1280,right_hand,463,556,829,719 -PUZZLE_LIVINGROOM_T_B_frame_1773_jpg.rf.ff319710cda9bc0ee823183c41e7bab2.jpg,720,1280,right_hand,387,544,898,718 -CARDS_OFFICE_T_H_frame_1489_jpg.rf.cc8395b5742702832ca3896a009e1cec.jpg,720,1280,left_hand,226,690,257,719 -CHESS_LIVINGROOM_H_T_frame_0210_jpg.rf.bacb03f487aa76896cd14be5a493dff7.jpg,720,1280,right_hand,1109,608,1279,718 -PUZZLE_OFFICE_S_T_frame_2565_jpg.rf.1f54e621561ebd6a77e376767cb0206a.jpg,720,1280,right_hand,647,623,894,718 -JENGA_OFFICE_B_S_frame_0343_jpg.rf.29ff9f82e60ed01d999ee79ca253445a.jpg,720,1280,left_hand,270,519,643,718 -CHESS_LIVINGROOM_H_T_frame_0461_jpg.rf.a05e8ba901c7e20faa83af0e56e11d4b.jpg,720,1280,right_hand,643,421,1201,718 -CHESS_COURTYARD_T_B_frame_1942_jpg.rf.75ed988e8ebcd5418187f1405d7aaa8e.jpg,720,1280,left_hand,35,684,262,717 -PUZZLE_LIVINGROOM_T_B_frame_2578_jpg.rf.68b36915641893d2111d3a4a805a842d.jpg,720,1280,left_hand,7,289,321,555 -CARDS_COURTYARD_T_B_frame_0805_jpg.rf.b9316a70db1030aa006156182df891de.jpg,720,1280,left_hand,158,603,312,718 -CARDS_COURTYARD_T_B_frame_2244_jpg.rf.1a86d0d99fffbe22d35679219ddeebc6.jpg,720,1280,right_hand,653,464,872,698 -CHESS_COURTYARD_T_B_frame_1624_jpg.rf.6fc96c93c7972471ba317658cef1c7d8.jpg,720,1280,right_hand,453,706,565,718 -PUZZLE_OFFICE_T_S_frame_0580_jpg.rf.6f56c2765020d77446cf3fb492cb68be.jpg,720,1280,left_hand,6,438,272,719 -CHESS_COURTYARD_T_B_frame_2382_jpg.rf.0a2624f515854fbbd305442881e07291.jpg,720,1280,left_hand,52,664,283,718 -JENGA_LIVINGROOM_S_T_frame_2535_jpg.rf.7cc81790d2f0db92e6ec11c8729457da.jpg,720,1280,right_hand,544,157,991,483 -PUZZLE_COURTYARD_T_H_frame_2307_jpg.rf.7af0646dba73029bfa85680e6541e47a.jpg,720,1280,left_hand,5,646,226,718 -CARDS_OFFICE_H_T_frame_1085_jpg.rf.32dc0ee21ced2d240e9a86e21b7ed2fa.jpg,720,1280,right_hand,620,652,806,718 -PUZZLE_LIVINGROOM_B_T_frame_1994_jpg.rf.592385091b6c2116a875c8ac189a3f72.jpg,720,1280,left_hand,113,400,502,635 -CARDS_OFFICE_B_S_frame_0954_jpg.rf.ea5068ef9ab6bd68092ebebb8faf3fec.jpg,720,1280,left_hand,329,705,361,719 -CHESS_OFFICE_S_B_frame_1765_jpg.rf.44b7344477ef79377bb8dfacdf0dc370.jpg,720,1280,left_hand,146,625,402,719 -CHESS_LIVINGROOM_T_H_frame_0023_jpg.rf.7190b4dc9b0b2b7bd2541a7415b2272d.jpg,720,1280,right_hand,681,0,923,209 -JENGA_OFFICE_T_H_frame_1551_jpg.rf.f7f8ab7b6122b8869c555f8802af9952.jpg,720,1280,left_hand,308,604,544,719 -PUZZLE_OFFICE_H_B_frame_2423_jpg.rf.a0b53b1bc7b4cad11bad776675091048.jpg,720,1280,left_hand,293,589,509,714 -PUZZLE_LIVINGROOM_T_B_frame_0534_jpg.rf.8eab7b4ec1bf0eff8b7e6d9d46c22923.jpg,720,1280,left_hand,7,399,356,673 -PUZZLE_LIVINGROOM_B_T_frame_2499_jpg.rf.8f2046eb7962aa3913523ce1f5ad7f9f.jpg,720,1280,left_hand,4,518,497,715 -JENGA_OFFICE_T_H_frame_1720_jpg.rf.1c0a5fb3f97be89e9bcab62c31bc1584.jpg,720,1280,left_hand,125,515,345,713 -JENGA_OFFICE_T_H_frame_2348_jpg.rf.7b574760cff96cca3f35246244b3cb32.jpg,720,1280,right_hand,604,546,824,719 -JENGA_LIVINGROOM_B_H_frame_2217_jpg.rf.09082cff5a73ae994b596f96070ca365.jpg,720,1280,right_hand,861,700,965,719 -PUZZLE_COURTYARD_B_S_frame_2668_jpg.rf.7592772ca8cc62c6e5796ae5a2c04817.jpg,720,1280,right_hand,611,523,886,719 -PUZZLE_LIVINGROOM_H_S_frame_2419_jpg.rf.af93db520abfd7c03165ccfe34de68f4.jpg,720,1280,right_hand,631,407,921,710 -JENGA_OFFICE_H_T_frame_1491_jpg.rf.902076260d0429b20534a4146df9abd3.jpg,720,1280,left_hand,406,356,536,701 -PUZZLE_LIVINGROOM_S_H_frame_0968_jpg.rf.ad3b1fad6f545f2258cdb924850e2d4f.jpg,720,1280,right_hand,732,462,1196,718 -CHESS_LIVINGROOM_T_H_frame_1479_jpg.rf.6d110d3ccf34250e49e5d3defb1b135a.jpg,720,1280,right_hand,566,687,709,718 -CHESS_COURTYARD_T_B_frame_2294_jpg.rf.caa5b2addea0cfc722dc5305e9ffd72e.jpg,720,1280,right_hand,778,380,992,560 -CARDS_COURTYARD_H_S_frame_0659_jpg.rf.dad7afcf7b761cb7643112bc3cc9bb2a.jpg,720,1280,left_hand,143,566,527,718 -JENGA_COURTYARD_T_S_frame_2247_jpg.rf.a08241ad702e0aec67f44f0c7bec4850.jpg,720,1280,left_hand,38,574,290,718 -CARDS_LIVINGROOM_H_S_frame_0625_jpg.rf.89d669c1f3b97b105e846a3b268fb942.jpg,720,1280,right_hand,599,470,884,719 -PUZZLE_OFFICE_H_B_frame_2403_jpg.rf.80a1b374e9859f60a86d2eee8512fe0d.jpg,720,1280,left_hand,310,649,499,718 -CHESS_COURTYARD_T_B_frame_0810_jpg.rf.026b8b34ae22450fc57338947883fae0.jpg,720,1280,right_hand,156,572,514,717 -JENGA_OFFICE_T_H_frame_1631_jpg.rf.2cd3fc1855c7787725557b6f3ad1cde2.jpg,720,1280,right_hand,570,198,821,425 -CHESS_COURTYARD_H_S_frame_0924_jpg.rf.7af8a974ef5601c11077b49eb9dbdb6d.jpg,720,1280,right_hand,290,413,522,636 -JENGA_LIVINGROOM_T_S_frame_0751_jpg.rf.2bad5ca0307753826fd2954cbaa57a26.jpg,720,1280,right_hand,558,326,944,649 -CHESS_LIVINGROOM_H_T_frame_1052_jpg.rf.07d46931f869cf8837946a2d527c31b6.jpg,720,1280,right_hand,505,646,946,718 -CARDS_OFFICE_B_S_frame_1240_jpg.rf.b9ec60b652ab9911348909616700755e.jpg,720,1280,right_hand,667,646,778,718 -CARDS_COURTYARD_B_T_frame_2693_jpg.rf.e802e2f4d90bd95fa59c325317dbe15c.jpg,720,1280,right_hand,579,689,672,718 -PUZZLE_COURTYARD_T_H_frame_1938_jpg.rf.fd82269375251c548f94d7a2dbc80a6e.jpg,720,1280,right_hand,435,231,921,674 -CHESS_OFFICE_S_B_frame_0499_jpg.rf.d642562ca9825a7e3b3afbcd0e4da849.jpg,720,1280,right_hand,610,487,1037,719 -CARDS_OFFICE_T_H_frame_1111_jpg.rf.f542d6ec03a5484577f0613b5fa43af8.jpg,720,1280,left_hand,366,654,446,719 -CARDS_COURTYARD_H_S_frame_1832_jpg.rf.2fe011b3d3f1465b33984f87a5eac592.jpg,720,1280,right_hand,710,379,926,594 -PUZZLE_COURTYARD_B_S_frame_2451_jpg.rf.6fd9a2f32e8bebc48e5e0ef4eaf52a97.jpg,720,1280,left_hand,1,1,354,409 -PUZZLE_COURTYARD_S_B_frame_0447_jpg.rf.a56d507e0206b8a394bf34f32394a549.jpg,720,1280,left_hand,84,697,226,714 -CARDS_LIVINGROOM_B_T_frame_0374_jpg.rf.aa8cbb73eeff6fe9dfc5aa960bb3a9fd.jpg,720,1280,right_hand,779,650,927,718 -PUZZLE_COURTYARD_H_T_frame_1233_jpg.rf.25cc4cbeddd59b9323fa8efe3346749d.jpg,720,1280,right_hand,984,596,1237,716 -PUZZLE_LIVINGROOM_H_S_frame_0831_jpg.rf.1c568a14978882381c17ca5aea21b96c.jpg,720,1280,right_hand,571,440,991,719 -JENGA_COURTYARD_S_T_frame_1610_jpg.rf.a47cedd28de08c434fb1cd40d713656c.jpg,720,1280,left_hand,105,246,548,527 -PUZZLE_LIVINGROOM_T_B_frame_1552_jpg.rf.ace24f0d50fe04c58440df0a153687de.jpg,720,1280,left_hand,6,373,317,718 -CARDS_LIVINGROOM_H_S_frame_1238_jpg.rf.b0bea2a795b0e859af1074e02e0cd694.jpg,720,1280,right_hand,606,606,823,719 -CARDS_OFFICE_T_H_frame_0487_jpg.rf.30d25c58adcfcb93e2c690d0a2a939b3.jpg,720,1280,left_hand,198,630,435,719 -CHESS_COURTYARD_T_B_frame_1816_jpg.rf.99b6342579a6866aeea92a97aa6c3486.jpg,720,1280,left_hand,106,600,428,718 -CHESS_COURTYARD_S_H_frame_1632_jpg.rf.123ba9e7248e8710cab03b22b79a4bbd.jpg,720,1280,right_hand,476,411,1103,718 -JENGA_COURTYARD_T_S_frame_0703_jpg.rf.a040ddffd168ea96fe85b65e27387d5f.jpg,720,1280,right_hand,477,374,847,716 -PUZZLE_LIVINGROOM_H_S_frame_0149_jpg.rf.2b96c30e985a282fae953f06d94a5aef.jpg,720,1280,right_hand,684,424,952,635 -PUZZLE_LIVINGROOM_T_B_frame_1847_jpg.rf.330afe8d3e2d0c353ba7a759a3e161a8.jpg,720,1280,left_hand,1,504,217,710 -JENGA_COURTYARD_B_H_frame_2519_jpg.rf.4edeeb8786aa5bc54933182bedbd3b4b.jpg,720,1280,right_hand,725,698,815,718 -CHESS_LIVINGROOM_S_B_frame_1339_jpg.rf.d8e1521351c21502f6d7012c5cf392f5.jpg,720,1280,left_hand,5,295,203,636 -PUZZLE_COURTYARD_H_T_frame_1947_jpg.rf.bd5b768a35b44050e25402efc6068fc6.jpg,720,1280,left_hand,164,606,420,717 -JENGA_COURTYARD_H_B_frame_2605_jpg.rf.f53a5fc6de93be1aab0d9e97ea0a39ab.jpg,720,1280,right_hand,529,684,679,718 -PUZZLE_OFFICE_T_S_frame_0542_jpg.rf.6bb3086f8f4f4ce2e6e2a9c1d7d90814.jpg,720,1280,left_hand,70,266,515,614 -CARDS_LIVINGROOM_H_S_frame_2465_jpg.rf.e9dfa4656c6a7771733d8fca878af484.jpg,720,1280,right_hand,712,469,1093,719 -JENGA_COURTYARD_T_S_frame_2296_jpg.rf.fe475c2ba02a416f4c830d12360b4394.jpg,720,1280,right_hand,499,436,825,712 -CHESS_OFFICE_T_H_frame_0248_jpg.rf.c15b017ef3d44844cc35460f32b7eab1.jpg,720,1280,left_hand,187,701,353,717 -JENGA_COURTYARD_S_T_frame_0446_jpg.rf.48c35c76ec3a4e3471e22dcf41e8fbed.jpg,720,1280,right_hand,656,663,754,716 -CHESS_OFFICE_S_B_frame_0499_jpg.rf.d642562ca9825a7e3b3afbcd0e4da849.jpg,720,1280,right_hand,610,487,1037,719 -PUZZLE_COURTYARD_H_T_frame_0069_jpg.rf.f7619212ecaf114000b4b862cbfb5a51.jpg,720,1280,left_hand,162,543,460,718 -CHESS_LIVINGROOM_T_H_frame_2581_jpg.rf.1cc3545e0cc0c86052f29e8dba8119f5.jpg,720,1280,right_hand,553,409,975,718 -JENGA_OFFICE_T_H_frame_1172_jpg.rf.ea84e585800711e87d19bb9ff51df0ac.jpg,720,1280,right_hand,522,561,778,718 -PUZZLE_COURTYARD_T_H_frame_0184_jpg.rf.2580f4596cf15470ad1c022c9de3a05c.jpg,720,1280,right_hand,762,614,1054,718 -PUZZLE_COURTYARD_S_B_frame_0827_jpg.rf.d35bef62a93120e1b55eda0343973dfb.jpg,720,1280,left_hand,32,486,411,717 -PUZZLE_LIVINGROOM_B_T_frame_0036_jpg.rf.5d2cb089983cdfd9ee6bedc3896f4a3f.jpg,720,1280,right_hand,819,617,1203,717 -JENGA_COURTYARD_H_B_frame_2143_jpg.rf.d9b7f2aebd257f40b276454ac95c483f.jpg,720,1280,right_hand,535,15,989,237 -CARDS_LIVINGROOM_H_S_frame_1886_jpg.rf.a748adbbade42bf9e2f9c580c853e491.jpg,720,1280,right_hand,887,396,1179,719 -JENGA_COURTYARD_S_T_frame_1434_jpg.rf.eb6c39f553dd5ce42a0393665af3bce9.jpg,720,1280,left_hand,27,248,284,449 -CARDS_OFFICE_H_T_frame_1489_jpg.rf.f81da8c043de43f0aa7c5847ab3b9211.jpg,720,1280,left_hand,272,627,385,718 -JENGA_LIVINGROOM_H_B_frame_0772_jpg.rf.f4e21dadc2a8135617decd7c0f7ffc9f.jpg,720,1280,right_hand,686,376,956,671 -PUZZLE_COURTYARD_B_S_frame_1502_jpg.rf.711c649d91f090085222f9d090406509.jpg,720,1280,left_hand,10,690,165,719 -CARDS_OFFICE_T_H_frame_0938_jpg.rf.a177a9863c9479da36e595f661bb50f8.jpg,720,1280,left_hand,181,588,419,719 -PUZZLE_OFFICE_T_S_frame_1513_jpg.rf.1c87d859e07ee23642411bcbcabe5fc9.jpg,720,1280,right_hand,438,542,725,709 -PUZZLE_COURTYARD_B_S_frame_0264_jpg.rf.392727285d7eb57539dc5be0a71a7805.jpg,720,1280,left_hand,222,667,376,719 -JENGA_COURTYARD_S_T_frame_0582_jpg.rf.3c1f985f1289a80024281c7ae4034cbc.jpg,720,1280,left_hand,175,271,560,510 -CHESS_OFFICE_B_S_frame_1745_jpg.rf.6a1f91c5bdafd15fb999b2cdccfb0613.jpg,720,1280,left_hand,279,656,486,717 -PUZZLE_OFFICE_B_H_frame_2011_jpg.rf.1638fee9cbff64803a969a27e12f449d.jpg,720,1280,left_hand,4,516,284,715 -CARDS_OFFICE_T_H_frame_1846_jpg.rf.eb4ab66b5d3336b1631355535efc99e0.jpg,720,1280,right_hand,499,452,711,626 -CARDS_OFFICE_H_T_frame_1506_jpg.rf.38102fe2bd192de394d2947491342469.jpg,720,1280,left_hand,217,644,304,718 -CARDS_COURTYARD_H_S_frame_2194_jpg.rf.6a45d660446d3c81c1cd28a2fda1641b.jpg,720,1280,left_hand,214,566,486,719 -PUZZLE_OFFICE_T_S_frame_0543_jpg.rf.11389518d90cbf323d14a4459ef345e0.jpg,720,1280,left_hand,70,289,525,628 -CARDS_COURTYARD_H_S_frame_1135_jpg.rf.dd2f46360bec7fb4c13adcf12b03a1e5.jpg,720,1280,left_hand,138,524,485,718 -CARDS_LIVINGROOM_B_T_frame_0949_jpg.rf.df81e6bb616b7f01a265cd47121ff1fc.jpg,720,1280,right_hand,677,667,783,718 -PUZZLE_COURTYARD_H_T_frame_2576_jpg.rf.f885252fc0f4c88e4416db484253f522.jpg,720,1280,left_hand,254,495,472,718 -CHESS_COURTYARD_B_T_frame_0977_jpg.rf.5d98e6d56e24f9876e89479d8f15bd81.jpg,720,1280,right_hand,513,445,804,656 -PUZZLE_LIVINGROOM_T_B_frame_2567_jpg.rf.ac1a95aa6ce74873aad9d40966b0ada3.jpg,720,1280,left_hand,10,363,299,716 -CHESS_LIVINGROOM_T_H_frame_0299_jpg.rf.4d1425818b0acef1eaf23dbcd69eadf2.jpg,720,1280,left_hand,1,250,169,583 -CHESS_LIVINGROOM_T_H_frame_2038_jpg.rf.17254f802e70461b4d737c3ee7c460cc.jpg,720,1280,right_hand,717,407,1189,719 -CARDS_LIVINGROOM_H_S_frame_1334_jpg.rf.7f9d8e082688460fedaf9465cab96576.jpg,720,1280,right_hand,731,690,797,718 -CARDS_OFFICE_H_T_frame_0793_jpg.rf.63cf2235e40bfc1c0ed4fb0679f8c054.jpg,720,1280,left_hand,266,631,404,718 -CHESS_OFFICE_T_H_frame_1515_jpg.rf.ceecb7b35cff77057fbb0e5438f439b2.jpg,720,1280,right_hand,422,607,634,717 -CARDS_COURTYARD_T_B_frame_1937_jpg.rf.3f4bc3fc921f99899b63c991747099a3.jpg,720,1280,left_hand,158,572,492,718 -JENGA_OFFICE_B_S_frame_0812_jpg.rf.3f61627fa4d7ec72f269cf565f0c2ee9.jpg,720,1280,right_hand,658,440,942,716 -CHESS_LIVINGROOM_S_B_frame_2451_jpg.rf.aba69ecf60d472337d83a53db817c608.jpg,720,1280,left_hand,1,376,114,586 -PUZZLE_OFFICE_B_H_frame_1348_jpg.rf.e31f787321eaa516879e158aef88fc17.jpg,720,1280,right_hand,1033,487,1278,712 -CHESS_COURTYARD_T_B_frame_1226_jpg.rf.088615ed7f8447e5da3d7d85191561c0.jpg,720,1280,right_hand,488,705,583,716 -PUZZLE_OFFICE_B_H_frame_0763_jpg.rf.41066af1b8cb4e369f9ce08fefb1fa81.jpg,720,1280,right_hand,653,482,1084,716 -CHESS_OFFICE_B_S_frame_1915_jpg.rf.183287b91827bc6d3de8a4dedc2adade.jpg,720,1280,right_hand,643,675,852,718 -PUZZLE_COURTYARD_H_T_frame_0343_jpg.rf.f43dc4980628b384ea345a54f9d4afeb.jpg,720,1280,right_hand,812,507,1019,700 -CARDS_OFFICE_B_S_frame_2195_jpg.rf.ea4926d641a811dd7aee864805226034.jpg,720,1280,left_hand,284,639,501,718 -CARDS_OFFICE_B_S_frame_0917_jpg.rf.4b735c23eef0332974e5159142ea13cc.jpg,720,1280,left_hand,381,689,440,718 -CARDS_LIVINGROOM_S_H_frame_1748_jpg.rf.b9565a81ffa138b73b082938d875035b.jpg,720,1280,right_hand,539,542,811,718 -CHESS_OFFICE_T_H_frame_1282_jpg.rf.6a1f1fcbd3c908e29bafd7194e585152.jpg,720,1280,left_hand,44,592,321,716 -CHESS_COURTYARD_B_T_frame_0807_jpg.rf.3f8eefcfc082f5216c6bf638623ed31d.jpg,720,1280,left_hand,278,648,455,718 -CHESS_OFFICE_B_S_frame_1533_jpg.rf.2caeef063871513598891db8d9bda1cc.jpg,720,1280,right_hand,688,644,1079,712 -CARDS_OFFICE_H_T_frame_0021_jpg.rf.a0e78ca22b6d16876361c01f09c08782.jpg,720,1280,right_hand,600,570,928,713 -CARDS_LIVINGROOM_S_H_frame_0921_jpg.rf.ee54e63def886d0ae318bb76ece4a4ac.jpg,720,1280,right_hand,609,676,700,718 -CHESS_LIVINGROOM_T_H_frame_0491_jpg.rf.e0dada95f856c3f1c8c1831745f49899.jpg,720,1280,right_hand,421,656,749,719 -CARDS_OFFICE_T_H_frame_1108_jpg.rf.3a068fe93f16a567e6d2ee49f36f432f.jpg,720,1280,right_hand,666,499,963,719 -CHESS_COURTYARD_H_S_frame_2345_jpg.rf.f2f65103c3a065a609b1399f647f4501.jpg,720,1280,right_hand,845,457,1120,709 -CARDS_OFFICE_H_T_frame_0283_jpg.rf.0a7d7b6d05199ac5579e279809c17d97.jpg,720,1280,left_hand,249,669,308,718 -CHESS_LIVINGROOM_H_T_frame_1510_jpg.rf.c9a44ba6c1875f894440af06d15017b2.jpg,720,1280,left_hand,5,665,221,718 -CARDS_OFFICE_T_H_frame_2113_jpg.rf.e28cf1a1de16418e3b207b754112c7dd.jpg,720,1280,right_hand,582,359,1035,673 -PUZZLE_OFFICE_S_T_frame_2585_jpg.rf.2048cf6c273e2356e46df50c746db01a.jpg,720,1280,right_hand,583,532,878,717 -CARDS_OFFICE_H_T_frame_0021_jpg.rf.a0e78ca22b6d16876361c01f09c08782.jpg,720,1280,left_hand,139,602,279,718 -JENGA_COURTYARD_T_S_frame_2432_jpg.rf.2a487109d7ad2cd699b844787eb7379c.jpg,720,1280,right_hand,414,320,775,714 -CHESS_LIVINGROOM_S_B_frame_1215_jpg.rf.42d75ccdfb2647c92e9f821478d124c8.jpg,720,1280,left_hand,1,548,101,718 -JENGA_LIVINGROOM_H_B_frame_1661_jpg.rf.3736ef5025038518d33705b3c67e744f.jpg,720,1280,left_hand,167,664,389,714 -CARDS_LIVINGROOM_B_T_frame_0747_jpg.rf.fcde5d8a70587b5d4ad916439de7d226.jpg,720,1280,right_hand,675,682,821,718 -JENGA_LIVINGROOM_H_B_frame_0642_jpg.rf.d0abb3d84cbedc03304fb0690329182d.jpg,720,1280,right_hand,575,383,893,689 -JENGA_OFFICE_H_T_frame_1822_jpg.rf.7924c9530c21415c02ad088ea47fb637.jpg,720,1280,left_hand,215,445,406,705 -PUZZLE_LIVINGROOM_T_B_frame_1115_jpg.rf.e1ae5bdc8b7a65b107f8e1fccfecdaf5.jpg,720,1280,left_hand,5,413,304,718 -CHESS_LIVINGROOM_T_H_frame_0082_jpg.rf.b47efe9ad1a171292540aeba84392c9c.jpg,720,1280,right_hand,716,385,1075,702 -JENGA_OFFICE_T_H_frame_2414_jpg.rf.bbecdaf50ee908c93c2c85875d87880b.jpg,720,1280,left_hand,198,193,435,368 -PUZZLE_COURTYARD_T_H_frame_1037_jpg.rf.901cae60ef6118e92232dbdf8f14a09e.jpg,720,1280,right_hand,410,260,857,568 -JENGA_LIVINGROOM_T_S_frame_1273_jpg.rf.de4b947a1a00821299a252dec321fa7d.jpg,720,1280,left_hand,79,513,417,719 -JENGA_COURTYARD_B_H_frame_1838_jpg.rf.19ee8bb448808c94d413d3bb97009dcc.jpg,720,1280,left_hand,309,633,540,719 -CARDS_LIVINGROOM_T_B_frame_0140_jpg.rf.d697ba18c7c297db8b1d84552f367c0c.jpg,720,1280,left_hand,4,526,392,717 -CHESS_COURTYARD_T_B_frame_0546_jpg.rf.d2b21887e1eac3ea55c8cf9502bac552.jpg,720,1280,right_hand,390,689,466,718 -JENGA_OFFICE_H_T_frame_1203_jpg.rf.07ba0f80d84e4b8c700d57a711d11e38.jpg,720,1280,right_hand,795,646,978,713 -CARDS_OFFICE_B_S_frame_1332_jpg.rf.c9c7b0893513f8c6fe617b47eb45133f.jpg,720,1280,right_hand,719,609,910,717 -PUZZLE_LIVINGROOM_H_S_frame_2327_jpg.rf.cc26f078533aede43ccefd205d2e748d.jpg,720,1280,right_hand,524,587,803,713 -JENGA_COURTYARD_H_B_frame_0757_jpg.rf.8defd9ed09659d1c0d541336ed39c965.jpg,720,1280,right_hand,601,330,878,714 -CARDS_COURTYARD_H_S_frame_0682_jpg.rf.a5b19182cd9121278ae5fa0c40107e73.jpg,720,1280,left_hand,259,598,510,719 -CARDS_COURTYARD_B_T_frame_1051_jpg.rf.2667da0e6b59ae2bffa63710591c7d98.jpg,720,1280,right_hand,759,560,989,718 -PUZZLE_OFFICE_H_B_frame_1079_jpg.rf.997fa4b6ac6abac1a919ad272b9ff913.jpg,720,1280,right_hand,733,594,991,717 -CARDS_OFFICE_S_B_frame_0213_jpg.rf.9b72cd1f1cef639ed9637ac4784a1e63.jpg,720,1280,left_hand,238,680,419,718 -JENGA_LIVINGROOM_H_B_frame_1768_jpg.rf.bbd394ede417cdf3da90264227647298.jpg,720,1280,right_hand,820,431,1100,716 -CHESS_COURTYARD_T_B_frame_1039_jpg.rf.5503a4fe01b3c3aa944420a9194fb5d8.jpg,720,1280,left_hand,6,597,303,718 -JENGA_OFFICE_H_T_frame_1805_jpg.rf.030400d6f2038fb34944e181973544f8.jpg,720,1280,left_hand,290,367,414,704 -JENGA_OFFICE_H_T_frame_1673_jpg.rf.e113718da58d65a2c39f74b5a97959ff.jpg,720,1280,right_hand,633,225,768,606 -CHESS_OFFICE_S_B_frame_2440_jpg.rf.5f48d3d48f33f850c45f5ef856d46ae5.jpg,720,1280,right_hand,672,613,912,719 -CHESS_OFFICE_S_B_frame_0708_jpg.rf.c5a11bcc1b30a301801da7dcf68206d7.jpg,720,1280,right_hand,651,509,1075,719 -CHESS_LIVINGROOM_S_B_frame_2459_jpg.rf.9671c9be802908b2f6eb476b3a080a58.jpg,720,1280,right_hand,819,504,1108,718 -PUZZLE_LIVINGROOM_B_T_frame_2329_jpg.rf.150bc66f993294f7fcc4c0a4d1d84130.jpg,720,1280,right_hand,577,633,995,718 -PUZZLE_COURTYARD_H_T_frame_1832_jpg.rf.7a7a17f3b149bfb54fd58da758186541.jpg,720,1280,left_hand,236,367,507,665 -CARDS_LIVINGROOM_B_T_frame_2292_jpg.rf.1e580517a29cd49395077a9abcc2d5a3.jpg,720,1280,left_hand,164,665,249,718 -JENGA_COURTYARD_T_S_frame_0693_jpg.rf.7d214efc505018aa8e27c4940fb7cd7c.jpg,720,1280,left_hand,18,416,393,709 -JENGA_OFFICE_H_T_frame_0425_jpg.rf.9b802ab9b0d66fdb39639000dc00d31f.jpg,720,1280,left_hand,448,710,522,719 -JENGA_OFFICE_B_S_frame_1704_jpg.rf.1e68ce461e0539ce74b435b476960e77.jpg,720,1280,right_hand,439,507,770,718 -PUZZLE_OFFICE_B_H_frame_1941_jpg.rf.89c2aa9376ea2036d608b89fddf6e028.jpg,720,1280,right_hand,601,656,825,716 -JENGA_COURTYARD_S_T_frame_0582_jpg.rf.3c1f985f1289a80024281c7ae4034cbc.jpg,720,1280,left_hand,175,271,560,510 -PUZZLE_OFFICE_T_S_frame_2274_jpg.rf.b34edb9101e97f74b019cb3f4698dbe7.jpg,720,1280,left_hand,127,393,391,624 -PUZZLE_COURTYARD_S_B_frame_1244_jpg.rf.ff6e7106a0890dc557f16169ca3ce4d0.jpg,720,1280,left_hand,1,450,331,718 -PUZZLE_OFFICE_T_S_frame_1830_jpg.rf.0e04695ff54853f329e46f63ef97b75f.jpg,720,1280,left_hand,108,477,436,719 -PUZZLE_COURTYARD_S_B_frame_1108_jpg.rf.38ee68d55547632f9f086103dd67de01.jpg,720,1280,left_hand,175,412,493,665 -PUZZLE_COURTYARD_T_H_frame_1499_jpg.rf.49b9626a210183fe11def784006595c2.jpg,720,1280,left_hand,7,667,225,718 -PUZZLE_OFFICE_T_S_frame_0696_jpg.rf.5a7f8345b183a61ae35308c2bd47b834.jpg,720,1280,right_hand,503,340,836,698 -JENGA_COURTYARD_B_H_frame_1291_jpg.rf.a1d458d94684fa13c7bf9fea81a9236b.jpg,720,1280,right_hand,656,323,934,691 -PUZZLE_OFFICE_B_H_frame_0859_jpg.rf.044abdd8ea095b4bf3c6b6a47721e39c.jpg,720,1280,left_hand,120,561,525,717 -CHESS_LIVINGROOM_H_T_frame_1395_jpg.rf.69c0b113f5c3cb1972129f8b975d15ad.jpg,720,1280,right_hand,450,411,783,676 -JENGA_LIVINGROOM_S_T_frame_1145_jpg.rf.83e5b2c5f2d122307de7f6ee7376d1c8.jpg,720,1280,right_hand,709,699,762,718 -PUZZLE_LIVINGROOM_S_H_frame_0537_jpg.rf.52f8e2f2c6cf34900d9e7b37429ebbf8.jpg,720,1280,right_hand,677,570,997,718 -JENGA_OFFICE_B_S_frame_1951_jpg.rf.c8704d53a6f867ccda3092ce97b1a531.jpg,720,1280,right_hand,635,37,1051,526 -JENGA_OFFICE_T_H_frame_2456_jpg.rf.4d46d707249f0b79f39de4319e273b79.jpg,720,1280,left_hand,125,657,296,714 -PUZZLE_COURTYARD_B_S_frame_1061_jpg.rf.1e42d0fbad8724c3ebe0b3ec1dde3554.jpg,720,1280,right_hand,712,473,1279,716 -PUZZLE_OFFICE_B_H_frame_0502_jpg.rf.4a678544ca4a54045b70bc1f2e581611.jpg,720,1280,right_hand,845,575,1122,718 -PUZZLE_COURTYARD_H_T_frame_1233_jpg.rf.25cc4cbeddd59b9323fa8efe3346749d.jpg,720,1280,left_hand,269,499,481,709 -PUZZLE_LIVINGROOM_H_S_frame_0102_jpg.rf.8a72105d1b062def2845a58f134b49e3.jpg,720,1280,right_hand,592,620,870,719 -CARDS_OFFICE_T_H_frame_0372_jpg.rf.2831b1e85121589b149395ff558ea01d.jpg,720,1280,right_hand,501,558,753,719 -PUZZLE_COURTYARD_B_S_frame_2347_jpg.rf.3cd44824d43100c3db297a66f6b7b1ec.jpg,720,1280,left_hand,513,599,787,719 -JENGA_COURTYARD_B_H_frame_1527_jpg.rf.4e8c1829cb1d9609c1066815b37df818.jpg,720,1280,left_hand,444,697,522,718 -CARDS_COURTYARD_T_B_frame_1239_jpg.rf.ccba14e269086a71fdcda9657baac751.jpg,720,1280,left_hand,253,606,486,718 -PUZZLE_OFFICE_S_T_frame_1077_jpg.rf.40499f7b872fe4c2d72f329a1f4e2eda.jpg,720,1280,left_hand,191,691,294,718 -PUZZLE_OFFICE_T_S_frame_2683_jpg.rf.065a0dc68e9ca094bf95320ea9bad5cd.jpg,720,1280,left_hand,251,238,429,349 -CHESS_LIVINGROOM_T_H_frame_0436_jpg.rf.5348dcda498ae06d97166e2642bdad7a.jpg,720,1280,right_hand,520,642,895,719 -JENGA_LIVINGROOM_B_H_frame_2601_jpg.rf.034871f938929122058b64cb265d3052.jpg,720,1280,left_hand,423,265,714,468 -JENGA_LIVINGROOM_T_S_frame_0900_jpg.rf.1d9d1b71ddae119afdb1bb2ba5e71273.jpg,720,1280,left_hand,32,683,219,713 -CARDS_OFFICE_H_T_frame_0996_jpg.rf.05631e679865858f9f4e0c043e830a8c.jpg,720,1280,right_hand,705,260,1001,542 -PUZZLE_OFFICE_B_H_frame_0859_jpg.rf.044abdd8ea095b4bf3c6b6a47721e39c.jpg,720,1280,right_hand,636,525,1177,716 -CHESS_LIVINGROOM_T_H_frame_2387_jpg.rf.5bd25dd5d73cc94ed50fbe622a3bc73b.jpg,720,1280,left_hand,1,349,63,567 -JENGA_LIVINGROOM_B_H_frame_0701_jpg.rf.89da350e442c828dc42ae999f18b1e9e.jpg,720,1280,left_hand,14,564,372,717 -CARDS_OFFICE_B_S_frame_1063_jpg.rf.dfd748964276f87f6fb850e35e892630.jpg,720,1280,left_hand,352,598,515,718 -PUZZLE_OFFICE_S_T_frame_0767_jpg.rf.a86a82b04129fc2dce7025564d872788.jpg,720,1280,left_hand,551,658,734,716 -JENGA_LIVINGROOM_B_H_frame_2231_jpg.rf.d10154073beb77ece149109db1ff6d35.jpg,720,1280,right_hand,845,694,966,719 -CARDS_OFFICE_B_S_frame_0917_jpg.rf.4b735c23eef0332974e5159142ea13cc.jpg,720,1280,right_hand,588,636,807,718 -JENGA_COURTYARD_S_T_frame_1409_jpg.rf.dee6ee013246b5214c0fdf7d180e6514.jpg,720,1280,right_hand,532,685,580,718 -JENGA_COURTYARD_B_H_frame_0921_jpg.rf.8b9fbab76620742145afb1b691b000cd.jpg,720,1280,right_hand,670,425,920,719 -CHESS_LIVINGROOM_S_B_frame_2234_jpg.rf.0d547085aa4cb4e6c2f4070070915408.jpg,720,1280,left_hand,254,648,381,716 -CHESS_LIVINGROOM_H_T_frame_2246_jpg.rf.a477755ee59bca3a131aa786234f558c.jpg,720,1280,right_hand,1063,277,1279,606 -CARDS_COURTYARD_S_H_frame_2680_jpg.rf.645151434ce99940a22116404319cf8b.jpg,720,1280,left_hand,363,688,421,718 -PUZZLE_OFFICE_T_S_frame_1628_jpg.rf.cbc86260b560a6d6c815be10f5dfc89d.jpg,720,1280,left_hand,11,481,433,715 -CARDS_LIVINGROOM_S_H_frame_1100_jpg.rf.26e07d5e447e01c8b634a54227d5f66e.jpg,720,1280,left_hand,356,548,598,718 -CARDS_OFFICE_B_S_frame_2202_jpg.rf.b2626a02161299c2349b9855da994a4c.jpg,720,1280,right_hand,547,642,798,718 -CHESS_OFFICE_T_H_frame_2431_jpg.rf.589d733e135edc753a90f01e2ce33300.jpg,720,1280,right_hand,435,655,639,713 -PUZZLE_COURTYARD_B_S_frame_1788_jpg.rf.16c63343c7bc9bcac286bdce9670007c.jpg,720,1280,left_hand,230,573,474,719 -PUZZLE_LIVINGROOM_T_B_frame_0864_jpg.rf.edb96fcd6dc2083e624175b1b623267d.jpg,720,1280,right_hand,604,436,1015,714 -JENGA_LIVINGROOM_T_S_frame_0575_jpg.rf.3b1a04b5b0578a569b4ba7683f92073f.jpg,720,1280,left_hand,9,361,435,718 -CARDS_COURTYARD_T_B_frame_0760_jpg.rf.34749e9b35b69b3b65c11e23f2ca1826.jpg,720,1280,right_hand,528,431,901,717 -PUZZLE_COURTYARD_B_S_frame_0264_jpg.rf.392727285d7eb57539dc5be0a71a7805.jpg,720,1280,right_hand,694,513,983,719 -CHESS_LIVINGROOM_H_T_frame_1770_jpg.rf.e1d850d4212da8a01c871f0ff275c804.jpg,720,1280,right_hand,626,377,957,640 -CHESS_COURTYARD_H_S_frame_1624_jpg.rf.829a7469768b8f1f09759782d6c41e55.jpg,720,1280,right_hand,862,395,1039,563 -CARDS_LIVINGROOM_S_H_frame_1721_jpg.rf.3606797c39595a677d5981cee3a6640b.jpg,720,1280,left_hand,228,487,539,699 -PUZZLE_COURTYARD_S_B_frame_0050_jpg.rf.c908999e7bf910d2f0fa01bdb882de0d.jpg,720,1280,right_hand,596,664,783,718 -PUZZLE_OFFICE_H_B_frame_0926_jpg.rf.da2b2dd046302754de99ac8c37e05b3b.jpg,720,1280,right_hand,1010,699,1145,719 -CHESS_LIVINGROOM_H_T_frame_1174_jpg.rf.078877745b147b5fb4e47c61f55525b6.jpg,720,1280,left_hand,1,549,249,716 -PUZZLE_LIVINGROOM_B_T_frame_1025_jpg.rf.87ccb50137b38525d1af02e115ce65db.jpg,720,1280,left_hand,7,525,330,700 -PUZZLE_COURTYARD_B_S_frame_2616_jpg.rf.3986771c9028392b5ab930ee89e60785.jpg,720,1280,right_hand,880,699,1008,719 -JENGA_COURTYARD_T_S_frame_0356_jpg.rf.434109a7780804e48c55cc4b03a556f9.jpg,720,1280,left_hand,106,479,449,714 -CARDS_LIVINGROOM_T_B_frame_0797_jpg.rf.77d8ab22efd8eb5b53b65cf50eb76d29.jpg,720,1280,right_hand,648,508,1056,719 -PUZZLE_OFFICE_B_H_frame_1332_jpg.rf.b87ae04d020c2df83d6f080831a55e5c.jpg,720,1280,left_hand,82,522,456,719 -CARDS_OFFICE_H_T_frame_0351_jpg.rf.55e771c8dac89fdb98a13e6392de6505.jpg,720,1280,left_hand,313,602,449,719 -PUZZLE_LIVINGROOM_T_B_frame_0598_jpg.rf.f298b42d99aa676f4607bfb91555db05.jpg,720,1280,left_hand,1,527,336,716 -CARDS_COURTYARD_B_T_frame_1262_jpg.rf.0ba50aec2e53881e41a1828cb0484aef.jpg,720,1280,right_hand,729,689,775,717 -CARDS_LIVINGROOM_T_B_frame_1076_jpg.rf.91c165b35c340eedbaddf436e010e28d.jpg,720,1280,right_hand,444,506,897,719 -PUZZLE_COURTYARD_T_H_frame_1953_jpg.rf.ecb1af0b398665299a9587c48232fbec.jpg,720,1280,right_hand,409,263,851,619 -PUZZLE_COURTYARD_B_S_frame_1477_jpg.rf.1c88550fae8e16a8e4e990e67c8c3bb0.jpg,720,1280,right_hand,394,631,689,719 -CHESS_LIVINGROOM_T_H_frame_2648_jpg.rf.0e41b2d951e54dd77d4160b201a85a4f.jpg,720,1280,right_hand,545,378,968,719 -PUZZLE_LIVINGROOM_T_B_frame_2324_jpg.rf.785efb2594c99cb691f9997bbe11fd1b.jpg,720,1280,left_hand,5,629,168,718 -JENGA_OFFICE_S_B_frame_1780_jpg.rf.c40098872318b03664f010c2cc88c696.jpg,720,1280,right_hand,689,153,1005,533 -JENGA_COURTYARD_T_S_frame_1010_jpg.rf.a8f1f0d8b8a262b17024e39d40ced213.jpg,720,1280,right_hand,588,453,931,718 -CHESS_LIVINGROOM_H_T_frame_2534_jpg.rf.b9cbc3da7ddbe5d212d6abeaec7f2464.jpg,720,1280,left_hand,77,697,207,718 -CHESS_LIVINGROOM_S_B_frame_0164_jpg.rf.7459443eb3a099047ecc8cfe5ba3b873.jpg,720,1280,right_hand,597,600,1009,717 -JENGA_COURTYARD_H_B_frame_1961_jpg.rf.dc93322594f45bd61af7a7037f980124.jpg,720,1280,right_hand,751,186,1101,538 -CARDS_OFFICE_T_H_frame_0935_jpg.rf.1c6b1eb655584ed1feed0ca9aa332cd4.jpg,720,1280,right_hand,476,556,745,719 -CHESS_COURTYARD_T_B_frame_2440_jpg.rf.a59d236dc0fccf00611d00f9194f0cbc.jpg,720,1280,left_hand,35,658,272,718 -JENGA_COURTYARD_S_T_frame_0810_jpg.rf.09ca1f050b03297a13ade92c24782eb7.jpg,720,1280,right_hand,660,665,800,718 -PUZZLE_COURTYARD_H_T_frame_2094_jpg.rf.1f3b6089aa49d965e7023ee6998e42a5.jpg,720,1280,right_hand,686,547,919,717 -PUZZLE_OFFICE_H_B_frame_1975_jpg.rf.fe68b055c43e6e09fa29c16b731c6d23.jpg,720,1280,right_hand,643,529,893,719 -CARDS_LIVINGROOM_T_B_frame_2076_jpg.rf.bea609fcf0e043d9cba206c36045e6c4.jpg,720,1280,right_hand,414,613,689,719 -CARDS_COURTYARD_B_T_frame_1262_jpg.rf.0ba50aec2e53881e41a1828cb0484aef.jpg,720,1280,right_hand,729,689,775,717 -JENGA_LIVINGROOM_T_S_frame_0549_jpg.rf.cc42a58700f0d28da51a083d27d1f215.jpg,720,1280,left_hand,60,406,374,676 -JENGA_COURTYARD_S_T_frame_0809_jpg.rf.13eaed9b45ad6fd8382f6c635e550782.jpg,720,1280,right_hand,647,662,788,718 -CARDS_COURTYARD_H_S_frame_2533_jpg.rf.8040bab8b7655dc8f6327c892f11294b.jpg,720,1280,left_hand,184,590,447,719 -JENGA_COURTYARD_H_B_frame_0668_jpg.rf.6c373b2726439a2bfe0033b09c8cf45c.jpg,720,1280,right_hand,741,405,955,718 -CARDS_LIVINGROOM_T_B_frame_2281_jpg.rf.ed10d0cf38bc00c33f4c5d869316baa8.jpg,720,1280,right_hand,667,691,768,719 -CARDS_COURTYARD_T_B_frame_0823_jpg.rf.686b8060ce4d0f3669d734d31c76e791.jpg,720,1280,left_hand,137,565,474,718 -CARDS_LIVINGROOM_B_T_frame_2405_jpg.rf.523d1b108b64c83f7463d809aad6666e.jpg,720,1280,right_hand,652,608,838,718 -CARDS_OFFICE_T_H_frame_1446_jpg.rf.2021032f95b10dbf7c082d010f994c98.jpg,720,1280,left_hand,310,675,366,719 -CHESS_OFFICE_B_S_frame_2066_jpg.rf.d113381601385d8b51c380ca31655246.jpg,720,1280,right_hand,667,396,924,570 -CHESS_LIVINGROOM_T_H_frame_2308_jpg.rf.708c4b2c5f8eb820fce9782157909664.jpg,720,1280,right_hand,392,201,746,469 -CARDS_LIVINGROOM_H_S_frame_1295_jpg.rf.8dcb261a7bbcec44a3a5161cfd741fe0.jpg,720,1280,right_hand,695,676,933,719 -PUZZLE_LIVINGROOM_T_B_frame_0550_jpg.rf.4f62642e7d4d432edd43a2a759fe7118.jpg,720,1280,right_hand,588,151,1118,545 -CARDS_COURTYARD_S_H_frame_1803_jpg.rf.c61a5387e67c83590339e664f20f8e85.jpg,720,1280,right_hand,605,663,785,718 -CARDS_OFFICE_T_H_frame_1034_jpg.rf.05ec46624b3677de512be8277d1abb44.jpg,720,1280,left_hand,228,649,319,719 -CHESS_LIVINGROOM_H_T_frame_1395_jpg.rf.69c0b113f5c3cb1972129f8b975d15ad.jpg,720,1280,right_hand,450,411,783,676 -JENGA_OFFICE_S_B_frame_1247_jpg.rf.b7d1cf6c0eb627473f86f014178bcdc3.jpg,720,1280,right_hand,490,467,821,712 -CHESS_COURTYARD_B_T_frame_2603_jpg.rf.ed8ce51dfde80950f739150632f175d6.jpg,720,1280,right_hand,1046,691,1204,717 -JENGA_LIVINGROOM_B_H_frame_1351_jpg.rf.69164e8711fe822720a79c871cc80aea.jpg,720,1280,left_hand,5,567,387,716 -CARDS_OFFICE_T_H_frame_2161_jpg.rf.c9cdf8ef9de31c074fcd2e64cf7681c5.jpg,720,1280,left_hand,198,607,325,719 -CHESS_COURTYARD_T_B_frame_1231_jpg.rf.3a7e2599f6b34f7040abd282d0adc8f1.jpg,720,1280,right_hand,426,668,619,719 -CHESS_LIVINGROOM_T_H_frame_2004_jpg.rf.893e3091a373f99569ddcb831e1b6d78.jpg,720,1280,right_hand,713,487,1133,718 -JENGA_COURTYARD_B_H_frame_1870_jpg.rf.8fe6a7be0d9c424147405940ff4dd1ff.jpg,720,1280,left_hand,95,201,584,622 -PUZZLE_OFFICE_T_S_frame_0543_jpg.rf.11389518d90cbf323d14a4459ef345e0.jpg,720,1280,left_hand,70,289,525,628 -JENGA_COURTYARD_S_T_frame_2138_jpg.rf.687060989a7257b520cc53364694ea27.jpg,720,1280,right_hand,540,584,893,718 -CARDS_LIVINGROOM_T_B_frame_1876_jpg.rf.44103bec2c34fa01d76e9c197af7928a.jpg,720,1280,left_hand,11,632,85,712 -JENGA_COURTYARD_H_B_frame_2547_jpg.rf.4682d305e133432ca29c468618ac9e22.jpg,720,1280,left_hand,270,702,389,718 -JENGA_COURTYARD_B_H_frame_2462_jpg.rf.f55f83578d39e538377851ae287015bc.jpg,720,1280,right_hand,793,694,892,718 -CHESS_COURTYARD_S_H_frame_0575_jpg.rf.b9c08795719aeb27ace5e483827e803d.jpg,720,1280,right_hand,576,581,1027,719 -CARDS_OFFICE_B_S_frame_1033_jpg.rf.3bd347602f86b0e9f9f43e9f513458a1.jpg,720,1280,right_hand,671,644,784,719 -JENGA_LIVINGROOM_S_T_frame_0847_jpg.rf.c965d0b1d3f93849786676af36c5ea91.jpg,720,1280,left_hand,156,678,380,718 -CARDS_COURTYARD_S_H_frame_1815_jpg.rf.b1d26be544d7bd3cea62e4509bf89441.jpg,720,1280,right_hand,635,655,832,718 -CARDS_COURTYARD_H_S_frame_2650_jpg.rf.79e2b4e7546b8cc8ed5d26ed373b8304.jpg,720,1280,right_hand,703,364,937,623 -CHESS_OFFICE_S_B_frame_0499_jpg.rf.d642562ca9825a7e3b3afbcd0e4da849.jpg,720,1280,right_hand,610,487,1037,719 -JENGA_COURTYARD_B_H_frame_2652_jpg.rf.a25d4401903d2f4a6f69513246036ba5.jpg,720,1280,right_hand,678,110,1110,342 -JENGA_OFFICE_T_H_frame_1511_jpg.rf.31fad3e56eec786851815ba875106051.jpg,720,1280,right_hand,612,178,719,438 -CARDS_OFFICE_B_S_frame_0907_jpg.rf.ae34cbdaf8219903cab5674955f68518.jpg,720,1280,right_hand,722,574,883,714 -PUZZLE_COURTYARD_S_B_frame_1197_jpg.rf.97573d8b600436f60ec21f7692315042.jpg,720,1280,left_hand,3,435,418,716 -PUZZLE_OFFICE_H_B_frame_2381_jpg.rf.3aed51aa3f366f3c437c1584762ab742.jpg,720,1280,right_hand,533,549,735,714 -JENGA_LIVINGROOM_B_H_frame_2240_jpg.rf.49553489e94d941b310b862f0d17e83b.jpg,720,1280,right_hand,844,692,977,719 -PUZZLE_COURTYARD_T_H_frame_1153_jpg.rf.a792627f365a6b385521244b91eb32af.jpg,720,1280,left_hand,118,667,383,718 -PUZZLE_LIVINGROOM_T_B_frame_0651_jpg.rf.f2b190207f2276e5410f98425e6d817d.jpg,720,1280,left_hand,1,611,86,716 -PUZZLE_LIVINGROOM_B_T_frame_1434_jpg.rf.ed5788af312a4625657c9eb0baa0f089.jpg,720,1280,left_hand,5,571,207,714 -JENGA_OFFICE_B_S_frame_0354_jpg.rf.a992d976c1e9fa09f9fdd32aafadf82d.jpg,720,1280,left_hand,304,606,589,717 -JENGA_COURTYARD_B_H_frame_1921_jpg.rf.559fa8faf98936b3f11200217b981e47.jpg,720,1280,right_hand,801,344,1279,718 -CARDS_LIVINGROOM_H_S_frame_2465_jpg.rf.e9dfa4656c6a7771733d8fca878af484.jpg,720,1280,right_hand,712,469,1093,719 -JENGA_COURTYARD_B_H_frame_1379_jpg.rf.8ad42a28d11563be99eb8eac8995374f.jpg,720,1280,left_hand,380,676,524,719 -PUZZLE_LIVINGROOM_B_T_frame_0671_jpg.rf.854400c1deb160ba9d90e131f66755b4.jpg,720,1280,right_hand,873,386,1277,714 -CHESS_OFFICE_H_T_frame_1998_jpg.rf.89608e233403a20458650cb3d97b55eb.jpg,720,1280,right_hand,628,462,1002,714 -PUZZLE_LIVINGROOM_B_T_frame_1230_jpg.rf.237d4d928a0311988f4b0297e3bd6d19.jpg,720,1280,left_hand,3,614,95,712 -CHESS_COURTYARD_B_T_frame_0813_jpg.rf.3258210e513db999b17db561d5559f29.jpg,720,1280,left_hand,253,644,477,718 -JENGA_LIVINGROOM_S_T_frame_0806_jpg.rf.29ff71c5aa4c2e35c1a155d208e3aae8.jpg,720,1280,left_hand,88,519,472,718 -PUZZLE_OFFICE_H_B_frame_0384_jpg.rf.909525a33c1eaa82cecbf8c843f0a52d.jpg,720,1280,right_hand,811,708,875,718 -CHESS_COURTYARD_T_B_frame_1617_jpg.rf.a23882e7716fa3e17584352d2011bd06.jpg,720,1280,right_hand,430,693,573,718 -CARDS_LIVINGROOM_S_H_frame_2107_jpg.rf.d6221dcd4fd2775870f592d3b3e6974d.jpg,720,1280,right_hand,565,629,849,718 -CHESS_LIVINGROOM_T_H_frame_1245_jpg.rf.bc22c56b91e576531aa266bc0f005167.jpg,720,1280,right_hand,552,130,880,368 -JENGA_OFFICE_S_B_frame_2351_jpg.rf.d246a9d0b7bbe4e416ac6486e29d2589.jpg,720,1280,right_hand,572,443,809,707 -CHESS_COURTYARD_T_B_frame_2656_jpg.rf.b1abe262df35652735a33465fa7433d2.jpg,720,1280,right_hand,278,660,523,717 -CHESS_COURTYARD_T_B_frame_1345_jpg.rf.4c2f99794f1acd0a930364268fb10fa5.jpg,720,1280,left_hand,59,647,307,716 -CARDS_COURTYARD_H_S_frame_2176_jpg.rf.983c63a454cb0338d6dba01b48a4d0a8.jpg,720,1280,right_hand,536,336,909,570 -PUZZLE_OFFICE_T_S_frame_2194_jpg.rf.685a65f06c20dbb395cfc21563c4223e.jpg,720,1280,right_hand,592,431,771,651 -CHESS_LIVINGROOM_H_T_frame_1907_jpg.rf.0a95f44a16c459bdc97edd3050cabd4d.jpg,720,1280,left_hand,1,599,211,718 -PUZZLE_OFFICE_T_S_frame_0241_jpg.rf.b61293c00d6c97012ffa15e0655059b3.jpg,720,1280,left_hand,95,418,474,715 -PUZZLE_LIVINGROOM_B_T_frame_1527_jpg.rf.3d386e80fcfdb0f2ad39561550950b69.jpg,720,1280,right_hand,595,609,1125,719 -JENGA_LIVINGROOM_S_T_frame_2500_jpg.rf.8e5f8c4c8df22e97c8df6cd4fd5e8d01.jpg,720,1280,right_hand,355,137,974,652 -CARDS_OFFICE_T_H_frame_1442_jpg.rf.8db6ac7e941d1fef099ef25a5e6195a1.jpg,720,1280,right_hand,599,588,772,719 -CARDS_LIVINGROOM_S_H_frame_2107_jpg.rf.d6221dcd4fd2775870f592d3b3e6974d.jpg,720,1280,left_hand,296,684,404,718 -PUZZLE_COURTYARD_T_H_frame_0589_jpg.rf.fd3bb25fce868410cc4c09bcf15d45c2.jpg,720,1280,right_hand,508,540,929,718 -PUZZLE_LIVINGROOM_B_T_frame_2650_jpg.rf.6b72a8ac3c607fd3e589c58a278b09f4.jpg,720,1280,right_hand,724,462,1164,716 -CHESS_OFFICE_B_S_frame_1477_jpg.rf.112b189cd987d618e321c8b20605bb9d.jpg,720,1280,right_hand,620,667,850,718 -PUZZLE_OFFICE_S_T_frame_1246_jpg.rf.67e3a831464cc4f9f4c4682ca46d6bf2.jpg,720,1280,right_hand,605,698,683,716 -JENGA_OFFICE_H_T_frame_1708_jpg.rf.45c679f54fb8b0a0f3fa37528bfbbf61.jpg,720,1280,left_hand,422,288,584,638 diff --git a/aibox/old/hands_fp_raw.csv b/aibox/old/hands_fp_raw.csv deleted file mode 100644 index 7fea791c..00000000 --- a/aibox/old/hands_fp_raw.csv +++ /dev/null @@ -1,5373 +0,0 @@ -filename,height,width,class,xmin,ymin,xmax,ymax -CHESS_COURTYARD_H_S_frame_0671_jpg.rf.2d2a5270f2b73c1fb1e50c1ebd476592.jpg,720,1280,2,703,304,984,507 -JENGA_COURTYARD_T_S_frame_2470_jpg.rf.2d1add1781b7a2597dc78ab301bdb769.jpg,720,1280,1,6,671,150,717 -JENGA_OFFICE_B_S_frame_1266_jpg.rf.2d8d4c9c617b6002ca09827e89073252.jpg,720,1280,1,221,596,522,717 -JENGA_OFFICE_B_S_frame_1266_jpg.rf.2d8d4c9c617b6002ca09827e89073252.jpg,720,1280,2,501,615,749,716 -JENGA_COURTYARD_S_T_frame_2447_jpg.rf.2d98345bb48083a871fee087dc5c71d2.jpg,720,1280,2,641,693,779,718 -JENGA_LIVINGROOM_S_T_frame_1639_jpg.rf.2da54f092eb4f2b3afa672787a1bc5b7.jpg,720,1280,1,183,648,429,718 -JENGA_LIVINGROOM_S_T_frame_1639_jpg.rf.2da54f092eb4f2b3afa672787a1bc5b7.jpg,720,1280,2,709,686,861,718 -CARDS_OFFICE_B_S_frame_1941_jpg.rf.2dabe2fbcb8b0d798fcbdf06b73b0571.jpg,720,1280,2,825,551,996,713 -JENGA_COURTYARD_H_B_frame_1832_jpg.rf.2dad90344ff2f1e1e5986b59a449a8b2.jpg,720,1280,1,145,563,429,718 -JENGA_COURTYARD_H_B_frame_1832_jpg.rf.2dad90344ff2f1e1e5986b59a449a8b2.jpg,720,1280,2,588,559,794,718 -CHESS_OFFICE_H_T_frame_2572_jpg.rf.2dbd919d783f3a26738ab25a60013b99.jpg,720,1280,2,468,424,818,707 -CARDS_LIVINGROOM_H_S_frame_1320_jpg.rf.2dbe181f75f8f8e7488499e1d0f0370d.jpg,720,1280,2,798,503,1043,716 -CHESS_LIVINGROOM_H_T_frame_1053_jpg.rf.2dc1796ebf66540462fad6f64e60d2fe.jpg,720,1280,1,1,563,272,718 -CHESS_LIVINGROOM_H_T_frame_1053_jpg.rf.2dc1796ebf66540462fad6f64e60d2fe.jpg,720,1280,2,406,540,1107,718 -PUZZLE_OFFICE_B_H_frame_1452_jpg.rf.2df8295e1a0fca10abc0cd51a031f090.jpg,720,1280,1,119,553,468,719 -PUZZLE_OFFICE_B_H_frame_1452_jpg.rf.2df8295e1a0fca10abc0cd51a031f090.jpg,720,1280,2,500,476,994,716 -CHESS_OFFICE_B_S_frame_2584_jpg.rf.2e0a5330beda6293b87f907e6e50c008.jpg,720,1280,2,700,507,1089,701 -JENGA_OFFICE_H_T_frame_0356_jpg.rf.2e144485670bd0c1229c0250371fe22e.jpg,720,1280,2,712,698,824,717 -CARDS_LIVINGROOM_T_B_frame_1347_jpg.rf.2e2541678869f2b8e461b2b9fca9bca8.jpg,720,1280,1,2,529,202,719 -CARDS_LIVINGROOM_T_B_frame_1347_jpg.rf.2e2541678869f2b8e461b2b9fca9bca8.jpg,720,1280,2,421,194,946,581 -CHESS_LIVINGROOM_B_S_frame_2530_jpg.rf.2e928eb1dc83de982a833c5f1d329007.jpg,720,1280,2,755,407,1066,667 -CHESS_OFFICE_H_T_frame_0492_jpg.rf.2eb19f90742c1e622138c6bb1c9e6eb9.jpg,720,1280,2,625,466,962,716 -JENGA_LIVINGROOM_T_S_frame_0521_jpg.rf.2ea39182f541fdb8adce24427a9ecf85.jpg,720,1280,2,569,512,959,715 -JENGA_LIVINGROOM_S_T_frame_0838_jpg.rf.2e9f91d5c47cf83be1f0d0160825244c.jpg,720,1280,2,647,599,895,718 -JENGA_LIVINGROOM_S_T_frame_0838_jpg.rf.2e9f91d5c47cf83be1f0d0160825244c.jpg,720,1280,1,124,642,374,718 -CARDS_OFFICE_H_T_frame_1847_jpg.rf.2ebb2950f7becaaf941579f5fe9a7719.jpg,720,1280,1,285,684,323,718 -CARDS_OFFICE_H_T_frame_1847_jpg.rf.2ebb2950f7becaaf941579f5fe9a7719.jpg,720,1280,2,690,506,1188,716 -CARDS_LIVINGROOM_H_S_frame_0614_jpg.rf.2ed8ca7ba5610465062e5d2ade2ddddb.jpg,720,1280,2,488,581,734,719 -CHESS_COURTYARD_B_T_frame_1741_jpg.rf.2ee02b996106a1796732b5f5d1aedefd.jpg,720,1280,2,716,441,947,622 -PUZZLE_COURTYARD_H_T_frame_0084_jpg.rf.2ed95c32d9092e84b47d39d9155e3565.jpg,720,1280,1,10,643,184,714 -PUZZLE_COURTYARD_H_T_frame_0084_jpg.rf.2ed95c32d9092e84b47d39d9155e3565.jpg,720,1280,2,492,629,715,714 -CARDS_COURTYARD_H_S_frame_1647_jpg.rf.2eebcf0c561a2c5b15b4b9b7205f4f49.jpg,720,1280,1,59,496,429,719 -CARDS_COURTYARD_H_S_frame_1647_jpg.rf.2eebcf0c561a2c5b15b4b9b7205f4f49.jpg,720,1280,2,623,361,813,587 -PUZZLE_LIVINGROOM_T_B_frame_0632_jpg.rf.2f1c4ca0cd54b36d5225e79f8d86fa53.jpg,720,1280,1,3,536,329,718 -PUZZLE_LIVINGROOM_T_B_frame_0632_jpg.rf.2f1c4ca0cd54b36d5225e79f8d86fa53.jpg,720,1280,2,497,586,990,714 -CARDS_OFFICE_B_S_frame_1359_jpg.rf.2f2f3fbd337f922445226543c54fd400.jpg,720,1280,1,497,673,547,718 -CARDS_OFFICE_B_S_frame_1359_jpg.rf.2f2f3fbd337f922445226543c54fd400.jpg,720,1280,2,605,518,870,717 -CARDS_COURTYARD_T_B_frame_2589_jpg.rf.2f2d2b9f2f69961dee665d8f661d3fbe.jpg,720,1280,1,217,648,319,718 -CARDS_COURTYARD_T_B_frame_2589_jpg.rf.2f2d2b9f2f69961dee665d8f661d3fbe.jpg,720,1280,2,680,478,910,710 -JENGA_COURTYARD_S_T_frame_1194_jpg.rf.2f8731a04e3e200dbf77b8d4e4e221a7.jpg,720,1280,2,566,583,805,719 -JENGA_COURTYARD_S_T_frame_1194_jpg.rf.2f8731a04e3e200dbf77b8d4e4e221a7.jpg,720,1280,1,292,671,458,719 -JENGA_COURTYARD_S_T_frame_0558_jpg.rf.2f8b9ba1ced5574d9aa40b5f35f1e734.jpg,720,1280,1,2,251,581,718 -JENGA_COURTYARD_S_T_frame_0558_jpg.rf.2f8b9ba1ced5574d9aa40b5f35f1e734.jpg,720,1280,2,473,378,1052,713 -CHESS_LIVINGROOM_H_T_frame_0291_jpg.rf.2f9115448dff0275ef22d98ade47d06a.jpg,720,1280,1,1,538,215,718 -CHESS_LIVINGROOM_H_T_frame_0291_jpg.rf.2f9115448dff0275ef22d98ade47d06a.jpg,720,1280,2,904,521,1277,718 -PUZZLE_COURTYARD_B_S_frame_1938_jpg.rf.2f9f76b9ea213101187afa0d3ede88ea.jpg,720,1280,1,88,598,319,719 -PUZZLE_COURTYARD_B_S_frame_1938_jpg.rf.2f9f76b9ea213101187afa0d3ede88ea.jpg,720,1280,2,858,644,1019,719 -PUZZLE_COURTYARD_T_H_frame_1174_jpg.rf.2f9fc7acce0945e36a1497da3e832311.jpg,720,1280,1,1,413,372,716 -PUZZLE_COURTYARD_T_H_frame_1174_jpg.rf.2f9fc7acce0945e36a1497da3e832311.jpg,720,1280,2,639,352,1082,718 -PUZZLE_COURTYARD_T_H_frame_1600_jpg.rf.2fbe17ce542f170c37137955d92c89c0.jpg,720,1280,2,624,483,1035,718 -PUZZLE_OFFICE_T_S_frame_0400_jpg.rf.2fc2ff5108c8038e6419ce5c11b4c1d2.jpg,720,1280,1,179,513,540,710 -PUZZLE_OFFICE_T_S_frame_0400_jpg.rf.2fc2ff5108c8038e6419ce5c11b4c1d2.jpg,720,1280,2,641,456,996,709 -CHESS_LIVINGROOM_T_H_frame_0025_jpg.rf.2fc91569e237665d74bf794636721ef4.jpg,720,1280,1,6,140,145,285 -CHESS_LIVINGROOM_T_H_frame_0025_jpg.rf.2fc91569e237665d74bf794636721ef4.jpg,720,1280,2,705,1,944,256 -PUZZLE_LIVINGROOM_S_H_frame_2239_jpg.rf.2fdc9e204faa0a8b6c76d4c4de1b87b1.jpg,720,1280,2,712,668,858,717 -JENGA_LIVINGROOM_T_S_frame_0588_jpg.rf.2fd6baba151cf1c4353bd45754bc48e7.jpg,720,1280,1,6,362,416,718 -CARDS_COURTYARD_H_S_frame_1832_jpg.rf.2fe011b3d3f1465b33984f87a5eac592.jpg,720,1280,1,187,509,499,719 -CARDS_COURTYARD_H_S_frame_1832_jpg.rf.2fe011b3d3f1465b33984f87a5eac592.jpg,720,1280,2,710,379,926,594 -JENGA_OFFICE_T_H_frame_0543_jpg.rf.2feefe39d830af98cf648f8a787d9eec.jpg,720,1280,1,342,696,415,718 -JENGA_COURTYARD_T_S_frame_2425_jpg.rf.302bf3b54d2ef4d5a52f85c1aa3de3c0.jpg,720,1280,1,104,345,477,605 -JENGA_COURTYARD_T_S_frame_2425_jpg.rf.302bf3b54d2ef4d5a52f85c1aa3de3c0.jpg,720,1280,2,431,340,777,712 -JENGA_LIVINGROOM_S_T_frame_0579_jpg.rf.3056a1f8304615c6324ff4724110f1ea.jpg,720,1280,2,568,439,989,719 -JENGA_LIVINGROOM_S_T_frame_0579_jpg.rf.3056a1f8304615c6324ff4724110f1ea.jpg,720,1280,1,0,451,423,719 -PUZZLE_OFFICE_T_S_frame_0459_jpg.rf.307773daa4067110b2aa6af8be8b67f7.jpg,720,1280,2,603,447,876,708 -PUZZLE_OFFICE_T_S_frame_0459_jpg.rf.307773daa4067110b2aa6af8be8b67f7.jpg,720,1280,1,218,579,563,715 -JENGA_COURTYARD_B_H_frame_0887_jpg.rf.307845ee9ddfab8ffb39e2723719f0dd.jpg,720,1280,1,407,697,494,718 -JENGA_COURTYARD_B_H_frame_0887_jpg.rf.307845ee9ddfab8ffb39e2723719f0dd.jpg,720,1280,2,618,430,850,719 -CHESS_LIVINGROOM_S_B_frame_1194_jpg.rf.3079003a81215a6bb0fab4fe6a762edc.jpg,720,1280,1,3,565,93,634 -CHESS_LIVINGROOM_S_B_frame_1194_jpg.rf.3079003a81215a6bb0fab4fe6a762edc.jpg,720,1280,2,613,341,1180,664 -CARDS_COURTYARD_T_B_frame_1480_jpg.rf.307d8b1486afb1de0a23a787943a84d1.jpg,720,1280,2,538,568,768,719 -CARDS_COURTYARD_T_B_frame_1480_jpg.rf.307d8b1486afb1de0a23a787943a84d1.jpg,720,1280,1,175,618,400,719 -JENGA_LIVINGROOM_B_H_frame_2004_jpg.rf.3089fac243b75a2a5be0875e9d746c5b.jpg,720,1280,2,672,152,1034,540 -JENGA_OFFICE_B_S_frame_0364_jpg.rf.30795c14b907bd61d091e1130c448812.jpg,720,1280,1,325,672,518,716 -JENGA_COURTYARD_S_T_frame_0904_jpg.rf.308a590e345c08ad0c68854cdf5a25df.jpg,720,1280,2,598,252,939,610 -JENGA_COURTYARD_T_S_frame_2670_jpg.rf.309425744c20ca427ce187c1e872fb09.jpg,720,1280,1,86,489,400,716 -JENGA_COURTYARD_T_S_frame_2670_jpg.rf.309425744c20ca427ce187c1e872fb09.jpg,720,1280,2,664,436,845,716 -CARDS_OFFICE_T_H_frame_0487_jpg.rf.30d25c58adcfcb93e2c690d0a2a939b3.jpg,720,1280,1,198,630,435,719 -CARDS_OFFICE_T_H_frame_0487_jpg.rf.30d25c58adcfcb93e2c690d0a2a939b3.jpg,720,1280,2,525,528,789,719 -CHESS_OFFICE_T_H_frame_2556_jpg.rf.3092e68f834e329c7d80b26cdceab1cc.jpg,720,1280,1,166,621,381,718 -CHESS_OFFICE_T_H_frame_2556_jpg.rf.3092e68f834e329c7d80b26cdceab1cc.jpg,720,1280,2,382,636,583,714 -CHESS_OFFICE_S_B_frame_1485_jpg.rf.31189538d185705022190de177687031.jpg,720,1280,1,7,345,473,719 -PUZZLE_COURTYARD_S_B_frame_0100_jpg.rf.30fce261080532cee7eadfa8a7f59cf2.jpg,720,1280,1,155,673,356,717 -PUZZLE_COURTYARD_S_B_frame_0100_jpg.rf.30fce261080532cee7eadfa8a7f59cf2.jpg,720,1280,2,828,603,1075,717 -PUZZLE_OFFICE_B_H_frame_1660_jpg.rf.313e21a115b9836cefead709a91012c8.jpg,720,1280,2,573,395,1021,652 -CHESS_LIVINGROOM_H_T_frame_2451_jpg.rf.313f87ea0869c10b6e6a1d754aafa2db.jpg,720,1280,1,3,621,164,712 -CHESS_LIVINGROOM_H_T_frame_2451_jpg.rf.313f87ea0869c10b6e6a1d754aafa2db.jpg,720,1280,2,914,4,1279,318 -CARDS_LIVINGROOM_B_T_frame_2509_jpg.rf.31644fc3af2f68695089efde6ec413a1.jpg,720,1280,2,594,680,694,718 -CARDS_COURTYARD_H_S_frame_0245_jpg.rf.31807da87d4adc7a84bdeb6b9ff2a172.jpg,720,1280,1,304,661,386,719 -CARDS_COURTYARD_H_S_frame_0245_jpg.rf.31807da87d4adc7a84bdeb6b9ff2a172.jpg,720,1280,2,617,502,854,718 -JENGA_LIVINGROOM_H_B_frame_0761_jpg.rf.31adcc025e35090f8bbf3ad093036420.jpg,720,1280,2,648,368,956,711 -CHESS_LIVINGROOM_B_S_frame_2521_jpg.rf.31b994526e7eb76b0b2c26adb1b3d66a.jpg,720,1280,2,711,497,1093,716 -CARDS_LIVINGROOM_B_T_frame_0321_jpg.rf.31c1eea74e87630534085d03ffaf60bc.jpg,720,1280,1,166,623,482,718 -CARDS_LIVINGROOM_B_T_frame_0321_jpg.rf.31c1eea74e87630534085d03ffaf60bc.jpg,720,1280,2,647,614,938,718 -JENGA_OFFICE_T_H_frame_1511_jpg.rf.31fad3e56eec786851815ba875106051.jpg,720,1280,1,329,169,472,465 -JENGA_OFFICE_T_H_frame_1511_jpg.rf.31fad3e56eec786851815ba875106051.jpg,720,1280,2,612,178,719,438 -CARDS_COURTYARD_T_B_frame_2132_jpg.rf.32089924dd314659f6b2cda73c3b1760.jpg,720,1280,2,539,510,959,719 -CARDS_COURTYARD_T_B_frame_2132_jpg.rf.32089924dd314659f6b2cda73c3b1760.jpg,720,1280,1,192,590,366,719 -CARDS_COURTYARD_S_H_frame_0903_jpg.rf.321f7ec4cd8497f0c8baad7b7628f86a.jpg,720,1280,1,18,360,315,695 -CARDS_COURTYARD_T_B_frame_2011_jpg.rf.3227fa43b17dd4b3c5063ea30be54e77.jpg,720,1280,1,279,658,383,717 -CARDS_COURTYARD_T_B_frame_2011_jpg.rf.3227fa43b17dd4b3c5063ea30be54e77.jpg,720,1280,2,693,592,988,716 -CHESS_COURTYARD_B_T_frame_0813_jpg.rf.3258210e513db999b17db561d5559f29.jpg,720,1280,1,253,644,477,718 -CHESS_OFFICE_H_T_frame_1820_jpg.rf.3242672fa2c96d72b48f90634d2230a2.jpg,720,1280,2,678,387,873,577 -CHESS_COURTYARD_T_B_frame_2667_jpg.rf.32c0d94f96e6151db15d13c295fe42ef.jpg,720,1280,1,2,680,232,718 -CHESS_COURTYARD_T_B_frame_2667_jpg.rf.32c0d94f96e6151db15d13c295fe42ef.jpg,720,1280,2,255,632,542,718 -CARDS_OFFICE_H_T_frame_1085_jpg.rf.32dc0ee21ced2d240e9a86e21b7ed2fa.jpg,720,1280,1,205,638,283,718 -CARDS_OFFICE_H_T_frame_1085_jpg.rf.32dc0ee21ced2d240e9a86e21b7ed2fa.jpg,720,1280,2,620,652,806,718 -JENGA_LIVINGROOM_H_B_frame_0664_jpg.rf.32cba2c0fee1bf94e3e49050b5979f20.jpg,720,1280,2,589,375,886,697 -PUZZLE_LIVINGROOM_T_B_frame_1847_jpg.rf.330afe8d3e2d0c353ba7a759a3e161a8.jpg,720,1280,1,1,504,217,710 -PUZZLE_COURTYARD_H_T_frame_1211_jpg.rf.32ff49ff32e171e04d3b931d3ccd8b3f.jpg,720,1280,1,3,576,195,718 -PUZZLE_COURTYARD_H_T_frame_1211_jpg.rf.32ff49ff32e171e04d3b931d3ccd8b3f.jpg,720,1280,2,397,523,589,718 -JENGA_LIVINGROOM_S_T_frame_1461_jpg.rf.330ac758bc609f1d4ab86133201c6aed.jpg,720,1280,1,351,447,730,718 -JENGA_LIVINGROOM_S_T_frame_1461_jpg.rf.330ac758bc609f1d4ab86133201c6aed.jpg,720,1280,2,1086,625,1279,718 -CHESS_COURTYARD_H_S_frame_0741_jpg.rf.32f3ff89342374653e0cfee4cdc07224.jpg,720,1280,2,674,681,839,717 -JENGA_COURTYARD_S_T_frame_2535_jpg.rf.331bcce42c808ec63d91e7575bbb9339.jpg,720,1280,1,210,531,394,716 -JENGA_COURTYARD_S_T_frame_2535_jpg.rf.331bcce42c808ec63d91e7575bbb9339.jpg,720,1280,2,532,376,840,718 -CHESS_COURTYARD_H_S_frame_1167_jpg.rf.33251a6c83ddcae6f3c8ccbb76024cb6.jpg,720,1280,2,837,502,1122,716 -CHESS_LIVINGROOM_S_B_frame_1606_jpg.rf.332f28d59c3c349179a3a04739a58b71.jpg,720,1280,1,1,580,410,713 -JENGA_OFFICE_B_S_frame_0835_jpg.rf.3333b2d8c17149d4c56a9d53e6676aa2.jpg,720,1280,2,555,622,770,717 -CHESS_OFFICE_S_B_frame_1067_jpg.rf.333ff5bb021d2e4ca9bc07bd2123fd34.jpg,720,1280,2,750,379,1150,716 -CARDS_OFFICE_H_T_frame_0249_jpg.rf.3360bf999ae3d8ec907f5169fc5f064f.jpg,720,1280,1,84,438,488,718 -CARDS_OFFICE_H_T_frame_0249_jpg.rf.3360bf999ae3d8ec907f5169fc5f064f.jpg,720,1280,2,561,388,874,684 -JENGA_OFFICE_T_H_frame_1063_jpg.rf.336368057822db0732f3f962a1f7ac6e.jpg,720,1280,2,498,512,782,715 -CARDS_LIVINGROOM_B_T_frame_1832_jpg.rf.33c4d3003899b9fe5937226eda4ebc15.jpg,720,1280,2,639,477,989,718 -PUZZLE_OFFICE_H_B_frame_0806_jpg.rf.33e1640bbeb9bdf9d9945a7f89fc0a69.jpg,720,1280,2,958,672,1145,718 -JENGA_COURTYARD_H_B_frame_1298_jpg.rf.33f29df0cea45e599a62c71f17933c58.jpg,720,1280,2,539,663,747,718 -PUZZLE_COURTYARD_H_T_frame_0153_jpg.rf.340bc3a03c77479532d1ed1470535e02.jpg,720,1280,1,243,651,419,717 -PUZZLE_COURTYARD_H_T_frame_0153_jpg.rf.340bc3a03c77479532d1ed1470535e02.jpg,720,1280,2,750,553,1058,718 -PUZZLE_OFFICE_B_H_frame_2102_jpg.rf.3421ef39c6fd930185aad78ccb953a9c.jpg,720,1280,1,209,533,503,719 -PUZZLE_OFFICE_B_H_frame_2102_jpg.rf.3421ef39c6fd930185aad78ccb953a9c.jpg,720,1280,2,686,430,1071,705 -CARDS_LIVINGROOM_S_H_frame_0930_jpg.rf.34289dcd087613cfc60eba0309909a5e.jpg,720,1280,1,226,688,306,718 -CARDS_LIVINGROOM_S_H_frame_0930_jpg.rf.34289dcd087613cfc60eba0309909a5e.jpg,720,1280,2,620,695,662,716 -PUZZLE_COURTYARD_T_H_frame_0108_jpg.rf.342ecba22bcd845c05b51045a3617a7b.jpg,720,1280,1,26,640,313,718 -CARDS_COURTYARD_B_T_frame_1945_jpg.rf.3463c9c300d3be27312d29e075c80f4e.jpg,720,1280,2,684,692,730,717 -CARDS_COURTYARD_T_B_frame_0760_jpg.rf.34749e9b35b69b3b65c11e23f2ca1826.jpg,720,1280,1,142,495,440,713 -CARDS_COURTYARD_T_B_frame_0760_jpg.rf.34749e9b35b69b3b65c11e23f2ca1826.jpg,720,1280,2,528,431,901,717 -CARDS_OFFICE_H_T_frame_1219_jpg.rf.34831d8206723f69ae64003e09649f93.jpg,720,1280,1,162,602,444,718 -CARDS_OFFICE_H_T_frame_1219_jpg.rf.34831d8206723f69ae64003e09649f93.jpg,720,1280,2,705,406,1037,685 -CHESS_COURTYARD_H_S_frame_1027_jpg.rf.3496190a41281c41294f3174f10a438f.jpg,720,1280,2,750,663,969,717 -PUZZLE_LIVINGROOM_T_B_frame_2318_jpg.rf.34d5f3c97688f829d1ffeaa3b631563d.jpg,720,1280,1,6,603,166,714 -PUZZLE_LIVINGROOM_T_B_frame_2318_jpg.rf.34d5f3c97688f829d1ffeaa3b631563d.jpg,720,1280,2,476,594,1060,718 -CARDS_LIVINGROOM_H_S_frame_2600_jpg.rf.34fa70b46cab70954da2e71f90f1171f.jpg,720,1280,1,99,470,362,716 -CARDS_LIVINGROOM_H_S_frame_2600_jpg.rf.34fa70b46cab70954da2e71f90f1171f.jpg,720,1280,2,547,448,781,719 -CHESS_OFFICE_T_H_frame_1499_jpg.rf.350c0131041862cffccfdac03456d72c.jpg,720,1280,1,185,663,386,717 -CHESS_OFFICE_T_H_frame_1499_jpg.rf.350c0131041862cffccfdac03456d72c.jpg,720,1280,2,394,634,591,718 -CARDS_LIVINGROOM_B_T_frame_2466_jpg.rf.35549640f165237e7e9eef5112ed1746.jpg,720,1280,1,228,686,287,716 -CARDS_LIVINGROOM_B_T_frame_2466_jpg.rf.35549640f165237e7e9eef5112ed1746.jpg,720,1280,2,633,646,783,718 -JENGA_LIVINGROOM_B_H_frame_2538_jpg.rf.357786c21c3fcc98baffc507d7fee547.jpg,720,1280,1,5,438,340,718 -JENGA_LIVINGROOM_B_H_frame_2538_jpg.rf.357786c21c3fcc98baffc507d7fee547.jpg,720,1280,2,680,447,1104,715 -PUZZLE_OFFICE_S_T_frame_1747_jpg.rf.357d8a83a676ec68a6fd2d689d65e5c5.jpg,720,1280,1,3,176,214,342 -JENGA_LIVINGROOM_S_T_frame_0015_jpg.rf.35dc2756692741862c087da4726bef35.jpg,720,1280,1,219,682,395,718 -JENGA_LIVINGROOM_H_B_frame_1393_jpg.rf.35dd7253187418d0d377227ec614df21.jpg,720,1280,1,7,316,210,570 -JENGA_LIVINGROOM_H_B_frame_1393_jpg.rf.35dd7253187418d0d377227ec614df21.jpg,720,1280,2,730,216,1031,700 -CARDS_COURTYARD_S_H_frame_1220_jpg.rf.35ddf50741fd4ddc34c755c55ffa562e.jpg,720,1280,2,588,434,830,710 -CHESS_LIVINGROOM_S_B_frame_2132_jpg.rf.35f4482ceea94114a3043d91b908bb00.jpg,720,1280,1,2,442,368,718 -CHESS_LIVINGROOM_S_B_frame_2132_jpg.rf.35f4482ceea94114a3043d91b908bb00.jpg,720,1280,2,968,638,1229,717 -CARDS_LIVINGROOM_T_B_frame_1582_jpg.rf.35f57e79cc933cd96cddf49ecbacb4de.jpg,720,1280,2,410,542,902,717 -PUZZLE_OFFICE_T_S_frame_1821_jpg.rf.36636825ecc78e58002a7d1a4c037211.jpg,720,1280,1,72,468,431,711 -PUZZLE_OFFICE_T_S_frame_1821_jpg.rf.36636825ecc78e58002a7d1a4c037211.jpg,720,1280,2,547,375,847,675 -JENGA_COURTYARD_H_B_frame_1759_jpg.rf.3672d1eaf306774fef2ec62b907315de.jpg,720,1280,1,419,201,641,530 -JENGA_COURTYARD_H_B_frame_1759_jpg.rf.3672d1eaf306774fef2ec62b907315de.jpg,720,1280,2,597,250,853,665 -CHESS_OFFICE_T_H_frame_1946_jpg.rf.3678c5b19545db7ce2cb1592b0624f85.jpg,720,1280,1,137,589,366,717 -CHESS_OFFICE_T_H_frame_1946_jpg.rf.3678c5b19545db7ce2cb1592b0624f85.jpg,720,1280,2,317,606,585,718 -PUZZLE_LIVINGROOM_T_B_frame_1330_jpg.rf.3679c095097957332a8972a316382378.jpg,720,1280,1,9,576,240,696 -PUZZLE_LIVINGROOM_T_B_frame_1330_jpg.rf.3679c095097957332a8972a316382378.jpg,720,1280,2,564,486,1103,712 -JENGA_OFFICE_B_S_frame_1784_jpg.rf.367d229840893e96bb0b3c125b004963.jpg,720,1280,2,400,452,715,714 -PUZZLE_LIVINGROOM_H_S_frame_0456_jpg.rf.3696ea147d03dfbd890bcde3767b4da8.jpg,720,1280,1,3,630,229,718 -PUZZLE_LIVINGROOM_H_S_frame_0456_jpg.rf.3696ea147d03dfbd890bcde3767b4da8.jpg,720,1280,2,988,463,1279,718 -CHESS_COURTYARD_H_S_frame_1866_jpg.rf.36cc9167d5ec111f7cbfac473774e38b.jpg,720,1280,2,683,408,872,567 -CHESS_OFFICE_B_S_frame_0124_jpg.rf.36dce301872b125989392b152c63c89e.jpg,720,1280,2,646,441,947,673 -PUZZLE_LIVINGROOM_S_H_frame_2129_jpg.rf.370b4fc32b5a6effa2c828a681dc10f8.jpg,720,1280,2,601,633,925,718 -CHESS_LIVINGROOM_T_H_frame_1895_jpg.rf.370e98937dadbc910f7f22697ec97d29.jpg,720,1280,2,369,288,859,634 -JENGA_COURTYARD_H_B_frame_0399_jpg.rf.371472a54870ed5e72dfd6863909388c.jpg,720,1280,2,618,4,938,405 -CARDS_COURTYARD_S_H_frame_1412_jpg.rf.371863c68417a240785f41b6cdb50656.jpg,720,1280,1,325,593,482,718 -CARDS_COURTYARD_S_H_frame_1412_jpg.rf.371863c68417a240785f41b6cdb50656.jpg,720,1280,2,601,684,772,718 -PUZZLE_OFFICE_H_B_frame_1914_jpg.rf.371c784bd6ab1b86baa87df915d3eb57.jpg,720,1280,1,284,578,581,719 -PUZZLE_OFFICE_H_B_frame_1914_jpg.rf.371c784bd6ab1b86baa87df915d3eb57.jpg,720,1280,2,657,535,907,718 -CARDS_OFFICE_T_H_frame_1425_jpg.rf.37346c64eede7cf42f08d3ca0b860421.jpg,720,1280,1,308,692,359,719 -CARDS_OFFICE_T_H_frame_1425_jpg.rf.37346c64eede7cf42f08d3ca0b860421.jpg,720,1280,2,567,598,802,719 -JENGA_LIVINGROOM_H_B_frame_1661_jpg.rf.3736ef5025038518d33705b3c67e744f.jpg,720,1280,1,167,664,389,714 -JENGA_LIVINGROOM_H_B_frame_1661_jpg.rf.3736ef5025038518d33705b3c67e744f.jpg,720,1280,2,655,392,910,713 -PUZZLE_COURTYARD_B_S_frame_0700_jpg.rf.37601108f46e2517abbdb3306a14323d.jpg,720,1280,2,595,654,848,719 -CHESS_COURTYARD_T_B_frame_0947_jpg.rf.3789496cfb354c1e7e33663bd61d2472.jpg,720,1280,1,13,567,327,718 -CHESS_COURTYARD_T_B_frame_0947_jpg.rf.3789496cfb354c1e7e33663bd61d2472.jpg,720,1280,2,382,622,656,718 -CARDS_OFFICE_T_H_frame_0080_jpg.rf.378b4ee721af6bd3a691d5f8019edab0.jpg,720,1280,1,264,682,416,718 -CARDS_OFFICE_T_H_frame_0080_jpg.rf.378b4ee721af6bd3a691d5f8019edab0.jpg,720,1280,2,586,570,772,718 -PUZZLE_COURTYARD_S_B_frame_1200_jpg.rf.3790d6c3a21bd1a09ace310fafdf6158.jpg,720,1280,1,1,518,233,716 -PUZZLE_COURTYARD_S_B_frame_1200_jpg.rf.3790d6c3a21bd1a09ace310fafdf6158.jpg,720,1280,2,612,647,903,718 -JENGA_LIVINGROOM_S_T_frame_1030_jpg.rf.379a8bc47df5fcf8303fef851fd427fc.jpg,720,1280,1,16,407,467,714 -JENGA_LIVINGROOM_S_T_frame_1030_jpg.rf.379a8bc47df5fcf8303fef851fd427fc.jpg,720,1280,2,522,498,999,718 -PUZZLE_OFFICE_B_H_frame_0573_jpg.rf.37bc958249e791423d3046ab273c8522.jpg,720,1280,1,5,509,329,716 -PUZZLE_OFFICE_B_H_frame_0573_jpg.rf.37bc958249e791423d3046ab273c8522.jpg,720,1280,2,691,344,1013,581 -PUZZLE_LIVINGROOM_T_B_frame_0709_jpg.rf.37ce5fd6eba87f3eb14c86cc42f05aad.jpg,720,1280,1,2,519,210,717 -PUZZLE_LIVINGROOM_T_B_frame_0709_jpg.rf.37ce5fd6eba87f3eb14c86cc42f05aad.jpg,720,1280,2,444,532,887,716 -JENGA_LIVINGROOM_S_T_frame_0591_jpg.rf.37ec2bac290c41b2cbaa0b56acc00f7e.jpg,720,1280,1,1,576,264,718 -JENGA_LIVINGROOM_S_T_frame_0591_jpg.rf.37ec2bac290c41b2cbaa0b56acc00f7e.jpg,720,1280,2,448,585,772,718 -JENGA_LIVINGROOM_T_S_frame_0338_jpg.rf.37edba2eb84f32d8f3b41707868ea2cc.jpg,720,1280,1,4,282,424,717 -JENGA_LIVINGROOM_T_S_frame_0338_jpg.rf.37edba2eb84f32d8f3b41707868ea2cc.jpg,720,1280,2,345,172,1035,495 -CARDS_OFFICE_H_T_frame_2410_jpg.rf.37f8c7fe8c1001d19f22880ce2ec153f.jpg,720,1280,2,711,585,1171,718 -PUZZLE_LIVINGROOM_B_T_frame_1961_jpg.rf.380b1a820687f4c33d8eb9ee9694a235.jpg,720,1280,1,2,414,237,719 -PUZZLE_LIVINGROOM_B_T_frame_1961_jpg.rf.380b1a820687f4c33d8eb9ee9694a235.jpg,720,1280,2,597,354,1017,587 -CARDS_OFFICE_H_T_frame_1506_jpg.rf.38102fe2bd192de394d2947491342469.jpg,720,1280,1,217,644,304,718 -CARDS_OFFICE_H_T_frame_1506_jpg.rf.38102fe2bd192de394d2947491342469.jpg,720,1280,2,876,89,1279,464 -PUZZLE_LIVINGROOM_T_B_frame_0090_jpg.rf.381823ac1bdf8daf44572ddc4c7a4290.jpg,720,1280,1,11,469,299,709 -PUZZLE_LIVINGROOM_T_B_frame_0090_jpg.rf.381823ac1bdf8daf44572ddc4c7a4290.jpg,720,1280,2,536,379,1058,717 -JENGA_LIVINGROOM_B_H_frame_2582_jpg.rf.385cdb74368f0043141854680e37f697.jpg,720,1280,1,7,466,384,716 -JENGA_LIVINGROOM_B_H_frame_2582_jpg.rf.385cdb74368f0043141854680e37f697.jpg,720,1280,2,581,516,1019,718 -PUZZLE_OFFICE_B_H_frame_0564_jpg.rf.385e6ac006e2a561aeceff0cbd54d7ef.jpg,720,1280,1,11,560,328,717 -PUZZLE_OFFICE_B_H_frame_0564_jpg.rf.385e6ac006e2a561aeceff0cbd54d7ef.jpg,720,1280,2,596,386,844,568 -CHESS_LIVINGROOM_H_T_frame_0702_jpg.rf.386901fbd06b54fe92aabbe13ca622d6.jpg,720,1280,1,1,595,302,716 -CHESS_LIVINGROOM_H_T_frame_0702_jpg.rf.386901fbd06b54fe92aabbe13ca622d6.jpg,720,1280,2,556,432,963,714 -CHESS_OFFICE_S_B_frame_0493_jpg.rf.3889f44ee92b2f07c83a7dfb6237bbbd.jpg,720,1280,2,629,468,1096,719 -CARDS_LIVINGROOM_S_H_frame_1656_jpg.rf.388cfa6fc05e3ed38c1ff6af05bd6840.jpg,720,1280,1,177,661,323,718 -CARDS_LIVINGROOM_S_H_frame_1656_jpg.rf.388cfa6fc05e3ed38c1ff6af05bd6840.jpg,720,1280,2,603,648,753,718 -PUZZLE_OFFICE_B_H_frame_0238_jpg.rf.38a8ce78dfccf91810596df1213db207.jpg,720,1280,1,257,679,443,719 -PUZZLE_COURTYARD_B_S_frame_2127_jpg.rf.38d40653535608b5070d8b0164b1b126.jpg,720,1280,1,259,523,529,719 -PUZZLE_COURTYARD_B_S_frame_2127_jpg.rf.38d40653535608b5070d8b0164b1b126.jpg,720,1280,2,535,505,870,719 -CARDS_COURTYARD_S_H_frame_0896_jpg.rf.38e3196d1446550e43e5df33a6b3f477.jpg,720,1280,1,158,652,426,719 -CARDS_COURTYARD_S_H_frame_0896_jpg.rf.38e3196d1446550e43e5df33a6b3f477.jpg,720,1280,2,546,690,600,719 -CHESS_OFFICE_S_B_frame_1407_jpg.rf.38f74bc3b1a5676ac00d3dc1e05f72f4.jpg,720,1280,2,768,685,860,718 -JENGA_COURTYARD_B_H_frame_1565_jpg.rf.390b1bbba9fe61216673da3045bfb524.jpg,720,1280,1,344,659,532,717 -JENGA_COURTYARD_B_H_frame_1565_jpg.rf.390b1bbba9fe61216673da3045bfb524.jpg,720,1280,2,750,645,931,718 -PUZZLE_OFFICE_T_S_frame_1188_jpg.rf.391404db19e1ce7858026113bc4ec8ad.jpg,720,1280,1,1,423,392,709 -PUZZLE_OFFICE_T_S_frame_1188_jpg.rf.391404db19e1ce7858026113bc4ec8ad.jpg,720,1280,2,518,453,876,719 -CARDS_COURTYARD_S_H_frame_0414_jpg.rf.392449b68dd8d3f5f75a357c24bddc65.jpg,720,1280,1,251,680,518,718 -CARDS_COURTYARD_S_H_frame_0414_jpg.rf.392449b68dd8d3f5f75a357c24bddc65.jpg,720,1280,2,537,697,586,718 -PUZZLE_COURTYARD_B_S_frame_0264_jpg.rf.392727285d7eb57539dc5be0a71a7805.jpg,720,1280,1,222,667,376,719 -PUZZLE_COURTYARD_B_S_frame_0264_jpg.rf.392727285d7eb57539dc5be0a71a7805.jpg,720,1280,2,694,513,983,719 -PUZZLE_LIVINGROOM_T_B_frame_1317_jpg.rf.392f0895e773eabc7a9ecc73a2ea5834.jpg,720,1280,2,601,626,1018,714 -PUZZLE_LIVINGROOM_T_B_frame_1317_jpg.rf.392f0895e773eabc7a9ecc73a2ea5834.jpg,720,1280,1,13,663,266,717 -CHESS_OFFICE_S_B_frame_0946_jpg.rf.395660be770536bde28abf4dab944c19.jpg,720,1280,1,1,650,248,719 -CHESS_OFFICE_S_B_frame_0946_jpg.rf.395660be770536bde28abf4dab944c19.jpg,720,1280,2,491,679,761,719 -JENGA_OFFICE_H_T_frame_0669_jpg.rf.394638e25d3d3d7f9bef5f233feb4884.jpg,720,1280,2,612,17,966,300 -CHESS_LIVINGROOM_S_B_frame_1572_jpg.rf.397315d1547e94fdd5ba43f1ece42fb8.jpg,720,1280,1,170,698,226,718 -CHESS_COURTYARD_T_B_frame_0982_jpg.rf.3975b84f67a3c60718246a647a967006.jpg,720,1280,1,1,621,229,718 -CHESS_COURTYARD_T_B_frame_0982_jpg.rf.3975b84f67a3c60718246a647a967006.jpg,720,1280,2,276,655,546,718 -PUZZLE_COURTYARD_B_S_frame_2616_jpg.rf.3986771c9028392b5ab930ee89e60785.jpg,720,1280,1,307,706,343,719 -PUZZLE_COURTYARD_B_S_frame_2616_jpg.rf.3986771c9028392b5ab930ee89e60785.jpg,720,1280,2,880,699,1008,719 -CARDS_OFFICE_H_T_frame_1908_jpg.rf.39a08d26d4b9b6d3c1d2aa55528eafc2.jpg,720,1280,1,65,563,404,718 -CARDS_OFFICE_H_T_frame_1908_jpg.rf.39a08d26d4b9b6d3c1d2aa55528eafc2.jpg,720,1280,2,603,326,883,536 -CARDS_COURTYARD_T_B_frame_2524_jpg.rf.39a457ab6f394a3d23161a9db510c2b6.jpg,720,1280,1,356,664,460,716 -CARDS_COURTYARD_T_B_frame_2524_jpg.rf.39a457ab6f394a3d23161a9db510c2b6.jpg,720,1280,2,546,404,749,559 -CARDS_OFFICE_B_S_frame_0085_jpg.rf.39c2fe5afb8c53bb1e2b0d385cb0e4ff.jpg,720,1280,2,742,675,802,718 -PUZZLE_LIVINGROOM_B_T_frame_1945_jpg.rf.39cbd1dfca70490b500a12bc2d9fd97b.jpg,720,1280,1,3,424,316,667 -PUZZLE_LIVINGROOM_B_T_frame_1945_jpg.rf.39cbd1dfca70490b500a12bc2d9fd97b.jpg,720,1280,2,575,437,889,714 -CARDS_OFFICE_B_S_frame_1764_jpg.rf.39dc48c58ca07edb97bf4abfd66b87b0.jpg,720,1280,1,368,668,440,718 -CARDS_OFFICE_B_S_frame_1764_jpg.rf.39dc48c58ca07edb97bf4abfd66b87b0.jpg,720,1280,2,664,671,774,718 -JENGA_LIVINGROOM_T_S_frame_1640_jpg.rf.39e4b657957805f18ed378dcc32c180a.jpg,720,1280,1,2,447,197,719 -JENGA_LIVINGROOM_T_S_frame_1640_jpg.rf.39e4b657957805f18ed378dcc32c180a.jpg,720,1280,2,474,282,967,684 -PUZZLE_COURTYARD_S_B_frame_0940_jpg.rf.39fc181d2cc25e154b6f3c6f221345a3.jpg,720,1280,1,154,527,519,716 -PUZZLE_COURTYARD_S_B_frame_0940_jpg.rf.39fc181d2cc25e154b6f3c6f221345a3.jpg,720,1280,2,618,675,806,717 -CARDS_OFFICE_H_T_frame_2086_jpg.rf.3a00d6c7f96b301bbd0311b2c0b801ca.jpg,720,1280,1,287,652,361,714 -CARDS_OFFICE_H_T_frame_2086_jpg.rf.3a00d6c7f96b301bbd0311b2c0b801ca.jpg,720,1280,2,618,502,1061,718 -CARDS_OFFICE_T_H_frame_1108_jpg.rf.3a068fe93f16a567e6d2ee49f36f432f.jpg,720,1280,1,374,660,440,719 -CARDS_OFFICE_T_H_frame_1108_jpg.rf.3a068fe93f16a567e6d2ee49f36f432f.jpg,720,1280,2,666,499,963,719 -CARDS_LIVINGROOM_H_S_frame_1485_jpg.rf.3a088dfeed65de3648b7beaffc869327.jpg,720,1280,1,262,588,545,719 -CARDS_LIVINGROOM_H_S_frame_1485_jpg.rf.3a088dfeed65de3648b7beaffc869327.jpg,720,1280,2,748,459,1016,719 -PUZZLE_OFFICE_S_T_frame_2433_jpg.rf.3a34515e1c046cff1c799bc56f4064b2.jpg,720,1280,2,676,671,836,718 -PUZZLE_COURTYARD_S_B_frame_1257_jpg.rf.3a36d982f8cae420798e8affc4b81e8d.jpg,720,1280,1,5,378,357,716 -PUZZLE_COURTYARD_S_B_frame_1257_jpg.rf.3a36d982f8cae420798e8affc4b81e8d.jpg,720,1280,2,565,570,955,718 -CHESS_LIVINGROOM_H_T_frame_0304_jpg.rf.3a62420abd3def97460c6dc2912e672d.jpg,720,1280,1,1,544,241,718 -CHESS_LIVINGROOM_H_T_frame_0304_jpg.rf.3a62420abd3def97460c6dc2912e672d.jpg,720,1280,2,652,366,1171,703 -PUZZLE_COURTYARD_T_H_frame_0323_jpg.rf.3a678b0e84845c97c348af432095456e.jpg,720,1280,1,79,674,302,718 -PUZZLE_OFFICE_H_B_frame_1006_jpg.rf.3a6dc6de007f56246c00a6f930bb1026.jpg,720,1280,1,215,555,449,719 -PUZZLE_OFFICE_H_B_frame_1006_jpg.rf.3a6dc6de007f56246c00a6f930bb1026.jpg,720,1280,2,906,697,1078,719 -CHESS_COURTYARD_T_B_frame_1231_jpg.rf.3a7e2599f6b34f7040abd282d0adc8f1.jpg,720,1280,1,1,618,274,718 -CHESS_COURTYARD_T_B_frame_1231_jpg.rf.3a7e2599f6b34f7040abd282d0adc8f1.jpg,720,1280,2,426,668,619,719 -CHESS_OFFICE_T_H_frame_1211_jpg.rf.3a994383520d28985148f3a590075583.jpg,720,1280,1,63,663,303,717 -CHESS_OFFICE_T_H_frame_1211_jpg.rf.3a994383520d28985148f3a590075583.jpg,720,1280,2,608,268,876,474 -CHESS_LIVINGROOM_B_S_frame_1758_jpg.rf.3aa8d86360aaab8bd47164ec9fa9a2ba.jpg,720,1280,2,635,413,1168,713 -JENGA_OFFICE_B_S_frame_0669_jpg.rf.3ae92333bac55045e2ea6184eaecbed5.jpg,720,1280,2,664,528,963,718 -CHESS_LIVINGROOM_T_H_frame_1465_jpg.rf.3aea7dd1f72e60adeec1ac1e30b8ec18.jpg,720,1280,2,568,688,682,719 -CARDS_COURTYARD_T_B_frame_0016_jpg.rf.3aebddaca1b964445b0aeea253deed41.jpg,720,1280,1,210,543,488,716 -CARDS_COURTYARD_T_B_frame_0016_jpg.rf.3aebddaca1b964445b0aeea253deed41.jpg,720,1280,2,626,504,782,717 -PUZZLE_OFFICE_H_B_frame_2381_jpg.rf.3aed51aa3f366f3c437c1584762ab742.jpg,720,1280,2,533,549,735,714 -JENGA_COURTYARD_S_T_frame_2374_jpg.rf.3af468fef5a9043344658c63c2fa2a82.jpg,720,1280,1,1,242,86,718 -JENGA_COURTYARD_S_T_frame_2374_jpg.rf.3af468fef5a9043344658c63c2fa2a82.jpg,720,1280,2,630,330,902,718 -CARDS_LIVINGROOM_S_H_frame_0474_jpg.rf.3afb928c964fc26a1d6a4c6ab3bdeae4.jpg,720,1280,1,431,667,510,716 -CARDS_LIVINGROOM_S_H_frame_0474_jpg.rf.3afb928c964fc26a1d6a4c6ab3bdeae4.jpg,720,1280,2,519,655,766,718 -CARDS_LIVINGROOM_S_H_frame_0564_jpg.rf.3afff1cfa6fa0fcb4468832282a77b72.jpg,720,1280,1,260,663,484,718 -CARDS_LIVINGROOM_S_H_frame_0564_jpg.rf.3afff1cfa6fa0fcb4468832282a77b72.jpg,720,1280,2,525,659,758,716 -JENGA_LIVINGROOM_T_S_frame_0575_jpg.rf.3b1a04b5b0578a569b4ba7683f92073f.jpg,720,1280,1,9,361,435,718 -CHESS_LIVINGROOM_B_S_frame_0127_jpg.rf.3b2d79e3cd3fd1ae89c62bac77aa0e94.jpg,720,1280,2,601,353,1055,632 -JENGA_OFFICE_T_H_frame_2654_jpg.rf.3b41cf6dbdc559d566e48eea4a45e4ff.jpg,720,1280,1,176,207,463,423 -CARDS_OFFICE_B_S_frame_0140_jpg.rf.3b4f337330e4278298ed5d3a8bfb9f79.jpg,720,1280,2,755,441,1011,650 -PUZZLE_LIVINGROOM_T_B_frame_1911_jpg.rf.3b6eb1f2da2deb9a9980aabff7a86b0d.jpg,720,1280,2,484,359,1241,708 -CHESS_LIVINGROOM_S_B_frame_0165_jpg.rf.3b92ef11d720a51fe0bffff77b588e04.jpg,720,1280,2,605,577,1023,714 -CARDS_COURTYARD_B_T_frame_1887_jpg.rf.3bb66bed132c8cddc5ecd103724ee131.jpg,720,1280,2,554,623,783,718 -JENGA_OFFICE_T_H_frame_0392_jpg.rf.3bbe98c3f81b5821b0186c0cbf1d306d.jpg,720,1280,2,600,167,895,350 -CARDS_OFFICE_B_S_frame_1033_jpg.rf.3bd347602f86b0e9f9f43e9f513458a1.jpg,720,1280,1,340,623,479,719 -CARDS_OFFICE_B_S_frame_1033_jpg.rf.3bd347602f86b0e9f9f43e9f513458a1.jpg,720,1280,2,671,644,784,719 -CHESS_COURTYARD_H_S_frame_0905_jpg.rf.3bdf7e133d6ae5a6d89041d5fa477e01.jpg,720,1280,2,493,487,692,687 -JENGA_LIVINGROOM_B_H_frame_2233_jpg.rf.3be4e32b15c45cb781ebe3c1b980b389.jpg,720,1280,2,843,700,972,718 -PUZZLE_COURTYARD_T_H_frame_2678_jpg.rf.3be7b63f485725591075fe051774db6b.jpg,720,1280,1,139,684,346,718 -PUZZLE_COURTYARD_T_H_frame_2678_jpg.rf.3be7b63f485725591075fe051774db6b.jpg,720,1280,2,527,405,978,718 -CARDS_OFFICE_H_T_frame_0208_jpg.rf.3c04798bd5dacde4fbbc199f57f8a713.jpg,720,1280,1,5,451,325,718 -CARDS_OFFICE_H_T_frame_0208_jpg.rf.3c04798bd5dacde4fbbc199f57f8a713.jpg,720,1280,2,511,284,771,573 -JENGA_LIVINGROOM_T_S_frame_2231_jpg.rf.3c0d1dff372e103437949d75e15b9b6d.jpg,720,1280,2,520,246,910,541 -CARDS_OFFICE_B_S_frame_0716_jpg.rf.3c143c7691ea88b559c0f91d4535e7a8.jpg,720,1280,1,406,695,464,718 -CARDS_OFFICE_B_S_frame_0716_jpg.rf.3c143c7691ea88b559c0f91d4535e7a8.jpg,720,1280,2,679,685,736,713 -PUZZLE_OFFICE_H_B_frame_2508_jpg.rf.3c177a0df0680a29125406bde6d1e984.jpg,720,1280,1,9,680,157,715 -PUZZLE_OFFICE_H_B_frame_2508_jpg.rf.3c177a0df0680a29125406bde6d1e984.jpg,720,1280,2,710,453,926,709 -CHESS_LIVINGROOM_T_H_frame_2417_jpg.rf.3c1a4ad615012e19abd1ad16b0f0c478.jpg,720,1280,1,0,331,76,545 -CHESS_LIVINGROOM_T_H_frame_2417_jpg.rf.3c1a4ad615012e19abd1ad16b0f0c478.jpg,720,1280,2,698,385,1171,718 -JENGA_COURTYARD_S_T_frame_0582_jpg.rf.3c1f985f1289a80024281c7ae4034cbc.jpg,720,1280,1,175,271,560,510 -JENGA_COURTYARD_S_T_frame_0582_jpg.rf.3c1f985f1289a80024281c7ae4034cbc.jpg,720,1280,2,506,311,877,717 -CHESS_OFFICE_B_S_frame_2035_jpg.rf.3c235067ffe6549e6fa267082ee14339.jpg,720,1280,2,689,388,1014,577 -CHESS_COURTYARD_T_B_frame_1014_jpg.rf.3c2e228ae29c891eb89c12f31a0c1d50.jpg,720,1280,1,3,592,276,718 -CHESS_COURTYARD_T_B_frame_1014_jpg.rf.3c2e228ae29c891eb89c12f31a0c1d50.jpg,720,1280,2,325,625,624,716 -PUZZLE_COURTYARD_S_B_frame_1452_jpg.rf.3c348e76725ce376b180d9c5b58a1c84.jpg,720,1280,2,563,602,847,718 -PUZZLE_COURTYARD_S_B_frame_1452_jpg.rf.3c348e76725ce376b180d9c5b58a1c84.jpg,720,1280,1,171,679,417,719 -CARDS_LIVINGROOM_B_T_frame_0840_jpg.rf.3c6fed880c239fd9acfbd24595df7ba3.jpg,720,1280,2,726,464,1037,718 -JENGA_COURTYARD_T_S_frame_2016_jpg.rf.3c7d10ee354de4e68d869091b0e7d79b.jpg,720,1280,2,556,597,742,716 -CARDS_OFFICE_H_T_frame_1769_jpg.rf.3c891ee9acaa222a5e2dcc8d2d65324b.jpg,720,1280,2,724,303,1012,616 -PUZZLE_OFFICE_T_S_frame_1555_jpg.rf.3cbacdcc88f3d2c6c174e20c4430141e.jpg,720,1280,2,581,555,857,719 -PUZZLE_COURTYARD_B_S_frame_2347_jpg.rf.3cd44824d43100c3db297a66f6b7b1ec.jpg,720,1280,1,513,599,787,719 -PUZZLE_COURTYARD_B_S_frame_2347_jpg.rf.3cd44824d43100c3db297a66f6b7b1ec.jpg,720,1280,2,852,495,1133,719 -PUZZLE_LIVINGROOM_H_S_frame_0653_jpg.rf.3cd7d232e256dc681bfa1519b345c10c.jpg,720,1280,2,514,497,847,712 -PUZZLE_COURTYARD_H_T_frame_2573_jpg.rf.3cf23df1c31140f936426192d9b90352.jpg,720,1280,1,267,473,441,717 -PUZZLE_COURTYARD_H_T_frame_2573_jpg.rf.3cf23df1c31140f936426192d9b90352.jpg,720,1280,2,571,479,794,702 -PUZZLE_LIVINGROOM_S_H_frame_0747_jpg.rf.3cf749f6b3eabac78852bc564a9cd60b.jpg,720,1280,1,122,676,395,718 -PUZZLE_LIVINGROOM_B_T_frame_1527_jpg.rf.3d386e80fcfdb0f2ad39561550950b69.jpg,720,1280,1,3,580,474,716 -PUZZLE_LIVINGROOM_B_T_frame_1527_jpg.rf.3d386e80fcfdb0f2ad39561550950b69.jpg,720,1280,2,595,609,1125,719 -CHESS_LIVINGROOM_S_B_frame_0842_jpg.rf.3d45d6948c9926ca2d01990346bfb9ac.jpg,720,1280,2,601,502,1126,718 -CARDS_LIVINGROOM_B_T_frame_1277_jpg.rf.3d4b030abacfa173e554ed21085c4d37.jpg,720,1280,2,700,678,811,718 -CHESS_OFFICE_B_S_frame_0263_jpg.rf.3d5930fe81667407267b4d2764da759c.jpg,720,1280,2,692,523,989,717 -CHESS_OFFICE_S_B_frame_2442_jpg.rf.3d5b863d9d0ed16e17dfbf8e43600132.jpg,720,1280,1,0,497,280,719 -CHESS_OFFICE_S_B_frame_2442_jpg.rf.3d5b863d9d0ed16e17dfbf8e43600132.jpg,720,1280,2,672,577,919,719 -JENGA_COURTYARD_H_B_frame_1069_jpg.rf.3e0cfac767ed110fbfcbb240ad0bced0.jpg,720,1280,2,580,326,811,714 -JENGA_COURTYARD_S_T_frame_2393_jpg.rf.3e923442ab1ef7fbef2a7d0e1e31c449.jpg,720,1280,1,1,664,163,713 -JENGA_COURTYARD_S_T_frame_2393_jpg.rf.3e923442ab1ef7fbef2a7d0e1e31c449.jpg,720,1280,2,468,425,891,718 -JENGA_COURTYARD_H_B_frame_1562_jpg.rf.3ea5ca8864ad12b8a61415cb99c6f45c.jpg,720,1280,2,554,394,813,716 -CHESS_COURTYARD_H_S_frame_2609_jpg.rf.3eb23b97b692d41c0ae3bb72d3d40dc0.jpg,720,1280,1,316,603,531,718 -CHESS_COURTYARD_H_S_frame_2609_jpg.rf.3eb23b97b692d41c0ae3bb72d3d40dc0.jpg,720,1280,2,704,436,952,713 -PUZZLE_COURTYARD_T_H_frame_1680_jpg.rf.3ef506565d87487321939138f36ec8ff.jpg,720,1280,2,472,260,925,665 -CHESS_LIVINGROOM_H_T_frame_0991_jpg.rf.3f16e7bb850f98ca4403c396e2e05bac.jpg,720,1280,1,1,566,211,718 -CHESS_LIVINGROOM_H_T_frame_0991_jpg.rf.3f16e7bb850f98ca4403c396e2e05bac.jpg,720,1280,2,1027,585,1279,718 -PUZZLE_COURTYARD_B_S_frame_1703_jpg.rf.3f1b769739b7572bce7e6ead38752959.jpg,720,1280,1,183,630,379,718 -PUZZLE_COURTYARD_B_S_frame_1703_jpg.rf.3f1b769739b7572bce7e6ead38752959.jpg,720,1280,2,536,474,799,687 -JENGA_OFFICE_B_S_frame_1311_jpg.rf.3f20079f5b8dd8b7ccc40b91301aca9f.jpg,720,1280,1,86,180,270,539 -JENGA_OFFICE_B_S_frame_1311_jpg.rf.3f20079f5b8dd8b7ccc40b91301aca9f.jpg,720,1280,2,464,417,750,714 -PUZZLE_LIVINGROOM_B_T_frame_0382_jpg.rf.3e3af98685e8d33754e23d839c5bd6c0.jpg,720,1280,1,2,606,86,715 -PUZZLE_LIVINGROOM_B_T_frame_0382_jpg.rf.3e3af98685e8d33754e23d839c5bd6c0.jpg,720,1280,2,635,532,1056,716 -CARDS_OFFICE_H_T_frame_0640_jpg.rf.3f3e607a9ce5c1118cc568c6e1d6a7ba.jpg,720,1280,1,236,559,450,718 -CARDS_OFFICE_H_T_frame_0640_jpg.rf.3f3e607a9ce5c1118cc568c6e1d6a7ba.jpg,720,1280,2,630,563,907,718 -CARDS_COURTYARD_T_B_frame_1937_jpg.rf.3f4bc3fc921f99899b63c991747099a3.jpg,720,1280,1,158,572,492,718 -CARDS_COURTYARD_T_B_frame_1937_jpg.rf.3f4bc3fc921f99899b63c991747099a3.jpg,720,1280,2,546,494,897,717 -JENGA_OFFICE_B_S_frame_0812_jpg.rf.3f61627fa4d7ec72f269cf565f0c2ee9.jpg,720,1280,2,658,440,942,716 -CARDS_OFFICE_B_S_frame_1554_jpg.rf.3f6a5b75e7ae4ffa736aefa711e316c0.jpg,720,1280,2,642,634,792,718 -CHESS_COURTYARD_H_S_frame_1068_jpg.rf.3f709c6b67be28324d3d915330650a80.jpg,720,1280,2,784,582,1018,716 -JENGA_LIVINGROOM_H_B_frame_1668_jpg.rf.3f784870afaea7b399b30f00d2233794.jpg,720,1280,2,639,385,886,694 -JENGA_LIVINGROOM_H_B_frame_1668_jpg.rf.3f784870afaea7b399b30f00d2233794.jpg,720,1280,1,153,655,398,719 -JENGA_OFFICE_B_S_frame_0964_jpg.rf.3fcf884d33eb82646810c76aa1913f88.jpg,720,1280,1,2,556,337,718 -JENGA_OFFICE_B_S_frame_0964_jpg.rf.3fcf884d33eb82646810c76aa1913f88.jpg,720,1280,2,569,189,825,402 -CARDS_COURTYARD_T_B_frame_2438_jpg.rf.3ff8d658986c376823de2aeff960c63e.jpg,720,1280,1,296,675,408,718 -CARDS_COURTYARD_T_B_frame_2438_jpg.rf.3ff8d658986c376823de2aeff960c63e.jpg,720,1280,2,547,568,883,718 -JENGA_LIVINGROOM_T_S_frame_0685_jpg.rf.4007c81cb9ee2f7d7ecaf9989a2316bf.jpg,720,1280,1,16,318,388,674 -JENGA_LIVINGROOM_T_S_frame_0685_jpg.rf.4007c81cb9ee2f7d7ecaf9989a2316bf.jpg,720,1280,2,556,330,939,661 -PUZZLE_COURTYARD_B_S_frame_1566_jpg.rf.40217676c47d06dd7bae993a075be0e0.jpg,720,1280,1,179,560,413,719 -PUZZLE_COURTYARD_B_S_frame_1566_jpg.rf.40217676c47d06dd7bae993a075be0e0.jpg,720,1280,2,908,687,1098,718 -CARDS_LIVINGROOM_B_T_frame_0204_jpg.rf.403eed2418b46fe59e2923d00ecc5538.jpg,720,1280,2,628,680,821,718 -JENGA_LIVINGROOM_B_H_frame_0746_jpg.rf.4052d0704c7d9765ed0f922897ee65ef.jpg,720,1280,1,86,598,414,718 -JENGA_LIVINGROOM_B_H_frame_0746_jpg.rf.4052d0704c7d9765ed0f922897ee65ef.jpg,720,1280,2,925,483,1278,716 -PUZZLE_COURTYARD_S_B_frame_2334_jpg.rf.406c0490c237f6fd45ecec3001e1141b.jpg,720,1280,1,375,596,589,718 -PUZZLE_COURTYARD_S_B_frame_2334_jpg.rf.406c0490c237f6fd45ecec3001e1141b.jpg,720,1280,2,680,487,923,718 -PUZZLE_LIVINGROOM_B_T_frame_1150_jpg.rf.40726f5a207bfcac7d53665688a2b2e1.jpg,720,1280,2,771,451,1135,715 -JENGA_COURTYARD_H_B_frame_2511_jpg.rf.406d3c05c4fdd48f3bee6d498fb10a6a.jpg,720,1280,2,522,279,828,657 -CHESS_LIVINGROOM_H_T_frame_0234_jpg.rf.4081c060ab42b7c22449260d9ff653cf.jpg,720,1280,1,12,424,298,714 -CHESS_LIVINGROOM_H_T_frame_0234_jpg.rf.4081c060ab42b7c22449260d9ff653cf.jpg,720,1280,2,1037,546,1279,718 -PUZZLE_COURTYARD_B_S_frame_1176_jpg.rf.407b892e7ea42d4efbaadd5839293d26.jpg,720,1280,1,179,659,403,718 -PUZZLE_COURTYARD_B_S_frame_1176_jpg.rf.407b892e7ea42d4efbaadd5839293d26.jpg,720,1280,2,460,588,823,719 -CHESS_LIVINGROOM_B_S_frame_1932_jpg.rf.40832ad33ed4c97170a15d147ed2a08f.jpg,720,1280,2,642,437,1096,710 -CARDS_OFFICE_S_B_frame_0396_jpg.rf.4090bfd1b810c193c70a9bae80957fe5.jpg,720,1280,1,265,440,460,717 -CARDS_LIVINGROOM_S_H_frame_0637_jpg.rf.40b4d754bf681649d5426f3daefe43ec.jpg,720,1280,1,211,650,469,718 -CARDS_LIVINGROOM_S_H_frame_0637_jpg.rf.40b4d754bf681649d5426f3daefe43ec.jpg,720,1280,2,498,659,724,718 -CARDS_COURTYARD_T_B_frame_0331_jpg.rf.413eb4effdb741ce5c9ed4d301ab241d.jpg,720,1280,1,162,482,478,718 -CARDS_COURTYARD_T_B_frame_0331_jpg.rf.413eb4effdb741ce5c9ed4d301ab241d.jpg,720,1280,2,564,473,972,717 -PUZZLE_OFFICE_H_B_frame_2082_jpg.rf.413569e68efd3df3c1177f7303ca949a.jpg,720,1280,1,87,466,538,719 -PUZZLE_OFFICE_H_B_frame_2082_jpg.rf.413569e68efd3df3c1177f7303ca949a.jpg,720,1280,2,678,391,888,616 -PUZZLE_COURTYARD_T_H_frame_0695_jpg.rf.41701f4db504167c6173ee05ab74fcc4.jpg,720,1280,2,514,400,965,718 -PUZZLE_COURTYARD_T_H_frame_0695_jpg.rf.41701f4db504167c6173ee05ab74fcc4.jpg,720,1280,1,3,451,406,718 -PUZZLE_COURTYARD_T_H_frame_1641_jpg.rf.418b487e17cdf94d74b25b13e74e77a8.jpg,720,1280,2,505,411,976,718 -PUZZLE_COURTYARD_T_H_frame_1641_jpg.rf.418b487e17cdf94d74b25b13e74e77a8.jpg,720,1280,1,5,619,465,718 -CARDS_LIVINGROOM_B_T_frame_2565_jpg.rf.41b778bb971781054e9abd1af495c779.jpg,720,1280,2,654,544,997,718 -JENGA_LIVINGROOM_S_T_frame_2397_jpg.rf.41bf22110671b3bae9f33308ba351033.jpg,720,1280,1,1,335,200,718 -JENGA_LIVINGROOM_S_T_frame_2397_jpg.rf.41bf22110671b3bae9f33308ba351033.jpg,720,1280,2,520,428,963,718 -PUZZLE_LIVINGROOM_T_B_frame_1643_jpg.rf.41bf968d29f7b20f35e9b03c8bbd58cb.jpg,720,1280,2,341,347,841,696 -PUZZLE_LIVINGROOM_T_B_frame_1643_jpg.rf.41bf968d29f7b20f35e9b03c8bbd58cb.jpg,720,1280,1,0,496,341,719 -CARDS_OFFICE_B_S_frame_1508_jpg.rf.41e75db0ff4c9898825f8fc8eff4e540.jpg,720,1280,1,295,639,419,717 -CARDS_OFFICE_B_S_frame_1508_jpg.rf.41e75db0ff4c9898825f8fc8eff4e540.jpg,720,1280,2,686,611,870,718 -CARDS_OFFICE_H_T_frame_0460_jpg.rf.422dde295939fcba699c77c01accc7bf.jpg,720,1280,1,194,657,287,712 -CARDS_OFFICE_H_T_frame_0460_jpg.rf.422dde295939fcba699c77c01accc7bf.jpg,720,1280,2,547,440,961,718 -CARDS_COURTYARD_B_T_frame_1930_jpg.rf.4231fbda52b92d6122b1e7d6d039f8f6.jpg,720,1280,2,630,704,663,718 -CHESS_COURTYARD_H_S_frame_1254_jpg.rf.42389ffdb5384db66767381707320750.jpg,720,1280,2,634,419,853,590 -JENGA_LIVINGROOM_T_S_frame_0080_jpg.rf.42591ce05fdf544ad1a55b53c3d0bced.jpg,720,1280,1,83,289,450,656 -JENGA_LIVINGROOM_T_S_frame_0080_jpg.rf.42591ce05fdf544ad1a55b53c3d0bced.jpg,720,1280,2,515,271,871,590 -JENGA_OFFICE_T_H_frame_2417_jpg.rf.425b0d7ca2c2cfe4e45991461c89d305.jpg,720,1280,1,190,177,443,362 -PUZZLE_COURTYARD_B_S_frame_1662_jpg.rf.427072212ecade8428c1aea95a4f1f0b.jpg,720,1280,1,323,587,485,719 -PUZZLE_COURTYARD_B_S_frame_1662_jpg.rf.427072212ecade8428c1aea95a4f1f0b.jpg,720,1280,2,542,435,756,615 -PUZZLE_COURTYARD_S_B_frame_1090_jpg.rf.427ca90d845611d97d96dbefe2084c86.jpg,720,1280,2,607,442,791,668 -PUZZLE_COURTYARD_S_B_frame_1090_jpg.rf.427ca90d845611d97d96dbefe2084c86.jpg,720,1280,1,133,437,472,696 -CARDS_LIVINGROOM_H_S_frame_2642_jpg.rf.42815a6641f62f162609f7f47847565f.jpg,720,1280,1,264,599,386,716 -CARDS_LIVINGROOM_H_S_frame_2642_jpg.rf.42815a6641f62f162609f7f47847565f.jpg,720,1280,2,605,570,923,716 -CHESS_OFFICE_T_H_frame_1351_jpg.rf.42c22674f66a136c798f61dcf6887b23.jpg,720,1280,1,176,640,407,718 -CHESS_OFFICE_T_H_frame_1351_jpg.rf.42c22674f66a136c798f61dcf6887b23.jpg,720,1280,2,538,292,803,494 -JENGA_OFFICE_H_T_frame_1299_jpg.rf.42ce399022c9dd22788204c71c5c3032.jpg,720,1280,1,48,521,270,717 -JENGA_OFFICE_H_T_frame_1299_jpg.rf.42ce399022c9dd22788204c71c5c3032.jpg,720,1280,2,779,662,976,719 -CARDS_LIVINGROOM_H_S_frame_1924_jpg.rf.42d2890cb4590a044e5b2294a0974c95.jpg,720,1280,2,904,370,1231,719 -CARDS_LIVINGROOM_H_S_frame_1924_jpg.rf.42d2890cb4590a044e5b2294a0974c95.jpg,720,1280,1,31,481,204,716 -CHESS_COURTYARD_T_B_frame_1254_jpg.rf.42da1ba5340bdedd3c917d8922fdf2ec.jpg,720,1280,1,1,617,292,718 -CHESS_COURTYARD_T_B_frame_1254_jpg.rf.42da1ba5340bdedd3c917d8922fdf2ec.jpg,720,1280,2,461,684,616,718 -CARDS_COURTYARD_H_S_frame_2327_jpg.rf.42e68c889e96debfce4daea3fd16204d.jpg,720,1280,1,272,633,438,719 -CARDS_COURTYARD_H_S_frame_2327_jpg.rf.42e68c889e96debfce4daea3fd16204d.jpg,720,1280,2,634,315,966,615 -CHESS_LIVINGROOM_S_B_frame_1578_jpg.rf.42ed76d41e31bf0cfc5efe43851301b3.jpg,720,1280,1,139,685,361,718 -PUZZLE_LIVINGROOM_B_T_frame_2491_jpg.rf.4314ec91117e264b9e52f3fe289e3504.jpg,720,1280,1,7,528,479,719 -PUZZLE_LIVINGROOM_B_T_frame_2491_jpg.rf.4314ec91117e264b9e52f3fe289e3504.jpg,720,1280,2,525,683,831,718 -JENGA_LIVINGROOM_T_S_frame_1136_jpg.rf.4330cf95c38d00b3070fd455fc2a4693.jpg,720,1280,1,5,677,208,717 -JENGA_LIVINGROOM_T_S_frame_1136_jpg.rf.4330cf95c38d00b3070fd455fc2a4693.jpg,720,1280,2,524,453,865,717 -PUZZLE_LIVINGROOM_T_B_frame_0131_jpg.rf.433610eaa9cc184369c27ccb71bd7d84.jpg,720,1280,1,1,351,191,716 -PUZZLE_LIVINGROOM_T_B_frame_0131_jpg.rf.433610eaa9cc184369c27ccb71bd7d84.jpg,720,1280,2,526,598,976,717 -JENGA_COURTYARD_S_T_frame_1836_jpg.rf.433c3966ffdf38a599c65512a2fb641c.jpg,720,1280,1,154,519,382,718 -JENGA_COURTYARD_S_T_frame_1836_jpg.rf.433c3966ffdf38a599c65512a2fb641c.jpg,720,1280,2,560,391,953,651 -JENGA_COURTYARD_T_S_frame_0356_jpg.rf.434109a7780804e48c55cc4b03a556f9.jpg,720,1280,1,106,479,449,714 -JENGA_COURTYARD_T_S_frame_0356_jpg.rf.434109a7780804e48c55cc4b03a556f9.jpg,720,1280,2,522,433,860,713 -CARDS_LIVINGROOM_S_H_frame_2066_jpg.rf.4345aa413061d0d46049ff3f3aa6b305.jpg,720,1280,2,639,400,936,718 -CARDS_LIVINGROOM_S_H_frame_1044_jpg.rf.436da1b6dc7a0c707def958adec76eeb.jpg,720,1280,1,112,511,449,718 -CARDS_LIVINGROOM_S_H_frame_1044_jpg.rf.436da1b6dc7a0c707def958adec76eeb.jpg,720,1280,2,469,551,768,718 -CHESS_LIVINGROOM_T_H_frame_1190_jpg.rf.436ee75172ec6ef92293f5e6b20115aa.jpg,720,1280,2,112,181,588,498 -CARDS_OFFICE_B_S_frame_1533_jpg.rf.4384970b4f2f18cc1f2933ce6b060097.jpg,720,1280,2,675,613,825,718 -CARDS_OFFICE_B_S_frame_1533_jpg.rf.4384970b4f2f18cc1f2933ce6b060097.jpg,720,1280,1,331,669,405,719 -CHESS_COURTYARD_S_H_frame_0354_jpg.rf.43b8fd521ec858d02966463ef9c7005c.jpg,720,1280,2,627,402,1199,718 -JENGA_COURTYARD_B_H_frame_0934_jpg.rf.43c78eeb1ab0ddf014fa2aafdc897b7f.jpg,720,1280,1,488,704,546,718 -JENGA_COURTYARD_B_H_frame_0934_jpg.rf.43c78eeb1ab0ddf014fa2aafdc897b7f.jpg,720,1280,2,671,425,931,719 -CARDS_LIVINGROOM_S_H_frame_0185_jpg.rf.43cf2ea94f45d11af175f44ee3e39c43.jpg,720,1280,1,359,648,508,714 -CARDS_LIVINGROOM_S_H_frame_0185_jpg.rf.43cf2ea94f45d11af175f44ee3e39c43.jpg,720,1280,2,643,606,895,718 -CARDS_LIVINGROOM_T_B_frame_1876_jpg.rf.44103bec2c34fa01d76e9c197af7928a.jpg,720,1280,1,11,632,85,712 -CARDS_LIVINGROOM_T_B_frame_1876_jpg.rf.44103bec2c34fa01d76e9c197af7928a.jpg,720,1280,2,626,520,1020,719 -JENGA_OFFICE_T_H_frame_0943_jpg.rf.44113f4c31dd69d6af75d93ef1cc7148.jpg,720,1280,2,564,445,823,711 -PUZZLE_COURTYARD_B_S_frame_0487_jpg.rf.441f1e927ca404f99f9c7e8b346f108e.jpg,720,1280,1,101,641,308,719 -CHESS_LIVINGROOM_T_H_frame_2254_jpg.rf.4420dbc12e76540da80abcb9a8c41516.jpg,720,1280,1,2,285,73,531 -CHESS_LIVINGROOM_T_H_frame_2254_jpg.rf.4420dbc12e76540da80abcb9a8c41516.jpg,720,1280,2,407,117,893,427 -CHESS_COURTYARD_T_B_frame_1825_jpg.rf.4438f0abc4459d10a24818b1aa0a9ba9.jpg,720,1280,1,86,607,394,717 -CHESS_COURTYARD_T_B_frame_1825_jpg.rf.4438f0abc4459d10a24818b1aa0a9ba9.jpg,720,1280,2,526,311,779,497 -CHESS_OFFICE_B_S_frame_1876_jpg.rf.4443cff618addc3fd2e7d34b1f99818d.jpg,720,1280,1,400,702,478,718 -CHESS_OFFICE_B_S_frame_1876_jpg.rf.4443cff618addc3fd2e7d34b1f99818d.jpg,720,1280,2,658,248,973,441 -PUZZLE_COURTYARD_T_H_frame_1463_jpg.rf.4444a597aafec599867d0c9c06595950.jpg,720,1280,1,3,549,188,703 -PUZZLE_COURTYARD_T_H_frame_1463_jpg.rf.4444a597aafec599867d0c9c06595950.jpg,720,1280,2,520,394,967,718 -PUZZLE_LIVINGROOM_S_H_frame_2687_jpg.rf.446ad57b0fc2501c8f43a8b010b7f28a.jpg,720,1280,1,211,413,505,638 -CARDS_LIVINGROOM_H_S_frame_2320_jpg.rf.44826bdeece984c4e9a11a19904b39a2.jpg,720,1280,2,674,513,980,719 -JENGA_LIVINGROOM_B_H_frame_0912_jpg.rf.4490f8c41d62cb6e7b047378f5743a57.jpg,720,1280,1,38,368,456,716 -JENGA_LIVINGROOM_B_H_frame_0912_jpg.rf.4490f8c41d62cb6e7b047378f5743a57.jpg,720,1280,2,612,346,956,718 -CARDS_COURTYARD_T_B_frame_2175_jpg.rf.44adcab032ed0eed41af1b0c230c5b9e.jpg,720,1280,1,448,656,528,717 -CARDS_COURTYARD_T_B_frame_2175_jpg.rf.44adcab032ed0eed41af1b0c230c5b9e.jpg,720,1280,2,682,593,981,717 -CHESS_OFFICE_S_B_frame_1765_jpg.rf.44b7344477ef79377bb8dfacdf0dc370.jpg,720,1280,1,146,625,402,719 -JENGA_LIVINGROOM_T_S_frame_1033_jpg.rf.44f8b66e3573e6634d5bfe52ddf4668a.jpg,720,1280,1,46,694,161,717 -JENGA_LIVINGROOM_T_S_frame_1033_jpg.rf.44f8b66e3573e6634d5bfe52ddf4668a.jpg,720,1280,2,545,468,893,717 -JENGA_OFFICE_B_S_frame_1426_jpg.rf.454457904f042f50a429970f834955ac.jpg,720,1280,1,247,659,420,716 -PUZZLE_OFFICE_B_H_frame_2655_jpg.rf.454672b36fd97b7440caf571350c56d1.jpg,720,1280,1,227,229,632,688 -PUZZLE_OFFICE_B_H_frame_2655_jpg.rf.454672b36fd97b7440caf571350c56d1.jpg,720,1280,2,569,148,1006,586 -CHESS_COURTYARD_T_B_frame_1670_jpg.rf.454751bc90422c8d616d615228c3e8ba.jpg,720,1280,1,24,660,275,718 -CHESS_COURTYARD_T_B_frame_1670_jpg.rf.454751bc90422c8d616d615228c3e8ba.jpg,720,1280,2,325,684,538,718 -JENGA_OFFICE_T_H_frame_1778_jpg.rf.45527da983aaa2db0e043af41e845ae4.jpg,720,1280,1,256,644,449,717 -JENGA_OFFICE_T_H_frame_1778_jpg.rf.45527da983aaa2db0e043af41e845ae4.jpg,720,1280,2,535,266,790,500 -CHESS_OFFICE_B_S_frame_0374_jpg.rf.4564d524b193b53405168af6c87fbe43.jpg,720,1280,2,627,363,887,584 -CHESS_COURTYARD_H_S_frame_1213_jpg.rf.456de3961e0fe0c556211280ee9a732f.jpg,720,1280,2,753,338,1050,561 -CARDS_LIVINGROOM_B_T_frame_2035_jpg.rf.4570bf998231fde42860bd3e77e1042a.jpg,720,1280,2,597,674,777,718 -JENGA_OFFICE_H_T_frame_1708_jpg.rf.45c679f54fb8b0a0f3fa37528bfbbf61.jpg,720,1280,1,422,288,584,638 -JENGA_OFFICE_H_T_frame_1708_jpg.rf.45c679f54fb8b0a0f3fa37528bfbbf61.jpg,720,1280,2,677,194,820,537 -CARDS_OFFICE_S_B_frame_2485_jpg.rf.45dacc400d6a3417d5151e25c748971b.jpg,720,1280,1,220,510,469,717 -PUZZLE_LIVINGROOM_B_T_frame_0912_jpg.rf.4671299a4a1a6120bb2e977a3a317e88.jpg,720,1280,1,4,531,201,705 -PUZZLE_LIVINGROOM_B_T_frame_0912_jpg.rf.4671299a4a1a6120bb2e977a3a317e88.jpg,720,1280,2,624,414,1147,717 -CARDS_OFFICE_T_H_frame_2390_jpg.rf.46a110e3819e5c42b094c86d923aff94.jpg,720,1280,1,238,702,279,719 -CARDS_OFFICE_T_H_frame_2390_jpg.rf.46a110e3819e5c42b094c86d923aff94.jpg,720,1280,2,558,613,794,719 -JENGA_OFFICE_B_S_frame_1671_jpg.rf.46a1ef0518079dad3313eba75654ff5b.jpg,720,1280,1,269,329,627,635 -JENGA_OFFICE_B_S_frame_1671_jpg.rf.46a1ef0518079dad3313eba75654ff5b.jpg,720,1280,2,724,594,1031,718 -CARDS_COURTYARD_H_S_frame_2554_jpg.rf.474e5e3ab0afd71343c8e1d1c51c8472.jpg,720,1280,1,119,496,436,718 -CARDS_COURTYARD_H_S_frame_2554_jpg.rf.474e5e3ab0afd71343c8e1d1c51c8472.jpg,720,1280,2,638,346,855,542 -CARDS_COURTYARD_T_B_frame_1849_jpg.rf.4785e9671e7a4d0df817f00fb3cb26e8.jpg,720,1280,1,209,635,308,716 -CARDS_COURTYARD_T_B_frame_1849_jpg.rf.4785e9671e7a4d0df817f00fb3cb26e8.jpg,720,1280,2,575,522,873,718 -CARDS_OFFICE_S_B_frame_0465_jpg.rf.4798bb104e7aeb24a1d96b7f87db8649.jpg,720,1280,1,315,696,488,717 -CARDS_COURTYARD_S_H_frame_0324_jpg.rf.479a4e87138ea01f9fca044fb2ab8cba.jpg,720,1280,1,152,305,393,604 -JENGA_OFFICE_B_S_frame_0391_jpg.rf.47aa6872dff6248bc89bb03262e10c6a.jpg,720,1280,1,354,693,478,718 -PUZZLE_OFFICE_H_B_frame_1019_jpg.rf.47b52d83fee165238b58305d15722a10.jpg,720,1280,1,154,517,462,717 -PUZZLE_OFFICE_H_B_frame_1019_jpg.rf.47b52d83fee165238b58305d15722a10.jpg,720,1280,2,1004,555,1277,716 -CHESS_OFFICE_S_B_frame_2507_jpg.rf.47b7179dad0ec3f004f9f97abe2c3c75.jpg,720,1280,2,681,655,880,719 -CARDS_LIVINGROOM_S_H_frame_2537_jpg.rf.47d5f1c72853cc6076875b334ec19c2d.jpg,720,1280,1,179,633,440,718 -CARDS_LIVINGROOM_S_H_frame_2537_jpg.rf.47d5f1c72853cc6076875b334ec19c2d.jpg,720,1280,2,614,655,811,718 -CARDS_COURTYARD_S_H_frame_0388_jpg.rf.47e09a43dce77a07cf06b1a5cf3edf2e.jpg,720,1280,1,266,635,510,718 -CARDS_COURTYARD_S_H_frame_0388_jpg.rf.47e09a43dce77a07cf06b1a5cf3edf2e.jpg,720,1280,2,537,686,760,718 -PUZZLE_LIVINGROOM_H_S_frame_1068_jpg.rf.47e0d857ba1d8b65733a0952341b4837.jpg,720,1280,1,2,501,366,718 -PUZZLE_LIVINGROOM_H_S_frame_1068_jpg.rf.47e0d857ba1d8b65733a0952341b4837.jpg,720,1280,2,622,594,852,707 -PUZZLE_LIVINGROOM_B_T_frame_2294_jpg.rf.47e23444525ad8c5faeb2467e8ec65fe.jpg,720,1280,1,4,547,433,719 -PUZZLE_LIVINGROOM_B_T_frame_2294_jpg.rf.47e23444525ad8c5faeb2467e8ec65fe.jpg,720,1280,2,593,494,1157,718 -CHESS_OFFICE_B_S_frame_2028_jpg.rf.4804f87c6988cf0696eb4f7d9e7020b6.jpg,720,1280,2,646,407,912,603 -PUZZLE_COURTYARD_T_H_frame_1617_jpg.rf.4819e59a471c6dbc51a1a49dc84ae05a.jpg,720,1280,2,641,320,1048,623 -JENGA_OFFICE_T_H_frame_1920_jpg.rf.482e4a917d81987364c4c28558cf4fa9.jpg,720,1280,1,291,684,447,714 -JENGA_OFFICE_T_H_frame_1920_jpg.rf.482e4a917d81987364c4c28558cf4fa9.jpg,720,1280,2,601,552,830,718 -JENGA_LIVINGROOM_S_T_frame_1136_jpg.rf.484ba03616261461561e09c6e12f2247.jpg,720,1280,1,50,608,370,718 -JENGA_LIVINGROOM_S_T_frame_1136_jpg.rf.484ba03616261461561e09c6e12f2247.jpg,720,1280,2,626,638,881,718 -CHESS_OFFICE_B_S_frame_1835_jpg.rf.485cb16a56deee874e8c52ec4dcd656a.jpg,720,1280,2,893,613,1258,714 -CHESS_OFFICE_S_B_frame_2493_jpg.rf.487f5949f340758da86d046473c41c99.jpg,720,1280,2,687,614,916,719 -CARDS_OFFICE_S_B_frame_2143_jpg.rf.4888b72fc2fdf9e7ae96050e3375c6bb.jpg,720,1280,1,341,605,576,718 -CARDS_OFFICE_S_B_frame_2143_jpg.rf.4888b72fc2fdf9e7ae96050e3375c6bb.jpg,720,1280,2,608,640,792,718 -JENGA_OFFICE_S_B_frame_2381_jpg.rf.48b98035312ab132dcdf5c767bf0e837.jpg,720,1280,2,560,433,823,712 -JENGA_COURTYARD_S_T_frame_0446_jpg.rf.48c35c76ec3a4e3471e22dcf41e8fbed.jpg,720,1280,2,656,663,754,716 -PUZZLE_LIVINGROOM_S_H_frame_0890_jpg.rf.48c5654d61e6b331f830629b4c2cbb9e.jpg,720,1280,2,639,515,1010,718 -CHESS_LIVINGROOM_T_H_frame_2271_jpg.rf.48f14948d27f8ed2c5970a67b7b369c9.jpg,720,1280,1,3,327,38,533 -CHESS_LIVINGROOM_T_H_frame_2271_jpg.rf.48f14948d27f8ed2c5970a67b7b369c9.jpg,720,1280,2,314,153,735,452 -PUZZLE_OFFICE_H_B_frame_2501_jpg.rf.48f63fbc2d40dd594bb8151f473570a4.jpg,720,1280,1,1,636,122,719 -PUZZLE_OFFICE_H_B_frame_2501_jpg.rf.48f63fbc2d40dd594bb8151f473570a4.jpg,720,1280,2,675,375,940,666 -CHESS_OFFICE_B_S_frame_2605_jpg.rf.48fbbf99bef43d9f24e867fd87312312.jpg,720,1280,2,717,504,1075,700 -JENGA_OFFICE_B_S_frame_0610_jpg.rf.491c71354870664812ea1508e9960819.jpg,720,1280,2,459,446,787,717 -JENGA_COURTYARD_T_S_frame_1644_jpg.rf.49254efd388c8fae56c92b0cb5551a26.jpg,720,1280,1,98,394,414,631 -CHESS_LIVINGROOM_H_T_frame_0151_jpg.rf.494b92169fcdeb903fd419bb9f2d7776.jpg,720,1280,1,1,515,279,716 -CHESS_LIVINGROOM_H_T_frame_0151_jpg.rf.494b92169fcdeb903fd419bb9f2d7776.jpg,720,1280,2,997,546,1279,718 -JENGA_LIVINGROOM_B_H_frame_2240_jpg.rf.49553489e94d941b310b862f0d17e83b.jpg,720,1280,2,844,692,977,719 -PUZZLE_LIVINGROOM_H_S_frame_1195_jpg.rf.495c20422e856a2340967eaffb79d41c.jpg,720,1280,1,121,562,409,714 -PUZZLE_LIVINGROOM_H_S_frame_1195_jpg.rf.495c20422e856a2340967eaffb79d41c.jpg,720,1280,2,818,636,1082,715 -CHESS_LIVINGROOM_B_S_frame_1308_jpg.rf.496aafc419311cc9115021975464942b.jpg,720,1280,2,641,347,959,553 -CARDS_COURTYARD_H_S_frame_2071_jpg.rf.496af5fdc1f8f6a7a51c2d435b2058ad.jpg,720,1280,1,151,537,468,719 -CARDS_COURTYARD_H_S_frame_2071_jpg.rf.496af5fdc1f8f6a7a51c2d435b2058ad.jpg,720,1280,2,773,318,976,608 -CARDS_LIVINGROOM_S_H_frame_0245_jpg.rf.4970eef6285b0b3089573086160d2a51.jpg,720,1280,1,395,693,497,718 -CARDS_LIVINGROOM_S_H_frame_0245_jpg.rf.4970eef6285b0b3089573086160d2a51.jpg,720,1280,2,535,589,823,718 -CHESS_COURTYARD_T_B_frame_1623_jpg.rf.497ccb582f9b81edb4c99d123a9115c7.jpg,720,1280,1,126,679,341,718 -PUZZLE_LIVINGROOM_T_B_frame_0252_jpg.rf.49a89e7b0845a837034dc4744aaae371.jpg,720,1280,1,9,347,377,709 -PUZZLE_LIVINGROOM_T_B_frame_0252_jpg.rf.49a89e7b0845a837034dc4744aaae371.jpg,720,1280,2,532,329,1008,684 -PUZZLE_COURTYARD_T_H_frame_1499_jpg.rf.49b9626a210183fe11def784006595c2.jpg,720,1280,1,7,667,225,718 -CHESS_OFFICE_H_T_frame_0837_jpg.rf.49bec8597c6d9eade39c44bcd85c5aa5.jpg,720,1280,2,715,469,1078,716 -CHESS_OFFICE_T_H_frame_1656_jpg.rf.49cf7a6f5339e48533726bc40ba6abf9.jpg,720,1280,1,43,293,432,490 -CHESS_OFFICE_T_H_frame_1656_jpg.rf.49cf7a6f5339e48533726bc40ba6abf9.jpg,720,1280,2,505,618,766,718 -CARDS_LIVINGROOM_S_H_frame_0780_jpg.rf.49f8dbce0da001acde890e9b008d7b89.jpg,720,1280,1,199,692,294,718 -CARDS_COURTYARD_T_B_frame_1969_jpg.rf.49f9663789e9357fddd356c1eb47b3c7.jpg,720,1280,1,217,584,515,718 -CARDS_COURTYARD_T_B_frame_1969_jpg.rf.49f9663789e9357fddd356c1eb47b3c7.jpg,720,1280,2,589,501,1006,718 -JENGA_OFFICE_H_T_frame_2018_jpg.rf.4a3c6d089deff4264ba74a96463a5cf1.jpg,720,1280,1,332,229,493,594 -JENGA_OFFICE_H_T_frame_2018_jpg.rf.4a3c6d089deff4264ba74a96463a5cf1.jpg,720,1280,2,525,309,857,662 -CHESS_LIVINGROOM_H_T_frame_0617_jpg.rf.4a477ea4d871467fc5077c10d47f2f45.jpg,720,1280,1,1,561,298,716 -CHESS_LIVINGROOM_H_T_frame_0617_jpg.rf.4a477ea4d871467fc5077c10d47f2f45.jpg,720,1280,2,662,252,1222,629 -PUZZLE_COURTYARD_S_B_frame_1460_jpg.rf.4a4c1fc39f2216c148c0f69534d3f209.jpg,720,1280,1,179,684,453,718 -PUZZLE_COURTYARD_S_B_frame_1460_jpg.rf.4a4c1fc39f2216c148c0f69534d3f209.jpg,720,1280,2,564,574,852,718 -PUZZLE_LIVINGROOM_B_T_frame_1842_jpg.rf.4a5ca388f60df39e1ddf7cf662d1fc75.jpg,720,1280,2,598,361,840,560 -PUZZLE_OFFICE_B_H_frame_0502_jpg.rf.4a678544ca4a54045b70bc1f2e581611.jpg,720,1280,1,100,627,374,715 -PUZZLE_OFFICE_B_H_frame_0502_jpg.rf.4a678544ca4a54045b70bc1f2e581611.jpg,720,1280,2,845,575,1122,718 -CHESS_COURTYARD_T_B_frame_2082_jpg.rf.4a802d8d1373155348bf57558f5e27d7.jpg,720,1280,1,5,631,175,718 -CHESS_COURTYARD_T_B_frame_2082_jpg.rf.4a802d8d1373155348bf57558f5e27d7.jpg,720,1280,2,559,344,961,642 -PUZZLE_OFFICE_S_T_frame_2029_jpg.rf.4ad08b55889ec1e853cc6d86b7bd9d72.jpg,720,1280,1,291,681,395,716 -PUZZLE_OFFICE_S_T_frame_2029_jpg.rf.4ad08b55889ec1e853cc6d86b7bd9d72.jpg,720,1280,2,579,573,930,718 -CHESS_OFFICE_S_B_frame_2279_jpg.rf.4ae355e2a9de53a388250e5c8e4489d3.jpg,720,1280,2,967,589,1243,719 -PUZZLE_LIVINGROOM_T_B_frame_1575_jpg.rf.4ae52db8db6091d37d5c49daf3cf8e75.jpg,720,1280,1,7,522,304,718 -PUZZLE_LIVINGROOM_T_B_frame_1575_jpg.rf.4ae52db8db6091d37d5c49daf3cf8e75.jpg,720,1280,2,494,358,1142,718 -JENGA_COURTYARD_S_T_frame_0721_jpg.rf.4ae7d75f57cad5abbc5a71f40bc241e1.jpg,720,1280,1,84,588,325,718 -JENGA_COURTYARD_S_T_frame_0721_jpg.rf.4ae7d75f57cad5abbc5a71f40bc241e1.jpg,720,1280,2,534,573,791,718 -CARDS_COURTYARD_H_S_frame_1530_jpg.rf.4b0b5c4b7d2f108891bb53355feadd50.jpg,720,1280,1,246,610,483,719 -CARDS_COURTYARD_H_S_frame_1530_jpg.rf.4b0b5c4b7d2f108891bb53355feadd50.jpg,720,1280,2,638,495,891,719 -CHESS_LIVINGROOM_S_B_frame_0737_jpg.rf.4b0f2474410dbda5f6a5606f84417269.jpg,720,1280,2,754,544,1042,714 -JENGA_LIVINGROOM_H_B_frame_0783_jpg.rf.4b101acbdeee9ab81539db4494c78d1b.jpg,720,1280,2,786,333,1040,672 -JENGA_OFFICE_T_H_frame_0390_jpg.rf.4b114efc9577e91cb0a8542b6979d821.jpg,720,1280,2,586,189,888,374 -JENGA_LIVINGROOM_T_S_frame_2559_jpg.rf.4b1fe1df2909ec70c0704c77720e4e45.jpg,720,1280,1,9,414,319,719 -CARDS_COURTYARD_H_S_frame_1396_jpg.rf.4b357dd5f98e007211d504fce27acbfe.jpg,720,1280,1,97,512,481,719 -CARDS_COURTYARD_H_S_frame_1396_jpg.rf.4b357dd5f98e007211d504fce27acbfe.jpg,720,1280,2,630,445,908,719 -CHESS_COURTYARD_S_H_frame_1865_jpg.rf.4b3f8ed72dfabcdacad31b2c3be6d085.jpg,720,1280,2,567,330,1196,717 -JENGA_LIVINGROOM_S_T_frame_1170_jpg.rf.4b42ea598be7c9efa99a90c3983cd352.jpg,720,1280,1,160,672,315,718 -JENGA_LIVINGROOM_S_T_frame_1170_jpg.rf.4b42ea598be7c9efa99a90c3983cd352.jpg,720,1280,2,730,714,762,718 -CHESS_COURTYARD_H_S_frame_1898_jpg.rf.4b444577f72080fb9d709feb8fa8e93a.jpg,720,1280,2,795,403,1037,627 -CHESS_COURTYARD_H_S_frame_1898_jpg.rf.4b444577f72080fb9d709feb8fa8e93a.jpg,720,1280,1,370,567,591,718 -PUZZLE_COURTYARD_B_S_frame_1608_jpg.rf.4b45cc8f89f38b12f8fdbab209836921.jpg,720,1280,1,255,585,493,719 -PUZZLE_COURTYARD_B_S_frame_1608_jpg.rf.4b45cc8f89f38b12f8fdbab209836921.jpg,720,1280,2,637,580,906,719 -PUZZLE_LIVINGROOM_T_B_frame_0224_jpg.rf.4b5175ed8d04213ee4180124c33c0355.jpg,720,1280,1,1,469,204,718 -PUZZLE_LIVINGROOM_T_B_frame_0224_jpg.rf.4b5175ed8d04213ee4180124c33c0355.jpg,720,1280,2,523,630,1018,716 -PUZZLE_COURTYARD_T_H_frame_1024_jpg.rf.4b588fb278f1c5047b49d56e4361f016.jpg,720,1280,2,357,269,806,553 -PUZZLE_COURTYARD_T_H_frame_1024_jpg.rf.4b588fb278f1c5047b49d56e4361f016.jpg,720,1280,1,1,462,357,718 -CARDS_OFFICE_B_S_frame_0917_jpg.rf.4b735c23eef0332974e5159142ea13cc.jpg,720,1280,1,381,689,440,718 -CARDS_OFFICE_B_S_frame_0917_jpg.rf.4b735c23eef0332974e5159142ea13cc.jpg,720,1280,2,588,636,807,718 -JENGA_LIVINGROOM_H_B_frame_0333_jpg.rf.4ba08cce0bb96cdde2f3c5eb02ebe37a.jpg,720,1280,2,887,256,1203,656 -CHESS_COURTYARD_H_S_frame_0804_jpg.rf.4bcb4375d494c745d9f86cf71704f9d0.jpg,720,1280,2,612,684,752,717 -CHESS_COURTYARD_T_B_frame_1342_jpg.rf.4bd1b7cc1524b2efdb23665ba4bdd52d.jpg,720,1280,1,1,547,272,717 -CHESS_COURTYARD_T_B_frame_1342_jpg.rf.4bd1b7cc1524b2efdb23665ba4bdd52d.jpg,720,1280,2,486,698,604,718 -CHESS_OFFICE_T_H_frame_1392_jpg.rf.4be000faec29155654a5c699d33ad13d.jpg,720,1280,2,630,540,880,712 -PUZZLE_OFFICE_H_B_frame_1018_jpg.rf.4be669c2446528a223ef99a0c181ef1c.jpg,720,1280,1,180,539,458,713 -PUZZLE_OFFICE_H_B_frame_1018_jpg.rf.4be669c2446528a223ef99a0c181ef1c.jpg,720,1280,2,999,556,1279,719 -JENGA_COURTYARD_T_S_frame_0314_jpg.rf.4becd60b8fbe4511887f84d0400cb90b.jpg,720,1280,1,97,440,412,713 -CARDS_OFFICE_H_T_frame_0303_jpg.rf.4bf2b15cebbdc21dbf2faf6be74d26d5.jpg,720,1280,1,185,601,336,718 -CARDS_OFFICE_H_T_frame_0303_jpg.rf.4bf2b15cebbdc21dbf2faf6be74d26d5.jpg,720,1280,2,602,425,1100,702 -CHESS_COURTYARD_T_B_frame_1345_jpg.rf.4c2f99794f1acd0a930364268fb10fa5.jpg,720,1280,1,59,647,307,716 -CHESS_COURTYARD_T_B_frame_1345_jpg.rf.4c2f99794f1acd0a930364268fb10fa5.jpg,720,1280,2,476,692,620,718 -PUZZLE_OFFICE_B_H_frame_0938_jpg.rf.4c5826cf478487b799de4a6206902841.jpg,720,1280,1,211,418,535,649 -PUZZLE_OFFICE_B_H_frame_0938_jpg.rf.4c5826cf478487b799de4a6206902841.jpg,720,1280,2,635,550,932,713 -JENGA_COURTYARD_H_B_frame_1167_jpg.rf.4c9786c8c347b3d06f89846d8c77dc89.jpg,720,1280,2,138,0,471,256 -PUZZLE_OFFICE_B_H_frame_0712_jpg.rf.4c993f41e447515b611b1419dfe47054.jpg,720,1280,1,162,634,456,714 -PUZZLE_OFFICE_B_H_frame_0712_jpg.rf.4c993f41e447515b611b1419dfe47054.jpg,720,1280,2,666,633,928,714 -PUZZLE_LIVINGROOM_B_T_frame_2161_jpg.rf.4caf130d81f730f6e667f6977ad81f6c.jpg,720,1280,1,6,505,451,717 -PUZZLE_LIVINGROOM_B_T_frame_2161_jpg.rf.4caf130d81f730f6e667f6977ad81f6c.jpg,720,1280,2,552,479,1018,718 -CHESS_OFFICE_H_T_frame_1944_jpg.rf.4cc626dda798d2d22a99db6745a524a1.jpg,720,1280,2,624,273,947,493 -CARDS_OFFICE_T_H_frame_1873_jpg.rf.4ce87fa5c254781d638ef60436006f3a.jpg,720,1280,1,173,624,289,719 -CARDS_OFFICE_T_H_frame_1873_jpg.rf.4ce87fa5c254781d638ef60436006f3a.jpg,720,1280,2,484,439,881,711 -PUZZLE_COURTYARD_S_B_frame_1315_jpg.rf.4d0a39081ad7ece76acd69a5ba434671.jpg,720,1280,1,1,423,90,654 -PUZZLE_COURTYARD_S_B_frame_1315_jpg.rf.4d0a39081ad7ece76acd69a5ba434671.jpg,720,1280,2,769,654,1038,718 -JENGA_COURTYARD_T_S_frame_1745_jpg.rf.4d4281fa64381f3cf51e6110383c04a7.jpg,720,1280,1,101,307,431,549 -JENGA_COURTYARD_T_S_frame_1745_jpg.rf.4d4281fa64381f3cf51e6110383c04a7.jpg,720,1280,2,649,472,880,718 -PUZZLE_COURTYARD_B_S_frame_2044_jpg.rf.4d4446bc048e6bc836582fb58d5cd9fb.jpg,720,1280,1,422,541,702,719 -PUZZLE_COURTYARD_B_S_frame_2044_jpg.rf.4d4446bc048e6bc836582fb58d5cd9fb.jpg,720,1280,2,717,535,1018,719 -JENGA_OFFICE_T_H_frame_2456_jpg.rf.4d46d707249f0b79f39de4319e273b79.jpg,720,1280,1,125,657,296,714 -CHESS_OFFICE_T_H_frame_0234_jpg.rf.4d4a6edfddebf6bf1abec7e6a47d76a1.jpg,720,1280,2,571,297,876,487 -CARDS_COURTYARD_T_B_frame_0427_jpg.rf.4d907751ec42f2a1e686fcc2b4413888.jpg,720,1280,1,135,597,419,718 -CARDS_COURTYARD_T_B_frame_0427_jpg.rf.4d907751ec42f2a1e686fcc2b4413888.jpg,720,1280,2,546,555,833,717 -CARDS_OFFICE_T_H_frame_2013_jpg.rf.4da157fd4a42916d007dc1f85bd7b8c7.jpg,720,1280,2,614,482,836,700 -CHESS_LIVINGROOM_H_T_frame_1147_jpg.rf.4da59796b41ad549f5dc2ee638e44ef6.jpg,720,1280,1,1,538,368,718 -CHESS_LIVINGROOM_H_T_frame_1147_jpg.rf.4da59796b41ad549f5dc2ee638e44ef6.jpg,720,1280,2,465,305,768,557 -CARDS_OFFICE_B_S_frame_0340_jpg.rf.4dbf957b358876589ca9b2b40e3df112.jpg,720,1280,2,662,705,701,718 -JENGA_OFFICE_H_T_frame_2302_jpg.rf.4e08a111e58aef190fd567f6970491be.jpg,720,1280,1,176,563,464,713 -JENGA_OFFICE_H_T_frame_2302_jpg.rf.4e08a111e58aef190fd567f6970491be.jpg,720,1280,2,580,491,980,717 -CHESS_LIVINGROOM_H_T_frame_0042_jpg.rf.4e3c01b9dccddbe9dbeb22e1a2492314.jpg,720,1280,2,855,538,1256,718 -CHESS_OFFICE_T_H_frame_1952_jpg.rf.4e4f6d76ee423a3dc6ec096d22ab8501.jpg,720,1280,1,133,584,358,718 -CHESS_OFFICE_T_H_frame_1952_jpg.rf.4e4f6d76ee423a3dc6ec096d22ab8501.jpg,720,1280,2,320,606,587,718 -CARDS_OFFICE_T_H_frame_1952_jpg.rf.4e7a852375778f279e52fc1bddfc04f5.jpg,720,1280,1,179,664,285,719 -CARDS_OFFICE_T_H_frame_1952_jpg.rf.4e7a852375778f279e52fc1bddfc04f5.jpg,720,1280,2,620,681,732,719 -JENGA_COURTYARD_B_H_frame_1527_jpg.rf.4e8c1829cb1d9609c1066815b37df818.jpg,720,1280,1,444,697,522,718 -JENGA_COURTYARD_B_H_frame_1527_jpg.rf.4e8c1829cb1d9609c1066815b37df818.jpg,720,1280,2,839,175,1170,641 -PUZZLE_OFFICE_S_T_frame_0553_jpg.rf.4ea40667969160a085cef1c4bd8da085.jpg,720,1280,1,147,545,464,714 -PUZZLE_OFFICE_S_T_frame_0553_jpg.rf.4ea40667969160a085cef1c4bd8da085.jpg,720,1280,2,662,698,804,718 -PUZZLE_LIVINGROOM_S_H_frame_1897_jpg.rf.4eb83be210f14810789414e4470832d7.jpg,720,1280,2,529,580,855,718 -JENGA_COURTYARD_B_H_frame_0583_jpg.rf.4ec13d9ea5d284ed20fe9200b6a0f57b.jpg,720,1280,2,777,688,916,719 -PUZZLE_OFFICE_H_B_frame_1459_jpg.rf.4ed342e7de678b9f3cfa52fdc63c061e.jpg,720,1280,1,311,636,587,719 -PUZZLE_OFFICE_H_B_frame_1459_jpg.rf.4ed342e7de678b9f3cfa52fdc63c061e.jpg,720,1280,2,597,358,846,564 -CHESS_COURTYARD_T_B_frame_1762_jpg.rf.4ed4389cd922dc1193633a892c6fa4b6.jpg,720,1280,1,47,684,262,714 -CHESS_COURTYARD_T_B_frame_1762_jpg.rf.4ed4389cd922dc1193633a892c6fa4b6.jpg,720,1280,2,418,695,544,718 -JENGA_COURTYARD_B_H_frame_2519_jpg.rf.4edeeb8786aa5bc54933182bedbd3b4b.jpg,720,1280,2,725,698,815,718 -JENGA_COURTYARD_H_B_frame_0419_jpg.rf.4ef944c2ec00bbdb1e0c1c5b832b37af.jpg,720,1280,2,577,0,860,275 -JENGA_LIVINGROOM_B_H_frame_0888_jpg.rf.4f404562cc810d70e77f1c56d3f16caa.jpg,720,1280,1,30,370,465,713 -JENGA_LIVINGROOM_B_H_frame_0888_jpg.rf.4f404562cc810d70e77f1c56d3f16caa.jpg,720,1280,2,623,339,982,716 -CARDS_LIVINGROOM_T_B_frame_0615_jpg.rf.4f4433313f2b6a2a0f2f247c3b35419b.jpg,720,1280,1,19,632,192,719 -CARDS_LIVINGROOM_T_B_frame_0615_jpg.rf.4f4433313f2b6a2a0f2f247c3b35419b.jpg,720,1280,2,583,418,1112,719 -CARDS_COURTYARD_B_T_frame_1279_jpg.rf.4f5f1f98687d33b10ae86cd5dae2473a.jpg,720,1280,1,344,560,540,716 -CARDS_COURTYARD_B_T_frame_1279_jpg.rf.4f5f1f98687d33b10ae86cd5dae2473a.jpg,720,1280,2,697,552,883,718 -PUZZLE_LIVINGROOM_T_B_frame_0550_jpg.rf.4f62642e7d4d432edd43a2a759fe7118.jpg,720,1280,1,7,370,253,610 -PUZZLE_LIVINGROOM_T_B_frame_0550_jpg.rf.4f62642e7d4d432edd43a2a759fe7118.jpg,720,1280,2,588,151,1118,545 -CARDS_OFFICE_T_H_frame_0909_jpg.rf.4fb0fa1a53f30cbd4116a138348a8d74.jpg,720,1280,1,205,626,408,719 -CARDS_OFFICE_T_H_frame_0909_jpg.rf.4fb0fa1a53f30cbd4116a138348a8d74.jpg,720,1280,2,478,565,743,719 -CARDS_COURTYARD_S_H_frame_0743_jpg.rf.4fd8a119aa711f9f1160597243216a07.jpg,720,1280,2,558,383,800,688 -CARDS_OFFICE_T_H_frame_2195_jpg.rf.4ff16ea2532b9c88a36ccc92eee436a1.jpg,720,1280,1,185,609,308,719 -CARDS_OFFICE_T_H_frame_2195_jpg.rf.4ff16ea2532b9c88a36ccc92eee436a1.jpg,720,1280,2,469,512,815,719 -CARDS_LIVINGROOM_H_S_frame_2645_jpg.rf.4ff5324d9d425934c60568c5dbdebc41.jpg,720,1280,1,285,634,400,718 -CARDS_LIVINGROOM_H_S_frame_2645_jpg.rf.4ff5324d9d425934c60568c5dbdebc41.jpg,720,1280,2,610,571,955,719 -PUZZLE_COURTYARD_B_S_frame_2030_jpg.rf.4ffce5917e9a3689b9c8e87fac82fd9d.jpg,720,1280,1,431,563,698,719 -PUZZLE_COURTYARD_B_S_frame_2030_jpg.rf.4ffce5917e9a3689b9c8e87fac82fd9d.jpg,720,1280,2,716,537,997,719 -CHESS_LIVINGROOM_B_S_frame_1944_jpg.rf.502bce124f5422165ca2b849267a86d0.jpg,720,1280,2,700,506,1103,717 -PUZZLE_OFFICE_B_H_frame_0909_jpg.rf.50588e514de0b8026424a713765de062.jpg,720,1280,2,939,265,1271,546 -PUZZLE_COURTYARD_B_S_frame_0612_jpg.rf.505e9771f4476c6c20d1da37e1f8687d.jpg,720,1280,2,714,496,993,687 -JENGA_OFFICE_B_S_frame_0019_jpg.rf.508e94fd77da55975b8efbf9d1b97622.jpg,720,1280,1,146,573,370,714 -JENGA_OFFICE_B_S_frame_0019_jpg.rf.508e94fd77da55975b8efbf9d1b97622.jpg,720,1280,2,748,582,939,717 -CHESS_LIVINGROOM_T_H_frame_1559_jpg.rf.50920c5009fb1aedd9a137064c8d7856.jpg,720,1280,1,1,450,24,587 -CHESS_LIVINGROOM_T_H_frame_1559_jpg.rf.50920c5009fb1aedd9a137064c8d7856.jpg,720,1280,2,600,662,803,719 -CARDS_COURTYARD_S_H_frame_1550_jpg.rf.50e109cd0b3b505e56d382f34b8c175f.jpg,720,1280,1,266,540,563,718 -CARDS_COURTYARD_S_H_frame_1550_jpg.rf.50e109cd0b3b505e56d382f34b8c175f.jpg,720,1280,2,580,530,840,718 -CARDS_OFFICE_T_H_frame_2622_jpg.rf.50e4e2764f0afa7d3c7ec09c326eba1c.jpg,720,1280,1,221,639,438,719 -CARDS_OFFICE_T_H_frame_2622_jpg.rf.50e4e2764f0afa7d3c7ec09c326eba1c.jpg,720,1280,2,497,596,686,719 -CARDS_OFFICE_T_H_frame_2272_jpg.rf.50ebd2dc85d2997ba8e3412bb0f87f93.jpg,720,1280,2,575,681,669,719 -CARDS_LIVINGROOM_H_S_frame_0708_jpg.rf.50eed430c882049b00d9d52eb3bd8590.jpg,720,1280,2,582,577,826,719 -JENGA_COURTYARD_B_H_frame_0456_jpg.rf.50fec7683897a66490c87a36b15f77bb.jpg,720,1280,2,718,578,954,719 -PUZZLE_OFFICE_S_T_frame_0245_jpg.rf.50f9a9da7680c133a8b1c99500ef168f.jpg,720,1280,1,100,367,400,687 -PUZZLE_OFFICE_S_T_frame_0245_jpg.rf.50f9a9da7680c133a8b1c99500ef168f.jpg,720,1280,2,507,333,837,672 -CARDS_LIVINGROOM_T_B_frame_2506_jpg.rf.511d2ca3b7aa0e65c0f3f5103d1e7409.jpg,720,1280,1,7,508,192,714 -CARDS_LIVINGROOM_T_B_frame_2506_jpg.rf.511d2ca3b7aa0e65c0f3f5103d1e7409.jpg,720,1280,2,472,405,732,599 -PUZZLE_LIVINGROOM_H_S_frame_0650_jpg.rf.51622240c57e6968149c8bda4791db49.jpg,720,1280,2,542,507,847,712 -JENGA_COURTYARD_S_T_frame_2323_jpg.rf.5123b00de6015b9ead913947bf5fb295.jpg,720,1280,2,707,672,794,718 -CHESS_COURTYARD_S_H_frame_2112_jpg.rf.518a546ddb3f134c6dc7ec30e18b4fe4.jpg,720,1280,1,3,700,139,717 -CHESS_COURTYARD_S_H_frame_2112_jpg.rf.518a546ddb3f134c6dc7ec30e18b4fe4.jpg,720,1280,2,693,518,1162,718 -CARDS_COURTYARD_B_T_frame_1444_jpg.rf.519cc690b014e6493d86f8178723eb55.jpg,720,1280,1,416,659,616,718 -CARDS_COURTYARD_B_T_frame_1444_jpg.rf.519cc690b014e6493d86f8178723eb55.jpg,720,1280,2,724,487,965,713 -PUZZLE_OFFICE_T_S_frame_1593_jpg.rf.51b20021f672c3a510f47c4866538d69.jpg,720,1280,2,480,702,572,716 -PUZZLE_COURTYARD_T_H_frame_2518_jpg.rf.51b9091fb5c5ccda8ad3293dc95c687a.jpg,720,1280,1,1,385,402,718 -PUZZLE_COURTYARD_T_H_frame_2518_jpg.rf.51b9091fb5c5ccda8ad3293dc95c687a.jpg,720,1280,2,497,343,866,633 -PUZZLE_COURTYARD_H_T_frame_2149_jpg.rf.51bb8bb150d0674e3f1d81ae213b8296.jpg,720,1280,1,374,503,600,718 -PUZZLE_COURTYARD_H_T_frame_2149_jpg.rf.51bb8bb150d0674e3f1d81ae213b8296.jpg,720,1280,2,766,541,1025,713 -CARDS_LIVINGROOM_T_B_frame_0729_jpg.rf.51bd59a3fa2a91fc153a66c8dfec9754.jpg,720,1280,1,1,632,110,719 -CARDS_LIVINGROOM_T_B_frame_0729_jpg.rf.51bd59a3fa2a91fc153a66c8dfec9754.jpg,720,1280,2,574,562,874,719 -CARDS_COURTYARD_T_B_frame_2580_jpg.rf.51dddaa08de61a34f9d3157fdad9d93f.jpg,720,1280,1,187,623,432,718 -CARDS_COURTYARD_T_B_frame_2580_jpg.rf.51dddaa08de61a34f9d3157fdad9d93f.jpg,720,1280,2,654,374,990,629 -PUZZLE_COURTYARD_T_H_frame_1559_jpg.rf.51f2d5ba235821ea994577acf70b8c20.jpg,720,1280,1,3,447,279,718 -CHESS_OFFICE_T_H_frame_0077_jpg.rf.51fe2472fb5a750c679407077f6e3013.jpg,720,1280,1,14,437,246,675 -PUZZLE_COURTYARD_S_B_frame_0296_jpg.rf.521cec4baf0fc88fe7d557082d320f87.jpg,720,1280,2,522,532,808,718 -PUZZLE_COURTYARD_T_H_frame_1470_jpg.rf.5235f78d0be63d0bfc35070e6ff6c133.jpg,720,1280,1,3,631,287,718 -PUZZLE_COURTYARD_T_H_frame_1470_jpg.rf.5235f78d0be63d0bfc35070e6ff6c133.jpg,720,1280,2,575,635,813,718 -CARDS_LIVINGROOM_B_T_frame_2405_jpg.rf.523d1b108b64c83f7463d809aad6666e.jpg,720,1280,1,175,672,266,718 -CARDS_LIVINGROOM_B_T_frame_2405_jpg.rf.523d1b108b64c83f7463d809aad6666e.jpg,720,1280,2,652,608,838,718 -CHESS_OFFICE_S_B_frame_0640_jpg.rf.528881781397ddb2565054e365bf57f0.jpg,720,1280,1,51,558,480,719 -CHESS_OFFICE_S_B_frame_0640_jpg.rf.528881781397ddb2565054e365bf57f0.jpg,720,1280,2,612,614,1031,717 -CHESS_COURTYARD_H_S_frame_2216_jpg.rf.527199f429c5099e09256a10b979424d.jpg,720,1280,2,662,423,1023,672 -CHESS_LIVINGROOM_H_T_frame_1836_jpg.rf.52f7fd85e4bf88ef893b031ae39c47eb.jpg,720,1280,1,1,585,266,716 -CHESS_LIVINGROOM_H_T_frame_1836_jpg.rf.52f7fd85e4bf88ef893b031ae39c47eb.jpg,720,1280,2,1073,508,1279,718 -PUZZLE_OFFICE_T_S_frame_1787_jpg.rf.52f554a4d2f81c129db4be42f6989136.jpg,720,1280,1,15,305,398,655 -PUZZLE_OFFICE_T_S_frame_1787_jpg.rf.52f554a4d2f81c129db4be42f6989136.jpg,720,1280,2,559,290,875,586 -CARDS_OFFICE_S_B_frame_0512_jpg.rf.52bab48df5d80a9f658b79e131d10a42.jpg,720,1280,1,251,695,402,717 -CHESS_COURTYARD_T_B_frame_2331_jpg.rf.52fd97ab46ab45a018d04ed785ec0539.jpg,720,1280,1,105,687,295,718 -CHESS_COURTYARD_T_B_frame_2331_jpg.rf.52fd97ab46ab45a018d04ed785ec0539.jpg,720,1280,2,350,697,573,717 -JENGA_OFFICE_B_S_frame_1973_jpg.rf.53443c58b0ad65f0d978cf2e983211f4.jpg,720,1280,2,379,94,943,532 -JENGA_LIVINGROOM_T_S_frame_1169_jpg.rf.53a81a15ade3379ec2d844ef45832cbc.jpg,720,1280,1,53,485,417,717 -JENGA_LIVINGROOM_T_S_frame_1169_jpg.rf.53a81a15ade3379ec2d844ef45832cbc.jpg,720,1280,2,511,454,887,715 -CHESS_LIVINGROOM_T_H_frame_0436_jpg.rf.5348dcda498ae06d97166e2642bdad7a.jpg,720,1280,1,1,185,381,473 -CHESS_LIVINGROOM_T_H_frame_0436_jpg.rf.5348dcda498ae06d97166e2642bdad7a.jpg,720,1280,2,520,642,895,719 -CARDS_OFFICE_B_S_frame_2036_jpg.rf.53947cd2f08161d068a2cd78935249e1.jpg,720,1280,1,292,602,540,718 -CARDS_OFFICE_B_S_frame_2036_jpg.rf.53947cd2f08161d068a2cd78935249e1.jpg,720,1280,2,587,561,849,718 -CARDS_OFFICE_T_H_frame_1381_jpg.rf.53cac683e706a703de1a613259aef7e6.jpg,720,1280,1,260,654,446,719 -CARDS_OFFICE_T_H_frame_1381_jpg.rf.53cac683e706a703de1a613259aef7e6.jpg,720,1280,2,527,558,764,719 -PUZZLE_COURTYARD_S_B_frame_1834_jpg.rf.53c871983c3e7b660eb6fad0f23c45d8.jpg,720,1280,2,494,567,817,718 -CARDS_LIVINGROOM_S_H_frame_1235_jpg.rf.53d48a9235a67297dedcf40fe13c9f3f.jpg,720,1280,1,10,481,370,718 -CARDS_LIVINGROOM_S_H_frame_1235_jpg.rf.53d48a9235a67297dedcf40fe13c9f3f.jpg,720,1280,2,378,441,686,716 -JENGA_LIVINGROOM_S_T_frame_2047_jpg.rf.53dc1779cfa6f5e128cca323dd2141e6.jpg,720,1280,1,192,648,435,718 -JENGA_LIVINGROOM_S_T_frame_2047_jpg.rf.53dc1779cfa6f5e128cca323dd2141e6.jpg,720,1280,2,580,633,868,718 -JENGA_OFFICE_S_B_frame_1238_jpg.rf.540f8e952da395c2ff70d5158ffeabb7.jpg,720,1280,2,497,442,840,715 -JENGA_COURTYARD_H_B_frame_1207_jpg.rf.541cf185c2cc6f4f75d01054f9d3c21d.jpg,720,1280,2,647,12,1037,250 -JENGA_LIVINGROOM_B_H_frame_2322_jpg.rf.541e7de40df41b59b54069f5a0fc9c5b.jpg,720,1280,2,719,414,1057,718 -CARDS_OFFICE_T_H_frame_0671_jpg.rf.543a21068dbaba597447b8258000bb4c.jpg,720,1280,1,111,634,353,719 -CARDS_OFFICE_T_H_frame_0671_jpg.rf.543a21068dbaba597447b8258000bb4c.jpg,720,1280,2,482,554,698,719 -PUZZLE_LIVINGROOM_H_S_frame_0728_jpg.rf.5444ce8831928431cb5afb25eee51261.jpg,720,1280,2,702,579,902,717 -PUZZLE_OFFICE_T_S_frame_1976_jpg.rf.5460297d526a1623e91cfa501761b403.jpg,720,1280,1,10,511,464,710 -PUZZLE_OFFICE_T_S_frame_1976_jpg.rf.5460297d526a1623e91cfa501761b403.jpg,720,1280,2,579,399,903,665 -PUZZLE_LIVINGROOM_H_S_frame_0211_jpg.rf.547284f7a6f003799ebd9220698ca40d.jpg,720,1280,1,194,599,458,716 -CARDS_COURTYARD_T_B_frame_1226_jpg.rf.547c3961e2670e11a0b6798e230dbb1e.jpg,720,1280,1,200,669,379,714 -CARDS_COURTYARD_T_B_frame_1226_jpg.rf.547c3961e2670e11a0b6798e230dbb1e.jpg,720,1280,2,509,622,746,718 -CHESS_LIVINGROOM_T_H_frame_0562_jpg.rf.54866f2e039768971bfa6236433a117c.jpg,720,1280,2,510,162,911,414 -JENGA_OFFICE_B_S_frame_1809_jpg.rf.54872cb292a0c0c984ea0227c169bd26.jpg,720,1280,1,42,675,224,713 -PUZZLE_COURTYARD_H_T_frame_2432_jpg.rf.54a94a384ad749d842733b00502a72ce.jpg,720,1280,1,531,648,753,718 -PUZZLE_COURTYARD_H_T_frame_2432_jpg.rf.54a94a384ad749d842733b00502a72ce.jpg,720,1280,2,787,555,1050,716 -JENGA_COURTYARD_T_S_frame_2206_jpg.rf.54b1e708dfa4b1303e825cb3b747622b.jpg,720,1280,1,162,370,403,717 -JENGA_COURTYARD_T_S_frame_2206_jpg.rf.54b1e708dfa4b1303e825cb3b747622b.jpg,720,1280,2,511,416,794,718 -PUZZLE_LIVINGROOM_B_T_frame_2252_jpg.rf.54bca27dbdad049273c9229517755ad0.jpg,720,1280,1,4,558,417,717 -PUZZLE_LIVINGROOM_B_T_frame_2252_jpg.rf.54bca27dbdad049273c9229517755ad0.jpg,720,1280,2,457,440,934,715 -CARDS_COURTYARD_S_H_frame_0536_jpg.rf.54cfb8770c203fa71971c35a40ed0724.jpg,720,1280,1,179,640,321,718 -CARDS_LIVINGROOM_H_S_frame_0525_jpg.rf.54d7a76cb3d6bc5f8364a402f53a769e.jpg,720,1280,1,404,686,457,709 -CARDS_LIVINGROOM_H_S_frame_0525_jpg.rf.54d7a76cb3d6bc5f8364a402f53a769e.jpg,720,1280,2,609,690,727,716 -CHESS_COURTYARD_T_B_frame_1039_jpg.rf.5503a4fe01b3c3aa944420a9194fb5d8.jpg,720,1280,1,6,597,303,718 -CHESS_COURTYARD_T_B_frame_1039_jpg.rf.5503a4fe01b3c3aa944420a9194fb5d8.jpg,720,1280,2,342,636,629,718 -PUZZLE_COURTYARD_T_H_frame_0781_jpg.rf.5532c9374eab9607af666692ec886a14.jpg,720,1280,1,1,296,378,619 -PUZZLE_COURTYARD_T_H_frame_0781_jpg.rf.5532c9374eab9607af666692ec886a14.jpg,720,1280,2,419,279,897,566 -CARDS_COURTYARD_B_T_frame_1536_jpg.rf.55472771ac4f0608b19d5fd39c5a8329.jpg,720,1280,1,335,468,605,700 -CARDS_COURTYARD_B_T_frame_1536_jpg.rf.55472771ac4f0608b19d5fd39c5a8329.jpg,720,1280,2,538,362,897,656 -JENGA_COURTYARD_S_T_frame_1249_jpg.rf.557d4d5b36bbe30b480f542f3ddeebc9.jpg,720,1280,1,5,564,375,718 -JENGA_COURTYARD_B_H_frame_1921_jpg.rf.559fa8faf98936b3f11200217b981e47.jpg,720,1280,2,801,344,1279,718 -JENGA_COURTYARD_B_H_frame_1019_jpg.rf.55b3614486bc114ec1997987c918225b.jpg,720,1280,2,693,208,1008,530 -JENGA_OFFICE_H_T_frame_1203_jpg.rf.07ba0f80d84e4b8c700d57a711d11e38.jpg,720,1280,1,244,701,352,718 -JENGA_OFFICE_H_T_frame_1203_jpg.rf.07ba0f80d84e4b8c700d57a711d11e38.jpg,720,1280,2,795,646,978,713 -PUZZLE_COURTYARD_S_B_frame_1435_jpg.rf.07d00bb088e6464740a93c7e41ce1f96.jpg,720,1280,2,535,495,927,716 -JENGA_OFFICE_T_H_frame_2435_jpg.rf.07a55b008aeb87a582cc978310edaa68.jpg,720,1280,1,136,664,327,717 -CARDS_LIVINGROOM_B_T_frame_1663_jpg.rf.07c2455b1d56f565d8c95f32ac5418cf.jpg,720,1280,2,541,640,840,718 -PUZZLE_LIVINGROOM_H_S_frame_0547_jpg.rf.0799d8a214c6470980fa026a557765f8.jpg,720,1280,2,696,527,1029,719 -CHESS_LIVINGROOM_T_H_frame_0422_jpg.rf.08569b56d9b61c520e4ec88edbcd2fee.jpg,720,1280,1,1,196,383,546 -CHESS_LIVINGROOM_T_H_frame_0422_jpg.rf.08569b56d9b61c520e4ec88edbcd2fee.jpg,720,1280,2,538,693,858,719 -CARDS_OFFICE_T_H_frame_2165_jpg.rf.086e87f5ed4581ca1273a3e67d391786.jpg,720,1280,1,202,637,315,719 -CARDS_OFFICE_T_H_frame_2165_jpg.rf.086e87f5ed4581ca1273a3e67d391786.jpg,720,1280,2,700,389,876,620 -PUZZLE_LIVINGROOM_B_T_frame_0702_jpg.rf.078f58e65191add363426e20f3998af5.jpg,720,1280,1,5,482,223,696 -PUZZLE_LIVINGROOM_B_T_frame_0702_jpg.rf.078f58e65191add363426e20f3998af5.jpg,720,1280,2,548,366,1276,716 -CHESS_LIVINGROOM_H_T_frame_1052_jpg.rf.07d46931f869cf8837946a2d527c31b6.jpg,720,1280,1,1,563,253,714 -CHESS_LIVINGROOM_H_T_frame_1052_jpg.rf.07d46931f869cf8837946a2d527c31b6.jpg,720,1280,2,505,646,946,718 -CHESS_LIVINGROOM_S_B_frame_1285_jpg.rf.08680ec71150434882241065d8ebb444.jpg,720,1280,1,11,167,163,601 -CHESS_LIVINGROOM_S_B_frame_1285_jpg.rf.08680ec71150434882241065d8ebb444.jpg,720,1280,2,975,242,1279,719 -JENGA_OFFICE_H_T_frame_0768_jpg.rf.087ea78da0b8d40935d922fe47f0b6b9.jpg,720,1280,1,159,611,351,713 -JENGA_OFFICE_H_T_frame_0768_jpg.rf.087ea78da0b8d40935d922fe47f0b6b9.jpg,720,1280,2,792,618,1001,712 -CHESS_COURTYARD_B_T_frame_2596_jpg.rf.087ff1aa5d0fce0387249be6e51e9d1a.jpg,720,1280,2,1046,695,1195,718 -CHESS_COURTYARD_T_B_frame_1226_jpg.rf.088615ed7f8447e5da3d7d85191561c0.jpg,720,1280,1,7,642,280,718 -CHESS_COURTYARD_T_B_frame_1226_jpg.rf.088615ed7f8447e5da3d7d85191561c0.jpg,720,1280,2,488,705,583,716 -CARDS_COURTYARD_H_S_frame_2296_jpg.rf.08878c5b696f3237701fbeaf7d49f1a4.jpg,720,1280,1,189,567,454,719 -CARDS_COURTYARD_H_S_frame_2296_jpg.rf.08878c5b696f3237701fbeaf7d49f1a4.jpg,720,1280,2,635,489,893,712 -JENGA_LIVINGROOM_B_H_frame_0283_jpg.rf.0899c7c26cf412a38e16f9db3f6493c6.jpg,720,1280,1,70,635,373,718 -JENGA_LIVINGROOM_B_H_frame_0283_jpg.rf.0899c7c26cf412a38e16f9db3f6493c6.jpg,720,1280,2,840,586,1083,717 -PUZZLE_LIVINGROOM_H_S_frame_1403_jpg.rf.089d20caab089ffa64e950e6c285d671.jpg,720,1280,2,737,351,1020,656 -JENGA_COURTYARD_H_B_frame_1328_jpg.rf.08b006afda882d6db98516f4b4b4348e.jpg,720,1280,2,575,693,736,718 -CARDS_LIVINGROOM_H_S_frame_1835_jpg.rf.08b40da8a27c983655f88b4bfdc046b6.jpg,720,1280,1,1,610,118,719 -CARDS_LIVINGROOM_H_S_frame_1835_jpg.rf.08b40da8a27c983655f88b4bfdc046b6.jpg,720,1280,2,837,406,1128,719 -PUZZLE_COURTYARD_T_H_frame_1144_jpg.rf.08bc8a9aebf7fbd318ad3b5e8f0aa2e1.jpg,720,1280,2,755,623,1063,718 -CARDS_COURTYARD_H_S_frame_0505_jpg.rf.08d420d63b79012cb6296ff38f60b70c.jpg,720,1280,2,625,405,1094,719 -CARDS_OFFICE_T_H_frame_1553_jpg.rf.08eb8742093f257d73615795538f0ba8.jpg,720,1280,1,194,499,495,719 -CARDS_OFFICE_T_H_frame_1553_jpg.rf.08eb8742093f257d73615795538f0ba8.jpg,720,1280,2,599,293,1006,575 -JENGA_LIVINGROOM_B_H_frame_2217_jpg.rf.09082cff5a73ae994b596f96070ca365.jpg,720,1280,2,861,700,965,719 -CARDS_OFFICE_T_H_frame_1541_jpg.rf.090f7bd710ff69fbc5dc197e57d86e81.jpg,720,1280,1,158,492,465,719 -CARDS_OFFICE_T_H_frame_1541_jpg.rf.090f7bd710ff69fbc5dc197e57d86e81.jpg,720,1280,2,588,274,970,573 -JENGA_LIVINGROOM_B_H_frame_1547_jpg.rf.08faf5fb4cb1fdab6fd73ab8f74cbc71.jpg,720,1280,1,68,486,465,716 -JENGA_LIVINGROOM_B_H_frame_1547_jpg.rf.08faf5fb4cb1fdab6fd73ab8f74cbc71.jpg,720,1280,2,920,420,1277,717 -CHESS_LIVINGROOM_H_T_frame_0295_jpg.rf.091ade46b4e0e9125c008e00f4c905d5.jpg,720,1280,1,1,542,202,716 -CHESS_LIVINGROOM_H_T_frame_0295_jpg.rf.091ade46b4e0e9125c008e00f4c905d5.jpg,720,1280,2,921,481,1258,718 -JENGA_LIVINGROOM_B_H_frame_0429_jpg.rf.090e322f1dd9f63b78c9ccdaf0a5daff.jpg,720,1280,2,603,418,957,677 -PUZZLE_OFFICE_H_B_frame_1591_jpg.rf.091fbac8d03c07f020db3defa3dc02ca.jpg,720,1280,2,831,596,1012,714 -CHESS_LIVINGROOM_H_T_frame_0657_jpg.rf.0927028de8a5e29298a0de06bd5a2eee.jpg,720,1280,1,1,508,281,714 -CHESS_LIVINGROOM_H_T_frame_0657_jpg.rf.0927028de8a5e29298a0de06bd5a2eee.jpg,720,1280,2,389,296,895,606 -PUZZLE_LIVINGROOM_S_H_frame_0183_jpg.rf.09298ac6692f7932cc22e60e9bd058da.jpg,720,1280,1,183,540,550,716 -PUZZLE_LIVINGROOM_S_H_frame_0183_jpg.rf.09298ac6692f7932cc22e60e9bd058da.jpg,720,1280,2,620,606,938,718 -PUZZLE_OFFICE_B_H_frame_0024_jpg.rf.092fa2e248adb4c762b73b5efa654b5e.jpg,720,1280,1,172,670,421,712 -PUZZLE_OFFICE_B_H_frame_0024_jpg.rf.092fa2e248adb4c762b73b5efa654b5e.jpg,720,1280,2,764,280,1028,438 -CARDS_OFFICE_H_T_frame_1898_jpg.rf.09558e9e11b5ba00b2b0d81b88a5c8b4.jpg,720,1280,1,82,521,406,716 -CARDS_OFFICE_H_T_frame_1898_jpg.rf.09558e9e11b5ba00b2b0d81b88a5c8b4.jpg,720,1280,2,609,369,935,580 -CHESS_LIVINGROOM_T_H_frame_1320_jpg.rf.0942abaed43e651ba37ec85174cac08c.jpg,720,1280,2,375,612,737,719 -CARDS_OFFICE_B_S_frame_0802_jpg.rf.0960ee0ec7624943a7af3db53b61dc40.jpg,720,1280,1,395,664,506,716 -CARDS_OFFICE_B_S_frame_0802_jpg.rf.0960ee0ec7624943a7af3db53b61dc40.jpg,720,1280,2,682,676,737,716 -CHESS_OFFICE_T_H_frame_1631_jpg.rf.09d37ba237a3e1f48b1e51c0756bc8de.jpg,720,1280,1,43,301,379,532 -CHESS_OFFICE_T_H_frame_1631_jpg.rf.09d37ba237a3e1f48b1e51c0756bc8de.jpg,720,1280,2,542,655,767,714 -CHESS_LIVINGROOM_T_H_frame_2698_jpg.rf.09fdeedad3f01e15dca4166450fe8c7a.jpg,720,1280,2,585,367,1059,719 -JENGA_LIVINGROOM_B_H_frame_0536_jpg.rf.09feaea7d3ccae8ada576384abd6b350.jpg,720,1280,2,505,494,819,718 -CHESS_LIVINGROOM_S_B_frame_1547_jpg.rf.09d82c276b0a1152510fe3efef3e3abe.jpg,720,1280,1,16,562,422,718 -JENGA_COURTYARD_S_T_frame_0810_jpg.rf.09ca1f050b03297a13ade92c24782eb7.jpg,720,1280,1,104,518,379,718 -JENGA_COURTYARD_S_T_frame_0810_jpg.rf.09ca1f050b03297a13ade92c24782eb7.jpg,720,1280,2,660,665,800,718 -CHESS_COURTYARD_H_S_frame_2089_jpg.rf.0a0cf018054de283547866cdcef4fadc.jpg,720,1280,1,325,615,544,717 -CHESS_COURTYARD_H_S_frame_2089_jpg.rf.0a0cf018054de283547866cdcef4fadc.jpg,720,1280,2,744,464,998,689 -CARDS_COURTYARD_S_H_frame_2000_jpg.rf.0a2d0b108dd5082ac092e60608612014.jpg,720,1280,1,383,659,554,718 -CHESS_OFFICE_H_T_frame_1752_jpg.rf.0a122aa3a94ec75d1e6e0181a5881d38.jpg,720,1280,2,638,360,1030,639 -PUZZLE_OFFICE_H_B_frame_0006_jpg.rf.0a642c6f1d8980e9a40b0e5471c0a13e.jpg,720,1280,1,287,580,544,709 -PUZZLE_OFFICE_H_B_frame_0006_jpg.rf.0a642c6f1d8980e9a40b0e5471c0a13e.jpg,720,1280,2,739,507,938,698 -CARDS_OFFICE_H_T_frame_0283_jpg.rf.0a7d7b6d05199ac5579e279809c17d97.jpg,720,1280,1,249,669,308,718 -CARDS_OFFICE_H_T_frame_0283_jpg.rf.0a7d7b6d05199ac5579e279809c17d97.jpg,720,1280,2,613,543,985,717 -CHESS_LIVINGROOM_H_T_frame_1907_jpg.rf.0a95f44a16c459bdc97edd3050cabd4d.jpg,720,1280,1,1,599,211,718 -CHESS_LIVINGROOM_H_T_frame_1907_jpg.rf.0a95f44a16c459bdc97edd3050cabd4d.jpg,720,1280,2,1006,504,1279,718 -PUZZLE_OFFICE_H_B_frame_0379_jpg.rf.0ac142cec86b8af7cead496a90981fb3.jpg,720,1280,2,805,642,1056,719 -PUZZLE_LIVINGROOM_B_T_frame_0189_jpg.rf.0ab97675611850f3ae0597e227fb9751.jpg,720,1280,1,3,454,528,717 -PUZZLE_LIVINGROOM_B_T_frame_0189_jpg.rf.0ab97675611850f3ae0597e227fb9751.jpg,720,1280,2,542,516,1039,717 -CARDS_COURTYARD_T_B_frame_0562_jpg.rf.0ac7205490065e685cf28f5a525c9c74.jpg,720,1280,1,177,539,507,717 -CARDS_COURTYARD_T_B_frame_0562_jpg.rf.0ac7205490065e685cf28f5a525c9c74.jpg,720,1280,2,613,431,1023,714 -CHESS_OFFICE_B_S_frame_0383_jpg.rf.0adeface9ce8ac01488a051ce9098e7a.jpg,720,1280,2,604,413,853,644 -CHESS_LIVINGROOM_S_B_frame_2295_jpg.rf.0ae05b89be0180d265fd2ee98be1d1ef.jpg,720,1280,1,327,706,377,717 -JENGA_COURTYARD_H_B_frame_0696_jpg.rf.0af88162d25995b12b70cee7f6374741.jpg,720,1280,2,652,294,974,716 -CARDS_COURTYARD_S_H_frame_1407_jpg.rf.0b1a9966f6f0ea574a2369740dcea16c.jpg,720,1280,1,414,686,497,718 -CARDS_COURTYARD_S_H_frame_1407_jpg.rf.0b1a9966f6f0ea574a2369740dcea16c.jpg,720,1280,2,622,691,783,718 -JENGA_COURTYARD_B_H_frame_1097_jpg.rf.0b1f6ac03608fb3dd6858474a1004eef.jpg,720,1280,2,772,673,928,719 -CHESS_LIVINGROOM_T_H_frame_1228_jpg.rf.0b5b625cd954232bd6afd2d7bc3c259e.jpg,720,1280,2,542,161,884,396 -PUZZLE_COURTYARD_T_H_frame_1677_jpg.rf.0b4a5c95a893c896db4de208e18064da.jpg,720,1280,2,671,292,1059,665 -CHESS_OFFICE_T_H_frame_0316_jpg.rf.0b67f3cd9ef0b51e5533fee99fd1a796.jpg,720,1280,2,653,429,992,626 -JENGA_LIVINGROOM_S_T_frame_2033_jpg.rf.0b5f256962aaa85e44f7e5a424fdc1b4.jpg,720,1280,1,65,506,480,718 -JENGA_LIVINGROOM_S_T_frame_2033_jpg.rf.0b5f256962aaa85e44f7e5a424fdc1b4.jpg,720,1280,2,554,494,963,718 -JENGA_LIVINGROOM_H_B_frame_0326_jpg.rf.0b8b3c215ebbd358894f493e838a3bd2.jpg,720,1280,2,769,369,1067,662 -CHESS_LIVINGROOM_S_B_frame_1942_jpg.rf.0b9603e8693687e5e0605f57675c92eb.jpg,720,1280,1,117,669,254,718 -CHESS_LIVINGROOM_S_B_frame_1942_jpg.rf.0b9603e8693687e5e0605f57675c92eb.jpg,720,1280,2,901,565,1168,718 -CARDS_COURTYARD_B_T_frame_1262_jpg.rf.0ba50aec2e53881e41a1828cb0484aef.jpg,720,1280,2,729,689,775,717 -JENGA_COURTYARD_T_S_frame_0363_jpg.rf.0b7de426cfd9be55092ed4734bd17950.jpg,720,1280,1,105,472,443,713 -JENGA_COURTYARD_T_S_frame_0363_jpg.rf.0b7de426cfd9be55092ed4734bd17950.jpg,720,1280,2,505,432,852,717 -CARDS_OFFICE_B_S_frame_0821_jpg.rf.0b6f619efb33148b50dea3a374861dd1.jpg,720,1280,1,568,683,646,718 -CARDS_OFFICE_B_S_frame_0821_jpg.rf.0b6f619efb33148b50dea3a374861dd1.jpg,720,1280,2,633,528,902,718 -JENGA_OFFICE_T_H_frame_0389_jpg.rf.0ba731d65374e728f985d6ae48d3d2eb.jpg,720,1280,2,589,189,875,369 -JENGA_LIVINGROOM_S_T_frame_0061_jpg.rf.0bbeffcdde50b4b980ba98045b273b20.jpg,720,1280,1,228,688,391,718 -CARDS_COURTYARD_S_H_frame_2027_jpg.rf.0bc37c9219a839ad0754df76303e7ad6.jpg,720,1280,1,366,659,525,718 -CARDS_COURTYARD_S_H_frame_2027_jpg.rf.0bc37c9219a839ad0754df76303e7ad6.jpg,720,1280,2,776,698,802,719 -CARDS_OFFICE_S_B_frame_0057_jpg.rf.0bfb6f3e9db3766926d0a15bdcf6818f.jpg,720,1280,1,177,607,437,714 -CARDS_OFFICE_S_B_frame_0057_jpg.rf.0bfb6f3e9db3766926d0a15bdcf6818f.jpg,720,1280,2,490,700,535,718 -JENGA_OFFICE_B_S_frame_0241_jpg.rf.0c3f94980d0788d78a62edc34614851b.jpg,720,1280,2,646,402,985,696 -CHESS_LIVINGROOM_T_H_frame_0956_jpg.rf.0c4eccf6bd463d1316dd73f61b0e88d8.jpg,720,1280,2,378,161,891,409 -PUZZLE_LIVINGROOM_S_H_frame_0188_jpg.rf.0c51aca9cc1fc64bf8055f8926213a20.jpg,720,1280,1,130,602,482,718 -PUZZLE_LIVINGROOM_S_H_frame_0188_jpg.rf.0c51aca9cc1fc64bf8055f8926213a20.jpg,720,1280,2,544,341,819,623 -CARDS_LIVINGROOM_S_H_frame_1845_jpg.rf.0c7a55b946fb7f6776170305c66afc6e.jpg,720,1280,1,113,646,304,718 -CARDS_LIVINGROOM_S_H_frame_1845_jpg.rf.0c7a55b946fb7f6776170305c66afc6e.jpg,720,1280,2,544,627,749,718 -CHESS_COURTYARD_S_H_frame_1329_jpg.rf.0c7ce4da9e01d93cd4b4a63fe9b72021.jpg,720,1280,2,1097,600,1273,718 -PUZZLE_OFFICE_H_B_frame_1560_jpg.rf.0c9711c9846f2d5644c9ca3d3120f9ac.jpg,720,1280,2,781,637,1001,717 -JENGA_OFFICE_S_B_frame_1692_jpg.rf.0c7d39f61b10f77e69e74fb73f298b24.jpg,720,1280,2,218,281,506,550 -CARDS_LIVINGROOM_T_B_frame_1551_jpg.rf.0c924b74d1c7074f7a1cb722c2a4d070.jpg,720,1280,1,2,627,137,719 -CARDS_LIVINGROOM_T_B_frame_1551_jpg.rf.0c924b74d1c7074f7a1cb722c2a4d070.jpg,720,1280,2,577,535,869,719 -JENGA_LIVINGROOM_B_H_frame_2327_jpg.rf.0cad3e8faf35b9ec85a1e90fab2011e2.jpg,720,1280,2,704,396,1075,717 -JENGA_OFFICE_T_H_frame_1008_jpg.rf.0cb3b8bf1dec798f1928d3f8cbf75032.jpg,720,1280,2,473,473,728,709 -PUZZLE_LIVINGROOM_T_B_frame_1039_jpg.rf.0d00d2f85588c7b704e102f8d5e2d39c.jpg,720,1280,1,3,441,331,671 -PUZZLE_LIVINGROOM_T_B_frame_1039_jpg.rf.0d00d2f85588c7b704e102f8d5e2d39c.jpg,720,1280,2,451,388,1050,716 -CHESS_COURTYARD_B_T_frame_1671_jpg.rf.0d31474d3c9ad6262c5ccb6194c9dade.jpg,720,1280,2,773,357,1067,536 -CARDS_COURTYARD_H_S_frame_2674_jpg.rf.0d4044808816bc8c5457753bb95c93f0.jpg,720,1280,1,205,603,470,719 -CARDS_COURTYARD_H_S_frame_2674_jpg.rf.0d4044808816bc8c5457753bb95c93f0.jpg,720,1280,2,822,336,1008,669 -CHESS_LIVINGROOM_S_B_frame_2234_jpg.rf.0d547085aa4cb4e6c2f4070070915408.jpg,720,1280,1,254,648,381,716 -CHESS_LIVINGROOM_S_B_frame_2234_jpg.rf.0d547085aa4cb4e6c2f4070070915408.jpg,720,1280,2,919,671,1105,718 -CHESS_COURTYARD_T_B_frame_1796_jpg.rf.0d7710c2da7bff94fab51adf8b99af5b.jpg,720,1280,1,122,689,325,717 -CHESS_COURTYARD_T_B_frame_1796_jpg.rf.0d7710c2da7bff94fab51adf8b99af5b.jpg,720,1280,2,420,574,856,716 -CHESS_LIVINGROOM_B_S_frame_0374_jpg.rf.0d9582244512548b1322ea20f10c70b9.jpg,720,1280,2,755,406,1278,718 -PUZZLE_OFFICE_T_S_frame_1694_jpg.rf.0d9f0ec5825ce516efc6e8f4e9485110.jpg,720,1280,1,96,273,457,546 -PUZZLE_OFFICE_T_S_frame_1694_jpg.rf.0d9f0ec5825ce516efc6e8f4e9485110.jpg,720,1280,2,606,344,849,655 -JENGA_COURTYARD_B_H_frame_2266_jpg.rf.0dad3e5b17698889e638ecf48d0afd08.jpg,720,1280,1,377,684,510,718 -JENGA_COURTYARD_B_H_frame_2266_jpg.rf.0dad3e5b17698889e638ecf48d0afd08.jpg,720,1280,2,588,685,771,719 -JENGA_COURTYARD_H_B_frame_2042_jpg.rf.0dc22e17e22fdc5f159f138353aa076f.jpg,720,1280,1,69,583,332,718 -JENGA_COURTYARD_H_B_frame_2042_jpg.rf.0dc22e17e22fdc5f159f138353aa076f.jpg,720,1280,2,683,472,957,718 -JENGA_COURTYARD_H_B_frame_0838_jpg.rf.0dc57e943896347ddb1beee40021d43e.jpg,720,1280,2,535,55,864,447 -JENGA_OFFICE_T_H_frame_1477_jpg.rf.0df711922754375ce2c9d9df4a4a5994.jpg,720,1280,1,372,233,487,534 -JENGA_OFFICE_T_H_frame_1477_jpg.rf.0df711922754375ce2c9d9df4a4a5994.jpg,720,1280,2,568,251,695,494 -PUZZLE_OFFICE_T_S_frame_1830_jpg.rf.0e04695ff54853f329e46f63ef97b75f.jpg,720,1280,1,108,477,436,719 -PUZZLE_OFFICE_T_S_frame_1830_jpg.rf.0e04695ff54853f329e46f63ef97b75f.jpg,720,1280,2,593,406,825,693 -CHESS_LIVINGROOM_S_B_frame_0786_jpg.rf.0e5394f66dcd204f83565712b302b6e9.jpg,720,1280,2,583,252,1233,712 -CHESS_LIVINGROOM_T_H_frame_2648_jpg.rf.0e41b2d951e54dd77d4160b201a85a4f.jpg,720,1280,2,545,378,968,719 -CARDS_COURTYARD_T_B_frame_1462_jpg.rf.0e595e53b6872c333228ea1fc464786e.jpg,720,1280,1,184,603,410,718 -CARDS_COURTYARD_T_B_frame_1462_jpg.rf.0e595e53b6872c333228ea1fc464786e.jpg,720,1280,2,555,572,787,718 -CARDS_OFFICE_T_H_frame_2070_jpg.rf.0e70140f8e5a6f87a480b35db810e40a.jpg,720,1280,2,452,554,766,717 -JENGA_LIVINGROOM_S_T_frame_0805_jpg.rf.0e8f89e9a227472c9fe37cac99662f71.jpg,720,1280,1,84,517,476,718 -JENGA_LIVINGROOM_S_T_frame_0805_jpg.rf.0e8f89e9a227472c9fe37cac99662f71.jpg,720,1280,2,586,494,929,718 -CARDS_OFFICE_H_T_frame_2521_jpg.rf.0ea02a92d7fcb9fbd72f2e99a99d4141.jpg,720,1280,1,101,589,416,718 -CARDS_OFFICE_H_T_frame_2521_jpg.rf.0ea02a92d7fcb9fbd72f2e99a99d4141.jpg,720,1280,2,514,569,804,717 -CHESS_LIVINGROOM_S_B_frame_1502_jpg.rf.0ecd33b837979fefe526582c16187e6f.jpg,720,1280,1,7,107,433,590 -CHESS_LIVINGROOM_S_B_frame_1502_jpg.rf.0ecd33b837979fefe526582c16187e6f.jpg,720,1280,2,580,391,1088,710 -CARDS_OFFICE_H_T_frame_0100_jpg.rf.0ef5b539dc5763c5a9ba819c5834dadb.jpg,720,1280,1,205,689,263,718 -CARDS_OFFICE_H_T_frame_0100_jpg.rf.0ef5b539dc5763c5a9ba819c5834dadb.jpg,720,1280,2,673,356,1135,638 -PUZZLE_OFFICE_B_H_frame_0371_jpg.rf.0eebf2eb18838e18b1b763f6a8426a0a.jpg,720,1280,1,8,541,319,713 -PUZZLE_OFFICE_B_H_frame_0371_jpg.rf.0eebf2eb18838e18b1b763f6a8426a0a.jpg,720,1280,2,620,651,904,718 -CHESS_LIVINGROOM_H_T_frame_0694_jpg.rf.0f6b18966ba388f518adaf36c8990996.jpg,720,1280,1,1,553,332,718 -CHESS_LIVINGROOM_H_T_frame_0694_jpg.rf.0f6b18966ba388f518adaf36c8990996.jpg,720,1280,2,501,360,902,629 -JENGA_OFFICE_H_T_frame_1901_jpg.rf.0f850a3ee577a708b7eafd5aae12f210.jpg,720,1280,1,278,370,554,714 -JENGA_OFFICE_H_T_frame_1901_jpg.rf.0f850a3ee577a708b7eafd5aae12f210.jpg,720,1280,2,587,347,923,696 -CARDS_COURTYARD_T_B_frame_1314_jpg.rf.0f92cf70cb3a0e4bd525f2f00b34b9e4.jpg,720,1280,1,345,692,449,718 -JENGA_COURTYARD_B_H_frame_1859_jpg.rf.0f930a5cf4d956715180bdbcb8fe64f5.jpg,720,1280,1,468,678,657,719 -PUZZLE_OFFICE_B_H_frame_2157_jpg.rf.0fbac614f7135ac178b4dcde31da477f.jpg,720,1280,1,278,566,527,710 -PUZZLE_OFFICE_B_H_frame_2157_jpg.rf.0fbac614f7135ac178b4dcde31da477f.jpg,720,1280,2,1006,698,1076,716 -JENGA_COURTYARD_T_S_frame_1288_jpg.rf.0fc01443aa3c7a2a64f49447953cb33e.jpg,720,1280,1,10,548,192,713 -JENGA_COURTYARD_T_S_frame_1288_jpg.rf.0fc01443aa3c7a2a64f49447953cb33e.jpg,720,1280,2,585,155,984,544 -CHESS_LIVINGROOM_S_B_frame_0296_jpg.rf.104ecc8930bd4a6ae81e90770829eb6a.jpg,720,1280,2,554,457,1192,718 -CARDS_COURTYARD_T_B_frame_2022_jpg.rf.106246263d901e90a432eaba843831b1.jpg,720,1280,1,240,659,345,718 -CARDS_COURTYARD_T_B_frame_2022_jpg.rf.106246263d901e90a432eaba843831b1.jpg,720,1280,2,585,632,901,718 -JENGA_COURTYARD_T_S_frame_1036_jpg.rf.106366174788af2c82580ea615fd316a.jpg,720,1280,1,170,502,476,718 -JENGA_COURTYARD_T_S_frame_1036_jpg.rf.106366174788af2c82580ea615fd316a.jpg,720,1280,2,560,450,912,717 -PUZZLE_OFFICE_H_B_frame_2151_jpg.rf.10a6e4d15de8e7fef98c0ad0fbf35119.jpg,720,1280,1,190,594,404,716 -PUZZLE_OFFICE_H_B_frame_2151_jpg.rf.10a6e4d15de8e7fef98c0ad0fbf35119.jpg,720,1280,2,857,630,1045,719 -PUZZLE_OFFICE_S_T_frame_1750_jpg.rf.1100e7085c5050fe640da760f77722c5.jpg,720,1280,1,6,353,184,553 -JENGA_OFFICE_B_S_frame_1303_jpg.rf.1102be5239b7359d8463f27a5f47eaea.jpg,720,1280,1,105,237,263,590 -JENGA_OFFICE_B_S_frame_1303_jpg.rf.1102be5239b7359d8463f27a5f47eaea.jpg,720,1280,2,455,427,729,712 -CHESS_OFFICE_B_S_frame_1477_jpg.rf.112b189cd987d618e321c8b20605bb9d.jpg,720,1280,1,158,677,374,717 -CHESS_OFFICE_B_S_frame_1477_jpg.rf.112b189cd987d618e321c8b20605bb9d.jpg,720,1280,2,620,667,850,718 -JENGA_COURTYARD_S_T_frame_1471_jpg.rf.11187df56b40b40aec9956024feebd35.jpg,720,1280,1,28,160,457,535 -JENGA_COURTYARD_S_T_frame_1471_jpg.rf.11187df56b40b40aec9956024feebd35.jpg,720,1280,2,461,424,816,717 -PUZZLE_OFFICE_S_T_frame_2601_jpg.rf.112e01c3ef3c4b183a9c621af4b72815.jpg,720,1280,1,1,486,259,718 -PUZZLE_OFFICE_T_S_frame_0543_jpg.rf.11389518d90cbf323d14a4459ef345e0.jpg,720,1280,1,70,289,525,628 -PUZZLE_OFFICE_T_S_frame_0543_jpg.rf.11389518d90cbf323d14a4459ef345e0.jpg,720,1280,2,491,371,857,710 -PUZZLE_COURTYARD_H_T_frame_2507_jpg.rf.1154a0ae033450a45ffa028e954abab8.jpg,720,1280,1,1,429,156,698 -PUZZLE_COURTYARD_H_T_frame_2507_jpg.rf.1154a0ae033450a45ffa028e954abab8.jpg,720,1280,2,759,490,1002,714 -PUZZLE_COURTYARD_H_T_frame_0511_jpg.rf.11555547bfc68adde3c9961bef40b414.jpg,720,1280,1,167,611,406,713 -PUZZLE_COURTYARD_H_T_frame_0511_jpg.rf.11555547bfc68adde3c9961bef40b414.jpg,720,1280,2,757,675,940,716 -JENGA_LIVINGROOM_S_T_frame_2476_jpg.rf.115c4eb055233dfa383961302bfe502a.jpg,720,1280,1,39,233,425,642 -JENGA_LIVINGROOM_S_T_frame_2476_jpg.rf.115c4eb055233dfa383961302bfe502a.jpg,720,1280,2,474,472,991,718 -CARDS_LIVINGROOM_S_H_frame_2248_jpg.rf.116174216794e27072d983a8d9693975.jpg,720,1280,2,618,436,891,701 -CARDS_LIVINGROOM_S_H_frame_0509_jpg.rf.117c6b44bb0f87e13d155736706d0084.jpg,720,1280,1,191,614,470,718 -CARDS_LIVINGROOM_S_H_frame_0509_jpg.rf.117c6b44bb0f87e13d155736706d0084.jpg,720,1280,2,550,643,777,718 -JENGA_LIVINGROOM_H_B_frame_0657_jpg.rf.119a9839132b0bee7e60c8143fbce4d0.jpg,720,1280,2,589,374,897,700 -CARDS_COURTYARD_H_S_frame_0702_jpg.rf.119e73cb6b1c22e9176445d67df61410.jpg,720,1280,1,307,684,489,718 -CARDS_COURTYARD_H_S_frame_0702_jpg.rf.119e73cb6b1c22e9176445d67df61410.jpg,720,1280,2,549,573,844,719 -CARDS_LIVINGROOM_H_S_frame_0707_jpg.rf.11b027c65e8215351bcfeb98bb675f87.jpg,720,1280,2,591,584,840,719 -JENGA_OFFICE_S_B_frame_0017_jpg.rf.1211b9393271ca8be83a54454345f836.jpg,720,1280,2,736,663,929,719 -CHESS_COURTYARD_S_H_frame_1632_jpg.rf.123ba9e7248e8710cab03b22b79a4bbd.jpg,720,1280,2,476,411,1103,718 -PUZZLE_COURTYARD_B_S_frame_2130_jpg.rf.1249f4bcdb5ee9918670db03913caf31.jpg,720,1280,1,248,509,531,719 -PUZZLE_COURTYARD_B_S_frame_2130_jpg.rf.1249f4bcdb5ee9918670db03913caf31.jpg,720,1280,2,547,502,873,719 -JENGA_COURTYARD_H_B_frame_1684_jpg.rf.124cafb5118d44b24edb0f7c931013ec.jpg,720,1280,1,427,95,611,388 -JENGA_COURTYARD_H_B_frame_1684_jpg.rf.124cafb5118d44b24edb0f7c931013ec.jpg,720,1280,2,597,123,870,508 -CHESS_OFFICE_T_H_frame_1921_jpg.rf.1258ad3864d5a7eda99dd2185c6d5879.jpg,720,1280,1,141,590,361,717 -CHESS_OFFICE_T_H_frame_1921_jpg.rf.1258ad3864d5a7eda99dd2185c6d5879.jpg,720,1280,2,331,619,585,717 -CARDS_LIVINGROOM_B_T_frame_0145_jpg.rf.127cb3f8fba0002c3935685f49ef5a88.jpg,720,1280,2,762,650,972,718 -PUZZLE_COURTYARD_S_B_frame_2328_jpg.rf.12b2d9449081a1f9444d038a3a2d905f.jpg,720,1280,1,366,623,575,718 -PUZZLE_COURTYARD_S_B_frame_2328_jpg.rf.12b2d9449081a1f9444d038a3a2d905f.jpg,720,1280,2,664,495,912,717 -PUZZLE_COURTYARD_H_T_frame_1139_jpg.rf.12ffa5092f47f112123143d1b22e53ae.jpg,720,1280,1,216,605,489,717 -PUZZLE_COURTYARD_H_T_frame_1139_jpg.rf.12ffa5092f47f112123143d1b22e53ae.jpg,720,1280,2,596,625,828,718 -PUZZLE_COURTYARD_T_H_frame_2415_jpg.rf.12be28ea98fb9a8afbb734d2221d3a39.jpg,720,1280,2,525,250,1018,718 -PUZZLE_COURTYARD_T_H_frame_2415_jpg.rf.12be28ea98fb9a8afbb734d2221d3a39.jpg,720,1280,1,1,591,315,718 -CHESS_LIVINGROOM_H_T_frame_1873_jpg.rf.12c9a44eb427de135043c6967bae5965.jpg,720,1280,1,5,612,213,718 -CHESS_LIVINGROOM_H_T_frame_1873_jpg.rf.12c9a44eb427de135043c6967bae5965.jpg,720,1280,2,1016,523,1279,718 -JENGA_COURTYARD_T_S_frame_0668_jpg.rf.131b7dac904f4a8f17b487c3b8767053.jpg,720,1280,1,43,395,428,713 -JENGA_COURTYARD_T_S_frame_0668_jpg.rf.131b7dac904f4a8f17b487c3b8767053.jpg,720,1280,2,528,371,868,713 -CHESS_OFFICE_T_H_frame_1643_jpg.rf.1337b87a63508a51ef30ae85cb09ef2a.jpg,720,1280,1,142,341,404,548 -CHESS_OFFICE_T_H_frame_1643_jpg.rf.1337b87a63508a51ef30ae85cb09ef2a.jpg,720,1280,2,513,641,747,719 -PUZZLE_OFFICE_B_H_frame_0150_jpg.rf.13453157ae45d4721811141249df0bbd.jpg,720,1280,2,582,632,820,719 -PUZZLE_OFFICE_B_H_frame_2036_jpg.rf.136d11b2f47a10c3a65f758b83bc463d.jpg,720,1280,1,4,520,32,551 -PUZZLE_OFFICE_B_H_frame_2036_jpg.rf.136d11b2f47a10c3a65f758b83bc463d.jpg,720,1280,2,522,431,915,698 -CHESS_LIVINGROOM_H_T_frame_0378_jpg.rf.13b388f25aeb95eeba317874cd9eceae.jpg,720,1280,1,3,532,274,718 -CHESS_LIVINGROOM_H_T_frame_0378_jpg.rf.13b388f25aeb95eeba317874cd9eceae.jpg,720,1280,2,959,470,1279,718 -CARDS_OFFICE_S_B_frame_0515_jpg.rf.13b4d45460eb82c6a7720eff4dc9e8a0.jpg,720,1280,1,158,673,353,714 -JENGA_COURTYARD_S_T_frame_0809_jpg.rf.13eaed9b45ad6fd8382f6c635e550782.jpg,720,1280,1,112,522,389,717 -JENGA_COURTYARD_S_T_frame_0809_jpg.rf.13eaed9b45ad6fd8382f6c635e550782.jpg,720,1280,2,647,662,788,718 -CARDS_COURTYARD_H_S_frame_2423_jpg.rf.13ee66e03f93c9e706ac5226359abdac.jpg,720,1280,1,247,603,535,719 -CARDS_COURTYARD_H_S_frame_2423_jpg.rf.13ee66e03f93c9e706ac5226359abdac.jpg,720,1280,2,641,313,938,617 -CHESS_OFFICE_T_H_frame_2669_jpg.rf.1449a354cef39d4d6136c61f23b312c4.jpg,720,1280,2,561,370,853,610 -CARDS_LIVINGROOM_B_T_frame_0350_jpg.rf.14517b786b42a7887d9ed19b9206f105.jpg,720,1280,1,173,657,478,718 -CARDS_LIVINGROOM_B_T_frame_0350_jpg.rf.14517b786b42a7887d9ed19b9206f105.jpg,720,1280,2,624,640,925,718 -CHESS_OFFICE_B_S_frame_2565_jpg.rf.146953ac49cd16c997809c9f6d0421d1.jpg,720,1280,2,665,576,984,718 -CHESS_COURTYARD_B_T_frame_2669_jpg.rf.146c076197cb19bca71ca8cc75e4fb95.jpg,720,1280,2,1027,676,1208,718 -CARDS_OFFICE_H_T_frame_2603_jpg.rf.148ccb54a552416cc939844d0cdf75b3.jpg,720,1280,1,306,695,355,718 -CARDS_OFFICE_H_T_frame_2603_jpg.rf.148ccb54a552416cc939844d0cdf75b3.jpg,720,1280,2,628,532,1124,718 -JENGA_COURTYARD_T_S_frame_1757_jpg.rf.1494d63c1bf65560183b415fc68f67ca.jpg,720,1280,2,744,680,880,718 -CHESS_OFFICE_B_S_frame_1769_jpg.rf.14951d6ba7ae5a9caa351af35b8195a1.jpg,720,1280,1,180,692,364,718 -CHESS_OFFICE_B_S_frame_1769_jpg.rf.14951d6ba7ae5a9caa351af35b8195a1.jpg,720,1280,2,606,676,862,718 -PUZZLE_COURTYARD_H_T_frame_2481_jpg.rf.14b30a564272a7f98013c74206ee5ae3.jpg,720,1280,1,38,330,205,470 -PUZZLE_COURTYARD_H_T_frame_2481_jpg.rf.14b30a564272a7f98013c74206ee5ae3.jpg,720,1280,2,478,659,766,718 -JENGA_OFFICE_B_S_frame_0205_jpg.rf.14c6a66649d512a4aba50e0e10d1c2c3.jpg,720,1280,2,561,314,861,541 -CHESS_LIVINGROOM_H_T_frame_0732_jpg.rf.14e0da31ec71cf3de403ad353f2da00f.jpg,720,1280,1,1,595,245,718 -CHESS_LIVINGROOM_H_T_frame_0732_jpg.rf.14e0da31ec71cf3de403ad353f2da00f.jpg,720,1280,2,789,214,1258,574 -CARDS_LIVINGROOM_B_T_frame_0437_jpg.rf.14ef550051af9c40c6e16f5a407307d6.jpg,720,1280,2,800,356,1152,676 -PUZZLE_LIVINGROOM_B_T_frame_2329_jpg.rf.150bc66f993294f7fcc4c0a4d1d84130.jpg,720,1280,1,7,561,461,717 -PUZZLE_LIVINGROOM_B_T_frame_2329_jpg.rf.150bc66f993294f7fcc4c0a4d1d84130.jpg,720,1280,2,577,633,995,718 -PUZZLE_LIVINGROOM_H_S_frame_1321_jpg.rf.15131dd3ef2c06a14a0693f7d9defe0f.jpg,720,1280,2,417,662,586,717 -PUZZLE_COURTYARD_B_S_frame_2556_jpg.rf.15187b8d18e5f00b3c32a2b453760aec.jpg,720,1280,2,893,702,1001,718 -CHESS_LIVINGROOM_H_T_frame_0411_jpg.rf.15240739d2b2e558d716a8ab6c200d11.jpg,720,1280,1,7,559,243,716 -CHESS_LIVINGROOM_H_T_frame_0411_jpg.rf.15240739d2b2e558d716a8ab6c200d11.jpg,720,1280,2,1067,568,1279,716 -JENGA_LIVINGROOM_S_T_frame_1164_jpg.rf.152b108a576c6a6156cd07a5ac739a3b.jpg,720,1280,1,164,669,313,718 -JENGA_LIVINGROOM_S_T_frame_1164_jpg.rf.152b108a576c6a6156cd07a5ac739a3b.jpg,720,1280,2,732,708,770,718 -CARDS_OFFICE_S_B_frame_1945_jpg.rf.152ff305c45ebfad98fc2de24b6533d7.jpg,720,1280,1,323,415,587,704 -CARDS_OFFICE_S_B_frame_1945_jpg.rf.152ff305c45ebfad98fc2de24b6533d7.jpg,720,1280,2,594,456,850,714 -JENGA_LIVINGROOM_B_H_frame_1182_jpg.rf.153fac490b6c671a1901db02bddf954f.jpg,720,1280,1,42,620,378,718 -JENGA_LIVINGROOM_B_H_frame_1182_jpg.rf.153fac490b6c671a1901db02bddf954f.jpg,720,1280,2,755,548,1012,718 -CARDS_COURTYARD_T_B_frame_0276_jpg.rf.159f473547d98ce7073050202dcf8dfa.jpg,720,1280,1,143,589,406,717 -CARDS_COURTYARD_T_B_frame_0276_jpg.rf.159f473547d98ce7073050202dcf8dfa.jpg,720,1280,2,593,573,808,714 -CARDS_LIVINGROOM_H_S_frame_0493_jpg.rf.15a735246522ec2bae669b87fdf94cc9.jpg,720,1280,2,463,566,848,719 -JENGA_LIVINGROOM_T_S_frame_1643_jpg.rf.15a73c562ea263b352252ba8417d3bf2.jpg,720,1280,1,2,430,199,717 -JENGA_LIVINGROOM_T_S_frame_1643_jpg.rf.15a73c562ea263b352252ba8417d3bf2.jpg,720,1280,2,463,271,945,666 -JENGA_LIVINGROOM_H_B_frame_1439_jpg.rf.163d4fd78c8118da260b398011459166.jpg,720,1280,2,582,0,815,223 -CARDS_LIVINGROOM_S_H_frame_1639_jpg.rf.163eca035480b7bb76a60d773ede00e1.jpg,720,1280,1,181,659,319,714 -CARDS_LIVINGROOM_S_H_frame_1639_jpg.rf.163eca035480b7bb76a60d773ede00e1.jpg,720,1280,2,611,655,747,718 -JENGA_LIVINGROOM_H_B_frame_2220_jpg.rf.165ae5af195d9392ae06d8e646dc8c1e.jpg,720,1280,2,624,181,897,547 -JENGA_COURTYARD_H_B_frame_1339_jpg.rf.165efcb1d9a4427d6e30cab7912f42f3.jpg,720,1280,2,616,697,736,718 -PUZZLE_OFFICE_H_B_frame_0809_jpg.rf.1673579c9029ce6bfd6424be1a88079d.jpg,720,1280,2,885,667,1111,719 -CARDS_LIVINGROOM_S_H_frame_1724_jpg.rf.1699596e4b63af8097ca1b5881a3d158.jpg,720,1280,1,264,519,565,718 -JENGA_OFFICE_B_S_frame_2064_jpg.rf.16a737af749b96619a12a6c05855f053.jpg,720,1280,2,312,155,758,564 -PUZZLE_COURTYARD_B_S_frame_1788_jpg.rf.16c63343c7bc9bcac286bdce9670007c.jpg,720,1280,1,230,573,474,719 -PUZZLE_COURTYARD_B_S_frame_1788_jpg.rf.16c63343c7bc9bcac286bdce9670007c.jpg,720,1280,2,554,456,783,701 -CHESS_COURTYARD_T_B_frame_1223_jpg.rf.16c2ece60646a400ddb5959848c193b9.jpg,720,1280,1,18,648,280,718 -JENGA_OFFICE_B_S_frame_1038_jpg.rf.16ee2a7ca71dbc7564856f62e55936f9.jpg,720,1280,1,20,590,383,717 -JENGA_OFFICE_B_S_frame_1038_jpg.rf.16ee2a7ca71dbc7564856f62e55936f9.jpg,720,1280,2,618,262,840,495 -CHESS_OFFICE_H_T_frame_0648_jpg.rf.16f031c5f5b95e63b9820ee6d77d8cbc.jpg,720,1280,2,760,570,1085,718 -CARDS_LIVINGROOM_S_H_frame_1475_jpg.rf.16fe3473edd5585eb079ae32c0aa2a43.jpg,720,1280,1,185,282,554,604 -CARDS_LIVINGROOM_S_H_frame_1475_jpg.rf.16fe3473edd5585eb079ae32c0aa2a43.jpg,720,1280,2,558,269,857,585 -PUZZLE_LIVINGROOM_S_H_frame_1077_jpg.rf.1702800f1b2d8faf72eaccb8ed93683e.jpg,720,1280,1,7,506,372,718 -CARDS_OFFICE_S_B_frame_1278_jpg.rf.1712d288c2f01003a53364145bcf8afc.jpg,720,1280,1,133,551,420,717 -CHESS_LIVINGROOM_T_H_frame_2038_jpg.rf.17254f802e70461b4d737c3ee7c460cc.jpg,720,1280,1,2,313,59,517 -CHESS_LIVINGROOM_T_H_frame_2038_jpg.rf.17254f802e70461b4d737c3ee7c460cc.jpg,720,1280,2,717,407,1189,719 -JENGA_OFFICE_T_H_frame_0878_jpg.rf.172997cf36f31c5ba6ac6aec68246ddb.jpg,720,1280,1,152,634,422,718 -JENGA_OFFICE_T_H_frame_0878_jpg.rf.172997cf36f31c5ba6ac6aec68246ddb.jpg,720,1280,2,576,332,862,612 -JENGA_LIVINGROOM_B_H_frame_0843_jpg.rf.176ca28a24f5bdba59e7802858b5cbec.jpg,720,1280,2,645,424,1000,719 -JENGA_LIVINGROOM_B_H_frame_0843_jpg.rf.176ca28a24f5bdba59e7802858b5cbec.jpg,720,1280,1,1,533,319,719 -CHESS_COURTYARD_B_T_frame_2574_jpg.rf.178d0979b44093b40f58c00e48e0d609.jpg,720,1280,2,1076,704,1176,718 -JENGA_COURTYARD_S_T_frame_1852_jpg.rf.17bb7924fd45ce851df40ae1464b15f8.jpg,720,1280,1,317,395,536,717 -JENGA_COURTYARD_S_T_frame_1852_jpg.rf.17bb7924fd45ce851df40ae1464b15f8.jpg,720,1280,2,540,400,971,713 -PUZZLE_LIVINGROOM_T_B_frame_0026_jpg.rf.17acd5d35edd15827b997291ff808a0a.jpg,720,1280,1,3,392,357,717 -PUZZLE_LIVINGROOM_T_B_frame_0026_jpg.rf.17acd5d35edd15827b997291ff808a0a.jpg,720,1280,2,598,366,1025,718 -JENGA_COURTYARD_H_B_frame_0793_jpg.rf.17bf500cc25d59b083a592a3cceb928e.jpg,720,1280,1,268,652,522,718 -JENGA_COURTYARD_H_B_frame_0793_jpg.rf.17bf500cc25d59b083a592a3cceb928e.jpg,720,1280,2,478,2,705,241 -CARDS_LIVINGROOM_H_S_frame_1765_jpg.rf.17c7e159c7d761f40c970f0210ef31ee.jpg,720,1280,1,62,544,308,718 -CARDS_LIVINGROOM_H_S_frame_1765_jpg.rf.17c7e159c7d761f40c970f0210ef31ee.jpg,720,1280,2,639,585,897,719 -CARDS_COURTYARD_S_H_frame_2183_jpg.rf.17cbc99356d88f5d335f127d709f096a.jpg,720,1280,1,158,595,448,718 -JENGA_COURTYARD_T_S_frame_1637_jpg.rf.17d5b20cd51d4a26ccf7ecbc5dfe52ba.jpg,720,1280,1,26,338,379,640 -JENGA_OFFICE_T_H_frame_1407_jpg.rf.17d7b610aed333d298897a41cf04b066.jpg,720,1280,1,408,340,548,664 -JENGA_OFFICE_T_H_frame_1407_jpg.rf.17d7b610aed333d298897a41cf04b066.jpg,720,1280,2,633,389,757,713 -PUZZLE_OFFICE_H_B_frame_2137_jpg.rf.17f46864a0dd6aa2ab160fd0f99578e9.jpg,720,1280,1,168,625,411,715 -PUZZLE_OFFICE_H_B_frame_2137_jpg.rf.17f46864a0dd6aa2ab160fd0f99578e9.jpg,720,1280,2,708,610,960,716 -JENGA_OFFICE_T_H_frame_0073_jpg.rf.17f5a951793b40e4071899bce2246ca9.jpg,720,1280,1,166,402,355,665 -JENGA_OFFICE_T_H_frame_0073_jpg.rf.17f5a951793b40e4071899bce2246ca9.jpg,720,1280,2,564,402,747,633 -CARDS_LIVINGROOM_H_S_frame_0696_jpg.rf.180331810be8499b6962cb88dc896619.jpg,720,1280,2,588,487,834,713 -JENGA_OFFICE_H_T_frame_1132_jpg.rf.18186181e1da3a0e97838b243ef339c7.jpg,720,1280,1,209,703,330,719 -JENGA_OFFICE_H_T_frame_1132_jpg.rf.18186181e1da3a0e97838b243ef339c7.jpg,720,1280,2,779,654,952,719 -PUZZLE_OFFICE_S_T_frame_1340_jpg.rf.184675e7ea6e2ea3eb8da74319058e4d.jpg,720,1280,2,832,651,1022,718 -CARDS_COURTYARD_T_B_frame_2272_jpg.rf.18a9c6446abeed158c9a81e72974fb75.jpg,720,1280,1,148,581,404,718 -CARDS_COURTYARD_T_B_frame_2272_jpg.rf.18a9c6446abeed158c9a81e72974fb75.jpg,720,1280,2,584,445,928,717 -PUZZLE_COURTYARD_S_B_frame_2136_jpg.rf.18ba52f8bebe2940b9f357140ecea879.jpg,720,1280,2,635,636,942,718 -JENGA_COURTYARD_B_H_frame_2265_jpg.rf.18bf5fa6a90caa5b0ee56522a32efb84.jpg,720,1280,1,351,643,571,719 -JENGA_COURTYARD_B_H_frame_2265_jpg.rf.18bf5fa6a90caa5b0ee56522a32efb84.jpg,720,1280,2,689,708,774,719 -PUZZLE_COURTYARD_T_H_frame_0724_jpg.rf.18c235e3a132ec56bf8359c84162eae8.jpg,720,1280,1,65,530,467,718 -PUZZLE_COURTYARD_T_H_frame_0724_jpg.rf.18c235e3a132ec56bf8359c84162eae8.jpg,720,1280,2,531,445,878,705 -PUZZLE_OFFICE_H_B_frame_1408_jpg.rf.18df765857d1c425661798e86cd346eb.jpg,720,1280,1,374,669,600,718 -PUZZLE_OFFICE_H_B_frame_1408_jpg.rf.18df765857d1c425661798e86cd346eb.jpg,720,1280,2,645,569,910,716 -CHESS_OFFICE_B_S_frame_1707_jpg.rf.18ee18cd38ca8fe19dc9c704d9fe153e.jpg,720,1280,1,470,696,600,718 -CHESS_OFFICE_B_S_frame_1707_jpg.rf.18ee18cd38ca8fe19dc9c704d9fe153e.jpg,720,1280,2,606,305,901,543 -PUZZLE_LIVINGROOM_H_S_frame_0960_jpg.rf.18f2ce9803368ed661a7ede45d6616fe.jpg,720,1280,2,443,649,765,714 -CARDS_LIVINGROOM_B_T_frame_2620_jpg.rf.18fa64dc32406693c80cff3a84a64716.jpg,720,1280,2,565,642,764,718 -CHESS_COURTYARD_T_B_frame_0788_jpg.rf.1906d0e85f0cc56a45cb966063cb9c98.jpg,720,1280,1,3,588,288,717 -CHESS_COURTYARD_T_B_frame_0788_jpg.rf.1906d0e85f0cc56a45cb966063cb9c98.jpg,720,1280,2,564,281,792,461 -PUZZLE_LIVINGROOM_B_T_frame_2679_jpg.rf.190c470d1b402bbae62dfbf82ffa7395.jpg,720,1280,1,188,486,573,713 -PUZZLE_LIVINGROOM_B_T_frame_2679_jpg.rf.190c470d1b402bbae62dfbf82ffa7395.jpg,720,1280,2,784,427,1223,665 -JENGA_COURTYARD_T_S_frame_0763_jpg.rf.1928694d5c25688ce9e428646997e43a.jpg,720,1280,1,96,272,404,592 -JENGA_COURTYARD_T_S_frame_0763_jpg.rf.1928694d5c25688ce9e428646997e43a.jpg,720,1280,2,543,247,782,493 -CARDS_OFFICE_B_S_frame_0750_jpg.rf.193e0bbee76053b885ca4b35d485330a.jpg,720,1280,1,373,654,489,718 -CARDS_OFFICE_B_S_frame_0750_jpg.rf.193e0bbee76053b885ca4b35d485330a.jpg,720,1280,2,678,681,742,718 -PUZZLE_LIVINGROOM_S_H_frame_1088_jpg.rf.19433eb6f9cdf9f857a4002a92d036f0.jpg,720,1280,1,65,468,476,693 -PUZZLE_LIVINGROOM_S_H_frame_1088_jpg.rf.19433eb6f9cdf9f857a4002a92d036f0.jpg,720,1280,2,516,474,770,712 -PUZZLE_LIVINGROOM_S_H_frame_1341_jpg.rf.196175f7235c1b6f3326cac5504e9f85.jpg,720,1280,2,635,644,950,718 -CARDS_COURTYARD_T_B_frame_2649_jpg.rf.1967a03a33354245a73a40588cde41a8.jpg,720,1280,1,114,596,424,718 -CARDS_COURTYARD_T_B_frame_2649_jpg.rf.1967a03a33354245a73a40588cde41a8.jpg,720,1280,2,650,462,877,681 -CHESS_OFFICE_S_B_frame_1176_jpg.rf.197ec6f3dc38c2a7da40ac5d810c94ec.jpg,720,1280,2,692,673,891,719 -CHESS_LIVINGROOM_T_H_frame_1726_jpg.rf.19878333b4623433749a743967f1ccb0.jpg,720,1280,1,1,347,108,577 -CHESS_LIVINGROOM_T_H_frame_1726_jpg.rf.19878333b4623433749a743967f1ccb0.jpg,720,1280,2,553,584,965,718 -PUZZLE_OFFICE_H_B_frame_0702_jpg.rf.199578f1c6658e8fb190ddf690a33b6a.jpg,720,1280,2,805,420,1021,572 -JENGA_LIVINGROOM_S_T_frame_2310_jpg.rf.19a123d4848617ebf5496ba5fc1b5b6f.jpg,720,1280,1,1,627,207,718 -JENGA_LIVINGROOM_S_T_frame_2310_jpg.rf.19a123d4848617ebf5496ba5fc1b5b6f.jpg,720,1280,2,344,534,762,718 -CARDS_OFFICE_H_T_frame_1434_jpg.rf.19b926fd4a6d5dad0e1bbfeef7383f14.jpg,720,1280,2,790,469,1237,713 -JENGA_COURTYARD_B_H_frame_1838_jpg.rf.19ee8bb448808c94d413d3bb97009dcc.jpg,720,1280,1,309,633,540,719 -JENGA_COURTYARD_B_H_frame_1838_jpg.rf.19ee8bb448808c94d413d3bb97009dcc.jpg,720,1280,2,766,602,1058,719 -JENGA_COURTYARD_T_S_frame_1744_jpg.rf.19fb593b643fb490f8ed3a8bb499a361.jpg,720,1280,1,105,309,435,547 -JENGA_COURTYARD_T_S_frame_1744_jpg.rf.19fb593b643fb490f8ed3a8bb499a361.jpg,720,1280,2,637,462,862,717 -CHESS_OFFICE_H_T_frame_1804_jpg.rf.1a0d1ab0c145e911533a63022f5e28d3.jpg,720,1280,2,659,330,872,507 -PUZZLE_COURTYARD_H_T_frame_1816_jpg.rf.1a230642c639ed61f5eb3ec66dcc5032.jpg,720,1280,1,459,539,720,712 -PUZZLE_COURTYARD_H_T_frame_1816_jpg.rf.1a230642c639ed61f5eb3ec66dcc5032.jpg,720,1280,2,692,342,932,549 -JENGA_COURTYARD_S_T_frame_1133_jpg.rf.1a30b6ae000276766bb9bd8c7faa145b.jpg,720,1280,2,676,643,952,716 -CHESS_COURTYARD_H_S_frame_0462_jpg.rf.1a446f90eeeb05f741cc172a8c131dc5.jpg,720,1280,1,493,697,609,717 -CHESS_COURTYARD_H_S_frame_0462_jpg.rf.1a446f90eeeb05f741cc172a8c131dc5.jpg,720,1280,2,418,299,695,518 -CARDS_OFFICE_H_T_frame_1308_jpg.rf.1a4e9b516b88600e209ab4002f0fe707.jpg,720,1280,1,294,625,395,718 -CARDS_OFFICE_H_T_frame_1308_jpg.rf.1a4e9b516b88600e209ab4002f0fe707.jpg,720,1280,2,563,428,1008,718 -CHESS_LIVINGROOM_H_T_frame_1786_jpg.rf.1a51497ecca7883c3aa7ff2b89623531.jpg,720,1280,1,1,638,177,716 -CHESS_LIVINGROOM_H_T_frame_1786_jpg.rf.1a51497ecca7883c3aa7ff2b89623531.jpg,720,1280,2,853,330,1249,646 -CARDS_COURTYARD_T_B_frame_2244_jpg.rf.1a86d0d99fffbe22d35679219ddeebc6.jpg,720,1280,1,184,588,448,717 -CARDS_COURTYARD_T_B_frame_2244_jpg.rf.1a86d0d99fffbe22d35679219ddeebc6.jpg,720,1280,2,653,464,872,698 -CHESS_OFFICE_H_T_frame_1548_jpg.rf.1aafc1d0269c34923e562b465bccabda.jpg,720,1280,2,581,367,823,557 -PUZZLE_OFFICE_H_B_frame_1616_jpg.rf.1ab13d66b9a825950b37acefe1db304d.jpg,720,1280,2,730,535,1010,719 -CARDS_LIVINGROOM_B_T_frame_2044_jpg.rf.1acd4da46ee104be5fc0076f1c88bea3.jpg,720,1280,2,563,684,709,718 -JENGA_OFFICE_S_B_frame_1203_jpg.rf.1acd60ac660366dbb03b9c78386ad39f.jpg,720,1280,2,479,486,745,716 -CHESS_LIVINGROOM_B_S_frame_2536_jpg.rf.1af3c18cd166d776836496de66bea957.jpg,720,1280,2,762,374,1224,705 -CHESS_OFFICE_H_T_frame_1519_jpg.rf.1afcdaee366edd597a140583b9aacbd4.jpg,720,1280,2,668,475,1037,719 -JENGA_LIVINGROOM_S_T_frame_1086_jpg.rf.1afd1087f5a39a45d4c64f5671eed2d6.jpg,720,1280,2,552,284,997,716 -CHESS_LIVINGROOM_B_S_frame_2265_jpg.rf.1b01277cd6d9f4b5e55884b321b4986b.jpg,720,1280,2,712,395,1027,600 -CHESS_COURTYARD_S_H_frame_1739_jpg.rf.1b31b1ccab195bc167ee526363e4bcce.jpg,720,1280,2,517,329,907,625 -PUZZLE_LIVINGROOM_S_H_frame_1855_jpg.rf.1b4c23fbf23ff292ae9c98095403412b.jpg,720,1280,2,519,494,1029,717 -CARDS_COURTYARD_T_B_frame_1661_jpg.rf.1b4e381b4cd8eba84f82cfb3f8e8e822.jpg,720,1280,1,201,502,502,717 -CARDS_COURTYARD_T_B_frame_1661_jpg.rf.1b4e381b4cd8eba84f82cfb3f8e8e822.jpg,720,1280,2,591,429,960,700 -JENGA_LIVINGROOM_S_T_frame_0490_jpg.rf.1b4e54043e7eb29fbd74f08c82152b08.jpg,720,1280,2,493,142,929,457 -CHESS_LIVINGROOM_H_T_frame_0263_jpg.rf.1ba8a8524f0942013afa01137a421d6f.jpg,720,1280,1,1,540,238,718 -CHESS_LIVINGROOM_H_T_frame_0263_jpg.rf.1ba8a8524f0942013afa01137a421d6f.jpg,720,1280,2,919,532,1279,718 -JENGA_OFFICE_S_B_frame_1242_jpg.rf.1badf866850bb782186f4fd46ce4a830.jpg,720,1280,2,510,450,850,714 -CHESS_OFFICE_B_S_frame_2585_jpg.rf.1bd9aa062c428b18ac9fe2fc1970dba0.jpg,720,1280,2,693,494,1092,696 -CARDS_COURTYARD_H_S_frame_1392_jpg.rf.1bfb15c904a326d2f930ec05630e0eec.jpg,720,1280,1,102,533,470,719 -CARDS_COURTYARD_H_S_frame_1392_jpg.rf.1bfb15c904a326d2f930ec05630e0eec.jpg,720,1280,2,593,460,865,719 -JENGA_OFFICE_T_H_frame_1720_jpg.rf.1c0a5fb3f97be89e9bcab62c31bc1584.jpg,720,1280,1,125,515,345,713 -JENGA_OFFICE_T_H_frame_1720_jpg.rf.1c0a5fb3f97be89e9bcab62c31bc1584.jpg,720,1280,2,621,375,901,715 -CARDS_COURTYARD_H_S_frame_0325_jpg.rf.1c0d82e22b8252ad6f7580ea12a49b4e.jpg,720,1280,1,118,661,290,716 -CARDS_COURTYARD_H_S_frame_0325_jpg.rf.1c0d82e22b8252ad6f7580ea12a49b4e.jpg,720,1280,2,645,574,870,719 -CARDS_COURTYARD_S_H_frame_1160_jpg.rf.1c11697055926e9ab651c771b1a2c438.jpg,720,1280,1,372,705,442,718 -CARDS_COURTYARD_H_S_frame_0199_jpg.rf.1c3010cd564ab87667cfe7695f7f2b7b.jpg,720,1280,1,240,592,495,719 -CARDS_COURTYARD_H_S_frame_0199_jpg.rf.1c3010cd564ab87667cfe7695f7f2b7b.jpg,720,1280,2,535,566,816,719 -JENGA_OFFICE_H_T_frame_1387_jpg.rf.1c4266abceb84c6a5d0b7476ed641b9b.jpg,720,1280,1,285,384,421,668 -JENGA_OFFICE_H_T_frame_1387_jpg.rf.1c4266abceb84c6a5d0b7476ed641b9b.jpg,720,1280,2,516,284,686,662 -CARDS_COURTYARD_S_H_frame_1688_jpg.rf.1c4dd3ac8f759482f910a6d12c31733e.jpg,720,1280,1,272,648,514,718 -CARDS_COURTYARD_S_H_frame_1688_jpg.rf.1c4dd3ac8f759482f910a6d12c31733e.jpg,720,1280,2,556,669,772,718 -PUZZLE_LIVINGROOM_H_S_frame_0831_jpg.rf.1c568a14978882381c17ca5aea21b96c.jpg,720,1280,1,3,445,341,719 -PUZZLE_LIVINGROOM_H_S_frame_0831_jpg.rf.1c568a14978882381c17ca5aea21b96c.jpg,720,1280,2,571,440,991,719 -JENGA_COURTYARD_B_H_frame_0994_jpg.rf.1c650517e7118d3f210aa362fd396afe.jpg,720,1280,2,679,200,994,526 -CARDS_OFFICE_T_H_frame_0935_jpg.rf.1c6b1eb655584ed1feed0ca9aa332cd4.jpg,720,1280,1,181,603,421,719 -CARDS_OFFICE_T_H_frame_0935_jpg.rf.1c6b1eb655584ed1feed0ca9aa332cd4.jpg,720,1280,2,476,556,745,719 -PUZZLE_LIVINGROOM_S_H_frame_0773_jpg.rf.1c70929d1a721c28d2f6963dba852769.jpg,720,1280,1,1,544,535,718 -PUZZLE_OFFICE_T_S_frame_1513_jpg.rf.1c87d859e07ee23642411bcbcabe5fc9.jpg,720,1280,1,8,513,78,624 -PUZZLE_OFFICE_T_S_frame_1513_jpg.rf.1c87d859e07ee23642411bcbcabe5fc9.jpg,720,1280,2,438,542,725,709 -PUZZLE_COURTYARD_B_S_frame_1477_jpg.rf.1c88550fae8e16a8e4e990e67c8c3bb0.jpg,720,1280,1,48,538,463,719 -PUZZLE_COURTYARD_B_S_frame_1477_jpg.rf.1c88550fae8e16a8e4e990e67c8c3bb0.jpg,720,1280,2,394,631,689,719 -JENGA_LIVINGROOM_B_H_frame_0820_jpg.rf.1c8ea3d68b2a933fa8ade22f5cf6205a.jpg,720,1280,1,43,634,341,718 -JENGA_LIVINGROOM_B_H_frame_0820_jpg.rf.1c8ea3d68b2a933fa8ade22f5cf6205a.jpg,720,1280,2,790,499,1092,717 -JENGA_OFFICE_H_T_frame_1580_jpg.rf.1c9156ecc0589014e7607259007bfda6.jpg,720,1280,1,291,372,420,697 -JENGA_OFFICE_H_T_frame_1580_jpg.rf.1c9156ecc0589014e7607259007bfda6.jpg,720,1280,2,760,370,891,701 -CARDS_OFFICE_H_T_frame_1614_jpg.rf.1c96bb2745f5dd60a6a1e3a54bd3e1b0.jpg,720,1280,2,507,531,894,718 -CHESS_OFFICE_B_S_frame_0695_jpg.rf.1c96cc2330a1ac12da20f80c3bb0afe3.jpg,720,1280,1,267,701,393,717 -CHESS_OFFICE_B_S_frame_0695_jpg.rf.1c96cc2330a1ac12da20f80c3bb0afe3.jpg,720,1280,2,587,698,716,718 -JENGA_COURTYARD_T_S_frame_2053_jpg.rf.1cc247c94b4d6bd1cf465a4b5b4510a6.jpg,720,1280,1,1,235,344,563 -JENGA_COURTYARD_T_S_frame_2053_jpg.rf.1cc247c94b4d6bd1cf465a4b5b4510a6.jpg,720,1280,2,617,692,726,717 -CHESS_LIVINGROOM_T_H_frame_2581_jpg.rf.1cc3545e0cc0c86052f29e8dba8119f5.jpg,720,1280,1,3,469,12,507 -CHESS_LIVINGROOM_T_H_frame_2581_jpg.rf.1cc3545e0cc0c86052f29e8dba8119f5.jpg,720,1280,2,553,409,975,718 -CHESS_COURTYARD_B_T_frame_1710_jpg.rf.1ce91430039d7e2d2d5d2b1c9332c561.jpg,720,1280,2,864,647,1092,717 -JENGA_OFFICE_S_B_frame_2451_jpg.rf.1cf58a39fbd7b08a7094974ee2aa2232.jpg,720,1280,2,467,363,677,650 -CHESS_COURTYARD_H_S_frame_2667_jpg.rf.1cf594d0103615e043d6f30e96da84a9.jpg,720,1280,2,736,553,998,718 -JENGA_LIVINGROOM_H_B_frame_0703_jpg.rf.1d39edd3e26bd0b2d7acff58ed7b114b.jpg,720,1280,2,604,370,894,698 -CARDS_LIVINGROOM_H_S_frame_2493_jpg.rf.1d4efc2561fe92c76a79b2aa6bbf9bc9.jpg,720,1280,1,251,656,317,718 -CARDS_LIVINGROOM_H_S_frame_2493_jpg.rf.1d4efc2561fe92c76a79b2aa6bbf9bc9.jpg,720,1280,2,579,514,1043,719 -PUZZLE_OFFICE_S_T_frame_2552_jpg.rf.1d5c37b60ab434a8a35170810b3f3412.jpg,720,1280,1,224,572,492,719 -PUZZLE_OFFICE_S_T_frame_2552_jpg.rf.1d5c37b60ab434a8a35170810b3f3412.jpg,720,1280,2,648,640,905,719 -CHESS_COURTYARD_T_B_frame_2068_jpg.rf.1d6d2a71f5b737f17973d7748ef7904b.jpg,720,1280,1,1,632,119,718 -CHESS_COURTYARD_T_B_frame_2068_jpg.rf.1d6d2a71f5b737f17973d7748ef7904b.jpg,720,1280,2,647,362,1017,596 -CHESS_LIVINGROOM_S_B_frame_1174_jpg.rf.1d7329dd385c21d035b700646666651e.jpg,720,1280,1,1,520,131,714 -CHESS_LIVINGROOM_S_B_frame_1174_jpg.rf.1d7329dd385c21d035b700646666651e.jpg,720,1280,2,897,453,1274,718 -PUZZLE_OFFICE_S_T_frame_0712_jpg.rf.1d753f2fbb8726a49af6b27f3f227919.jpg,720,1280,1,19,548,407,717 -CARDS_COURTYARD_T_B_frame_0629_jpg.rf.1deae29bc3f41b0cf6b58ca54b9bd54f.jpg,720,1280,1,126,590,441,718 -CARDS_COURTYARD_T_B_frame_0629_jpg.rf.1deae29bc3f41b0cf6b58ca54b9bd54f.jpg,720,1280,2,546,543,864,718 -CARDS_COURTYARD_T_B_frame_0227_jpg.rf.1df15e1102a147cb8daa5a8b7ea335e4.jpg,720,1280,1,193,475,497,718 -CARDS_COURTYARD_T_B_frame_0227_jpg.rf.1df15e1102a147cb8daa5a8b7ea335e4.jpg,720,1280,2,567,474,877,713 -JENGA_OFFICE_T_H_frame_2156_jpg.rf.1dfc4ba41c88f20b66cf1ac42c709dad.jpg,720,1280,1,27,487,326,717 -JENGA_OFFICE_T_H_frame_2156_jpg.rf.1dfc4ba41c88f20b66cf1ac42c709dad.jpg,720,1280,2,714,679,811,719 -PUZZLE_OFFICE_B_H_frame_0822_jpg.rf.1e015eaf55e955b07f2c2279da283a51.jpg,720,1280,1,154,524,594,716 -PUZZLE_OFFICE_B_H_frame_0822_jpg.rf.1e015eaf55e955b07f2c2279da283a51.jpg,720,1280,2,622,519,1127,717 -PUZZLE_OFFICE_H_B_frame_1556_jpg.rf.1e22800703c44e3a254680a3411e54b7.jpg,720,1280,2,758,637,1040,718 -CHESS_COURTYARD_T_B_frame_1757_jpg.rf.1e2235b8b2db649fbcd6f6ba3d45d5fc.jpg,720,1280,1,61,701,261,718 -CHESS_COURTYARD_T_B_frame_0162_jpg.rf.1e2c131b4a61181c405aa5f24f3aba4e.jpg,720,1280,2,501,380,712,559 -PUZZLE_LIVINGROOM_H_S_frame_2322_jpg.rf.1e2d9fb48b9357581480afb113c3e04e.jpg,720,1280,1,19,518,444,714 -PUZZLE_LIVINGROOM_H_S_frame_2322_jpg.rf.1e2d9fb48b9357581480afb113c3e04e.jpg,720,1280,2,625,541,947,713 -PUZZLE_COURTYARD_B_S_frame_1061_jpg.rf.1e42d0fbad8724c3ebe0b3ec1dde3554.jpg,720,1280,1,305,701,401,719 -PUZZLE_COURTYARD_B_S_frame_1061_jpg.rf.1e42d0fbad8724c3ebe0b3ec1dde3554.jpg,720,1280,2,712,473,1279,716 -CARDS_LIVINGROOM_B_T_frame_2292_jpg.rf.1e580517a29cd49395077a9abcc2d5a3.jpg,720,1280,1,164,665,249,718 -PUZZLE_COURTYARD_H_T_frame_1863_jpg.rf.1e582ede16eab42a7ffe205948cbd8d9.jpg,720,1280,1,299,597,551,717 -PUZZLE_COURTYARD_H_T_frame_1863_jpg.rf.1e582ede16eab42a7ffe205948cbd8d9.jpg,720,1280,2,733,564,956,717 -JENGA_OFFICE_B_S_frame_1704_jpg.rf.1e68ce461e0539ce74b435b476960e77.jpg,720,1280,2,439,507,770,718 -PUZZLE_COURTYARD_S_B_frame_0576_jpg.rf.1e6c2ab7e492c38b6156938e45e4db0f.jpg,720,1280,2,655,581,972,717 -CARDS_OFFICE_S_B_frame_0292_jpg.rf.1e7d443e161108a5e5449b64d08c40e8.jpg,720,1280,1,254,665,382,718 -CARDS_COURTYARD_B_T_frame_2699_jpg.rf.1e8add32b777be9e6d01c0019c1698d8.jpg,720,1280,2,612,691,697,717 -CARDS_LIVINGROOM_H_S_frame_0992_jpg.rf.1e9c5d2bb2374a40953e0e06d3c52149.jpg,720,1280,2,609,639,894,719 -CHESS_OFFICE_T_H_frame_1332_jpg.rf.1ea8e92dd2f42f7d9de0fe83351befa8.jpg,720,1280,1,6,479,280,718 -CHESS_OFFICE_T_H_frame_1332_jpg.rf.1ea8e92dd2f42f7d9de0fe83351befa8.jpg,720,1280,2,519,691,707,719 -CHESS_OFFICE_T_H_frame_1194_jpg.rf.1eb5fa016b1849c8c894bab97cbc9485.jpg,720,1280,1,9,643,284,718 -CHESS_OFFICE_T_H_frame_1194_jpg.rf.1eb5fa016b1849c8c894bab97cbc9485.jpg,720,1280,2,630,283,926,473 -CARDS_LIVINGROOM_H_S_frame_1646_jpg.rf.1f1b7467ce518d1aa27bcf21ad96b463.jpg,720,1280,2,671,507,976,719 -JENGA_OFFICE_H_T_frame_1162_jpg.rf.1f26cd25984b66d45d7b0bb7572308a6.jpg,720,1280,1,214,698,334,716 -JENGA_OFFICE_H_T_frame_1162_jpg.rf.1f26cd25984b66d45d7b0bb7572308a6.jpg,720,1280,2,773,646,951,718 -PUZZLE_COURTYARD_H_T_frame_2094_jpg.rf.1f3b6089aa49d965e7023ee6998e42a5.jpg,720,1280,1,315,508,561,683 -PUZZLE_COURTYARD_H_T_frame_2094_jpg.rf.1f3b6089aa49d965e7023ee6998e42a5.jpg,720,1280,2,686,547,919,717 -PUZZLE_OFFICE_S_T_frame_2565_jpg.rf.1f54e621561ebd6a77e376767cb0206a.jpg,720,1280,1,300,697,414,718 -PUZZLE_OFFICE_S_T_frame_2565_jpg.rf.1f54e621561ebd6a77e376767cb0206a.jpg,720,1280,2,647,623,894,718 -CHESS_OFFICE_T_H_frame_2377_jpg.rf.1f6d1e5553026c2c1928935dda5b9b3c.jpg,720,1280,1,126,547,403,710 -JENGA_OFFICE_H_T_frame_1044_jpg.rf.1f7c8a022bfb8592d1132e2d811d7bfc.jpg,720,1280,1,133,638,338,716 -JENGA_OFFICE_H_T_frame_1044_jpg.rf.1f7c8a022bfb8592d1132e2d811d7bfc.jpg,720,1280,2,760,580,1001,718 -CARDS_COURTYARD_H_S_frame_2452_jpg.rf.1f8ccdd9eab9022da11614b643a8c618.jpg,720,1280,1,253,613,386,719 -CARDS_COURTYARD_H_S_frame_2452_jpg.rf.1f8ccdd9eab9022da11614b643a8c618.jpg,720,1280,2,595,480,858,702 -CHESS_COURTYARD_H_S_frame_0321_jpg.rf.1f926b01c0dc38c6f8369a650ae31f6a.jpg,720,1280,2,530,276,792,445 -CHESS_COURTYARD_S_H_frame_0573_jpg.rf.1fa4de6e414533e65db92fb67d644c41.jpg,720,1280,2,581,573,1023,716 -JENGA_OFFICE_T_H_frame_1886_jpg.rf.1fb5ac514eeb035bfd09a1c386ad8a8f.jpg,720,1280,1,212,636,372,716 -JENGA_OFFICE_T_H_frame_1886_jpg.rf.1fb5ac514eeb035bfd09a1c386ad8a8f.jpg,720,1280,2,619,632,788,718 -CARDS_OFFICE_H_T_frame_1094_jpg.rf.1fde93d8bc07e76da68497e8ba12087c.jpg,720,1280,1,228,621,342,718 -CARDS_OFFICE_H_T_frame_1094_jpg.rf.1fde93d8bc07e76da68497e8ba12087c.jpg,720,1280,2,616,631,853,718 -JENGA_OFFICE_B_S_frame_1605_jpg.rf.1fe10f826716574c419ac57b0851e93f.jpg,720,1280,1,249,528,580,716 -JENGA_OFFICE_B_S_frame_1605_jpg.rf.1fe10f826716574c419ac57b0851e93f.jpg,720,1280,2,642,574,965,718 -CARDS_LIVINGROOM_S_H_frame_1915_jpg.rf.1fe5905027b8d8b50d3cd812d5c2c20f.jpg,720,1280,1,274,485,544,718 -CARDS_OFFICE_T_H_frame_1036_jpg.rf.1fec1bae23197e518afa09294296e10b.jpg,720,1280,1,234,658,317,719 -CARDS_OFFICE_T_H_frame_1036_jpg.rf.1fec1bae23197e518afa09294296e10b.jpg,720,1280,2,512,615,713,719 -CARDS_COURTYARD_T_B_frame_0637_jpg.rf.1fed961d75a1c59d8a49d7cabdf76334.jpg,720,1280,1,126,593,432,718 -CARDS_COURTYARD_T_B_frame_0637_jpg.rf.1fed961d75a1c59d8a49d7cabdf76334.jpg,720,1280,2,530,545,845,718 -CARDS_COURTYARD_S_H_frame_2186_jpg.rf.2005506ed83a5d64efd3bcf6899fc2c4.jpg,720,1280,1,24,487,397,716 -JENGA_OFFICE_T_H_frame_0460_jpg.rf.2019b61a09113287751098c11d471d64.jpg,720,1280,1,296,663,472,719 -JENGA_OFFICE_T_H_frame_0460_jpg.rf.2019b61a09113287751098c11d471d64.jpg,720,1280,2,479,671,638,719 -CHESS_OFFICE_B_S_frame_1484_jpg.rf.201a31582c481fb692eed4d79b2e2900.jpg,720,1280,1,171,701,365,718 -CHESS_OFFICE_B_S_frame_1484_jpg.rf.201a31582c481fb692eed4d79b2e2900.jpg,720,1280,2,656,687,821,717 -CARDS_OFFICE_T_H_frame_1446_jpg.rf.2021032f95b10dbf7c082d010f994c98.jpg,720,1280,1,310,675,366,719 -CARDS_OFFICE_T_H_frame_1446_jpg.rf.2021032f95b10dbf7c082d010f994c98.jpg,720,1280,2,556,560,762,719 -CARDS_OFFICE_H_T_frame_1574_jpg.rf.203e6eee120995870e89691323e5e108.jpg,720,1280,1,281,627,353,718 -CARDS_OFFICE_H_T_frame_1574_jpg.rf.203e6eee120995870e89691323e5e108.jpg,720,1280,2,857,309,1275,610 -PUZZLE_OFFICE_S_T_frame_2585_jpg.rf.2048cf6c273e2356e46df50c746db01a.jpg,720,1280,1,68,543,374,718 -PUZZLE_OFFICE_S_T_frame_2585_jpg.rf.2048cf6c273e2356e46df50c746db01a.jpg,720,1280,2,583,532,878,717 -PUZZLE_COURTYARD_H_T_frame_1723_jpg.rf.204feb068990aabac9edc5f2722242e5.jpg,720,1280,1,543,681,695,716 -PUZZLE_COURTYARD_H_T_frame_1723_jpg.rf.204feb068990aabac9edc5f2722242e5.jpg,720,1280,2,711,428,951,602 -JENGA_COURTYARD_B_H_frame_0150_jpg.rf.2063aab9d66ea57894c512e1ec06fc67.jpg,720,1280,2,873,238,1022,463 -CARDS_COURTYARD_B_T_frame_2619_jpg.rf.20b79f5ab95401f2bca02beeb353e370.jpg,720,1280,2,646,681,740,718 -CARDS_OFFICE_H_T_frame_0199_jpg.rf.20c6fe83560da08b1302b8497e2fcc50.jpg,720,1280,1,10,462,345,716 -CARDS_OFFICE_H_T_frame_0199_jpg.rf.20c6fe83560da08b1302b8497e2fcc50.jpg,720,1280,2,526,272,749,450 -CHESS_LIVINGROOM_T_H_frame_0522_jpg.rf.20ce54d298cb86acf9d4714b0711d92b.jpg,720,1280,2,472,434,1108,719 -CHESS_LIVINGROOM_T_H_frame_0885_jpg.rf.20e584937c25c840ae31ded3ab7be207.jpg,720,1280,1,3,338,104,492 -CHESS_LIVINGROOM_T_H_frame_0885_jpg.rf.20e584937c25c840ae31ded3ab7be207.jpg,720,1280,2,463,663,748,719 -CARDS_OFFICE_S_B_frame_0649_jpg.rf.20e7e698323a8811e7be506e30ea50a3.jpg,720,1280,1,346,700,428,718 -PUZZLE_COURTYARD_B_S_frame_1440_jpg.rf.20ea32266513c3634c8c4b0630454185.jpg,720,1280,1,115,555,435,719 -PUZZLE_COURTYARD_B_S_frame_1440_jpg.rf.20ea32266513c3634c8c4b0630454185.jpg,720,1280,2,483,662,741,719 -CHESS_COURTYARD_B_T_frame_1661_jpg.rf.21033fb40a820f4c26f3afd0fbe4a1c2.jpg,720,1280,2,713,424,969,593 -CARDS_COURTYARD_H_S_frame_2638_jpg.rf.211843718c6270e98369ce9c381ce6d8.jpg,720,1280,1,140,456,474,719 -CARDS_COURTYARD_H_S_frame_2638_jpg.rf.211843718c6270e98369ce9c381ce6d8.jpg,720,1280,2,705,354,933,571 -PUZZLE_OFFICE_T_S_frame_0976_jpg.rf.212e41779ecbd151256ac33588670a50.jpg,720,1280,1,6,474,215,716 -JENGA_OFFICE_H_T_frame_0995_jpg.rf.213c15398d1561bf0b2bd705a0070a4b.jpg,720,1280,1,115,623,337,719 -JENGA_OFFICE_H_T_frame_0995_jpg.rf.213c15398d1561bf0b2bd705a0070a4b.jpg,720,1280,2,759,549,990,717 -PUZZLE_LIVINGROOM_S_H_frame_2335_jpg.rf.21495c62ea64acc657888bb9f08f068a.jpg,720,1280,1,1,313,177,540 -PUZZLE_LIVINGROOM_S_H_frame_2335_jpg.rf.21495c62ea64acc657888bb9f08f068a.jpg,720,1280,2,923,479,1277,718 -CARDS_COURTYARD_S_H_frame_1013_jpg.rf.214bd0358a3e75ab368a1eaa77abf288.jpg,720,1280,1,236,619,463,718 -CHESS_COURTYARD_T_B_frame_2393_jpg.rf.215d7909ac5fbbaa7b8fdcdeb6a24306.jpg,720,1280,1,46,665,269,716 -CHESS_COURTYARD_T_B_frame_2393_jpg.rf.215d7909ac5fbbaa7b8fdcdeb6a24306.jpg,720,1280,2,287,650,564,718 -JENGA_OFFICE_H_T_frame_1011_jpg.rf.21646913b0a1e2e33c231de037e3e953.jpg,720,1280,1,115,620,352,719 -JENGA_OFFICE_H_T_frame_1011_jpg.rf.21646913b0a1e2e33c231de037e3e953.jpg,720,1280,2,758,564,1006,719 -PUZZLE_COURTYARD_S_B_frame_1076_jpg.rf.218661170138326244a94688961ad8f9.jpg,720,1280,1,229,433,568,701 -PUZZLE_COURTYARD_S_B_frame_1076_jpg.rf.218661170138326244a94688961ad8f9.jpg,720,1280,2,645,427,837,654 -CHESS_LIVINGROOM_S_B_frame_1959_jpg.rf.218ee36e082e54ae0e962c47424f9f8a.jpg,720,1280,2,921,580,1206,719 -CHESS_LIVINGROOM_S_B_frame_1959_jpg.rf.218ee36e082e54ae0e962c47424f9f8a.jpg,720,1280,1,148,678,299,719 -CHESS_OFFICE_S_B_frame_0905_jpg.rf.21989aab9f2fb1e0e67dbbd303d5c378.jpg,720,1280,2,466,221,833,520 -JENGA_COURTYARD_T_S_frame_1579_jpg.rf.21a75107615e917506d69d86f63514e6.jpg,720,1280,1,212,427,465,706 -JENGA_COURTYARD_T_S_frame_1579_jpg.rf.21a75107615e917506d69d86f63514e6.jpg,720,1280,2,499,501,700,718 -CHESS_COURTYARD_T_B_frame_1754_jpg.rf.21c6cb1ec2b41ad54056891fe3133534.jpg,720,1280,1,63,701,253,718 -CARDS_COURTYARD_T_B_frame_0557_jpg.rf.221144d38fdbe8205e22bcf91a9ecd20.jpg,720,1280,1,166,524,506,717 -CARDS_COURTYARD_T_B_frame_0557_jpg.rf.221144d38fdbe8205e22bcf91a9ecd20.jpg,720,1280,2,672,324,1050,709 -JENGA_COURTYARD_S_T_frame_2617_jpg.rf.222344ed8b3887bdb4c429e6735c8692.jpg,720,1280,2,530,155,984,384 -JENGA_COURTYARD_S_T_frame_2617_jpg.rf.222344ed8b3887bdb4c429e6735c8692.jpg,720,1280,1,213,627,406,718 -JENGA_OFFICE_H_T_frame_0037_jpg.rf.22280834d9cf9f7e9459187989a837b5.jpg,720,1280,1,470,677,629,716 -JENGA_OFFICE_H_T_frame_0037_jpg.rf.22280834d9cf9f7e9459187989a837b5.jpg,720,1280,2,734,599,951,717 -PUZZLE_COURTYARD_B_S_frame_0588_jpg.rf.222caa8d05e22e576acba5fa9a75f84c.jpg,720,1280,2,867,616,1144,719 -JENGA_OFFICE_H_T_frame_2052_jpg.rf.2233775178c591a69f1b8d1cf8bb4ce9.jpg,720,1280,1,311,197,451,579 -JENGA_OFFICE_H_T_frame_2052_jpg.rf.2233775178c591a69f1b8d1cf8bb4ce9.jpg,720,1280,2,619,255,860,625 -PUZZLE_COURTYARD_S_B_frame_1008_jpg.rf.22376cf28a395c9f309becb5e1f3dce5.jpg,720,1280,2,556,603,1022,717 -CHESS_LIVINGROOM_T_H_frame_2057_jpg.rf.223f2c93a2aa587984438a6b8b7c5cb6.jpg,720,1280,1,1,289,111,537 -CHESS_LIVINGROOM_T_H_frame_2057_jpg.rf.223f2c93a2aa587984438a6b8b7c5cb6.jpg,720,1280,2,589,146,1206,591 -JENGA_OFFICE_T_H_frame_1756_jpg.rf.224dfd2c66a600a5268357e3f6609f21.jpg,720,1280,1,150,523,330,715 -JENGA_OFFICE_T_H_frame_1756_jpg.rf.224dfd2c66a600a5268357e3f6609f21.jpg,720,1280,2,610,489,880,718 -CARDS_LIVINGROOM_T_B_frame_1566_jpg.rf.22515489a9704d14f2b79490ccb7fd3c.jpg,720,1280,1,36,706,62,719 -CARDS_LIVINGROOM_T_B_frame_1566_jpg.rf.22515489a9704d14f2b79490ccb7fd3c.jpg,720,1280,2,463,502,944,719 -PUZZLE_COURTYARD_B_S_frame_1181_jpg.rf.22689a0f784741624d67fa837355a131.jpg,720,1280,1,197,679,401,719 -PUZZLE_COURTYARD_B_S_frame_1181_jpg.rf.22689a0f784741624d67fa837355a131.jpg,720,1280,2,616,644,880,716 -JENGA_COURTYARD_H_B_frame_2380_jpg.rf.226bd5fb556850d9811464ec3c6f1d40.jpg,720,1280,2,709,614,961,718 -JENGA_COURTYARD_H_B_frame_2380_jpg.rf.226bd5fb556850d9811464ec3c6f1d40.jpg,720,1280,1,232,691,317,718 -CARDS_COURTYARD_H_S_frame_1604_jpg.rf.229ce5ad2946d4665b9792b08664a845.jpg,720,1280,1,155,537,467,719 -CARDS_COURTYARD_H_S_frame_1604_jpg.rf.229ce5ad2946d4665b9792b08664a845.jpg,720,1280,2,528,498,834,719 -JENGA_LIVINGROOM_H_B_frame_1330_jpg.rf.22a95d4d3c1295e622222916b69aa111.jpg,720,1280,1,155,338,465,567 -JENGA_LIVINGROOM_H_B_frame_1330_jpg.rf.22a95d4d3c1295e622222916b69aa111.jpg,720,1280,2,707,325,978,714 -CARDS_COURTYARD_S_H_frame_1441_jpg.rf.22a9f93eebae8ace1106bb343fcca165.jpg,720,1280,1,310,667,541,718 -CARDS_COURTYARD_S_H_frame_1441_jpg.rf.22a9f93eebae8ace1106bb343fcca165.jpg,720,1280,2,575,680,749,718 -JENGA_LIVINGROOM_T_S_frame_2634_jpg.rf.22b513d17b10847faca4e817313ff009.jpg,720,1280,1,13,322,393,682 -JENGA_LIVINGROOM_T_S_frame_2634_jpg.rf.22b513d17b10847faca4e817313ff009.jpg,720,1280,2,501,303,889,624 -CHESS_LIVINGROOM_S_B_frame_0466_jpg.rf.22c00eeadefe6bf0b5d44a21072dbfc0.jpg,720,1280,2,854,651,1162,716 -PUZZLE_OFFICE_H_B_frame_1075_jpg.rf.22f2a634d6d18f4b0770e5289b3e5599.jpg,720,1280,2,724,601,973,719 -PUZZLE_OFFICE_H_B_frame_1075_jpg.rf.22f2a634d6d18f4b0770e5289b3e5599.jpg,720,1280,1,76,615,334,719 -JENGA_COURTYARD_T_S_frame_0761_jpg.rf.22faeea66f52a746ea4ead7c8ffea295.jpg,720,1280,1,94,267,406,564 -JENGA_COURTYARD_T_S_frame_0761_jpg.rf.22faeea66f52a746ea4ead7c8ffea295.jpg,720,1280,2,552,246,791,494 -CARDS_COURTYARD_H_S_frame_1479_jpg.rf.23011dc85d7e7e20a782003f9296f983.jpg,720,1280,1,120,512,436,719 -CARDS_COURTYARD_H_S_frame_1479_jpg.rf.23011dc85d7e7e20a782003f9296f983.jpg,720,1280,2,542,424,943,706 -CHESS_COURTYARD_H_S_frame_1944_jpg.rf.2300a51c45c6769ad42229db40d303d4.jpg,720,1280,2,818,630,1046,719 -JENGA_LIVINGROOM_S_T_frame_1037_jpg.rf.230a5c569cceecdf437eae2c29a47f49.jpg,720,1280,1,1,396,465,716 -JENGA_LIVINGROOM_S_T_frame_1037_jpg.rf.230a5c569cceecdf437eae2c29a47f49.jpg,720,1280,2,573,402,1006,718 -JENGA_OFFICE_S_B_frame_1414_jpg.rf.232ec1b5a1a735420e5ddaf2de2aefba.jpg,720,1280,1,149,587,419,719 -JENGA_OFFICE_S_B_frame_1414_jpg.rf.232ec1b5a1a735420e5ddaf2de2aefba.jpg,720,1280,2,708,456,1077,719 -PUZZLE_COURTYARD_T_H_frame_1793_jpg.rf.2357b0005bd7393b54c41347b804e7e6.jpg,720,1280,2,1003,642,1279,716 -PUZZLE_LIVINGROOM_T_B_frame_0697_jpg.rf.23771c499ecaf121a9c133ed879ebbc6.jpg,720,1280,1,2,543,205,718 -PUZZLE_LIVINGROOM_T_B_frame_0697_jpg.rf.23771c499ecaf121a9c133ed879ebbc6.jpg,720,1280,2,535,560,1015,714 -PUZZLE_OFFICE_H_B_frame_2623_jpg.rf.235e16b8b76270bdd4d60e5feabdd17f.jpg,720,1280,2,687,487,871,692 -CARDS_LIVINGROOM_H_S_frame_0453_jpg.rf.2373806e6af1fccfaece501353bbedcc.jpg,720,1280,2,726,641,969,719 -PUZZLE_LIVINGROOM_S_H_frame_0870_jpg.rf.2377b9171bc490b0f4699a4d1092bbb2.jpg,720,1280,1,1,595,200,716 -PUZZLE_LIVINGROOM_S_H_frame_0870_jpg.rf.2377b9171bc490b0f4699a4d1092bbb2.jpg,720,1280,2,633,629,953,718 -PUZZLE_LIVINGROOM_B_T_frame_1230_jpg.rf.237d4d928a0311988f4b0297e3bd6d19.jpg,720,1280,1,3,614,95,712 -PUZZLE_LIVINGROOM_B_T_frame_1230_jpg.rf.237d4d928a0311988f4b0297e3bd6d19.jpg,720,1280,2,360,325,631,490 -CARDS_OFFICE_T_H_frame_2081_jpg.rf.239dd9f0ae57fef6b8acd154e100fc10.jpg,720,1280,2,393,558,745,719 -PUZZLE_LIVINGROOM_S_H_frame_0835_jpg.rf.23a1b2023cb7454b997658f7695ae239.jpg,720,1280,1,5,468,567,712 -PUZZLE_LIVINGROOM_S_H_frame_0835_jpg.rf.23a1b2023cb7454b997658f7695ae239.jpg,720,1280,2,599,614,900,718 -CHESS_OFFICE_T_H_frame_0941_jpg.rf.23cdcc5a990155cbfe3146e92e0325ad.jpg,720,1280,1,16,546,304,719 -CHESS_OFFICE_T_H_frame_0941_jpg.rf.23cdcc5a990155cbfe3146e92e0325ad.jpg,720,1280,2,444,613,717,717 -PUZZLE_OFFICE_T_S_frame_2042_jpg.rf.23f9bf9d16d980778199f5becabe9513.jpg,720,1280,1,31,422,382,705 -PUZZLE_OFFICE_T_S_frame_2042_jpg.rf.23f9bf9d16d980778199f5becabe9513.jpg,720,1280,2,559,396,876,671 -JENGA_OFFICE_T_H_frame_1834_jpg.rf.240b1d447e86ab32b05b69a69b981cfe.jpg,720,1280,1,274,639,388,718 -JENGA_OFFICE_T_H_frame_1834_jpg.rf.240b1d447e86ab32b05b69a69b981cfe.jpg,720,1280,2,632,604,772,713 -CARDS_OFFICE_T_H_frame_0834_jpg.rf.2411ec883c740bf91cd8dd1ec391a6c7.jpg,720,1280,1,130,596,397,719 -CARDS_OFFICE_T_H_frame_0834_jpg.rf.2411ec883c740bf91cd8dd1ec391a6c7.jpg,720,1280,2,486,552,747,719 -PUZZLE_OFFICE_H_B_frame_1885_jpg.rf.241588d960bc6d09159f74cd2f5afb1f.jpg,720,1280,1,366,536,634,717 -PUZZLE_OFFICE_H_B_frame_1885_jpg.rf.241588d960bc6d09159f74cd2f5afb1f.jpg,720,1280,2,709,464,952,658 -CARDS_COURTYARD_H_S_frame_1403_jpg.rf.241b9db5a60f899b442b40365cb01502.jpg,720,1280,1,141,542,468,719 -CARDS_COURTYARD_H_S_frame_1403_jpg.rf.241b9db5a60f899b442b40365cb01502.jpg,720,1280,2,600,448,874,719 -JENGA_COURTYARD_B_H_frame_1405_jpg.rf.242776ceb70e2b26e687149e8d0fee5d.jpg,720,1280,1,362,671,535,719 -JENGA_COURTYARD_B_H_frame_1405_jpg.rf.242776ceb70e2b26e687149e8d0fee5d.jpg,720,1280,2,693,277,977,681 -PUZZLE_COURTYARD_B_S_frame_1416_jpg.rf.24478fe707676c823a9043eeffb3989f.jpg,720,1280,1,229,655,457,719 -PUZZLE_COURTYARD_B_S_frame_1416_jpg.rf.24478fe707676c823a9043eeffb3989f.jpg,720,1280,2,595,629,848,719 -CARDS_LIVINGROOM_B_T_frame_2160_jpg.rf.248a4fcce697a26e303c137857a52024.jpg,720,1280,1,236,703,281,718 -CARDS_LIVINGROOM_B_T_frame_2160_jpg.rf.248a4fcce697a26e303c137857a52024.jpg,720,1280,2,603,587,851,718 -CARDS_COURTYARD_B_T_frame_2366_jpg.rf.24c471aab95f049544eead0da2c94cd9.jpg,720,1280,2,660,702,709,717 -CHESS_LIVINGROOM_H_T_frame_1503_jpg.rf.24cee2bad18ada11ee48231324bdeb64.jpg,720,1280,1,5,638,234,718 -CHESS_LIVINGROOM_H_T_frame_1503_jpg.rf.24cee2bad18ada11ee48231324bdeb64.jpg,720,1280,2,319,343,819,635 -JENGA_OFFICE_H_T_frame_1476_jpg.rf.24d4a6f2479edb79007f1589e5a1ddcd.jpg,720,1280,1,424,335,547,693 -JENGA_OFFICE_H_T_frame_1476_jpg.rf.24d4a6f2479edb79007f1589e5a1ddcd.jpg,720,1280,2,634,378,785,661 -CHESS_OFFICE_H_T_frame_2051_jpg.rf.24d9770a921b8c3bd2ad06df5d832fa5.jpg,720,1280,2,563,373,812,581 -CARDS_COURTYARD_S_H_frame_0890_jpg.rf.24f01dde2ef1e5bfb68069a20e787463.jpg,720,1280,1,152,646,423,718 -CARDS_COURTYARD_S_H_frame_0890_jpg.rf.24f01dde2ef1e5bfb68069a20e787463.jpg,720,1280,2,548,686,597,718 -JENGA_OFFICE_T_H_frame_0863_jpg.rf.24fbe3f3d52f030c0681d8a2b804fb8f.jpg,720,1280,2,634,333,936,623 -JENGA_OFFICE_T_H_frame_0863_jpg.rf.24fbe3f3d52f030c0681d8a2b804fb8f.jpg,720,1280,1,172,586,507,718 -PUZZLE_OFFICE_T_S_frame_1376_jpg.rf.256ca3cc51012281eaac88608527891e.jpg,720,1280,1,1,533,385,714 -PUZZLE_OFFICE_T_S_frame_1376_jpg.rf.256ca3cc51012281eaac88608527891e.jpg,720,1280,2,497,519,809,716 -PUZZLE_COURTYARD_T_H_frame_0184_jpg.rf.2580f4596cf15470ad1c022c9de3a05c.jpg,720,1280,1,226,595,582,718 -PUZZLE_COURTYARD_T_H_frame_0184_jpg.rf.2580f4596cf15470ad1c022c9de3a05c.jpg,720,1280,2,762,614,1054,718 -CARDS_COURTYARD_S_H_frame_2138_jpg.rf.258335943377bfaccf864e8bfd4b048c.jpg,720,1280,1,287,693,383,718 -PUZZLE_OFFICE_S_T_frame_0577_jpg.rf.259ee21d3f4ae836d488b013fc523827.jpg,720,1280,1,67,545,407,718 -PUZZLE_OFFICE_S_T_frame_0577_jpg.rf.259ee21d3f4ae836d488b013fc523827.jpg,720,1280,2,517,493,753,718 -CARDS_LIVINGROOM_B_T_frame_1476_jpg.rf.25b0e401cc9ec9331e3634d267edf278.jpg,720,1280,2,577,566,855,718 -PUZZLE_OFFICE_H_B_frame_0834_jpg.rf.25c9e1ecd51befe97605d6857785ea41.jpg,720,1280,2,790,687,978,712 -JENGA_COURTYARD_S_T_frame_0940_jpg.rf.25ca672f5ce1337af93c600b6f1131f3.jpg,720,1280,2,526,318,964,561 -PUZZLE_COURTYARD_H_T_frame_1233_jpg.rf.25cc4cbeddd59b9323fa8efe3346749d.jpg,720,1280,1,269,499,481,709 -PUZZLE_COURTYARD_H_T_frame_1233_jpg.rf.25cc4cbeddd59b9323fa8efe3346749d.jpg,720,1280,2,984,596,1237,716 -CHESS_OFFICE_H_T_frame_1504_jpg.rf.25df84e395e11975371ad59ffa70d2f8.jpg,720,1280,2,658,320,993,558 -CARDS_LIVINGROOM_T_B_frame_0133_jpg.rf.25dff458a0f9a357fc2325e6085039f5.jpg,720,1280,1,2,508,395,719 -CARDS_LIVINGROOM_T_B_frame_0133_jpg.rf.25dff458a0f9a357fc2325e6085039f5.jpg,720,1280,2,594,449,1081,719 -PUZZLE_LIVINGROOM_S_H_frame_1955_jpg.rf.260ad82145425e3b60bb5162aed9df5b.jpg,720,1280,1,56,519,414,716 -PUZZLE_LIVINGROOM_S_H_frame_1955_jpg.rf.260ad82145425e3b60bb5162aed9df5b.jpg,720,1280,2,766,606,1156,718 -CARDS_COURTYARD_B_T_frame_1577_jpg.rf.2674d4bd365b52b899b41af8beed1bcd.jpg,720,1280,1,158,466,499,717 -CARDS_COURTYARD_B_T_frame_1577_jpg.rf.2674d4bd365b52b899b41af8beed1bcd.jpg,720,1280,2,620,452,894,706 -CARDS_COURTYARD_T_B_frame_2238_jpg.rf.267fd34f4e322aca6af4932c43879475.jpg,720,1280,1,210,584,492,716 -CARDS_COURTYARD_T_B_frame_2238_jpg.rf.267fd34f4e322aca6af4932c43879475.jpg,720,1280,2,667,373,948,576 -CARDS_OFFICE_B_S_frame_2224_jpg.rf.2682727c6a86d5ec763698aab5ca44c6.jpg,720,1280,1,311,662,390,718 -CARDS_OFFICE_B_S_frame_2224_jpg.rf.2682727c6a86d5ec763698aab5ca44c6.jpg,720,1280,2,561,650,807,718 -PUZZLE_COURTYARD_H_T_frame_0850_jpg.rf.26afc030b9959836bf09be3324d7f56c.jpg,720,1280,1,238,603,457,718 -PUZZLE_COURTYARD_H_T_frame_0850_jpg.rf.26afc030b9959836bf09be3324d7f56c.jpg,720,1280,2,746,507,1021,718 -CARDS_LIVINGROOM_S_H_frame_1100_jpg.rf.26e07d5e447e01c8b634a54227d5f66e.jpg,720,1280,1,356,548,598,718 -PUZZLE_LIVINGROOM_T_B_frame_0960_jpg.rf.27070c4fed68ceba2b98dc0efd30a04d.jpg,720,1280,1,11,281,576,548 -PUZZLE_LIVINGROOM_T_B_frame_0960_jpg.rf.27070c4fed68ceba2b98dc0efd30a04d.jpg,720,1280,2,612,534,1126,709 -CARDS_COURTYARD_B_T_frame_0316_jpg.rf.2718d78af77006281398537092e97e28.jpg,720,1280,2,575,681,711,718 -CARDS_OFFICE_B_S_frame_1619_jpg.rf.274b200fefacb907a9b50d45798a7572.jpg,720,1280,2,653,664,729,714 -CARDS_LIVINGROOM_H_S_frame_0813_jpg.rf.276687358cf2ae9939fe19396d026dd3.jpg,720,1280,1,175,654,264,718 -CARDS_LIVINGROOM_H_S_frame_0813_jpg.rf.276687358cf2ae9939fe19396d026dd3.jpg,720,1280,2,646,588,938,719 -PUZZLE_LIVINGROOM_B_T_frame_2664_jpg.rf.277ead1afa22482bf60796b4764b241d.jpg,720,1280,1,142,466,543,712 -PUZZLE_LIVINGROOM_B_T_frame_2664_jpg.rf.277ead1afa22482bf60796b4764b241d.jpg,720,1280,2,573,533,1032,714 -CHESS_OFFICE_T_H_frame_2181_jpg.rf.278f87735126cd058ae497b5d169b565.jpg,720,1280,1,129,358,406,555 -CHESS_OFFICE_T_H_frame_2181_jpg.rf.278f87735126cd058ae497b5d169b565.jpg,720,1280,2,576,704,610,716 -CARDS_COURTYARD_S_H_frame_1043_jpg.rf.27a1c7bd7c76045d2f0099e80372cfae.jpg,720,1280,1,224,470,508,716 -JENGA_LIVINGROOM_S_T_frame_0920_jpg.rf.27b1b1e1a17b82d247cca26b3b3f8e8c.jpg,720,1280,1,1,485,419,718 -JENGA_LIVINGROOM_S_T_frame_0920_jpg.rf.27b1b1e1a17b82d247cca26b3b3f8e8c.jpg,720,1280,2,592,252,938,570 -JENGA_OFFICE_T_H_frame_1817_jpg.rf.27bcf2ab9a5a793f2347f13fd7464937.jpg,720,1280,1,245,622,435,715 -JENGA_OFFICE_T_H_frame_1817_jpg.rf.27bcf2ab9a5a793f2347f13fd7464937.jpg,720,1280,2,586,517,819,716 -CARDS_COURTYARD_B_T_frame_1317_jpg.rf.27c730628643c50c7974a0935ed27806.jpg,720,1280,1,404,631,609,718 -CARDS_COURTYARD_B_T_frame_1317_jpg.rf.27c730628643c50c7974a0935ed27806.jpg,720,1280,2,629,654,804,718 -CARDS_OFFICE_B_S_frame_0543_jpg.rf.27ee6c8fd94cd714efbde2b7cf6501cc.jpg,720,1280,2,670,700,761,717 -CARDS_OFFICE_T_H_frame_0339_jpg.rf.2829515f354dde2ad4ebac4a73c5d8f4.jpg,720,1280,1,224,654,412,719 -CARDS_OFFICE_T_H_frame_0339_jpg.rf.2829515f354dde2ad4ebac4a73c5d8f4.jpg,720,1280,2,620,617,762,719 -CARDS_OFFICE_T_H_frame_0372_jpg.rf.2831b1e85121589b149395ff558ea01d.jpg,720,1280,1,147,626,408,717 -CARDS_OFFICE_T_H_frame_0372_jpg.rf.2831b1e85121589b149395ff558ea01d.jpg,720,1280,2,501,558,753,719 -CARDS_LIVINGROOM_H_S_frame_0082_jpg.rf.2846668aa239a2f7b235f5f36120a15c.jpg,720,1280,2,591,556,922,719 -CHESS_LIVINGROOM_B_S_frame_0051_jpg.rf.2854c68f5f366ff1fb24aebde16ccbac.jpg,720,1280,2,610,420,1147,713 -PUZZLE_LIVINGROOM_H_S_frame_2612_jpg.rf.28580a7df548f60fcaf8e3b7ef09ed1b.jpg,720,1280,1,156,392,491,629 -PUZZLE_LIVINGROOM_H_S_frame_2612_jpg.rf.28580a7df548f60fcaf8e3b7ef09ed1b.jpg,720,1280,2,682,387,1069,715 -PUZZLE_OFFICE_T_S_frame_0552_jpg.rf.285b0e09816a3a8df4181f0084d8aa7d.jpg,720,1280,1,130,378,477,653 -PUZZLE_OFFICE_T_S_frame_0552_jpg.rf.285b0e09816a3a8df4181f0084d8aa7d.jpg,720,1280,2,495,454,855,712 -PUZZLE_LIVINGROOM_H_S_frame_0495_jpg.rf.2862d8cbc746c0ba07c8633fc1c92604.jpg,720,1280,2,777,487,1019,714 -CARDS_COURTYARD_H_S_frame_0763_jpg.rf.287ad23f4cc5f5ad2d3367ed9785af4f.jpg,720,1280,1,236,545,589,719 -CARDS_COURTYARD_H_S_frame_0763_jpg.rf.287ad23f4cc5f5ad2d3367ed9785af4f.jpg,720,1280,2,499,453,806,719 -CHESS_COURTYARD_T_B_frame_2423_jpg.rf.2872919a07a2014d5fa0383951d1ebc4.jpg,720,1280,1,44,669,274,718 -CHESS_COURTYARD_T_B_frame_2423_jpg.rf.2872919a07a2014d5fa0383951d1ebc4.jpg,720,1280,2,279,642,563,718 -CARDS_COURTYARD_S_H_frame_2296_jpg.rf.2884c81a7da742e65a67f4779d98281a.jpg,720,1280,1,255,606,518,718 -CARDS_COURTYARD_S_H_frame_2296_jpg.rf.2884c81a7da742e65a67f4779d98281a.jpg,720,1280,2,607,648,825,718 -CARDS_COURTYARD_B_T_frame_1433_jpg.rf.2886eafc905d8dddc3e0c6d78d92873a.jpg,720,1280,1,357,683,502,716 -JENGA_COURTYARD_H_B_frame_0993_jpg.rf.28881e6434bd99ad527c8c9b42850c12.jpg,720,1280,2,586,553,811,718 -CARDS_OFFICE_T_H_frame_2536_jpg.rf.288e50fb922ed656e641af9ec7334cdc.jpg,720,1280,1,221,630,368,719 -CARDS_OFFICE_T_H_frame_2536_jpg.rf.288e50fb922ed656e641af9ec7334cdc.jpg,720,1280,2,561,208,804,484 -PUZZLE_LIVINGROOM_H_S_frame_1993_jpg.rf.2891a0470028ca8c18d5828e3e54de16.jpg,720,1280,2,502,583,895,716 -JENGA_COURTYARD_H_B_frame_2034_jpg.rf.2893378a744de3709e098f0e51e3e36d.jpg,720,1280,1,12,680,185,716 -JENGA_COURTYARD_H_B_frame_2034_jpg.rf.2893378a744de3709e098f0e51e3e36d.jpg,720,1280,2,616,563,881,718 -PUZZLE_LIVINGROOM_T_B_frame_2536_jpg.rf.28a7c1a8cf750caeebc444ca4c0e3149.jpg,720,1280,1,11,512,502,717 -PUZZLE_LIVINGROOM_T_B_frame_2536_jpg.rf.28a7c1a8cf750caeebc444ca4c0e3149.jpg,720,1280,2,625,460,1221,714 -PUZZLE_LIVINGROOM_H_S_frame_2471_jpg.rf.28ce320f8007c76994ae7ef4111690e1.jpg,720,1280,1,5,526,144,667 -PUZZLE_LIVINGROOM_H_S_frame_2471_jpg.rf.28ce320f8007c76994ae7ef4111690e1.jpg,720,1280,2,735,586,1016,716 -PUZZLE_LIVINGROOM_T_B_frame_2674_jpg.rf.28f584f343d5548a479b7302f7cf3dc8.jpg,720,1280,2,422,337,956,667 -PUZZLE_COURTYARD_H_T_frame_1519_jpg.rf.28fac266aed468de559f2f0c65280540.jpg,720,1280,1,228,556,528,717 -PUZZLE_COURTYARD_H_T_frame_1519_jpg.rf.28fac266aed468de559f2f0c65280540.jpg,720,1280,2,725,540,996,716 -CARDS_LIVINGROOM_H_S_frame_0640_jpg.rf.290ff268c36d925d222aa793e4ba7688.jpg,720,1280,1,18,643,117,716 -PUZZLE_LIVINGROOM_B_T_frame_0482_jpg.rf.291db5e2c340c51c76dfc51c012e0022.jpg,720,1280,2,742,507,1279,714 -CHESS_LIVINGROOM_S_B_frame_2559_jpg.rf.2955ef46848dfebf698f1d89cf26e30a.jpg,720,1280,1,138,673,350,717 -JENGA_COURTYARD_T_S_frame_1019_jpg.rf.29657fb27fac94c9b8afa947516ee481.jpg,720,1280,2,597,457,938,714 -CHESS_COURTYARD_B_T_frame_2566_jpg.rf.296c9a174a87637e3edbd86d0866aed3.jpg,720,1280,2,1050,691,1196,716 -PUZZLE_COURTYARD_T_H_frame_0280_jpg.rf.299cfe0355e95c7787350e9e44d839b8.jpg,720,1280,1,0,453,360,719 -PUZZLE_COURTYARD_T_H_frame_0280_jpg.rf.299cfe0355e95c7787350e9e44d839b8.jpg,720,1280,2,452,468,855,718 -CHESS_LIVINGROOM_B_S_frame_0124_jpg.rf.29beced87b63f768bd2749948535ce1e.jpg,720,1280,2,577,407,1018,660 -CARDS_OFFICE_B_S_frame_0903_jpg.rf.29e5dd4a55d32875e90ae6700552fae1.jpg,720,1280,1,313,676,397,718 -CARDS_OFFICE_B_S_frame_0903_jpg.rf.29e5dd4a55d32875e90ae6700552fae1.jpg,720,1280,2,637,592,800,716 -CARDS_LIVINGROOM_H_S_frame_0905_jpg.rf.29e83710be06b9c141f98ba57a1fcd7e.jpg,720,1280,2,611,488,973,719 -JENGA_LIVINGROOM_H_B_frame_1786_jpg.rf.29f73b87d01cd43634e034e18088e361.jpg,720,1280,1,36,574,381,717 -JENGA_LIVINGROOM_H_B_frame_1786_jpg.rf.29f73b87d01cd43634e034e18088e361.jpg,720,1280,2,395,561,794,718 -JENGA_OFFICE_B_S_frame_0343_jpg.rf.29ff9f82e60ed01d999ee79ca253445a.jpg,720,1280,1,270,519,643,718 -JENGA_OFFICE_B_S_frame_0343_jpg.rf.29ff9f82e60ed01d999ee79ca253445a.jpg,720,1280,2,651,601,940,717 -PUZZLE_LIVINGROOM_B_T_frame_0393_jpg.rf.2a23ec79206cc098d64a7c2d08249755.jpg,720,1280,2,686,505,1186,718 -JENGA_LIVINGROOM_S_T_frame_2296_jpg.rf.2a30dad2724d39d2bb6a9c4003e9d651.jpg,720,1280,2,861,665,1071,719 -JENGA_LIVINGROOM_S_T_frame_2296_jpg.rf.2a30dad2724d39d2bb6a9c4003e9d651.jpg,720,1280,1,479,682,650,719 -CARDS_COURTYARD_S_H_frame_1353_jpg.rf.2a2b5033c6f68dfe48de0bca97cd1597.jpg,720,1280,1,16,483,306,718 -PUZZLE_COURTYARD_T_H_frame_2085_jpg.rf.2a3c5ead9d9da009ebd5b7b16202158f.jpg,720,1280,2,385,375,1008,718 -PUZZLE_COURTYARD_T_H_frame_2085_jpg.rf.2a3c5ead9d9da009ebd5b7b16202158f.jpg,720,1280,1,5,449,338,718 -CHESS_LIVINGROOM_S_B_frame_0243_jpg.rf.2a456a2d9ffad483b9b7ea8bdd7b525c.jpg,720,1280,2,824,499,1231,714 -JENGA_COURTYARD_T_S_frame_2432_jpg.rf.2a487109d7ad2cd699b844787eb7379c.jpg,720,1280,1,126,332,476,606 -JENGA_COURTYARD_T_S_frame_2432_jpg.rf.2a487109d7ad2cd699b844787eb7379c.jpg,720,1280,2,414,320,775,714 -CHESS_LIVINGROOM_T_H_frame_2576_jpg.rf.2a4fc3a45c618fbfc0850fcb383f7300.jpg,720,1280,1,1,443,29,488 -CHESS_LIVINGROOM_T_H_frame_2576_jpg.rf.2a4fc3a45c618fbfc0850fcb383f7300.jpg,720,1280,2,542,396,1008,719 -CHESS_OFFICE_T_H_frame_1362_jpg.rf.2a563b1207d3f144c6bd704c413287fa.jpg,720,1280,1,229,639,480,717 -CHESS_OFFICE_T_H_frame_1362_jpg.rf.2a563b1207d3f144c6bd704c413287fa.jpg,720,1280,2,626,380,911,584 -PUZZLE_LIVINGROOM_B_T_frame_0966_jpg.rf.2a5c60b19cea78aa92c5f72c7d659534.jpg,720,1280,1,3,447,417,719 -PUZZLE_LIVINGROOM_B_T_frame_0966_jpg.rf.2a5c60b19cea78aa92c5f72c7d659534.jpg,720,1280,2,586,474,1118,718 -CHESS_COURTYARD_H_S_frame_2357_jpg.rf.2a6b439d6b1dddc3e4fc2f6c328ff39f.jpg,720,1280,1,455,619,676,718 -CHESS_COURTYARD_H_S_frame_2357_jpg.rf.2a6b439d6b1dddc3e4fc2f6c328ff39f.jpg,720,1280,2,856,461,1122,717 -PUZZLE_COURTYARD_S_B_frame_0365_jpg.rf.2abbe6dabeedc84c693019a0d5931103.jpg,720,1280,2,741,638,938,717 -CHESS_LIVINGROOM_H_T_frame_1098_jpg.rf.2abd0fba8af578ca28145a877b0e5863.jpg,720,1280,1,1,555,317,718 -CHESS_LIVINGROOM_H_T_frame_1098_jpg.rf.2abd0fba8af578ca28145a877b0e5863.jpg,720,1280,2,713,254,1243,604 -CARDS_OFFICE_B_S_frame_1429_jpg.rf.2abe850e7169b6afbd8a3e481914b268.jpg,720,1280,1,369,698,397,718 -CARDS_OFFICE_B_S_frame_1429_jpg.rf.2abe850e7169b6afbd8a3e481914b268.jpg,720,1280,2,827,530,1009,710 -PUZZLE_COURTYARD_H_T_frame_2559_jpg.rf.2acffc0462bd37c16dfd1503fabe7d55.jpg,720,1280,1,247,428,469,687 -PUZZLE_COURTYARD_H_T_frame_2559_jpg.rf.2acffc0462bd37c16dfd1503fabe7d55.jpg,720,1280,2,565,420,798,684 -CHESS_OFFICE_T_H_frame_0753_jpg.rf.2ae7620dfcc6c3a98a05967a0d193d1c.jpg,720,1280,2,654,305,922,532 -CHESS_COURTYARD_S_H_frame_0392_jpg.rf.2b0d52f6ca46aa10b443b04345307452.jpg,720,1280,2,627,354,1278,714 -JENGA_OFFICE_T_H_frame_0021_jpg.rf.2b1c758e833e61336d37b67deb63f313.jpg,720,1280,1,5,419,130,707 -JENGA_OFFICE_T_H_frame_0021_jpg.rf.2b1c758e833e61336d37b67deb63f313.jpg,720,1280,2,352,244,730,636 -CHESS_COURTYARD_H_S_frame_2385_jpg.rf.2b3b40596de97f7f1f21624f9b34b96f.jpg,720,1280,2,804,482,1101,713 -CHESS_COURTYARD_H_S_frame_2385_jpg.rf.2b3b40596de97f7f1f21624f9b34b96f.jpg,720,1280,1,400,644,633,717 -JENGA_COURTYARD_S_T_frame_2031_jpg.rf.2b49f266c6606de2016401fbb12ef9cc.jpg,720,1280,2,503,355,961,718 -CARDS_OFFICE_H_T_frame_2131_jpg.rf.2b72dcac3de795ec0b6a7d95473285fe.jpg,720,1280,1,99,449,539,712 -CARDS_OFFICE_H_T_frame_2131_jpg.rf.2b72dcac3de795ec0b6a7d95473285fe.jpg,720,1280,2,594,288,1008,549 -CARDS_COURTYARD_H_S_frame_2163_jpg.rf.2b8f8172b8137eb13c59e48255605eda.jpg,720,1280,1,158,363,493,709 -CARDS_COURTYARD_H_S_frame_2163_jpg.rf.2b8f8172b8137eb13c59e48255605eda.jpg,720,1280,2,532,215,902,443 -JENGA_LIVINGROOM_T_S_frame_0751_jpg.rf.2bad5ca0307753826fd2954cbaa57a26.jpg,720,1280,1,6,328,296,673 -JENGA_LIVINGROOM_T_S_frame_0751_jpg.rf.2bad5ca0307753826fd2954cbaa57a26.jpg,720,1280,2,558,326,944,649 -JENGA_COURTYARD_B_H_frame_0592_jpg.rf.2bb976fdddeb91ffcccfef058dc154e8.jpg,720,1280,2,791,695,917,719 -CARDS_OFFICE_B_S_frame_0679_jpg.rf.2bdf1f17e7d995ec79877f8e895cc20e.jpg,720,1280,1,398,662,481,717 -CARDS_OFFICE_B_S_frame_0679_jpg.rf.2bdf1f17e7d995ec79877f8e895cc20e.jpg,720,1280,2,695,660,777,718 -CARDS_LIVINGROOM_H_S_frame_2389_jpg.rf.2bf61b40f2aeda3267e57f2ee6d21ef5.jpg,720,1280,1,42,577,323,718 -CARDS_LIVINGROOM_H_S_frame_2389_jpg.rf.2bf61b40f2aeda3267e57f2ee6d21ef5.jpg,720,1280,2,657,517,902,719 -CHESS_LIVINGROOM_T_H_frame_1640_jpg.rf.2c206c9b680970792eea25d19e9d1c49.jpg,720,1280,2,549,256,1085,576 -JENGA_LIVINGROOM_S_T_frame_1896_jpg.rf.2c2e34efc3d70fc786c2121487266d2f.jpg,720,1280,1,232,506,616,718 -PUZZLE_LIVINGROOM_T_B_frame_2524_jpg.rf.2c3bda9e94c237caea0676fcfa3502b5.jpg,720,1280,1,10,605,79,680 -PUZZLE_LIVINGROOM_T_B_frame_2524_jpg.rf.2c3bda9e94c237caea0676fcfa3502b5.jpg,720,1280,2,1153,627,1279,714 -CARDS_OFFICE_B_S_frame_0014_jpg.rf.2c7d6ea82fc328f1528e19af174cfc7a.jpg,720,1280,2,753,679,806,718 -CARDS_LIVINGROOM_H_S_frame_0598_jpg.rf.2c7e899bda23177c08e6c6c3b89255a1.jpg,720,1280,2,470,574,724,719 -PUZZLE_LIVINGROOM_H_S_frame_0149_jpg.rf.2b96c30e985a282fae953f06d94a5aef.jpg,720,1280,1,91,552,378,717 -PUZZLE_LIVINGROOM_H_S_frame_0149_jpg.rf.2b96c30e985a282fae953f06d94a5aef.jpg,720,1280,2,684,424,952,635 -JENGA_COURTYARD_T_S_frame_1574_jpg.rf.2ca5f3575be20affafea4216bebaa6a5.jpg,720,1280,1,225,440,481,709 -JENGA_COURTYARD_T_S_frame_1574_jpg.rf.2ca5f3575be20affafea4216bebaa6a5.jpg,720,1280,2,517,468,666,717 -CHESS_OFFICE_B_S_frame_1533_jpg.rf.2caeef063871513598891db8d9bda1cc.jpg,720,1280,2,688,644,1079,712 -CHESS_COURTYARD_H_S_frame_1580_jpg.rf.2cafe31d6b574b44fa2a5aa7d95ff6b7.jpg,720,1280,2,676,313,824,458 -JENGA_OFFICE_T_H_frame_1631_jpg.rf.2cd3fc1855c7787725557b6f3ad1cde2.jpg,720,1280,1,185,201,519,371 -JENGA_OFFICE_T_H_frame_1631_jpg.rf.2cd3fc1855c7787725557b6f3ad1cde2.jpg,720,1280,2,570,198,821,425 -CARDS_OFFICE_H_T_frame_2111_jpg.rf.2cff88e3a8abfcf81511e89829015b1d.jpg,720,1280,1,310,661,374,716 -CARDS_OFFICE_H_T_frame_2111_jpg.rf.2cff88e3a8abfcf81511e89829015b1d.jpg,720,1280,2,654,494,1080,718 -JENGA_LIVINGROOM_S_T_frame_1504_jpg.rf.2d06842d495d560b2e4fb1ba2dec329c.jpg,720,1280,1,257,398,679,718 -PUZZLE_OFFICE_H_B_frame_1252_jpg.rf.f8ef6921a6c9d919d4f3c2d9678ba12c.jpg,720,1280,1,3,675,98,713 -JENGA_LIVINGROOM_H_B_frame_1257_jpg.rf.f8fd9fbba450cf00d28370f31328797c.jpg,720,1280,1,154,350,452,578 -JENGA_LIVINGROOM_H_B_frame_1257_jpg.rf.f8fd9fbba450cf00d28370f31328797c.jpg,720,1280,2,765,396,1059,717 -CHESS_OFFICE_H_T_frame_2329_jpg.rf.f8cf9574b4b61e6bef86e94b09161b28.jpg,720,1280,2,732,300,940,493 -PUZZLE_COURTYARD_H_T_frame_1916_jpg.rf.f939f654f5503be31eed450fcd6252d8.jpg,720,1280,1,1,609,180,717 -PUZZLE_COURTYARD_H_T_frame_1916_jpg.rf.f939f654f5503be31eed450fcd6252d8.jpg,720,1280,2,550,662,762,718 -JENGA_LIVINGROOM_S_T_frame_2064_jpg.rf.f9382123628cac603c2f8123e24d5841.jpg,720,1280,2,633,680,818,719 -JENGA_LIVINGROOM_S_T_frame_2064_jpg.rf.f9382123628cac603c2f8123e24d5841.jpg,720,1280,1,275,708,385,719 -PUZZLE_OFFICE_H_B_frame_1833_jpg.rf.f93eee67f384759c58b3486bea9e0faf.jpg,720,1280,1,108,633,351,716 -PUZZLE_OFFICE_H_B_frame_1833_jpg.rf.f93eee67f384759c58b3486bea9e0faf.jpg,720,1280,2,807,504,1013,717 -JENGA_LIVINGROOM_T_S_frame_1125_jpg.rf.f9606219b9c39b22b96a0a537781c0ba.jpg,720,1280,1,59,697,181,718 -JENGA_LIVINGROOM_T_S_frame_1125_jpg.rf.f9606219b9c39b22b96a0a537781c0ba.jpg,720,1280,2,516,449,870,715 -CHESS_OFFICE_S_B_frame_0992_jpg.rf.f96a66e48451f153fd42f4fbb61a8979.jpg,720,1280,2,598,361,976,652 -PUZZLE_OFFICE_B_H_frame_1704_jpg.rf.f97bad86f53be57ee0fe9108460a2712.jpg,720,1280,2,622,419,996,703 -PUZZLE_OFFICE_B_H_frame_1704_jpg.rf.f97bad86f53be57ee0fe9108460a2712.jpg,720,1280,1,314,623,684,719 -CHESS_LIVINGROOM_H_T_frame_2267_jpg.rf.f9a90c4b4167c3935d0f4d7882ccc75d.jpg,720,1280,1,3,553,245,716 -CHESS_LIVINGROOM_H_T_frame_2267_jpg.rf.f9a90c4b4167c3935d0f4d7882ccc75d.jpg,720,1280,2,1044,260,1279,589 -CHESS_COURTYARD_H_S_frame_0483_jpg.rf.f9c0d3d6867443b94e67e87ec2cdf3f7.jpg,720,1280,2,456,357,695,570 -CARDS_LIVINGROOM_T_B_frame_0813_jpg.rf.f9c88a6ffd94d674fcc0c07f26f4577c.jpg,720,1280,1,1,597,219,719 -CARDS_LIVINGROOM_T_B_frame_0813_jpg.rf.f9c88a6ffd94d674fcc0c07f26f4577c.jpg,720,1280,2,627,584,880,713 -JENGA_OFFICE_T_H_frame_0188_jpg.rf.f9cbcd94829dc69bfe1e380dbe544a90.jpg,720,1280,1,95,494,331,715 -JENGA_OFFICE_T_H_frame_0188_jpg.rf.f9cbcd94829dc69bfe1e380dbe544a90.jpg,720,1280,2,638,578,871,715 -CARDS_OFFICE_T_H_frame_0588_jpg.rf.f9cdbb7cfa8a837722300de3e028c806.jpg,720,1280,1,181,556,525,719 -CARDS_OFFICE_T_H_frame_0588_jpg.rf.f9cdbb7cfa8a837722300de3e028c806.jpg,720,1280,2,584,384,972,673 -JENGA_LIVINGROOM_B_H_frame_1412_jpg.rf.f9cf40e213c74d74bb09dc59962357ed.jpg,720,1280,1,7,566,336,716 -JENGA_LIVINGROOM_B_H_frame_1412_jpg.rf.f9cf40e213c74d74bb09dc59962357ed.jpg,720,1280,2,717,393,1008,714 -CARDS_OFFICE_H_T_frame_0409_jpg.rf.f9db5267d230ea0499632b33d926301f.jpg,720,1280,1,179,644,264,718 -CARDS_OFFICE_H_T_frame_0409_jpg.rf.f9db5267d230ea0499632b33d926301f.jpg,720,1280,2,591,489,1033,716 -PUZZLE_OFFICE_S_T_frame_0084_jpg.rf.fa1ad01fdbfe46177ad193b581b77350.jpg,720,1280,2,575,436,881,719 -PUZZLE_OFFICE_S_T_frame_0084_jpg.rf.fa1ad01fdbfe46177ad193b581b77350.jpg,720,1280,1,134,467,465,719 -CARDS_OFFICE_T_H_frame_2584_jpg.rf.fa247031e996c86b64af85789e9b6fc8.jpg,720,1280,1,26,459,406,719 -CARDS_OFFICE_T_H_frame_2584_jpg.rf.fa247031e996c86b64af85789e9b6fc8.jpg,720,1280,2,539,348,921,681 -JENGA_COURTYARD_S_T_frame_0795_jpg.rf.fa2f55d887ad3ce512a7104bd5baa75d.jpg,720,1280,1,32,557,311,718 -JENGA_COURTYARD_S_T_frame_0795_jpg.rf.fa2f55d887ad3ce512a7104bd5baa75d.jpg,720,1280,2,535,647,732,718 -CARDS_COURTYARD_T_B_frame_0411_jpg.rf.fa316c4706e07a5a199c59731e572c2d.jpg,720,1280,1,155,639,263,718 -CARDS_COURTYARD_T_B_frame_0411_jpg.rf.fa316c4706e07a5a199c59731e572c2d.jpg,720,1280,2,550,622,750,717 -CARDS_OFFICE_H_T_frame_0587_jpg.rf.fa292614599fd7fbf2c5c3e2fab992e5.jpg,720,1280,1,262,434,614,718 -CARDS_OFFICE_H_T_frame_0587_jpg.rf.fa292614599fd7fbf2c5c3e2fab992e5.jpg,720,1280,2,603,421,914,710 -CARDS_COURTYARD_H_S_frame_1962_jpg.rf.fa3c233858691a2d6da7b717811fda65.jpg,720,1280,1,59,526,397,719 -CARDS_COURTYARD_H_S_frame_1962_jpg.rf.fa3c233858691a2d6da7b717811fda65.jpg,720,1280,2,546,233,983,521 -PUZZLE_COURTYARD_H_T_frame_1199_jpg.rf.fa406ff11bfae8cf108c6f39847962a3.jpg,720,1280,2,528,507,806,716 -CARDS_LIVINGROOM_H_S_frame_2162_jpg.rf.fa413070b4c9fc61c96ad2f9e86aca95.jpg,720,1280,2,543,603,830,719 -CHESS_COURTYARD_H_S_frame_0657_jpg.rf.fa4419eba33831aa9fead89456eb9226.jpg,720,1280,2,717,379,948,556 -PUZZLE_OFFICE_B_H_frame_1614_jpg.rf.fa90343d4dd72aeb1d084ed70d4ccfba.jpg,720,1280,1,115,488,510,714 -PUZZLE_OFFICE_B_H_frame_1614_jpg.rf.fa90343d4dd72aeb1d084ed70d4ccfba.jpg,720,1280,2,630,656,873,718 -CHESS_COURTYARD_H_S_frame_1968_jpg.rf.fa67f6e51799d6e67290ed8f4627671f.jpg,720,1280,2,721,395,1052,709 -CARDS_LIVINGROOM_T_B_frame_1970_jpg.rf.fa92c48a38ca4af7c435bacfd7edba27.jpg,720,1280,1,1,546,211,719 -CARDS_LIVINGROOM_T_B_frame_1970_jpg.rf.fa92c48a38ca4af7c435bacfd7edba27.jpg,720,1280,2,519,459,826,696 -JENGA_LIVINGROOM_B_H_frame_0097_jpg.rf.fac9689f593aa7765233f1058d826685.jpg,720,1280,2,571,538,921,714 -PUZZLE_COURTYARD_H_T_frame_0809_jpg.rf.fad1eb9e1bec36a26518a06ca59d1537.jpg,720,1280,1,185,479,484,691 -PUZZLE_COURTYARD_H_T_frame_0809_jpg.rf.fad1eb9e1bec36a26518a06ca59d1537.jpg,720,1280,2,876,486,1155,717 -CHESS_LIVINGROOM_T_H_frame_0483_jpg.rf.facb0b6cdd5b505cbb6a069d87991409.jpg,720,1280,1,6,411,99,634 -CHESS_LIVINGROOM_T_H_frame_0483_jpg.rf.facb0b6cdd5b505cbb6a069d87991409.jpg,720,1280,2,440,658,777,719 -CARDS_LIVINGROOM_S_H_frame_1433_jpg.rf.faeda0bc0e2cf774cffc8cacb00bf9fc.jpg,720,1280,2,300,597,614,718 -CHESS_LIVINGROOM_T_H_frame_1603_jpg.rf.fb00d7ae5bd5e256fc3f1ad063595869.jpg,720,1280,2,492,606,869,719 -PUZZLE_OFFICE_S_T_frame_2358_jpg.rf.fb247155d2889e9347451faaf1ae4fb6.jpg,720,1280,1,93,663,353,718 -PUZZLE_OFFICE_S_T_frame_2358_jpg.rf.fb247155d2889e9347451faaf1ae4fb6.jpg,720,1280,2,610,584,948,713 -JENGA_OFFICE_S_B_frame_0823_jpg.rf.fb27a3777c7966bb703da878429c31c0.jpg,720,1280,2,762,371,1143,710 -JENGA_OFFICE_S_B_frame_0823_jpg.rf.fb27a3777c7966bb703da878429c31c0.jpg,720,1280,1,55,378,487,706 -JENGA_OFFICE_B_S_frame_1639_jpg.rf.fbe91a43000fe97560fee3caed4c6ae6.jpg,720,1280,1,350,522,695,717 -JENGA_OFFICE_B_S_frame_1639_jpg.rf.fbe91a43000fe97560fee3caed4c6ae6.jpg,720,1280,2,765,596,1077,718 -PUZZLE_LIVINGROOM_T_B_frame_1756_jpg.rf.fc0999c72f415a545ddee2298523f973.jpg,720,1280,1,3,482,353,717 -PUZZLE_LIVINGROOM_T_B_frame_1756_jpg.rf.fc0999c72f415a545ddee2298523f973.jpg,720,1280,2,594,665,980,718 -PUZZLE_OFFICE_T_S_frame_2364_jpg.rf.fb995a68ab3351f0df6fd696fafcb385.jpg,720,1280,1,199,323,459,555 -PUZZLE_OFFICE_T_S_frame_2364_jpg.rf.fb995a68ab3351f0df6fd696fafcb385.jpg,720,1280,2,600,456,840,711 -JENGA_COURTYARD_B_H_frame_1206_jpg.rf.fbcd73e2e5f3bd5900ede787d8727ea1.jpg,720,1280,1,389,708,435,719 -JENGA_COURTYARD_B_H_frame_1206_jpg.rf.fbcd73e2e5f3bd5900ede787d8727ea1.jpg,720,1280,2,743,654,914,718 -CARDS_COURTYARD_S_H_frame_1223_jpg.rf.fc2e7ae59ec05770b32ada21227b3532.jpg,720,1280,2,607,466,832,718 -CARDS_OFFICE_S_B_frame_0016_jpg.rf.fc5ae04321ad6ed113a31e94e2627b07.jpg,720,1280,1,267,629,478,718 -CARDS_OFFICE_S_B_frame_0016_jpg.rf.fc5ae04321ad6ed113a31e94e2627b07.jpg,720,1280,2,594,643,765,718 -PUZZLE_LIVINGROOM_B_T_frame_0323_jpg.rf.fc3ad93723b33cb69b247814e92d0865.jpg,720,1280,1,29,689,190,718 -JENGA_LIVINGROOM_S_T_frame_0912_jpg.rf.fc8951bc3204d085d30353ef775ff222.jpg,720,1280,1,1,496,423,718 -JENGA_LIVINGROOM_S_T_frame_0912_jpg.rf.fc8951bc3204d085d30353ef775ff222.jpg,720,1280,2,569,267,908,566 -CHESS_LIVINGROOM_S_B_frame_2597_jpg.rf.fc94d59865e71bdf17d3a8fe193a25c0.jpg,720,1280,1,6,574,92,712 -CHESS_LIVINGROOM_S_B_frame_2597_jpg.rf.fc94d59865e71bdf17d3a8fe193a25c0.jpg,720,1280,2,814,530,1147,717 -PUZZLE_OFFICE_H_B_frame_1901_jpg.rf.fcaf6d0e708c2aaf7b8991efccbaf6fa.jpg,720,1280,1,315,563,634,718 -PUZZLE_OFFICE_H_B_frame_1901_jpg.rf.fcaf6d0e708c2aaf7b8991efccbaf6fa.jpg,720,1280,2,694,516,935,718 -PUZZLE_COURTYARD_S_B_frame_0983_jpg.rf.fcbfbfeb6e8e988811a515dd3927c369.jpg,720,1280,2,618,593,947,716 -CARDS_LIVINGROOM_B_T_frame_0747_jpg.rf.fcde5d8a70587b5d4ad916439de7d226.jpg,720,1280,2,675,682,821,718 -PUZZLE_COURTYARD_T_H_frame_0773_jpg.rf.fcea8df086f959e318aba901ed945e90.jpg,720,1280,2,618,337,1006,619 -CHESS_OFFICE_B_S_frame_0944_jpg.rf.fcf47b5a4302ec4697db90afc591a9a3.jpg,720,1280,2,617,366,829,534 -PUZZLE_COURTYARD_T_H_frame_0589_jpg.rf.fd3bb25fce868410cc4c09bcf15d45c2.jpg,720,1280,1,3,525,501,718 -PUZZLE_COURTYARD_T_H_frame_0589_jpg.rf.fd3bb25fce868410cc4c09bcf15d45c2.jpg,720,1280,2,508,540,929,718 -PUZZLE_OFFICE_T_S_frame_0736_jpg.rf.fd0753d1a4dab14263b1c00090da6e9c.jpg,720,1280,1,183,356,461,562 -PUZZLE_OFFICE_T_S_frame_0736_jpg.rf.fd0753d1a4dab14263b1c00090da6e9c.jpg,720,1280,2,634,404,954,706 -JENGA_COURTYARD_S_T_frame_0229_jpg.rf.fd3c844976452ac36431b3ad7bd67e07.jpg,720,1280,1,200,371,528,718 -JENGA_COURTYARD_S_T_frame_0229_jpg.rf.fd3c844976452ac36431b3ad7bd67e07.jpg,720,1280,2,543,559,740,718 -PUZZLE_OFFICE_T_S_frame_2629_jpg.rf.fd4d8e534db9f062716139d794778966.jpg,720,1280,1,15,454,444,716 -PUZZLE_OFFICE_T_S_frame_2629_jpg.rf.fd4d8e534db9f062716139d794778966.jpg,720,1280,2,516,424,744,706 -PUZZLE_COURTYARD_T_H_frame_2412_jpg.rf.fd5d8dcc942435c9decb570d6a259261.jpg,720,1280,2,686,176,1279,718 -PUZZLE_COURTYARD_T_H_frame_2412_jpg.rf.fd5d8dcc942435c9decb570d6a259261.jpg,720,1280,1,238,682,527,718 -PUZZLE_COURTYARD_S_B_frame_1700_jpg.rf.fd613a6d68870fe1153ee31b10c9106a.jpg,720,1280,1,348,664,571,718 -PUZZLE_COURTYARD_S_B_frame_1700_jpg.rf.fd613a6d68870fe1153ee31b10c9106a.jpg,720,1280,2,596,572,882,718 -PUZZLE_COURTYARD_T_H_frame_1938_jpg.rf.fd82269375251c548f94d7a2dbc80a6e.jpg,720,1280,1,3,686,264,718 -PUZZLE_COURTYARD_T_H_frame_1938_jpg.rf.fd82269375251c548f94d7a2dbc80a6e.jpg,720,1280,2,435,231,921,674 -JENGA_LIVINGROOM_H_B_frame_1454_jpg.rf.fd70ca34058326f140d766906f80439b.jpg,720,1280,2,583,0,799,215 -CARDS_COURTYARD_B_T_frame_2429_jpg.rf.fd85ee252fa59173de0e8139a24ecf56.jpg,720,1280,1,315,693,370,718 -CARDS_COURTYARD_B_T_frame_2429_jpg.rf.fd85ee252fa59173de0e8139a24ecf56.jpg,720,1280,2,667,658,837,718 -JENGA_COURTYARD_T_S_frame_1173_jpg.rf.fd99985e6148cfa011ed6139cd687a4e.jpg,720,1280,2,481,297,897,671 -JENGA_COURTYARD_T_S_frame_1173_jpg.rf.fd99985e6148cfa011ed6139cd687a4e.jpg,720,1280,1,80,314,472,710 -CARDS_OFFICE_H_T_frame_1984_jpg.rf.fd6e97d290ec44dcdc07e0e46946ad32.jpg,720,1280,1,154,515,512,718 -CARDS_OFFICE_H_T_frame_1984_jpg.rf.fd6e97d290ec44dcdc07e0e46946ad32.jpg,720,1280,2,567,419,931,674 -JENGA_OFFICE_S_B_frame_0515_jpg.rf.fdda7ac139d30ca2ce514ce783d9b467.jpg,720,1280,2,673,555,981,716 -PUZZLE_COURTYARD_S_B_frame_1118_jpg.rf.fde28570232ee1834b0bd722e6dc65a7.jpg,720,1280,1,176,421,513,671 -PUZZLE_COURTYARD_S_B_frame_1118_jpg.rf.fde28570232ee1834b0bd722e6dc65a7.jpg,720,1280,2,550,431,800,663 -CARDS_LIVINGROOM_B_T_frame_1533_jpg.rf.fdfb3f7992ab6b01fc3f76190aac55d0.jpg,720,1280,2,514,644,847,718 -JENGA_LIVINGROOM_S_T_frame_1911_jpg.rf.fe30e6af85682d4300fda6b67fdd8597.jpg,720,1280,1,213,510,575,718 -PUZZLE_OFFICE_B_H_frame_2197_jpg.rf.fe345e4ac16818bd183ec4c4dedf12ad.jpg,720,1280,1,53,688,235,714 -PUZZLE_OFFICE_B_H_frame_2197_jpg.rf.fe345e4ac16818bd183ec4c4dedf12ad.jpg,720,1280,2,667,402,1112,622 -CARDS_COURTYARD_T_B_frame_0768_jpg.rf.fe3486acb917d0f697f3d9cd9d877e87.jpg,720,1280,1,143,490,455,717 -CARDS_COURTYARD_T_B_frame_0768_jpg.rf.fe3486acb917d0f697f3d9cd9d877e87.jpg,720,1280,2,522,415,876,716 -PUZZLE_LIVINGROOM_S_H_frame_1062_jpg.rf.fe3b23a0abd19d7d27d0f0655bb4e25d.jpg,720,1280,1,96,602,457,718 -PUZZLE_LIVINGROOM_S_H_frame_1062_jpg.rf.fe3b23a0abd19d7d27d0f0655bb4e25d.jpg,720,1280,2,711,669,944,718 -PUZZLE_LIVINGROOM_B_T_frame_0656_jpg.rf.fe3bf0b5c9a83ea284f23746476938e9.jpg,720,1280,2,649,436,997,666 -CHESS_COURTYARD_B_T_frame_1434_jpg.rf.fe407317bb87bcadfeb98a8ef9155481.jpg,720,1280,2,683,437,1039,662 -CHESS_OFFICE_H_T_frame_2422_jpg.rf.fe41f9fd77dbc9f0886cdca25ef22d92.jpg,720,1280,2,858,582,1131,718 -CHESS_LIVINGROOM_H_T_frame_1974_jpg.rf.fe45605e5927859abab849ac4923e311.jpg,720,1280,1,10,635,188,712 -CHESS_LIVINGROOM_H_T_frame_1974_jpg.rf.fe45605e5927859abab849ac4923e311.jpg,720,1280,2,1097,527,1279,718 -JENGA_COURTYARD_T_S_frame_2296_jpg.rf.fe475c2ba02a416f4c830d12360b4394.jpg,720,1280,1,86,304,423,675 -JENGA_COURTYARD_T_S_frame_2296_jpg.rf.fe475c2ba02a416f4c830d12360b4394.jpg,720,1280,2,499,436,825,712 -PUZZLE_OFFICE_B_H_frame_1524_jpg.rf.fe52ba9a65b6d868cedda8dedcff2e94.jpg,720,1280,2,719,595,1091,713 -JENGA_COURTYARD_T_S_frame_1320_jpg.rf.fe5fbf6e5d6d46c13fc4ae400b3b7d60.jpg,720,1280,2,492,180,926,537 -PUZZLE_OFFICE_H_B_frame_1975_jpg.rf.fe68b055c43e6e09fa29c16b731c6d23.jpg,720,1280,2,643,529,893,719 -PUZZLE_OFFICE_H_B_frame_1975_jpg.rf.fe68b055c43e6e09fa29c16b731c6d23.jpg,720,1280,1,299,549,601,719 -CARDS_LIVINGROOM_H_S_frame_1920_jpg.rf.fe87fae593d4cbeecd2a960ecf2a483a.jpg,720,1280,1,40,485,200,719 -CARDS_LIVINGROOM_H_S_frame_1920_jpg.rf.fe87fae593d4cbeecd2a960ecf2a483a.jpg,720,1280,2,901,370,1215,719 -CHESS_LIVINGROOM_B_S_frame_1284_jpg.rf.fe9a11f83248b4c83826ee18c7a80ac6.jpg,720,1280,2,627,421,1147,714 -PUZZLE_COURTYARD_T_H_frame_0761_jpg.rf.fea45ced816502e0e6ac2814bbcabda2.jpg,720,1280,1,1,335,302,608 -PUZZLE_COURTYARD_T_H_frame_0761_jpg.rf.fea45ced816502e0e6ac2814bbcabda2.jpg,720,1280,2,811,341,1213,640 -CHESS_OFFICE_B_S_frame_0403_jpg.rf.fea754bd9bd3aa63ad448575c86ade4f.jpg,720,1280,2,627,378,850,610 -JENGA_COURTYARD_S_T_frame_0515_jpg.rf.feb3763fb2735e52d5d17f8c1dee8db9.jpg,720,1280,1,317,609,452,717 -PUZZLE_COURTYARD_H_T_frame_1606_jpg.rf.fec1c982a6d279fe7d31cb6ef557d7d9.jpg,720,1280,2,274,567,469,718 -JENGA_COURTYARD_H_B_frame_1903_jpg.rf.fed5c117478936940f73c9679e9c13dc.jpg,720,1280,2,710,0,1131,311 -JENGA_COURTYARD_H_B_frame_1903_jpg.rf.fed5c117478936940f73c9679e9c13dc.jpg,720,1280,1,238,161,633,453 -PUZZLE_LIVINGROOM_T_B_frame_1773_jpg.rf.ff319710cda9bc0ee823183c41e7bab2.jpg,720,1280,1,5,522,286,716 -PUZZLE_LIVINGROOM_T_B_frame_1773_jpg.rf.ff319710cda9bc0ee823183c41e7bab2.jpg,720,1280,2,387,544,898,718 -JENGA_LIVINGROOM_B_H_frame_0672_jpg.rf.ff49ddff72df1b19e37efa91f94f7b5d.jpg,720,1280,1,54,564,411,719 -JENGA_LIVINGROOM_B_H_frame_0672_jpg.rf.ff49ddff72df1b19e37efa91f94f7b5d.jpg,720,1280,2,905,391,1277,719 -PUZZLE_COURTYARD_S_B_frame_1244_jpg.rf.ff6e7106a0890dc557f16169ca3ce4d0.jpg,720,1280,1,1,450,331,718 -PUZZLE_COURTYARD_S_B_frame_1244_jpg.rf.ff6e7106a0890dc557f16169ca3ce4d0.jpg,720,1280,2,521,606,881,718 -PUZZLE_LIVINGROOM_T_B_frame_2416_jpg.rf.ff7e85a88dadb0c2c8cca7bc17ab2bc3.jpg,720,1280,1,127,663,258,714 -PUZZLE_LIVINGROOM_T_B_frame_2416_jpg.rf.ff7e85a88dadb0c2c8cca7bc17ab2bc3.jpg,720,1280,2,476,464,1188,718 -JENGA_OFFICE_S_B_frame_1357_jpg.rf.ff70d6648313af91d66d1cd7dcf3598f.jpg,720,1280,1,112,585,381,719 -JENGA_OFFICE_S_B_frame_1357_jpg.rf.ff70d6648313af91d66d1cd7dcf3598f.jpg,720,1280,2,653,425,1020,707 -CHESS_LIVINGROOM_S_B_frame_1537_jpg.rf.ff8adbda1d09cbd85a6b2ec090629f5d.jpg,720,1280,1,2,522,423,716 -CHESS_COURTYARD_B_T_frame_2364_jpg.rf.ffbfbcccf5c059edd71b491d08cd6d04.jpg,720,1280,2,882,684,1060,718 -CARDS_OFFICE_H_T_frame_1433_jpg.rf.ff9489bcee9d0cc753fd106dd9a5cab2.jpg,720,1280,2,816,462,1237,706 -JENGA_LIVINGROOM_T_S_frame_1275_jpg.rf.ff94dc8c78c49585b5bb91bea6b57731.jpg,720,1280,1,76,506,420,717 -JENGA_LIVINGROOM_T_S_frame_1275_jpg.rf.ff94dc8c78c49585b5bb91bea6b57731.jpg,720,1280,2,578,477,922,713 -PUZZLE_COURTYARD_B_S_frame_1002_jpg.rf.fff93539d021a73849c8034342edd999.jpg,720,1280,1,115,662,323,719 -PUZZLE_COURTYARD_B_S_frame_1002_jpg.rf.fff93539d021a73849c8034342edd999.jpg,720,1280,2,670,432,901,651 -PUZZLE_LIVINGROOM_S_H_frame_2203_jpg.rf.0000ea8ce5455847b66b712d2bc6b3d7.jpg,720,1280,1,54,536,461,718 -JENGA_COURTYARD_B_H_frame_1077_jpg.rf.001bcd9ed81bebbc817c540d3cd60047.jpg,720,1280,2,779,678,931,718 -CARDS_LIVINGROOM_T_B_frame_0115_jpg.rf.0025c4cf0b0323c2f003ff9c82ba5f8c.jpg,720,1280,1,1,481,265,719 -CARDS_LIVINGROOM_T_B_frame_0115_jpg.rf.0025c4cf0b0323c2f003ff9c82ba5f8c.jpg,720,1280,2,579,336,798,534 -CARDS_COURTYARD_S_H_frame_0747_jpg.rf.0044c01d0452aeb0e5b3016f93346eda.jpg,720,1280,2,605,441,859,718 -PUZZLE_OFFICE_H_B_frame_0234_jpg.rf.006140d31bf38dad0961ac33ad6c3e27.jpg,720,1280,1,263,563,512,715 -CARDS_OFFICE_H_T_frame_0787_jpg.rf.006c0d9e1c02edcce14a8129f733653c.jpg,720,1280,1,257,612,376,718 -CARDS_OFFICE_H_T_frame_0787_jpg.rf.006c0d9e1c02edcce14a8129f733653c.jpg,720,1280,2,583,470,922,713 -CARDS_LIVINGROOM_H_S_frame_1684_jpg.rf.00b277656fad556ce48dff78c56442fb.jpg,720,1280,2,830,542,1133,718 -CARDS_LIVINGROOM_H_S_frame_1684_jpg.rf.00b277656fad556ce48dff78c56442fb.jpg,720,1280,1,112,612,205,719 -JENGA_COURTYARD_T_S_frame_1311_jpg.rf.00bb45e4b500f87861d78ca92b666fec.jpg,720,1280,2,490,189,935,547 -PUZZLE_OFFICE_T_S_frame_1900_jpg.rf.00be7ec9eb346776860038b5248d98c7.jpg,720,1280,1,15,390,396,709 -PUZZLE_OFFICE_T_S_frame_1900_jpg.rf.00be7ec9eb346776860038b5248d98c7.jpg,720,1280,2,513,318,804,689 -CHESS_COURTYARD_B_T_frame_1715_jpg.rf.00ec0fc029b9c16d2a3c144b190cbb0a.jpg,720,1280,2,868,646,1099,718 -JENGA_COURTYARD_S_T_frame_1209_jpg.rf.011249de3af0c401e9a583fc2ddae4a9.jpg,720,1280,2,585,672,752,718 -JENGA_LIVINGROOM_B_H_frame_1673_jpg.rf.011a1b52cc151f0fcc31587c08541f2d.jpg,720,1280,2,905,195,1273,405 -CHESS_LIVINGROOM_T_H_frame_1343_jpg.rf.011e1c2cb7f2b5918f6a81c17324c8da.jpg,720,1280,2,447,616,803,719 -PUZZLE_OFFICE_S_T_frame_0383_jpg.rf.015ffeddb516bc2ca29b651bd2b33dfd.jpg,720,1280,1,164,508,445,717 -JENGA_LIVINGROOM_B_H_frame_0400_jpg.rf.017b1ffa250de3f810bea78764c9aef1.jpg,720,1280,2,566,469,864,713 -PUZZLE_COURTYARD_S_B_frame_1313_jpg.rf.017ee50709aa42900a98ff147e3353de.jpg,720,1280,1,3,415,119,660 -PUZZLE_COURTYARD_S_B_frame_1313_jpg.rf.017ee50709aa42900a98ff147e3353de.jpg,720,1280,2,824,677,1006,717 -PUZZLE_LIVINGROOM_S_H_frame_0205_jpg.rf.01926b6de0e3de39c460f3caba52510e.jpg,720,1280,1,315,407,594,604 -PUZZLE_LIVINGROOM_S_H_frame_0205_jpg.rf.01926b6de0e3de39c460f3caba52510e.jpg,720,1280,2,770,460,1071,712 -CARDS_COURTYARD_B_T_frame_2334_jpg.rf.01b154efcde0bc432c14cd5fee7fd7a6.jpg,720,1280,2,803,623,981,718 -CARDS_LIVINGROOM_S_H_frame_0714_jpg.rf.01be40fc9b823ba8466f15758e342f07.jpg,720,1280,1,253,646,497,718 -CARDS_LIVINGROOM_S_H_frame_0714_jpg.rf.01be40fc9b823ba8466f15758e342f07.jpg,720,1280,2,514,657,726,718 -PUZZLE_OFFICE_H_B_frame_1527_jpg.rf.01cfbdcf0362fe4dc7ceb3cff6628d1a.jpg,720,1280,2,727,673,880,718 -PUZZLE_OFFICE_H_B_frame_0092_jpg.rf.01f373eaf92a08a8b87e5200ac9fcae7.jpg,720,1280,1,226,676,354,718 -PUZZLE_OFFICE_H_B_frame_0092_jpg.rf.01f373eaf92a08a8b87e5200ac9fcae7.jpg,720,1280,2,602,605,833,719 -CHESS_COURTYARD_S_H_frame_2623_jpg.rf.01fd8e464a44ef11092887cfbde7decd.jpg,720,1280,1,5,512,344,718 -PUZZLE_LIVINGROOM_S_H_frame_1277_jpg.rf.025360d4efeb610eb853e66a22916b76.jpg,720,1280,2,488,559,963,718 -CARDS_LIVINGROOM_B_T_frame_2585_jpg.rf.026483e803cbbfede391b63175eed5f3.jpg,720,1280,1,205,678,281,716 -CARDS_LIVINGROOM_B_T_frame_2585_jpg.rf.026483e803cbbfede391b63175eed5f3.jpg,720,1280,2,546,587,855,718 -CARDS_COURTYARD_T_B_frame_2371_jpg.rf.0256486d75e4519378bf58867f3fdb24.jpg,720,1280,1,224,584,428,714 -CARDS_COURTYARD_T_B_frame_2371_jpg.rf.0256486d75e4519378bf58867f3fdb24.jpg,720,1280,2,501,462,887,706 -CHESS_COURTYARD_T_B_frame_0810_jpg.rf.026b8b34ae22450fc57338947883fae0.jpg,720,1280,1,1,576,241,718 -CHESS_COURTYARD_T_B_frame_0810_jpg.rf.026b8b34ae22450fc57338947883fae0.jpg,720,1280,2,156,572,514,717 -PUZZLE_COURTYARD_S_B_frame_2246_jpg.rf.029446c80c018561178c97a7f5ca01ed.jpg,720,1280,2,630,621,795,718 -CARDS_LIVINGROOM_H_S_frame_0609_jpg.rf.029a167d538bd94764812b9b9edbe69d.jpg,720,1280,2,479,592,724,719 -CHESS_OFFICE_S_B_frame_0707_jpg.rf.02a5ce8fe7e9f98416420d7742d87713.jpg,720,1280,2,656,522,1081,719 -CARDS_OFFICE_S_B_frame_0044_jpg.rf.02fd10546a1af2dbf666a820f4c0d867.jpg,720,1280,1,266,607,461,717 -CARDS_OFFICE_S_B_frame_0044_jpg.rf.02fd10546a1af2dbf666a820f4c0d867.jpg,720,1280,2,514,650,716,718 -PUZZLE_COURTYARD_S_B_frame_1807_jpg.rf.02ef1df7c289b887f964080c111f7aa4.jpg,720,1280,2,700,602,989,718 -JENGA_OFFICE_H_T_frame_1805_jpg.rf.030400d6f2038fb34944e181973544f8.jpg,720,1280,1,290,367,414,704 -JENGA_OFFICE_H_T_frame_1805_jpg.rf.030400d6f2038fb34944e181973544f8.jpg,720,1280,2,478,329,708,669 -CARDS_LIVINGROOM_H_S_frame_0622_jpg.rf.032deaf6127538f12e47bc3da591ff30.jpg,720,1280,2,557,505,817,719 -JENGA_LIVINGROOM_B_H_frame_2601_jpg.rf.034871f938929122058b64cb265d3052.jpg,720,1280,1,423,265,714,468 -CARDS_LIVINGROOM_T_B_frame_0361_jpg.rf.034abe5d005e44f852179c83bf5a23c6.jpg,720,1280,1,98,682,224,719 -CARDS_LIVINGROOM_T_B_frame_0361_jpg.rf.034abe5d005e44f852179c83bf5a23c6.jpg,720,1280,2,582,643,832,719 -PUZZLE_COURTYARD_B_S_frame_2115_jpg.rf.0371e3198ac718438949d4aa54f77747.jpg,720,1280,1,280,530,517,719 -PUZZLE_COURTYARD_B_S_frame_2115_jpg.rf.0371e3198ac718438949d4aa54f77747.jpg,720,1280,2,545,535,838,719 -PUZZLE_LIVINGROOM_S_H_frame_1557_jpg.rf.0376e7e07a5aca3e16f87d30889fac9f.jpg,720,1280,1,48,489,484,705 -CARDS_COURTYARD_T_B_frame_0241_jpg.rf.03a03c01e478ebe7ac6bce6612e0a41f.jpg,720,1280,1,150,503,431,718 -CARDS_COURTYARD_T_B_frame_0241_jpg.rf.03a03c01e478ebe7ac6bce6612e0a41f.jpg,720,1280,2,561,487,876,716 -CHESS_LIVINGROOM_H_T_frame_1666_jpg.rf.03c18517105365b9cc0eef8b84c1b5d4.jpg,720,1280,2,1009,558,1279,719 -CHESS_LIVINGROOM_H_T_frame_1666_jpg.rf.03c18517105365b9cc0eef8b84c1b5d4.jpg,720,1280,1,0,655,185,719 -JENGA_LIVINGROOM_H_B_frame_0283_jpg.rf.03c454988d0f39e34111c4d610bfd072.jpg,720,1280,2,618,390,912,684 -PUZZLE_LIVINGROOM_B_T_frame_1537_jpg.rf.03da2e7480c187b8628fa8681308c386.jpg,720,1280,1,5,597,450,716 -PUZZLE_LIVINGROOM_B_T_frame_1537_jpg.rf.03da2e7480c187b8628fa8681308c386.jpg,720,1280,2,583,588,1140,716 -CHESS_COURTYARD_H_S_frame_0220_jpg.rf.03e7db2227f3c6d5d58d3b4b30f6669f.jpg,720,1280,2,769,487,1196,718 -CHESS_LIVINGROOM_S_B_frame_0163_jpg.rf.03f15c8e8ed531acb868ea6d8b8578b2.jpg,720,1280,2,612,617,1001,718 -CARDS_OFFICE_H_T_frame_0383_jpg.rf.03ff7f24c63652dc5ce6be59368a6ebb.jpg,720,1280,1,204,632,299,716 -CARDS_OFFICE_H_T_frame_0383_jpg.rf.03ff7f24c63652dc5ce6be59368a6ebb.jpg,720,1280,2,592,522,1042,714 -CARDS_OFFICE_H_T_frame_0555_jpg.rf.04267d8d29fb2329c27869bc5cb8b0dd.jpg,720,1280,2,554,534,856,718 -CARDS_OFFICE_H_T_frame_0555_jpg.rf.04267d8d29fb2329c27869bc5cb8b0dd.jpg,720,1280,1,198,616,478,719 -PUZZLE_OFFICE_B_H_frame_1572_jpg.rf.0434d9c8804967187525551512232e18.jpg,720,1280,2,721,459,1084,710 -PUZZLE_OFFICE_B_H_frame_1572_jpg.rf.0434d9c8804967187525551512232e18.jpg,720,1280,1,98,703,267,717 -PUZZLE_OFFICE_B_H_frame_0859_jpg.rf.044abdd8ea095b4bf3c6b6a47721e39c.jpg,720,1280,1,120,561,525,717 -PUZZLE_OFFICE_B_H_frame_0859_jpg.rf.044abdd8ea095b4bf3c6b6a47721e39c.jpg,720,1280,2,636,525,1177,716 -PUZZLE_LIVINGROOM_S_H_frame_2190_jpg.rf.044b886fab398429f15f9d86cc89436a.jpg,720,1280,2,582,672,762,718 -JENGA_COURTYARD_T_S_frame_1027_jpg.rf.04619f2538d1a116fc016a102d754a89.jpg,720,1280,1,174,605,362,714 -JENGA_COURTYARD_T_S_frame_1027_jpg.rf.04619f2538d1a116fc016a102d754a89.jpg,720,1280,2,579,453,920,713 -JENGA_LIVINGROOM_T_S_frame_1466_jpg.rf.0469c1e04502da8f36bf7e6bcd99c194.jpg,720,1280,1,234,715,270,719 -JENGA_LIVINGROOM_T_S_frame_1466_jpg.rf.0469c1e04502da8f36bf7e6bcd99c194.jpg,720,1280,2,623,712,641,718 -PUZZLE_OFFICE_B_H_frame_0342_jpg.rf.0492750b22bf587300648d0b64008a2c.jpg,720,1280,2,996,644,1226,715 -CARDS_COURTYARD_H_S_frame_1850_jpg.rf.04a04a303eb29c470d99537d171c4a4b.jpg,720,1280,1,154,545,453,719 -CARDS_COURTYARD_H_S_frame_1850_jpg.rf.04a04a303eb29c470d99537d171c4a4b.jpg,720,1280,2,713,236,931,530 -CHESS_OFFICE_B_S_frame_0751_jpg.rf.04b8d40103a8f2326094fb4e6dd1f189.jpg,720,1280,1,226,654,476,714 -PUZZLE_COURTYARD_B_S_frame_0138_jpg.rf.04c4ae013892aec6e29f7b787991cc38.jpg,720,1280,1,315,608,578,719 -PUZZLE_COURTYARD_B_S_frame_0138_jpg.rf.04c4ae013892aec6e29f7b787991cc38.jpg,720,1280,2,610,638,859,719 -PUZZLE_COURTYARD_H_T_frame_2226_jpg.rf.04cb52953583e8251a46116b62b13fbb.jpg,720,1280,1,261,469,560,651 -PUZZLE_COURTYARD_H_T_frame_2226_jpg.rf.04cb52953583e8251a46116b62b13fbb.jpg,720,1280,2,725,413,907,679 -PUZZLE_LIVINGROOM_S_H_frame_1856_jpg.rf.04db87f97feb428a26c5fe05900bcbee.jpg,720,1280,2,530,478,1066,716 -CARDS_OFFICE_B_S_frame_0754_jpg.rf.050fdfe9d708c6a58d850408e5cb2387.jpg,720,1280,1,378,664,486,718 -CARDS_OFFICE_B_S_frame_0754_jpg.rf.050fdfe9d708c6a58d850408e5cb2387.jpg,720,1280,2,668,691,744,717 -PUZZLE_COURTYARD_T_H_frame_0788_jpg.rf.04f536e460afa8c6df3e352bcffdbb8f.jpg,720,1280,1,1,292,160,472 -PUZZLE_COURTYARD_T_H_frame_0788_jpg.rf.04f536e460afa8c6df3e352bcffdbb8f.jpg,720,1280,2,539,330,948,650 -CARDS_COURTYARD_H_S_frame_0134_jpg.rf.052fa3612ea2ebf76d0f15a413365b0c.jpg,720,1280,1,396,688,500,719 -CARDS_COURTYARD_H_S_frame_0134_jpg.rf.052fa3612ea2ebf76d0f15a413365b0c.jpg,720,1280,2,638,478,954,719 -PUZZLE_LIVINGROOM_T_B_frame_0307_jpg.rf.054b4d7adf7204f75d79d39915fc5839.jpg,720,1280,1,2,482,199,705 -PUZZLE_LIVINGROOM_T_B_frame_0307_jpg.rf.054b4d7adf7204f75d79d39915fc5839.jpg,720,1280,2,539,556,1168,717 -CHESS_COURTYARD_B_T_frame_2393_jpg.rf.054e23c11976664b8e28f1a058fe34ca.jpg,720,1280,2,928,692,1110,718 -CARDS_COURTYARD_B_T_frame_1928_jpg.rf.056c6ed8be8d3acf0e8565dac6988e1f.jpg,720,1280,2,612,700,668,718 -PUZZLE_OFFICE_B_H_frame_0516_jpg.rf.0569b38a411e6a67642316f7b5e85f03.jpg,720,1280,1,156,695,294,716 -PUZZLE_OFFICE_B_H_frame_0516_jpg.rf.0569b38a411e6a67642316f7b5e85f03.jpg,720,1280,2,721,523,955,715 -PUZZLE_LIVINGROOM_S_H_frame_1353_jpg.rf.05975ae9fd676542c7da3075733adf6c.jpg,720,1280,2,565,555,997,718 -JENGA_COURTYARD_B_H_frame_1472_jpg.rf.059e4f84834289ccf0d932503bb56b0a.jpg,720,1280,1,346,655,534,719 -JENGA_COURTYARD_B_H_frame_1472_jpg.rf.059e4f84834289ccf0d932503bb56b0a.jpg,720,1280,2,795,266,1039,628 -JENGA_OFFICE_B_S_frame_2041_jpg.rf.05a0403dfa4fadd7d9037e452a8c6f1e.jpg,720,1280,2,287,139,753,556 -CARDS_OFFICE_H_T_frame_0996_jpg.rf.05631e679865858f9f4e0c043e830a8c.jpg,720,1280,1,230,553,518,718 -CARDS_OFFICE_H_T_frame_0996_jpg.rf.05631e679865858f9f4e0c043e830a8c.jpg,720,1280,2,705,260,1001,542 -CARDS_OFFICE_T_H_frame_0957_jpg.rf.05c809197c04efe99e7216d4da79db45.jpg,720,1280,1,190,617,410,719 -CARDS_OFFICE_T_H_frame_0957_jpg.rf.05c809197c04efe99e7216d4da79db45.jpg,720,1280,2,493,573,745,719 -JENGA_OFFICE_H_T_frame_2525_jpg.rf.05ced0d987240297f3623a1f638b1306.jpg,720,1280,2,708,319,963,577 -PUZZLE_OFFICE_H_B_frame_2570_jpg.rf.05e0ae74fadabfcdb623ca4ec700977f.jpg,720,1280,1,330,607,577,718 -PUZZLE_OFFICE_H_B_frame_2570_jpg.rf.05e0ae74fadabfcdb623ca4ec700977f.jpg,720,1280,2,553,435,746,622 -JENGA_COURTYARD_T_S_frame_0986_jpg.rf.05e90baebd75dbc021e4ae3099d176c7.jpg,720,1280,2,581,469,927,717 -CARDS_OFFICE_T_H_frame_1034_jpg.rf.05ec46624b3677de512be8277d1abb44.jpg,720,1280,1,228,649,319,719 -CARDS_OFFICE_T_H_frame_1034_jpg.rf.05ec46624b3677de512be8277d1abb44.jpg,720,1280,2,510,613,719,719 -JENGA_LIVINGROOM_T_S_frame_2093_jpg.rf.05fc6979a1b2af728e05bc95d4916021.jpg,720,1280,1,2,370,388,710 -CHESS_OFFICE_B_S_frame_0949_jpg.rf.05fcfa111cf21b805d4b884c63ce593f.jpg,720,1280,2,622,334,841,511 -CARDS_COURTYARD_H_S_frame_0060_jpg.rf.060edf33a6c8e328bf06848155fce158.jpg,720,1280,1,219,637,490,719 -CARDS_COURTYARD_H_S_frame_0060_jpg.rf.060edf33a6c8e328bf06848155fce158.jpg,720,1280,2,554,514,937,719 -JENGA_OFFICE_H_T_frame_0113_jpg.rf.063e5c90f31c267200eee7c4a44a5f89.jpg,720,1280,1,484,712,529,718 -JENGA_OFFICE_H_T_frame_0113_jpg.rf.063e5c90f31c267200eee7c4a44a5f89.jpg,720,1280,2,657,626,847,718 -PUZZLE_LIVINGROOM_T_B_frame_1027_jpg.rf.06482ba148ad675beb655def3415ac14.jpg,720,1280,1,7,473,254,680 -PUZZLE_LIVINGROOM_T_B_frame_1027_jpg.rf.06482ba148ad675beb655def3415ac14.jpg,720,1280,2,526,420,1117,718 -PUZZLE_OFFICE_T_S_frame_2683_jpg.rf.065a0dc68e9ca094bf95320ea9bad5cd.jpg,720,1280,1,251,238,429,349 -PUZZLE_OFFICE_T_S_frame_2683_jpg.rf.065a0dc68e9ca094bf95320ea9bad5cd.jpg,720,1280,2,559,494,844,716 -CHESS_OFFICE_H_T_frame_0040_jpg.rf.0668e8492080c0e5e5a2dacdf82d5083.jpg,720,1280,2,690,573,960,719 -JENGA_COURTYARD_H_B_frame_1621_jpg.rf.066ed5eed8b64d2e07b9472194d27075.jpg,720,1280,2,747,335,986,712 -CHESS_LIVINGROOM_H_T_frame_2664_jpg.rf.06758f9630d370d872393cff95601f78.jpg,720,1280,2,472,341,743,566 -JENGA_OFFICE_B_S_frame_0708_jpg.rf.0692f1b50d0d70b65b98f46eda00c5fc.jpg,720,1280,1,129,363,419,535 -JENGA_OFFICE_B_S_frame_0708_jpg.rf.0692f1b50d0d70b65b98f46eda00c5fc.jpg,720,1280,2,489,651,539,718 -CARDS_LIVINGROOM_S_H_frame_0604_jpg.rf.06a202387afe33fa389a3a3a5ca04a2e.jpg,720,1280,1,217,623,448,718 -CARDS_LIVINGROOM_S_H_frame_0604_jpg.rf.06a202387afe33fa389a3a3a5ca04a2e.jpg,720,1280,2,495,635,724,718 -JENGA_COURTYARD_S_T_frame_0697_jpg.rf.06bdcbccfd3ea72e4fd82d6b8f881638.jpg,720,1280,2,525,506,786,714 -JENGA_OFFICE_H_T_frame_1923_jpg.rf.06cb5279bbe3e96ce9e4c0a26d19bbd9.jpg,720,1280,1,273,287,536,654 -JENGA_OFFICE_H_T_frame_1923_jpg.rf.06cb5279bbe3e96ce9e4c0a26d19bbd9.jpg,720,1280,2,572,293,830,617 -CARDS_COURTYARD_B_T_frame_1294_jpg.rf.06d70f62275f4f9fcaa8cfb8687dc497.jpg,720,1280,1,445,623,642,718 -CARDS_COURTYARD_B_T_frame_1294_jpg.rf.06d70f62275f4f9fcaa8cfb8687dc497.jpg,720,1280,2,650,659,843,718 -PUZZLE_LIVINGROOM_H_S_frame_0319_jpg.rf.06ed25f68e894502685e701b9e56a31d.jpg,720,1280,1,266,635,509,714 -CHESS_OFFICE_T_H_frame_2186_jpg.rf.06f61027fcd85990757653e6dc73f796.jpg,720,1280,1,102,344,387,540 -CHESS_OFFICE_T_H_frame_2186_jpg.rf.06f61027fcd85990757653e6dc73f796.jpg,720,1280,2,550,691,622,717 -CHESS_LIVINGROOM_B_S_frame_0726_jpg.rf.06f6119101ec24a1aef5b034890a17b2.jpg,720,1280,2,431,446,953,718 -CHESS_COURTYARD_H_S_frame_1091_jpg.rf.06f6c2daecec4fd6014221ca55f36730.jpg,720,1280,2,784,640,1002,714 -JENGA_OFFICE_H_T_frame_1654_jpg.rf.06f8f6104d253e4bb2385faf13b69710.jpg,720,1280,1,207,401,386,686 -JENGA_OFFICE_H_T_frame_1654_jpg.rf.06f8f6104d253e4bb2385faf13b69710.jpg,720,1280,2,782,313,997,645 -CARDS_COURTYARD_T_B_frame_2571_jpg.rf.07271f02f34ba7d10591b8604ae1dbc5.jpg,720,1280,1,250,613,477,718 -CARDS_COURTYARD_T_B_frame_2571_jpg.rf.07271f02f34ba7d10591b8604ae1dbc5.jpg,720,1280,2,493,512,901,718 -CHESS_OFFICE_H_T_frame_2409_jpg.rf.0754216e8c0d3da5e340d58dd80df7e9.jpg,720,1280,2,843,593,1104,717 -JENGA_COURTYARD_T_S_frame_0332_jpg.rf.0757d6a89b6d5f29757de5b99056f502.jpg,720,1280,1,154,458,469,714 -JENGA_COURTYARD_T_S_frame_0332_jpg.rf.0757d6a89b6d5f29757de5b99056f502.jpg,720,1280,2,534,424,876,693 -PUZZLE_COURTYARD_H_T_frame_0369_jpg.rf.077b83d41022152504a8f4d8102372fe.jpg,720,1280,1,336,439,564,675 -PUZZLE_COURTYARD_H_T_frame_0369_jpg.rf.077b83d41022152504a8f4d8102372fe.jpg,720,1280,2,659,553,948,718 -CHESS_LIVINGROOM_H_T_frame_1174_jpg.rf.078877745b147b5fb4e47c61f55525b6.jpg,720,1280,1,1,549,249,716 -CHESS_LIVINGROOM_H_T_frame_1174_jpg.rf.078877745b147b5fb4e47c61f55525b6.jpg,720,1280,2,1071,572,1273,718 -CHESS_OFFICE_S_B_frame_2642_jpg.rf.55d61ca7d339ef70019474c576a273c7.jpg,720,1280,2,785,676,904,719 -PUZZLE_LIVINGROOM_S_H_frame_2434_jpg.rf.55e31016e38281e1c5f90e2b6c85c87e.jpg,720,1280,1,3,591,340,718 -PUZZLE_LIVINGROOM_S_H_frame_2434_jpg.rf.55e31016e38281e1c5f90e2b6c85c87e.jpg,720,1280,2,624,625,883,718 -PUZZLE_COURTYARD_B_S_frame_1498_jpg.rf.563e6a3d1b84b3b2deba28c8b73e438e.jpg,720,1280,2,876,629,1034,719 -CARDS_COURTYARD_H_S_frame_0183_jpg.rf.5653913fcf0b08768aa5f8432b8d58af.jpg,720,1280,1,294,633,445,719 -CARDS_COURTYARD_H_S_frame_0183_jpg.rf.5653913fcf0b08768aa5f8432b8d58af.jpg,720,1280,2,627,619,831,719 -CARDS_OFFICE_H_T_frame_0351_jpg.rf.55e771c8dac89fdb98a13e6392de6505.jpg,720,1280,2,499,383,921,643 -CARDS_OFFICE_H_T_frame_0351_jpg.rf.55e771c8dac89fdb98a13e6392de6505.jpg,720,1280,1,313,602,449,719 -CARDS_COURTYARD_T_B_frame_2378_jpg.rf.56570da22005e733cfc8831e0f64a7ee.jpg,720,1280,1,300,675,513,718 -CARDS_COURTYARD_T_B_frame_2378_jpg.rf.56570da22005e733cfc8831e0f64a7ee.jpg,720,1280,2,571,351,771,540 -CHESS_COURTYARD_H_S_frame_1256_jpg.rf.55efb82bf00b57981b350b7a401609c3.jpg,720,1280,2,635,383,845,557 -CARDS_LIVINGROOM_H_S_frame_0077_jpg.rf.562e97e4c5109e1e944787616d701b25.jpg,720,1280,2,600,555,891,719 -CHESS_COURTYARD_S_H_frame_1904_jpg.rf.563ad124de102736a6a2667aaa3ecc9b.jpg,720,1280,2,433,329,895,609 -CARDS_COURTYARD_S_H_frame_0935_jpg.rf.56a0ba66b5c11e968a6b025cff1a1b6c.jpg,720,1280,1,300,659,459,718 -CHESS_LIVINGROOM_S_B_frame_0354_jpg.rf.56c33902d74a4242fe30c71d7bc25a04.jpg,720,1280,2,617,134,1275,567 -PUZZLE_LIVINGROOM_T_B_frame_1145_jpg.rf.5735a46e32d3b4c53d74748b57e35081.jpg,720,1280,1,6,461,245,634 -PUZZLE_LIVINGROOM_T_B_frame_1145_jpg.rf.5735a46e32d3b4c53d74748b57e35081.jpg,720,1280,2,385,481,927,709 -CHESS_OFFICE_S_B_frame_0598_jpg.rf.575da8a3966d53006ccf5f4712eee025.jpg,720,1280,1,111,665,370,719 -CHESS_LIVINGROOM_S_B_frame_1659_jpg.rf.5787a7c5badcc58f8f9ceb0fb394ae00.jpg,720,1280,1,42,606,457,718 -CHESS_OFFICE_T_H_frame_0850_jpg.rf.5780ff283db07f84a2c912654f515717.jpg,720,1280,1,15,576,286,714 -CHESS_OFFICE_T_H_frame_0850_jpg.rf.5780ff283db07f84a2c912654f515717.jpg,720,1280,2,543,672,721,718 -CHESS_OFFICE_B_S_frame_1768_jpg.rf.57b2530883a499de10e2d81c497c68e3.jpg,720,1280,1,193,684,364,718 -CHESS_OFFICE_B_S_frame_1768_jpg.rf.57b2530883a499de10e2d81c497c68e3.jpg,720,1280,2,610,677,864,718 -CHESS_LIVINGROOM_S_B_frame_1429_jpg.rf.58162f36be41c87c9caa3f83be7c81ad.jpg,720,1280,1,1,609,274,718 -CARDS_COURTYARD_H_S_frame_1660_jpg.rf.57dd082a9160a692643eeb8aec1711f9.jpg,720,1280,1,87,474,435,719 -CARDS_COURTYARD_H_S_frame_1660_jpg.rf.57dd082a9160a692643eeb8aec1711f9.jpg,720,1280,2,724,320,927,591 -PUZZLE_COURTYARD_T_H_frame_1503_jpg.rf.5832120bf7986f2260ec95d5d3d9cb67.jpg,720,1280,1,1,496,96,672 -PUZZLE_COURTYARD_T_H_frame_1503_jpg.rf.5832120bf7986f2260ec95d5d3d9cb67.jpg,720,1280,2,609,578,1059,718 -JENGA_LIVINGROOM_S_T_frame_1890_jpg.rf.584ea4b48840e15027ee511ada29f3f7.jpg,720,1280,1,224,498,594,718 -JENGA_COURTYARD_S_T_frame_2498_jpg.rf.58540319bb09c5ceb2e92ce6bb472948.jpg,720,1280,1,332,436,560,714 -JENGA_COURTYARD_S_T_frame_2498_jpg.rf.58540319bb09c5ceb2e92ce6bb472948.jpg,720,1280,2,732,495,986,718 -PUZZLE_LIVINGROOM_B_T_frame_1706_jpg.rf.587a6303d16fd33bae2ee2c8a855bfe6.jpg,720,1280,1,7,631,526,715 -CHESS_COURTYARD_T_B_frame_1331_jpg.rf.58815f97eefd01cf434da398c7406ea7.jpg,720,1280,1,10,411,357,687 -CHESS_COURTYARD_T_B_frame_1331_jpg.rf.58815f97eefd01cf434da398c7406ea7.jpg,720,1280,2,449,684,606,718 -CHESS_OFFICE_B_S_frame_2590_jpg.rf.587cdce3960392eeeff254a069a984e5.jpg,720,1280,2,711,501,1099,700 -CARDS_OFFICE_B_S_frame_0683_jpg.rf.58a93f3ca3d366001dc0276acdbaf8e6.jpg,720,1280,1,382,631,517,718 -CARDS_OFFICE_B_S_frame_0683_jpg.rf.58a93f3ca3d366001dc0276acdbaf8e6.jpg,720,1280,2,645,640,829,718 -CARDS_LIVINGROOM_H_S_frame_2279_jpg.rf.58db4eb017610fee2f1b4b10764e4781.jpg,720,1280,1,24,566,286,719 -CARDS_LIVINGROOM_H_S_frame_2279_jpg.rf.58db4eb017610fee2f1b4b10764e4781.jpg,720,1280,2,765,381,1104,719 -CHESS_OFFICE_T_H_frame_2431_jpg.rf.589d733e135edc753a90f01e2ce33300.jpg,720,1280,1,92,388,436,623 -CHESS_OFFICE_T_H_frame_2431_jpg.rf.589d733e135edc753a90f01e2ce33300.jpg,720,1280,2,435,655,639,713 -CARDS_LIVINGROOM_S_H_frame_1398_jpg.rf.58f46d23ce07940ae937556a8ba314c6.jpg,720,1280,1,154,661,289,718 -CARDS_LIVINGROOM_S_H_frame_1398_jpg.rf.58f46d23ce07940ae937556a8ba314c6.jpg,720,1280,2,575,635,736,718 -CARDS_OFFICE_H_T_frame_0448_jpg.rf.58e3b7ef73d377bb67d45fd9c60cad43.jpg,720,1280,1,209,677,282,718 -CARDS_OFFICE_H_T_frame_0448_jpg.rf.58e3b7ef73d377bb67d45fd9c60cad43.jpg,720,1280,2,594,520,1052,716 -PUZZLE_COURTYARD_H_T_frame_0385_jpg.rf.58dcee3ff599ce3df2de390271dd7695.jpg,720,1280,1,368,700,453,718 -PUZZLE_COURTYARD_H_T_frame_0385_jpg.rf.58dcee3ff599ce3df2de390271dd7695.jpg,720,1280,2,680,705,783,718 -PUZZLE_COURTYARD_T_H_frame_0087_jpg.rf.58f5ad8fe37282cc73fc34c696eba22e.jpg,720,1280,2,624,436,972,718 -PUZZLE_LIVINGROOM_B_T_frame_1994_jpg.rf.592385091b6c2116a875c8ac189a3f72.jpg,720,1280,1,113,400,502,635 -PUZZLE_LIVINGROOM_B_T_frame_1994_jpg.rf.592385091b6c2116a875c8ac189a3f72.jpg,720,1280,2,646,464,1090,713 -JENGA_LIVINGROOM_S_T_frame_1581_jpg.rf.592c548654b57dc432fccec903960cbc.jpg,720,1280,1,3,233,366,718 -JENGA_LIVINGROOM_S_T_frame_1581_jpg.rf.592c548654b57dc432fccec903960cbc.jpg,720,1280,2,635,157,1092,686 -PUZZLE_COURTYARD_T_H_frame_0540_jpg.rf.5931fc236c5daf9d68b0a58e76c90f3d.jpg,720,1280,1,58,542,461,718 -PUZZLE_COURTYARD_T_H_frame_0540_jpg.rf.5931fc236c5daf9d68b0a58e76c90f3d.jpg,720,1280,2,522,335,734,517 -CARDS_COURTYARD_B_T_frame_1999_jpg.rf.59433975446c4715345b4b60f4a63ace.jpg,720,1280,2,660,705,704,718 -CHESS_LIVINGROOM_S_B_frame_0689_jpg.rf.594e1a3bd7330bba01e0cbe34a6e3c15.jpg,720,1280,1,1,250,191,565 -CHESS_LIVINGROOM_S_B_frame_0689_jpg.rf.594e1a3bd7330bba01e0cbe34a6e3c15.jpg,720,1280,2,928,296,1279,714 -CHESS_LIVINGROOM_H_T_frame_2093_jpg.rf.59519536a0df76bfa9b72c0067e02975.jpg,720,1280,1,1,576,215,718 -CHESS_LIVINGROOM_H_T_frame_2093_jpg.rf.59519536a0df76bfa9b72c0067e02975.jpg,720,1280,2,1006,320,1275,644 -JENGA_OFFICE_B_S_frame_1723_jpg.rf.5957a91786f3d29cf50a28317f7fc757.jpg,720,1280,2,427,408,761,718 -PUZZLE_OFFICE_H_B_frame_0127_jpg.rf.59988e7450ea4bf4e560502531198ebd.jpg,720,1280,1,31,648,280,719 -PUZZLE_OFFICE_H_B_frame_2417_jpg.rf.5963d4dc32357a59b6685e3f1f1cab06.jpg,720,1280,1,256,571,501,719 -PUZZLE_OFFICE_H_B_frame_2417_jpg.rf.5963d4dc32357a59b6685e3f1f1cab06.jpg,720,1280,2,561,497,757,669 -JENGA_OFFICE_H_T_frame_0524_jpg.rf.59a0165190a9baa8c881400fa4a7e233.jpg,720,1280,1,256,693,363,713 -CARDS_OFFICE_H_T_frame_2046_jpg.rf.59b11220b8d3bc68fb25b33f66782b98.jpg,720,1280,1,211,568,533,718 -CARDS_OFFICE_H_T_frame_2046_jpg.rf.59b11220b8d3bc68fb25b33f66782b98.jpg,720,1280,2,711,330,1050,638 -PUZZLE_LIVINGROOM_B_T_frame_1430_jpg.rf.59ea5553e1119c2516c878cae7412e00.jpg,720,1280,1,5,573,211,716 -PUZZLE_LIVINGROOM_B_T_frame_1430_jpg.rf.59ea5553e1119c2516c878cae7412e00.jpg,720,1280,2,630,586,1174,715 -JENGA_OFFICE_S_B_frame_1325_jpg.rf.5a33de2ed2c112111818e91616758775.jpg,720,1280,1,81,666,232,716 -JENGA_OFFICE_S_B_frame_1325_jpg.rf.5a33de2ed2c112111818e91616758775.jpg,720,1280,2,498,424,812,718 -CARDS_LIVINGROOM_B_T_frame_2198_jpg.rf.5a34499cb93c177733c323b8734be6d4.jpg,720,1280,1,232,697,281,718 -CARDS_LIVINGROOM_B_T_frame_2198_jpg.rf.5a34499cb93c177733c323b8734be6d4.jpg,720,1280,2,605,619,885,718 -CHESS_LIVINGROOM_T_H_frame_2476_jpg.rf.5a238bd71538b63d8f3be191125a55e2.jpg,720,1280,2,355,231,842,583 -JENGA_LIVINGROOM_B_H_frame_1159_jpg.rf.5a0355adc6476ce69ef055709c3eb2ae.jpg,720,1280,1,42,612,387,717 -JENGA_LIVINGROOM_B_H_frame_1159_jpg.rf.5a0355adc6476ce69ef055709c3eb2ae.jpg,720,1280,2,759,557,1027,718 -CARDS_LIVINGROOM_T_B_frame_0510_jpg.rf.5a375234c8423785821e0f78b6342c36.jpg,720,1280,1,1,552,419,719 -CARDS_LIVINGROOM_T_B_frame_0510_jpg.rf.5a375234c8423785821e0f78b6342c36.jpg,720,1280,2,665,572,994,719 -CARDS_OFFICE_H_T_frame_2467_jpg.rf.5a37fbaf8c9424840b45c5afb171c238.jpg,720,1280,1,342,689,397,716 -CARDS_OFFICE_H_T_frame_2467_jpg.rf.5a37fbaf8c9424840b45c5afb171c238.jpg,720,1280,2,664,447,885,680 -CHESS_OFFICE_S_B_frame_2149_jpg.rf.5a505c7b309e73507ba6c01e4fb8d89f.jpg,720,1280,2,553,313,941,652 -PUZZLE_COURTYARD_H_T_frame_2327_jpg.rf.5a5aabd1fde271ae5eed974a7b3ee8b9.jpg,720,1280,1,287,490,587,717 -PUZZLE_COURTYARD_H_T_frame_2327_jpg.rf.5a5aabd1fde271ae5eed974a7b3ee8b9.jpg,720,1280,2,649,450,861,683 -CARDS_COURTYARD_S_H_frame_1609_jpg.rf.5a6dcf3d471490115b3f35feabe016cf.jpg,720,1280,1,404,686,442,718 -CARDS_COURTYARD_S_H_frame_1609_jpg.rf.5a6dcf3d471490115b3f35feabe016cf.jpg,720,1280,2,599,665,781,718 -PUZZLE_LIVINGROOM_T_B_frame_1573_jpg.rf.5a7c8c1b5b5131470998ce371d3df03a.jpg,720,1280,1,3,516,283,718 -PUZZLE_LIVINGROOM_T_B_frame_1573_jpg.rf.5a7c8c1b5b5131470998ce371d3df03a.jpg,720,1280,2,431,353,1099,713 -PUZZLE_OFFICE_T_S_frame_0696_jpg.rf.5a7f8345b183a61ae35308c2bd47b834.jpg,720,1280,1,14,326,413,660 -PUZZLE_OFFICE_T_S_frame_0696_jpg.rf.5a7f8345b183a61ae35308c2bd47b834.jpg,720,1280,2,503,340,836,698 -CHESS_OFFICE_B_S_frame_1322_jpg.rf.5aaced0b6642a0109ce73ee570386299.jpg,720,1280,2,626,333,1118,683 -JENGA_OFFICE_H_T_frame_0040_jpg.rf.5ad903d1b92dfb56140c27e976bc7f98.jpg,720,1280,1,494,687,633,717 -JENGA_OFFICE_H_T_frame_0040_jpg.rf.5ad903d1b92dfb56140c27e976bc7f98.jpg,720,1280,2,748,612,955,712 -PUZZLE_LIVINGROOM_S_H_frame_2274_jpg.rf.5b02f2517fa80914e665142d40cb655f.jpg,720,1280,1,96,527,461,718 -PUZZLE_LIVINGROOM_S_H_frame_2274_jpg.rf.5b02f2517fa80914e665142d40cb655f.jpg,720,1280,2,925,659,1114,718 -JENGA_OFFICE_S_B_frame_0825_jpg.rf.5b07b5e9ec95102eeaebd58223876d76.jpg,720,1280,1,51,383,478,714 -JENGA_OFFICE_S_B_frame_0825_jpg.rf.5b07b5e9ec95102eeaebd58223876d76.jpg,720,1280,2,771,375,1136,711 -CHESS_OFFICE_T_H_frame_1798_jpg.rf.5b19f20265c870116b4348cae3dd09e7.jpg,720,1280,1,267,692,415,718 -CHESS_OFFICE_T_H_frame_1798_jpg.rf.5b19f20265c870116b4348cae3dd09e7.jpg,720,1280,2,435,679,547,717 -PUZZLE_LIVINGROOM_B_T_frame_1728_jpg.rf.5b213076e7d3f2ad6bc4db6d420c0573.jpg,720,1280,1,4,582,489,715 -PUZZLE_COURTYARD_S_B_frame_2485_jpg.rf.5b2257e464d8932bfe84ccc2a1c68f05.jpg,720,1280,1,1,175,177,541 -PUZZLE_COURTYARD_S_B_frame_2485_jpg.rf.5b2257e464d8932bfe84ccc2a1c68f05.jpg,720,1280,2,543,6,1072,530 -JENGA_LIVINGROOM_S_T_frame_0666_jpg.rf.5b2cff241f1d96ed2866a862826cd285.jpg,720,1280,1,92,638,372,718 -JENGA_LIVINGROOM_S_T_frame_0666_jpg.rf.5b2cff241f1d96ed2866a862826cd285.jpg,720,1280,2,556,610,876,718 -CARDS_LIVINGROOM_S_H_frame_1833_jpg.rf.5b49fbba892eaa0fcf6648553b81c563.jpg,720,1280,1,143,648,304,718 -CARDS_LIVINGROOM_S_H_frame_1833_jpg.rf.5b49fbba892eaa0fcf6648553b81c563.jpg,720,1280,2,546,623,745,718 -CARDS_OFFICE_H_T_frame_0677_jpg.rf.5bc50a8a45e675222ba20ced43f4685f.jpg,720,1280,1,257,534,571,714 -CARDS_OFFICE_H_T_frame_0677_jpg.rf.5bc50a8a45e675222ba20ced43f4685f.jpg,720,1280,2,608,547,938,716 -PUZZLE_OFFICE_S_T_frame_0393_jpg.rf.5bd0db11ab3e75379891d4da1da2057b.jpg,720,1280,1,137,643,391,718 -PUZZLE_OFFICE_S_T_frame_0393_jpg.rf.5bd0db11ab3e75379891d4da1da2057b.jpg,720,1280,2,558,553,807,718 -PUZZLE_COURTYARD_T_H_frame_0553_jpg.rf.5b905a4b07bec0c79ada27a1e73f7c97.jpg,720,1280,1,177,644,503,718 -PUZZLE_COURTYARD_T_H_frame_0553_jpg.rf.5b905a4b07bec0c79ada27a1e73f7c97.jpg,720,1280,2,611,248,919,576 -CHESS_LIVINGROOM_T_H_frame_2387_jpg.rf.5bd25dd5d73cc94ed50fbe622a3bc73b.jpg,720,1280,1,1,349,63,567 -CHESS_LIVINGROOM_T_H_frame_2387_jpg.rf.5bd25dd5d73cc94ed50fbe622a3bc73b.jpg,720,1280,2,673,393,1175,719 -PUZZLE_LIVINGROOM_S_H_frame_1441_jpg.rf.5be44d1d546321679d380118660305df.jpg,720,1280,2,493,555,836,718 -CARDS_OFFICE_B_S_frame_0556_jpg.rf.5be714cc89d5bed0c47c475b530baea6.jpg,720,1280,2,693,630,883,718 -CHESS_OFFICE_B_S_frame_0771_jpg.rf.5c0d702099abab24288b1c99e07e335e.jpg,720,1280,1,338,706,443,718 -CARDS_LIVINGROOM_T_B_frame_1204_jpg.rf.5c35a46a44ed9c69e7694920f5f21276.jpg,720,1280,2,498,634,750,719 -CARDS_COURTYARD_T_B_frame_1986_jpg.rf.5c3c9be4c4a6ea07c31c587840186f9f.jpg,720,1280,1,146,548,488,717 -CARDS_COURTYARD_T_B_frame_1986_jpg.rf.5c3c9be4c4a6ea07c31c587840186f9f.jpg,720,1280,2,591,445,1043,712 -PUZZLE_COURTYARD_B_S_frame_2159_jpg.rf.5c44881e50e716add305a68463cb1414.jpg,720,1280,1,186,450,477,697 -PUZZLE_COURTYARD_B_S_frame_2159_jpg.rf.5c44881e50e716add305a68463cb1414.jpg,720,1280,2,677,576,931,719 -PUZZLE_COURTYARD_H_T_frame_2088_jpg.rf.5c483c0952d3dd08bf10ad16de0d1a1d.jpg,720,1280,1,381,486,565,642 -PUZZLE_COURTYARD_H_T_frame_2088_jpg.rf.5c483c0952d3dd08bf10ad16de0d1a1d.jpg,720,1280,2,691,545,915,717 -JENGA_OFFICE_S_B_frame_2514_jpg.rf.5c6b5743d7c0127be292236bcf51fc74.jpg,720,1280,2,801,269,1208,503 -JENGA_OFFICE_H_T_frame_0430_jpg.rf.5cb9e4ac46d61b67ee82cb7ff807031c.jpg,720,1280,1,317,696,472,719 -JENGA_OFFICE_H_T_frame_0430_jpg.rf.5cb9e4ac46d61b67ee82cb7ff807031c.jpg,720,1280,2,647,685,796,718 -CARDS_OFFICE_B_S_frame_0768_jpg.rf.5cc519897d1ae9ec65936b225aa844e3.jpg,720,1280,1,389,663,494,717 -CARDS_OFFICE_B_S_frame_0768_jpg.rf.5cc519897d1ae9ec65936b225aa844e3.jpg,720,1280,2,676,683,736,714 -CARDS_COURTYARD_H_S_frame_1435_jpg.rf.5cdc61dc495576b3edc9d4c48638fd3e.jpg,720,1280,1,9,482,321,719 -CARDS_COURTYARD_H_S_frame_1435_jpg.rf.5cdc61dc495576b3edc9d4c48638fd3e.jpg,720,1280,2,659,449,899,719 -JENGA_OFFICE_S_B_frame_0942_jpg.rf.5ce080a1a6624e0b99c11a7183543039.jpg,720,1280,1,236,640,465,717 -JENGA_OFFICE_S_B_frame_0942_jpg.rf.5ce080a1a6624e0b99c11a7183543039.jpg,720,1280,2,873,593,1121,718 -PUZZLE_COURTYARD_T_H_frame_1724_jpg.rf.5cfa6967fe72a611dce35c933e380b6e.jpg,720,1280,1,26,614,385,718 -PUZZLE_COURTYARD_T_H_frame_1724_jpg.rf.5cfa6967fe72a611dce35c933e380b6e.jpg,720,1280,2,448,411,785,718 -CARDS_OFFICE_H_T_frame_0989_jpg.rf.5d1e29f03bcde04077ac58373920f42e.jpg,720,1280,1,219,525,525,718 -CARDS_OFFICE_H_T_frame_0989_jpg.rf.5d1e29f03bcde04077ac58373920f42e.jpg,720,1280,2,779,345,1023,515 -PUZZLE_LIVINGROOM_B_T_frame_0036_jpg.rf.5d2cb089983cdfd9ee6bedc3896f4a3f.jpg,720,1280,1,18,703,156,715 -PUZZLE_LIVINGROOM_B_T_frame_0036_jpg.rf.5d2cb089983cdfd9ee6bedc3896f4a3f.jpg,720,1280,2,819,617,1203,717 -JENGA_OFFICE_S_B_frame_0808_jpg.rf.5d435ce5a05c62a61a3f8a92f8374306.jpg,720,1280,1,98,370,500,708 -JENGA_OFFICE_S_B_frame_0808_jpg.rf.5d435ce5a05c62a61a3f8a92f8374306.jpg,720,1280,2,785,370,1163,715 -JENGA_COURTYARD_B_H_frame_2510_jpg.rf.5d5259fa9d92eee48ac6d23d2236d646.jpg,720,1280,2,721,695,814,719 -JENGA_LIVINGROOM_T_S_frame_0752_jpg.rf.5d589f0147873b570a6b7bc0d45fc3d1.jpg,720,1280,2,547,325,933,658 -JENGA_LIVINGROOM_T_S_frame_0752_jpg.rf.5d589f0147873b570a6b7bc0d45fc3d1.jpg,720,1280,1,7,329,294,661 -JENGA_OFFICE_B_S_frame_1210_jpg.rf.5d64e81c78957cca6e4988e4d1d5ee35.jpg,720,1280,1,171,573,469,717 -JENGA_OFFICE_B_S_frame_1210_jpg.rf.5d64e81c78957cca6e4988e4d1d5ee35.jpg,720,1280,2,470,427,762,716 -JENGA_COURTYARD_S_T_frame_1216_jpg.rf.5d7050396da8c0fd1e436bb0d1341760.jpg,720,1280,2,584,673,761,718 -JENGA_LIVINGROOM_S_T_frame_2320_jpg.rf.5d714f932f368c0ef09401162ef37618.jpg,720,1280,2,236,413,630,718 -CARDS_LIVINGROOM_B_T_frame_2476_jpg.rf.5d728b3a3dc19bdfba3b249d64e1639e.jpg,720,1280,2,632,646,781,719 -CARDS_LIVINGROOM_B_T_frame_2476_jpg.rf.5d728b3a3dc19bdfba3b249d64e1639e.jpg,720,1280,1,236,695,286,719 -JENGA_LIVINGROOM_B_H_frame_0529_jpg.rf.5d863257354494ee496f9dd9381e190f.jpg,720,1280,2,474,453,810,718 -CHESS_LIVINGROOM_S_B_frame_1957_jpg.rf.5d8ee27984fcc5a4de9fd6ef1f0a8d5b.jpg,720,1280,1,152,684,292,718 -CHESS_LIVINGROOM_S_B_frame_1957_jpg.rf.5d8ee27984fcc5a4de9fd6ef1f0a8d5b.jpg,720,1280,2,923,577,1204,718 -CHESS_COURTYARD_B_T_frame_0977_jpg.rf.5d98e6d56e24f9876e89479d8f15bd81.jpg,720,1280,2,513,445,804,656 -PUZZLE_OFFICE_T_S_frame_2021_jpg.rf.5dcd9dec021793ebca4d84bcb52aa455.jpg,720,1280,1,12,370,448,709 -PUZZLE_OFFICE_T_S_frame_2021_jpg.rf.5dcd9dec021793ebca4d84bcb52aa455.jpg,720,1280,2,523,309,858,545 -CHESS_OFFICE_T_H_frame_0607_jpg.rf.5ddb899ecce0617cad77b8fb9538300e.jpg,720,1280,2,738,607,935,718 -JENGA_OFFICE_T_H_frame_2626_jpg.rf.5e06f3427070a654d97c368b9d836fa4.jpg,720,1280,1,91,187,387,395 -CARDS_OFFICE_H_T_frame_1069_jpg.rf.5e0c7c3e18510cf8e54dd9f1a61467b0.jpg,720,1280,1,245,623,340,718 -CARDS_OFFICE_H_T_frame_1069_jpg.rf.5e0c7c3e18510cf8e54dd9f1a61467b0.jpg,720,1280,2,650,669,819,718 -PUZZLE_OFFICE_B_H_frame_0655_jpg.rf.5e2272bafb16d61dfae07b20e82f12a9.jpg,720,1280,2,787,334,1022,517 -CARDS_OFFICE_B_S_frame_0593_jpg.rf.5e29721cd4344d9ea6270f3bab49b7a5.jpg,720,1280,2,517,634,687,718 -CARDS_COURTYARD_B_T_frame_1812_jpg.rf.5e2b10c908bee8b208f605a4b6183cd6.jpg,720,1280,1,341,693,393,714 -CARDS_COURTYARD_B_T_frame_1812_jpg.rf.5e2b10c908bee8b208f605a4b6183cd6.jpg,720,1280,2,571,598,831,716 -PUZZLE_OFFICE_T_S_frame_1765_jpg.rf.5e3fdbbbf0367fbb44540efed44c838e.jpg,720,1280,1,49,360,439,717 -PUZZLE_OFFICE_T_S_frame_1765_jpg.rf.5e3fdbbbf0367fbb44540efed44c838e.jpg,720,1280,2,518,313,828,663 -PUZZLE_COURTYARD_B_S_frame_0866_jpg.rf.5e42bf2ad1a819337fbde412460c6167.jpg,720,1280,2,669,501,1012,719 -CHESS_OFFICE_T_H_frame_2543_jpg.rf.5e453e2a4f6c7b25e6a013ec58e8d9d2.jpg,720,1280,1,174,622,391,718 -CHESS_OFFICE_T_H_frame_2543_jpg.rf.5e453e2a4f6c7b25e6a013ec58e8d9d2.jpg,720,1280,2,393,644,583,713 -PUZZLE_COURTYARD_H_T_frame_1263_jpg.rf.5e5f7b6b9466a23d1cb2b6d8aa9be763.jpg,720,1280,1,49,479,357,718 -PUZZLE_COURTYARD_H_T_frame_1263_jpg.rf.5e5f7b6b9466a23d1cb2b6d8aa9be763.jpg,720,1280,2,1043,568,1278,717 -CHESS_COURTYARD_S_H_frame_0093_jpg.rf.5e9c5d58f8a33a3c3c439f67aec3bf09.jpg,720,1280,2,664,518,1167,716 -CARDS_LIVINGROOM_S_H_frame_1823_jpg.rf.5ea7995df10233c384952708d1a7be2e.jpg,720,1280,2,533,622,745,719 -CARDS_LIVINGROOM_S_H_frame_1823_jpg.rf.5ea7995df10233c384952708d1a7be2e.jpg,720,1280,1,128,646,300,719 -JENGA_COURTYARD_H_B_frame_0300_jpg.rf.5eb2bb213341da231a3b029f557b231c.jpg,720,1280,2,601,320,885,701 -CHESS_OFFICE_S_B_frame_0525_jpg.rf.5ec61d1f74765ae00df9733de539f797.jpg,720,1280,2,724,374,1173,717 -JENGA_COURTYARD_T_S_frame_2022_jpg.rf.5f46e2cf24f8a661c4e9c64b5b009ce5.jpg,720,1280,2,457,555,695,717 -CHESS_OFFICE_S_B_frame_2440_jpg.rf.5f48d3d48f33f850c45f5ef856d46ae5.jpg,720,1280,1,22,552,337,719 -CHESS_OFFICE_S_B_frame_2440_jpg.rf.5f48d3d48f33f850c45f5ef856d46ae5.jpg,720,1280,2,672,613,912,719 -JENGA_OFFICE_T_H_frame_0838_jpg.rf.5f87a25cf1f2a5119f7e9921f8a2c7db.jpg,720,1280,1,338,694,457,718 -JENGA_OFFICE_T_H_frame_0838_jpg.rf.5f87a25cf1f2a5119f7e9921f8a2c7db.jpg,720,1280,2,649,611,843,715 -CHESS_LIVINGROOM_H_T_frame_1240_jpg.rf.5f990c72efe7a0c067fca25aad073563.jpg,720,1280,1,3,591,274,718 -CHESS_LIVINGROOM_H_T_frame_1240_jpg.rf.5f990c72efe7a0c067fca25aad073563.jpg,720,1280,2,1112,589,1279,718 -CARDS_OFFICE_B_S_frame_2205_jpg.rf.5f9c774fd59a31bcde0ad9d01d2000e0.jpg,720,1280,1,298,668,515,717 -CARDS_OFFICE_B_S_frame_2205_jpg.rf.5f9c774fd59a31bcde0ad9d01d2000e0.jpg,720,1280,2,548,650,799,718 -JENGA_OFFICE_B_S_frame_0678_jpg.rf.5fbd0772e044db35fff6c64428c773e9.jpg,720,1280,2,440,561,753,719 -PUZZLE_LIVINGROOM_T_B_frame_1743_jpg.rf.5ff0babe58a074c309f42ebd9a3d5172.jpg,720,1280,1,1,465,373,713 -PUZZLE_LIVINGROOM_T_B_frame_1743_jpg.rf.5ff0babe58a074c309f42ebd9a3d5172.jpg,720,1280,2,596,652,1017,718 -CARDS_COURTYARD_S_H_frame_1951_jpg.rf.602dd96c5e03add7edc713c294679efb.jpg,720,1280,1,1,557,321,718 -JENGA_COURTYARD_B_H_frame_1068_jpg.rf.60360ef280a7d9d76015684020e18cb3.jpg,720,1280,2,778,679,928,719 -PUZZLE_COURTYARD_S_B_frame_1841_jpg.rf.604129ce84433bccd509010958e2956d.jpg,720,1280,2,494,568,833,718 -JENGA_OFFICE_B_S_frame_1178_jpg.rf.60497dba24f0776c8d2217d03823e725.jpg,720,1280,1,187,605,481,718 -JENGA_OFFICE_B_S_frame_1178_jpg.rf.60497dba24f0776c8d2217d03823e725.jpg,720,1280,2,482,428,773,718 -CHESS_COURTYARD_S_H_frame_1724_jpg.rf.60621f3b3ce4301817828ee4fce3b7ea.jpg,720,1280,2,517,235,998,560 -CARDS_COURTYARD_S_H_frame_1218_jpg.rf.606b7722d440f9dd8caa7e3b9b972104.jpg,720,1280,2,588,421,834,708 -CHESS_OFFICE_B_S_frame_0745_jpg.rf.606e358a204fc0d8b2ca6634195f73b5.jpg,720,1280,1,205,623,490,718 -JENGA_LIVINGROOM_B_H_frame_1896_jpg.rf.6086b66b9984953cc14d29ec441931d7.jpg,720,1280,2,634,315,1049,719 -CHESS_COURTYARD_H_S_frame_0890_jpg.rf.60bfb0976d4245a93ddab941b5dcfe49.jpg,720,1280,2,480,378,736,598 -CHESS_LIVINGROOM_H_T_frame_2257_jpg.rf.60c1c970ae640e85377a25958755f0e7.jpg,720,1280,1,1,557,245,718 -CHESS_LIVINGROOM_H_T_frame_2257_jpg.rf.60c1c970ae640e85377a25958755f0e7.jpg,720,1280,2,1042,273,1279,593 -CHESS_LIVINGROOM_T_H_frame_1234_jpg.rf.60e9b5742c07ec1785129b7355e78d14.jpg,720,1280,2,549,193,898,414 -CHESS_COURTYARD_T_B_frame_0061_jpg.rf.60d714e2a601a624809cf954a943bf91.jpg,720,1280,2,604,545,861,718 -JENGA_COURTYARD_H_B_frame_2276_jpg.rf.60ef976451bbcde74fe0ad17018be6a1.jpg,720,1280,1,20,676,277,718 -JENGA_COURTYARD_H_B_frame_2276_jpg.rf.60ef976451bbcde74fe0ad17018be6a1.jpg,720,1280,2,703,646,885,718 -JENGA_COURTYARD_H_B_frame_0674_jpg.rf.610ab71e594c4102c5f37fc380dc0410.jpg,720,1280,2,830,424,1039,716 -JENGA_OFFICE_T_H_frame_0394_jpg.rf.6152cd21f7aa305f2aa279d592d22203.jpg,720,1280,2,627,171,955,354 -CHESS_COURTYARD_B_T_frame_2386_jpg.rf.6189cf963261f381dff01d7205a4c6bb.jpg,720,1280,2,915,685,1087,718 -JENGA_COURTYARD_T_S_frame_2011_jpg.rf.619db92e48d1263f7deae49ac71de601.jpg,720,1280,2,638,610,837,713 -JENGA_OFFICE_H_T_frame_0628_jpg.rf.61cd9bc738524d73962361a350e68159.jpg,720,1280,1,360,631,587,714 -JENGA_OFFICE_H_T_frame_0628_jpg.rf.61cd9bc738524d73962361a350e68159.jpg,720,1280,2,498,248,691,457 -PUZZLE_OFFICE_B_H_frame_1250_jpg.rf.620e651229b0c56f358f4aeefb272d7e.jpg,720,1280,1,10,598,297,713 -PUZZLE_OFFICE_B_H_frame_1250_jpg.rf.620e651229b0c56f358f4aeefb272d7e.jpg,720,1280,2,951,432,1271,670 -CHESS_OFFICE_T_H_frame_0897_jpg.rf.621cccb0925a1f5ad00d759e945d5ff7.jpg,720,1280,1,44,527,352,713 -CHESS_OFFICE_T_H_frame_0897_jpg.rf.621cccb0925a1f5ad00d759e945d5ff7.jpg,720,1280,2,506,603,778,716 -CHESS_LIVINGROOM_H_T_frame_2250_jpg.rf.6222aee2f566bb1a112e70d3c078089c.jpg,720,1280,1,1,553,253,718 -CHESS_LIVINGROOM_H_T_frame_2250_jpg.rf.6222aee2f566bb1a112e70d3c078089c.jpg,720,1280,2,1054,273,1279,593 -PUZZLE_LIVINGROOM_T_B_frame_2166_jpg.rf.62339887d71f8b7bf0b25b0699c9fe0a.jpg,720,1280,2,448,384,1084,716 -CHESS_OFFICE_T_H_frame_2384_jpg.rf.6245f754a5696fef85ba73e0e2355c90.jpg,720,1280,1,86,505,402,717 -CARDS_LIVINGROOM_B_T_frame_1887_jpg.rf.6246716f2534699381973a7e5a579e50.jpg,720,1280,2,628,682,760,718 -CARDS_OFFICE_S_B_frame_0008_jpg.rf.6254c4b947ce27597210e52ea1fa68fa.jpg,720,1280,1,261,634,493,714 -CARDS_OFFICE_S_B_frame_0008_jpg.rf.6254c4b947ce27597210e52ea1fa68fa.jpg,720,1280,2,573,646,741,718 -PUZZLE_OFFICE_B_H_frame_1504_jpg.rf.6278e030c9528d6aa380dd294be7dd42.jpg,720,1280,1,315,661,512,714 -PUZZLE_OFFICE_B_H_frame_1504_jpg.rf.6278e030c9528d6aa380dd294be7dd42.jpg,720,1280,2,628,472,1084,714 -CARDS_OFFICE_H_T_frame_0293_jpg.rf.629d268d0e193717d11c35f114ddd5e7.jpg,720,1280,1,205,631,304,718 -CARDS_OFFICE_H_T_frame_0293_jpg.rf.629d268d0e193717d11c35f114ddd5e7.jpg,720,1280,2,599,472,1092,718 -CARDS_OFFICE_H_T_frame_0233_jpg.rf.62b88d393f4b8e5c4828b68b64979f85.jpg,720,1280,1,67,481,436,718 -CARDS_OFFICE_H_T_frame_0233_jpg.rf.62b88d393f4b8e5c4828b68b64979f85.jpg,720,1280,2,527,437,850,710 -JENGA_LIVINGROOM_B_H_frame_2629_jpg.rf.62e5d1c871f7d30eb2302671dc3c23f9.jpg,720,1280,1,488,301,754,541 -JENGA_COURTYARD_S_T_frame_2109_jpg.rf.63090ba911c7b31cf662b48be904430d.jpg,720,1280,1,1,390,419,717 -CARDS_OFFICE_B_S_frame_0819_jpg.rf.6340b4bf6dc55da0ad089b89677161ba.jpg,720,1280,1,579,697,655,717 -CARDS_OFFICE_B_S_frame_0819_jpg.rf.6340b4bf6dc55da0ad089b89677161ba.jpg,720,1280,2,625,527,887,718 -CARDS_OFFICE_H_T_frame_1500_jpg.rf.6345ab135c386e79bd1ed2cb4c052d87.jpg,720,1280,1,245,621,342,718 -CARDS_OFFICE_H_T_frame_1500_jpg.rf.6345ab135c386e79bd1ed2cb4c052d87.jpg,720,1280,2,906,76,1273,451 -PUZZLE_OFFICE_B_H_frame_2101_jpg.rf.63890972f91084373d13c048f09b49b4.jpg,720,1280,1,228,537,512,714 -PUZZLE_OFFICE_B_H_frame_2101_jpg.rf.63890972f91084373d13c048f09b49b4.jpg,720,1280,2,694,434,1070,708 -CARDS_COURTYARD_T_B_frame_0955_jpg.rf.638e4279b05ae2307940b1d473ef3bd2.jpg,720,1280,1,183,615,453,718 -CARDS_COURTYARD_T_B_frame_0955_jpg.rf.638e4279b05ae2307940b1d473ef3bd2.jpg,720,1280,2,493,473,848,716 -PUZZLE_COURTYARD_B_S_frame_1719_jpg.rf.639166b35b7324a9be945fa1343a99af.jpg,720,1280,1,173,569,401,718 -PUZZLE_COURTYARD_B_S_frame_1719_jpg.rf.639166b35b7324a9be945fa1343a99af.jpg,720,1280,2,611,424,854,585 -JENGA_OFFICE_S_B_frame_0899_jpg.rf.639bdb3b5fd5e5e9040ab42e8804dc86.jpg,720,1280,1,283,664,463,718 -JENGA_OFFICE_S_B_frame_0899_jpg.rf.639bdb3b5fd5e5e9040ab42e8804dc86.jpg,720,1280,2,869,602,1106,718 -JENGA_LIVINGROOM_S_T_frame_1900_jpg.rf.63a479a1051e3f070ac2781711ad1b97.jpg,720,1280,1,217,508,590,718 -CARDS_LIVINGROOM_B_T_frame_1707_jpg.rf.63ad30e1a2886d0bfd446b07844c15fa.jpg,720,1280,2,671,546,948,718 -PUZZLE_LIVINGROOM_H_S_frame_1921_jpg.rf.63b42fa37a0b3501eedd742f8440cc79.jpg,720,1280,2,708,259,1144,717 -PUZZLE_COURTYARD_H_T_frame_1761_jpg.rf.63b4fd241500d5c237d1eabd6abade73.jpg,720,1280,2,664,514,905,709 -PUZZLE_OFFICE_B_H_frame_0793_jpg.rf.63c050320b7c2f6f0e2f00ab0c3d8f05.jpg,720,1280,1,8,419,365,713 -PUZZLE_OFFICE_B_H_frame_0793_jpg.rf.63c050320b7c2f6f0e2f00ab0c3d8f05.jpg,720,1280,2,736,420,1273,717 -JENGA_OFFICE_B_S_frame_0192_jpg.rf.63c0f1a66a7b036583dcb769c23bb26e.jpg,720,1280,2,531,293,841,523 -CARDS_OFFICE_H_T_frame_0793_jpg.rf.63cf2235e40bfc1c0ed4fb0679f8c054.jpg,720,1280,1,266,631,404,718 -CARDS_OFFICE_H_T_frame_0793_jpg.rf.63cf2235e40bfc1c0ed4fb0679f8c054.jpg,720,1280,2,496,402,862,683 -CHESS_LIVINGROOM_T_H_frame_1458_jpg.rf.63d86581fcbb541a794e8af2840e84a9.jpg,720,1280,2,522,677,653,719 -PUZZLE_COURTYARD_H_T_frame_1472_jpg.rf.63f8fe19d05e0955f836aafc80b3a297.jpg,720,1280,2,729,435,980,710 -CHESS_COURTYARD_T_B_frame_0675_jpg.rf.63fea1d7f94f55e74c766cf68f01d310.jpg,720,1280,1,18,623,271,717 -CHESS_COURTYARD_T_B_frame_0675_jpg.rf.63fea1d7f94f55e74c766cf68f01d310.jpg,720,1280,2,225,619,543,717 -CARDS_OFFICE_B_S_frame_0892_jpg.rf.640b85f40d530e3942de30674f158dab.jpg,720,1280,2,577,497,826,719 -PUZZLE_COURTYARD_B_S_frame_0663_jpg.rf.6414fd449a80aae51b4c0eaf134d4158.jpg,720,1280,2,598,669,820,719 -PUZZLE_OFFICE_B_H_frame_2441_jpg.rf.641ec389dd980c799688a12ce8f80fb0.jpg,720,1280,1,30,464,402,711 -PUZZLE_OFFICE_B_H_frame_2441_jpg.rf.641ec389dd980c799688a12ce8f80fb0.jpg,720,1280,2,444,489,745,712 -CARDS_OFFICE_S_B_frame_0640_jpg.rf.641e2ecf51f3825673da4c28a4b7838c.jpg,720,1280,1,345,692,440,718 -PUZZLE_COURTYARD_B_S_frame_1168_jpg.rf.642161079f101e76fa39738689031289.jpg,720,1280,1,241,654,490,718 -PUZZLE_COURTYARD_B_S_frame_1168_jpg.rf.642161079f101e76fa39738689031289.jpg,720,1280,2,528,601,838,719 -PUZZLE_LIVINGROOM_B_T_frame_1836_jpg.rf.643178117ba4f041f65e35f10d809bcc.jpg,720,1280,2,503,458,954,718 -CARDS_LIVINGROOM_H_S_frame_1947_jpg.rf.6434b0b2a138357de81b331158c7bd3a.jpg,720,1280,2,600,565,869,718 -CARDS_LIVINGROOM_T_B_frame_0978_jpg.rf.6439eb7bd08c5c772ce67d89845b680a.jpg,720,1280,1,5,559,239,719 -CARDS_LIVINGROOM_T_B_frame_0978_jpg.rf.6439eb7bd08c5c772ce67d89845b680a.jpg,720,1280,2,594,291,950,678 -CARDS_COURTYARD_S_H_frame_2680_jpg.rf.645151434ce99940a22116404319cf8b.jpg,720,1280,1,363,688,421,718 -CHESS_COURTYARD_S_H_frame_2121_jpg.rf.645cc80fda2ad6e6e0ca06f9bea7b184.jpg,720,1280,2,729,494,1130,717 -CHESS_OFFICE_B_S_frame_2521_jpg.rf.648f204fbe057063bede9af085ea0d6c.jpg,720,1280,2,617,520,1017,718 -CARDS_OFFICE_H_T_frame_0854_jpg.rf.64a4f2c0105431c59013ea4368bb7b8c.jpg,720,1280,1,221,574,488,718 -CARDS_OFFICE_H_T_frame_0854_jpg.rf.64a4f2c0105431c59013ea4368bb7b8c.jpg,720,1280,2,645,597,872,718 -CHESS_LIVINGROOM_T_H_frame_0063_jpg.rf.64b57ed6063cde1e562eb2ff0aa8ca16.jpg,720,1280,2,577,378,966,627 -PUZZLE_COURTYARD_T_H_frame_2473_jpg.rf.649a527de1c00b01f49f8d3c235bdd00.jpg,720,1280,2,461,157,970,546 -PUZZLE_COURTYARD_T_H_frame_2473_jpg.rf.649a527de1c00b01f49f8d3c235bdd00.jpg,720,1280,1,3,339,336,718 -CHESS_LIVINGROOM_T_H_frame_0181_jpg.rf.64c5327fbd9e399439c329ff1308b579.jpg,720,1280,2,585,136,1048,470 -CARDS_OFFICE_H_T_frame_1817_jpg.rf.64e7b29ef37a97516992fa4b28ea93ff.jpg,720,1280,2,607,515,1101,710 -CHESS_COURTYARD_T_B_frame_0925_jpg.rf.64f3813bffb6d743c40b221b39cd7aff.jpg,720,1280,1,1,474,251,718 -CHESS_COURTYARD_T_B_frame_0925_jpg.rf.64f3813bffb6d743c40b221b39cd7aff.jpg,720,1280,2,329,613,675,718 -CHESS_LIVINGROOM_T_H_frame_2314_jpg.rf.64f6a545e5cfe1a7ba6c7797f946c1ee.jpg,720,1280,2,478,53,859,303 -CARDS_COURTYARD_B_T_frame_1758_jpg.rf.651bdf987d1f5fc0187dd1747322cfd3.jpg,720,1280,2,525,609,782,718 -JENGA_OFFICE_S_B_frame_0884_jpg.rf.653a182759b9ee35981b92c028794396.jpg,720,1280,1,238,659,429,716 -JENGA_OFFICE_S_B_frame_0884_jpg.rf.653a182759b9ee35981b92c028794396.jpg,720,1280,2,830,588,1078,719 -PUZZLE_LIVINGROOM_S_H_frame_2402_jpg.rf.65467e99a4dfd94546e10833023a371e.jpg,720,1280,1,46,521,448,716 -PUZZLE_LIVINGROOM_S_H_frame_2402_jpg.rf.65467e99a4dfd94546e10833023a371e.jpg,720,1280,2,541,549,861,718 -CARDS_OFFICE_B_S_frame_1511_jpg.rf.655101421ae13f59fa0787c2de79d75e.jpg,720,1280,1,327,654,381,717 -CARDS_OFFICE_B_S_frame_1511_jpg.rf.655101421ae13f59fa0787c2de79d75e.jpg,720,1280,2,618,636,804,718 -PUZZLE_OFFICE_B_H_frame_1451_jpg.rf.65873c83eb2ac094d3db247b50061157.jpg,720,1280,2,542,478,1000,719 -PUZZLE_OFFICE_B_H_frame_1451_jpg.rf.65873c83eb2ac094d3db247b50061157.jpg,720,1280,1,118,548,447,719 -CARDS_COURTYARD_H_S_frame_1232_jpg.rf.6594dc484300c5a56d17e447e90e2c59.jpg,720,1280,1,152,622,425,719 -CARDS_COURTYARD_H_S_frame_1232_jpg.rf.6594dc484300c5a56d17e447e90e2c59.jpg,720,1280,2,536,601,774,719 -CHESS_LIVINGROOM_S_B_frame_0515_jpg.rf.65c89b458262c6883c192d67bbb79a79.jpg,720,1280,2,510,494,956,718 -CARDS_COURTYARD_S_H_frame_2154_jpg.rf.65ca0756b0a0c03abdf38a18fe2d57cb.jpg,720,1280,1,205,688,306,718 -PUZZLE_COURTYARD_T_H_frame_0243_jpg.rf.65cfe7eab741c75b74c7c507f9a05983.jpg,720,1280,1,12,585,423,718 -PUZZLE_COURTYARD_T_H_frame_0243_jpg.rf.65cfe7eab741c75b74c7c507f9a05983.jpg,720,1280,2,520,633,792,718 -PUZZLE_COURTYARD_B_S_frame_0718_jpg.rf.65deb4b92ee35196fb063d282de1137b.jpg,720,1280,2,534,578,933,719 -JENGA_OFFICE_T_H_frame_0218_jpg.rf.660fad4e4e9d4043028ff113db5b2d2b.jpg,720,1280,1,122,414,408,716 -JENGA_OFFICE_T_H_frame_0218_jpg.rf.660fad4e4e9d4043028ff113db5b2d2b.jpg,720,1280,2,557,534,817,714 -PUZZLE_COURTYARD_S_B_frame_1038_jpg.rf.664763f2c3c42825d0f76ce5cc6a22c5.jpg,720,1280,1,183,510,547,717 -PUZZLE_COURTYARD_S_B_frame_1038_jpg.rf.664763f2c3c42825d0f76ce5cc6a22c5.jpg,720,1280,2,642,465,814,706 -JENGA_LIVINGROOM_B_H_frame_2433_jpg.rf.6663d8ad6b9c7bb3182371316a5c6e82.jpg,720,1280,1,199,661,462,718 -CHESS_COURTYARD_T_B_frame_0990_jpg.rf.66b5f2116adb17adc7afc07bdd47a9b0.jpg,720,1280,1,1,626,217,718 -CHESS_COURTYARD_T_B_frame_0990_jpg.rf.66b5f2116adb17adc7afc07bdd47a9b0.jpg,720,1280,2,272,651,540,717 -PUZZLE_COURTYARD_S_B_frame_0900_jpg.rf.667ed1b7724a65018571fff45a8506d4.jpg,720,1280,1,5,639,205,718 -CARDS_LIVINGROOM_S_H_frame_1803_jpg.rf.66bb2b4a88d8e436538b11d900d870bf.jpg,720,1280,1,111,604,419,718 -CARDS_LIVINGROOM_S_H_frame_1803_jpg.rf.66bb2b4a88d8e436538b11d900d870bf.jpg,720,1280,2,476,587,758,718 -CHESS_COURTYARD_B_T_frame_0197_jpg.rf.66d181f3babbba970d0e864497ac5a20.jpg,720,1280,2,576,475,911,709 -CHESS_LIVINGROOM_H_T_frame_1363_jpg.rf.66d2b2679b999981be29b2ee87f720de.jpg,720,1280,1,1,563,266,718 -CHESS_LIVINGROOM_H_T_frame_1363_jpg.rf.66d2b2679b999981be29b2ee87f720de.jpg,720,1280,2,461,341,881,585 -JENGA_OFFICE_H_T_frame_2595_jpg.rf.66f93ea3ed63b872a24f684bc3c43791.jpg,720,1280,2,667,223,908,423 -CARDS_OFFICE_H_T_frame_0618_jpg.rf.6734cda0175d8246fba031456150d8e6.jpg,720,1280,1,283,538,541,718 -CARDS_OFFICE_H_T_frame_0618_jpg.rf.6734cda0175d8246fba031456150d8e6.jpg,720,1280,2,577,508,862,717 -JENGA_LIVINGROOM_H_B_frame_0365_jpg.rf.673950ea2e2ec5de9cd7d7311d84fcde.jpg,720,1280,2,534,295,820,621 -PUZZLE_OFFICE_H_B_frame_2466_jpg.rf.67514534e9f612003ad70f54d66fa0ce.jpg,720,1280,1,167,532,412,713 -PUZZLE_OFFICE_H_B_frame_2466_jpg.rf.67514534e9f612003ad70f54d66fa0ce.jpg,720,1280,2,506,434,675,573 -PUZZLE_COURTYARD_B_S_frame_0823_jpg.rf.67736920c562863d9b06713c0e11d247.jpg,720,1280,2,1041,591,1279,719 -PUZZLE_COURTYARD_H_T_frame_0505_jpg.rf.6799b5b5c08f7547d463e2bfc7ce6a3e.jpg,720,1280,1,180,648,428,716 -CARDS_LIVINGROOM_T_B_frame_0761_jpg.rf.67a25b57add3b77f99a73821d067ffc1.jpg,720,1280,1,1,569,133,641 -CARDS_LIVINGROOM_T_B_frame_0761_jpg.rf.67a25b57add3b77f99a73821d067ffc1.jpg,720,1280,2,595,380,961,637 -CHESS_COURTYARD_S_H_frame_0085_jpg.rf.67a2ed20d792a5fabed386339fb756e5.jpg,720,1280,2,762,501,1190,718 -CARDS_OFFICE_T_H_frame_0604_jpg.rf.67c6cf72b4e479cfb9c5a77fcf36b972.jpg,720,1280,1,230,641,406,715 -CARDS_OFFICE_T_H_frame_0604_jpg.rf.67c6cf72b4e479cfb9c5a77fcf36b972.jpg,720,1280,2,554,170,758,399 -PUZZLE_OFFICE_S_T_frame_1246_jpg.rf.67e3a831464cc4f9f4c4682ca46d6bf2.jpg,720,1280,2,605,698,683,716 -CARDS_OFFICE_T_H_frame_2276_jpg.rf.67f40622034ee0b61818906778166b23.jpg,720,1280,2,577,679,669,719 -CARDS_COURTYARD_H_S_frame_2369_jpg.rf.6813818d1a861235dc8e96150c38a0da.jpg,720,1280,1,123,507,411,719 -CARDS_COURTYARD_H_S_frame_2369_jpg.rf.6813818d1a861235dc8e96150c38a0da.jpg,720,1280,2,664,219,982,527 -CARDS_COURTYARD_B_T_frame_0484_jpg.rf.6830b7b761e8388f1dbd05b4b5328197.jpg,720,1280,2,651,681,817,718 -CARDS_COURTYARD_T_B_frame_0823_jpg.rf.686b8060ce4d0f3669d734d31c76e791.jpg,720,1280,1,137,565,474,718 -CARDS_COURTYARD_T_B_frame_0823_jpg.rf.686b8060ce4d0f3669d734d31c76e791.jpg,720,1280,2,522,502,856,718 -CARDS_LIVINGROOM_H_S_frame_1438_jpg.rf.686bbeb0df89dae953fd1bcef749c684.jpg,720,1280,2,656,578,916,719 -CARDS_LIVINGROOM_H_S_frame_1438_jpg.rf.686bbeb0df89dae953fd1bcef749c684.jpg,720,1280,1,254,649,472,719 -CARDS_OFFICE_T_H_frame_2657_jpg.rf.687375bb65fc63964869064a718c25bd.jpg,720,1280,1,194,634,444,719 -CARDS_OFFICE_T_H_frame_2657_jpg.rf.687375bb65fc63964869064a718c25bd.jpg,720,1280,2,508,598,739,719 -PUZZLE_LIVINGROOM_T_B_frame_0456_jpg.rf.6889be888f6e7e78a32cdcf5b4be37c4.jpg,720,1280,2,601,433,1279,716 -PUZZLE_LIVINGROOM_T_B_frame_2578_jpg.rf.68b36915641893d2111d3a4a805a842d.jpg,720,1280,1,7,289,321,555 -PUZZLE_LIVINGROOM_T_B_frame_2578_jpg.rf.68b36915641893d2111d3a4a805a842d.jpg,720,1280,2,700,204,1275,679 -PUZZLE_OFFICE_S_T_frame_0873_jpg.rf.68a92c3246944deff6d76f34a259d66b.jpg,720,1280,2,505,512,767,717 -CHESS_LIVINGROOM_T_H_frame_1271_jpg.rf.68c333e868cf9e82dc9a6250fb36d7a2.jpg,720,1280,2,752,512,1199,719 -JENGA_LIVINGROOM_T_S_frame_0094_jpg.rf.68d7228e2c672387cd0c914fa49ab4ed.jpg,720,1280,1,118,277,428,632 -JENGA_LIVINGROOM_T_S_frame_0094_jpg.rf.68d7228e2c672387cd0c914fa49ab4ed.jpg,720,1280,2,521,276,869,587 -CARDS_LIVINGROOM_B_T_frame_0657_jpg.rf.68d7d7c6cc708bb783f78e3ab91bec53.jpg,720,1280,2,683,631,866,718 -CHESS_COURTYARD_T_B_frame_1821_jpg.rf.68dbcaa1fa0cdc4fc818643326e28275.jpg,720,1280,1,94,606,412,716 -CHESS_COURTYARD_T_B_frame_1821_jpg.rf.68dbcaa1fa0cdc4fc818643326e28275.jpg,720,1280,2,485,326,741,518 -CHESS_LIVINGROOM_H_T_frame_1083_jpg.rf.68fa9d15363c2772d20b5d0d999ace1f.jpg,720,1280,1,5,583,357,716 -CHESS_LIVINGROOM_H_T_frame_1083_jpg.rf.68fa9d15363c2772d20b5d0d999ace1f.jpg,720,1280,2,652,216,1126,517 -PUZZLE_OFFICE_S_T_frame_0656_jpg.rf.690e569312c9d48cce9d5b77c5eb217d.jpg,720,1280,1,0,556,411,717 -PUZZLE_OFFICE_S_T_frame_0656_jpg.rf.690e569312c9d48cce9d5b77c5eb217d.jpg,720,1280,2,620,669,786,719 -CARDS_OFFICE_B_S_frame_2286_jpg.rf.6915bf854bea7b971009cb8b31990bb5.jpg,720,1280,2,621,510,883,709 -JENGA_LIVINGROOM_B_H_frame_1351_jpg.rf.69164e8711fe822720a79c871cc80aea.jpg,720,1280,1,5,567,387,716 -JENGA_LIVINGROOM_B_H_frame_1351_jpg.rf.69164e8711fe822720a79c871cc80aea.jpg,720,1280,2,764,528,1018,716 -JENGA_LIVINGROOM_T_S_frame_1723_jpg.rf.6968299e572683f2674e17601b244be4.jpg,720,1280,1,8,450,231,698 -JENGA_LIVINGROOM_T_S_frame_1723_jpg.rf.6968299e572683f2674e17601b244be4.jpg,720,1280,2,624,323,1010,634 -CARDS_LIVINGROOM_B_T_frame_1770_jpg.rf.691810665e62e9ed5af60facaee3e53e.jpg,720,1280,2,724,491,1080,718 -CARDS_LIVINGROOM_S_H_frame_1876_jpg.rf.6971f82d0e38785e6defad0369577e11.jpg,720,1280,2,588,691,630,716 -PUZZLE_LIVINGROOM_B_T_frame_1700_jpg.rf.697c0b062cecb4ad61741db94d71501a.jpg,720,1280,1,5,594,477,716 -PUZZLE_LIVINGROOM_B_T_frame_1382_jpg.rf.697fa29dbea2fa8159394140125c893d.jpg,720,1280,1,4,504,477,719 -PUZZLE_LIVINGROOM_B_T_frame_1382_jpg.rf.697fa29dbea2fa8159394140125c893d.jpg,720,1280,2,526,536,1163,717 -CARDS_OFFICE_H_T_frame_2620_jpg.rf.698b1fc35bfa7950603b3cf9ceba7eee.jpg,720,1280,1,236,644,325,718 -CARDS_OFFICE_H_T_frame_2620_jpg.rf.698b1fc35bfa7950603b3cf9ceba7eee.jpg,720,1280,2,626,360,1133,708 -CHESS_LIVINGROOM_H_T_frame_1395_jpg.rf.69c0b113f5c3cb1972129f8b975d15ad.jpg,720,1280,1,1,604,289,718 -CHESS_LIVINGROOM_H_T_frame_1395_jpg.rf.69c0b113f5c3cb1972129f8b975d15ad.jpg,720,1280,2,450,411,783,676 -JENGA_OFFICE_S_B_frame_2366_jpg.rf.69d16fe8a46912d92ce6c907d4b1cd42.jpg,720,1280,2,560,444,815,719 -PUZZLE_LIVINGROOM_H_S_frame_1394_jpg.rf.69f4137cafe55dffc6d63869d077a297.jpg,720,1280,2,778,313,1020,626 -JENGA_COURTYARD_S_T_frame_2484_jpg.rf.6a0c8d955ed4d77b4ad6e82ccd6540e7.jpg,720,1280,1,326,469,535,719 -JENGA_COURTYARD_S_T_frame_2484_jpg.rf.6a0c8d955ed4d77b4ad6e82ccd6540e7.jpg,720,1280,2,709,535,972,718 -CARDS_OFFICE_H_T_frame_1048_jpg.rf.6a1d7a33bd293cdf386a569ffb453772.jpg,720,1280,1,270,659,342,718 -CARDS_OFFICE_H_T_frame_1048_jpg.rf.6a1d7a33bd293cdf386a569ffb453772.jpg,720,1280,2,664,464,944,718 -CHESS_OFFICE_T_H_frame_1282_jpg.rf.6a1f1fcbd3c908e29bafd7194e585152.jpg,720,1280,1,44,592,321,716 -CHESS_OFFICE_T_H_frame_1282_jpg.rf.6a1f1fcbd3c908e29bafd7194e585152.jpg,720,1280,2,350,607,658,718 -CHESS_OFFICE_B_S_frame_1745_jpg.rf.6a1f91c5bdafd15fb999b2cdccfb0613.jpg,720,1280,1,279,656,486,717 -CHESS_OFFICE_B_S_frame_1745_jpg.rf.6a1f91c5bdafd15fb999b2cdccfb0613.jpg,720,1280,2,769,689,939,719 -JENGA_LIVINGROOM_H_B_frame_2149_jpg.rf.6a36bd05939554e1fb27efc528e934ca.jpg,720,1280,2,547,221,874,701 -CARDS_COURTYARD_H_S_frame_2194_jpg.rf.6a45d660446d3c81c1cd28a2fda1641b.jpg,720,1280,1,214,566,486,719 -CARDS_COURTYARD_H_S_frame_2194_jpg.rf.6a45d660446d3c81c1cd28a2fda1641b.jpg,720,1280,2,559,370,951,619 -PUZZLE_OFFICE_H_B_frame_0723_jpg.rf.6a4ffb3ca1d8681bde7ffc5cf9871095.jpg,720,1280,1,160,593,429,713 -PUZZLE_OFFICE_H_B_frame_0723_jpg.rf.6a4ffb3ca1d8681bde7ffc5cf9871095.jpg,720,1280,2,812,441,1019,665 -CARDS_OFFICE_B_S_frame_0732_jpg.rf.6a804a4224bcf8a5ad734bcb097cba56.jpg,720,1280,1,382,685,461,718 -CARDS_OFFICE_B_S_frame_0732_jpg.rf.6a804a4224bcf8a5ad734bcb097cba56.jpg,720,1280,2,659,692,716,718 -JENGA_COURTYARD_B_H_frame_1123_jpg.rf.6aa1d1fbafca3609f32a953f20e1952a.jpg,720,1280,2,754,678,911,719 -PUZZLE_OFFICE_T_S_frame_0158_jpg.rf.6af0bd6984a54f3df31201b5413cc836.jpg,720,1280,1,212,399,531,661 -PUZZLE_OFFICE_T_S_frame_0158_jpg.rf.6af0bd6984a54f3df31201b5413cc836.jpg,720,1280,2,590,399,865,658 -JENGA_OFFICE_H_T_frame_1392_jpg.rf.6af360968f7a6d13e9237a7944cdc347.jpg,720,1280,1,342,368,457,667 -JENGA_OFFICE_H_T_frame_1392_jpg.rf.6af360968f7a6d13e9237a7944cdc347.jpg,720,1280,2,561,285,724,636 -CHESS_LIVINGROOM_S_B_frame_1009_jpg.rf.6af619c2647d8469804c19b04c03fb57.jpg,720,1280,2,722,458,1085,718 -PUZZLE_COURTYARD_B_S_frame_2575_jpg.rf.6b07463dcdb970e453811bec6c760df3.jpg,720,1280,1,314,712,336,719 -PUZZLE_COURTYARD_B_S_frame_2575_jpg.rf.6b07463dcdb970e453811bec6c760df3.jpg,720,1280,2,888,699,1025,719 -PUZZLE_COURTYARD_B_S_frame_1353_jpg.rf.6b2a3fbc9637704a46fb77808bea7698.jpg,720,1280,1,225,595,527,719 -PUZZLE_COURTYARD_B_S_frame_1353_jpg.rf.6b2a3fbc9637704a46fb77808bea7698.jpg,720,1280,2,581,503,1071,719 -CHESS_LIVINGROOM_S_B_frame_2621_jpg.rf.6b3ac6e594e5e454bd04526d82a169a9.jpg,720,1280,1,61,698,192,718 -CHESS_LIVINGROOM_S_B_frame_2621_jpg.rf.6b3ac6e594e5e454bd04526d82a169a9.jpg,720,1280,2,835,652,1223,714 -CHESS_OFFICE_T_H_frame_2312_jpg.rf.6b4407f15c331fc7473bc9fdf3c10a0d.jpg,720,1280,1,181,635,389,716 -CHESS_OFFICE_T_H_frame_2312_jpg.rf.6b4407f15c331fc7473bc9fdf3c10a0d.jpg,720,1280,2,374,668,579,716 -CARDS_COURTYARD_B_T_frame_1788_jpg.rf.6b4d12c068ae96344a31334fd8b49711.jpg,720,1280,2,523,584,795,714 -JENGA_OFFICE_T_H_frame_0597_jpg.rf.6b618a655749cf66e5f5794210e3b0d7.jpg,720,1280,1,310,681,443,718 -JENGA_OFFICE_T_H_frame_0597_jpg.rf.6b618a655749cf66e5f5794210e3b0d7.jpg,720,1280,2,472,700,597,719 -PUZZLE_LIVINGROOM_B_T_frame_2650_jpg.rf.6b72a8ac3c607fd3e589c58a278b09f4.jpg,720,1280,1,185,404,562,677 -PUZZLE_LIVINGROOM_B_T_frame_2650_jpg.rf.6b72a8ac3c607fd3e589c58a278b09f4.jpg,720,1280,2,724,462,1164,716 -CARDS_LIVINGROOM_S_H_frame_0018_jpg.rf.6b80b024f37e6a3bd347ee2cb6a84580.jpg,720,1280,1,410,648,499,716 -CARDS_LIVINGROOM_S_H_frame_0018_jpg.rf.6b80b024f37e6a3bd347ee2cb6a84580.jpg,720,1280,2,599,669,654,714 -CHESS_COURTYARD_H_S_frame_2342_jpg.rf.6bc0a1d4670b36e4f44da5a16083c451.jpg,720,1280,1,436,607,662,718 -CHESS_COURTYARD_H_S_frame_2342_jpg.rf.6bc0a1d4670b36e4f44da5a16083c451.jpg,720,1280,2,833,442,1113,716 -PUZZLE_LIVINGROOM_S_H_frame_2244_jpg.rf.6bd01e1cd88f4be4d678e32874f0bee6.jpg,720,1280,2,614,676,736,716 -CHESS_OFFICE_H_T_frame_2281_jpg.rf.6bd88ed58758762e78d5058009477991.jpg,720,1280,2,653,267,876,447 -CARDS_COURTYARD_H_S_frame_0247_jpg.rf.6bdc8f0489694c92b10f4253ba0178f2.jpg,720,1280,1,286,647,375,719 -CARDS_COURTYARD_H_S_frame_0247_jpg.rf.6bdc8f0489694c92b10f4253ba0178f2.jpg,720,1280,2,592,509,816,719 -JENGA_LIVINGROOM_S_T_frame_1881_jpg.rf.6be25026887b19a1069614f2092fdced.jpg,720,1280,1,262,578,607,718 -JENGA_LIVINGROOM_T_S_frame_2676_jpg.rf.6bf60a68ce0a4f9e1742708cea7773b2.jpg,720,1280,1,10,300,369,660 -JENGA_LIVINGROOM_T_S_frame_2676_jpg.rf.6bf60a68ce0a4f9e1742708cea7773b2.jpg,720,1280,2,518,287,899,623 -PUZZLE_LIVINGROOM_S_H_frame_2664_jpg.rf.6be7ac1a8d17a1317f8d1e7f0254a6cf.jpg,720,1280,1,1,279,457,642 -PUZZLE_COURTYARD_B_S_frame_1461_jpg.rf.6bf62f3093d4af7a63c817c3a392865e.jpg,720,1280,1,51,528,481,719 -PUZZLE_COURTYARD_B_S_frame_1461_jpg.rf.6bf62f3093d4af7a63c817c3a392865e.jpg,720,1280,2,433,623,707,719 -JENGA_COURTYARD_H_B_frame_0668_jpg.rf.6c373b2726439a2bfe0033b09c8cf45c.jpg,720,1280,2,741,405,955,718 -CARDS_COURTYARD_H_S_frame_0958_jpg.rf.6c4bb9a81de86aa15b953570e52c7ab6.jpg,720,1280,1,202,499,497,719 -CARDS_COURTYARD_H_S_frame_0958_jpg.rf.6c4bb9a81de86aa15b953570e52c7ab6.jpg,720,1280,2,609,460,784,659 -PUZZLE_COURTYARD_T_H_frame_0469_jpg.rf.6c4dd4c458981ed08030dfffee157556.jpg,720,1280,1,39,676,285,718 -PUZZLE_COURTYARD_T_H_frame_0469_jpg.rf.6c4dd4c458981ed08030dfffee157556.jpg,720,1280,2,811,481,1116,718 -CHESS_COURTYARD_B_T_frame_1017_jpg.rf.6c5fdd467686e88e0ba04c08e5e1c61c.jpg,720,1280,2,686,428,977,611 -CARDS_LIVINGROOM_B_T_frame_1433_jpg.rf.6c6d81febf8b55c849cb7997e1cd0dbe.jpg,720,1280,2,666,430,957,718 -CARDS_OFFICE_T_H_frame_0716_jpg.rf.6c9aef5562c7e0b9b7eb7b36cb628384.jpg,720,1280,1,279,690,342,717 -CARDS_OFFICE_T_H_frame_0716_jpg.rf.6c9aef5562c7e0b9b7eb7b36cb628384.jpg,720,1280,2,529,584,830,719 -JENGA_OFFICE_T_H_frame_1490_jpg.rf.6caf254a4abc3cd2cf0658bc76fc46d1.jpg,720,1280,1,364,158,478,446 -JENGA_OFFICE_T_H_frame_1490_jpg.rf.6caf254a4abc3cd2cf0658bc76fc46d1.jpg,720,1280,2,591,179,704,432 -CHESS_OFFICE_H_T_frame_1848_jpg.rf.6cc50dd2adf0121d77b5a19b008674fa.jpg,720,1280,2,838,484,1039,655 -CARDS_OFFICE_S_B_frame_0443_jpg.rf.6cdaf771d5235792db9d4ac8cd93ebc5.jpg,720,1280,1,242,673,424,718 -CARDS_OFFICE_S_B_frame_0443_jpg.rf.6cdaf771d5235792db9d4ac8cd93ebc5.jpg,720,1280,2,552,684,633,717 -PUZZLE_LIVINGROOM_B_T_frame_0862_jpg.rf.6ce712c974d073a20ab7dabd66551a27.jpg,720,1280,1,271,562,575,717 -PUZZLE_LIVINGROOM_B_T_frame_0862_jpg.rf.6ce712c974d073a20ab7dabd66551a27.jpg,720,1280,2,593,562,1202,719 -CARDS_LIVINGROOM_H_S_frame_0946_jpg.rf.6cef729cfc6afebb43fece6b750b65b5.jpg,720,1280,2,742,505,997,719 -PUZZLE_COURTYARD_T_H_frame_1605_jpg.rf.6d01b3c264c6a2ad605028e145bbaf85.jpg,720,1280,2,548,413,942,718 -CARDS_LIVINGROOM_S_H_frame_0692_jpg.rf.6d06b054c15f85a9bb066e1e56a68642.jpg,720,1280,1,238,616,435,718 -CARDS_LIVINGROOM_S_H_frame_0692_jpg.rf.6d06b054c15f85a9bb066e1e56a68642.jpg,720,1280,2,533,657,741,718 -PUZZLE_OFFICE_H_B_frame_1640_jpg.rf.6d07a93d25ce77d483725977a605062e.jpg,720,1280,2,651,654,829,719 -CHESS_LIVINGROOM_T_H_frame_1479_jpg.rf.6d110d3ccf34250e49e5d3defb1b135a.jpg,720,1280,2,566,687,709,718 -CARDS_LIVINGROOM_B_T_frame_2103_jpg.rf.6d3462ee7b405f83b5f1a219c5029a87.jpg,720,1280,2,656,549,1020,718 -PUZZLE_OFFICE_T_S_frame_2335_jpg.rf.6d6308112c5e634a82e77e57c177591d.jpg,720,1280,1,12,588,211,717 -PUZZLE_OFFICE_T_S_frame_2335_jpg.rf.6d6308112c5e634a82e77e57c177591d.jpg,720,1280,2,610,496,811,707 -CHESS_LIVINGROOM_T_H_frame_0996_jpg.rf.6d415444e42c4c2da9c61b232aa4a9e2.jpg,720,1280,2,385,179,795,435 -PUZZLE_OFFICE_B_H_frame_2398_jpg.rf.6d6b4379f86298cfe92f085129b0ecea.jpg,720,1280,1,111,435,489,716 -PUZZLE_OFFICE_B_H_frame_2398_jpg.rf.6d6b4379f86298cfe92f085129b0ecea.jpg,720,1280,2,527,427,827,716 -PUZZLE_LIVINGROOM_B_T_frame_0439_jpg.rf.6d79df6a6e4044398527a7fde7981dde.jpg,720,1280,2,967,662,1272,717 -PUZZLE_OFFICE_B_H_frame_2353_jpg.rf.6da264433ad6b861a909ba84f5f1009d.jpg,720,1280,1,220,335,526,587 -CARDS_LIVINGROOM_B_T_frame_2590_jpg.rf.6ddb83cb462a3aec9c4bafaa3b02c1b3.jpg,720,1280,1,228,684,285,718 -CARDS_LIVINGROOM_B_T_frame_2590_jpg.rf.6ddb83cb462a3aec9c4bafaa3b02c1b3.jpg,720,1280,2,544,595,859,718 -JENGA_OFFICE_H_T_frame_0490_jpg.rf.6ddf5c8212ae6aa5e1493f7072b1aed9.jpg,720,1280,1,176,591,319,717 -JENGA_OFFICE_H_T_frame_0490_jpg.rf.6ddf5c8212ae6aa5e1493f7072b1aed9.jpg,720,1280,2,301,418,548,712 -JENGA_LIVINGROOM_B_H_frame_1545_jpg.rf.6de701802c36f4250412e8a75bd47552.jpg,720,1280,1,87,526,444,715 -JENGA_LIVINGROOM_B_H_frame_1545_jpg.rf.6de701802c36f4250412e8a75bd47552.jpg,720,1280,2,876,402,1267,716 -PUZZLE_LIVINGROOM_S_H_frame_2507_jpg.rf.6df5380cd25bbd5d299c7c51708d134c.jpg,720,1280,2,792,612,1095,718 -JENGA_OFFICE_T_H_frame_0847_jpg.rf.6e36064e9041a2e738f4a6610520a4f8.jpg,720,1280,1,285,652,511,719 -JENGA_OFFICE_T_H_frame_0847_jpg.rf.6e36064e9041a2e738f4a6610520a4f8.jpg,720,1280,2,655,628,852,719 -PUZZLE_LIVINGROOM_S_H_frame_1529_jpg.rf.6e389ae00002897d49af044898a53f56.jpg,720,1280,2,499,688,686,718 -JENGA_OFFICE_B_S_frame_0089_jpg.rf.6e3ec4a9f5502805c2ca3afb66756dac.jpg,720,1280,1,1,603,261,718 -JENGA_OFFICE_B_S_frame_0089_jpg.rf.6e3ec4a9f5502805c2ca3afb66756dac.jpg,720,1280,2,457,165,825,472 -PUZZLE_OFFICE_B_H_frame_1768_jpg.rf.6e4c0a006874c6532dee2fb56c03bd61.jpg,720,1280,1,10,395,307,657 -PUZZLE_OFFICE_S_T_frame_0413_jpg.rf.6e5086ced3d606dcb878f442883469b5.jpg,720,1280,1,121,614,364,714 -PUZZLE_OFFICE_S_T_frame_0413_jpg.rf.6e5086ced3d606dcb878f442883469b5.jpg,720,1280,2,671,627,890,717 -PUZZLE_LIVINGROOM_S_H_frame_0289_jpg.rf.6e620b2e7ad84ac263f0f1af30bed4e3.jpg,720,1280,1,82,625,438,718 -PUZZLE_LIVINGROOM_S_H_frame_0289_jpg.rf.6e620b2e7ad84ac263f0f1af30bed4e3.jpg,720,1280,2,520,610,878,718 -JENGA_LIVINGROOM_S_T_frame_2287_jpg.rf.6e6bc5d77fee2d37e0e13235206dafae.jpg,720,1280,1,491,669,751,718 -JENGA_LIVINGROOM_S_T_frame_2287_jpg.rf.6e6bc5d77fee2d37e0e13235206dafae.jpg,720,1280,2,1044,699,1107,718 -CHESS_OFFICE_S_B_frame_1334_jpg.rf.6e94371617875f565431c53ec3ede696.jpg,720,1280,1,48,661,310,719 -PUZZLE_LIVINGROOM_S_H_frame_1340_jpg.rf.6e9def0e7cc6952762fe9099697c7146.jpg,720,1280,2,626,650,940,718 -JENGA_COURTYARD_T_S_frame_2330_jpg.rf.6e9f94ae3bde0b3e0d52aa95fe51a9d0.jpg,720,1280,1,148,413,481,718 -JENGA_COURTYARD_T_S_frame_2330_jpg.rf.6e9f94ae3bde0b3e0d52aa95fe51a9d0.jpg,720,1280,2,489,403,810,688 -CARDS_COURTYARD_H_S_frame_0552_jpg.rf.6ea4d7f6e4b6dad5a9164349a8db4ecb.jpg,720,1280,1,354,673,467,719 -CARDS_COURTYARD_H_S_frame_0552_jpg.rf.6ea4d7f6e4b6dad5a9164349a8db4ecb.jpg,720,1280,2,546,425,930,719 -PUZZLE_LIVINGROOM_T_B_frame_0917_jpg.rf.6eae9b3b2374d87d5871704a5c48324d.jpg,720,1280,1,2,556,93,640 -PUZZLE_LIVINGROOM_T_B_frame_0917_jpg.rf.6eae9b3b2374d87d5871704a5c48324d.jpg,720,1280,2,635,445,1150,718 -CARDS_COURTYARD_T_B_frame_1672_jpg.rf.6eb633e022eb6206f937608e6d25dd81.jpg,720,1280,1,259,584,542,717 -CARDS_COURTYARD_T_B_frame_1672_jpg.rf.6eb633e022eb6206f937608e6d25dd81.jpg,720,1280,2,754,440,1033,712 -PUZZLE_LIVINGROOM_T_B_frame_0577_jpg.rf.6ec0e72c59e7c020466e498651b5eab6.jpg,720,1280,1,2,518,255,706 -PUZZLE_LIVINGROOM_T_B_frame_0577_jpg.rf.6ec0e72c59e7c020466e498651b5eab6.jpg,720,1280,2,616,516,1159,717 -JENGA_LIVINGROOM_S_T_frame_1320_jpg.rf.6edf841ba38c2699b8503426d86e5837.jpg,720,1280,2,584,483,989,718 -JENGA_OFFICE_S_B_frame_0507_jpg.rf.6ef3f6bf2b984b7d7f27ee6050d5d7b1.jpg,720,1280,2,742,670,947,719 -JENGA_LIVINGROOM_B_H_frame_1077_jpg.rf.6ef41fbc340d286dc6a13368ae8a4328.jpg,720,1280,2,622,218,1044,476 -JENGA_COURTYARD_H_B_frame_1755_jpg.rf.6eff31fc54569ebfbca6f5afa09e0694.jpg,720,1280,1,391,246,546,585 -JENGA_COURTYARD_H_B_frame_1755_jpg.rf.6eff31fc54569ebfbca6f5afa09e0694.jpg,720,1280,2,597,241,868,652 -CARDS_OFFICE_B_S_frame_2124_jpg.rf.6effecae2cfa50f3e96b249967271730.jpg,720,1280,2,541,549,830,719 -PUZZLE_LIVINGROOM_S_H_frame_1550_jpg.rf.6f0b7d271721df72a82e9e1420eb4c9f.jpg,720,1280,1,115,568,480,718 -CHESS_COURTYARD_B_T_frame_2452_jpg.rf.6f1e7db4a4f632de84a4433b3a18c724.jpg,720,1280,2,679,441,920,617 -JENGA_OFFICE_H_T_frame_1837_jpg.rf.6f50f3ef7b72a6ba7cd267f17f24db3a.jpg,720,1280,2,590,265,906,629 -JENGA_OFFICE_H_T_frame_1837_jpg.rf.6f50f3ef7b72a6ba7cd267f17f24db3a.jpg,720,1280,1,231,353,541,702 -CARDS_LIVINGROOM_S_H_frame_2363_jpg.rf.6f558e56d52e2c7960ce6cc6d671cfab.jpg,720,1280,1,135,542,497,718 -CARDS_LIVINGROOM_S_H_frame_2363_jpg.rf.6f558e56d52e2c7960ce6cc6d671cfab.jpg,720,1280,2,565,525,857,718 -PUZZLE_OFFICE_T_S_frame_0580_jpg.rf.6f56c2765020d77446cf3fb492cb68be.jpg,720,1280,1,6,438,272,719 -PUZZLE_OFFICE_T_S_frame_0580_jpg.rf.6f56c2765020d77446cf3fb492cb68be.jpg,720,1280,2,740,488,1088,708 -JENGA_OFFICE_S_B_frame_1667_jpg.rf.6f5faebe8f1eaebd22b7acab4f08ea30.jpg,720,1280,2,237,214,516,541 -PUZZLE_OFFICE_S_T_frame_0585_jpg.rf.6f80b4e7880dba2832cab7d70b8f9564.jpg,720,1280,1,118,580,435,714 -PUZZLE_OFFICE_S_T_frame_0585_jpg.rf.6f80b4e7880dba2832cab7d70b8f9564.jpg,720,1280,2,552,506,796,712 -CHESS_COURTYARD_T_B_frame_1624_jpg.rf.6fc96c93c7972471ba317658cef1c7d8.jpg,720,1280,1,118,671,342,717 -CHESS_COURTYARD_T_B_frame_1624_jpg.rf.6fc96c93c7972471ba317658cef1c7d8.jpg,720,1280,2,453,706,565,718 -PUZZLE_COURTYARD_H_T_frame_2162_jpg.rf.6fd3b19fb5a744639e7899c1c89797d9.jpg,720,1280,1,373,433,646,677 -PUZZLE_COURTYARD_H_T_frame_2162_jpg.rf.6fd3b19fb5a744639e7899c1c89797d9.jpg,720,1280,2,655,497,911,718 -JENGA_OFFICE_H_T_frame_2657_jpg.rf.6fd46d78de31e595b06de52f78c25642.jpg,720,1280,2,635,436,877,658 -PUZZLE_LIVINGROOM_H_S_frame_1318_jpg.rf.6fd896d8566941fa59e81b1753cd9732.jpg,720,1280,1,199,632,282,718 -PUZZLE_LIVINGROOM_H_S_frame_1318_jpg.rf.6fd896d8566941fa59e81b1753cd9732.jpg,720,1280,2,426,665,577,713 -JENGA_COURTYARD_B_H_frame_0900_jpg.rf.6fda1ffd7d558a78708a15aeb918dff2.jpg,720,1280,1,422,703,504,719 -JENGA_COURTYARD_B_H_frame_0900_jpg.rf.6fda1ffd7d558a78708a15aeb918dff2.jpg,720,1280,2,612,460,855,719 -CHESS_LIVINGROOM_H_T_frame_0052_jpg.rf.6fe4711ed2172afcac9cb0c33282b994.jpg,720,1280,1,1,578,82,716 -CHESS_LIVINGROOM_H_T_frame_0052_jpg.rf.6fe4711ed2172afcac9cb0c33282b994.jpg,720,1280,2,817,318,1279,710 -JENGA_OFFICE_H_T_frame_1375_jpg.rf.6fe59c556dd211753ed64f98a0491feb.jpg,720,1280,1,217,341,398,664 -JENGA_OFFICE_H_T_frame_1375_jpg.rf.6fe59c556dd211753ed64f98a0491feb.jpg,720,1280,2,503,257,685,628 -PUZZLE_LIVINGROOM_T_B_frame_0768_jpg.rf.6feca905c54f8e57082e6e2422cdfea1.jpg,720,1280,1,3,523,292,714 -PUZZLE_LIVINGROOM_T_B_frame_0768_jpg.rf.6feca905c54f8e57082e6e2422cdfea1.jpg,720,1280,2,528,555,1002,713 -JENGA_COURTYARD_S_T_frame_0526_jpg.rf.70567ee00ddabb457314e7b8f6a019bf.jpg,720,1280,1,327,635,459,718 -JENGA_LIVINGROOM_H_B_frame_0198_jpg.rf.703d299aa38dd04e385fd8f12e96e6f6.jpg,720,1280,2,601,411,899,683 -PUZZLE_COURTYARD_H_T_frame_0305_jpg.rf.706414f18143a7cbbf2c97f499cbd132.jpg,720,1280,1,238,658,390,718 -PUZZLE_COURTYARD_H_T_frame_0305_jpg.rf.706414f18143a7cbbf2c97f499cbd132.jpg,720,1280,2,668,450,854,626 -PUZZLE_LIVINGROOM_H_S_frame_2326_jpg.rf.706527a8e2ce232d9ff35a82c9115c3a.jpg,720,1280,1,65,566,439,718 -PUZZLE_LIVINGROOM_H_S_frame_2326_jpg.rf.706527a8e2ce232d9ff35a82c9115c3a.jpg,720,1280,2,519,581,807,715 -JENGA_COURTYARD_T_S_frame_0414_jpg.rf.706c64d9ec1c6806a4b757ddec395a3d.jpg,720,1280,1,52,508,390,714 -JENGA_COURTYARD_T_S_frame_0414_jpg.rf.706c64d9ec1c6806a4b757ddec395a3d.jpg,720,1280,2,494,449,852,710 -JENGA_COURTYARD_B_H_frame_1162_jpg.rf.70781d8ef571ed36ea97741b8577bd30.jpg,720,1280,2,741,677,891,719 -JENGA_COURTYARD_B_H_frame_0489_jpg.rf.707ef53a91b77583f4233b1c14d8c195.jpg,720,1280,2,677,373,960,719 -PUZZLE_COURTYARD_H_T_frame_1237_jpg.rf.708bd12a4c1c68dcba87135308e3f24b.jpg,720,1280,1,246,440,430,611 -PUZZLE_COURTYARD_H_T_frame_1237_jpg.rf.708bd12a4c1c68dcba87135308e3f24b.jpg,720,1280,2,912,594,1199,718 -CHESS_LIVINGROOM_T_H_frame_2308_jpg.rf.708c4b2c5f8eb820fce9782157909664.jpg,720,1280,1,1,366,141,588 -CHESS_LIVINGROOM_T_H_frame_2308_jpg.rf.708c4b2c5f8eb820fce9782157909664.jpg,720,1280,2,392,201,746,469 -CARDS_COURTYARD_B_T_frame_1523_jpg.rf.7091a022a8d22dcc906055107ff54498.jpg,720,1280,1,325,531,625,718 -CARDS_COURTYARD_B_T_frame_1523_jpg.rf.7091a022a8d22dcc906055107ff54498.jpg,720,1280,2,861,613,1104,718 -CARDS_OFFICE_S_B_frame_0915_jpg.rf.7097a76b741471be42ac4fab306220ad.jpg,720,1280,1,299,442,498,712 -JENGA_COURTYARD_B_H_frame_1294_jpg.rf.70ab237c5b9d6aeb251d068b32cfd835.jpg,720,1280,1,400,687,519,719 -JENGA_COURTYARD_B_H_frame_1294_jpg.rf.70ab237c5b9d6aeb251d068b32cfd835.jpg,720,1280,2,658,315,945,692 -PUZZLE_COURTYARD_H_T_frame_0373_jpg.rf.70ab9a5b2ba2952c9c56c0695c6b41ee.jpg,720,1280,1,303,353,565,625 -PUZZLE_COURTYARD_H_T_frame_0373_jpg.rf.70ab9a5b2ba2952c9c56c0695c6b41ee.jpg,720,1280,2,620,486,938,716 -CHESS_OFFICE_B_S_frame_1203_jpg.rf.70b5c88c32de8c95e65f8ec372294a2b.jpg,720,1280,1,222,635,469,716 -CHESS_OFFICE_B_S_frame_1203_jpg.rf.70b5c88c32de8c95e65f8ec372294a2b.jpg,720,1280,2,703,597,1013,718 -CHESS_OFFICE_S_B_frame_1320_jpg.rf.70e4eba4541559a76d7cd72a04fadec4.jpg,720,1280,1,37,611,375,719 -CHESS_OFFICE_S_B_frame_1320_jpg.rf.70e4eba4541559a76d7cd72a04fadec4.jpg,720,1280,2,701,672,994,716 -PUZZLE_OFFICE_H_B_frame_0496_jpg.rf.70e69b57fd7456aa9c73fd9f112a01cb.jpg,720,1280,2,645,396,893,618 -JENGA_LIVINGROOM_H_B_frame_0307_jpg.rf.70f840ef1e3a38592c1032731b10d1d3.jpg,720,1280,2,646,386,944,697 -CHESS_LIVINGROOM_H_T_frame_1063_jpg.rf.70fc38a2be157cf78cf39080ccd98028.jpg,720,1280,1,33,636,305,719 -CHESS_LIVINGROOM_H_T_frame_1063_jpg.rf.70fc38a2be157cf78cf39080ccd98028.jpg,720,1280,2,544,330,1088,616 -CHESS_LIVINGROOM_T_H_frame_1867_jpg.rf.70ff72ed8f99ca9f3f2e99f48864655f.jpg,720,1280,2,244,125,678,470 -JENGA_LIVINGROOM_S_T_frame_1188_jpg.rf.710d52034738e593a0eeced33eafd0a3.jpg,720,1280,1,79,661,361,718 -JENGA_LIVINGROOM_S_T_frame_1188_jpg.rf.710d52034738e593a0eeced33eafd0a3.jpg,720,1280,2,694,686,842,718 -PUZZLE_COURTYARD_B_S_frame_1502_jpg.rf.711c649d91f090085222f9d090406509.jpg,720,1280,1,10,690,165,719 -PUZZLE_COURTYARD_B_S_frame_1502_jpg.rf.711c649d91f090085222f9d090406509.jpg,720,1280,2,1040,666,1189,719 -CARDS_COURTYARD_H_S_frame_1195_jpg.rf.71468abadec35ffcb1ec1166cb90f204.jpg,720,1280,1,67,555,381,719 -CARDS_COURTYARD_H_S_frame_1195_jpg.rf.71468abadec35ffcb1ec1166cb90f204.jpg,720,1280,2,445,548,810,719 -JENGA_COURTYARD_H_B_frame_1016_jpg.rf.7159234e032e5684a634a933a23762c5.jpg,720,1280,2,550,229,815,551 -JENGA_COURTYARD_S_T_frame_0496_jpg.rf.7175ea0262b8f735582294508155fd00.jpg,720,1280,1,298,585,435,717 -CHESS_OFFICE_S_B_frame_1322_jpg.rf.718119548acccc934f97417b25be7c3b.jpg,720,1280,1,5,584,421,719 -CHESS_OFFICE_S_B_frame_1322_jpg.rf.718119548acccc934f97417b25be7c3b.jpg,720,1280,2,683,647,1014,719 -JENGA_OFFICE_T_H_frame_0599_jpg.rf.718780de85d1677de0d09bde64cf2dbe.jpg,720,1280,1,311,687,434,719 -JENGA_OFFICE_T_H_frame_0599_jpg.rf.718780de85d1677de0d09bde64cf2dbe.jpg,720,1280,2,470,705,594,719 -PUZZLE_LIVINGROOM_H_S_frame_0777_jpg.rf.718b1ffe37dcff5e10c039d31417017e.jpg,720,1280,1,3,587,214,716 -PUZZLE_LIVINGROOM_H_S_frame_0777_jpg.rf.718b1ffe37dcff5e10c039d31417017e.jpg,720,1280,2,602,393,905,618 -CHESS_LIVINGROOM_T_H_frame_0023_jpg.rf.7190b4dc9b0b2b7bd2541a7415b2272d.jpg,720,1280,2,681,0,923,209 -CHESS_LIVINGROOM_T_H_frame_0023_jpg.rf.7190b4dc9b0b2b7bd2541a7415b2272d.jpg,720,1280,1,5,98,145,256 -JENGA_OFFICE_H_T_frame_1370_jpg.rf.71b3b70edfda98bb043f0747998d855a.jpg,720,1280,1,175,369,410,709 -JENGA_OFFICE_H_T_frame_1370_jpg.rf.71b3b70edfda98bb043f0747998d855a.jpg,720,1280,2,553,317,719,688 -JENGA_COURTYARD_B_H_frame_2566_jpg.rf.71fd02e8350f72fa03a36fe3a62b6e21.jpg,720,1280,2,624,616,820,718 -JENGA_OFFICE_S_B_frame_2695_jpg.rf.7209dd7d45b56cff01778b77d75ef219.jpg,720,1280,2,678,651,806,716 -CARDS_OFFICE_H_T_frame_1880_jpg.rf.720f27fa9cad1eeb3e367d1ec1110c18.jpg,720,1280,2,790,210,1172,605 -CARDS_OFFICE_H_T_frame_1880_jpg.rf.720f27fa9cad1eeb3e367d1ec1110c18.jpg,720,1280,1,277,665,332,718 -CARDS_COURTYARD_S_H_frame_0016_jpg.rf.7217e76fe08f56073a3b1236dc89b22f.jpg,720,1280,1,251,678,510,718 -CARDS_COURTYARD_S_H_frame_0016_jpg.rf.7217e76fe08f56073a3b1236dc89b22f.jpg,720,1280,2,586,680,645,718 -CARDS_LIVINGROOM_H_S_frame_1184_jpg.rf.72446c3eacfffefa307d51147dcc72f0.jpg,720,1280,1,47,545,367,718 -CARDS_LIVINGROOM_H_S_frame_1184_jpg.rf.72446c3eacfffefa307d51147dcc72f0.jpg,720,1280,2,770,608,1158,718 -CARDS_OFFICE_H_T_frame_1646_jpg.rf.728a0b8767c01bf6e9b8229158d6a7c2.jpg,720,1280,2,817,503,1087,717 -CHESS_COURTYARD_H_S_frame_1712_jpg.rf.7299f3171199ae86a07284e25998f454.jpg,720,1280,2,783,456,1205,693 -CHESS_OFFICE_B_S_frame_0262_jpg.rf.72e7f33ea924a145f54c7253454795cb.jpg,720,1280,2,693,541,993,717 -JENGA_COURTYARD_H_B_frame_2546_jpg.rf.7313e8125f4c3ac827804be7d1668175.jpg,720,1280,1,270,700,389,718 -JENGA_COURTYARD_H_B_frame_2546_jpg.rf.7313e8125f4c3ac827804be7d1668175.jpg,720,1280,2,376,51,541,303 -CHESS_LIVINGROOM_T_H_frame_2567_jpg.rf.7314ae6463d153f9acb6d7634dfab1d3.jpg,720,1280,1,5,338,35,499 -CHESS_LIVINGROOM_T_H_frame_2567_jpg.rf.7314ae6463d153f9acb6d7634dfab1d3.jpg,720,1280,2,568,378,1123,718 -CHESS_LIVINGROOM_H_T_frame_2252_jpg.rf.7322645320a1702358af377c6701874e.jpg,720,1280,2,1043,259,1279,589 -CHESS_LIVINGROOM_H_T_frame_2252_jpg.rf.7322645320a1702358af377c6701874e.jpg,720,1280,1,3,541,250,720 -PUZZLE_LIVINGROOM_H_S_frame_0583_jpg.rf.73443d0f9327cca1defaf349cf3efdf8.jpg,720,1280,1,480,670,610,717 -PUZZLE_LIVINGROOM_H_S_frame_0583_jpg.rf.73443d0f9327cca1defaf349cf3efdf8.jpg,720,1280,2,691,509,1012,711 -CARDS_COURTYARD_T_B_frame_0858_jpg.rf.7351b99cedfd95fd1142ac85a9fdfe50.jpg,720,1280,1,163,594,484,718 -CARDS_COURTYARD_T_B_frame_0858_jpg.rf.7351b99cedfd95fd1142ac85a9fdfe50.jpg,720,1280,2,542,560,856,718 -CHESS_LIVINGROOM_T_H_frame_0342_jpg.rf.735fa2ed613e7470fbba92a4d051659a.jpg,720,1280,1,3,342,175,571 -CHESS_LIVINGROOM_T_H_frame_0342_jpg.rf.735fa2ed613e7470fbba92a4d051659a.jpg,720,1280,2,475,551,929,719 -JENGA_COURTYARD_H_B_frame_2157_jpg.rf.738391007298521a98170dfba6d7e3af.jpg,720,1280,1,1,159,321,544 -JENGA_COURTYARD_H_B_frame_2157_jpg.rf.738391007298521a98170dfba6d7e3af.jpg,720,1280,2,779,63,1118,517 -PUZZLE_COURTYARD_H_T_frame_1689_jpg.rf.73a53650dfaa6cfa1609021382d3f06d.jpg,720,1280,1,323,560,649,717 -PUZZLE_COURTYARD_H_T_frame_1689_jpg.rf.73a53650dfaa6cfa1609021382d3f06d.jpg,720,1280,2,630,603,847,717 -PUZZLE_COURTYARD_S_B_frame_2473_jpg.rf.73c92120486ee0b880ad5644fbdf3900.jpg,720,1280,1,13,563,123,712 -PUZZLE_COURTYARD_S_B_frame_2473_jpg.rf.73c92120486ee0b880ad5644fbdf3900.jpg,720,1280,2,794,506,1055,713 -CARDS_LIVINGROOM_S_H_frame_1742_jpg.rf.73fb0fa085391a6c1ff90ee504dbec1d.jpg,720,1280,1,241,672,395,718 -CARDS_LIVINGROOM_S_H_frame_1742_jpg.rf.73fb0fa085391a6c1ff90ee504dbec1d.jpg,720,1280,2,616,659,751,718 -PUZZLE_LIVINGROOM_H_S_frame_2418_jpg.rf.740954882e1e0497d4848a7bb7e38d5f.jpg,720,1280,1,206,404,462,671 -PUZZLE_LIVINGROOM_H_S_frame_2418_jpg.rf.740954882e1e0497d4848a7bb7e38d5f.jpg,720,1280,2,624,406,905,707 -CARDS_LIVINGROOM_H_S_frame_1145_jpg.rf.7412ec228039192bd4801d4a4e5d74d8.jpg,720,1280,2,564,605,879,719 -CARDS_LIVINGROOM_H_S_frame_0101_jpg.rf.7429d0ed9c974ca4fad836e2f7b9c53d.jpg,720,1280,2,687,546,979,719 -JENGA_OFFICE_S_B_frame_0826_jpg.rf.746b37ac813f7e8d6c06910dd3f4aa8f.jpg,720,1280,1,65,384,474,708 -JENGA_OFFICE_S_B_frame_0826_jpg.rf.746b37ac813f7e8d6c06910dd3f4aa8f.jpg,720,1280,2,769,374,1123,709 -CHESS_LIVINGROOM_S_B_frame_0164_jpg.rf.7459443eb3a099047ecc8cfe5ba3b873.jpg,720,1280,2,597,600,1009,717 -CARDS_COURTYARD_B_T_frame_2491_jpg.rf.74809a165f0c05f53fa0508db7e5f43b.jpg,720,1280,2,726,570,942,718 -PUZZLE_COURTYARD_H_T_frame_1972_jpg.rf.748d26bda2e8488f2dd9f9ebb340807e.jpg,720,1280,1,369,565,720,717 -PUZZLE_COURTYARD_H_T_frame_1972_jpg.rf.748d26bda2e8488f2dd9f9ebb340807e.jpg,720,1280,2,721,341,898,519 -CARDS_OFFICE_H_T_frame_1680_jpg.rf.74a7a77e8c1a68f5431df5eb8797cf50.jpg,720,1280,2,909,322,1159,635 -JENGA_LIVINGROOM_T_S_frame_0040_jpg.rf.74b3e15791aa5a204a1096a80b6e5141.jpg,720,1280,1,163,697,246,718 -JENGA_LIVINGROOM_T_S_frame_0040_jpg.rf.74b3e15791aa5a204a1096a80b6e5141.jpg,720,1280,2,555,320,934,633 -CARDS_LIVINGROOM_T_B_frame_1321_jpg.rf.74ceb9d64d113ab3e1de1eb8500b7772.jpg,720,1280,1,2,573,430,719 -CARDS_LIVINGROOM_T_B_frame_1321_jpg.rf.74ceb9d64d113ab3e1de1eb8500b7772.jpg,720,1280,2,595,547,1021,719 -CARDS_OFFICE_H_T_frame_0454_jpg.rf.74ddb9616449a769c33a7c0805344455.jpg,720,1280,1,217,661,310,718 -CARDS_OFFICE_H_T_frame_0454_jpg.rf.74ddb9616449a769c33a7c0805344455.jpg,720,1280,2,569,482,982,718 -JENGA_LIVINGROOM_S_T_frame_0691_jpg.rf.74dedd9cbb0f4282a0f58eb732579969.jpg,720,1280,2,586,330,953,610 -JENGA_LIVINGROOM_S_T_frame_0691_jpg.rf.74dedd9cbb0f4282a0f58eb732579969.jpg,720,1280,1,1,339,450,693 -PUZZLE_COURTYARD_S_B_frame_1901_jpg.rf.74e0a3086366dd1be078022181aa768b.jpg,720,1280,1,267,600,536,717 -PUZZLE_COURTYARD_S_B_frame_1901_jpg.rf.74e0a3086366dd1be078022181aa768b.jpg,720,1280,2,613,540,870,717 -CARDS_OFFICE_S_B_frame_2099_jpg.rf.74ed943851fbcb600dd735221aea2b79.jpg,720,1280,1,183,586,371,716 -JENGA_OFFICE_S_B_frame_0280_jpg.rf.74efd26e212498dd08d6994ffd836b6d.jpg,720,1280,2,747,701,829,715 -JENGA_OFFICE_B_S_frame_0886_jpg.rf.750a79e6164de87fd31f605651e26bed.jpg,720,1280,1,253,618,531,718 -JENGA_OFFICE_B_S_frame_0886_jpg.rf.750a79e6164de87fd31f605651e26bed.jpg,720,1280,2,542,461,784,713 -CHESS_OFFICE_H_T_frame_2040_jpg.rf.7526c7e6b97eef2989cb68e31653d388.jpg,720,1280,2,511,361,780,572 -PUZZLE_LIVINGROOM_S_H_frame_2170_jpg.rf.752b5dbcd22ec00746ad76ce43aa7edc.jpg,720,1280,2,541,593,912,718 -PUZZLE_LIVINGROOM_B_T_frame_2390_jpg.rf.754b429ec10a67eaafc6902cd33550db.jpg,720,1280,1,6,600,130,712 -PUZZLE_LIVINGROOM_B_T_frame_2390_jpg.rf.754b429ec10a67eaafc6902cd33550db.jpg,720,1280,2,938,364,1278,667 -JENGA_LIVINGROOM_T_S_frame_1181_jpg.rf.756448cec9708987bd4d9a3e800c2794.jpg,720,1280,1,45,487,421,719 -JENGA_LIVINGROOM_T_S_frame_1181_jpg.rf.756448cec9708987bd4d9a3e800c2794.jpg,720,1280,2,537,457,886,718 -JENGA_COURTYARD_S_T_frame_2499_jpg.rf.756865a9ec59443789ab9603fce2a868.jpg,720,1280,1,337,440,568,714 -JENGA_COURTYARD_S_T_frame_2499_jpg.rf.756865a9ec59443789ab9603fce2a868.jpg,720,1280,2,717,485,980,718 -JENGA_COURTYARD_B_H_frame_0550_jpg.rf.7569bb00a7a0fb57b5dfd5b4c20d0578.jpg,720,1280,2,576,109,902,374 -CARDS_OFFICE_S_B_frame_0349_jpg.rf.756fcee06bc11460634e4656876d06f6.jpg,720,1280,1,189,370,418,702 -CARDS_OFFICE_S_B_frame_0349_jpg.rf.756fcee06bc11460634e4656876d06f6.jpg,720,1280,2,610,399,847,718 -PUZZLE_LIVINGROOM_H_S_frame_1479_jpg.rf.757ff5c5b9323bd2f67da026b6b244d4.jpg,720,1280,1,9,428,326,713 -PUZZLE_COURTYARD_B_S_frame_2668_jpg.rf.7592772ca8cc62c6e5796ae5a2c04817.jpg,720,1280,1,201,453,506,719 -PUZZLE_COURTYARD_B_S_frame_2668_jpg.rf.7592772ca8cc62c6e5796ae5a2c04817.jpg,720,1280,2,611,523,886,719 -PUZZLE_OFFICE_H_B_frame_0740_jpg.rf.7597a63ffd44695387eff5cc5d636a0c.jpg,720,1280,2,698,448,1049,717 -PUZZLE_OFFICE_H_B_frame_0740_jpg.rf.7597a63ffd44695387eff5cc5d636a0c.jpg,720,1280,1,18,624,314,719 -PUZZLE_COURTYARD_S_B_frame_0165_jpg.rf.759dfb04559f21c24546099500a1862a.jpg,720,1280,1,216,576,489,718 -PUZZLE_COURTYARD_S_B_frame_0165_jpg.rf.759dfb04559f21c24546099500a1862a.jpg,720,1280,2,514,567,820,718 -CHESS_COURTYARD_S_H_frame_1458_jpg.rf.75b380b84c3b4d20a9e8553d141ee3a6.jpg,720,1280,2,485,113,1252,712 -JENGA_LIVINGROOM_T_S_frame_1326_jpg.rf.75d57db0b5c6f790a29f1804c05e2ded.jpg,720,1280,2,661,263,1067,567 -CHESS_COURTYARD_T_B_frame_1942_jpg.rf.75ed988e8ebcd5418187f1405d7aaa8e.jpg,720,1280,1,35,684,262,717 -CHESS_COURTYARD_T_B_frame_1942_jpg.rf.75ed988e8ebcd5418187f1405d7aaa8e.jpg,720,1280,2,259,681,531,718 -JENGA_OFFICE_B_S_frame_0182_jpg.rf.75f7ac76e2274971caf550c251fd99e0.jpg,720,1280,2,567,285,868,516 -CHESS_LIVINGROOM_H_T_frame_2475_jpg.rf.7627c38023bce7d1237ef4fc4fe3e89a.jpg,720,1280,1,3,599,173,714 -CHESS_LIVINGROOM_H_T_frame_2475_jpg.rf.7627c38023bce7d1237ef4fc4fe3e89a.jpg,720,1280,2,1120,500,1279,718 -CHESS_OFFICE_T_H_frame_2185_jpg.rf.7657a1ecd1c7e4af8257798901edfd81.jpg,720,1280,1,121,346,394,545 -CHESS_OFFICE_T_H_frame_2185_jpg.rf.7657a1ecd1c7e4af8257798901edfd81.jpg,720,1280,2,555,692,621,718 -PUZZLE_COURTYARD_H_T_frame_1223_jpg.rf.766804c8dedc08b71db5df551be89b55.jpg,720,1280,1,216,659,428,717 -PUZZLE_COURTYARD_H_T_frame_1223_jpg.rf.766804c8dedc08b71db5df551be89b55.jpg,720,1280,2,794,578,1009,718 -JENGA_OFFICE_H_T_frame_0136_jpg.rf.767382276cbb43e76b37c957604daed9.jpg,720,1280,2,688,674,842,716 -CARDS_COURTYARD_T_B_frame_1905_jpg.rf.76abd00d11e3853a738f09620fcb9f4c.jpg,720,1280,1,141,662,240,718 -CARDS_COURTYARD_T_B_frame_1905_jpg.rf.76abd00d11e3853a738f09620fcb9f4c.jpg,720,1280,2,624,495,847,700 -CARDS_OFFICE_H_T_frame_2117_jpg.rf.7688469e8b2ce4fabff699d437d06d8f.jpg,720,1280,1,302,638,380,716 -CARDS_OFFICE_H_T_frame_2117_jpg.rf.7688469e8b2ce4fabff699d437d06d8f.jpg,720,1280,2,630,474,1116,716 -JENGA_LIVINGROOM_S_T_frame_1413_jpg.rf.76c5a37aca48a90f1de1908440333000.jpg,720,1280,1,1,417,285,718 -JENGA_LIVINGROOM_S_T_frame_1413_jpg.rf.76c5a37aca48a90f1de1908440333000.jpg,720,1280,2,518,527,944,718 -PUZZLE_COURTYARD_B_S_frame_2609_jpg.rf.76edcbcb501086e6b9c1ba20af087660.jpg,720,1280,1,303,698,336,719 -PUZZLE_COURTYARD_B_S_frame_2609_jpg.rf.76edcbcb501086e6b9c1ba20af087660.jpg,720,1280,2,879,697,1002,719 -CHESS_COURTYARD_H_S_frame_1187_jpg.rf.76f45073320220156e77e86d0e37a9ae.jpg,720,1280,2,711,581,955,716 -JENGA_COURTYARD_H_B_frame_1097_jpg.rf.76f75ac9825d44bff0a609642cf69922.jpg,720,1280,2,499,273,800,714 -PUZZLE_LIVINGROOM_H_S_frame_1601_jpg.rf.771da43fcf7329a887ab25c2deb9e765.jpg,720,1280,2,594,622,945,715 -CHESS_LIVINGROOM_H_T_frame_1350_jpg.rf.772ba8eacbbed4d5b4ae7928e3c16b8a.jpg,720,1280,1,1,667,194,718 -CHESS_LIVINGROOM_H_T_frame_1350_jpg.rf.772ba8eacbbed4d5b4ae7928e3c16b8a.jpg,720,1280,2,469,373,864,652 -CARDS_OFFICE_T_H_frame_1728_jpg.rf.774eeea2c80ffcf15450413f58f18a3c.jpg,720,1280,1,253,683,421,719 -CARDS_OFFICE_T_H_frame_1728_jpg.rf.774eeea2c80ffcf15450413f58f18a3c.jpg,720,1280,2,594,624,734,719 -JENGA_OFFICE_H_T_frame_2566_jpg.rf.77673d52bb863294f8a170a217330e67.jpg,720,1280,2,686,174,871,346 -CARDS_OFFICE_S_B_frame_2112_jpg.rf.7771cf0bff4a2af14dce97c0e9fed409.jpg,720,1280,1,212,635,397,718 -CARDS_LIVINGROOM_S_H_frame_0655_jpg.rf.777589c72ecbb8cde6b64a2ae08fe2bc.jpg,720,1280,1,217,669,480,716 -CARDS_LIVINGROOM_S_H_frame_0655_jpg.rf.777589c72ecbb8cde6b64a2ae08fe2bc.jpg,720,1280,2,482,680,664,718 -PUZZLE_COURTYARD_S_B_frame_2025_jpg.rf.779055ecca60224fdc1f351d558855f3.jpg,720,1280,1,272,390,594,605 -PUZZLE_COURTYARD_S_B_frame_2025_jpg.rf.779055ecca60224fdc1f351d558855f3.jpg,720,1280,2,759,499,1013,718 -JENGA_LIVINGROOM_S_T_frame_0438_jpg.rf.77a33ac6446bf8c7b95b4cfe823b1131.jpg,720,1280,2,431,2,847,318 -JENGA_LIVINGROOM_S_T_frame_0438_jpg.rf.77a33ac6446bf8c7b95b4cfe823b1131.jpg,720,1280,1,3,345,389,718 -CHESS_OFFICE_H_T_frame_0613_jpg.rf.77d22c8edd27389d60dac171bcb65a1a.jpg,720,1280,2,459,489,727,716 -CARDS_COURTYARD_H_S_frame_0861_jpg.rf.77d56cd700808a3c06854ed57446321b.jpg,720,1280,2,659,566,863,719 -CARDS_COURTYARD_H_S_frame_0861_jpg.rf.77d56cd700808a3c06854ed57446321b.jpg,720,1280,1,340,640,477,719 -CARDS_LIVINGROOM_T_B_frame_0797_jpg.rf.77d8ab22efd8eb5b53b65cf50eb76d29.jpg,720,1280,1,5,544,457,719 -CARDS_LIVINGROOM_T_B_frame_0797_jpg.rf.77d8ab22efd8eb5b53b65cf50eb76d29.jpg,720,1280,2,648,508,1056,719 -PUZZLE_COURTYARD_B_S_frame_0964_jpg.rf.77ee4a8f47fdee5b77d6e9db045625dd.jpg,720,1280,2,1039,623,1279,719 -JENGA_COURTYARD_B_H_frame_0223_jpg.rf.784ae2efe3e058ad022c07152705394e.jpg,720,1280,2,756,289,1047,532 -CHESS_LIVINGROOM_S_B_frame_1726_jpg.rf.7852722f329e397490eccfb4a5604523.jpg,720,1280,1,0,578,134,679 -PUZZLE_LIVINGROOM_T_B_frame_2324_jpg.rf.785efb2594c99cb691f9997bbe11fd1b.jpg,720,1280,1,5,629,168,718 -PUZZLE_LIVINGROOM_T_B_frame_2324_jpg.rf.785efb2594c99cb691f9997bbe11fd1b.jpg,720,1280,2,525,625,1037,718 -JENGA_COURTYARD_T_S_frame_0422_jpg.rf.78601b21077b5d3c5e84a692bde20a87.jpg,720,1280,1,7,534,317,718 -JENGA_COURTYARD_T_S_frame_0422_jpg.rf.78601b21077b5d3c5e84a692bde20a87.jpg,720,1280,2,482,465,829,718 -CHESS_LIVINGROOM_T_H_frame_0245_jpg.rf.78aebc8667b3f488de385ff9c2ef714b.jpg,720,1280,1,0,307,260,637 -CHESS_LIVINGROOM_T_H_frame_0245_jpg.rf.78aebc8667b3f488de385ff9c2ef714b.jpg,720,1280,2,573,612,929,718 -PUZZLE_LIVINGROOM_H_S_frame_2576_jpg.rf.78b3a206169031e2de42aa2888f286f9.jpg,720,1280,1,71,433,379,626 -PUZZLE_LIVINGROOM_H_S_frame_2576_jpg.rf.78b3a206169031e2de42aa2888f286f9.jpg,720,1280,2,659,478,963,711 -CHESS_LIVINGROOM_S_B_frame_2461_jpg.rf.78c6672dab75fe6f0396e18bf48cc7b2.jpg,720,1280,1,2,344,110,553 -CHESS_LIVINGROOM_S_B_frame_2461_jpg.rf.78c6672dab75fe6f0396e18bf48cc7b2.jpg,720,1280,2,827,489,1108,717 -CARDS_LIVINGROOM_S_H_frame_2118_jpg.rf.7903728042228fb146f8b894f4266ba6.jpg,720,1280,1,308,691,387,718 -CARDS_LIVINGROOM_S_H_frame_2118_jpg.rf.7903728042228fb146f8b894f4266ba6.jpg,720,1280,2,529,536,872,718 -CHESS_OFFICE_T_H_frame_1632_jpg.rf.7910be7f5dd45648971400c01d4abb0b.jpg,720,1280,1,28,303,398,541 -CHESS_OFFICE_T_H_frame_1632_jpg.rf.7910be7f5dd45648971400c01d4abb0b.jpg,720,1280,2,539,646,774,717 -JENGA_OFFICE_H_T_frame_1822_jpg.rf.7924c9530c21415c02ad088ea47fb637.jpg,720,1280,1,215,445,406,705 -JENGA_OFFICE_H_T_frame_1822_jpg.rf.7924c9530c21415c02ad088ea47fb637.jpg,720,1280,2,449,301,757,651 -JENGA_LIVINGROOM_B_H_frame_0957_jpg.rf.7957f58e5cf01bf0b880380b47cba995.jpg,720,1280,1,99,372,490,716 -JENGA_LIVINGROOM_B_H_frame_0957_jpg.rf.7957f58e5cf01bf0b880380b47cba995.jpg,720,1280,2,677,362,1021,716 -JENGA_COURTYARD_T_S_frame_1598_jpg.rf.796f4c20bc099918b5fb418556385a10.jpg,720,1280,1,126,457,344,716 -JENGA_COURTYARD_T_S_frame_1598_jpg.rf.796f4c20bc099918b5fb418556385a10.jpg,720,1280,2,496,557,749,717 -JENGA_OFFICE_T_H_frame_0197_jpg.rf.797fddbf451839576d843fb166a9aee4.jpg,720,1280,1,119,463,369,711 -JENGA_OFFICE_T_H_frame_0197_jpg.rf.797fddbf451839576d843fb166a9aee4.jpg,720,1280,2,581,496,858,715 -CHESS_COURTYARD_B_T_frame_0099_jpg.rf.7980485c829a282cc2ba4df115a1c040.jpg,720,1280,2,786,578,1067,718 -CHESS_LIVINGROOM_H_T_frame_2340_jpg.rf.79961dcff0210f3fbfabb09b245cca92.jpg,720,1280,1,1,580,253,716 -CHESS_LIVINGROOM_H_T_frame_2340_jpg.rf.79961dcff0210f3fbfabb09b245cca92.jpg,720,1280,2,467,332,965,629 -CHESS_COURTYARD_H_S_frame_0229_jpg.rf.7a11e8ec951b90d490a69729c282311d.jpg,720,1280,2,791,464,1242,706 -CHESS_COURTYARD_S_H_frame_2263_jpg.rf.7a36bfd2ab1ed6161d073f5f8a1638c6.jpg,720,1280,1,1,413,383,716 -CHESS_COURTYARD_S_H_frame_2263_jpg.rf.7a36bfd2ab1ed6161d073f5f8a1638c6.jpg,720,1280,2,563,432,898,718 -CHESS_COURTYARD_T_B_frame_0064_jpg.rf.7a43882ceceac396a0ae74089c1cd526.jpg,720,1280,2,610,556,874,718 -CHESS_LIVINGROOM_S_B_frame_1090_jpg.rf.7a60ecefe64fab454044564395443ca6.jpg,720,1280,2,594,349,1158,718 -PUZZLE_COURTYARD_B_S_frame_0294_jpg.rf.7a6111914b06e306f200318ad160202e.jpg,720,1280,1,230,702,387,719 -PUZZLE_COURTYARD_B_S_frame_0294_jpg.rf.7a6111914b06e306f200318ad160202e.jpg,720,1280,2,536,654,767,719 -CARDS_OFFICE_H_T_frame_0556_jpg.rf.7a64978051261d21c77febf82be795e5.jpg,720,1280,1,220,622,456,714 -CARDS_OFFICE_H_T_frame_0556_jpg.rf.7a64978051261d21c77febf82be795e5.jpg,720,1280,2,552,534,853,717 -PUZZLE_COURTYARD_H_T_frame_1832_jpg.rf.7a7a17f3b149bfb54fd58da758186541.jpg,720,1280,1,236,367,507,665 -PUZZLE_COURTYARD_H_T_frame_1832_jpg.rf.7a7a17f3b149bfb54fd58da758186541.jpg,720,1280,2,620,361,898,669 -JENGA_OFFICE_B_S_frame_0966_jpg.rf.7a9060696e0cf33b477bfc0a66fe0c0f.jpg,720,1280,2,576,194,824,411 -JENGA_OFFICE_B_S_frame_0966_jpg.rf.7a9060696e0cf33b477bfc0a66fe0c0f.jpg,720,1280,1,2,557,359,719 -CHESS_OFFICE_H_T_frame_2549_jpg.rf.7a9916be43437fd2c4a711b869eaee88.jpg,720,1280,2,468,350,796,649 -PUZZLE_OFFICE_S_T_frame_1973_jpg.rf.7abab5d913a02d72ce7d5358cb9d38b8.jpg,720,1280,1,49,460,422,710 -PUZZLE_OFFICE_S_T_frame_1973_jpg.rf.7abab5d913a02d72ce7d5358cb9d38b8.jpg,720,1280,2,654,578,975,716 -CARDS_LIVINGROOM_H_S_frame_1351_jpg.rf.7ac2a6e3dfff0a6ffc08c11e215be8ad.jpg,720,1280,1,296,629,550,718 -CARDS_LIVINGROOM_H_S_frame_1351_jpg.rf.7ac2a6e3dfff0a6ffc08c11e215be8ad.jpg,720,1280,2,669,531,998,719 -CHESS_COURTYARD_T_B_frame_2494_jpg.rf.7ac8cda3ad35b4a6109f8cf61b8ca47c.jpg,720,1280,1,1,631,234,717 -CHESS_COURTYARD_T_B_frame_2494_jpg.rf.7ac8cda3ad35b4a6109f8cf61b8ca47c.jpg,720,1280,2,254,655,532,718 -PUZZLE_LIVINGROOM_S_H_frame_1947_jpg.rf.7ac95d232783feb33142409b6a2640ef.jpg,720,1280,1,3,563,285,718 -PUZZLE_LIVINGROOM_S_H_frame_1947_jpg.rf.7ac95d232783feb33142409b6a2640ef.jpg,720,1280,2,1059,642,1279,718 -PUZZLE_COURTYARD_B_S_frame_0669_jpg.rf.7acea61eb78044e7940dedc05f035cfa.jpg,720,1280,2,568,592,886,719 -PUZZLE_COURTYARD_T_H_frame_2307_jpg.rf.7af0646dba73029bfa85680e6541e47a.jpg,720,1280,1,5,646,226,718 -PUZZLE_COURTYARD_T_H_frame_2307_jpg.rf.7af0646dba73029bfa85680e6541e47a.jpg,720,1280,2,582,375,993,718 -CHESS_COURTYARD_H_S_frame_0924_jpg.rf.7af8a974ef5601c11077b49eb9dbdb6d.jpg,720,1280,2,290,413,522,636 -CARDS_OFFICE_H_T_frame_0572_jpg.rf.7b04748b2be82bb4b55e8114ee4bd1cc.jpg,720,1280,1,135,532,442,718 -CARDS_OFFICE_H_T_frame_0572_jpg.rf.7b04748b2be82bb4b55e8114ee4bd1cc.jpg,720,1280,2,548,468,914,716 -CHESS_OFFICE_T_H_frame_0239_jpg.rf.7b1025d3d7fe4e17d0669453760f4ba4.jpg,720,1280,2,668,291,939,499 -CARDS_OFFICE_H_T_frame_0232_jpg.rf.7b20b09421787cf494e8e35b6b095942.jpg,720,1280,1,68,469,441,718 -CARDS_OFFICE_H_T_frame_0232_jpg.rf.7b20b09421787cf494e8e35b6b095942.jpg,720,1280,2,535,429,850,712 -JENGA_OFFICE_T_H_frame_2348_jpg.rf.7b574760cff96cca3f35246244b3cb32.jpg,720,1280,2,604,546,824,719 -JENGA_OFFICE_T_H_frame_2348_jpg.rf.7b574760cff96cca3f35246244b3cb32.jpg,720,1280,1,283,599,520,719 -JENGA_LIVINGROOM_H_B_frame_0355_jpg.rf.7bca2fcf0cadfa81e3b2411f6028e183.jpg,720,1280,2,523,144,865,442 -CHESS_OFFICE_B_S_frame_0096_jpg.rf.7c2fd12f35ebf5a901c75da74ab314ff.jpg,720,1280,2,679,487,1026,714 -JENGA_OFFICE_H_T_frame_1550_jpg.rf.7c3eb1df5d81ea58a0e40c385edb5f93.jpg,720,1280,1,352,357,487,711 -JENGA_OFFICE_H_T_frame_1550_jpg.rf.7c3eb1df5d81ea58a0e40c385edb5f93.jpg,720,1280,2,628,365,763,706 -CARDS_OFFICE_H_T_frame_0718_jpg.rf.7c7bbc966d76380abe2785a0062eb27f.jpg,720,1280,1,198,604,327,716 -CARDS_OFFICE_H_T_frame_0718_jpg.rf.7c7bbc966d76380abe2785a0062eb27f.jpg,720,1280,2,679,608,855,718 -JENGA_OFFICE_B_S_frame_1369_jpg.rf.7cb962f64c5436742da5732c9b3207b1.jpg,720,1280,1,118,186,298,563 -JENGA_OFFICE_B_S_frame_1369_jpg.rf.7cb962f64c5436742da5732c9b3207b1.jpg,720,1280,2,445,412,748,717 -PUZZLE_LIVINGROOM_S_H_frame_0551_jpg.rf.7cba5939e666b55c306c4735c0a0c61e.jpg,720,1280,1,1,625,65,705 -JENGA_LIVINGROOM_S_T_frame_2535_jpg.rf.7cc81790d2f0db92e6ec11c8729457da.jpg,720,1280,1,1,284,425,663 -JENGA_LIVINGROOM_S_T_frame_2535_jpg.rf.7cc81790d2f0db92e6ec11c8729457da.jpg,720,1280,2,544,157,991,483 -CARDS_OFFICE_T_H_frame_2537_jpg.rf.7ce5b8268d50b50733fcf68e963ed3d5.jpg,720,1280,1,226,643,355,715 -CARDS_OFFICE_T_H_frame_2537_jpg.rf.7ce5b8268d50b50733fcf68e963ed3d5.jpg,720,1280,2,556,211,781,461 -PUZZLE_LIVINGROOM_H_S_frame_2636_jpg.rf.7cf7c042d9edb467fd3b3dae3a82c08c.jpg,720,1280,1,248,575,598,716 -PUZZLE_LIVINGROOM_H_S_frame_2636_jpg.rf.7cf7c042d9edb467fd3b3dae3a82c08c.jpg,720,1280,2,748,404,1025,712 -PUZZLE_LIVINGROOM_T_B_frame_1635_jpg.rf.7cf9202d65eba7c7a67c0e658a914f48.jpg,720,1280,1,10,425,155,639 -PUZZLE_LIVINGROOM_T_B_frame_1635_jpg.rf.7cf9202d65eba7c7a67c0e658a914f48.jpg,720,1280,2,385,398,927,716 -JENGA_COURTYARD_T_S_frame_0693_jpg.rf.7d214efc505018aa8e27c4940fb7cd7c.jpg,720,1280,1,18,416,393,709 -JENGA_COURTYARD_T_S_frame_0693_jpg.rf.7d214efc505018aa8e27c4940fb7cd7c.jpg,720,1280,2,477,369,848,718 -CARDS_OFFICE_B_S_frame_1729_jpg.rf.7d41b9c53285a2538bb7ca60374fc3e7.jpg,720,1280,2,539,704,618,716 -CARDS_COURTYARD_S_H_frame_1991_jpg.rf.7d6d63fcecac5c17c94fd20e51646dfc.jpg,720,1280,1,402,676,561,718 -PUZZLE_LIVINGROOM_B_T_frame_2238_jpg.rf.7d77a9eab03084aa508941caca60301e.jpg,720,1280,1,2,597,395,719 -PUZZLE_LIVINGROOM_B_T_frame_2238_jpg.rf.7d77a9eab03084aa508941caca60301e.jpg,720,1280,2,464,446,877,705 -CHESS_OFFICE_B_S_frame_2037_jpg.rf.7dc5dc4950327637e52df7cc0d3ab1a8.jpg,720,1280,2,737,431,1093,664 -CARDS_LIVINGROOM_B_T_frame_0096_jpg.rf.7dcce913af4ed1f3d11dc0d485582926.jpg,720,1280,2,705,697,815,718 -PUZZLE_COURTYARD_T_H_frame_1916_jpg.rf.7dde81fde634558e739ab3b1419d8f76.jpg,720,1280,2,592,301,1141,691 -PUZZLE_COURTYARD_T_H_frame_1916_jpg.rf.7dde81fde634558e739ab3b1419d8f76.jpg,720,1280,1,1,513,224,718 -PUZZLE_LIVINGROOM_B_T_frame_0655_jpg.rf.7ddebbb61c915d39434b8d3394ca5416.jpg,720,1280,2,635,451,995,690 -JENGA_LIVINGROOM_T_S_frame_1286_jpg.rf.a78f63b039eb4d177e82ffa43ea22279.jpg,720,1280,1,81,520,421,718 -JENGA_LIVINGROOM_T_S_frame_1286_jpg.rf.a78f63b039eb4d177e82ffa43ea22279.jpg,720,1280,2,588,479,944,715 -PUZZLE_COURTYARD_T_H_frame_1153_jpg.rf.a792627f365a6b385521244b91eb32af.jpg,720,1280,1,118,667,383,718 -PUZZLE_COURTYARD_T_H_frame_1153_jpg.rf.a792627f365a6b385521244b91eb32af.jpg,720,1280,2,611,470,1097,718 -CHESS_LIVINGROOM_H_T_frame_0223_jpg.rf.a7ae9384e3628265ab1676ac0def5daf.jpg,720,1280,1,7,455,399,718 -CHESS_LIVINGROOM_H_T_frame_0223_jpg.rf.a7ae9384e3628265ab1676ac0def5daf.jpg,720,1280,2,1069,568,1279,718 -PUZZLE_LIVINGROOM_H_S_frame_1294_jpg.rf.a7af899b589a47c8af0165947d37845e.jpg,720,1280,1,252,567,481,714 -PUZZLE_LIVINGROOM_H_S_frame_1294_jpg.rf.a7af899b589a47c8af0165947d37845e.jpg,720,1280,2,509,586,710,719 -PUZZLE_OFFICE_H_B_frame_0521_jpg.rf.a7ea40301bebfe7f2c34893a857384f2.jpg,720,1280,1,224,655,417,715 -PUZZLE_OFFICE_H_B_frame_0521_jpg.rf.a7ea40301bebfe7f2c34893a857384f2.jpg,720,1280,2,581,565,816,719 -JENGA_COURTYARD_H_B_frame_0885_jpg.rf.a812069018707363e6860b7f28e340ab.jpg,720,1280,2,647,644,868,718 -CARDS_LIVINGROOM_T_B_frame_1386_jpg.rf.a82bd518ee4e654ab369ce01467cfa02.jpg,720,1280,1,1,562,348,719 -CARDS_LIVINGROOM_T_B_frame_1386_jpg.rf.a82bd518ee4e654ab369ce01467cfa02.jpg,720,1280,2,510,503,899,719 -CHESS_COURTYARD_H_S_frame_2699_jpg.rf.a86007c3434e64697eea3d37f3c31acc.jpg,720,1280,2,534,344,849,560 -PUZZLE_LIVINGROOM_T_B_frame_0331_jpg.rf.a7ce45cf87f082dce9f4bfcb32907810.jpg,720,1280,1,3,548,332,718 -PUZZLE_LIVINGROOM_T_B_frame_0331_jpg.rf.a7ce45cf87f082dce9f4bfcb32907810.jpg,720,1280,2,552,594,960,718 -CARDS_COURTYARD_S_H_frame_1379_jpg.rf.a7d748c7aab395d9e8a6a700e8a9ab65.jpg,720,1280,1,330,665,433,718 -CHESS_OFFICE_H_T_frame_1041_jpg.rf.a8f8a8ecb97696ec40f3b15382e8322d.jpg,720,1280,2,1028,626,1275,719 -CARDS_COURTYARD_T_B_frame_1048_jpg.rf.a900bef2d19cb013b977855b373b2d9b.jpg,720,1280,1,138,498,336,717 -CARDS_COURTYARD_T_B_frame_1048_jpg.rf.a900bef2d19cb013b977855b373b2d9b.jpg,720,1280,2,432,510,778,717 -JENGA_LIVINGROOM_B_H_frame_0703_jpg.rf.a7f19f37a26f41425e2a0d9a85dae70b.jpg,720,1280,1,20,569,368,715 -JENGA_LIVINGROOM_B_H_frame_0703_jpg.rf.a7f19f37a26f41425e2a0d9a85dae70b.jpg,720,1280,2,878,403,1250,719 -CARDS_OFFICE_T_H_frame_2662_jpg.rf.a85490047717f784a69ab897f32694b4.jpg,720,1280,1,192,647,310,717 -CARDS_OFFICE_T_H_frame_2662_jpg.rf.a85490047717f784a69ab897f32694b4.jpg,720,1280,2,580,605,726,719 -CARDS_OFFICE_T_H_frame_0115_jpg.rf.a81aa91e1e12e7cb3e8757b6720780f2.jpg,720,1280,1,251,655,404,718 -CARDS_OFFICE_T_H_frame_0115_jpg.rf.a81aa91e1e12e7cb3e8757b6720780f2.jpg,720,1280,2,628,561,798,718 -PUZZLE_OFFICE_S_T_frame_0767_jpg.rf.a86a82b04129fc2dce7025564d872788.jpg,720,1280,1,551,658,734,716 -PUZZLE_OFFICE_T_S_frame_2069_jpg.rf.a89395287b7494f3a60da23f5eec2a8a.jpg,720,1280,1,14,419,283,717 -PUZZLE_OFFICE_T_S_frame_2069_jpg.rf.a89395287b7494f3a60da23f5eec2a8a.jpg,720,1280,2,656,417,956,704 -JENGA_OFFICE_S_B_frame_0689_jpg.rf.a89b7bd36eead8019a4e78894a548a44.jpg,720,1280,2,479,277,809,567 -JENGA_OFFICE_S_B_frame_0689_jpg.rf.a89b7bd36eead8019a4e78894a548a44.jpg,720,1280,1,0,594,240,719 -CARDS_OFFICE_T_H_frame_1836_jpg.rf.a89e44d0cd8f80fc76e3ea4c20464d1e.jpg,720,1280,1,349,658,433,717 -CARDS_OFFICE_T_H_frame_1836_jpg.rf.a89e44d0cd8f80fc76e3ea4c20464d1e.jpg,720,1280,2,597,505,851,719 -CARDS_OFFICE_B_S_frame_0649_jpg.rf.a8a07aa832eb9d63e3c98197087fe367.jpg,720,1280,1,345,671,412,717 -CARDS_OFFICE_B_S_frame_0649_jpg.rf.a8a07aa832eb9d63e3c98197087fe367.jpg,720,1280,2,624,663,753,718 -JENGA_COURTYARD_T_S_frame_1010_jpg.rf.a8f1f0d8b8a262b17024e39d40ced213.jpg,720,1280,2,588,453,931,718 -CARDS_OFFICE_B_S_frame_1677_jpg.rf.a906ccff5373b2d82329cbebcf93a680.jpg,720,1280,2,819,535,1015,717 -JENGA_LIVINGROOM_S_T_frame_0683_jpg.rf.a92e42094d874b4c24837bd59154f7e8.jpg,720,1280,2,584,303,940,570 -JENGA_LIVINGROOM_S_T_frame_0683_jpg.rf.a92e42094d874b4c24837bd59154f7e8.jpg,720,1280,1,3,301,442,655 -JENGA_LIVINGROOM_B_H_frame_1578_jpg.rf.a95089d794d3ab99bc740ee414c701c9.jpg,720,1280,1,222,438,548,717 -JENGA_LIVINGROOM_B_H_frame_1578_jpg.rf.a95089d794d3ab99bc740ee414c701c9.jpg,720,1280,2,997,539,1277,717 -CARDS_COURTYARD_B_T_frame_2333_jpg.rf.a9459ee93d38a48d8ac8a79062f59901.jpg,720,1280,2,812,615,1004,717 -CHESS_LIVINGROOM_S_B_frame_1918_jpg.rf.a98fe07c093fbf6a3e373a16945d8aaf.jpg,720,1280,2,844,586,1124,718 -JENGA_OFFICE_B_S_frame_0354_jpg.rf.a992d976c1e9fa09f9fdd32aafadf82d.jpg,720,1280,1,304,606,589,717 -JENGA_OFFICE_B_S_frame_0354_jpg.rf.a992d976c1e9fa09f9fdd32aafadf82d.jpg,720,1280,2,670,662,844,717 -CHESS_OFFICE_B_S_frame_1267_jpg.rf.a99c4b691644bbf1d0aa1e3c477e5a83.jpg,720,1280,2,740,396,1146,648 -PUZZLE_OFFICE_B_H_frame_2557_jpg.rf.a9ababd73afe33ddd842b84ac907788a.jpg,720,1280,1,110,621,413,719 -PUZZLE_OFFICE_B_H_frame_2557_jpg.rf.a9ababd73afe33ddd842b84ac907788a.jpg,720,1280,2,841,391,1146,709 -CHESS_COURTYARD_B_T_frame_2395_jpg.rf.a995d4d5675ff905b42409ed44e5a37c.jpg,720,1280,2,936,688,1096,718 -JENGA_COURTYARD_H_B_frame_1249_jpg.rf.a9b95f6a37bd5f6326d442f25edcfbbe.jpg,720,1280,1,171,680,370,718 -JENGA_COURTYARD_H_B_frame_1249_jpg.rf.a9b95f6a37bd5f6326d442f25edcfbbe.jpg,720,1280,2,577,339,864,718 -CHESS_COURTYARD_H_S_frame_1541_jpg.rf.a9d58a78d97e77c27bcf7b6f81337a5b.jpg,720,1280,2,527,361,709,498 -CARDS_COURTYARD_S_H_frame_0805_jpg.rf.a9f226673f8040b092f0346920d4e57c.jpg,720,1280,1,268,665,495,718 -CARDS_COURTYARD_S_H_frame_0805_jpg.rf.a9f226673f8040b092f0346920d4e57c.jpg,720,1280,2,567,693,620,718 -JENGA_LIVINGROOM_H_B_frame_2499_jpg.rf.aa2b25e372ea34439c72bb24ae7b2914.jpg,720,1280,2,1018,696,1154,717 -JENGA_OFFICE_T_H_frame_0007_jpg.rf.aa2e778f6cb4832af03986607339e1fe.jpg,720,1280,1,8,505,311,714 -JENGA_OFFICE_T_H_frame_0007_jpg.rf.aa2e778f6cb4832af03986607339e1fe.jpg,720,1280,2,504,349,873,715 -CARDS_COURTYARD_T_B_frame_1010_jpg.rf.aa37e577dfe625ce4c3bb554e3a830a7.jpg,720,1280,1,205,578,482,718 -CARDS_COURTYARD_T_B_frame_1010_jpg.rf.aa37e577dfe625ce4c3bb554e3a830a7.jpg,720,1280,2,638,291,872,564 -PUZZLE_OFFICE_B_H_frame_0752_jpg.rf.aa60710875fbed9a75d0fc86f7190b69.jpg,720,1280,2,932,668,1157,712 -CHESS_OFFICE_S_B_frame_2103_jpg.rf.aa5282e857970b40ee13fda72be06149.jpg,720,1280,2,552,419,1116,719 -PUZZLE_LIVINGROOM_H_S_frame_1072_jpg.rf.aa78d645e1b674066a64a251621a04bd.jpg,720,1280,1,81,534,431,713 -PUZZLE_LIVINGROOM_H_S_frame_1072_jpg.rf.aa78d645e1b674066a64a251621a04bd.jpg,720,1280,2,508,538,814,712 -CARDS_COURTYARD_S_H_frame_2636_jpg.rf.aa86d4d11e84705a46ecf987d944efde.jpg,720,1280,1,14,544,391,718 -CARDS_LIVINGROOM_S_H_frame_0096_jpg.rf.aa9d52c75ba7afe37a0a471b5ebc02a7.jpg,720,1280,1,359,599,512,716 -CARDS_LIVINGROOM_S_H_frame_0096_jpg.rf.aa9d52c75ba7afe37a0a471b5ebc02a7.jpg,720,1280,2,571,621,779,718 -CARDS_COURTYARD_S_H_frame_1452_jpg.rf.aaa22f2fb7eafddbb579bf98088fa546.jpg,720,1280,1,334,676,544,718 -CARDS_COURTYARD_S_H_frame_1452_jpg.rf.aaa22f2fb7eafddbb579bf98088fa546.jpg,720,1280,2,575,693,747,718 -CARDS_COURTYARD_T_B_frame_1365_jpg.rf.aab0f621e417df80ed1e5de1878f6cdb.jpg,720,1280,1,228,614,478,718 -CARDS_COURTYARD_T_B_frame_1365_jpg.rf.aab0f621e417df80ed1e5de1878f6cdb.jpg,720,1280,2,493,609,712,714 -CARDS_OFFICE_T_H_frame_1982_jpg.rf.aaeff4fbeccb19034fac355b3e8487dc.jpg,720,1280,1,124,592,399,719 -CARDS_OFFICE_T_H_frame_1982_jpg.rf.aaeff4fbeccb19034fac355b3e8487dc.jpg,720,1280,2,594,592,779,719 -JENGA_COURTYARD_T_S_frame_1270_jpg.rf.aaf004328348fa2f1329930a8ca8ed1c.jpg,720,1280,1,97,334,466,717 -JENGA_COURTYARD_T_S_frame_1270_jpg.rf.aaf004328348fa2f1329930a8ca8ed1c.jpg,720,1280,2,602,325,1009,718 -PUZZLE_LIVINGROOM_S_H_frame_0882_jpg.rf.ab05065fe83eb68a4d2ca40ef6860a13.jpg,720,1280,2,607,659,889,716 -CHESS_COURTYARD_B_T_frame_0313_jpg.rf.ab2d1f704a6b84b4f166830d09856236.jpg,720,1280,2,787,601,1047,716 -CARDS_LIVINGROOM_T_B_frame_2323_jpg.rf.ab3f55fb2818046ea85834b0fdb48844.jpg,720,1280,2,515,520,845,717 -CARDS_COURTYARD_T_B_frame_0360_jpg.rf.ab505f6a4accffc24bfb8ae31f9668c0.jpg,720,1280,1,192,572,424,717 -CARDS_COURTYARD_T_B_frame_0360_jpg.rf.ab505f6a4accffc24bfb8ae31f9668c0.jpg,720,1280,2,734,305,1010,588 -CHESS_LIVINGROOM_S_B_frame_2451_jpg.rf.aba69ecf60d472337d83a53db817c608.jpg,720,1280,1,1,376,114,586 -CHESS_LIVINGROOM_S_B_frame_2451_jpg.rf.aba69ecf60d472337d83a53db817c608.jpg,720,1280,2,821,524,1103,718 -PUZZLE_LIVINGROOM_B_T_frame_0344_jpg.rf.ab52f19829341931b9921e0ab7e4c878.jpg,720,1280,1,6,505,326,718 -PUZZLE_LIVINGROOM_B_T_frame_0344_jpg.rf.ab52f19829341931b9921e0ab7e4c878.jpg,720,1280,2,657,450,1134,717 -CHESS_OFFICE_T_H_frame_2478_jpg.rf.abe45be077a2940c0334a641dbfa8350.jpg,720,1280,1,241,632,448,716 -CHESS_OFFICE_T_H_frame_2478_jpg.rf.abe45be077a2940c0334a641dbfa8350.jpg,720,1280,2,439,659,622,718 -CHESS_LIVINGROOM_S_B_frame_0635_jpg.rf.abe1c1a86860708e9325601da188a369.jpg,720,1280,1,1,526,258,716 -CHESS_LIVINGROOM_S_B_frame_0635_jpg.rf.abe1c1a86860708e9325601da188a369.jpg,720,1280,2,481,386,967,713 -CARDS_LIVINGROOM_B_T_frame_1745_jpg.rf.ac070b30ce9f8372cb2cc5a5a3a7dff5.jpg,720,1280,2,732,674,859,718 -JENGA_COURTYARD_H_B_frame_1326_jpg.rf.ac27d1df16d9daeb2b55a646b48211a4.jpg,720,1280,2,582,691,741,718 -CARDS_LIVINGROOM_S_H_frame_1572_jpg.rf.ac372cfc4ca64e8a85167c64831b0dea.jpg,720,1280,1,196,610,497,718 -CARDS_LIVINGROOM_S_H_frame_1572_jpg.rf.ac372cfc4ca64e8a85167c64831b0dea.jpg,720,1280,2,552,635,808,718 -JENGA_OFFICE_T_H_frame_0267_jpg.rf.ac47d0b3d39f17d6ead8554045000698.jpg,720,1280,1,47,537,301,719 -JENGA_OFFICE_T_H_frame_0267_jpg.rf.ac47d0b3d39f17d6ead8554045000698.jpg,720,1280,2,626,683,749,718 -PUZZLE_LIVINGROOM_H_S_frame_2390_jpg.rf.ac6bac274af80f68a4bccb14b56eb8b3.jpg,720,1280,1,130,456,415,682 -PUZZLE_LIVINGROOM_H_S_frame_2390_jpg.rf.ac6bac274af80f68a4bccb14b56eb8b3.jpg,720,1280,2,472,550,670,717 -JENGA_LIVINGROOM_T_S_frame_2590_jpg.rf.ac8dee6a4b1c951e9ccbea875ba988cb.jpg,720,1280,1,8,346,383,709 -PUZZLE_COURTYARD_H_T_frame_2189_jpg.rf.accacded8d648a5ef59339080dfc9ae2.jpg,720,1280,1,371,543,650,718 -PUZZLE_COURTYARD_H_T_frame_2189_jpg.rf.accacded8d648a5ef59339080dfc9ae2.jpg,720,1280,2,847,493,1040,718 -CARDS_LIVINGROOM_H_S_frame_1680_jpg.rf.acb3306969da364e0067b6b44bba1537.jpg,720,1280,1,80,680,145,713 -CARDS_LIVINGROOM_H_S_frame_1680_jpg.rf.acb3306969da364e0067b6b44bba1537.jpg,720,1280,2,797,485,1054,718 -CARDS_OFFICE_T_H_frame_1219_jpg.rf.ace0d5b6806ce999f5ce88a9057a656a.jpg,720,1280,2,537,560,767,719 -CARDS_OFFICE_T_H_frame_1219_jpg.rf.ace0d5b6806ce999f5ce88a9057a656a.jpg,720,1280,1,189,583,447,719 -PUZZLE_LIVINGROOM_T_B_frame_1552_jpg.rf.ace24f0d50fe04c58440df0a153687de.jpg,720,1280,1,6,373,317,718 -PUZZLE_LIVINGROOM_T_B_frame_1552_jpg.rf.ace24f0d50fe04c58440df0a153687de.jpg,720,1280,2,436,460,1099,718 -CARDS_LIVINGROOM_H_S_frame_0300_jpg.rf.acf0b318a6e778b12f725b76ebb6c832.jpg,720,1280,2,556,597,831,719 -CARDS_COURTYARD_S_H_frame_0559_jpg.rf.acf1e284bda54358f60bb4411826880c.jpg,720,1280,1,141,665,374,718 -JENGA_COURTYARD_T_S_frame_1634_jpg.rf.ad155b48e76ec2e7a672c7fcc7d799ec.jpg,720,1280,1,40,371,378,679 -PUZZLE_LIVINGROOM_S_H_frame_0968_jpg.rf.ad3b1fad6f545f2258cdb924850e2d4f.jpg,720,1280,1,1,411,247,663 -PUZZLE_LIVINGROOM_S_H_frame_0968_jpg.rf.ad3b1fad6f545f2258cdb924850e2d4f.jpg,720,1280,2,732,462,1196,718 -PUZZLE_COURTYARD_S_B_frame_1116_jpg.rf.ad3d8195771dde9aa462fad103448055.jpg,720,1280,1,188,415,511,672 -PUZZLE_COURTYARD_S_B_frame_1116_jpg.rf.ad3d8195771dde9aa462fad103448055.jpg,720,1280,2,546,433,791,659 -PUZZLE_LIVINGROOM_T_B_frame_0588_jpg.rf.ad58b8ab107f56d96569d7fed24a7995.jpg,720,1280,1,2,585,187,718 -PUZZLE_LIVINGROOM_T_B_frame_0588_jpg.rf.ad58b8ab107f56d96569d7fed24a7995.jpg,720,1280,2,601,551,1133,718 -PUZZLE_LIVINGROOM_B_T_frame_0141_jpg.rf.ad5e9e638a601378e9cc544f5918676e.jpg,720,1280,1,4,486,524,718 -PUZZLE_LIVINGROOM_B_T_frame_0141_jpg.rf.ad5e9e638a601378e9cc544f5918676e.jpg,720,1280,2,689,418,1171,713 -CHESS_LIVINGROOM_S_B_frame_0560_jpg.rf.ad5f6bb70874c848a66e2d99b6caef5c.jpg,720,1280,2,951,573,1279,716 -CHESS_OFFICE_T_H_frame_2140_jpg.rf.ad72444fcd1f35f57edc8ed1a69fa83a.jpg,720,1280,1,185,698,246,716 -CHESS_OFFICE_T_H_frame_2140_jpg.rf.ad72444fcd1f35f57edc8ed1a69fa83a.jpg,720,1280,2,651,351,1030,662 -CARDS_LIVINGROOM_H_S_frame_0860_jpg.rf.ad713a7da684e949c01ec5eb34304c6a.jpg,720,1280,1,208,645,297,719 -CARDS_LIVINGROOM_H_S_frame_0860_jpg.rf.ad713a7da684e949c01ec5eb34304c6a.jpg,720,1280,2,625,577,957,719 -CHESS_LIVINGROOM_T_H_frame_2455_jpg.rf.adba32640b769aa948eb7a99d57b2aac.jpg,720,1280,1,1,373,38,521 -CHESS_LIVINGROOM_T_H_frame_2455_jpg.rf.adba32640b769aa948eb7a99d57b2aac.jpg,720,1280,2,638,329,1149,711 -PUZZLE_COURTYARD_S_B_frame_0449_jpg.rf.adcca3ae8fafb11054bb441c6e093a5c.jpg,720,1280,1,71,695,233,718 -PUZZLE_LIVINGROOM_B_T_frame_0083_jpg.rf.adc21027faf6c15fc80c55786fce0663.jpg,720,1280,1,4,394,150,663 -PUZZLE_LIVINGROOM_B_T_frame_0083_jpg.rf.adc21027faf6c15fc80c55786fce0663.jpg,720,1280,2,677,490,1169,716 -PUZZLE_OFFICE_B_H_frame_1210_jpg.rf.add06e43e9aa1f05083b7d165a9ca468.jpg,720,1280,2,830,511,1217,714 -JENGA_COURTYARD_T_S_frame_0205_jpg.rf.adfe943db89673493eecd179cd325864.jpg,720,1280,1,23,555,302,718 -CARDS_COURTYARD_H_S_frame_2365_jpg.rf.ae18ddeb8fe16cd2f834099ffc2d7a5c.jpg,720,1280,1,162,531,467,719 -CARDS_COURTYARD_H_S_frame_2365_jpg.rf.ae18ddeb8fe16cd2f834099ffc2d7a5c.jpg,720,1280,2,650,228,980,541 -CHESS_LIVINGROOM_H_T_frame_1043_jpg.rf.ae1e6a96d1f12af681d0d5ecc0b4e429.jpg,720,1280,1,1,572,215,718 -JENGA_LIVINGROOM_H_B_frame_2219_jpg.rf.ae5fb0a2916b57b6cb3ffe3f78cade4a.jpg,720,1280,2,622,192,901,532 -JENGA_COURTYARD_T_S_frame_2655_jpg.rf.ae66bc581d70ef348c30b25c53a3ce69.jpg,720,1280,1,102,491,427,718 -JENGA_COURTYARD_T_S_frame_2655_jpg.rf.ae66bc581d70ef348c30b25c53a3ce69.jpg,720,1280,2,674,446,868,717 -CARDS_LIVINGROOM_S_H_frame_1813_jpg.rf.ae6565f38f628f0fa4f8630604b4bc92.jpg,720,1280,1,121,634,402,718 -CARDS_LIVINGROOM_S_H_frame_1813_jpg.rf.ae6565f38f628f0fa4f8630604b4bc92.jpg,720,1280,2,467,608,739,718 -CARDS_LIVINGROOM_T_B_frame_0893_jpg.rf.ae8d846465a241131913af004cd31d00.jpg,720,1280,2,626,685,761,719 -CARDS_OFFICE_B_S_frame_0698_jpg.rf.aec11fd68eb654c2e307a5c7f3657c11.jpg,720,1280,1,624,601,852,718 -CARDS_OFFICE_B_S_frame_0698_jpg.rf.aec11fd68eb654c2e307a5c7f3657c11.jpg,720,1280,2,349,610,534,716 -PUZZLE_COURTYARD_T_H_frame_0631_jpg.rf.aecfe411a9df4687b9a8d39cd60242c8.jpg,720,1280,1,1,521,205,718 -PUZZLE_COURTYARD_T_H_frame_0631_jpg.rf.aecfe411a9df4687b9a8d39cd60242c8.jpg,720,1280,2,603,279,838,485 -PUZZLE_COURTYARD_T_H_frame_0988_jpg.rf.aeec9ddfef50984d03326b8333feb40c.jpg,720,1280,1,1,373,285,648 -PUZZLE_COURTYARD_T_H_frame_0988_jpg.rf.aeec9ddfef50984d03326b8333feb40c.jpg,720,1280,2,482,197,955,519 -PUZZLE_OFFICE_T_S_frame_1985_jpg.rf.aef0f85f46d0f34be3f2177da2a4fce2.jpg,720,1280,1,94,530,451,714 -PUZZLE_OFFICE_T_S_frame_1985_jpg.rf.aef0f85f46d0f34be3f2177da2a4fce2.jpg,720,1280,2,553,440,903,714 -PUZZLE_OFFICE_S_T_frame_0349_jpg.rf.aef600125e4d61792e780b5e30d49e75.jpg,720,1280,1,9,428,166,627 -PUZZLE_OFFICE_S_T_frame_0349_jpg.rf.aef600125e4d61792e780b5e30d49e75.jpg,720,1280,2,625,581,866,718 -JENGA_OFFICE_H_T_frame_0218_jpg.rf.af174916b641653ffec53bbc7973684e.jpg,720,1280,2,677,686,813,716 -CARDS_COURTYARD_T_B_frame_0975_jpg.rf.af18635aa0eb55eeb8fb4e87bb885c26.jpg,720,1280,1,167,504,474,717 -CARDS_COURTYARD_T_B_frame_0975_jpg.rf.af18635aa0eb55eeb8fb4e87bb885c26.jpg,720,1280,2,522,398,881,717 -CARDS_OFFICE_H_T_frame_0497_jpg.rf.af2e895d9f1687acfcf07f7275fc56af.jpg,720,1280,2,817,335,1222,650 -PUZZLE_OFFICE_H_B_frame_2288_jpg.rf.af3cba1c34bd5779af90adca30eccf7f.jpg,720,1280,1,340,564,599,719 -PUZZLE_OFFICE_H_B_frame_2288_jpg.rf.af3cba1c34bd5779af90adca30eccf7f.jpg,720,1280,2,698,632,882,719 -CARDS_LIVINGROOM_H_S_frame_2507_jpg.rf.af5582678447cb888ece22e2fb7dcdd3.jpg,720,1280,2,681,434,1021,716 -CARDS_LIVINGROOM_H_S_frame_2507_jpg.rf.af5582678447cb888ece22e2fb7dcdd3.jpg,720,1280,1,18,546,319,719 -PUZZLE_COURTYARD_H_T_frame_1831_jpg.rf.af61c0f312840453f76f1ee9d042b2d1.jpg,720,1280,1,224,378,492,675 -PUZZLE_COURTYARD_H_T_frame_1831_jpg.rf.af61c0f312840453f76f1ee9d042b2d1.jpg,720,1280,2,610,349,872,658 -PUZZLE_LIVINGROOM_S_H_frame_0632_jpg.rf.af687dc4d33c38fbc89fb609aff73e8e.jpg,720,1280,1,221,485,656,716 -PUZZLE_LIVINGROOM_S_H_frame_0632_jpg.rf.af687dc4d33c38fbc89fb609aff73e8e.jpg,720,1280,2,660,483,1050,718 -PUZZLE_OFFICE_H_B_frame_1350_jpg.rf.af714e93df2fc997f15a0a4b394be469.jpg,720,1280,1,276,561,567,719 -PUZZLE_OFFICE_H_B_frame_1350_jpg.rf.af714e93df2fc997f15a0a4b394be469.jpg,720,1280,2,623,584,908,718 -PUZZLE_LIVINGROOM_H_S_frame_2419_jpg.rf.af93db520abfd7c03165ccfe34de68f4.jpg,720,1280,1,213,401,478,678 -PUZZLE_LIVINGROOM_H_S_frame_2419_jpg.rf.af93db520abfd7c03165ccfe34de68f4.jpg,720,1280,2,631,407,921,710 -CHESS_COURTYARD_T_B_frame_2028_jpg.rf.afad95dffeb8638f42458bbd6c46fc2e.jpg,720,1280,1,1,615,238,718 -CHESS_COURTYARD_T_B_frame_2028_jpg.rf.afad95dffeb8638f42458bbd6c46fc2e.jpg,720,1280,2,387,639,660,718 -CHESS_OFFICE_S_B_frame_0902_jpg.rf.afc092fb4f805c2238385b7e01c0ca20.jpg,720,1280,2,456,236,839,526 -CHESS_COURTYARD_T_B_frame_1314_jpg.rf.afccfe618e32a1150df79116c8103db9.jpg,720,1280,1,3,461,255,718 -CHESS_COURTYARD_T_B_frame_1314_jpg.rf.afccfe618e32a1150df79116c8103db9.jpg,720,1280,2,439,679,598,718 -CARDS_LIVINGROOM_B_T_frame_2144_jpg.rf.affe3ef58a842537de91122643ff87aa.jpg,720,1280,1,217,695,277,718 -CARDS_LIVINGROOM_B_T_frame_2144_jpg.rf.affe3ef58a842537de91122643ff87aa.jpg,720,1280,2,582,623,849,716 -JENGA_COURTYARD_H_B_frame_0251_jpg.rf.b00a3f5ebe88b97d0d09af80426e0fc6.jpg,720,1280,2,565,373,840,712 -CHESS_OFFICE_T_H_frame_0583_jpg.rf.b00c0d5d0ef401e2590900d7311026ef.jpg,720,1280,2,608,320,895,523 -CHESS_COURTYARD_H_S_frame_1036_jpg.rf.b01a8f3b6aa625066ab30c5eaf037a66.jpg,720,1280,2,711,664,923,718 -CARDS_LIVINGROOM_H_S_frame_1371_jpg.rf.b021f9882befcbf94b42f2027085a595.jpg,720,1280,1,325,638,550,719 -CARDS_LIVINGROOM_H_S_frame_1371_jpg.rf.b021f9882befcbf94b42f2027085a595.jpg,720,1280,2,645,535,1009,719 -PUZZLE_LIVINGROOM_B_T_frame_2114_jpg.rf.b0348541efb4dd8e0f96bc1be9e78d90.jpg,720,1280,1,3,486,443,717 -PUZZLE_LIVINGROOM_B_T_frame_2114_jpg.rf.b0348541efb4dd8e0f96bc1be9e78d90.jpg,720,1280,2,506,434,999,717 -CHESS_OFFICE_B_S_frame_1366_jpg.rf.b0552923cab42021301308e3454cb71d.jpg,720,1280,2,660,421,1081,692 -PUZZLE_OFFICE_T_S_frame_2088_jpg.rf.b05aca74a8947e24a164ac0ccb169bea.jpg,720,1280,1,14,558,338,712 -PUZZLE_OFFICE_T_S_frame_2088_jpg.rf.b05aca74a8947e24a164ac0ccb169bea.jpg,720,1280,2,584,453,988,709 -JENGA_OFFICE_H_T_frame_2210_jpg.rf.b06832ecd389bfa204fa72de8bcb561d.jpg,720,1280,2,782,274,1078,631 -CARDS_OFFICE_S_B_frame_2169_jpg.rf.b08aa8ecedeff0254d8a3f855405191a.jpg,720,1280,1,371,668,554,719 -CARDS_LIVINGROOM_H_S_frame_1238_jpg.rf.b0bea2a795b0e859af1074e02e0cd694.jpg,720,1280,2,606,606,823,719 -PUZZLE_LIVINGROOM_S_H_frame_0266_jpg.rf.b0e48a5cd4a8cbc7e6aefd5b5353c3d5.jpg,720,1280,1,71,500,461,718 -PUZZLE_LIVINGROOM_S_H_frame_0266_jpg.rf.b0e48a5cd4a8cbc7e6aefd5b5353c3d5.jpg,720,1280,2,567,525,908,718 -CARDS_LIVINGROOM_B_T_frame_2269_jpg.rf.b0ec43e51ca485efd990406a7cc64e40.jpg,720,1280,1,179,676,262,718 -CARDS_LIVINGROOM_B_T_frame_2269_jpg.rf.b0ec43e51ca485efd990406a7cc64e40.jpg,720,1280,2,652,703,728,718 -JENGA_LIVINGROOM_S_T_frame_1532_jpg.rf.b11c5c059eaca332ecb732e03189f5a8.jpg,720,1280,1,1,568,103,718 -JENGA_LIVINGROOM_S_T_frame_1532_jpg.rf.b11c5c059eaca332ecb732e03189f5a8.jpg,720,1280,2,372,339,766,708 -CARDS_LIVINGROOM_B_T_frame_0944_jpg.rf.b1310f602dbac2135e855f9b23f30fea.jpg,720,1280,1,173,691,234,718 -CARDS_LIVINGROOM_B_T_frame_0944_jpg.rf.b1310f602dbac2135e855f9b23f30fea.jpg,720,1280,2,703,667,789,718 -CHESS_COURTYARD_T_B_frame_2656_jpg.rf.b1abe262df35652735a33465fa7433d2.jpg,720,1280,1,11,693,191,718 -CHESS_COURTYARD_T_B_frame_2656_jpg.rf.b1abe262df35652735a33465fa7433d2.jpg,720,1280,2,278,660,523,717 -CARDS_OFFICE_S_B_frame_2174_jpg.rf.b1c7f3a6c6dfdc6143c6fec0ed46d917.jpg,720,1280,1,371,669,564,717 -CARDS_COURTYARD_S_H_frame_1815_jpg.rf.b1d26be544d7bd3cea62e4509bf89441.jpg,720,1280,1,357,629,537,718 -CARDS_COURTYARD_S_H_frame_1815_jpg.rf.b1d26be544d7bd3cea62e4509bf89441.jpg,720,1280,2,635,655,832,718 -CARDS_COURTYARD_S_H_frame_1644_jpg.rf.b202243783800ff777e0d9d639a85d71.jpg,720,1280,1,296,642,522,718 -CARDS_COURTYARD_S_H_frame_1644_jpg.rf.b202243783800ff777e0d9d639a85d71.jpg,720,1280,2,590,663,775,718 -CARDS_LIVINGROOM_B_T_frame_0439_jpg.rf.b2102626bc4c86b741ecc12aeb5b818e.jpg,720,1280,2,834,447,1177,718 -CARDS_OFFICE_S_B_frame_0258_jpg.rf.b21bbde53b299ddc3e319eb1589a00fd.jpg,720,1280,1,245,418,473,671 -CARDS_OFFICE_T_H_frame_0058_jpg.rf.b23ef109171b4f168832340d5eb147fe.jpg,720,1280,2,734,561,914,718 -CHESS_LIVINGROOM_S_B_frame_0597_jpg.rf.b246edc5af8fce33a6bd52fc1dda6685.jpg,720,1280,1,1,514,144,718 -CHESS_LIVINGROOM_S_B_frame_0597_jpg.rf.b246edc5af8fce33a6bd52fc1dda6685.jpg,720,1280,2,821,482,1141,713 -CARDS_OFFICE_B_S_frame_2202_jpg.rf.b2626a02161299c2349b9855da994a4c.jpg,720,1280,1,286,654,506,718 -CARDS_OFFICE_B_S_frame_2202_jpg.rf.b2626a02161299c2349b9855da994a4c.jpg,720,1280,2,547,642,798,718 -PUZZLE_OFFICE_B_H_frame_2585_jpg.rf.b277084e4bd66bbddeb66ee9aef24b78.jpg,720,1280,2,915,442,1271,719 -PUZZLE_OFFICE_B_H_frame_2585_jpg.rf.b277084e4bd66bbddeb66ee9aef24b78.jpg,720,1280,1,76,524,389,719 -CARDS_LIVINGROOM_B_T_frame_1138_jpg.rf.b29e37a81e1b972ce33d001e498e9f22.jpg,720,1280,2,594,659,781,718 -JENGA_COURTYARD_S_T_frame_2481_jpg.rf.b2f53bd77a6c3bf3424d8bba2904ae0e.jpg,720,1280,1,295,539,484,718 -JENGA_COURTYARD_S_T_frame_2481_jpg.rf.b2f53bd77a6c3bf3424d8bba2904ae0e.jpg,720,1280,2,691,548,956,718 -CARDS_COURTYARD_T_B_frame_0880_jpg.rf.b309e7d066c57ad81c5fce80894be0c2.jpg,720,1280,1,148,572,472,718 -CARDS_COURTYARD_T_B_frame_0880_jpg.rf.b309e7d066c57ad81c5fce80894be0c2.jpg,720,1280,2,547,531,856,717 -CHESS_OFFICE_H_T_frame_1468_jpg.rf.b311f198a91d6fe6c4ff78ec7cec6e90.jpg,720,1280,2,583,394,972,681 -CARDS_LIVINGROOM_H_S_frame_1562_jpg.rf.b31e25b354b4c3ecfcb91fb90e5a0ced.jpg,720,1280,1,246,659,326,718 -CARDS_LIVINGROOM_H_S_frame_1562_jpg.rf.b31e25b354b4c3ecfcb91fb90e5a0ced.jpg,720,1280,2,531,470,872,719 -CARDS_LIVINGROOM_B_T_frame_0910_jpg.rf.b32951b1596ee93a4db1c25cf988b221.jpg,720,1280,2,726,659,851,718 -JENGA_OFFICE_S_B_frame_2132_jpg.rf.b3311863ddbde1f7679c7cdd988f53b4.jpg,720,1280,2,758,702,829,718 -CARDS_LIVINGROOM_S_H_frame_2279_jpg.rf.b33c0fe1ffe4afaea22fe13ea745c29a.jpg,720,1280,1,99,513,505,718 -CARDS_LIVINGROOM_S_H_frame_2279_jpg.rf.b33c0fe1ffe4afaea22fe13ea745c29a.jpg,720,1280,2,554,498,881,718 -PUZZLE_OFFICE_T_S_frame_2274_jpg.rf.b34edb9101e97f74b019cb3f4698dbe7.jpg,720,1280,1,127,393,391,624 -PUZZLE_OFFICE_T_S_frame_2274_jpg.rf.b34edb9101e97f74b019cb3f4698dbe7.jpg,720,1280,2,656,478,1074,714 -PUZZLE_COURTYARD_B_S_frame_0800_jpg.rf.b373c9fe05b498c677f0ddb9f55fd98b.jpg,720,1280,2,870,612,1068,719 -CARDS_COURTYARD_T_B_frame_0164_jpg.rf.b37c808b7ceaef9c48bd83e85d8fabfb.jpg,720,1280,1,209,512,488,716 -CARDS_COURTYARD_T_B_frame_0164_jpg.rf.b37c808b7ceaef9c48bd83e85d8fabfb.jpg,720,1280,2,575,473,911,716 -CARDS_COURTYARD_H_S_frame_0211_jpg.rf.b386fb6b53bdad97ea5826ce56250861.jpg,720,1280,1,216,577,490,719 -CARDS_COURTYARD_H_S_frame_0211_jpg.rf.b386fb6b53bdad97ea5826ce56250861.jpg,720,1280,2,513,533,824,719 -JENGA_LIVINGROOM_S_T_frame_1148_jpg.rf.b37d5896fa75588e41540734aa82d06b.jpg,720,1280,1,160,676,306,718 -CHESS_COURTYARD_H_S_frame_2176_jpg.rf.b388a4acc8b6af999f4237165b76ef8d.jpg,720,1280,2,852,567,1117,718 -JENGA_OFFICE_H_T_frame_1517_jpg.rf.b38b220516bde21253b9b1893209174b.jpg,720,1280,1,394,350,537,701 -JENGA_OFFICE_H_T_frame_1517_jpg.rf.b38b220516bde21253b9b1893209174b.jpg,720,1280,2,608,377,757,693 -CARDS_LIVINGROOM_H_S_frame_0160_jpg.rf.b38c350d20873b88370fca64d716da7a.jpg,720,1280,2,699,560,1027,716 -JENGA_OFFICE_H_T_frame_1573_jpg.rf.b394a0b72b9c643fc6bbd7921e855601.jpg,720,1280,1,312,344,456,661 -JENGA_OFFICE_H_T_frame_1573_jpg.rf.b394a0b72b9c643fc6bbd7921e855601.jpg,720,1280,2,737,322,861,674 -CARDS_OFFICE_T_H_frame_1666_jpg.rf.b3b3a3ea898d0402939513927289abfe.jpg,720,1280,2,724,367,950,649 -CHESS_OFFICE_T_H_frame_0483_jpg.rf.b3b2161cbae8dd3745f4af7f1110d2c3.jpg,720,1280,2,605,318,931,520 -CARDS_COURTYARD_H_S_frame_1021_jpg.rf.b3b61fa283faafeed6cef4ae9ffdeb20.jpg,720,1280,1,252,578,493,719 -CARDS_COURTYARD_H_S_frame_1021_jpg.rf.b3b61fa283faafeed6cef4ae9ffdeb20.jpg,720,1280,2,604,595,888,719 -JENGA_OFFICE_S_B_frame_2698_jpg.rf.b3ba34961607f29e753a5c5bda2fc94a.jpg,720,1280,1,390,690,469,716 -JENGA_OFFICE_S_B_frame_2698_jpg.rf.b3ba34961607f29e753a5c5bda2fc94a.jpg,720,1280,2,677,692,790,719 -CARDS_LIVINGROOM_H_S_frame_1585_jpg.rf.b3d01ba00106090612e2a611e881fee4.jpg,720,1280,1,325,661,411,719 -CARDS_LIVINGROOM_H_S_frame_1585_jpg.rf.b3d01ba00106090612e2a611e881fee4.jpg,720,1280,2,545,517,920,719 -CARDS_OFFICE_H_T_frame_1086_jpg.rf.b461435bacd3cc28e9e1a06ff72ce657.jpg,720,1280,1,221,633,319,718 -CARDS_OFFICE_H_T_frame_1086_jpg.rf.b461435bacd3cc28e9e1a06ff72ce657.jpg,720,1280,2,607,650,834,718 -CHESS_LIVINGROOM_T_H_frame_0764_jpg.rf.b466306d5ac9f01cce36d30d56bfe7ba.jpg,720,1280,1,30,167,449,432 -CHESS_OFFICE_B_S_frame_1832_jpg.rf.b474bda6ae012ffd89446bc8602bf9bd.jpg,720,1280,2,821,697,981,718 -PUZZLE_OFFICE_H_B_frame_0030_jpg.rf.b47e4a536be3ad287772ffcfc91cf6cc.jpg,720,1280,1,122,543,470,710 -PUZZLE_OFFICE_H_B_frame_0030_jpg.rf.b47e4a536be3ad287772ffcfc91cf6cc.jpg,720,1280,2,805,260,1004,483 -CHESS_LIVINGROOM_T_H_frame_0082_jpg.rf.b47efe9ad1a171292540aeba84392c9c.jpg,720,1280,2,716,385,1075,702 -CARDS_LIVINGROOM_T_B_frame_0565_jpg.rf.b4898326582c05685bf59f6ce0c5b459.jpg,720,1280,1,5,632,118,719 -CARDS_LIVINGROOM_T_B_frame_0565_jpg.rf.b4898326582c05685bf59f6ce0c5b459.jpg,720,1280,2,506,609,879,719 -PUZZLE_OFFICE_T_S_frame_2163_jpg.rf.b496f06fe2de81e4a682b3163b9173be.jpg,720,1280,1,110,601,380,711 -PUZZLE_OFFICE_T_S_frame_2163_jpg.rf.b496f06fe2de81e4a682b3163b9173be.jpg,720,1280,2,545,570,779,709 -CHESS_LIVINGROOM_H_T_frame_0272_jpg.rf.b49d8a60ee22baa982c058eb50b87f42.jpg,720,1280,1,3,527,207,716 -CHESS_LIVINGROOM_H_T_frame_0272_jpg.rf.b49d8a60ee22baa982c058eb50b87f42.jpg,720,1280,2,897,508,1279,718 -CHESS_LIVINGROOM_T_H_frame_2470_jpg.rf.b4d321a38f6c486e3519444395eb1228.jpg,720,1280,2,454,218,941,526 -CHESS_LIVINGROOM_T_H_frame_1668_jpg.rf.b4d6c9e7e64eebfafde32088020c766d.jpg,720,1280,2,463,313,1047,624 -CARDS_OFFICE_B_S_frame_2393_jpg.rf.b4f20ec1ae99e2af498b6852367212dd.jpg,720,1280,2,745,656,860,718 -CARDS_OFFICE_S_B_frame_0612_jpg.rf.b5129e9ad4c651aee10fc9b31fb1e287.jpg,720,1280,1,181,537,468,713 -CARDS_OFFICE_S_B_frame_0612_jpg.rf.b5129e9ad4c651aee10fc9b31fb1e287.jpg,720,1280,2,625,677,680,716 -CHESS_LIVINGROOM_H_T_frame_0321_jpg.rf.b516efcb2bd29e7856c6da8a34c9e522.jpg,720,1280,1,7,540,291,716 -CHESS_LIVINGROOM_H_T_frame_0321_jpg.rf.b516efcb2bd29e7856c6da8a34c9e522.jpg,720,1280,2,580,390,986,663 -CHESS_OFFICE_H_T_frame_1163_jpg.rf.b538880272ba28a799d74dbab1061308.jpg,720,1280,2,723,460,1070,708 -CARDS_LIVINGROOM_T_B_frame_2657_jpg.rf.b546320ce0ad45b02a92c71fe45d8ff6.jpg,720,1280,2,475,676,607,719 -JENGA_COURTYARD_S_T_frame_1644_jpg.rf.b551aaf41888580cdeaf7b0a8beaeb2d.jpg,720,1280,1,3,601,255,714 -PUZZLE_LIVINGROOM_H_S_frame_1728_jpg.rf.b55f5fe4719e33112924cbc6e5927980.jpg,720,1280,1,7,608,93,704 -JENGA_LIVINGROOM_B_H_frame_1304_jpg.rf.b5609c47f26b41d82aeef177c25849ca.jpg,720,1280,1,17,560,412,718 -JENGA_LIVINGROOM_B_H_frame_1304_jpg.rf.b5609c47f26b41d82aeef177c25849ca.jpg,720,1280,2,791,554,1038,719 -CARDS_COURTYARD_T_B_frame_0638_jpg.rf.b56fc97fdaf9a66feada0070ab7b8e86.jpg,720,1280,1,127,597,439,718 -CARDS_COURTYARD_T_B_frame_0638_jpg.rf.b56fc97fdaf9a66feada0070ab7b8e86.jpg,720,1280,2,527,555,844,718 -PUZZLE_OFFICE_H_B_frame_2269_jpg.rf.b573cf2baf0a551272ef3e7247fc6311.jpg,720,1280,1,348,583,597,719 -PUZZLE_OFFICE_H_B_frame_2269_jpg.rf.b573cf2baf0a551272ef3e7247fc6311.jpg,720,1280,2,599,537,799,719 -CARDS_OFFICE_H_T_frame_0271_jpg.rf.b57cfd1ecce88ead107624bfff74a6d8.jpg,720,1280,2,603,576,884,719 -CARDS_OFFICE_H_T_frame_0271_jpg.rf.b57cfd1ecce88ead107624bfff74a6d8.jpg,720,1280,1,224,640,343,719 -CHESS_LIVINGROOM_H_T_frame_1404_jpg.rf.b579b65586a772b10863e70c6559b154.jpg,720,1280,1,3,627,279,718 -CHESS_LIVINGROOM_H_T_frame_1404_jpg.rf.b579b65586a772b10863e70c6559b154.jpg,720,1280,2,469,434,874,705 -PUZZLE_LIVINGROOM_B_T_frame_1499_jpg.rf.b583f9bfc1f769394dbc331003f6c7eb.jpg,720,1280,1,4,401,552,718 -PUZZLE_LIVINGROOM_B_T_frame_1499_jpg.rf.b583f9bfc1f769394dbc331003f6c7eb.jpg,720,1280,2,890,650,1279,716 -JENGA_OFFICE_S_B_frame_0843_jpg.rf.b5b52f9f2d2ec641ae7b57bccf1d63b0.jpg,720,1280,1,185,646,392,712 -JENGA_OFFICE_S_B_frame_0843_jpg.rf.b5b52f9f2d2ec641ae7b57bccf1d63b0.jpg,720,1280,2,805,561,1049,710 -PUZZLE_COURTYARD_B_S_frame_1496_jpg.rf.b5c36d87acf92cfccbea46438873b9e1.jpg,720,1280,2,652,570,929,719 -CHESS_LIVINGROOM_H_T_frame_1517_jpg.rf.b5c5cf956dc7e82431124df896e7ae8c.jpg,720,1280,1,1,661,230,718 -CHESS_LIVINGROOM_H_T_frame_1517_jpg.rf.b5c5cf956dc7e82431124df896e7ae8c.jpg,720,1280,2,427,400,868,659 -PUZZLE_LIVINGROOM_H_S_frame_0129_jpg.rf.b5cf093a97807c7b7e822e58a8161377.jpg,720,1280,1,2,615,242,718 -PUZZLE_LIVINGROOM_H_S_frame_0129_jpg.rf.b5cf093a97807c7b7e822e58a8161377.jpg,720,1280,2,672,414,949,716 -PUZZLE_OFFICE_T_S_frame_0241_jpg.rf.b61293c00d6c97012ffa15e0655059b3.jpg,720,1280,1,95,418,474,715 -PUZZLE_OFFICE_T_S_frame_0241_jpg.rf.b61293c00d6c97012ffa15e0655059b3.jpg,720,1280,2,535,428,813,716 -PUZZLE_LIVINGROOM_H_S_frame_0057_jpg.rf.b63a8226e9bafdb740b54850b4d9c75b.jpg,720,1280,1,257,687,431,716 -PUZZLE_LIVINGROOM_H_S_frame_0057_jpg.rf.b63a8226e9bafdb740b54850b4d9c75b.jpg,720,1280,2,672,617,888,716 -CHESS_OFFICE_H_T_frame_1769_jpg.rf.b63716f3969a17f6184eb3360d88223e.jpg,720,1280,2,652,339,923,550 -PUZZLE_OFFICE_T_S_frame_0273_jpg.rf.b64a66777f9853ab553701538f18290a.jpg,720,1280,1,103,327,396,587 -PUZZLE_OFFICE_T_S_frame_0273_jpg.rf.b64a66777f9853ab553701538f18290a.jpg,720,1280,2,596,412,893,703 -CARDS_LIVINGROOM_H_S_frame_1176_jpg.rf.b65a838f38849425eab73df4530a6620.jpg,720,1280,2,664,640,866,719 -PUZZLE_COURTYARD_H_T_frame_1899_jpg.rf.b667fbb47fcb711c7beedc661390f099.jpg,720,1280,1,97,640,360,718 -CARDS_COURTYARD_T_B_frame_1373_jpg.rf.b6851b04af7c11d09f021bf6dc769dbf.jpg,720,1280,1,197,617,435,718 -CARDS_COURTYARD_T_B_frame_1373_jpg.rf.b6851b04af7c11d09f021bf6dc769dbf.jpg,720,1280,2,469,609,688,718 -CARDS_OFFICE_T_H_frame_1008_jpg.rf.b68d92eeb3c1f5c19881802dc8edf278.jpg,720,1280,1,188,617,376,719 -CARDS_OFFICE_T_H_frame_1008_jpg.rf.b68d92eeb3c1f5c19881802dc8edf278.jpg,720,1280,2,476,581,730,719 -PUZZLE_COURTYARD_B_S_frame_1976_jpg.rf.b6a4b1ebccb472def72a22b1a32c1803.jpg,720,1280,1,155,584,378,719 -PUZZLE_COURTYARD_B_S_frame_1976_jpg.rf.b6a4b1ebccb472def72a22b1a32c1803.jpg,720,1280,2,922,633,1110,719 -CARDS_COURTYARD_B_T_frame_2093_jpg.rf.b6ca659cd5bcde942ffd3d7c4dceb1f0.jpg,720,1280,2,659,687,715,718 -JENGA_COURTYARD_S_T_frame_2416_jpg.rf.b6cc4dd2b3ea79fa11df81d1dd7302a0.jpg,720,1280,2,699,551,1106,716 -CARDS_COURTYARD_T_B_frame_1829_jpg.rf.b71bbf3d3b8d255fa7ce9054dc697a69.jpg,720,1280,1,177,631,299,717 -CARDS_COURTYARD_T_B_frame_1829_jpg.rf.b71bbf3d3b8d255fa7ce9054dc697a69.jpg,720,1280,2,511,563,787,716 -JENGA_LIVINGROOM_B_H_frame_2597_jpg.rf.b7433f428ffe0d8a1baee811b2c9d69f.jpg,720,1280,1,243,396,608,608 -JENGA_OFFICE_H_T_frame_2007_jpg.rf.b7388551aa6795018a7e891ba9b3acfe.jpg,720,1280,1,335,231,492,611 -JENGA_OFFICE_H_T_frame_2007_jpg.rf.b7388551aa6795018a7e891ba9b3acfe.jpg,720,1280,2,554,366,885,646 -CARDS_LIVINGROOM_S_H_frame_1993_jpg.rf.b78b31749e2c159d02af54438e7f0f8f.jpg,720,1280,1,179,587,448,718 -CARDS_LIVINGROOM_S_H_frame_1993_jpg.rf.b78b31749e2c159d02af54438e7f0f8f.jpg,720,1280,2,499,616,783,718 -PUZZLE_OFFICE_T_S_frame_0620_jpg.rf.b7cc3b6a7f6efac9a19c81b5c8427c97.jpg,720,1280,2,546,234,926,563 -PUZZLE_OFFICE_T_S_frame_0620_jpg.rf.b7cc3b6a7f6efac9a19c81b5c8427c97.jpg,720,1280,1,40,339,430,658 -JENGA_OFFICE_S_B_frame_1247_jpg.rf.b7d1cf6c0eb627473f86f014178bcdc3.jpg,720,1280,2,490,467,821,712 -CHESS_COURTYARD_B_T_frame_2589_jpg.rf.b7d576a54968aba2cd9bd3dbe6383b21.jpg,720,1280,2,1046,705,1188,718 -JENGA_OFFICE_T_H_frame_0358_jpg.rf.b7edb750f87c3ba1cfbe8cb4651a971f.jpg,720,1280,2,585,176,860,358 -CHESS_LIVINGROOM_S_B_frame_0620_jpg.rf.b83aaf12506b6373fcb90339e9285a65.jpg,720,1280,1,7,523,205,718 -CHESS_LIVINGROOM_S_B_frame_0620_jpg.rf.b83aaf12506b6373fcb90339e9285a65.jpg,720,1280,2,407,386,903,718 -JENGA_LIVINGROOM_T_S_frame_1745_jpg.rf.b82299211f4d348d88fe725bb1e2d5e1.jpg,720,1280,1,37,170,490,523 -JENGA_LIVINGROOM_T_S_frame_1745_jpg.rf.b82299211f4d348d88fe725bb1e2d5e1.jpg,720,1280,2,490,153,902,429 -CARDS_OFFICE_S_B_frame_2167_jpg.rf.b873fa52d09ba1767a0152e648fa619f.jpg,720,1280,1,365,659,548,718 -CARDS_OFFICE_S_B_frame_2167_jpg.rf.b873fa52d09ba1767a0152e648fa619f.jpg,720,1280,2,1033,563,1264,708 -JENGA_LIVINGROOM_T_S_frame_2046_jpg.rf.b8791d2d64156f458f0986ba71b335d4.jpg,720,1280,1,8,316,369,714 -JENGA_LIVINGROOM_T_S_frame_2046_jpg.rf.b8791d2d64156f458f0986ba71b335d4.jpg,720,1280,2,691,680,863,719 -PUZZLE_OFFICE_B_H_frame_1332_jpg.rf.b87ae04d020c2df83d6f080831a55e5c.jpg,720,1280,1,82,522,456,719 -PUZZLE_OFFICE_B_H_frame_1332_jpg.rf.b87ae04d020c2df83d6f080831a55e5c.jpg,720,1280,2,951,471,1277,714 -CHESS_LIVINGROOM_S_B_frame_1366_jpg.rf.b8a89e928ad9b701ff0980e3ab6d509e.jpg,720,1280,1,1,477,205,718 -CHESS_LIVINGROOM_S_B_frame_1366_jpg.rf.b8a89e928ad9b701ff0980e3ab6d509e.jpg,720,1280,2,824,497,1136,717 -CARDS_LIVINGROOM_S_H_frame_1716_jpg.rf.b8a8a16396182b584328b6e95191b82b.jpg,720,1280,1,202,468,499,716 -CHESS_COURTYARD_B_T_frame_0228_jpg.rf.b8e6f7004b06e32c7266d677069e2ca0.jpg,720,1280,2,664,507,1009,718 -CARDS_LIVINGROOM_S_H_frame_1748_jpg.rf.b9565a81ffa138b73b082938d875035b.jpg,720,1280,1,192,542,493,718 -CARDS_LIVINGROOM_S_H_frame_1748_jpg.rf.b9565a81ffa138b73b082938d875035b.jpg,720,1280,2,539,542,811,718 -PUZZLE_COURTYARD_S_B_frame_1070_jpg.rf.b96cdf1db7d4e04ff0ea8d354e0d761e.jpg,720,1280,1,214,441,573,709 -PUZZLE_COURTYARD_S_B_frame_1070_jpg.rf.b96cdf1db7d4e04ff0ea8d354e0d761e.jpg,720,1280,2,662,416,850,629 -CARDS_COURTYARD_S_H_frame_2299_jpg.rf.b97390ee7064e84164ac148eaf203ed4.jpg,720,1280,1,334,691,433,718 -CHESS_COURTYARD_B_T_frame_2686_jpg.rf.b98fdb104d506b176131ae98571e1111.jpg,720,1280,2,668,497,1073,717 -CHESS_COURTYARD_S_H_frame_0575_jpg.rf.b9c08795719aeb27ace5e483827e803d.jpg,720,1280,2,576,581,1027,719 -CHESS_LIVINGROOM_H_T_frame_2534_jpg.rf.b9cbc3da7ddbe5d212d6abeaec7f2464.jpg,720,1280,1,77,697,207,718 -CHESS_LIVINGROOM_H_T_frame_2534_jpg.rf.b9cbc3da7ddbe5d212d6abeaec7f2464.jpg,720,1280,2,775,265,1273,625 -JENGA_LIVINGROOM_S_T_frame_1577_jpg.rf.b9df74acb52a9511d1985e881ab09c85.jpg,720,1280,1,50,385,423,718 -JENGA_LIVINGROOM_S_T_frame_1577_jpg.rf.b9df74acb52a9511d1985e881ab09c85.jpg,720,1280,2,603,265,1046,686 -JENGA_COURTYARD_H_B_frame_2115_jpg.rf.b9dff1470c6c0191f5aa01a911cb3a93.jpg,720,1280,1,313,693,414,718 -JENGA_COURTYARD_H_B_frame_2115_jpg.rf.b9dff1470c6c0191f5aa01a911cb3a93.jpg,720,1280,2,508,646,741,718 -CARDS_OFFICE_B_S_frame_1240_jpg.rf.b9ec60b652ab9911348909616700755e.jpg,720,1280,1,356,613,539,712 -CARDS_OFFICE_B_S_frame_1240_jpg.rf.b9ec60b652ab9911348909616700755e.jpg,720,1280,2,667,646,778,718 -PUZZLE_COURTYARD_H_T_frame_0201_jpg.rf.b9fc2c715504896ecb199a9277a8a39c.jpg,720,1280,1,237,706,284,717 -PUZZLE_COURTYARD_H_T_frame_0201_jpg.rf.b9fc2c715504896ecb199a9277a8a39c.jpg,720,1280,2,523,452,670,675 -CHESS_OFFICE_B_S_frame_0145_jpg.rf.b9fee99bca74903bc57b2fb3484c69cf.jpg,720,1280,2,703,682,879,719 -JENGA_LIVINGROOM_H_B_frame_0721_jpg.rf.ba0b247570529d188c53780bbc31188a.jpg,720,1280,2,617,374,909,693 -PUZZLE_LIVINGROOM_B_T_frame_2459_jpg.rf.ba439ab7356e50e5be6e4bc8f61de5e8.jpg,720,1280,1,1,541,153,713 -PUZZLE_LIVINGROOM_B_T_frame_2459_jpg.rf.ba439ab7356e50e5be6e4bc8f61de5e8.jpg,720,1280,2,621,548,1018,718 -CHESS_COURTYARD_S_H_frame_0584_jpg.rf.ba5517fdf07c5031f3b01618988b606d.jpg,720,1280,2,650,456,1198,717 -CARDS_LIVINGROOM_S_H_frame_1459_jpg.rf.ba55966944c4d1b6ddba4205b36234b5.jpg,720,1280,2,410,489,719,718 -CARDS_LIVINGROOM_B_T_frame_0262_jpg.rf.ba873561bef3f2edbfe48761beb9968d.jpg,720,1280,2,561,650,889,718 -CARDS_OFFICE_T_H_frame_0026_jpg.rf.ba9349367ee158e3a3091cba1e53916e.jpg,720,1280,1,226,650,319,718 -CARDS_OFFICE_T_H_frame_0026_jpg.rf.ba9349367ee158e3a3091cba1e53916e.jpg,720,1280,2,611,625,838,718 -JENGA_OFFICE_B_S_frame_1461_jpg.rf.baaaa35763d150206d83ca3cd01b86c8.jpg,720,1280,2,659,407,927,520 -CHESS_OFFICE_T_H_frame_0880_jpg.rf.babce55471df8de63276b0978f7dd034.jpg,720,1280,1,5,530,290,717 -CHESS_OFFICE_T_H_frame_0880_jpg.rf.babce55471df8de63276b0978f7dd034.jpg,720,1280,2,460,611,733,718 -CARDS_OFFICE_T_H_frame_1959_jpg.rf.bae4e2b26c13bba6cb1fe11f195b41cd.jpg,720,1280,1,162,673,255,719 -CARDS_OFFICE_T_H_frame_1959_jpg.rf.bae4e2b26c13bba6cb1fe11f195b41cd.jpg,720,1280,2,620,690,692,719 -JENGA_OFFICE_T_H_frame_2665_jpg.rf.bb3ceea1fd1d236e272a48f795008034.jpg,720,1280,1,7,329,210,617 -JENGA_COURTYARD_B_H_frame_0091_jpg.rf.bb62cd0b4c5198ec728d817ba15d579e.jpg,720,1280,2,686,413,951,667 -JENGA_COURTYARD_H_B_frame_1289_jpg.rf.bb98a5872417a2e233cc7eff47db2ae5.jpg,720,1280,2,503,650,732,718 -PUZZLE_COURTYARD_B_S_frame_2202_jpg.rf.bbc55325f74aecbebf563c93af051dfc.jpg,720,1280,1,229,631,490,719 -PUZZLE_COURTYARD_B_S_frame_2202_jpg.rf.bbc55325f74aecbebf563c93af051dfc.jpg,720,1280,2,671,562,958,719 -JENGA_COURTYARD_T_S_frame_2609_jpg.rf.bbdff81cf3c7fdea5d28895295481742.jpg,720,1280,1,200,477,505,716 -JENGA_COURTYARD_T_S_frame_2609_jpg.rf.bbdff81cf3c7fdea5d28895295481742.jpg,720,1280,2,689,495,890,712 -JENGA_OFFICE_T_H_frame_2414_jpg.rf.bbecdaf50ee908c93c2c85875d87880b.jpg,720,1280,1,198,193,435,368 -JENGA_LIVINGROOM_B_H_frame_2442_jpg.rf.bbf116f25345bfb2c76cc4952f6a2973.jpg,720,1280,1,169,587,551,718 -JENGA_LIVINGROOM_B_H_frame_2442_jpg.rf.bbf116f25345bfb2c76cc4952f6a2973.jpg,720,1280,2,1054,642,1278,716 -PUZZLE_LIVINGROOM_T_B_frame_1782_jpg.rf.bc05d1eda200ca56e35fd60b575fd771.jpg,720,1280,1,5,460,303,718 -PUZZLE_LIVINGROOM_T_B_frame_1782_jpg.rf.bc05d1eda200ca56e35fd60b575fd771.jpg,720,1280,2,254,454,1085,716 -CARDS_OFFICE_H_T_frame_0736_jpg.rf.bc1b04650bd82e5c11615247e1ae21ef.jpg,720,1280,1,194,494,552,718 -CARDS_OFFICE_H_T_frame_0736_jpg.rf.bc1b04650bd82e5c11615247e1ae21ef.jpg,720,1280,2,599,485,965,716 -CHESS_LIVINGROOM_T_H_frame_1245_jpg.rf.bc22c56b91e576531aa266bc0f005167.jpg,720,1280,2,552,130,880,368 -CHESS_COURTYARD_S_H_frame_1346_jpg.rf.bc29552c10091fde8ce5f720b3f09802.jpg,720,1280,2,591,192,1212,718 -JENGA_COURTYARD_B_H_frame_1842_jpg.rf.bc297dbe571680c640301ecb99e14cde.jpg,720,1280,1,314,629,543,719 -JENGA_COURTYARD_B_H_frame_1842_jpg.rf.bc297dbe571680c640301ecb99e14cde.jpg,720,1280,2,705,620,995,719 -CARDS_COURTYARD_H_S_frame_2018_jpg.rf.bc2ce79561b5df0811de2621af05d3bd.jpg,720,1280,1,169,538,496,719 -CARDS_COURTYARD_H_S_frame_2018_jpg.rf.bc2ce79561b5df0811de2621af05d3bd.jpg,720,1280,2,724,366,973,615 -PUZZLE_COURTYARD_T_H_frame_0092_jpg.rf.bc9f13e92d9570e621e89a4fc39f2b11.jpg,720,1280,2,603,498,1008,718 -JENGA_OFFICE_T_H_frame_2374_jpg.rf.bc4755ee6d5d083d16941e98129676fe.jpg,720,1280,1,85,622,354,719 -JENGA_OFFICE_T_H_frame_2374_jpg.rf.bc4755ee6d5d083d16941e98129676fe.jpg,720,1280,2,557,636,698,715 -JENGA_OFFICE_B_S_frame_1550_jpg.rf.bca5a8a87db4cbea249514d08fd9d2a8.jpg,720,1280,2,679,419,942,713 -CARDS_COURTYARD_H_S_frame_2190_jpg.rf.bcb5e685ed1a1be127a7d9d507aba00e.jpg,720,1280,1,193,534,493,719 -CARDS_COURTYARD_H_S_frame_2190_jpg.rf.bcb5e685ed1a1be127a7d9d507aba00e.jpg,720,1280,2,570,354,970,609 -PUZZLE_COURTYARD_T_H_frame_0151_jpg.rf.bcd49ffd1cdfb07829ee5c1e22af4f85.jpg,720,1280,1,1,614,289,718 -PUZZLE_COURTYARD_T_H_frame_0151_jpg.rf.bcd49ffd1cdfb07829ee5c1e22af4f85.jpg,720,1280,2,592,691,741,718 -CARDS_LIVINGROOM_T_B_frame_2652_jpg.rf.bcda0b05d97299865e176cc51a9e263e.jpg,720,1280,2,448,632,673,719 -CHESS_OFFICE_B_S_frame_1345_jpg.rf.bcd58329065adea436380260409850b5.jpg,720,1280,1,269,701,453,718 -CHESS_OFFICE_B_S_frame_1345_jpg.rf.bcd58329065adea436380260409850b5.jpg,720,1280,2,634,376,1153,708 -CHESS_OFFICE_T_H_frame_2535_jpg.rf.bce62293ba85f1acd1385ed4a6e4d454.jpg,720,1280,1,177,614,400,713 -CHESS_OFFICE_T_H_frame_2535_jpg.rf.bce62293ba85f1acd1385ed4a6e4d454.jpg,720,1280,2,394,627,593,716 -CHESS_LIVINGROOM_T_H_frame_2211_jpg.rf.bcf1d8e62713fcd5e5c77cd450c526e4.jpg,720,1280,2,396,61,923,374 -JENGA_OFFICE_H_T_frame_0165_jpg.rf.bd2241e11a33d946d161600fc4aeb9cd.jpg,720,1280,2,687,676,834,715 -CARDS_COURTYARD_S_H_frame_2206_jpg.rf.bd41e4e89ba6b9936369d9692067f6b6.jpg,720,1280,1,1,443,213,714 -PUZZLE_OFFICE_S_T_frame_0722_jpg.rf.bd582b88ac2fa45c086bb088e7e9c358.jpg,720,1280,1,1,625,148,710 -PUZZLE_COURTYARD_H_T_frame_1947_jpg.rf.bd5b768a35b44050e25402efc6068fc6.jpg,720,1280,1,164,606,420,717 -PUZZLE_COURTYARD_H_T_frame_1947_jpg.rf.bd5b768a35b44050e25402efc6068fc6.jpg,720,1280,2,725,518,951,714 -PUZZLE_COURTYARD_H_T_frame_1005_jpg.rf.bd7dce52694d218c6be7ebc4dcdcd522.jpg,720,1280,1,73,540,452,718 -PUZZLE_COURTYARD_H_T_frame_1005_jpg.rf.bd7dce52694d218c6be7ebc4dcdcd522.jpg,720,1280,2,539,631,774,717 -JENGA_OFFICE_T_H_frame_2470_jpg.rf.bdcf1bbe8622a0e5600bd1df096582c7.jpg,720,1280,1,351,710,381,717 -JENGA_OFFICE_T_H_frame_2470_jpg.rf.bdcf1bbe8622a0e5600bd1df096582c7.jpg,720,1280,2,483,679,602,718 -PUZZLE_COURTYARD_B_S_frame_1612_jpg.rf.bd9a906900a8b01b56feb6dfee68d9f1.jpg,720,1280,1,325,573,481,719 -PUZZLE_COURTYARD_B_S_frame_1612_jpg.rf.bd9a906900a8b01b56feb6dfee68d9f1.jpg,720,1280,2,653,553,894,719 -PUZZLE_LIVINGROOM_S_H_frame_1754_jpg.rf.bde27ac68a5a6676da7d37819f8af669.jpg,720,1280,2,480,591,849,718 -CARDS_LIVINGROOM_T_B_frame_0068_jpg.rf.bdf82b6406d6bc3776b6420e7daf8f03.jpg,720,1280,2,460,177,984,653 -CHESS_OFFICE_S_B_frame_0230_jpg.rf.be28b3a44f1bfd79c20303f849920dd3.jpg,720,1280,1,7,500,435,719 -CARDS_COURTYARD_T_B_frame_0450_jpg.rf.be402247069e8c38315ce5d74f84b38f.jpg,720,1280,1,142,601,435,718 -CARDS_COURTYARD_T_B_frame_0450_jpg.rf.be402247069e8c38315ce5d74f84b38f.jpg,720,1280,2,536,577,800,718 -JENGA_COURTYARD_H_B_frame_1174_jpg.rf.be5385eb80cf00d21f5d13b5cf371973.jpg,720,1280,2,493,0,653,114 -CHESS_COURTYARD_B_T_frame_2397_jpg.rf.be564b4e6aa04e6a91c4b99b5897100e.jpg,720,1280,2,942,687,1095,718 -PUZZLE_LIVINGROOM_B_T_frame_2567_jpg.rf.be755ff1cc948bde65a4a8cfa50efec0.jpg,720,1280,2,891,538,1277,713 -CHESS_COURTYARD_S_H_frame_2138_jpg.rf.be61eb21349cbab1757cc0f4477c01cd.jpg,720,1280,2,585,475,1015,718 -PUZZLE_OFFICE_T_S_frame_0876_jpg.rf.be7d6a4017b075b8e42a6cb56b45deb0.jpg,720,1280,1,14,540,315,712 -PUZZLE_OFFICE_T_S_frame_0876_jpg.rf.be7d6a4017b075b8e42a6cb56b45deb0.jpg,720,1280,2,554,467,802,711 -PUZZLE_OFFICE_S_T_frame_2666_jpg.rf.be80e4b07a8825727ac662950a8c1794.jpg,720,1280,2,910,605,1223,716 -CARDS_LIVINGROOM_T_B_frame_2076_jpg.rf.bea609fcf0e043d9cba206c36045e6c4.jpg,720,1280,2,414,613,689,719 -CHESS_LIVINGROOM_H_T_frame_1220_jpg.rf.bee540c3bc3c2a9d5e05963e1cd107dd.jpg,720,1280,1,1,591,224,716 -CHESS_LIVINGROOM_H_T_frame_1220_jpg.rf.bee540c3bc3c2a9d5e05963e1cd107dd.jpg,720,1280,2,1042,593,1279,718 -JENGA_OFFICE_H_T_frame_2571_jpg.rf.bee94299662f63657a1b4a295a8dcafc.jpg,720,1280,1,105,697,150,716 -JENGA_OFFICE_H_T_frame_2571_jpg.rf.bee94299662f63657a1b4a295a8dcafc.jpg,720,1280,2,698,111,906,332 -PUZZLE_COURTYARD_T_H_frame_2267_jpg.rf.beee123b108a564dba4a7b6b2108c241.jpg,720,1280,1,1,273,482,718 -PUZZLE_COURTYARD_T_H_frame_2267_jpg.rf.beee123b108a564dba4a7b6b2108c241.jpg,720,1280,2,410,34,802,405 -PUZZLE_OFFICE_B_H_frame_2551_jpg.rf.bef11a66c53d749cf953a506445ab91f.jpg,720,1280,1,63,644,327,715 -PUZZLE_OFFICE_B_H_frame_2551_jpg.rf.bef11a66c53d749cf953a506445ab91f.jpg,720,1280,2,758,372,1105,680 -CARDS_LIVINGROOM_H_S_frame_2009_jpg.rf.bef90d2860c18268b395afc77b086d74.jpg,720,1280,2,553,580,849,719 -PUZZLE_LIVINGROOM_S_H_frame_1453_jpg.rf.bf78e97c5c80929e332ee9b8d525e41d.jpg,720,1280,2,533,655,741,718 -JENGA_COURTYARD_H_B_frame_2378_jpg.rf.bf80663d5d2f0c27b4bcbfa5b2b35329.jpg,720,1280,1,224,699,300,718 -JENGA_COURTYARD_H_B_frame_2378_jpg.rf.bf80663d5d2f0c27b4bcbfa5b2b35329.jpg,720,1280,2,724,623,965,716 -PUZZLE_COURTYARD_H_T_frame_0337_jpg.rf.bf8612dce0b1e102ef9dc4fc89a79f4b.jpg,720,1280,1,325,589,592,713 -PUZZLE_COURTYARD_H_T_frame_0337_jpg.rf.bf8612dce0b1e102ef9dc4fc89a79f4b.jpg,720,1280,2,792,485,1002,655 -CHESS_OFFICE_T_H_frame_1391_jpg.rf.bf9251246c77ba3bc0765abad95aa6a3.jpg,720,1280,2,633,534,881,708 -CHESS_LIVINGROOM_H_T_frame_0588_jpg.rf.bf8c87660d1ef6f1ec47b5626ed573ea.jpg,720,1280,1,1,568,245,718 -CHESS_LIVINGROOM_H_T_frame_0588_jpg.rf.bf8c87660d1ef6f1ec47b5626ed573ea.jpg,720,1280,2,1044,553,1279,718 -JENGA_OFFICE_T_H_frame_2583_jpg.rf.bf9759355ffa96636a71ea74174d158d.jpg,720,1280,1,3,259,236,575 -JENGA_COURTYARD_S_T_frame_2014_jpg.rf.bfa98c895fc79e2977083ffd8334682e.jpg,720,1280,2,463,305,932,712 -CARDS_LIVINGROOM_H_S_frame_1557_jpg.rf.bfb82ac0296a7946c5137c2170c9c133.jpg,720,1280,1,332,626,438,719 -CARDS_LIVINGROOM_H_S_frame_1557_jpg.rf.bfb82ac0296a7946c5137c2170c9c133.jpg,720,1280,2,941,421,1149,711 -PUZZLE_LIVINGROOM_T_B_frame_1672_jpg.rf.bfba585f18a7cfcf5f853d34c2b240a6.jpg,720,1280,1,1,391,222,718 -PUZZLE_LIVINGROOM_T_B_frame_1672_jpg.rf.bfba585f18a7cfcf5f853d34c2b240a6.jpg,720,1280,2,296,242,932,597 -JENGA_OFFICE_H_T_frame_1978_jpg.rf.bfcaca9d44b3196f213cf9fdb31757ed.jpg,720,1280,1,342,224,572,592 -JENGA_OFFICE_H_T_frame_1978_jpg.rf.bfcaca9d44b3196f213cf9fdb31757ed.jpg,720,1280,2,563,296,858,621 -PUZZLE_OFFICE_T_S_frame_0301_jpg.rf.bfcfc3899b24b3d3b5e5e891408b2355.jpg,720,1280,1,68,423,489,719 -PUZZLE_OFFICE_T_S_frame_0301_jpg.rf.bfcfc3899b24b3d3b5e5e891408b2355.jpg,720,1280,2,650,439,944,718 -PUZZLE_LIVINGROOM_B_T_frame_1096_jpg.rf.bfd34108e22f5ddf022e0eb4ce3dd6fc.jpg,720,1280,1,2,584,165,712 -PUZZLE_LIVINGROOM_B_T_frame_1096_jpg.rf.bfd34108e22f5ddf022e0eb4ce3dd6fc.jpg,720,1280,2,414,561,1076,719 -PUZZLE_LIVINGROOM_H_S_frame_0105_jpg.rf.bff39188e0af2d8596d7c69ff3c7d6be.jpg,720,1280,2,622,586,914,717 -JENGA_LIVINGROOM_S_T_frame_0423_jpg.rf.c00997ffac7f0773ab7e7c8fae1f6502.jpg,720,1280,1,94,631,421,718 -JENGA_LIVINGROOM_S_T_frame_0423_jpg.rf.c00997ffac7f0773ab7e7c8fae1f6502.jpg,720,1280,2,510,226,883,640 -CARDS_LIVINGROOM_S_H_frame_0877_jpg.rf.c0734e3efb1b7ba02ac3a63abf339527.jpg,720,1280,1,144,673,407,718 -CARDS_LIVINGROOM_S_H_frame_0877_jpg.rf.c0734e3efb1b7ba02ac3a63abf339527.jpg,720,1280,2,686,494,914,712 -JENGA_LIVINGROOM_S_T_frame_2508_jpg.rf.c07809b1a599654c3608663056dd8962.jpg,720,1280,1,1,27,546,555 -JENGA_LIVINGROOM_S_T_frame_2508_jpg.rf.c07809b1a599654c3608663056dd8962.jpg,720,1280,2,408,2,948,383 -PUZZLE_OFFICE_S_T_frame_0574_jpg.rf.c07a6cafc28fe7cf728831c164ebab97.jpg,720,1280,1,76,535,412,717 -PUZZLE_OFFICE_S_T_frame_0574_jpg.rf.c07a6cafc28fe7cf728831c164ebab97.jpg,720,1280,2,539,524,786,716 -CARDS_COURTYARD_H_S_frame_0266_jpg.rf.c0932fb204d3dc483dc31eace7c7d281.jpg,720,1280,1,300,669,393,719 -CARDS_COURTYARD_H_S_frame_0266_jpg.rf.c0932fb204d3dc483dc31eace7c7d281.jpg,720,1280,2,577,516,890,719 -JENGA_OFFICE_B_S_frame_1997_jpg.rf.c09ae513a73964bc2b2e609a2cbd7952.jpg,720,1280,2,816,665,1014,714 -CARDS_LIVINGROOM_T_B_frame_1994_jpg.rf.c09ed1dca9a6b644de39ae74932fe96b.jpg,720,1280,1,4,668,68,719 -CARDS_LIVINGROOM_T_B_frame_1994_jpg.rf.c09ed1dca9a6b644de39ae74932fe96b.jpg,720,1280,2,500,645,768,719 -JENGA_LIVINGROOM_H_B_frame_0399_jpg.rf.c0bad0185b97d6d416e95f56a37fe448.jpg,720,1280,2,572,209,836,518 -PUZZLE_LIVINGROOM_H_S_frame_2387_jpg.rf.c0c9c460b0778f43ee6623a787b5d0e0.jpg,720,1280,1,91,480,412,708 -PUZZLE_LIVINGROOM_H_S_frame_2387_jpg.rf.c0c9c460b0778f43ee6623a787b5d0e0.jpg,720,1280,2,438,550,638,713 -CHESS_OFFICE_T_H_frame_0038_jpg.rf.c0cffbd4fb81824542b30ea9d0c66eb1.jpg,720,1280,1,259,592,481,713 -PUZZLE_COURTYARD_B_S_frame_1131_jpg.rf.c0fc180d008b585c016bfe20afd8d4a8.jpg,720,1280,1,346,665,535,716 -PUZZLE_COURTYARD_B_S_frame_1131_jpg.rf.c0fc180d008b585c016bfe20afd8d4a8.jpg,720,1280,2,536,435,867,647 -PUZZLE_COURTYARD_T_H_frame_2428_jpg.rf.c0fcb0f84bd3e6ecf2dc285ebe6586d2.jpg,720,1280,2,463,269,957,718 -PUZZLE_COURTYARD_T_H_frame_2428_jpg.rf.c0fcb0f84bd3e6ecf2dc285ebe6586d2.jpg,720,1280,1,1,313,349,718 -CARDS_LIVINGROOM_T_B_frame_1992_jpg.rf.c11b1205c494d5d544a75c03c6e61e83.jpg,720,1280,1,4,616,60,717 -CARDS_LIVINGROOM_T_B_frame_1992_jpg.rf.c11b1205c494d5d544a75c03c6e61e83.jpg,720,1280,2,454,609,735,719 -JENGA_COURTYARD_T_S_frame_0292_jpg.rf.c14ccf02bf3e79bd37eecb6fcd768870.jpg,720,1280,1,90,334,400,681 -CHESS_LIVINGROOM_B_S_frame_1966_jpg.rf.c1665681a212ed92085aea2b46050d3b.jpg,720,1280,2,647,371,1018,586 -CHESS_OFFICE_T_H_frame_0248_jpg.rf.c15b017ef3d44844cc35460f32b7eab1.jpg,720,1280,1,187,701,353,717 -CARDS_COURTYARD_H_S_frame_2016_jpg.rf.c1a52680455852a495d36f98b92b36bc.jpg,720,1280,1,165,541,467,719 -CARDS_COURTYARD_H_S_frame_2016_jpg.rf.c1a52680455852a495d36f98b92b36bc.jpg,720,1280,2,719,364,962,620 -CHESS_LIVINGROOM_B_S_frame_0724_jpg.rf.c1bbb2803a378b91522811658d260495.jpg,720,1280,2,453,435,992,717 -CHESS_COURTYARD_H_S_frame_2496_jpg.rf.c1c2126b075210afa7e9756d7e54401a.jpg,720,1280,2,540,340,744,531 -CHESS_COURTYARD_T_B_frame_0515_jpg.rf.c204031bf647b79a8d889c1ae05c258d.jpg,720,1280,1,291,700,461,718 -CHESS_COURTYARD_T_B_frame_0515_jpg.rf.c204031bf647b79a8d889c1ae05c258d.jpg,720,1280,2,853,345,1124,548 -CARDS_LIVINGROOM_B_T_frame_0751_jpg.rf.c22f0b32c2c25145071161454b45cf81.jpg,720,1280,2,675,667,817,718 -JENGA_OFFICE_T_H_frame_0479_jpg.rf.c20b922fa76c927bc18c4b253c3bcab3.jpg,720,1280,1,328,682,462,718 -JENGA_OFFICE_T_H_frame_0479_jpg.rf.c20b922fa76c927bc18c4b253c3bcab3.jpg,720,1280,2,483,694,611,719 -CARDS_LIVINGROOM_S_H_frame_0719_jpg.rf.c2304329236782384b6f4d51e71f86f4.jpg,720,1280,1,238,638,508,718 -CARDS_LIVINGROOM_S_H_frame_0719_jpg.rf.c2304329236782384b6f4d51e71f86f4.jpg,720,1280,2,518,659,741,718 -CARDS_LIVINGROOM_S_H_frame_1825_jpg.rf.c24a3a35368f6db3a4d7e84c7d53fc8c.jpg,720,1280,1,118,646,306,718 -CARDS_LIVINGROOM_S_H_frame_1825_jpg.rf.c24a3a35368f6db3a4d7e84c7d53fc8c.jpg,720,1280,2,533,635,739,718 -JENGA_LIVINGROOM_T_S_frame_0756_jpg.rf.c250fa22aa95c51f371b1f4616727847.jpg,720,1280,1,6,329,288,667 -JENGA_LIVINGROOM_T_S_frame_0756_jpg.rf.c250fa22aa95c51f371b1f4616727847.jpg,720,1280,2,548,322,930,660 -PUZZLE_LIVINGROOM_B_T_frame_0431_jpg.rf.c269f07332a219c0f1a290c84b238db9.jpg,720,1280,2,819,476,1279,715 -CHESS_LIVINGROOM_B_S_frame_0696_jpg.rf.c27194632b68966a2eb37ffbed85dac3.jpg,720,1280,2,522,458,1103,716 -CARDS_COURTYARD_H_S_frame_2662_jpg.rf.c28d4982e0a1b991e1ee24ae21b74595.jpg,720,1280,1,159,559,461,719 -CARDS_COURTYARD_H_S_frame_2662_jpg.rf.c28d4982e0a1b991e1ee24ae21b74595.jpg,720,1280,2,685,434,919,659 -CARDS_OFFICE_T_H_frame_1137_jpg.rf.c29b492c66a8b4ba0e05c4a6f6f3968f.jpg,720,1280,1,196,615,317,719 -CARDS_OFFICE_T_H_frame_1137_jpg.rf.c29b492c66a8b4ba0e05c4a6f6f3968f.jpg,720,1280,2,554,408,845,696 -PUZZLE_COURTYARD_H_T_frame_1421_jpg.rf.c2b14f3229401bd535fdd258d11d445f.jpg,720,1280,2,591,501,854,716 -CHESS_OFFICE_B_S_frame_2476_jpg.rf.c2ba9dca266629ee89db2fd77eba5ea3.jpg,720,1280,2,662,508,1080,716 -CHESS_LIVINGROOM_T_H_frame_0134_jpg.rf.c2d3191c993ee33465fe53cc57b8dc0f.jpg,720,1280,2,463,164,982,416 -JENGA_LIVINGROOM_B_H_frame_2660_jpg.rf.c2fe7114503c6240e42129ec037adcb9.jpg,720,1280,1,217,388,604,551 -PUZZLE_COURTYARD_T_H_frame_0797_jpg.rf.c30d2ab59dfa69c0d283925e0cdd0d7f.jpg,720,1280,1,1,432,461,718 -PUZZLE_COURTYARD_T_H_frame_0797_jpg.rf.c30d2ab59dfa69c0d283925e0cdd0d7f.jpg,720,1280,2,503,413,948,718 -JENGA_LIVINGROOM_B_H_frame_2046_jpg.rf.c34ad0611628660771a5618743436c9b.jpg,720,1280,2,719,666,887,719 -CARDS_OFFICE_B_S_frame_1555_jpg.rf.c352f72f96cd302b93d2534bd5334e30.jpg,720,1280,2,641,651,774,718 -JENGA_COURTYARD_B_H_frame_0044_jpg.rf.c36006e995e1d2a51db6aabf9628e641.jpg,720,1280,2,669,568,853,719 -CARDS_OFFICE_B_S_frame_1849_jpg.rf.c36fcba20cdcc32e263d2cb7ca075bd7.jpg,720,1280,2,658,647,848,718 -JENGA_LIVINGROOM_H_B_frame_2233_jpg.rf.c380c012ff04bf4dd507c94d1ea1eef5.jpg,720,1280,2,646,198,901,553 -CARDS_COURTYARD_T_B_frame_2207_jpg.rf.c39c359221b11fbb8c199df34b83b1cb.jpg,720,1280,1,275,623,493,718 -CARDS_COURTYARD_T_B_frame_2207_jpg.rf.c39c359221b11fbb8c199df34b83b1cb.jpg,720,1280,2,699,479,981,718 -CHESS_LIVINGROOM_H_T_frame_1089_jpg.rf.c3b36ebb1f2c75406f9f292dfdc2be05.jpg,720,1280,1,1,580,346,716 -CHESS_LIVINGROOM_H_T_frame_1089_jpg.rf.c3b36ebb1f2c75406f9f292dfdc2be05.jpg,720,1280,2,751,159,1226,504 -CARDS_COURTYARD_H_S_frame_0726_jpg.rf.c3cc7a4f44effa8cf39fba39f7770970.jpg,720,1280,1,209,616,467,719 -CARDS_COURTYARD_H_S_frame_0726_jpg.rf.c3cc7a4f44effa8cf39fba39f7770970.jpg,720,1280,2,319,520,776,719 -CARDS_LIVINGROOM_B_T_frame_1906_jpg.rf.c3f50bc6f09a59820656056798b28e9c.jpg,720,1280,2,669,657,834,718 -JENGA_OFFICE_S_B_frame_1780_jpg.rf.c40098872318b03664f010c2cc88c696.jpg,720,1280,1,55,377,347,696 -JENGA_OFFICE_S_B_frame_1780_jpg.rf.c40098872318b03664f010c2cc88c696.jpg,720,1280,2,689,153,1005,533 -CARDS_OFFICE_B_S_frame_2301_jpg.rf.c41de928b4b619f477ab667f9062222a.jpg,720,1280,2,825,419,1042,718 -CHESS_COURTYARD_T_B_frame_2355_jpg.rf.c42d5928ec0972a6fbcec370ca4da6f8.jpg,720,1280,1,73,667,302,717 -CHESS_COURTYARD_T_B_frame_2355_jpg.rf.c42d5928ec0972a6fbcec370ca4da6f8.jpg,720,1280,2,340,667,585,716 -JENGA_LIVINGROOM_B_H_frame_1680_jpg.rf.c42d73a08574ea9cc20585f0422b6719.jpg,720,1280,2,906,184,1274,393 -CARDS_OFFICE_H_T_frame_2084_jpg.rf.c45589987613b8bf1740a3c6fc2524df.jpg,720,1280,1,296,661,361,712 -CARDS_OFFICE_H_T_frame_2084_jpg.rf.c45589987613b8bf1740a3c6fc2524df.jpg,720,1280,2,620,504,1054,718 -JENGA_COURTYARD_T_S_frame_2205_jpg.rf.c45d9f7f8f8838feaf9395c78f5c5d09.jpg,720,1280,1,172,376,394,714 -JENGA_COURTYARD_T_S_frame_2205_jpg.rf.c45d9f7f8f8838feaf9395c78f5c5d09.jpg,720,1280,2,514,417,803,718 -CARDS_LIVINGROOM_B_T_frame_2045_jpg.rf.c46dd583e667adb4c9c94915b6993dd0.jpg,720,1280,2,565,684,709,718 -PUZZLE_OFFICE_T_S_frame_0716_jpg.rf.c4a9d03da5947eb89b7a2dc0cf57dd94.jpg,720,1280,1,64,400,453,667 -PUZZLE_OFFICE_T_S_frame_0716_jpg.rf.c4a9d03da5947eb89b7a2dc0cf57dd94.jpg,720,1280,2,463,394,756,697 -JENGA_COURTYARD_B_H_frame_0567_jpg.rf.c4c811ff9a035d9f3c7c405a22cf4741.jpg,720,1280,2,793,674,931,719 -CARDS_LIVINGROOM_S_H_frame_2473_jpg.rf.c4c9ad657866d5c8a44aec0f1b80a69f.jpg,720,1280,1,179,604,446,718 -CARDS_LIVINGROOM_S_H_frame_2473_jpg.rf.c4c9ad657866d5c8a44aec0f1b80a69f.jpg,720,1280,2,491,606,783,718 -JENGA_LIVINGROOM_T_S_frame_0917_jpg.rf.c4cfe4168080f5008313653e7a0d9b5d.jpg,720,1280,1,4,675,227,717 -JENGA_LIVINGROOM_T_S_frame_0917_jpg.rf.c4cfe4168080f5008313653e7a0d9b5d.jpg,720,1280,2,663,574,905,719 -CHESS_COURTYARD_H_S_frame_2660_jpg.rf.c4fbaba938a241e355d714bc66f2d65c.jpg,720,1280,2,781,442,1038,718 -CARDS_OFFICE_T_H_frame_2668_jpg.rf.c51347678065b1b21d63adfd6cfa97ba.jpg,720,1280,1,181,658,287,719 -CARDS_OFFICE_T_H_frame_2668_jpg.rf.c51347678065b1b21d63adfd6cfa97ba.jpg,720,1280,2,569,609,715,717 -PUZZLE_OFFICE_H_B_frame_1840_jpg.rf.c5364657e6dddb3f965e59fd2e2f5038.jpg,720,1280,1,51,580,325,713 -PUZZLE_OFFICE_H_B_frame_1840_jpg.rf.c5364657e6dddb3f965e59fd2e2f5038.jpg,720,1280,2,622,531,894,717 -PUZZLE_COURTYARD_B_S_frame_0361_jpg.rf.c57ebae3e553006a81a6fb83616aa054.jpg,720,1280,1,154,612,369,719 -PUZZLE_COURTYARD_B_S_frame_0361_jpg.rf.c57ebae3e553006a81a6fb83616aa054.jpg,720,1280,2,588,546,887,719 -PUZZLE_COURTYARD_H_T_frame_2118_jpg.rf.c583498e75ef8be9e3efff03c7a36636.jpg,720,1280,1,313,450,558,626 -PUZZLE_COURTYARD_H_T_frame_2118_jpg.rf.c583498e75ef8be9e3efff03c7a36636.jpg,720,1280,2,697,534,911,718 -CHESS_COURTYARD_H_S_frame_1621_jpg.rf.c589ec46c2090c8cbb175931384c1ceb.jpg,720,1280,2,815,321,998,478 -JENGA_COURTYARD_S_T_frame_0799_jpg.rf.c59cfff137ef0746f357caab96ec335a.jpg,720,1280,1,43,526,332,717 -JENGA_COURTYARD_S_T_frame_0799_jpg.rf.c59cfff137ef0746f357caab96ec335a.jpg,720,1280,2,521,638,738,718 -CHESS_OFFICE_S_B_frame_0708_jpg.rf.c5a11bcc1b30a301801da7dcf68206d7.jpg,720,1280,2,651,509,1075,719 -JENGA_LIVINGROOM_B_H_frame_1203_jpg.rf.c5ad59dd74a4fbbb2c346cebd119c6e6.jpg,720,1280,1,37,606,381,719 -JENGA_LIVINGROOM_B_H_frame_1203_jpg.rf.c5ad59dd74a4fbbb2c346cebd119c6e6.jpg,720,1280,2,760,535,1028,719 -JENGA_OFFICE_S_B_frame_2685_jpg.rf.c5b2fd4af9bf235dacdc57b219582396.jpg,720,1280,1,383,700,411,715 -JENGA_OFFICE_S_B_frame_2685_jpg.rf.c5b2fd4af9bf235dacdc57b219582396.jpg,720,1280,2,630,681,751,717 -PUZZLE_LIVINGROOM_S_H_frame_1476_jpg.rf.c5cdc9c8cdc3a407bee19b3f981ac0ed.jpg,720,1280,2,870,591,1201,718 -PUZZLE_COURTYARD_B_S_frame_2069_jpg.rf.c5d0c9139d4ba47fbc4a3f56cc318b2d.jpg,720,1280,1,550,542,783,716 -PUZZLE_COURTYARD_B_S_frame_2069_jpg.rf.c5d0c9139d4ba47fbc4a3f56cc318b2d.jpg,720,1280,2,751,441,1016,719 -PUZZLE_LIVINGROOM_T_B_frame_1503_jpg.rf.c5e12a10e20e9e844e2723233deb91f0.jpg,720,1280,1,1,454,416,714 -PUZZLE_LIVINGROOM_T_B_frame_1503_jpg.rf.c5e12a10e20e9e844e2723233deb91f0.jpg,720,1280,2,531,477,1249,714 -CARDS_COURTYARD_S_H_frame_1803_jpg.rf.c61a5387e67c83590339e664f20f8e85.jpg,720,1280,1,344,646,480,718 -CARDS_COURTYARD_S_H_frame_1803_jpg.rf.c61a5387e67c83590339e664f20f8e85.jpg,720,1280,2,605,663,785,718 -CARDS_OFFICE_H_T_frame_0529_jpg.rf.c61efe2b41154297c90b21315a057015.jpg,720,1280,1,171,555,472,716 -CHESS_LIVINGROOM_H_T_frame_0386_jpg.rf.c625844dc397072204e25faf603f4f07.jpg,720,1280,2,1020,559,1277,718 -CHESS_LIVINGROOM_H_T_frame_0386_jpg.rf.c625844dc397072204e25faf603f4f07.jpg,720,1280,1,0,589,225,718 -CHESS_LIVINGROOM_S_B_frame_0858_jpg.rf.c63581ed53fb1f61fa9b0220cd0a942b.jpg,720,1280,2,526,417,1106,718 -CARDS_OFFICE_T_H_frame_1431_jpg.rf.c6377915dfa0a753d6c40a3cf2160b98.jpg,720,1280,1,412,698,429,717 -CARDS_OFFICE_T_H_frame_1431_jpg.rf.c6377915dfa0a753d6c40a3cf2160b98.jpg,720,1280,2,624,611,823,719 -CHESS_COURTYARD_B_T_frame_2662_jpg.rf.c6422ab94817e545af75732b42978cd6.jpg,720,1280,2,1060,676,1242,718 -JENGA_OFFICE_S_B_frame_2510_jpg.rf.c6616bb40d882088d0aa1d0540371a7f.jpg,720,1280,2,810,340,1277,655 -PUZZLE_LIVINGROOM_T_B_frame_0696_jpg.rf.c695ce8715fe5fa32768f64416e50aa1.jpg,720,1280,1,1,537,222,716 -PUZZLE_LIVINGROOM_T_B_frame_0696_jpg.rf.c695ce8715fe5fa32768f64416e50aa1.jpg,720,1280,2,476,581,1080,716 -JENGA_OFFICE_H_T_frame_1093_jpg.rf.c6a119a6345bfcfda4dd08d8e309ab4c.jpg,720,1280,1,147,669,332,718 -JENGA_OFFICE_H_T_frame_1093_jpg.rf.c6a119a6345bfcfda4dd08d8e309ab4c.jpg,720,1280,2,759,610,968,719 -JENGA_LIVINGROOM_T_S_frame_0725_jpg.rf.c6b94fdd9f5b780a609ba841e2f66b42.jpg,720,1280,1,6,322,369,674 -JENGA_LIVINGROOM_T_S_frame_0725_jpg.rf.c6b94fdd9f5b780a609ba841e2f66b42.jpg,720,1280,2,558,321,933,654 -CHESS_OFFICE_H_T_frame_2273_jpg.rf.c6be2aea759dc207acba540a1dd03e09.jpg,720,1280,2,721,403,939,604 -CHESS_OFFICE_T_H_frame_0252_jpg.rf.c6c9abc52a7b40b157d43e362061a2c6.jpg,720,1280,1,175,701,345,718 -CARDS_LIVINGROOM_T_B_frame_2522_jpg.rf.c6d7650ed618c4cc4330e547e8b40c25.jpg,720,1280,1,1,565,72,717 -CARDS_LIVINGROOM_T_B_frame_2522_jpg.rf.c6d7650ed618c4cc4330e547e8b40c25.jpg,720,1280,2,519,537,812,713 -CHESS_LIVINGROOM_B_S_frame_0666_jpg.rf.c6e18d5cc25306bb955412cbb86498cf.jpg,720,1280,2,600,534,1004,716 -JENGA_OFFICE_H_T_frame_1071_jpg.rf.c6e5250d28faa2b5c38a311c0882aa05.jpg,720,1280,1,148,643,338,718 -JENGA_OFFICE_H_T_frame_1071_jpg.rf.c6e5250d28faa2b5c38a311c0882aa05.jpg,720,1280,2,766,591,987,716 -JENGA_COURTYARD_S_T_frame_0078_jpg.rf.c6f7dbc71aad6d5f154c818b9316467e.jpg,720,1280,1,261,561,436,717 -CARDS_COURTYARD_T_B_frame_2324_jpg.rf.c7027d6783ec212ecf5bade726898ef2.jpg,720,1280,1,249,627,390,718 -CARDS_COURTYARD_T_B_frame_2324_jpg.rf.c7027d6783ec212ecf5bade726898ef2.jpg,720,1280,2,576,582,856,717 -CHESS_COURTYARD_B_T_frame_1957_jpg.rf.c70384851d50c6476011b868684e4576.jpg,720,1280,2,765,370,936,515 -CHESS_OFFICE_T_H_frame_1067_jpg.rf.c702826a36de3d0b3869daac1489bfee.jpg,720,1280,1,105,675,284,714 -CHESS_OFFICE_T_H_frame_1067_jpg.rf.c702826a36de3d0b3869daac1489bfee.jpg,720,1280,2,370,684,540,718 -PUZZLE_OFFICE_B_H_frame_2377_jpg.rf.c7220e33a66d655e8ddf52249b0439f6.jpg,720,1280,1,150,430,508,714 -PUZZLE_OFFICE_B_H_frame_2377_jpg.rf.c7220e33a66d655e8ddf52249b0439f6.jpg,720,1280,2,542,455,796,718 -JENGA_OFFICE_B_S_frame_2142_jpg.rf.c7381b0dbcb8b2b2b74d0f1995dfada1.jpg,720,1280,2,298,90,795,458 -CARDS_OFFICE_S_B_frame_0651_jpg.rf.c75f3e36d379dad76c645d8b659a6930.jpg,720,1280,1,353,700,424,718 -CHESS_OFFICE_H_T_frame_1089_jpg.rf.c7604869b8d60f49921c26cfc9c09691.jpg,720,1280,2,514,398,726,694 -PUZZLE_LIVINGROOM_H_S_frame_0255_jpg.rf.c76477a0ddf981383967c32fbc52e9e3.jpg,720,1280,1,106,657,326,713 -CARDS_OFFICE_B_S_frame_1914_jpg.rf.c77c297103447415c6c80938d7e54bd8.jpg,720,1280,2,568,544,891,718 -JENGA_OFFICE_H_T_frame_1257_jpg.rf.c79155ea791976191293f35aa3c6e913.jpg,720,1280,2,830,684,955,717 -PUZZLE_COURTYARD_T_H_frame_0779_jpg.rf.c79e4aafb2a558bdaab56229d11b3731.jpg,720,1280,1,1,303,336,657 -PUZZLE_COURTYARD_T_H_frame_0779_jpg.rf.c79e4aafb2a558bdaab56229d11b3731.jpg,720,1280,2,478,315,934,593 -CHESS_COURTYARD_H_S_frame_0282_jpg.rf.c7ae61d11d2d9c149da79e02ae3fd959.jpg,720,1280,2,654,469,981,717 -CARDS_LIVINGROOM_T_B_frame_1653_jpg.rf.c7bfa07e889c1e060d3a1d4c58b723e7.jpg,720,1280,1,2,535,347,719 -CARDS_LIVINGROOM_T_B_frame_1653_jpg.rf.c7bfa07e889c1e060d3a1d4c58b723e7.jpg,720,1280,2,596,641,814,715 -JENGA_OFFICE_S_B_frame_1423_jpg.rf.c7d375d2beec399a796d13641cd96ebe.jpg,720,1280,1,153,594,419,718 -JENGA_OFFICE_S_B_frame_1423_jpg.rf.c7d375d2beec399a796d13641cd96ebe.jpg,720,1280,2,704,467,1087,719 -CHESS_OFFICE_S_B_frame_0300_jpg.rf.c7d4d76dbc91e9626473f6a30bcb677a.jpg,720,1280,2,714,553,1144,719 -CARDS_OFFICE_H_T_frame_1849_jpg.rf.c801415ff8b60d455bd163d87aed905a.jpg,720,1280,2,675,513,1199,719 -CARDS_OFFICE_H_T_frame_1849_jpg.rf.c801415ff8b60d455bd163d87aed905a.jpg,720,1280,1,274,678,331,719 -CARDS_COURTYARD_S_H_frame_1377_jpg.rf.c8212f0c76139c98e13f00cc1330faef.jpg,720,1280,1,249,621,383,716 -PUZZLE_OFFICE_B_H_frame_0779_jpg.rf.c821f3b01f39f6b227a2b3501276479f.jpg,720,1280,1,370,460,675,704 -PUZZLE_OFFICE_B_H_frame_0779_jpg.rf.c821f3b01f39f6b227a2b3501276479f.jpg,720,1280,2,1158,399,1279,702 -JENGA_OFFICE_B_S_frame_1951_jpg.rf.c8704d53a6f867ccda3092ce97b1a531.jpg,720,1280,2,635,37,1051,526 -CARDS_LIVINGROOM_S_H_frame_1145_jpg.rf.c88de22d95a52deda6c752d28cd9a310.jpg,720,1280,1,149,587,376,718 -CARDS_LIVINGROOM_T_B_frame_0939_jpg.rf.c89e9587cb9d8b6887432eb7ad05c4d1.jpg,720,1280,1,72,705,128,719 -CARDS_LIVINGROOM_T_B_frame_0939_jpg.rf.c89e9587cb9d8b6887432eb7ad05c4d1.jpg,720,1280,2,516,479,1068,719 -CARDS_COURTYARD_T_B_frame_2586_jpg.rf.c8a385dc506988cb95e9a2dd572f1d48.jpg,720,1280,1,214,654,317,718 -CARDS_COURTYARD_T_B_frame_2586_jpg.rf.c8a385dc506988cb95e9a2dd572f1d48.jpg,720,1280,2,674,462,920,671 -JENGA_LIVINGROOM_S_T_frame_0003_jpg.rf.c8a5a6a626e1eade74c036d774d1dbec.jpg,720,1280,1,173,627,455,718 -JENGA_LIVINGROOM_S_T_frame_0003_jpg.rf.c8a5a6a626e1eade74c036d774d1dbec.jpg,720,1280,2,639,663,838,718 -JENGA_LIVINGROOM_H_B_frame_2317_jpg.rf.c8c18393446febf9ce075182b809ce60.jpg,720,1280,2,568,131,911,289 -PUZZLE_COURTYARD_T_H_frame_1968_jpg.rf.c8cab4e869d40a74c9d29ca4837fa012.jpg,720,1280,2,592,89,1160,474 -JENGA_OFFICE_B_S_frame_0012_jpg.rf.c8ccf0e1eeed4f8112dafb4fff67891b.jpg,720,1280,1,142,594,361,716 -JENGA_OFFICE_B_S_frame_0012_jpg.rf.c8ccf0e1eeed4f8112dafb4fff67891b.jpg,720,1280,2,734,631,912,716 -CHESS_LIVINGROOM_T_H_frame_0420_jpg.rf.c8ce68339410d7608e33eb8b11418df8.jpg,720,1280,1,1,232,389,537 -CHESS_LIVINGROOM_T_H_frame_0420_jpg.rf.c8ce68339410d7608e33eb8b11418df8.jpg,720,1280,2,550,686,843,719 -CARDS_OFFICE_S_B_frame_0332_jpg.rf.c8d29d019c1cbe1bf16256c746de7342.jpg,720,1280,1,286,325,499,671 -CARDS_OFFICE_S_B_frame_0332_jpg.rf.c8d29d019c1cbe1bf16256c746de7342.jpg,720,1280,2,555,386,798,710 -CHESS_OFFICE_B_S_frame_0657_jpg.rf.c8d172d4537349f012a75a95857b678a.jpg,720,1280,2,649,413,872,600 -PUZZLE_OFFICE_T_S_frame_2347_jpg.rf.c8dcd3a2dbf9b226f46ea83e3a397945.jpg,720,1280,1,289,545,564,708 -PUZZLE_OFFICE_T_S_frame_2347_jpg.rf.c8dcd3a2dbf9b226f46ea83e3a397945.jpg,720,1280,2,854,589,1063,711 -JENGA_OFFICE_H_T_frame_1157_jpg.rf.c8e4fc1c5c06ede8aa2c1687409103f5.jpg,720,1280,1,210,701,327,718 -JENGA_OFFICE_H_T_frame_1157_jpg.rf.c8e4fc1c5c06ede8aa2c1687409103f5.jpg,720,1280,2,774,648,949,715 -PUZZLE_LIVINGROOM_T_B_frame_1661_jpg.rf.c8f747758d84a40aca1cbcc1ad6539c1.jpg,720,1280,1,7,462,282,717 -PUZZLE_LIVINGROOM_T_B_frame_1661_jpg.rf.c8f747758d84a40aca1cbcc1ad6539c1.jpg,720,1280,2,335,297,1158,718 -PUZZLE_COURTYARD_S_B_frame_0050_jpg.rf.c908999e7bf910d2f0fa01bdb882de0d.jpg,720,1280,1,300,660,525,717 -PUZZLE_COURTYARD_S_B_frame_0050_jpg.rf.c908999e7bf910d2f0fa01bdb882de0d.jpg,720,1280,2,596,664,783,718 -CHESS_OFFICE_S_B_frame_1319_jpg.rf.c90cbf56d239897437d153b0c05d6833.jpg,720,1280,1,69,634,383,719 -CHESS_OFFICE_S_B_frame_1319_jpg.rf.c90cbf56d239897437d153b0c05d6833.jpg,720,1280,2,729,693,921,719 -CARDS_COURTYARD_B_T_frame_1379_jpg.rf.c9107636ebc83effcff32a9fbe14b00e.jpg,720,1280,1,251,531,472,692 -CARDS_COURTYARD_B_T_frame_1379_jpg.rf.c9107636ebc83effcff32a9fbe14b00e.jpg,720,1280,2,693,636,843,718 -PUZZLE_COURTYARD_S_B_frame_1403_jpg.rf.c918c7b3565b3d142b32a49d321dc72f.jpg,720,1280,2,663,600,967,718 -PUZZLE_LIVINGROOM_T_B_frame_2499_jpg.rf.c92c28265f53c8091ea1645e8207a263.jpg,720,1280,1,5,514,238,702 -PUZZLE_LIVINGROOM_T_B_frame_2499_jpg.rf.c92c28265f53c8091ea1645e8207a263.jpg,720,1280,2,481,391,1054,712 -JENGA_LIVINGROOM_T_S_frame_0925_jpg.rf.c926a792abc7e21a834e7a0837ad586e.jpg,720,1280,1,3,695,197,717 -JENGA_LIVINGROOM_T_S_frame_0925_jpg.rf.c926a792abc7e21a834e7a0837ad586e.jpg,720,1280,2,675,583,914,719 -CHESS_OFFICE_S_B_frame_1476_jpg.rf.c92e7dedd3f93c5a1cdb675625e41eef.jpg,720,1280,1,10,487,441,718 -PUZZLE_COURTYARD_H_T_frame_1711_jpg.rf.c953e4a80b1d73a9f9317bddb8426f2c.jpg,720,1280,2,624,560,893,717 -JENGA_LIVINGROOM_S_T_frame_0847_jpg.rf.c965d0b1d3f93849786676af36c5ea91.jpg,720,1280,1,156,678,380,718 -JENGA_LIVINGROOM_S_T_frame_0847_jpg.rf.c965d0b1d3f93849786676af36c5ea91.jpg,720,1280,2,645,638,868,718 -PUZZLE_COURTYARD_S_B_frame_0899_jpg.rf.c9576aa05b99633e22328b7bba8db499.jpg,720,1280,1,2,643,240,718 -CARDS_LIVINGROOM_B_T_frame_2028_jpg.rf.c96a8ad27a853b485ea8c5e837c656c6.jpg,720,1280,2,620,701,688,718 -CHESS_LIVINGROOM_H_T_frame_1510_jpg.rf.c9a44ba6c1875f894440af06d15017b2.jpg,720,1280,1,5,665,221,718 -CHESS_LIVINGROOM_H_T_frame_1510_jpg.rf.c9a44ba6c1875f894440af06d15017b2.jpg,720,1280,2,285,457,868,718 -CARDS_OFFICE_B_S_frame_1332_jpg.rf.c9c7b0893513f8c6fe617b47eb45133f.jpg,720,1280,1,393,692,427,718 -CARDS_OFFICE_B_S_frame_1332_jpg.rf.c9c7b0893513f8c6fe617b47eb45133f.jpg,720,1280,2,719,609,910,717 -JENGA_OFFICE_S_B_frame_1747_jpg.rf.c9ca3c408d733e4d85de744de8a9d2a5.jpg,720,1280,2,337,214,569,523 -PUZZLE_COURTYARD_H_T_frame_2525_jpg.rf.c9cdd0dc6f63250dc5d745552c0f7fb9.jpg,720,1280,1,39,516,304,718 -PUZZLE_COURTYARD_H_T_frame_2525_jpg.rf.c9cdd0dc6f63250dc5d745552c0f7fb9.jpg,720,1280,2,602,507,814,714 -CHESS_COURTYARD_H_S_frame_1145_jpg.rf.c9d689dc1d33072e68f8b3b231b7c564.jpg,720,1280,2,803,617,1033,717 -CARDS_COURTYARD_T_B_frame_1924_jpg.rf.c9e0e10b43f4982aa193b403277eb703.jpg,720,1280,1,266,704,335,717 -CARDS_COURTYARD_T_B_frame_1924_jpg.rf.c9e0e10b43f4982aa193b403277eb703.jpg,720,1280,2,486,472,748,689 -JENGA_OFFICE_H_T_frame_1816_jpg.rf.ca13fcd68e1655d8133cccfc74f6b05d.jpg,720,1280,1,255,375,416,697 -JENGA_OFFICE_H_T_frame_1816_jpg.rf.ca13fcd68e1655d8133cccfc74f6b05d.jpg,720,1280,2,447,345,725,665 -CHESS_COURTYARD_T_B_frame_2067_jpg.rf.ca1769249807efa16cdfe0467a6ed59b.jpg,720,1280,1,1,625,115,716 -CHESS_COURTYARD_T_B_frame_2067_jpg.rf.ca1769249807efa16cdfe0467a6ed59b.jpg,720,1280,2,641,355,1014,593 -CHESS_LIVINGROOM_T_H_frame_1994_jpg.rf.ca19db9921cbcbef8e35f2171428d024.jpg,720,1280,1,2,336,63,558 -CHESS_LIVINGROOM_T_H_frame_1994_jpg.rf.ca19db9921cbcbef8e35f2171428d024.jpg,720,1280,2,734,445,1151,718 -CHESS_COURTYARD_S_H_frame_2226_jpg.rf.ca59d7dcfa2930794726c2e05ae45b90.jpg,720,1280,1,86,572,408,717 -CHESS_COURTYARD_S_H_frame_2226_jpg.rf.ca59d7dcfa2930794726c2e05ae45b90.jpg,720,1280,2,598,615,881,716 -JENGA_OFFICE_T_H_frame_1033_jpg.rf.ca5bc9a6f9636c4a188807f181ef675f.jpg,720,1280,2,504,492,764,714 -JENGA_LIVINGROOM_S_T_frame_2201_jpg.rf.ca7f8d3ccf2acda1a7dbbfeee064f328.jpg,720,1280,2,694,695,806,718 -JENGA_LIVINGROOM_S_T_frame_2201_jpg.rf.ca7f8d3ccf2acda1a7dbbfeee064f328.jpg,720,1280,1,330,699,442,718 -CARDS_COURTYARD_H_S_frame_1939_jpg.rf.ca88977d5df4d1aaafc44c38a07ba86e.jpg,720,1280,1,126,583,413,719 -CARDS_COURTYARD_H_S_frame_1939_jpg.rf.ca88977d5df4d1aaafc44c38a07ba86e.jpg,720,1280,2,571,325,970,610 -CHESS_COURTYARD_T_B_frame_2294_jpg.rf.caa5b2addea0cfc722dc5305e9ffd72e.jpg,720,1280,1,13,702,183,718 -CHESS_COURTYARD_T_B_frame_2294_jpg.rf.caa5b2addea0cfc722dc5305e9ffd72e.jpg,720,1280,2,778,380,992,560 -PUZZLE_LIVINGROOM_S_H_frame_2071_jpg.rf.cab3be8ea3c6d844b0cadd0fa3cb713d.jpg,720,1280,2,535,652,836,714 -JENGA_OFFICE_T_H_frame_0328_jpg.rf.caed9cc27c47a220085b338c57e49680.jpg,720,1280,1,218,272,478,622 -JENGA_OFFICE_T_H_frame_0328_jpg.rf.caed9cc27c47a220085b338c57e49680.jpg,720,1280,2,450,174,776,386 -JENGA_COURTYARD_B_H_frame_1734_jpg.rf.caf3ff0c43c5c3181538ebeb8760e23b.jpg,720,1280,1,259,550,450,718 -JENGA_COURTYARD_B_H_frame_1734_jpg.rf.caf3ff0c43c5c3181538ebeb8760e23b.jpg,720,1280,2,706,457,1026,716 -PUZZLE_OFFICE_T_S_frame_1506_jpg.rf.caf5fe56c8a47f318dae9bb092b88851.jpg,720,1280,1,3,439,304,714 -PUZZLE_OFFICE_T_S_frame_1506_jpg.rf.caf5fe56c8a47f318dae9bb092b88851.jpg,720,1280,2,606,507,1012,719 -CARDS_COURTYARD_T_B_frame_1892_jpg.rf.cb0083dd8b1fd7620da39ab3509b30ce.jpg,720,1280,1,134,669,221,718 -CARDS_COURTYARD_T_B_frame_1892_jpg.rf.cb0083dd8b1fd7620da39ab3509b30ce.jpg,720,1280,2,605,532,886,716 -JENGA_LIVINGROOM_B_H_frame_1548_jpg.rf.cb2cb8a780f4c767faaaf7f3ff305f11.jpg,720,1280,1,96,464,465,717 -JENGA_LIVINGROOM_B_H_frame_1548_jpg.rf.cb2cb8a780f4c767faaaf7f3ff305f11.jpg,720,1280,2,928,429,1274,719 -PUZZLE_COURTYARD_H_T_frame_0197_jpg.rf.cb342ec8c908e3edc6754a7f8692e2a3.jpg,720,1280,1,221,673,336,718 -PUZZLE_COURTYARD_H_T_frame_0197_jpg.rf.cb342ec8c908e3edc6754a7f8692e2a3.jpg,720,1280,2,552,439,725,646 -JENGA_COURTYARD_H_B_frame_1028_jpg.rf.cb3ecc6148652efa9169cb312657b003.jpg,720,1280,2,508,254,743,616 -CARDS_OFFICE_B_S_frame_1015_jpg.rf.cb4d3b458f8923fec0e2da4fc3b06691.jpg,720,1280,1,399,656,488,718 -CARDS_OFFICE_B_S_frame_1015_jpg.rf.cb4d3b458f8923fec0e2da4fc3b06691.jpg,720,1280,2,658,677,737,717 -CHESS_OFFICE_B_S_frame_0204_jpg.rf.cb3f1df225243d769c2a3d2aa5f4ab04.jpg,720,1280,2,695,635,902,718 -CHESS_OFFICE_T_H_frame_0898_jpg.rf.cb4fa9a54b6b76dcbf4e04add9c2fb0d.jpg,720,1280,1,57,524,354,718 -CHESS_OFFICE_T_H_frame_0898_jpg.rf.cb4fa9a54b6b76dcbf4e04add9c2fb0d.jpg,720,1280,2,515,609,783,716 -CARDS_LIVINGROOM_S_H_frame_1625_jpg.rf.cb66c6b9c5374e4d6153302974ebd833.jpg,720,1280,1,183,661,325,718 -CARDS_LIVINGROOM_S_H_frame_1625_jpg.rf.cb66c6b9c5374e4d6153302974ebd833.jpg,720,1280,2,620,661,751,718 -CHESS_LIVINGROOM_H_T_frame_2070_jpg.rf.cb734a96d2b692646a22a82999215713.jpg,720,1280,1,1,559,226,716 -CHESS_LIVINGROOM_H_T_frame_2070_jpg.rf.cb734a96d2b692646a22a82999215713.jpg,720,1280,2,993,407,1279,667 -CARDS_OFFICE_H_T_frame_1733_jpg.rf.cb9df5378f0bb361f09d09333207d81a.jpg,720,1280,2,758,468,1048,705 -PUZZLE_OFFICE_T_S_frame_1243_jpg.rf.cbaa5ee05056e431858eff5799bffa7c.jpg,720,1280,1,0,557,163,719 -PUZZLE_OFFICE_T_S_frame_1243_jpg.rf.cbaa5ee05056e431858eff5799bffa7c.jpg,720,1280,2,641,633,839,719 -PUZZLE_OFFICE_H_B_frame_0082_jpg.rf.cbeb983368a961ecb1aa3a511535360b.jpg,720,1280,1,99,572,345,714 -PUZZLE_OFFICE_B_H_frame_1122_jpg.rf.cbecffc17752d520d59ecde34a73332a.jpg,720,1280,2,603,543,916,716 -CHESS_OFFICE_S_B_frame_0813_jpg.rf.cbef00aa7e4927cb042798a7ec605fbb.jpg,720,1280,2,673,293,1118,681 -CHESS_OFFICE_T_H_frame_1997_jpg.rf.cbf75491f5f24f5b8116249b2d0c7896.jpg,720,1280,1,106,588,342,716 -CHESS_OFFICE_T_H_frame_1997_jpg.rf.cbf75491f5f24f5b8116249b2d0c7896.jpg,720,1280,2,308,617,564,718 -PUZZLE_OFFICE_B_H_frame_0472_jpg.rf.cc2439b4817bfdc807fd4774c3936620.jpg,720,1280,1,64,457,396,712 -PUZZLE_OFFICE_B_H_frame_0472_jpg.rf.cc2439b4817bfdc807fd4774c3936620.jpg,720,1280,2,660,279,894,577 -PUZZLE_LIVINGROOM_H_S_frame_2327_jpg.rf.cc26f078533aede43ccefd205d2e748d.jpg,720,1280,1,76,581,436,719 -PUZZLE_LIVINGROOM_H_S_frame_2327_jpg.rf.cc26f078533aede43ccefd205d2e748d.jpg,720,1280,2,524,587,803,713 -CHESS_OFFICE_H_T_frame_1508_jpg.rf.cc2b4c17dde55143ef801b23d7678774.jpg,720,1280,2,654,365,1018,622 -JENGA_LIVINGROOM_T_S_frame_0549_jpg.rf.cc42a58700f0d28da51a083d27d1f215.jpg,720,1280,1,60,406,374,676 -JENGA_LIVINGROOM_T_S_frame_0549_jpg.rf.cc42a58700f0d28da51a083d27d1f215.jpg,720,1280,2,679,542,969,718 -PUZZLE_OFFICE_B_H_frame_0356_jpg.rf.cc4874330c5f5b76f1be9c9a708aa8c7.jpg,720,1280,2,562,657,841,712 -CARDS_OFFICE_T_H_frame_1489_jpg.rf.cc8395b5742702832ca3896a009e1cec.jpg,720,1280,1,226,690,257,719 -CARDS_OFFICE_T_H_frame_1489_jpg.rf.cc8395b5742702832ca3896a009e1cec.jpg,720,1280,2,353,412,537,584 -CHESS_COURTYARD_T_B_frame_1442_jpg.rf.cc98ab5153a2d542e883bc272c4ad920.jpg,720,1280,1,16,651,276,718 -CHESS_COURTYARD_T_B_frame_1442_jpg.rf.cc98ab5153a2d542e883bc272c4ad920.jpg,720,1280,2,400,671,581,716 -JENGA_LIVINGROOM_S_T_frame_0919_jpg.rf.ccaee2b84258c82d90b6f39bf9ecbf9c.jpg,720,1280,1,1,494,423,718 -JENGA_LIVINGROOM_S_T_frame_0919_jpg.rf.ccaee2b84258c82d90b6f39bf9ecbf9c.jpg,720,1280,2,590,250,942,578 -CHESS_COURTYARD_H_S_frame_2182_jpg.rf.ccb187615b0f6aa1056c96981d7b4126.jpg,720,1280,2,861,567,1125,713 -CARDS_COURTYARD_T_B_frame_1239_jpg.rf.ccba14e269086a71fdcda9657baac751.jpg,720,1280,1,253,606,486,718 -CARDS_COURTYARD_T_B_frame_1239_jpg.rf.ccba14e269086a71fdcda9657baac751.jpg,720,1280,2,649,572,912,718 -CARDS_LIVINGROOM_H_S_frame_2174_jpg.rf.ccd15295e8467e36bb967c11cdd0f57d.jpg,720,1280,2,586,565,920,719 -JENGA_COURTYARD_H_B_frame_0228_jpg.rf.ccf3bf3fdd52eb9df9f834d33ad11abc.jpg,720,1280,2,594,457,870,718 -CHESS_LIVINGROOM_T_H_frame_2516_jpg.rf.ccfb85742c91145bbc611d8f6223b0d4.jpg,720,1280,1,5,361,119,570 -CHESS_LIVINGROOM_T_H_frame_2516_jpg.rf.ccfb85742c91145bbc611d8f6223b0d4.jpg,720,1280,2,611,457,1093,719 -CARDS_COURTYARD_H_S_frame_1514_jpg.rf.cd0c0ac69d122e1803f33945147c62e7.jpg,720,1280,1,244,605,432,719 -CARDS_COURTYARD_H_S_frame_1514_jpg.rf.cd0c0ac69d122e1803f33945147c62e7.jpg,720,1280,2,547,464,954,719 -CHESS_LIVINGROOM_S_B_frame_1962_jpg.rf.cd2422f7abfc8af15a6ff036604b86da.jpg,720,1280,1,170,684,294,714 -CHESS_LIVINGROOM_S_B_frame_1962_jpg.rf.cd2422f7abfc8af15a6ff036604b86da.jpg,720,1280,2,920,584,1194,718 -JENGA_OFFICE_H_T_frame_0363_jpg.rf.cd6063e649e3621c2f4fa3ed19ac5951.jpg,720,1280,2,711,701,823,719 -CARDS_OFFICE_H_T_frame_0846_jpg.rf.cd6657d894dcd9d3d62e4a578c3c3d94.jpg,720,1280,1,296,614,510,718 -CARDS_OFFICE_H_T_frame_0846_jpg.rf.cd6657d894dcd9d3d62e4a578c3c3d94.jpg,720,1280,2,726,636,912,716 -PUZZLE_LIVINGROOM_T_B_frame_0658_jpg.rf.cd8d6e0ba30564cf47ec461309031419.jpg,720,1280,1,2,658,100,717 -PUZZLE_LIVINGROOM_T_B_frame_0658_jpg.rf.cd8d6e0ba30564cf47ec461309031419.jpg,720,1280,2,617,468,1147,718 -CARDS_LIVINGROOM_S_H_frame_2585_jpg.rf.cd8f76c4e7c09520061ca6c354867535.jpg,720,1280,1,200,674,357,718 -CARDS_LIVINGROOM_S_H_frame_2585_jpg.rf.cd8f76c4e7c09520061ca6c354867535.jpg,720,1280,2,605,693,734,718 -PUZZLE_COURTYARD_S_B_frame_1784_jpg.rf.cdd6b8be385ec844356e8cc73e060565.jpg,720,1280,1,3,582,147,717 -PUZZLE_COURTYARD_S_B_frame_1784_jpg.rf.cdd6b8be385ec844356e8cc73e060565.jpg,720,1280,2,679,464,1063,718 -CARDS_OFFICE_S_B_frame_0101_jpg.rf.cdf55b294059b06e363035221de13233.jpg,720,1280,1,299,632,406,718 -CHESS_OFFICE_T_H_frame_1757_jpg.rf.ce65364689992f295f8f05258e205b61.jpg,720,1280,1,162,636,370,714 -CHESS_OFFICE_T_H_frame_1757_jpg.rf.ce65364689992f295f8f05258e205b61.jpg,720,1280,2,519,379,790,609 -PUZZLE_OFFICE_H_B_frame_0658_jpg.rf.ce59ad6cae17d885ed14366f9d8e06af.jpg,720,1280,2,656,668,812,716 -PUZZLE_COURTYARD_H_T_frame_1791_jpg.rf.ce6776742a7974d48fef7bf4c8827a4a.jpg,720,1280,2,712,450,972,651 -PUZZLE_LIVINGROOM_T_B_frame_1322_jpg.rf.ce73849a01f08e141e9f5d8a6ccba7c7.jpg,720,1280,2,572,409,1223,718 -PUZZLE_LIVINGROOM_S_H_frame_2615_jpg.rf.ce82ae52bf5eee74218122d19acb1fa7.jpg,720,1280,2,779,675,952,718 -CHESS_OFFICE_B_S_frame_2620_jpg.rf.ceabeb780fa908c2b733bb8267dce24f.jpg,720,1280,2,703,504,1066,702 -PUZZLE_LIVINGROOM_T_B_frame_1368_jpg.rf.ceb25c3d6824379ea3cef4e334453e3c.jpg,720,1280,2,608,530,1274,709 -CHESS_OFFICE_T_H_frame_1515_jpg.rf.ceecb7b35cff77057fbb0e5438f439b2.jpg,720,1280,1,203,632,418,714 -CHESS_OFFICE_T_H_frame_1515_jpg.rf.ceecb7b35cff77057fbb0e5438f439b2.jpg,720,1280,2,422,607,634,717 -CHESS_LIVINGROOM_T_H_frame_1019_jpg.rf.ced907188571dfd67ab91b94eac41a2c.jpg,720,1280,2,451,194,812,428 -PUZZLE_LIVINGROOM_S_H_frame_1368_jpg.rf.cef40a4b01c870ed23d092f2e422990e.jpg,720,1280,2,722,458,1187,718 -PUZZLE_OFFICE_B_H_frame_1371_jpg.rf.cefbea04717139e2d1d72004a624e25f.jpg,720,1280,1,2,531,99,617 -PUZZLE_OFFICE_B_H_frame_1371_jpg.rf.cefbea04717139e2d1d72004a624e25f.jpg,720,1280,2,700,484,1040,718 -PUZZLE_COURTYARD_S_B_frame_0359_jpg.rf.cf5791e571bd0ed874db4e3be27ee35d.jpg,720,1280,2,650,648,893,717 -JENGA_OFFICE_H_T_frame_1780_jpg.rf.cf351eddeb3632a3af2f6d85a66767cc.jpg,720,1280,1,303,271,462,591 -JENGA_OFFICE_H_T_frame_1780_jpg.rf.cf351eddeb3632a3af2f6d85a66767cc.jpg,720,1280,2,542,192,714,593 -CHESS_LIVINGROOM_S_B_frame_0922_jpg.rf.cf8dbab009308de81777b092e6aa3c5f.jpg,720,1280,2,525,357,1050,708 -PUZZLE_OFFICE_B_H_frame_0205_jpg.rf.cfad4e4e3913bb539c158d4d6815b457.jpg,720,1280,2,737,490,1028,711 -CARDS_COURTYARD_B_T_frame_2369_jpg.rf.cfc2fe1d59223db18a38676984b663b6.jpg,720,1280,2,660,709,713,718 -CARDS_COURTYARD_H_S_frame_1720_jpg.rf.cfd91025f3fa892e4148f3bed299669d.jpg,720,1280,2,305,430,852,719 -JENGA_OFFICE_H_T_frame_1357_jpg.rf.d002b20d94c961e1f35e97434b9c5720.jpg,720,1280,1,95,251,295,696 -JENGA_OFFICE_H_T_frame_1357_jpg.rf.d002b20d94c961e1f35e97434b9c5720.jpg,720,1280,2,668,189,880,682 -CARDS_LIVINGROOM_S_H_frame_2213_jpg.rf.d03b70e632b6bc192c8e2df0d05c4190.jpg,720,1280,1,226,589,522,718 -CARDS_LIVINGROOM_S_H_frame_2213_jpg.rf.d03b70e632b6bc192c8e2df0d05c4190.jpg,720,1280,2,575,583,859,718 -CHESS_LIVINGROOM_H_T_frame_1151_jpg.rf.cfec114cdc684341a7249d084792fc31.jpg,720,1280,1,1,546,368,718 -CHESS_LIVINGROOM_H_T_frame_1151_jpg.rf.cfec114cdc684341a7249d084792fc31.jpg,720,1280,2,480,279,813,508 -CARDS_COURTYARD_H_S_frame_2693_jpg.rf.d0624706d2acc1342c5205043dcade94.jpg,720,1280,1,190,594,465,719 -CARDS_COURTYARD_H_S_frame_2693_jpg.rf.d0624706d2acc1342c5205043dcade94.jpg,720,1280,2,728,231,1004,627 -PUZZLE_COURTYARD_T_H_frame_1552_jpg.rf.d0733a83070bf3725a47f144d79bce52.jpg,720,1280,1,3,508,264,718 -PUZZLE_COURTYARD_T_H_frame_1552_jpg.rf.d0733a83070bf3725a47f144d79bce52.jpg,720,1280,2,635,366,923,597 -PUZZLE_LIVINGROOM_H_S_frame_0821_jpg.rf.d0830afaf8eb09703ed36edc94ab54cf.jpg,720,1280,1,22,502,369,719 -PUZZLE_LIVINGROOM_H_S_frame_0821_jpg.rf.d0830afaf8eb09703ed36edc94ab54cf.jpg,720,1280,2,834,608,1270,715 -JENGA_LIVINGROOM_H_B_frame_1262_jpg.rf.d087c75183a354b088f7cb3dc92b55a7.jpg,720,1280,1,155,357,461,588 -JENGA_LIVINGROOM_H_B_frame_1262_jpg.rf.d087c75183a354b088f7cb3dc92b55a7.jpg,720,1280,2,771,407,1056,716 -PUZZLE_LIVINGROOM_B_T_frame_0575_jpg.rf.d0940801ce9f076f0b38536ad001a3e7.jpg,720,1280,1,114,404,410,580 -PUZZLE_LIVINGROOM_B_T_frame_0575_jpg.rf.d0940801ce9f076f0b38536ad001a3e7.jpg,720,1280,2,678,438,992,667 -CHESS_OFFICE_B_S_frame_2066_jpg.rf.d113381601385d8b51c380ca31655246.jpg,720,1280,2,667,396,924,570 -JENGA_LIVINGROOM_B_H_frame_2231_jpg.rf.d10154073beb77ece149109db1ff6d35.jpg,720,1280,2,845,694,966,719 -JENGA_LIVINGROOM_H_B_frame_0642_jpg.rf.d0abb3d84cbedc03304fb0690329182d.jpg,720,1280,2,575,383,893,689 -JENGA_OFFICE_H_T_frame_2380_jpg.rf.d0d3cb450f63ff9b615f4634982b133a.jpg,720,1280,1,207,63,515,291 -JENGA_OFFICE_H_T_frame_2380_jpg.rf.d0d3cb450f63ff9b615f4634982b133a.jpg,720,1280,2,605,99,959,374 -PUZZLE_LIVINGROOM_S_H_frame_0805_jpg.rf.d0a8735272ef4eae16c7a93b305b6888.jpg,720,1280,1,54,614,497,718 -PUZZLE_OFFICE_B_H_frame_1491_jpg.rf.d0e71a4fb0bca6ff29c212b8539b160b.jpg,720,1280,1,279,610,506,717 -PUZZLE_OFFICE_B_H_frame_1491_jpg.rf.d0e71a4fb0bca6ff29c212b8539b160b.jpg,720,1280,2,594,491,1165,714 -PUZZLE_COURTYARD_S_B_frame_2375_jpg.rf.d192d8b85db4115e3039888a02e3f41f.jpg,720,1280,1,390,580,617,718 -PUZZLE_COURTYARD_S_B_frame_2375_jpg.rf.d192d8b85db4115e3039888a02e3f41f.jpg,720,1280,2,614,549,853,717 -JENGA_LIVINGROOM_B_H_frame_1668_jpg.rf.d1a16ba781fd084e1f41ba471d729aea.jpg,720,1280,2,900,185,1274,414 -CARDS_LIVINGROOM_H_S_frame_1667_jpg.rf.d1cb4dc3fad19b4fcdfc1ac4797fdf86.jpg,720,1280,1,173,687,230,718 -CARDS_LIVINGROOM_H_S_frame_1667_jpg.rf.d1cb4dc3fad19b4fcdfc1ac4797fdf86.jpg,720,1280,2,709,587,995,719 -CARDS_COURTYARD_H_S_frame_1024_jpg.rf.d1bfda28b2d1bd64c8bd97ea539fdfc0.jpg,720,1280,1,304,674,506,719 -CARDS_COURTYARD_H_S_frame_1024_jpg.rf.d1bfda28b2d1bd64c8bd97ea539fdfc0.jpg,720,1280,2,752,674,849,719 -CHESS_COURTYARD_T_B_frame_0867_jpg.rf.d1da48cba4a2e7f6e45f42ef12b3fea3.jpg,720,1280,1,2,351,354,582 -CHESS_COURTYARD_T_B_frame_0867_jpg.rf.d1da48cba4a2e7f6e45f42ef12b3fea3.jpg,720,1280,2,356,662,594,718 -JENGA_LIVINGROOM_T_S_frame_1078_jpg.rf.d1d6e3c721306d55fe36efc9b04ce5ac.jpg,720,1280,2,513,440,856,699 -JENGA_LIVINGROOM_T_S_frame_1078_jpg.rf.d1d6e3c721306d55fe36efc9b04ce5ac.jpg,720,1280,1,11,688,168,719 -CARDS_OFFICE_B_S_frame_2229_jpg.rf.d1e649884ee1a3856dc2474afb22f3be.jpg,720,1280,1,319,665,393,718 -CARDS_OFFICE_B_S_frame_2229_jpg.rf.d1e649884ee1a3856dc2474afb22f3be.jpg,720,1280,2,668,658,806,717 -JENGA_COURTYARD_T_S_frame_0739_jpg.rf.d1e501582b50e1d26d625281ef13d5e7.jpg,720,1280,1,90,157,474,528 -JENGA_COURTYARD_T_S_frame_0739_jpg.rf.d1e501582b50e1d26d625281ef13d5e7.jpg,720,1280,2,464,130,796,454 -CARDS_OFFICE_B_S_frame_0131_jpg.rf.d13f7415a1579a819cb2ec4feb22a359.jpg,720,1280,2,535,531,1004,718 -JENGA_OFFICE_T_H_frame_0293_jpg.rf.d2394a3ded96a519a69f7b38208dcd4e.jpg,720,1280,1,36,432,359,711 -CARDS_OFFICE_T_H_frame_2026_jpg.rf.d236c9bc68e208c305ddfebfcfbcdf27.jpg,720,1280,1,429,681,488,715 -CARDS_OFFICE_T_H_frame_2026_jpg.rf.d236c9bc68e208c305ddfebfcfbcdf27.jpg,720,1280,2,510,465,747,613 -CHESS_COURTYARD_S_H_frame_1733_jpg.rf.d240de2bf042598a1978c0b34a289584.jpg,720,1280,2,534,330,907,622 -JENGA_OFFICE_S_B_frame_2351_jpg.rf.d246a9d0b7bbe4e416ac6486e29d2589.jpg,720,1280,2,572,443,809,707 -CHESS_LIVINGROOM_T_H_frame_1573_jpg.rf.d246b4ba5dc69acac9f2f7279f33bded.jpg,720,1280,1,1,478,15,514 -CHESS_LIVINGROOM_T_H_frame_1573_jpg.rf.d246b4ba5dc69acac9f2f7279f33bded.jpg,720,1280,2,490,649,822,719 -JENGA_LIVINGROOM_T_S_frame_1283_jpg.rf.d25eab55104de83daf10a4ca0efb51cd.jpg,720,1280,1,83,512,425,718 -JENGA_LIVINGROOM_T_S_frame_1283_jpg.rf.d25eab55104de83daf10a4ca0efb51cd.jpg,720,1280,2,591,475,914,714 -CHESS_COURTYARD_S_H_frame_0106_jpg.rf.d2b1a23f79ecfd9148900a615995f75f.jpg,720,1280,2,629,519,1101,718 -CHESS_COURTYARD_T_B_frame_0546_jpg.rf.d2b21887e1eac3ea55c8cf9502bac552.jpg,720,1280,1,150,667,369,718 -CHESS_COURTYARD_T_B_frame_0546_jpg.rf.d2b21887e1eac3ea55c8cf9502bac552.jpg,720,1280,2,390,689,466,718 -PUZZLE_COURTYARD_T_H_frame_0942_jpg.rf.d2dcb07170d35b718415747c0a8a81c1.jpg,720,1280,1,1,462,351,718 -PUZZLE_COURTYARD_T_H_frame_0942_jpg.rf.d2dcb07170d35b718415747c0a8a81c1.jpg,720,1280,2,416,250,845,644 -CARDS_COURTYARD_S_H_frame_1552_jpg.rf.d2e4b61569081f1e7a6fa1d748b1f42d.jpg,720,1280,1,257,551,569,718 -CARDS_COURTYARD_S_H_frame_1552_jpg.rf.d2e4b61569081f1e7a6fa1d748b1f42d.jpg,720,1280,2,580,540,842,718 -CARDS_COURTYARD_T_B_frame_2133_jpg.rf.d347038219cbf8ac19b10884b71177e4.jpg,720,1280,1,192,593,498,718 -CARDS_COURTYARD_T_B_frame_2133_jpg.rf.d347038219cbf8ac19b10884b71177e4.jpg,720,1280,2,540,510,959,718 -PUZZLE_COURTYARD_B_S_frame_2284_jpg.rf.d34d8042ae83c7ac90074861ab302357.jpg,720,1280,1,325,594,613,719 -PUZZLE_COURTYARD_B_S_frame_2284_jpg.rf.d34d8042ae83c7ac90074861ab302357.jpg,720,1280,2,728,510,987,719 -PUZZLE_COURTYARD_S_B_frame_0827_jpg.rf.d35bef62a93120e1b55eda0343973dfb.jpg,720,1280,1,32,486,411,717 -PUZZLE_COURTYARD_S_B_frame_0827_jpg.rf.d35bef62a93120e1b55eda0343973dfb.jpg,720,1280,2,470,404,746,659 -PUZZLE_COURTYARD_S_B_frame_0361_jpg.rf.d3a7c166c41f0a543aaaa9564631b6f0.jpg,720,1280,2,659,664,869,718 -JENGA_OFFICE_B_S_frame_0950_jpg.rf.d3c3747680d0ad02df3f5518b754ef25.jpg,720,1280,1,6,627,313,718 -JENGA_OFFICE_B_S_frame_0950_jpg.rf.d3c3747680d0ad02df3f5518b754ef25.jpg,720,1280,2,522,234,724,487 -PUZZLE_LIVINGROOM_T_B_frame_1019_jpg.rf.d3d343e023b30e0f7f7e6d6b10035d2f.jpg,720,1280,2,538,385,1207,719 -PUZZLE_LIVINGROOM_T_B_frame_1019_jpg.rf.d3d343e023b30e0f7f7e6d6b10035d2f.jpg,720,1280,1,0,482,249,719 -PUZZLE_OFFICE_S_T_frame_0690_jpg.rf.d3dc2615c50d5653e63843224318c482.jpg,720,1280,1,154,607,478,718 -PUZZLE_OFFICE_S_T_frame_0690_jpg.rf.d3dc2615c50d5653e63843224318c482.jpg,720,1280,2,634,530,942,718 -CARDS_OFFICE_B_S_frame_1232_jpg.rf.d458b4a71e160bd1a7c34a89186c1024.jpg,720,1280,1,354,589,568,716 -CARDS_OFFICE_B_S_frame_1232_jpg.rf.d458b4a71e160bd1a7c34a89186c1024.jpg,720,1280,2,643,622,853,718 -PUZZLE_COURTYARD_S_B_frame_0205_jpg.rf.d45bb2a2255f2b033aaf1d527c6de307.jpg,720,1280,1,31,552,362,712 -JENGA_OFFICE_H_T_frame_0493_jpg.rf.d463da8e0e3fce143c54369b39acf78e.jpg,720,1280,1,176,586,320,719 -JENGA_OFFICE_H_T_frame_0493_jpg.rf.d463da8e0e3fce143c54369b39acf78e.jpg,720,1280,2,308,409,552,715 -PUZZLE_OFFICE_B_H_frame_0311_jpg.rf.d41b5710bf42984bad58650b6bfd8f5f.jpg,720,1280,2,955,585,1137,714 -CHESS_LIVINGROOM_T_H_frame_0132_jpg.rf.d450183ad55cc3fc0d67faf0f02d243a.jpg,720,1280,2,474,213,1018,487 -JENGA_COURTYARD_S_T_frame_0878_jpg.rf.d46faa693cc995a28e22e2690d9ecf3e.jpg,720,1280,2,437,202,816,532 -JENGA_OFFICE_T_H_frame_1240_jpg.rf.d478c490c10363656155341670431715.jpg,720,1280,2,552,565,778,718 -PUZZLE_LIVINGROOM_B_T_frame_1022_jpg.rf.d4838b44629d623e91fe159ab1c0d71b.jpg,720,1280,1,2,520,377,715 -PUZZLE_LIVINGROOM_B_T_frame_1022_jpg.rf.d4838b44629d623e91fe159ab1c0d71b.jpg,720,1280,2,487,546,921,719 -CARDS_COURTYARD_S_H_frame_2148_jpg.rf.d48cea389f46da1453587aa86a74487a.jpg,720,1280,1,234,682,370,718 -PUZZLE_COURTYARD_H_T_frame_2305_jpg.rf.d4a303f4c69847b191ed47bae37d0871.jpg,720,1280,1,374,473,614,677 -PUZZLE_COURTYARD_H_T_frame_2305_jpg.rf.d4a303f4c69847b191ed47bae37d0871.jpg,720,1280,2,704,453,916,716 -CHESS_LIVINGROOM_S_B_frame_2188_jpg.rf.d4e1bd039d241f3eafafaa807d6772d2.jpg,720,1280,1,1,527,184,714 -JENGA_LIVINGROOM_H_B_frame_1773_jpg.rf.d4dfa96638365a85990f336646eef486.jpg,720,1280,1,2,472,118,693 -JENGA_LIVINGROOM_H_B_frame_1773_jpg.rf.d4dfa96638365a85990f336646eef486.jpg,720,1280,2,816,380,1187,712 -CARDS_LIVINGROOM_S_H_frame_1649_jpg.rf.d52f65b7d765f6428a913c233fb64f78.jpg,720,1280,1,181,655,323,718 -CARDS_LIVINGROOM_S_H_frame_1649_jpg.rf.d52f65b7d765f6428a913c233fb64f78.jpg,720,1280,2,616,657,739,718 -PUZZLE_OFFICE_T_S_frame_2187_jpg.rf.d534d0baac3a05d31f031f405d0a1ee4.jpg,720,1280,1,186,454,444,677 -PUZZLE_OFFICE_T_S_frame_2187_jpg.rf.d534d0baac3a05d31f031f405d0a1ee4.jpg,720,1280,2,563,399,733,595 -PUZZLE_OFFICE_H_B_frame_2628_jpg.rf.d53959f5a14ba333dfb799f5baf1df35.jpg,720,1280,1,301,640,420,718 -PUZZLE_OFFICE_H_B_frame_2628_jpg.rf.d53959f5a14ba333dfb799f5baf1df35.jpg,720,1280,2,684,448,901,712 -CARDS_COURTYARD_S_H_frame_1486_jpg.rf.d55005d4b2e5da99786d2a53d581ba1a.jpg,720,1280,2,592,413,811,655 -CARDS_COURTYARD_S_H_frame_1343_jpg.rf.d572c9adb4468cae46541e7597a3b39c.jpg,720,1280,1,29,536,389,718 -JENGA_LIVINGROOM_B_H_frame_0015_jpg.rf.d5a738548b8eed173bdd1d0b843d564c.jpg,720,1280,2,728,561,994,715 -JENGA_LIVINGROOM_S_T_frame_0703_jpg.rf.d5df32ed4b9140baeb6ecbefa6a5fe46.jpg,720,1280,1,103,652,344,718 -JENGA_LIVINGROOM_S_T_frame_0703_jpg.rf.d5df32ed4b9140baeb6ecbefa6a5fe46.jpg,720,1280,2,616,638,906,718 -CHESS_OFFICE_H_T_frame_0927_jpg.rf.d5e62f6eb41a182a7558e64948772898.jpg,720,1280,2,495,429,691,629 -JENGA_COURTYARD_T_S_frame_2626_jpg.rf.d5ee63c2b2bc59797e99dd6d97f51df6.jpg,720,1280,1,172,477,499,714 -JENGA_COURTYARD_T_S_frame_2626_jpg.rf.d5ee63c2b2bc59797e99dd6d97f51df6.jpg,720,1280,2,679,493,870,717 -CHESS_LIVINGROOM_T_H_frame_0334_jpg.rf.d5f8bcf8695d70c4c8f3f1551690f6de.jpg,720,1280,1,1,352,219,578 -CHESS_LIVINGROOM_T_H_frame_0334_jpg.rf.d5f8bcf8695d70c4c8f3f1551690f6de.jpg,720,1280,2,496,552,943,719 -PUZZLE_COURTYARD_H_T_frame_0561_jpg.rf.d5f967469aecabbcd7c18f8ee213031d.jpg,720,1280,2,682,683,827,718 -CHESS_OFFICE_B_S_frame_1138_jpg.rf.d6093bd552bc90c9c5026f6b6ae47abc.jpg,720,1280,2,693,407,1110,714 -CARDS_LIVINGROOM_S_H_frame_0285_jpg.rf.d6139b7a7b2f5472129d6cbab1397d7b.jpg,720,1280,1,391,684,484,718 -CARDS_LIVINGROOM_S_H_frame_0285_jpg.rf.d6139b7a7b2f5472129d6cbab1397d7b.jpg,720,1280,2,516,646,736,718 -CARDS_LIVINGROOM_S_H_frame_2107_jpg.rf.d6221dcd4fd2775870f592d3b3e6974d.jpg,720,1280,1,296,684,404,718 -CARDS_LIVINGROOM_S_H_frame_2107_jpg.rf.d6221dcd4fd2775870f592d3b3e6974d.jpg,720,1280,2,565,629,849,718 -JENGA_OFFICE_B_S_frame_0197_jpg.rf.d62b459e8a25ded1972493e41f308e72.jpg,720,1280,2,536,298,846,525 -CHESS_OFFICE_S_B_frame_0499_jpg.rf.d642562ca9825a7e3b3afbcd0e4da849.jpg,720,1280,2,610,487,1037,719 -PUZZLE_OFFICE_T_S_frame_1678_jpg.rf.d64cad57ed1117735fb33427b8f66045.jpg,720,1280,1,215,421,456,611 -PUZZLE_OFFICE_T_S_frame_1678_jpg.rf.d64cad57ed1117735fb33427b8f66045.jpg,720,1280,2,619,440,845,682 -PUZZLE_COURTYARD_B_S_frame_1717_jpg.rf.d657a8e757f52df6962af7764483aef1.jpg,720,1280,1,176,577,394,719 -PUZZLE_COURTYARD_B_S_frame_1717_jpg.rf.d657a8e757f52df6962af7764483aef1.jpg,720,1280,2,609,423,820,606 -PUZZLE_OFFICE_B_H_frame_0044_jpg.rf.d677e1b5379a62f0b671a1fab40e6a42.jpg,720,1280,1,258,697,356,719 -CARDS_LIVINGROOM_T_B_frame_0140_jpg.rf.d697ba18c7c297db8b1d84552f367c0c.jpg,720,1280,1,4,526,392,717 -CARDS_LIVINGROOM_T_B_frame_0140_jpg.rf.d697ba18c7c297db8b1d84552f367c0c.jpg,720,1280,2,645,487,1061,719 -CHESS_COURTYARD_T_B_frame_0922_jpg.rf.d6be6fe5b1d9b9f4341f27220585c8e9.jpg,720,1280,1,1,402,290,684 -CHESS_COURTYARD_T_B_frame_0922_jpg.rf.d6be6fe5b1d9b9f4341f27220585c8e9.jpg,720,1280,2,332,627,675,718 -JENGA_LIVINGROOM_H_B_frame_1349_jpg.rf.d722064f45ae78aac6dacd14d513f9d4.jpg,720,1280,1,166,332,478,549 -JENGA_LIVINGROOM_H_B_frame_1349_jpg.rf.d722064f45ae78aac6dacd14d513f9d4.jpg,720,1280,2,704,321,981,702 -JENGA_OFFICE_S_B_frame_0849_jpg.rf.d72e0c16283edad33c09edc0c745f769.jpg,720,1280,2,844,658,1047,715 -CHESS_LIVINGROOM_H_T_frame_0810_jpg.rf.d73f752509c90c8ec11ab44961311bd0.jpg,720,1280,1,1,551,164,718 -CHESS_LIVINGROOM_H_T_frame_0810_jpg.rf.d73f752509c90c8ec11ab44961311bd0.jpg,720,1280,2,616,426,1228,718 -PUZZLE_LIVINGROOM_B_T_frame_2570_jpg.rf.d7829b82e6e99a64c265316e0d704d22.jpg,720,1280,1,1,574,92,717 -PUZZLE_LIVINGROOM_B_T_frame_2570_jpg.rf.d7829b82e6e99a64c265316e0d704d22.jpg,720,1280,2,972,517,1276,717 -CHESS_OFFICE_B_S_frame_1770_jpg.rf.d7b6c7fbdd04128afb515c8eee2188af.jpg,720,1280,1,185,688,362,716 -CHESS_OFFICE_B_S_frame_1770_jpg.rf.d7b6c7fbdd04128afb515c8eee2188af.jpg,720,1280,2,600,673,854,718 -CHESS_LIVINGROOM_H_T_frame_2291_jpg.rf.d7d9e1378ea1ef92cf70e00896645c49.jpg,720,1280,1,3,549,238,718 -CHESS_LIVINGROOM_H_T_frame_2291_jpg.rf.d7d9e1378ea1ef92cf70e00896645c49.jpg,720,1280,2,1039,258,1279,585 -CARDS_OFFICE_H_T_frame_1705_jpg.rf.d80bc12197616cee822a03cc48cd56fb.jpg,720,1280,1,175,557,368,718 -CARDS_OFFICE_H_T_frame_1705_jpg.rf.d80bc12197616cee822a03cc48cd56fb.jpg,720,1280,2,546,346,959,626 -CARDS_LIVINGROOM_S_H_frame_0517_jpg.rf.d7d1de37ba5cb67dff25ca32d9d0bfde.jpg,720,1280,1,173,597,465,718 -CARDS_LIVINGROOM_S_H_frame_0517_jpg.rf.d7d1de37ba5cb67dff25ca32d9d0bfde.jpg,720,1280,2,546,604,758,718 -PUZZLE_COURTYARD_S_B_frame_2314_jpg.rf.d81b3d4d38a78377055565ddd2f7fec8.jpg,720,1280,2,638,619,938,718 -PUZZLE_LIVINGROOM_B_T_frame_1643_jpg.rf.d8268755c6456baf00faa7738400f2e4.jpg,720,1280,1,7,643,299,716 -PUZZLE_LIVINGROOM_B_T_frame_1643_jpg.rf.d8268755c6456baf00faa7738400f2e4.jpg,720,1280,2,435,538,1044,716 -PUZZLE_OFFICE_B_H_frame_0186_jpg.rf.d85a5108c5ecab2571375a48ac73f2af.jpg,720,1280,2,873,495,1191,713 -CHESS_LIVINGROOM_T_H_frame_1251_jpg.rf.d860a77ea6d4ee70b83ce284113c662d.jpg,720,1280,2,520,218,813,453 -PUZZLE_OFFICE_H_B_frame_0359_jpg.rf.d89cfa118529b0f1bffa635e737599cf.jpg,720,1280,1,423,636,654,717 -JENGA_COURTYARD_H_B_frame_0344_jpg.rf.d8ac54fa61c030e29abb381857d16ae9.jpg,720,1280,2,580,407,851,718 -JENGA_COURTYARD_S_T_frame_2433_jpg.rf.d8b6894c23321682f74ca8e44f8ac222.jpg,720,1280,2,663,515,1037,716 -JENGA_OFFICE_T_H_frame_2530_jpg.rf.d8bf278dbca370764b32f3dc123a2c4d.jpg,720,1280,1,204,267,439,477 -JENGA_OFFICE_T_H_frame_2530_jpg.rf.d8bf278dbca370764b32f3dc123a2c4d.jpg,720,1280,2,551,282,714,576 -CHESS_OFFICE_H_T_frame_2605_jpg.rf.d8cbb3fdf648e9d2b63df48b30e21d36.jpg,720,1280,2,669,374,933,627 -CHESS_LIVINGROOM_S_B_frame_1339_jpg.rf.d8e1521351c21502f6d7012c5cf392f5.jpg,720,1280,1,5,295,203,636 -CHESS_LIVINGROOM_S_B_frame_1339_jpg.rf.d8e1521351c21502f6d7012c5cf392f5.jpg,720,1280,2,856,307,1216,667 -JENGA_COURTYARD_S_T_frame_1780_jpg.rf.d90e7d88c2831ab972c7b67157cec238.jpg,720,1280,1,43,328,423,717 -JENGA_COURTYARD_S_T_frame_1780_jpg.rf.d90e7d88c2831ab972c7b67157cec238.jpg,720,1280,2,608,399,990,710 -CARDS_LIVINGROOM_S_H_frame_2477_jpg.rf.d91c21d14c0cc5ab1d842a33c9b7def1.jpg,720,1280,1,175,650,355,714 -CARDS_LIVINGROOM_S_H_frame_2477_jpg.rf.d91c21d14c0cc5ab1d842a33c9b7def1.jpg,720,1280,2,537,631,758,718 -CARDS_OFFICE_B_S_frame_0121_jpg.rf.d93cb1edf8f4642a04b043990a442a57.jpg,720,1280,2,714,562,866,714 -CHESS_COURTYARD_B_T_frame_0108_jpg.rf.d96561c7441325b735fd03a4037292f3.jpg,720,1280,2,791,560,1104,718 -PUZZLE_LIVINGROOM_T_B_frame_1542_jpg.rf.d96c731b1889b3e66be9a0f5a8a1e727.jpg,720,1280,1,7,365,349,658 -PUZZLE_LIVINGROOM_T_B_frame_1542_jpg.rf.d96c731b1889b3e66be9a0f5a8a1e727.jpg,720,1280,2,481,523,1201,717 -JENGA_LIVINGROOM_T_S_frame_1101_jpg.rf.d9790e0fe9697f4b9aee60479fd4c29b.jpg,720,1280,1,81,696,181,718 -JENGA_LIVINGROOM_T_S_frame_1101_jpg.rf.d9790e0fe9697f4b9aee60479fd4c29b.jpg,720,1280,2,521,444,870,714 -CARDS_LIVINGROOM_H_S_frame_0902_jpg.rf.d9838b8ba307aeec737372cc50159f2e.jpg,720,1280,2,611,453,977,719 -JENGA_LIVINGROOM_S_T_frame_2434_jpg.rf.d98f90ae53062d8126d473a544ae55c0.jpg,720,1280,1,3,343,245,718 -JENGA_LIVINGROOM_S_T_frame_2434_jpg.rf.d98f90ae53062d8126d473a544ae55c0.jpg,720,1280,2,465,432,902,718 -CARDS_OFFICE_T_H_frame_1664_jpg.rf.d9941000aa18d7956671ef7bc6c65344.jpg,720,1280,2,717,389,993,713 -PUZZLE_LIVINGROOM_B_T_frame_1523_jpg.rf.d9ad12d8788d3da6d45456d263f3c213.jpg,720,1280,1,7,598,514,718 -PUZZLE_LIVINGROOM_B_T_frame_1523_jpg.rf.d9ad12d8788d3da6d45456d263f3c213.jpg,720,1280,2,754,638,1181,719 -CARDS_COURTYARD_S_H_frame_1993_jpg.rf.d9bb47fd8aabc755f0033cad08a36054.jpg,720,1280,1,410,674,556,718 -CHESS_LIVINGROOM_T_H_frame_2173_jpg.rf.d9bd9a25aa4379b85722d45cf1084e56.jpg,720,1280,2,390,69,899,392 -CHESS_LIVINGROOM_H_T_frame_1198_jpg.rf.d9cbeb60a2f07310ba4dfdf39eb40a98.jpg,720,1280,1,1,589,257,718 -CHESS_LIVINGROOM_H_T_frame_1198_jpg.rf.d9cbeb60a2f07310ba4dfdf39eb40a98.jpg,720,1280,2,1073,606,1275,718 -JENGA_OFFICE_H_T_frame_1794_jpg.rf.d9df671e80517dd31a67a243767e85d9.jpg,720,1280,1,264,381,411,719 -JENGA_OFFICE_H_T_frame_1794_jpg.rf.d9df671e80517dd31a67a243767e85d9.jpg,720,1280,2,499,270,666,623 -PUZZLE_OFFICE_H_B_frame_0926_jpg.rf.da2b2dd046302754de99ac8c37e05b3b.jpg,720,1280,2,1010,699,1145,719 -CHESS_COURTYARD_B_T_frame_1756_jpg.rf.da08a127e9dc6b77e868487f667d3497.jpg,720,1280,2,802,458,1184,716 -PUZZLE_LIVINGROOM_H_S_frame_0785_jpg.rf.da4301545a8914b142d7891364ecaf97.jpg,720,1280,2,566,418,992,716 -JENGA_OFFICE_B_S_frame_2092_jpg.rf.da753a2579e3e07384bcdc0877c68b09.jpg,720,1280,2,369,165,792,574 -CARDS_LIVINGROOM_S_H_frame_1188_jpg.rf.da7e8211c4e3eb5c629bee7d554b8a4e.jpg,720,1280,1,376,693,567,718 -CARDS_COURTYARD_H_S_frame_1837_jpg.rf.da8b28470cf3f566aacda6d9470c8bd5.jpg,720,1280,1,145,478,486,719 -CARDS_COURTYARD_H_S_frame_1837_jpg.rf.da8b28470cf3f566aacda6d9470c8bd5.jpg,720,1280,2,706,350,923,533 -PUZZLE_OFFICE_S_T_frame_1536_jpg.rf.dab0b1a4db1b47432e78095c322ccaaa.jpg,720,1280,1,361,664,550,716 -PUZZLE_OFFICE_S_T_frame_1536_jpg.rf.dab0b1a4db1b47432e78095c322ccaaa.jpg,720,1280,2,592,577,835,718 -CARDS_COURTYARD_H_S_frame_0659_jpg.rf.dad7afcf7b761cb7643112bc3cc9bb2a.jpg,720,1280,1,143,566,527,718 -CARDS_COURTYARD_H_S_frame_0659_jpg.rf.dad7afcf7b761cb7643112bc3cc9bb2a.jpg,720,1280,2,543,482,1022,719 -PUZZLE_LIVINGROOM_H_S_frame_2365_jpg.rf.dae9d315c6d55c8a3b21aec46f8278bf.jpg,720,1280,1,173,623,404,715 -CARDS_COURTYARD_T_B_frame_1564_jpg.rf.daf0566bb216ecc128e97bea9d67f902.jpg,720,1280,1,292,557,544,716 -CARDS_COURTYARD_T_B_frame_1564_jpg.rf.daf0566bb216ecc128e97bea9d67f902.jpg,720,1280,2,556,536,795,717 -JENGA_LIVINGROOM_S_T_frame_1008_jpg.rf.db417526fb940b60e0856a95af23f4da.jpg,720,1280,1,234,691,393,718 -CHESS_LIVINGROOM_H_T_frame_1159_jpg.rf.db51a039d6ddb9d5ccf492d30ba72e58.jpg,720,1280,1,1,523,353,718 -CHESS_LIVINGROOM_H_T_frame_1159_jpg.rf.db51a039d6ddb9d5ccf492d30ba72e58.jpg,720,1280,2,832,63,1273,453 -PUZZLE_OFFICE_H_B_frame_1226_jpg.rf.db523819b065de035e53b42a031cd24e.jpg,720,1280,1,224,666,359,717 -PUZZLE_OFFICE_H_B_frame_1226_jpg.rf.db523819b065de035e53b42a031cd24e.jpg,720,1280,2,533,532,752,714 -PUZZLE_LIVINGROOM_B_T_frame_2666_jpg.rf.db5443e2e13342c90db3a06d49977075.jpg,720,1280,1,95,473,553,717 -PUZZLE_LIVINGROOM_B_T_frame_2666_jpg.rf.db5443e2e13342c90db3a06d49977075.jpg,720,1280,2,582,538,1029,716 -CHESS_OFFICE_S_B_frame_1408_jpg.rf.db81e800de32aaa807807999584cb183.jpg,720,1280,2,773,682,854,718 -CHESS_OFFICE_S_B_frame_2162_jpg.rf.db85d325b0c8707b2ac8ef5add00d3cd.jpg,720,1280,2,616,311,984,640 -PUZZLE_LIVINGROOM_B_T_frame_1698_jpg.rf.db89b6e486f17d3ed0676f942aa34ce4.jpg,720,1280,1,9,544,432,718 -JENGA_LIVINGROOM_H_B_frame_1192_jpg.rf.db9178e728cd0554e12788722ba216cb.jpg,720,1280,1,82,378,428,626 -JENGA_LIVINGROOM_H_B_frame_1192_jpg.rf.db9178e728cd0554e12788722ba216cb.jpg,720,1280,2,766,406,1046,716 -CHESS_OFFICE_S_B_frame_0460_jpg.rf.dba2956e45f028662fa109918186e277.jpg,720,1280,2,779,546,1152,716 -CARDS_LIVINGROOM_H_S_frame_0192_jpg.rf.dbc3f72d46d43a75f2344b12e6f15e46.jpg,720,1280,2,701,559,1016,719 -CHESS_LIVINGROOM_S_B_frame_1674_jpg.rf.dbc7de4d3d4560983be7f143973784ad.jpg,720,1280,1,9,574,472,716 -PUZZLE_COURTYARD_S_B_frame_1468_jpg.rf.dbd4248cadb045371eb16a4cc82b1fb5.jpg,720,1280,1,204,684,505,718 -PUZZLE_COURTYARD_S_B_frame_1468_jpg.rf.dbd4248cadb045371eb16a4cc82b1fb5.jpg,720,1280,2,601,606,912,718 -CARDS_COURTYARD_T_B_frame_0283_jpg.rf.dbc8b4b35f8e7fc4fef813a8b3ba69b3.jpg,720,1280,1,115,534,411,718 -CARDS_COURTYARD_T_B_frame_0283_jpg.rf.dbc8b4b35f8e7fc4fef813a8b3ba69b3.jpg,720,1280,2,505,536,844,716 -JENGA_COURTYARD_T_S_frame_2060_jpg.rf.dbeb4e0e4ddd99c0d91deef9ce4d8b5a.jpg,720,1280,1,3,238,364,589 -JENGA_COURTYARD_T_S_frame_2060_jpg.rf.dbeb4e0e4ddd99c0d91deef9ce4d8b5a.jpg,720,1280,2,587,650,742,718 -JENGA_OFFICE_B_S_frame_0506_jpg.rf.dc061d53ee49e79f65b03d4173de855f.jpg,720,1280,1,3,601,360,717 -JENGA_OFFICE_B_S_frame_0506_jpg.rf.dc061d53ee49e79f65b03d4173de855f.jpg,720,1280,2,407,373,755,716 -CHESS_OFFICE_S_B_frame_1184_jpg.rf.dc156f9d076f3350f6adbb7793992943.jpg,720,1280,2,588,564,994,719 -CARDS_COURTYARD_H_S_frame_1002_jpg.rf.dc190524eea54dde59a3732eb1cd79c8.jpg,720,1280,1,193,505,442,719 -CARDS_COURTYARD_H_S_frame_1002_jpg.rf.dc190524eea54dde59a3732eb1cd79c8.jpg,720,1280,2,571,528,854,719 -CARDS_COURTYARD_B_T_frame_1370_jpg.rf.dc272101774cdeae9fabf9a20f9530e6.jpg,720,1280,1,254,503,536,714 -CARDS_COURTYARD_B_T_frame_1370_jpg.rf.dc272101774cdeae9fabf9a20f9530e6.jpg,720,1280,2,716,634,864,718 -CHESS_LIVINGROOM_H_T_frame_2552_jpg.rf.dc274935f823b2f034bb218dc1fc876f.jpg,720,1280,2,391,466,781,718 -PUZZLE_OFFICE_H_B_frame_1881_jpg.rf.dc3a137bacf06fb63a58a7265a3d7c3c.jpg,720,1280,1,363,549,623,717 -PUZZLE_OFFICE_H_B_frame_1881_jpg.rf.dc3a137bacf06fb63a58a7265a3d7c3c.jpg,720,1280,2,739,464,948,640 -CARDS_OFFICE_H_T_frame_1770_jpg.rf.dc486b20e6b5dcc0ce7aff8fdd4932d2.jpg,720,1280,2,720,311,967,626 -CARDS_OFFICE_B_S_frame_0144_jpg.rf.dc4b756c3809ceb7dc35ed946a875415.jpg,720,1280,2,833,468,1027,692 -JENGA_COURTYARD_T_S_frame_0423_jpg.rf.dc5160d2d1998bdb9bbb9a38e87b984e.jpg,720,1280,1,1,526,307,714 -JENGA_COURTYARD_T_S_frame_0423_jpg.rf.dc5160d2d1998bdb9bbb9a38e87b984e.jpg,720,1280,2,484,465,847,718 -CHESS_OFFICE_B_S_frame_0747_jpg.rf.dc7c5daf0b11fe161ca26adde1dc0c50.jpg,720,1280,1,221,629,488,718 -JENGA_COURTYARD_H_B_frame_1961_jpg.rf.dc93322594f45bd61af7a7037f980124.jpg,720,1280,1,1,101,300,479 -JENGA_COURTYARD_H_B_frame_1961_jpg.rf.dc93322594f45bd61af7a7037f980124.jpg,720,1280,2,751,186,1101,538 -JENGA_COURTYARD_B_H_frame_1195_jpg.rf.dcd34b0edbc274944e0a160bac703638.jpg,720,1280,2,732,668,893,719 -CHESS_LIVINGROOM_S_B_frame_2031_jpg.rf.dcd854964a4c457e939002996fbf8578.jpg,720,1280,1,3,287,156,421 -CHESS_LIVINGROOM_S_B_frame_2031_jpg.rf.dcd854964a4c457e939002996fbf8578.jpg,720,1280,2,865,519,1211,718 -PUZZLE_LIVINGROOM_H_S_frame_0088_jpg.rf.dce0f9333ba10e2fe74d6835ae35f71c.jpg,720,1280,1,5,496,384,717 -PUZZLE_LIVINGROOM_H_S_frame_0088_jpg.rf.dce0f9333ba10e2fe74d6835ae35f71c.jpg,720,1280,2,709,699,812,718 -PUZZLE_COURTYARD_H_T_frame_2158_jpg.rf.dce724029dcb63b937171b0ff18de174.jpg,720,1280,1,368,419,630,706 -PUZZLE_COURTYARD_H_T_frame_2158_jpg.rf.dce724029dcb63b937171b0ff18de174.jpg,720,1280,2,663,473,940,718 -CARDS_LIVINGROOM_B_T_frame_2243_jpg.rf.dcfc926c288ae9662313100fd1872e67.jpg,720,1280,1,198,688,255,716 -CARDS_LIVINGROOM_B_T_frame_2243_jpg.rf.dcfc926c288ae9662313100fd1872e67.jpg,720,1280,2,633,644,902,718 -CHESS_LIVINGROOM_T_H_frame_0251_jpg.rf.dd032209982266b6fa9855f7f0da39f1.jpg,720,1280,1,1,224,364,469 -CHESS_LIVINGROOM_T_H_frame_0251_jpg.rf.dd032209982266b6fa9855f7f0da39f1.jpg,720,1280,2,582,601,962,718 -CARDS_OFFICE_T_H_frame_2458_jpg.rf.dd0f5ece2d82c39187faca9e1d5e0dca.jpg,720,1280,2,399,537,664,719 -JENGA_OFFICE_H_T_frame_0746_jpg.rf.dd12ccef1b539cf8c66a365f286f5b66.jpg,720,1280,1,120,650,192,710 -JENGA_OFFICE_H_T_frame_0746_jpg.rf.dd12ccef1b539cf8c66a365f286f5b66.jpg,720,1280,2,861,361,1065,710 -PUZZLE_LIVINGROOM_B_T_frame_1164_jpg.rf.dd2d7b04bec0e614514009aca7849967.jpg,720,1280,2,606,545,1011,717 -CARDS_COURTYARD_H_S_frame_1135_jpg.rf.dd2f46360bec7fb4c13adcf12b03a1e5.jpg,720,1280,1,138,524,485,718 -CARDS_COURTYARD_H_S_frame_1135_jpg.rf.dd2f46360bec7fb4c13adcf12b03a1e5.jpg,720,1280,2,620,420,1002,719 -CHESS_COURTYARD_T_B_frame_0403_jpg.rf.dd3a5785b41d8d35521257b7cd991e90.jpg,720,1280,1,212,692,386,718 -JENGA_OFFICE_B_S_frame_0514_jpg.rf.dd456412203e89aa3aae2692c5ebd6d6.jpg,720,1280,1,3,596,349,717 -JENGA_OFFICE_B_S_frame_0514_jpg.rf.dd456412203e89aa3aae2692c5ebd6d6.jpg,720,1280,2,436,374,784,717 -CHESS_COURTYARD_T_B_frame_2592_jpg.rf.dd7c1406b7576b1fd8fac340d6b1a6f4.jpg,720,1280,2,584,528,856,718 -PUZZLE_OFFICE_S_T_frame_1623_jpg.rf.dd970aab3b9e18b50a481fcf887d2ea7.jpg,720,1280,1,129,247,443,444 -PUZZLE_OFFICE_S_T_frame_1623_jpg.rf.dd970aab3b9e18b50a481fcf887d2ea7.jpg,720,1280,2,821,183,1063,347 -PUZZLE_OFFICE_H_B_frame_1930_jpg.rf.dda5be8f50f1f36c8df387511799dfc3.jpg,720,1280,1,360,556,628,719 -PUZZLE_OFFICE_H_B_frame_1930_jpg.rf.dda5be8f50f1f36c8df387511799dfc3.jpg,720,1280,2,702,525,979,712 -CARDS_OFFICE_H_T_frame_1159_jpg.rf.ddb8c3d18500ff329dcc8674da80b6f6.jpg,720,1280,1,274,633,357,714 -CARDS_OFFICE_H_T_frame_1159_jpg.rf.ddb8c3d18500ff329dcc8674da80b6f6.jpg,720,1280,2,707,472,1006,718 -CARDS_LIVINGROOM_S_H_frame_2348_jpg.rf.ddc41fd30a4dcc464afeda22bfb54b1a.jpg,720,1280,1,139,530,512,718 -CARDS_LIVINGROOM_S_H_frame_2348_jpg.rf.ddc41fd30a4dcc464afeda22bfb54b1a.jpg,720,1280,2,565,521,868,718 -CARDS_COURTYARD_T_B_frame_2321_jpg.rf.ddd57e91e220c056b12c23934b2f73eb.jpg,720,1280,1,224,607,383,714 -CARDS_COURTYARD_T_B_frame_2321_jpg.rf.ddd57e91e220c056b12c23934b2f73eb.jpg,720,1280,2,577,569,869,718 -CARDS_COURTYARD_T_B_frame_2002_jpg.rf.ddddf4590e4aed1961a8c15cc2ac0019.jpg,720,1280,2,638,634,910,719 -CARDS_COURTYARD_T_B_frame_2002_jpg.rf.ddddf4590e4aed1961a8c15cc2ac0019.jpg,720,1280,1,296,671,404,719 -PUZZLE_LIVINGROOM_T_B_frame_2288_jpg.rf.de0e81fe57f478e7a54a7ef1cafa35e5.jpg,720,1280,1,13,512,229,693 -PUZZLE_LIVINGROOM_T_B_frame_2288_jpg.rf.de0e81fe57f478e7a54a7ef1cafa35e5.jpg,720,1280,2,759,227,1271,710 -JENGA_OFFICE_T_H_frame_1070_jpg.rf.de18b65c0c4bff03a6356efe26129c5a.jpg,720,1280,2,493,520,768,716 -CARDS_COURTYARD_T_B_frame_0914_jpg.rf.de3eaca9dcd51af7dc870495032459d2.jpg,720,1280,1,201,602,375,717 -CARDS_COURTYARD_T_B_frame_0914_jpg.rf.de3eaca9dcd51af7dc870495032459d2.jpg,720,1280,2,507,495,914,718 -JENGA_COURTYARD_H_B_frame_0290_jpg.rf.de81439322582adc28530232d91f12ac.jpg,720,1280,2,599,318,872,682 -CHESS_OFFICE_B_S_frame_1906_jpg.rf.de9f81c27f9fe6d1e9c039c4eea4262c.jpg,720,1280,2,663,687,846,719 -JENGA_COURTYARD_S_T_frame_1409_jpg.rf.dee6ee013246b5214c0fdf7d180e6514.jpg,720,1280,1,155,478,404,679 -JENGA_COURTYARD_S_T_frame_1409_jpg.rf.dee6ee013246b5214c0fdf7d180e6514.jpg,720,1280,2,532,685,580,718 -CARDS_LIVINGROOM_B_T_frame_0949_jpg.rf.df81e6bb616b7f01a265cd47121ff1fc.jpg,720,1280,1,168,691,219,718 -CARDS_LIVINGROOM_B_T_frame_0949_jpg.rf.df81e6bb616b7f01a265cd47121ff1fc.jpg,720,1280,2,677,667,783,718 -JENGA_LIVINGROOM_T_S_frame_1267_jpg.rf.dfb012649d3ac4fd607241e54c2e3297.jpg,720,1280,2,578,478,901,714 -JENGA_LIVINGROOM_T_S_frame_1267_jpg.rf.dfb012649d3ac4fd607241e54c2e3297.jpg,720,1280,1,78,510,419,718 -PUZZLE_COURTYARD_B_S_frame_0185_jpg.rf.dfb8d68287f3729a50ee222a487131c1.jpg,720,1280,1,337,688,504,719 -PUZZLE_COURTYARD_B_S_frame_0185_jpg.rf.dfb8d68287f3729a50ee222a487131c1.jpg,720,1280,2,575,662,812,719 -CARDS_OFFICE_B_S_frame_1063_jpg.rf.dfd748964276f87f6fb850e35e892630.jpg,720,1280,1,352,598,515,718 -CARDS_OFFICE_B_S_frame_1063_jpg.rf.dfd748964276f87f6fb850e35e892630.jpg,720,1280,2,596,640,799,718 -CHESS_LIVINGROOM_H_T_frame_0152_jpg.rf.dfe565ae6c059244e499b5d69d686ee8.jpg,720,1280,1,3,515,266,718 -CHESS_LIVINGROOM_H_T_frame_0152_jpg.rf.dfe565ae6c059244e499b5d69d686ee8.jpg,720,1280,2,1001,540,1279,718 -PUZZLE_COURTYARD_T_H_frame_0363_jpg.rf.dfee1163a5693cdfd7f7a28f1482eb4b.jpg,720,1280,1,88,642,363,718 -JENGA_OFFICE_H_T_frame_1305_jpg.rf.dff13f831a1c18daec958fb99b44fb57.jpg,720,1280,1,64,540,279,717 -JENGA_OFFICE_H_T_frame_1305_jpg.rf.dff13f831a1c18daec958fb99b44fb57.jpg,720,1280,2,797,682,954,717 -CARDS_COURTYARD_T_B_frame_1806_jpg.rf.e029dc34be4f014c286cf1f4817daf0b.jpg,720,1280,1,150,584,337,717 -CARDS_COURTYARD_T_B_frame_1806_jpg.rf.e029dc34be4f014c286cf1f4817daf0b.jpg,720,1280,2,543,514,881,718 -PUZZLE_OFFICE_T_S_frame_2697_jpg.rf.e02f33e1ce8e0096393d561efadd6bff.jpg,720,1280,2,551,498,826,707 -PUZZLE_OFFICE_T_S_frame_2697_jpg.rf.e02f33e1ce8e0096393d561efadd6bff.jpg,720,1280,1,13,556,301,716 -PUZZLE_COURTYARD_T_H_frame_2022_jpg.rf.e0528288484953545b21c0084d7fd69d.jpg,720,1280,1,1,434,289,716 -PUZZLE_COURTYARD_T_H_frame_2022_jpg.rf.e0528288484953545b21c0084d7fd69d.jpg,720,1280,2,673,417,1169,718 -CARDS_OFFICE_S_B_frame_0449_jpg.rf.e06797553f5ac36337921a05a501f002.jpg,720,1280,1,253,673,423,716 -CARDS_OFFICE_S_B_frame_0449_jpg.rf.e06797553f5ac36337921a05a501f002.jpg,720,1280,2,614,667,675,717 -CARDS_COURTYARD_T_B_frame_2073_jpg.rf.e08aa17a6c67f9e3fbf475c2fd775483.jpg,720,1280,1,246,602,416,716 -CARDS_COURTYARD_T_B_frame_2073_jpg.rf.e08aa17a6c67f9e3fbf475c2fd775483.jpg,720,1280,2,568,507,952,718 -CARDS_COURTYARD_T_B_frame_0804_jpg.rf.e092bd66de0ffcb87f7151b363db8d61.jpg,720,1280,2,539,266,728,436 -CARDS_COURTYARD_T_B_frame_0804_jpg.rf.e092bd66de0ffcb87f7151b363db8d61.jpg,720,1280,1,155,598,309,718 -CHESS_LIVINGROOM_T_H_frame_0343_jpg.rf.e0d21923c71ab36ceb33b1c19a81c701.jpg,720,1280,1,3,342,177,573 -CHESS_LIVINGROOM_T_H_frame_0343_jpg.rf.e0d21923c71ab36ceb33b1c19a81c701.jpg,720,1280,2,478,539,925,718 -CARDS_LIVINGROOM_S_H_frame_1739_jpg.rf.e0f8211b0e012a0f3dc54df33352715f.jpg,720,1280,1,192,597,408,718 -JENGA_COURTYARD_B_H_frame_2394_jpg.rf.e10e4f87643a5b7bd6df9dfe6c606a98.jpg,720,1280,2,900,143,1255,557 -JENGA_OFFICE_H_T_frame_1673_jpg.rf.e113718da58d65a2c39f74b5a97959ff.jpg,720,1280,1,252,271,442,670 -JENGA_OFFICE_H_T_frame_1673_jpg.rf.e113718da58d65a2c39f74b5a97959ff.jpg,720,1280,2,633,225,768,606 -JENGA_LIVINGROOM_H_B_frame_2119_jpg.rf.e120347f093984bff2499f3ef8e8baa8.jpg,720,1280,2,624,148,861,569 -CHESS_OFFICE_H_T_frame_2620_jpg.rf.e129570408d068e11540c7554007a272.jpg,720,1280,2,669,395,923,645 -PUZZLE_LIVINGROOM_T_B_frame_1115_jpg.rf.e1ae5bdc8b7a65b107f8e1fccfecdaf5.jpg,720,1280,1,5,413,304,718 -PUZZLE_LIVINGROOM_T_B_frame_1115_jpg.rf.e1ae5bdc8b7a65b107f8e1fccfecdaf5.jpg,720,1280,2,387,374,1038,718 -CHESS_LIVINGROOM_H_T_frame_1770_jpg.rf.e1d850d4212da8a01c871f0ff275c804.jpg,720,1280,1,1,627,147,718 -CHESS_LIVINGROOM_H_T_frame_1770_jpg.rf.e1d850d4212da8a01c871f0ff275c804.jpg,720,1280,2,626,377,957,640 -CARDS_COURTYARD_S_H_frame_0438_jpg.rf.e1e5efab2a1a5422f35d2818c64bb3a4.jpg,720,1280,1,304,697,501,718 -CARDS_OFFICE_H_T_frame_1167_jpg.rf.e207916748278aaf643c4103d2e25b39.jpg,720,1280,1,253,657,325,710 -CARDS_OFFICE_H_T_frame_1167_jpg.rf.e207916748278aaf643c4103d2e25b39.jpg,720,1280,2,762,472,1014,716 -CARDS_LIVINGROOM_S_H_frame_0322_jpg.rf.e20c3352d5092db8f74b65cac0c9ae13.jpg,720,1280,1,395,697,459,716 -CARDS_LIVINGROOM_S_H_frame_0322_jpg.rf.e20c3352d5092db8f74b65cac0c9ae13.jpg,720,1280,2,571,638,813,716 -PUZZLE_OFFICE_S_T_frame_2000_jpg.rf.e21b47d64df9649458a0c1699e3775e3.jpg,720,1280,1,195,555,496,716 -PUZZLE_OFFICE_S_T_frame_2000_jpg.rf.e21b47d64df9649458a0c1699e3775e3.jpg,720,1280,2,639,461,947,716 -PUZZLE_OFFICE_H_B_frame_1712_jpg.rf.e234034111194ae9ea277a261b21044f.jpg,720,1280,2,757,679,908,719 -PUZZLE_OFFICE_B_H_frame_1803_jpg.rf.e24b7b6691babfbeeea47591a3b77fd6.jpg,720,1280,1,306,690,471,719 -PUZZLE_OFFICE_B_H_frame_1803_jpg.rf.e24b7b6691babfbeeea47591a3b77fd6.jpg,720,1280,2,755,389,1227,710 -PUZZLE_OFFICE_H_B_frame_2017_jpg.rf.e24e86bc543d9862433cda3caadf5a3f.jpg,720,1280,1,285,591,594,718 -PUZZLE_OFFICE_H_B_frame_2017_jpg.rf.e24e86bc543d9862433cda3caadf5a3f.jpg,720,1280,2,636,625,901,719 -JENGA_OFFICE_B_S_frame_1649_jpg.rf.e256b39d0faf366afc07514bd14fb2ed.jpg,720,1280,1,365,580,634,718 -JENGA_OFFICE_B_S_frame_1649_jpg.rf.e256b39d0faf366afc07514bd14fb2ed.jpg,720,1280,2,839,626,1058,713 -PUZZLE_COURTYARD_T_H_frame_1425_jpg.rf.e2590da7327b54e61290bab4e6c36a85.jpg,720,1280,1,1,502,330,718 -PUZZLE_COURTYARD_T_H_frame_1425_jpg.rf.e2590da7327b54e61290bab4e6c36a85.jpg,720,1280,2,577,436,972,718 -JENGA_COURTYARD_S_T_frame_2391_jpg.rf.e26b052c5c36a05c3709c0527cd09960.jpg,720,1280,2,499,486,860,718 -PUZZLE_LIVINGROOM_B_T_frame_1844_jpg.rf.e26d32799cf488f3e69e3cc0d1f3ef62.jpg,720,1280,2,715,372,945,547 -CHESS_LIVINGROOM_T_H_frame_1735_jpg.rf.e27177b6ec75602963be0c0a8a201779.jpg,720,1280,1,3,341,109,598 -CHESS_LIVINGROOM_T_H_frame_1735_jpg.rf.e27177b6ec75602963be0c0a8a201779.jpg,720,1280,2,545,573,989,719 -PUZZLE_OFFICE_T_S_frame_1208_jpg.rf.e2760161e6c824a401433f71048eb590.jpg,720,1280,1,6,541,411,714 -PUZZLE_OFFICE_T_S_frame_1208_jpg.rf.e2760161e6c824a401433f71048eb590.jpg,720,1280,2,570,521,894,712 -CARDS_OFFICE_T_H_frame_2113_jpg.rf.e28cf1a1de16418e3b207b754112c7dd.jpg,720,1280,1,130,522,459,719 -CARDS_OFFICE_T_H_frame_2113_jpg.rf.e28cf1a1de16418e3b207b754112c7dd.jpg,720,1280,2,582,359,1035,673 -JENGA_OFFICE_T_H_frame_0849_jpg.rf.e2b4fd448cbd596595a133c46ad61db6.jpg,720,1280,1,297,663,506,719 -JENGA_OFFICE_T_H_frame_0849_jpg.rf.e2b4fd448cbd596595a133c46ad61db6.jpg,720,1280,2,659,638,849,717 -CARDS_OFFICE_B_S_frame_0619_jpg.rf.e2e4ebc0559d15d1b24088014f71dae7.jpg,720,1280,2,686,655,840,717 -JENGA_COURTYARD_T_S_frame_2232_jpg.rf.e2fe89694fe1656123b095330972652c.jpg,720,1280,1,148,462,360,714 -JENGA_COURTYARD_T_S_frame_2232_jpg.rf.e2fe89694fe1656123b095330972652c.jpg,720,1280,2,563,491,815,716 -PUZZLE_COURTYARD_T_H_frame_1751_jpg.rf.e30121240e5beea8b4a664d04ec3c6b0.jpg,720,1280,2,622,360,1090,718 -PUZZLE_COURTYARD_T_H_frame_1751_jpg.rf.e30121240e5beea8b4a664d04ec3c6b0.jpg,720,1280,1,1,551,336,718 -JENGA_COURTYARD_S_T_frame_2477_jpg.rf.e3058efd6e146f84c7d03625e9066f6b.jpg,720,1280,1,257,573,452,718 -JENGA_COURTYARD_S_T_frame_2477_jpg.rf.e3058efd6e146f84c7d03625e9066f6b.jpg,720,1280,2,675,524,938,718 -CARDS_OFFICE_H_T_frame_1316_jpg.rf.e307797e255116c5c5ccb1389d04295b.jpg,720,1280,2,800,355,1123,667 -CARDS_OFFICE_H_T_frame_1316_jpg.rf.e307797e255116c5c5ccb1389d04295b.jpg,720,1280,1,264,682,327,718 -PUZZLE_OFFICE_B_H_frame_1348_jpg.rf.e31f787321eaa516879e158aef88fc17.jpg,720,1280,1,127,488,454,712 -PUZZLE_OFFICE_B_H_frame_1348_jpg.rf.e31f787321eaa516879e158aef88fc17.jpg,720,1280,2,1033,487,1278,712 -PUZZLE_OFFICE_B_H_frame_1424_jpg.rf.e3379c2ac7d80f2ba034ea05f307a168.jpg,720,1280,1,125,578,407,714 -PUZZLE_OFFICE_B_H_frame_1424_jpg.rf.e3379c2ac7d80f2ba034ea05f307a168.jpg,720,1280,2,588,444,934,689 -CARDS_LIVINGROOM_B_T_frame_1915_jpg.rf.e350c3a8a7202284efee0a5840a36cae.jpg,720,1280,2,622,669,794,718 -CHESS_OFFICE_T_H_frame_1366_jpg.rf.e35a72d5e250103dc7814d3eab178864.jpg,720,1280,1,259,650,498,718 -CHESS_OFFICE_T_H_frame_1366_jpg.rf.e35a72d5e250103dc7814d3eab178864.jpg,720,1280,2,666,354,944,551 -JENGA_COURTYARD_S_T_frame_2565_jpg.rf.e368089ee927262c0652299de8ff4ef4.jpg,720,1280,1,224,585,408,718 -JENGA_COURTYARD_S_T_frame_2565_jpg.rf.e368089ee927262c0652299de8ff4ef4.jpg,720,1280,2,653,229,1047,717 -CHESS_OFFICE_B_S_frame_1663_jpg.rf.e375dcdfde9fd43ea73cb8112395fe7e.jpg,720,1280,1,374,695,503,718 -CHESS_OFFICE_B_S_frame_1663_jpg.rf.e375dcdfde9fd43ea73cb8112395fe7e.jpg,720,1280,2,666,483,1105,717 -CARDS_COURTYARD_T_B_frame_0180_jpg.rf.e3887f923b1e9cc38799b30d85b8bceb.jpg,720,1280,1,174,472,476,718 -CARDS_COURTYARD_T_B_frame_0180_jpg.rf.e3887f923b1e9cc38799b30d85b8bceb.jpg,720,1280,2,558,399,935,681 -PUZZLE_LIVINGROOM_S_H_frame_0427_jpg.rf.e39f65702c2aacc421bc5a19c192f49f.jpg,720,1280,1,33,513,512,716 -PUZZLE_LIVINGROOM_S_H_frame_0427_jpg.rf.e39f65702c2aacc421bc5a19c192f49f.jpg,720,1280,2,586,443,1046,718 -JENGA_OFFICE_T_H_frame_0492_jpg.rf.e3ad7a136df546d4cc273ba77d224494.jpg,720,1280,1,324,673,456,717 -JENGA_OFFICE_T_H_frame_0492_jpg.rf.e3ad7a136df546d4cc273ba77d224494.jpg,720,1280,2,479,697,608,718 -CHESS_COURTYARD_H_S_frame_1765_jpg.rf.e3d55f7d74f518663a9e8dbf448b799b.jpg,720,1280,2,614,388,936,600 -JENGA_LIVINGROOM_T_S_frame_0926_jpg.rf.e3d709ff82050becd8acfb9b1ae042f6.jpg,720,1280,1,3,697,181,719 -JENGA_LIVINGROOM_T_S_frame_0926_jpg.rf.e3d709ff82050becd8acfb9b1ae042f6.jpg,720,1280,2,674,585,918,718 -CARDS_COURTYARD_H_S_frame_1674_jpg.rf.e431f2c16cf80f0573c722d2cd0e30a5.jpg,720,1280,1,161,603,406,719 -CARDS_COURTYARD_H_S_frame_1674_jpg.rf.e431f2c16cf80f0573c722d2cd0e30a5.jpg,720,1280,2,610,399,901,716 -CHESS_LIVINGROOM_S_B_frame_1620_jpg.rf.e44ad8b0dee3512c4289e7bbe0e5abcb.jpg,720,1280,1,5,607,411,713 -PUZZLE_OFFICE_H_B_frame_2687_jpg.rf.e453afaaec5f3657b90fa4412b7253ab.jpg,720,1280,1,166,176,416,551 -PUZZLE_OFFICE_H_B_frame_2687_jpg.rf.e453afaaec5f3657b90fa4412b7253ab.jpg,720,1280,2,625,207,914,610 -JENGA_OFFICE_T_H_frame_2185_jpg.rf.e457d49ec40b4c70f7f71b4195a35706.jpg,720,1280,1,41,611,261,712 -JENGA_OFFICE_T_H_frame_2185_jpg.rf.e457d49ec40b4c70f7f71b4195a35706.jpg,720,1280,2,729,683,842,718 -CARDS_COURTYARD_H_S_frame_1830_jpg.rf.e46fa088558630fbe0622823dc8c7197.jpg,720,1280,1,202,533,504,719 -CARDS_COURTYARD_H_S_frame_1830_jpg.rf.e46fa088558630fbe0622823dc8c7197.jpg,720,1280,2,712,406,945,637 -JENGA_COURTYARD_B_H_frame_1627_jpg.rf.e4a79156079a2a7bea93d322389e3ec3.jpg,720,1280,1,364,656,554,718 -JENGA_COURTYARD_B_H_frame_1627_jpg.rf.e4a79156079a2a7bea93d322389e3ec3.jpg,720,1280,2,773,645,951,718 -CARDS_LIVINGROOM_T_B_frame_1344_jpg.rf.e4c8669fd443bb1a1fbfeab79b6e3fd0.jpg,720,1280,1,2,535,187,719 -CARDS_LIVINGROOM_T_B_frame_1344_jpg.rf.e4c8669fd443bb1a1fbfeab79b6e3fd0.jpg,720,1280,2,425,217,999,611 -PUZZLE_OFFICE_S_T_frame_1259_jpg.rf.e5190f8b89900e6b97595f418160e58a.jpg,720,1280,2,594,659,831,719 -CHESS_LIVINGROOM_H_T_frame_1161_jpg.rf.e53edfee37e385ec0e8880d7f2895184.jpg,720,1280,1,1,523,336,718 -CHESS_LIVINGROOM_H_T_frame_1161_jpg.rf.e53edfee37e385ec0e8880d7f2895184.jpg,720,1280,2,972,176,1275,534 -PUZZLE_OFFICE_T_S_frame_2447_jpg.rf.e532b2f321dd0690fee3e1d341cbb71a.jpg,720,1280,1,196,349,458,567 -PUZZLE_OFFICE_T_S_frame_2447_jpg.rf.e532b2f321dd0690fee3e1d341cbb71a.jpg,720,1280,2,402,544,640,712 -CHESS_OFFICE_B_S_frame_0093_jpg.rf.e59bae2691e65323e34fd59b199a0856.jpg,720,1280,2,658,565,1022,714 -CARDS_COURTYARD_T_B_frame_2658_jpg.rf.e5cfb53375b865b845328ccf989d609f.jpg,720,1280,1,110,576,418,718 -CARDS_COURTYARD_T_B_frame_2658_jpg.rf.e5cfb53375b865b845328ccf989d609f.jpg,720,1280,2,614,390,920,660 -CARDS_COURTYARD_B_T_frame_0099_jpg.rf.e5dc2a4089118fac4385b55ceb090fbb.jpg,720,1280,2,784,610,962,719 -CARDS_LIVINGROOM_H_S_frame_2149_jpg.rf.e5f3128ceeee43c5c9867741caa02653.jpg,720,1280,1,138,610,347,716 -CARDS_LIVINGROOM_H_S_frame_2149_jpg.rf.e5f3128ceeee43c5c9867741caa02653.jpg,720,1280,2,728,470,1008,719 -CARDS_COURTYARD_S_H_frame_2658_jpg.rf.e618af0edcb5d0633a2ae2ba8123b8f5.jpg,720,1280,1,181,525,459,718 -PUZZLE_OFFICE_S_T_frame_1657_jpg.rf.e6285641c34db38db3eba3a5b1dd6e62.jpg,720,1280,2,622,532,912,712 -PUZZLE_OFFICE_B_H_frame_0039_jpg.rf.e64a5cc785d898932cf1e7725ffef8ac.jpg,720,1280,2,1096,598,1272,716 -JENGA_LIVINGROOM_T_S_frame_0726_jpg.rf.e664e34452f6a825b0b50f47b2a956c3.jpg,720,1280,1,6,318,364,685 -JENGA_LIVINGROOM_T_S_frame_0726_jpg.rf.e664e34452f6a825b0b50f47b2a956c3.jpg,720,1280,2,553,327,945,653 -JENGA_LIVINGROOM_B_H_frame_0629_jpg.rf.e667f726443b75ee03b2a986583a43b5.jpg,720,1280,2,752,438,1106,715 -JENGA_LIVINGROOM_B_H_frame_2517_jpg.rf.e6864583a9d7e9bf693c319351ae8255.jpg,720,1280,1,1,421,359,719 -JENGA_LIVINGROOM_B_H_frame_2517_jpg.rf.e6864583a9d7e9bf693c319351ae8255.jpg,720,1280,2,611,512,1036,717 -JENGA_OFFICE_T_H_frame_1100_jpg.rf.e6c146eac2375a347dceace740eb07d6.jpg,720,1280,2,519,538,787,717 -JENGA_LIVINGROOM_T_S_frame_2615_jpg.rf.e6c94c6fd0fe155cee83ad55e3438d11.jpg,720,1280,1,35,336,389,702 -JENGA_LIVINGROOM_T_S_frame_2615_jpg.rf.e6c94c6fd0fe155cee83ad55e3438d11.jpg,720,1280,2,561,332,958,661 -CARDS_OFFICE_T_H_frame_0497_jpg.rf.e70817c5ca3819399f83cb204b0b3134.jpg,720,1280,1,198,632,423,719 -CARDS_OFFICE_T_H_frame_0497_jpg.rf.e70817c5ca3819399f83cb204b0b3134.jpg,720,1280,2,520,539,768,719 -PUZZLE_COURTYARD_H_T_frame_1640_jpg.rf.e739d158cf142dadf27135ed6e0fe966.jpg,720,1280,1,213,544,523,717 -PUZZLE_COURTYARD_H_T_frame_1640_jpg.rf.e739d158cf142dadf27135ed6e0fe966.jpg,720,1280,2,721,411,973,713 -CHESS_COURTYARD_H_S_frame_1161_jpg.rf.e73d6d8900ac4c253a02f7605e8b2fc0.jpg,720,1280,2,802,640,1014,717 -PUZZLE_OFFICE_T_S_frame_0015_jpg.rf.e747bd30fa9470ebd91c920a302cfea9.jpg,720,1280,1,207,464,477,706 -PUZZLE_OFFICE_T_S_frame_0015_jpg.rf.e747bd30fa9470ebd91c920a302cfea9.jpg,720,1280,2,496,450,729,716 -JENGA_OFFICE_H_T_frame_1133_jpg.rf.e74a9d12a1d08270852c4e62c9a19923.jpg,720,1280,1,214,704,323,717 -JENGA_OFFICE_H_T_frame_1133_jpg.rf.e74a9d12a1d08270852c4e62c9a19923.jpg,720,1280,2,777,646,946,719 -CARDS_LIVINGROOM_B_T_frame_2472_jpg.rf.e7600dabf6495ae0232ee04d29240574.jpg,720,1280,1,230,686,283,718 -CARDS_LIVINGROOM_B_T_frame_2472_jpg.rf.e7600dabf6495ae0232ee04d29240574.jpg,720,1280,2,626,648,785,718 -CARDS_COURTYARD_S_H_frame_0923_jpg.rf.e7703b718ae91a14857d5a439a2eff70.jpg,720,1280,1,264,377,491,635 -PUZZLE_COURTYARD_B_S_frame_0681_jpg.rf.e79992c0654feac1c5dda65ac6f58048.jpg,720,1280,2,652,601,1009,719 -CHESS_OFFICE_B_S_frame_2472_jpg.rf.e7c3eb4a577e27fb768f10313e1f889f.jpg,720,1280,2,678,665,996,716 -CHESS_COURTYARD_H_S_frame_1602_jpg.rf.e7d12cd61a258edbc56649137197a1a0.jpg,720,1280,2,724,334,894,505 -CHESS_COURTYARD_S_H_frame_2315_jpg.rf.e7b4f3c842ee81cdf467119ae8b1390d.jpg,720,1280,2,750,424,1146,716 -CARDS_COURTYARD_B_T_frame_2693_jpg.rf.e802e2f4d90bd95fa59c325317dbe15c.jpg,720,1280,2,579,689,672,718 -JENGA_OFFICE_B_S_frame_0519_jpg.rf.e80cf92ef9e55fcede271d5a61effa85.jpg,720,1280,1,7,613,305,717 -JENGA_OFFICE_B_S_frame_0519_jpg.rf.e80cf92ef9e55fcede271d5a61effa85.jpg,720,1280,2,493,429,828,716 -CARDS_COURTYARD_S_H_frame_0504_jpg.rf.e80f303f3eb00cee4b810882f9dd3fac.jpg,720,1280,1,168,642,327,718 -CARDS_LIVINGROOM_S_H_frame_2102_jpg.rf.e8181a82747ea2567ac93aec20f2264e.jpg,720,1280,1,256,667,398,719 -CARDS_LIVINGROOM_S_H_frame_2102_jpg.rf.e8181a82747ea2567ac93aec20f2264e.jpg,720,1280,2,567,669,809,719 -PUZZLE_LIVINGROOM_T_B_frame_0596_jpg.rf.e82202caa6ea63d04bc6d4c7e2a1b459.jpg,720,1280,1,1,540,395,717 -PUZZLE_LIVINGROOM_T_B_frame_0596_jpg.rf.e82202caa6ea63d04bc6d4c7e2a1b459.jpg,720,1280,2,555,586,1104,717 -CHESS_OFFICE_T_H_frame_0763_jpg.rf.e82fa374216b3beb08443bd906f0687d.jpg,720,1280,2,506,276,869,468 -JENGA_OFFICE_S_B_frame_1721_jpg.rf.e834c9d89cd2c6bff97a6e1169c9f32c.jpg,720,1280,2,314,246,584,551 -CARDS_COURTYARD_T_B_frame_0911_jpg.rf.e83520672274e440acc9f9b3e70bf48f.jpg,720,1280,1,174,592,364,718 -CARDS_COURTYARD_T_B_frame_0911_jpg.rf.e83520672274e440acc9f9b3e70bf48f.jpg,720,1280,2,556,481,942,718 -JENGA_OFFICE_B_S_frame_1318_jpg.rf.e8413f3e953e718b9da3610b91bb28cb.jpg,720,1280,1,92,163,269,514 -JENGA_OFFICE_B_S_frame_1318_jpg.rf.e8413f3e953e718b9da3610b91bb28cb.jpg,720,1280,2,457,406,762,718 -JENGA_OFFICE_B_S_frame_0663_jpg.rf.e85b8dfd79e7814d49cbf012e724a946.jpg,720,1280,2,509,466,837,718 -PUZZLE_OFFICE_T_S_frame_2422_jpg.rf.e87bee2d60063689517cc1e294c82ab8.jpg,720,1280,1,120,473,440,719 -PUZZLE_OFFICE_T_S_frame_2422_jpg.rf.e87bee2d60063689517cc1e294c82ab8.jpg,720,1280,2,481,556,705,719 -CARDS_OFFICE_T_H_frame_1788_jpg.rf.e8bc4bc2259a993e5c7555053b0df160.jpg,720,1280,1,224,670,308,717 -CARDS_OFFICE_T_H_frame_1788_jpg.rf.e8bc4bc2259a993e5c7555053b0df160.jpg,720,1280,2,569,622,715,719 -PUZZLE_LIVINGROOM_T_B_frame_1411_jpg.rf.e8dbb123e8ea2a5a68a4c39d6ac5c9eb.jpg,720,1280,1,1,497,249,718 -PUZZLE_LIVINGROOM_T_B_frame_1411_jpg.rf.e8dbb123e8ea2a5a68a4c39d6ac5c9eb.jpg,720,1280,2,617,428,1278,713 -JENGA_LIVINGROOM_T_S_frame_0326_jpg.rf.e8fee662c8d0dfc35b8572486d1b736b.jpg,720,1280,2,576,82,983,324 -CARDS_COURTYARD_S_H_frame_2243_jpg.rf.e90a5470d3f36c0ed2dcd6c66ad91d51.jpg,720,1280,1,310,464,514,710 -JENGA_OFFICE_H_T_frame_2334_jpg.rf.e91f90d7a5a2edbdaacad51b3c2150c0.jpg,720,1280,1,8,377,288,711 -JENGA_OFFICE_H_T_frame_2334_jpg.rf.e91f90d7a5a2edbdaacad51b3c2150c0.jpg,720,1280,2,573,3,915,346 -CARDS_LIVINGROOM_T_B_frame_0083_jpg.rf.e923e2c6bb1a0d10582bbd3dd723895a.jpg,720,1280,1,1,597,293,719 -CARDS_LIVINGROOM_T_B_frame_0083_jpg.rf.e923e2c6bb1a0d10582bbd3dd723895a.jpg,720,1280,2,392,327,923,694 -CHESS_OFFICE_T_H_frame_2345_jpg.rf.e950f7f6467dacd2ad1f91275357edd6.jpg,720,1280,1,183,643,388,719 -CHESS_OFFICE_T_H_frame_2345_jpg.rf.e950f7f6467dacd2ad1f91275357edd6.jpg,720,1280,2,377,679,584,719 -JENGA_COURTYARD_B_H_frame_1441_jpg.rf.e97944c95cf406ff974c95bc4d35c65b.jpg,720,1280,1,346,660,535,719 -JENGA_COURTYARD_B_H_frame_1441_jpg.rf.e97944c95cf406ff974c95bc4d35c65b.jpg,720,1280,2,754,262,1003,632 -CHESS_OFFICE_T_H_frame_1140_jpg.rf.e9b29df35ff15b309f47c9c8eff88413.jpg,720,1280,1,46,643,302,717 -CHESS_OFFICE_T_H_frame_1140_jpg.rf.e9b29df35ff15b309f47c9c8eff88413.jpg,720,1280,2,371,622,614,714 -CHESS_LIVINGROOM_H_T_frame_0973_jpg.rf.e9b5e29732a76aea4c9297dae7f36412.jpg,720,1280,1,5,572,219,718 -CHESS_LIVINGROOM_H_T_frame_0973_jpg.rf.e9b5e29732a76aea4c9297dae7f36412.jpg,720,1280,2,1059,604,1270,718 -JENGA_OFFICE_S_B_frame_0930_jpg.rf.e9badc0623c8b38771337a8c408d150f.jpg,720,1280,1,237,638,478,716 -JENGA_OFFICE_S_B_frame_0930_jpg.rf.e9badc0623c8b38771337a8c408d150f.jpg,720,1280,2,875,591,1120,714 -CHESS_LIVINGROOM_H_T_frame_1982_jpg.rf.e9cbfcc79b383c332a66dcc00929e770.jpg,720,1280,1,1,625,196,716 -CHESS_LIVINGROOM_H_T_frame_1982_jpg.rf.e9cbfcc79b383c332a66dcc00929e770.jpg,720,1280,2,1033,366,1275,693 -CARDS_LIVINGROOM_H_S_frame_2465_jpg.rf.e9dfa4656c6a7771733d8fca878af484.jpg,720,1280,2,712,469,1093,719 -CARDS_LIVINGROOM_T_B_frame_2121_jpg.rf.e9e592bc1022a9d1e66c9f6e7f6f3cf8.jpg,720,1280,2,423,688,519,719 -PUZZLE_COURTYARD_T_H_frame_1041_jpg.rf.ea04cb348d7505cb6d898572fe9c96b0.jpg,720,1280,1,1,417,404,718 -PUZZLE_COURTYARD_T_H_frame_1041_jpg.rf.ea04cb348d7505cb6d898572fe9c96b0.jpg,720,1280,2,425,241,868,606 -CHESS_LIVINGROOM_S_B_frame_1062_jpg.rf.ea07bd5f631b4570f9a216ec0e0e9e53.jpg,720,1280,2,637,379,1228,718 -JENGA_LIVINGROOM_T_S_frame_1995_jpg.rf.ea0a972c78bffd78e386e44b1afaa468.jpg,720,1280,1,30,671,231,717 -JENGA_LIVINGROOM_T_S_frame_1995_jpg.rf.ea0a972c78bffd78e386e44b1afaa468.jpg,720,1280,2,657,672,838,717 -JENGA_LIVINGROOM_S_T_frame_0598_jpg.rf.ea12474555297c15974e85eeee020419.jpg,720,1280,1,1,663,156,718 -JENGA_LIVINGROOM_S_T_frame_0598_jpg.rf.ea12474555297c15974e85eeee020419.jpg,720,1280,2,452,684,656,718 -JENGA_OFFICE_H_T_frame_0855_jpg.rf.ea2c89bd395a5d2f1bd06cd7b99cc552.jpg,720,1280,1,110,626,310,715 -JENGA_OFFICE_H_T_frame_0855_jpg.rf.ea2c89bd395a5d2f1bd06cd7b99cc552.jpg,720,1280,2,774,565,1008,715 -CHESS_LIVINGROOM_H_T_frame_1812_jpg.rf.ea4706a26b984d6f43205a5470682304.jpg,720,1280,1,1,629,183,716 -CHESS_LIVINGROOM_H_T_frame_1812_jpg.rf.ea4706a26b984d6f43205a5470682304.jpg,720,1280,2,993,549,1279,718 -CARDS_OFFICE_B_S_frame_2195_jpg.rf.ea4926d641a811dd7aee864805226034.jpg,720,1280,1,284,639,501,718 -CARDS_OFFICE_B_S_frame_2195_jpg.rf.ea4926d641a811dd7aee864805226034.jpg,720,1280,2,538,634,792,718 -CARDS_OFFICE_B_S_frame_0954_jpg.rf.ea5068ef9ab6bd68092ebebb8faf3fec.jpg,720,1280,2,800,532,959,718 -CARDS_OFFICE_B_S_frame_0954_jpg.rf.ea5068ef9ab6bd68092ebebb8faf3fec.jpg,720,1280,1,329,705,361,719 -CHESS_LIVINGROOM_H_T_frame_0135_jpg.rf.ea5b11a07a02da274da82645a64b2353.jpg,720,1280,1,1,563,344,714 -CHESS_LIVINGROOM_H_T_frame_0135_jpg.rf.ea5b11a07a02da274da82645a64b2353.jpg,720,1280,2,1109,593,1279,718 -CARDS_OFFICE_B_S_frame_1797_jpg.rf.ea74cb74081075d816d5e897d80e6993.jpg,720,1280,1,383,654,464,717 -CARDS_OFFICE_B_S_frame_1797_jpg.rf.ea74cb74081075d816d5e897d80e6993.jpg,720,1280,2,651,640,835,718 -PUZZLE_COURTYARD_S_B_frame_0860_jpg.rf.ea6aae09110d1d4079f9d8210225a120.jpg,720,1280,1,6,623,303,718 -PUZZLE_COURTYARD_S_B_frame_0860_jpg.rf.ea6aae09110d1d4079f9d8210225a120.jpg,720,1280,2,668,577,985,718 -JENGA_OFFICE_T_H_frame_1172_jpg.rf.ea84e585800711e87d19bb9ff51df0ac.jpg,720,1280,2,522,561,778,718 -CHESS_OFFICE_T_H_frame_0963_jpg.rf.eaa1488c60b9b44405654f8f6223f278.jpg,720,1280,1,123,695,232,717 -CHESS_OFFICE_T_H_frame_0963_jpg.rf.eaa1488c60b9b44405654f8f6223f278.jpg,720,1280,2,593,553,899,718 -PUZZLE_OFFICE_T_S_frame_1535_jpg.rf.eabe9e9d5f96317992bc7fddbfef9f2f.jpg,720,1280,2,632,605,830,712 -CHESS_COURTYARD_S_H_frame_1504_jpg.rf.eace7c843f62159ffd054c8bdbe77b37.jpg,720,1280,1,1,605,275,718 -CHESS_COURTYARD_S_H_frame_1504_jpg.rf.eace7c843f62159ffd054c8bdbe77b37.jpg,720,1280,2,480,642,777,717 -JENGA_LIVINGROOM_B_H_frame_0639_jpg.rf.eb1db83977cdaafddfe81aa31f0c356e.jpg,720,1280,1,128,705,200,718 -JENGA_LIVINGROOM_B_H_frame_0639_jpg.rf.eb1db83977cdaafddfe81aa31f0c356e.jpg,720,1280,2,785,460,1116,717 -PUZZLE_COURTYARD_T_H_frame_1026_jpg.rf.eb1e155d082e4bfcaea741aa394ea725.jpg,720,1280,1,1,460,355,718 -PUZZLE_COURTYARD_T_H_frame_1026_jpg.rf.eb1e155d082e4bfcaea741aa394ea725.jpg,720,1280,2,355,277,802,570 -PUZZLE_LIVINGROOM_S_H_frame_0549_jpg.rf.eb38dc9d38c11664ae5099ff6cc2b032.jpg,720,1280,1,1,572,43,684 -CARDS_OFFICE_T_H_frame_1846_jpg.rf.eb4ab66b5d3336b1631355535efc99e0.jpg,720,1280,2,499,452,711,626 -JENGA_COURTYARD_S_T_frame_1434_jpg.rf.eb6c39f553dd5ce42a0393665af3bce9.jpg,720,1280,1,27,248,284,449 -CHESS_OFFICE_T_H_frame_1768_jpg.rf.ebb0560851d580587ab469ef28268e65.jpg,720,1280,1,232,642,447,717 -CHESS_OFFICE_T_H_frame_1768_jpg.rf.ebb0560851d580587ab469ef28268e65.jpg,720,1280,2,515,669,711,712 -PUZZLE_COURTYARD_B_S_frame_0619_jpg.rf.ebb6c8fbfc0756630a468e389d3f6797.jpg,720,1280,2,766,485,1146,719 -CARDS_COURTYARD_B_T_frame_1475_jpg.rf.ebccb7ddab0377cb81cb230a03435609.jpg,720,1280,1,433,625,674,717 -CARDS_COURTYARD_B_T_frame_1475_jpg.rf.ebccb7ddab0377cb81cb230a03435609.jpg,720,1280,2,824,654,1026,717 -PUZZLE_OFFICE_T_S_frame_2551_jpg.rf.ebef11ecbc4368ae9fa6d09df52e7d76.jpg,720,1280,1,25,406,399,696 -PUZZLE_OFFICE_T_S_frame_2551_jpg.rf.ebef11ecbc4368ae9fa6d09df52e7d76.jpg,720,1280,2,553,384,877,711 -CARDS_LIVINGROOM_H_S_frame_1350_jpg.rf.ebf67a2945dd4f48b6fee2b6dba786e2.jpg,720,1280,1,305,648,421,715 -CARDS_LIVINGROOM_H_S_frame_1350_jpg.rf.ebf67a2945dd4f48b6fee2b6dba786e2.jpg,720,1280,2,724,560,995,719 -CHESS_LIVINGROOM_B_S_frame_0058_jpg.rf.ec01dc981d00d043beef2103e9be24cb.jpg,720,1280,2,645,448,1179,712 -CARDS_COURTYARD_T_B_frame_0337_jpg.rf.ec29d52a9ddf9be6a8f2c0487cfcb395.jpg,720,1280,1,158,477,482,718 -CARDS_COURTYARD_T_B_frame_0337_jpg.rf.ec29d52a9ddf9be6a8f2c0487cfcb395.jpg,720,1280,2,564,395,927,718 -CARDS_LIVINGROOM_S_H_frame_1423_jpg.rf.ec42e2aacc61df7d9ae26be49398ba65.jpg,720,1280,1,154,674,327,718 -CARDS_LIVINGROOM_S_H_frame_1423_jpg.rf.ec42e2aacc61df7d9ae26be49398ba65.jpg,720,1280,2,594,665,732,718 -JENGA_COURTYARD_S_T_frame_2691_jpg.rf.ec498fb31d2228688b66918e51db95e0.jpg,720,1280,1,146,532,333,717 -JENGA_COURTYARD_S_T_frame_2691_jpg.rf.ec498fb31d2228688b66918e51db95e0.jpg,720,1280,2,631,536,825,718 -JENGA_OFFICE_B_S_frame_2211_jpg.rf.ec532b16017769e850668cf7ec4af487.jpg,720,1280,2,480,75,986,477 -PUZZLE_COURTYARD_H_T_frame_2547_jpg.rf.ec604b1c29ae81899c63ea4f6cf61f1e.jpg,720,1280,1,286,470,517,717 -PUZZLE_COURTYARD_H_T_frame_2547_jpg.rf.ec604b1c29ae81899c63ea4f6cf61f1e.jpg,720,1280,2,654,475,827,704 -PUZZLE_LIVINGROOM_H_S_frame_0963_jpg.rf.ec70e3ec2b00ec92ce5499752b8d6049.jpg,720,1280,2,454,635,768,718 -PUZZLE_LIVINGROOM_B_T_frame_2651_jpg.rf.ec9722114bf4cfa53e626ae6bfc57815.jpg,720,1280,1,169,401,564,675 -PUZZLE_LIVINGROOM_B_T_frame_2651_jpg.rf.ec9722114bf4cfa53e626ae6bfc57815.jpg,720,1280,2,665,450,1188,716 -PUZZLE_OFFICE_B_H_frame_1412_jpg.rf.eca8eea99136add5051198a309f3b8ad.jpg,720,1280,1,154,623,435,715 -PUZZLE_OFFICE_B_H_frame_1412_jpg.rf.eca8eea99136add5051198a309f3b8ad.jpg,720,1280,2,629,469,1045,713 -PUZZLE_COURTYARD_H_T_frame_1541_jpg.rf.ecab0478cbda50422b43a17c61c21b4c.jpg,720,1280,1,151,503,474,718 -PUZZLE_COURTYARD_H_T_frame_1541_jpg.rf.ecab0478cbda50422b43a17c61c21b4c.jpg,720,1280,2,647,545,918,717 -PUZZLE_LIVINGROOM_B_T_frame_1585_jpg.rf.ecac65fd550ae613608f130d67765009.jpg,720,1280,2,587,553,936,719 -PUZZLE_COURTYARD_T_H_frame_1953_jpg.rf.ecb1af0b398665299a9587c48232fbec.jpg,720,1280,2,409,263,851,619 -PUZZLE_COURTYARD_T_H_frame_1953_jpg.rf.ecb1af0b398665299a9587c48232fbec.jpg,720,1280,1,0,616,339,719 -JENGA_COURTYARD_T_S_frame_0206_jpg.rf.ecde456ae40ee841880bf8f74695aed1.jpg,720,1280,1,94,623,333,718 -JENGA_LIVINGROOM_B_H_frame_1408_jpg.rf.ecd36288530fa0d7d07dc059f5869f02.jpg,720,1280,1,8,566,387,718 -JENGA_LIVINGROOM_B_H_frame_1408_jpg.rf.ecd36288530fa0d7d07dc059f5869f02.jpg,720,1280,2,721,459,1003,717 -JENGA_OFFICE_B_S_frame_0866_jpg.rf.ecea54b9511256f6b223daeca4eeed75.jpg,720,1280,1,138,577,490,717 -JENGA_OFFICE_B_S_frame_0866_jpg.rf.ecea54b9511256f6b223daeca4eeed75.jpg,720,1280,2,697,552,940,717 -CARDS_LIVINGROOM_S_H_frame_1248_jpg.rf.ed04a2dd3843aeb3d46faa95bd5f58f8.jpg,720,1280,1,0,366,262,717 -CARDS_LIVINGROOM_S_H_frame_1248_jpg.rf.ed04a2dd3843aeb3d46faa95bd5f58f8.jpg,720,1280,2,361,388,856,719 -CARDS_LIVINGROOM_T_B_frame_2281_jpg.rf.ed10d0cf38bc00c33f4c5d869316baa8.jpg,720,1280,1,7,650,130,719 -CARDS_LIVINGROOM_T_B_frame_2281_jpg.rf.ed10d0cf38bc00c33f4c5d869316baa8.jpg,720,1280,2,667,691,768,719 -PUZZLE_COURTYARD_H_T_frame_0514_jpg.rf.ed1999c332314346d4ed196b5f89fc28.jpg,720,1280,1,125,564,398,717 -PUZZLE_COURTYARD_H_T_frame_0514_jpg.rf.ed1999c332314346d4ed196b5f89fc28.jpg,720,1280,2,637,630,882,718 -CHESS_COURTYARD_T_B_frame_1364_jpg.rf.ed1b4f2a8c6946e124c53f582877ccb8.jpg,720,1280,1,80,655,327,716 -CHESS_COURTYARD_T_B_frame_1364_jpg.rf.ed1b4f2a8c6946e124c53f582877ccb8.jpg,720,1280,2,476,681,613,717 -CARDS_LIVINGROOM_B_T_frame_2605_jpg.rf.ed24a269a55bf28c56ba2babc20f5c11.jpg,720,1280,2,550,631,772,718 -JENGA_LIVINGROOM_T_S_frame_0296_jpg.rf.ed3bdd3c9374404083466f3bcc94d01e.jpg,720,1280,2,541,259,919,544 -JENGA_LIVINGROOM_T_S_frame_1026_jpg.rf.ed56438f7e1e2c1a61c40e034c8e3dd6.jpg,720,1280,1,7,685,176,719 -JENGA_LIVINGROOM_T_S_frame_1026_jpg.rf.ed56438f7e1e2c1a61c40e034c8e3dd6.jpg,720,1280,2,641,432,985,717 -PUZZLE_LIVINGROOM_B_T_frame_1434_jpg.rf.ed5788af312a4625657c9eb0baa0f089.jpg,720,1280,1,5,571,207,714 -PUZZLE_LIVINGROOM_B_T_frame_1434_jpg.rf.ed5788af312a4625657c9eb0baa0f089.jpg,720,1280,2,602,598,1175,716 -CHESS_COURTYARD_B_T_frame_2603_jpg.rf.ed8ce51dfde80950f739150632f175d6.jpg,720,1280,2,1046,691,1204,717 -PUZZLE_LIVINGROOM_B_T_frame_1475_jpg.rf.ed907cd1bde2a081d112511068d717b2.jpg,720,1280,1,5,575,458,718 -PUZZLE_LIVINGROOM_B_T_frame_1475_jpg.rf.ed907cd1bde2a081d112511068d717b2.jpg,720,1280,2,686,609,1175,719 -CHESS_COURTYARD_B_T_frame_1035_jpg.rf.ed91810b3504245870b0c46220580200.jpg,720,1280,2,748,388,1145,651 -CHESS_COURTYARD_B_T_frame_1648_jpg.rf.ed9ca2eef50568859f7d4cce8d01d69e.jpg,720,1280,2,799,537,1120,718 -CARDS_COURTYARD_H_S_frame_0672_jpg.rf.eda974db33099cd4bd31ff129860c733.jpg,720,1280,1,254,597,504,719 -CARDS_COURTYARD_H_S_frame_0672_jpg.rf.eda974db33099cd4bd31ff129860c733.jpg,720,1280,2,570,527,965,719 -CARDS_OFFICE_B_S_frame_0751_jpg.rf.edad6bfa41fd89e708307457836cedc4.jpg,720,1280,1,381,668,485,718 -CARDS_OFFICE_B_S_frame_0751_jpg.rf.edad6bfa41fd89e708307457836cedc4.jpg,720,1280,2,671,677,742,718 -CHESS_COURTYARD_H_S_frame_1733_jpg.rf.edae6a0f7342c1fdc0c0cac530900280.jpg,720,1280,2,847,223,1227,577 -PUZZLE_LIVINGROOM_T_B_frame_0864_jpg.rf.edb96fcd6dc2083e624175b1b623267d.jpg,720,1280,1,1,617,177,716 -PUZZLE_LIVINGROOM_T_B_frame_0864_jpg.rf.edb96fcd6dc2083e624175b1b623267d.jpg,720,1280,2,604,436,1015,714 -PUZZLE_OFFICE_H_B_frame_2013_jpg.rf.edbb019cc064a1c2ead06b3ca60ea7e1.jpg,720,1280,1,303,604,599,718 -PUZZLE_OFFICE_H_B_frame_2013_jpg.rf.edbb019cc064a1c2ead06b3ca60ea7e1.jpg,720,1280,2,659,629,921,719 -CARDS_OFFICE_S_B_frame_0228_jpg.rf.ee1d2b377aac69baa0d96d9f4c232db1.jpg,720,1280,1,192,636,411,718 -CHESS_LIVINGROOM_S_B_frame_1054_jpg.rf.ee3815801f60c729dc492b15eb73d421.jpg,720,1280,2,680,349,1256,693 -CARDS_OFFICE_T_H_frame_2689_jpg.rf.ee23c2c848553e1000011a7403ea4117.jpg,720,1280,1,171,683,236,715 -CARDS_OFFICE_T_H_frame_2689_jpg.rf.ee23c2c848553e1000011a7403ea4117.jpg,720,1280,2,556,651,700,719 -CARDS_OFFICE_S_B_frame_0386_jpg.rf.ee410cacf54badaf48190c4ec1726aac.jpg,720,1280,1,176,375,382,652 -JENGA_COURTYARD_S_T_frame_1410_jpg.rf.ee4231f5d3e8064d57dcc45b3af3e4cc.jpg,720,1280,1,170,481,407,675 -JENGA_COURTYARD_S_T_frame_1410_jpg.rf.ee4231f5d3e8064d57dcc45b3af3e4cc.jpg,720,1280,2,528,695,579,718 -PUZZLE_OFFICE_B_H_frame_0169_jpg.rf.ee557a26d3bdd2ed04c6b871bf7f991b.jpg,720,1280,2,780,537,1004,715 -CARDS_OFFICE_H_T_frame_0852_jpg.rf.ee6951e1745bb41c90e4154e023b2e6d.jpg,720,1280,1,247,593,482,718 -CARDS_OFFICE_H_T_frame_0852_jpg.rf.ee6951e1745bb41c90e4154e023b2e6d.jpg,720,1280,2,669,614,876,718 -JENGA_OFFICE_H_T_frame_0906_jpg.rf.ee76541b3672a5c7611f6583ff31c11d.jpg,720,1280,1,86,568,356,719 -JENGA_OFFICE_H_T_frame_0906_jpg.rf.ee76541b3672a5c7611f6583ff31c11d.jpg,720,1280,2,791,488,1028,708 -JENGA_LIVINGROOM_B_H_frame_2060_jpg.rf.ee9ff7b2ba132a4f002fd1235248a5c4.jpg,720,1280,2,767,660,940,716 -CARDS_COURTYARD_T_B_frame_0707_jpg.rf.eea11167ef664fcd75909d3fd44d1f72.jpg,720,1280,1,225,603,377,718 -CARDS_COURTYARD_T_B_frame_0707_jpg.rf.eea11167ef664fcd75909d3fd44d1f72.jpg,720,1280,2,654,569,861,714 -JENGA_COURTYARD_S_T_frame_2427_jpg.rf.eea8d9dba6b759b777830ab0157dc53a.jpg,720,1280,2,700,506,1122,718 -CARDS_LIVINGROOM_T_B_frame_1728_jpg.rf.eed8b87dcaf114a381fd96e99e020e0d.jpg,720,1280,1,1,644,324,719 -CARDS_LIVINGROOM_T_B_frame_1728_jpg.rf.eed8b87dcaf114a381fd96e99e020e0d.jpg,720,1280,2,606,642,834,717 -CHESS_COURTYARD_H_S_frame_0599_jpg.rf.eee010068596e329f10e8bb98c70f700.jpg,720,1280,2,732,695,854,717 -PUZZLE_OFFICE_H_B_frame_0690_jpg.rf.ef5d40156e9c039f6d558032df38e951.jpg,720,1280,2,776,661,922,713 -JENGA_LIVINGROOM_B_H_frame_1086_jpg.rf.ef633c1531bd262f94a26289f6512940.jpg,720,1280,2,616,205,1048,473 -CARDS_OFFICE_T_H_frame_0659_jpg.rf.ef6451c6fec015e82e13f2b9ac8d8289.jpg,720,1280,1,141,571,383,719 -CARDS_OFFICE_T_H_frame_0659_jpg.rf.ef6451c6fec015e82e13f2b9ac8d8289.jpg,720,1280,2,505,531,739,719 -CHESS_LIVINGROOM_S_B_frame_0769_jpg.rf.ef68f0299d59fc21acce1a5e8e43e005.jpg,720,1280,2,798,470,1180,713 -JENGA_COURTYARD_T_S_frame_1180_jpg.rf.ef6bbcf2408d4d32e939e9a775e8ea40.jpg,720,1280,1,64,322,470,716 -JENGA_COURTYARD_T_S_frame_1180_jpg.rf.ef6bbcf2408d4d32e939e9a775e8ea40.jpg,720,1280,2,482,292,891,679 -CHESS_COURTYARD_S_H_frame_0561_jpg.rf.ef7beb5f1044a3804d44f88337996566.jpg,720,1280,2,551,515,1122,716 -JENGA_LIVINGROOM_T_S_frame_2226_jpg.rf.ef836818e8665e08883d44bffb525c80.jpg,720,1280,2,526,257,897,550 -PUZZLE_COURTYARD_T_H_frame_0630_jpg.rf.ef9be0df66c88dea633e525544b5451d.jpg,720,1280,1,1,519,217,718 -PUZZLE_COURTYARD_T_H_frame_0630_jpg.rf.ef9be0df66c88dea633e525544b5451d.jpg,720,1280,2,599,282,836,485 -PUZZLE_LIVINGROOM_H_S_frame_1086_jpg.rf.efc84914b18162f0ddd146f7e1ea61fd.jpg,720,1280,1,124,557,454,713 -PUZZLE_LIVINGROOM_H_S_frame_1086_jpg.rf.efc84914b18162f0ddd146f7e1ea61fd.jpg,720,1280,2,614,569,904,716 -CARDS_COURTYARD_T_B_frame_1298_jpg.rf.efe2b9adb5173215e76f5a511d023c5d.jpg,720,1280,1,123,584,378,718 -CARDS_COURTYARD_T_B_frame_1298_jpg.rf.efe2b9adb5173215e76f5a511d023c5d.jpg,720,1280,2,631,530,835,714 -PUZZLE_COURTYARD_T_H_frame_2403_jpg.rf.eff64adbe971f644f1be8d0464e7d958.jpg,720,1280,2,825,197,1279,714 -PUZZLE_COURTYARD_T_H_frame_2403_jpg.rf.eff64adbe971f644f1be8d0464e7d958.jpg,720,1280,1,162,644,611,718 -PUZZLE_LIVINGROOM_S_H_frame_0144_jpg.rf.f0046c8a6f81f1e707a06501ebb33433.jpg,720,1280,1,1,466,323,718 -PUZZLE_LIVINGROOM_S_H_frame_0144_jpg.rf.f0046c8a6f81f1e707a06501ebb33433.jpg,720,1280,2,539,587,955,718 -CARDS_COURTYARD_H_S_frame_0073_jpg.rf.f0055300776cd17f5dcba359dddaf9df.jpg,720,1280,1,218,658,456,719 -CARDS_COURTYARD_H_S_frame_0073_jpg.rf.f0055300776cd17f5dcba359dddaf9df.jpg,720,1280,2,554,545,890,719 -PUZZLE_COURTYARD_H_T_frame_0819_jpg.rf.f00f992ecae041080f5d3bab3dac7a4e.jpg,720,1280,1,387,506,620,718 -PUZZLE_COURTYARD_H_T_frame_0819_jpg.rf.f00f992ecae041080f5d3bab3dac7a4e.jpg,720,1280,2,1060,563,1278,718 -CHESS_LIVINGROOM_S_B_frame_1889_jpg.rf.f01d6b7a8e39d761eb72bb36be5000ec.jpg,720,1280,1,2,395,488,702 -JENGA_LIVINGROOM_S_T_frame_0495_jpg.rf.f039713c00b3536ffb9ff0cf92a10fd9.jpg,720,1280,2,501,118,934,453 -CHESS_OFFICE_H_T_frame_2641_jpg.rf.f03c2142c9312c59d2634f335bda3222.jpg,720,1280,2,647,543,910,713 -PUZZLE_OFFICE_H_B_frame_2016_jpg.rf.f03f659f73a93c781022646a7715ba63.jpg,720,1280,1,294,582,594,719 -PUZZLE_OFFICE_H_B_frame_2016_jpg.rf.f03f659f73a93c781022646a7715ba63.jpg,720,1280,2,642,630,902,719 -JENGA_LIVINGROOM_H_B_frame_2472_jpg.rf.f05975082d8c805c5a38b03f0c58a5f8.jpg,720,1280,2,815,693,948,717 -PUZZLE_COURTYARD_T_H_frame_1506_jpg.rf.f05a44db9f261a02c5870baf9e07acc3.jpg,720,1280,1,1,498,50,612 -PUZZLE_COURTYARD_T_H_frame_1506_jpg.rf.f05a44db9f261a02c5870baf9e07acc3.jpg,720,1280,2,603,580,1090,718 -CARDS_OFFICE_T_H_frame_1575_jpg.rf.f083466d71ea275057699fda3a598842.jpg,720,1280,1,268,607,501,719 -CARDS_OFFICE_T_H_frame_1575_jpg.rf.f083466d71ea275057699fda3a598842.jpg,720,1280,2,563,480,902,715 -JENGA_COURTYARD_T_S_frame_2375_jpg.rf.f0911942e08425fbf69b3fd5051f5689.jpg,720,1280,1,138,349,484,692 -JENGA_COURTYARD_T_S_frame_2375_jpg.rf.f0911942e08425fbf69b3fd5051f5689.jpg,720,1280,2,527,328,870,584 -JENGA_COURTYARD_S_T_frame_0487_jpg.rf.f098db3e6f5d2738cf784c462d0878d7.jpg,720,1280,1,280,567,431,718 -CARDS_COURTYARD_T_B_frame_0685_jpg.rf.f0a417a3d6a3825de0941fa8b18f69e7.jpg,720,1280,1,141,511,485,718 -CARDS_COURTYARD_T_B_frame_0685_jpg.rf.f0a417a3d6a3825de0941fa8b18f69e7.jpg,720,1280,2,583,432,924,714 -CHESS_OFFICE_T_H_frame_1379_jpg.rf.f0b69da9b45097dea952c9197da405e2.jpg,720,1280,2,622,429,880,614 -PUZZLE_OFFICE_B_H_frame_1453_jpg.rf.f0c9a03c3feef0761112ee664fbbb858.jpg,720,1280,1,118,551,458,712 -PUZZLE_OFFICE_B_H_frame_1453_jpg.rf.f0c9a03c3feef0761112ee664fbbb858.jpg,720,1280,2,479,473,972,712 -CARDS_OFFICE_T_H_frame_0049_jpg.rf.f0e5130e405158370a6b2f8b624df077.jpg,720,1280,2,717,466,874,621 -JENGA_OFFICE_S_B_frame_1828_jpg.rf.f110e2d8c217657e60c134fe29bc77c2.jpg,720,1280,1,4,197,379,719 -JENGA_OFFICE_S_B_frame_1828_jpg.rf.f110e2d8c217657e60c134fe29bc77c2.jpg,720,1280,2,630,124,1116,642 -CARDS_OFFICE_T_H_frame_0236_jpg.rf.f118982da2bc658ad18f0a1464976d07.jpg,720,1280,1,205,649,308,719 -CARDS_OFFICE_T_H_frame_0236_jpg.rf.f118982da2bc658ad18f0a1464976d07.jpg,720,1280,2,630,603,806,719 -JENGA_COURTYARD_H_B_frame_2429_jpg.rf.f1284e28f2899961af14ebe50d25cae1.jpg,720,1280,1,145,697,294,718 -JENGA_COURTYARD_H_B_frame_2429_jpg.rf.f1284e28f2899961af14ebe50d25cae1.jpg,720,1280,2,482,366,787,718 -PUZZLE_OFFICE_H_B_frame_1472_jpg.rf.f139fbfa4d0185d2a54c0f9e4f8b088c.jpg,720,1280,1,305,652,560,718 -PUZZLE_OFFICE_H_B_frame_1472_jpg.rf.f139fbfa4d0185d2a54c0f9e4f8b088c.jpg,720,1280,2,812,587,1038,716 -CARDS_LIVINGROOM_H_S_frame_0499_jpg.rf.f172755b17e460916eb6c07687c61574.jpg,720,1280,2,474,558,842,719 -CARDS_OFFICE_H_T_frame_0992_jpg.rf.f17e8cd65865c0c6124fe5dba3e653f5.jpg,720,1280,1,230,546,510,718 -CARDS_OFFICE_H_T_frame_0992_jpg.rf.f17e8cd65865c0c6124fe5dba3e653f5.jpg,720,1280,2,777,332,1020,525 -CHESS_COURTYARD_S_H_frame_2251_jpg.rf.f19327aac98e49fd6125905a98a281f5.jpg,720,1280,1,1,345,418,717 -CHESS_COURTYARD_S_H_frame_2251_jpg.rf.f19327aac98e49fd6125905a98a281f5.jpg,720,1280,2,577,366,932,716 -PUZZLE_COURTYARD_B_S_frame_1419_jpg.rf.f1bd1f22edf3c81440fdd9c080f1a1f5.jpg,720,1280,1,279,648,507,719 -PUZZLE_COURTYARD_B_S_frame_1419_jpg.rf.f1bd1f22edf3c81440fdd9c080f1a1f5.jpg,720,1280,2,684,655,934,719 -PUZZLE_OFFICE_T_S_frame_2676_jpg.rf.f1e290fc8f41f8b5b42d6f968fb04928.jpg,720,1280,2,586,574,814,718 -CARDS_COURTYARD_S_H_frame_2090_jpg.rf.f1fa49a7f16ed24d7408e8295e85d78f.jpg,720,1280,2,541,682,739,718 -CARDS_COURTYARD_H_S_frame_1675_jpg.rf.f2299cef164332106c4a2d3ecc8035ef.jpg,720,1280,1,163,608,404,718 -CARDS_COURTYARD_H_S_frame_1675_jpg.rf.f2299cef164332106c4a2d3ecc8035ef.jpg,720,1280,2,602,420,912,719 -CARDS_COURTYARD_T_B_frame_1110_jpg.rf.f2397da0d46e4b695ea19e7f8872c11b.jpg,720,1280,1,790,697,911,717 -PUZZLE_OFFICE_B_H_frame_2142_jpg.rf.f2616ea4b75ba354782d2dfdf5f7444a.jpg,720,1280,1,190,536,497,713 -PUZZLE_OFFICE_B_H_frame_2142_jpg.rf.f2616ea4b75ba354782d2dfdf5f7444a.jpg,720,1280,2,680,504,1073,719 -JENGA_LIVINGROOM_H_B_frame_0187_jpg.rf.f2750924ac733502a39caf42432d0799.jpg,720,1280,2,606,392,901,668 -JENGA_OFFICE_H_T_frame_1182_jpg.rf.f289d116a8a9892b665847d48d950cdd.jpg,720,1280,2,781,675,933,715 -JENGA_OFFICE_B_S_frame_0529_jpg.rf.f292cd8df74699269d08a575eb00851d.jpg,720,1280,1,1,660,197,716 -JENGA_OFFICE_B_S_frame_0529_jpg.rf.f292cd8df74699269d08a575eb00851d.jpg,720,1280,2,290,379,645,718 -PUZZLE_LIVINGROOM_T_B_frame_0598_jpg.rf.f298b42d99aa676f4607bfb91555db05.jpg,720,1280,1,1,527,336,716 -PUZZLE_LIVINGROOM_S_H_frame_1099_jpg.rf.f29a85de86a6f4db7fd7beee2c734457.jpg,720,1280,1,56,421,427,663 -PUZZLE_LIVINGROOM_S_H_frame_1099_jpg.rf.f29a85de86a6f4db7fd7beee2c734457.jpg,720,1280,2,683,479,1010,718 -PUZZLE_LIVINGROOM_T_B_frame_0651_jpg.rf.f2b190207f2276e5410f98425e6d817d.jpg,720,1280,1,1,611,86,716 -PUZZLE_LIVINGROOM_T_B_frame_0651_jpg.rf.f2b190207f2276e5410f98425e6d817d.jpg,720,1280,2,565,506,947,717 -CHESS_COURTYARD_H_S_frame_0061_jpg.rf.f2c407800d86cfe1732099a639ad75ff.jpg,720,1280,2,647,398,841,573 -CHESS_COURTYARD_H_S_frame_2345_jpg.rf.f2f65103c3a065a609b1399f647f4501.jpg,720,1280,1,441,617,680,718 -CHESS_COURTYARD_H_S_frame_2345_jpg.rf.f2f65103c3a065a609b1399f647f4501.jpg,720,1280,2,845,457,1120,709 -PUZZLE_COURTYARD_T_H_frame_0945_jpg.rf.f2fe6dc5de2d08e92ca5ad091863c2ef.jpg,720,1280,1,1,451,368,718 -PUZZLE_COURTYARD_T_H_frame_0945_jpg.rf.f2fe6dc5de2d08e92ca5ad091863c2ef.jpg,720,1280,2,427,248,845,644 -JENGA_LIVINGROOM_H_B_frame_0753_jpg.rf.f3257120b5d5cbd067132a431db68def.jpg,720,1280,2,655,371,952,702 -CARDS_OFFICE_B_S_frame_0718_jpg.rf.f339dadcaabc4a141bea32b21d105c3b.jpg,720,1280,1,411,696,469,718 -CARDS_OFFICE_B_S_frame_0718_jpg.rf.f339dadcaabc4a141bea32b21d105c3b.jpg,720,1280,2,671,708,725,717 -JENGA_LIVINGROOM_B_H_frame_2625_jpg.rf.f3429dc36bfe5a99b5cc018ef5db9a69.jpg,720,1280,1,491,284,768,531 -PUZZLE_COURTYARD_H_T_frame_2418_jpg.rf.f3550561f99e44eb11c347c58bb12f9c.jpg,720,1280,1,352,646,610,718 -PUZZLE_COURTYARD_H_T_frame_2418_jpg.rf.f3550561f99e44eb11c347c58bb12f9c.jpg,720,1280,2,678,526,885,717 -JENGA_OFFICE_B_S_frame_1028_jpg.rf.f3562192b9fdc43cc6e39bcf3d018eff.jpg,720,1280,1,9,602,383,717 -JENGA_OFFICE_B_S_frame_1028_jpg.rf.f3562192b9fdc43cc6e39bcf3d018eff.jpg,720,1280,2,614,262,843,497 -CARDS_OFFICE_T_H_frame_2427_jpg.rf.f3637f4b889caf81a5d71103f9cfd537.jpg,720,1280,2,592,651,796,719 -CHESS_COURTYARD_T_B_frame_1140_jpg.rf.f3701a24deb6a0aa9725835b777bb917.jpg,720,1280,1,101,704,284,718 -CARDS_COURTYARD_S_H_frame_0873_jpg.rf.f37717086b04ab35b1df91640cb25a7e.jpg,720,1280,2,499,521,785,718 -PUZZLE_LIVINGROOM_T_B_frame_2108_jpg.rf.f3785fdc7bbe3d2f06ec31fe0afe5ae2.jpg,720,1280,2,711,420,1262,709 -CARDS_COURTYARD_B_T_frame_1377_jpg.rf.f39cf4645b16b26a0bc2dedfad723398.jpg,720,1280,1,228,539,464,714 -CARDS_COURTYARD_B_T_frame_1377_jpg.rf.f39cf4645b16b26a0bc2dedfad723398.jpg,720,1280,2,700,634,858,717 -JENGA_COURTYARD_H_B_frame_1968_jpg.rf.f3b8756cf710cf74843cf647cd685fc7.jpg,720,1280,1,160,74,516,309 -JENGA_COURTYARD_H_B_frame_1968_jpg.rf.f3b8756cf710cf74843cf647cd685fc7.jpg,720,1280,2,605,137,953,424 -JENGA_OFFICE_H_T_frame_2172_jpg.rf.f3c01088d43885c798c3ba3780f28d3b.jpg,720,1280,2,558,0,854,289 -JENGA_OFFICE_S_B_frame_0411_jpg.rf.f3d22170b915f40c2f1245d8a08497ee.jpg,720,1280,2,469,360,743,593 -PUZZLE_COURTYARD_B_S_frame_0181_jpg.rf.f3dcd0f618749c51ef8277771a73acc4.jpg,720,1280,1,328,681,506,719 -PUZZLE_COURTYARD_B_S_frame_0181_jpg.rf.f3dcd0f618749c51ef8277771a73acc4.jpg,720,1280,2,646,642,815,719 -JENGA_LIVINGROOM_S_T_frame_1410_jpg.rf.f3f9dc3aeba2b696a62a5e73cdafecda.jpg,720,1280,1,118,390,457,718 -JENGA_LIVINGROOM_S_T_frame_1410_jpg.rf.f3f9dc3aeba2b696a62a5e73cdafecda.jpg,720,1280,2,851,551,1128,718 -PUZZLE_COURTYARD_H_T_frame_0343_jpg.rf.f43dc4980628b384ea345a54f9d4afeb.jpg,720,1280,1,389,609,596,718 -PUZZLE_COURTYARD_H_T_frame_0343_jpg.rf.f43dc4980628b384ea345a54f9d4afeb.jpg,720,1280,2,812,507,1019,700 -PUZZLE_COURTYARD_H_T_frame_2545_jpg.rf.f44c5e598e8a670c5551e132e32bb347.jpg,720,1280,1,292,475,521,718 -PUZZLE_COURTYARD_H_T_frame_2545_jpg.rf.f44c5e598e8a670c5551e132e32bb347.jpg,720,1280,2,664,472,839,709 -PUZZLE_COURTYARD_B_S_frame_2469_jpg.rf.f459598f5ce9a76c013614d029e5ee85.jpg,720,1280,1,0,0,388,457 -PUZZLE_COURTYARD_B_S_frame_2469_jpg.rf.f459598f5ce9a76c013614d029e5ee85.jpg,720,1280,2,682,0,1279,501 -CARDS_OFFICE_B_S_frame_1356_jpg.rf.f4366051be1819d5720bd69df217f715.jpg,720,1280,1,494,685,552,718 -CARDS_OFFICE_B_S_frame_1356_jpg.rf.f4366051be1819d5720bd69df217f715.jpg,720,1280,2,604,522,862,718 -PUZZLE_COURTYARD_H_T_frame_2176_jpg.rf.f48da092699fc62e59ac66b45b3aedb2.jpg,720,1280,1,1,474,187,718 -PUZZLE_COURTYARD_H_T_frame_2176_jpg.rf.f48da092699fc62e59ac66b45b3aedb2.jpg,720,1280,2,947,252,1220,568 -JENGA_LIVINGROOM_H_B_frame_0515_jpg.rf.f4b5dc45043f9cd5f1feed48de23716b.jpg,720,1280,2,670,552,1023,718 -CARDS_COURTYARD_H_S_frame_1185_jpg.rf.f4c69dd803a382199df05e6aa338838e.jpg,720,1280,1,44,513,396,718 -CARDS_COURTYARD_H_S_frame_1185_jpg.rf.f4c69dd803a382199df05e6aa338838e.jpg,720,1280,2,468,481,783,719 -PUZZLE_LIVINGROOM_B_T_frame_1386_jpg.rf.f4d330b6ef10dd3bd112a7c823a0d945.jpg,720,1280,1,3,502,480,716 -PUZZLE_LIVINGROOM_B_T_frame_1386_jpg.rf.f4d330b6ef10dd3bd112a7c823a0d945.jpg,720,1280,2,523,554,1193,716 -JENGA_LIVINGROOM_H_B_frame_0772_jpg.rf.f4e21dadc2a8135617decd7c0f7ffc9f.jpg,720,1280,2,686,376,956,671 -PUZZLE_COURTYARD_S_B_frame_1409_jpg.rf.f51e7f6229f696e52df2c2457c75fbf9.jpg,720,1280,2,633,534,960,713 -CHESS_LIVINGROOM_H_T_frame_0972_jpg.rf.f53408b35293a7aecc5c94071513517d.jpg,720,1280,1,3,578,234,718 -CHESS_LIVINGROOM_H_T_frame_0972_jpg.rf.f53408b35293a7aecc5c94071513517d.jpg,720,1280,2,1067,606,1279,718 -PUZZLE_OFFICE_T_S_frame_2202_jpg.rf.f539dd1686bfb315a4ae324d561b367a.jpg,720,1280,1,262,377,511,606 -PUZZLE_OFFICE_T_S_frame_2202_jpg.rf.f539dd1686bfb315a4ae324d561b367a.jpg,720,1280,2,571,397,790,632 -JENGA_COURTYARD_H_B_frame_2605_jpg.rf.f53a5fc6de93be1aab0d9e97ea0a39ab.jpg,720,1280,2,529,684,679,718 -CARDS_OFFICE_T_H_frame_1111_jpg.rf.f542d6ec03a5484577f0613b5fa43af8.jpg,720,1280,1,366,654,446,719 -CARDS_OFFICE_T_H_frame_1111_jpg.rf.f542d6ec03a5484577f0613b5fa43af8.jpg,720,1280,2,567,408,796,617 -CARDS_LIVINGROOM_T_B_frame_1569_jpg.rf.f54cb4134d0eda7a795db1c628ce91f8.jpg,720,1280,2,452,494,930,717 -PUZZLE_OFFICE_H_B_frame_2067_jpg.rf.f552d66807ef101083ca16e2a2ec2265.jpg,720,1280,1,432,448,711,687 -PUZZLE_OFFICE_H_B_frame_2067_jpg.rf.f552d66807ef101083ca16e2a2ec2265.jpg,720,1280,2,754,438,1022,712 -JENGA_COURTYARD_B_H_frame_2462_jpg.rf.f55f83578d39e538377851ae287015bc.jpg,720,1280,1,335,684,452,718 -JENGA_COURTYARD_B_H_frame_2462_jpg.rf.f55f83578d39e538377851ae287015bc.jpg,720,1280,2,793,694,892,718 -PUZZLE_LIVINGROOM_T_B_frame_1302_jpg.rf.f56e42eb72b5534721206375f7e8b7df.jpg,720,1280,1,9,643,218,718 -PUZZLE_LIVINGROOM_T_B_frame_1302_jpg.rf.f56e42eb72b5534721206375f7e8b7df.jpg,720,1280,2,758,553,1279,717 -CARDS_LIVINGROOM_H_S_frame_0368_jpg.rf.f57b89eaf2060a37c53da9925febadf2.jpg,720,1280,2,738,503,1123,718 -CHESS_LIVINGROOM_H_T_frame_1563_jpg.rf.f59a8fc3d73427e3b01eb3fbb641da62.jpg,720,1280,1,3,633,160,718 -CHESS_LIVINGROOM_H_T_frame_1563_jpg.rf.f59a8fc3d73427e3b01eb3fbb641da62.jpg,720,1280,2,624,277,953,489 -JENGA_OFFICE_T_H_frame_0397_jpg.rf.f5ce2b4ac5be7c14256612a7ab4dfecd.jpg,720,1280,2,708,259,1023,539 -CARDS_COURTYARD_H_S_frame_0549_jpg.rf.f5ef48572e42efa30cc57197d77b74dd.jpg,720,1280,1,344,670,453,719 -CARDS_COURTYARD_H_S_frame_0549_jpg.rf.f5ef48572e42efa30cc57197d77b74dd.jpg,720,1280,2,553,449,934,719 -JENGA_LIVINGROOM_B_H_frame_0549_jpg.rf.f5e932c1f2da9dbb40597316b6e81f2f.jpg,720,1280,2,685,500,995,716 -JENGA_COURTYARD_S_T_frame_0075_jpg.rf.f6506704814f9800dc880a414908e515.jpg,720,1280,1,262,549,439,716 -CARDS_OFFICE_H_T_frame_0247_jpg.rf.f6589992902d8ffd7279157676a7982a.jpg,720,1280,1,71,496,465,718 -CARDS_OFFICE_H_T_frame_0247_jpg.rf.f6589992902d8ffd7279157676a7982a.jpg,720,1280,2,607,438,897,712 -CHESS_LIVINGROOM_T_H_frame_2036_jpg.rf.f65fca38fcd57b7fd44e3bb749c147a5.jpg,720,1280,1,1,322,67,491 -CHESS_LIVINGROOM_T_H_frame_2036_jpg.rf.f65fca38fcd57b7fd44e3bb749c147a5.jpg,720,1280,2,726,428,1187,719 -CHESS_COURTYARD_H_S_frame_1146_jpg.rf.f66370de3501ddb319e7f74b61f6a873.jpg,720,1280,2,800,613,1030,714 -CHESS_COURTYARD_H_S_frame_1702_jpg.rf.f6677111ccb708f199d259fc6d1cef73.jpg,720,1280,2,693,433,1019,677 -JENGA_COURTYARD_B_H_frame_0208_jpg.rf.f6cad33ff9496d5245b0036bc86a31d6.jpg,720,1280,2,729,276,1078,551 -PUZZLE_OFFICE_T_S_frame_2034_jpg.rf.f6e3a5b7fe3c88a5ec16471f27a53d9e.jpg,720,1280,1,64,365,399,676 -PUZZLE_OFFICE_T_S_frame_2034_jpg.rf.f6e3a5b7fe3c88a5ec16471f27a53d9e.jpg,720,1280,2,541,353,892,636 -CHESS_LIVINGROOM_B_S_frame_1126_jpg.rf.f7081a6ff7d3eb9d5d8b23dc608d01f2.jpg,720,1280,2,472,522,964,718 -PUZZLE_COURTYARD_B_S_frame_1779_jpg.rf.f7164226ccf48750d65b969df55b55c7.jpg,720,1280,1,253,591,506,719 -PUZZLE_COURTYARD_B_S_frame_1779_jpg.rf.f7164226ccf48750d65b969df55b55c7.jpg,720,1280,2,617,443,866,630 -PUZZLE_LIVINGROOM_B_T_frame_2248_jpg.rf.f71964b9dc417a5e7627d09cc4aeff22.jpg,720,1280,1,5,561,417,718 -PUZZLE_LIVINGROOM_B_T_frame_2248_jpg.rf.f71964b9dc417a5e7627d09cc4aeff22.jpg,720,1280,2,461,452,893,719 -PUZZLE_COURTYARD_H_T_frame_0069_jpg.rf.f7619212ecaf114000b4b862cbfb5a51.jpg,720,1280,1,162,543,460,718 -PUZZLE_COURTYARD_H_T_frame_0069_jpg.rf.f7619212ecaf114000b4b862cbfb5a51.jpg,720,1280,2,678,516,877,718 -PUZZLE_OFFICE_B_H_frame_1213_jpg.rf.f77eb6713e15cf8e03c92eac70b0a612.jpg,720,1280,1,346,702,481,714 -PUZZLE_OFFICE_B_H_frame_1213_jpg.rf.f77eb6713e15cf8e03c92eac70b0a612.jpg,720,1280,2,852,503,1176,710 -PUZZLE_COURTYARD_B_S_frame_0875_jpg.rf.f7a393183ebcef9c637e7c1f08f8461b.jpg,720,1280,2,621,567,911,719 -PUZZLE_OFFICE_T_S_frame_0173_jpg.rf.f7a94a696fa5a53866acb7fc212e8f1a.jpg,720,1280,1,102,408,464,692 -PUZZLE_OFFICE_T_S_frame_0173_jpg.rf.f7a94a696fa5a53866acb7fc212e8f1a.jpg,720,1280,2,625,361,833,561 -JENGA_COURTYARD_B_H_frame_0250_jpg.rf.f7dfe6a30402a006027992f551386711.jpg,720,1280,2,831,710,925,719 -JENGA_LIVINGROOM_B_H_frame_2294_jpg.rf.f7f498264c4a81d5e90fbfb238a156a6.jpg,720,1280,2,867,705,957,713 -CARDS_LIVINGROOM_S_H_frame_0412_jpg.rf.f806485da01f958efe8ca3206f662297.jpg,720,1280,1,427,699,482,716 -CARDS_LIVINGROOM_S_H_frame_0412_jpg.rf.f806485da01f958efe8ca3206f662297.jpg,720,1280,2,563,665,760,716 -JENGA_OFFICE_T_H_frame_1551_jpg.rf.f7f8ab7b6122b8869c555f8802af9952.jpg,720,1280,1,308,604,544,719 -JENGA_OFFICE_T_H_frame_1551_jpg.rf.f7f8ab7b6122b8869c555f8802af9952.jpg,720,1280,2,564,580,708,719 -CHESS_OFFICE_T_H_frame_2398_jpg.rf.f823ea14413d2f1fb3669f1023ae6e05.jpg,720,1280,1,271,676,398,716 -CHESS_OFFICE_T_H_frame_2398_jpg.rf.f823ea14413d2f1fb3669f1023ae6e05.jpg,720,1280,2,464,702,627,718 -PUZZLE_COURTYARD_T_H_frame_0542_jpg.rf.f85523ad9ef03ab458f309b40ece18cf.jpg,720,1280,1,14,508,442,718 -PUZZLE_COURTYARD_T_H_frame_0542_jpg.rf.f85523ad9ef03ab458f309b40ece18cf.jpg,720,1280,2,537,315,755,515 -PUZZLE_OFFICE_B_H_frame_2220_jpg.rf.f87f70c5fbf5e60622f08e6dd0049d71.jpg,720,1280,1,64,693,308,719 -PUZZLE_OFFICE_B_H_frame_2220_jpg.rf.f87f70c5fbf5e60622f08e6dd0049d71.jpg,720,1280,2,680,489,1050,712 -PUZZLE_COURTYARD_H_T_frame_2576_jpg.rf.f885252fc0f4c88e4416db484253f522.jpg,720,1280,1,254,495,472,718 -PUZZLE_COURTYARD_H_T_frame_2576_jpg.rf.f885252fc0f4c88e4416db484253f522.jpg,720,1280,2,572,494,791,718 -JENGA_COURTYARD_S_T_frame_1577_jpg.rf.f89b2c4d4e717c9be30bfe7ac5c25257.jpg,720,1280,1,113,303,567,573 -JENGA_COURTYARD_S_T_frame_1577_jpg.rf.f89b2c4d4e717c9be30bfe7ac5c25257.jpg,720,1280,2,548,555,883,717 -CARDS_LIVINGROOM_S_H_frame_2547_jpg.rf.f89f134947b3c7e3bedc161afb94cfe6.jpg,720,1280,1,179,674,338,718 -CARDS_LIVINGROOM_S_H_frame_2547_jpg.rf.f89f134947b3c7e3bedc161afb94cfe6.jpg,720,1280,2,577,695,715,718 -CARDS_COURTYARD_S_H_frame_1164_jpg.rf.f8b3ef68bf938127b9dbd666703c6eb6.jpg,720,1280,1,372,701,438,718 -PUZZLE_LIVINGROOM_B_T_frame_1542_jpg.rf.f8b4095049ad8b88a2f932697dad4cfe.jpg,720,1280,1,4,584,403,715 -PUZZLE_LIVINGROOM_B_T_frame_1542_jpg.rf.f8b4095049ad8b88a2f932697dad4cfe.jpg,720,1280,2,531,569,1126,715 -PUZZLE_LIVINGROOM_B_T_frame_1009_jpg.rf.7e2ce74c8a9f473b5e0e7317163294d5.jpg,720,1280,1,1,512,434,717 -PUZZLE_LIVINGROOM_B_T_frame_1009_jpg.rf.7e2ce74c8a9f473b5e0e7317163294d5.jpg,720,1280,2,457,560,944,717 -JENGA_LIVINGROOM_B_H_frame_2110_jpg.rf.7e28eec5f425e12e02c3878e9cf9e8c2.jpg,720,1280,2,769,625,987,719 -CHESS_LIVINGROOM_B_S_frame_1765_jpg.rf.7e67cf451fa7fcad6782261908e92286.jpg,720,1280,2,598,444,1096,716 -CARDS_COURTYARD_T_B_frame_1456_jpg.rf.7e5084e136c569e41aba36c50bd0d5b8.jpg,720,1280,1,177,601,407,718 -CARDS_COURTYARD_T_B_frame_1456_jpg.rf.7e5084e136c569e41aba36c50bd0d5b8.jpg,720,1280,2,556,572,786,718 -JENGA_OFFICE_H_T_frame_1306_jpg.rf.7e6c7f32e73d51167f1528ce8f05f470.jpg,720,1280,1,67,550,278,719 -JENGA_OFFICE_H_T_frame_1306_jpg.rf.7e6c7f32e73d51167f1528ce8f05f470.jpg,720,1280,2,803,689,926,712 -CARDS_LIVINGROOM_B_T_frame_1535_jpg.rf.7e658580d336e02dd72674c7b5399c72.jpg,720,1280,2,518,638,868,718 -PUZZLE_OFFICE_B_H_frame_1009_jpg.rf.7e99e26b6b4db3eab0a39bfb3ec2a74c.jpg,720,1280,2,701,666,862,711 -CARDS_LIVINGROOM_S_H_frame_0414_jpg.rf.7ea7c7276d8db87d47d2bb4509aaf1e6.jpg,720,1280,1,393,705,455,718 -CARDS_LIVINGROOM_S_H_frame_0414_jpg.rf.7ea7c7276d8db87d47d2bb4509aaf1e6.jpg,720,1280,2,516,659,707,718 -JENGA_OFFICE_T_H_frame_1036_jpg.rf.7ea2917948eff9118442a6cd43b29307.jpg,720,1280,2,502,499,776,714 -CHESS_LIVINGROOM_H_T_frame_1806_jpg.rf.7f2faca7424bba9e747c68be9e552bd9.jpg,720,1280,1,1,631,207,718 -CHESS_LIVINGROOM_H_T_frame_1806_jpg.rf.7f2faca7424bba9e747c68be9e552bd9.jpg,720,1280,2,1014,553,1279,718 -CARDS_LIVINGROOM_T_B_frame_0001_jpg.rf.7ecdaf099e600bdc6e9e25354724d094.jpg,720,1280,1,1,547,372,719 -CARDS_LIVINGROOM_T_B_frame_0001_jpg.rf.7ecdaf099e600bdc6e9e25354724d094.jpg,720,1280,2,463,556,829,719 -PUZZLE_LIVINGROOM_B_T_frame_2515_jpg.rf.7ec731ca107b1d44900ba77edf6760d0.jpg,720,1280,1,0,616,447,719 -PUZZLE_LIVINGROOM_B_T_frame_2515_jpg.rf.7ec731ca107b1d44900ba77edf6760d0.jpg,720,1280,2,463,694,718,719 -PUZZLE_OFFICE_T_S_frame_2028_jpg.rf.7f50ca74c3b021e663b170320e8cd2f6.jpg,720,1280,1,16,365,423,713 -PUZZLE_OFFICE_T_S_frame_2028_jpg.rf.7f50ca74c3b021e663b170320e8cd2f6.jpg,720,1280,2,545,306,886,594 -CARDS_COURTYARD_H_S_frame_1924_jpg.rf.7f921f81112e5e0bac621733dd6f3e6e.jpg,720,1280,1,140,549,457,719 -CARDS_COURTYARD_H_S_frame_1924_jpg.rf.7f921f81112e5e0bac621733dd6f3e6e.jpg,720,1280,2,527,357,849,644 -CHESS_COURTYARD_T_B_frame_0767_jpg.rf.7f65c09b11a3e5421482cabbbf00e8e0.jpg,720,1280,1,1,615,254,718 -CHESS_COURTYARD_T_B_frame_0767_jpg.rf.7f65c09b11a3e5421482cabbbf00e8e0.jpg,720,1280,2,600,373,919,644 -JENGA_COURTYARD_H_B_frame_1094_jpg.rf.7f9d4a0312d539db0c9ef2d870d45f27.jpg,720,1280,2,497,269,764,680 -CARDS_OFFICE_T_H_frame_0797_jpg.rf.7f96f5d60a101511effad5da110b1c91.jpg,720,1280,1,207,630,374,715 -CARDS_OFFICE_T_H_frame_0797_jpg.rf.7f96f5d60a101511effad5da110b1c91.jpg,720,1280,2,567,596,753,719 -CARDS_LIVINGROOM_H_S_frame_1334_jpg.rf.7f9d8e082688460fedaf9465cab96576.jpg,720,1280,1,86,683,322,719 -CARDS_LIVINGROOM_H_S_frame_1334_jpg.rf.7f9d8e082688460fedaf9465cab96576.jpg,720,1280,2,731,690,797,718 -PUZZLE_LIVINGROOM_B_T_frame_2634_jpg.rf.7fa299009c837f672a53474355c3b61a.jpg,720,1280,1,4,447,208,705 -PUZZLE_LIVINGROOM_B_T_frame_2634_jpg.rf.7fa299009c837f672a53474355c3b61a.jpg,720,1280,2,769,516,1209,715 -JENGA_OFFICE_T_H_frame_0546_jpg.rf.7fec0d06e2f470b8738f8e4fe025bf41.jpg,720,1280,1,340,702,406,719 -CHESS_LIVINGROOM_B_S_frame_1948_jpg.rf.7ff66efd42ba24ed5b4857fd44b4bf3c.jpg,720,1280,2,703,494,1092,718 -PUZZLE_COURTYARD_H_T_frame_1255_jpg.rf.8032db8a982a96d97c5c74502500df3a.jpg,720,1280,1,220,475,451,687 -PUZZLE_COURTYARD_H_T_frame_1255_jpg.rf.8032db8a982a96d97c5c74502500df3a.jpg,720,1280,2,1048,585,1279,717 -PUZZLE_COURTYARD_H_T_frame_1892_jpg.rf.803f883ae5de1cd5bee37ad8e498c7b8.jpg,720,1280,1,246,675,389,718 -PUZZLE_COURTYARD_H_T_frame_1892_jpg.rf.803f883ae5de1cd5bee37ad8e498c7b8.jpg,720,1280,2,693,516,906,718 -CARDS_COURTYARD_H_S_frame_2533_jpg.rf.8040bab8b7655dc8f6327c892f11294b.jpg,720,1280,1,184,590,447,719 -CARDS_COURTYARD_H_S_frame_2533_jpg.rf.8040bab8b7655dc8f6327c892f11294b.jpg,720,1280,2,717,411,948,670 -PUZZLE_COURTYARD_T_H_frame_2482_jpg.rf.805138cd99fe5811456e11b4c3bcd1b0.jpg,720,1280,2,469,246,936,646 -PUZZLE_COURTYARD_T_H_frame_2482_jpg.rf.805138cd99fe5811456e11b4c3bcd1b0.jpg,720,1280,1,1,392,389,718 -JENGA_LIVINGROOM_H_B_frame_1823_jpg.rf.80660ea9ae7848a4f932d65109490135.jpg,720,1280,2,551,91,759,276 -CARDS_COURTYARD_T_B_frame_1784_jpg.rf.807ff0012880249a2ce17346a17a4023.jpg,720,1280,1,133,557,474,718 -CARDS_COURTYARD_T_B_frame_1784_jpg.rf.807ff0012880249a2ce17346a17a4023.jpg,720,1280,2,528,508,914,718 -CHESS_OFFICE_H_T_frame_2219_jpg.rf.808df0c5b0460573d033f9d239f2bba2.jpg,720,1280,2,690,501,938,710 -JENGA_OFFICE_S_B_frame_0627_jpg.rf.80d050545e6e665ea14308a88b98d57c.jpg,720,1280,1,242,560,544,719 -JENGA_OFFICE_S_B_frame_0627_jpg.rf.80d050545e6e665ea14308a88b98d57c.jpg,720,1280,2,831,550,1136,714 -JENGA_COURTYARD_H_B_frame_2154_jpg.rf.8104fb602dbdeca86126a7e461fcaabb.jpg,720,1280,2,652,0,992,258 -JENGA_COURTYARD_H_B_frame_2154_jpg.rf.8104fb602dbdeca86126a7e461fcaabb.jpg,720,1280,1,107,40,463,381 -PUZZLE_OFFICE_H_B_frame_2403_jpg.rf.80a1b374e9859f60a86d2eee8512fe0d.jpg,720,1280,1,310,649,499,718 -PUZZLE_OFFICE_H_B_frame_2403_jpg.rf.80a1b374e9859f60a86d2eee8512fe0d.jpg,720,1280,2,606,576,823,717 -PUZZLE_OFFICE_T_S_frame_2276_jpg.rf.810f6fb71c69327da1d0e210e09b933e.jpg,720,1280,1,117,359,337,563 -PUZZLE_OFFICE_T_S_frame_2276_jpg.rf.810f6fb71c69327da1d0e210e09b933e.jpg,720,1280,2,678,440,1039,687 -PUZZLE_OFFICE_T_S_frame_1144_jpg.rf.812db52050a12e4484228ac99a1e5875.jpg,720,1280,1,12,512,367,715 -PUZZLE_OFFICE_T_S_frame_1144_jpg.rf.812db52050a12e4484228ac99a1e5875.jpg,720,1280,2,454,602,736,713 -JENGA_COURTYARD_T_S_frame_1889_jpg.rf.813697bf6ae908c55b93e7efe7882e76.jpg,720,1280,1,19,341,378,702 -JENGA_COURTYARD_T_S_frame_1889_jpg.rf.813697bf6ae908c55b93e7efe7882e76.jpg,720,1280,2,503,241,795,460 -PUZZLE_LIVINGROOM_H_S_frame_1760_jpg.rf.816924e5fd88f5e2515545988bfb653e.jpg,720,1280,2,730,708,824,717 -PUZZLE_OFFICE_T_S_frame_2619_jpg.rf.816de7a9562ed55c03e74f595e8b600d.jpg,720,1280,1,82,378,365,632 -PUZZLE_OFFICE_T_S_frame_2619_jpg.rf.816de7a9562ed55c03e74f595e8b600d.jpg,720,1280,2,487,429,732,698 -CHESS_LIVINGROOM_S_B_frame_0752_jpg.rf.816eea236796140f50904229d8f5b912.jpg,720,1280,2,709,503,1038,719 -CHESS_LIVINGROOM_S_B_frame_1555_jpg.rf.8180602bb95e9c440a5bb58c8d96a48e.jpg,720,1280,1,1,565,214,718 -PUZZLE_COURTYARD_H_T_frame_1462_jpg.rf.8197c30c938186aee46666cf02529b78.jpg,720,1280,2,589,437,878,708 -CARDS_OFFICE_T_H_frame_0999_jpg.rf.81db21b98bf299572eb2bc01a0b49bb3.jpg,720,1280,1,185,624,395,719 -CARDS_OFFICE_T_H_frame_0999_jpg.rf.81db21b98bf299572eb2bc01a0b49bb3.jpg,720,1280,2,465,579,734,719 -JENGA_OFFICE_H_T_frame_2257_jpg.rf.8193365dcb1c3a9bc84fb01279a9f680.jpg,720,1280,2,626,0,928,246 -PUZZLE_LIVINGROOM_H_S_frame_2682_jpg.rf.81ee782207ce2f8b2185fc464a224ca0.jpg,720,1280,1,444,626,630,718 -PUZZLE_LIVINGROOM_H_S_frame_2682_jpg.rf.81ee782207ce2f8b2185fc464a224ca0.jpg,720,1280,2,726,630,774,699 -PUZZLE_COURTYARD_T_H_frame_1763_jpg.rf.81fe34fd446ea80a6e56f6f8bea23384.jpg,720,1280,2,505,504,946,718 -PUZZLE_COURTYARD_T_H_frame_1763_jpg.rf.81fe34fd446ea80a6e56f6f8bea23384.jpg,720,1280,1,22,625,368,718 -CARDS_OFFICE_T_H_frame_2172_jpg.rf.81ee6170db7b68ce2afb1d86c0ac1ba5.jpg,720,1280,1,179,605,465,719 -CARDS_OFFICE_T_H_frame_2172_jpg.rf.81ee6170db7b68ce2afb1d86c0ac1ba5.jpg,720,1280,2,533,552,772,719 -PUZZLE_COURTYARD_T_H_frame_1078_jpg.rf.8233f148d9eb095e4e7d63ce279d6f14.jpg,720,1280,1,3,474,317,718 -PUZZLE_COURTYARD_T_H_frame_1078_jpg.rf.8233f148d9eb095e4e7d63ce279d6f14.jpg,720,1280,2,512,284,825,555 -CHESS_LIVINGROOM_S_B_frame_1570_jpg.rf.825f96100471b219dd1ef44f55d6f80e.jpg,720,1280,1,179,704,249,716 -CARDS_LIVINGROOM_S_H_frame_0858_jpg.rf.82860920453c186e735f9abbc45d1326.jpg,720,1280,1,216,679,290,718 -CHESS_COURTYARD_H_S_frame_1624_jpg.rf.829a7469768b8f1f09759782d6c41e55.jpg,720,1280,2,862,395,1039,563 -CHESS_LIVINGROOM_S_B_frame_2626_jpg.rf.82b7481bc69fcd8b514d94b06976838f.jpg,720,1280,1,1,567,295,713 -CARDS_OFFICE_T_H_frame_0223_jpg.rf.82aeb1d4a3136da4daa46834872d62b5.jpg,720,1280,1,183,658,277,719 -CARDS_OFFICE_T_H_frame_0223_jpg.rf.82aeb1d4a3136da4daa46834872d62b5.jpg,720,1280,2,599,603,764,719 -CARDS_OFFICE_H_T_frame_2076_jpg.rf.82dd85919b7182a4008a6ab8626391d8.jpg,720,1280,2,592,481,1104,719 -CARDS_OFFICE_H_T_frame_2076_jpg.rf.82dd85919b7182a4008a6ab8626391d8.jpg,720,1280,1,266,657,348,719 -JENGA_OFFICE_B_S_frame_1291_jpg.rf.831b7d545f1f71486f2b904ffe363c49.jpg,720,1280,1,162,439,412,683 -JENGA_OFFICE_B_S_frame_1291_jpg.rf.831b7d545f1f71486f2b904ffe363c49.jpg,720,1280,2,493,429,784,717 -CHESS_COURTYARD_H_S_frame_1921_jpg.rf.82ec2d11fa6d2a5879e83d4df85ca628.jpg,720,1280,1,361,668,532,718 -CHESS_COURTYARD_H_S_frame_1921_jpg.rf.82ec2d11fa6d2a5879e83d4df85ca628.jpg,720,1280,2,759,501,977,701 -CARDS_OFFICE_T_H_frame_0235_jpg.rf.82de51a8f44b67efb897bf7335eb5c35.jpg,720,1280,1,200,651,306,719 -CARDS_OFFICE_T_H_frame_0235_jpg.rf.82de51a8f44b67efb897bf7335eb5c35.jpg,720,1280,2,584,603,811,719 -JENGA_LIVINGROOM_B_H_frame_1458_jpg.rf.833d50a81a7e35cce74a17c59d78e8f4.jpg,720,1280,2,453,378,779,716 -PUZZLE_OFFICE_B_H_frame_1670_jpg.rf.832a8af2a422d140012693e2dd412eb2.jpg,720,1280,2,580,387,975,608 -PUZZLE_LIVINGROOM_T_B_frame_1681_jpg.rf.8349202984c6805145bfaa22e4c39d2f.jpg,720,1280,1,1,452,114,718 -PUZZLE_LIVINGROOM_T_B_frame_1681_jpg.rf.8349202984c6805145bfaa22e4c39d2f.jpg,720,1280,2,542,373,1100,704 -CHESS_OFFICE_T_H_frame_2459_jpg.rf.8385570be64fdc521edbb77e4fc6d292.jpg,720,1280,1,179,684,319,718 -CHESS_OFFICE_T_H_frame_2459_jpg.rf.8385570be64fdc521edbb77e4fc6d292.jpg,720,1280,2,539,705,577,718 -PUZZLE_LIVINGROOM_H_S_frame_0654_jpg.rf.83d67cab095de092d4f18985b8877678.jpg,720,1280,2,517,481,811,702 -PUZZLE_LIVINGROOM_T_B_frame_0724_jpg.rf.83d2cc2a59d0dffbb3f480af1f953483.jpg,720,1280,1,1,352,277,717 -PUZZLE_COURTYARD_B_S_frame_0721_jpg.rf.84359c973f8ac2a12e269ff416b81f50.jpg,720,1280,2,534,551,897,719 -JENGA_LIVINGROOM_S_T_frame_1145_jpg.rf.83e5b2c5f2d122307de7f6ee7376d1c8.jpg,720,1280,1,154,674,304,718 -JENGA_LIVINGROOM_S_T_frame_1145_jpg.rf.83e5b2c5f2d122307de7f6ee7376d1c8.jpg,720,1280,2,709,699,762,718 -CARDS_OFFICE_T_H_frame_1826_jpg.rf.840afcb194144dc81e7f2d67401c3284.jpg,720,1280,2,510,515,783,719 -CARDS_OFFICE_T_H_frame_1826_jpg.rf.840afcb194144dc81e7f2d67401c3284.jpg,720,1280,1,163,553,472,719 -CHESS_LIVINGROOM_T_H_frame_2168_jpg.rf.840aef150924bb672d8b1ab869e5fcc7.jpg,720,1280,2,351,61,890,396 -CARDS_OFFICE_B_S_frame_2309_jpg.rf.845317705afcbdfa53b2b3ecfc9643c9.jpg,720,1280,2,769,617,994,718 -PUZZLE_OFFICE_B_H_frame_1159_jpg.rf.84883b7e9fdb47606197808e64c538bf.jpg,720,1280,1,199,657,459,714 -PUZZLE_OFFICE_B_H_frame_1159_jpg.rf.84883b7e9fdb47606197808e64c538bf.jpg,720,1280,2,635,566,930,714 -CARDS_OFFICE_H_T_frame_0160_jpg.rf.85008ce1df993758d9c467df63414719.jpg,720,1280,1,174,654,253,718 -CARDS_OFFICE_H_T_frame_0160_jpg.rf.85008ce1df993758d9c467df63414719.jpg,720,1280,2,594,380,1005,717 -CHESS_LIVINGROOM_T_H_frame_0361_jpg.rf.8501b36d100e7c53e1156b2db8d8567a.jpg,720,1280,1,2,331,159,548 -CHESS_LIVINGROOM_T_H_frame_0361_jpg.rf.8501b36d100e7c53e1156b2db8d8567a.jpg,720,1280,2,470,534,944,718 -PUZZLE_OFFICE_T_S_frame_2081_jpg.rf.8510e4870edad10d75a6effdca2ba0da.jpg,720,1280,1,13,546,379,710 -PUZZLE_OFFICE_T_S_frame_2081_jpg.rf.8510e4870edad10d75a6effdca2ba0da.jpg,720,1280,2,539,452,910,710 -CARDS_OFFICE_B_S_frame_1285_jpg.rf.8516235ca70776e503d954066bb6eb5b.jpg,720,1280,1,357,652,453,716 -CARDS_OFFICE_B_S_frame_1285_jpg.rf.8516235ca70776e503d954066bb6eb5b.jpg,720,1280,2,664,640,781,718 -PUZZLE_COURTYARD_T_H_frame_1362_jpg.rf.85405b2d65415f4ad855aa3a5ce2d94c.jpg,720,1280,1,3,464,357,718 -PUZZLE_COURTYARD_T_H_frame_1362_jpg.rf.85405b2d65415f4ad855aa3a5ce2d94c.jpg,720,1280,2,419,515,982,718 -JENGA_LIVINGROOM_B_H_frame_0243_jpg.rf.8556685efdcad21d746d2bb4c027493d.jpg,720,1280,1,36,633,354,718 -JENGA_LIVINGROOM_B_H_frame_0243_jpg.rf.8556685efdcad21d746d2bb4c027493d.jpg,720,1280,2,835,576,1092,717 -PUZZLE_LIVINGROOM_B_T_frame_0671_jpg.rf.854400c1deb160ba9d90e131f66755b4.jpg,720,1280,1,4,533,235,706 -PUZZLE_LIVINGROOM_B_T_frame_0671_jpg.rf.854400c1deb160ba9d90e131f66755b4.jpg,720,1280,2,873,386,1277,714 -JENGA_COURTYARD_T_S_frame_0799_jpg.rf.8562897753e32fbbe3881b6a67c0c8ac.jpg,720,1280,1,90,318,391,646 -JENGA_COURTYARD_T_S_frame_0799_jpg.rf.8562897753e32fbbe3881b6a67c0c8ac.jpg,720,1280,2,556,275,796,527 -JENGA_LIVINGROOM_S_T_frame_1967_jpg.rf.85b1179ca4235522a8dc7bd0a9b33a7a.jpg,720,1280,1,71,205,537,470 -JENGA_LIVINGROOM_S_T_frame_1967_jpg.rf.85b1179ca4235522a8dc7bd0a9b33a7a.jpg,720,1280,2,567,197,1065,718 -JENGA_COURTYARD_B_H_frame_0212_jpg.rf.85d3ef7062b685be591c8c2d85372be9.jpg,720,1280,2,740,288,1062,535 -CARDS_OFFICE_S_B_frame_0906_jpg.rf.85dfcfb6bab53c7ac7bf2aa51a5aa78a.jpg,720,1280,1,208,535,435,712 -CARDS_OFFICE_S_B_frame_1695_jpg.rf.85e7c24755eb0bc9ea9228b2dfbc99ca.jpg,720,1280,1,234,382,530,697 -CARDS_OFFICE_S_B_frame_1695_jpg.rf.85e7c24755eb0bc9ea9228b2dfbc99ca.jpg,720,1280,2,564,433,800,716 -PUZZLE_COURTYARD_H_T_frame_0874_jpg.rf.85f3646ee66a15683fcd121376ef888d.jpg,720,1280,1,105,634,352,717 -PUZZLE_COURTYARD_H_T_frame_0874_jpg.rf.85f3646ee66a15683fcd121376ef888d.jpg,720,1280,2,808,560,1158,718 -PUZZLE_LIVINGROOM_B_T_frame_0765_jpg.rf.86289b5a720089e8556edcf4ce8179fa.jpg,720,1280,1,1,432,447,719 -PUZZLE_LIVINGROOM_B_T_frame_0765_jpg.rf.86289b5a720089e8556edcf4ce8179fa.jpg,720,1280,2,518,488,1076,717 -CHESS_OFFICE_H_T_frame_1127_jpg.rf.8626d45e22fbfe9f15095162346c953c.jpg,720,1280,2,626,358,823,586 -PUZZLE_LIVINGROOM_S_H_frame_1382_jpg.rf.8679950330fd088c5e87b873b0bacfc1.jpg,720,1280,2,533,633,887,718 -PUZZLE_LIVINGROOM_T_B_frame_2185_jpg.rf.86c44dc7cbb63f60877d3d5dae2a1422.jpg,720,1280,2,635,201,1163,716 -CARDS_LIVINGROOM_B_T_frame_2521_jpg.rf.86c8d75420a992021305add6cfbdcd5c.jpg,720,1280,2,601,684,698,718 -JENGA_COURTYARD_B_H_frame_2378_jpg.rf.86fe89ec372fe0538aace8b72cf5164a.jpg,720,1280,2,760,117,1141,329 -JENGA_LIVINGROOM_B_H_frame_1944_jpg.rf.8700aca08c18954d5ee9f225b18cfec3.jpg,720,1280,2,722,201,1093,606 -JENGA_LIVINGROOM_S_T_frame_2394_jpg.rf.8716c0f2795aa0b6893aa9588c976d8e.jpg,720,1280,1,3,328,194,718 -JENGA_LIVINGROOM_S_T_frame_2394_jpg.rf.8716c0f2795aa0b6893aa9588c976d8e.jpg,720,1280,2,525,411,953,718 -CARDS_LIVINGROOM_H_S_frame_0078_jpg.rf.8719fbd9eea17e6afd51be3c60094fb7.jpg,720,1280,2,598,555,890,719 -PUZZLE_LIVINGROOM_T_B_frame_1986_jpg.rf.8734698ff5fd6663833efda663e16325.jpg,720,1280,1,13,479,246,700 -PUZZLE_LIVINGROOM_T_B_frame_1986_jpg.rf.8734698ff5fd6663833efda663e16325.jpg,720,1280,2,498,420,1136,710 -CARDS_LIVINGROOM_H_S_frame_0317_jpg.rf.8752e06490d44e7bafcbd1168dde2d6a.jpg,720,1280,2,570,573,926,719 -PUZZLE_OFFICE_S_T_frame_1540_jpg.rf.875487a95a73ed8a5846c4851ff1a2e4.jpg,720,1280,1,358,701,457,718 -PUZZLE_OFFICE_S_T_frame_1540_jpg.rf.875487a95a73ed8a5846c4851ff1a2e4.jpg,720,1280,2,664,553,952,713 -PUZZLE_LIVINGROOM_T_B_frame_0280_jpg.rf.875b43bb4095220b7699c8d5bb712c60.jpg,720,1280,1,1,440,382,717 -PUZZLE_LIVINGROOM_T_B_frame_0280_jpg.rf.875b43bb4095220b7699c8d5bb712c60.jpg,720,1280,2,459,439,1025,712 -CHESS_OFFICE_T_H_frame_1028_jpg.rf.8762742f7067d7bde58df2d5013cc67e.jpg,720,1280,1,146,646,402,718 -CHESS_OFFICE_T_H_frame_1028_jpg.rf.8762742f7067d7bde58df2d5013cc67e.jpg,720,1280,2,621,308,840,477 -PUZZLE_OFFICE_B_H_frame_0943_jpg.rf.876b220fb76095e3e34e657f1aa0adbf.jpg,720,1280,1,205,408,547,636 -PUZZLE_OFFICE_B_H_frame_0943_jpg.rf.876b220fb76095e3e34e657f1aa0adbf.jpg,720,1280,2,567,465,849,714 -PUZZLE_OFFICE_S_T_frame_0405_jpg.rf.8777bf311a2930dd6753f31d4fde4ee6.jpg,720,1280,1,166,600,433,718 -PUZZLE_OFFICE_S_T_frame_0405_jpg.rf.8777bf311a2930dd6753f31d4fde4ee6.jpg,720,1280,2,653,635,887,713 -JENGA_OFFICE_T_H_frame_2387_jpg.rf.87941812df7b9f169b0d443e3a2e6583.jpg,720,1280,1,93,197,421,429 -PUZZLE_LIVINGROOM_S_H_frame_2635_jpg.rf.87be43f62aa27329953d5d4792a1cb8f.jpg,720,1280,2,828,646,1158,718 -PUZZLE_LIVINGROOM_B_T_frame_1025_jpg.rf.87ccb50137b38525d1af02e115ce65db.jpg,720,1280,1,7,525,330,700 -PUZZLE_LIVINGROOM_B_T_frame_1025_jpg.rf.87ccb50137b38525d1af02e115ce65db.jpg,720,1280,2,437,503,887,715 -PUZZLE_OFFICE_T_S_frame_1495_jpg.rf.87fc0486914821a1704e8b5e6f396dd1.jpg,720,1280,1,117,478,429,713 -PUZZLE_OFFICE_T_S_frame_1495_jpg.rf.87fc0486914821a1704e8b5e6f396dd1.jpg,720,1280,2,624,580,921,716 -CARDS_COURTYARD_B_T_frame_1914_jpg.rf.886a948c8ec62ddb883948d77365ea0c.jpg,720,1280,2,759,515,965,717 -CHESS_LIVINGROOM_B_S_frame_0226_jpg.rf.886abb145e36e6353e10e07b73cbb45c.jpg,720,1280,2,616,399,963,668 -CARDS_COURTYARD_S_H_frame_1027_jpg.rf.8871a532d9b772de2649b3cace3ec2b5.jpg,720,1280,1,154,371,406,667 -JENGA_LIVINGROOM_S_T_frame_1132_jpg.rf.889ead2fdf1a6cf85aea51a9a3d901be.jpg,720,1280,1,43,589,374,718 -JENGA_LIVINGROOM_S_T_frame_1132_jpg.rf.889ead2fdf1a6cf85aea51a9a3d901be.jpg,720,1280,2,614,619,889,718 -JENGA_COURTYARD_S_T_frame_0235_jpg.rf.88b00bd095afe288c5243562781c404c.jpg,720,1280,1,195,367,526,713 -JENGA_COURTYARD_S_T_frame_0235_jpg.rf.88b00bd095afe288c5243562781c404c.jpg,720,1280,2,547,564,745,718 -JENGA_LIVINGROOM_B_H_frame_0603_jpg.rf.88dfbc524d382616877440ac62f151a6.jpg,720,1280,2,532,348,853,672 -PUZZLE_OFFICE_T_S_frame_2208_jpg.rf.88e27d8cd6691c85ca6487b9b60fe522.jpg,720,1280,1,244,370,511,605 -PUZZLE_OFFICE_T_S_frame_2208_jpg.rf.88e27d8cd6691c85ca6487b9b60fe522.jpg,720,1280,2,572,385,771,630 -PUZZLE_COURTYARD_B_S_frame_1848_jpg.rf.89090a7f69fb5fddfbbff790ce00c369.jpg,720,1280,1,45,681,208,719 -PUZZLE_COURTYARD_B_S_frame_1848_jpg.rf.89090a7f69fb5fddfbbff790ce00c369.jpg,720,1280,2,652,467,995,701 -CHESS_OFFICE_S_B_frame_1103_jpg.rf.89175d97820fc4c67b17c4f82b725357.jpg,720,1280,1,34,584,435,719 -CHESS_OFFICE_S_B_frame_1103_jpg.rf.89175d97820fc4c67b17c4f82b725357.jpg,720,1280,2,683,620,1073,717 -PUZZLE_COURTYARD_H_T_frame_2023_jpg.rf.891d5e6e00200498ba36779c182c097d.jpg,720,1280,1,400,582,708,718 -PUZZLE_COURTYARD_H_T_frame_2023_jpg.rf.891d5e6e00200498ba36779c182c097d.jpg,720,1280,2,692,415,885,592 -PUZZLE_LIVINGROOM_B_T_frame_1379_jpg.rf.8938b450fb09faaed9a98ebdb9cdd0d3.jpg,720,1280,1,1,515,478,716 -PUZZLE_LIVINGROOM_B_T_frame_1379_jpg.rf.8938b450fb09faaed9a98ebdb9cdd0d3.jpg,720,1280,2,540,535,1166,715 -CHESS_LIVINGROOM_T_H_frame_2004_jpg.rf.893e3091a373f99569ddcb831e1b6d78.jpg,720,1280,1,5,367,74,601 -CHESS_LIVINGROOM_T_H_frame_2004_jpg.rf.893e3091a373f99569ddcb831e1b6d78.jpg,720,1280,2,713,487,1133,718 -CHESS_LIVINGROOM_H_T_frame_1875_jpg.rf.8941f3cbe1764a3a08fb2967748123f6.jpg,720,1280,1,1,614,228,718 -CHESS_LIVINGROOM_H_T_frame_1875_jpg.rf.8941f3cbe1764a3a08fb2967748123f6.jpg,720,1280,2,1023,523,1279,718 -CHESS_OFFICE_H_T_frame_1998_jpg.rf.89608e233403a20458650cb3d97b55eb.jpg,720,1280,2,628,462,1002,714 -CARDS_COURTYARD_H_S_frame_0145_jpg.rf.8958a7d762bd2093b5a7466a4f410d8c.jpg,720,1280,1,264,633,393,716 -CARDS_COURTYARD_H_S_frame_0145_jpg.rf.8958a7d762bd2093b5a7466a4f410d8c.jpg,720,1280,2,617,482,908,719 -CHESS_COURTYARD_H_S_frame_0223_jpg.rf.897a2e123b7c9aad6a6e589a5b0a6772.jpg,720,1280,2,767,479,1225,717 -JENGA_COURTYARD_H_B_frame_1348_jpg.rf.8983e0b794ac6a395c1954abeb3668f0.jpg,720,1280,2,635,703,728,718 -PUZZLE_COURTYARD_T_H_frame_0220_jpg.rf.89868290046c6d3c4ff8a77f334eefb3.jpg,720,1280,1,67,663,357,718 -PUZZLE_COURTYARD_T_H_frame_0220_jpg.rf.89868290046c6d3c4ff8a77f334eefb3.jpg,720,1280,2,537,428,906,718 -PUZZLE_OFFICE_B_H_frame_1273_jpg.rf.898c862571cee04c878fae95e4503338.jpg,720,1280,1,268,701,376,717 -PUZZLE_OFFICE_B_H_frame_1273_jpg.rf.898c862571cee04c878fae95e4503338.jpg,720,1280,2,563,388,854,578 -PUZZLE_OFFICE_B_H_frame_1941_jpg.rf.89c2aa9376ea2036d608b89fddf6e028.jpg,720,1280,2,601,656,825,716 -CARDS_LIVINGROOM_H_S_frame_0625_jpg.rf.89d669c1f3b97b105e846a3b268fb942.jpg,720,1280,2,599,470,884,719 -JENGA_LIVINGROOM_B_H_frame_0701_jpg.rf.89da350e442c828dc42ae999f18b1e9e.jpg,720,1280,1,14,564,372,717 -JENGA_LIVINGROOM_B_H_frame_0701_jpg.rf.89da350e442c828dc42ae999f18b1e9e.jpg,720,1280,2,881,400,1250,718 -JENGA_COURTYARD_T_S_frame_0804_jpg.rf.89e407ac1555dd7fe203f3dfa822bb11.jpg,720,1280,1,96,320,402,640 -JENGA_COURTYARD_T_S_frame_0804_jpg.rf.89e407ac1555dd7fe203f3dfa822bb11.jpg,720,1280,2,554,267,792,527 -PUZZLE_OFFICE_T_S_frame_1187_jpg.rf.89dda63f29cc0991289e28fb02894165.jpg,720,1280,1,3,415,391,713 -PUZZLE_OFFICE_T_S_frame_1187_jpg.rf.89dda63f29cc0991289e28fb02894165.jpg,720,1280,2,523,459,861,715 -PUZZLE_OFFICE_B_H_frame_0768_jpg.rf.89f42444d21fef87b7f9368736261060.jpg,720,1280,1,203,618,512,715 -PUZZLE_OFFICE_B_H_frame_0768_jpg.rf.89f42444d21fef87b7f9368736261060.jpg,720,1280,2,782,460,1130,685 -PUZZLE_LIVINGROOM_T_B_frame_1298_jpg.rf.8a07368776f8f7dc057e594bcb916312.jpg,720,1280,1,1,598,200,718 -PUZZLE_LIVINGROOM_T_B_frame_1298_jpg.rf.8a07368776f8f7dc057e594bcb916312.jpg,720,1280,2,815,568,1278,716 -CARDS_OFFICE_H_T_frame_0338_jpg.rf.8a098b2739f5724b3ec3b11643ae94ce.jpg,720,1280,1,398,692,449,718 -CARDS_OFFICE_H_T_frame_0338_jpg.rf.8a098b2739f5724b3ec3b11643ae94ce.jpg,720,1280,2,696,424,919,640 -PUZZLE_OFFICE_T_S_frame_0050_jpg.rf.8a5808753bca5fd645e14f1dde0997e6.jpg,720,1280,1,268,457,556,710 -PUZZLE_OFFICE_T_S_frame_0050_jpg.rf.8a5808753bca5fd645e14f1dde0997e6.jpg,720,1280,2,693,449,941,713 -PUZZLE_LIVINGROOM_H_S_frame_0102_jpg.rf.8a72105d1b062def2845a58f134b49e3.jpg,720,1280,2,592,620,870,719 -PUZZLE_LIVINGROOM_S_H_frame_1815_jpg.rf.8a96e5abe005c5ad54855fe16176c76b.jpg,720,1280,2,427,479,861,705 -CHESS_COURTYARD_H_S_frame_1080_jpg.rf.8aa52f48a9f73fdd8c6026419f9b460b.jpg,720,1280,2,796,618,1014,717 -PUZZLE_LIVINGROOM_S_H_frame_0861_jpg.rf.8aa9582736de9d28a6d7c07a74a0cc4c.jpg,720,1280,1,7,587,330,718 -PUZZLE_LIVINGROOM_S_H_frame_0861_jpg.rf.8aa9582736de9d28a6d7c07a74a0cc4c.jpg,720,1280,2,607,621,891,718 -JENGA_COURTYARD_B_H_frame_1379_jpg.rf.8ad42a28d11563be99eb8eac8995374f.jpg,720,1280,1,380,676,524,719 -JENGA_COURTYARD_B_H_frame_1379_jpg.rf.8ad42a28d11563be99eb8eac8995374f.jpg,720,1280,2,681,278,962,656 -CHESS_COURTYARD_S_H_frame_0237_jpg.rf.8af7f509e0f50ab12bf9eb4c661dc130.jpg,720,1280,1,1,508,393,718 -CARDS_OFFICE_T_H_frame_0491_jpg.rf.8b425de98b6095240cb5a01c8f64f669.jpg,720,1280,1,209,637,442,719 -CARDS_OFFICE_T_H_frame_0491_jpg.rf.8b425de98b6095240cb5a01c8f64f669.jpg,720,1280,2,529,531,775,719 -JENGA_COURTYARD_H_B_frame_1631_jpg.rf.8b46328451cc832053c9887944d838a2.jpg,720,1280,2,749,332,1046,710 -CARDS_LIVINGROOM_H_S_frame_0288_jpg.rf.8b7b2ee67ffb63503a119d6028b113e7.jpg,720,1280,2,663,499,944,719 -JENGA_LIVINGROOM_T_S_frame_2664_jpg.rf.8b7e331a86f36226a320d1f725691717.jpg,720,1280,1,2,315,367,666 -JENGA_LIVINGROOM_T_S_frame_2664_jpg.rf.8b7e331a86f36226a320d1f725691717.jpg,720,1280,2,513,296,878,635 -JENGA_COURTYARD_B_H_frame_0921_jpg.rf.8b9fbab76620742145afb1b691b000cd.jpg,720,1280,1,478,708,523,719 -JENGA_COURTYARD_B_H_frame_0921_jpg.rf.8b9fbab76620742145afb1b691b000cd.jpg,720,1280,2,670,425,920,719 -JENGA_COURTYARD_H_B_frame_1153_jpg.rf.8ba8f0d6e15e48aa99ef1154ad0141bb.jpg,720,1280,1,402,0,590,225 -CHESS_OFFICE_H_T_frame_1805_jpg.rf.8baf59e05aecd3b71f8c5ba7246ce630.jpg,720,1280,2,658,336,863,505 -CARDS_OFFICE_T_H_frame_2670_jpg.rf.8bb487bcf47d79d51badd3d238c678e5.jpg,720,1280,1,173,660,285,719 -CARDS_OFFICE_T_H_frame_2670_jpg.rf.8bb487bcf47d79d51badd3d238c678e5.jpg,720,1280,2,571,611,698,719 -CARDS_COURTYARD_T_B_frame_0412_jpg.rf.8bd2c8bf813b4e475f8fe2e4ef301b43.jpg,720,1280,1,159,638,258,716 -CARDS_COURTYARD_T_B_frame_0412_jpg.rf.8bd2c8bf813b4e475f8fe2e4ef301b43.jpg,720,1280,2,564,619,749,716 -CHESS_LIVINGROOM_S_B_frame_2285_jpg.rf.8c1c51db48b1248ad1ec1b22b04281ab.jpg,720,1280,1,335,693,402,718 -CARDS_LIVINGROOM_H_S_frame_1319_jpg.rf.8c211ab618f3088775087982e3c528f6.jpg,720,1280,2,802,520,1047,719 -PUZZLE_OFFICE_H_B_frame_1926_jpg.rf.8c3aa708643c413ede85821036caba3d.jpg,720,1280,1,355,553,633,719 -PUZZLE_OFFICE_H_B_frame_1926_jpg.rf.8c3aa708643c413ede85821036caba3d.jpg,720,1280,2,711,536,961,718 -JENGA_COURTYARD_H_B_frame_0912_jpg.rf.8c6c741ce6c688b7ae5ab5629aecb0ca.jpg,720,1280,2,662,631,870,718 -CHESS_COURTYARD_H_S_frame_2438_jpg.rf.8c78d878ac8ea378545fbe011d8caaec.jpg,720,1280,2,800,547,1064,716 -CARDS_OFFICE_S_B_frame_1793_jpg.rf.8cba4e3df6c4770163f475ca0447d9d8.jpg,720,1280,1,232,519,527,716 -CARDS_OFFICE_S_B_frame_1793_jpg.rf.8cba4e3df6c4770163f475ca0447d9d8.jpg,720,1280,2,600,665,759,718 -PUZZLE_COURTYARD_B_S_frame_1106_jpg.rf.8cc977ccda37628ae26cce6f328047d6.jpg,720,1280,1,386,654,575,719 -PUZZLE_COURTYARD_B_S_frame_1106_jpg.rf.8cc977ccda37628ae26cce6f328047d6.jpg,720,1280,2,543,386,788,630 -JENGA_COURTYARD_B_H_frame_1967_jpg.rf.8cf53fbacf4ec3e9ebf575e681762e3c.jpg,720,1280,2,852,700,930,716 -CARDS_LIVINGROOM_B_T_frame_2066_jpg.rf.8d0ce768e76702b9ef727df573e98cee.jpg,720,1280,2,711,703,777,718 -PUZZLE_LIVINGROOM_B_T_frame_0227_jpg.rf.8d2ce138deb74d06c112180b5b375676.jpg,720,1280,2,878,653,1176,716 -CARDS_COURTYARD_H_S_frame_1257_jpg.rf.8d347c1df99308609ef0579dae32d710.jpg,720,1280,1,151,552,493,719 -CARDS_COURTYARD_H_S_frame_1257_jpg.rf.8d347c1df99308609ef0579dae32d710.jpg,720,1280,2,522,509,816,719 -CARDS_LIVINGROOM_T_B_frame_2319_jpg.rf.8d869a367b2c425ae0548190b36851ff.jpg,720,1280,2,551,376,827,646 -CARDS_OFFICE_B_S_frame_1785_jpg.rf.8db367a4ffc7f19c92d1014fd8741f40.jpg,720,1280,1,360,669,420,718 -CARDS_OFFICE_B_S_frame_1785_jpg.rf.8db367a4ffc7f19c92d1014fd8741f40.jpg,720,1280,2,630,630,781,718 -CARDS_OFFICE_T_H_frame_1442_jpg.rf.8db6ac7e941d1fef099ef25a5e6195a1.jpg,720,1280,1,353,690,404,719 -CARDS_OFFICE_T_H_frame_1442_jpg.rf.8db6ac7e941d1fef099ef25a5e6195a1.jpg,720,1280,2,599,588,772,719 -JENGA_COURTYARD_T_S_frame_1986_jpg.rf.8db7891e5b3b991df1a5f11224eb6f13.jpg,720,1280,1,60,409,375,717 -JENGA_COURTYARD_T_S_frame_1986_jpg.rf.8db7891e5b3b991df1a5f11224eb6f13.jpg,720,1280,2,501,289,820,578 -JENGA_OFFICE_T_H_frame_1847_jpg.rf.8dbb12f7a99235eef82bddf2ff34bf5f.jpg,720,1280,1,288,665,377,714 -JENGA_OFFICE_T_H_frame_1847_jpg.rf.8dbb12f7a99235eef82bddf2ff34bf5f.jpg,720,1280,2,632,615,777,715 -CARDS_LIVINGROOM_H_S_frame_1295_jpg.rf.8dcb261a7bbcec44a3a5161cfd741fe0.jpg,720,1280,2,695,676,933,719 -CARDS_OFFICE_S_B_frame_1464_jpg.rf.8de06a979e9babc44f2d3ee120c0fc6e.jpg,720,1280,1,200,698,287,718 -JENGA_COURTYARD_H_B_frame_0757_jpg.rf.8defd9ed09659d1c0d541336ed39c965.jpg,720,1280,2,601,330,878,714 -CARDS_OFFICE_T_H_frame_1021_jpg.rf.8df06c4119187211722880eefbeb6c27.jpg,720,1280,1,200,651,319,719 -CARDS_OFFICE_T_H_frame_1021_jpg.rf.8df06c4119187211722880eefbeb6c27.jpg,720,1280,2,461,607,709,719 -CHESS_OFFICE_T_H_frame_1498_jpg.rf.8df8ee6c66c73b9dc517632934d790d1.jpg,720,1280,1,187,663,381,718 -CHESS_OFFICE_T_H_frame_1498_jpg.rf.8df8ee6c66c73b9dc517632934d790d1.jpg,720,1280,2,393,642,587,718 -CHESS_OFFICE_T_H_frame_1998_jpg.rf.8dfcebf5a965e1e344d98bdb323a671d.jpg,720,1280,1,109,593,344,718 -CHESS_OFFICE_T_H_frame_1998_jpg.rf.8dfcebf5a965e1e344d98bdb323a671d.jpg,720,1280,2,308,605,565,717 -PUZZLE_LIVINGROOM_T_B_frame_0613_jpg.rf.8e04954fa023bff1ffa108cd21731022.jpg,720,1280,1,2,555,258,717 -PUZZLE_LIVINGROOM_T_B_frame_0613_jpg.rf.8e04954fa023bff1ffa108cd21731022.jpg,720,1280,2,542,563,1137,718 -CHESS_LIVINGROOM_T_H_frame_1932_jpg.rf.8e46c962ced4ad09a82297fbf8f6fa69.jpg,720,1280,2,438,181,979,530 -PUZZLE_OFFICE_B_H_frame_1095_jpg.rf.8e4e64e359dc8e2e6f41a70a56ba51c7.jpg,720,1280,1,274,509,593,707 -JENGA_LIVINGROOM_S_T_frame_2500_jpg.rf.8e5f8c4c8df22e97c8df6cd4fd5e8d01.jpg,720,1280,1,1,44,325,580 -JENGA_LIVINGROOM_S_T_frame_2500_jpg.rf.8e5f8c4c8df22e97c8df6cd4fd5e8d01.jpg,720,1280,2,355,137,974,652 -CARDS_LIVINGROOM_B_T_frame_1580_jpg.rf.8e6b765086d759ac91a8e7e19b802de3.jpg,720,1280,2,698,517,1035,718 -PUZZLE_LIVINGROOM_T_B_frame_0534_jpg.rf.8eab7b4ec1bf0eff8b7e6d9d46c22923.jpg,720,1280,1,7,399,356,673 -PUZZLE_LIVINGROOM_T_B_frame_0534_jpg.rf.8eab7b4ec1bf0eff8b7e6d9d46c22923.jpg,720,1280,2,538,399,942,673 -CHESS_LIVINGROOM_B_S_frame_1169_jpg.rf.8efcbd5f69c05dd64fa6ca0946b3a958.jpg,720,1280,2,538,283,1027,592 -CARDS_COURTYARD_B_T_frame_1344_jpg.rf.8f006a3425aaadc1ed1289ad73cda63e.jpg,720,1280,1,525,518,725,716 -CARDS_COURTYARD_B_T_frame_1344_jpg.rf.8f006a3425aaadc1ed1289ad73cda63e.jpg,720,1280,2,683,634,759,718 -JENGA_COURTYARD_B_H_frame_1086_jpg.rf.8f150be2abce24e45d851276532edd8e.jpg,720,1280,2,774,668,930,718 -PUZZLE_LIVINGROOM_B_T_frame_2499_jpg.rf.8f2046eb7962aa3913523ce1f5ad7f9f.jpg,720,1280,1,4,518,497,715 -PUZZLE_LIVINGROOM_B_T_frame_2499_jpg.rf.8f2046eb7962aa3913523ce1f5ad7f9f.jpg,720,1280,2,488,633,866,716 -CHESS_OFFICE_T_H_frame_2464_jpg.rf.8f25106e02e251c028692e543d7aa4b7.jpg,720,1280,1,295,663,415,716 -CHESS_OFFICE_T_H_frame_2464_jpg.rf.8f25106e02e251c028692e543d7aa4b7.jpg,720,1280,2,437,683,594,714 -PUZZLE_OFFICE_T_S_frame_0912_jpg.rf.8f28f1a816e6cea79fdc677a62714265.jpg,720,1280,1,49,462,365,705 -PUZZLE_OFFICE_T_S_frame_0912_jpg.rf.8f28f1a816e6cea79fdc677a62714265.jpg,720,1280,2,507,458,811,709 -CHESS_OFFICE_T_H_frame_1250_jpg.rf.8f3a2fb43e95155d557c96e0a5db628c.jpg,720,1280,1,48,626,309,718 -CHESS_OFFICE_T_H_frame_1250_jpg.rf.8f3a2fb43e95155d557c96e0a5db628c.jpg,720,1280,2,370,635,612,714 -JENGA_OFFICE_S_B_frame_0735_jpg.rf.8f40f655795ee6ea8e970d1e9443be55.jpg,720,1280,1,181,505,540,717 -JENGA_OFFICE_S_B_frame_0735_jpg.rf.8f40f655795ee6ea8e970d1e9443be55.jpg,720,1280,2,838,584,1173,719 -PUZZLE_OFFICE_H_B_frame_0505_jpg.rf.8f53dce5dc8e780bc2cb1ad33b8ce1c3.jpg,720,1280,2,710,370,1049,643 -PUZZLE_OFFICE_H_B_frame_0505_jpg.rf.8f53dce5dc8e780bc2cb1ad33b8ce1c3.jpg,720,1280,1,137,661,353,719 -CARDS_LIVINGROOM_T_B_frame_1201_jpg.rf.8f62f36f9d46cc85462d128d45314955.jpg,720,1280,2,516,582,776,719 -CARDS_LIVINGROOM_T_B_frame_1201_jpg.rf.8f62f36f9d46cc85462d128d45314955.jpg,720,1280,1,1,619,288,719 -PUZZLE_LIVINGROOM_T_B_frame_0259_jpg.rf.8f74a08349329aefbc00864d022df3b2.jpg,720,1280,1,1,399,398,714 -PUZZLE_LIVINGROOM_T_B_frame_0259_jpg.rf.8f74a08349329aefbc00864d022df3b2.jpg,720,1280,2,568,375,1030,714 -JENGA_LIVINGROOM_T_S_frame_0207_jpg.rf.8f7cdbbac9b8bfed143179b108a6e8f0.jpg,720,1280,1,75,379,374,714 -JENGA_LIVINGROOM_T_S_frame_0207_jpg.rf.8f7cdbbac9b8bfed143179b108a6e8f0.jpg,720,1280,2,593,366,954,717 -CHESS_LIVINGROOM_H_T_frame_0803_jpg.rf.8f7dda6060d12ad858f74fcaca7b9f21.jpg,720,1280,1,1,576,143,718 -CHESS_LIVINGROOM_H_T_frame_0803_jpg.rf.8f7dda6060d12ad858f74fcaca7b9f21.jpg,720,1280,2,630,258,1092,612 -PUZZLE_OFFICE_B_H_frame_1439_jpg.rf.8f9ced29e0a153223ee310a649f46a58.jpg,720,1280,1,8,568,222,715 -PUZZLE_OFFICE_B_H_frame_1439_jpg.rf.8f9ced29e0a153223ee310a649f46a58.jpg,720,1280,2,685,557,1051,715 -JENGA_COURTYARD_B_H_frame_1691_jpg.rf.8fcd57ca4541023de871bb0b15cd604a.jpg,720,1280,1,409,502,578,719 -JENGA_COURTYARD_B_H_frame_1691_jpg.rf.8fcd57ca4541023de871bb0b15cd604a.jpg,720,1280,2,689,508,877,719 -JENGA_COURTYARD_B_H_frame_1870_jpg.rf.8fe6a7be0d9c424147405940ff4dd1ff.jpg,720,1280,1,95,201,584,622 -JENGA_COURTYARD_H_B_frame_1935_jpg.rf.8ff1ffce044a5a4d66177c761133c3b8.jpg,720,1280,1,52,318,478,676 -JENGA_COURTYARD_H_B_frame_1935_jpg.rf.8ff1ffce044a5a4d66177c761133c3b8.jpg,720,1280,2,1159,486,1279,718 -JENGA_OFFICE_S_B_frame_0847_jpg.rf.8fff55fa2c89fe8a35c2e6a7b505ff2c.jpg,720,1280,2,847,646,1050,714 -PUZZLE_LIVINGROOM_B_T_frame_1851_jpg.rf.900448719756ca68f998b1ed1f1171e9.jpg,720,1280,2,733,458,987,607 -JENGA_LIVINGROOM_H_B_frame_1098_jpg.rf.90156286bf95f94237a2838058ac820c.jpg,720,1280,2,585,346,800,712 -JENGA_OFFICE_H_T_frame_1491_jpg.rf.902076260d0429b20534a4146df9abd3.jpg,720,1280,1,406,356,536,701 -JENGA_OFFICE_H_T_frame_1491_jpg.rf.902076260d0429b20534a4146df9abd3.jpg,720,1280,2,612,389,761,681 -CHESS_COURTYARD_T_B_frame_2344_jpg.rf.9020d7d76afcdfea1218f2e8e0809b3e.jpg,720,1280,1,79,665,299,716 -CHESS_COURTYARD_T_B_frame_2344_jpg.rf.9020d7d76afcdfea1218f2e8e0809b3e.jpg,720,1280,2,344,677,568,717 -CARDS_LIVINGROOM_S_H_frame_1555_jpg.rf.902809f7f389e2201d6657842bb7a750.jpg,720,1280,1,175,602,446,718 -CARDS_LIVINGROOM_S_H_frame_1555_jpg.rf.902809f7f389e2201d6657842bb7a750.jpg,720,1280,2,563,631,838,718 -CHESS_OFFICE_H_T_frame_1065_jpg.rf.90316536689a7468e93790745a39b257.jpg,720,1280,2,495,455,657,636 -JENGA_OFFICE_H_T_frame_1666_jpg.rf.9049f91480cb60625374b973ad7a3aec.jpg,720,1280,1,286,343,462,701 -JENGA_OFFICE_H_T_frame_1666_jpg.rf.9049f91480cb60625374b973ad7a3aec.jpg,720,1280,2,647,261,795,659 -CHESS_COURTYARD_H_S_frame_0302_jpg.rf.906abac0cb85684c161f8a63653dfbed.jpg,720,1280,2,691,284,1015,539 -JENGA_LIVINGROOM_H_B_frame_0834_jpg.rf.90870c1441128fd35ae3b47dbb5ad760.jpg,720,1280,2,540,49,831,237 -PUZZLE_COURTYARD_B_S_frame_2176_jpg.rf.9090b5b13f51ff28e859bf2c9cc3a74b.jpg,720,1280,1,134,615,371,719 -PUZZLE_COURTYARD_B_S_frame_2176_jpg.rf.9090b5b13f51ff28e859bf2c9cc3a74b.jpg,720,1280,2,671,574,944,719 -PUZZLE_OFFICE_H_B_frame_0384_jpg.rf.909525a33c1eaa82cecbf8c843f0a52d.jpg,720,1280,1,214,619,451,719 -PUZZLE_OFFICE_H_B_frame_0384_jpg.rf.909525a33c1eaa82cecbf8c843f0a52d.jpg,720,1280,2,811,708,875,718 -CARDS_LIVINGROOM_S_H_frame_2079_jpg.rf.90ac75c31a322c60a6417055283198fd.jpg,720,1280,2,576,699,778,719 -CARDS_LIVINGROOM_S_H_frame_2079_jpg.rf.90ac75c31a322c60a6417055283198fd.jpg,720,1280,1,325,703,372,719 -PUZZLE_COURTYARD_T_H_frame_2273_jpg.rf.90c890b43aa55fa171a09994dc9ac7dc.jpg,720,1280,2,474,320,881,661 -PUZZLE_COURTYARD_T_H_frame_2273_jpg.rf.90c890b43aa55fa171a09994dc9ac7dc.jpg,720,1280,1,1,506,455,718 -PUZZLE_LIVINGROOM_B_T_frame_0385_jpg.rf.90caf4efda9c176cf3e1623570c8e0ef.jpg,720,1280,1,3,685,36,716 -PUZZLE_LIVINGROOM_B_T_frame_0385_jpg.rf.90caf4efda9c176cf3e1623570c8e0ef.jpg,720,1280,2,704,582,1075,715 -CHESS_LIVINGROOM_S_B_frame_2318_jpg.rf.90cc80600c63046cebd98780467578a8.jpg,720,1280,1,60,540,464,717 -PUZZLE_LIVINGROOM_B_T_frame_1291_jpg.rf.90d33107ee6aad85acc63c1523a22c09.jpg,720,1280,1,204,706,381,718 -PUZZLE_LIVINGROOM_B_T_frame_1291_jpg.rf.90d33107ee6aad85acc63c1523a22c09.jpg,720,1280,2,556,600,1039,719 -PUZZLE_LIVINGROOM_B_T_frame_0226_jpg.rf.90f576b41ab0d3c357eee1b643b8c051.jpg,720,1280,2,835,625,1134,717 -CARDS_LIVINGROOM_B_T_frame_0093_jpg.rf.912cb75f1b104de602b02f1cb7ab7003.jpg,720,1280,2,671,657,895,718 -CARDS_COURTYARD_T_B_frame_1190_jpg.rf.913c63885ac51fa1c2fee623765cc3b7.jpg,720,1280,1,225,602,430,717 -CARDS_COURTYARD_T_B_frame_1190_jpg.rf.913c63885ac51fa1c2fee623765cc3b7.jpg,720,1280,2,531,585,767,718 -CHESS_OFFICE_S_B_frame_2667_jpg.rf.9141d916acd0b823272f0c40fbb5a702.jpg,720,1280,2,693,652,883,719 -JENGA_LIVINGROOM_T_S_frame_0064_jpg.rf.91c88760aaa9a99486abb31e48ed8841.jpg,720,1280,1,29,310,370,675 -JENGA_LIVINGROOM_T_S_frame_0064_jpg.rf.91c88760aaa9a99486abb31e48ed8841.jpg,720,1280,2,525,293,877,609 -JENGA_OFFICE_H_T_frame_2345_jpg.rf.91d926753a6712c5edde9ec5ff7ee659.jpg,720,1280,1,16,264,393,710 -JENGA_OFFICE_H_T_frame_2345_jpg.rf.91d926753a6712c5edde9ec5ff7ee659.jpg,720,1280,2,396,177,790,644 -PUZZLE_COURTYARD_H_T_frame_1782_jpg.rf.920eb66e4ff16c3812a400f3b8aa6cbf.jpg,720,1280,2,645,502,891,710 -CHESS_LIVINGROOM_H_T_frame_1543_jpg.rf.921967350cdf4dc52251cf46906f97b9.jpg,720,1280,1,5,591,128,718 -CHESS_LIVINGROOM_H_T_frame_1543_jpg.rf.921967350cdf4dc52251cf46906f97b9.jpg,720,1280,2,349,328,707,591 -PUZZLE_COURTYARD_B_S_frame_1860_jpg.rf.923415619ce5eeb97e6f38e04fa3ab1c.jpg,720,1280,1,33,656,198,718 -PUZZLE_COURTYARD_B_S_frame_1860_jpg.rf.923415619ce5eeb97e6f38e04fa3ab1c.jpg,720,1280,2,574,487,923,697 -CARDS_LIVINGROOM_T_B_frame_1549_jpg.rf.926000675f4e1d3c1071d1562214bef1.jpg,720,1280,1,4,623,160,714 -CARDS_LIVINGROOM_T_B_frame_1549_jpg.rf.926000675f4e1d3c1071d1562214bef1.jpg,720,1280,2,518,518,882,719 -CARDS_OFFICE_B_S_frame_0876_jpg.rf.926bcf16af87433db3fac92480278803.jpg,720,1280,2,563,548,849,718 -CARDS_OFFICE_B_S_frame_0876_jpg.rf.926bcf16af87433db3fac92480278803.jpg,720,1280,1,506,703,564,719 -CARDS_LIVINGROOM_B_T_frame_2223_jpg.rf.9279ca95b30df23a4735dc430ae6e9a5.jpg,720,1280,1,185,676,253,716 -CARDS_LIVINGROOM_B_T_frame_2223_jpg.rf.9279ca95b30df23a4735dc430ae6e9a5.jpg,720,1280,2,561,667,817,718 -PUZZLE_OFFICE_H_B_frame_0469_jpg.rf.928f975244f9375f054034e3e48f7253.jpg,720,1280,1,247,563,523,719 -JENGA_OFFICE_H_T_frame_1629_jpg.rf.927bfa2a80fb4d06c569cab3fd45859a.jpg,720,1280,1,304,641,478,718 -CARDS_COURTYARD_H_S_frame_0779_jpg.rf.92a61df68ab0d4fe4ce64aadde33b80e.jpg,720,1280,1,265,590,499,719 -CARDS_COURTYARD_H_S_frame_0779_jpg.rf.92a61df68ab0d4fe4ce64aadde33b80e.jpg,720,1280,2,553,517,847,719 -PUZZLE_OFFICE_S_T_frame_0411_jpg.rf.92d4c8eecda2af7209ab44450d2a3a86.jpg,720,1280,1,100,600,350,714 -PUZZLE_OFFICE_S_T_frame_0411_jpg.rf.92d4c8eecda2af7209ab44450d2a3a86.jpg,720,1280,2,638,614,876,716 -JENGA_OFFICE_T_H_frame_2536_jpg.rf.92e86289acef283331cf70a453fb0b81.jpg,720,1280,1,208,275,463,481 -JENGA_OFFICE_T_H_frame_2536_jpg.rf.92e86289acef283331cf70a453fb0b81.jpg,720,1280,2,572,280,724,573 -JENGA_OFFICE_S_B_frame_0410_jpg.rf.92f3a4c4d9fd573ff7d17b3d894561e1.jpg,720,1280,2,469,355,742,602 -JENGA_OFFICE_B_S_frame_0239_jpg.rf.92f85167a8f5549f1af18f33e615dafb.jpg,720,1280,2,633,416,986,706 -JENGA_OFFICE_S_B_frame_1208_jpg.rf.93163d2ea76900857ada4dcafb22938d.jpg,720,1280,2,498,493,769,708 -CARDS_COURTYARD_B_T_frame_1338_jpg.rf.931b507004dd634e598be9170349b85a.jpg,720,1280,1,501,561,674,718 -CARDS_COURTYARD_B_T_frame_1338_jpg.rf.931b507004dd634e598be9170349b85a.jpg,720,1280,2,711,640,771,714 -CHESS_COURTYARD_T_B_frame_0708_jpg.rf.936843a7023d72620e9171bac6a154bf.jpg,720,1280,1,13,617,266,718 -CHESS_COURTYARD_T_B_frame_0708_jpg.rf.936843a7023d72620e9171bac6a154bf.jpg,720,1280,2,226,609,542,718 -CARDS_LIVINGROOM_S_H_frame_0649_jpg.rf.938275cfefa180707bc2f70c2720ffd2.jpg,720,1280,1,207,669,465,718 -CARDS_LIVINGROOM_S_H_frame_0649_jpg.rf.938275cfefa180707bc2f70c2720ffd2.jpg,720,1280,2,491,680,673,718 -CHESS_LIVINGROOM_S_B_frame_1072_jpg.rf.9391027ca645c3ad1301f6c7a35633e8.jpg,720,1280,2,565,350,1150,717 -CARDS_LIVINGROOM_H_S_frame_1841_jpg.rf.93e3ca2b3b7dd4ab77cf06e501e714ed.jpg,720,1280,1,48,647,83,713 -CARDS_LIVINGROOM_H_S_frame_1841_jpg.rf.93e3ca2b3b7dd4ab77cf06e501e714ed.jpg,720,1280,2,778,495,1029,716 -CHESS_OFFICE_H_T_frame_0283_jpg.rf.93f57e60582818f764a6be75336faf5f.jpg,720,1280,2,542,384,740,605 -CARDS_COURTYARD_H_S_frame_0129_jpg.rf.94128108ef0ad59460a660f0862c1705.jpg,720,1280,1,397,686,489,719 -CARDS_COURTYARD_H_S_frame_0129_jpg.rf.94128108ef0ad59460a660f0862c1705.jpg,720,1280,2,673,424,1004,719 -CARDS_LIVINGROOM_S_H_frame_0246_jpg.rf.941d0f58efeeb6ea119bac9407f80f82.jpg,720,1280,1,404,674,488,718 -CARDS_LIVINGROOM_S_H_frame_0246_jpg.rf.941d0f58efeeb6ea119bac9407f80f82.jpg,720,1280,2,537,589,817,718 -JENGA_LIVINGROOM_S_T_frame_2312_jpg.rf.943724ba0991c8ab790d21d965f4d7c1.jpg,720,1280,1,1,625,130,718 -JENGA_LIVINGROOM_S_T_frame_2312_jpg.rf.943724ba0991c8ab790d21d965f4d7c1.jpg,720,1280,2,289,540,692,718 -PUZZLE_OFFICE_B_H_frame_2159_jpg.rf.9447a7dcfe052041e72f06b455bc1b20.jpg,720,1280,1,384,584,611,707 -PUZZLE_OFFICE_B_H_frame_2159_jpg.rf.9447a7dcfe052041e72f06b455bc1b20.jpg,720,1280,2,1066,624,1263,715 -JENGA_COURTYARD_S_T_frame_1545_jpg.rf.944c4f4e44d7ced54df65ed2baa023eb.jpg,720,1280,1,191,658,377,717 -CARDS_COURTYARD_H_S_frame_2412_jpg.rf.945d96fbec6c11bb9d8133103e54da0e.jpg,720,1280,1,326,654,570,719 -CARDS_COURTYARD_H_S_frame_2412_jpg.rf.945d96fbec6c11bb9d8133103e54da0e.jpg,720,1280,2,585,338,973,599 -JENGA_OFFICE_T_H_frame_2191_jpg.rf.94643ab31075f503605d0dfb82173d18.jpg,720,1280,1,45,380,352,694 -JENGA_OFFICE_T_H_frame_2191_jpg.rf.94643ab31075f503605d0dfb82173d18.jpg,720,1280,2,751,701,836,716 -JENGA_COURTYARD_H_B_frame_1730_jpg.rf.94651be6c0caa0a834be60f5476fa6b6.jpg,720,1280,1,370,161,544,487 -JENGA_COURTYARD_H_B_frame_1730_jpg.rf.94651be6c0caa0a834be60f5476fa6b6.jpg,720,1280,2,597,104,813,506 -JENGA_LIVINGROOM_S_T_frame_1466_jpg.rf.947d34a91e1e9a02c32bc02cf2e7db75.jpg,720,1280,1,330,438,703,718 -JENGA_LIVINGROOM_S_T_frame_1466_jpg.rf.947d34a91e1e9a02c32bc02cf2e7db75.jpg,720,1280,2,1084,589,1279,718 -JENGA_OFFICE_B_S_frame_0844_jpg.rf.948cc79df4c7a8ee9e8c5f066a6d1bcc.jpg,720,1280,2,649,658,843,718 -CARDS_LIVINGROOM_H_S_frame_2393_jpg.rf.94938552ff54fd461733433a8d05ed08.jpg,720,1280,1,51,562,325,719 -CARDS_LIVINGROOM_H_S_frame_2393_jpg.rf.94938552ff54fd461733433a8d05ed08.jpg,720,1280,2,624,592,851,718 -PUZZLE_COURTYARD_B_S_frame_0058_jpg.rf.9498b84876de8e19e8b0e44febed69f4.jpg,720,1280,1,285,610,513,719 -PUZZLE_OFFICE_S_T_frame_2318_jpg.rf.949aa6c6560073ee3055575dc049aa38.jpg,720,1280,1,47,549,400,718 -PUZZLE_OFFICE_S_T_frame_2318_jpg.rf.949aa6c6560073ee3055575dc049aa38.jpg,720,1280,2,612,655,844,718 -CARDS_OFFICE_S_B_frame_1966_jpg.rf.94a7833463e06c2fa9ec106027c32cb1.jpg,720,1280,1,250,442,575,716 -CARDS_OFFICE_S_B_frame_1966_jpg.rf.94a7833463e06c2fa9ec106027c32cb1.jpg,720,1280,2,564,483,836,716 -PUZZLE_COURTYARD_B_S_frame_2617_jpg.rf.94bbe2132b6ff51418a641eb541fa432.jpg,720,1280,1,301,709,342,719 -PUZZLE_COURTYARD_B_S_frame_2617_jpg.rf.94bbe2132b6ff51418a641eb541fa432.jpg,720,1280,2,886,705,1009,719 -CHESS_LIVINGROOM_H_T_frame_1371_jpg.rf.94df36d5f7fae33f41241c7ab59aed09.jpg,720,1280,1,1,587,221,714 -CHESS_LIVINGROOM_H_T_frame_1371_jpg.rf.94df36d5f7fae33f41241c7ab59aed09.jpg,720,1280,2,607,55,1167,385 -PUZZLE_LIVINGROOM_T_B_frame_1457_jpg.rf.9507e7ff1877833a2a8238d4ff745864.jpg,720,1280,1,1,501,302,716 -PUZZLE_LIVINGROOM_B_T_frame_1340_jpg.rf.9577eab8d540a5f19714d2b8885b674d.jpg,720,1280,1,5,493,456,717 -PUZZLE_LIVINGROOM_B_T_frame_1340_jpg.rf.9577eab8d540a5f19714d2b8885b674d.jpg,720,1280,2,642,459,1122,715 -CHESS_COURTYARD_S_H_frame_0022_jpg.rf.95912bcb8a94194deecfa65b3658952c.jpg,720,1280,1,342,704,465,717 -CARDS_COURTYARD_T_B_frame_1520_jpg.rf.95b68a586a28222c84601495e2e84f4f.jpg,720,1280,1,181,623,398,717 -CARDS_COURTYARD_T_B_frame_1520_jpg.rf.95b68a586a28222c84601495e2e84f4f.jpg,720,1280,2,535,577,769,718 -PUZZLE_LIVINGROOM_B_T_frame_1587_jpg.rf.95c08cef1a0881ffb5c09ab6efa4f17f.jpg,720,1280,2,523,606,868,716 -CHESS_OFFICE_S_B_frame_2465_jpg.rf.95c557dce13e8e4dc1e4270b36b270da.jpg,720,1280,2,666,618,880,719 -PUZZLE_LIVINGROOM_T_B_frame_0528_jpg.rf.95ecd1d8166a5420e72b6fd2f6b5ab4e.jpg,720,1280,1,1,329,234,601 -PUZZLE_LIVINGROOM_T_B_frame_0528_jpg.rf.95ecd1d8166a5420e72b6fd2f6b5ab4e.jpg,720,1280,2,431,450,878,684 -JENGA_LIVINGROOM_H_B_frame_2286_jpg.rf.95f5f8ca7d37e2e0924e598a37b4ff6d.jpg,720,1280,2,567,176,911,344 -CHESS_COURTYARD_S_H_frame_0405_jpg.rf.9619196b143a44617f488664195fe98c.jpg,720,1280,2,544,431,1146,717 -CHESS_COURTYARD_S_H_frame_1770_jpg.rf.9627e4727cf4e055a5c4ca7c85c4271e.jpg,720,1280,2,468,359,906,675 -PUZZLE_COURTYARD_H_T_frame_2144_jpg.rf.9643adbe90640a3890e2a28bead0c876.jpg,720,1280,1,354,508,580,714 -PUZZLE_COURTYARD_H_T_frame_2144_jpg.rf.9643adbe90640a3890e2a28bead0c876.jpg,720,1280,2,754,526,1009,718 -JENGA_COURTYARD_H_B_frame_1075_jpg.rf.9654d2dcf77c05e079b25d91a745a3c1.jpg,720,1280,2,495,299,741,710 -CARDS_OFFICE_T_H_frame_2496_jpg.rf.9654e8aa8ba6c5ee675a18866f7fce51.jpg,720,1280,1,143,562,442,719 -CARDS_OFFICE_T_H_frame_2496_jpg.rf.9654e8aa8ba6c5ee675a18866f7fce51.jpg,720,1280,2,620,331,978,613 -CHESS_LIVINGROOM_S_B_frame_2459_jpg.rf.9671c9be802908b2f6eb476b3a080a58.jpg,720,1280,1,1,353,112,574 -CHESS_LIVINGROOM_S_B_frame_2459_jpg.rf.9671c9be802908b2f6eb476b3a080a58.jpg,720,1280,2,819,504,1108,718 -CHESS_OFFICE_T_H_frame_2001_jpg.rf.966c6035e25d7e9876d3ce178714f7e6.jpg,720,1280,1,112,592,338,717 -CHESS_OFFICE_T_H_frame_2001_jpg.rf.966c6035e25d7e9876d3ce178714f7e6.jpg,720,1280,2,295,611,567,718 -JENGA_COURTYARD_B_H_frame_2568_jpg.rf.9673649cf370c376c815630bebec6b00.jpg,720,1280,1,310,652,441,719 -CHESS_LIVINGROOM_T_H_frame_0839_jpg.rf.96a7e57ced54d22d993eb38dae820ff2.jpg,720,1280,1,8,283,336,537 -PUZZLE_LIVINGROOM_H_S_frame_1530_jpg.rf.96a903b410c2cec7c7a21b88e7766713.jpg,720,1280,1,338,698,459,713 -CARDS_LIVINGROOM_B_T_frame_1768_jpg.rf.96bf07e6b9a036e5b4e42b2e059e839c.jpg,720,1280,2,639,538,989,718 -JENGA_LIVINGROOM_T_S_frame_1471_jpg.rf.96c7ba10d778633e73e6323f9752b876.jpg,720,1280,1,216,707,267,717 -JENGA_LIVINGROOM_T_S_frame_1471_jpg.rf.96c7ba10d778633e73e6323f9752b876.jpg,720,1280,2,621,712,644,719 -JENGA_OFFICE_H_T_frame_2383_jpg.rf.96d0220e9080fbc9a7bc4e78db34fe4d.jpg,720,1280,1,217,70,517,292 -JENGA_OFFICE_H_T_frame_2383_jpg.rf.96d0220e9080fbc9a7bc4e78db34fe4d.jpg,720,1280,2,589,99,996,377 -PUZZLE_COURTYARD_T_H_frame_2119_jpg.rf.96d8930adccf1a3fcfced7c817fb5519.jpg,720,1280,2,633,349,1059,697 -CARDS_LIVINGROOM_B_T_frame_2199_jpg.rf.96e31a12df090c5cd6f65feb0941b0fd.jpg,720,1280,1,232,699,283,718 -CARDS_LIVINGROOM_B_T_frame_2199_jpg.rf.96e31a12df090c5cd6f65feb0941b0fd.jpg,720,1280,2,607,616,887,718 -JENGA_COURTYARD_T_S_frame_2084_jpg.rf.96ef55b59b6296e0f527bd5d1aaffaf1.jpg,720,1280,2,513,175,916,428 -CARDS_COURTYARD_T_B_frame_0937_jpg.rf.97151b8748bfd271e36187031948d549.jpg,720,1280,1,181,551,507,718 -CARDS_COURTYARD_T_B_frame_0937_jpg.rf.97151b8748bfd271e36187031948d549.jpg,720,1280,2,585,478,912,717 -CARDS_OFFICE_T_H_frame_0605_jpg.rf.9727ac75335a9023e87c3902c5d37b2e.jpg,720,1280,1,241,660,393,719 -CARDS_OFFICE_T_H_frame_0605_jpg.rf.9727ac75335a9023e87c3902c5d37b2e.jpg,720,1280,2,605,200,781,414 -PUZZLE_LIVINGROOM_T_B_frame_2682_jpg.rf.973cb537c2ce3f71dbc4522ed0f07ec4.jpg,720,1280,2,391,432,894,713 -PUZZLE_COURTYARD_S_B_frame_1197_jpg.rf.97573d8b600436f60ec21f7692315042.jpg,720,1280,1,3,435,418,716 -PUZZLE_COURTYARD_S_B_frame_1197_jpg.rf.97573d8b600436f60ec21f7692315042.jpg,720,1280,2,691,582,1018,718 -PUZZLE_OFFICE_H_B_frame_2599_jpg.rf.97951b13b998d0e7bc182a1892ae6cbe.jpg,720,1280,1,360,614,601,710 -PUZZLE_OFFICE_H_B_frame_2599_jpg.rf.97951b13b998d0e7bc182a1892ae6cbe.jpg,720,1280,2,588,480,809,713 -CHESS_COURTYARD_H_S_frame_2074_jpg.rf.979d6ca467c91f766f30e52de915f1cd.jpg,720,1280,2,819,466,1178,718 -CARDS_OFFICE_B_S_frame_1098_jpg.rf.978b0901edc0694de1cf30bdd5b7a599.jpg,720,1280,1,327,635,528,718 -CARDS_OFFICE_B_S_frame_1098_jpg.rf.978b0901edc0694de1cf30bdd5b7a599.jpg,720,1280,2,587,618,769,718 -CARDS_COURTYARD_S_H_frame_1114_jpg.rf.979ebb7d617ba2c00306cfe43207ed58.jpg,720,1280,1,394,706,439,718 -CHESS_LIVINGROOM_H_T_frame_0200_jpg.rf.97a4c939c819b0f783985283fe84450a.jpg,720,1280,1,5,510,387,718 -CHESS_LIVINGROOM_H_T_frame_0200_jpg.rf.97a4c939c819b0f783985283fe84450a.jpg,720,1280,2,1109,587,1279,718 -CARDS_LIVINGROOM_B_T_frame_2445_jpg.rf.97b2b6be9475a0205b36a80993468754.jpg,720,1280,1,232,688,298,718 -CARDS_LIVINGROOM_B_T_frame_2445_jpg.rf.97b2b6be9475a0205b36a80993468754.jpg,720,1280,2,630,646,789,718 -CARDS_OFFICE_S_B_frame_0863_jpg.rf.97d7a412064f4495a4f24bf3017f16b4.jpg,720,1280,1,216,563,468,718 -CARDS_LIVINGROOM_T_B_frame_1323_jpg.rf.97fb8252131d6b0622300ef4948d7d2c.jpg,720,1280,1,1,561,207,719 -CARDS_LIVINGROOM_T_B_frame_1323_jpg.rf.97fb8252131d6b0622300ef4948d7d2c.jpg,720,1280,2,595,529,1034,719 -PUZZLE_COURTYARD_S_B_frame_1663_jpg.rf.98152c60ebb302c52fa43a6b203350f9.jpg,720,1280,2,773,643,1043,718 -CARDS_COURTYARD_H_S_frame_2176_jpg.rf.983c63a454cb0338d6dba01b48a4d0a8.jpg,720,1280,1,88,463,461,719 -CARDS_COURTYARD_H_S_frame_2176_jpg.rf.983c63a454cb0338d6dba01b48a4d0a8.jpg,720,1280,2,536,336,909,570 -CARDS_LIVINGROOM_S_H_frame_1889_jpg.rf.985f3fecdacdcbd9798b7c5a425d26f0.jpg,720,1280,1,71,432,357,718 -CARDS_COURTYARD_S_H_frame_0912_jpg.rf.986d077bd998a9ce242c0bd1f807d02d.jpg,720,1280,1,226,366,469,583 -PUZZLE_COURTYARD_T_H_frame_0894_jpg.rf.98746425ae893100072daea134b34a2f.jpg,720,1280,1,3,485,340,718 -PUZZLE_COURTYARD_T_H_frame_0894_jpg.rf.98746425ae893100072daea134b34a2f.jpg,720,1280,2,469,290,891,650 -CARDS_LIVINGROOM_B_T_frame_0425_jpg.rf.987af72830d07bc148966558db38724a.jpg,720,1280,2,440,538,940,718 -CARDS_LIVINGROOM_T_B_frame_1307_jpg.rf.987ef92b1d58ec77f948b0d17cd12d65.jpg,720,1280,1,1,609,272,719 -CARDS_LIVINGROOM_T_B_frame_1307_jpg.rf.987ef92b1d58ec77f948b0d17cd12d65.jpg,720,1280,2,642,541,1002,719 -PUZZLE_COURTYARD_B_S_frame_2015_jpg.rf.98848cf9d99f6a46bdfa915f9dcf4209.jpg,720,1280,2,617,542,880,718 -PUZZLE_COURTYARD_B_S_frame_2015_jpg.rf.98848cf9d99f6a46bdfa915f9dcf4209.jpg,720,1280,1,382,573,621,719 -CARDS_OFFICE_B_S_frame_1806_jpg.rf.989e94213dc9f472ac23204dd258a230.jpg,720,1280,2,721,601,890,719 -CARDS_OFFICE_B_S_frame_1806_jpg.rf.989e94213dc9f472ac23204dd258a230.jpg,720,1280,1,353,643,442,719 -CARDS_COURTYARD_B_T_frame_1697_jpg.rf.98c86f5c301ee8c218c7b41c69443c61.jpg,720,1280,2,683,681,821,713 -CARDS_LIVINGROOM_B_T_frame_0745_jpg.rf.98de76031d5ba051d7e61a4ae92e8e9e.jpg,720,1280,2,669,686,815,718 -CHESS_OFFICE_B_S_frame_2591_jpg.rf.98e62752fc5a143f91ef9d2572675525.jpg,720,1280,2,716,497,1091,688 -CARDS_OFFICE_T_H_frame_1693_jpg.rf.98e8981ed969991d812d1772643e59c8.jpg,720,1280,2,522,543,789,719 -CARDS_OFFICE_T_H_frame_1693_jpg.rf.98e8981ed969991d812d1772643e59c8.jpg,720,1280,1,207,607,399,719 -JENGA_OFFICE_B_S_frame_1353_jpg.rf.9925c3b872a5a3557e9bc3c7905f412f.jpg,720,1280,1,114,193,286,549 -JENGA_OFFICE_B_S_frame_1353_jpg.rf.9925c3b872a5a3557e9bc3c7905f412f.jpg,720,1280,2,445,420,734,717 -JENGA_OFFICE_B_S_frame_2052_jpg.rf.992e2358fc0b48cdedcf1f3588bc7693.jpg,720,1280,2,260,139,730,551 -JENGA_COURTYARD_H_B_frame_0425_jpg.rf.99428495d80d47617b90bddede73ad0a.jpg,720,1280,2,573,0,873,289 -CARDS_OFFICE_H_T_frame_0506_jpg.rf.996b9f27e633a6a659eab03323d4e084.jpg,720,1280,2,734,328,963,583 -CARDS_LIVINGROOM_T_B_frame_2535_jpg.rf.997ccc327c08da0f3f96d38e48131884.jpg,720,1280,1,1,640,178,719 -CARDS_LIVINGROOM_T_B_frame_2535_jpg.rf.997ccc327c08da0f3f96d38e48131884.jpg,720,1280,2,433,522,808,718 -CHESS_OFFICE_H_T_frame_1728_jpg.rf.99a86af06681c7600c9122347850fa44.jpg,720,1280,2,683,389,880,580 -CARDS_OFFICE_B_S_frame_1036_jpg.rf.99af07502df00b4cdabb49cce7ac8df3.jpg,720,1280,1,337,610,514,718 -CARDS_OFFICE_B_S_frame_1036_jpg.rf.99af07502df00b4cdabb49cce7ac8df3.jpg,720,1280,2,580,635,791,718 -CHESS_COURTYARD_T_B_frame_1816_jpg.rf.99b6342579a6866aeea92a97aa6c3486.jpg,720,1280,1,106,600,428,718 -CHESS_COURTYARD_T_B_frame_1816_jpg.rf.99b6342579a6866aeea92a97aa6c3486.jpg,720,1280,2,501,325,759,515 -PUZZLE_OFFICE_H_B_frame_1026_jpg.rf.99bffd50b07643610777be4a161a5243.jpg,720,1280,1,118,582,381,714 -PUZZLE_OFFICE_H_B_frame_1026_jpg.rf.99bffd50b07643610777be4a161a5243.jpg,720,1280,2,1047,546,1277,717 -JENGA_LIVINGROOM_T_S_frame_1247_jpg.rf.99dad2a84c91ef11530ffad707bd33a3.jpg,720,1280,1,69,508,417,718 -JENGA_LIVINGROOM_T_S_frame_1247_jpg.rf.99dad2a84c91ef11530ffad707bd33a3.jpg,720,1280,2,566,471,908,717 -CHESS_LIVINGROOM_S_B_frame_1541_jpg.rf.9a0a6c6a7b77380a09ef1175c2f06e19.jpg,720,1280,1,19,537,424,717 -CARDS_COURTYARD_T_B_frame_2434_jpg.rf.9a20cf379c3ba3a44045ce61247b92db.jpg,720,1280,1,315,675,415,718 -CARDS_COURTYARD_T_B_frame_2434_jpg.rf.9a20cf379c3ba3a44045ce61247b92db.jpg,720,1280,2,548,568,891,718 -CHESS_COURTYARD_H_S_frame_0059_jpg.rf.9a5e648f4ab871cc1f307a72b8e1656b.jpg,720,1280,2,646,417,804,622 -PUZZLE_OFFICE_T_S_frame_1846_jpg.rf.9a607d00f5a48a5a100c77ed25d6c133.jpg,720,1280,1,100,362,418,697 -PUZZLE_OFFICE_T_S_frame_1846_jpg.rf.9a607d00f5a48a5a100c77ed25d6c133.jpg,720,1280,2,585,302,857,662 -CHESS_COURTYARD_T_B_frame_1298_jpg.rf.9a672c4b2d29c075047340cb9db77690.jpg,720,1280,1,1,482,251,718 -CHESS_COURTYARD_T_B_frame_1298_jpg.rf.9a672c4b2d29c075047340cb9db77690.jpg,720,1280,2,386,658,610,717 -PUZZLE_LIVINGROOM_S_H_frame_1250_jpg.rf.9a7e68389e8a0a4b0db199620a818f1c.jpg,720,1280,2,465,566,836,718 -JENGA_OFFICE_T_H_frame_2107_jpg.rf.9a80230f77acb7491d51440d5459fede.jpg,720,1280,1,174,324,437,540 -PUZZLE_LIVINGROOM_S_H_frame_0196_jpg.rf.9a8697f8455da4a51755b1346f4107f0.jpg,720,1280,1,24,504,391,714 -PUZZLE_LIVINGROOM_S_H_frame_0196_jpg.rf.9a8697f8455da4a51755b1346f4107f0.jpg,720,1280,2,675,383,866,534 -CHESS_COURTYARD_S_H_frame_2174_jpg.rf.9ab4f11b9807f0b13b56c6e28cd0c3fc.jpg,720,1280,2,592,683,885,718 -JENGA_OFFICE_H_T_frame_2064_jpg.rf.9abe21f4f9c22d4ccb2fb58459eb397a.jpg,720,1280,1,205,156,377,528 -JENGA_OFFICE_H_T_frame_2064_jpg.rf.9abe21f4f9c22d4ccb2fb58459eb397a.jpg,720,1280,2,584,220,764,567 -CHESS_LIVINGROOM_B_S_frame_0558_jpg.rf.9acdb1a3d03f409f706c277f1c7b3770.jpg,720,1280,2,658,383,1103,632 -PUZZLE_LIVINGROOM_S_H_frame_0591_jpg.rf.9aee4d9685e2fe4105f1c866d10624b5.jpg,720,1280,2,544,659,837,717 -JENGA_COURTYARD_S_T_frame_1338_jpg.rf.9b040ab7c8aa9d97630e2278dc5b980d.jpg,720,1280,1,200,502,437,718 -JENGA_COURTYARD_S_T_frame_1338_jpg.rf.9b040ab7c8aa9d97630e2278dc5b980d.jpg,720,1280,2,515,656,601,714 -CHESS_COURTYARD_H_S_frame_0490_jpg.rf.9b310eb1572f5bede37d141e11bbfb93.jpg,720,1280,2,528,308,777,507 -CHESS_COURTYARD_S_H_frame_1410_jpg.rf.9b5a8a21d4480709e16eeb85775de885.jpg,720,1280,2,283,333,876,718 -CARDS_OFFICE_S_B_frame_0213_jpg.rf.9b72cd1f1cef639ed9637ac4784a1e63.jpg,720,1280,1,238,680,419,718 -JENGA_OFFICE_H_T_frame_0425_jpg.rf.9b802ab9b0d66fdb39639000dc00d31f.jpg,720,1280,1,448,710,522,719 -JENGA_OFFICE_H_T_frame_0425_jpg.rf.9b802ab9b0d66fdb39639000dc00d31f.jpg,720,1280,2,665,630,865,717 -JENGA_OFFICE_S_B_frame_0638_jpg.rf.9b8dd4c27cb6a49f073b9e97d638cd81.jpg,720,1280,1,272,594,523,714 -JENGA_OFFICE_S_B_frame_0638_jpg.rf.9b8dd4c27cb6a49f073b9e97d638cd81.jpg,720,1280,2,923,608,1142,716 -PUZZLE_OFFICE_H_B_frame_0109_jpg.rf.9ba51374e12daef0092699641e48b45b.jpg,720,1280,1,47,638,306,719 -JENGA_LIVINGROOM_T_S_frame_1117_jpg.rf.9bd5b8d5d8a69495119b6ac43bcd0986.jpg,720,1280,1,72,693,181,717 -JENGA_LIVINGROOM_T_S_frame_1117_jpg.rf.9bd5b8d5d8a69495119b6ac43bcd0986.jpg,720,1280,2,516,450,864,719 -JENGA_COURTYARD_H_B_frame_1834_jpg.rf.9bf0d6ff261e2851a3527a190482f875.jpg,720,1280,1,149,574,370,718 -JENGA_COURTYARD_H_B_frame_1834_jpg.rf.9bf0d6ff261e2851a3527a190482f875.jpg,720,1280,2,599,530,794,718 -JENGA_COURTYARD_B_H_frame_2569_jpg.rf.9c29713498b636e519dc77657d40a5cc.jpg,720,1280,1,266,614,439,717 -JENGA_LIVINGROOM_T_S_frame_0357_jpg.rf.9c39ea457b376a4a7b9d04db4cc1b824.jpg,720,1280,1,8,494,198,707 -JENGA_LIVINGROOM_T_S_frame_0357_jpg.rf.9c39ea457b376a4a7b9d04db4cc1b824.jpg,720,1280,2,523,127,913,424 -PUZZLE_OFFICE_T_S_frame_1170_jpg.rf.9c55788634db0c04c0f4a63970bf6bab.jpg,720,1280,1,27,600,370,715 -PUZZLE_OFFICE_T_S_frame_1170_jpg.rf.9c55788634db0c04c0f4a63970bf6bab.jpg,720,1280,2,432,564,771,716 -PUZZLE_COURTYARD_B_S_frame_2435_jpg.rf.9c5761d9334aab4011184f7865829dc7.jpg,720,1280,1,1,339,385,719 -PUZZLE_COURTYARD_B_S_frame_2435_jpg.rf.9c5761d9334aab4011184f7865829dc7.jpg,720,1280,2,748,296,1240,716 -CHESS_OFFICE_S_B_frame_0696_jpg.rf.9c9b0be846168724c05e635ad28a39d9.jpg,720,1280,2,676,565,1162,717 -PUZZLE_COURTYARD_S_B_frame_0105_jpg.rf.9ca3a25a60fbe71650db050a20fcbb7f.jpg,720,1280,2,572,613,823,716 -PUZZLE_LIVINGROOM_H_S_frame_0549_jpg.rf.9ca4d062cb0e3653f34b53599b217fd7.jpg,720,1280,2,724,525,1040,717 -JENGA_OFFICE_H_T_frame_2471_jpg.rf.9cc361112e1269d83014bbdad53ad788.jpg,720,1280,2,621,1,901,266 -PUZZLE_OFFICE_B_H_frame_1398_jpg.rf.9cc68f730e7a3c6aa87b91a3082cb4f9.jpg,720,1280,2,1096,424,1278,646 -CARDS_OFFICE_B_S_frame_1642_jpg.rf.9d19ba96772b43232c7d59f20a0e55b5.jpg,720,1280,2,572,663,683,718 -CARDS_COURTYARD_H_S_frame_0380_jpg.rf.9d229663ea83f9ff7638bb113b487724.jpg,720,1280,1,278,652,386,719 -CARDS_COURTYARD_H_S_frame_0380_jpg.rf.9d229663ea83f9ff7638bb113b487724.jpg,720,1280,2,699,503,927,691 -JENGA_OFFICE_H_T_frame_0605_jpg.rf.9d43b09d5b981aee51f28d69dabd4bc6.jpg,720,1280,1,366,591,588,716 -JENGA_OFFICE_H_T_frame_0605_jpg.rf.9d43b09d5b981aee51f28d69dabd4bc6.jpg,720,1280,2,547,223,748,341 -PUZZLE_OFFICE_B_H_frame_0216_jpg.rf.9d5428f3a089327e363475b0d4057068.jpg,720,1280,2,831,614,1047,719 -PUZZLE_LIVINGROOM_T_B_frame_1667_jpg.rf.9d6f4754ba9eeb70e6615a5ef95d6006.jpg,720,1280,2,316,272,1050,659 -PUZZLE_LIVINGROOM_T_B_frame_1667_jpg.rf.9d6f4754ba9eeb70e6615a5ef95d6006.jpg,720,1280,1,0,295,324,702 -CHESS_OFFICE_B_S_frame_0604_jpg.rf.9da9ab0e7fbebe50a8c14085b11f0fdd.jpg,720,1280,2,617,502,1018,717 -PUZZLE_LIVINGROOM_H_S_frame_0678_jpg.rf.9dad4b0087cf6075eb40586a35144012.jpg,720,1280,2,1034,408,1277,715 -CARDS_OFFICE_B_S_frame_2061_jpg.rf.9e03d58a708a990cfae1479d0c051371.jpg,720,1280,1,292,632,517,718 -CARDS_OFFICE_B_S_frame_2061_jpg.rf.9e03d58a708a990cfae1479d0c051371.jpg,720,1280,2,584,581,839,718 -JENGA_OFFICE_B_S_frame_0729_jpg.rf.9e2b0526eaa40633dc0f2f7dbf19a354.jpg,720,1280,1,122,387,398,556 -JENGA_OFFICE_B_S_frame_0729_jpg.rf.9e2b0526eaa40633dc0f2f7dbf19a354.jpg,720,1280,2,466,655,528,718 -PUZZLE_LIVINGROOM_B_T_frame_0834_jpg.rf.9e79875d11ed85ccdd82acf9bf54dbc3.jpg,720,1280,1,316,641,597,719 -PUZZLE_LIVINGROOM_B_T_frame_0834_jpg.rf.9e79875d11ed85ccdd82acf9bf54dbc3.jpg,720,1280,2,495,401,902,651 -CHESS_COURTYARD_B_T_frame_2648_jpg.rf.9e8f8030bda73f3c317d0c4e25852aae.jpg,720,1280,2,1056,685,1232,718 -CHESS_LIVINGROOM_S_B_frame_0313_jpg.rf.9e9d93906c613f9ad014fef0f547743c.jpg,720,1280,2,474,263,1037,540 -JENGA_OFFICE_T_H_frame_0110_jpg.rf.9ea206883798f96da753075805fe929d.jpg,720,1280,2,0,0,1234,366 -JENGA_OFFICE_T_H_frame_0110_jpg.rf.9ea206883798f96da753075805fe929d.jpg,720,1280,1,2,588,254,718 -JENGA_OFFICE_S_B_frame_1028_jpg.rf.9ea8249162f48f6f944e4eaabeb27504.jpg,720,1280,1,230,624,478,719 -JENGA_OFFICE_S_B_frame_1028_jpg.rf.9ea8249162f48f6f944e4eaabeb27504.jpg,720,1280,2,887,613,1105,719 -PUZZLE_OFFICE_H_B_frame_1857_jpg.rf.9eb18b8e980d80c82312f35c8e3f0d81.jpg,720,1280,2,694,487,911,676 -PUZZLE_OFFICE_H_B_frame_1857_jpg.rf.9eb18b8e980d80c82312f35c8e3f0d81.jpg,720,1280,1,307,569,603,719 -CHESS_LIVINGROOM_T_H_frame_1449_jpg.rf.9ed1c201ace7953a581b3033aef34131.jpg,720,1280,2,392,603,767,718 -JENGA_COURTYARD_S_T_frame_1437_jpg.rf.9efef4f3c08e0196682bad90c2a9d23c.jpg,720,1280,1,7,122,232,386 -JENGA_COURTYARD_S_T_frame_1437_jpg.rf.9efef4f3c08e0196682bad90c2a9d23c.jpg,720,1280,2,576,679,740,718 -JENGA_OFFICE_T_H_frame_1500_jpg.rf.9f1b37e6246419ca700d16e18d094b32.jpg,720,1280,1,360,158,480,461 -JENGA_OFFICE_T_H_frame_1500_jpg.rf.9f1b37e6246419ca700d16e18d094b32.jpg,720,1280,2,584,166,704,445 -JENGA_COURTYARD_S_T_frame_0039_jpg.rf.9f2fdc4160d07006c3639aab399abaa5.jpg,720,1280,1,282,570,411,714 -PUZZLE_COURTYARD_T_H_frame_1171_jpg.rf.9f57576310d6b4ef38f48d4042b63af7.jpg,720,1280,1,1,413,355,716 -PUZZLE_COURTYARD_T_H_frame_1171_jpg.rf.9f57576310d6b4ef38f48d4042b63af7.jpg,720,1280,2,563,335,946,674 -PUZZLE_LIVINGROOM_H_S_frame_0896_jpg.rf.9fc2e90896c0e75cc752758c7be275cf.jpg,720,1280,2,657,533,988,719 -CHESS_COURTYARD_T_B_frame_1894_jpg.rf.9fdbada786af69e657811c50325e8044.jpg,720,1280,1,40,669,272,716 -CARDS_COURTYARD_B_T_frame_2666_jpg.rf.9fe7748d4c3b904df0b0295fc05bfda6.jpg,720,1280,2,614,685,712,717 -PUZZLE_LIVINGROOM_H_S_frame_0749_jpg.rf.9fed93f7bcc83eeedefb912e4b02d46d.jpg,720,1280,1,135,625,389,717 -PUZZLE_LIVINGROOM_S_H_frame_1114_jpg.rf.9ff1887e13b71f55bb3c44407e852b0f.jpg,720,1280,1,139,483,520,705 -PUZZLE_LIVINGROOM_S_H_frame_1114_jpg.rf.9ff1887e13b71f55bb3c44407e852b0f.jpg,720,1280,2,698,604,1003,718 -CARDS_OFFICE_B_S_frame_1809_jpg.rf.a0131c81d6e6bb1117b56389d72750ce.jpg,720,1280,1,374,680,435,713 -CARDS_OFFICE_B_S_frame_1809_jpg.rf.a0131c81d6e6bb1117b56389d72750ce.jpg,720,1280,2,767,621,926,718 -CARDS_OFFICE_S_B_frame_0532_jpg.rf.a01c0b1aa25e3636f22c2fbc00be6f4f.jpg,720,1280,1,246,478,461,717 -CHESS_LIVINGROOM_T_H_frame_0117_jpg.rf.a02c866a9e28cba1362611544509d8b7.jpg,720,1280,2,741,201,1090,513 -JENGA_LIVINGROOM_S_T_frame_2426_jpg.rf.a02eeb37b848061522e4cead0ec5eaf3.jpg,720,1280,1,3,341,236,718 -JENGA_LIVINGROOM_S_T_frame_2426_jpg.rf.a02eeb37b848061522e4cead0ec5eaf3.jpg,720,1280,2,465,434,917,718 -JENGA_COURTYARD_T_S_frame_0703_jpg.rf.a040ddffd168ea96fe85b65e27387d5f.jpg,720,1280,1,9,424,374,717 -JENGA_COURTYARD_T_S_frame_0703_jpg.rf.a040ddffd168ea96fe85b65e27387d5f.jpg,720,1280,2,477,374,847,716 -JENGA_COURTYARD_S_T_frame_1390_jpg.rf.a04990c8215b60fd2372f6777fbb97fd.jpg,720,1280,1,141,497,393,712 -JENGA_COURTYARD_S_T_frame_1390_jpg.rf.a04990c8215b60fd2372f6777fbb97fd.jpg,720,1280,2,519,681,565,714 -CARDS_LIVINGROOM_S_H_frame_0726_jpg.rf.a04a40cecfb9b6b94fc5ad8b03eb2b7f.jpg,720,1280,1,245,627,522,718 -CARDS_LIVINGROOM_S_H_frame_0726_jpg.rf.a04a40cecfb9b6b94fc5ad8b03eb2b7f.jpg,720,1280,2,533,646,755,718 -CARDS_COURTYARD_S_H_frame_0482_jpg.rf.a050b6c4cc9d1e1e64c321f152e1b2c8.jpg,720,1280,1,287,659,474,718 -JENGA_OFFICE_S_B_frame_0987_jpg.rf.a05ceddd5cdddd41e81d2bb4a4feee8c.jpg,720,1280,2,895,619,1114,719 -JENGA_OFFICE_S_B_frame_0987_jpg.rf.a05ceddd5cdddd41e81d2bb4a4feee8c.jpg,720,1280,1,243,623,495,717 -CHESS_LIVINGROOM_H_T_frame_0461_jpg.rf.a05e8ba901c7e20faa83af0e56e11d4b.jpg,720,1280,1,3,561,226,714 -CHESS_LIVINGROOM_H_T_frame_0461_jpg.rf.a05e8ba901c7e20faa83af0e56e11d4b.jpg,720,1280,2,643,421,1201,718 -CARDS_OFFICE_H_T_frame_1071_jpg.rf.a066fe5284d62bf98f140371685a3044.jpg,720,1280,1,226,623,332,718 -CARDS_OFFICE_H_T_frame_1071_jpg.rf.a066fe5284d62bf98f140371685a3044.jpg,720,1280,2,633,667,815,718 -PUZZLE_COURTYARD_T_H_frame_1602_jpg.rf.a072e4dd2ba145683022185537940bc5.jpg,720,1280,2,563,464,974,718 -JENGA_COURTYARD_T_S_frame_2247_jpg.rf.a08241ad702e0aec67f44f0c7bec4850.jpg,720,1280,1,38,574,290,718 -JENGA_COURTYARD_T_S_frame_2247_jpg.rf.a08241ad702e0aec67f44f0c7bec4850.jpg,720,1280,2,542,535,828,718 -JENGA_OFFICE_T_H_frame_1794_jpg.rf.a0ad39993ac92e2d07d7f75e13be6d93.jpg,720,1280,1,227,622,442,718 -JENGA_OFFICE_T_H_frame_1794_jpg.rf.a0ad39993ac92e2d07d7f75e13be6d93.jpg,720,1280,2,548,328,848,629 -CARDS_OFFICE_T_H_frame_0742_jpg.rf.a0b729b04dca7c8271d49b539c7feb33.jpg,720,1280,1,215,584,499,719 -CARDS_OFFICE_T_H_frame_0742_jpg.rf.a0b729b04dca7c8271d49b539c7feb33.jpg,720,1280,2,639,253,783,397 -PUZZLE_OFFICE_H_B_frame_2423_jpg.rf.a0b53b1bc7b4cad11bad776675091048.jpg,720,1280,1,293,589,509,714 -PUZZLE_OFFICE_H_B_frame_2423_jpg.rf.a0b53b1bc7b4cad11bad776675091048.jpg,720,1280,2,580,543,772,700 -CHESS_LIVINGROOM_B_S_frame_2511_jpg.rf.a0dec080aaf7e1d659986f215e36d38b.jpg,720,1280,2,726,511,1066,718 -CARDS_OFFICE_H_T_frame_0021_jpg.rf.a0e78ca22b6d16876361c01f09c08782.jpg,720,1280,1,139,602,279,718 -CARDS_OFFICE_H_T_frame_0021_jpg.rf.a0e78ca22b6d16876361c01f09c08782.jpg,720,1280,2,600,570,928,713 -PUZZLE_LIVINGROOM_H_S_frame_1837_jpg.rf.a0dec3580647f748af584e704a089ddc.jpg,720,1280,2,648,640,956,717 -PUZZLE_LIVINGROOM_B_T_frame_1490_jpg.rf.a1045d8b4c7f57f1eb99d36e0696c226.jpg,720,1280,1,7,525,479,719 -PUZZLE_LIVINGROOM_B_T_frame_1490_jpg.rf.a1045d8b4c7f57f1eb99d36e0696c226.jpg,720,1280,2,592,583,1097,718 -CHESS_COURTYARD_T_B_frame_0354_jpg.rf.a149168f74aa987f36d84a02ca11889e.jpg,720,1280,1,1,622,279,716 -CARDS_OFFICE_B_S_frame_1596_jpg.rf.a15842e72c7e342ec9d182cf97d1952f.jpg,720,1280,1,383,710,418,717 -CARDS_OFFICE_B_S_frame_1596_jpg.rf.a15842e72c7e342ec9d182cf97d1952f.jpg,720,1280,2,708,695,773,718 -CARDS_LIVINGROOM_S_H_frame_1272_jpg.rf.a16665a5b6f40fe5988ae6525971d195.jpg,720,1280,1,1,513,164,678 -CARDS_LIVINGROOM_S_H_frame_1272_jpg.rf.a16665a5b6f40fe5988ae6525971d195.jpg,720,1280,2,478,510,868,718 -PUZZLE_LIVINGROOM_S_H_frame_1266_jpg.rf.a16d9cc5d4213008e1ba38d2a8732dbe.jpg,720,1280,2,518,544,967,718 -JENGA_LIVINGROOM_B_H_frame_1510_jpg.rf.a175534c76e6ec4c0ee66ebaa9863a8f.jpg,720,1280,1,151,675,324,719 -JENGA_LIVINGROOM_B_H_frame_1510_jpg.rf.a175534c76e6ec4c0ee66ebaa9863a8f.jpg,720,1280,2,605,413,884,718 -CARDS_OFFICE_T_H_frame_0938_jpg.rf.a177a9863c9479da36e595f661bb50f8.jpg,720,1280,1,181,588,419,719 -CARDS_OFFICE_T_H_frame_0938_jpg.rf.a177a9863c9479da36e595f661bb50f8.jpg,720,1280,2,478,565,751,719 -CARDS_OFFICE_T_H_frame_0614_jpg.rf.a19376c950fc475351d20b2a8c871c74.jpg,720,1280,1,249,624,397,717 -CARDS_OFFICE_T_H_frame_0614_jpg.rf.a19376c950fc475351d20b2a8c871c74.jpg,720,1280,2,705,346,864,543 -CARDS_COURTYARD_H_S_frame_0390_jpg.rf.a1b61292e0ac91884164bafe9d741b1a.jpg,720,1280,1,193,583,524,719 -CARDS_COURTYARD_H_S_frame_0390_jpg.rf.a1b61292e0ac91884164bafe9d741b1a.jpg,720,1280,2,698,352,943,592 -CARDS_COURTYARD_T_B_frame_0419_jpg.rf.a1bc887d12f2d7602368a3b64030e20e.jpg,720,1280,1,160,632,441,718 -CARDS_COURTYARD_T_B_frame_0419_jpg.rf.a1bc887d12f2d7602368a3b64030e20e.jpg,720,1280,2,576,594,783,717 -JENGA_OFFICE_B_S_frame_0380_jpg.rf.a1c8f08db4b6955e02db0c1a2d403724.jpg,720,1280,1,360,696,466,718 -JENGA_COURTYARD_B_H_frame_1291_jpg.rf.a1d458d94684fa13c7bf9fea81a9236b.jpg,720,1280,1,398,683,520,719 -JENGA_COURTYARD_B_H_frame_1291_jpg.rf.a1d458d94684fa13c7bf9fea81a9236b.jpg,720,1280,2,656,323,934,691 -CHESS_LIVINGROOM_B_S_frame_0974_jpg.rf.a1db01ad681e9d5a2a63dfb765a2ca33.jpg,720,1280,2,573,435,1067,718 -CHESS_OFFICE_T_H_frame_0320_jpg.rf.a1e0fc103a42786b040596ba0a0023e7.jpg,720,1280,2,650,432,990,629 -JENGA_LIVINGROOM_T_S_frame_1664_jpg.rf.a1ef6149d89ba3296d2f0f379644f78a.jpg,720,1280,1,2,401,276,715 -JENGA_LIVINGROOM_T_S_frame_1664_jpg.rf.a1ef6149d89ba3296d2f0f379644f78a.jpg,720,1280,2,471,289,976,700 -JENGA_OFFICE_T_H_frame_1585_jpg.rf.a2021efcfd9d42b0913ee5c4ae0e77da.jpg,720,1280,2,609,243,855,424 -JENGA_LIVINGROOM_T_S_frame_1776_jpg.rf.a2266c721a8517eff7704dd3d492ec32.jpg,720,1280,1,17,196,422,548 -CARDS_LIVINGROOM_H_S_frame_2440_jpg.rf.a22e0424aec91a9d0f95fee45bf4ccc2.jpg,720,1280,1,323,633,475,719 -CARDS_LIVINGROOM_H_S_frame_2440_jpg.rf.a22e0424aec91a9d0f95fee45bf4ccc2.jpg,720,1280,2,609,563,991,719 -CHESS_COURTYARD_T_B_frame_1617_jpg.rf.a23882e7716fa3e17584352d2011bd06.jpg,720,1280,1,131,676,345,717 -CHESS_COURTYARD_T_B_frame_1617_jpg.rf.a23882e7716fa3e17584352d2011bd06.jpg,720,1280,2,430,693,573,718 -CARDS_OFFICE_B_S_frame_0299_jpg.rf.a249b1e78213d2413a5156bb65f005f6.jpg,720,1280,2,744,701,825,718 -CARDS_COURTYARD_T_B_frame_0859_jpg.rf.a2514172ba9c7d36f2321247a802cfc8.jpg,720,1280,1,176,602,466,718 -CARDS_COURTYARD_T_B_frame_0859_jpg.rf.a2514172ba9c7d36f2321247a802cfc8.jpg,720,1280,2,560,555,841,718 -JENGA_OFFICE_H_T_frame_0576_jpg.rf.a25b160aca33f71e741d1e2e86452ef6.jpg,720,1280,1,346,552,588,719 -JENGA_OFFICE_H_T_frame_0576_jpg.rf.a25b160aca33f71e741d1e2e86452ef6.jpg,720,1280,2,548,178,724,249 -CHESS_COURTYARD_H_S_frame_1148_jpg.rf.a265b802939e93416703965d07211d93.jpg,720,1280,2,792,588,1033,718 -PUZZLE_COURTYARD_T_H_frame_2570_jpg.rf.a298bf9c26cfd877b48ccdc97f6394dd.jpg,720,1280,2,734,453,1279,718 -CHESS_LIVINGROOM_S_B_frame_1011_jpg.rf.a2d2925b775297817139ceb3b56375f4.jpg,720,1280,2,754,535,1067,718 -PUZZLE_OFFICE_B_H_frame_0911_jpg.rf.a2d38a737879c36f5a313a18cb886048.jpg,720,1280,2,1035,315,1276,595 -CARDS_OFFICE_S_B_frame_0033_jpg.rf.a30679542b0d9c5e7ddcf955757241a3.jpg,720,1280,1,267,625,481,718 -CARDS_OFFICE_S_B_frame_0033_jpg.rf.a30679542b0d9c5e7ddcf955757241a3.jpg,720,1280,2,575,650,746,718 -PUZZLE_COURTYARD_S_B_frame_0845_jpg.rf.a30e777611678bcc01f6b32ad5fe5688.jpg,720,1280,1,3,552,378,718 -PUZZLE_COURTYARD_S_B_frame_0845_jpg.rf.a30e777611678bcc01f6b32ad5fe5688.jpg,720,1280,2,583,570,869,717 -CHESS_COURTYARD_T_B_frame_0918_jpg.rf.a31bd9d08cfc0fbe468c21490d31fba8.jpg,720,1280,1,77,349,377,556 -CHESS_COURTYARD_T_B_frame_0918_jpg.rf.a31bd9d08cfc0fbe468c21490d31fba8.jpg,720,1280,2,317,625,671,717 -CARDS_LIVINGROOM_H_S_frame_0114_jpg.rf.a3668f0537ce0b051bf4915b020f2599.jpg,720,1280,2,894,556,1174,719 -CHESS_COURTYARD_H_S_frame_1775_jpg.rf.a39a847a1cf687309ad9c7c56ceed5b2.jpg,720,1280,2,754,416,1019,594 -JENGA_COURTYARD_T_S_frame_0670_jpg.rf.a39974c5541de0ace7c0d5f4e9d51340.jpg,720,1280,1,55,396,419,713 -JENGA_COURTYARD_T_S_frame_0670_jpg.rf.a39974c5541de0ace7c0d5f4e9d51340.jpg,720,1280,2,510,366,868,718 -CHESS_OFFICE_T_H_frame_2206_jpg.rf.a3d205cc3070f7b957b6a4010db00641.jpg,720,1280,1,282,656,493,718 -CARDS_OFFICE_H_T_frame_1142_jpg.rf.a3bd678afd98f92ff2332437be53ec13.jpg,720,1280,1,285,648,370,716 -CARDS_OFFICE_H_T_frame_1142_jpg.rf.a3bd678afd98f92ff2332437be53ec13.jpg,720,1280,2,673,625,931,718 -CARDS_OFFICE_B_S_frame_1896_jpg.rf.a39f2a504ee06b41c41f658a6274375b.jpg,720,1280,2,660,643,847,718 -JENGA_COURTYARD_B_H_frame_0267_jpg.rf.a3e321e6109332d144a3255b774dde64.jpg,720,1280,2,817,708,895,719 -PUZZLE_LIVINGROOM_S_H_frame_0634_jpg.rf.a3dedbb87aa59478dfddfc63b14f6ae9.jpg,720,1280,1,289,542,652,718 -PUZZLE_LIVINGROOM_S_H_frame_0634_jpg.rf.a3dedbb87aa59478dfddfc63b14f6ae9.jpg,720,1280,2,673,532,1048,718 -PUZZLE_LIVINGROOM_B_T_frame_1182_jpg.rf.a3e6bf4a819a57e7b5673f5d7c4650c4.jpg,720,1280,2,610,454,1086,713 -CHESS_COURTYARD_S_H_frame_1734_jpg.rf.a3ef3626860c4c2c0b5f3b0e7eb8a507.jpg,720,1280,2,531,336,893,632 -JENGA_OFFICE_S_B_frame_0390_jpg.rf.a3f12e4fd812d86df25ea0a0842d390a.jpg,720,1280,2,461,371,747,614 -CHESS_LIVINGROOM_S_B_frame_2015_jpg.rf.a40378f7c169d96c75d858a62b670265.jpg,720,1280,1,148,665,286,717 -CHESS_LIVINGROOM_S_B_frame_2015_jpg.rf.a40378f7c169d96c75d858a62b670265.jpg,720,1280,2,945,576,1242,718 -CARDS_COURTYARD_S_H_frame_2674_jpg.rf.a411c0da287c3e418cb701287b413661.jpg,720,1280,1,304,646,518,718 -CARDS_COURTYARD_S_H_frame_2674_jpg.rf.a411c0da287c3e418cb701287b413661.jpg,720,1280,2,579,705,637,719 -CHESS_LIVINGROOM_T_H_frame_1684_jpg.rf.a41660f3684b4eec12a43efc246524e4.jpg,720,1280,2,541,288,1121,616 -CARDS_OFFICE_T_H_frame_1116_jpg.rf.a423d2b7cec0231ab2061fc5f53a6a71.jpg,720,1280,1,429,683,457,719 -CARDS_OFFICE_T_H_frame_1116_jpg.rf.a423d2b7cec0231ab2061fc5f53a6a71.jpg,720,1280,2,522,416,717,586 -JENGA_OFFICE_S_B_frame_1319_jpg.rf.a426d062618841546e5017ee01484d77.jpg,720,1280,2,460,473,770,719 -CARDS_LIVINGROOM_T_B_frame_1967_jpg.rf.a45f06b55952d902c19e47e234bc45e9.jpg,720,1280,1,1,567,220,719 -CARDS_LIVINGROOM_T_B_frame_1967_jpg.rf.a45f06b55952d902c19e47e234bc45e9.jpg,720,1280,2,529,473,811,697 -JENGA_OFFICE_T_H_frame_0311_jpg.rf.a42fd0565ed16535c1b88cdce37647e0.jpg,720,1280,1,64,403,322,693 -CHESS_LIVINGROOM_H_T_frame_2246_jpg.rf.a477755ee59bca3a131aa786234f558c.jpg,720,1280,1,5,546,253,718 -CHESS_LIVINGROOM_H_T_frame_2246_jpg.rf.a477755ee59bca3a131aa786234f558c.jpg,720,1280,2,1063,277,1279,606 -JENGA_COURTYARD_S_T_frame_1610_jpg.rf.a47cedd28de08c434fb1cd40d713656c.jpg,720,1280,1,105,246,548,527 -PUZZLE_LIVINGROOM_T_B_frame_2482_jpg.rf.a48efd85f3a14466b3f18d18fc61d517.jpg,720,1280,1,10,605,217,712 -PUZZLE_LIVINGROOM_T_B_frame_2482_jpg.rf.a48efd85f3a14466b3f18d18fc61d517.jpg,720,1280,2,572,386,1195,709 -CARDS_LIVINGROOM_B_T_frame_1477_jpg.rf.a4a07483d04fac0397fe5b931dac3398.jpg,720,1280,2,580,574,853,718 -CARDS_COURTYARD_T_B_frame_1434_jpg.rf.a4a075f2f536869dc6990a1d15a81794.jpg,720,1280,1,166,572,448,718 -CARDS_COURTYARD_T_B_frame_1434_jpg.rf.a4a075f2f536869dc6990a1d15a81794.jpg,720,1280,2,568,625,761,718 -PUZZLE_COURTYARD_S_B_frame_0804_jpg.rf.a4fc78b2f4d496f8b7d94a34ee279927.jpg,720,1280,2,769,612,1096,719 -CHESS_OFFICE_B_S_frame_1433_jpg.rf.a51225c60ff53113732dd028660d18f4.jpg,720,1280,1,143,679,357,718 -PUZZLE_LIVINGROOM_S_H_frame_0175_jpg.rf.a50e1e0543eba130eeaf50c35bc2bd9a.jpg,720,1280,1,14,570,455,718 -PUZZLE_LIVINGROOM_S_H_frame_0175_jpg.rf.a50e1e0543eba130eeaf50c35bc2bd9a.jpg,720,1280,2,516,544,868,718 -CHESS_OFFICE_H_T_frame_1939_jpg.rf.a514014827b2e114cc790e073e7bf8ce.jpg,720,1280,2,625,268,926,487 -PUZZLE_OFFICE_T_S_frame_1805_jpg.rf.a54c23c279dff0ab28f861b8bf9d4a24.jpg,720,1280,1,6,365,357,708 -PUZZLE_OFFICE_T_S_frame_1805_jpg.rf.a54c23c279dff0ab28f861b8bf9d4a24.jpg,720,1280,2,545,301,910,640 -PUZZLE_COURTYARD_S_B_frame_0447_jpg.rf.a56d507e0206b8a394bf34f32394a549.jpg,720,1280,1,84,697,226,714 -CHESS_LIVINGROOM_S_B_frame_1220_jpg.rf.a570dccb7b85b0b87936810c8b53ab91.jpg,720,1280,1,5,572,131,687 -CHESS_LIVINGROOM_S_B_frame_1220_jpg.rf.a570dccb7b85b0b87936810c8b53ab91.jpg,720,1280,2,439,395,1039,712 -CARDS_LIVINGROOM_H_S_frame_2535_jpg.rf.a58a01f8db3bade3a72ada46fe1b0abe.jpg,720,1280,1,250,597,534,719 -CARDS_LIVINGROOM_H_S_frame_2535_jpg.rf.a58a01f8db3bade3a72ada46fe1b0abe.jpg,720,1280,2,577,506,990,719 -CARDS_LIVINGROOM_H_S_frame_1067_jpg.rf.a59c9e40ab0866f116f24db5391489b5.jpg,720,1280,2,669,587,994,719 -CHESS_COURTYARD_T_B_frame_2440_jpg.rf.a59d236dc0fccf00611d00f9194f0cbc.jpg,720,1280,1,35,658,272,718 -CHESS_COURTYARD_T_B_frame_2440_jpg.rf.a59d236dc0fccf00611d00f9194f0cbc.jpg,720,1280,2,278,631,554,717 -CHESS_LIVINGROOM_H_T_frame_0646_jpg.rf.a59eca74041ae109b87a63062ac11920.jpg,720,1280,1,1,481,213,705 -CHESS_LIVINGROOM_H_T_frame_0646_jpg.rf.a59eca74041ae109b87a63062ac11920.jpg,720,1280,2,435,326,989,678 -CARDS_COURTYARD_H_S_frame_0174_jpg.rf.a5a3cf5f0b6ebb893071bcd9029fae63.jpg,720,1280,1,319,662,488,719 -CARDS_COURTYARD_H_S_frame_0174_jpg.rf.a5a3cf5f0b6ebb893071bcd9029fae63.jpg,720,1280,2,641,640,838,719 -CARDS_COURTYARD_H_S_frame_0682_jpg.rf.a5b19182cd9121278ae5fa0c40107e73.jpg,720,1280,1,259,598,510,719 -CARDS_COURTYARD_H_S_frame_0682_jpg.rf.a5b19182cd9121278ae5fa0c40107e73.jpg,720,1280,2,535,477,899,719 -JENGA_COURTYARD_S_T_frame_0139_jpg.rf.a5b19cb5f93e84210d7708689b0e4463.jpg,720,1280,1,109,320,387,573 -JENGA_COURTYARD_S_T_frame_0139_jpg.rf.a5b19cb5f93e84210d7708689b0e4463.jpg,720,1280,2,258,540,637,712 -PUZZLE_LIVINGROOM_S_H_frame_2247_jpg.rf.a5b58024e4bae5ac4161e5270d997b79.jpg,720,1280,2,590,604,870,718 -JENGA_COURTYARD_S_T_frame_0038_jpg.rf.a5e7f5e81a841313e5e7b8881b0f5b6d.jpg,720,1280,1,254,578,391,718 -CHESS_COURTYARD_B_T_frame_1243_jpg.rf.a5e96c1956d0e1f91c397aaa45642466.jpg,720,1280,2,682,400,982,586 -PUZZLE_OFFICE_B_H_frame_2505_jpg.rf.a61cdf95b5d5edc111aa7e11e6ae7a13.jpg,720,1280,1,312,648,547,716 -PUZZLE_OFFICE_B_H_frame_2505_jpg.rf.a61cdf95b5d5edc111aa7e11e6ae7a13.jpg,720,1280,2,581,481,916,710 -PUZZLE_OFFICE_B_H_frame_1066_jpg.rf.a624dbe586e844fe53d5c59eb4a881e7.jpg,720,1280,1,391,657,585,717 -PUZZLE_OFFICE_B_H_frame_1066_jpg.rf.a624dbe586e844fe53d5c59eb4a881e7.jpg,720,1280,2,602,499,994,715 -JENGA_OFFICE_H_T_frame_2608_jpg.rf.a632a8398377b0ffce9dc4fc5a1e38f9.jpg,720,1280,2,672,198,919,406 -CHESS_OFFICE_B_S_frame_1184_jpg.rf.a63b17773de4da65702348e9e8b095ce.jpg,720,1280,1,179,688,369,716 -CHESS_OFFICE_B_S_frame_1184_jpg.rf.a63b17773de4da65702348e9e8b095ce.jpg,720,1280,2,646,701,742,718 -CARDS_LIVINGROOM_S_H_frame_1278_jpg.rf.a65e68ac95ac19bf73676061321b76cf.jpg,720,1280,1,77,684,166,714 -CARDS_LIVINGROOM_S_H_frame_1278_jpg.rf.a65e68ac95ac19bf73676061321b76cf.jpg,720,1280,2,522,680,698,716 -JENGA_OFFICE_S_B_frame_2442_jpg.rf.a662cc2f9906826164ee10534b96c90d.jpg,720,1280,2,475,372,695,686 -JENGA_LIVINGROOM_T_S_frame_0358_jpg.rf.a6902b376ddedacaa21e973dd9b5d9a8.jpg,720,1280,1,8,622,133,715 -JENGA_LIVINGROOM_T_S_frame_0358_jpg.rf.a6902b376ddedacaa21e973dd9b5d9a8.jpg,720,1280,2,522,127,930,449 -CARDS_LIVINGROOM_S_H_frame_1787_jpg.rf.a6b4aef7b8a065aa71be8cf82c1b618e.jpg,720,1280,1,92,576,395,718 -CARDS_LIVINGROOM_S_H_frame_1787_jpg.rf.a6b4aef7b8a065aa71be8cf82c1b618e.jpg,720,1280,2,457,587,770,718 -JENGA_OFFICE_S_B_frame_2345_jpg.rf.a6b2544cb555cfcea18243036d2139fb.jpg,720,1280,2,588,442,828,718 -CARDS_COURTYARD_H_S_frame_0209_jpg.rf.a6cea6265da42f08d739443ceca08516.jpg,720,1280,1,222,567,485,719 -CARDS_COURTYARD_H_S_frame_0209_jpg.rf.a6cea6265da42f08d739443ceca08516.jpg,720,1280,2,513,538,823,718 -PUZZLE_COURTYARD_H_T_frame_0637_jpg.rf.a6dbb6fdf77e522791fcb1ccc114c217.jpg,720,1280,1,109,555,411,716 -PUZZLE_COURTYARD_H_T_frame_0637_jpg.rf.a6dbb6fdf77e522791fcb1ccc114c217.jpg,720,1280,2,517,497,814,717 -CARDS_LIVINGROOM_S_H_frame_1767_jpg.rf.a6b918c12d28a87926d6d4ca5dd6c23c.jpg,720,1280,1,1,402,232,714 -CARDS_LIVINGROOM_S_H_frame_1767_jpg.rf.a6b918c12d28a87926d6d4ca5dd6c23c.jpg,720,1280,2,373,555,738,718 -CARDS_COURTYARD_H_S_frame_1983_jpg.rf.a707d70a2ed31738d88b600f483783d8.jpg,720,1280,1,184,544,522,719 -CARDS_COURTYARD_H_S_frame_1983_jpg.rf.a707d70a2ed31738d88b600f483783d8.jpg,720,1280,2,582,321,977,584 -PUZZLE_LIVINGROOM_T_B_frame_1077_jpg.rf.a70ea4aa97b1fb12be6105c3b161d2ea.jpg,720,1280,2,515,395,1274,712 -CARDS_OFFICE_B_S_frame_0680_jpg.rf.a70d169e8feb8c9d73887049984b2355.jpg,720,1280,1,400,664,490,718 -CARDS_OFFICE_B_S_frame_0680_jpg.rf.a70d169e8feb8c9d73887049984b2355.jpg,720,1280,2,701,659,779,718 -CHESS_LIVINGROOM_S_B_frame_2518_jpg.rf.a6fabd3c781fab7f01689069a2f77de8.jpg,720,1280,1,2,568,255,718 -CARDS_LIVINGROOM_H_S_frame_1886_jpg.rf.a748adbbade42bf9e2f9c580c853e491.jpg,720,1280,1,19,507,180,716 -CARDS_LIVINGROOM_H_S_frame_1886_jpg.rf.a748adbbade42bf9e2f9c580c853e491.jpg,720,1280,2,887,396,1179,719 -PUZZLE_OFFICE_T_S_frame_0389_jpg.rf.a73411b40caf1ff10a250e5d6ef5dc1b.jpg,720,1280,1,203,525,572,713 -PUZZLE_OFFICE_T_S_frame_0389_jpg.rf.a73411b40caf1ff10a250e5d6ef5dc1b.jpg,720,1280,2,614,485,958,716 -CARDS_LIVINGROOM_S_H_frame_0870_jpg.rf.a70621330a9b100249a93298642b210b.jpg,720,1280,1,115,657,393,718 -CARDS_LIVINGROOM_S_H_frame_0870_jpg.rf.a70621330a9b100249a93298642b210b.jpg,720,1280,2,656,566,857,718 -JENGA_COURTYARD_B_H_frame_0523_jpg.rf.a7721f2a9d3d1434524478e86b4ba9f0.jpg,720,1280,2,665,175,1014,374 -PUZZLE_OFFICE_S_T_frame_0552_jpg.rf.a77b0a52b0e81685b132938eaab0380e.jpg,720,1280,1,144,543,481,717 -PUZZLE_OFFICE_S_T_frame_0552_jpg.rf.a77b0a52b0e81685b132938eaab0380e.jpg,720,1280,2,635,689,755,718 -CARDS_OFFICE_H_T_frame_1951_jpg.rf.a7668eff27c4e0c88b1c3d0ce9697ec2.jpg,720,1280,1,245,555,558,718 -CARDS_OFFICE_H_T_frame_1951_jpg.rf.a7668eff27c4e0c88b1c3d0ce9697ec2.jpg,720,1280,2,675,457,1056,701 -CARDS_COURTYARD_S_H_frame_0577_jpg.rf.00bc9712b9e08caf48a6dd437b35bbe0.jpg,720,1280,1,224,373,488,703 -PUZZLE_COURTYARD_H_T_frame_1387_jpg.rf.03ccfe949346e35ba0abe3954640302b.jpg,720,1280,1,188,660,422,717 -PUZZLE_COURTYARD_B_S_frame_2364_jpg.rf.046a8868e3960aa4e10845fb37871118.jpg,720,1280,1,482,590,773,719 -PUZZLE_COURTYARD_B_S_frame_2364_jpg.rf.046a8868e3960aa4e10845fb37871118.jpg,720,1280,2,826,502,1108,716 -PUZZLE_COURTYARD_B_S_frame_1476_jpg.rf.04b24512c6d88290cb39407db5b27c4a.jpg,720,1280,1,59,539,463,719 -PUZZLE_COURTYARD_B_S_frame_1476_jpg.rf.04b24512c6d88290cb39407db5b27c4a.jpg,720,1280,2,397,633,687,719 -CARDS_COURTYARD_B_T_frame_0324_jpg.rf.0552edb85e6ac351eeff8c25050c308e.jpg,720,1280,2,486,631,646,718 -PUZZLE_OFFICE_H_B_frame_2319_jpg.rf.0692741b7f162e68cb34bf7ad87a945a.jpg,720,1280,2,713,354,844,474 -PUZZLE_LIVINGROOM_S_H_frame_1789_jpg.rf.07a12ffa462c81b666c9cb8ce31be62b.jpg,720,1280,2,611,417,1133,718 -JENGA_OFFICE_T_H_frame_1145_jpg.rf.068c508eb914921de6111be2364a2b9d.jpg,720,1280,2,524,537,795,717 -PUZZLE_OFFICE_B_H_frame_0776_jpg.rf.093366abea43216eb869d143a331f051.jpg,720,1280,1,500,501,851,710 -CARDS_OFFICE_H_T_frame_1168_jpg.rf.0938e5caaa7c95281d2642b7cf783609.jpg,720,1280,1,238,652,313,718 -CARDS_OFFICE_H_T_frame_1168_jpg.rf.0938e5caaa7c95281d2642b7cf783609.jpg,720,1280,2,773,465,1011,714 -JENGA_LIVINGROOM_H_B_frame_1155_jpg.rf.0996973b9f88311664f939d80744769a.jpg,720,1280,2,598,336,810,717 -CHESS_COURTYARD_T_B_frame_2382_jpg.rf.0a2624f515854fbbd305442881e07291.jpg,720,1280,1,52,664,283,718 -CHESS_COURTYARD_T_B_frame_2382_jpg.rf.0a2624f515854fbbd305442881e07291.jpg,720,1280,2,319,667,571,718 -CHESS_COURTYARD_S_H_frame_1943_jpg.rf.09b247281b0c31b31f9918727b128017.jpg,720,1280,2,956,362,1279,596 -CARDS_LIVINGROOM_H_S_frame_0266_jpg.rf.0a9fcb2533b20be53881425a54f2ef98.jpg,720,1280,2,600,560,912,719 -CARDS_LIVINGROOM_T_B_frame_0562_jpg.rf.0b7d07f7d266d7ab89931b2a41ef61d5.jpg,720,1280,1,11,688,105,719 -CARDS_LIVINGROOM_T_B_frame_0562_jpg.rf.0b7d07f7d266d7ab89931b2a41ef61d5.jpg,720,1280,2,519,584,927,717 -JENGA_LIVINGROOM_H_B_frame_1425_jpg.rf.0bbea247ce3d404c2ebe3ba4a821161a.jpg,720,1280,2,554,40,815,252 -PUZZLE_OFFICE_B_H_frame_2537_jpg.rf.0d46e0803011a794793a4dc64389328a.jpg,720,1280,2,704,467,987,711 -PUZZLE_OFFICE_T_S_frame_2673_jpg.rf.0e13ff4f91ad4c52d069d1c5e6be04d3.jpg,720,1280,2,599,596,772,719 -CARDS_COURTYARD_B_T_frame_2358_jpg.rf.0e60b0bb24d27307421cc453e29948ac.jpg,720,1280,2,680,696,741,717 -PUZZLE_LIVINGROOM_T_B_frame_0141_jpg.rf.0fbd3fe6a86d2f4ab4c9f1b983d19c6a.jpg,720,1280,1,6,383,208,614 -PUZZLE_LIVINGROOM_T_B_frame_0141_jpg.rf.0fbd3fe6a86d2f4ab4c9f1b983d19c6a.jpg,720,1280,2,700,606,1232,718 -CHESS_LIVINGROOM_T_H_frame_1963_jpg.rf.0fcc9cde435c0060ebe3f9140e2e89f7.jpg,720,1280,2,642,15,1112,299 -CHESS_OFFICE_T_H_frame_0980_jpg.rf.11623682dc1272411c8fffba9042d17c.jpg,720,1280,1,100,652,327,713 -CHESS_OFFICE_T_H_frame_0980_jpg.rf.11623682dc1272411c8fffba9042d17c.jpg,720,1280,2,597,332,901,514 -JENGA_LIVINGROOM_T_S_frame_0775_jpg.rf.120b7f534e9ddf6311d63a2e242a3a43.jpg,720,1280,1,4,330,247,660 -JENGA_LIVINGROOM_T_S_frame_0775_jpg.rf.120b7f534e9ddf6311d63a2e242a3a43.jpg,720,1280,2,534,352,909,673 -PUZZLE_OFFICE_T_S_frame_0882_jpg.rf.1225ede0120db48c7d8fbfefed2fa7ea.jpg,720,1280,1,11,518,256,718 -PUZZLE_OFFICE_T_S_frame_0882_jpg.rf.1225ede0120db48c7d8fbfefed2fa7ea.jpg,720,1280,2,417,507,707,714 -JENGA_COURTYARD_T_S_frame_0812_jpg.rf.132000d7fa0206c60e8e07e50395824d.jpg,720,1280,1,94,292,375,650 -JENGA_COURTYARD_T_S_frame_0812_jpg.rf.132000d7fa0206c60e8e07e50395824d.jpg,720,1280,2,554,254,790,528 -CARDS_OFFICE_H_T_frame_2667_jpg.rf.13e04d73ebce3bd37c4044aa356f0165.jpg,720,1280,2,736,474,974,691 -JENGA_LIVINGROOM_T_S_frame_1929_jpg.rf.14ad6076e958fcd647e0b31135bdbaba.jpg,720,1280,2,659,676,818,719 -CARDS_OFFICE_B_S_frame_1674_jpg.rf.14e2eae1361b199d5ef0d3eb51e2263e.jpg,720,1280,2,795,511,985,718 -CARDS_COURTYARD_B_T_frame_2426_jpg.rf.15312f535f7334c07bc54d6fd11a0669.jpg,720,1280,2,662,662,816,718 -PUZZLE_COURTYARD_T_H_frame_1701_jpg.rf.153f14ec46a9772fc3cd48af5c9e0689.jpg,720,1280,2,571,538,878,718 -PUZZLE_COURTYARD_T_H_frame_1701_jpg.rf.153f14ec46a9772fc3cd48af5c9e0689.jpg,720,1280,1,3,599,359,718 -PUZZLE_OFFICE_B_H_frame_2011_jpg.rf.1638fee9cbff64803a969a27e12f449d.jpg,720,1280,1,4,516,284,715 -PUZZLE_OFFICE_B_H_frame_2011_jpg.rf.1638fee9cbff64803a969a27e12f449d.jpg,720,1280,2,548,497,899,717 -JENGA_LIVINGROOM_S_T_frame_1077_jpg.rf.16f7325709680b5dc8e3d3979de452e0.jpg,720,1280,2,584,277,1025,718 -CARDS_OFFICE_T_H_frame_1783_jpg.rf.17b086ab7560997f6c929927441c04d7.jpg,720,1280,1,251,675,332,715 -CARDS_OFFICE_T_H_frame_1783_jpg.rf.17b086ab7560997f6c929927441c04d7.jpg,720,1280,2,582,626,734,717 -PUZZLE_OFFICE_H_B_frame_1904_jpg.rf.1829ad64c99bb2032662a53ef656489e.jpg,720,1280,1,300,570,614,715 -PUZZLE_OFFICE_H_B_frame_1904_jpg.rf.1829ad64c99bb2032662a53ef656489e.jpg,720,1280,2,666,537,925,717 -CHESS_OFFICE_B_S_frame_1915_jpg.rf.183287b91827bc6d3de8a4dedc2adade.jpg,720,1280,2,643,675,852,718 -CARDS_OFFICE_B_S_frame_0880_jpg.rf.1883774289585fb5f2afa27cd47bd858.jpg,720,1280,2,550,581,820,714 -CARDS_LIVINGROOM_T_B_frame_0086_jpg.rf.19586dfb223821022b2a3c7a7591beca.jpg,720,1280,1,2,572,384,719 -CARDS_LIVINGROOM_T_B_frame_0086_jpg.rf.19586dfb223821022b2a3c7a7591beca.jpg,720,1280,2,463,308,990,682 -PUZZLE_LIVINGROOM_S_H_frame_1029_jpg.rf.197963180e73a51e13b26245e598e927.jpg,720,1280,2,807,544,1175,713 -CHESS_COURTYARD_T_B_frame_1966_jpg.rf.1a4b0df46cedff70b1e8cf9cf03ad8aa.jpg,720,1280,1,49,665,300,718 -CHESS_COURTYARD_T_B_frame_1966_jpg.rf.1a4b0df46cedff70b1e8cf9cf03ad8aa.jpg,720,1280,2,394,672,575,717 -CARDS_COURTYARD_S_H_frame_2098_jpg.rf.1b388cf60a7eeb6595bf4ce3f0636a89.jpg,720,1280,2,546,667,736,716 -CARDS_COURTYARD_B_T_frame_2230_jpg.rf.1c0d1f69aa00dcff100645c493183977.jpg,720,1280,2,654,681,744,718 -CHESS_OFFICE_H_T_frame_0819_jpg.rf.1c4ca95cc00b900893dfd51e7a1a629a.jpg,720,1280,2,659,453,988,709 -PUZZLE_COURTYARD_T_H_frame_0499_jpg.rf.1c7545d3eaba5c32d57f1ca0e2737296.jpg,720,1280,2,522,570,828,718 -PUZZLE_COURTYARD_T_H_frame_0499_jpg.rf.1c7545d3eaba5c32d57f1ca0e2737296.jpg,720,1280,1,35,623,427,718 -CHESS_COURTYARD_T_B_frame_1194_jpg.rf.1d7c0e13bf474adf87bfe108be7c0328.jpg,720,1280,1,48,671,261,717 -JENGA_LIVINGROOM_T_S_frame_0900_jpg.rf.1d9d1b71ddae119afdb1bb2ba5e71273.jpg,720,1280,1,32,683,219,713 -JENGA_LIVINGROOM_T_S_frame_0900_jpg.rf.1d9d1b71ddae119afdb1bb2ba5e71273.jpg,720,1280,2,665,589,906,714 -CHESS_OFFICE_S_B_frame_0801_jpg.rf.1e03a92c87540b0ffed1f8fc66f696c8.jpg,720,1280,2,676,302,1111,669 -CHESS_COURTYARD_H_S_frame_1656_jpg.rf.1e70c9a6e66698eb629f86259f3467b8.jpg,720,1280,2,812,445,994,606 -CARDS_OFFICE_H_T_frame_0857_jpg.rf.1e996d63f6238e482e5664bbba4adce6.jpg,720,1280,1,217,566,474,718 -CARDS_OFFICE_H_T_frame_0857_jpg.rf.1e996d63f6238e482e5664bbba4adce6.jpg,720,1280,2,646,600,862,717 -CHESS_OFFICE_T_H_frame_2394_jpg.rf.1eb3cbd62e83b6882aea1fc3a149a356.jpg,720,1280,1,57,527,311,710 -CHESS_OFFICE_T_H_frame_2394_jpg.rf.1eb3cbd62e83b6882aea1fc3a149a356.jpg,720,1280,2,548,705,583,717 -PUZZLE_COURTYARD_B_S_frame_0757_jpg.rf.1f8e7b21a8908f2704f59f24a1f9130c.jpg,720,1280,2,737,612,1041,719 -PUZZLE_LIVINGROOM_T_B_frame_2018_jpg.rf.20c734262ff7792521d9190a6fe1e278.jpg,720,1280,1,2,258,278,652 -PUZZLE_LIVINGROOM_T_B_frame_2018_jpg.rf.20c734262ff7792521d9190a6fe1e278.jpg,720,1280,2,484,254,1190,709 -JENGA_COURTYARD_H_B_frame_0782_jpg.rf.212a4f95e816c52f3c8d088ee7f1fcee.jpg,720,1280,1,260,680,467,718 -JENGA_COURTYARD_H_B_frame_0782_jpg.rf.212a4f95e816c52f3c8d088ee7f1fcee.jpg,720,1280,2,419,10,728,320 -CHESS_COURTYARD_T_B_frame_0265_jpg.rf.249415cdaadf8a02e3f3aea426446c16.jpg,720,1280,2,507,330,753,522 -PUZZLE_OFFICE_B_H_frame_0239_jpg.rf.257c2b671765d791b1e0da418f6fe326.jpg,720,1280,1,259,686,428,717 -CHESS_OFFICE_S_B_frame_1667_jpg.rf.25c17b2284b09f546139b3cdd4eb088e.jpg,720,1280,2,690,445,943,719 -CARDS_COURTYARD_B_T_frame_1340_jpg.rf.2627a0428e9d7b58cc4e85ea44e4a8b7.jpg,720,1280,1,488,557,667,717 -CARDS_COURTYARD_B_T_frame_1340_jpg.rf.2627a0428e9d7b58cc4e85ea44e4a8b7.jpg,720,1280,2,693,652,740,718 -CARDS_COURTYARD_B_T_frame_1051_jpg.rf.2667da0e6b59ae2bffa63710591c7d98.jpg,720,1280,2,759,560,989,718 -PUZZLE_LIVINGROOM_T_B_frame_1065_jpg.rf.269319db9efc2efc98bcd01893bbb3d3.jpg,720,1280,1,5,382,130,592 -PUZZLE_LIVINGROOM_T_B_frame_1065_jpg.rf.269319db9efc2efc98bcd01893bbb3d3.jpg,720,1280,2,482,415,1279,713 -CARDS_OFFICE_H_T_frame_1629_jpg.rf.275b86f09417872ae88f7a3d4ed8a84a.jpg,720,1280,2,711,538,1095,718 -PUZZLE_COURTYARD_H_T_frame_0079_jpg.rf.27768a274829d921747eacd1340cd28c.jpg,720,1280,1,14,621,233,717 -PUZZLE_COURTYARD_H_T_frame_0079_jpg.rf.27768a274829d921747eacd1340cd28c.jpg,720,1280,2,489,673,653,718 -CARDS_OFFICE_B_S_frame_0612_jpg.rf.280575325aa42ffeff3fb0abd420fd03.jpg,720,1280,2,696,619,909,718 -JENGA_LIVINGROOM_S_T_frame_0806_jpg.rf.29ff71c5aa4c2e35c1a155d208e3aae8.jpg,720,1280,1,88,519,472,718 -JENGA_LIVINGROOM_S_T_frame_0806_jpg.rf.29ff71c5aa4c2e35c1a155d208e3aae8.jpg,720,1280,2,584,500,934,716 -CARDS_COURTYARD_T_B_frame_1550_jpg.rf.2a51f63f7007436e9a956a02799966a3.jpg,720,1280,1,254,491,522,710 -CARDS_COURTYARD_T_B_frame_1550_jpg.rf.2a51f63f7007436e9a956a02799966a3.jpg,720,1280,2,540,578,762,718 -JENGA_COURTYARD_H_B_frame_0684_jpg.rf.2a6da50a782dac015f51b068f7e00e48.jpg,720,1280,2,815,373,1039,718 -JENGA_LIVINGROOM_H_B_frame_0615_jpg.rf.2abb6187e2f50793c0b0f16e315a735f.jpg,720,1280,2,617,387,919,695 -CARDS_LIVINGROOM_H_S_frame_1971_jpg.rf.2bb550e69fa271b0a01e499029977011.jpg,720,1280,2,662,645,869,719 -PUZZLE_COURTYARD_S_B_frame_1906_jpg.rf.2bb6da6cac0c972a87b1cfcef7e6665a.jpg,720,1280,1,230,594,513,718 -PUZZLE_COURTYARD_S_B_frame_1906_jpg.rf.2bb6da6cac0c972a87b1cfcef7e6665a.jpg,720,1280,2,587,520,866,717 -PUZZLE_OFFICE_H_B_frame_2350_jpg.rf.2d02cf028d3c33f6c9297954aff0ca08.jpg,720,1280,2,599,496,796,660 -JENGA_OFFICE_H_T_frame_1881_jpg.rf.2f12600e47c041125eb4f3e9666e292a.jpg,720,1280,1,228,374,525,717 -JENGA_OFFICE_H_T_frame_1881_jpg.rf.2f12600e47c041125eb4f3e9666e292a.jpg,720,1280,2,591,359,882,692 -CARDS_LIVINGROOM_S_H_frame_0945_jpg.rf.302f53c45be2e4e65c54f4549f639e17.jpg,720,1280,1,241,688,344,718 -CARDS_LIVINGROOM_S_H_frame_0945_jpg.rf.302f53c45be2e4e65c54f4549f639e17.jpg,720,1280,2,690,697,734,716 -JENGA_COURTYARD_B_H_frame_1795_jpg.rf.321ab3ea4411a85babe9244599995eec.jpg,720,1280,1,293,611,464,718 -JENGA_COURTYARD_B_H_frame_1795_jpg.rf.321ab3ea4411a85babe9244599995eec.jpg,720,1280,2,575,537,870,717 -CARDS_LIVINGROOM_S_H_frame_0687_jpg.rf.33025bd43110a19f8f5f1e504a8113a5.jpg,720,1280,1,219,646,488,718 -CARDS_LIVINGROOM_S_H_frame_0687_jpg.rf.33025bd43110a19f8f5f1e504a8113a5.jpg,720,1280,2,508,678,709,718 -PUZZLE_COURTYARD_S_B_frame_1380_jpg.rf.33a5878d171c7419060ac33d694bed32.jpg,720,1280,2,761,689,852,718 -PUZZLE_COURTYARD_T_H_frame_1281_jpg.rf.35900a6ab0c207e24c737116cd60a67e.jpg,720,1280,2,815,487,1279,718 -CARDS_LIVINGROOM_S_H_frame_1721_jpg.rf.3606797c39595a677d5981cee3a6640b.jpg,720,1280,1,228,487,539,699 -CARDS_LIVINGROOM_H_S_frame_2442_jpg.rf.368135dcfa523ee46a6ce78971c16929.jpg,720,1280,1,332,644,472,719 -CARDS_LIVINGROOM_H_S_frame_2442_jpg.rf.368135dcfa523ee46a6ce78971c16929.jpg,720,1280,2,652,528,1026,719 -JENGA_OFFICE_S_B_frame_0566_jpg.rf.368ecc95b8d5315bb1a9479b190dc7bd.jpg,720,1280,1,384,618,639,716 -CARDS_LIVINGROOM_T_B_frame_0556_jpg.rf.36c10b5fdf4508d599cc15dd95088926.jpg,720,1280,1,1,681,113,719 -CARDS_LIVINGROOM_T_B_frame_0556_jpg.rf.36c10b5fdf4508d599cc15dd95088926.jpg,720,1280,2,585,509,864,702 -JENGA_LIVINGROOM_B_H_frame_1531_jpg.rf.380b46b8cd3fb8f05e1ef74d36075f37.jpg,720,1280,1,103,662,347,718 -JENGA_LIVINGROOM_B_H_frame_1531_jpg.rf.380b46b8cd3fb8f05e1ef74d36075f37.jpg,720,1280,2,616,389,912,718 -PUZZLE_COURTYARD_S_B_frame_1108_jpg.rf.38ee68d55547632f9f086103dd67de01.jpg,720,1280,1,175,412,493,665 -PUZZLE_COURTYARD_S_B_frame_1108_jpg.rf.38ee68d55547632f9f086103dd67de01.jpg,720,1280,2,572,419,814,675 -JENGA_COURTYARD_S_T_frame_0510_jpg.rf.3b71fccca138ed2aafc8697cb341cd86.jpg,720,1280,1,317,602,443,716 -JENGA_LIVINGROOM_T_S_frame_1024_jpg.rf.3e07375ceeb19c822ba4e153e96a7c5f.jpg,720,1280,1,6,686,192,718 -JENGA_LIVINGROOM_T_S_frame_1024_jpg.rf.3e07375ceeb19c822ba4e153e96a7c5f.jpg,720,1280,2,674,419,1000,717 -PUZZLE_LIVINGROOM_T_B_frame_2151_jpg.rf.3e504e9e202c71b379b3abc13751aec5.jpg,720,1280,2,899,503,1279,714 -JENGA_OFFICE_H_T_frame_2005_jpg.rf.3ee023d2a9ee40e5cb94a0b15caaca85.jpg,720,1280,1,370,237,516,616 -JENGA_OFFICE_H_T_frame_2005_jpg.rf.3ee023d2a9ee40e5cb94a0b15caaca85.jpg,720,1280,2,552,371,893,657 -PUZZLE_OFFICE_T_S_frame_0855_jpg.rf.3f095ad5556acf4ead21d8065821a07c.jpg,720,1280,1,5,571,182,709 -PUZZLE_OFFICE_T_S_frame_0855_jpg.rf.3f095ad5556acf4ead21d8065821a07c.jpg,720,1280,2,380,528,672,714 -CHESS_LIVINGROOM_S_B_frame_1380_jpg.rf.3f0cf7b3f98836f78a5e77151bd03830.jpg,720,1280,1,1,576,189,714 -CHESS_LIVINGROOM_S_B_frame_1380_jpg.rf.3f0cf7b3f98836f78a5e77151bd03830.jpg,720,1280,2,860,590,1180,718 -CHESS_COURTYARD_B_T_frame_0807_jpg.rf.3f8eefcfc082f5216c6bf638623ed31d.jpg,720,1280,1,278,648,455,718 -JENGA_COURTYARD_B_H_frame_1381_jpg.rf.4011b0caba0f22b80ed2465681883b4d.jpg,720,1280,1,382,674,528,719 -JENGA_COURTYARD_B_H_frame_1381_jpg.rf.4011b0caba0f22b80ed2465681883b4d.jpg,720,1280,2,681,279,950,653 -PUZZLE_OFFICE_S_T_frame_1077_jpg.rf.40499f7b872fe4c2d72f329a1f4e2eda.jpg,720,1280,1,191,691,294,718 -CARDS_COURTYARD_B_T_frame_1761_jpg.rf.4089979456b2838029036a20ae11f066.jpg,720,1280,2,565,563,824,713 -CARDS_OFFICE_B_S_frame_2690_jpg.rf.40ad4b2336b69a12c4635fdf27bac159.jpg,720,1280,1,291,639,433,716 -CARDS_OFFICE_B_S_frame_2690_jpg.rf.40ad4b2336b69a12c4635fdf27bac159.jpg,720,1280,2,543,603,700,712 -PUZZLE_OFFICE_B_H_frame_0763_jpg.rf.41066af1b8cb4e369f9ce08fefb1fa81.jpg,720,1280,2,653,482,1084,716 -CARDS_OFFICE_B_S_frame_1530_jpg.rf.419b6ca175f43f67c064b2850adea118.jpg,720,1280,1,353,688,402,718 -CARDS_OFFICE_B_S_frame_1530_jpg.rf.419b6ca175f43f67c064b2850adea118.jpg,720,1280,2,691,601,835,716 -CHESS_OFFICE_S_B_frame_2443_jpg.rf.41d82d66fbe05a492df95746a190a6be.jpg,720,1280,1,1,445,242,719 -CHESS_OFFICE_S_B_frame_2443_jpg.rf.41d82d66fbe05a492df95746a190a6be.jpg,720,1280,2,671,583,927,719 -JENGA_COURTYARD_B_H_frame_0487_jpg.rf.42459451d4c01191796421c97bf9510a.jpg,720,1280,2,675,375,943,715 -CHESS_LIVINGROOM_S_B_frame_1215_jpg.rf.42d75ccdfb2647c92e9f821478d124c8.jpg,720,1280,1,1,548,101,718 -CHESS_LIVINGROOM_S_B_frame_1215_jpg.rf.42d75ccdfb2647c92e9f821478d124c8.jpg,720,1280,2,489,358,1154,714 -PUZZLE_COURTYARD_B_S_frame_1509_jpg.rf.43a7ea66b4d984f4b492eba35811972d.jpg,720,1280,2,984,616,1228,716 -CHESS_LIVINGROOM_T_H_frame_1710_jpg.rf.43e21154df6dc61c40fdd641cc7d71e7.jpg,720,1280,1,2,357,70,605 -CHESS_LIVINGROOM_T_H_frame_1710_jpg.rf.43e21154df6dc61c40fdd641cc7d71e7.jpg,720,1280,2,510,590,937,718 -JENGA_COURTYARD_H_B_frame_2547_jpg.rf.4682d305e133432ca29c468618ac9e22.jpg,720,1280,1,270,702,389,718 -JENGA_COURTYARD_H_B_frame_2547_jpg.rf.4682d305e133432ca29c468618ac9e22.jpg,720,1280,2,374,48,535,320 -JENGA_COURTYARD_S_T_frame_0363_jpg.rf.45a31db3b1d69c012632e24ae136d3ff.jpg,720,1280,2,709,330,1097,718 -CARDS_LIVINGROOM_B_T_frame_2037_jpg.rf.456026495b6f227f94a3dfa3394e4dd1.jpg,720,1280,2,590,646,853,718 -CARDS_COURTYARD_H_S_frame_1245_jpg.rf.471b3651b2c9f7acd8f409da3f2ae83b.jpg,720,1280,1,182,594,442,718 -CARDS_COURTYARD_H_S_frame_1245_jpg.rf.471b3651b2c9f7acd8f409da3f2ae83b.jpg,720,1280,2,566,574,829,719 -PUZZLE_COURTYARD_B_S_frame_2219_jpg.rf.47babfbc553d2d1771556f2062a9aa05.jpg,720,1280,1,389,615,667,719 -PUZZLE_COURTYARD_B_S_frame_2219_jpg.rf.47babfbc553d2d1771556f2062a9aa05.jpg,720,1280,2,669,567,943,719 -PUZZLE_LIVINGROOM_S_H_frame_0381_jpg.rf.49e58dcf65fa2b2e61745c1951403078.jpg,720,1280,1,162,640,516,718 -JENGA_OFFICE_T_H_frame_2162_jpg.rf.4a154406d617fb6e8cc17547da97d15d.jpg,720,1280,2,729,680,836,719 -CHESS_LIVINGROOM_H_T_frame_2332_jpg.rf.4a3bf03bdf5d414152513751bc836670.jpg,720,1280,1,3,578,217,716 -CHESS_LIVINGROOM_H_T_frame_2332_jpg.rf.4a3bf03bdf5d414152513751bc836670.jpg,720,1280,2,658,345,1260,708 -CHESS_COURTYARD_B_T_frame_0413_jpg.rf.4aa13961f664ebf99b1169613c4abdb9.jpg,720,1280,2,729,563,986,718 -CHESS_LIVINGROOM_H_T_frame_1495_jpg.rf.4c0825cc946a7d1ad6e7c6def5142f36.jpg,720,1280,1,1,623,217,718 -CHESS_LIVINGROOM_H_T_frame_1495_jpg.rf.4c0825cc946a7d1ad6e7c6def5142f36.jpg,720,1280,2,357,322,853,566 -PUZZLE_LIVINGROOM_H_S_frame_1466_jpg.rf.4cbc2e4f5b11283c43961bf5de618b09.jpg,720,1280,1,9,555,366,715 -CHESS_COURTYARD_S_H_frame_2154_jpg.rf.4ce2e7be788c60a732a2fc32eeefeb8d.jpg,720,1280,2,587,489,1023,717 -CHESS_LIVINGROOM_T_H_frame_0299_jpg.rf.4d1425818b0acef1eaf23dbcd69eadf2.jpg,720,1280,1,1,250,169,583 -CHESS_LIVINGROOM_T_H_frame_0299_jpg.rf.4d1425818b0acef1eaf23dbcd69eadf2.jpg,720,1280,2,513,560,944,718 -JENGA_LIVINGROOM_T_S_frame_1883_jpg.rf.4e3e474db44fd62236184b18b5f8d9ed.jpg,720,1280,2,686,689,807,719 -CHESS_OFFICE_S_B_frame_1971_jpg.rf.4e4a288900d15ae12ba56c7888f7d2f4.jpg,720,1280,1,2,360,522,719 -PUZZLE_LIVINGROOM_H_S_frame_1386_jpg.rf.4ea8951b46c98365c6c9134312f7b234.jpg,720,1280,2,865,524,1099,712 -CARDS_COURTYARD_H_S_frame_2387_jpg.rf.502738412162b8f67c6cf824b953b3f7.jpg,720,1280,1,172,520,440,719 -CARDS_COURTYARD_H_S_frame_2387_jpg.rf.502738412162b8f67c6cf824b953b3f7.jpg,720,1280,2,517,313,881,583 -CARDS_OFFICE_T_H_frame_2116_jpg.rf.50858b10b623005f44152c94503576b6.jpg,720,1280,1,130,531,482,719 -CARDS_OFFICE_T_H_frame_2116_jpg.rf.50858b10b623005f44152c94503576b6.jpg,720,1280,2,588,344,993,662 -PUZZLE_COURTYARD_H_T_frame_1275_jpg.rf.5145c2d0d876b21b5da8e2e662b392ed.jpg,720,1280,1,5,477,234,713 -PUZZLE_COURTYARD_H_T_frame_1275_jpg.rf.5145c2d0d876b21b5da8e2e662b392ed.jpg,720,1280,2,914,536,1186,718 -PUZZLE_OFFICE_T_S_frame_2376_jpg.rf.51c19cfeeb9a3a1c8fa437eaf9e842e6.jpg,720,1280,1,211,367,454,612 -PUZZLE_OFFICE_T_S_frame_2376_jpg.rf.51c19cfeeb9a3a1c8fa437eaf9e842e6.jpg,720,1280,2,623,485,885,711 -PUZZLE_OFFICE_B_H_frame_2286_jpg.rf.5222348ee4cade1f9bccf335a8665ecc.jpg,720,1280,1,212,511,579,718 -PUZZLE_OFFICE_B_H_frame_2286_jpg.rf.5222348ee4cade1f9bccf335a8665ecc.jpg,720,1280,2,1053,523,1278,715 -PUZZLE_LIVINGROOM_S_H_frame_0537_jpg.rf.52f8e2f2c6cf34900d9e7b37429ebbf8.jpg,720,1280,1,1,572,266,710 -PUZZLE_LIVINGROOM_S_H_frame_0537_jpg.rf.52f8e2f2c6cf34900d9e7b37429ebbf8.jpg,720,1280,2,677,570,997,718 -CHESS_COURTYARD_T_B_frame_2397_jpg.rf.54983f8b3a1358f6e555c83dd76a57b9.jpg,720,1280,1,43,660,272,717 -CHESS_COURTYARD_T_B_frame_2397_jpg.rf.54983f8b3a1358f6e555c83dd76a57b9.jpg,720,1280,2,279,642,563,718 -CARDS_LIVINGROOM_H_S_frame_1606_jpg.rf.579044d03b7a54e5d064df249432c650.jpg,720,1280,1,285,666,375,719 -CARDS_LIVINGROOM_H_S_frame_1606_jpg.rf.579044d03b7a54e5d064df249432c650.jpg,720,1280,2,685,539,919,719 -CARDS_OFFICE_B_S_frame_1915_jpg.rf.5a1bf6500629a7737a815eaf5a39f985.jpg,720,1280,2,556,544,832,717 -CHESS_OFFICE_S_B_frame_0192_jpg.rf.5a219667ed6712b269876c219d1f4534.jpg,720,1280,1,1,541,463,719 -PUZZLE_OFFICE_S_T_frame_2183_jpg.rf.580fd99d83f997b87e16243fb027fb5b.jpg,720,1280,2,587,697,712,718 -PUZZLE_LIVINGROOM_S_H_frame_2352_jpg.rf.5ae5085435c9cce0347a3e766e937cf2.jpg,720,1280,1,5,464,518,718 -PUZZLE_LIVINGROOM_S_H_frame_2352_jpg.rf.5ae5085435c9cce0347a3e766e937cf2.jpg,720,1280,2,510,447,955,712 -JENGA_LIVINGROOM_S_T_frame_1103_jpg.rf.5c4a433431a850b7437df3e1e1b60cc6.jpg,720,1280,2,582,398,1020,718 -JENGA_OFFICE_B_S_frame_0585_jpg.rf.5cb3a4c6bdd2598b3875628de44f6665.jpg,720,1280,2,439,413,788,717 -JENGA_LIVINGROOM_B_H_frame_1588_jpg.rf.5cec79708acef6c36e81419a05359076.jpg,720,1280,1,192,441,542,716 -JENGA_LIVINGROOM_B_H_frame_1588_jpg.rf.5cec79708acef6c36e81419a05359076.jpg,720,1280,2,1006,570,1276,718 -PUZZLE_OFFICE_S_T_frame_2673_jpg.rf.5d27cc42b5a516de72e90087859cb5f5.jpg,720,1280,2,730,676,919,718 -CARDS_LIVINGROOM_H_S_frame_1627_jpg.rf.5d4fa1e1f4fbdc8b7da9a6e3f0472545.jpg,720,1280,1,283,626,390,718 -CARDS_LIVINGROOM_H_S_frame_1627_jpg.rf.5d4fa1e1f4fbdc8b7da9a6e3f0472545.jpg,720,1280,2,602,549,902,719 -PUZZLE_COURTYARD_S_B_frame_1660_jpg.rf.5de11ab511d8a9fa1f03367ddded8bb1.jpg,720,1280,2,783,652,1046,718 -CARDS_OFFICE_T_H_frame_0112_jpg.rf.5fa530fa8e9a8d3e9a6999d17142cc0f.jpg,720,1280,1,251,659,448,718 -CARDS_OFFICE_T_H_frame_0112_jpg.rf.5fa530fa8e9a8d3e9a6999d17142cc0f.jpg,720,1280,2,618,561,808,718 -CHESS_LIVINGROOM_S_B_frame_0728_jpg.rf.60663764e3286524ecc7fe20a88b6cba.jpg,720,1280,2,754,510,1062,716 -PUZZLE_OFFICE_B_H_frame_1858_jpg.rf.606e42ca2a448b812a9609563da01906.jpg,720,1280,1,187,674,423,716 -PUZZLE_OFFICE_B_H_frame_1858_jpg.rf.606e42ca2a448b812a9609563da01906.jpg,720,1280,2,774,698,895,717 -CARDS_LIVINGROOM_T_B_frame_0395_jpg.rf.60ce99cd641366a3dd7748d7467a7656.jpg,720,1280,1,1,523,387,719 -CARDS_LIVINGROOM_T_B_frame_0395_jpg.rf.60ce99cd641366a3dd7748d7467a7656.jpg,720,1280,2,589,552,827,717 -PUZZLE_LIVINGROOM_B_T_frame_1279_jpg.rf.621e4d65d69aa3eb00082d048bac5e33.jpg,720,1280,1,116,676,448,717 -PUZZLE_LIVINGROOM_B_T_frame_1279_jpg.rf.621e4d65d69aa3eb00082d048bac5e33.jpg,720,1280,2,546,591,1038,718 -PUZZLE_LIVINGROOM_T_B_frame_1110_jpg.rf.631ea6cddec52db215b9c892e7cd506f.jpg,720,1280,1,7,432,279,639 -PUZZLE_LIVINGROOM_T_B_frame_1110_jpg.rf.631ea6cddec52db215b9c892e7cd506f.jpg,720,1280,2,319,341,926,673 -CARDS_COURTYARD_H_S_frame_1341_jpg.rf.630370ffc09d1f77bc91eef84625b61c.jpg,720,1280,1,90,503,478,719 -CARDS_COURTYARD_H_S_frame_1341_jpg.rf.630370ffc09d1f77bc91eef84625b61c.jpg,720,1280,2,534,477,852,719 -JENGA_COURTYARD_T_S_frame_2068_jpg.rf.643a92d6eb5603f38e56be75f7ee58c0.jpg,720,1280,1,19,270,419,574 -JENGA_COURTYARD_T_S_frame_2068_jpg.rf.643a92d6eb5603f38e56be75f7ee58c0.jpg,720,1280,2,563,659,752,718 -CARDS_COURTYARD_H_S_frame_0853_jpg.rf.646db7522dca353c4b2ee09c82072e17.jpg,720,1280,2,682,609,854,719 -PUZZLE_LIVINGROOM_B_T_frame_1129_jpg.rf.651b8d74c9d74b3b37a221a60c5ac337.jpg,720,1280,1,3,487,228,681 -PUZZLE_LIVINGROOM_B_T_frame_1129_jpg.rf.651b8d74c9d74b3b37a221a60c5ac337.jpg,720,1280,2,269,581,694,719 -PUZZLE_OFFICE_B_H_frame_1015_jpg.rf.656d7834e7110baded120811f41729ca.jpg,720,1280,1,261,695,424,717 -PUZZLE_OFFICE_B_H_frame_1015_jpg.rf.656d7834e7110baded120811f41729ca.jpg,720,1280,2,588,680,816,719 -JENGA_COURTYARD_T_S_frame_0455_jpg.rf.662711391989ecbbe5b8e85dd1726620.jpg,720,1280,1,121,380,404,716 -JENGA_COURTYARD_T_S_frame_0455_jpg.rf.662711391989ecbbe5b8e85dd1726620.jpg,720,1280,2,530,311,783,614 -PUZZLE_OFFICE_T_S_frame_0540_jpg.rf.66fdb86f04f26741f5f044391f642e10.jpg,720,1280,1,19,296,533,619 -PUZZLE_OFFICE_T_S_frame_0540_jpg.rf.66fdb86f04f26741f5f044391f642e10.jpg,720,1280,2,495,353,924,708 -PUZZLE_OFFICE_T_S_frame_1072_jpg.rf.67992191a44f01f676db2af347459405.jpg,720,1280,1,1,453,147,704 -PUZZLE_OFFICE_T_S_frame_1072_jpg.rf.67992191a44f01f676db2af347459405.jpg,720,1280,2,776,423,1025,696 -PUZZLE_LIVINGROOM_S_H_frame_1406_jpg.rf.68513b9372665deb89adf7e39de806e8.jpg,720,1280,2,766,534,1167,718 -CARDS_OFFICE_B_S_frame_0084_jpg.rf.6856cc89a42db27b89694f3e0bcc257a.jpg,720,1280,2,740,675,803,718 -PUZZLE_OFFICE_T_S_frame_2194_jpg.rf.685a65f06c20dbb395cfc21563c4223e.jpg,720,1280,1,230,434,491,655 -PUZZLE_OFFICE_T_S_frame_2194_jpg.rf.685a65f06c20dbb395cfc21563c4223e.jpg,720,1280,2,592,431,771,651 -JENGA_COURTYARD_S_T_frame_2138_jpg.rf.687060989a7257b520cc53364694ea27.jpg,720,1280,1,6,284,437,585 -JENGA_COURTYARD_S_T_frame_2138_jpg.rf.687060989a7257b520cc53364694ea27.jpg,720,1280,2,540,584,893,718 -PUZZLE_OFFICE_T_S_frame_0082_jpg.rf.68bb70fa80e22986cadf4b14934cd359.jpg,720,1280,1,187,411,518,698 -PUZZLE_OFFICE_T_S_frame_0082_jpg.rf.68bb70fa80e22986cadf4b14934cd359.jpg,720,1280,2,550,540,847,714 -CARDS_OFFICE_T_H_frame_2393_jpg.rf.6986618878c3a197f8998fbdaf663a88.jpg,720,1280,1,243,702,281,719 -CARDS_OFFICE_T_H_frame_2393_jpg.rf.6986618878c3a197f8998fbdaf663a88.jpg,720,1280,2,554,598,798,719 -PUZZLE_OFFICE_B_H_frame_2145_jpg.rf.69d5ac6181891a8d35621b8629cf62df.jpg,720,1280,1,160,525,472,710 -PUZZLE_OFFICE_B_H_frame_2145_jpg.rf.69d5ac6181891a8d35621b8629cf62df.jpg,720,1280,2,818,702,904,715 -JENGA_OFFICE_T_H_frame_1682_jpg.rf.69fa2169685e62f2c917286affc0b2ee.jpg,720,1280,1,217,453,430,705 -JENGA_OFFICE_T_H_frame_1682_jpg.rf.69fa2169685e62f2c917286affc0b2ee.jpg,720,1280,2,686,520,910,716 -CARDS_OFFICE_H_T_frame_2653_jpg.rf.6b14bcbdbf793c4be613846ae84cba74.jpg,720,1280,2,753,413,1143,708 -CHESS_OFFICE_T_H_frame_0056_jpg.rf.6b9a06edfea66c85af4419ab7538206c.jpg,720,1280,1,150,460,455,639 -PUZZLE_OFFICE_T_S_frame_0542_jpg.rf.6bb3086f8f4f4ce2e6e2a9c1d7d90814.jpg,720,1280,1,70,266,515,614 -PUZZLE_OFFICE_T_S_frame_0542_jpg.rf.6bb3086f8f4f4ce2e6e2a9c1d7d90814.jpg,720,1280,2,482,361,872,710 -PUZZLE_COURTYARD_H_T_frame_1492_jpg.rf.6bfc01864603017e3f811ea5d37bda48.jpg,720,1280,1,167,614,342,718 -PUZZLE_COURTYARD_H_T_frame_1492_jpg.rf.6bfc01864603017e3f811ea5d37bda48.jpg,720,1280,2,907,592,1170,718 -CARDS_OFFICE_T_H_frame_1690_jpg.rf.6c53a07ddd705fc3f8d64cfb6db7cd61.jpg,720,1280,1,215,571,442,719 -CARDS_OFFICE_T_H_frame_1690_jpg.rf.6c53a07ddd705fc3f8d64cfb6db7cd61.jpg,720,1280,2,546,503,806,719 -CHESS_COURTYARD_S_H_frame_2248_jpg.rf.6d092b636101d8065c7dc0c96b7b19c0.jpg,720,1280,1,3,336,418,717 -CHESS_COURTYARD_S_H_frame_2248_jpg.rf.6d092b636101d8065c7dc0c96b7b19c0.jpg,720,1280,2,565,366,922,717 -CARDS_OFFICE_T_H_frame_0288_jpg.rf.6d6b30e4e633005582255476ed78db38.jpg,720,1280,1,213,643,425,719 -CARDS_OFFICE_T_H_frame_0288_jpg.rf.6d6b30e4e633005582255476ed78db38.jpg,720,1280,2,609,617,766,719 -CHESS_LIVINGROOM_H_T_frame_1595_jpg.rf.6e6e45ddba2a2feea3cb480622007393.jpg,720,1280,1,1,619,194,716 -CHESS_LIVINGROOM_H_T_frame_1595_jpg.rf.6e6e45ddba2a2feea3cb480622007393.jpg,720,1280,2,582,277,902,515 -CHESS_OFFICE_H_T_frame_2333_jpg.rf.6f4c577efa7a34dd7e24131683356b1d.jpg,720,1280,2,729,314,937,519 -JENGA_COURTYARD_B_H_frame_2465_jpg.rf.6f72161db9cd378f0a467010dd37a311.jpg,720,1280,1,340,683,454,719 -JENGA_COURTYARD_B_H_frame_2465_jpg.rf.6f72161db9cd378f0a467010dd37a311.jpg,720,1280,2,796,694,913,719 -CARDS_LIVINGROOM_B_T_frame_0342_jpg.rf.6f8920ac81491d437439802fca097c1d.jpg,720,1280,1,166,652,472,718 -CARDS_LIVINGROOM_B_T_frame_0342_jpg.rf.6f8920ac81491d437439802fca097c1d.jpg,720,1280,2,641,638,936,718 -JENGA_COURTYARD_T_S_frame_1284_jpg.rf.6fc5810463b79d3a8251623d78138ede.jpg,720,1280,1,20,376,312,716 -JENGA_COURTYARD_T_S_frame_1284_jpg.rf.6fc5810463b79d3a8251623d78138ede.jpg,720,1280,2,695,221,1071,654 -CHESS_COURTYARD_T_B_frame_1694_jpg.rf.6fd16bdfa0a34153a31b18eb47b31b3b.jpg,720,1280,1,11,656,269,717 -CHESS_COURTYARD_T_B_frame_1694_jpg.rf.6fd16bdfa0a34153a31b18eb47b31b3b.jpg,720,1280,2,307,667,544,718 -PUZZLE_COURTYARD_B_S_frame_2451_jpg.rf.6fd9a2f32e8bebc48e5e0ef4eaf52a97.jpg,720,1280,1,1,1,354,409 -CARDS_OFFICE_S_B_frame_2478_jpg.rf.70bbd05171cef822711bebe997923a23.jpg,720,1280,1,250,573,536,718 -CHESS_COURTYARD_T_B_frame_1030_jpg.rf.713586a1e38f4493e10b1ba1c9b4e6fc.jpg,720,1280,1,2,609,300,718 -CHESS_COURTYARD_T_B_frame_1030_jpg.rf.713586a1e38f4493e10b1ba1c9b4e6fc.jpg,720,1280,2,345,639,629,717 -JENGA_COURTYARD_S_T_frame_0813_jpg.rf.7177a7d15477bc6501c6296df6cc9ddb.jpg,720,1280,1,71,514,362,717 -JENGA_COURTYARD_S_T_frame_0813_jpg.rf.7177a7d15477bc6501c6296df6cc9ddb.jpg,720,1280,2,688,683,817,717 -CHESS_COURTYARD_T_B_frame_0907_jpg.rf.71c7adbb887f59dc6cab90f6ab205524.jpg,720,1280,1,126,370,423,582 -CHESS_COURTYARD_T_B_frame_0907_jpg.rf.71c7adbb887f59dc6cab90f6ab205524.jpg,720,1280,2,415,648,675,718 -JENGA_OFFICE_T_H_frame_2031_jpg.rf.71e5f4bb28822e1fb57c82fb20f0d72a.jpg,720,1280,1,314,629,464,719 -JENGA_OFFICE_T_H_frame_2031_jpg.rf.71e5f4bb28822e1fb57c82fb20f0d72a.jpg,720,1280,2,608,568,799,713 -PUZZLE_OFFICE_T_S_frame_2173_jpg.rf.72cebda5d5939ce647b469672211cefd.jpg,720,1280,1,67,523,396,715 -PUZZLE_OFFICE_T_S_frame_2173_jpg.rf.72cebda5d5939ce647b469672211cefd.jpg,720,1280,2,565,521,812,711 -CARDS_COURTYARD_S_H_frame_2165_jpg.rf.73fab304d0cc49a438dd0371b86627ac.jpg,720,1280,1,147,576,419,718 -CHESS_LIVINGROOM_T_H_frame_2107_jpg.rf.7417ca837c2270f8a2e5c5076027f0b3.jpg,720,1280,2,289,142,790,491 -CHESS_COURTYARD_H_S_frame_1832_jpg.rf.74e66bd22c1a30a5ebda33235042b9d6.jpg,720,1280,2,906,625,1089,714 -JENGA_COURTYARD_H_B_frame_2087_jpg.rf.7576a84981a5e9da805bae9ce987d77e.jpg,720,1280,2,522,614,804,716 -CHESS_OFFICE_B_S_frame_2006_jpg.rf.75eaaa63f96235dbc7a9e269705559a6.jpg,720,1280,2,560,465,883,662 -JENGA_COURTYARD_H_B_frame_2079_jpg.rf.75f58ef8c71c8e1cc4e3dfe41d5cb208.jpg,720,1280,1,264,549,567,718 -JENGA_COURTYARD_H_B_frame_2079_jpg.rf.75f58ef8c71c8e1cc4e3dfe41d5cb208.jpg,720,1280,2,482,466,828,718 -CARDS_LIVINGROOM_S_H_frame_0003_jpg.rf.765f6f58107059c4c1155a362ce86fb9.jpg,720,1280,1,334,606,440,718 -CARDS_LIVINGROOM_S_H_frame_0003_jpg.rf.765f6f58107059c4c1155a362ce86fb9.jpg,720,1280,2,656,648,855,718 -JENGA_LIVINGROOM_S_T_frame_2317_jpg.rf.7679e500699541a81b3fb146f20989fb.jpg,720,1280,2,219,489,609,718 -JENGA_OFFICE_T_H_frame_2169_jpg.rf.76cafb992ef3c886e66c795f667368a3.jpg,720,1280,2,720,699,813,719 -CARDS_LIVINGROOM_B_T_frame_0085_jpg.rf.76eb755977367d07a0edcd358ec07e8e.jpg,720,1280,2,654,661,836,718 -JENGA_COURTYARD_B_H_frame_1485_jpg.rf.788b7bb09b44e2df2a20fda3ea8d7cfd.jpg,720,1280,1,373,675,521,718 -JENGA_COURTYARD_B_H_frame_1485_jpg.rf.788b7bb09b44e2df2a20fda3ea8d7cfd.jpg,720,1280,2,797,346,1107,717 -CARDS_LIVINGROOM_S_H_frame_2615_jpg.rf.7985a2d7208ca10dc315059fc91ab4a6.jpg,720,1280,1,120,343,520,669 -CARDS_LIVINGROOM_S_H_frame_2615_jpg.rf.7985a2d7208ca10dc315059fc91ab4a6.jpg,720,1280,2,582,303,927,657 -CHESS_COURTYARD_B_T_frame_2406_jpg.rf.799247669e2a6d853f446c7e114df1c7.jpg,720,1280,2,961,698,1106,718 -CARDS_COURTYARD_H_S_frame_0849_jpg.rf.79c140ccf36d49c647ce5357261576e0.jpg,720,1280,1,422,693,520,719 -CARDS_COURTYARD_H_S_frame_0849_jpg.rf.79c140ccf36d49c647ce5357261576e0.jpg,720,1280,2,751,535,997,716 -CARDS_COURTYARD_H_S_frame_2650_jpg.rf.79e2b4e7546b8cc8ed5d26ed373b8304.jpg,720,1280,1,143,492,456,719 -CARDS_COURTYARD_H_S_frame_2650_jpg.rf.79e2b4e7546b8cc8ed5d26ed373b8304.jpg,720,1280,2,703,364,937,623 -JENGA_COURTYARD_B_H_frame_1429_jpg.rf.7a050c52cf1399cba7fe88f8aa96d260.jpg,720,1280,1,360,665,535,719 -JENGA_COURTYARD_B_H_frame_1429_jpg.rf.7a050c52cf1399cba7fe88f8aa96d260.jpg,720,1280,2,735,269,990,641 -JENGA_COURTYARD_T_S_frame_1724_jpg.rf.7a156f7517abc0eaccc1355c72a81fa5.jpg,720,1280,1,1,369,344,687 -JENGA_COURTYARD_T_S_frame_1724_jpg.rf.7a156f7517abc0eaccc1355c72a81fa5.jpg,720,1280,2,486,407,795,679 -JENGA_OFFICE_B_S_frame_1368_jpg.rf.7a85638a0618af4798518399f30e67a1.jpg,720,1280,1,119,197,290,528 -JENGA_OFFICE_B_S_frame_1368_jpg.rf.7a85638a0618af4798518399f30e67a1.jpg,720,1280,2,460,425,741,718 -PUZZLE_COURTYARD_B_S_frame_2126_jpg.rf.7aef3b24e0091fcae5566b961d84ab17.jpg,720,1280,1,259,517,522,719 -PUZZLE_COURTYARD_B_S_frame_2126_jpg.rf.7aef3b24e0091fcae5566b961d84ab17.jpg,720,1280,2,542,512,872,719 -CHESS_OFFICE_S_B_frame_1371_jpg.rf.7c7ac890be3c9b7c3a89e878601113b3.jpg,720,1280,2,708,674,878,719 -CHESS_OFFICE_S_B_frame_1371_jpg.rf.7c7ac890be3c9b7c3a89e878601113b3.jpg,720,1280,1,205,689,326,719 -CHESS_LIVINGROOM_S_B_frame_2668_jpg.rf.7d6d1c24e29a24c7116d25a547f071e8.jpg,720,1280,1,3,504,184,713 -CHESS_LIVINGROOM_B_S_frame_2491_jpg.rf.7db439813ba6584131027f1ef239c236.jpg,720,1280,2,733,573,968,718 -CHESS_OFFICE_H_T_frame_1043_jpg.rf.7dee3210df6482661c80d799e48f35ef.jpg,720,1280,2,915,639,1268,717 -PUZZLE_LIVINGROOM_B_T_frame_2190_jpg.rf.7e88a32277a02ab0daa726bffd7d4028.jpg,720,1280,1,6,620,392,718 -PUZZLE_LIVINGROOM_T_B_frame_0766_jpg.rf.7f6c56b3f271a6745f4c4c5a7d9beb7a.jpg,720,1280,1,6,506,320,712 -PUZZLE_LIVINGROOM_T_B_frame_0766_jpg.rf.7f6c56b3f271a6745f4c4c5a7d9beb7a.jpg,720,1280,2,514,549,989,714 -CHESS_OFFICE_T_H_frame_2641_jpg.rf.800c06910863e9fdbc94a63706fe8766.jpg,720,1280,1,156,650,354,718 -CHESS_OFFICE_T_H_frame_2641_jpg.rf.800c06910863e9fdbc94a63706fe8766.jpg,720,1280,2,365,667,548,718 -PUZZLE_OFFICE_H_B_frame_2427_jpg.rf.815bf286f7b4a534c0615a4a211873c4.jpg,720,1280,1,310,586,519,717 -PUZZLE_OFFICE_H_B_frame_2427_jpg.rf.815bf286f7b4a534c0615a4a211873c4.jpg,720,1280,2,591,528,779,693 -CHESS_OFFICE_B_S_frame_1887_jpg.rf.81c00c231ddfece9efcfe0c8d5822ecc.jpg,720,1280,1,348,679,426,717 -CHESS_OFFICE_T_H_frame_0163_jpg.rf.81e7a2f959150c246485bd3f437c781d.jpg,720,1280,2,618,337,906,590 -CARDS_COURTYARD_B_T_frame_1542_jpg.rf.825ae191eb726bd744140c2a1141ca43.jpg,720,1280,1,271,435,626,718 -CARDS_COURTYARD_B_T_frame_1542_jpg.rf.825ae191eb726bd744140c2a1141ca43.jpg,720,1280,2,581,424,951,681 -CHESS_COURTYARD_B_T_frame_1967_jpg.rf.82c9f9a2646aabc55dcc21fe04ace131.jpg,720,1280,2,853,344,1130,572 -PUZZLE_LIVINGROOM_T_B_frame_1922_jpg.rf.84911260608fcb91917e76ff53ebc9fa.jpg,720,1280,2,575,341,1265,716 -JENGA_LIVINGROOM_H_B_frame_0731_jpg.rf.85ebf88ccf33b4e26362930a49c8285b.jpg,720,1280,2,627,373,923,683 -CARDS_COURTYARD_T_B_frame_0334_jpg.rf.85fb869324df2e7ae3edf755d40f40c5.jpg,720,1280,1,158,482,494,716 -CARDS_COURTYARD_T_B_frame_0334_jpg.rf.85fb869324df2e7ae3edf755d40f40c5.jpg,720,1280,2,558,420,932,717 -PUZZLE_LIVINGROOM_T_B_frame_0334_jpg.rf.8607ee9f612410157464c2c58d8ee507.jpg,720,1280,1,2,548,345,718 -PUZZLE_LIVINGROOM_T_B_frame_0334_jpg.rf.8607ee9f612410157464c2c58d8ee507.jpg,720,1280,2,506,648,909,718 -CHESS_LIVINGROOM_T_H_frame_2643_jpg.rf.864c691500f2bff0c396d9885aa95e69.jpg,720,1280,2,542,386,980,718 -CHESS_OFFICE_T_H_frame_1942_jpg.rf.874603caf911d920ca559e72d70df0ce.jpg,720,1280,1,148,600,374,710 -CHESS_OFFICE_T_H_frame_1942_jpg.rf.874603caf911d920ca559e72d70df0ce.jpg,720,1280,2,321,621,584,718 -CARDS_OFFICE_B_S_frame_0781_jpg.rf.882921756fffc7f18a56aab4847a575e.jpg,720,1280,1,403,668,515,716 -CARDS_OFFICE_B_S_frame_0781_jpg.rf.882921756fffc7f18a56aab4847a575e.jpg,720,1280,2,688,683,736,718 -CARDS_LIVINGROOM_B_T_frame_2591_jpg.rf.88854484564f503888556affce0b22fe.jpg,720,1280,1,213,686,283,718 -CARDS_LIVINGROOM_B_T_frame_2591_jpg.rf.88854484564f503888556affce0b22fe.jpg,720,1280,2,546,589,864,718 -JENGA_LIVINGROOM_S_T_frame_2275_jpg.rf.8d317cdfb6a0abcfee102b376356bd3a.jpg,720,1280,1,304,676,488,718 -JENGA_LIVINGROOM_S_T_frame_2275_jpg.rf.8d317cdfb6a0abcfee102b376356bd3a.jpg,720,1280,2,726,655,965,718 -JENGA_COURTYARD_B_H_frame_2099_jpg.rf.8e6f93720a4c5747b5272a117aa77bf1.jpg,720,1280,2,657,85,1082,409 -JENGA_COURTYARD_B_H_frame_1831_jpg.rf.8f296302306b839dbc91394bd39832bb.jpg,720,1280,1,271,651,517,719 -JENGA_COURTYARD_B_H_frame_1831_jpg.rf.8f296302306b839dbc91394bd39832bb.jpg,720,1280,2,763,640,1060,719 -PUZZLE_COURTYARD_T_H_frame_1894_jpg.rf.8fcd742761f0e597b4698254e3cd38e4.jpg,720,1280,1,3,231,264,684 -PUZZLE_COURTYARD_T_H_frame_1894_jpg.rf.8fcd742761f0e597b4698254e3cd38e4.jpg,720,1280,2,569,305,1050,695 -JENGA_LIVINGROOM_T_S_frame_2285_jpg.rf.8ffabc33bc86f6eceeceebaecac41a8d.jpg,720,1280,1,166,708,253,719 -PUZZLE_COURTYARD_T_H_frame_1037_jpg.rf.901cae60ef6118e92232dbdf8f14a09e.jpg,720,1280,1,1,434,429,718 -PUZZLE_COURTYARD_T_H_frame_1037_jpg.rf.901cae60ef6118e92232dbdf8f14a09e.jpg,720,1280,2,410,260,857,568 -CHESS_OFFICE_T_H_frame_1397_jpg.rf.9097031dbd88aa6f9a9a3f2ed6e5eb38.jpg,720,1280,2,649,466,897,609 -CHESS_COURTYARD_T_B_frame_0408_jpg.rf.918374a7b916a91ef2fd4eee8c673e6b.jpg,720,1280,1,203,697,379,717 -JENGA_LIVINGROOM_H_B_frame_0393_jpg.rf.90f123afaab3525dcd1ff85333995cce.jpg,720,1280,2,543,226,833,548 -CARDS_LIVINGROOM_T_B_frame_1076_jpg.rf.91c165b35c340eedbaddf436e010e28d.jpg,720,1280,1,7,623,266,719 -CARDS_LIVINGROOM_T_B_frame_1076_jpg.rf.91c165b35c340eedbaddf436e010e28d.jpg,720,1280,2,444,506,897,719 -PUZZLE_OFFICE_B_H_frame_2035_jpg.rf.91cc145ac0035f93138cdcd50771104a.jpg,720,1280,1,8,505,73,555 -PUZZLE_OFFICE_B_H_frame_2035_jpg.rf.91cc145ac0035f93138cdcd50771104a.jpg,720,1280,2,464,424,899,710 -CHESS_OFFICE_S_B_frame_0839_jpg.rf.9292bd2b2ca27b78eb2869955894c64c.jpg,720,1280,2,689,303,1159,713 -CARDS_COURTYARD_B_T_frame_1362_jpg.rf.93556d4932c046c83302f83c7f49f448.jpg,720,1280,1,431,557,700,716 -CARDS_COURTYARD_B_T_frame_1362_jpg.rf.93556d4932c046c83302f83c7f49f448.jpg,720,1280,2,633,642,766,718 -CHESS_OFFICE_H_T_frame_0859_jpg.rf.9578b1fa851f627e0c45bb58ff4b73e4.jpg,720,1280,2,492,406,773,659 -PUZZLE_OFFICE_B_H_frame_2196_jpg.rf.9700265894a40055396e45d6a131af66.jpg,720,1280,1,60,695,243,717 -PUZZLE_OFFICE_B_H_frame_2196_jpg.rf.9700265894a40055396e45d6a131af66.jpg,720,1280,2,672,409,1095,626 -CHESS_OFFICE_S_B_frame_0534_jpg.rf.985f6bdf9205d15c6594ffb32ffe8302.jpg,720,1280,2,723,411,1126,719 -PUZZLE_OFFICE_H_B_frame_1079_jpg.rf.997fa4b6ac6abac1a919ad272b9ff913.jpg,720,1280,1,84,598,332,719 -PUZZLE_OFFICE_H_B_frame_1079_jpg.rf.997fa4b6ac6abac1a919ad272b9ff913.jpg,720,1280,2,733,594,991,717 -PUZZLE_LIVINGROOM_B_T_frame_0521_jpg.rf.99be72442b425b221cd9ec5b99e87472.jpg,720,1280,1,1,453,393,714 -PUZZLE_LIVINGROOM_B_T_frame_0521_jpg.rf.99be72442b425b221cd9ec5b99e87472.jpg,720,1280,2,575,452,999,717 -PUZZLE_COURTYARD_T_H_frame_1418_jpg.rf.99c66672fbde59ad3891d11735bb41df.jpg,720,1280,1,1,419,251,684 -PUZZLE_COURTYARD_T_H_frame_1418_jpg.rf.99c66672fbde59ad3891d11735bb41df.jpg,720,1280,2,472,311,1067,718 -JENGA_COURTYARD_T_S_frame_0971_jpg.rf.99cf9c8e1b982d47665ac27edb3ba5fe.jpg,720,1280,2,616,523,895,718 -CARDS_LIVINGROOM_H_S_frame_0801_jpg.rf.9a4006f6284a0cdbe6d3534700b5c3c7.jpg,720,1280,1,215,661,364,719 -CARDS_LIVINGROOM_H_S_frame_0801_jpg.rf.9a4006f6284a0cdbe6d3534700b5c3c7.jpg,720,1280,2,714,592,940,719 -CARDS_LIVINGROOM_T_B_frame_1454_jpg.rf.9aada94e3d295c4be844a115731adadf.jpg,720,1280,1,1,626,104,717 -CARDS_LIVINGROOM_T_B_frame_1454_jpg.rf.9aada94e3d295c4be844a115731adadf.jpg,720,1280,2,612,512,921,719 -CHESS_LIVINGROOM_S_B_frame_1416_jpg.rf.9c4847482cfd5f54209ad2dc6f52dbd8.jpg,720,1280,1,18,648,348,717 -JENGA_OFFICE_H_T_frame_2303_jpg.rf.9c50b38a2e461a16145cdeb6d0eb7e2a.jpg,720,1280,1,153,552,455,712 -JENGA_OFFICE_H_T_frame_2303_jpg.rf.9c50b38a2e461a16145cdeb6d0eb7e2a.jpg,720,1280,2,597,414,1016,704 -PUZZLE_COURTYARD_B_S_frame_1785_jpg.rf.9ca876c25995b4ccd9e3b2b2b14e93ff.jpg,720,1280,1,222,567,467,719 -PUZZLE_COURTYARD_B_S_frame_1785_jpg.rf.9ca876c25995b4ccd9e3b2b2b14e93ff.jpg,720,1280,2,543,448,805,672 -JENGA_OFFICE_T_H_frame_1313_jpg.rf.9dd2a18e89c76d5b0f6436dcfcbdd0dc.jpg,720,1280,1,233,445,434,718 -JENGA_OFFICE_T_H_frame_1313_jpg.rf.9dd2a18e89c76d5b0f6436dcfcbdd0dc.jpg,720,1280,2,514,467,635,714 -PUZZLE_OFFICE_H_B_frame_1977_jpg.rf.9e3544794c723690e23442d6645e9076.jpg,720,1280,1,305,564,596,712 -PUZZLE_OFFICE_H_B_frame_1977_jpg.rf.9e3544794c723690e23442d6645e9076.jpg,720,1280,2,626,539,889,717 -CARDS_COURTYARD_B_T_frame_0954_jpg.rf.9f8e0adcae4ae6f7b8f1f553e9e01fa0.jpg,720,1280,2,568,654,815,718 -CARDS_COURTYARD_H_S_frame_1284_jpg.rf.a02f71acd11263bdac37bd632fa4445f.jpg,720,1280,1,193,601,397,719 -CARDS_COURTYARD_H_S_frame_1284_jpg.rf.a02f71acd11263bdac37bd632fa4445f.jpg,720,1280,2,623,456,947,719 -JENGA_COURTYARD_H_B_frame_1617_jpg.rf.a03c5c979c507c7fb3976f337927b863.jpg,720,1280,2,660,282,959,716 -PUZZLE_COURTYARD_T_H_frame_0457_jpg.rf.a088c70eac5634df8b14ca65af7d0577.jpg,720,1280,2,601,585,864,718 -CHESS_OFFICE_T_H_frame_0860_jpg.rf.a1bd908c3ac9754f00ca0968a43825b1.jpg,720,1280,1,6,553,253,714 -CHESS_OFFICE_T_H_frame_0860_jpg.rf.a1bd908c3ac9754f00ca0968a43825b1.jpg,720,1280,2,493,652,712,718 -JENGA_COURTYARD_B_H_frame_2652_jpg.rf.a25d4401903d2f4a6f69513246036ba5.jpg,720,1280,2,678,110,1110,342 -JENGA_LIVINGROOM_T_S_frame_0584_jpg.rf.a338c1249e5ef540ad515332198a2725.jpg,720,1280,1,9,358,422,719 -CHESS_OFFICE_H_T_frame_2516_jpg.rf.a35e4d4b0fc43e53b7e922753f294c93.jpg,720,1280,2,970,701,1143,717 -CHESS_OFFICE_B_S_frame_1476_jpg.rf.a3d0dd976931c7b38e37b793aac744d5.jpg,720,1280,1,152,669,370,717 -CHESS_OFFICE_B_S_frame_1476_jpg.rf.a3d0dd976931c7b38e37b793aac744d5.jpg,720,1280,2,616,664,857,718 -JENGA_LIVINGROOM_H_B_frame_0249_jpg.rf.a540376f00a9721bffa1b0b0fe4e21b1.jpg,720,1280,2,575,379,902,709 -CHESS_LIVINGROOM_S_B_frame_0866_jpg.rf.a56948e057eb4237206f92bdf7b0f327.jpg,720,1280,2,522,450,1072,716 -PUZZLE_OFFICE_S_T_frame_0256_jpg.rf.a65cee4a255be09ab195a16bf0c5ef0a.jpg,720,1280,1,141,572,433,716 -PUZZLE_OFFICE_S_T_frame_0256_jpg.rf.a65cee4a255be09ab195a16bf0c5ef0a.jpg,720,1280,2,573,322,897,619 -CHESS_COURTYARD_H_S_frame_1639_jpg.rf.a98ba454a0eb0c627881ee944f73a29d.jpg,720,1280,2,873,383,1071,549 -CARDS_OFFICE_T_H_frame_0180_jpg.rf.aa3ff1942565b276e7d1ad2979b6ac3d.jpg,720,1280,1,226,681,279,719 -CARDS_OFFICE_T_H_frame_0180_jpg.rf.aa3ff1942565b276e7d1ad2979b6ac3d.jpg,720,1280,2,605,588,758,719 -CARDS_LIVINGROOM_B_T_frame_0374_jpg.rf.aa8cbb73eeff6fe9dfc5aa960bb3a9fd.jpg,720,1280,1,209,674,419,718 -CARDS_LIVINGROOM_B_T_frame_0374_jpg.rf.aa8cbb73eeff6fe9dfc5aa960bb3a9fd.jpg,720,1280,2,779,650,927,718 -CHESS_COURTYARD_T_B_frame_0148_jpg.rf.ab4ef312e1e4b03b2a04abe6a112528c.jpg,720,1280,2,477,431,717,627 -CARDS_LIVINGROOM_T_B_frame_0285_jpg.rf.ab7a62a07b96a61e364a9ef79a99c428.jpg,720,1280,1,4,631,137,719 -CARDS_LIVINGROOM_T_B_frame_0285_jpg.rf.ab7a62a07b96a61e364a9ef79a99c428.jpg,720,1280,2,538,628,774,719 -PUZZLE_LIVINGROOM_T_B_frame_2567_jpg.rf.ac1a95aa6ce74873aad9d40966b0ada3.jpg,720,1280,1,10,363,299,716 -PUZZLE_LIVINGROOM_T_B_frame_2567_jpg.rf.ac1a95aa6ce74873aad9d40966b0ada3.jpg,720,1280,2,804,371,1279,712 -CARDS_COURTYARD_B_T_frame_2362_jpg.rf.acb249cd761740b3c7ae04357af38630.jpg,720,1280,2,664,704,715,718 -JENGA_COURTYARD_S_T_frame_0198_jpg.rf.ad5771c26b25ee6c24511886dcaf4277.jpg,720,1280,1,118,429,460,716 -CARDS_LIVINGROOM_H_S_frame_1833_jpg.rf.adde10c24ca64a3a5bea9ba1ee8ef25f.jpg,720,1280,1,2,629,120,719 -CARDS_LIVINGROOM_H_S_frame_1833_jpg.rf.adde10c24ca64a3a5bea9ba1ee8ef25f.jpg,720,1280,2,845,410,1135,713 -CARDS_OFFICE_B_S_frame_0907_jpg.rf.ae34cbdaf8219903cab5674955f68518.jpg,720,1280,1,321,673,386,718 -CARDS_OFFICE_B_S_frame_0907_jpg.rf.ae34cbdaf8219903cab5674955f68518.jpg,720,1280,2,722,574,883,714 -CHESS_OFFICE_B_S_frame_1535_jpg.rf.af01089b687c6a951024c3623981cd54.jpg,720,1280,1,262,697,415,718 -CHESS_OFFICE_B_S_frame_1535_jpg.rf.af01089b687c6a951024c3623981cd54.jpg,720,1280,2,687,493,1186,716 -CHESS_LIVINGROOM_S_B_frame_0242_jpg.rf.af819b370e88d5b5be564b5c5156a33d.jpg,720,1280,2,812,508,1213,716 -PUZZLE_OFFICE_H_B_frame_0977_jpg.rf.b021a28d649906ac200dbbd70bedb524.jpg,720,1280,2,886,535,1154,718 -CARDS_LIVINGROOM_B_T_frame_0856_jpg.rf.b153fad1654b691c239d22b81ea46cad.jpg,720,1280,2,671,633,921,718 -JENGA_LIVINGROOM_B_H_frame_1185_jpg.rf.b194a6547850f888e5df7903557a29a0.jpg,720,1280,1,53,623,379,719 -JENGA_LIVINGROOM_B_H_frame_1185_jpg.rf.b194a6547850f888e5df7903557a29a0.jpg,720,1280,2,760,550,1021,718 -PUZZLE_LIVINGROOM_T_B_frame_2238_jpg.rf.b1c39de807e38559f48a3e10d1b04e0f.jpg,720,1280,1,1,420,370,718 -CHESS_LIVINGROOM_H_T_frame_0422_jpg.rf.b21f67c3d1a9a0493160873355be3668.jpg,720,1280,1,1,542,241,714 -CHESS_LIVINGROOM_H_T_frame_0422_jpg.rf.b21f67c3d1a9a0493160873355be3668.jpg,720,1280,2,1065,551,1279,718 -JENGA_LIVINGROOM_T_S_frame_0248_jpg.rf.b5c138faae1d1bebe6d4204daa21b821.jpg,720,1280,2,378,219,761,530 -CHESS_COURTYARD_H_S_frame_2584_jpg.rf.b5e11c95a0c0566f765e95cfcd808f56.jpg,720,1280,1,315,565,526,718 -CHESS_COURTYARD_H_S_frame_2584_jpg.rf.b5e11c95a0c0566f765e95cfcd808f56.jpg,720,1280,2,689,421,911,640 -JENGA_LIVINGROOM_S_T_frame_0470_jpg.rf.b6304a25cda2d6e8f35d66a1783a895d.jpg,720,1280,2,739,97,1099,563 -PUZZLE_COURTYARD_T_H_frame_1079_jpg.rf.b68457d8a2ad956d32ea768b89ea0a49.jpg,720,1280,1,1,457,323,718 -PUZZLE_COURTYARD_T_H_frame_1079_jpg.rf.b68457d8a2ad956d32ea768b89ea0a49.jpg,720,1280,2,525,260,842,536 -JENGA_OFFICE_B_S_frame_2081_jpg.rf.b8e842bc0159c63d2771ce9b0eebe785.jpg,720,1280,2,331,161,765,572 -CARDS_COURTYARD_T_B_frame_0805_jpg.rf.b9316a70db1030aa006156182df891de.jpg,720,1280,1,158,603,312,718 -CARDS_COURTYARD_T_B_frame_0805_jpg.rf.b9316a70db1030aa006156182df891de.jpg,720,1280,2,543,293,712,440 -PUZZLE_COURTYARD_T_H_frame_2277_jpg.rf.b954e0e0529008601d88d90e92871bcf.jpg,720,1280,1,84,623,455,718 -PUZZLE_COURTYARD_T_H_frame_2277_jpg.rf.b954e0e0529008601d88d90e92871bcf.jpg,720,1280,2,488,449,906,718 -CHESS_LIVINGROOM_H_T_frame_0210_jpg.rf.bacb03f487aa76896cd14be5a493dff7.jpg,720,1280,1,14,513,393,718 -CHESS_LIVINGROOM_H_T_frame_0210_jpg.rf.bacb03f487aa76896cd14be5a493dff7.jpg,720,1280,2,1109,608,1279,718 -PUZZLE_OFFICE_T_S_frame_0981_jpg.rf.bb291ac5aaa52997e94fadd6f85be383.jpg,720,1280,1,8,451,313,710 -JENGA_OFFICE_T_H_frame_1610_jpg.rf.bb9382d1f10e2fc0cdbe76ec18190390.jpg,720,1280,1,215,199,527,370 -JENGA_OFFICE_T_H_frame_1610_jpg.rf.bb9382d1f10e2fc0cdbe76ec18190390.jpg,720,1280,2,565,211,817,415 -JENGA_LIVINGROOM_H_B_frame_1768_jpg.rf.bbd394ede417cdf3da90264227647298.jpg,720,1280,1,57,461,287,701 -JENGA_LIVINGROOM_H_B_frame_1768_jpg.rf.bbd394ede417cdf3da90264227647298.jpg,720,1280,2,820,431,1100,716 -JENGA_LIVINGROOM_B_H_frame_0784_jpg.rf.bc0678281ac6f7e640f3f6e721f026b4.jpg,720,1280,1,61,666,326,718 -JENGA_LIVINGROOM_B_H_frame_0784_jpg.rf.bc0678281ac6f7e640f3f6e721f026b4.jpg,720,1280,2,840,540,1136,716 -CHESS_LIVINGROOM_T_H_frame_0192_jpg.rf.bf0d856ed6860f28cbb775ef1df3e68d.jpg,720,1280,2,351,537,934,719 -JENGA_LIVINGROOM_B_H_frame_0292_jpg.rf.bd8bf40855e94a3e3106e655ff7b2719.jpg,720,1280,1,77,639,377,717 -JENGA_LIVINGROOM_B_H_frame_0292_jpg.rf.bd8bf40855e94a3e3106e655ff7b2719.jpg,720,1280,2,842,589,1099,719 -PUZZLE_OFFICE_S_T_frame_1556_jpg.rf.c04ae6bb2cf2c934ba1eb074578e6f18.jpg,720,1280,1,1,564,284,718 -PUZZLE_OFFICE_S_T_frame_1556_jpg.rf.c04ae6bb2cf2c934ba1eb074578e6f18.jpg,720,1280,2,602,634,847,718 -PUZZLE_COURTYARD_T_H_frame_2610_jpg.rf.c07210ce302e1c80d51a1adef617f9db.jpg,720,1280,1,3,519,75,610 -PUZZLE_COURTYARD_T_H_frame_2610_jpg.rf.c07210ce302e1c80d51a1adef617f9db.jpg,720,1280,2,308,606,618,718 -PUZZLE_LIVINGROOM_T_B_frame_2188_jpg.rf.c111467cfe4bb9f2ebe54879621dbf3f.jpg,720,1280,2,577,288,1070,714 -PUZZLE_COURTYARD_T_H_frame_0049_jpg.rf.c2861719ed28874f7618a5e37b3727ba.jpg,720,1280,2,639,443,972,684 -CARDS_COURTYARD_H_S_frame_1523_jpg.rf.c31364c6bc5611f3f7958fab9d686a6d.jpg,720,1280,1,247,615,502,719 -CARDS_COURTYARD_H_S_frame_1523_jpg.rf.c31364c6bc5611f3f7958fab9d686a6d.jpg,720,1280,2,646,438,961,719 -JENGA_LIVINGROOM_B_H_frame_1647_jpg.rf.c32cc2594825bd207fca1c5e5404a424.jpg,720,1280,2,873,151,1274,408 -JENGA_LIVINGROOM_T_S_frame_1280_jpg.rf.c3604b3474cd5eb9604463042d7440c3.jpg,720,1280,1,78,511,420,717 -JENGA_LIVINGROOM_T_S_frame_1280_jpg.rf.c3604b3474cd5eb9604463042d7440c3.jpg,720,1280,2,584,475,925,717 -JENGA_COURTYARD_H_B_frame_1812_jpg.rf.c487c87d843bc9cef3d4692abd0afd67.jpg,720,1280,1,92,487,336,716 -JENGA_COURTYARD_H_B_frame_1812_jpg.rf.c487c87d843bc9cef3d4692abd0afd67.jpg,720,1280,2,914,619,1152,718 -JENGA_OFFICE_H_T_frame_0613_jpg.rf.c4959464da72ec7ba8853732fa486974.jpg,720,1280,1,357,597,585,713 -JENGA_OFFICE_H_T_frame_0613_jpg.rf.c4959464da72ec7ba8853732fa486974.jpg,720,1280,2,543,233,731,441 -JENGA_OFFICE_S_B_frame_1005_jpg.rf.c4f3e78b682a0ca5e7d7328e5f7caaeb.jpg,720,1280,1,227,635,484,719 -JENGA_OFFICE_S_B_frame_1005_jpg.rf.c4f3e78b682a0ca5e7d7328e5f7caaeb.jpg,720,1280,2,889,612,1110,716 -CHESS_LIVINGROOM_H_T_frame_2117_jpg.rf.c52366a6ca622d226ef0b500a904a05d.jpg,720,1280,1,1,557,232,718 -CHESS_LIVINGROOM_H_T_frame_2117_jpg.rf.c52366a6ca622d226ef0b500a904a05d.jpg,720,1280,2,1029,294,1279,621 -JENGA_LIVINGROOM_B_H_frame_0231_jpg.rf.c54cdc1eca166f2289057b6525ca5ff8.jpg,720,1280,1,42,636,344,718 -JENGA_LIVINGROOM_B_H_frame_0231_jpg.rf.c54cdc1eca166f2289057b6525ca5ff8.jpg,720,1280,2,843,569,1097,716 -JENGA_LIVINGROOM_T_S_frame_0161_jpg.rf.c55b2f713a42488794894c799850fd59.jpg,720,1280,1,141,350,385,706 -JENGA_LIVINGROOM_T_S_frame_0161_jpg.rf.c55b2f713a42488794894c799850fd59.jpg,720,1280,2,569,351,930,688 -CARDS_COURTYARD_S_H_frame_1352_jpg.rf.c691c32dce53f5aa3c3b0a03fea38b3d.jpg,720,1280,1,24,500,342,718 -CARDS_COURTYARD_S_H_frame_2292_jpg.rf.c6bf1f2856424f374638bd37abbeca6f.jpg,720,1280,1,194,553,520,718 -CARDS_COURTYARD_S_H_frame_2292_jpg.rf.c6bf1f2856424f374638bd37abbeca6f.jpg,720,1280,2,556,580,840,716 -CHESS_OFFICE_T_H_frame_1660_jpg.rf.c72a7fa067328543b8de299a09a24406.jpg,720,1280,1,51,307,408,514 -CHESS_OFFICE_T_H_frame_1660_jpg.rf.c72a7fa067328543b8de299a09a24406.jpg,720,1280,2,498,622,757,717 -PUZZLE_LIVINGROOM_B_T_frame_0593_jpg.rf.c8216a8fca17700b87fb7634c7781c85.jpg,720,1280,1,236,433,601,681 -PUZZLE_LIVINGROOM_B_T_frame_0593_jpg.rf.c8216a8fca17700b87fb7634c7781c85.jpg,720,1280,2,597,436,979,687 -CHESS_OFFICE_H_T_frame_1880_jpg.rf.c9007b9aecf7917e19a7339a1764cd41.jpg,720,1280,2,844,587,1135,719 -CARDS_OFFICE_T_H_frame_2161_jpg.rf.c9cdf8ef9de31c074fcd2e64cf7681c5.jpg,720,1280,1,198,607,325,719 -CARDS_OFFICE_T_H_frame_2161_jpg.rf.c9cdf8ef9de31c074fcd2e64cf7681c5.jpg,720,1280,2,681,312,821,516 -JENGA_COURTYARD_H_B_frame_2067_jpg.rf.ca771920b295304be81868e20cc4d19c.jpg,720,1280,1,188,546,463,716 -JENGA_COURTYARD_H_B_frame_2067_jpg.rf.ca771920b295304be81868e20cc4d19c.jpg,720,1280,2,635,525,876,718 -PUZZLE_COURTYARD_S_B_frame_2432_jpg.rf.caf618ee13c180a3c963db37bab95ce1.jpg,720,1280,2,543,515,841,718 -CHESS_COURTYARD_H_S_frame_0956_jpg.rf.ca848db61d3e6a08859228f03c88c953.jpg,720,1280,2,349,417,514,593 -CHESS_COURTYARD_H_S_frame_2036_jpg.rf.cb071ce69ebb3344d18ccf4b7db9396e.jpg,720,1280,2,608,411,828,577 -PUZZLE_OFFICE_H_B_frame_1438_jpg.rf.cb20bceaab421d1b72662502e74c0af7.jpg,720,1280,1,373,689,607,719 -PUZZLE_OFFICE_H_B_frame_1438_jpg.rf.cb20bceaab421d1b72662502e74c0af7.jpg,720,1280,2,671,583,898,719 -JENGA_LIVINGROOM_H_B_frame_1756_jpg.rf.cb24410ff8a1d7b7e1a653fdf2677f51.jpg,720,1280,1,191,454,437,692 -JENGA_LIVINGROOM_H_B_frame_1756_jpg.rf.cb24410ff8a1d7b7e1a653fdf2677f51.jpg,720,1280,2,699,388,936,714 -CHESS_COURTYARD_S_H_frame_2551_jpg.rf.cb2bb70cacc5b73a6638998513ec1bc0.jpg,720,1280,1,148,687,275,718 -CHESS_COURTYARD_T_B_frame_2546_jpg.rf.cb8c1c38d39943a05e6f3f437f31b2bb.jpg,720,1280,1,11,644,254,718 -CHESS_COURTYARD_T_B_frame_2546_jpg.rf.cb8c1c38d39943a05e6f3f437f31b2bb.jpg,720,1280,2,572,295,926,514 -PUZZLE_OFFICE_T_S_frame_1628_jpg.rf.cbc86260b560a6d6c815be10f5dfc89d.jpg,720,1280,1,11,481,433,715 -PUZZLE_OFFICE_T_S_frame_1628_jpg.rf.cbc86260b560a6d6c815be10f5dfc89d.jpg,720,1280,2,592,370,915,663 -PUZZLE_OFFICE_B_H_frame_0811_jpg.rf.cbe15b3cc9c2fc80e1b6a3da2873bccd.jpg,720,1280,1,134,452,495,708 -PUZZLE_OFFICE_B_H_frame_0811_jpg.rf.cbe15b3cc9c2fc80e1b6a3da2873bccd.jpg,720,1280,2,690,466,1249,714 -CARDS_LIVINGROOM_H_S_frame_1322_jpg.rf.cd62355d72630e6ab6618f08f8efbeb9.jpg,720,1280,1,9,662,286,718 -CARDS_LIVINGROOM_H_S_frame_1322_jpg.rf.cd62355d72630e6ab6618f08f8efbeb9.jpg,720,1280,2,752,580,989,716 -PUZZLE_COURTYARD_H_T_frame_1497_jpg.rf.d07ca08f06ddc3958813fb61eb121165.jpg,720,1280,1,183,596,400,718 -PUZZLE_COURTYARD_H_T_frame_1497_jpg.rf.d07ca08f06ddc3958813fb61eb121165.jpg,720,1280,2,967,569,1279,718 -JENGA_LIVINGROOM_B_H_frame_1013_jpg.rf.cf4c6a4a5aa641f6d102a82e55a7e565.jpg,720,1280,1,245,268,569,601 -JENGA_LIVINGROOM_B_H_frame_1013_jpg.rf.cf4c6a4a5aa641f6d102a82e55a7e565.jpg,720,1280,2,762,306,1144,717 -CARDS_OFFICE_S_B_frame_2145_jpg.rf.d0dc79176e2ddb46a03c49fd726782bd.jpg,720,1280,1,350,601,583,717 -CARDS_OFFICE_S_B_frame_2145_jpg.rf.d0dc79176e2ddb46a03c49fd726782bd.jpg,720,1280,2,606,638,795,717 -CHESS_OFFICE_H_T_frame_0693_jpg.rf.d117590c3abbfbd19175e7f95b826177.jpg,720,1280,2,781,429,991,616 -CHESS_LIVINGROOM_H_T_frame_2059_jpg.rf.d188fc8aea6dabfd80e9f6b30e4a1121.jpg,720,1280,1,1,542,260,710 -CHESS_LIVINGROOM_H_T_frame_2059_jpg.rf.d188fc8aea6dabfd80e9f6b30e4a1121.jpg,720,1280,2,794,72,1239,335 -JENGA_OFFICE_T_H_frame_0612_jpg.rf.d1dfdc89e893c4407ccdc9b2ca4dc693.jpg,720,1280,1,319,680,427,719 -JENGA_OFFICE_T_H_frame_0612_jpg.rf.d1dfdc89e893c4407ccdc9b2ca4dc693.jpg,720,1280,2,475,708,589,719 -PUZZLE_LIVINGROOM_T_B_frame_2104_jpg.rf.d20d8ca621c957416aac1ddec88df7d9.jpg,720,1280,2,755,454,1278,718 -PUZZLE_COURTYARD_H_T_frame_2275_jpg.rf.d2b1126db464d212fe86411ce75008ab.jpg,720,1280,1,180,622,402,717 -PUZZLE_COURTYARD_H_T_frame_2275_jpg.rf.d2b1126db464d212fe86411ce75008ab.jpg,720,1280,2,720,512,994,706 -PUZZLE_LIVINGROOM_S_H_frame_0646_jpg.rf.d2d21e1b3bb8b80759bd4934b4b284fc.jpg,720,1280,2,563,470,914,718 -JENGA_LIVINGROOM_T_S_frame_2244_jpg.rf.d4cfa027536fd765c276cfa52818d68f.jpg,720,1280,2,810,300,1108,667 -PUZZLE_COURTYARD_B_S_frame_1118_jpg.rf.d60577127c91eec0bf3851a48a5de2d6.jpg,720,1280,1,371,670,547,719 -PUZZLE_COURTYARD_B_S_frame_1118_jpg.rf.d60577127c91eec0bf3851a48a5de2d6.jpg,720,1280,2,493,416,795,656 -CARDS_COURTYARD_T_B_frame_1913_jpg.rf.d51236260ffba582cd18b200821042ad.jpg,720,1280,1,135,654,241,718 -CARDS_COURTYARD_T_B_frame_1913_jpg.rf.d51236260ffba582cd18b200821042ad.jpg,720,1280,2,635,478,876,709 -PUZZLE_COURTYARD_S_B_frame_1694_jpg.rf.d69b1f425ca6e16c6c75ea31e7a46f85.jpg,720,1280,2,601,561,893,717 -PUZZLE_LIVINGROOM_T_B_frame_1582_jpg.rf.d77595ea49e69565249e4ecd2182607d.jpg,720,1280,1,1,541,377,718 -PUZZLE_LIVINGROOM_T_B_frame_1582_jpg.rf.d77595ea49e69565249e4ecd2182607d.jpg,720,1280,2,638,346,1279,717 -CARDS_OFFICE_S_B_frame_1821_jpg.rf.d86d8051ef06e048bb670d5338639de7.jpg,720,1280,1,282,580,527,716 -JENGA_COURTYARD_H_B_frame_2143_jpg.rf.d9b7f2aebd257f40b276454ac95c483f.jpg,720,1280,1,215,53,584,299 -JENGA_COURTYARD_H_B_frame_2143_jpg.rf.d9b7f2aebd257f40b276454ac95c483f.jpg,720,1280,2,535,15,989,237 -CARDS_LIVINGROOM_T_B_frame_0171_jpg.rf.da0bb0ad1bd0b03e77e3e7b997787909.jpg,720,1280,1,1,543,398,719 -CARDS_LIVINGROOM_T_B_frame_0171_jpg.rf.da0bb0ad1bd0b03e77e3e7b997787909.jpg,720,1280,2,588,515,944,719 -PUZZLE_COURTYARD_H_T_frame_2169_jpg.rf.dad43dc287b11a57686b418df2a73d66.jpg,720,1280,1,156,424,484,667 -PUZZLE_COURTYARD_H_T_frame_2169_jpg.rf.dad43dc287b11a57686b418df2a73d66.jpg,720,1280,2,744,387,960,696 -JENGA_LIVINGROOM_S_T_frame_0880_jpg.rf.db3d403a4e87e6f1c2b15a8918ec5373.jpg,720,1280,1,1,479,408,718 -JENGA_LIVINGROOM_S_T_frame_0880_jpg.rf.db3d403a4e87e6f1c2b15a8918ec5373.jpg,720,1280,2,535,250,908,585 -JENGA_OFFICE_H_T_frame_1318_jpg.rf.db4491abec88d30dae615da59c9f8fe2.jpg,720,1280,1,206,653,337,719 -PUZZLE_COURTYARD_T_H_frame_0878_jpg.rf.dc002c22920e5bbbdcacd12e92db0e9d.jpg,720,1280,2,478,426,914,718 -PUZZLE_COURTYARD_T_H_frame_0878_jpg.rf.dc002c22920e5bbbdcacd12e92db0e9d.jpg,720,1280,1,1,523,446,718 -PUZZLE_COURTYARD_H_T_frame_0430_jpg.rf.dc741eda9597d65dab3eafc6be64d141.jpg,720,1280,1,338,700,418,718 -PUZZLE_COURTYARD_H_T_frame_0430_jpg.rf.dc741eda9597d65dab3eafc6be64d141.jpg,720,1280,2,741,693,868,717 -CHESS_OFFICE_T_H_frame_1563_jpg.rf.dd998a9224335f71c3aa7091fb733c18.jpg,720,1280,1,109,548,385,714 -CHESS_OFFICE_T_H_frame_1563_jpg.rf.dd998a9224335f71c3aa7091fb733c18.jpg,720,1280,2,489,540,791,716 -JENGA_OFFICE_H_T_frame_0661_jpg.rf.de2239866d1d1439e0f8b7697eff2dd4.jpg,720,1280,2,650,49,991,411 -JENGA_LIVINGROOM_T_S_frame_1273_jpg.rf.de4b947a1a00821299a252dec321fa7d.jpg,720,1280,1,79,513,417,719 -JENGA_LIVINGROOM_T_S_frame_1273_jpg.rf.de4b947a1a00821299a252dec321fa7d.jpg,720,1280,2,579,474,943,715 -PUZZLE_OFFICE_T_S_frame_0378_jpg.rf.e00dfe65fee5bd98fde884ac1083e597.jpg,720,1280,1,11,463,417,711 -PUZZLE_OFFICE_T_S_frame_0378_jpg.rf.e00dfe65fee5bd98fde884ac1083e597.jpg,720,1280,2,675,363,1042,704 -CHESS_LIVINGROOM_T_H_frame_0491_jpg.rf.e0dada95f856c3f1c8c1831745f49899.jpg,720,1280,1,1,398,83,623 -CHESS_LIVINGROOM_T_H_frame_0491_jpg.rf.e0dada95f856c3f1c8c1831745f49899.jpg,720,1280,2,421,656,749,719 -PUZZLE_OFFICE_S_T_frame_2553_jpg.rf.e0cb30873f58e9a7f8b63160aad1affc.jpg,720,1280,1,282,639,521,718 -PUZZLE_OFFICE_S_T_frame_2553_jpg.rf.e0cb30873f58e9a7f8b63160aad1affc.jpg,720,1280,2,649,654,886,718 -PUZZLE_OFFICE_T_S_frame_1172_jpg.rf.e16a3a338ff7a670153270f1f2611ee9.jpg,720,1280,1,9,598,373,717 -PUZZLE_OFFICE_T_S_frame_1172_jpg.rf.e16a3a338ff7a670153270f1f2611ee9.jpg,720,1280,2,474,535,784,719 -JENGA_LIVINGROOM_S_T_frame_1508_jpg.rf.e20371ca6197d2c6a90ae421cc566860.jpg,720,1280,1,221,405,675,718 -CARDS_COURTYARD_S_H_frame_0146_jpg.rf.e2868ff71cd60188108a05128c23504f.jpg,720,1280,1,359,699,416,718 -CARDS_LIVINGROOM_T_B_frame_2303_jpg.rf.e3a455fb59a0be4ff4a90ad08d9d2480.jpg,720,1280,1,60,623,221,719 -CARDS_LIVINGROOM_T_B_frame_2303_jpg.rf.e3a455fb59a0be4ff4a90ad08d9d2480.jpg,720,1280,2,318,300,856,655 -JENGA_COURTYARD_H_B_frame_0386_jpg.rf.e4202358686a69b4de393ac67f88991f.jpg,720,1280,2,847,464,1099,718 -PUZZLE_OFFICE_T_S_frame_0732_jpg.rf.e43a148efaef36cc61372bd0b95690a8.jpg,720,1280,1,167,351,454,550 -PUZZLE_OFFICE_T_S_frame_0732_jpg.rf.e43a148efaef36cc61372bd0b95690a8.jpg,720,1280,2,620,398,906,671 -CARDS_LIVINGROOM_T_B_frame_1446_jpg.rf.e5b412cd42b3a8983da9b818d6af1df0.jpg,720,1280,1,4,637,362,719 -CARDS_LIVINGROOM_T_B_frame_1446_jpg.rf.e5b412cd42b3a8983da9b818d6af1df0.jpg,720,1280,2,638,597,915,719 -JENGA_OFFICE_S_B_frame_1795_jpg.rf.e77f58dea3301b833f14ecbde57e19e4.jpg,720,1280,1,141,327,454,681 -JENGA_OFFICE_S_B_frame_1795_jpg.rf.e77f58dea3301b833f14ecbde57e19e4.jpg,720,1280,2,823,241,1160,644 -PUZZLE_COURTYARD_S_B_frame_1927_jpg.rf.e7bf23337da7d4f415c4a0d388ac0a02.jpg,720,1280,1,226,574,526,718 -PUZZLE_COURTYARD_S_B_frame_1927_jpg.rf.e7bf23337da7d4f415c4a0d388ac0a02.jpg,720,1280,2,680,619,992,718 -PUZZLE_COURTYARD_S_B_frame_1490_jpg.rf.e8e413c33214d705b955379ebe973cf7.jpg,720,1280,1,207,664,465,718 -PUZZLE_COURTYARD_S_B_frame_1490_jpg.rf.e8e413c33214d705b955379ebe973cf7.jpg,720,1280,2,585,644,836,717 -CHESS_LIVINGROOM_T_H_frame_1984_jpg.rf.e92262992e59fd8b23b18b50ce394f9c.jpg,720,1280,1,3,353,44,551 -CHESS_LIVINGROOM_T_H_frame_1984_jpg.rf.e92262992e59fd8b23b18b50ce394f9c.jpg,720,1280,2,638,310,1076,617 -CHESS_COURTYARD_H_S_frame_2629_jpg.rf.e9921f1b6483ccd194ade815598613c1.jpg,720,1280,1,320,648,547,718 -CHESS_COURTYARD_H_S_frame_2629_jpg.rf.e9921f1b6483ccd194ade815598613c1.jpg,720,1280,2,717,483,955,717 -CHESS_LIVINGROOM_H_T_frame_2119_jpg.rf.ea023dda47cc5cc512d62b6a9e8e5eba.jpg,720,1280,1,1,555,232,716 -CHESS_LIVINGROOM_H_T_frame_2119_jpg.rf.ea023dda47cc5cc512d62b6a9e8e5eba.jpg,720,1280,2,1023,303,1279,621 -PUZZLE_LIVINGROOM_H_S_frame_1162_jpg.rf.ea160f82b824053c9c1e3e216a64a790.jpg,720,1280,2,691,684,831,716 -CHESS_COURTYARD_B_T_frame_1475_jpg.rf.ea21aa83b02b4c869f41e3fd41d0eb82.jpg,720,1280,2,758,504,1116,718 -PUZZLE_COURTYARD_H_T_frame_1619_jpg.rf.ea5cadd7c20c9c44255f50ef964bbbf1.jpg,720,1280,1,1,510,342,714 -PUZZLE_COURTYARD_H_T_frame_1619_jpg.rf.ea5cadd7c20c9c44255f50ef964bbbf1.jpg,720,1280,2,528,506,795,716 -CARDS_LIVINGROOM_S_H_frame_1238_jpg.rf.eb7b34a76395077a0e0cfb39cd576813.jpg,720,1280,2,361,398,743,716 -CARDS_LIVINGROOM_S_H_frame_1238_jpg.rf.eb7b34a76395077a0e0cfb39cd576813.jpg,720,1280,1,1,426,330,708 -PUZZLE_OFFICE_T_S_frame_0987_jpg.rf.ec6102813cc03d6f480c894ac1904733.jpg,720,1280,1,6,432,298,698 -PUZZLE_OFFICE_T_S_frame_0987_jpg.rf.ec6102813cc03d6f480c894ac1904733.jpg,720,1280,2,811,672,1143,714 -CHESS_COURTYARD_T_B_frame_1132_jpg.rf.edbad11d3a63867c9aa358c2651cd85f.jpg,720,1280,1,90,704,276,718 -CHESS_LIVINGROOM_T_H_frame_2429_jpg.rf.edeced7db2285a497430d7112753645b.jpg,720,1280,1,5,317,62,530 -CHESS_LIVINGROOM_T_H_frame_2429_jpg.rf.edeced7db2285a497430d7112753645b.jpg,720,1280,2,678,381,1142,719 -CARDS_LIVINGROOM_S_H_frame_0921_jpg.rf.ee54e63def886d0ae318bb76ece4a4ac.jpg,720,1280,1,211,676,327,718 -CARDS_LIVINGROOM_S_H_frame_0921_jpg.rf.ee54e63def886d0ae318bb76ece4a4ac.jpg,720,1280,2,609,676,700,718 -CARDS_LIVINGROOM_B_T_frame_1835_jpg.rf.ee67c3babf4658b06df0801a90026317.jpg,720,1280,2,694,449,991,718 -CHESS_LIVINGROOM_H_T_frame_1594_jpg.rf.f0cd47c3a32b7fcdc19d8f8f495df4b9.jpg,720,1280,1,1,616,196,712 -CHESS_LIVINGROOM_H_T_frame_1594_jpg.rf.f0cd47c3a32b7fcdc19d8f8f495df4b9.jpg,720,1280,2,584,269,887,504 -CARDS_COURTYARD_S_H_frame_1340_jpg.rf.f20ce240be2aa0c5edadeec3fc7e1d6b.jpg,720,1280,1,26,500,395,718 -JENGA_LIVINGROOM_B_H_frame_1659_jpg.rf.f26166897e54d919247f83420f5c7723.jpg,720,1280,2,910,198,1274,417 -JENGA_OFFICE_H_T_frame_0260_jpg.rf.f3e9d81ae03d564d92a2316601ea1de6.jpg,720,1280,2,658,667,827,718 -PUZZLE_COURTYARD_B_S_frame_1368_jpg.rf.f3ea32f515c949d1614aeddd70d567d3.jpg,720,1280,1,191,583,493,719 -PUZZLE_COURTYARD_B_S_frame_1368_jpg.rf.f3ea32f515c949d1614aeddd70d567d3.jpg,720,1280,2,719,400,1055,645 -CARDS_COURTYARD_H_S_frame_1880_jpg.rf.f4ff5b5aba714c61be7f0b1eabf02ab7.jpg,720,1280,1,204,545,483,719 -CARDS_COURTYARD_H_S_frame_1880_jpg.rf.f4ff5b5aba714c61be7f0b1eabf02ab7.jpg,720,1280,2,624,292,1054,549 -CARDS_COURTYARD_S_H_frame_1689_jpg.rf.f5c0de44a63cffc30839f8419f839f47.jpg,720,1280,1,274,642,522,718 -CARDS_COURTYARD_S_H_frame_1689_jpg.rf.f5c0de44a63cffc30839f8419f839f47.jpg,720,1280,2,554,672,766,718 -PUZZLE_OFFICE_H_B_frame_1820_jpg.rf.f5e46eea669cc6b9d5a22e594163a802.jpg,720,1280,1,338,652,484,715 -PUZZLE_OFFICE_H_B_frame_1820_jpg.rf.f5e46eea669cc6b9d5a22e594163a802.jpg,720,1280,2,722,490,938,706 -CARDS_COURTYARD_H_S_frame_1376_jpg.rf.f62e82fa6fdd8ef2f5725ecf52a54353.jpg,720,1280,1,101,538,460,719 -CARDS_COURTYARD_H_S_frame_1376_jpg.rf.f62e82fa6fdd8ef2f5725ecf52a54353.jpg,720,1280,2,552,474,849,719 -PUZZLE_COURTYARD_H_T_frame_1480_jpg.rf.f74de3bb84280574be6b1a87dc16b802.jpg,720,1280,1,156,676,366,717 -PUZZLE_COURTYARD_H_T_frame_1480_jpg.rf.f74de3bb84280574be6b1a87dc16b802.jpg,720,1280,2,880,543,1190,718 -JENGA_COURTYARD_S_T_frame_1758_jpg.rf.f7793b1231d327f13601ebb682efeced.jpg,720,1280,1,137,487,546,718 -JENGA_COURTYARD_S_T_frame_1758_jpg.rf.f7793b1231d327f13601ebb682efeced.jpg,720,1280,2,604,494,1033,716 -CARDS_OFFICE_H_T_frame_1489_jpg.rf.f81da8c043de43f0aa7c5847ab3b9211.jpg,720,1280,1,272,627,385,718 -CARDS_OFFICE_H_T_frame_1489_jpg.rf.f81da8c043de43f0aa7c5847ab3b9211.jpg,720,1280,2,901,190,1266,536 -CARDS_OFFICE_T_H_frame_2553_jpg.rf.f9360ff1e4245bb6437725f695c58d25.jpg,720,1280,1,194,620,346,719 -CARDS_OFFICE_T_H_frame_2553_jpg.rf.f9360ff1e4245bb6437725f695c58d25.jpg,720,1280,2,499,321,717,475 -JENGA_COURTYARD_H_B_frame_1109_jpg.rf.fa39dd57470771dd0c9bec6bacedf079.jpg,720,1280,2,426,0,734,262 -CARDS_LIVINGROOM_S_H_frame_0321_jpg.rf.fa6eff08267cd88a6953691e2a1028d0.jpg,720,1280,1,412,705,455,718 -CARDS_LIVINGROOM_S_H_frame_0321_jpg.rf.fa6eff08267cd88a6953691e2a1028d0.jpg,720,1280,2,559,650,788,718 -CARDS_COURTYARD_T_B_frame_0226_jpg.rf.fa7ae1626c34dea9a649cf94313fbd23.jpg,720,1280,1,213,477,511,717 -CARDS_COURTYARD_T_B_frame_0226_jpg.rf.fa7ae1626c34dea9a649cf94313fbd23.jpg,720,1280,2,563,493,864,713 -CHESS_OFFICE_S_B_frame_0317_jpg.rf.faaa95e3b5c41b95d94ed74cb79d06e6.jpg,720,1280,2,642,503,1150,719 -CHESS_LIVINGROOM_S_B_frame_0247_jpg.rf.fb180761f4ce9d1420e110bc9bfe308f.jpg,720,1280,2,924,429,1279,717 -JENGA_COURTYARD_B_H_frame_1292_jpg.rf.fed641af8edc651bdc0269db7bb99f5c.jpg,720,1280,1,404,690,505,719 -JENGA_COURTYARD_B_H_frame_1292_jpg.rf.fed641af8edc651bdc0269db7bb99f5c.jpg,720,1280,2,656,321,942,693 -CARDS_COURTYARD_T_B_frame_1432_jpg.rf.ff9bffbeb705e836f6808366df7bce3f.jpg,720,1280,1,200,594,423,716 -CARDS_COURTYARD_T_B_frame_1432_jpg.rf.ff9bffbeb705e836f6808366df7bce3f.jpg,720,1280,2,567,619,769,717 -CARDS_OFFICE_T_H_frame_0587_jpg.rf.ff4abdfa033d48f6f5fb9354ea961d45.jpg,720,1280,1,183,556,514,719 -CARDS_OFFICE_T_H_frame_0587_jpg.rf.ff4abdfa033d48f6f5fb9354ea961d45.jpg,720,1280,2,586,395,953,675 diff --git a/aibox/osnet_x0_25_market1501.pt b/aibox/osnet_x0_25_market1501.pt new file mode 100644 index 00000000..7fffc340 Binary files /dev/null and b/aibox/osnet_x0_25_market1501.pt differ diff --git a/aibox/old/Scripts/01_balance.py b/aibox/resources/old_code/1_data_balance.py similarity index 100% rename from aibox/old/Scripts/01_balance.py rename to aibox/resources/old_code/1_data_balance.py diff --git a/aibox/old/Scripts/02_split.py b/aibox/resources/old_code/2_data_split.py similarity index 100% rename from aibox/old/Scripts/02_split.py rename to aibox/resources/old_code/2_data_split.py diff --git a/aibox/old/Scripts/03_relabel.py b/aibox/resources/old_code/3_data_relabel.py similarity index 100% rename from aibox/old/Scripts/03_relabel.py rename to aibox/resources/old_code/3_data_relabel.py diff --git a/aibox/old/code/EH_sanity_vis.ipynb b/aibox/resources/old_code/EH_sanity_vis.ipynb similarity index 100% rename from aibox/old/code/EH_sanity_vis.ipynb rename to aibox/resources/old_code/EH_sanity_vis.ipynb diff --git a/aibox/old/code/OptiGrasp.py b/aibox/resources/old_code/OptiGrasp.py similarity index 100% rename from aibox/old/code/OptiGrasp.py rename to aibox/resources/old_code/OptiGrasp.py diff --git a/aibox/old/code/camera_testing.ipynb b/aibox/resources/old_code/camera_testing.ipynb similarity index 100% rename from aibox/old/code/camera_testing.ipynb rename to aibox/resources/old_code/camera_testing.ipynb diff --git a/aibox/old/code/coco_investigation.py b/aibox/resources/old_code/coco_investigation.py similarity index 100% rename from aibox/old/code/coco_investigation.py rename to aibox/resources/old_code/coco_investigation.py diff --git a/aibox/old/code/connect.py b/aibox/resources/old_code/connect.py similarity index 100% rename from aibox/old/code/connect.py rename to aibox/resources/old_code/connect.py diff --git a/aibox/old/code/convert_csv_to_txt.py b/aibox/resources/old_code/convert_csv_to_txt.py similarity index 100% rename from aibox/old/code/convert_csv_to_txt.py rename to aibox/resources/old_code/convert_csv_to_txt.py diff --git a/aibox/old/code/create_csv_files_from_jason_annotation.py b/aibox/resources/old_code/create_csv_files_from_jason_annotation.py similarity index 100% rename from aibox/old/code/create_csv_files_from_jason_annotation.py rename to aibox/resources/old_code/create_csv_files_from_jason_annotation.py diff --git a/aibox/old/code/create_ds_splits.py b/aibox/resources/old_code/create_ds_splits.py similarity index 100% rename from aibox/old/code/create_ds_splits.py rename to aibox/resources/old_code/create_ds_splits.py diff --git a/aibox/old/code/create_hands_subset.py b/aibox/resources/old_code/create_hands_subset.py similarity index 100% rename from aibox/old/code/create_hands_subset.py rename to aibox/resources/old_code/create_hands_subset.py diff --git a/aibox/old/code/delete_duplication_from_csv_files.py b/aibox/resources/old_code/delete_duplication_from_csv_files.py similarity index 100% rename from aibox/old/code/delete_duplication_from_csv_files.py rename to aibox/resources/old_code/delete_duplication_from_csv_files.py diff --git a/aibox/old/code/detect.py b/aibox/resources/old_code/detect.py similarity index 100% rename from aibox/old/code/detect.py rename to aibox/resources/old_code/detect.py diff --git a/aibox/old/code/download_coco_subset.py b/aibox/resources/old_code/download_coco_subset.py similarity index 100% rename from aibox/old/code/download_coco_subset.py rename to aibox/resources/old_code/download_coco_subset.py diff --git a/aibox/export.py b/aibox/resources/old_code/export.py similarity index 100% rename from aibox/export.py rename to aibox/resources/old_code/export.py diff --git a/aibox/old/code/generate_txt_to_speech_openai.py b/aibox/resources/old_code/generate_txt_to_speech_openai.py similarity index 100% rename from aibox/old/code/generate_txt_to_speech_openai.py rename to aibox/resources/old_code/generate_txt_to_speech_openai.py diff --git a/aibox/old/code/relabeling.ipynb b/aibox/resources/old_code/relabeling.ipynb similarity index 100% rename from aibox/old/code/relabeling.ipynb rename to aibox/resources/old_code/relabeling.ipynb diff --git a/aibox/old/code/split_ds.py b/aibox/resources/old_code/split_ds.py similarity index 100% rename from aibox/old/code/split_ds.py rename to aibox/resources/old_code/split_ds.py diff --git a/aibox/old/code/ssdmobilenetv2_grapes_transfer_learning.ipynb b/aibox/resources/old_code/ssdmobilenetv2_grapes_transfer_learning.ipynb similarity index 100% rename from aibox/old/code/ssdmobilenetv2_grapes_transfer_learning.ipynb rename to aibox/resources/old_code/ssdmobilenetv2_grapes_transfer_learning.ipynb diff --git a/aibox/old/code/subset_coco.py b/aibox/resources/old_code/subset_coco.py similarity index 100% rename from aibox/old/code/subset_coco.py rename to aibox/resources/old_code/subset_coco.py diff --git a/aibox/old/code/yolov5_inference.py b/aibox/resources/old_code/yolov5_inference.py similarity index 100% rename from aibox/old/code/yolov5_inference.py rename to aibox/resources/old_code/yolov5_inference.py diff --git a/aibox/sound/apple.mp3 b/aibox/resources/sound/apple.mp3 similarity index 100% rename from aibox/sound/apple.mp3 rename to aibox/resources/sound/apple.mp3 diff --git a/aibox/sound/banana.mp3 b/aibox/resources/sound/banana.mp3 similarity index 100% rename from aibox/sound/banana.mp3 rename to aibox/resources/sound/banana.mp3 diff --git a/aibox/sound/beginning.mp3 b/aibox/resources/sound/beginning.mp3 similarity index 100% rename from aibox/sound/beginning.mp3 rename to aibox/resources/sound/beginning.mp3 diff --git a/aibox/sound/bicycle.mp3 b/aibox/resources/sound/bicycle.mp3 similarity index 100% rename from aibox/sound/bicycle.mp3 rename to aibox/resources/sound/bicycle.mp3 diff --git a/aibox/sound/cup.mp3 b/aibox/resources/sound/bottle.mp3 similarity index 100% rename from aibox/sound/cup.mp3 rename to aibox/resources/sound/bottle.mp3 diff --git a/aibox/sound/bowl.mp3 b/aibox/resources/sound/bowl.mp3 similarity index 100% rename from aibox/sound/bowl.mp3 rename to aibox/resources/sound/bowl.mp3 diff --git a/aibox/sound/clock.mp3 b/aibox/resources/sound/clock.mp3 similarity index 100% rename from aibox/sound/clock.mp3 rename to aibox/resources/sound/clock.mp3 diff --git a/aibox/resources/sound/cup.mp3 b/aibox/resources/sound/cup.mp3 new file mode 100644 index 00000000..3292ea5c Binary files /dev/null and b/aibox/resources/sound/cup.mp3 differ diff --git a/aibox/sound/ending.mp3 b/aibox/resources/sound/ending.mp3 similarity index 100% rename from aibox/sound/ending.mp3 rename to aibox/resources/sound/ending.mp3 diff --git a/aibox/sound/potted plant.mp3 b/aibox/resources/sound/potted plant.mp3 similarity index 100% rename from aibox/sound/potted plant.mp3 rename to aibox/resources/sound/potted plant.mp3 diff --git a/aibox/sound/wine glass.mp3 b/aibox/resources/sound/wine glass.mp3 similarity index 100% rename from aibox/sound/wine glass.mp3 rename to aibox/resources/sound/wine glass.mp3 diff --git a/aibox/strongsort/__init__.py b/aibox/strongsort/__init__.py new file mode 100644 index 00000000..5fd9582b --- /dev/null +++ b/aibox/strongsort/__init__.py @@ -0,0 +1,12 @@ +from strongsort import * +from strongsort.strong_sort import StrongSORT + + +__all__ = ['StrongSORT', 'build_tracker'] +__version__ = '0.1.2' + +def build_tracker(cfg, use_cuda): + return StrongSORT(cfg.STRONGSORT.REID_CKPT, + max_dist=cfg.STRONGSORT.MAX_DIST, min_confidence=cfg.STRONGSORT.MIN_CONFIDENCE, + nms_max_overlap=cfg.STRONGSORT.NMS_MAX_OVERLAP, max_iou_distance=cfg.STRONGSORT.MAX_IOU_DISTANCE, + max_age=cfg.STRONGSORT.MAX_AGE, n_init=cfg.STRONGSORT.N_INIT, nn_budget=cfg.STRONGSORT.NN_BUDGET, use_cuda=use_cuda) diff --git a/aibox/strongsort/asserts.py b/aibox/strongsort/asserts.py new file mode 100644 index 00000000..f73cd570 --- /dev/null +++ b/aibox/strongsort/asserts.py @@ -0,0 +1,13 @@ +from os import environ + + +def assert_in(file, files_to_check): + if file not in files_to_check: + raise AssertionError("{} does not exist in the list".format(str(file))) + return True + + +def assert_in_env(check_list: list): + for item in check_list: + assert_in(item, environ.keys()) + return True diff --git a/aibox/strongsort/detection.py b/aibox/strongsort/detection.py new file mode 100644 index 00000000..258957b2 --- /dev/null +++ b/aibox/strongsort/detection.py @@ -0,0 +1,48 @@ +import numpy as np + + +class Detection(object): + """ + This class represents a bounding box detection in a single image. + + Parameters + ---------- + tlwh : array_like + Bounding box in format `(x, y, w, h)`. + confidence : float + Detector confidence score. + feature : array_like + A feature vector that describes the object contained in this image. + + Attributes + ---------- + tlwh : ndarray + Bounding box in format `(top left x, top left y, width, height)`. + confidence : ndarray + Detector confidence score. + feature : ndarray | NoneType + A feature vector that describes the object contained in this image. + + """ + + def __init__(self, tlwh, confidence, feature): + self.tlwh = np.asarray(tlwh, dtype=np.float32) + self.confidence = float(confidence) + self.feature = np.asarray(feature, dtype=np.float32) + + def to_tlbr(self): + """Convert bounding box to format `(min x, min y, max x, max y)`, i.e., + `(top left, bottom right)`. + """ + ret = self.tlwh.copy() + ret[2:] += ret[:2] + return ret + + def to_xyah(self): + """Convert bounding box to format `(center x, center y, aspect ratio, + height)`, where the aspect ratio is `width / height`. + """ + ret = self.tlwh.copy() + ret[:2] += ret[2:] / 2 + ret[2] /= ret[3] + return ret diff --git a/aibox/strongsort/draw.py b/aibox/strongsort/draw.py new file mode 100644 index 00000000..46fffe6d --- /dev/null +++ b/aibox/strongsort/draw.py @@ -0,0 +1,35 @@ +import cv2 + +palette = (2 ** 11 - 1, 2 ** 15 - 1, 2 ** 20 - 1) + + +def compute_color_for_labels(label): + """ + Simple function that adds fixed color depending on the class + """ + color = [int((p * (label ** 2 - label + 1)) % 255) for p in palette] + return tuple(color) + + +def draw_boxes(img, bbox, identities=None, offset=(0,0)): + for i,box in enumerate(bbox): + x1,y1,x2,y2 = [int(i) for i in box] + x1 += offset[0] + x2 += offset[0] + y1 += offset[1] + y2 += offset[1] + # box text and bar + id = int(identities[i]) if identities is not None else 0 + color = compute_color_for_labels(id) + label = '{}{:d}'.format("", id) + t_size = cv2.getTextSize(label, cv2.FONT_HERSHEY_PLAIN, 2 , 2)[0] + cv2.rectangle(img,(x1, y1),(x2,y2),color,3) + cv2.rectangle(img,(x1, y1),(x1+t_size[0]+3,y1+t_size[1]+4), color,-1) + cv2.putText(img,label,(x1,y1+t_size[1]+4), cv2.FONT_HERSHEY_PLAIN, 2, [255,255,255], 2) + return img + + + +if __name__ == '__main__': + for i in range(82): + print(compute_color_for_labels(i)) diff --git a/aibox/strongsort/evaluation.py b/aibox/strongsort/evaluation.py new file mode 100644 index 00000000..efde3283 --- /dev/null +++ b/aibox/strongsort/evaluation.py @@ -0,0 +1,103 @@ +import os +import numpy as np +import copy +import motmetrics as mm +mm.lap.default_solver = 'lap' +from io import read_results, unzip_objs + + +class Evaluator(object): + + def __init__(self, data_root, seq_name, data_type): + self.data_root = data_root + self.seq_name = seq_name + self.data_type = data_type + + self.load_annotations() + self.reset_accumulator() + + def load_annotations(self): + assert self.data_type == 'mot' + + gt_filename = os.path.join(self.data_root, self.seq_name, 'gt', 'gt.txt') + self.gt_frame_dict = read_results(gt_filename, self.data_type, is_gt=True) + self.gt_ignore_frame_dict = read_results(gt_filename, self.data_type, is_ignore=True) + + def reset_accumulator(self): + self.acc = mm.MOTAccumulator(auto_id=True) + + def eval_frame(self, frame_id, trk_tlwhs, trk_ids, rtn_events=False): + # results + trk_tlwhs = np.copy(trk_tlwhs) + trk_ids = np.copy(trk_ids) + + # gts + gt_objs = self.gt_frame_dict.get(frame_id, []) + gt_tlwhs, gt_ids = unzip_objs(gt_objs)[:2] + + # ignore boxes + ignore_objs = self.gt_ignore_frame_dict.get(frame_id, []) + ignore_tlwhs = unzip_objs(ignore_objs)[0] + + + # remove ignored results + keep = np.ones(len(trk_tlwhs), dtype=bool) + iou_distance = mm.distances.iou_matrix(ignore_tlwhs, trk_tlwhs, max_iou=0.5) + if len(iou_distance) > 0: + match_is, match_js = mm.lap.linear_sum_assignment(iou_distance) + match_is, match_js = map(lambda a: np.asarray(a, dtype=int), [match_is, match_js]) + match_ious = iou_distance[match_is, match_js] + + match_js = np.asarray(match_js, dtype=int) + match_js = match_js[np.logical_not(np.isnan(match_ious))] + keep[match_js] = False + trk_tlwhs = trk_tlwhs[keep] + trk_ids = trk_ids[keep] + + # get distance matrix + iou_distance = mm.distances.iou_matrix(gt_tlwhs, trk_tlwhs, max_iou=0.5) + + # acc + self.acc.update(gt_ids, trk_ids, iou_distance) + + if rtn_events and iou_distance.size > 0 and hasattr(self.acc, 'last_mot_events'): + events = self.acc.last_mot_events # only supported by https://github.com/longcw/py-motmetrics + else: + events = None + return events + + def eval_file(self, filename): + self.reset_accumulator() + + result_frame_dict = read_results(filename, self.data_type, is_gt=False) + frames = sorted(list(set(self.gt_frame_dict.keys()) | set(result_frame_dict.keys()))) + for frame_id in frames: + trk_objs = result_frame_dict.get(frame_id, []) + trk_tlwhs, trk_ids = unzip_objs(trk_objs)[:2] + self.eval_frame(frame_id, trk_tlwhs, trk_ids, rtn_events=False) + + return self.acc + + @staticmethod + def get_summary(accs, names, metrics=('mota', 'num_switches', 'idp', 'idr', 'idf1', 'precision', 'recall')): + names = copy.deepcopy(names) + if metrics is None: + metrics = mm.metrics.motchallenge_metrics + metrics = copy.deepcopy(metrics) + + mh = mm.metrics.create() + summary = mh.compute_many( + accs, + metrics=metrics, + names=names, + generate_overall=True + ) + + return summary + + @staticmethod + def save_summary(summary, filename): + import pandas as pd + writer = pd.ExcelWriter(filename) + summary.to_excel(writer) + writer.save() diff --git a/aibox/strongsort/io.py b/aibox/strongsort/io.py new file mode 100644 index 00000000..6227e420 --- /dev/null +++ b/aibox/strongsort/io.py @@ -0,0 +1,83 @@ +import os +import numpy as np + + +def write_results(filename, results, data_type): + if data_type == 'mot': + save_format = '{frame},{id},{x1},{y1},{w},{h},-1,-1,-1,-1\n' + elif data_type == 'kitti': + save_format = '{frame} {id} pedestrian 0 0 -10 {x1} {y1} {x2} {y2} -10 -10 -10 -1000 -1000 -1000 -10\n' + else: + raise ValueError(data_type) + + with open(filename, 'w') as f: + for frame_id, tlwhs, track_ids in results: + if data_type == 'kitti': + frame_id -= 1 + for tlwh, track_id in zip(tlwhs, track_ids): + if track_id < 0: + continue + x1, y1, w, h = tlwh + x2, y2 = x1 + w, y1 + h + line = save_format.format(frame=frame_id, id=track_id, x1=x1, y1=y1, x2=x2, y2=y2, w=w, h=h) + f.write(line) + +def read_results(filename, data_type: str, is_gt=False, is_ignore=False): + if data_type in ('mot', 'lab'): + read_fun = read_mot_results + else: + raise ValueError('Unknown data type: {}'.format(data_type)) + + return read_fun(filename, is_gt, is_ignore) + + +def read_mot_results(filename, is_gt, is_ignore): + valid_labels = {1} + ignore_labels = {2, 7, 8, 12} + results_dict = dict() + if os.path.isfile(filename): + with open(filename, 'r') as f: + for line in f.readlines(): + linelist = line.split(',') + if len(linelist) < 7: + continue + fid = int(linelist[0]) + if fid < 1: + continue + results_dict.setdefault(fid, list()) + + if is_gt: + if 'MOT16-' in filename or 'MOT17-' in filename: + label = int(float(linelist[7])) + mark = int(float(linelist[6])) + if mark == 0 or label not in valid_labels: + continue + score = 1 + elif is_ignore: + if 'MOT16-' in filename or 'MOT17-' in filename: + label = int(float(linelist[7])) + vis_ratio = float(linelist[8]) + if label not in ignore_labels and vis_ratio >= 0: + continue + else: + continue + score = 1 + else: + score = float(linelist[6]) + + tlwh = tuple(map(float, linelist[2:6])) + target_id = int(linelist[1]) + + results_dict[fid].append((tlwh, target_id, score)) + + return results_dict + + +def unzip_objs(objs): + if len(objs) > 0: + tlwhs, ids, scores = zip(*objs) + else: + tlwhs, ids, scores = [], [], [] + tlwhs = np.asarray(tlwhs, dtype=float).reshape(-1, 4) + + return tlwhs, ids, scores diff --git a/aibox/strongsort/iou_matching.py b/aibox/strongsort/iou_matching.py new file mode 100644 index 00000000..88f0bc54 --- /dev/null +++ b/aibox/strongsort/iou_matching.py @@ -0,0 +1,80 @@ +from __future__ import absolute_import +import numpy as np +from strongsort import linear_assignment + +def iou(bbox, candidates): + """Computer intersection over union. + + Parameters + ---------- + bbox : ndarray + A bounding box in format `(top left x, top left y, width, height)`. + candidates : ndarray + A matrix of candidate bounding boxes (one per row) in the same format + as `bbox`. + + Returns + ------- + ndarray + The intersection over union in [0, 1] between the `bbox` and each + candidate. A higher score means a larger fraction of the `bbox` is + occluded by the candidate. + + """ + bbox_tl, bbox_br = bbox[:2], bbox[:2] + bbox[2:] + candidates_tl = candidates[:, :2] + candidates_br = candidates[:, :2] + candidates[:, 2:] + + tl = np.c_[np.maximum(bbox_tl[0], candidates_tl[:, 0])[:, np.newaxis], + np.maximum(bbox_tl[1], candidates_tl[:, 1])[:, np.newaxis]] + br = np.c_[np.minimum(bbox_br[0], candidates_br[:, 0])[:, np.newaxis], + np.minimum(bbox_br[1], candidates_br[:, 1])[:, np.newaxis]] + wh = np.maximum(0., br - tl) + + area_intersection = wh.prod(axis=1) + area_bbox = bbox[2:].prod() + area_candidates = candidates[:, 2:].prod(axis=1) + return area_intersection / (area_bbox + area_candidates - area_intersection) + + +def iou_cost(tracks, detections, track_indices=None, + detection_indices=None): + """An intersection over union distance metric. + + Parameters + ---------- + tracks : List[deep_sort.track.Track] + A list of tracks. + detections : List[deep_sort.detection.Detection] + A list of detections. + track_indices : Optional[List[int]] + A list of indices to tracks that should be matched. Defaults to + all `tracks`. + detection_indices : Optional[List[int]] + A list of indices to detections that should be matched. Defaults + to all `detections`. + + Returns + ------- + ndarray + Returns a cost matrix of shape + len(track_indices), len(detection_indices) where entry (i, j) is + `1 - iou(tracks[track_indices[i]], detections[detection_indices[j]])`. + + """ + if track_indices is None: + track_indices = np.arange(len(tracks)) + if detection_indices is None: + detection_indices = np.arange(len(detections)) + + cost_matrix = np.zeros((len(track_indices), len(detection_indices))) + for row, track_idx in enumerate(track_indices): + if tracks[track_idx].time_since_update > 1: + cost_matrix[row, :] = linear_assignment.INFTY_COST + continue + + bbox = tracks[track_idx].to_tlwh() + candidates = np.asarray( + [detections[i].tlwh for i in detection_indices]) + cost_matrix[row, :] = 1. - iou(bbox, candidates) + return cost_matrix diff --git a/aibox/strongsort/json_logger.py b/aibox/strongsort/json_logger.py new file mode 100644 index 00000000..dd0bcf27 --- /dev/null +++ b/aibox/strongsort/json_logger.py @@ -0,0 +1,383 @@ +""" +References: + https://medium.com/analytics-vidhya/creating-a-custom-logging-mechanism-for-real-time-object-detection-using-tdd-4ca2cfcd0a2f +""" +import json +from os import makedirs +from os.path import exists, join +from datetime import datetime + + +class JsonMeta(object): + HOURS = 3 + MINUTES = 59 + SECONDS = 59 + PATH_TO_SAVE = 'LOGS' + DEFAULT_FILE_NAME = 'remaining' + + +class BaseJsonLogger(object): + """ + This is the base class that returns __dict__ of its own + it also returns the dicts of objects in the attributes that are list instances + + """ + + def dic(self): + # returns dicts of objects + out = {} + for k, v in self.__dict__.items(): + if hasattr(v, 'dic'): + out[k] = v.dic() + elif isinstance(v, list): + out[k] = self.list(v) + else: + out[k] = v + return out + + @staticmethod + def list(values): + # applies the dic method on items in the list + return [v.dic() if hasattr(v, 'dic') else v for v in values] + + +class Label(BaseJsonLogger): + """ + For each bounding box there are various categories with confidences. Label class keeps track of that information. + """ + + def __init__(self, category: str, confidence: float): + self.category = category + self.confidence = confidence + + +class Bbox(BaseJsonLogger): + """ + This module stores the information for each frame and use them in JsonParser + Attributes: + labels (list): List of label module. + top (int): + left (int): + width (int): + height (int): + + Args: + bbox_id (float): + top (int): + left (int): + width (int): + height (int): + + References: + Check Label module for better understanding. + + + """ + + def __init__(self, bbox_id, top, left, width, height): + self.labels = [] + self.bbox_id = bbox_id + self.top = top + self.left = left + self.width = width + self.height = height + + def add_label(self, category, confidence): + # adds category and confidence only if top_k is not exceeded. + self.labels.append(Label(category, confidence)) + + def labels_full(self, value): + return len(self.labels) == value + + +class Frame(BaseJsonLogger): + """ + This module stores the information for each frame and use them in JsonParser + Attributes: + timestamp (float): The elapsed time of captured frame + frame_id (int): The frame number of the captured video + bboxes (list of Bbox objects): Stores the list of bbox objects. + + References: + Check Bbox class for better information + + Args: + timestamp (float): + frame_id (int): + + """ + + def __init__(self, frame_id: int, timestamp: float = None): + self.frame_id = frame_id + self.timestamp = timestamp + self.bboxes = [] + + def add_bbox(self, bbox_id: int, top: int, left: int, width: int, height: int): + bboxes_ids = [bbox.bbox_id for bbox in self.bboxes] + if bbox_id not in bboxes_ids: + self.bboxes.append(Bbox(bbox_id, top, left, width, height)) + else: + raise ValueError("Frame with id: {} already has a Bbox with id: {}".format(self.frame_id, bbox_id)) + + def add_label_to_bbox(self, bbox_id: int, category: str, confidence: float): + bboxes = {bbox.id: bbox for bbox in self.bboxes} + if bbox_id in bboxes.keys(): + res = bboxes.get(bbox_id) + res.add_label(category, confidence) + else: + raise ValueError('the bbox with id: {} does not exists!'.format(bbox_id)) + + +class BboxToJsonLogger(BaseJsonLogger): + """ + ُ This module is designed to automate the task of logging jsons. An example json is used + to show the contents of json file shortly + Example: + { + "video_details": { + "frame_width": 1920, + "frame_height": 1080, + "frame_rate": 20, + "video_name": "/home/gpu/codes/MSD/pedestrian_2/project/public/camera1.avi" + }, + "frames": [ + { + "frame_id": 329, + "timestamp": 3365.1254 + "bboxes": [ + { + "labels": [ + { + "category": "pedestrian", + "confidence": 0.9 + } + ], + "bbox_id": 0, + "top": 1257, + "left": 138, + "width": 68, + "height": 109 + } + ] + }], + + Attributes: + frames (dict): It's a dictionary that maps each frame_id to json attributes. + video_details (dict): information about video file. + top_k_labels (int): shows the allowed number of labels + start_time (datetime object): we use it to automate the json output by time. + + Args: + top_k_labels (int): shows the allowed number of labels + + """ + + def __init__(self, top_k_labels: int = 1): + self.frames = {} + self.video_details = self.video_details = dict(frame_width=None, frame_height=None, frame_rate=None, + video_name=None) + self.top_k_labels = top_k_labels + self.start_time = datetime.now() + + def set_top_k(self, value): + self.top_k_labels = value + + def frame_exists(self, frame_id: int) -> bool: + """ + Args: + frame_id (int): + + Returns: + bool: true if frame_id is recognized + """ + return frame_id in self.frames.keys() + + def add_frame(self, frame_id: int, timestamp: float = None) -> None: + """ + Args: + frame_id (int): + timestamp (float): opencv captured frame time property + + Raises: + ValueError: if frame_id would not exist in class frames attribute + + Returns: + None + + """ + if not self.frame_exists(frame_id): + self.frames[frame_id] = Frame(frame_id, timestamp) + else: + raise ValueError("Frame id: {} already exists".format(frame_id)) + + def bbox_exists(self, frame_id: int, bbox_id: int) -> bool: + """ + Args: + frame_id: + bbox_id: + + Returns: + bool: if bbox exists in frame bboxes list + """ + bboxes = [] + if self.frame_exists(frame_id=frame_id): + bboxes = [bbox.bbox_id for bbox in self.frames[frame_id].bboxes] + return bbox_id in bboxes + + def find_bbox(self, frame_id: int, bbox_id: int): + """ + + Args: + frame_id: + bbox_id: + + Returns: + bbox_id (int): + + Raises: + ValueError: if bbox_id does not exist in the bbox list of specific frame. + """ + if not self.bbox_exists(frame_id, bbox_id): + raise ValueError("frame with id: {} does not contain bbox with id: {}".format(frame_id, bbox_id)) + bboxes = {bbox.bbox_id: bbox for bbox in self.frames[frame_id].bboxes} + return bboxes.get(bbox_id) + + def add_bbox_to_frame(self, frame_id: int, bbox_id: int, top: int, left: int, width: int, height: int) -> None: + """ + + Args: + frame_id (int): + bbox_id (int): + top (int): + left (int): + width (int): + height (int): + + Returns: + None + + Raises: + ValueError: if bbox_id already exist in frame information with frame_id + ValueError: if frame_id does not exist in frames attribute + """ + if self.frame_exists(frame_id): + frame = self.frames[frame_id] + if not self.bbox_exists(frame_id, bbox_id): + frame.add_bbox(bbox_id, top, left, width, height) + else: + raise ValueError( + "frame with frame_id: {} already contains the bbox with id: {} ".format(frame_id, bbox_id)) + else: + raise ValueError("frame with frame_id: {} does not exist".format(frame_id)) + + def add_label_to_bbox(self, frame_id: int, bbox_id: int, category: str, confidence: float): + """ + Args: + frame_id: + bbox_id: + category: + confidence: the confidence value returned from yolo detection + + Returns: + None + + Raises: + ValueError: if labels quota (top_k_labels) exceeds. + """ + bbox = self.find_bbox(frame_id, bbox_id) + if not bbox.labels_full(self.top_k_labels): + bbox.add_label(category, confidence) + else: + raise ValueError("labels in frame_id: {}, bbox_id: {} is fulled".format(frame_id, bbox_id)) + + def add_video_details(self, frame_width: int = None, frame_height: int = None, frame_rate: int = None, + video_name: str = None): + self.video_details['frame_width'] = frame_width + self.video_details['frame_height'] = frame_height + self.video_details['frame_rate'] = frame_rate + self.video_details['video_name'] = video_name + + def output(self): + output = {'video_details': self.video_details} + result = list(self.frames.values()) + output['frames'] = [item.dic() for item in result] + return output + + def json_output(self, output_name): + """ + Args: + output_name: + + Returns: + None + + Notes: + It creates the json output with `output_name` name. + """ + if not output_name.endswith('.json'): + output_name += '.json' + with open(output_name, 'w') as file: + json.dump(self.output(), file) + file.close() + + def set_start(self): + self.start_time = datetime.now() + + def schedule_output_by_time(self, output_dir=JsonMeta.PATH_TO_SAVE, hours: int = 0, minutes: int = 0, + seconds: int = 60) -> None: + """ + Notes: + Creates folder and then periodically stores the jsons on that address. + + Args: + output_dir (str): the directory where output files will be stored + hours (int): + minutes (int): + seconds (int): + + Returns: + None + + """ + end = datetime.now() + interval = 0 + interval += abs(min([hours, JsonMeta.HOURS]) * 3600) + interval += abs(min([minutes, JsonMeta.MINUTES]) * 60) + interval += abs(min([seconds, JsonMeta.SECONDS])) + diff = (end - self.start_time).seconds + + if diff > interval: + output_name = self.start_time.strftime('%Y-%m-%d %H-%M-%S') + '.json' + if not exists(output_dir): + makedirs(output_dir) + output = join(output_dir, output_name) + self.json_output(output_name=output) + self.frames = {} + self.start_time = datetime.now() + + def schedule_output_by_frames(self, frames_quota, frame_counter, output_dir=JsonMeta.PATH_TO_SAVE): + """ + saves as the number of frames quota increases higher. + :param frames_quota: + :param frame_counter: + :param output_dir: + :return: + """ + pass + + def flush(self, output_dir): + """ + Notes: + We use this function to output jsons whenever possible. + like the time that we exit the while loop of opencv. + + Args: + output_dir: + + Returns: + None + + """ + filename = self.start_time.strftime('%Y-%m-%d %H-%M-%S') + '-remaining.json' + output = join(output_dir, filename) + self.json_output(output_name=output) diff --git a/aibox/strongsort/kalman_filter.py b/aibox/strongsort/kalman_filter.py new file mode 100644 index 00000000..09dc3ddb --- /dev/null +++ b/aibox/strongsort/kalman_filter.py @@ -0,0 +1,213 @@ +import numpy as np +import scipy.linalg +""" +Table for the 0.95 quantile of the chi-square distribution with N degrees of +freedom (contains values for N=1, ..., 9). Taken from MATLAB/Octave's chi2inv +function and used as Mahalanobis gating threshold. +""" +chi2inv95 = { + 1: 3.8415, + 2: 5.9915, + 3: 7.8147, + 4: 9.4877, + 5: 11.070, + 6: 12.592, + 7: 14.067, + 8: 15.507, + 9: 16.919} + + +class KalmanFilter(object): + """ + A simple Kalman filter for tracking bounding boxes in image space. + The 8-dimensional state space + x, y, a, h, vx, vy, va, vh + contains the bounding box center position (x, y), aspect ratio a, height h, + and their respective velocities. + Object motion follows a constant velocity model. The bounding box location + (x, y, a, h) is taken as direct observation of the state space (linear + observation model). + """ + + def __init__(self): + ndim, dt = 4, 1. + + # Create Kalman filter model matrices. + self._motion_mat = np.eye(2 * ndim, 2 * ndim) + for i in range(ndim): + self._motion_mat[i, ndim + i] = dt + + self._update_mat = np.eye(ndim, 2 * ndim) + + # Motion and observation uncertainty are chosen relative to the current + # state estimate. These weights control the amount of uncertainty in + # the model. This is a bit hacky. + self._std_weight_position = 1. / 20 + self._std_weight_velocity = 1. / 160 + + def initiate(self, measurement): + """Create track from unassociated measurement. + Parameters + ---------- + measurement : ndarray + Bounding box coordinates (x, y, a, h) with center position (x, y), + aspect ratio a, and height h. + Returns + ------- + (ndarray, ndarray) + Returns the mean vector (8 dimensional) and covariance matrix (8x8 + dimensional) of the new track. Unobserved velocities are initialized + to 0 mean. + """ + mean_pos = measurement + mean_vel = np.zeros_like(mean_pos) + mean = np.r_[mean_pos, mean_vel] + + std = [ + 2 * self._std_weight_position * measurement[0], # the center point x + 2 * self._std_weight_position * measurement[1], # the center point y + 1 * measurement[2], # the ratio of width/height + 2 * self._std_weight_position * measurement[3], # the height + 10 * self._std_weight_velocity * measurement[0], + 10 * self._std_weight_velocity * measurement[1], + 0.1 * measurement[2], + 10 * self._std_weight_velocity * measurement[3]] + covariance = np.diag(np.square(std)) + return mean, covariance + + def predict(self, mean, covariance): + """Run Kalman filter prediction step. + Parameters + ---------- + mean : ndarray + The 8 dimensional mean vector of the object state at the previous + time step. + covariance : ndarray + The 8x8 dimensional covariance matrix of the object state at the + previous time step. + Returns + ------- + (ndarray, ndarray) + Returns the mean vector and covariance matrix of the predicted + state. Unobserved velocities are initialized to 0 mean. + """ + std_pos = [ + self._std_weight_position * mean[0], + self._std_weight_position * mean[1], + 1 * mean[2], + self._std_weight_position * mean[3]] + std_vel = [ + self._std_weight_velocity * mean[0], + self._std_weight_velocity * mean[1], + 0.1 * mean[2], + self._std_weight_velocity * mean[3]] + motion_cov = np.diag(np.square(np.r_[std_pos, std_vel])) + + mean = np.dot(self._motion_mat, mean) + covariance = np.linalg.multi_dot(( + self._motion_mat, covariance, self._motion_mat.T)) + motion_cov + + return mean, covariance + + def project(self, mean, covariance, confidence=.0): + """Project state distribution to measurement space. + Parameters + ---------- + mean : ndarray + The state's mean vector (8 dimensional array). + covariance : ndarray + The state's covariance matrix (8x8 dimensional). + confidence: (dyh) 检测框置信度 + Returns + ------- + (ndarray, ndarray) + Returns the projected mean and covariance matrix of the given state + estimate. + """ + std = [ + self._std_weight_position * mean[3], + self._std_weight_position * mean[3], + 1e-1, + self._std_weight_position * mean[3]] + + + std = [(1 - confidence) * x for x in std] + + innovation_cov = np.diag(np.square(std)) + + mean = np.dot(self._update_mat, mean) + covariance = np.linalg.multi_dot(( + self._update_mat, covariance, self._update_mat.T)) + return mean, covariance + innovation_cov + + def update(self, mean, covariance, measurement, confidence=.0): + """Run Kalman filter correction step. + Parameters + ---------- + mean : ndarray + The predicted state's mean vector (8 dimensional). + covariance : ndarray + The state's covariance matrix (8x8 dimensional). + measurement : ndarray + The 4 dimensional measurement vector (x, y, a, h), where (x, y) + is the center position, a the aspect ratio, and h the height of the + bounding box. + confidence: (dyh)检测框置信度 + Returns + ------- + (ndarray, ndarray) + Returns the measurement-corrected state distribution. + """ + projected_mean, projected_cov = self.project(mean, covariance, confidence) + + chol_factor, lower = scipy.linalg.cho_factor( + projected_cov, lower=True, check_finite=False) + kalman_gain = scipy.linalg.cho_solve( + (chol_factor, lower), np.dot(covariance, self._update_mat.T).T, + check_finite=False).T + innovation = measurement - projected_mean + + new_mean = mean + np.dot(innovation, kalman_gain.T) + new_covariance = covariance - np.linalg.multi_dot(( + kalman_gain, projected_cov, kalman_gain.T)) + return new_mean, new_covariance + + def gating_distance(self, mean, covariance, measurements, + only_position=False): + """Compute gating distance between state distribution and measurements. + A suitable distance threshold can be obtained from `chi2inv95`. If + `only_position` is False, the chi-square distribution has 4 degrees of + freedom, otherwise 2. + Parameters + ---------- + mean : ndarray + Mean vector over the state distribution (8 dimensional). + covariance : ndarray + Covariance of the state distribution (8x8 dimensional). + measurements : ndarray + An Nx4 dimensional matrix of N measurements, each in + format (x, y, a, h) where (x, y) is the bounding box center + position, a the aspect ratio, and h the height. + only_position : Optional[bool] + If True, distance computation is done with respect to the bounding + box center position only. + Returns + ------- + ndarray + Returns an array of length N, where the i-th element contains the + squared Mahalanobis distance between (mean, covariance) and + `measurements[i]`. + """ + mean, covariance = self.project(mean, covariance) + + if only_position: + mean, covariance = mean[:2], covariance[:2, :2] + measurements = measurements[:, :2] + + cholesky_factor = np.linalg.cholesky(covariance) + d = measurements - mean + z = scipy.linalg.solve_triangular( + cholesky_factor, d.T, lower=True, check_finite=False, + overwrite_b=True) + squared_maha = np.sum(z * z, axis=0) + return squared_maha \ No newline at end of file diff --git a/aibox/strongsort/linear_assignment.py b/aibox/strongsort/linear_assignment.py new file mode 100644 index 00000000..9aeb4f37 --- /dev/null +++ b/aibox/strongsort/linear_assignment.py @@ -0,0 +1,172 @@ +from __future__ import absolute_import +import numpy as np +from scipy.optimize import linear_sum_assignment +from strongsort import kalman_filter + +INFTY_COST = 1e+5 + + +def min_cost_matching( + distance_metric, max_distance, tracks, detections, track_indices=None, + detection_indices=None): + """Solve linear assignment problem. + Parameters + ---------- + distance_metric : Callable[List[Track], List[Detection], List[int], List[int]) -> ndarray + The distance metric is given a list of tracks and detections as well as + a list of N track indices and M detection indices. The metric should + return the NxM dimensional cost matrix, where element (i, j) is the + association cost between the i-th track in the given track indices and + the j-th detection in the given detection_indices. + max_distance : float + Gating threshold. Associations with cost larger than this value are + disregarded. + tracks : List[track.Track] + A list of predicted tracks at the current time step. + detections : List[detection.Detection] + A list of detections at the current time step. + track_indices : List[int] + List of track indices that maps rows in `cost_matrix` to tracks in + `tracks` (see description above). + detection_indices : List[int] + List of detection indices that maps columns in `cost_matrix` to + detections in `detections` (see description above). + Returns + ------- + (List[(int, int)], List[int], List[int]) + Returns a tuple with the following three entries: + * A list of matched track and detection indices. + * A list of unmatched track indices. + * A list of unmatched detection indices. + """ + if track_indices is None: + track_indices = np.arange(len(tracks)) + if detection_indices is None: + detection_indices = np.arange(len(detections)) + + if len(detection_indices) == 0 or len(track_indices) == 0: + return [], track_indices, detection_indices # Nothing to match. + + cost_matrix = distance_metric( + tracks, detections, track_indices, detection_indices) + cost_matrix[cost_matrix > max_distance] = max_distance + 1e-5 + row_indices, col_indices = linear_sum_assignment(cost_matrix) + + matches, unmatched_tracks, unmatched_detections = [], [], [] + for col, detection_idx in enumerate(detection_indices): + if col not in col_indices: + unmatched_detections.append(detection_idx) + for row, track_idx in enumerate(track_indices): + if row not in row_indices: + unmatched_tracks.append(track_idx) + for row, col in zip(row_indices, col_indices): + track_idx = track_indices[row] + detection_idx = detection_indices[col] + if cost_matrix[row, col] > max_distance: + unmatched_tracks.append(track_idx) + unmatched_detections.append(detection_idx) + else: + matches.append((track_idx, detection_idx)) + return matches, unmatched_tracks, unmatched_detections + + +def matching_cascade( + distance_metric, max_distance, cascade_depth, tracks, detections, + track_indices=None, detection_indices=None): + """Run matching cascade. + Parameters + ---------- + distance_metric : Callable[List[Track], List[Detection], List[int], List[int]) -> ndarray + The distance metric is given a list of tracks and detections as well as + a list of N track indices and M detection indices. The metric should + return the NxM dimensional cost matrix, where element (i, j) is the + association cost between the i-th track in the given track indices and + the j-th detection in the given detection indices. + max_distance : float + Gating threshold. Associations with cost larger than this value are + disregarded. + cascade_depth: int + The cascade depth, should be se to the maximum track age. + tracks : List[track.Track] + A list of predicted tracks at the current time step. + detections : List[detection.Detection] + A list of detections at the current time step. + track_indices : Optional[List[int]] + List of track indices that maps rows in `cost_matrix` to tracks in + `tracks` (see description above). Defaults to all tracks. + detection_indices : Optional[List[int]] + List of detection indices that maps columns in `cost_matrix` to + detections in `detections` (see description above). Defaults to all + detections. + Returns + ------- + (List[(int, int)], List[int], List[int]) + Returns a tuple with the following three entries: + * A list of matched track and detection indices. + * A list of unmatched track indices. + * A list of unmatched detection indices. + """ + if track_indices is None: + track_indices = list(range(len(tracks))) + if detection_indices is None: + detection_indices = list(range(len(detections))) + + unmatched_detections = detection_indices + matches = [] + track_indices_l = [ + k for k in track_indices + # if tracks[k].time_since_update == 1 + level + ] + matches_l, _, unmatched_detections = \ + min_cost_matching( + distance_metric, max_distance, tracks, detections, + track_indices_l, unmatched_detections) + matches += matches_l + unmatched_tracks = list(set(track_indices) - set(k for k, _ in matches)) + return matches, unmatched_tracks, unmatched_detections + + +def gate_cost_matrix( + cost_matrix, tracks, detections, track_indices, detection_indices, + gated_cost=INFTY_COST, only_position=False): + """Invalidate infeasible entries in cost matrix based on the state + distributions obtained by Kalman filtering. + Parameters + ---------- + kf : The Kalman filter. + cost_matrix : ndarray + The NxM dimensional cost matrix, where N is the number of track indices + and M is the number of detection indices, such that entry (i, j) is the + association cost between `tracks[track_indices[i]]` and + `detections[detection_indices[j]]`. + tracks : List[track.Track] + A list of predicted tracks at the current time step. + detections : List[detection.Detection] + A list of detections at the current time step. + track_indices : List[int] + List of track indices that maps rows in `cost_matrix` to tracks in + `tracks` (see description above). + detection_indices : List[int] + List of detection indices that maps columns in `cost_matrix` to + detections in `detections` (see description above). + gated_cost : Optional[float] + Entries in the cost matrix corresponding to infeasible associations are + set this value. Defaults to a very large value. + only_position : Optional[bool] + If True, only the x, y position of the state distribution is considered + during gating. Defaults to False. + Returns + ------- + ndarray + Returns the modified cost matrix. + """ + gating_dim = 2 if only_position else 4 + gating_threshold = kalman_filter.chi2inv95[gating_dim] + measurements = np.asarray( + [detections[i].to_xyah() for i in detection_indices]) + for row, track_idx in enumerate(track_indices): + track = tracks[track_idx] + gating_distance = track.kf.gating_distance(track.mean, track.covariance, measurements, only_position) + cost_matrix[row, gating_distance > gating_threshold] = gated_cost + cost_matrix[row] = 0.995 * cost_matrix[row] + (1 - 0.995) * gating_distance + return cost_matrix \ No newline at end of file diff --git a/aibox/strongsort/log.py b/aibox/strongsort/log.py new file mode 100644 index 00000000..5b8c9409 --- /dev/null +++ b/aibox/strongsort/log.py @@ -0,0 +1,17 @@ +import logging + + +def get_logger(name='root'): + formatter = logging.Formatter( + # fmt='%(asctime)s [%(levelname)s]: %(filename)s(%(funcName)s:%(lineno)s) >> %(message)s') + fmt='%(asctime)s [%(levelname)s]: %(message)s', datefmt='%Y-%m-%d %H:%M:%S') + + handler = logging.StreamHandler() + handler.setFormatter(formatter) + + logger = logging.getLogger(name) + logger.setLevel(logging.INFO) + logger.addHandler(handler) + return logger + + diff --git a/aibox/strongsort/nn_matching.py b/aibox/strongsort/nn_matching.py new file mode 100644 index 00000000..75bb65e7 --- /dev/null +++ b/aibox/strongsort/nn_matching.py @@ -0,0 +1,163 @@ +import numpy as np +import sys +import torch +sys.path.append('strong_sort/deep/reid') +from torchreid.reid.metrics.distance import compute_distance_matrix + + +def _pdist(a, b): + """Compute pair-wise squared distance between points in `a` and `b`. + Parameters + ---------- + a : array_like + An NxM matrix of N samples of dimensionality M. + b : array_like + An LxM matrix of L samples of dimensionality M. + Returns + ------- + ndarray + Returns a matrix of size len(a), len(b) such that eleement (i, j) + contains the squared distance between `a[i]` and `b[j]`. + """ + a, b = np.asarray(a), np.asarray(b) + if len(a) == 0 or len(b) == 0: + return np.zeros((len(a), len(b))) + a2, b2 = np.square(a).sum(axis=1), np.square(b).sum(axis=1) + r2 = -2. * np.dot(a, b.T) + a2[:, None] + b2[None, :] + r2 = np.clip(r2, 0., float(np.inf)) + return r2 + + +def _cosine_distance(a, b, data_is_normalized=False): + """Compute pair-wise cosine distance between points in `a` and `b`. + Parameters + ---------- + a : array_like + An NxM matrix of N samples of dimensionality M. + b : array_like + An LxM matrix of L samples of dimensionality M. + data_is_normalized : Optional[bool] + If True, assumes rows in a and b are unit length vectors. + Otherwise, a and b are explicitly normalized to lenght 1. + Returns + ------- + ndarray + Returns a matrix of size len(a), len(b) such that eleement (i, j) + contains the squared distance between `a[i]` and `b[j]`. + """ + if not data_is_normalized: + a = np.asarray(a) / np.linalg.norm(a, axis=1, keepdims=True) + b = np.asarray(b) / np.linalg.norm(b, axis=1, keepdims=True) + return 1. - np.dot(a, b.T) + + +def _nn_euclidean_distance(x, y): + """ Helper function for nearest neighbor distance metric (Euclidean). + Parameters + ---------- + x : ndarray + A matrix of N row-vectors (sample points). + y : ndarray + A matrix of M row-vectors (query points). + Returns + ------- + ndarray + A vector of length M that contains for each entry in `y` the + smallest Euclidean distance to a sample in `x`. + """ + x_ = torch.from_numpy(np.asarray(x) / np.linalg.norm(x, axis=1, keepdims=True)) + y_ = torch.from_numpy(np.asarray(y) / np.linalg.norm(y, axis=1, keepdims=True)) + distances = compute_distance_matrix(x_, y_, metric='euclidean') + return np.maximum(0.0, torch.min(distances, axis=0)[0].numpy()) + + +def _nn_cosine_distance(x, y): + """ Helper function for nearest neighbor distance metric (cosine). + Parameters + ---------- + x : ndarray + A matrix of N row-vectors (sample points). + y : ndarray + A matrix of M row-vectors (query points). + Returns + ------- + ndarray + A vector of length M that contains for each entry in `y` the + smallest cosine distance to a sample in `x`. + """ + x_ = torch.from_numpy(np.asarray(x)) + y_ = torch.from_numpy(np.asarray(y)) + distances = compute_distance_matrix(x_, y_, metric='cosine') + distances = distances.cpu().detach().numpy() + return distances.min(axis=0) + + +class NearestNeighborDistanceMetric(object): + """ + A nearest neighbor distance metric that, for each target, returns + the closest distance to any sample that has been observed so far. + Parameters + ---------- + metric : str + Either "euclidean" or "cosine". + matching_threshold: float + The matching threshold. Samples with larger distance are considered an + invalid match. + budget : Optional[int] + If not None, fix samples per class to at most this number. Removes + the oldest samples when the budget is reached. + Attributes + ---------- + samples : Dict[int -> List[ndarray]] + A dictionary that maps from target identities to the list of samples + that have been observed so far. + """ + + def __init__(self, metric, matching_threshold, budget=None): + if metric == "euclidean": + self._metric = _nn_euclidean_distance + elif metric == "cosine": + self._metric = _nn_cosine_distance + else: + raise ValueError( + "Invalid metric; must be either 'euclidean' or 'cosine'") + self.matching_threshold = matching_threshold + self.budget = budget + self.samples = {} + + def partial_fit(self, features, targets, active_targets): + """Update the distance metric with new data. + Parameters + ---------- + features : ndarray + An NxM matrix of N features of dimensionality M. + targets : ndarray + An integer array of associated target identities. + active_targets : List[int] + A list of targets that are currently present in the scene. + """ + for feature, target in zip(features, targets): + self.samples.setdefault(target, []).append(feature) + if self.budget is not None: + self.samples[target] = self.samples[target][-self.budget:] + self.samples = {k: self.samples[k] for k in active_targets} + + def distance(self, features, targets): + """Compute distance between features and targets. + Parameters + ---------- + features : ndarray + An NxM matrix of N features of dimensionality M. + targets : List[int] + A list of targets to match the given `features` against. + Returns + ------- + ndarray + Returns a cost matrix of shape len(targets), len(features), where + element (i, j) contains the closest squared distance between + `targets[i]` and `features[j]`. + """ + cost_matrix = np.zeros((len(targets), len(features))) + for i, target in enumerate(targets): + cost_matrix[i, :] = self._metric(self.samples[target], features) + return cost_matrix \ No newline at end of file diff --git a/aibox/strongsort/parser.py b/aibox/strongsort/parser.py new file mode 100644 index 00000000..bf3feb1e --- /dev/null +++ b/aibox/strongsort/parser.py @@ -0,0 +1,41 @@ +import os +import yaml +from easydict import EasyDict as edict + + +class YamlParser(edict): + """ + This is yaml parser based on EasyDict. + """ + + def __init__(self, cfg_dict=None, config_file=None): + if cfg_dict is None: + cfg_dict = {} + + if config_file is not None: + assert(os.path.isfile(config_file)) + with open(config_file, 'r') as fo: + yaml_ = yaml.load(fo.read(), Loader=yaml.FullLoader) + cfg_dict.update(yaml_) + + super(YamlParser, self).__init__(cfg_dict) + + def merge_from_file(self, config_file): + with open(config_file, 'r') as fo: + yaml_ = yaml.load(fo.read(), Loader=yaml.FullLoader) + self.update(yaml_) + + def merge_from_dict(self, config_dict): + self.update(config_dict) + + +def get_config(config_file=None): + return YamlParser(config_file=config_file) + + +if __name__ == "__main__": + cfg = YamlParser(config_file="../configs/yolov3.yaml") + cfg.merge_from_file("../configs/strong_sort.yaml") + + import ipdb + ipdb.set_trace() diff --git a/aibox/strongsort/preprocessing.py b/aibox/strongsort/preprocessing.py new file mode 100644 index 00000000..084ecfc6 --- /dev/null +++ b/aibox/strongsort/preprocessing.py @@ -0,0 +1,71 @@ +import numpy as np + + +def non_max_suppression(boxes, max_bbox_overlap, scores=None): + """Suppress overlapping detections. + + Original code from [1]_ has been adapted to include confidence score. + + .. [1] http://www.pyimagesearch.com/2015/02/16/ + faster-non-maximum-suppression-python/ + + Examples + -------- + + >>> boxes = [d.roi for d in detections] + >>> scores = [d.confidence for d in detections] + >>> indices = non_max_suppression(boxes, max_bbox_overlap, scores) + >>> detections = [detections[i] for i in indices] + + Parameters + ---------- + boxes : ndarray + Array of ROIs (x, y, width, height). + max_bbox_overlap : float + ROIs that overlap more than this values are suppressed. + scores : Optional[array_like] + Detector confidence score. + + Returns + ------- + List[int] + Returns indices of detections that have survived non-maxima suppression. + + """ + if len(boxes) == 0: + return [] + + boxes = boxes.astype(np.float) + pick = [] + + x1 = boxes[:, 0] + y1 = boxes[:, 1] + x2 = boxes[:, 2] + boxes[:, 0] + y2 = boxes[:, 3] + boxes[:, 1] + + area = (x2 - x1 + 1) * (y2 - y1 + 1) + if scores is not None: + idxs = np.argsort(scores) + else: + idxs = np.argsort(y2) + + while len(idxs) > 0: + last = len(idxs) - 1 + i = idxs[last] + pick.append(i) + + xx1 = np.maximum(x1[i], x1[idxs[:last]]) + yy1 = np.maximum(y1[i], y1[idxs[:last]]) + xx2 = np.minimum(x2[i], x2[idxs[:last]]) + yy2 = np.minimum(y2[i], y2[idxs[:last]]) + + w = np.maximum(0, xx2 - xx1 + 1) + h = np.maximum(0, yy2 - yy1 + 1) + + overlap = (w * h) / area[idxs[:last]] + + idxs = np.delete( + idxs, np.concatenate( + ([last], np.where(overlap > max_bbox_overlap)[0]))) + + return pick diff --git a/aibox/strongsort/reid_model_factory.py b/aibox/strongsort/reid_model_factory.py new file mode 100644 index 00000000..8536683c --- /dev/null +++ b/aibox/strongsort/reid_model_factory.py @@ -0,0 +1,125 @@ +__model_types = [ + 'resnet50', 'mlfn', 'hacnn', 'mobilenetv2_x1_0', 'mobilenetv2_x1_4', + 'osnet_x1_0', 'osnet_x0_75', 'osnet_x0_5', 'osnet_x0_25', + 'osnet_ibn_x1_0', 'osnet_ain_x1_0'] + +__trained_urls = { + + # market1501 models ######################################################## + 'resnet50_market1501.pt': + 'https://drive.google.com/uc?id=1dUUZ4rHDWohmsQXCRe2C_HbYkzz94iBV', + 'resnet50_dukemtmcreid.pt': + 'https://drive.google.com/uc?id=17ymnLglnc64NRvGOitY3BqMRS9UWd1wg', + 'resnet50_msmt17.pt': + 'https://drive.google.com/uc?id=1ep7RypVDOthCRIAqDnn4_N-UhkkFHJsj', + + 'resnet50_fc512_market1501.pt': + 'https://drive.google.com/uc?id=1kv8l5laX_YCdIGVCetjlNdzKIA3NvsSt', + 'resnet50_fc512_dukemtmcreid.pt': + 'https://drive.google.com/uc?id=13QN8Mp3XH81GK4BPGXobKHKyTGH50Rtx', + 'resnet50_fc512_msmt17.pt': + 'https://drive.google.com/uc?id=1fDJLcz4O5wxNSUvImIIjoaIF9u1Rwaud', + + 'mlfn_market1501.pt': + 'https://drive.google.com/uc?id=1wXcvhA_b1kpDfrt9s2Pma-MHxtj9pmvS', + 'mlfn_dukemtmcreid.pt': + 'https://drive.google.com/uc?id=1rExgrTNb0VCIcOnXfMsbwSUW1h2L1Bum', + 'mlfn_msmt17.pt': + 'https://drive.google.com/uc?id=18JzsZlJb3Wm7irCbZbZ07TN4IFKvR6p-', + + 'hacnn_market1501.pt': + 'https://drive.google.com/uc?id=1LRKIQduThwGxMDQMiVkTScBwR7WidmYF', + 'hacnn_dukemtmcreid.pt': + 'https://drive.google.com/uc?id=1zNm6tP4ozFUCUQ7Sv1Z98EAJWXJEhtYH', + 'hacnn_msmt17.pt': + 'https://drive.google.com/uc?id=1MsKRtPM5WJ3_Tk2xC0aGOO7pM3VaFDNZ', + + 'mobilenetv2_x1_0_market1501.pt': + 'https://drive.google.com/uc?id=18DgHC2ZJkjekVoqBWszD8_Xiikz-fewp', + 'mobilenetv2_x1_0_dukemtmcreid.pt': + 'https://drive.google.com/uc?id=1q1WU2FETRJ3BXcpVtfJUuqq4z3psetds', + 'mobilenetv2_x1_0_msmt17.pt': + 'https://drive.google.com/uc?id=1j50Hv14NOUAg7ZeB3frzfX-WYLi7SrhZ', + + 'mobilenetv2_x1_4_market1501.pt': + 'https://drive.google.com/uc?id=1t6JCqphJG-fwwPVkRLmGGyEBhGOf2GO5', + 'mobilenetv2_x1_4_dukemtmcreid.pt': + 'https://drive.google.com/uc?id=12uD5FeVqLg9-AFDju2L7SQxjmPb4zpBN', + 'mobilenetv2_x1_4_msmt17.pt': + 'https://drive.google.com/uc?id=1ZY5P2Zgm-3RbDpbXM0kIBMPvspeNIbXz', + + 'osnet_x1_0_market1501.pt': + 'https://drive.google.com/uc?id=1vduhq5DpN2q1g4fYEZfPI17MJeh9qyrA', + 'osnet_x1_0_dukemtmcreid.pt': + 'https://drive.google.com/uc?id=1QZO_4sNf4hdOKKKzKc-TZU9WW1v6zQbq', + 'osnet_x1_0_msmt17.pt': + 'https://drive.google.com/uc?id=112EMUfBPYeYg70w-syK6V6Mx8-Qb9Q1M', + + 'osnet_x0_75_market1501.pt': + 'https://drive.google.com/uc?id=1ozRaDSQw_EQ8_93OUmjDbvLXw9TnfPer', + 'osnet_x0_75_dukemtmcreid.pt': + 'https://drive.google.com/uc?id=1IE3KRaTPp4OUa6PGTFL_d5_KQSJbP0Or', + 'osnet_x0_75_msmt17.pt': + 'https://drive.google.com/uc?id=1QEGO6WnJ-BmUzVPd3q9NoaO_GsPNlmWc', + + 'osnet_x0_5_market1501.pt': + 'https://drive.google.com/uc?id=1PLB9rgqrUM7blWrg4QlprCuPT7ILYGKT', + 'osnet_x0_5_dukemtmcreid.pt': + 'https://drive.google.com/uc?id=1KoUVqmiST175hnkALg9XuTi1oYpqcyTu', + 'osnet_x0_5_msmt17.pt': + 'https://drive.google.com/uc?id=1UT3AxIaDvS2PdxzZmbkLmjtiqq7AIKCv', + + 'osnet_x0_25_market1501.pt': + 'https://drive.google.com/uc?id=1z1UghYvOTtjx7kEoRfmqSMu-z62J6MAj', + 'osnet_x0_25_dukemtmcreid.pt': + 'https://drive.google.com/uc?id=1eumrtiXT4NOspjyEV4j8cHmlOaaCGk5l', + 'osnet_x0_25_msmt17.pt': + 'https://drive.google.com/uc?id=1sSwXSUlj4_tHZequ_iZ8w_Jh0VaRQMqF', + + ####### market1501 models ################################################## + 'resnet50_msmt17.pt': + 'https://drive.google.com/uc?id=1yiBteqgIZoOeywE8AhGmEQl7FTVwrQmf', + 'osnet_x1_0_msmt17.pt': + 'https://drive.google.com/uc?id=1IosIFlLiulGIjwW3H8uMRmx3MzPwf86x', + 'osnet_x0_75_msmt17.pt': + 'https://drive.google.com/uc?id=1fhjSS_7SUGCioIf2SWXaRGPqIY9j7-uw', + + 'osnet_x0_5_msmt17.pt': + 'https://drive.google.com/uc?id=1DHgmb6XV4fwG3n-CnCM0zdL9nMsZ9_RF', + 'osnet_x0_25_msmt17.pt': + 'https://drive.google.com/uc?id=1Kkx2zW89jq_NETu4u42CFZTMVD5Hwm6e', + 'osnet_ibn_x1_0_msmt17.pt': + 'https://drive.google.com/uc?id=1q3Sj2ii34NlfxA4LvmHdWO_75NDRmECJ', + 'osnet_ain_x1_0_msmt17.pt': + 'https://drive.google.com/uc?id=1SigwBE6mPdqiJMqhuIY4aqC7--5CsMal', +} + + +def show_downloadeable_models(): + print('\nAvailable .pt ReID models for automatic download') + print(list(__trained_urls.keys())) + + +def get_model_url(model): + model = str(model).rsplit('/', 1)[-1] + if model in __trained_urls: + return __trained_urls[model] + else: + None + + +def is_model_in_model_types(model): + model = str(model).rsplit('/', 1)[-1].split('.')[0] + if model in __model_types: + return True + else: + return False + + +def get_model_name(model): + model = str(model).rsplit('/', 1)[-1].split('.')[0] + for x in __model_types: + if x in model: + return x + return None + diff --git a/aibox/strongsort/reid_multibackend.py b/aibox/strongsort/reid_multibackend.py new file mode 100644 index 00000000..d38d4c9f --- /dev/null +++ b/aibox/strongsort/reid_multibackend.py @@ -0,0 +1,208 @@ +import torch.nn as nn +import torch +from pathlib import Path +import numpy as np +import torchvision.transforms as transforms +import cv2 +from collections import OrderedDict, namedtuple +import gdown +from os.path import exists as file_exists +from strongsort.reid_model_factory import show_downloadeable_models, get_model_url, get_model_name +from yolov5.utils.general import LOGGER, check_version +from torchreid.reid.utils import FeatureExtractor + +def check_suffix(file='yolov5s.pt', suffix=('.pt',), msg=''): + # Check file(s) for acceptable suffix + if file and suffix: + if isinstance(suffix, str): + suffix = [suffix] + for f in file if isinstance(file, (list, tuple)) else [file]: + s = Path(f).suffix.lower() # file suffix + if len(s): + assert s in suffix, f"{msg}{f} acceptable suffix is {suffix}" + + +class ReIDDetectMultiBackend(nn.Module): + # ReID models MultiBackend class for python inference on various backends + def __init__(self, weights='osnet_x0_25_msmt17.pt', device=torch.device('cpu'), fp16=False): + super().__init__() + w = str(weights[0] if isinstance(weights, list) else weights) + self.pt, self.jit, self.onnx, self.xml, self.engine, self.coreml, \ + self.saved_model, self.pb, self.tflite, self.edgetpu, self.tfjs = self.model_type(w) # get backend + fp16 &= (self.pt or self.jit or self.onnx or self.engine) and device.type != 'cpu' # FP16 + self.fp16 = fp16 + if self.pt: # PyTorch + model_name = get_model_name(weights) + model_url = get_model_url(weights) + + if not file_exists(weights) and model_url is not None: + gdown.download(model_url, str(weights), quiet=False) + elif file_exists(weights): + pass + elif model_url is None: + print('No URL associated to the chosen DeepSort weights. Choose between:') + show_downloadeable_models() + exit() + + self.extractor = FeatureExtractor( + # get rid of dataset information DeepSort model name + model_name=model_name, + model_path=weights, + device=str(device) + ) + + self.extractor.model.half() if fp16 else self.extractor.model.float() + elif self.jit: + LOGGER.info(f'Loading {w} for TorchScript inference...') + self.model = torch.jit.load(weights) + self.model.half() if fp16 else self.model.float() + + elif self.onnx: # ONNX Runtime + LOGGER.info(f'Loading {w} for ONNX Runtime inference...') + cuda = torch.cuda.is_available() + #check_requirements(('onnx', 'onnxruntime-gpu' if cuda else 'onnxruntime')) + import onnxruntime + providers = ['CUDAExecutionProvider', 'CPUExecutionProvider'] if cuda else ['CPUExecutionProvider'] + self.session = onnxruntime.InferenceSession(w, providers=providers) + + elif self.engine: # TensorRT + LOGGER.info(f'Loading {w} for TensorRT inference...') + import tensorrt as trt # https://developer.nvidia.com/nvidia-tensorrt-download + check_version(trt.__version__, '7.0.0', hard=True) # require tensorrt>=7.0.0 + Binding = namedtuple('Binding', ('name', 'dtype', 'shape', 'data', 'ptr')) + logger = trt.Logger(trt.Logger.INFO) + with open(w, 'rb') as f, trt.Runtime(logger) as runtime: + model = runtime.deserialize_cuda_engine(f.read()) + self.context = model.create_execution_context() + self.bindings = OrderedDict() + fp16 = False # default updated below + self.dynamic = False + for index in range(model.num_bindings): + name = model.get_binding_name(index) + dtype = trt.nptype(model.get_binding_dtype(index)) + if model.binding_is_input(index): + if -1 in tuple(model.get_binding_shape(index)): # dynamic + self.dynamic = True + context.set_binding_shape(index, tuple(model.get_profile_shape(0, index)[2])) + if dtype == np.float16: + fp16 = True + shape = tuple(self.context.get_binding_shape(index)) + data = torch.from_numpy(np.empty(shape, dtype=np.dtype(dtype))).to(device) + self.bindings[name] = Binding(name, dtype, shape, data, int(data.data_ptr())) + self.binding_addrs = OrderedDict((n, d.ptr) for n, d in self.bindings.items()) + batch_size = self.bindings['images'].shape[0] # if dynamic, this is instead max batch size + + elif self.tflite: + LOGGER.info(f'Loading {w} for TensorFlow Lite inference...') + try: # https://coral.ai/docs/edgetpu/tflite-python/#update-existing-tf-lite-code-for-the-edge-tpu + from tflite_runtime.interpreter import Interpreter, load_delegate + except ImportError: + import tensorflow as tf + Interpreter, load_delegate = tf.lite.Interpreter, tf.lite.experimental.load_delegate, + self.interpreter = tf.lite.Interpreter(model_path=weights) + self.interpreter.allocate_tensors() + # Get input and output tensors. + self.input_details = self.interpreter.get_input_details() + self.output_details = self.interpreter.get_output_details() + + # Test model on random input data. + input_data = np.array(np.random.random_sample((1,256,128,3)), dtype=np.float32) + self.interpreter.set_tensor(self.input_details[0]['index'], input_data) + + self.interpreter.invoke() + + # The function `get_tensor()` returns a copy of the tensor data. + output_data = self.interpreter.get_tensor(self.output_details[0]['index']) + else: + print('This model framework is not supported yet!') + exit() + + pixel_mean=[0.485, 0.456, 0.406] + pixel_std=[0.229, 0.224, 0.225] + self.norm = transforms.Compose([ + transforms.ToTensor(), + transforms.Normalize(pixel_mean, pixel_std), + ]) + self.size = (256, 128) + self.device = device + + + @staticmethod + def model_type(p='path/to/model.pt'): + # Return model type from model path, i.e. path='path/to/model.onnx' -> type=onnx + from yolov5.export import export_formats + suffixes = list(export_formats().Suffix) + ['.xml'] # export suffixes + check_suffix(p, suffixes) # checks + p = Path(p).name # eliminate trailing separators + pt, jit, onnx, xml, engine, coreml, saved_model, pb, tflite, edgetpu, tfjs, paddle, xml2 = (s in p for s in suffixes) + xml |= xml2 # *_openvino_model or *.xml + tflite &= not edgetpu # *.tflite + return pt, jit, onnx, xml, engine, coreml, saved_model, pb, tflite, edgetpu, tfjs + + def warmup(self, imgsz=(1, 256, 128, 3)): + # Warmup model by running inference once + warmup_types = self.pt, self.jit, self.onnx, self.engine, self.saved_model, self.pb + if any(warmup_types) and self.device.type != 'cpu': + im = torch.zeros(*imgsz, dtype=torch.half if self.fp16 else torch.float, device=self.device) # input + im = im.cpu().numpy() + for _ in range(2 if self.jit else 1): # + self.forward(im) # warmup + + def preprocess(self, im_crops): + def _resize(im, size): + return cv2.resize(im.astype(np.float32), size) + + im = torch.cat([self.norm(_resize(im, self.size)).unsqueeze(0) for im in im_crops], dim=0).float() + im = im.float().to(device=self.device) + return im + + def forward(self, im_batch): + im_batch = self.preprocess(im_batch) + b, ch, h, w = im_batch.shape # batch, channel, height, width + features = [] + for i in range(0, im_batch.shape[0]): + im = im_batch[i, :, :, :].unsqueeze(0) + if self.fp16 and im.dtype != torch.float16: + im = im.half() # to FP16 + if self.pt: # PyTorch + y = self.extractor.model(im)[0] + elif self.jit: # TorchScript + y = self.model(im)[0] + elif self.onnx: # ONNX Runtime + im = im.permute(0, 1, 3, 2).cpu().numpy() # torch to numpy + y = self.session.run([self.session.get_outputs()[0].name], {self.session.get_inputs()[0].name: im})[0] + elif self.xml: # OpenVINO + im = im.cpu().numpy() # FP32 + y = self.executable_network([im])[self.output_layer] + elif self.engine: # TensorRT + im = im.permute(0, 1, 3, 2) + if self.dynamic and im.shape != self.bindings['images'].shape: + i_in, i_out = (self.model.get_binding_index(x) for x in ('images', 'output')) + self.context.set_binding_shape(i_in, im.shape) # reshape if dynamic + self.bindings['images'] = self.bindings['images']._replace(shape=im.shape) + self.bindings['output'].data.resize_(tuple(self.context.get_binding_shape(i_out))) + s = self.bindings['images'].shape + assert im.shape == s, f"input size {im.shape} {'>' if self.dynamic else 'not equal to'} max model size {s}" + self.binding_addrs['images'] = int(im.data_ptr()) + self.context.execute_v2(list(self.binding_addrs.values())) + y = self.bindings['output'].data + else: # TensorFlow (SavedModel, GraphDef, Lite, Edge TPU) + im = im.permute(0, 3, 2, 1).cpu().numpy() # torch BCHW to numpy BHWC shape(1,320,192,3) + input, output = self.input_details[0], self.output_details[0] + int8 = input['dtype'] == np.uint8 # is TFLite quantized uint8 model + if int8: + scale, zero_point = input['quantization'] + im = (im / scale + zero_point).astype(np.uint8) # de-scale + self.interpreter.set_tensor(input['index'], im) + self.interpreter.invoke() + y = torch.tensor(self.interpreter.get_tensor(output['index'])) + if int8: + scale, zero_point = output['quantization'] + y = (y.astype(np.float32) - zero_point) * scale # re-scale + + if isinstance(y, np.ndarray): + y = torch.tensor(y, device=self.device) + features.append(y.squeeze()) + + + return features \ No newline at end of file diff --git a/aibox/strongsort/strong_sort.py b/aibox/strongsort/strong_sort.py new file mode 100644 index 00000000..487e902e --- /dev/null +++ b/aibox/strongsort/strong_sort.py @@ -0,0 +1,123 @@ +import numpy as np +import torch +from strongsort.nn_matching import NearestNeighborDistanceMetric +from strongsort.detection import Detection +from strongsort.tracker import Tracker +from strongsort.reid_multibackend import ReIDDetectMultiBackend + +__all__ = ['StrongSORT'] + + +class StrongSORT(object): + def __init__(self, + model_weights, + device, + fp16= False, + max_dist=0.2, + max_iou_distance=0.7, + max_age=70, n_init=3, + nn_budget=100, + mc_lambda=0.995, + ema_alpha=0.9 + ): + + self.model = ReIDDetectMultiBackend(weights=model_weights, device=device, fp16=fp16) + + self.max_dist = max_dist + metric = NearestNeighborDistanceMetric( + "cosine", self.max_dist, nn_budget) + self.tracker = Tracker( + metric, max_iou_distance=max_iou_distance, max_age=max_age, n_init=n_init) + + def update(self, bbox_xywh, confidences, classes, ori_img): + self.height, self.width = ori_img.shape[:2] + # generate detections + features = self._get_features(bbox_xywh, ori_img) + bbox_tlwh = self._xywh_to_tlwh(bbox_xywh) + detections = [Detection(bbox_tlwh[i], conf, features[i].cpu().detach().numpy()) for i, conf in enumerate( + confidences)] + + # run on non-maximum supression + boxes = np.array([d.tlwh for d in detections]) + scores = np.array([d.confidence for d in detections]) + + # update tracker + self.tracker.predict() + self.tracker.update(detections, classes, confidences) + + # output bbox identities + outputs = [] + for track in self.tracker.tracks: + if not track.is_confirmed() or track.time_since_update > 1: + continue + + box = track.to_tlwh() + x1, y1, x2, y2 = self._tlwh_to_xyxy(box) + + track_id = track.track_id + class_id = track.class_id + conf = track.conf + outputs.append(np.array([x1, y1, x2, y2, track_id, class_id, conf])) + if len(outputs) > 0: + outputs = np.stack(outputs, axis=0) + return outputs + + """ + TODO: + Convert bbox from xc_yc_w_h to xtl_ytl_w_h + Thanks JieChen91@github.com for reporting this bug! + """ + @staticmethod + def _xywh_to_tlwh(bbox_xywh): + if isinstance(bbox_xywh, np.ndarray): + bbox_tlwh = bbox_xywh.copy() + elif isinstance(bbox_xywh, torch.Tensor): + bbox_tlwh = bbox_xywh.clone() + bbox_tlwh[:, 0] = bbox_xywh[:, 0] - bbox_xywh[:, 2] / 2. + bbox_tlwh[:, 1] = bbox_xywh[:, 1] - bbox_xywh[:, 3] / 2. + return bbox_tlwh + + def _xywh_to_xyxy(self, bbox_xywh): + x, y, w, h = bbox_xywh + x1 = max(int(x - w / 2), 0) + x2 = min(int(x + w / 2), self.width - 1) + y1 = max(int(y - h / 2), 0) + y2 = min(int(y + h / 2), self.height - 1) + return x1, y1, x2, y2 + + def _tlwh_to_xyxy(self, bbox_tlwh): + """ + TODO: + Convert bbox from xtl_ytl_w_h to xc_yc_w_h + Thanks JieChen91@github.com for reporting this bug! + """ + x, y, w, h = bbox_tlwh + x1 = max(int(x), 0) + x2 = min(int(x+w), self.width - 1) + y1 = max(int(y), 0) + y2 = min(int(y+h), self.height - 1) + return x1, y1, x2, y2 + + def increment_ages(self): + self.tracker.increment_ages() + + def _xyxy_to_tlwh(self, bbox_xyxy): + x1, y1, x2, y2 = bbox_xyxy + + t = x1 + l = y1 + w = int(x2 - x1) + h = int(y2 - y1) + return t, l, w, h + + def _get_features(self, bbox_xywh, ori_img): + im_crops = [] + for box in bbox_xywh: + x1, y1, x2, y2 = self._xywh_to_xyxy(box) + im = ori_img[y1:y2, x1:x2] + im_crops.append(im) + if im_crops: + features = self.model(im_crops) + else: + features = np.array([]) + return features diff --git a/aibox/strongsort/tools.py b/aibox/strongsort/tools.py new file mode 100644 index 00000000..8821ddeb --- /dev/null +++ b/aibox/strongsort/tools.py @@ -0,0 +1,39 @@ +from functools import wraps +from time import time + + +def is_video(ext: str): + """ + Returns true if ext exists in + allowed_exts for video files. + + Args: + ext: + + Returns: + + """ + + allowed_exts = ('.mp4', '.webm', '.ogg', '.avi', '.wmv', '.mkv', '.3gp') + return any((ext.endswith(x) for x in allowed_exts)) + + +def tik_tok(func): + """ + keep track of time for each process. + Args: + func: + + Returns: + + """ + @wraps(func) + def _time_it(*args, **kwargs): + start = time() + try: + return func(*args, **kwargs) + finally: + end_ = time() + print("time: {:.03f}s, fps: {:.03f}".format(end_ - start, 1 / (end_ - start))) + + return _time_it diff --git a/aibox/strongsort/track.py b/aibox/strongsort/track.py new file mode 100644 index 00000000..2731f7fe --- /dev/null +++ b/aibox/strongsort/track.py @@ -0,0 +1,304 @@ +import cv2 +import numpy as np +from strongsort.kalman_filter import KalmanFilter + + +class TrackState: + """ + Enumeration type for the single target track state. Newly created tracks are + classified as `tentative` until enough evidence has been collected. Then, + the track state is changed to `confirmed`. Tracks that are no longer alive + are classified as `deleted` to mark them for removal from the set of active + tracks. + + """ + + Tentative = 1 + Confirmed = 2 + Deleted = 3 + + +class Track: + """ + A single target track with state space `(x, y, a, h)` and associated + velocities, where `(x, y)` is the center of the bounding box, `a` is the + aspect ratio and `h` is the height. + + Parameters + ---------- + mean : ndarray + Mean vector of the initial state distribution. + covariance : ndarray + Covariance matrix of the initial state distribution. + track_id : int + A unique track identifier. + n_init : int + Number of consecutive detections before the track is confirmed. The + track state is set to `Deleted` if a miss occurs within the first + `n_init` frames. + max_age : int + The maximum number of consecutive misses before the track state is + set to `Deleted`. + feature : Optional[ndarray] + Feature vector of the detection this track originates from. If not None, + this feature is added to the `features` cache. + + Attributes + ---------- + mean : ndarray + Mean vector of the initial state distribution. + covariance : ndarray + Covariance matrix of the initial state distribution. + track_id : int + A unique track identifier. + hits : int + Total number of measurement updates. + age : int + Total number of frames since first occurance. + time_since_update : int + Total number of frames since last measurement update. + state : TrackState + The current track state. + features : List[ndarray] + A cache of features. On each measurement update, the associated feature + vector is added to this list. + + """ + + def __init__(self, detection, track_id, class_id, conf, n_init, max_age, ema_alpha, + feature=None): + self.track_id = track_id + self.class_id = int(class_id) + self.hits = 1 + self.age = 1 + self.time_since_update = 0 + self.ema_alpha = ema_alpha + + self.state = TrackState.Tentative + self.features = [] + if feature is not None: + feature /= np.linalg.norm(feature) + self.features.append(feature) + + self.conf = conf + self._n_init = n_init + self._max_age = max_age + + self.kf = KalmanFilter() + self.mean, self.covariance = self.kf.initiate(detection) + + def to_tlwh(self): + """Get current position in bounding box format `(top left x, top left y, + width, height)`. + + Returns + ------- + ndarray + The bounding box. + + """ + ret = self.mean[:4].copy() + ret[2] *= ret[3] + ret[:2] -= ret[2:] / 2 + return ret + + def to_tlbr(self): + """Get kf estimated current position in bounding box format `(min x, miny, max x, + max y)`. + + Returns + ------- + ndarray + The predicted kf bounding box. + + """ + ret = self.to_tlwh() + ret[2:] = ret[:2] + ret[2:] + return ret + + + def ECC(self, src, dst, warp_mode = cv2.MOTION_EUCLIDEAN, eps = 1e-5, + max_iter = 100, scale = 0.1, align = False): + """Compute the warp matrix from src to dst. + Parameters + ---------- + src : ndarray + An NxM matrix of source img(BGR or Gray), it must be the same format as dst. + dst : ndarray + An NxM matrix of target img(BGR or Gray). + warp_mode: flags of opencv + translation: cv2.MOTION_TRANSLATION + rotated and shifted: cv2.MOTION_EUCLIDEAN + affine(shift,rotated,shear): cv2.MOTION_AFFINE + homography(3d): cv2.MOTION_HOMOGRAPHY + eps: float + the threshold of the increment in the correlation coefficient between two iterations + max_iter: int + the number of iterations. + scale: float or [int, int] + scale_ratio: float + scale_size: [W, H] + align: bool + whether to warp affine or perspective transforms to the source image + Returns + ------- + warp matrix : ndarray + Returns the warp matrix from src to dst. + if motion models is homography, the warp matrix will be 3x3, otherwise 2x3 + src_aligned: ndarray + aligned source image of gray + """ + + # skip if current and previous frame are not initialized (1st inference) + if (src.any() or dst.any() is None): + return None, None + # skip if current and previous fames are not the same size + elif (src.shape != dst.shape): + return None, None + + # BGR2GRAY + if src.ndim == 3: + # Convert images to grayscale + src = cv2.cvtColor(src, cv2.COLOR_BGR2GRAY) + dst = cv2.cvtColor(dst, cv2.COLOR_BGR2GRAY) + + # make the imgs smaller to speed up + if scale is not None: + if isinstance(scale, float) or isinstance(scale, int): + if scale != 1: + src_r = cv2.resize(src, (0, 0), fx = scale, fy = scale,interpolation = cv2.INTER_LINEAR) + dst_r = cv2.resize(dst, (0, 0), fx = scale, fy = scale,interpolation = cv2.INTER_LINEAR) + scale = [scale, scale] + else: + src_r, dst_r = src, dst + scale = None + else: + if scale[0] != src.shape[1] and scale[1] != src.shape[0]: + src_r = cv2.resize(src, (scale[0], scale[1]), interpolation = cv2.INTER_LINEAR) + dst_r = cv2.resize(dst, (scale[0], scale[1]), interpolation=cv2.INTER_LINEAR) + scale = [scale[0] / src.shape[1], scale[1] / src.shape[0]] + else: + src_r, dst_r = src, dst + scale = None + else: + src_r, dst_r = src, dst + + # Define 2x3 or 3x3 matrices and initialize the matrix to identity + if warp_mode == cv2.MOTION_HOMOGRAPHY : + warp_matrix = np.eye(3, 3, dtype=np.float32) + else : + warp_matrix = np.eye(2, 3, dtype=np.float32) + + # Define termination criteria + criteria = (cv2.TERM_CRITERIA_EPS | cv2.TERM_CRITERIA_COUNT, max_iter, eps) + + # Run the ECC algorithm. The results are stored in warp_matrix. + try: + (cc, warp_matrix) = cv2.findTransformECC (src_r, dst_r, warp_matrix, warp_mode, criteria, None, 1) + except cv2.error as e: + return None, None + + + if scale is not None: + warp_matrix[0, 2] = warp_matrix[0, 2] / scale[0] + warp_matrix[1, 2] = warp_matrix[1, 2] / scale[1] + + if align: + sz = src.shape + if warp_mode == cv2.MOTION_HOMOGRAPHY: + # Use warpPerspective for Homography + src_aligned = cv2.warpPerspective(src, warp_matrix, (sz[1],sz[0]), flags=cv2.INTER_LINEAR) + else : + # Use warpAffine for Translation, Euclidean and Affine + src_aligned = cv2.warpAffine(src, warp_matrix, (sz[1],sz[0]), flags=cv2.INTER_LINEAR) + return warp_matrix, src_aligned + else: + return warp_matrix, None + + + def get_matrix(self, matrix): + eye = np.eye(3) + dist = np.linalg.norm(eye - matrix) + if dist < 100: + return matrix + else: + return eye + + def camera_update(self, previous_frame, next_frame): + warp_matrix, src_aligned = self.ECC(previous_frame, next_frame) + if warp_matrix is None and src_aligned is None: + return + [a,b] = warp_matrix + warp_matrix=np.array([a,b,[0,0,1]]) + warp_matrix = warp_matrix.tolist() + matrix = self.get_matrix(warp_matrix) + + x1, y1, x2, y2 = self.to_tlbr() + x1_, y1_, _ = matrix @ np.array([x1, y1, 1]).T + x2_, y2_, _ = matrix @ np.array([x2, y2, 1]).T + w, h = x2_ - x1_, y2_ - y1_ + cx, cy = x1_ + w / 2, y1_ + h / 2 + self.mean[:4] = [cx, cy, w / h, h] + + + def increment_age(self): + self.age += 1 + self.time_since_update += 1 + + def predict(self, kf): + """Propagate the state distribution to the current time step using a + Kalman filter prediction step. + + Parameters + ---------- + kf : kalman_filter.KalmanFilter + The Kalman filter. + + """ + self.mean, self.covariance = self.kf.predict(self.mean, self.covariance) + self.age += 1 + self.time_since_update += 1 + + def update(self, detection, class_id, conf): + """Perform Kalman filter measurement update step and update the feature + cache. + Parameters + ---------- + detection : Detection + The associated detection. + """ + self.conf = conf + self.class_id = int(class_id) + self.mean, self.covariance = self.kf.update(self.mean, self.covariance, detection.to_xyah(), detection.confidence) + + feature = detection.feature / np.linalg.norm(detection.feature) + + smooth_feat = self.ema_alpha * self.features[-1] + (1 - self.ema_alpha) * feature + smooth_feat /= np.linalg.norm(smooth_feat) + self.features = [smooth_feat] + + self.hits += 1 + self.time_since_update = 0 + if self.state == TrackState.Tentative and self.hits >= self._n_init: + self.state = TrackState.Confirmed + + def mark_missed(self): + """Mark this track as missed (no association at the current time step). + """ + if self.state == TrackState.Tentative: + self.state = TrackState.Deleted + elif self.time_since_update > self._max_age: + self.state = TrackState.Deleted + + def is_tentative(self): + """Returns True if this track is tentative (unconfirmed). + """ + return self.state == TrackState.Tentative + + def is_confirmed(self): + """Returns True if this track is confirmed.""" + return self.state == TrackState.Confirmed + + def is_deleted(self): + """Returns True if this track is dead and should be deleted.""" + return self.state == TrackState.Deleted diff --git a/aibox/strongsort/tracker.py b/aibox/strongsort/tracker.py new file mode 100644 index 00000000..54991cf7 --- /dev/null +++ b/aibox/strongsort/tracker.py @@ -0,0 +1,175 @@ +from __future__ import absolute_import +import numpy as np +from strongsort import kalman_filter +from strongsort import linear_assignment +from strongsort import iou_matching +from strongsort.track import Track + +class Tracker: + """ + This is the multi-target tracker. + Parameters + ---------- + metric : nn_matching.NearestNeighborDistanceMetric + A distance metric for measurement-to-track association. + max_age : int + Maximum number of missed misses before a track is deleted. + n_init : int + Number of consecutive detections before the track is confirmed. The + track state is set to `Deleted` if a miss occurs within the first + `n_init` frames. + Attributes + ---------- + metric : nn_matching.NearestNeighborDistanceMetric + The distance metric used for measurement to track association. + max_age : int + Maximum number of missed misses before a track is deleted. + n_init : int + Number of frames that a track remains in initialization phase. + kf : kalman_filter.KalmanFilter + A Kalman filter to filter target trajectories in image space. + tracks : List[Track] + The list of active tracks at the current time step. + """ + GATING_THRESHOLD = np.sqrt(kalman_filter.chi2inv95[4]) + + def __init__(self, metric, max_iou_distance=0.9, max_age=30, n_init=3, _lambda=0, ema_alpha=0.9, mc_lambda=0.995): + self.metric = metric + self.max_iou_distance = max_iou_distance + self.max_age = max_age + self.n_init = n_init + self._lambda = _lambda + self.ema_alpha = ema_alpha + self.mc_lambda = mc_lambda + + self.kf = kalman_filter.KalmanFilter() + self.tracks = [] + self._next_id = 1 + + def predict(self): + """Propagate track state distributions one time step forward. + + This function should be called once every time step, before `update`. + """ + for track in self.tracks: + track.predict(self.kf) + + def increment_ages(self): + for track in self.tracks: + track.increment_age() + track.mark_missed() + + def camera_update(self, previous_img, current_img): + for track in self.tracks: + track.camera_update(previous_img, current_img) + + def update(self, detections, classes, confidences): + """Perform measurement update and track management. + + Parameters + ---------- + detections : List[deep_sort.detection.Detection] + A list of detections at the current time step. + + """ + # Run matching cascade. + matches, unmatched_tracks, unmatched_detections = \ + self._match(detections) + + # Update track set. + for track_idx, detection_idx in matches: + self.tracks[track_idx].update( + detections[detection_idx], classes[detection_idx], confidences[detection_idx]) + for track_idx in unmatched_tracks: + self.tracks[track_idx].mark_missed() + for detection_idx in unmatched_detections: + self._initiate_track(detections[detection_idx], classes[detection_idx].item(), confidences[detection_idx].item()) + self.tracks = [t for t in self.tracks if not t.is_deleted()] + + # Update distance metric. + active_targets = [t.track_id for t in self.tracks if t.is_confirmed()] + features, targets = [], [] + for track in self.tracks: + if not track.is_confirmed(): + continue + features += track.features + targets += [track.track_id for _ in track.features] + self.metric.partial_fit(np.asarray(features), np.asarray(targets), active_targets) + + def _full_cost_metric(self, tracks, dets, track_indices, detection_indices): + """ + This implements the full lambda-based cost-metric. However, in doing so, it disregards + the possibility to gate the position only which is provided by + linear_assignment.gate_cost_matrix(). Instead, I gate by everything. + Note that the Mahalanobis distance is itself an unnormalised metric. Given the cosine + distance being normalised, we employ a quick and dirty normalisation based on the + threshold: that is, we divide the positional-cost by the gating threshold, thus ensuring + that the valid values range 0-1. + Note also that the authors work with the squared distance. I also sqrt this, so that it + is more intuitive in terms of values. + """ + # Compute First the Position-based Cost Matrix + pos_cost = np.empty([len(track_indices), len(detection_indices)]) + msrs = np.asarray([dets[i].to_xyah() for i in detection_indices]) + for row, track_idx in enumerate(track_indices): + pos_cost[row, :] = np.sqrt( + self.kf.gating_distance( + tracks[track_idx].mean, tracks[track_idx].covariance, msrs, False + ) + ) / self.GATING_THRESHOLD + pos_gate = pos_cost > 1.0 + # Now Compute the Appearance-based Cost Matrix + app_cost = self.metric.distance( + np.array([dets[i].feature for i in detection_indices]), + np.array([tracks[i].track_id for i in track_indices]), + ) + app_gate = app_cost > self.metric.matching_threshold + # Now combine and threshold + cost_matrix = self._lambda * pos_cost + (1 - self._lambda) * app_cost + cost_matrix[np.logical_or(pos_gate, app_gate)] = linear_assignment.INFTY_COST + # Return Matrix + return cost_matrix + + def _match(self, detections): + + def gated_metric(tracks, dets, track_indices, detection_indices): + features = np.array([dets[i].feature for i in detection_indices]) + targets = np.array([tracks[i].track_id for i in track_indices]) + cost_matrix = self.metric.distance(features, targets) + cost_matrix = linear_assignment.gate_cost_matrix(cost_matrix, tracks, dets, track_indices, detection_indices) + + return cost_matrix + + # Split track set into confirmed and unconfirmed tracks. + confirmed_tracks = [ + i for i, t in enumerate(self.tracks) if t.is_confirmed()] + unconfirmed_tracks = [ + i for i, t in enumerate(self.tracks) if not t.is_confirmed()] + + # Associate confirmed tracks using appearance features. + matches_a, unmatched_tracks_a, unmatched_detections = \ + linear_assignment.matching_cascade( + gated_metric, self.metric.matching_threshold, self.max_age, + self.tracks, detections, confirmed_tracks) + + # Associate remaining tracks together with unconfirmed tracks using IOU. + iou_track_candidates = unconfirmed_tracks + [ + k for k in unmatched_tracks_a if + self.tracks[k].time_since_update == 1] + unmatched_tracks_a = [ + k for k in unmatched_tracks_a if + self.tracks[k].time_since_update != 1] + matches_b, unmatched_tracks_b, unmatched_detections = \ + linear_assignment.min_cost_matching( + iou_matching.iou_cost, self.max_iou_distance, self.tracks, + detections, iou_track_candidates, unmatched_detections) + + matches = matches_a + matches_b + unmatched_tracks = list(set(unmatched_tracks_a + unmatched_tracks_b)) + return matches, unmatched_tracks, unmatched_detections + + def _initiate_track(self, detection, class_id, conf): + self.tracks.append(Track( + detection.to_xyah(), self._next_id, class_id, conf, self.n_init, self.max_age, self.ema_alpha, + detection.feature)) + self._next_id += 1 diff --git a/aibox/old/code/export.py b/aibox/yolov5/export.py similarity index 100% rename from aibox/old/code/export.py rename to aibox/yolov5/export.py diff --git a/aibox/models/__init__.py b/aibox/yolov5/models/__init__.py similarity index 100% rename from aibox/models/__init__.py rename to aibox/yolov5/models/__init__.py diff --git a/aibox/models/common.py b/aibox/yolov5/models/common.py similarity index 100% rename from aibox/models/common.py rename to aibox/yolov5/models/common.py diff --git a/aibox/models/experimental.py b/aibox/yolov5/models/experimental.py similarity index 100% rename from aibox/models/experimental.py rename to aibox/yolov5/models/experimental.py diff --git a/aibox/models/hub/anchors.yaml b/aibox/yolov5/models/hub/anchors.yaml similarity index 100% rename from aibox/models/hub/anchors.yaml rename to aibox/yolov5/models/hub/anchors.yaml diff --git a/aibox/models/hub/yolov3-spp.yaml b/aibox/yolov5/models/hub/yolov3-spp.yaml similarity index 100% rename from aibox/models/hub/yolov3-spp.yaml rename to aibox/yolov5/models/hub/yolov3-spp.yaml diff --git a/aibox/models/hub/yolov3-tiny.yaml b/aibox/yolov5/models/hub/yolov3-tiny.yaml similarity index 100% rename from aibox/models/hub/yolov3-tiny.yaml rename to aibox/yolov5/models/hub/yolov3-tiny.yaml diff --git a/aibox/models/hub/yolov3.yaml b/aibox/yolov5/models/hub/yolov3.yaml similarity index 100% rename from aibox/models/hub/yolov3.yaml rename to aibox/yolov5/models/hub/yolov3.yaml diff --git a/aibox/models/hub/yolov5-bifpn.yaml b/aibox/yolov5/models/hub/yolov5-bifpn.yaml similarity index 100% rename from aibox/models/hub/yolov5-bifpn.yaml rename to aibox/yolov5/models/hub/yolov5-bifpn.yaml diff --git a/aibox/models/hub/yolov5-fpn.yaml b/aibox/yolov5/models/hub/yolov5-fpn.yaml similarity index 100% rename from aibox/models/hub/yolov5-fpn.yaml rename to aibox/yolov5/models/hub/yolov5-fpn.yaml diff --git a/aibox/models/hub/yolov5-p2.yaml b/aibox/yolov5/models/hub/yolov5-p2.yaml similarity index 100% rename from aibox/models/hub/yolov5-p2.yaml rename to aibox/yolov5/models/hub/yolov5-p2.yaml diff --git a/aibox/models/hub/yolov5-p34.yaml b/aibox/yolov5/models/hub/yolov5-p34.yaml similarity index 100% rename from aibox/models/hub/yolov5-p34.yaml rename to aibox/yolov5/models/hub/yolov5-p34.yaml diff --git a/aibox/models/hub/yolov5-p6.yaml b/aibox/yolov5/models/hub/yolov5-p6.yaml similarity index 100% rename from aibox/models/hub/yolov5-p6.yaml rename to aibox/yolov5/models/hub/yolov5-p6.yaml diff --git a/aibox/models/hub/yolov5-p7.yaml b/aibox/yolov5/models/hub/yolov5-p7.yaml similarity index 100% rename from aibox/models/hub/yolov5-p7.yaml rename to aibox/yolov5/models/hub/yolov5-p7.yaml diff --git a/aibox/models/hub/yolov5-panet.yaml b/aibox/yolov5/models/hub/yolov5-panet.yaml similarity index 100% rename from aibox/models/hub/yolov5-panet.yaml rename to aibox/yolov5/models/hub/yolov5-panet.yaml diff --git a/aibox/models/hub/yolov5l6.yaml b/aibox/yolov5/models/hub/yolov5l6.yaml similarity index 100% rename from aibox/models/hub/yolov5l6.yaml rename to aibox/yolov5/models/hub/yolov5l6.yaml diff --git a/aibox/models/hub/yolov5m6.yaml b/aibox/yolov5/models/hub/yolov5m6.yaml similarity index 100% rename from aibox/models/hub/yolov5m6.yaml rename to aibox/yolov5/models/hub/yolov5m6.yaml diff --git a/aibox/models/hub/yolov5n6.yaml b/aibox/yolov5/models/hub/yolov5n6.yaml similarity index 100% rename from aibox/models/hub/yolov5n6.yaml rename to aibox/yolov5/models/hub/yolov5n6.yaml diff --git a/aibox/models/hub/yolov5s-LeakyReLU.yaml b/aibox/yolov5/models/hub/yolov5s-LeakyReLU.yaml similarity index 100% rename from aibox/models/hub/yolov5s-LeakyReLU.yaml rename to aibox/yolov5/models/hub/yolov5s-LeakyReLU.yaml diff --git a/aibox/models/hub/yolov5s-ghost.yaml b/aibox/yolov5/models/hub/yolov5s-ghost.yaml similarity index 100% rename from aibox/models/hub/yolov5s-ghost.yaml rename to aibox/yolov5/models/hub/yolov5s-ghost.yaml diff --git a/aibox/models/hub/yolov5s-transformer.yaml b/aibox/yolov5/models/hub/yolov5s-transformer.yaml similarity index 100% rename from aibox/models/hub/yolov5s-transformer.yaml rename to aibox/yolov5/models/hub/yolov5s-transformer.yaml diff --git a/aibox/models/hub/yolov5s6.yaml b/aibox/yolov5/models/hub/yolov5s6.yaml similarity index 100% rename from aibox/models/hub/yolov5s6.yaml rename to aibox/yolov5/models/hub/yolov5s6.yaml diff --git a/aibox/models/hub/yolov5x6.yaml b/aibox/yolov5/models/hub/yolov5x6.yaml similarity index 100% rename from aibox/models/hub/yolov5x6.yaml rename to aibox/yolov5/models/hub/yolov5x6.yaml diff --git a/aibox/models/segment/yolov5l-seg.yaml b/aibox/yolov5/models/segment/yolov5l-seg.yaml similarity index 100% rename from aibox/models/segment/yolov5l-seg.yaml rename to aibox/yolov5/models/segment/yolov5l-seg.yaml diff --git a/aibox/models/segment/yolov5m-seg.yaml b/aibox/yolov5/models/segment/yolov5m-seg.yaml similarity index 100% rename from aibox/models/segment/yolov5m-seg.yaml rename to aibox/yolov5/models/segment/yolov5m-seg.yaml diff --git a/aibox/models/segment/yolov5n-seg.yaml b/aibox/yolov5/models/segment/yolov5n-seg.yaml similarity index 100% rename from aibox/models/segment/yolov5n-seg.yaml rename to aibox/yolov5/models/segment/yolov5n-seg.yaml diff --git a/aibox/models/segment/yolov5s-seg.yaml b/aibox/yolov5/models/segment/yolov5s-seg.yaml similarity index 100% rename from aibox/models/segment/yolov5s-seg.yaml rename to aibox/yolov5/models/segment/yolov5s-seg.yaml diff --git a/aibox/models/segment/yolov5x-seg.yaml b/aibox/yolov5/models/segment/yolov5x-seg.yaml similarity index 100% rename from aibox/models/segment/yolov5x-seg.yaml rename to aibox/yolov5/models/segment/yolov5x-seg.yaml diff --git a/aibox/models/tf.py b/aibox/yolov5/models/tf.py similarity index 100% rename from aibox/models/tf.py rename to aibox/yolov5/models/tf.py diff --git a/aibox/models/yolo.py b/aibox/yolov5/models/yolo.py similarity index 99% rename from aibox/models/yolo.py rename to aibox/yolov5/models/yolo.py index 4f4d567b..456db679 100644 --- a/aibox/models/yolo.py +++ b/aibox/yolov5/models/yolo.py @@ -138,7 +138,7 @@ def _profile_one_layer(self, m, x, dt): LOGGER.info(f"{sum(dt):10.2f} {'-':>10s} {'-':>10s} Total") def fuse(self): # fuse model Conv2d() + BatchNorm2d() layers - LOGGER.info('Fusing layers... ') + #LOGGER.info('Fusing layers... ') for m in self.model.modules(): if isinstance(m, (Conv, DWConv)) and hasattr(m, 'bn'): m.conv = fuse_conv_and_bn(m.conv, m.bn) # update conv diff --git a/aibox/models/yolov5l.yaml b/aibox/yolov5/models/yolov5l.yaml similarity index 100% rename from aibox/models/yolov5l.yaml rename to aibox/yolov5/models/yolov5l.yaml diff --git a/aibox/models/yolov5m.yaml b/aibox/yolov5/models/yolov5m.yaml similarity index 100% rename from aibox/models/yolov5m.yaml rename to aibox/yolov5/models/yolov5m.yaml diff --git a/aibox/models/yolov5n.yaml b/aibox/yolov5/models/yolov5n.yaml similarity index 100% rename from aibox/models/yolov5n.yaml rename to aibox/yolov5/models/yolov5n.yaml diff --git a/aibox/models/yolov5s.yaml b/aibox/yolov5/models/yolov5s.yaml similarity index 100% rename from aibox/models/yolov5s.yaml rename to aibox/yolov5/models/yolov5s.yaml diff --git a/aibox/models/yolov5x.yaml b/aibox/yolov5/models/yolov5x.yaml similarity index 100% rename from aibox/models/yolov5x.yaml rename to aibox/yolov5/models/yolov5x.yaml diff --git a/aibox/utils/__init__.py b/aibox/yolov5/utils/__init__.py similarity index 100% rename from aibox/utils/__init__.py rename to aibox/yolov5/utils/__init__.py diff --git a/aibox/utils/activations.py b/aibox/yolov5/utils/activations.py similarity index 100% rename from aibox/utils/activations.py rename to aibox/yolov5/utils/activations.py diff --git a/aibox/utils/augmentations.py b/aibox/yolov5/utils/augmentations.py similarity index 100% rename from aibox/utils/augmentations.py rename to aibox/yolov5/utils/augmentations.py diff --git a/aibox/utils/autoanchor.py b/aibox/yolov5/utils/autoanchor.py similarity index 100% rename from aibox/utils/autoanchor.py rename to aibox/yolov5/utils/autoanchor.py diff --git a/aibox/utils/autobatch.py b/aibox/yolov5/utils/autobatch.py similarity index 100% rename from aibox/utils/autobatch.py rename to aibox/yolov5/utils/autobatch.py diff --git a/aibox/utils/aws/__init__.py b/aibox/yolov5/utils/aws/__init__.py similarity index 100% rename from aibox/utils/aws/__init__.py rename to aibox/yolov5/utils/aws/__init__.py diff --git a/aibox/utils/aws/mime.sh b/aibox/yolov5/utils/aws/mime.sh similarity index 100% rename from aibox/utils/aws/mime.sh rename to aibox/yolov5/utils/aws/mime.sh diff --git a/aibox/utils/aws/resume.py b/aibox/yolov5/utils/aws/resume.py similarity index 100% rename from aibox/utils/aws/resume.py rename to aibox/yolov5/utils/aws/resume.py diff --git a/aibox/utils/aws/userdata.sh b/aibox/yolov5/utils/aws/userdata.sh similarity index 100% rename from aibox/utils/aws/userdata.sh rename to aibox/yolov5/utils/aws/userdata.sh diff --git a/aibox/utils/callbacks.py b/aibox/yolov5/utils/callbacks.py similarity index 100% rename from aibox/utils/callbacks.py rename to aibox/yolov5/utils/callbacks.py diff --git a/aibox/utils/dataloaders.py b/aibox/yolov5/utils/dataloaders.py similarity index 99% rename from aibox/utils/dataloaders.py rename to aibox/yolov5/utils/dataloaders.py index 1fbd0361..8453b39b 100644 --- a/aibox/utils/dataloaders.py +++ b/aibox/yolov5/utils/dataloaders.py @@ -373,7 +373,8 @@ def __init__(self, sources='file.streams', img_size=640, stride=32, auto=True, t _, self.imgs[i] = cap.read() # guarantee first frame self.threads[i] = Thread(target=self.update, args=([i, cap, s]), daemon=True) - LOGGER.info(f'{st} Success ({self.frames[i]} frames {w}x{h} at {self.fps[i]:.2f} FPS)') + #LOGGER.info(f'{st} Success ({self.frames[i]} frames {w}x{h} at {self.fps[i]:.2f} FPS)') + LOGGER.info(f'Data summary: ({self.frames[i]} frames, {w}x{h}, {self.fps[i]:.2f} FPS)') self.threads[i].start() LOGGER.info('') # newline diff --git a/aibox/utils/docker/Dockerfile b/aibox/yolov5/utils/docker/Dockerfile similarity index 100% rename from aibox/utils/docker/Dockerfile rename to aibox/yolov5/utils/docker/Dockerfile diff --git a/aibox/utils/docker/Dockerfile-arm64 b/aibox/yolov5/utils/docker/Dockerfile-arm64 similarity index 100% rename from aibox/utils/docker/Dockerfile-arm64 rename to aibox/yolov5/utils/docker/Dockerfile-arm64 diff --git a/aibox/utils/docker/Dockerfile-cpu b/aibox/yolov5/utils/docker/Dockerfile-cpu similarity index 100% rename from aibox/utils/docker/Dockerfile-cpu rename to aibox/yolov5/utils/docker/Dockerfile-cpu diff --git a/aibox/utils/downloads.py b/aibox/yolov5/utils/downloads.py similarity index 100% rename from aibox/utils/downloads.py rename to aibox/yolov5/utils/downloads.py diff --git a/aibox/utils/flask_rest_api/README.md b/aibox/yolov5/utils/flask_rest_api/README.md similarity index 100% rename from aibox/utils/flask_rest_api/README.md rename to aibox/yolov5/utils/flask_rest_api/README.md diff --git a/aibox/utils/flask_rest_api/__init__.py b/aibox/yolov5/utils/flask_rest_api/__init__.py similarity index 100% rename from aibox/utils/flask_rest_api/__init__.py rename to aibox/yolov5/utils/flask_rest_api/__init__.py diff --git a/aibox/utils/flask_rest_api/example_request.py b/aibox/yolov5/utils/flask_rest_api/example_request.py similarity index 100% rename from aibox/utils/flask_rest_api/example_request.py rename to aibox/yolov5/utils/flask_rest_api/example_request.py diff --git a/aibox/utils/flask_rest_api/restapi.py b/aibox/yolov5/utils/flask_rest_api/restapi.py similarity index 100% rename from aibox/utils/flask_rest_api/restapi.py rename to aibox/yolov5/utils/flask_rest_api/restapi.py diff --git a/aibox/utils/general.py b/aibox/yolov5/utils/general.py similarity index 100% rename from aibox/utils/general.py rename to aibox/yolov5/utils/general.py diff --git a/aibox/utils/google_app_engine/Dockerfile b/aibox/yolov5/utils/google_app_engine/Dockerfile similarity index 100% rename from aibox/utils/google_app_engine/Dockerfile rename to aibox/yolov5/utils/google_app_engine/Dockerfile diff --git a/aibox/utils/google_app_engine/additional_requirements.txt b/aibox/yolov5/utils/google_app_engine/additional_requirements.txt similarity index 100% rename from aibox/utils/google_app_engine/additional_requirements.txt rename to aibox/yolov5/utils/google_app_engine/additional_requirements.txt diff --git a/aibox/utils/google_app_engine/app.yaml b/aibox/yolov5/utils/google_app_engine/app.yaml similarity index 100% rename from aibox/utils/google_app_engine/app.yaml rename to aibox/yolov5/utils/google_app_engine/app.yaml diff --git a/aibox/utils/loggers/__init__.py b/aibox/yolov5/utils/loggers/__init__.py similarity index 100% rename from aibox/utils/loggers/__init__.py rename to aibox/yolov5/utils/loggers/__init__.py diff --git a/aibox/utils/loggers/clearml/README.md b/aibox/yolov5/utils/loggers/clearml/README.md similarity index 100% rename from aibox/utils/loggers/clearml/README.md rename to aibox/yolov5/utils/loggers/clearml/README.md diff --git a/aibox/utils/loggers/clearml/__init__.py b/aibox/yolov5/utils/loggers/clearml/__init__.py similarity index 100% rename from aibox/utils/loggers/clearml/__init__.py rename to aibox/yolov5/utils/loggers/clearml/__init__.py diff --git a/aibox/utils/loggers/clearml/clearml_utils.py b/aibox/yolov5/utils/loggers/clearml/clearml_utils.py similarity index 100% rename from aibox/utils/loggers/clearml/clearml_utils.py rename to aibox/yolov5/utils/loggers/clearml/clearml_utils.py diff --git a/aibox/utils/loggers/clearml/hpo.py b/aibox/yolov5/utils/loggers/clearml/hpo.py similarity index 100% rename from aibox/utils/loggers/clearml/hpo.py rename to aibox/yolov5/utils/loggers/clearml/hpo.py diff --git a/aibox/utils/loggers/comet/README.md b/aibox/yolov5/utils/loggers/comet/README.md similarity index 100% rename from aibox/utils/loggers/comet/README.md rename to aibox/yolov5/utils/loggers/comet/README.md diff --git a/aibox/utils/loggers/comet/__init__.py b/aibox/yolov5/utils/loggers/comet/__init__.py similarity index 100% rename from aibox/utils/loggers/comet/__init__.py rename to aibox/yolov5/utils/loggers/comet/__init__.py diff --git a/aibox/utils/loggers/comet/comet_utils.py b/aibox/yolov5/utils/loggers/comet/comet_utils.py similarity index 100% rename from aibox/utils/loggers/comet/comet_utils.py rename to aibox/yolov5/utils/loggers/comet/comet_utils.py diff --git a/aibox/utils/loggers/comet/hpo.py b/aibox/yolov5/utils/loggers/comet/hpo.py similarity index 100% rename from aibox/utils/loggers/comet/hpo.py rename to aibox/yolov5/utils/loggers/comet/hpo.py diff --git a/aibox/utils/loggers/comet/optimizer_config.json b/aibox/yolov5/utils/loggers/comet/optimizer_config.json similarity index 100% rename from aibox/utils/loggers/comet/optimizer_config.json rename to aibox/yolov5/utils/loggers/comet/optimizer_config.json diff --git a/aibox/utils/loggers/wandb/__init__.py b/aibox/yolov5/utils/loggers/wandb/__init__.py similarity index 100% rename from aibox/utils/loggers/wandb/__init__.py rename to aibox/yolov5/utils/loggers/wandb/__init__.py diff --git a/aibox/utils/loggers/wandb/wandb_utils.py b/aibox/yolov5/utils/loggers/wandb/wandb_utils.py similarity index 100% rename from aibox/utils/loggers/wandb/wandb_utils.py rename to aibox/yolov5/utils/loggers/wandb/wandb_utils.py diff --git a/aibox/utils/loss.py b/aibox/yolov5/utils/loss.py similarity index 100% rename from aibox/utils/loss.py rename to aibox/yolov5/utils/loss.py diff --git a/aibox/utils/metrics.py b/aibox/yolov5/utils/metrics.py similarity index 100% rename from aibox/utils/metrics.py rename to aibox/yolov5/utils/metrics.py diff --git a/aibox/utils/plots.py b/aibox/yolov5/utils/plots.py similarity index 100% rename from aibox/utils/plots.py rename to aibox/yolov5/utils/plots.py diff --git a/aibox/utils/segment/__init__.py b/aibox/yolov5/utils/segment/__init__.py similarity index 100% rename from aibox/utils/segment/__init__.py rename to aibox/yolov5/utils/segment/__init__.py diff --git a/aibox/utils/segment/augmentations.py b/aibox/yolov5/utils/segment/augmentations.py similarity index 100% rename from aibox/utils/segment/augmentations.py rename to aibox/yolov5/utils/segment/augmentations.py diff --git a/aibox/utils/segment/dataloaders.py b/aibox/yolov5/utils/segment/dataloaders.py similarity index 100% rename from aibox/utils/segment/dataloaders.py rename to aibox/yolov5/utils/segment/dataloaders.py diff --git a/aibox/utils/segment/general.py b/aibox/yolov5/utils/segment/general.py similarity index 100% rename from aibox/utils/segment/general.py rename to aibox/yolov5/utils/segment/general.py diff --git a/aibox/utils/segment/loss.py b/aibox/yolov5/utils/segment/loss.py similarity index 100% rename from aibox/utils/segment/loss.py rename to aibox/yolov5/utils/segment/loss.py diff --git a/aibox/utils/segment/metrics.py b/aibox/yolov5/utils/segment/metrics.py similarity index 100% rename from aibox/utils/segment/metrics.py rename to aibox/yolov5/utils/segment/metrics.py diff --git a/aibox/utils/segment/plots.py b/aibox/yolov5/utils/segment/plots.py similarity index 100% rename from aibox/utils/segment/plots.py rename to aibox/yolov5/utils/segment/plots.py diff --git a/aibox/utils/torch_utils.py b/aibox/yolov5/utils/torch_utils.py similarity index 99% rename from aibox/utils/torch_utils.py rename to aibox/yolov5/utils/torch_utils.py index 13a356f3..297719d8 100644 --- a/aibox/utils/torch_utils.py +++ b/aibox/yolov5/utils/torch_utils.py @@ -132,7 +132,7 @@ def select_device(device='', batch_size=0, newline=True): s += 'MPS\n' arg = 'mps' else: # revert to CPU - s += 'CPU\n' + s += 'CPU' arg = 'cpu' if not newline: diff --git a/aibox/utils/triton.py b/aibox/yolov5/utils/triton.py similarity index 100% rename from aibox/utils/triton.py rename to aibox/yolov5/utils/triton.py diff --git a/alpha order_2.txt b/alpha order_2.txt new file mode 100644 index 00000000..ff18abe7 --- /dev/null +++ b/alpha order_2.txt @@ -0,0 +1,30 @@ + +Starting category: numbers +2 +6 +3 +7 +8 +1 +9 +0 +5 +4 + +Starting category: letters +h +i +u +f +q +a +l +d +c +g +p +s +b +t +e +j diff --git a/flobox/old/folder_structure.png b/flobox/old/folder_structure.png deleted file mode 100644 index 39d9ad7a..00000000 Binary files a/flobox/old/folder_structure.png and /dev/null differ diff --git a/flobox/old/Code/old_experiment.py b/flobox/resources/old_code/old_experiment.py similarity index 100% rename from flobox/old/Code/old_experiment.py rename to flobox/resources/old_code/old_experiment.py diff --git a/flobox/old/Code/optivist-feb-21.py b/flobox/resources/old_code/optivist-feb-21.py similarity index 100% rename from flobox/old/Code/optivist-feb-21.py rename to flobox/resources/old_code/optivist-feb-21.py diff --git a/flobox/old/Code/optivist-may-05.py b/flobox/resources/old_code/optivist-may-05.py similarity index 100% rename from flobox/old/Code/optivist-may-05.py rename to flobox/resources/old_code/optivist-may-05.py diff --git a/requirements.txt b/requirements.txt index 83fcf374..f4ac362d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,6 +1,8 @@ ultralytics==8.1.34 keyboard==0.13.5 playsound==1.3.0 -pygame==2.1.2 pybelt==1.0.5 -pynput==1.7.6 \ No newline at end of file +pynput==1.7.6 +tensorflow==2.13.1 +tflite-support==0.4.4 +deep-sort-realtime \ No newline at end of file