日屄的能力

    1. <form id=YaojxIVIX><nobr id=YaojxIVIX></nobr></form>
      <address id=YaojxIVIX><nobr id=YaojxIVIX><nobr id=YaojxIVIX></nobr></nobr></address>

      Dominic Szablewski, @phoboslab
      — Monday, September 27th 2021

      Q1K3 – Making Of

      This was my third time participating in the js13kGames contest. I won in 2018 with Underrun and utterly failed to deliver any compelling gameplay with my 2019 entry Voidcall.

      This year's theme was “Space” – I chose to completely ignore it and instead decided to pay tribute to one of my all time favorite games on its 25th birthday:

      The original Quake from 1996.

      Q1K3 Play Q1K3 – An homage to Quake in 13kb of JavaScript

      Update 2024: I also made a short “Making Of” Video if you don't feel like reading:

      I grew up with the Quake series. Like for so many others, the openness of the Quake engine lured me into the tech world. In the early 2000s I created maps for Quake 3 and later tinkered with the source. One of the first things I did when my Oculus Rift CV1 arrived was porting Quake to it.

      The original Quake in particular has aged tremendously well. It's still an exceptionally beautiful game, kept alive by ever improving engines like Quakespasm and ambitious mods like Arcane Dimensions and Alkaline.

      Capturing the essence of Quake in just 13kb with code, textures, sound, music, weapons, enemies and maps was both challenging and a whole lot of fun.

      This article details some of the techniques that made it possible. You may follow along in the source code on github.

      Textures

      Q1K3 has 31 different textures. Stored as PNGs they clock in at about 150kb. So simply including the textures as image files was out of the question.

      I initially tinkered with a simple DSL that allowed me to create Canvas elements on the fly. To my surprise, this produced some quite convincing results with just a bit of random noise and some embossed rectangles.

      // Using a simple library to create a texture
      // A metal panel (rect) with four rivets (rectMultiple)
      texture()
          // x, y, width, height, color
          .rect(1, 1, 30, 30, 0x444f) 
      
          // start_x, start_y, width, height, inc_x, inc_y, color
          .rectMultiple(4, 4, 3, 3, 21, 21, 0x111a)
      
          // Add two layers of brown and black noise
          .noise(0x5206)
          .noise(0x0006)
      
          // Submit to WebGL
          .create();

      To be able to compress this code even further and to have some immediate visual feedback, I decided to build an editor for these textures.

      TTT – Tiny Texture Tumbler Screenshot of TTT – Tiny Texture Tumbler

      Instead of the above code, this produces a raw array of all values. You can pass this array of texture definitions into the ttt() function to receive an array of canvas elements:

      // Create two textures and append them to the document
      ttt([
          [32,32,13135,0,1,1,30,30,65528,8,13135,2,52419,1,2,5,2],
          [32,32,13135,1,2,2,4,4,8,8,65524,5,8458,4,0,0,0,32,32,5]
      ]).map(canvas => document.body.appendChild(canvas));

      One important addition in this editor was the ability to draw one texture onto another one or even onto itself. I also added a function to draw text. All in all this editor and library supports only 5 different functions:

      This was enough to create the final texture set for Q1K3. The texture creation library and the definitions for all 31 textures clock in at around 1.3kb zipped. Way better than the 150kb for raw PNG files but still a good chunk of the allowed 13kb.

      Q1K3 Textures The final texture set (excerpt). Note the violation of the Geneva Conventions.

      Maps

      I wanted to include at least the famous e1m1 level (Episode 1, Map 1) from Quake. Generating levels dynamically is not only very difficult for 3D games, but also wouldn't have gotten me to this goal. This meant the real map data had to be stored somewhere.

      Reducing all geometry to axis aligned blocks proved very efficient. Granted, the missing slopes and absent detail makes the game look more like Minecraft than the original Quake, but it was an absolutely necessary sacrifice. Using only axis aligned blocks not only reduced the data needed, but also made collision detection very straight forward.

      The maps were built with the excellent TrenchBroom level editor. Having previously worked with various flavors of the somewhat clunky Radiant editors, I can't say enough nice things about TrenchBroom. It's really, really good. Building the maps for Q1K3 was the funnest part of this whole project.

      Q1K3 E1M1 in TrenchBroom Screenshot of Q1K3's first level in TrenchBroom

      TrenchBroom saves the levels in the .map format; It's the de-facto standard for all Quake Engine games around the time. A .map file contains a list of “brushes”, where each brush is a convex object. However, the brush's geometry is not defined by the positions of each corner, but rather by a list of planes that stretch to infinity. Each plane subdivides a (conceptually) infinitely large space into an inside and outside half. With four or more of these subdivisions you end up with the remainder of all that's inside: a brush. This also explains why all brushes need to be convex by definition.

      Historically this format of .map files was chosen to make various computations for Quake's Binary Space Partitioning (BSP) compiler easier. The Quake engine itself also uses these infinitely large planes for collision detection: testing if a point is inside of a brush is very cheap when you only have to test if this point is on the right side (i.e. the inside) of all planes.

      For my purpose this .map format was quite difficult to work with. Luckily I already built a .map parser and loader in C for another side project. I quickly adapted the map loader to take the computed corner points of each brush and produce a list of “blocks”.

      All blocks of a Q1K3 level are axis aligned. This means I only need to store the position and the size of each block. Initially my level format looked like this:

      struct level {
          u16 num_blocks
          struct {
              struct { u8 x, y, z; } position;
              struct { u8 x, y, z; } size;
              u8 texture_index;
          } blocks[num_blocks];
      
          u16 num_entities;
          struct {
              u8 type_id;
              struct { u8 x, y, z; } position;
              u8 data1, data2;
          } entities[num_entities];
      }

      I.e. 7 bytes per block and 6 bytes per entity. This produced a 3kb file for the first level. The resulting block file ZIP-compresses to about 75%.

      Towards the end of the project I had to revisit this block format to shave of some more bytes. In the final version of the game, each block takes only 6 bytes for the position and size. The list of blocks is sorted by texture_index and interleaved with a “texture change sentinel” that denotes the texture index for all following blocks in the file. This saved around 300 bytes for each of the two levels.

      I also experimented with just using 6 or 7 bits for each value, bringing done the block size to 5 bytes. As I painfully figured out, this is horrible for ZIP compression which examines the file on a byte by byte level. This however lead me to squeeze out another 50 bytes or so by just sorting the blocks by size, which aids the ZIP compression.

      The entities stored in the file just have a type_id, a position and two extra bytes for data. This extra data is used by lights to store the light color and brightness and by enemies to indicate if they start idle or patrolling and which direction they're facing.

      Q1K3's 2nd level in TrenchBroom All 232 blocks and 92 entities of Q1K3's 2nd level

      In the end I managed to cram most of e1m1 (sans secrets) and parts of e1m3 (with a lot of freestyling) into the game. In total the two levels consist of 563 blocks and 188 entities. A total of 4.5kb uncompressed or 3.2kb zipped.

      Models

      The geometry for all game objects – weapons, enemies, various pickups and some map decorations – follows a similar approach as for my 2019 entry Voidcall: Just a list of vertex indices, followed by vertex positions. Animated models have the list of indices once and the vertex positions for each frame.

      For Voidcall I tried very hard to minimize the byte size of the models. I only used 5 bits for each vertex position. This meant that each coordinate is interleaved in two bytes. As I noted earlier with the level files, this actually trips up ZIP compression, because each byte almost looks like random noise.

      So for Q1K3, each index and vertex coordinate is stored in an individual byte. This allowed for better ZIP compression and saved a few hundred bytes in the final build.

      I carefully removed all the faces from each model which will not be seen in the game to save a few bytes here and there. This means the box model has no underside and in the most extreme case, the Quake Logo on the title screen has most sides removed.

      Q1K3 Logo Quake Logo as used on the title screen

      There's only 3 different animated models in the game: the basic humanoid with 6 animation frames, the dog with just 2 frames and a torch model (only used in the 2nd level) with 3 frames. The humanoid model is re-used for most enemy types by stretching or shrinking the x, y and z size and applying different textures. E.g. the Ogre is a transformed to be a bit shorter but wider than the Enforcer.

      Most other models are re-used too:

      Q1K3 Models All of Q1K3's Models: logo, generic blob (blood splat, debris), box (ammo, health, doors), cylinder (projectiles, shotgun, grenades, grenade launcher, barrel), nailgun, torch, humanoid, dog

      Textures for the models are dynamically created with TTT and just projected onto the model from the front. This produced some ugly artifacts on the top of barrels and sides of the ammunition boxes because the texture is infinitely stretched or squashed. But it's hardly noticeable in the game.

      All models combined take up 1.6kb uncompressed or 1.1kb zipped.

      Sound and Music

      I looked into the excellent ZzFX library for sounds and ZzFXM for music. The ZzFXM Tracker to create music is a particular nice piece of software. ZzFX works great for 8bit-ish effects, but I found it very hard to create anything that doesn't sound like an NES. Andy L?sch, who did the music for Q1K3, faced a similar challenge.

      So I ultimately decided to go back to the trusty Sontant-X that I've been using in the previous years. The version used in Q1K3 has been heavily modified to make it smaller while retaining all the same features of the original.

      In the previous years I modified the library to generate a lookup table at startup for all the different oscillators (Sin, Square, Sawtooth and Triangle), instead of computing those on the fly all the time.

      // Generate the lookup tables
      let s = 4096;
      let tab = new Float32Array(s*4); // Space for 4 oscillators
      for (let i = 0; i < s; i++) {
          tab[i        ] = Math.sin(i*6.283184/s);                  // Sin
          tab[i + s    ] = tab[i] < 0 ? -1 : 1;                     // Square
          tab[i + s * 2] = i / s - 0.5;                             // Sawtooth
          tab[i + s * 3] = i < s/2 ? (i/(s/4)) - 1 : 3 - (i/(s/4)); // Triangle
      }

      Getting the current value for an oscillator is then just a simple lookup. This speeds up the music generation a lot, to the point where there's only about a 100ms delay from clicking on the start screen to being the game with the music playing.

      // Lookup current value. osc_type is 0..3
      let mask = s - 1;
      let v = tab[osc_type * s + ((pos * freq * s) & mask)];

      This year I also hacked on the Sonant-X Tracker to store all the music in flat arrays instead of a JSON object. This further reduced the size needed for all sounds and music.

      // Original format
      let music_data = {
          "rowLen": 6615,
          "endPattern": 27,
          "songData": [
              {
                  "osc1_oct": 7,
                  "osc1_det": 0,
                  "osc1_detune": 0,
                  "osc1_xenv": 0,
                  "osc1_vol": 180,
                  "osc1_waveform": 0,
                  "osc2_oct": 7,
                  "osc2_det": 0,
                  ...
      }
      
      // New format
      let music_data = [6014,21,88,[[[7,0,0,1,255,0,7,0,0,1,255,0,0...

      Like for all my previous games, the music for Q1K3 was composed by my good friend Andy L?sch. For Q1K3 space was even tighter than for the past JS13k games. He still ended up with a brilliant moody, minimalist ambient track that compresses nicely.

      This minimalism fits the game perfectly. After all, the original Quake soundtrack from Nine Inch Nails (that we both are big fans of) has a similar theme going on. I'm really happy with the result.

      In contrast, the sound effects were difficult to produce with the limited possibilities. In my opinion they don't live up to the game. With my very limited understanding of audio filters and synthesizers I have no idea how to improve the situation. Maybe it's just not possible or extremely complex to create good sound effects out of thin air.

      What worked nicely though, is the very simplistic “spacial audio“ model used in Q1K3. Whenever an entity wants to play a sound effect, the distance and angle to the camera is computed and the volume and stereo panning is changed accordingly.

      // Fade audio volume from 1..0 over the distance 64..1200
      let distance = vec3_dist(pos, camera_pos);
      let volume = scale(distance, 64, 1200, 1, 0);
      
      // Compute panning (-1 = left, 0 = center, +1 = right)
      let angle = vec3_horizontal_angle_to(pos, camera_pos) - camera_yaw;
      let pan = Math.sin(angle) * -1;
      audio_play(sound, volume, 0, pan);

      It's only about 10 lines of code (mostly just connecting different WebAudio objects to each other), but greatly helps when you want to figure out who's shooting at you.

      Stepping back a bit, it's quite funny to me how exhaustive the WebAudio API is, yet everyone generates samples directly in JavaScript instead of connecting the dots on a design-by-consortium audio graph. At this point it seems to be a tradition of the W3C to implement all the wrong abstractions.

      The audio library, sound effects and music take up about 1.5kb in the final ZIP package.

      Code

      All the assets, with 3.2kb of level data, 1.1kb of model data, 1.3kb for the textures (including the texture lib) and 1.5kb for sounds and music (including the audio lib), sum up to a total of 7.1kb within the ZIP. This leaves me with a generous 5.9kb for all the remaining code.

      In the remaining 5.9kb I have to handle:

      The basic architecture for the game revolves around an array of “entities”. Each entity type (e.g. the player, ammo pickup and enemies) is a subclass of the main entity_t. They all share the same physics calculations, collision detection and a bit of game logic to receive damage and die.

      For each frame the game iterates through this array, updates the physics for each entity and draws it. There's almost no game logic going on outside of the entity classes. Everything in Q1K3 is an entity, even the tiniest particle.

      For all my previous games I tried hard to avoid 3D and vector math wherever possible. I told myself that I did this to avoid the added code, but the real reason was more that I suck at math. For this year it was evident that this would not be an option. I needed a basic vector math library.

      Whenever I needed some 3D math I used Brandon Jones' excellent glMatrix library. It's the de-facto reference implementation for vector and matrix math in JavaScript.

      glMatrix' goal is to be as fast as possible. This means it never allocates any objects if you don't explicitly tell it to do so. It also means that it's a bit cumbersome to work with. You have to pass an out object to almost all the functions, instead of receiving the result in the function's return value.

      So I choose to ignore the efficiency gains of glMatrix' architecture and instead implemented a tiny vector math library that is nicely composable. All the vec3_* functions create and return a plain JS objects. This introduces a lot of work for the garbage collector but in turn allowed me to write code like this:

      // Acceleration in movement direction
      player.acceleration = vec3_mulf(
          vec3_rotate_y(
              vec3(
                  keys[key_right] - keys[key_left],
                  0,
                  keys[key_up] - keys[key_down]
              ), 
              player.yaw
          ), 
          player.speed * (player.is_on_ground ? 1 : 0.3)
      );

      Having all these vector functions readily available instead of fiddling with Math.sin() and accessing the vector components directly was a good idea after all.

      Collision Detection

      Collision detection can be a hairy thing. Or more precisely: collision response. The detection of a collision is a tightly defined and exactly solvable problem. What happens when there is a collision can get all kinds of wonky.

      In Q1K3 I made my life a lot easier by only dealing with axis aligned bounding boxes. Still, there's a bit of complexity involved by dealing with collisions against the static level geometry and also against other dynamic objects. In both cases, the same collision response is employed.

      When the level is loaded, a Uint8Array for 128 * 128 * 128 grid elements is generated. Since I only needed to know which of these grid cells is occupied, I used a bitmap, where each bit corresponds to one cell. So instead of 2,097,152 bytes the Uint8Array only needs to have 262,144 bytes.

      Looking up one bit in this array is then just:

      let index = Math.floor((z * 128 * 128 + y * 128 + x) / 8);
      let element = collision_map[index];
      let bit = element & (1 << (x % 8));

      Or more concisely:

      let bit = collision_map[(z * 128 * 128 + y * 128 + x) >> 3] & (1 << (x & 7));

      To check if an entity collides with one or more cells in this bitmap, the entity's whole box is checked.

      map_block_at_box = (box_start, box_end) => {
          for (let z = box_start.z; z <= box_end.z; z++) {
              for (let y = box_start.y; y <= box_end.y; y++) {
                  for (let x = box_start.x; x <= box_end.x; x++) {
                      if (map_block_at(x, y, z)) {
                          return true;
                      }
                  }
              }
          }
          return false;
      };

      This map_block_at_box() check is done once for each x, y and z dimension and on top of that, these 3 checks might be done in a loop for fast moving entities.

      Checking for each dimension individually ensures that we can slide along the floor and walls. We only need to stop movement in the direction in which we hit something.

      // Divide movement into 16 unit steps
      let move_dist = vec3_mulf(this.vel, game_tick);
      let steps = Math.ceil(vec3_length(move_dist) / 16);
      let move_step = vec3_divf(move_dist, steps);
      
      for (let s = 0; s < steps; s++) {
          // Remember last position so we can roll back
          let lp = vec3_clone(this.pos);
      
          // Integrate velocity into pos
          this.pos = vec3_add(this.pos, move_step);
      
          // Collision with walls, horizonal
          if (this.collides(vec3(this.pos.x, lp.y, lp.z))) {
              // roll back x pos and stop x velocity
              this.pos.x = lp.x;
              this.vel.x = 0;
          }
      
          // Collision with walls, horizonal
          if (this.collides(vec3(this.pos.x, lp.y, this.pos.z))) {
              // roll back z pos and stop z velocity
              this.pos.z = lp.z;
              this.vel.z = 0;
          }
      
          // Collision with ground/Ceiling
          if (this.collides(this.pos)) {
              // roll back y pos and stop y velocity
              this.pos.y = lp.y;
              this.vel.y = 0;
          }
      }

      There's a bit more going on in the final code, including a check for stepping up stairs, bouncing on walls, floors and ceilings and setting a flag that indicates if the entity is on the ground.

      This is all terribly inefficient, but it doesn't matter. CPUs are fast.

      Rendering

      The rendering for Q1K3 is quite simplistic. All entities are rendered for each frame. There's no check if an entity is outside the view frustum or if it's occluded by some level geometry. Likewise, all the level geometry is rendered for each frame. We get a lot of overdraw this way, but since the polygon count is quite low, it still works out nicely. GPUs are fast.

      Light sources were the one thing I needed to address, though. The game has a hard limit of 32 light sources that can be rendered for a frame. This includes all the lights scattered around the level, as well as the dynamically created lights when shooting a weapon or when something explodes.

      During one frame all entities submit their lights to the renderer. The renderer determines the distance of this light to the camera and fades it out at a certain distance. If it's too far away, it's not rendered at all.

      r_push_light = (pos, intensity, r, g, b) => {
          // Calculate the distance to the light, fade it out between 768--1024
          let fade = clamp(
              scale(
                  vec3_dist(pos, camera_pos), 
                  768, 1024, 1, 0
              ),
              0, 1
          ) * intensity * 10;
      
          if (fade && r_num_lights < r_max_lights) {
              r_light_buffer.set([
                  pos.x, pos.y, pos.z, 
                  r*fade, g*fade, b*fade
              ], r_num_lights * 6);
              r_num_lights++;
          }
      };

      There's only one shader program shared by the level geometry and models. The vertex shader takes care of the current camera position and view angles and also mixes the animation frames of the models.

      The fragment shader calculates the lighting from all light sources, applies some cheesy gamma correction and reduces the number of colors for some extra dirty looks.

      All geometry for the two levels and all the models and their animation frames are uploaded to a GPU buffer on load time. The renderer then just needs to issue draw calls with offsets into this buffer.

      There's one draw call per model and one per level block. This sounds excessive, but is not a big problem. The level data is already sorted by texture index, so the renderer doesn't need to re-bind textures all too much. Similarly, for the static geometry, the vertex attribute pointers all stay the same. The renderer just needs to change those for the animated models.

      Minification

      The un-minified source of Q1K3 is about 71kb. The first step to get the size down is a PHP script that replaces WebGL constants with their actual numeric values. It also shortens WebGL function names, as explained in the Underrun Making Of.

      Minifying the source with uglify-js brings this down to 26kb. Still a lot, but JS13k's size limit is only concerned with the size of a final ZIP file, containing all the assets and code for the game.

      Zipping the minifyed source shrinks it to 10kb. But I needed some more space for the maps (4.4kb) and models (1.6kb). While ZIP compression helps a bit for these data files, the ZIP with the source and data still clocks in at 14.2kb.

      Luckily, just a few days after the start of JS13k Kang Seonghoon released Roadroller - a JavaScript packer written in the spirit of the oldschool UPX. Roadroller compresses your source code and appends its own decompressing code. Loading the packed source in the browser unpacks and immediately executes it.

      Roadroller essentially provided me with an extra 1.2kb - totally for free, without any need to change my source. Without it Q1K3 likely would have ended up with only level.

      Final build sizes:

      # bytes file
           48 boulder.rmf        # generic blob model
           57 box.rmf            # box model
           81 grenade.rmf        # cylinder model
          195 hound.rmf          # rottweiler model
          120 nailgun.rmf        # nailgun model
           96 torch.rmf          # torch model
          147 q.rmf              # quake logo model
          855 unit.rmf           # humanoid model
         2566 m1.plb             # e1m1 level
         1982 m2.plb             # e1m3 level
      
        73041 game.js            # un-minified source
        72267 game.packed.js     # source with replaced webgl constants
        26543 game.min.js        # uglify-js compressed source
        12003 game.roadrolled.js # roadroller compressed source
      
        12080 index.html         # final html file with the compressed source
         1599 m                  # all models combined  
         4548 l                  # all levels combined
      
        13304 game.zip           # final zip file
        --------------

      I truly loathe “modern JavaScript” with its ever changing “extremely fast” bundler of the week – be it Babel, Grunt, Gulp, Webpack or whatever else is in fashion. So my build process is just a simple shell script. Because of that, I can assure you that it still works tomorrow.

      I also made sure my game works when you just load the uncompressed source code. This greatly simplifies debugging and makes seeing changes as easy as pressing F5. I still can't wrap my head around the idea of “compiling” JavaScript. Please get off my lawn!

      Random Observations

      Final Thoughts

      With each game I built for JS13k it becomes more and more evident that the way to go is generating data in code, instead of directly authoring it. For Underrun all textures and levels were directly authored in Photoshop, resulting in a tiny low-res game. For Voidcall I generated the game world with lots of perlin noise and made it more organic. For Q1K3 I generated the textures.

      Naturally I want to explore generating 3D models and animations.

      In this regard another game for this year's JS13k, The Adventures of Captain Callisto, particularly impressed me with its clean and smooth 3D models. It's a very cool aesthetic that nicely works around the size limitations.

      (I still have to go through the full list of games for this year, but some of my favorites so far include The Maze of Space Goblins, Two Ships Passing in the Night, Shadow of the Keening Star and Galaxies)

      For the next time I also want to go into sound generation a bit more. I wasn't really happy with how the sound effects for Q1K3 turned out, so that's a field I need to learn more about.

      All in all Q1K3 was one of the most fun projects I ever worked on. The game is neither original nor very creative, it doesn't match the contest's theme and I don't expect to win anything. But having a very clear goal and just figuring out how to get there is extremely rewarding.

      I can't wait for next year's JS13k Contest, where I will completely ignore the theme again and try fit to Super Mario 64 or another classic into 13kb.

      © 2025 Dominic Szablewski – Imprint – powered by Pagenode (7ms) – made with <3
      “He must have hit himself trying to get out,” Larry surmised. “I remember that, too,” Larry said. Jeff chuckled rather sourly. “It’s funny,” Jeff remarked. “This-here psychology I’ve read about ain’t so far wrong when it says that folks who gets the wrong slant on a thing comes to believe it so strong that even the truth looks like a fib to them.” She could hear voices confusedly, men hurriedly calling and hallooing as she neared the back of the officers' line and crept into her tent. The door was barely closed when there came a knock, and the voice of the striker asking if she had heard the shot across the river. The blaze of glory had gone suddenly from the clouds, leaving them lifeless gray, when she turned her eyes back to them; and the outlook across the parade ground was very bare. She went and stood by the fire, leaning her arm on the mantel-shelf and setting her determined lips. Just then the whistle blew for a stop. This was enough excuse for Shorty. He fell back until the General was around the corner, out of sight, and then went up to Billings. There was a silence. "W?an't you be never coming here no more?" whispered Bessie in the next pause. His farm itself was at length forfeited, and Holgrave took shelter for the moment at old Hartwell's. The hut his father had reared when he married his mother, was still standing; the roof had fallen in, the ivy had grown over its walls; but even yet it sometimes sheltered the wandering mendicant, and often would the blaze of a large wood fire look cheerily through the shattered casement and the broken door, and shed an air almost of comfort over the bare walls. Holgrave remembered the ruin, as he was considering where he could abide until Margaret, who was far advanced in the family way, should be enabled to travel farther. His resolution was instantly formed; and refusing the assistance offered by Hartwell, and some other neighbours, and as decidedly rejecting the idea they proposed, of striving to regain possession of his house, he requested Lucy Hartwell to look to Margaret for a day or two, while he sought out a place to shelter them; and then, without mentioning his purpose, quitted the house. HoME日屄的能力 ENTER NUMBET 0017
      www.xiwangba.com.cn
      fuguo0.net.cn
      huomi2.com.cn
      www.k-led.net.cn
      www.yejie2.net.cn
      zhifu4.com.cn
      www.maoan8.com.cn
      www.hehua4.com.cn
      dadui2.com.cn
      4y54y45.com.cn
      主播115网盘 男女生身体下方相互动视频 543hy 久野千草h 韩国女主播玫瑰下载 女同互相舔脚p 在哪可以找到韩国美女主播朴妮唛28部 狠狠露b实图 性爱丰满呻吟 哪里能看到韩国女主播 他狂插 seses52 WWW.543BU.COM WWW.96CPZ.COM WWW.2222DDD.COM WWW.BBB197.COM WWW.Y6CZ.COM WWW.AILUB.COM WWW.GAO44.COM WWW.BBB442.COM WWW.SNXCR.COM WWW.218SJ.COM WWW.XBXB60.COM WWW.880BB.COM WWW.92DUDU.COM WWW.7060KK.COM WWW.HHH271.COM LAURA.SANCHEZ WWW.77HV.COM WWW.BBB40.COM WWW.AA191.COM WWW.QUICKLZ.COM WWW.ZJSUT.COM WWW.73NE.COM WWW.5678QI.COM WWW.WYXIUFU.COM 超碰欧美1 夜夜激情成人影音 av无限手机观看 9sekecim 依依社区人妻图片 goo电影777 三级做爱黄色小077 成人Av勉费电影视频wwwyehaobo7com 春晓大尺度私拍人体艺术 狠狠爱撸啊撸 成人游戏7878 日韩毛片基地ffff35com 激情影院男同性乱伦视频 刘芳菲口交 未成年色图片专区 熟女性穴图片 色姐姐找我解决 插我的小tube 久久熟女每日更新av 美女允男人的鸡巴视频 激情五月色姐妹83hhhhcom av网址图片 色妹妹luvvvvcom 插插插妹色色妹 淫翁浪媳玩3p 中年同志叔叔的大老二 九九色综合九九色综合九九色综合 欧美小浪妮免费视频 freechinesesexvideos 小泽玛利教室被搞 7黄片网站 青海色图 末世贱淫 亚洲视频视频99热 澳门赌场欧美辣图木木坏在线观看 国产sss视频在线 久热热 HTPPS6666av 男人吃女人的乳房好吗 幼女西瓜影音 2B姐姐的色图 成人电影苹果成人电影 成人电影偷拍自柏正在播放 深圳同志会所 99热女主播 美国性情中人网 av7886在线 淫色淫色激情成人网 百度wwwsusu29com 强奸初中妹在线播出 暴插大奶少妇 亚洲色图狠狠撸夜夜撸 妞干网无缓冲观看 汇聚全球精品丝袜50p rr150c0m 夜激情小说胸 亚洲美图欧美美图动漫美图精选小说人气小说家庭故事明星校园 野猪网播放器 大鸡巴用力操激情性爱 家庭教师做爱图片 5ekk 类似大波妹福利 偷拍自拍第一页46 色5天日本骚熟女 纵欲的少妇14p WWW259EECOMmp4 清纯美女插插自拍 一色 毛 美女无毛艺术下体 WWW_4444ATV_COM 欧美视频xxx 大鸡巴强奸a片亚州快播放录象视频 幼幼av在线 台湾老图片 开腿美女人体 干美穴p 欧美明星艳照门全集bt 771c人体淫 女s男m电影 色操逼成人网站 欧美浪屄图 护士的小屄 女同性爱快播 夫妻性爱淫片 百人体图片下载 我换妻的乐处 看儿子和妻子乱伦 插阴道人体艺术大图大全 淫乱的女同互相快播 狗吃美女奶 妹子射 大鸡巴的一篇 阴门抽插 dadanlubaoyubi 韩国最近出的一部电影男女主角在车里面发生关系的 成人在线国外 xxoo无插件 淫鬼五月 曰本全捰人体写真百度图片搜索 嫂子淫荡 国语对白影音先锋手机 日韩女神人体色图 苍老师淫叫 爷爷孙女做爱图 刘坤龙 福美来二代空调滤芯 萧强 队长袖标 黑脸娃娃前后对比 u盘有写保护 陈大顺 就去色色激情五月天 香奈儿成人视频 樋口冴子qvod快播 打飞机偷拍影音先锋 人体艺术性爱网页 在线播放日韩成人 欧美大屁股美女视频 日本妹妹综合 日本美女下体艺术摄影图 饭岛爱最后之作 俄罗斯熟女骚穴 乱骚淫荡图 av艳舞朴麦妮 偷拍自拍在线视频有声小说 幼女海滩p 人与动物的成人激情网 色老dou 裸体妹妹露b图片 朝美惠香yingyinxianfeng 朝鲜黄色一级片真玩 丝袜成人网站 ribennuedai 人体艺术ll chabiwang 性感沙滩漫画 母子交换撸区 乡村大妈淫乱 日木三极片 赤裸美女被操 天堂妹妹干网站 乱伦撸撸射wwwuc221com 亚洲美穴15p 女人互淫 五月热播另类 色色色色射射射狠狠 亚洲美女自拍人妻14p 清纯唯美四月五月 亚洲少妇和驴插逼 92jpmn 久久草鲁大妈电影 社会姐啪啪啪AV 中国妈妈口交 啪啪appwww23bene `国产毛片自拍 手机版色撸网 按摩抽插 电梯小姐无修国语版 鸡巴吃色色 好屌色qqc wwwxxx中国女影音 www250pp升级页面 邻家小妹是指什么气质 校园贞操带系列 色尼姑色和尚618mszhkcom wwww操 进出进出下体 美女淫荡的叫床声 我要曰逼 亿万老婆买一送一有声小说 樱井莉亚肉种子 小泽玛利亚露图 快播h网大全 51酒色网 黄色小说阅读器 D1D1成人网 蜜桃95撸管天堂 亚洲大香蕉 迅雷下载 www,好了av笫四色,com 美腿丝袜影音先锋av影视 法国av男主 色就色s94 vv影院 明日花绮罗snis615 www,javpapa,com 阿娇13分mp4下载磁力 放课后无码观看 人狗直播迅雷下载 性欧美孕妇x6 秋霞电院心理在线 性感女神ppp视频 邪恶dt图片第145大全 日本人六九视频jllzz 催眠羞辱学园在线视频 h动漫福利在线播放 女同性av在线观看 1四虎影剧在线播放 幸福一家人倪红霞 成人视频久廿 国产水柔全集 上司狂插少妇无码磁力 与男友爱爱的动作视屏 狠狠爱国产偷拍 美女掰阴自慰视 美国成人小视频 jezzz18 野鸡网在线577 微拍福利二区757 超碰AV大帝視頻 中文字慕大香蕉免费视频 韩国韩宝贝仙桃在线看 青青草影院肏屄视频直播 视频黄页 男女 操18岁女儿在线播放 cocogogo77在线 midd944 n七七卩S//156Zy 日本阿AV 机机干人人操视频在线观看 828vv类似平台 snis-731百度云 丝露视频在线 超碰免费视频 magnet 加勒比AV影音一本道 成人影片牛奶在线 av12天堂网2018亚洲 avop–227 微信sw225 yyzzooxx 嗯嗯啊啊噢噢用力操好爽大鸡巴 xo爽片体验视频 xmkk首发网 恋母故事在线 国产成人啪啪自拍 中文字幕伦理日本免费 午夜福利在线资源站 狠狠烽 吞精饮尿日本在线播放 周末情趣影院 在线Av网站 人人曰人人干 JSU发布组-最新最全导航书签 淫女福利视频导航 颐和园中国伦理片 美国四级复古磁力 国产白色视频在线 东京激情特辑无码 任你操不一样的视频 害羞素人中出在线视频 男用j插女b 超短裙女教师 第一次福利网站 色色在线视观看免费 里i番acg 人与人zoyXX 片名:[有码中文]禁断介护 绀野ひかる状 csobi 亚洲国产港台第一页 2018最新国产自拍做爱 日韩人妻免费高清视频 日本xx素人偷拍 在线观看一本道武藤兰 成电人影juyav 母乳av资源 chinese tubeboy free 舔阿姨淫水 祥仔在线 国产一级夫妻生活片 色农夫 导航 11111黄片 强奸了日本处女视频 啪啪声视频 四虎操逼影院久免费视频 美女主播裸身直播 虐阴虐乳在线观看 干日本妇妇高清 农夫AV神马枪AV神马影院 四虎天天干 强奸磁力 mp4 偷拍自拍情欲禁地 德川重男教书法gif电影 操锰影院 色pa动图 AV农夫 在线欧美AV 香蕉网婷婷 亚洲人成网站在线播放图片 淘av导航 毕业生 zaixian mianfei 成人电影偷拍 暴风福利在线播放 白丝小学生被操逼 snis724 在线 成人黄色自拍啪啪网 草榴t66y 超美外围女 冒险无套 百度福利高清视频在线观看 国产自拍-啪啪乐 伦理区eeuss 色爱区在线视频网站 7b7b视频网 国产搭讪乡村露脸磁力链接 下载 国产 三级 乱伦 强奸 人妻 xiaocaoshipinwang TS国产自拍 a性交视频 日本三级床呻吟视频 有奔空姐家狂操她的小逼视频 啪啪啪直播福利视频 四虎影音k66b muffia三乳女免费视频 wavr黄色 91邪恶网 裸男裸女啪啪啪视频 国产在线视频 美女自慰高潮冒白浆在线 欧美波霸影院 迅雷下载 俄罗斯母乳大赛 无码中文字幕视频 av网站资源大全 8xcao 美女a毛片 藤原瞳三孔齐上在线播放 大鸡吧操关婷婷逼痒痒的 东京性旅行 观看 九哥小浪窑网 可可和教练 迅雷链接 动漫自拍 色天使手机在线 奇奇网 混浴爱爱视频 鸡巴猛插插视频 青草在线内地 吉川莲无码流出链接 金卡戴珊在线观看地址 姐妹同夫81xacom 吉本多香美三级 起碰视频人人在线福利 肉肉 内射美女逼 人蓄交配视频 琪琪在线va 国产SM精品白富美富姐浴室玩弄漂亮女奴 白石茉莉奈 磁力下载 下载 狐狸hense 女主播 magnet swww560yycon 马小云资源在线 国外一级录像 《露出で乳イカせ》 国产偷拍自拍在线云播放 亚欧,日韩,中文在线 127 超碰3d动漫av在线播放 女主播自慰漏奶 美女主播手指扣逼视频 国产熟女BT riricaozongheyingyuan 动漫啪啪网 国产自拍 日本有码 91 亚洲第一导航福利视频 91深夜男人福利社区加入 国产偷拍自拍中文对白在线 干av在线 亚洲美乳无码分享 成人自拍碰碰在线免费观看 男人福利天堂免费观看 超碰av795 芦名未帆 西瓜影音 52avav我愿日本一 一级棒的美国j毛片 影音先锋qq318资源 689aaa 三上悠亚羽毛球 rmvb 国内自拍欧美激情 一本道 群交 在线播放 艾丝女王免费恋足视频 操逼网裸体掰阴 一个逼被日多了是怎么样的 大胆人体艺术网罗全球最大胆的人体艺术摄影图片照 波多野结衣美色图 快播丝袜少妇下载 林柏欣大胆人体艺述粉嫩美穴图片 操婆小说 成人做爱叫声 欧美金发美女洞大胆30p 1毛片级 激情男操女过程 肥腿人体艺术 音乐学院mm集体被强暴 美女老婆黑木耳 强暴在线自拍 欧美做爱透 25亚洲成人电影 色小三成人综合网 全部数据qvod偷拍自拍 萝莉h木耳图 青山菜菜 很狠爽影院com 人体少女成人艺术 肥佬簧片 色播张柏芝全套种子 操上美女楔 欧美熟妇刚交图 裸模麦苹果艳照种子 833jj in 性吧 美女吃精液高清图片 小川あさ美qvod 俺去也婷婷六月天 苍井空脚淫 先锋成人激情电影导航 xiao77论坛新年 影音先锋干女人逼 大鸡巴肏的爽风流老师 人体艺术ud 快乐公公和三个媳妇 熟女被干的种子 操大屄吗 俺去乱了 xfplay 6666 97成人小说 下载 经典av片名字 儿媳的靓屄 插穴粉逼蕾丝 bb4444 治要多少钱 泰囧电影下载 中华预测网 电动玩具车 怎么搞女逼逼 三级片露乳头 WWW_09GGG_COM wwwvv9vom 欧美幼交百度影音 插妹妹b电影 WWW_HOTLXCHYL_COM 苍井空乳房写真 风骚大胆性感人体艺术 教师的骚穴小说 中国顶级性爰片 及川淳子教授近照 美女黑川丰满可爱人体 sao美女人 关于足交的av WWW_988SE_COM 就爱操我逼 自拍伦理资源 乱伦短篇书籍 老姐视频合集 女阴口冈 日本肥婆 怎样看奶奶肏屄视频 波多野结衣人体艺术露阴 先锋大色妈导航 要能看波多野结衣的网站 色色成人网小说 黑木一香尻传说 爸爸插错洞吉吉 欧美女人露下沟图 幼女专区 操逼网武则天 媳妇欲哥哥淫欲 美女被插到高潮 妹妹窝欧洲人体艺术 山口铃子音影先锋 美妇露屄 全集网百科 成人在线av免费视 影音先锋sex8 骚穴内射骚逼 五月天33 妓女被轮奸小说 丁谈性交电影 欧洲色图亚洲色图撸 迅雷拳交网址 人与兽性交电影我和温柔的小母马 求一个成人黄色图片网站 快插爽死了呻吟mp3录音试听 蓝光波野多结衣 欧美另类少妇熟女11p 少女淫乱乳交爽图 明星11p 坏哥哥爱爱看视频在线观看 怀旧影苑茶余饭后 先锋影音欧美成人资源 波多野吉衣黄色网站 佐佐木的qq 久久撸久久肏开心五月 强奸乱伦校园都市激情 张雨绮内射p luanlun爱 宾馆极品15p 美女干逼人体艺术 大奶子插穴影音先锋 haodiaoorg 糗百偷拍自拍 晨诗怡磁力链接 evelynlinwikipedia 午夜情电影网 东北妞和哥哥激情 248部母乱自拍视频1页www9797ppcom wwwwuyefulinetvideo 网站wwwfoxtubecom 老师学生妹粉鲍穴 抽插咪咪 淫淫www38jwcom 撸露设 邪恶熟女系列 母子淫荡网角3 性虐老婆的小说 超碰视频来射吧飙奶 太平猴魁属于什么茶 爆操金发 b8mpmp4下载 安全无毒色图 婷四房色播 狠狠干天天色天天撸 小泽玛利亚在线dv观看 陌陌动漫网AV 梅伊比斯 超嫩幼女自慰 先先锋资源黄色网站 国语对白av先锋 av人体艺术之美穴 涩酷 艺术照少女未成年图片 无码女神陈丽 穿开档丝袜女人视频 嫩逼骚妇的精致美逼特写 亚洲有码无码中出百度网盘 亚洲炮照 黄色电影三星 影音先锋ye321net 小蚂蚁化学 乱伦锦集 酒色网女色网 操日本岳母 被操最多明星 强奸轮奸乱伦电影小说视频qiangjianluanluncom 亚女优Av 丰乳美艳人妻AV 海扁王2百度云 WWW92BBCCCON ■www190dcn■ 群交性奴图片小说 国产偷拍自拍14p 帅哥自慰视频 亚洲三级五月天百度 捆绑丝袜 男人免费超碰在线视频 做爱毛片岛国视频 师生 lu198com 和美女插dd小说 和女孩子穿牛仔裤啊啊啊啊 久草热在线视频精 大香蕉成人Av图片 做爱内射 中文无码口交乱伦短片 chinesepornvideos--porn300 印度伊人成人 yyxfav中文字幕 撸55 中文字幕强奸乱伦热播视频 老逼在线 大香蕉网伊人论坛 噜噜噜噜噜噜噜 wwwbaiducomwww4444dkcom 妹子插姐姐 88rrcon GG206ED2K 嫖娼系列在线 怕啪啪啪在线影院 女孩发骚自慰 五月欧美 淫荡老婆勾引大鸡巴 美国人xxx之偷窥 安卓成人视频器 2233AC0M 黄色l乱伦 淫荡少妇激情小说明星淫乱 成人自拍偷拍微信视频 日小妹妹网 www2bbbbcom 野人性交电影 高潮白浆你懂的 WWW,3Q5Q,C0n 人与动物天堂网站大全 av电影www5yycom 男女插水进 赤足者视频magnet 9191偷拍女厕视频 亚东方av在线狠狠撸自拍色图 色艺无间正面是哪集 与妻子小姨子同时啪啪啪 AV分类视频大全 人人插人人摸人人添 福利欧美顶级居家私拍 pornhd村上凉子 千人斩官网经典mnnnn58com 影音先锋调教资源 蝌蚪窝国产自拍在线 好逼天天网 q2002在线观看m917mmcom 不穿内裤的 wwwluav2comwwwluav2com 黄色电影之捆绑式 超碰95碰 巨乳学生制服自拍 公交车上的那些风流韵事 你懂的网站mp4 4444kkcom快播电影 美国黑人美女大屁股人体 av手机快播天堂 亚洲美女嫩穴图片 影音先锋人肏肏狗 om色青电影大片 婷婷五月天性爱片 夫妻打波照片 大鸡吧操大屄图片 全球人体四级电影 大胆 人体骚逼 快播qvod电影合集 逍遥社区成人网站 亚洲欧美自拍偷拍淫欲放荡激爽酷图清纯唯美明星艳照校园春色 WWW_38PA_COM 骚货熟女百度贴吧 偷拍小女人 插小姨的嫩洞穴 我操了妹妹的小穴 木屄 色图你色我也色 色导航色站导航 2012成人小说 插穴p 丝袜女人做爱偷拍自拍 日本 大奶丰满岳母 女儿都和女婿做爱 中文字幕 无码 先锋播放 我来也luanlunxiaoshuo 性干美女衣视频 08艳照 WWW_069QQ_COM 婷婷激情社区 幼女屄模 不穿戴任何衣物的大奶美女 国产草嫂子第二季 海贼王桌面壁纸高清 尹进良 巴布亚新几内亚属于哪个洲 五色天偷拍自拍 阴道极限虐待 www09kkk 女艺术图 欧美性爱潮喷集锦 人妻亲嘴图片小说 人妻小说激情网 自拍91自拍下载 草裙社区18成人网 有一个网站叫什么姐姐 人体艺术图片两性成人网 成人大奶人妻 学园2淫虐の図式 美人影院是真的吗 66人体激情艺术 淫萋小说 综合娱乐成人网 偷拍自拍12p 偷拍漏b无码 撸斆琅 成人免费电影乱伦小说 白白色人月马交配视频 kkbokk自拍图片 色女吃大阴茎 性爱技巧小故事 黄片处女破处流血 猛操死处女小说 苍井空母片 应采儿3ji 色吧淫乱 色尼姑五月天亚洲影院 无码电影 久久偷窥女厕国产视频wwwjiujiu7pcom 成人网站5566 金瓶梅在线免费电影 性感骚少妇视频 啪啪丝熟偷拍AV视频 青岛小琴简历 老外大鸡吧插逼 女人自慰久久网视频 福利电影院最新入口 ccc858com午夜a片 妻子与干爹李娜TXT 丝足会所导航 哥哥色姐姐干www777cccnet 日本邪恶动画片ftp 先锋影音中国无码免费色片 720lu自拍www820qqcc 老婆喜欢看大奶的女人 人妻熟女一级片在线播放 大色网小色网wwwlululu9com BT汤芳 11p图片欧美 性奴淫荡乱伦mp4 淫荡的教师艳母 亚洲欧美图片图片小说www2xnxncom 幼女刚刚发育图片 唐嫣av视频magnet 热热av原九九爱 成人直播下载地址 黄色片毛片三级片首页 兽皇合集在线播放 kanxxx 偷拍卡通动漫另类口味 激情综合五月激请 肥熟少妇图片 美女露小穴逼逼图片 谷露新片 亚洲色图欧美校园春色成人动漫青春 白虎ann WWW_ADY9_NET 有声小说包 词三分春色 春色代码 春色香 樱井莉亚监禁bt 樱井莉亚什么病 小泽玛利亚属于 小泽玛利亚gang 谁有免费的手机黄网 www苦歌com www桃太廊com www合肥演唱会 开心婷婷快播五月天 东京热03 pp在线看黄片 波野结衣av影音先锋 黑木耳影院 妹妹快播 淫意影视 爱窝窝在线 草淑女影视 Naruto 撸二哥电影男人网站 xfplay下载先锋影音 久久爱影院 歪歪电影 亚洲AV天堂在线2017免费 藤蒲惠在线视频 就去爱色和尚 葡京午夜成人 协和影院65页 午夜xo影 tiantian kan tiantiancao WWW,998aVaV,C0m 任你末言 yellow中文字幕网 制服中文 日本东京热一本道无码视频dvd欧美下载 颜射H网盘 情侣性福园 强奸漂亮女仆视频 性感护士检查丁丁的视频 青青手机免费看a片 青春草97视频碰碰碰碰 情趣内衣 亚洲 日本相亲节目接吻视频全集 日本男人插阴经视频 日本一本道高清无码DVDVD 日本女优丝袜足交视频 日本女人上高潮时阴道哗哗流水高清视频免费体验 男女之事60秒体验视频 成人免费观看网站大全 催眠羞辱学园在线视频 中文歌a片 J\香五月 朱音实在线 狼人干成人综合在线 东方后宫东方a 很黄A级 sihu最新网页地址 免费韩国ⅴip主播秀 偷拍情侣宾馆无码 mp4 欧美老熟妇视频 亚洲无码――四虎影库新版 操一下免费视频 老湿妹妹想要视频 原味丝足胭脂扣在线视频 成人网亚洲 黄色小姐视频小电影 国产自拍性爱视频在线播放 做爱视频无码大尺度 尤酷播电影网 超碰51无码 精灵影院 欧美免费AV km320全球华人成人短视频 另类资源 play视频在线提供好看的无码AV在线观看和在线播放,更有大量经典无码AV高清无 老司机影院体验区一分钟理论区 任你想不到的搞法 长梓泽免费视频 eee677 大西瓜pro福利亚州在线 掂花网 大香伊 在线美女 欧美无码番号下载 江疏影福利视频在线观看 一点拍福利视频 高铁上偷拍女人奶头 超长版黄片 夫妻做爱免费视频 情侣 秋霞在线观看_秋霞电影高清完整版-搜狗电影 三浦春佳肛交 下载 制服 丝袜 强奸 快播 骚屌操视频 露毛福利 日日日嗷嗷嗷视频在线观看 影音先锋主播勾引 757午夜福利影视1000 欧美啪啪51影院 青青青手机版自拍福利 树先生无删减版93分 秋欲浓成人网站 爱做av 日批视频有哪些 超在线操 张筱雨大尺度写真迅雷链接下载 午夜福利41 撸羊毛自拍 真人兔女郎福利视频 童颜巨乳女主播种子 90heyz 美国 高清无码 磁链接 256bl五月天 欧美AV 插死她 任你操任你曰爽爽 视频在线国产亚洲精品 91自拍网站在线看 绝色18岁美处女开苞 日本辣妈性交 wwwaⅤ747com 杨幂一分十一秒手机在线观看m youbbbla 在线 88资源总站 色友巴视频在线播放 岛国激情片 福利 下载 红楼吧影视 欧美九哥孕妇操逼视频 五色影院地址 日本大妈优女性爱视频 日本综合色高清无码 双飞美脚 下载 一级夫妻性生录像 东京热苍井空av 美国av磁力 爱的色放全2017奇奇网 苍井空无码a免费观看 操美女直播亚州在线 操逼故事在线视屏 操女人逼夜色视频 韩国丝袜购物直播 孩子们的秘密人人视频 不十岁的毛片一级 伦理片五月天六月丁香 mmmm89 床插胸 AV就去吻 av番号在线观看 www,岛国,com 爆乳白富美穿着性感肉丝拍写真逼逼真肥美 草帽AV 伦理短视频试着免费 十八禁啪啦啪漫画百度云 艺术写真视频得到k 乔丹卡佛三级磁力 青娱乐精品快播 恋脚癖的福利 日本wwww午夜com 高清强奸视频xxx 97和谐无码 amsr福利视频 啪啪啪鸡视频网 国产迷奸自拍 兼职模特琪琪 丝袜美腿诱惑优酷视频 操逼视频一级黄片 98g奶小妹视频 最新偷拍自拍图 露点紧身裤视频 偷拍爱爱视频电影院 欧美俱乐部在线视频 电影天堂利欧路 另类sm专区 1人体艺术无限极 斑斑马电影街 淫乱淑女 女屌操视 5388x成人 天使萌bt下载 李丽珍三级合集种子迅雷mp4 同人视频肉 小视频夜香阁在线观看 鲁呀鲁luya视频 日韩在线视频亚洲无码 限制级福利视频第九影院 国产夫产拍拍 美女爱爱短片 裸体女明星写真磁力下载 伦理色中文 色和尚2017最新综合在线 裸体瑜伽 magnet xt urn btih 青鱼视频情侣在線 秋霞网色大哥 日本亚洲风情性插图 qiqiluenli 性感视频在线 fk福利网站小视频 川村麻耶中文字幕 mp4 人与动物性交 足艺阁踩踏 真人插b 狠狠天天曰天天日 偶偶福利电影 女主播福利影院 嗨碰牛牛午?成人视频 坏坏小影院 色老板影院不卡 男女添bb日b视频 撸免费在线视频 韩国限制2018在线观看 柳岩午夜伦理 桃花岛在线视频五码 日本高清视频激情图片激情小说 普团惠 716OC0M 27报电影 91大神国产自拍 126bar自拍 意念射精视频 好屌看色色视频 国产自拍综 韩国天体营真人秀在线观看 国产自拍偷拍泡泡视频 国产自拍、欧美 鸡鸡爱逼逼av-淘宝m3n8 天天橹一把影院 快看漫画 亚洲老B骚AV视频在线 96碰碰在线播放 a片性爱视频 亚洲区欧美区综合图片自拍 法律的基本本能动漫 口交和乳交视频 6度影院鲁鲁片 苍井空真集 黄色小说女人与公犬做爱 97bt工厂现在怎么进去 奸鲍鱼肥臀视频 少妇嫩逼性交图片 她也色成人网站 男人操网 WWW_W3_ORG 男女在做爱色图