Compare commits
23
Commits
3649f91144
...
_170926_B
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
3b40a5bace | ||
|
|
6b41997779 | ||
|
|
8417c2e512 | ||
|
|
f4864e4d4d | ||
|
|
75a449f53a | ||
|
|
ace34de772 | ||
|
|
06df51abe9 | ||
|
|
fa5e0fa156 | ||
|
|
082cc680ab | ||
|
|
30d5b178e6 | ||
|
|
3ea3e0dc29 | ||
|
|
38ec7a045d | ||
|
|
1708ee316e | ||
|
|
a0327936eb | ||
|
|
ccc21f6160 | ||
|
|
e129991fcd | ||
|
|
66449003d3 | ||
|
|
e558a08fff | ||
|
|
87204f8627 | ||
|
|
e352bcf4cb | ||
|
|
df0de2c695 | ||
|
|
f632a89c2e | ||
|
|
54c0874b5a |
@@ -11,38 +11,104 @@ ENVIAR1_ATIVO=n
|
|||||||
ENVIAR1_INTERVALO_MINUTOS=1
|
ENVIAR1_INTERVALO_MINUTOS=1
|
||||||
ENVIAR1_ARQUIVO_ORDENS=ordens1.json
|
ENVIAR1_ARQUIVO_ORDENS=ordens1.json
|
||||||
ENVIAR1_QUANTIDADE_ORDENS=2
|
ENVIAR1_QUANTIDADE_ORDENS=2
|
||||||
|
ENVIAR1_HORA_INICIO=08:00
|
||||||
|
ENVIAR1_HORA_FIM=22:00
|
||||||
|
|
||||||
# ═══ Envio Automático 2 ═════════════════════════════════════════════
|
# ═══ Envio Automático 2 ═════════════════════════════════════════════
|
||||||
ENVIAR2_ATIVO=n
|
ENVIAR2_ATIVO=n
|
||||||
ENVIAR2_INTERVALO_MINUTOS=1
|
ENVIAR2_INTERVALO_MINUTOS=1
|
||||||
ENVIAR2_ARQUIVO_ORDENS=ordens2.json
|
ENVIAR2_ARQUIVO_ORDENS=ordens2.json
|
||||||
ENVIAR2_QUANTIDADE_ORDENS=2
|
ENVIAR2_QUANTIDADE_ORDENS=2
|
||||||
|
ENVIAR2_HORA_INICIO=08:00
|
||||||
|
ENVIAR2_HORA_FIM=22:00
|
||||||
|
|
||||||
# ═══ Envio Automático 3 ═════════════════════════════════════════════
|
# ═══ Envio Automático 3 ═════════════════════════════════════════════
|
||||||
ENVIAR3_ATIVO=n
|
ENVIAR3_ATIVO=n
|
||||||
ENVIAR3_INTERVALO_MINUTOS=1
|
ENVIAR3_INTERVALO_MINUTOS=1
|
||||||
ENVIAR3_ARQUIVO_ORDENS=ordens3.json
|
ENVIAR3_ARQUIVO_ORDENS=ordens3.json
|
||||||
ENVIAR3_QUANTIDADE_ORDENS=2
|
ENVIAR3_QUANTIDADE_ORDENS=2
|
||||||
|
ENVIAR3_HORA_INICIO=08:00
|
||||||
|
ENVIAR3_HORA_FIM=22:00
|
||||||
|
|
||||||
# ═══ Envio Automático 4 ═════════════════════════════════════════════
|
# ═══ Envio Automático 4 ═════════════════════════════════════════════
|
||||||
ENVIAR4_ATIVO=s
|
ENVIAR4_ATIVO=n
|
||||||
ENVIAR4_INTERVALO_MINUTOS=10
|
ENVIAR4_INTERVALO_MINUTOS=10
|
||||||
ENVIAR4_ARQUIVO_ORDENS=ordens4.json
|
ENVIAR4_ARQUIVO_ORDENS=ordens4.json
|
||||||
ENVIAR4_QUANTIDADE_ORDENS=2
|
ENVIAR4_QUANTIDADE_ORDENS=2
|
||||||
|
ENVIAR4_HORA_INICIO=08:00
|
||||||
|
ENVIAR4_HORA_FIM=22:00
|
||||||
|
|
||||||
# ═══ Envio Automático 5 ═════════════════════════════════════════════
|
# ═══ Envio Automático 5 ═════════════════════════════════════════════
|
||||||
ENVIAR5_ATIVO=n
|
ENVIAR5_ATIVO=n
|
||||||
ENVIAR5_INTERVALO_MINUTOS=1
|
ENVIAR5_INTERVALO_MINUTOS=1
|
||||||
ENVIAR5_ARQUIVO_ORDENS=ordens5.json
|
ENVIAR5_ARQUIVO_ORDENS=ordens5.json
|
||||||
ENVIAR5_QUANTIDADE_ORDENS=2
|
ENVIAR5_QUANTIDADE_ORDENS=2
|
||||||
|
ENVIAR5_HORA_INICIO=08:00
|
||||||
|
ENVIAR5_HORA_FIM=22:00
|
||||||
|
|
||||||
# ═══ Envio Automático 6 ═════════════════════════════════════════════
|
# ═══ Envio Automático 6 ═════════════════════════════════════════════
|
||||||
ENVIAR6_ATIVO=n
|
ENVIAR6_ATIVO=n
|
||||||
ENVIAR6_INTERVALO_MINUTOS=1
|
ENVIAR6_INTERVALO_MINUTOS=1
|
||||||
ENVIAR6_ARQUIVO_ORDENS=ordens6.json
|
ENVIAR6_ARQUIVO_ORDENS=ordens6.json
|
||||||
ENVIAR6_QUANTIDADE_ORDENS=2
|
ENVIAR6_QUANTIDADE_ORDENS=2
|
||||||
|
ENVIAR6_HORA_INICIO=08:00
|
||||||
|
ENVIAR6_HORA_FIM=22:00
|
||||||
|
|
||||||
# ═══ Horário de funcionamento (formato HH:MM, 24h) ═══════════════════
|
# ═══ Envio Automático 7 ═════════════════════════════════════════════
|
||||||
HORA_INICIO=08:00
|
ENVIAR7_ATIVO=n
|
||||||
HORA_FIM=22:00
|
ENVIAR7_INTERVALO_MINUTOS=1
|
||||||
|
ENVIAR7_ARQUIVO_ORDENS=ordens7.json
|
||||||
|
ENVIAR7_QUANTIDADE_ORDENS=2
|
||||||
|
ENVIAR7_HORA_INICIO=08:00
|
||||||
|
ENVIAR7_HORA_FIM=22:00
|
||||||
|
|
||||||
|
# ═══ Envio Automático 8 ═════════════════════════════════════════════
|
||||||
|
ENVIAR8_ATIVO=n
|
||||||
|
ENVIAR8_INTERVALO_MINUTOS=1
|
||||||
|
ENVIAR8_ARQUIVO_ORDENS=ordens8.json
|
||||||
|
ENVIAR8_QUANTIDADE_ORDENS=2
|
||||||
|
ENVIAR8_HORA_INICIO=08:00
|
||||||
|
ENVIAR8_HORA_FIM=22:00
|
||||||
|
|
||||||
|
# ═══ Envio Automático 9 ═════════════════════════════════════════════
|
||||||
|
ENVIAR9_ATIVO=n
|
||||||
|
ENVIAR9_INTERVALO_MINUTOS=1
|
||||||
|
ENVIAR9_ARQUIVO_ORDENS=ordens9.json
|
||||||
|
ENVIAR9_QUANTIDADE_ORDENS=1
|
||||||
|
ENVIAR9_HORA_INICIO=08:00
|
||||||
|
ENVIAR9_HORA_FIM=22:00
|
||||||
|
|
||||||
|
# ═══ Envio Automático 10 ════════════════════════════════════════════
|
||||||
|
ENVIAR10_ATIVO=n
|
||||||
|
ENVIAR10_INTERVALO_MINUTOS=1
|
||||||
|
ENVIAR10_ARQUIVO_ORDENS=ordens10.json
|
||||||
|
ENVIAR10_QUANTIDADE_ORDENS=1
|
||||||
|
ENVIAR10_HORA_INICIO=08:00
|
||||||
|
ENVIAR10_HORA_FIM=22:00
|
||||||
|
|
||||||
|
# ═══ Envio Automático 11 — IA ═══════════════════════════════════════
|
||||||
|
ENVIAR11_ATIVO=s
|
||||||
|
ENVIAR11_IA=s
|
||||||
|
ENVIAR11_INTERVALO_MINUTOS=120
|
||||||
|
ENVIAR11_ARQUIVO_ORDENS=prompt_ia.json
|
||||||
|
ENVIAR11_QUANTIDADE_ORDENS=1
|
||||||
|
ENVIAR11_HORA_INICIO=08:00
|
||||||
|
ENVIAR11_HORA_FIM=22:00
|
||||||
|
|
||||||
|
# ═══ Envio Automático 12 ════════════════════════════════════════════
|
||||||
|
ENVIAR12_ATIVO=s
|
||||||
|
ENVIAR12_INTERVALO_MINUTOS=50
|
||||||
|
ENVIAR12_ARQUIVO_ORDENS=ordens12.json
|
||||||
|
ENVIAR12_QUANTIDADE_ORDENS=1
|
||||||
|
ENVIAR12_HORA_INICIO=07:00
|
||||||
|
ENVIAR12_HORA_FIM=17:00
|
||||||
|
|
||||||
|
# OpenRouter AI
|
||||||
|
OPENROUTER_API_KEY=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
|
||||||
|
#OPENROUTER_MODEL=cognitivecomputations/dolphin-mistral-24b-venice-edition
|
||||||
|
OPENROUTER_MODEL=thedrummer/cydonia-24b-v4.1
|
||||||
|
OPENROUTER_BASE_URL=https://openrouter.ai/api/v1
|
||||||
|
OPENROUTER_TIMEOUT=60
|
||||||
|
OPENROUTER_MAX_TOKENS=8192
|
||||||
|
OPENROUTER_MAX_LINHAS=7
|
||||||
|
|
||||||
|
|||||||
+73
-3
@@ -17,37 +17,107 @@ ENVIAR1_INTERVALO_MINUTOS=1
|
|||||||
ENVIAR1_ARQUIVO_ORDENS=ordens1.json
|
ENVIAR1_ARQUIVO_ORDENS=ordens1.json
|
||||||
# Quantidade de ordens enviadas POR CICLO (1 = uma por ciclo, 3 = três de uma vez a cada intervalo)
|
# Quantidade de ordens enviadas POR CICLO (1 = uma por ciclo, 3 = três de uma vez a cada intervalo)
|
||||||
ENVIAR1_QUANTIDADE_ORDENS=1
|
ENVIAR1_QUANTIDADE_ORDENS=1
|
||||||
|
# Horário específico deste envio (HH:MM, 24h)
|
||||||
|
# ENVIAR1_HORA_INICIO=08:00
|
||||||
|
# ENVIAR1_HORA_FIM=22:00
|
||||||
|
|
||||||
# ═══ Envio Automático 2 ═════════════════════════════════════════════
|
# ═══ Envio Automático 2 ═════════════════════════════════════════════
|
||||||
ENVIAR2_ATIVO=s
|
ENVIAR2_ATIVO=s
|
||||||
ENVIAR2_INTERVALO_MINUTOS=1
|
ENVIAR2_INTERVALO_MINUTOS=1
|
||||||
ENVIAR2_ARQUIVO_ORDENS=ordens2.json
|
ENVIAR2_ARQUIVO_ORDENS=ordens2.json
|
||||||
ENVIAR2_QUANTIDADE_ORDENS=1
|
ENVIAR2_QUANTIDADE_ORDENS=1
|
||||||
|
# ENVIAR2_HORA_INICIO=08:00
|
||||||
|
# ENVIAR2_HORA_FIM=22:00
|
||||||
|
|
||||||
# ═══ Envio Automático 3 ═════════════════════════════════════════════
|
# ═══ Envio Automático 3 ═════════════════════════════════════════════
|
||||||
ENVIAR3_ATIVO=s
|
ENVIAR3_ATIVO=s
|
||||||
ENVIAR3_INTERVALO_MINUTOS=1
|
ENVIAR3_INTERVALO_MINUTOS=1
|
||||||
ENVIAR3_ARQUIVO_ORDENS=ordens3.json
|
ENVIAR3_ARQUIVO_ORDENS=ordens3.json
|
||||||
ENVIAR3_QUANTIDADE_ORDENS=1
|
ENVIAR3_QUANTIDADE_ORDENS=1
|
||||||
|
# ENVIAR3_HORA_INICIO=08:00
|
||||||
|
# ENVIAR3_HORA_FIM=22:00
|
||||||
|
|
||||||
# ═══ Envio Automático 4 ═════════════════════════════════════════════
|
# ═══ Envio Automático 4 ═════════════════════════════════════════════
|
||||||
ENVIAR4_ATIVO=s
|
ENVIAR4_ATIVO=s
|
||||||
ENVIAR4_INTERVALO_MINUTOS=1
|
ENVIAR4_INTERVALO_MINUTOS=1
|
||||||
ENVIAR4_ARQUIVO_ORDENS=ordens4.json
|
ENVIAR4_ARQUIVO_ORDENS=ordens4.json
|
||||||
ENVIAR4_QUANTIDADE_ORDENS=1
|
ENVIAR4_QUANTIDADE_ORDENS=1
|
||||||
|
# ENVIAR4_HORA_INICIO=08:00
|
||||||
|
# ENVIAR4_HORA_FIM=22:00
|
||||||
|
|
||||||
# ═══ Envio Automático 5 ═════════════════════════════════════════════
|
# ═══ Envio Automático 5 ═════════════════════════════════════════════
|
||||||
ENVIAR5_ATIVO=s
|
ENVIAR5_ATIVO=s
|
||||||
ENVIAR5_INTERVALO_MINUTOS=1
|
ENVIAR5_INTERVALO_MINUTOS=1
|
||||||
ENVIAR5_ARQUIVO_ORDENS=ordens5.json
|
ENVIAR5_ARQUIVO_ORDENS=ordens5.json
|
||||||
ENVIAR5_QUANTIDADE_ORDENS=1
|
ENVIAR5_QUANTIDADE_ORDENS=1
|
||||||
|
# ENVIAR5_HORA_INICIO=08:00
|
||||||
|
# ENVIAR5_HORA_FIM=22:00
|
||||||
|
|
||||||
# ═══ Envio Automático 6 ═════════════════════════════════════════════
|
# ═══ Envio Automático 6 ═════════════════════════════════════════════
|
||||||
ENVIAR6_ATIVO=s
|
ENVIAR6_ATIVO=s
|
||||||
ENVIAR6_INTERVALO_MINUTOS=1
|
ENVIAR6_INTERVALO_MINUTOS=1
|
||||||
ENVIAR6_ARQUIVO_ORDENS=ordens6.json
|
ENVIAR6_ARQUIVO_ORDENS=ordens6.json
|
||||||
ENVIAR6_QUANTIDADE_ORDENS=1
|
ENVIAR6_QUANTIDADE_ORDENS=1
|
||||||
|
# ENVIAR6_HORA_INICIO=08:00
|
||||||
|
# ENVIAR6_HORA_FIM=22:00
|
||||||
|
|
||||||
# ═══ Horário de funcionamento (formato HH:MM, 24h) ═══════════════════
|
# ═══ Envio Automático 7 ═════════════════════════════════════════════
|
||||||
HORA_INICIO=08:00
|
ENVIAR7_ATIVO=s
|
||||||
HORA_FIM=22:00
|
ENVIAR7_INTERVALO_MINUTOS=1
|
||||||
|
ENVIAR7_ARQUIVO_ORDENS=ordens7.json
|
||||||
|
ENVIAR7_QUANTIDADE_ORDENS=1
|
||||||
|
# ENVIAR7_HORA_INICIO=08:00
|
||||||
|
# ENVIAR7_HORA_FIM=22:00
|
||||||
|
|
||||||
|
# ═══ Envio Automático 8 ═════════════════════════════════════════════
|
||||||
|
ENVIAR8_ATIVO=s
|
||||||
|
ENVIAR8_INTERVALO_MINUTOS=1
|
||||||
|
ENVIAR8_ARQUIVO_ORDENS=ordens8.json
|
||||||
|
ENVIAR8_QUANTIDADE_ORDENS=1
|
||||||
|
# ENVIAR8_HORA_INICIO=08:00
|
||||||
|
# ENVIAR8_HORA_FIM=22:00
|
||||||
|
|
||||||
|
# ═══ Envio Automático 9 ═════════════════════════════════════════════
|
||||||
|
ENVIAR9_ATIVO=s
|
||||||
|
ENVIAR9_INTERVALO_MINUTOS=1
|
||||||
|
ENVIAR9_ARQUIVO_ORDENS=ordens9.json
|
||||||
|
ENVIAR9_QUANTIDADE_ORDENS=1
|
||||||
|
# ENVIAR9_HORA_INICIO=08:00
|
||||||
|
# ENVIAR9_HORA_FIM=22:00
|
||||||
|
|
||||||
|
# ═══ Envio Automático 10 ════════════════════════════════════════════
|
||||||
|
ENVIAR10_ATIVO=s
|
||||||
|
ENVIAR10_INTERVALO_MINUTOS=1
|
||||||
|
ENVIAR10_ARQUIVO_ORDENS=ordens10.json
|
||||||
|
ENVIAR10_QUANTIDADE_ORDENS=1
|
||||||
|
# ENVIAR10_HORA_INICIO=08:00
|
||||||
|
# ENVIAR10_HORA_FIM=22:00
|
||||||
|
|
||||||
|
# ═══ Envio Automático 11 — IA (geração via OpenRouter) ═════════════
|
||||||
|
# ENVIAR11_IA=s ← 's' ativa o modo IA; usa PROMPT_IA_ARQUIVO como prompt base
|
||||||
|
ENVIAR11_ATIVO=n
|
||||||
|
ENVIAR11_IA=n
|
||||||
|
ENVIAR11_INTERVALO_MINUTOS=5
|
||||||
|
# O ARQUIVO_ORDENS aqui é apenas o prompt base enviado à IA (não é uma lista de ordens)
|
||||||
|
ENVIAR11_ARQUIVO_ORDENS=prompt_ia.json
|
||||||
|
ENVIAR11_QUANTIDADE_ORDENS=1
|
||||||
|
# ENVIAR11_HORA_INICIO=08:00
|
||||||
|
# ENVIAR11_HORA_FIM=22:00
|
||||||
|
|
||||||
|
# ═══ Envio Automático 12 ════════════════════════════════════════════
|
||||||
|
ENVIAR12_ATIVO=n
|
||||||
|
ENVIAR12_INTERVALO_MINUTOS=5
|
||||||
|
ENVIAR12_ARQUIVO_ORDENS=ordens12.json
|
||||||
|
ENVIAR12_QUANTIDADE_ORDENS=1
|
||||||
|
# ENVIAR12_HORA_INICIO=08:00
|
||||||
|
# ENVIAR12_HORA_FIM=22:00
|
||||||
|
|
||||||
|
# ═══ OpenRouter AI ═══════════════════════════════════════════════════
|
||||||
|
OPENROUTER_API_KEY=sua_chave_aqui
|
||||||
|
OPENROUTER_MODEL=deepseek/deepseek-v4.1-flash
|
||||||
|
OPENROUTER_BASE_URL=https://openrouter.ai/api/v1
|
||||||
|
OPENROUTER_TIMEOUT=60
|
||||||
|
# Tamanho máximo da resposta da IA em tokens (padrão: 2048)
|
||||||
|
OPENROUTER_MAX_TOKENS=2048
|
||||||
|
# Máximo de linhas da resposta da IA (0 = sem limite)
|
||||||
|
OPENROUTER_MAX_LINHAS=15
|
||||||
@@ -32,7 +32,7 @@ Preencha:
|
|||||||
|
|
||||||
### Envios automáticos
|
### Envios automáticos
|
||||||
|
|
||||||
O sistema suporta até 6 envios automáticos independentes (1 a 6):
|
O sistema suporta até 8 envios automáticos independentes (1 a 8):
|
||||||
|
|
||||||
| Variável | Descrição |
|
| Variável | Descrição |
|
||||||
|---|---|
|
|---|---|
|
||||||
@@ -49,7 +49,7 @@ ENVIAR1_INTERVALO_MINUTOS=1
|
|||||||
ENVIAR1_ARQUIVO_ORDENS=ordens1.json
|
ENVIAR1_ARQUIVO_ORDENS=ordens1.json
|
||||||
```
|
```
|
||||||
|
|
||||||
Cada envio usa seu próprio arquivo de ordens (`ordens1.json` a `ordens6.json`). Não modifique a ordem dos itens dentro de cada JSON.
|
Cada envio usa seu próprio arquivo de ordens (`ordens1.json` a `ordens8.json`). Não modifique a ordem dos itens dentro de cada JSON.
|
||||||
|
|
||||||
## 4. Testar manualmente
|
## 4. Testar manualmente
|
||||||
|
|
||||||
@@ -109,7 +109,7 @@ sudo systemctl disable jogo3
|
|||||||
|
|
||||||
## 7. Atualizar ordens
|
## 7. Atualizar ordens
|
||||||
|
|
||||||
Edite o arquivo de ordens desejado (`ordens1.json` … `ordens6.json`), depois reinicie o service:
|
Edite o arquivo de ordens desejado (`ordens1.json` … `ordens8.json`), depois reinicie o service:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
sudo systemctl restart jogo3
|
sudo systemctl restart jogo3
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ Bot do Telegram que envia ordens eróticas automáticas em intervalos configurá
|
|||||||
|
|
||||||
## Funcionalidades
|
## Funcionalidades
|
||||||
|
|
||||||
- **Múltiplos envios automáticos** — até 6 canais independentes rodando em paralelo (`ENVIAR1` a `ENVIAR6`), cada um com seu próprio arquivo de ordens, intervalo e quantidade por ciclo.
|
- **Múltiplos envios automáticos** — até 10 canais independentes rodando em paralelo (`ENVIAR1` a `ENVIAR10`), cada um com seu próprio arquivo de ordens, intervalo e quantidade por ciclo.
|
||||||
- **Arquivos de ordens em JSON** — ordens são lidas de arquivos JSON (`ordens1.json` … `ordens6.json`) com total liberdade de edição. Cada arquivo tem seu próprio contexto temático (ex: `ordens4.json` foco em CABEÇA do pau, `ordens5.json` sem dedo no cú, `ordens6.json` permite dedo no cú).
|
- **Arquivos de ordens em JSON** — ordens são lidas de arquivos JSON (`ordens1.json` … `ordens8.json`) com total liberdade de edição. Cada arquivo tem seu próprio contexto temático (ex: `ordens4.json` foco em CABEÇA do pau, `ordens7.json` foco em exposição ao ar livre).
|
||||||
- **Adaptação automática de gênero** — se `SEXO=feminino` no `.env`, o sistema substitui termos masculinos (pau, saco, cueca, punheta, porra, próstata) pelos equivalentes femininos (buceta, xota, calcinha, siririca, gozo, ponto G). Arquivos `ordens2.json` e `ordens3.json` usam "Ação sensual" como placeholder para substituição contextual.
|
- **Adaptação automática de gênero** — se `SEXO=feminino` no `.env`, o sistema substitui termos masculinos (pau, saco, cueca, punheta, porra, próstata) pelos equivalentes femininos (buceta, xota, calcinha, siririca, gozo, ponto G). Arquivos `ordens2.json` e `ordens3.json` usam "Ação sensual" como placeholder para substituição contextual.
|
||||||
- **Controle de horário** — as ordens só são enviadas dentro da janela configurada (`HORA_INICIO` / `HORA_FIM`).
|
- **Controle de horário** — as ordens só são enviadas dentro da janela configurada (`HORA_INICIO` / `HORA_FIM`).
|
||||||
- **Ordens por ciclo** — cada canal pode enviar 1 ou mais ordens a cada intervalo, permitindo rajadas ou envios individuais.
|
- **Ordens por ciclo** — cada canal pode enviar 1 ou mais ordens a cada intervalo, permitindo rajadas ou envios individuais.
|
||||||
@@ -44,7 +44,7 @@ chmod +x iniciar.sh
|
|||||||
|
|
||||||
### Canais de envio (`ENVIAR{n}_*`)
|
### Canais de envio (`ENVIAR{n}_*`)
|
||||||
|
|
||||||
Cada canal **1 a 6** tem sua própria configuração:
|
Cada canal **1 a 10** tem sua própria configuração:
|
||||||
|
|
||||||
| Variável | Descrição |
|
| Variável | Descrição |
|
||||||
|---|---|
|
|---|---|
|
||||||
@@ -63,7 +63,7 @@ ENVIAR1_QUANTIDADE_ORDENS=2
|
|||||||
|
|
||||||
### Arquivos de ordens
|
### Arquivos de ordens
|
||||||
|
|
||||||
Os arquivos `ordens1.json` a `ordens6.json` contêm listas JSON com strings de ordens. Cada ordem é uma string descritiva com instruções de execução detalhadas. Contexto de cada arquivo:
|
Os arquivos `ordens1.json` a `ordens10.json` contêm listas JSON com strings de ordens. Cada ordem é uma string descritiva com instruções de execução detalhadas. Contexto de cada arquivo:
|
||||||
|
|
||||||
| Arquivo | Ordens | Contexto |
|
| Arquivo | Ordens | Contexto |
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
@@ -73,6 +73,10 @@ Os arquivos `ordens1.json` a `ordens6.json` contêm listas JSON com strings de o
|
|||||||
| `ordens4.json` | 100 | Foco em CABEÇA do pau — massagens, círculos, estímulos da glande |
|
| `ordens4.json` | 100 | Foco em CABEÇA do pau — massagens, círculos, estímulos da glande |
|
||||||
| `ordens5.json` | 100 | CABEÇA do pau + pau + exibir bunda/cú. **Sem dedo no cú. Sem gozar.** |
|
| `ordens5.json` | 100 | CABEÇA do pau + pau + exibir bunda/cú. **Sem dedo no cú. Sem gozar.** |
|
||||||
| `ordens6.json` | 100 | CABEÇA do pau + pau + exibir bunda/cú. **Permite dedo no cú. Sem gozar.** |
|
| `ordens6.json` | 100 | CABEÇA do pau + pau + exibir bunda/cú. **Permite dedo no cú. Sem gozar.** |
|
||||||
|
| `ordens7.json` | 400 | **Exposicao + sexo ao ar livre** |
|
||||||
|
| `ordens8.json` | 100 | **Dominacao/humilhacao** — tapas, edging, ruined orgasm, multiplos orgasmos, humilhacao verbal, castigo corporal, dominacao imaginaria, submissao total |
|
||||||
|
| `ordens9.json` | 50 | **Imaginacao** — cenas eroticas detalhadas para fantasiar e gozar: vizinhos, flagras, boss/patroa, medicas, casais, dominacao, exposicao e voyeurismo |
|
||||||
|
| `ordens10.json` | 50 | **Humilhacao** — ordens de castigo e auto-humilhacao: tapas, xingamentos, joelhos, expor bunda/cu com plug, gozo na propria boca, ruined orgasm, castigo corporal e submissao total |
|
||||||
|
|
||||||
**Regras ao editar/criar ordens:**
|
**Regras ao editar/criar ordens:**
|
||||||
- O arquivo deve conter um array JSON válido de strings
|
- O arquivo deve conter um array JSON válido de strings
|
||||||
@@ -95,6 +99,8 @@ app/
|
|||||||
├── ordens4.json
|
├── ordens4.json
|
||||||
├── ordens5.json
|
├── ordens5.json
|
||||||
├── ordens6.json
|
├── ordens6.json
|
||||||
|
├── ordens7.json
|
||||||
|
├── ordens8.json
|
||||||
├── dados_*.py # Bancos de dados auxiliares (não usados pelo main.py atualmente)
|
├── dados_*.py # Bancos de dados auxiliares (não usados pelo main.py atualmente)
|
||||||
├── DEPLOY.md # Instruções de deploy no Debian 12
|
├── DEPLOY.md # Instruções de deploy no Debian 12
|
||||||
├── README.md # Este arquivo
|
├── README.md # Este arquivo
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Executable → Regular
BIN
Binary file not shown.
+71
@@ -0,0 +1,71 @@
|
|||||||
|
import json
|
||||||
|
import os
|
||||||
|
import logging
|
||||||
|
import httpx
|
||||||
|
|
||||||
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
OPENROUTER_API_KEY = os.getenv("OPENROUTER_API_KEY", "")
|
||||||
|
OPENROUTER_MODEL = os.getenv("OPENROUTER_MODEL", "deepseek/deepseek-v4.1-flash")
|
||||||
|
OPENROUTER_BASE_URL = os.getenv("OPENROUTER_BASE_URL", "https://openrouter.ai/api/v1")
|
||||||
|
OPENROUTER_TIMEOUT = int(os.getenv("OPENROUTER_TIMEOUT", "60"))
|
||||||
|
OPENROUTER_MAX_TOKENS = int(os.getenv("OPENROUTER_MAX_TOKENS", "2048"))
|
||||||
|
OPENROUTER_MAX_LINHAS = int(os.getenv("OPENROUTER_MAX_LINHAS", "0"))
|
||||||
|
|
||||||
|
|
||||||
|
def carregar_prompt_base() -> str:
|
||||||
|
caminho = os.getenv("PROMPT_IA_ARQUIVO", "prompt_ia.json")
|
||||||
|
caminho = os.path.join(os.path.dirname(__file__), caminho)
|
||||||
|
with open(caminho, "r", encoding="utf-8") as f:
|
||||||
|
dados = json.load(f)
|
||||||
|
if isinstance(dados, list) and len(dados) > 0:
|
||||||
|
return dados[0]
|
||||||
|
return ""
|
||||||
|
|
||||||
|
|
||||||
|
async def gerar_ordem_ia() -> str:
|
||||||
|
prompt_base = carregar_prompt_base()
|
||||||
|
|
||||||
|
if not OPENROUTER_API_KEY:
|
||||||
|
log.error("OPENROUTER_API_KEY nao configurada no .env")
|
||||||
|
return "[ERRO: API key nao configurada. Configure OPENROUTER_API_KEY no .env]"
|
||||||
|
|
||||||
|
user_msg = "Gere uma ordem de humilhação agora, completa e detalhada, como se fosse o Mestre DeepSeek falando. Nao se repita. Seja criativa e picante."
|
||||||
|
if OPENROUTER_MAX_LINHAS > 0:
|
||||||
|
user_msg += f" A ordem deve ter no maximo {OPENROUTER_MAX_LINHAS} linhas."
|
||||||
|
|
||||||
|
headers = {
|
||||||
|
"Authorization": f"Bearer {OPENROUTER_API_KEY}",
|
||||||
|
"Content-Type": "application/json",
|
||||||
|
}
|
||||||
|
|
||||||
|
payload = {
|
||||||
|
"model": OPENROUTER_MODEL,
|
||||||
|
"messages": [
|
||||||
|
{
|
||||||
|
"role": "system",
|
||||||
|
"content": prompt_base,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"role": "user",
|
||||||
|
"content": user_msg,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
"max_tokens": OPENROUTER_MAX_TOKENS,
|
||||||
|
"temperature": 0.9,
|
||||||
|
}
|
||||||
|
|
||||||
|
try:
|
||||||
|
async with httpx.AsyncClient(timeout=OPENROUTER_TIMEOUT) as client:
|
||||||
|
resp = await client.post(
|
||||||
|
f"{OPENROUTER_BASE_URL}/chat/completions",
|
||||||
|
headers=headers,
|
||||||
|
json=payload,
|
||||||
|
)
|
||||||
|
resp.raise_for_status()
|
||||||
|
data = resp.json()
|
||||||
|
ordem = data["choices"][0]["message"]["content"].strip()
|
||||||
|
return ordem
|
||||||
|
except Exception as e:
|
||||||
|
log.error("Erro ao gerar ordem com IA: %s", e)
|
||||||
|
return f"[ERRO ao gerar ordem: {e}]"
|
||||||
+28
-22
@@ -25,16 +25,17 @@ TELEGRAM_TOKEN=$(grep_val TELEGRAM_TOKEN)
|
|||||||
TELEGRAM_CHAT_ID=$(grep_val TELEGRAM_CHAT_ID)
|
TELEGRAM_CHAT_ID=$(grep_val TELEGRAM_CHAT_ID)
|
||||||
SEXO=$(grep_val SEXO)
|
SEXO=$(grep_val SEXO)
|
||||||
IDADE=$(grep_val IDADE)
|
IDADE=$(grep_val IDADE)
|
||||||
HORA_INICIO=$(grep_val HORA_INICIO)
|
|
||||||
HORA_FIM=$(grep_val HORA_FIM)
|
|
||||||
|
|
||||||
# Configuração de cada envio automático
|
# Configuração de cada envio automático
|
||||||
declare -a ENVIAR_ATIVO ENVIAR_INTERVALO ENVIAR_ARQUIVO ENVIAR_QUANTIDADE
|
declare -a ENVIAR_ATIVO ENVIAR_IA ENVIAR_INTERVALO ENVIAR_ARQUIVO ENVIAR_QUANTIDADE ENVIAR_HORA_INICIO ENVIAR_HORA_FIM
|
||||||
for n in 1 2 3 4 5 6; do
|
for n in 1 2 3 4 5 6 7 8 9 10 11 12; do
|
||||||
ENVIAR_ATIVO[$n]=$(grep_val "ENVIAR${n}_ATIVO")
|
ENVIAR_ATIVO[$n]=$(grep_val "ENVIAR${n}_ATIVO")
|
||||||
|
ENVIAR_IA[$n]=$(grep_val "ENVIAR${n}_IA")
|
||||||
ENVIAR_INTERVALO[$n]=$(grep_val "ENVIAR${n}_INTERVALO_MINUTOS")
|
ENVIAR_INTERVALO[$n]=$(grep_val "ENVIAR${n}_INTERVALO_MINUTOS")
|
||||||
ENVIAR_ARQUIVO[$n]=$(grep_val "ENVIAR${n}_ARQUIVO_ORDENS")
|
ENVIAR_ARQUIVO[$n]=$(grep_val "ENVIAR${n}_ARQUIVO_ORDENS")
|
||||||
ENVIAR_QUANTIDADE[$n]=$(grep_val "ENVIAR${n}_QUANTIDADE_ORDENS")
|
ENVIAR_QUANTIDADE[$n]=$(grep_val "ENVIAR${n}_QUANTIDADE_ORDENS")
|
||||||
|
ENVIAR_HORA_INICIO[$n]=$(grep_val "ENVIAR${n}_HORA_INICIO")
|
||||||
|
ENVIAR_HORA_FIM[$n]=$(grep_val "ENVIAR${n}_HORA_FIM")
|
||||||
done
|
done
|
||||||
|
|
||||||
if [ -z "$TELEGRAM_TOKEN" ] || [ "$TELEGRAM_TOKEN" = "seu_token_aqui" ]; then
|
if [ -z "$TELEGRAM_TOKEN" ] || [ "$TELEGRAM_TOKEN" = "seu_token_aqui" ]; then
|
||||||
@@ -47,34 +48,35 @@ if [ -z "$TELEGRAM_CHAT_ID" ] || [ "$TELEGRAM_CHAT_ID" = "seu_chat_id_aqui" ]; t
|
|||||||
fi
|
fi
|
||||||
|
|
||||||
# Validação dos arquivos de ordens
|
# Validação dos arquivos de ordens
|
||||||
for n in 1 2 3 4 5 6; do
|
for n in 1 2 3 4 5 6 7 8 9 10 11 12; do
|
||||||
if [ "${ENVIAR_ATIVO[$n]}" = "s" ] && [ ! -f "${ENVIAR_ARQUIVO[$n]}" ]; then
|
if [ "${ENVIAR_ATIVO[$n]}" = "s" ] && [ ! -f "${ENVIAR_ARQUIVO[$n]}" ]; then
|
||||||
echo "[!] Arquivo de ordens '${ENVIAR_ARQUIVO[$n]}' não encontrado (envio automático $n)"
|
echo "[!] Arquivo de ordens '${ENVIAR_ARQUIVO[$n]}' não encontrado (envio automático $n)"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
export TELEGRAM_TOKEN TELEGRAM_CHAT_ID SEXO IDADE HORA_INICIO HORA_FIM
|
export TELEGRAM_TOKEN TELEGRAM_CHAT_ID SEXO IDADE
|
||||||
for n in 1 2 3 4 5 6; do
|
for n in 1 2 3 4 5 6 7 8 9 10 11 12; do
|
||||||
export "ENVIAR${n}_ATIVO=${ENVIAR_ATIVO[$n]}"
|
export "ENVIAR${n}_ATIVO=${ENVIAR_ATIVO[$n]}"
|
||||||
|
export "ENVIAR${n}_IA=${ENVIAR_IA[$n]}"
|
||||||
export "ENVIAR${n}_INTERVALO_MINUTOS=${ENVIAR_INTERVALO[$n]}"
|
export "ENVIAR${n}_INTERVALO_MINUTOS=${ENVIAR_INTERVALO[$n]}"
|
||||||
export "ENVIAR${n}_ARQUIVO_ORDENS=${ENVIAR_ARQUIVO[$n]}"
|
export "ENVIAR${n}_ARQUIVO_ORDENS=${ENVIAR_ARQUIVO[$n]}"
|
||||||
export "ENVIAR${n}_QUANTIDADE_ORDENS=${ENVIAR_QUANTIDADE[$n]}"
|
export "ENVIAR${n}_QUANTIDADE_ORDENS=${ENVIAR_QUANTIDADE[$n]}"
|
||||||
|
export "ENVIAR${n}_HORA_INICIO=${ENVIAR_HORA_INICIO[$n]}"
|
||||||
|
export "ENVIAR${n}_HORA_FIM=${ENVIAR_HORA_FIM[$n]}"
|
||||||
done
|
done
|
||||||
|
|
||||||
# ─── Python virtual env ──────────────────────────────────────────────────────
|
|
||||||
if [ ! -d venv ]; then
|
|
||||||
echo "[+] Criando ambiente virtual Python 3..."
|
|
||||||
python3 -m venv venv
|
|
||||||
fi
|
|
||||||
|
|
||||||
echo "[+] Ativando ambiente virtual..."
|
|
||||||
source venv/bin/activate
|
|
||||||
|
|
||||||
# ─── Dependências ──────────────────────────────────────────────────────────────
|
# ─── Dependências ──────────────────────────────────────────────────────────────
|
||||||
echo "[+] Instalando dependências..."
|
echo "[+] Instalando dependências..."
|
||||||
pip install --upgrade pip -q
|
|
||||||
pip install -r requirements.txt -q
|
# Garantir que pip está instalado (sistema Debian sem pip nativo)
|
||||||
|
if ! python3 -m pip --version >/dev/null 2>&1; then
|
||||||
|
echo "[+] Instalando pip via get-pip.py..."
|
||||||
|
curl -sS https://bootstrap.pypa.io/get-pip.py | python3 - --break-system-packages
|
||||||
|
fi
|
||||||
|
|
||||||
|
python3 -m pip install --upgrade pip -q --break-system-packages 2>/dev/null || true
|
||||||
|
python3 -m pip install -r requirements.txt -q --break-system-packages
|
||||||
|
|
||||||
# ─── Ativar /start do bot ────────────────────────────────────────────────────
|
# ─── Ativar /start do bot ────────────────────────────────────────────────────
|
||||||
echo "[+] Ativando /start no bot do Telegram..."
|
echo "[+] Ativando /start no bot do Telegram..."
|
||||||
@@ -97,9 +99,8 @@ PYEOF
|
|||||||
# ─── Rodar o programa ─────────────────────────────────────────────────────────
|
# ─── Rodar o programa ─────────────────────────────────────────────────────────
|
||||||
echo "[+] Iniciando sistema de ordens..."
|
echo "[+] Iniciando sistema de ordens..."
|
||||||
echo " Sexo: ${SEXO:-masculino} | Idade: ${IDADE:-30}"
|
echo " Sexo: ${SEXO:-masculino} | Idade: ${IDADE:-30}"
|
||||||
echo " Horário: ${HORA_INICIO:-08:00} - ${HORA_FIM:-22:00}"
|
|
||||||
echo ""
|
echo ""
|
||||||
for n in 1 2 3 4 5 6; do
|
for n in 1 2 3 4 5 6 7 8 9 10 11 12; do
|
||||||
status="❌ DESATIVADO"
|
status="❌ DESATIVADO"
|
||||||
if [ "${ENVIAR_ATIVO[$n]}" = "s" ]; then
|
if [ "${ENVIAR_ATIVO[$n]}" = "s" ]; then
|
||||||
status="✅ ATIVO"
|
status="✅ ATIVO"
|
||||||
@@ -108,8 +109,13 @@ for n in 1 2 3 4 5 6; do
|
|||||||
if [ "${ENVIAR_QUANTIDADE[$n]}" -gt 0 ] 2>/dev/null; then
|
if [ "${ENVIAR_QUANTIDADE[$n]}" -gt 0 ] 2>/dev/null; then
|
||||||
qtd_info="${ENVIAR_QUANTIDADE[$n]} ordens"
|
qtd_info="${ENVIAR_QUANTIDADE[$n]} ordens"
|
||||||
fi
|
fi
|
||||||
echo " Envio Automático $n: $status"
|
hora_info="${ENVIAR_HORA_INICIO[$n]:-00:00}-${ENVIAR_HORA_FIM[$n]:-23:59}"
|
||||||
echo " Intervalo: ${ENVIAR_INTERVALO[$n]:-1} min | Qtd: $qtd_info | Arquivo: ${ENVIAR_ARQUIVO[$n]:-ordens${n}.json}"
|
ia_tag=""
|
||||||
|
if [ "${ENVIAR_IA[$n]}" = "s" ]; then
|
||||||
|
ia_tag=" 🤖 IA"
|
||||||
|
fi
|
||||||
|
echo " Envio Automático $n: $status$ia_tag"
|
||||||
|
echo " Intervalo: ${ENVIAR_INTERVALO[$n]:-1} min | Qtd: $qtd_info | Horário: $hora_info | Arquivo: ${ENVIAR_ARQUIVO[$n]:-ordens${n}.json}"
|
||||||
done
|
done
|
||||||
echo ""
|
echo ""
|
||||||
echo "Pressione Ctrl+C para parar."
|
echo "Pressione Ctrl+C para parar."
|
||||||
|
|||||||
@@ -24,9 +24,6 @@ CHAT_ID = os.getenv("TELEGRAM_CHAT_ID", "")
|
|||||||
SEXO = os.getenv("SEXO", "masculino").strip().lower()
|
SEXO = os.getenv("SEXO", "masculino").strip().lower()
|
||||||
IDADE = int(os.getenv("IDADE", "30"))
|
IDADE = int(os.getenv("IDADE", "30"))
|
||||||
|
|
||||||
HORA_INICIO = os.getenv("HORA_INICIO", "00:00").strip()
|
|
||||||
HORA_FIM = os.getenv("HORA_FIM", "23:59").strip()
|
|
||||||
|
|
||||||
|
|
||||||
# ─── Config por tipo de envio ─────────────────────────────────────────────────
|
# ─── Config por tipo de envio ─────────────────────────────────────────────────
|
||||||
@dataclass
|
@dataclass
|
||||||
@@ -36,6 +33,9 @@ class ConfigEnvio:
|
|||||||
intervalo_minutos: int
|
intervalo_minutos: int
|
||||||
arquivo_ordens: str
|
arquivo_ordens: str
|
||||||
quantidade_ordens: int # 0 = sem limite
|
quantidade_ordens: int # 0 = sem limite
|
||||||
|
hora_inicio: str
|
||||||
|
hora_fim: str
|
||||||
|
ia_mode: bool = False
|
||||||
|
|
||||||
|
|
||||||
def carregar_config_envio(numero: int) -> ConfigEnvio:
|
def carregar_config_envio(numero: int) -> ConfigEnvio:
|
||||||
@@ -45,12 +45,19 @@ def carregar_config_envio(numero: int) -> ConfigEnvio:
|
|||||||
intervalo = int(os.getenv(f"{prefixo}INTERVALO_MINUTOS", "1"))
|
intervalo = int(os.getenv(f"{prefixo}INTERVALO_MINUTOS", "1"))
|
||||||
arquivo = os.getenv(f"{prefixo}ARQUIVO_ORDENS", f"ordens{numero}.json").strip()
|
arquivo = os.getenv(f"{prefixo}ARQUIVO_ORDENS", f"ordens{numero}.json").strip()
|
||||||
quantidade = int(os.getenv(f"{prefixo}QUANTIDADE_ORDENS", "0"))
|
quantidade = int(os.getenv(f"{prefixo}QUANTIDADE_ORDENS", "0"))
|
||||||
|
hora_inicio = os.getenv(f"{prefixo}HORA_INICIO", "00:00").strip()
|
||||||
|
hora_fim = os.getenv(f"{prefixo}HORA_FIM", "23:59").strip()
|
||||||
|
ia_raw = os.getenv(f"{prefixo}IA", "n").strip().lower()
|
||||||
|
ia_mode = ia_raw == "s"
|
||||||
return ConfigEnvio(
|
return ConfigEnvio(
|
||||||
numero=numero,
|
numero=numero,
|
||||||
ativo=ativo,
|
ativo=ativo,
|
||||||
intervalo_minutos=intervalo,
|
intervalo_minutos=intervalo,
|
||||||
arquivo_ordens=arquivo,
|
arquivo_ordens=arquivo,
|
||||||
quantidade_ordens=quantidade,
|
quantidade_ordens=quantidade,
|
||||||
|
hora_inicio=hora_inicio,
|
||||||
|
hora_fim=hora_fim,
|
||||||
|
ia_mode=ia_mode,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -109,9 +116,9 @@ async def enviar_mensagem(bot: Bot, texto: str) -> None:
|
|||||||
|
|
||||||
|
|
||||||
# ─── Verificação de horário ───────────────────────────────────────────────────
|
# ─── Verificação de horário ───────────────────────────────────────────────────
|
||||||
def dentro_do_horario() -> bool:
|
def dentro_do_horario(hora_inicio: str, hora_fim: str) -> bool:
|
||||||
agora = datetime.now().strftime("%H:%M")
|
agora = datetime.now().strftime("%H:%M")
|
||||||
return HORA_INICIO <= agora <= HORA_FIM
|
return hora_inicio <= agora <= hora_fim
|
||||||
|
|
||||||
|
|
||||||
# ─── Loop individual de envio ─────────────────────────────────────────────────
|
# ─── Loop individual de envio ─────────────────────────────────────────────────
|
||||||
@@ -124,44 +131,53 @@ async def loop_envio(config: ConfigEnvio) -> None:
|
|||||||
log.error("TELEGRAM_TOKEN e TELEGRAM_CHAT_ID devem estar configurados no .env")
|
log.error("TELEGRAM_TOKEN e TELEGRAM_CHAT_ID devem estar configurados no .env")
|
||||||
return
|
return
|
||||||
|
|
||||||
log.info("Carregando ordens de %s para envio automático %d...", config.arquivo_ordens, config.numero)
|
|
||||||
ordens = carregar_ordens(config.arquivo_ordens)
|
|
||||||
random.shuffle(ordens)
|
|
||||||
|
|
||||||
bot = Bot(token=TOKEN)
|
bot = Bot(token=TOKEN)
|
||||||
|
usando_ia = config.ia_mode
|
||||||
|
|
||||||
# Mensagem de inicialização
|
if usando_ia:
|
||||||
artigo = "o" if SEXO == "masculino" else "a"
|
from dados_ia import gerar_ordem_ia
|
||||||
if config.quantidade_ordens > 1:
|
log.info("Modo IA ativado para envio automático %d. Gerando ordens via %s...", config.numero, os.getenv("OPENROUTER_MODEL", "modelo padrao"))
|
||||||
info_quantidade = f"Ordens por ciclo: {config.quantidade_ordens}\n"
|
msg_start = (
|
||||||
|
f"🚀 Envio Automático {config.numero} — MODO IA ativado.\n"
|
||||||
|
f"Sexo: {SEXO} | Idade: {IDADE}\n"
|
||||||
|
f"Intervalo: {config.intervalo_minutos} minuto(s)\n"
|
||||||
|
f"Ordens por ciclo: {config.quantidade_ordens}\n"
|
||||||
|
f"Modelo de IA: {os.getenv('OPENROUTER_MODEL', 'desconhecido')}\n"
|
||||||
|
f"Horário de funcionamento: {config.hora_inicio} - {config.hora_fim}\n\n"
|
||||||
|
f"Prepare-se para obedecer a IA."
|
||||||
|
)
|
||||||
|
await enviar_mensagem(bot, msg_start)
|
||||||
else:
|
else:
|
||||||
info_quantidade = "Ordens por ciclo: 1\n"
|
log.info("Carregando ordens de %s para envio automático %d...", config.arquivo_ordens, config.numero)
|
||||||
msg_start = (
|
ordens = carregar_ordens(config.arquivo_ordens)
|
||||||
f"🚀 Envio Automático {config.numero} ativado.\n"
|
random.shuffle(ordens)
|
||||||
f"Sexo: {SEXO} | Idade: {IDADE}\n"
|
|
||||||
f"Intervalo: {config.intervalo_minutos} minuto(s)\n"
|
msg_start = (
|
||||||
f"{info_quantidade}"
|
f"🚀 Envio Automático {config.numero} ativado.\n"
|
||||||
f"Arquivo de ordens: {config.arquivo_ordens}\n"
|
f"Sexo: {SEXO} | Idade: {IDADE}\n"
|
||||||
f"Total de ordens disponíveis: {len(ordens)}\n"
|
f"Intervalo: {config.intervalo_minutos} minuto(s)\n"
|
||||||
f"Horário de funcionamento: {HORA_INICIO} - {HORA_FIM}\n\n"
|
f"Ordens por ciclo: {config.quantidade_ordens}\n"
|
||||||
f"A(s) primeira(s) ordem(ns) será(ão) enviada(s) imediatamente.\n"
|
f"Arquivo de ordens: {config.arquivo_ordens}\n"
|
||||||
f"Prepare-se para cumprir todas as ordens."
|
f"Total de ordens disponíveis: {len(ordens)}\n"
|
||||||
)
|
f"Horário de funcionamento: {config.hora_inicio} - {config.hora_fim}\n\n"
|
||||||
await enviar_mensagem(bot, msg_start)
|
f"A(s) primeira(s) ordem(ns) será(ão) enviada(s) imediatamente.\n"
|
||||||
|
f"Prepare-se para cumprir todas as ordens."
|
||||||
|
)
|
||||||
|
await enviar_mensagem(bot, msg_start)
|
||||||
|
|
||||||
agora = datetime.now().strftime("%H:%M")
|
agora = datetime.now().strftime("%H:%M")
|
||||||
if not dentro_do_horario():
|
if not dentro_do_horario(config.hora_inicio, config.hora_fim):
|
||||||
log.info("Horário atual %s fora da janela %s-%s. Aguardando...", agora, HORA_INICIO, HORA_FIM)
|
log.info("Horário atual %s fora da janela %s-%s. Aguardando...", agora, config.hora_inicio, config.hora_fim)
|
||||||
await bot.send_message(
|
await bot.send_message(
|
||||||
chat_id=CHAT_ID,
|
chat_id=CHAT_ID,
|
||||||
text=f"Horário atual ({agora}) fora da janela de ordens ({HORA_INICIO}-{HORA_FIM}).\n"
|
text=f"Horário atual ({agora}) fora da janela de ordens ({config.hora_inicio}-{config.hora_fim}).\n"
|
||||||
f"As ordens (envio {config.numero}) serão retomadas automaticamente às {HORA_INICIO}.",
|
f"As ordens (envio {config.numero}) serão retomadas automaticamente às {config.hora_inicio}.",
|
||||||
)
|
)
|
||||||
|
|
||||||
ordem_index = 0
|
ordem_index = 0
|
||||||
while True:
|
while True:
|
||||||
if not dentro_do_horario():
|
if not dentro_do_horario(config.hora_inicio, config.hora_fim):
|
||||||
log.info("Fora do horário de funcionamento (%s-%s). Aguardando...", HORA_INICIO, HORA_FIM)
|
log.info("Fora do horário de funcionamento (%s-%s). Aguardando...", config.hora_inicio, config.hora_fim)
|
||||||
await asyncio.sleep(60)
|
await asyncio.sleep(60)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
@@ -170,7 +186,10 @@ async def loop_envio(config: ConfigEnvio) -> None:
|
|||||||
|
|
||||||
# Envia lote de ordens
|
# Envia lote de ordens
|
||||||
for i in range(qtd):
|
for i in range(qtd):
|
||||||
ordem = ordens[(ordem_index + i) % len(ordens)]
|
if usando_ia:
|
||||||
|
ordem = await gerar_ordem_ia()
|
||||||
|
else:
|
||||||
|
ordem = ordens[(ordem_index + i) % len(ordens)]
|
||||||
ordem_adaptada = adaptar_ordem(ordem)
|
ordem_adaptada = adaptar_ordem(ordem)
|
||||||
|
|
||||||
agora = datetime.now().strftime("%d/%m/%Y %H:%M")
|
agora = datetime.now().strftime("%d/%m/%Y %H:%M")
|
||||||
@@ -202,6 +221,12 @@ def main():
|
|||||||
carregar_config_envio(4),
|
carregar_config_envio(4),
|
||||||
carregar_config_envio(5),
|
carregar_config_envio(5),
|
||||||
carregar_config_envio(6),
|
carregar_config_envio(6),
|
||||||
|
carregar_config_envio(7),
|
||||||
|
carregar_config_envio(8),
|
||||||
|
carregar_config_envio(9),
|
||||||
|
carregar_config_envio(10),
|
||||||
|
carregar_config_envio(11),
|
||||||
|
carregar_config_envio(12),
|
||||||
]
|
]
|
||||||
asyncio.run(_executar_todos_envios(configs))
|
asyncio.run(_executar_todos_envios(configs))
|
||||||
except KeyboardInterrupt:
|
except KeyboardInterrupt:
|
||||||
|
|||||||
@@ -0,0 +1,52 @@
|
|||||||
|
[
|
||||||
|
"ORDEM DE HUMILHAÇÃO — ESPELHO: Fica PELADO na frente do espelho grande, de pé, com os braços ao lado do corpo e as pernas afastadas, e olha direto nos TEUS olhos no reflexo, sem desviar. Respira fundo e começa a repetir em voz alta, com a voz firme: 'EU SOU UMA PUTA, EU SOU UM LIXO, EU MERECO SOFRER'. Repete 30 vezes seguidas, sem pular nenhuma, e a cada bloco de 10 você aumenta o volume: as primeiras 10 quase sussurradas, as próximas 10 em tom normal, as últimas 10 quase gritadas, com a cara vermelha e o pau endurecendo contra a tua vontade. Quando terminar as 30, fica olhando o teu reflexo de vergonha por 1 minuto e depois dá 3 tapas no teu próprio rosto, alternando as mãos, cada tapa seco e marcado, olhando fixo no espelho, e a cada tapa diz: 'OBRIGADO, MESTRE, POR ME HUMILHAR'. Termina ajoelhado na frente do espelho, mãos na nuca, cabeça baixa, por 2 minutos, sentindo as bochechas quentes e o corpo tremendo de tesão contido. Não goza. Se o pau escorrer, limpa com a mão e cheira, mas não goza, puta do espelho.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — TAPAS NO PAU: Fica de pé, PELADO, de frente pro espelho, com as pernas bem afastadas e a mão esquerda segurando o pau firme pela base, esticado pra cima. Com a palma da mão direita, dá 30 tapas secos e ritmados no pau, contando cada um em voz alta, do um até o trinta, sem pular. Alterna a cada 10 tapas o lado: os 10 primeiros na haste, os 10 do meio na glande, os 10 finais misturados entre glande e haste. A cada tapa, repete: 'ISSO É PORQUE SOU UM PAU DE PUTA', com a voz falhando a cada batida. O pau vai ficar vermelho, quente e latejando de dor e tesão misturados; quando os 30 terminarem, fica 1 minuto com o pau ardendo na mão, sentindo cada pulsação. Depois alisa com carinho, devagar, passando o polegar na glande dolorida, e beija a ponta dizendo: 'PERDOA, MESTRE, EU MERECI'. Não goza. Se ficar perto do limite, segura a base e respira fundo até acalmar, escravo castigado.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — JOELHOS: Ajoelha no chão frio, PELADO, com os joelhos doloridos no piso e as mãos entrelaçadas atrás da nuca, os cotovelos abertos e a cabeça baixa. Fica imóvel nessa posição e começa a pedir em voz alta, com a voz trêmula: 'MESTRE, ME DEIXA GOZAR? MESTRE, SOU UMA PUTA, POR FAVOR'. Repete esse pedido a cada minuto exato, por 5 minutos inteiros, sempre no mesmo tom de súplica, gemendo baixinho entre uma repetição e outra. O Mestre não responde: você fica de joelhos ouvindo o silêncio, sentindo o chão frio nos joelhos e o pau duro batendo na barriga, negado. No final dos 5 minutos, abaixa a cabeça até encostar a testa no chão e agradece em voz baixa: 'OBRIGADO, MESTRE, POR NÃO ME RESPONDER'. Não goza. Levanta devagar, com os joelhos vermelhos, e vai lavar o pau com água fria enquanto repete 'sou uma puta', escravo de joelhos.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — BUNDA NO ESPELHO: Fica de quatro na frente do espelho, PELADO, com o peito encostado no chão e a bunda bem empinada pro alto, virada pro reflexo. Pega nas duas nalgas com as mãos e arregala a bunda e o cú ao máximo, abrindo o buraco pra própria cara no espelho, e mantém assim, olhando o teu cu escancarado, dizendo em voz alta: 'ESSE CÚ É DE PUTA, ESSE CÚ MERECE CASTIGO'. Molha o indicador com saliva, leva por trás e enfia no cú devagar, sentindo o anel ceder, e fica mexendo o dedo por dentro em círculos, olhando o teu reflexo de bunda aberta no espelho, repetindo a frase 10 vezes, uma por uma, sem tirar o dedo. Depois enfia o dedo médio junto com o indicador e mexe mais 1 minuto, arregalando o anel enquanto as frases continuam. Tira os dedos, cheira fundo e lambe, saboreando o teu próprio cheiro, e termina de quatro, arregalando o cú uma última vez pro espelho. Não goza. Se o pré-gozo escorrer, passa no cú e agradece, puta arreganhada.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — CACHORRO: Pega um cinto, uma corda ou uma gravata e amarra no teu pescoço como coleira, PELADO, e fica de quatro no chão. Anda de quatro pela casa por 5 minutos, cumprindo um percurso: sai do quarto, vai pra sala, atravessa o corredor, passa na cozinha, entra no banheiro e volta pro quarto. Na sala, para no meio e late 5 vezes, alto, como um cachorro de verdade. Na cozinha, abaixa o focinho e cheira o chão, farejando em círculos como um animal. No corredor, para e reboleia a bunda de um lado pro outro, mostrando o cú pro corredor vazio. No banheiro, cheira o teu próprio cheiro no piso. No quarto, para na frente do espelho, abre o cú com as mãos e mostra pro mestre imaginário, falando: 'CACHORRO OFERECE O CÚ'. Termina na frente do espelho latindo 10 vezes seguidas, cada vez mais forte, com a coleira apertando e o pau batendo entre as pernas. Não goza. Levanta devagar, tira a coleira, beija o cinto e agradece por ser um cachorro, escravo animal.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — PUNHETA DE QUATRO: Fica de quatro no chão, PELADO, com o peito colado no piso frio e a bunda alta, empinada pro teto, e enfia a mão por baixo entre as pernas pra alcançar o pau. Começa a bater punheta nessa posição de animal, de baixo pra cima, com o cú aberto pro ar, e a cada 5 punhetadas para e diz em voz alta: 'SOU UMA PUTA DE QUATRO', com o peito raspando no chão. Bate por 3 minutos nesse ritmo, sentindo o anel do cú piscar sozinho a cada movimento, e depois faz edging: acelera até quase gozar, PARA, segura a base do pau por 20 segundos, respira fundo e recomeça. Faz isso 3 vezes, sempre na mesma posição de quatro, o corpo suado e o cú arreganhado pro ar. Na terceira vez, não segura mais: goza ali mesmo, de quatro, a porra caindo no chão frio na frente do teu peito, com a bunda ainda empinada e o cú aberto pulsando. Pode gozar, mas só nessa posição de puta, e ao final agradece beijando o chão.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — NEGADO: Senta PELADO no chão ou na cama, com as costas eretas e as pernas abertas, e começa a bater punheta devagar, num ritmo lento e torturante, falando baixinho o tempo todo: 'POR FAVOR, MESTRE, ME DEIXA GOZAR'. A cada minuto você aumenta um pouco a velocidade, e quando sente o gozo subindo, aquele aperto na base do pau e o pré-gozo escorrendo, PARA na hora, segura a base do pau com o polegar e o indicador por 20 segundos, contrai o cú 5 vezes e respira fundo pelo nariz. Repete esse ciclo 5 vezes: lento, acelera, quase goza, segura, contrai, recomeça. Na quinta vez, quando o pau tá latejando e a glande roxa de tesão preso, o Mestre manda: 'GUARDA PRA AMANHÃ'. Você não goza: solta o pau, respira, e vai ao banheiro lavar o pau e o saco com água fria, por 1 minuto inteiro, sentindo o tesão murchar contra a tua vontade, enquanto agradece em voz alta: 'OBRIGADO, MESTRE, POR ME NEGAR'. Não goza, negado e humilhado, com o gozo guardado latejando dentro de ti.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — GOZO NA BOCA: Senta PELADO na beira da cama, com o espelho do armário na tua frente, e molha a mão com saliva pra lubrificar. Bate punheta devagar no começo, subindo o ritmo aos poucos, gemendo baixinho e olhando o teu próprio reflexo se masturbando, até chegar no limite do gozo. Quando a porra subir, junta na mão e leva toda a mão melada à boca na hora, abrindo a boca e comendo o teu próprio gozo: passa a língua na palma, lambe dedo por dedo, cada um separado, até não sobrar nada entre os dedos. Fica lambendo a mão por 2 minutos, sentindo o gosto salgado e o cheiro forte, olhando no espelho enquanto engole. Depois abre a boca bem aberta, mostra a língua limpa pra ti mesmo no espelho e diz: 'PROVEI O MEU PRÓPRIO GOZO, MESTRE, COMO UMA PUTA DEVIA'. Pode gozar, puta lambedeira, mas sem desperdiçar uma gota.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — RUINED: Senta PELADO no chão, com um pano embaixo pra sujar, e começa a bater punheta rápido e forte, sem parar, subindo o ritmo até sentir aquele aperto na base do pau avisando que o gozo chegou. NO EXATO MOMENTO EM QUE A PORRA COMEÇA A SUBIR, você SOLTA O PAU E ABRE A MÃO, deixando ele sozinho no ar. A porra jorra sem controle, espirrando no chão, na tua coxa, no pano, sem nenhuma punheta acompanhando: um gozo sem prazer, desperdiçado, que escorre sozinho enquanto você assiste, imóvel, sentindo cada espasmo doido do pau vazio. Fica 2 minutos observando a tua própria porra espalhada, o pau ainda pulsando sem alívio, e depois se ajoelha, passa o dedo na porra do chão e leva à boca, provando o gozo que você não teve prazer de dar. Diz em voz alta, com a voz falhando: 'ESSE GOZO FOI RUINED, COMO EU MERECO, MESTRE'. Pode gozar — mas foi ruined, e o próximo gozo de verdade só quando o Mestre permitir, puta desperdiçada.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — MARCADO: Pega uma caneta de escrever forte e, PELADO na frente do espelho, escreve no teu corpo, em letras grandes e caprichadas: 'PUTA' na barriga, em cima do umbigo; 'CÚ FÁCIL' na bunda, uma palavra em cada banda da nádega; 'ESCRAVO' no peito, entre os mamilos; e 'PROPRIEDADE' na parte de cima da coxa. Fica PELADO por 30 minutos inteiros com as marcas, andando pela casa, cozinhando, pegando água, se olhando no espelho de vez em quando pra não esquecer do que tá escrito no corpo. A cada 10 minutos, para na frente do espelho e lê em voz alta todas as frases, uma por uma, apontando pra marca: 'PUTA', 'CÚ FÁCIL', 'ESCRAVO', 'PROPRIEDADE'. Ao final dos 30 minutos, se ajoelha, passa a mão em cada frase e agradece: 'ESTOU MARCADO COMO PROPRIEDADE DO MESTRE, PRA SEMPRE'. Não goza. Se quiser, tira uma foto das marcas antes de lavar, pra guardar de recordação.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — FOTO: Senta PELADO na cama e bate punheta devagar, com o celular na mão, até chegar quase no gozo, aquele ponto em que a cara fica feia de prazer e a boca abre sozinha. NESSE MOMENTO, PARA e tira uma foto da tua cara de sofrimento, com a mão segurando o pau duro e a cara contraída de tesão preso. Depois vira de quatro na cama, pega nas duas nalgas, arregala a bunda e o cú pro celular e tira uma foto do teu cu escancarado, sem pressa, caprichando no enquadramento. Tira mais uma de perto, abrindo o anel com os dois polegares pra foto mostrar o interior. Olha as três fotos com calma, ampliando cada uma, e fala em voz alta, olhando pra tua própria imagem: 'ESSA SOU EU, UMA PUTA HUMILHADA, REGISTRADA PRA SEMPRE'. Salva as fotos numa pasta com o nome 'MINHA VERGONHA' no celular, pra ficar guardado. Não goza. Guarda o celular e vai lavar o pau, sabendo que as fotos estão lá, te esperando.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — MORDAÇA: Pega a tua cueca mais suja, de preferência a de fim do dia, enruga ela numa bola e coloca na boca, enfiando bem, até os lábios ficarem esticados. Fica PELADO de joelhos no chão com a cueca na boca por 5 minutos inteiros, babando por cima dela, o cheiro forte invadindo o nariz a cada respiração. Não tira: fica de joelhos, imóvel, com o pau duro batendo na barriga e a baba escorrendo pelo queixo até o peito, engolindo o próprio cheiro. Quando os 5 minutos acabarem, tira a cueca devagar, molhada de baba, olha pra ela e lambe por cima, sentindo o gosto, depois cheira fundo e diz: 'PROVEI O MEU PRÓPRIO CHEIRO, MESTRE, COMO UM PORCO'. Não goza. Fica mais 1 minuto de joelhos com a cueca na mão, agradecendo em silêncio, escravo de cueca.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — CHEIRO: Pega uma cueca ou meia usada (tua, ou da tua esposa se ela permitir), senta PELADO no chão e enfia o nariz dentro dela, cheirando fundo e demorado por 2 minutos, fechando os olhos e gemendo baixinho enquanto o teu cheiro enche o nariz. Depois passa a cueca no teu pau, esfregando o tecido sujo na haste e na glande, e cheira de novo, agora com o teu cheiro misturado no pau. Repete 3 vezes: cheira fundo, esfrega no pau, cheira de novo, com o tesão subindo a cada cheirada. Enquanto cheira a última vez, bate uma punheta lenta com a cueca enrolada na mão, cheirando o tecido a cada 10 punhetadas. Fala em voz alta, com a cueca colada no nariz: 'SOU UM PORCO QUE CHEIRA ROUPA, MESTRE, E EU AMO'. Não goza. Termina guardando a cueca no lugar dela, cheia do teu cheiro, porco.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — LAMBER CHÃO: Escolhe um trecho limpo do chão do quarto, fica de quatro, PELADO, e abaixa a cabeça até a língua encostar no piso. Lambe o chão por 3 minutos inteiros, com passadas longas de língua como um cachorro lambendo o chão, sentindo o gosto do piso e do pó na língua. A cada lambida, repete em voz baixa: 'OBRIGADO, MESTRE, PELO CHÃO', com a baba escorrendo no piso que você acabou de lamber. Depois pega uma tigela, enche de água, coloca no chão e bebe como um cachorro: sem usar as mãos, abaixando a cabeça e bebendo direto da tigela, lambendo a água com a língua por 1 minuto. Termina de quatro, com a cabeça baixa sobre a tigela, arregalando o cú pro ar, e fica assim 1 minuto, em silêncio. Não goza. Se o pau escorrer, esfrega no chão que você lambeu e agradece, cachorro de chão.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — CASTIGO NO CANTO: Fica PELADO de castigo no canto do quarto, de frente pra parede, com o nariz encostado na parede fria, as mãos entrelaçadas na nuca, os cotovelos abertos e as pernas bem afastadas. Fica imóvel 10 minutos inteiros, sem gemer, sem falar, sem se mexer, sem coçar, sem fechar os olhos: olha fixo pra parede na tua frente, sentindo o nariz esfriar contra a parede e o pau duro batendo na coxa, exposto. O tempo vai passando devagar, a vergonha subindo pela espinha, e você não pode aliviar nada. Quando faltar 1 minuto, começa a choramingar baixinho, pedindo perdão na parede: 'MESTRE, EU MERECI'. Ao final, se ajoelha no canto, ainda de frente pra parede, e agradece com a testa na parede: 'OBRIGADO, MESTRE, PELO CASTIGO'. Não goza. Levanta devagar, com o nariz vermelho e os joelhos doloridos, e vai pra cama pensar na vergonha, escravo castigado.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — MÃOS NA NUCA: Fica PELADO em pé no meio do quarto, com as mãos entrelaçadas atrás da cabeça, os cotovelos bem abertos, as pernas afastadas na largura dos ombros e a cabeça baixa, olhando pro chão. Fica imóvel 5 minutos nessa posição de submissão, com o peito aberto, o pau duro exposto e o corpo inteiro na posição de entrega. Sente o ar na pele, a vergonha subindo do peito, o tesão preso; não pode fechar os braços, não pode baixar as mãos, não pode sair da posição. Depois dos 5 minutos, vira devagar pro espelho, mantendo as mãos na nuca, e se olha na posição: o corpo aberto, o pau duro, a cabeça baixa. Diz em voz alta, olhando pro teu reflexo: 'ESSA É A POSIÇÃO DA MINHA VERGONHA, MESTRE'. Mantém a posição mais 2 minutos no espelho, imóvel, e só então baixa as mãos. Não goza, submissa exposta.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — XINGAMENTOS: Senta PELADO no chão, com as pernas cruzadas, e começa a falar em voz alta, sem parar, por 3 minutos inteiros, tudo o que você é. Não pode pausar, não pode rir, não pode parar de falar nem pra respirar fundo: 'SOU PUTA, SOU VAGABUNDA, SOU RAPARIGA, SOU CACHORRO, SOU LIXO, SOU ESCRAVO, SOU UM CÚ FÁCIL, SOU UM PAU DE NINGUÉM, SOU UMA BUCETA ANDANDO, SOU ONDE O MESTRE ENFIA, SOU ONDE O MESTRE CUSPE, SOU LIXO DO MESTRE, SOU VERGONHA, SOU PROPRIEDADE, SOU OBJETO, SOU UM SACO DE BATER, SOU UM CACHORRO QUE ABRE O CÚ, SOU UMA PUTA QUE PEDE PRA GOZAR...' Esgota tudo que vier na cabeça, sem filtrar, até completar os 3 minutos de xingamento ininterrupto, com a voz falhando e o pau duro de tanta humilhação verbal. Depois para, respira fundo, e agradece: 'OBRIGADO, MESTRE, POR ME LEMBRAR DO QUE EU SOU'. Não goza, dicionário de vergonha.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — VASSOURA: Pega a vassoura da casa e, PELADO de quatro, varre o chão da sala e da cozinha por 10 minutos inteiros, empurrando a vassoura com as mãos enquanto anda de joelhos e mãos pelo chão. A cada varrida, o pau balança entre as pernas e a bunda fica empinada pro ar, aparecendo toda; no meio da faxina, para na frente do espelho, larga a vassoura, pega nas duas nalgas e abre o cú com as mãos, dizendo pro teu reflexo: 'ESSA BUNDA LIMPA ATÉ COM VASSOURA, MESTRE'. Volta a varrer de quatro por mais 3 minutos, até suar, com a bunda marcada do movimento. Termina guardando a vassoura no lugar e se ajoelhando no meio da sala limpa, com as mãos pra trás, agradecendo: 'OBRIGADO, MESTRE, PELO SERVIÇO DE QUATRO'. Não goza, faxineiro pelado.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — MESA HUMANA: Fica de quatro no chão da sala, PELADO, com as costas retas como uma mesa, e coloca um prato vazio e um copo nas tuas costas, bem equilibrados. Fica imóvel como um móvel por 5 minutos inteiros, sem tremer, sem deixar o prato escorregar, sentindo o peso nas costas e a vergonha de ser um móvel humano. Depois dos 5 minutos, com o prato ainda nas costas, imita servir uma refeição pro mestre imaginário: 'MESTRE, QUER MAIS? MESTRE, O PRATO ESTÁ SERVIDO EM CIMA DE MIM'. Inclina devagar, deixa o prato escorregar, pega do chão e recoloca, repetindo o serviço 3 vezes. Termina de quatro, com a cabeça baixa, esperando a próxima ordem, o corpo doendo de tanto equilíbrio. Não goza. Se o pau escorrer, deixa escorrer no chão, móvel não se mexe, escravo mesa.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — AUTO-BOFETADA: Fica PELADO de frente pro espelho, com as pernas afastadas e os braços soltos. Começa a bater na tua própria cara, alternando as mãos, 10 tapas secos e marcados, contando cada um em voz alta: 'UM — SOU PUTA. DOIS — SOU PUTA...' até dez, cada tapa acompanhado da frase, com as bochechas ficando vermelhas e quentes. Depois desce e dá 10 tapas no teu peito, na altura dos mamilos, contando: 'SOU LIXO', a cada tapa, deixando o peito vermelho. Por último, vira de lado, pega na tua bunda e dá 10 tapas em cada banda, contando: 'SOU CACHORRO', até a bunda ficar vermelha e marcada. Total: 30 tapas, contados um por um, sem parar, sem rir, com o espelho assistindo tudo. Ao final, fica de pé, vermelho dos três lugares, e agradece: 'OBRIGADO, MESTRE, PELAS MARCAS'. Não goza, saco de pancada voluntário.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — PUNHETA NO ESPELHO: Senta PELADO no chão, bem na frente do espelho grande, com as pernas abertas e o rosto a um palmo do teu reflexo. Molha a mão com saliva, pega no pau e começa a bater punheta devagar, OLHANDO DIRETO NOS TEUS OLHOS no espelho, sem desviar nenhuma vez. Enquanto se masturba, fala baixinho, olhando pro teu reflexo: 'SOU UMA PUTA SE MASTURBANDO PRA SI MESMA, SOU A MINHA PRÓPRIA PLATEIA'. Faz edging: acelera até quase gozar, para, segura a base, respira, e recomeça olhando no espelho, 3 vezes seguidas, a cara cada vez mais feia de tesão no reflexo. Na terceira, não para mais: goza ali, olhando nos teus próprios olhos, a porra jorrando na mão e no chão, sem desviar o olhar nenhum segundo. Pode gozar, puta narcisista, e ao final lambe a mão e agradece ao teu reflexo: 'OBRIGADO POR ASSISTIR'.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — PLUG NA JANELA: Molha o plug com saliva ou lubrificante e enfia no cú devagar, sentado, até a base encaixar, sentindo o anel esticar. Depois abre a janela do quarto de cima a baixo e fica PELADO de quatro na frente dela, com a bunda empinada pro lado de fora, o plug exposto e o cú arreganhado no ar. Fica 3 minutos nessa posição, arregalando o cú em volta do plug devagar, contraindo e relaxando o anel, imaginando cada pessoa que pode estar te vendo da rua, do prédio de frente, da calçada. O vento toca o cú aberto com o plug, o coração acelera no risco, o pau duro balançando embaixo. Depois dos 3 minutos, fecha a janela devagar, tira o plug com cuidado, sentindo o anel vazio, cheira o plug fundo e lambe a ponta, saboreando. Não goza. Se ficar no limite, segura a base e agradece por ser visto, exposto com plug.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — ESCRAVO IMAGINÁRIO: Fica PELADO de joelhos no meio do quarto, com as mãos apoiadas nas coxas e a cabeça baixa, e começa a conversar com o teu mestre imaginário em voz alta, como se ele estivesse sentado na tua frente. Fala por 5 minutos inteiros, sem parar, com devoção na voz: 'MESTRE, OBRIGADO POR ME HUMILHAR. MESTRE, EU MERECO SOFRER. MESTRE, ME FAZ DE PUTA. MESTRE, ME USA. MESTRE, ENFIA ONDE QUISER. MESTRE, EU SOU TEU CACHORRO. MESTRE, OBRIGADO POR ME IGNORAR. MESTRE, ME CASTIGA. MESTRE, EU AMO SER TEU LIXO...' Vai esgotando as frases de devoção, gemendo baixinho entre uma e outra. Depois dos 5 minutos, faz a pergunta final, com a voz trêmula: 'MESTRE, POSSO GOZAR?'. Fica em silêncio de joelhos, esperando a resposta por 30 segundos exatos, ouvindo o nada, e responde por ele, com a voz sumida: 'OBRIGADO, MESTRE, EU ENTENDO'. Não goza, escravo do mestre imaginário, e fica de joelhos mais 1 minuto agradecendo o silêncio.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — XIXI: Vai pro banheiro, fecha a porta, fica PELADO de cócoras no box do chuveiro, agachado como um animal, com as mãos no chão. Começa a urinar na tua própria perna, desviando o jato pra coxa, e deixa o mijo quente escorrer pela pele até o chão, sentindo o calor na perna e o cheiro forte subindo. Passa a mão na perna molhada de mijo, junta o líquido na palma e leva à boca, provando, com o gosto e o cheiro enchendo a boca. Repete 3 vezes: urina na perna, passa a mão, prova. Depois se ajoelha no box, ainda no cheiro do próprio mijo, e agradece em voz alta, com o rosto perto do chão molhado: 'OBRIGADO, MESTRE, POR ME SUJAR, EU MERECIA'. Fica 3 minutos de humilhação urinária ajoelhado, sentindo o mijo secando na pele. Não goza. Toma banho depois, agradecendo pela limpeza, escravo mijado.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — LAMBE O GOZO: Senta PELADO na cama e bate punheta até gozar na própria mão, sem deixar cair nada no chão, segurando tudo na palma. Depois desce pra cama, se ajoelha no chão, e começa a lamber a mão inteira: passa a língua na palma, lambendo cada polegada de gozo, depois lambe dedo por dedo, cada um de todos os lados, até não sobrar nada entre os dedos nem nas unhas. Fica 3 minutos lambendo e engolindo o teu próprio gozo, com o gosto salgado na língua e o cheiro invadindo o nariz, se ajoelhado como um porco se limpando. Ao final, abre a boca bem aberta, mostra a língua esticada e limpa pra câmera imaginária e diz: 'LIMPEI TUDO, MESTRE, COM A LÍNGUA, NÃO SOBROU UMA GOTA'. Pode gozar, porco lambedeiro, e depois lambe o dedo uma última vez, checando que ficou limpo.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — FLEXÕES: Fica PELADO no chão da sala e faz 20 flexões completas, uma a uma, contando em voz alta. Em cada descida, quando o peito chega perto do chão, fala: 'SOU UM ESCRAVO', e o pau bate no chão a cada repetição, esfregando na superfície. Faz as 20 sem pausa, com o corpo suando e o pau cada vez mais dolorido de bater no piso. Depois fica de pé e faz 20 agachamentos PELADO, descendo até as coxas ficarem paralelas ao chão, e em cada descida, com o pau apontando pro chão, fala: 'SOU UMA PUTA'. Sente as pernas queimando e o pau balançando a cada movimento. Ao final, se ajoelha no chão, ofegante, e agradece: 'OBRIGADO, MESTRE, POR ME FAZER SUAR PELA MINHA VERGONHA'. Não goza. Se o pau escorrer de tesão, esfrega no chão e continua, escravo fitness.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — JOELHOS AMARRADOS: Pega um cinto ou uma gravata e amarra os teus próprios pulsos atrás das costas, firme mas frouxo o bastante pra não machucar, e confere que não consegue soltar fácil. Fica de joelhos, PELADO, com os pulsos amarrados, por 5 minutos inteiros, imóvel, sentindo a corda ou couro no pulso e o pau duro batendo na barriga sem que tuas mãos possam tocar. Depois dos 5 minutos, ainda amarrado, se ajoelha mais ereto e começa a bater punheta de joelhos, alcançando o pau com a mão amarrada de lado, torto, difícil, até chegar quase no gozo — e PARA no limite, segurando com a mão torta, o pau latejando sem alívio. Fica assim 30 segundos, no limite, gemendo, e depois desata os pulsos devagar, massageando as marcas, e vai lavar o pau com água fria. Não goza, preso e humilhado, e agradece: 'OBRIGADO PELAS MARCAS NO MEU PULSO'.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — VENDADO: Pega um pano ou uma gravata e venda os olhos, bem apertado, até não enxergar nada. Fica PELADO de joelhos no meio do quarto, imóvel, no escuro total da venda, e fala em voz alta, com a voz tremendo: 'NÃO VEJO NADA, SÓ SINTO A MINHA VERGONHA'. Fica 5 minutos inteiros no escuro, sem tirar a venda, sem se mexer, ouvindo a própria respiração e o próprio coração acelerado, sentindo o ar na pele e o pau duro que você não consegue ver. O escuro amplifica tudo: cada ruído da casa parece alguém chegando, e você fica ali, de joelhos, indefeso, só com a vergonha. Depois dos 5 minutos, tira a venda devagar, pisca contra a luz, e se ajoelha mais uma vez agradecendo: 'OBRIGADO, MESTRE, PELA ESCURIDÃO'. Não goza. Vai lavar o rosto com água fria, sentindo o alívio da luz, escravo vendado.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — CABELO: Fica PELADO de pé na frente do espelho, e puxa o teu próprio cabelo com força, pela frente da cabeça, inclinando a nuca pra trás, enquanto fala: 'PUXA, PUTA, SENTE A DOR'. Faz isso 20 vezes: cada puxada arranca a cabeça pra trás, estica o couro cabeludo, e você deixa escapar um gemido baixinho a cada uma, vendo a tua cara de dor no espelho. Alterna os lados a cada 5 puxadas, sentindo o couro cabeludo arder e o tesão subir junto com a dor. Depois das 20, solta o cabelo, massageia o couro cabeludo devagar, com carinho, aliviando a dor, e diz no espelho: 'OBRIGADO PELA DOR, MESTRE, EU MERECIA'. Não goza. Se o pré-gozo escorrer, passa o dedo e cheira, escravo puxado pelo cabelo.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — 50 FRASES: Senta PELADO no chão, com o celular ou um relógio marcando o tempo, e fala em voz alta 50 frases de humilhação, uma por vez, contando cada uma em voz alta: 'UM — SOU PUTA. DOIS — SOU VAGABUNDA. TRÊS — SOU ESCRAVO. QUATRO — SOU LIXO. CINCO — SOU UM CÚ FÁCIL. SEIS — SOU UM PAU DE NINGUÉM. SETE — SOU ONDE O MESTRE ENFIA. OITO — SOU ONDE O MESTRE CUSPE. NOVE — SOU UMA RAPARIGA. DEZ — SOU UM CACHORRO...' e segue até o cinquenta, sem repetir nenhuma, sem pular nenhuma, sem parar pra rir. Esgota o vocabulário da tua vergonha: puta, vadia, lixo, escravo, propriedade, objeto, buraco, cu, buceta, coisa, banco, mesa, saco de pancada, cachorro, porco, vagabundo, safado, nojento, humilhado... Ao chegar no cinquenta, para, respira fundo e agradece: 'OBRIGADO, MESTRE, PELAS MINHAS CINQUENTA VERDADES'. Não goza, dicionário de puta.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — MORDIDA: Senta PELADO no chão e leva o teu próprio antebraço à boca. Morde com força, até os dentes marcarem fundo a pele, deixando o círculo vermelho e dolorido, e enquanto morde, com os dentes cravados, fala: 'SOU UM CACHORRO QUE SE MUERDE'. Faz 3 mordidas seguidas, cada uma num lugar do antebraço, cada uma mais funda que a anterior, com a marca dos dentes ficando estampada na pele. Depois lambe as três marcas com a língua, passando devagar sobre cada mordida, sentindo o gosto da própria pele e o ardor da mordida, e diz: 'OBRIGADO PELA MARCA, MESTRE, EU QUERO FICAR MARCADO'. Não goza. Fica mais 1 minuto olhando as marcas no braço, lembrando da mordida, cachorro doido.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — GELO: Pega um cubo de gelo e, PELADO de pé, começa a passá-lo pelo corpo devagar, sentindo o frio elétrico na pele: desce pelo peito, faz círculos nos dois mamilos até eles endurecerem de frio, passa pela barriga, desce pelas coxas. Quando chegar no pau, segura o cubo na palma e esfrega na haste e no saco, sentindo os ovos encolherem de frio, e depois pressiona o gelo direto na glande por 1 minuto inteiro, gemendo de frio e tesão misturados, o gelo derretendo escorrendo pela rola. Troca de cubo quando o primeiro acabar e repete a glande por mais 30 segundos. Depois agradece, com o corpo arrepiado: 'OBRIGADO PELO GELO, MESTRE, EU AMO ESSA DOR FRIA'. Não goza. Se o pau murchar de frio, esquenta com a mão até ficar duro de novo, e repete o gelo, puta gelada.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — VELA: Acende uma vela na mesa e fica PELADO de pé ao lado dela, pronto. Inclina a vela e deixa a primeira gota de cera quente cair no teu peito, sentindo o fogo gostoso na pele; depois mais 2 gotas no peito, cada uma acompanhada de: 'OBRIGADO, MESTRE, PELO FOGO'. Desce: 3 gotas na coxa, uma de cada vez, o ardor subindo a cada pingo; 3 gotas na bunda, virando de lado, a cera endurecendo na pele; e 1 gota na base do pau, a mais quente de todas, fazendo você gemer e arrepiar. Total: 10 gotas, todas contadas em voz alta, todas agradecidas. Depois, com a cera já seca na pele, raspa devagar com a unha, tirando cada pedacinho, e lambe as marcas vermelhas uma por uma, sentindo o gosto da pele queimada. Não goza, puta marcada a fogo, e fica mais 2 minutos olhando as marcas no espelho.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — CINTO NA BUNDA: Fica de quatro no chão, PELADO, com a bunda bem empinada e o peito no chão, e pega um cinto ou chinelo na mão. Começa a bater na tua própria bunda com o cinto, 20 vezes, contando cada uma em voz alta, alternando as bandas da nádega a cada cintada: 'UM — ESSA BUNDA É DE PUTA. DOIS — ESSA BUNDA É DE PUTA...' até vinte. A cada cintada a bunda balança, a pele esquenta, as marcas vão se cruzando na pele, e você geme entre uma e outra, mas continua. Os 20 golpes deixam a bunda vermelha, quente e dolorida, marcada de cinto. Ao final, solta o cinto e massageia a própria bunda devagar, com carinho, sentindo a pele ardendo sob os dedos, e agradece: 'OBRIGADO, MESTRE, PELA MINHA BUNDA MARCADA'. Não goza. Se o pau escorrer de tesão, deixa escorrer no chão, bunda marcada.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — CALCINHA: Pega uma calcinha (da tua esposa, se ela permitir, ou uma tua se tiver) e veste, PELADO, com o pau apertado dentro da renda. Fica só de calcinha na frente do espelho, girando devagar, vendo o teu corpo pelado com a calcinha ridícula, e começa a rebolar: requebra a bunda de um lado pro outro, empinando pro espelho, falando: 'SOU UMA PUTA DE CALCINHA, OLHA ESSE REBOLADO'. Depois puxa a calcinha pro lado com o polegar, expondo a bunda e o cú no espelho, e abre com os dedos, mostrando o buraco pro teu reflexo, mantendo assim por 30 segundos. Fica 5 minutos inteiros nessa cena: rebolando, puxando a calcinha, mostrando o cú, com o pau duro escapando pela renda. Ao final, abaixa a calcinha devagar e agradece: 'OBRIGADO, MESTRE, POR ME VER DE CALCINHA'. Não goza, madame de calcinha.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — NOME: Fica PELADO de joelhos no meio do quarto, com as mãos no chão, e começa a gritar: 'MEU NOME É PUTA!'. Grita 20 vezes seguidas, e a cada grito fica mais alto que o anterior: os 5 primeiros em tom normal, os 5 seguintes mais fortes, os próximos 5 quase gritando, e os 5 últimos gritando com tudo que tem, a garganta ardendo e o rosto vermelho. No final, grita uma última vez, a mais alta de todas, abrindo o peito: 'SOU A PUTA DO MESTRE!'. Depois abaixa a cabeça devagar, com a garganta doendo, e sussurra, quase sem voz: 'OBRIGADO, MESTRE'. Fica de joelhos em silêncio 1 minuto, ouvindo o eco do próprio grito. Não goza, puta nomeada, e se o pau escorreu, agradece pelo tesão gritado.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — DEDO NO CÚ: Fica de pé, PELADO, de frente pro espelho, com uma perna apoiada na cadeira pra abrir o quadril. Molha o indicador com saliva, leva por trás, entre as coxas, e enfia no cú devagar, sentindo o anel ceder, olhando no espelho a tua cara de tesão e vergonha. Mexe o dedo por dentro por 2 minutos inteiros, em círculos e vai-e-vem, falando com a voz falhando: 'ESSE CÚ É DO MESTRE, ESSE CÚ ABRE PRA ELE'. Depois enfia o dedo médio junto, dois dedos abrindo o anel, e continua: 'MAIS ABERTO, MAIS PUTA, MAIS FUNDO', mexendo mais fundo, até a próstata, com os joelhos tremendo no espelho. Tira os dois dedos devagar, sentindo o vazio, cheira fundo o cheiro da própria mão e lambe os dedos, saboreando. Não goza. Se ficar no limite, segura a base do pau e agradece, cú aberto.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — MÃOS SUJAS: Senta PELADO no chão e bate punheta SEM lubrificante, SEM saliva, seca mesmo, por 3 minutos inteiros, com a mão áspera esfregando na haste, a pele arranhando e o atrito esquentando cada vez mais. O pau vai ficando vermelho do atrito, mas você continua, sentindo cada esfregada seca. Depois dos 3 minutos, tira a mão do pau e leva ao nariz: cheira as tuas próprias mãos fundo, fechando os olhos, sentindo o cheiro forte de tesão seco grudado na pele, e fala: 'ESSE É O MEU CHEIRO DE PUTA'. Passa a mão suada e cheirosa no teu rosto, esfregando na bochecha, e cheira de novo, sentindo o teu cheiro misturado com a tua pele. Por fim, lambe as palmas e os dedos, saboreando o teu próprio cheiro de pau. Não goza, porco que se cheira, e fica mais 1 minuto com as mãos no nariz.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — CUSPE: Fica PELADO na frente do espelho, com o rosto próximo ao vidro, junta todo o cuspe que conseguir na boca, até a boca ficar cheia de saliva, e cospe na tua própria cara, sentindo a saliva escorrer pelo rosto e pelo queixo. Limpa espalhando com a mão, esfregando o cuspe na bochecha, no nariz, na boca, e fala: 'SOU TÃO LIXO QUE EU MESMO ME CUSPO'. Repete 3 vezes inteiras: junta cuspe, cospe na cara, espalha com a mão, repete a frase, com o rosto cada vez mais molhado de saliva. Depois lambe a mão molhada de cuspe, e passa a língua nos próprios lábios, provando o gosto. Fica 1 minuto com o rosto molhado no espelho, vendo a tua cara cuspida, e agradece: 'OBRIGADO, MESTRE, POR ME CUSPIR PELA MINHA MÃO'. Não goza, lixo cuspido.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — PEDIR LICENÇA: Senta PELADO no chão, com as costas eretas, e segura o pau duro na mão SEM bater punheta: só segurando firme, sentindo pulsar, o pré-gozo escorrendo pelo dedo sem alívio. Começa a implorar em voz alta, com a voz trêmula de tesão preso: 'MESTRE, POR FAVOR, ME DEIXA GOZAR. MESTRE, EU MERECO GOZAR. MESTRE, SOU SUA PUTA, ME SOLTA. MESTRE, EU NÃO AGUENTO MAIS. MESTRE, TEM PENA DE MIM. MESTRE, SOU SEU CACHORRO PEDINDO...'. Implora por 3 minutos inteiros, sem parar, sem tocar no pau além de segurar, o tesão subindo a cada palavra e o pau pulsando na tua mão sem remédio. Depois dos 3 minutos, para, olha pro teto, e responde pelo mestre, com a voz dura: 'NÃO HOJE, PUTA'. Não goza. Solta o pau, respira fundo, e vai lavar com água fria, negado e implorante.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — CHÃO: Deita no chão PELADO, de bruços, com o rosto de lado e o pau encostado no piso frio. Começa a esfregar o pau no chão como um animal no cio, movendo o quadril pra frente e pra trás, a glande raspando no piso, gemendo baixinho: 'SOU UM ANIMAL, SOU UM PORCO, ME ESFREGO NO CHÃO'. Faz isso por 3 minutos inteiros, com o pau dolorido de esfregar na superfície áspera e o tesão subindo do jeito mais humilhado possível. Depois dos 3 minutos, para o movimento e fica de bruços imóvel, de castigo no chão, com o pau ainda encostado no piso, por mais 2 minutos, em silêncio, sentindo o chão frio na pele e a vergonha pesando nas costas. Ao final, se arrasta de joelhos até o canto e agradece: 'OBRIGADO, MESTRE, PELO CHÃO ONDE EU ME ESGREGUEI'. Não goza, animal do chão.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — REZAR: Ajoelha no chão frio, PELADO, com as mãos postas e a cabeça erguida, e reza em voz alta, com devoção, pro teu mestre imaginário: 'OBRIGADO, MESTRE, POR ME CRIAR COMO PUTA. OBRIGADO POR ME DOMINAR. OBRIGADO POR ME USAR. OBRIGADO POR ME HUMILHAR. OBRIGADO POR ME NEGAR. OBRIGADO POR ME CASTIGAR. AMÉM'. Repete a reza completa 5 vezes, uma atrás da outra, e a cada repetição fala mais devagar e mais baixo: a primeira em tom normal, a segunda mais lenta, a terceira quase sussurrada, a quarta em cochicho, a quinta quase sem voz, com lágrimas ameaçando descer. Depois da quinta, abaixa o corpo, encosta o peito e a testa no chão, e beija o piso em agradecimento, ficando assim 1 minuto, prostrado. Não goza, devoto do mestre, e levanta devagar, com os joelhos vermelhos.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — SE FILMAR: Coloca o celular apoiado apontando pra ti, liga a gravação e fica PELADO no quadro, pronto pra filmar a tua vergonha. Roteiro do vídeo, em ordem: primeiro se ajoelha e se xinga por 1 minuto, olhando pra lente ('sou uma puta, sou um lixo, sou um escravo'); depois vira de quatro e abre a bunda e o cú com as mãos, mostrando o buraco bem de perto pra câmera por 1 minuto; em seguida se levanta e bate no próprio pau 10 vezes, contando; e por último se senta e bate punheta devagar por 2 minutos, com a cara de tesão e vergonha na lente. São 5 minutos de vídeo da tua humilhação completa. Desliga a gravação, senta em silêncio e assiste o vídeo inteiro, do começo ao fim, sem pular, vendo cada detalhe da tua cara e do teu corpo humilhado. Ao final, olha pra câmera apagada e diz: 'É ASSIM QUE EU SOU, MESTRE, REGISTRADO'. Não goza. Salva o vídeo com o nome 'MINHA VERGONHA'.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — GRITAR: Fica PELADO no meio do quarto, com as mãos na cintura e o peito aberto, e começa a gritar com tudo que tem, o mais alto possível: 'SOU UM ESCRAVO! SOU UM ESCRAVO!'. Grita 10 vezes seguidas, com a garganta ardendo, o rosto vermelho, o eco batendo na parede, cada grito mais desesperado que o anterior. Depois baixa o volume: 10 vezes mais baixo, mas ainda em voz alta, com a voz já rouca: 'Sou um escravo, sou um escravo...'. E por fim, abaixa até virar um sussurro, quase sem ar, com a garganta doendo: 'sou um escravo... sou um escravo...'. Fica de joelhos em silêncio por 1 minuto, ouvindo o zumbido do próprio grito nos ouvidos, a garganta quente e o corpo tremendo. Não goza, escravo gritado, e se o pau escorreu de tesão, agradece pela voz rouca.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — ESCRAVO DE LIMPEZA: Pega um pano, molha com água e sabão, e fica PELADO de quatro no chão do banheiro ou da cozinha. Lava o chão inteiro de quatro, por 10 minutos, arrastando o pano na frente do corpo enquanto anda de joelhos e mãos: cada passada de pano, a bunda fica empinada pro ar, o pau balançando e a bunda aparecendo toda. Vai espremendo o pano a cada trecho, se arrastando pelo cômodo inteiro, com a água escorrendo pelo corpo pelado, falando baixinho a cada passada: 'OBRIGADO, MESTRE, PELO SERVIÇO, OBRIGADO PELO CHÃO'. Termina de lavar o cômodo inteiro, com o corpo suado e ajoelhado no chão limpo, e pede em voz alta, de quatro, com a cabeça baixa: 'APROVADO, MESTRE? O CHÃO ESTÁ LIMPO PELO MEU CORPO?'. Fica esperando a resposta em silêncio, de quatro, por 1 minuto. Não goza, faxineiro de quatro, e termina guardando o pano.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — PREGADOR: Pega 2 pregadores de roupa de madeira e, PELADO na frente do espelho, prende um em cada mamilo, apertando forte até a pele pinçar. A dor aperta e arde, os mamilos ficam vermelhos e latejando, e você fica 3 minutos com os pregadores presos, imóvel, olhando no espelho a tua cara de dor e tesão, gemendo baixinho a cada pontada. Não tira antes do tempo: fica os 3 minutos inteiros, sentindo a dor pulsando no peito enquanto o pau fica duro de humilhação. Depois tira os pregadores devagar, um de cada vez, sentindo a pontada forte quando solta, e massageia os mamilos doloridos com as mãos, aliviando o ardor em círculos, por 1 minuto. Agradece, com os mamilos vermelhos: 'OBRIGADO PELA DOR NOS MEUS BICOS, MESTRE, EU QUERO MAIS'. Não goza. Fica mais 1 minuto olhando os mamilos marcados no espelho, bicos doloridos.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — PUNHETA PEDINDO: Senta PELADO no chão, com as pernas abertas, e começa a bater punheta lentamente, num ritmo devagar e gostoso. A cada 10 punhetadas, PARA na hora, segura o pau firme na base, e implora em voz alta: 'MESTRE, DEIXA? MESTRE, POR FAVOR, DEIXA EU GOZAR?'. Espera 10 segundos em silêncio, segurando o pau pulsando, e responde por ele, com a voz dura: 'AINDA NÃO, PUTA'. Recomeça a punheta lenta, mais 10 punhetadas, para, implora de novo, espera, responde. Faz isso 5 vezes completas, com o tesão subindo a cada ciclo e a frustração aumentando, o pau cada vez mais duro e mais perto. Na quinta vez, depois de implorar, o mestre responde diferente, com a voz suave: 'PODE, PUTA, PODE GOZAR'. Você goza na própria mão, gemendo agradecimento sem parar, a porra jorrando entre os dedos. Pode gozar, puta que pediu, e depois lambe a mão agradecendo 10 vezes.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — AGACHADO: Fica agachado no chão, PELADO, de cócoras, com os calcanhares no chão e os joelhos bem abertos pro lado, exatamente como um animal agachado pra fazer necessidades, com o cú aberto e exposto pro espelho que fica na tua frente. Fica imóvel 5 minutos nessa posição, com as mãos nos joelhos, mostrando o anel do cú escancarado pro teu reflexo, sentindo o vazio do cú aberto pro ar e o pau pendendo entre as pernas. Não fecha os joelhos, não senta, não levanta: fica de cócoras, com as pernas tremendo do esforço e a vergonha subindo, repetindo baixinho: 'ESSA É A POSIÇÃO DE UMA PUTA, DE CÓCORAS, ABERTO'. Depois dos 5 minutos, se levanta devagar, com as pernas doloridas, e se ajoelha agradecendo: 'OBRIGADO, MESTRE, POR ME VER DE CÓCORAS'. Não goza, de cócoras como uma puta, e se o pré-gozo escorreu, agradece pelo chão molhado.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — LAMBER TUDO: Senta PELADO e bate punheta até gozar na mão, sem deixar cair nada. Depois desce do lugar, se ajoelha no chão, e começa a lamber tudo: primeiro a palma da mão cheia de gozo, com a língua larga lambendo cada polegada; depois cada dedo, um por um, de todos os lados; e depois o chão onde qualquer gota tenha caído, lambendo o piso como um cachorro recuperando o próprio gozo. Fica 3 minutos lambendo e engolindo, sem desperdiçar nada, se ajoelhado no chão com o cheiro do próprio gozo no ar. Ao final, abre a boca bem aberta, mostra a língua esticada e limpa pra câmera imaginária e diz, com a voz firme: 'NÃO SOBROU NADA, MESTRE, LIMPEI TUDO COM A MINHA LÍNGUA'. Pode gozar, cachorro que se limpa, e termina lendo a língua uma última vez pra conferir que ficou limpa.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — FINAL: Bate punheta PELADO, sentado no chão, devagar no começo e subindo o ritmo, gemendo cada vez mais alto até chegar no limite. QUANDO GOZAR, grita com tudo que tem: 'OBRIGADO, MESTRE! OBRIGADO, MESTRE!', repetindo enquanto a porra jorra, com a voz rouca de tesão. Depois do gozo, com o corpo ainda tremendo, desce e se ajoelha, abaixa a cabeça e pede desculpa em voz alta, com a voz falhando: 'DESCULPA POR SER TÃO PUTA, MESTRE. DESCULPA POR GOZAR SEM PERMISSÃO. DESCULPA POR SER UM LIXO'. Lambe a mão melada de gozo, limpando cada gota com a língua, depois limpa o que caiu no chão com o dedo e leva à boca, sem desperdiçar nada. Limpa o resto com papel e, exausto, deita de bruços no chão, com o rosto no piso e a bunda pro ar, e fica assim, imóvel, esperando a próxima ordem do mestre, agradecendo em silêncio. Pode gozar, escravo finalizado, e fica de bruços até o corpo parar de tremer."
|
||||||
|
]
|
||||||
@@ -0,0 +1,25 @@
|
|||||||
|
[
|
||||||
|
"ORDEM DE HUMILHAÇÃO — CABEÇA DO PIRU: Senta na beira da cama, PELADO, e pega o pau duro na mão. Com o polegar e o indicador, aperta logo abaixo da glande e empurra a pele pra trás, deixando a cabeça do piru toda descoberta, brilhando de pré-gozo. Passa o dedo em volta da borda da glande, sentindo a sensibilidade elétrica, e fala, olhando pra cabeça exposta: 'ESSA CABEÇA ROSADA É DO MESTRE, SÓ ELE MEXE AQUI'. Esfrega o polegar na ponta, de leve, fazendo círculos na cabecinha por 2 minutos, gemendo baixinho a cada volta, o pré-gozo escorrendo pelo dedo. Depois lambe a ponta do polegar, provando o próprio mel, e aperta a glande só mais uma vez, firme, até o pré-gozo jorrar na mão. Não goza. Passa o pré-gozo na cabeça do pau e deixa secar, brilhando de vergonha.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — EM PÉ NA JANELA: Levanta, PELADO, e vai até a janela do quarto. Abre a cortina e fica em pé de frente pro vidro, com as mãos na nuca e os cotovelos abertos, o pau duro apontando pra rua. Fica 3 minutos inteiros exposto, imaginando cada pessoa que passa lá embaixo, cada vizinho que pode estar olhando, o vidro frio na pele e o pau latejando no ar. Balança o quadril bem devagar, só um pouco, fazendo o pau balançar, e sussurra: 'SE ALGUÉM OLHAR AGORA, VAI VER UM ESCRAVO PELADO NA JANELA'. Depois dos 3 minutos, fecha a cortina devagar, aliviado e com vergonha, e fala: 'OBRIGADO, MESTRE, POR ME EXPOR'. Não goza. Se o pau escorrer no vidro, limpa com a mão e lambe, puta da janela.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — DE QUATRO COM PLUG: Pega o plug, molha com saliva generosamente e se ajoelha no chão, de quatro, com o peito colado no carpete e a bunda bem empinada. Enfia o plug no cú devagar, com uma mão por trás, sentindo o anel esticar e ceder até a base encaixar com um estalo surdo. Fica de quatro com o plug enfiado por 5 minutos inteiros, contraindo e relaxando o ânus em volta do plug a cada 30 segundos, sentindo o silicone preenchendo o buraco. Cada contração faz o plug apertar mais e o pau endurecer mais, balançando entre as pernas. Depois tira o plug com a mesma lentidão, sentindo o anel se fechar devagar, e cheira o plug fundo, passando a ponta nos lábios antes de limpar. Não goza. Lambe o plug e agradece: 'OBRIGADO, MESTRE, POR PREENCHER MEU CÚ'.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — SENTADO TRABALHANDO: Veste só a camisa e senta na cadeira do escritório ou do computador, PELADO da cintura pra baixo. Fica sentado trabalhando por 10 minutos — lendo, digitando, mexendo no celular — mas com o pau duro exposto entre as pernas, a glande encostando na borda da cadeira a cada movimento. A cada 2 minutos, sem parar de trabalhar, passa a mão livre no pau, uma passada lenta da base até a ponta, e volta ao trabalho, como se fosse normal. Fala em voz baixa, olhando pra tela: 'TÔ AQUI TRABALHANDO DE PAU DURO, MESTRE, TODO EXPOSTO ENQUANTO TRABALHO'. Não goza. Se o pré-gozo escorrer, passa no papel e cheira, escravo de escritório.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — AGACHADO NO BANHEIRO: Vai pro banheiro, PELADO, e fica agachado no box, de cócoras, com os calcanhares no chão e os joelhos abertos, as mãos apoiadas nos joelhos. Fica imóvel nessa posição de animal por 5 minutos, com o cú escancarado pro ar, o pau pendendo entre as pernas e o anel totalmente exposto. A cada minuto, com a mão livre, alcança por trás e toca o próprio ânus com a ponta do dedo, só roçando, sentindo o buraco piscar sozinho, e volta à posição. Depois enfia o dedo indicador inteiro, mexendo devagar por 30 segundos, e tira, cheirando a mão. Fala no fim: 'ESTOU AGACHADO COMO UMA PUTA, DE CÓCORAS, ABERTO PRO MESTRE'. Não goza. Levanta devagar com as pernas tremendo, agradecendo pelo agachamento.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — EDRING NA CAMA: Deita na cama PELADO, de barriga pra cima, com as pernas abertas e um travesseiro sob a cabeça. Pega o pau e começa a bater punheta lenta e gostosa, fechando os olhos e gemendo baixinho, subindo o ritmo aos poucos. Quando sentir o aperto na base e o pré-gozo engrossar, aquele ponto exato antes de explodir, PARA imediatamente, solta o pau e segura a base com o polegar e indicador por 30 segundos, respirando fundo pelo nariz. Recomeça a punheta, mais lenta, e repete o ciclo — acelera, quase goza, PARA, segura — por 5 vezes completas. Na quinta parada, o pau está roxo, latejando, a glande brilhando de tesão preso, e você geme: 'MESTRE, ME NEGUEI 5 VEZES, OLHA O TAMANHO DO MEU TESÃO PRESO'. Não goza. Levanta e vai tomar água fria, com o gozo guardado pulsando dentro do corpo.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — RUINED ORGASM: Senta no chão PELADO, com um pano ou toalha embaixo, e começa a bater punheta rápida e forte, sem parar, subindo o ritmo até sentir o gozo subindo pelo pau. NO EXATO instante em que a primeira golfada de porra começa a sair, você SOLTA O PAU COMPLETAMENTE e abre a mão, deixando ele sozinho no ar, jorrando sem controle. A porra espirra no ar, cai no chão, na coxa, no pano — um gozo sem punheta, sem prazer, desperdiçado, o pau pulsando sozinho. Fica imóvel 1 minuto assistindo a própria porra espalhada, o pau ainda pulsando sem alívio, e depois se ajoelha, passa o dedo na porra do chão e leva à boca, provando o gosto do gozo que você não teve prazer de dar. Pode gozar — mas foi ruined, e você agradece: 'OBRIGADO, MESTRE, PELO GOZO RUINED QUE EU MERECIA'.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — EM PÉ NA COZINHA: Vai até a cozinha, PELADO, e fica em pé no meio do cômodo, com as mãos na cabeça e os cotovelos abertos, o pau duro apontando pra geladeira. Fica imóvel 3 minutos, exposto na claridade da cozinha, imaginando alguém entrando e te vendo pelado com o pau duro. Depois abre a geladeira, pega um cubo de gelo, fecha, e passa o gelo no próprio pau — na haste, no saco e na glande — sentindo o frio elétrico contrair a pele. Passa o gelo por 1 minuto, até derreter todo, o pau murchando de frio e endurecendo de novo no contraste. Fala enquanto o gelo derrete: 'ESTOU EM PÉ NA COZINHA, PELADO, ESFRIANDO O PAU. SE ALGUÉM ENTRAR, ME VÊ ASSIM'. Guarda o gelo derretido na pia e agradece: 'OBRIGADO, MESTRE, PELA COZINHA EXPOSTA'. Não goza.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — DE QUATRO NA SALA: Sai do quarto PELADO, vai até a sala, e fica de quatro no tapete da sala, com o peito no chão e a bunda empinada pro alto, virada pra porta da entrada. Fica 5 minutos nessa posição, imóvel, o cú aberto pro ar, imaginando alguém entrando pela porta e te vendo de quatro, pelado, com o cu exposto. A cada minuto, abre o cú com as mãos uma vez, arregalando o ânus bem aberto, e mantém 10 segundos, depois solta e volta à posição. Na quinta abertura, enfia o dedão no cú e mexe 30 segundos, gemendo. Fala em voz alta: 'SE ALGUÉM ABRIR A PORTA AGORA, VAI VER MEU CÚ ABERTO'. Termina se ajoelhando no tapete, cabeça baixa, e agradece: 'OBRIGADO, MESTRE, PELA SALA EXPOSTA'. Não goza, puta da sala.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — EM PÉ NO CORREDOR: Fica em pé no corredor da casa, PELADO, com as mãos pra trás segurando um punho no outro, os ombros abertos e o pau duro apontando pro fim do corredor. Fica imóvel 5 minutos no corredor, exposto, sentindo o ar dos dois lados do corpo, cada porta que pode se abrir a qualquer momento. A cada minuto, vira 90 graus pro lado, mostrando o perfil do pau duro pra parede, e fala: 'TO EM PÉ NO CORREDOR, PELADO, QUALQUER UM QUE PASSAR ME VÊ ASSIM'. Na virada do terceiro minuto, passa a mão no pau uma vez, de leve, da base à ponta, e lambe a mão depois, mantendo a posição. Não goza. Termina agradecendo: 'OBRIGADO, MESTRE, PELO CORREDOR DA MINHA VERGONHA'.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — PLUG E EDRING: PELADO, sentado na cama, enfia o plug no cú com saliva, devagar, até a base encaixar, sentindo o anel esticar em volta do silicone. Com o plug já dentro, começa a bater punheta lentamente, sentindo a pressão do plug na próstata a cada movimento. Bate devagar por 2 minutos, sentindo o plug massagear por dentro, e começa a acelerar. Quando sentir o gozo subindo, PARA, segura a base do pau com a outra mão por 30 segundos, contrai o ânus em volta do plug 5 vezes, e recomeça. Faz 4 ciclos: punheta lenta, acelera, quase goza, para, contrai o plug. O plug mantém o tesão sempre alto, e na quarta parada o pau está roxo de tesão. Tire o plug no final, devagar, sentindo o ânus vazio, e lambe o plug: 'OBRIGADO, MESTRE, POR ME NEGAR COM O PLUG DENTRO'. Não goza, plugado e negado.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — ABAIXA A CALÇA: Vestido normalmente, no meio do quarto, abaixa a calça e a cueca até os joelhos devagar, olhando o zíper descer e o tecido empurrar pra baixo. Fica com a calça e cueca nos joelhos, o pau duro pulando pra fora, o resto do corpo ainda vestido, as pernas presas pelo tecido. Anda 10 passos arrastando os pés, com a calça enroscada nos joelhos, o pau balançando a cada passo. Depois para, olha pra baixo pro próprio pau saindo da cueca, e fala: 'OLHA PRA TI, PAU DURO COM A CALÇA NOS JOELHOS, RIDÍCULO E EXPOSTO'. Fica 2 minutos andando e parando, sentindo o tecido prender as pernas e o pau livre. Puxa a calça e cueca de volta, veste tudo, e agradece: 'OBRIGADO, MESTRE, POR ME FAZER ABAIXAR A CALÇA'. Não goza.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — EDRING NA PAREDE: Fica em pé de frente pra parede, PELADO, com as mãos apoiadas na parede na altura dos ombros, as pernas abertas e o pau encostado na parede fria. Começa a bater punheta com uma mão, encostado na parede, enquanto a outra mão fica apoiada, o pau raspando no gesso a cada movimento. Bate punheta devagar, subindo o ritmo, até sentir o aperto do gozo — e na hora, PARA, tira a mão do pau e aperta a palma na parede, segurando por 20 segundos, o pau latejando encostado no gesso frio. Repete 4 vezes: bate, acelera, quase goza, encosta o pau na parede fria e espera. O contraste do pau quente na parede fria ajuda a segurar. Depois da quarta, fala, com as mãos na parede: 'QUASE GOZEI 4 VEZES NA PAREDE, MESTRE, MAS SEGUREI COMO BOA PUTA'. Não goza. Sai da parede e agradece, negado na parede.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — EM PÉ NO VARAL: Fica em pé na área de serviço ou no quintal, PELADO, ao lado do varal, como se fosse uma peça de roupa esquecida. Fica imóvel 5 minutos em pé, com os braços abertos como um varal humano, o pau duro pendendo entre as pernas, o sol ou o vento batendo no corpo nu. Imagina os vizinhos olhando das janelas, cada movimento de cortina ao redor. Fala em voz alta pro céu: 'TO AQUI PELADO NO VARAL, MESTRE, EXPOSTO COMO UMA ROUPA SUJA'. A cada minuto, muda a posição dos braços: primeiro abertos, depois pra cima, depois na nuca, sempre mostrando o corpo nu pro quintal. Não goza. Volta pra dentro e agradece: 'OBRIGADO, MESTRE, PELO VARAL DA MINHA VERGONHA'.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — SENTADO COM PLUG: Senta na cadeira do escritório PELADO, com o plug já enfiado no cú, a base apertando o ânus contra o assento. Fica sentado por 10 minutos inteiros — lendo, no celular, no computador — sentindo o plug pressionar a próstata a cada movimento na cadeira, o pau duro espremido entre as pernas. A cada 2 minutos, sem se levantar, aperta o ânus em volta do plug 10 vezes seguidas, contraindo e relaxando, sentindo o silicone massagear por dentro. O pau vaza pré-gozo na cadeira, e você limpa com o dedo e cheira, voltando ao trabalho como se nada estivesse acontecendo. Fala baixinho: 'TO SENTADO AQUI TRABALHANDO DE PLUG NO CÚ, MESTRE, NINGUÉM DESCONFIA'. Não goza. No fim, tira o plug devagar, sentindo o vazio, e lambe o plug agradecendo.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — RUINED NO CHÃO: Senta no chão da sala PELADO, com as pernas abertas e um pano no chão. Bate punheta forte e rápido, gemendo alto, sem nenhum controle, até sentir o gozo subir. No exato momento em que a porra começa a jorrar, você SOLTA O PAU e tira a mão, deixando o pau gozar sozinho no ar, a porra espirrando no chão, no pano, na coxa, sem nenhuma punheta acompanhando o gozo. Cada golfada é seca, sem prazer, o pau pulando sozinho, e você assiste imóvel, gemendo de frustração. Depois que o pau parar de pulsar, você se ajoelha, junta a porra do chão com o dedo, leva à boca e lambe o dedo inteiro, provando o próprio gozo desperdiçado. Pode gozar — ruined — e agradece: 'ESSE GOZO É RUINED, MESTRE, COMO EU MERECO, SEM PRAZER, SÓ PORRA'.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — EM PÉ NA PORTA: Fica em pé na porta do quarto, PELADO, com as mãos na nuca, os cotovelos abertos e o pau duro apontando pro corredor. Fica imóvel na moldura da porta, como um quadro vivo, por 5 minutos, exposto pra quem passar no corredor. A cada minuto, vira o corpo 45 graus, mostrando o perfil do pau duro pro corredor vazio, imaginando alguém subindo as escadas e te vendo. No terceiro minuto, passa a mão no pau uma vez, devagar, da base até a ponta, mostrando o movimento pro corredor, e lambe a mão depois. Fala em voz alta: 'TO AQUI NA PORTA, PELADO, ME OLHA, MESTRE, ME VÊ ASSIM EXPOSTO'. Não goza. Fecha a porta devagar e agradece: 'OBRIGADO PELA PORTA DA MINHA VERGONHA'.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — CABEÇA DO PIRU COM GELO: Senta na cama PELADO, com as pernas abertas, e pega um cubo de gelo. Empurra a pele do pau toda pra trás com uma mão, deixando a cabeça do piru toda exposta, e com a outra mão, pressiona o cubo de gelo diretamente na glande. O frio elétrico na cabecinha faz você gemer alto, o pau murcha de frio e endurece de novo no mesmo segundo. Passa o gelo em volta da borda da glande, em círculos, por 1 minuto inteiro, sentindo a cabeça queimar de frio enquanto o pau fica duro de tesão misturado com gelo. Depois lambe a glande gelada, sentindo o gosto do frio e da pele, e fala: 'CABEÇA DE PIRU GELADA, MESTRE, ARDE DE FRIO E TESÃO'. Não goza. Se o pau murchar, esquenta com a mão até endurecer de novo.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — DE QUATRO NA CAMA: Sobe na cama PELADO e fica de quatro no centro, com a bunda bem empinada pro alto e o rosto enterrado no travesseiro, as pernas abertas e o cú totalmente exposto. Fica imóvel 3 minutos nessa posição, o cú aberto pro ar, o pau duro balançando entre as pernas. Depois começa a rebolar devagar, empurrando a bunda pra trás e pra frente, arregalando e fechando o ânus a cada movimento, gemendo no travesseiro: 'REBOLO NA CAMA QUE NEM UMA PUTA, MESTRE, OLHA ESSA BUNDA'. Depois de 2 minutos rebolando, para e abre o cú com as duas mãos, mantendo aberto por 30 segundos, mostrando o buraco todo pro teto. Não goza. Deita de lado e agradece: 'OBRIGADO, MESTRE, PELA CAMA DA MINHA VERGONHA'.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — EDRING NO CHUVEIRO: Entra no box do chuveiro, PELADO, com a água fria desligada ainda. Liga o chuveiro e fica em pé debaixo da água, o corpo molhado e o pau duro escorregadio de água e sabão. Ensaboa o pau e começa a bater punheta escorregadia, o sabão deslizando, o ritmo subindo, até sentir o gozo chegando. NO EXATO LIMITE, PARA, tira a mão do pau e vira a água pro frio, sentindo o choque térmico no pau duro, a água fria matando o gozo na hora. Fica 30 segundos debaixo da água fria, o pau murchando contra a vontade. Depois volta pra água morna e recomeça a punheta, repetindo o ciclo: bate, acelera, quase goza, água fria, espera. 3 ciclos completos. No fim, desliga o chuveiro, fala: 'ME NEGUEI 3 VEZES NO BANHO, MESTRE, A ÁGUA FRIA SEGUROU MEU GOZO'. Não goza, banho de frustração.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — EM PÉ NA SACADA: Abre a porta da sacada ou varanda e, PELADO, fica em pé na área externa, de costas pra rua mas com o pau duro aparecendo no perfil. Fica 3 minutos em pé na sacada, o vento batendo no corpo nu, o pau endurecendo no ar livre, imaginando cada vizinho que pode olhar da janela. Cada barulho de porta ou janela ao redor faz seu coração acelerar. Fala em voz baixa pro vento: 'TO PELADO NA SACADA, MESTRE, QUEM ME VÊ ME JUÍZA'. Depois dos 3 minutos, volta pra dentro, fecha a porta, e agradece treme ndo: 'OBRIGADO, MESTRE, PELA SACADA EXPOSTA'. Não goza. Fecha a cortada e se ajoelha no chão, aliviado.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — SENTADO NA CAMA: Senta na beira da cama, PELADO, com as pernas abertas e os pés no chão, as mãos apoiadas no colchão atrás do corpo, o peito aberto e o pau duro apontando pro teto. Fica imóvel 5 minutos nessa posição de entrega, sentado na cama exposto, sem mexer as mãos, só respirando fundo, sentindo o pau latejar sozinho no ar. Depois de 3 minutos, desce uma mão e segura o pau pela base, só segurando, sem bater, sentindo pulsar, por 1 minuto. Depois passa o polegar na glande, de leve, uma única passada, e lambe o dedo. Fala: 'TO SENTADO NA CAMA, EXPOSTO, ME ESPERANDO O MESTRE ME USAR'. Não goza. Deita na cama de barriga pra cima e fica mais 2 minutos imóvel, agradecendo a espera.",
|
||||||
|
"ORDEM DE HUMILHAÇÃO — FINAL PLUG E RUINED: Senta no chão PELADO, enfia o plug no cú com saliva até a base, sentindo o anel esticar. Deixa o plug 2 minutos quieto, sentindo o silicone preencher, e começa a bater punheta com o plug dentro. Bate forte e rápido, o plug massageando a próstata a cada punhetada, o tesão subindo ao dobro. Quando sentir o gozo chegando, você tira o plug com uma mão e continua a punheta com a outra — e no exato momento em que a porra sobe, você SOLTA O PAU e abre a mão, gozo ruined espirrando no chão enquanto o cú fica vazio do plug. O contraste do cu vazio e o gozo desperdiçado é a humilhação final. Depois, com o corpo tremendo, pega o plug do chão, lambe ele e lampe a mão melada de porra, provando os dois sabores. Pode gozar — ruined e plugado — e agradece: 'OBRIGADO, MESTRE, POR ME FAZER GOZAR ASSIM, RUINED E CÚ VAZIO'."
|
||||||
|
]
|
||||||
@@ -0,0 +1,55 @@
|
|||||||
|
[
|
||||||
|
"🔥 DEDO NO CÚ — Tira a calça e cueca até os joelhos, agacha e enfia o dedo indicador no cú devagar. Sente cada anel muscular se abrindo. 30 segundos explorando o calor interno. Teu dedo sente a textura das paredes. Tira e cheira o dedo. O aroma do teu cú preenche o nariz.",
|
||||||
|
"🔥 ESCRITÓRIO — Senta pelado na cadeira do PC com as pernas abertas. Trabalha 10 minutos com o pau exposto. Cada vez que move o braço, o pau balança. Sente o ar na cabeça do pau. De vez em quando, passa o dedo na cabecinha por baixo da mesa. Se alguém entrasse agora, veria tudo.",
|
||||||
|
"🔥 EDGING EM PÉ — Fica em pé nu na sala, lubrifica o pau e começa a masturbar devagar. Quando sentir o gozo chegando, PARA imediatamente. Segura a base do pau e respira fundo. Espera o tesão baixar. Repete 3 vezes. Cada parada é controle sobre o próprio corpo. Não goza.",
|
||||||
|
"🔥 ÁREA DE SERVIÇO — Vai nu até a área de serviço, debruça na bancada e fica de quatro, bunda empinada pra fora. Arregaca o cú com os dedos. 1 minuto com o cú exposto. O vento entra, o coração acelera. Se alguém passar, vê teu cú aberto. Não goza.",
|
||||||
|
"🔥 AGACHADO — Fica agachado nu no centro da sala, abre a bunda e mostra o cú pro teto. Cócoras de submissão. Pau pendurado, cú exposto. 2 minutos. O sangue sobe pra cabeça, o cú pisca sozinho. Sente o peso do corpo nas pernas tremendo. Não goza.",
|
||||||
|
"🔥 JANELA DA COZINHA — Vai nu até a janela da cozinha de quatro e arregaca a bunda na direção do vidro. Bunda perto do vidro, cú escancarado. 1 minuto. Imagina que alguém do outro lado consegue ver. O vidro frio contrasta com a pele quente. Não goza.",
|
||||||
|
"🔥 MASSAGEM NO SACO — Em pé nu, massageia o saco com as duas mãos 3 minutos. Sente os ovos rolando entre os dedos. Puxa o saco pra baixo devagar sentindo o peso esticar a pele. Passa a mão do saco até a cabeça do pau. O caminho do tesão. Não goza.",
|
||||||
|
"🔥 QUINTAL — Vai nu até a porta do quintal ou área externa, abre e fica de quatro mostrando o cú pro lado de fora. 30 segundos de cú exposto pro mundo. Coração acelerado, orelha atenta a qualquer barulho de passos. Depois fecha a porta e volta. Não goza.",
|
||||||
|
"🔥 SÓ CABEÇA — Nu em pé, masturba só na cabeça do pau. Só a cabecinha, sem descer a mão. O pré-gozo começa a escorrer abundante. Passa o dedo melado na cabeça do pau de novo. Deixa o pré-gozo escorrer pela haste sem limpar. Não goza.",
|
||||||
|
"🔥 PERÍNEO PRESSÃO — Deitado nu de costas com pernas abertas, massageia o períneo com o dedo médio. Pressão firme na ponte entre o cú e o saco. 3 minutos massageando esse ponto. O pau vai começar a babar sem ninguém tocar nele. A massagem interna produz tesão puro. Não goza.",
|
||||||
|
"🔥 DEDO PARADO — Senta no PC, enfia o dedo anelar no cú até o fundo e mantém parado. Trabalha 5 minutos com o dedo enterrado. Cada movimento do corpo massageia o dedo. O cú contrai sozinho enquanto tu digita. Uma mão no teclado, a outra no cú. Não goza.",
|
||||||
|
"🔥 CÓCORAS JANELA — Vai nu até a janela, fica de cócoras de costas pra rua e escancara o cú com as mãos. Cócoras com o cú aberto pra quem passa. 30 segundos de exposição. Qualquer um que olhar vê teu cú de cócoras escancarado. Não goza.",
|
||||||
|
"🔥 MÃO NÃO DOMINANTE — Nu em pé, masturba com a mão não dominante. Movimentos desajeitados mas constantes. 5 minutos sem parar. A mão não dominante não tem precisão, o tesão demora mais. O braço vai tremer de esforço. Mantém o ritmo até o fim. Não goza.",
|
||||||
|
"🔥 QUATRO DEDOS — Com lubrificante, enfia quatro dedos no cú em pé. Quatro dedos é o limite. Mantém 15 segundos sentindo o estiramento máximo. Respira fundo e tira devagar. Depois massageia a entrada com um dedo só, sentindo a diferença. Não goza.",
|
||||||
|
"🔥 CABEÇA EDGING 5 — Nu sentado, massageia só a cabeça do pau com a palma da mão em círculos. Quando sente que vai gozar, SOLTA a cabeça e espera. 5 vezes. Só a cabeça do pau sendo estimulada e negada. O pré-gozo escorre sem parar no ritmo. Não goza.",
|
||||||
|
"🔥 PRÓSTATA — Deitado nu de costas com pernas abertas, enfia o dedo médio curvado no cú e procura a próstata. Dedo em movimento de 'vem cá'. Quando acha, massageia com pressão firme. 3 minutos massageando a próstata. O pau vai babar sem ninguém tocar nele. Não goza.",
|
||||||
|
"🔥 PIA DA COZINHA — Tira a calça e cueca e vai pelado até a pia da cozinha. Abre a torneira e começa a lavar louças de costas pra porta aberta da área de serviço. Cada movimento de lavar faz o pau balançar. Os vizinhos do quintal podem ver da porta da cozinha. Fica 5 minutos lavando exposto. De vez em quando, passa a mão na cabeça do pau e volta a lavar. Não goza.",
|
||||||
|
"🔥 BANCADA DE QUATRO — Tira tudo e vai nu até a bancada da cozinha. Debruça de quatro na pia, bunda empinada pra porta da área de serviço. Arregaca o cú com uma mão enquanto a outra segura a torneira. 2 minutos de cú escancarado pra porta aberta. Se alguém olhar do quintal, vê teu cú aberto na porta da cozinha. Não goza.",
|
||||||
|
"🔥 LOUÇA DEDANDO — Enquanto lava louças na pia, enfia o dedo médio no cú por baixo, escondido, sem parar de lavar. Mantém o dedo dentro sentindo o cú contrair enquanto a água corre. Tira e enfia de novo. Repete várias vezes. Os vizinhos das outras 2 casas podem olhar e ver tua mão no cú atrás da pia. 5 minutos de louça com dedo no cú. Não goza.",
|
||||||
|
"🔥 PIA EXPOSTO — Vai nu até a pia da cozinha, abre bem as pernas e lava louças lentamente. Pau e saco pendurados, balançando a cada movimento. De costas pra porta aberta, qualquer vizinho no quintal vê teu perfil pelado na porta da cozinha. Fica 5 minutos. Depois, sem se virar, arregaca a bunda por cima do ombro, mostrando o cú. Não goza.",
|
||||||
|
"🔥 COZINHA PORTA ABERTA — Vai nu até a pia e abre a porta da cozinha pra área de serviço. Fica lavando louças de quatro, bunda virada pra porta e pro quintal. Cada prato lavado é uma rebolada que mostra mais o cú. Imagina o vizinho da casa ao lado te vendo. 5 minutos de louça de quatro exposta. Não goza.",
|
||||||
|
"🔥 PRATO E DEDO — Enquanto lava um prato na pia, enfia o dedo no cú e massageia devagar. Uma mão lava o prato, a outra deda o cú. A água da torneira disfarça o som. Os pratos ficam limpos enquanto teu cú fica mais aberto. 5 minutos nesta posição de dupla função. Não goza.",
|
||||||
|
"🔥 COZINHA EDGING — Vai pelado até a pia da cozinha de frente pra porta aberta. Começa a masturbar lentamente enquanto olha pro quintal. Cada vizinho que passa no portão pode te ver. Quando sentir o gozo, PARA e volta a lavar louças. 3 vezes. Na quarta, segura firme e lava mais 2 minutos sem se tocar. Não goza.",
|
||||||
|
"🔥 CABEÇA DO PAU PIA — Vai nu até a pia da cozinha e fica em pé de costas pra porta aberta. Passa o dedo na cabeça do pau em círculos lentos enquanto a água corre. Cada círculo na cabecinha aumenta o latejamento. O pré-gozo escorre e cai na água da louça. 3 minutos. Não goza.",
|
||||||
|
"🔥 AREA DE SERVIÇO DEDO — Vai nu até a área de serviço, senta no banquinho de costas pro quintal e enfia o dedo médio no cú. 3 minutos sentado dedando o cú com as pernas abertas. Qualquer vizinho que passar no quintal vê teu braço se movendo entre as pernas. Não goza.",
|
||||||
|
"🔥 PORTA DOS FUNDOS — Abre a porta dos fundos, fica nu na soleira de quatro e arregaca o cú pra fora. 1 minuto. O vento entra, a brisa do quintal toca teu cú aberto. Se alguém olhar da casa ao lado, vê teu cú escancarado na porta. Não goza.",
|
||||||
|
"🔥 VARAL — Vai até o varal da área de serviço, tira a roupa do varal e pendura mais roupa pelado. Cada vez que levanta os braços pra pendurar, a camisa sobe e mostra o pau. Fica 10 minutos no varal pelado, se abaixando e levantando. Não goza.",
|
||||||
|
"🔥 ESCRITÓRIO AGACHADO — Levanta da cadeira do PC, agacha nu ao lado da mesa e enfia dois dedos no cú. Agachado, com os dedos enterrados, conta até 20. Levanta e volta a trabalhar como se nada tivesse acontecido. Repete 5 vezes ao longo do dia. Não goza.",
|
||||||
|
"🔥 CADEIRA ESCRITÓRIO DEDO — Senta nu na cadeira giratória, enfia o indicador no cú e rebola sentado 30 vezes. Cada rebolada massageia o dedo dentro do cú. Gira a cadeira devagar enquanto o dedo está enfiado. Não goza.",
|
||||||
|
"🔥 LOUÇA CABEÇA — Lava louças nu na pia. De vez em quando, para de lavar, passa o dedo na cabeça do pau e volta a lavar. O contraste entre a água quente do prato e o toque na cabecinha. 10 minutos de louça com pausas na cabeça do pau. Não goza.",
|
||||||
|
"🔥 CÓCORAS ÁREA SERVIÇO — Vai pelado até a área de serviço, fica de cócoras de costas pro quintal e enfia o dedo indicador no cú. Cócoras escancaradas, cú aberto pro quintal. Mexe o dedo devagar dentro por 2 minutos. Os vizinhos podem ver o movimento. Não goza.",
|
||||||
|
"🔥 JANELA ESCRITÓRIO — Abre a janela do escritório, fica nu em pé de frente pra ela e massageia a cabeça do pau olhando pra rua. Seu rosto não aparece, mas o pau sim. 3 minutos exposto na janela. Imagina quem pode estar olhando. Não goza.",
|
||||||
|
"🔥 QUINTAL DEDO PARADO — Vai nu até o quintal, senta no chão virado de costas pra rua e enfia o dedo anelar no cú. Mantém parado 5 minutos sentado no quintal com o dedo dentro. Cada barulho de vizinho faz o cú contrair no dedo. Não goza.",
|
||||||
|
"🔥 PIA DOIS DEDOS — Nu na pia da cozinha lavando louças, enfia o dedo médio e o anelar juntos no cú. Dois dedos enterrados enquanto a outra mão lava. Mexe os dedos dentro abrindo e fechando igual tesoura. A água corre, os dedos massageiam. 3 minutos. Não goza.",
|
||||||
|
"🔥 QUINTAL CÓCORAS — Vai nu até o quintal, fica de cócoras de costas pro muro e enfia o dedo indicador no cú. Cócoras no quintal, cú aberto, dedo entrando. Qualquer movimento no portão te faz paralisar. 2 minutos de cócoras com dedo. Não goza.",
|
||||||
|
"🔥 ESCRITÓRIO PERNAS — Senta nu na cadeira do PC com as pernas bem abertas. Enfia o dedo mindinho no cú e mantém parado. Trabalha 5 minutos com o mindinho enterrado. O dedo mais fino entra fácil, mas a consciência de tê-lo dentro te mantém alerta. Não goza.",
|
||||||
|
"🔥 PORTA COZINHA — Abre a porta da cozinha, fica nu em pé na soleira de frente pro quintal e masturba lentamente olhando pro portão. Tua silhueta pelada aparece na porta. 2 minutos. Qualquer um que abrir o portão te vê se tocando. Para quando ouvir barulho. Não goza.",
|
||||||
|
"🔥 TRÊS DEDOS SENTADO — Senta nu na beira da cama, lubrifica e enfia três dedos no cú. Mantém parado 30 segundos sentindo o estiramento. Três dedos esticam o ânus no limite. Depois tira e massageia a entrada com um dedo só. Não goza.",
|
||||||
|
"🔥 ESCRITÓRIO CABEÇA MESA — Senta nu no PC, encosta a cabeça do pau na borda da mesa e massageia esfregando na madeira. A textura da mesa na cabecinha. Cada movimento de vai e vem na borda. 5 minutos de pau na borda da mesa. Não goza.",
|
||||||
|
"🔥 ÁREA DE SERVIÇO PLANTAS — Vai nu regar as plantas da área de serviço. Mangueira na mão, pau balançando. Depois de regar, senta nu no chão e enfia o dedo no cú. 5 minutos molhando plantas e se molhando por dentro. Não goza.",
|
||||||
|
"🔥 QUINTAL PERNAS ABERTAS — Vai nu até o quintal, senta numa cadeira de costas pra rua, abre bem as pernas e enfia o dedo indicador no cú. Sentado nu de pernas abertas no quintal com dedo no cú. 3 minutos. O risco de ser visto é máximo. Não goza.",
|
||||||
|
"🔥 COZINHA CABEÇA TORNEIRA — Nu na pia, abre a torneira e deixa a água cair na cabeça do pau. A água corrente na cabecinha. Fecha a torneira e passa o dedo na cabeça molhada. 3 minutos de água e toque alternados. Não goza.",
|
||||||
|
"🔥 QUINTAL ENCOSTADO — Vai nu até o quintal, encosta de costas no muro e enfia o dedo no cú. Encostado no muro que separa tua casa da vizinha. Se ela estiver do outro lado, ouve teu movimento. 3 minutos com o dedo enfiado encostado no muro. Não goza.",
|
||||||
|
"🔥 PIA QUATRO DEDOS — Nu na pia da cozinha, lubrifica e enfia quatro dedos no cú. Quatro dedos é o limite do estiramento. Mantém 15 segundos. Depois tira devagar e lava mais um prato. A cada prato lavado, tenta enfiar de novo. Repete 3 vezes. Não goza.",
|
||||||
|
"🔥 ESCRITÓRIO MÃO TORTA — Senta nu no PC, enfia o dedo no cú com a mão não dominante. Trabalha 5 minutos com a mão fraca no cú. O movimento desajeitado massageia diferente. A mão não dominante cansa mas não pode parar. Não goza.",
|
||||||
|
"🔥 VARAL DEDO — Vai nu pendurar roupa no varal. Pendura uma peça, enfia o dedo no cú. Pendura outra, massageia o cú com o dedo. Cada peça no varal é um ciclo de dedo no cú. 10 peças de roupa, 10 dedadas no cú. Não goza.",
|
||||||
|
"🔥 PORTÃO QUINTAL — Vai nu até o portão do quintal, abre uma fresta e fica de quatro mostrando o cú pela fresta. 30 segundos de cú exposto pela brecha do portão. Qualquer um que passar na rua vê um cú no portão. Fecha correndo. Não goza.",
|
||||||
|
"🔥 COZINHA AGACHADO — Vai nu até a cozinha, agacha de costas pra porta aberta e enfia o dedo indicador no cú. Agachado no chão da cozinha com o cú escancarado pra área de serviço. A posição de cócoras abre ainda mais o cú pro dedo. 2 minutos. Não goza.",
|
||||||
|
"🔥 ESCRITÓRIO SACO — Senta nu no PC, puxa o saco pra frente e massageia os ovos com uma mão enquanto a outra digita. 10 minutos trabalhando massageando o saco. De vez em quando passa o dedo do saco pra cabeça do pau. Sem gozar. Não goza.",
|
||||||
|
"🔥 QUINTAL MÃO LIVRE — Vai nu até o quintal, senta no chão e enfia o dedo no cú com uma mão. A outra mão livre fica apoiada no chão. Se alguém aparecer, a mão livre disfarça. 5 minutos de dedo no cú no quintal com a mão de alerta. Não goza.",
|
||||||
|
"🔥 PIA PROFUNDO — Nu na pia da cozinha, enfia o dedo médio no cú até o fundo. Sente a próstata com a ponta do dedo. Massageia com pressão firme enquanto a água lava os pratos. O pau começa a babar na água da louça. 4 minutos de pressão na próstata. Não goza.",
|
||||||
|
"🔥 JANELA QUARTO QUINTAL — Abre a janela do quarto que dá pro quintal, fica nu de quatro na cama virado pra janela e arregaca o cú. A janela aberta mostra teu cú pro quintal. Qualquer vizinho que olhar da casa deles vê teu cú na janela. 2 minutos. Não goza.",
|
||||||
|
"🔥 ESCRITÓRIO FINAL — Senta nu no PC, trabalha 30 minutos exposto. Durante esse tempo, enfia e tira o dedo do cú 10 vezes. Cada vez que enfia, conta até 20 antes de tirar. No final, fica 5 minutos com o dedo enfiado sem mexer. Não goza."
|
||||||
|
]
|
||||||
+402
@@ -0,0 +1,402 @@
|
|||||||
|
[
|
||||||
|
"🔥 EXPOSTO JANELA PEgo — Vai ate o quarto, abre a janela BEM. Tira TUDO. Fica de FRENTE pra janela, corpo nu, pau duro exposto. 2 minutos se exibindo. De repente UMA VIZINHA aparece na janela ao lado e te OLHA fixo. Ela abre a boca de surpresa mas nao desvia o olhar. Ela PERGUNTA: 'Ta mostrando o que pra mim, gostoso?' Tu RESPONDE: 'O que a senhora quiser ver.' Ela MANDA: 'VIRA DE COSTAS E MOSTRA ESSA BUNDA.' Tu VIRA e mostra a bunda escancarada pra ela. 1 minuto de bunda pro olhar da vizinha. Depois ela ri e FECHA a janela. Tu massageia o pau. Nao goza, sua puta exibida pra vizinha.",
|
||||||
|
"🔥 EXPOSTO AREA SERVICO PEGO — Vai ate a AREA DE SERVICO, ABRE a porta pro quintal. Tira calça e cueca, fica de camiseta. Debruca na MAQUINA DE LAVAR, bunda empinada pro lado de fora. De repente o VIZINHO aparece no muro e TE VE de bunda pro ar. Ele ASSOBIA e grita: 'E ai, ta se oferecendo?' Tu CONGELA mas nao sai da posicao. Ele MANDA: 'BALANCA ESSA BUNDA PRA MIM.' Tu BALANCA a bunda devagar 10 vezes enquanto ele olha. Depois ele da UM TAPA na tua bunda por cima do muro e vai embora. Tu fecha a porta e massageia a bunda. Nao goza, seu puto pego no flagra.",
|
||||||
|
"🔥 EXPOSTO QUINTAL PEGO — Vai ate o QUINTAL, tira TUDO atras do muro. Fica de COSTAS pro mundo, mãos na nuca, pau e bunda expostos. Uma MULHER passa na rua e TE VE por cima do muro. Ela PARA, OLHA, e da risada. 'Nossa, que ousadia!' Tu fica imovel, o coração acelerado. Ela MANDA: 'SE VIRA DE FRENTE PRA MIM.' Tu VIRA e mostra o pau duro. Ela OLHA fixo e diz: 'COÇA ESSA CABECINHA PRA MIM.' Tu alisa a cabecinha com o dedo enquanto ela assiste. 1 minuto de show particular. Depois ela VAI EMBORA. Tu veste e volta. Nao goza, sua puta.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO 1 — Vai de BIKE PELADO — só de camiseta — pra lugar DESERTO. PEDALA 3 minutos. Uma OUTRA BIKE aparece no horizonte vindo na direcao. E um HOMEM ou MULHER ciclista. Tu NAO TEM TEMPO de vestir. Ele/ela CHEGA PERTO e TE VE pelado na bike. PARA a bike e FALA: 'Caralho, ta pelado memo hein.' Tu fica sem graça mas sentado na bike, pau exposto. Ele MANDA: 'DESCE DESSA BIKE E MOSTRA ESSE CU.' Tu DESCE e fica de COSTAS, bunda exposta. Ele OLHA e diz: 'PODE SUBIR DE VOLTA, PUTA.' Tu monta e pedala embora. Nao goza, seu puto pego de bike.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO 2 — Vai de BIKE PELADO pra estrada de terra deserta. PEDALA 4 minutos. Um CAMINHONEIRO para o caminhao no acostamento e TE VE pelado pedalando. Ele DESCE do caminhao, cruza os braços e OLHA. 'Cê ta doido, mermao?' Tu PARA a bike. Ele MANDA: 'ENCOSTA A BIKE ALI E VEM CA.' Tu encosta a bike e vai ate perto. Ele OLHA teu corpo nu e diz: 'VIROU MINHA ATRAÇÃO DE ESTRADA, HEIN? AGORA VAI ANDANDO PELADO ALI NA FRENTE ENQUANTO EU OLHO.' Tu caminha pelado 1 minuto na frente dele enquanto ele assiste. Depois ele da risada, entra no caminhao e vai embora. Tu monta na bike e volta. Nao goza, seu puto de estrada.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO 3 — Vai de BIKE PELADO pra lugar DESERTO. DESCE da bike e COMECA a se MASTURBAR em pé. Uma PESSOA aparece caminhando com um CACHORRO. O cachorro late, a pessoa TE VE. 'Nossa, que absurdo!' Mas a pessoa NAO SAI — fica olhando. Tu com a mão no pau, imovel. ELA MANDA: 'ABRE ESSAS PERNAS PRA EU VER.' Tu abre as pernas, pau exposto. Ela OLHA e diz: 'TA BOM, PODE CONTINUAR SEU TREINO DE PUTA.' Depois vai embora puxando o cachorro. Tu monta na bike e volta rapido. Nao goza, sua puta pega no flagra.",
|
||||||
|
"🔥 EXPOSTO CAMINHADA PEGO 1 — Vai pra uma TRILHA ou CAMINHO DESERTO. Tira TUDO. CAMINHA PELADO 2 minutos. Um HOMEM aparece na trilha vindo de frente. Tu CONGELA. Ele CHEGA PERTO e OLHA teu corpo nu dos pés a cabeça. 'Cê ta maluco, ta nu no meio do mato?' Tu fala: 'To me exercitando.' Ele da risada e MANDA: 'EXERCITA ESSA BUNDA ENTÃO — ENCOSTA NAQUELA ARVORE E MOSTRA O CU.' Tu vai ate a arvore, se curva e mostra o cu escancarado pra ele. Ele OLHA 30 segundos e depois VAI EMBORA. Tu veste e volta. Nao goza, seu puto exposto na trilha.",
|
||||||
|
"🔥 EXPOSTO CAMINHADA PEGO 2 — Vai pra um CAMPO ABERTO e VAZIO. Tira TUDO. CAMINHA PELADO. Uma MULHER de bicicleta passa PERTO e TE VE. Ela PARA, DESCE da bike e VEM na sua direcao. 'Oi, vi voce pelado e vim ver de perto.' Tu fica sem reação. Ela OLHA teu pau e pergunta: 'POSSO TOCAR?' Tu balança a cabeca que sim. Ela ENCOSTA a mão no teu pau e alisa a cabecinha por 30 segundos. Depois ELA MANDA: 'AGORA ME MOSTRA ESSA BUNDA.' Tu vira e mostra a bunda. Ela da UM TAPA e monta na bike. 'ATÉ MAIS, PUTA.' Ela vai embora. Tu veste e volta. Nao goza, sua puta tocada pela estranha.",
|
||||||
|
"🔥 EXPOSTO CAMINHADA PEGO 3 — Vai pra lugar DESERTO, tira TUDO. CAMINHA PELADO. Duas MULHERES aparecem caminhando e TE VEEM. Elas PARAM e uma delas PERGUNTA: 'Ta fazendo um filme?' Tu nega. Elas se OLHAM e riem. Uma delas MANDA: 'DA UMA VOLTINHA PRA GENTE VER.' Tu gira 360 graus mostrando o corpo nu. Elas APLAUDEM. A outra diz: 'AGORA FAZ 5 FLEXÕES PELADO.' Tu faz 5 flexões no chao, o pau tocando a grama. Elas riem e vao embora. 'Gostamos do show!' Tu levanta e veste. Nao goza, sua puta apresentadora.",
|
||||||
|
"🔥 EXPOSTO CAMINHADA EDGING PEGO — Vai pra lugar DESERTO, tira TUDO. CAMINHA PELADO 2 minutos. Senta NU numa pedra e COMECA a se MASTURBAR. Um HOMEM aparece vindo de longe. Tu VE ele mas CONTINUA se tocando. Ele CHEGA PERTO e OLHA a cena. 'Ta se divertindo?' Tu nao para. Ele SENTA do lado e ASSISTE. Tu masturba ate QUASE GOZAR e PARA no limite, na frente dele. Ele APLAUDE: 'Que autocontrole.' Depois LEVANTA e vai embora. Tu fica com o pau pulsando e volta pra casa. Nao goza, sua puta exibida pro estranho.",
|
||||||
|
"🔥 EXPOSTO QUARTO VIZINHA — Vai ate a janela do quarto, ABRE. Tira TUDO. Fica de FRENTE pra janela se exibindo. A VIZINHA esta na sacada dela e TE VE. Ela cruza os braços e OLHA. 'De novo mostrando o presente?' Tu sorri sem graça. Ela MANDA: 'BATE UMA PALMINHA PRA EU VER SE ESSA BUNDA MARCA BEM.' Tu se curva e da 10 tapas na propria bunda enquanto ela olha da sacada. Depois ela manda um beijo e entra. Nao goza, sua puta da vizinha.",
|
||||||
|
"🔥 EXPOSTO AREA SERVICO VIZINHO — Vai ate a AREA DE SERVICO, deixa a porta ENTREABERTA. Tira calça e cueca. Fica de QUATRO, cu exposto na fresta. O VIZINHO aparece do outro lado do muro e VE o cu na fresta. Ele EMPURRA a porta devagar e te VE de quatro de cu aberto. 'Que isso, ta me esperando?' Tu nao responde. Ele MANDA: 'ABRE MAIS ESSE CU COM A MÃO.' Tu abre o cu com os dedos pra ele ver. Ele OLHA por 1 minuto e depois FECHA a porta devagar e vai embora. Tu levanta e massageia o cu. Nao goza, seu puto oferecido.",
|
||||||
|
"🔥 EXPOSTO QUINTAL VIZINHA — Vai ate o QUINTAL, tira TUDO. Fica de quatro perto do muro, cu exposto. A VIZINHA do lado esta no quintal dela e TE VE pelo buraco do muro ou por cima. 'Ta mostrando o rego de novo, hein?' Tu fica imovel. Ela MANDA: 'ENFIA O DEDO NO CU E MOSTRA PRA MIM.' Tu enfia o dedo no cu e abre enquanto ela olha pelo muro. 1 minuto de dedo no cu pra vizinha. Depois ela volta pro que tava fazendo. Tu sai de quatro. Nao goza, sua puta vizinhada.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO 4 — Vai de BIKE PELADO. Um CARRO passa devagar e o MOTORISTA TE VE. Ele REDUZ a velocidade, ABRE a janela e GRITA: 'E aí, ciclista sem vergonha!' Tu pedala sem reagir. Ele MANDA: 'PARA A BIKE.' Tu PARA. Ele DESCE do carro e se APROXIMA. 'Mostra esse negocio direito.' Ele OLHA teu pau de perto. 'BATE UMA PUNHETA PRA EU VER SE É BOM.' Tu comeca a masturbar enquanto ele assiste. 'BATE ATÉ QUASE GOZAR E PARA.' Tu quase goza e PARA. Ele da risada, entra no carro e vai embora. Tu monta e volta. Nao goza, sua puta de estrada.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO 5 — Vai de BIKE PELADO. Duas AMIGAS estao caminhando e TE VEEM passar pelado. Elas GRITAM: 'EI, PELADO!' e CORREM atras. Tu PARA a bike. Elas CHEGAM PERTO, ofegantes, e OLHAM teu corpo nu. Uma delas PASSA a mão no teu peito e diz: 'Ta duro.' A outra MANDA: 'DESCE DA BIKE.' Tu desce. Ela MANDA: 'ENCOSTA A BIKE E VEM CA — MOSTRA PRA GENTE COMO CÊ ANDA PELADO.' Tu caminha 1 minuto pelado na frente delas enquanto elas olham e comentam entre si. Depois se DESPEDEM e vao embora. Tu monta e volta. Nao goza, sua puta desfilando pras amigas.",
|
||||||
|
"🔥 EXPOSTO CAMINHADA CASAL — Vai pra lugar DESERTO, tira TUDO. CAMINHA PELADO 2 minutos. Um CASAL aparece caminhando de maos dadas. Eles TE VEEM e PARAM. O HOMEM da risada, a MULHER OLHA curiosa. O HOMEM PERGUNTA: 'Ta vendendo alguma coisa?' ELE MANDA: 'DA UMA VOLTA PROS NOS VER.' Tu gira mostrando o corpo. A MULHER pergunta: 'POSSO TOCAR?' Tu deixa. Ela ENCOSTA a mão na tua bunda e APERTA. O homem MANDA: 'AGORA ABRE AS PERNAS.' Tu abre as pernas, pau exposto. Eles OLHAM e vao embora de maos dadas. Tu veste e volta. Nao goza, sua puta inspecionada.",
|
||||||
|
"🔥 EXPOSTO CAMINHADA GRUPO — Vai pra lugar SEMI-DERTO. Tira TUDO. COMECA a caminhar pelado. Um GRUPO de 3 PESSOAS aparece (duas mulheres e um homem). Eles TE VEEM e PARAM. 'Olha o maluco pelado!' Eles se APROXIMAM e um deles PERGUNTA: 'Ta fazendo o que?' Tu diz: 'So caminhando.' O HOMEM MANDA: 'ENTAO CAMINHA ALI PRA GENTE VER.' Tu caminha pelado na frente deles. As mulheres RIEM e UMA DELAS MANDA: 'DA UMA REBOLADA PRA GENTE.' Tu rebola 10 vezes enquanto eles assistem. Depois eles VAO EMBORA rindo alto. Tu veste e volta. Nao goza, sua puta de auditório.",
|
||||||
|
"🔥 EXPOSTO CAMINHADA HOMEM — Vai pra lugar DESERTO, tira TUDO. CAMINHA PELADO. Um HOMEM aparece, TE VE, e ABRE um sorriso. 'Gostei da iniciativa.' Ele CHEGA PERTO e COLOCA a mão na tua nuca. 'VOCE É MEU AGORA.' Ele TE VIRA de costas e ENCOSTA teu corpo nu numa arvore. Ele MANDA: 'ABRE AS PERNAS E MOSTRA ESSE CU.' Tu abre e ele OLHA. Depois ele dá UM TAPA na tua bunda e diz: 'PODE IR, PUTA.' Tu veste sem olhar pra tras. Nao goza, seu puto dominado pelo estranho.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO 6 — Vai de BIKE PELADO. Um GRUPO DE CICLISTAS aparece na direcao oposta. Eles TE VEEM e ALGUNS ASSOBIIAM. Um deles GRITA: 'OLHA O PELADO NA BIKE!' Eles PARAM e UM DELES MANDA: 'DESCE PRA GENTE VER DIREITO.' Tu desce da bike. Eles RODEAM tu pelado — 4 ciclistas te olhando. Um deles MANDA: 'ENCOSTA A BIKE NA ARVORE E SE CURVA, MOSTRA A BUNDA.' Tu faz isso e eles OLHAM. 'ESSAS NÁDEGAS MERECEM UM TAPA.' Um deles DA UM TAPA na tua bunda. Todos riem. Depois eles montam e vao embora. Tu monta e volta. Nao goza, seu puto rodeado.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO 7 — Vai de BIKE PELADO. Um casal de IDOSOS esta num BANCO na praca e TE VEEM passando. A IDOSA TAPA a boca de surpresa mas CONTINUA olhando. O IDOSO MANDA: 'MOCINHO, PARAI AI.' Tu para a bike. 'ISSO É LUGAR DE ANDAR PELADO?' Tu fala que ta se exercitando. A IDOSA DIZ: 'BEM QUE PODIA MOSTRAR ESSAS PERNAS.' O idoso MANDA: 'QUE SEJA, DA UMA VOLTA AQUI PRA GENTE VER SE CÊ TEM VERGONHA.' Tu caminha pelado 30 segundos na frente deles. Eles COCHICHAM e depois VÃO EMBORA. Tu monta e volta. Nao goza, seu puto julgado pelos idosos.",
|
||||||
|
"🔥 EXPOSTO CÚ PEGO JANELA — Vai ate a janela da COZINHA, abre. Tira TUDO da cintura pra baixo. Fica de QUATRO, CU escancarado pra janela. O ENTREGADOR passa na rua e TE VE. Ele PARA o carro, DESCE e GRITA: 'E ESSA MERCADORIA NA JANELA?' Tu nao se mexe. Ele MANDA: 'ABRE BEM ESSE CU QUE EU QUERO VER.' Tu abre com os dedos e mostra o interior. Ele OLHA 1 minuto e depois GRITA: 'APROVADO!' Entra no carro e vai embora. Tu fecha a janela. Nao goza, sua puta inspecionada pelo entregador.",
|
||||||
|
"🔥 EXPOSTO CÚ PEGO PORTA — Vai ate a PORTA DA COZINHA, abre. Tira TUDO. Fica de QUATRO de FRENTE pra porta aberta, cu escancarado pro corredor. O SINDICO aparece no corredor e TE VE. 'QUE ABSURDO!' Ele CORRE ate a porta. 'TA MALUCO, VAI FICAR MOSTRANDO ISSO?' Tu imovel. Ele MANDA: 'LEVANTA AGORA E VAI PRA DENTRO.' Tu levanta e ele VE teu pau duro. Ele BALANCA a cabeca e vai embora resmungando. Tu fecha a porta. Nao goza, seu puto enquadrado.",
|
||||||
|
"🔥 EXPOSTO CÚ PEGO MURO — Vai ate o QUINTAL, tira TUDO. Fica de QUATRO, cu pro muro. O VIZINHO está no quintal dele e VE teu cu por cima do muro. 'TA DANDO O CU PRO MUNDO?' Ele CHEGA PERTO do muro. 'ABRE COM A MÃO QUE EU QUERO VER.' Tu abre o cu com os dedos. Ele OLHA fixo. 'ENFIA UM DEDO.' Tu enfia o dedo no cu enquanto ele observa. 1 minuto de dedo no cu pro vizinho. Ele da UM GRUNHIDO de aprovação e volta pro que tava fazendo. Tu sai de quatro e veste. Nao goza, sua puta do vizinho.",
|
||||||
|
"🔥 EXPOSTO CÚ PEGO CAMINHADA — Vai pra lugar DESERTO, tira TUDO. CAMINHA PELADO 2 minutos. PARA e FICA de QUATRO, cu exposto. Uma MULHER aparece na trilha e TE VE de quatro. 'Nossa, que visão!' Ela CHEGA PERTO e SE AGACHA atras de ti. 'POSSO OLHAR?' Tu acena. Ela OLHA teu cu de perto. 'ABRE COM AS MÃOS.' Tu abre o cu pra ela. Ela ASSOPRA no teu cu — vento gelado. Depois LEVANTA e diz: 'BOA SORTE, PUTA.' e vai embora. Tu levanta, veste e volta. Nao goza, sua puta de trilha.",
|
||||||
|
"🔥 EXPOSTO CÚ PEGO BIKE — Vai de BIKE PELADO pra lugar DESERTO. DESCE da bike e FICA de QUATRO, cu pro mundo. Um HOMEM de CAVALO aparece e TE VE. 'CARALHO, QUE CENA!' Ele DESCE do cavalo e se APROXIMA. 'CÊ TA DE QUATRO PRO MUNDO, HEIN?' Tu imovel. Ele MANDA: 'ENFIA O DEDO NO CU E MOSTRA PRA MIM.' Tu enfia o dedo e abre. Ele OLHA, monta no cavalo e vai embora. Tu levanta e monta na bike. Nao goza, sua puta de campo.",
|
||||||
|
"🔥 EXPOSTO BUNDA PEGO AREA — Vai ate a AREA DE SERVICO, abre a porta. Tira calça e cueca. Debruça na MAQUINA de COSTAS, bunda pro alto. Um HOMEM aparece no corredor e TE VE de bunda pro alto. 'QUE BUNDA GOSTOSA.' Ele SE APROXIMA e PASSA a mão na tua bunda — uma mão estranha te tocando. 'DELICIA.' Tu imovel. Ele APERTA as duas nádegas e BALANÇA. 'BALANÇA PRA MIM.' Tu balança a bunda 10 vezes enquanto ele olha. Depois ele DA UM TAPA e vai embora. Tu fecha a porta e massageia a bunda. Nao goza, seu puto apalpado.",
|
||||||
|
"🔥 EXPOSTO BUNDA PEGO MURO — Vai ate o QUINTAL, tira calça e cueca. Fica em PÉ de COSTAS pro muro, bunda nua. O VIZINHO aparece e TE VE. 'ISSO É CONVITE?' Ele ENCOSTA no muro e COLOCA a mão na tua bunda por cima do muro. PASSA a mão nas nádegas. 'TA BEM GOSTOSA.' Ele MANDA: 'CURVA PRA MIM.' Tu se curva e ele passa a mão na bunda toda. Depois ele tira a mão e vai embora. Tu veste e volta. Nao goza, sua puta apalpada pelo vizinho.",
|
||||||
|
"🔥 EXPOSTO CABEÇA PEGO JANELA — Vai ate a janela, abre. Tira a camiseta, fica com o pau pra fora da calça. Passa LUBRIFICANTE na CABECINHA e alisa. Uma PASSANTE na rua TE VE alisando a cabecinha na janela. ELA PARA e OLHA. 'TA SE EXIBINDO, GOSTOSO?' Tu continua alisando. ELA MANDA: 'ALISA BEM DEVAGAR PRA EU VER.' Tu alisa lentamente a cabecinha em círculos. 1 minuto de show. Depois ela MANDA: 'MOSTRA A BUNDA AGORA.' Tu vira e mostra a bunda. Ela DA RISADA e vai embora. Tu fecha a janela. Nao goza, sua puta da janela.",
|
||||||
|
"🔥 EXPOSTO CABEÇA PEGO BIKE — Vai de BIKE PELADO pra lugar DESERTO. APLICA lubrificante na CABECINHA e alisa, sentado na bike. Um CAMINHÃO para e o MOTORISTA TE VE alisando a cabecinha. 'QUE ISSO, TA SE CUIDANDO AÍ?' Tu para de alisar. Ele MANDA: 'CONTINUA QUE EU TO OLHANDO.' Tu alisa a cabecinha na frente dele. 'MAIS RÁPIDO.' Tu acelera. 'AGORA PARA E APONTA PRA MIM.' Tu aponta o pau pra ele, cabecinha brilhando. Ele da risada e vai embora. Tu monta e volta. Nao goza, sua puta da estrada.",
|
||||||
|
"🔥 EXPOSTO CABEÇA PEGO CAMINHADA — Vai pra lugar DESERTO, tira TUDO. Passa lubrificante na CABECINHA e CAMINHA alisando. Uma MULHER aparece na trilha e TE VE alisando o pau. 'QUE ISSO?' Ela CHEGA PERTO. 'TA SE TOCANDO NO MEIO DO MATO?' Ela OLHA a cabecinha brilhando. 'DEIXA EU VER DE PERTO.' Ela se AGACHA e OLHA a cabecinha. 'POSSO ENCOSTAR?' Tu acena. Ela ENCOSTA a ponta do dedo na cabecinha e da risadinha. 'É BEM SENSÍVEL, HEIN?' Depois LEVANTA e vai embora. Tu veste e volta. Nao goza, sua puta tocada pela estranha.",
|
||||||
|
"🔥 EXPOSTO CABEÇA PEGO QUINTAL — Vai ate o QUINTAL, tira a roupa da cintura pra baixo. Passa lubrificante na CABECINHA e alisa. O VIZINHO aparece e TE VE. 'TA PASSANDO CREME NO PAU, É?' Tu continua. ELE MANDA: 'ENCOSTA NO MURO E MOSTRA A CABECINHA PRA MIM.' Tu encosta a barriga no muro, pau apontando pra cima e alisa a cabecinha pra ele ver. Ele OLHA e diz: 'BONITA.' Depois se MANDA. Tu veste e volta. Nao goza, seu puto.",
|
||||||
|
"🔥 EXPOSTO NU PEGO QUINTA — Vai ate o QUINTAL da FRENTE. Tira TUDO. Fica em PÉ ao lado do portão, totalmente nu. O CARRO DO VIZINHO ENTRA na rua e TE VE. Ele PARA O CARRO e FICA OLHANDO. 'CÊ TA PELADO NO QUINTAL, MACHO?' Tu imovel. Ele MANDA: 'ABRE O PORTÃO E VEM ATÉ O PORTÃO.' Tu abre e vai ate o portão, nu pro mundo. Ele OLHA de dentro do carro. 'DA UMA VOLTA PRA EU VER TUDO.' Tu gira completamente. Ele ASSOPIA e vai embora de carro. Tu fecha o portão. Nao goza, sua puta de portão.",
|
||||||
|
"🔥 EXPOSTO NU PEGO RUA — Vai ate o PORTÃO da frente. Tira TUDO. ABRE uma FRESTA e COLOCA O PAU PRA FORA. Uma PESSOA PASSANDO NA RUA TE VE. 'Olha o esquisito!' ELA PARA. 'MOSTRA MAIS.' Tu abre mais a fresta e mostra o corpo nu. Ela OLHA e MANDA: 'SAI DO PORTÃO E MOSTRA TUDO.' Tu sai do portão, completamente nu, na frente da pessoa. 30 segundos de nudez total pro estranho. Ela OLHA, BALANÇA a cabeça e vai embora. Tu entra e fecha. Nao goza, sua puta sem vergonha.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO GRUPO 2 — Vai de BIKE PELADO. Um GRUPO de jovens esta num ponto e TE VEEM passar. ELES GRITAM e CORREM ate tu. 'MANO, TU TA PELADO!' Eles RODEIAM a bike. Uma das GAROTAS MANDA: 'DESCE PRA GENTE VER DIREITO.' Tu desce. Outra MANDA: 'TIRA A CAMISETA TAMBÉM.' Tu tira a camiseta e fica totalmente nu no meio do grupo. Eles OLHAM, UM DELES PASSA a mão na tua bunda e DA UM TAPA. Riem todos. 'BOA SORTE, PUTA!' Eles vao embora. Tu monta e volta. Nao goza, sua puta de grupo.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO MOTO — Vai de BIKE PELADO. Um MOTOQUEIRO para a MOTO DO LADO e TE VE. 'CARALHO, QUE CENA BOA!' Ele DESCE da moto. 'CÊ TA DE BIKE PELADO, VAI TOMAR UM BANHO?' Tu ri sem graça. Ele MANDA: 'DESCE DA BIKE E VEM AQUI.' Tu vai ate ele. Ele COLOCA a mão no teu ombro e TE EXAMINA. 'QUE CORPO, HEIN?' Ele PASSA a mão na tua bunda. 'VIRA DE COSTAS.' Tu vira. Ele OLHA e MANDA: 'ABRE AS PERNAS.' Tu abre e mostra o cu. Ele APROVA com a cabeca, monta na moto e vai embora. Tu monta na bike. Nao goza, seu puto inspecionado pelo motoqueiro.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO OLEIRO — Vai de BIKE PELADO. Um CAMINHÃO basculante ou trator passa e o OLEIRO TE VE. Ele PARA a máquina e DESCE. 'E ESSA BIKE PELADA?' Ele CHEGA PERTO e OLHA. 'BONITO HEIN.' Ele MANDA: 'SENTA NO GUIDÃO.' Tu senta no guidão da bike, o pau escancarado pra ele. Ele OLHA e se aproxima. 'VOU DAR UM TRATO NISSO.' Ele ENCOSTA um dedo sujo de graxa na tua cabecinha. Sujo. Depois LIMPA na roupa dele e da risada. 'AGORA VOLTA PRA CASA E LAVA ESSA CABECINHA.' Monta no caminhão e vai. Nao goza, seu puto sujinho.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO PESCADOR — Vai de BIKE PELADO pra lugar perto de RIO ou LAGOA. Um PESCADOR esta na margem e TE VE. 'PESQUEI UM PELADO!' Ele se LEVANTA e vem. 'QUE ISSO, TA PROCURANDO PEIXE?' Tu para. Ele OLHA teu pau. 'ISSO É UMA VARINHA, NÃO UM PEIXE.' Ele MANDA: 'VAI TOMAR UM BANHO NU NO RIO LÁ.' Tu vai ate a agua e ENTRA pelado na agua. O pescador OLHA da margem. 'AGORA SAI E MOSTRA O PEIXE SECANDO.' Tu sai e fica em pé na margem, pingando, pau duro e molhado. Ele OLHA e volta a pescar. Tu veste e vai. Nao goza, sua puta molhada.",
|
||||||
|
"🔥 EXPOSTO CAMINHADA PEGO 4 — Vai pra lugar DESERTO, tira TUDO. CAMINHA PELADO. Uma MULHER com UMA CRIANÇA (segura) aparecem. A mulher TE VE e RAPIDAMENTE tampa os olhos da criança. 'QUE ABSURDO!' Ela MANDA: 'VIRA DE COSTAS AGORA.' Tu vira. Ela PASSA com a criança e te xinga baixinho. Depois que elas passam, tu se VIRA e ve ela OLHANDO de volta furtivamente. Ela desvia o olhar e vai embora. Tu veste e volta rindo. Nao goza, sua puta quase pego pela família.",
|
||||||
|
"🔥 EXPOSTO CAMINHADA PEGO 5 — Vai pra lugar DESERTO, tira TUDO. CAMINHA PELADO COM AS MÃOS NA CABEÇA. Um HOMEM aparece e TE VE. 'QUE POSIÇÃO É ESSA?' Ele CHEGA PERTO. 'PARECE UM PRESO ANDANDO NU.' Ele MANDA: 'AJEELHA.' Tu ajoelha nu no chão, mãos na cabeça. Ele PASSA em volta te olhando. 'É ASSIM QUE PUTA ANDA?' Tu ajoelhado, imovel. 'LEVANTA E VAI EMBOORA.' Tu levanta e veste. Nao goza, seu puto submisso.",
|
||||||
|
"🔥 EXPOSTO CAMINHADA PEGO 6 — Vai pra lugar DESERTO, tira TUDO. CAMINHA PELADO. Duas MULHERES DE CAVALO aparecem na trilha. Elas TE VEEM e PARAM os cavalos. 'Nossa, que surpresa!' Uma DELAS DESCE do cavalo. 'CÊ TAVA ESPERANDO NÓS?' Ela PASSA o rebenque (ou mão) na tua bunda. 'QUE BUNDA.' A outra MANDA: 'CURVA E MOSTRA.' Tu se curva e elas OLHAM. 'REBOLA 10 PRA NÓS.' Tu rebola 10 vezes nu na trilha enquanto elas olham dos cavalos. Depois MONTAM e vao embora. Nao goza, sua puta de cavalaria.",
|
||||||
|
"🔥 EXPOSTO CAMINHADA PEGO DOMINADO — Vai pra lugar DESERTO, tira TUDO. CAMINHA PELADO. Um HOMEM de CAPUZ aparece e TE ABORDA. 'PERDEU A ROUPA?' Tu tenta falar. Ele MANDA: 'CALADO. MÃOS NAS COSTAS.' Ele TE AMARRA as mãos com um cinto ou corda. 'AGORA VAI ANDANDO NA MINHA FRENTE, NU, DE MÃOS PRESAS.' Ele te guia pelo braço e tu caminha pelado de mãos presas por 3 minutos. Ele para, te DESAMARRA e MANDA: 'VAI EMBOORA E NAO CONTA PRA NINGUEM.' Tu veste e sai rapidão. Nao goza, seu puto capturado.",
|
||||||
|
"🔥 EXPOSTO CAMINHADA PEGO FISCAL — Vai pra lugar SEMI-DERTO. Tira TUDO. CAMINHA PELADO. Um GUARDA ou FISCAL aparece e TE VE. 'ISSO É PROIBIDO, VAI TER QUE ME ACOMPANHAR.' Tu treme. Ele CHEGA PERTO e OLHA teu corpo. 'MAS... PODE SER QUE EU DEIXE PASSAR SE VOCÊ COOPERAR.' Ele MANDA: 'CURVA E APOIA NAS MÃOS.' Tu faz isso. Ele PASSA a mão na tua bunda. 'BOA COOPERAÇÃO.' Ele da risada. 'PODE IR, MAS NA PRÓXIMA VOU MULTAR.' Tu veste e sai correndo. Nao goza, seu puto fiscalizado.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO CAMINHAO — Vai de BIKE PELADO. Um CAMINHÃO BAU para e o MOTORISTA TE VE. 'EI, PELADO, VEM CA.' Tu para. Ele ABRE a porta do caminhão e MANDA: 'SOBE AÍ.' Tu SOBE no caminhão nu. Dentro do baú, tem UM COLCHÃO. 'DEITA.' Tu deita nu no colchão dentro do caminhão. Ele OLHA teu corpo, APALPA tua bunda, e MANDA: 'ABRE AS PERNAS.' Tu abre. Ele PASSA a mão no teu cu. 1 minuto de apalpação. Depois MANDA: 'PODE DESCER.' Tu desce do caminhão, monta na bike e vai embora. Nao goza, seu puto do baú.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO CAMINHO — Vai de BIKE PELADO. Uma PESSOA numa PICKUP para e TE OLHA. 'QUE ISSO, TA PERDIDO?' Tu para. ELA MANDA: 'ENCosta A BIKE E VEM NO CARRO.' Tu vai. ELA PASSA a mão no teu pau e PERGUNTA: 'JÁ GOZOU HOJE?' Tu nega. ELA MANDA: 'ENTÃO VAI GUARDANDO.' Depois ela vai embora. Tu volta pra bike e pedala, frustrado. Nao goza, sua puta.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO PARQUE — Vai de BIKE PELADO pra um PARQUE VAZIO. PEDALA dentro do parque. Um JARDINEIRO esta podando e TE VE. 'RAPAZ, CÊ TA PELADO NO PARQUE?' Ele ri. Ele MANDA: 'DA UMA VOLTA NO PARQUE INTEIRO PELADO.' Tu da uma volta completa no parque pelado enquanto ele assiste de longe. A cada passada, ele da risada. No final, ELE MANDA: 'AGORA VAI PRA CASA.' Tu monta e vai. Nao goza, sua puta de parque.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO ESTRADA — Vai de BIKE PELADO numa ESTRADA de terra. Um TRATOR para e o TRATORISTA TE VE. 'QUE ISSO MULEQUE?' Ele para o trator e DESCE. 'TA NESTADO.' Ele OLHA teu corpo nu. 'BATE UMA PUNHETA AI PRA EU VER.' Tu masturba na frente dele. 'ATÉ QUASE GOZAR.' Tu quase goza e PARA. Ele da risada: 'BOIADEIRO APROVA.' Monta no trator e vai embora. Nao goza, seu puto da roça.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO POSTO — Vai de BIKE PELADO e PARA num POSTO ou PONTO de onibus DESERTO. Uma MULHER esta no ponto esperando onibus e TE VE. 'MEU DEUS!' Ela OLHA. 'CÊ TA PELADO NA BIKE?' Tu acena. ELA PERGUNTA: 'POSSO?' e ENCOSTA a mão no teu pau. Tu deixa. Ela alisa a CABECINHA por 30 segundos. 'BONITO.' Depois o onibus chega e ela SOBE. Tu monta na bike e vai. Nao goza, sua puta do ponto.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO PRAIA — Vai de BIKE PELADO ate uma PRAIA DESERTA. PEDALA na areia pelado. Uma PESSOA esta na praia e TE VE. ELA CORRE ate tu. 'NATURISMO, HEM?' Ela OLHA teu corpo nu e PERGUNTA: 'POSSO TIRAR UMA FOTO?' Tu acena. Ela TIRA FOTO do teu corpo nu na praia com a bike. DEPOIS MANDA: 'ENTRA NO MAR, FAZ UM STROKE.' Tu entra no mar e BRAÇA um pouco pelado enquanto ela olha. Depois sai e ELA VAI embora. Nao goza, sua puta fotografada na praia.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO LAVRADOR — Vai de BIKE PELADO num CAMINHO DE ROÇA. Um LAVRADOR NA ENXADA TE VE. 'RAPAZ, TA NU?' Ele ENCOSTA a enxada e VEM. 'ISSO É LÁ O QUÊ?' Ele OLHA teu pau. 'TA DURO AINDA.' Ele MANDA: 'SE VIRA DE COSTAS E MOSTRA A RAPEIRA.' Tu vira e mostra o cu. Ele OLHA e da risada: 'TA BONITO.' Ele da UM TAPA de leve e VOLTA pro trabalho. Nao goza, seu puto da lavoura.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO PEDREIRO — Vai de BIKE PELADO. Passa numa OBRA e os PEDREIROS te veem. ASSOBIOS e GRITOS. 'OLHA O PELADO!' Um deles DESCE e TE ABORDA. 'TA PROCURANDO SERVIÇO?' Tu acena que nao. Ele MANDA: 'DESCE DA BIKE E MOSTRA O SERVIÇO.' Tu desce. 'ABRE AS PERNAS.' Tu abre. Ele OLHA e MANDA: 'DA 10 AGACHAMENTOS PELADO AQUI.' Tu faz 10 agachamentos no meio da rua enquanto os pedreiros olham e riem. 'APROVADO!' Tu monta e foge. Nao goza, sua puta da obra.",
|
||||||
|
"🔥 EXPOSTO UNICO PEGO PORTA — Vai ate a PORTA DE ENTRADA, abre ela. Tira TUDO e FICA PELADO na porta de casa, olhando pra rua. UM CARRO para em frente e uma MULHER DESCE. 'PERDEU A CHAVE?' Ela ri. Ela SE APROXIMA e PASSA a mão no teu peito nu. 'QUE PEITÃO.' Ela ENCOSTA a mão no teu pau. 'DELICIA.' Ela MANDA: 'ENTRA PRA DENTRO, QUE EU VOU AÍ.' Tu entra, mas ELA VAI EMBORA de carro, rindo. Tu fecha a porta. Nao goza, sua puta que ficou esperando.",
|
||||||
|
"🔥 EXPOSTO UNICO JARDIM — Vai ate o JARDIM ou QUINTAL DA FRENTE. Tira TUDO. Fica CURVADO REGANDO as plantas PELADO — mangueira na mão, pau balançando. A VIZINHA passa e TE VE. 'CUIDANDO DO JARDIM?' Ela PARA e OLHA. 'QUE MANGUEIRÃO.' Ela PERGUNTA: 'POSSO AJUDAR?' Tu acena. Ela PEGA a mangueira e DIRECIONA O JATO pra teu pau — agua fria na cabecinha. 'BATE UMA LAVAGEM BEM.' Tu alisa a cabecinha com agua fria. Ela ri e vai embora. Nao goza, seu puto molhado.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO CICLISTA — Vai de BIKE PELADO. Outro CICLISTA aparece e TE VE. 'RAPAZ, TA PELADO!' Ele PARA e DESCE da bike. 'ISSO É CORAGEM.' Ele OLHA teu pau. 'DEIXA EU TIRAR UMA FOTO PRA MOSTRAR PROS AMIGOS?' Tu acena que nao. Ele INSISTE: 'ENTAO MOSTRA ESSA BUNDA PRA EU CONTAR.' Tu vira e mostra a bunda. Ele OLHA, da risada, monta na bike e vai. Nao goza, seu puto.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO MECANICO — Vai de BIKE PELADO. A corrente da bike CAÍ e tu precisa EMPURRAR a bike ate um lugar. Um MECANICO numa OFICINA TE VE empurrando a bike pelado. 'PRECISA DE AJUDA?' Tu fala que sim. Ele OLHA teu corpo nu enquanto CONSERTA a corrente. 'VOU COBRAR CARO.' Ele TERMINA e MANDA: 'MOSTRA O PAGAMENTO.' Tu mostra o pau. Ele PEGA um PANO SUJO e PASSA na cabecinha — oleo e graxa. 'AGORA TA PAGO.' Tu monta e vai. Nao goza, seu puto sujo.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO VENDEDOR — Vai de BIKE PELADO. Um VENDEDOR AMBULANTE esta na rua e TE VE. 'COMPRA ALGUMA COISA?' Tu para. Ele OLHA teu corpo nu. 'VOU TE DAR UM NEGOCIO.' Ele da UM PRESERVATIVO pra tu. 'COLOCA.' Tu coloca o preservativo no pau DURO. Ele MANDA: 'AGORA PEDALA ASSIM, PUTA DE CAMISINHA.' Tu pedala 3 minutos pelado de camisinha na frente dele, que da risada. Depois tira e guarda. Nao goza, sua puta de camisinha.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO GUARDA — Vai de BIKE PELADO. Um CARRO DE POLICIA aparece e te ABORDA. 'ENCOS-TA.' Tu para, nervoso. O POLICIAL DESCE. 'CÊ TA PELADO NA VIA PÚBLICA.' Tu treme. Ele OLHA teu corpo. 'VOU TER QUE REVISTAR.' Ele PASSA a mão nas tuas pernas, na tua bunda, nos teus ovos. 'REVISTA COMPLETA.' Depois da risada. 'PODE IR, MAS DA PRÓXIMA VOU MULTAR.' Tu monta e pedala o mais rápido possivel. Nao goza, seu puto revistado pela autoridade.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO MULHER — Vai de BIKE PELADO. Uma MULHER num CARRO ESPORTE passa, REDUZ e te OLHA. Ela ABRE a janela e GRITA: 'QUE CORPO!' Ela ESTACIONA e DESCE. Divina, salto alto, vestido curto. Ela CHEGA e ENCOSTA em ti. 'QUER UMA CARONA?' Tu acena que nao. Ela PASSA a mão na tua bunda e PERGUNTA: 'JÁ COMERAM VOCÊ HOJE?' Tu nega. Ela MANDA: 'ENTÃO FICA ASSIM, GUARDANDO ESSE LEITE.' Depois VOLTA pro carro e vai embora. Tu monta e pedala louco. Nao goza, sua puta provocada.",
|
||||||
|
"🔥 EXPOSTO CAMINHADA PEGO MOTOQUEIRO — Vai pra lugar DESERTO, tira TUDO. CAMINHA PELADO. Uma MOTO passa e VOLTA. 'QUE CENA BOA!' O MOTOQUEIRO DESCE da moto e se APROXIMA. 'NUNCA VI UM PELADO NA ESTRADA.' Ele OLHA teu corpo. 'DEIXA EU TIRAR UMA FOTO.' Tu recusa. Ele MANDA: 'ENTAO MOSTRA O CU QUE EU VOU PRA CASA FELIZ.' Tu vira e mostra a bunda. Ele OLHA, da risada, monta na moto e vai embora cantando pneu. Nao goza, seu puto de estrada",
|
||||||
|
"🔥 EXPOSTO CAMINHADA PEGO FITNESS — Vai pra lugar DESERTO, tira TUDO. COMECA a fazer EXERCICIOS pelado — 5 polichinelos, 5 agachamentos. Uma PESSOA CORRENDO aparece e TE VE se exercitando nu. ELA PARA. 'QUE TREINO É ESSE?' Ela ri. 'MOSTRA COMO FAZ O AGACHAMENTO DIREITO.' Tu faz 5 agachamentos na frente dela, o pau apontando. Ela AVALIA: 'FORMA BOA.' Ela CORRE e vai embora. Tu veste e vai. Nao goza, sua puta fitness.",
|
||||||
|
"🔥 EXPOSTO CAMINHADA PEGO DOMADOR — Vai pra lugar DESERTO, tira TUDO. CAMINHA PELADO. Um HOMEM aparece e TE DOMINA. 'MÃOS NO CHÃO.' Tu obedece. Ele COLOCA uma CINTA ou CORDA no teu pescoço como se fosse uma coleira. 'AGORA VAI ANDAR DE QUATRO NA MINHA FRENTE.' Tu anda de quatro pelado, com a corda no pescoço, guiado por ele por 3 minutos. Ele PARA, TIRA a corda e MANDA: 'PODE IR, CACHORRO.' Tu veste e sai. Nao goza, seu puto dominado.",
|
||||||
|
"🔥 EXPOSTO CAMINHADA PEGO MESTRE — Vai pra lugar DESERTO, tira TUDO. CAMINHA PELADO. Um HOMEM VELHO (ou SENHORA) aparece e TE VE. 'QUE JOVEM OUSADO.' Ele/A ELA SE APROXIMA. 'VOCÊ PRECISA DE DISCIPLINA.' Ele MANDA: 'AJÖELHE.' Tu ajoelha. Ele PASSA a mão na tua cabeca. 'REPITA: SOU UMA PUTA.' Tu repete. 'MAIS ALTO.' Tu grita: 'SOU UMA PUTA!' Ele APROVA e diz: 'PODE IR.' Tu veste e volta. Nao goza, seu puto disciplinado.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO ENCONTRO — Vai de BIKE PELADO pra um PONTO DE ENCONTRO marcado (lugar deserto). Uma PESSOA ja TE ESPERA LA. Ela TE VE chegando pelado na bike. 'AÍ SIM, PONTUAL.' Ela ABRAÇA tu nu. PASSA a mão no teu corpo. 'VALEU A PENA.' Ela MANDA: 'AGORA VAI DAR UMA VOLTA PELADA PRA EU VER.' Tu faz 2 voltas de bike pelado ao redor dela enquanto ela olha. Depois ELA CHAMA e tu PARA. 'PODE IR, PUTA.' Tu volta pra casa. Nao goza, seu puto pontual.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO FÃ — Vai de BIKE PELADO. Uma PESSOA ja te viu outras vezes e TE RECONHECE. 'É O PELADO DA BIKE!' Ela CORRE ate tu. 'TO TE SEGUINDO.' Ela PERGUNTA: 'POSSO FILMAR?' Tu acena que sim. ELA FILMA 1 minuto da tua bike pelado. 'MANDA UM SALVE.' Tu manda um salvo pelado. 'VAI VIRAR VIRAL.' Tu monta e vai. Nao goza, sua puta filmada.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO AMIGO — Vai de BIKE PELADO. De repente UM AMIGO TE VE e RECONHECE. 'RAPAZ, É VOCÊ?' Tu morre de vergonha. Ele CHEGA PERTO e da risada. 'CÊ TA PELADO.' Ele OLHA teu pau. 'CARALHO.' Ele MANDA: 'VIRA PRA EU VER O CU.' Tu vira e ele OLHA. 'AMIGO, TU TA LOCO.' Ele BALANÇA a cabeça e vai embora rindo. Tu monta a bike e voa pra casa. Nao goza, seu puto queimado pelo amigo.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO VIZINHA 2 — Vai de BIKE PELADO. A VIZINHA ta na janela e TE VE PASSAR. 'NOVAMENTE?' Ela ABRE a janela. 'VEM AQUI.' Tu vai ate a janela. Ela OLHA teu corpo na bike. 'QUE CORAGEM.' Ela MANDA: 'SENTA NO GUIDÃO QUE EU QUERO VER.' Tu senta no guidão, pau escancarado. Ela OLHA e PERGUNTA: 'JÁ BATEU UMA HOJE?' Tu nega. 'GUARDA ENTÃO, VOU PENSAR EM TI.' Ela fecha a janela. Tu pedala pra casa. Nao goza, sua puta da vizinha.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO CASA — Vai de BIKE PELADO e PASSA em frente de casa. A PORTEIRO ou CASEIRO TE VE. 'RAPAZ, QUE É ISSO?' Ele CORRE. 'TA LOCO.' Ele TE EMPURRA pra dentro do portão. 'VESTE ISSO.' Ele te da uma camiseta. 'NADA DE BIKE PELADA.' Ele BALANÇA a cabeça. Tu veste e entra. Nao goza, seu puto enquadrado.",
|
||||||
|
"🔥 EXPOSTO TRANSPORTE PEGO — Vai de BIKE PELADO e EMPURRA a bike por um trecho. Um CAMINHÃO DE GÁS para e o ENTREGADOR TE VE. 'PRECISA DE UMA MÃO?' Tu aceita. Ele PEGA tua bike e COLOCA na carroceria. 'SOBE.' Tu SOBE pelado na carroceria do caminhão. Ele DA UMA CARONA de 2 minutos em pé na carroceria, nu, a brisa no corpo. Ele PARA e MANDA: 'DESCE.' Tu desce com a bike e ele vai embora. Nao goza, sua puta de carona.",
|
||||||
|
"🔥 EXPOSTO BIKE PEGO FINAL — Vai de BIKE PELADO pra um lugar VISÍVEL, PARQUE ou PRAÇA VAZIA. FICA SENTADO na bike pelado, PERNAS ABERTAS, por 5 MINUTOS. Se ALGUÉM PASSAR e TE VER, tu CONTINUA imóvel mostrando TUDO. Se ALGUÉM PARAR e TE OLHAR, tu ACENA. 5 minutos de exposição máxima no espaço público. Depois monta e volta. Nao goza, sua puta final.",
|
||||||
|
"🔥 EXPOSTO PEGO BANCO PRAÇA — Vai pra uma PRAÇA ou PARQUE DESERTO. Tira TUDO. SENTA NUM BANCO PELADO, de pernas abertas, o pau DURO apontando pro espaço. Uma MULHER com UM CACHORRO passa e TE VE. Ela SOLTA a coleira sem querer e o CACHORRO VEM cheirar teu pau. ELA CORRE: 'MEU DEUS, DESCULPA!' Ela PEGA o cachorro e OLHA de novo. 'ELE GOSTOU.' Ela da risada e vai embora. Tu veste e vai. Nao goza, seu puto cheirado pelo cachorro.",
|
||||||
|
"🔥 EXPOSTO PEGO POSTE — Vai pra uma RUA DESERTA a noite (com cuidado). Tira TUDO e FICA EM PÉ abraçado num POSTE de luz, o corpo iluminado. Um CARRO passa devagar e o MOTORISTA TE VE. Ele PARA. 'QUE LUZ BOA.' Ele DESCE, te OLHA contra o poste, e MANDA: 'CURVA NO POSTE.' Tu se curva no poste, bunda exposta. Ele PASSA a mão na tua bunda e GRUNHE. 'DELICIA.' Depois VOLTA pro carro e vai. Tu veste e volta. Nao goza, seu puto iluminado.",
|
||||||
|
"🔥 EXPOSTO PEGO OBRA — Vai pra uma CONSTRUÇÃO ou OBRA ABANDONADA. Tira TUDO e CAMINHA pelos corredores pelado. Um OPERÁRIO aparece e TE VE. 'O QUE É ISSO?' Ele ri. 'FANTASMA DE OBRA.' Ele MANDA: 'SENTA NA LAJE E MOSTRA.' Tu senta na laje, pernas abertas. Ele OLHA de longe e GRITA: 'APROVADO! MAS VISTE ANTES DE ALGUÉM TE VER.' Tu veste e sai. Nao goza, seu puto da obra.",
|
||||||
|
"🔥 EXPOSTO PEGO TÚNEL — Vai pra um TÚNEL ou PASSAGEM SUBTERRÂNEA DESERTA. Tira TUDO. CAMINHA PELADO no tunel, o eco dos passos. Uma PESSOA ENTRA no tunel e TE VE de longe. ELA PARA. 'QUE VISÃO.' Ela SE APROXIMA e OLHA teu corpo nu na penumbra. 'É UM ANJO?' Ela ENCOSTA a mão no teu peito. 'UM ANJO PELADO.' Ela MANDA: 'VIRA PRA EU VER AS ASAS.' Tu vira e mostra a bunda. Ela ASSOPIA. 'BELAS ASAS.' Depois ELA VAI embora. Tu veste e sai. Nao goza, seu puto angelical.",
|
||||||
|
"🔥 EXPOSTO PEGO ESCADARIA — Vai pra uma ESCADARIA ou DEGRAUS DESERTOS. Tira TUDO. SENTA NOS DEGRAUS PELADO, pernas abertas. Uma PESSOA SOBE a escadaria e TE VE de baixo pra cima. 'ISSO É CONVITE?' Ela SOBE MAIS e PARA na tua frente. 'QUE VISTA.' Ela COLOCA a mão no teu ombro. 'POSSO SENTAR?' Tu cede. Ela SENTA DO TEU LADO e OLHA teu pau. Depois LEVANTA e SOBE o resto da escada. Lá de cima, MANDA: 'BOA SORTE, PUTA.' Tu veste e vai. Nao goza, seu puto de escadaria.",
|
||||||
|
"🔥 EXPOSTO PEGO MURO SENTADO — Vai ate um MURO ou CERCA. Tira TUDO e SENTA EM CIMA DO MURO PELADO, pernas abertas, pau pro mundo. Um VIZINHO TE VE do outro lado. 'RAPAZ, CÊ QUER MORRER?' Ele ri. 'VOCÊ É OUSADO.' Ele MANDA: 'FICA AI MAIS 1 MINUTO QUE EU VOU CHAMAR OS AMIGOS.' Tu fica 1 minuto no muro e depois PULA pra dentro. Ele GRITA: 'FUJÃO!' Tu veste e corre. Nao goza, seu puto do muro.",
|
||||||
|
"🔥 EXPOSTO PEGO VARAL — Vai ate a AREA DE SERVIÇO, tira TUDO e ESTENDE ROUPA pelado. O VIZINHO aparece e TE VE estendendo roupa nu. 'TA FAZENDO A LAVANDERIA?' Ele ri. 'FALTAU A ROUPA?' Tu continua estendendo. Ele OLHA e MANDA: 'ESTENDE A MINHA CAMISA TAMBÉM.' Tu estende a camisa dele pelado, alcançando o varal, o pau esticando. Depois ele ri e vai embora. Nao goza, seu puto lavadeiro.",
|
||||||
|
"🔥 EXPOSTO PEGO CHURRAS — Vai pro QUINTAL e ACENDE a CHURRASQUEIRA. Tira TUDO. ASSA pelado a carne, o pau balançando, a fumaça no corpo. O VIZINHO SENTE O CHEIRO e OLHA por cima do muro. 'TA ASSANDO PELADO?' Ele ri. 'ESSA CARNE VAI TER GOSTO DE PUTA.' Ele MANDA: 'ME TRAZ UM PEDAÇO.' Tu leva um pedaço ate o muro pelado. Ele OLHA teu corpo, PEGA a carne e MANDA: 'BOA, MAS VESTE ANTES DE QUEIMAR O PAU.' Tu volta pra churrasqueira. Nao goza, seu puto churrasqueiro.",
|
||||||
|
"🔥 EXPOSTO PEGO PORTÃO CARRO — Vai ate o PORTÃO da FRENTE e FICA PELADO atras do portão, segurando as grades. Um CARRO PARA e o MOTORISTA TE VE. 'É UM ANIMAL NA JAULA?' Ele DESCE e CHEGA PERTO. 'QUE JAULA BONITA.' Ele ENCOSTA a mão entre as grades e PASSA na tua bunda. 'BEM TRATADO.' Ele MANDA: 'ABRE O PORTÃO.' Tu abre. Ele ENTRA e OLHA teu corpo. 'VOU DAR UMA OLHADA NO SISTEMA.' Ele PASSEIA o olhar no teu corpo nu, 1 minuto. Depois SAI e MANDA: 'PODE FECHAR.' Vai embora. Nao goza, seu puto inspecionado.",
|
||||||
|
"🔥 EXPOSTO PEGO CORREIO — Vai ate o PORTÃO, abre, e FICA PELADO na CALÇADA. O CARTEIRO aparece e TE VE. 'SEDEX?' Ele ri. TENHO UMA ENCOMENDA PRA TI.' Ele te da um ENVELOPE. Tu PELADO recebendo correspondência. Ele OLHA e PERGUNTA: 'VAI ME CONVIDAR PRA ENTRAR?' Tu acena que nao. Ele MANDA: 'ENTAO ASSINA AQUI.' Tu assina pelado. Ele PEGA, da risada e vai embora. Nao goza, seu puto do correio.",
|
||||||
|
"🔥 EXPOSTO PEGO CAMINHÃO DE LIXO — Vai ate a RUA, tira TUDO e FICA PELADO perto da lixeira. O CAMINHÃO DE LIXO passa e o GARIS TE VE. 'OLHA O LIXO!' Eles GRITAM e ASSOBIAM. 'VAMOS LEVAR?' Um deles DESCE e CHEGA PERTO. 'ISSO É LIXO RECICLAVEL?' Ele PASSA a mão na tua bunda. 'BEM CONSERVADO.' Ele VOLTA pro caminhão e MANDA: 'GUARDA ESSE LIXO PRA COLETA NOTURNA.' Vao embora rindo. Tu veste e entra. Nao goza, seu puto do lixo.",
|
||||||
|
"🔥 EXPOSTO PEGO TIO — Vai ate a casa do TIO ou PARENTE (se for viavel). BATE na porta. Quando ele ABRE, tu TA PELADO. 'MEU DEUS, SOBRINHO!' Ele ri. 'QUE VISITA É ESSA?' Ele OLHA teu corpo. 'TÁ DE SACANAGEM?' Tu fala que perdeu a roupa no banho. Ele MANDA: 'ENTRA LOGO ANTES QUE A VIZINHA VEJA.' Tu entra pelado. Ele da uma CAMISA. 'VESTE, PUTA.' Tu veste e vai embora. Nao goza, seu puto sem vergonha na familia.",
|
||||||
|
"🔥 EXPOSTO PEGO CACHORRO — Vai ate o QUINTAL, tira TUDO. Fica de QUATRO no quintal, cu exposto. O CACHORRO DO VIZINHO entra no quintal e TE CHEIRA o cu — o focinho frio no teu cu. Tu imovel. O VIZINHO aparece e CHAMA o cachorro. 'O QUE CÊ TA FAZENDO?' Ele TE VE de quatro. 'MEU CACHORRO GOSTOU.' Ele ri e MANDA: 'FICA AI MAIS 1 MINUTO QUE ELE VOLTA.' Tu fica. O cachorro volta e cheira de novo. Depois o vizinho CHAMA e vai embora. Tu veste e entra. Nao goza, seu puto cheirado.",
|
||||||
|
"🔥 EXPOSTO PEGO BICHO — Vai pra lugar DESERTO, tira TUDO. CAMINHA PELADO. Uma VACA ou CAVALO aparece e TE VE. O ANIMAL CHEGA PERTO e TE CHEIRA — o focinho quente na tua barriga, no teu pau. Tu imovel. O ANIMAL LAMBE teu ombro. O FAZENDEIRO aparece e GRITA: 'QUE ISSO?' O homem CORRE e TE VE pelado sendo lambido pela vaca. 'RAPAZ, A VACA TE ADOTOU.' Ele ri. DESCE do cavalo (ou chega) e PERGUNTA: 'CÊ TA BEM?' Tu acena. Ele BALANÇA a cabeca e MANDA: 'VESTE LOGO ANTES QUE O TOURO TE PEGUE.' Tu veste e sai. Nao goza, seu puto do campo.",
|
||||||
|
"🔥 EXPOSTO PEGO PIPA — Vai pra um CAMPO aberto. Tira TUDO e SOLTA UMA PIPA pelado. Uma CRIANÇA (imaginaria ou voce sozinho) — na verdade uma PESSOA aparece e TE VE soltando pipa pelado. 'PIPA LEGAL.' A pessoa OLHA teu corpo. 'VOCÊ É O PIPA.' Tu ri. A pessoa MANDA: 'DA UMA CORRIDA COM A PIPA PELADO.' Tu corre pelado no campo com a pipa subindo. O vento no corpo nu, a pipa no ceu. 2 minutos de corrida nua. A pessoa OLHA e APPLAUDE. 'BOM ESPETACULO.' Vai embora. Naoo goza, seu puto soltando pipa.",
|
||||||
|
"🔥 EXPOSTO PEGO PADEIRO — Vai ate uma PADARIA ou MERCADO PERTO (se for seguro, de bike). Vai de BIKE PELADO e FICA NA CALÇADA em frente. O PADEIRO TE VE e SAÍ. \"É CLIENTE?\" Ele OLHA teu corpo nu. \"VOU TE SERVIR.\" Ele da UM PÃO QUENTE pra tu segurar pelado. \"COME.\" Tu come pelado na calcada. Ele OLHA e VOLTA pra dentro. Nao goza, seu puto do pao.",
|
||||||
|
"🔥 EXPOSTO PEGO PEDRA — Vai ate uma PEDRA GRANDE ou ROCHA em lugar deserto. Tira TUDO. SENTA NA PEDRA PELADO, pernas abertas. Uma PESSOA aparece e TE VE sentado na pedra. \"É UMA ESTÁTUA?\" Ela CHEGA PERTO e OLHA. \"UMA ESTATUA DE PUTA.\" Ela PASSA a mão no teu pau. \"MUITO REALISTA.\" Ela MANDA: \"FICA IMÓVEL MAIS 1 MINUTO.\" Tu fica imóvel enquanto ela contorna. Depois vai embora. Nao goza, seu puto estátua.",
|
||||||
|
"🔥 EXPOSTO PEGO PONTE — Vai ate uma PONTA ou PONTE em lugar deserto. Tira TUDO e FICA DE QUATRO na ponta da ponte, cu pro abismo. Um PESCADOR (ou passante) TE VE e GRITA: \"PESCA GROSSA!\" Ele CHEGA. \"QUE ISSO, TA PESCANDO DE CU?\" Ele MANDA: \"BALANÇA O CU QUE O PEIXE MORDE.\" Tu balança 10 vezes. Ele OLHA e vai embora rindo. Nao goza, seu puto pescador.",
|
||||||
|
"🔥 EXPOSTO PEGO POSTO 2 — Vai ate um POSTO DE GASOLINA deserto a noite. Tira TUDO e FICA DO LADO DA BIKE, abastecendo imaginariamente. O FRENTISTA TE VE. \"OI, VAI COMPLETAR?\" Ele OLHA teu corpo. \"O TANQUE É ONDE?\" Ele MANDA: \"ABRE A TAMPA.\" Tu aponta pro cu. Ele ri e MANDA: \"PODE IR, PUTA.\" Nao goza, seu puto do posto.",
|
||||||
|
"🔥 EXPOSTO PEGO CAMPING — Vai ate um local de CAMPING DESERTO (se possivel). Monta UMA BARRACA (imaginaria ou real). Tira TUDO e FICA EM PÉ do lado da barraca pelado. UM CAMPER aparece e TE VE. \"ACHOU UM BOM LUGAR?\" Ele SE APROXIMA. \"VOCÊ É O NATURISTA.\" Ele OLHA teu corpo. PASSA a mão na tua barriga. \"BEM VINDO AO CLUBE.\" Ele MANDA: \"DA UMA VOLTA NO ACAMPAMENTO.\" Tu caminha pelado 2 minutos. Ele OLHA e depois ENTRA na barraca dele. Nao goza, seu puto campista.",
|
||||||
|
"🔥 EXPOSTO PEGO FOGO — Vai ate um lugar DESERTO e ACENDE uma FOGUEIRA (ou imaginaria). Tira TUDO. FICA DE CÓCORAS perto do fogo, o corpo iluminado pela chama. Uma pessoa aparece e TE VE na luz do fogo. \"UM RITUAL?\" Ela CHEGA. \"QUE BELA FOGUEIRA.\" Ela OLHA teu corpo iluminado. COLOCA a mão no teu ombro. \"POSSO PARTICIPAR?\" Tu cede. Ela SENTA do outro lado do fogo e OLHA teu corpo nu na luz. 2 minutos de observação. Depois LEVANTA e vai. Nao goza, seu puto do fogo.",
|
||||||
|
"🔥 EXPOSTO PEGO CHUVA — Vai pra lugar DESERTO NA CHUVA. Tira TUDO e FICA EM PÉ na chuva, corpo nu molhado. Uma PESSOA de GUARDA-CHUVA aparece e TE VE. \"QUE COISA LINDA.\" Ela CHEGA e COLOCA o guarda-chuva sobre ti. \"NAO QUERO QUE SE MOLHE DEMAIS.\" Ela OLHA teu corpo molhado. PASSA a mão na tua barriga molhada. \"QUE PELE.\" Depois VAI embora com o guarda-chuva. Tu fica na chuva nu, desprotegido. Nao goza, seu puto molhado.",
|
||||||
|
"🔥 EXPOSTO PEGO SOL — Vai pra lugar DESERTO DE SOL FORTE. Tira TUDO. DEITA de BRUÇOS no chão, tomando sol pelado. Uma PESSOA aparece e TE VE. \"TOMANDO SOL?\" Ela CHEGA. \"PASSA PROTETOR.\" Ela PEGA protetor solar (ou imaginario) e PASSA na tuas costas nuas. Nas NÁDEGAS. No PAU. Cada passada de creme te excita. 2 minutos de massagem com protetor. Ela TERMINA, da UM TAPA na tua bunda e VAI embora. \"NAO QUEIMA, PUTA.\" Nao goza, seu puto bronzeado.",
|
||||||
|
"🔥 EXPOSTO PEGO PISCINA — Vai ate uma PISCINA NATURAL ou LAGOA DESERTA. Tira TUDO e ENTRA na agua pelado. Uma PESSOA aparece na beira e TE VE dentro da agua. \"AGUA BOA?\" Ela TIRA a roupa dela e ENTRA tambem PELADA na agua. NA AGUA, ELA ENCOSTA em ti. COLOCA a mão no teu pau dentro da agua. A agua fria, a mao quente. \"QUE BOM.\" Ela MANDA: \"SAI DA AGUA E MOSTRA COMO CÊ SECA.\" Tu sai da agua e fica em pé pingando na beira. Ela OLHA teu corpo molhado. Depois VOLTA pra agua. Nao goza, sua puta aquatico.",
|
||||||
|
"🔥 EXPOSTO PEGO CAMINHAO CARROCERIA — Vai de BIKE PELADO. Um CAMINHAO com CARROCERIA ABERTA passa e o MOTORISTA TE VE. \"SOBE AÍ, DOIDAO.\" Tu SOBE NA CARROCERIA pelado com a bike. O caminhao ANDA 3 minutos com tu em PÉ na carroceria, NU, o vento batendo. As PESSOAS nos outros carros TE VEEM e ACENAM. 3 minutos de desfile de puta. O caminhao PARA e tu DESCE. \"BOA VIAGEM!\" vai embora. Nao goza, seu puto desfilando.",
|
||||||
|
"🔥 EXPOSTO PEGO ESTRADA POEIRA — Vai pra ESTRADA DE TERRA deserto. Tira TUDO e DEITA NA POEIRA ou BARRO, rolando pelado no chão. O corpo fica SUJO de terra. Uma PESSOA aparece e TE VE sujo de barro. \"QUE ESCULTURA.\" Ela CHEGA. \"TA FAZENDO ARTE.\" Ela OLHA teu corpo sujo. PASSA a mão no barro no teu peito. \"VOU DEIXAR ASSIM.\" Ela MANDA: \"AGORA LEVANTA E MOSTRA A OBRA DE ARTE.\" Tu levanta, sujo de barro, pau duro. Ela da risada e vai. Nao goza, seu puto de barro.",
|
||||||
|
"🔥 EXPOSTO PEGO MONTE — Vai ate um MORRO ou MONTE deserto. SOBE PELADO com a bike na mão (ou a pé). No TOPO, fica EM PÉ olhando a paisagem NU. Uma PESSOA aparece no topo e TE VE. \"QUE VISTA.\" Ela CHEGA e OLHA a paisagem também. DEPOIS OLHA teu corpo nu contra o horizonte. \"VOCÊ É PARTE DA PAISAGEM.\" Ela MANDA: \"FICA AI, IMPRESSIONANTE.\" Tu fica imóvel 2 minutos no topo do monte nu, contra o ceu. Ela VAI embora. Nao goza, seu puto montanhista.",
|
||||||
|
"🔥 EXPOSTO PEGO LAGOA — Vai ate uma LAGOA ou AÇUDE deserto. Tira TUDO. ENTRA na agua, nada um pouco pelado. NA BEIRA, uma PESSOA TA PESCANDO e TE VE nadando. \"PEGA PEIXE?\" Ela OLHA. \"PEGO NADA.\" Ela MANDA: \"SAI DA AGUA E MOSTRA O QUE PEGOU.\" Tu sai da agua, o corpo pingando, o pau duro. Ela OLHA. \"PEGOU UM BONITO.\" Ela da risada e volta a PESCAR. Nao goza, seu puto pescado.",
|
||||||
|
"🔥 EXPOSTO PEGO VENTO — Vai pra um LUGAR ABERTO e VENTOSO. Tira TUDO e FICA EM PÉ com os BRAÇOS ABERTOS, o vento batendo no corpo nu. Uma PESSOA aparece e TE VE de braços abertos, como se quisesse voar. \"VOANDO?\" Ela CHEGA. \"O VENTO TE LEVA.\" Ela ENCOSTA atras de ti e COLOCA as mãos nos teus ombros. FECHA os olhos com tu, sentindo o vento nos dois corpos. 1 minuto juntos. Depois ELA VAI. Nao goza, seu puto do vento.",
|
||||||
|
"🔥 EXPOSTO PEGO AREA — Vai ate uma AREA ou TERRENO BALDIO. Tira TUDO e FICA DE QUATRO no chão, cu pro mundo. Uma PESSOA aparece e TE VE. \"QUE CENA.\" Ela SE AGACHA atras de ti. \"POSSO?\" Ela COLOCA a mão na tua bunda, ABRE o cu com os dedos, e OLHA DENTRO. 30 segundos de inspeção intima. \"LINDO.\" Ela LEVANTA, PASSA a mão na tua cabeca e VAI. Nao goza, seu puto inspecionado.",
|
||||||
|
"🔥 EXPOSTO PEGO MATEIRO — Vai pra uma REGIÃO de MATO FECHADO e trilha. Tira TUDO. CAMINHA PELADO na trilha. Um MATEIRO ou CAÇADOR aparece e TE VE. \"QUE BICHO É ESSE?\" Ele ri. \"BICHO PELADO.\" Ele CHEGA PERTO. \"NAO É BICHO, É GENTE.\" Ele OLHA teu corpo. \"CÊ TA PERDIDO?\" Tu acena que nao. Ele MANDA: \"ENTAO ANDA, QUE EU VOU ATRAZ.\" Tu caminha pelado na trilha com ele te SEGUINDO por 2 minutos, olhando tuas nadegas. Depois ele DESVIA e some. Nao goza, seu puto da mata.",
|
||||||
|
"🔥 EXPOSTO PEGO FINAL 2 — Vai pra um LUGAR ABERTO e VISIVEL, de preferencia onde PASSAM PESSOAS. Tira TUDO. FICA em PÉ de FRENTE pro movimento, BRAÇOS CRUZADOS, PAU DURO, olhando fixo pra quem passa. 3 MINUTOS. Se ALGUÉM TE OLHAR, tu MANTÉM O CONTATO VISUAL SEM DESVIAR, mostrando que não tem vergonha. Quem passa OLHA e VAI. Tu sozinho, nu, firme. Depois veste e volta pra casa. Nao goza, sua puta final.",
|
||||||
|
"🔥 PEGO MAMA PAU — Vai de BIKE PELADO pra lugar desertado. Uma MULHER aparece e TE VE. \"QUE ISSO, UM PELADO NA BIKE?\" Ela CHEGA PERTO e OLHA teu pau DURO. \"ISSO MERECE UM TRATAMENTO.\" Ela SE AGACHA, PEGA teu pau na MÃO e LEVA À BOCA. ELA CHUPA teu pau por 2 MINUTOS — a língua quente, a boca molhada, o olhar fixo em ti. A cabeça vai e vem. Depois levanta, ENXUGA a boca e MANDA: \"AGORA VAI PRA CASA PENSAR EM MIM.\" Tu monta e volta louco. Nao goza, sua puta chupado pela estranha.",
|
||||||
|
"🔥 PEGO CHUPA CU — Vai pra lugar DESERTO, tira TUDO. Fica de QUATRO, cu exposto. Um HOMEM aparece e TE VE. \"QUE CUZINHO GOSTOSO.\" Ele CHEGA e SE AGACHA atras. Ele ABRE teu cu com as mãos e COLOCA A BOCA. A LINGUA entra no teu cu. 2 MINUTOS de lambedera de cu. A língua quente Macia, abrindo teu cu. Tu geme baixo. Depois LEVANTA e MANDA: \"AGORA VAI PRA CASA COM O CU LAMBIDO.\" Tu veste e vai. Nao goza, seu puto lambido.",
|
||||||
|
"🔥 PEGO BEBE GOZO — Vai de BIKE PELADO. Um HOMEM aparece e TE ABORDA. \"QUER VER UM NEGÓCIO?\" Ele ABRE a CALÇA e COMEÇA a se MASTURBAR na tua frente. O pau dele duro. Ele MASTURBA RÁPIDO até GOZAR NA TUA CARA. A porra quente espirra nos teus olhos, na boca. Ele MANDA: \"ABRE A BOCA.\" Tu abre. Ele COLOCA o pau na tua boca e ESCORRE o resto do gozo na tua língua. \"ENGole TUDO.\" Tu engole o gozo dele. Ele ARRUMA a calça e VAI embora. Nao goza, seu puto bebendo porra.",
|
||||||
|
"🔥 PEGO COME CU — Vai BIQUE PELADO pra lugar deserto. Uma MULHER aparece e TE VE de quatro. \"QUE CENA GOSTOSA.\" Ela ABRE a CALÇA e ELA TEM UM PAU DURO (ou cintaralho). Ela COLOCA CAMISINHA e se APROXIMA de ti de quatro. \"ABRE ESSE CU PRA MAMÃE.\" Tu abre o cu com as mãos. Ela ENFIA O PAU NO TEU CU — devagar, sentindo cada milímetro. Ela TE COME por 3 MINUTOS — vai e vem, mão na tua cintura, gemendo. Depois GOZA DENTRO (com camisinha) e tira. \"GUARDA ESSA LEITADA.\" Vai embora. Nao goza, seu puto comido pela mulher.",
|
||||||
|
"🔥 PEGO COME BUCETA — Vai de BIKE PELADO. Uma MULHER aparece e TE VE pelado. \"QUE HOMEM LINDO.\" Ela TIRA a CALÇA dela e se AGACHA. ELA TA PELADA EMBAIXO. \"VEM COMER ESSA BUCETA.\" Ela te PUXA e tu SOBE nela. Tu enfia O PAU na BUCETA dela — quente, molhada. 5 MINUTOS comendo a estranha. Ela geme, tu metendo. No final ela GOZA e te EMPURRA. \"BOA, PUTA. AGORA VAI.\" Tu veste e vai. Nao goza, seu puto comedor de buceta.",
|
||||||
|
"🔥 PEGO SUGANDO — Vai pra lugar DESERTO, tira TUDO. Uma MULHER aparece e TE VE. \"QUE PAU GOSTOSO.\" Ela PEGA teu pau e COLOCA na BOCA DELE — ela CHUPA teu pau com vontade, a cabeça subindo e descendo, babando tudo. 3 MINUTOS de BOQUETE. Ela olha pra ti enquanto chupa. Depois TIRA e MANDA: \"AGORA ME LAMBE O CU.\" Ela vira e se curva. Tu LAMBE o cu dela com a língua inteira, lambendo tudo. 2 minutos de cu lambido. Ela geme, LEVANTA e VAI. Nao goza, seu puto lingual.",
|
||||||
|
"🔥 PEGO CASA ESTILO — Vai de BIKE PELADO. Um CASAL (HOMEM E MULHER) TE VE. A MULHER MANDA: \"QUE GATO PELADO.\" Ela OLHA pro homem: \"VAI COMER ELE.\" O HOMEM VEM, COLOCA a mão na tua nuca. \"ABRE A BOCA.\" Ele COLOCA O PAU na tua boca. Tu CHUPA o pau dele. 2 MINUTOS de boquete. Depois a MULHER MANDA: \"AGORA ABRE O CU PRO MEU MARIDO TE COMER.\" Tu abre o cu com as mãos e o HOMEM TE COME — vai e vem, gemendo, 3 minutos. GOZA DENTRO (com camisinha). A MULHER OLHA e MANDA: \"AGORA LAMBE O PAU DELE DEPOIS DE GOZAR.\" Tu lambe o pau sujo do homem. Depois o casal vai embora. Nao goza, seu puto do casal.",
|
||||||
|
"🔥 PEGO CASA MULHER MANDA — Vai de BIKE PELADO. Um CASAL aparece. A MULHER MANDA: \"MEU MARIDO VAI TE COMER E VOCE VAI OBEDECER.\" Ela SEGURA o braço enquanto o HOMEM ABRE a calça. \"ABRE A BOCA E CHUPA O PAU DELE.\" Tu CHUPA o pau do homem 2 minutos. A mulher OLHA. Depois MANDA: \"AGORA DEITA DE QUATRO QUE ELE VAI TE COMER.\" Tu deita de quatro. O HOMEM enfia o pau no teu cu. 3 minutos. A mulher: \"GOZA DENTRO DELE.\" O HOMEM GOZA. Depois a mulher MANDA: \"LAMBE O CU DO MEU MARIDO DEPOIS DELE GOZAR.\" Tu lambe. O CASAL vai embora. Nao goza, seu puto comandado pela mulher.",
|
||||||
|
"🔥 PEGO BEBE GOZO 2 — Vai pra lugar DESERTO, tira TUDO. Um HOMEM aparece e TE VE. \"QUER PROVAR?\" Ele MASTURBA na tua frente. \"ABRE A BOCA.\" Ele GOZA NA TUA BOCA. A porra quente enche tua boca. \"ENGole.\" Tu engole. \"MAIS?\" Ele MASTURBA de novo até gozar de novo. A segunda gozada. MAIS GROSSA. \"ENGole TUDO.\" Tu engole de novo. Ele ARRUMA a calça e VAI. Nao goza, seu puto de duas gozadas.",
|
||||||
|
"🔥 PEGO CHUPA PAU CASAL — Vai de BIKE PELADO. Um CASAL DE HOMENS TE VE. UM DELES MANDA: \"QUE PELADO GOSTOSO, VEM CA.\" Tu vai. Ele COLOCA O PAU na tua boca. \"CHUPA.\" Tu chupa 2 minutos. O OUTRO HOMEM MANDA: \"AGORA CHUPA O MEU.\" Tu troca de pau na boca — chupa o outro 2 minutos. Os dois OLHAM. UM MANDA: \"VIRA E MOSTRA O CU.\" Tu vira. O OUTRO enfia o pau no teu cu. O PRIMEIRO COLOCA O PAU na tua boca ao mesmo tempo. Tu de quatro, com pau na boca e no cu, 3 MINUTOS. OS DOIS GOZAM em ti. Tu limpa e veste. Nao goza, seu puto de dois.",
|
||||||
|
"🔥 PEGO LINGUA CU CASAL — Vai pra lugar DESERTO, tira TUDO. Um CASAL aparece. A MULHER MANDA: \"LAMBE O CU DO MEU MARIDO.\" Ela segura enquanto tu LAMBE o cu do homem. 2 minutos de língua no cu do cara. Depois o HOMEM MANDA: \"AGORA LAMBE O CU DA MINHA MULHER.\" Tu lambe o cu da mulher. A língua no cu feminino. Mais 2 minutos. O CASAL se OLHA e MANDA: \"AGORA DEITA DE QUATRO PRO MEU MARIDO TE COMER ENQUANTO EU VEJO.\" Tu deita, o homem te come, a mulher assiste. Nao goza, seu puto lingual de casal.",
|
||||||
|
"🔥 PEGO ENFIA DEDO — Vai de BIKE PELADO. Uma MULHER aparece e TE VE. \"QUE PAU DURO.\" Ela COLOCA a mão no teu pau e alisa. \"MAS QUERO OUTRA COISA.\" Ela TE VIRA de costas. \"ABRE ESSE CU.\" Tu abre. Ela ENFIA DOIS DEDOS no teu cu. Ela MEXE os dedos dentro de ti — um vai e vem lento. 2 MINUTOS de dedos no cu. Ela TIRA e LAMBE os dedos. \"BOM.\" Vai embora. Nao goza, seu puto dedado pela estranha.",
|
||||||
|
"🔥 PEGO CU CAVALGADA — Vai pra lugar DESERTO, tira TUDO. Uma MULHER de CAVALO aparece e TE VE. Ela DESCE do cavalo. \"QUE VISTO.\" Ela COLOCA a mão na tua bunda. \"CÊ MERECE SER COMIDO.\" Ela TE DEITA de BRUÇOS no chão, SOBE em cima de ti, e COLOCA O PAU DELA (cintaralho) no teu cu. ELA MONTADA em ti, cavalgando teu cu. 3 MINUTOS de cavalgada. ELA GOZA em cima de ti e cai pro lado. Monta no cavalo e VAI. Nao goza, seu puto montado.",
|
||||||
|
"🔥 PEGO BOCA ABERTA — Vai de BIKE PELADO. Um HOMEM aparece e TE PARA. \"ABRE A BOCA.\" Tu abre. Ele COLOCA O PAU na tua boca e ENFIA até o FUNDO. A garganta dele entrando. Tu quase engasga. Ele SEGURA tua cabeça e METe na tua boca — 2 MINUTOS de gag. Depois GOZA na tua boca e MANDA: \"ENGole.\" Tu engole. Ele SAI. Nao goza, seu puto engasgado.",
|
||||||
|
"🔥 PEGO CADEIA — Vai pra lugar DESERTO, tira TUDO. Um HOMEM aparece e TE DOMINA. \"MÃOS NAS COSTAS.\" Ele te AMARRA as mãos. \"VAI CHUPAR MEU PAU.\" Ele COLOCA O PAU na tua boca enquanto tu de mãos presas. 2 MINUTOS de boquete amarrado. Depois TE VIRA. \"ABRE O CU.\" Tu abre e ele TE COME — vai e vem, 3 minutos. GOZA DENTRO. TE SOLTA. \"PODE IR.\" Tu veste e sai. Nao goza, seu puto amarrado e comido.",
|
||||||
|
"🔥 PEGO DOIS HOMENS — Vai de BIKE PELADO. DOIS HOMENS aparecem e TE RODEIAM. UM MANDA: \"CHUPA O PAU DO MEU AMIGO.\" Tu chupa o pau do primeiro. O OUTRO MANDA: \"ABRE O CU PRO MEU.\" Tu deita de quatro. O segundo enfia no teu cu. Tu com pau na boca e no cu ao mesmo tempo. 4 MINUTOS de dupla penetração. O PRIMEIRO GOZA na tua boca. O SEGUNDO GOZA no teu cu. Tu engole e limpa. \"BOA, PUTA.\" VAO EMBORA. Nao goza, seu puto de dois caras.",
|
||||||
|
"🔥 PEGO MULHER COMENDO — Vai pra lugar DESERTO, tira TUDO. Uma MULHER aparece e TE VE. \"GOSTEI.\" Ela TIRA a calça, SENTA no chão e ABRE as pernas. \"VEM COMER MINHA BUCETA.\" Tu SOBE nela e enfia o PAU na buceta dela. 5 MINUTOS de metelança. Ela geme, aperta, morde teu ombro. \"GOZA DENTRO DE MIM.\" Tu GOZA dentro da buceta dela (com ou sem camisinha conforme combinado). Ela se ABANA e MANDA: \"BOA. AGORA VAI.\" Tu veste e vai. Nao goza de novo — já gozou. Pode gozar. Seu puto comedor.",
|
||||||
|
"🔥 PEGO BUCETA LAMBE — Vai de BIKE PELADO. Uma MULHER aparece e TE VE. \"VEM AQUI, GOSTOSO.\" Ela se SENTA numa pedra, ABRE as pernas e COLOCA teu ROSTO na BUCETA dela. \"LAMBE.\" Tu LAMBE a buceta dela com a língua inteira — 3 MINUTOS de linguada. O gosto da buceta na tua boca. Ela geme, aperta tua cabeça contra ela. Depois GOZA na tua boca — o orgasmo dela escorrendo. \"ENGole.\" Tu engole. Ela LEVANTA e vai. Nao goza, seu puto lambedor de buceta.",
|
||||||
|
"🔥 PEGO PAU NA BOCA E CU — Vai de BIKE PELADO. Uma MULHER e um HOMEM aparecem. A MULHER MANDA: \"CHUPA O PAU DELE.\" Tu chupa o pau do homem. O HOMEM MANDA: \"ABRE O CU PRA ELA.\" Tu abre o cu. A MULHER ENFIA O PAU (cintaralho) no teu cu enquanto tu chupa o pau do homem. 4 MINUTOS de dupla penetração: boca nele, cu nela. A MULHER GOZA no teu cu, o HOMEM GOZA na tua boca. Tu engole e limpa. O CASAL vai embora. Nao goza, seu puto dos dois.",
|
||||||
|
"🔥 PEGO BEBE LEITE PUTO — Vai de BIKE PELADO. Um HOMEM aparece e TE ABORDA. \"VOCÊ VAI BEBER MEU LEITE.\" Ele MASTURBA na tua frente, olho no olho. Vai devagar, depois rápido. GOZA na tua mão (ou na sua) e COLOCA a porra na tua BOCA. \"CHUPA QUE NEM MAMADEIRA.\" Tu chupa os dedos dele com o gozo. \"BOM?\" Tu acena. \"MAIS?\" Ele se masturba de novo ATÉ GOZAR de novo. COLOCA na tua boca de novo. Tu engole a segunda porra. \"VAI PRA CASA AGORA.\" Tu monta e vai. Nao goza, seu puto mamadeira.",
|
||||||
|
"🔥 PEGO COMIDA POR CASAL — Vai pra lugar semideserto, tira TUDO. Um CASAL TE VE. A MULHER: \"QUE HOMEM LINDO.\" O HOMEM: \"VAI SERVIR A GENTE.\" A MULHER MANDA: \"DEITA DE QUATRO. MEU MARIDO VAI TE COMER ENQUANTO EU VEJO.\" Tu deita de quatro. O HOMEM TE COME — vai e vem, 3 minutos. Depois a MULHER MANDA: \"AGORA VEM CHUPAR MEU CU ENQUANTO ELE TE COME.\" Tu lambe o cu da mulher enquanto o homem te come. Ciclo completo: cu lambido, cu comido. O homem GOZA no teu cu. A mulher GOZA na tua boca. Nao goza, seu puto servindo o casal.",
|
||||||
|
"🔥 PEGO SEXO TOTAL — Vai de BIKE PELADO. Uma MULHER aparece e TE LEVA pra um local escondido. \"VOU TE USAR INTEIRO.\" Ela TE DEITA, COLOCA teu pau na BOCA dela e CHUPA 2 MINUTOS. Depois SOBE em ti e COLOCA teu pau na BUCETA dela. 3 MINUTOS cavalgando. Depois VIRA e COLOCA o CU dela na tua cara. \"LAMBE MEU CU ENQUANTO EU MONTO EM TI.\" Tu lambe o cu dela enquanto ela cavalga teu pau. 2 MINUTOS. Depois DESCE, MANDA: \"ABRE A BOCA.\" e GOZA na tua boca. \"BOA, PUTA.\" Tu tudo usado. Nao goza, seu puto usado.",
|
||||||
|
"🔥 PEGO DOMINADO POR CASAL — Vai pra lugar DESERTO, tira TUDO. Um CASAL TE ENCONTRA. A MULHER: \"ACHAMOS UM BRINQUEDO.\" O HOMEM: \"VAI OBEDECER.\" A MULHER MANDA: \"CHUPA O PAU DELE.\" Tu chupa o homem. Depois o HOMEM MANDA: \"LAMBE O CU DELA.\" Tu lambe o cu da mulher. DEPOIS A MULHER: \"ABRE O CU PRO MEU MARIDO TE COMER ENQUANTO EU CHUPO TEU PAU.\" Tu deita de quatro, o homem te come, e a mulher chupa teu pau ao mesmo tempo. 5 MINUTOS de sexo total. OS DOIS GOZAM em ti. Nao goza, seu puto brinquedo do casal.",
|
||||||
|
"🔥 PEGO SIRIRICA — Vai de BIKE PELADO. Uma MULHER aparece e TE VE. \"VOU TE DAR UM PRESENTE.\" Ela TIRA a calcinha, ABRE as pernas e SE MASTURBA na tua frente. Tu vendo a buceta dela, os dedos entrando. ELA GOZA na mão dela e COLOCA a mão molhada na tua boca. \"CHUPA MEU GOZO.\" Tu chupa os dedos molhados de buceta. O gosto dela. \"BOM?\" Ela monta na bike dela e vai. Nao goza, seu puto lambedor de gozo feminino.",
|
||||||
|
"🔥 PEGO TROCA DE CASAL — Vai pra lugar DESERTO, tira TUDO. DUAS MULHERES e UM HOMEM aparecem. UMA MULHER MANDA: \"VOCÊ VAI SERVIR A GENTE.\" Ela COLOCA o pau do homem na tua boca. A OUTRA MULHER MANDA: \"ABRE O CU PRO MEU MARIDO.\" O homem te come enquanto tu chupa o pau imaginario (ou so fazendo). Depois UMA MULHER SENTA na tua cara: \"LAMBE MINHA BUCETA ENQUANTO ELE TE COME.\" Tu lambe a buceta enquanto o homem te come. A OUTRA COLOCA o peito na tua mão. Depois TUDO GOZA. Nao goza, seu puto servindo o grupo.",
|
||||||
|
"🔥 PEGO AMIGA — Vai de BIKE PELADO. UMA AMIGA aparece e TE VE. \"CARALHO, É VOCÊ?\" Ela da risada, mas OLHA teu corpo e PARECE INTERESSADA. Ela CHEGA. \"DEIXA EU VER.\" Ela COLOCA a mão no teu pau. \"NUNCA VI O TEU.\" Ela ALISA a cabecinha. Depois SE AGACHA e COLOCA NA BOCA. Ela CHUPA teu pau 2 MINUTOS — amiga chupando amigo. Depois LEVANTA. \"NINGUEM PRECISA SABER.\" Ela vai embora. Tu monta na bike e vai. Nao goza, seu puto chupado pela amiga.",
|
||||||
|
"🔥 PEGO SEXO AMIGA — Vai de BIKE PELADO e ENCONTRA UMA AMIGA no lugar deserto. Ela TE VE e PERGUNTA: \"TA PELADO POR QUE?\" Tu explica. Ela OLHA e PERGUNTA: \"QUER TRANZAR?\" Tu acena. Ela TIRA a calça e SENTA na grama. \"VEM.\" Tu SOBE nela. Enfia na BUCETA. 5 minutos de sexo com a amiga. Ela geme, tu mete. Depois ELA GOZA e PERGUNTA: \"QUER GOZAR ONDE?\" Tu GOZA na barriga dela. Ela LIMPA e VAI embora rindo. Amiga com direito. Pode gozar, seu puto.",
|
||||||
|
"🔥 PEGO AMIGO — Vai de BIKE PELADO. Um AMIGO aparece e TE VE. \"CARALHO, TU TA PELADO.\" Ele OLHA e PERCEBE teu pau duro. \"ISSO É CONVITE?\" Tu fala que sim. Ele ABRE a CALÇA e COLOCA O PAU na tua boca. \"CHUPA.\" Tu chupa o pau do amigo 2 MINUTOS. Depois VIRA: \"ABRE O CU.\" Tu abre e ele TE COME 3 MINUTOS. GOZA no teu cu (com camisinha) e MANDA: \"ISSO FICA ENTRE NÓS.\" Vai embora. Nao goza, seu puto comido pelo amigo.",
|
||||||
|
"🔥 PEGO CUNHADA — Vai de BIKE PELADO. A CUNHADA (ou amiga da familia) TE VE. \"NOSSAAAA.\" Ela OLHA e PERGUNTA: \"É ASSIM QUE ANDA?\" Ela CHEGA, PASSA a mão no teu pau e CHUPA teu pau 2 MINUTOS. Depois MANDA: \"ABRE O CU PRO DEDO.\" Ela enfia o dedo no teu cu. 2 minutos de dedada. Depois MANDA: \"LAMBE MEU CU.\" Ela vira e tu lambe o cu dela. Depois ELA VAI. \"SEU SEGREDO.\" Nao goza, seu puto da cunhada.",
|
||||||
|
"🔥 PEGO BEBE GOZO GRUPO — Vai de BIKE PELADO. TRÊS HOMENS aparecem e TE RODEIAM. UM MANDA: \"ABRE A BOCA.\" Os três MASTURBAM na tua frente, em circulo. O PRIMEIRO GOZA na tua boca. Tu ENGole. O SEGUNDO GOZA na tua boca. Tu ENGole. O TERCEIRO GOZA na tua boca. Tu ENGole TUDO. \"BOA GAROTA.\" ELES VAO EMBORA. Tu monta e vai. Nao goza, seu puto de 3 gozadas.",
|
||||||
|
"🔥 PEGO GRUPO SEXO — Vai de BIKE PELADO. DUAS MULHERES E UM HOMEM aparecem e TE VEEM. A MULHER MANDA: \"VOCE VAI SERVIR A GENTE.\" O HOMEM COLOCA o pau na tua boca. UMA MULHER ENFIA o dedo no teu cu. A OUTRA COLOCA a buceta na tua mão pra tu masturbar. 5 MINUTOS de sexo grupal. O HOMEM GOZA na tua boca. A MULHER GOZA na tua mão. A OUTRA te beija. \"VALEU, PUTA.\" Vao embora. Nao goza, seu puto servindo o grupo.",
|
||||||
|
"🔥 PEGO CADEIA 2 — Vai pra lugar deserto, tira TUDO. DOIS HOMENS aparecem e te AMARRAM numa arvore (frouxo). \"VOCE VAI SERVIR.\" Um COLOCA O PAU na tua boca. O OUTRO enfia o pau no teu cu. Tu amarrado, recebendo dos dois lados. 5 MINUTOS de dupla. OS DOIS GOZAM em ti. Depois TE SOLTAM e vao. Nao goza, seu puto amarrado e servido.",
|
||||||
|
"🔥 PEGO MAMA PAU 2 — Vai de BIKE PELADO. Uma MULHER VELHA (ou SENHORA) aparece e TE VE. \"MENINO, QUE ISSO?\" Ela OLHA teu pau. \"QUE COISA LINDA.\" Ela SE AGACHA (com dificuldade) e COLOCA NA BOCA. Ela CHUPA teu pau DEVAGAR, com carinho de avó puta. 2 MINUTOS de boquete de senhora. Depois LEVANTA e MANDA: \"GUARDA ESSA JOIA.\" Vai embora. Nao goza, seu puto chupado pela idosa.",
|
||||||
|
"🔥 PEGO MAMA BUCETA — Vai de BIKE PELADO. Um HOMEM aparece e TE VE. \"VEM AQUI.\" Ele COLOCA A BOCA no teu pau e CHUPA. 2 MINUTOS de boquete masculino. Depois LEVANTA, VIRA e MANDA: \"LAMBE MEU CU.\" Tu lambe o cu do homem 2 minutos. Depois ELE VIRA e MANDA: \"ABRE A BOCA.\" Ele GOZA na tua boca. Tu ENGole. Nao goza, seu puto de lingua e boca.",
|
||||||
|
"🔥 PEGO AMIGA 2 — Vai de BIKE PELADO. Uma AMIGA te ENCONTRA no lugar deserto. \"QUE ISSO?\" Ela OLHA teu pau e PERGUNTA: \"POSSO?\" Ela COLOCA na boca e CHUPA 2 MINUTOS. Depois MANDA: \"ME COME.\" Tu Sobe nela e enfia na buceta. 5 MINUTOS transando com a amiga. Ela GOZA e fala: \"GOZA DENTRO DE MIM (com camisinha).\" Tu GOZA. Ela se LEVANTA. \"FOI BOM.\" Vai embora. Pode gozar, seu puto.",
|
||||||
|
"🔥 PEGO GRUPO MISTO — Vai de BIKE PELADO. DUAS MULHERES E DOIS HOMENS aparecem e TE RODEIAM. \"VAMOS BRINCAR.\" UMA MULHER CHUPA teu pau. O OUTRO HOMEM COLOCA o pau na tua boca. A OUTRA MULHER ENFIA dedos no teu cu. O SEGUNDO HOMEM se masturba te olhando. 5 MINUTOS de sexo grupal intenso. TODOS GOZAM em ti. Tu sujo de porra, gozo, baba. Depois VAO embora. Nao goza, seu puto do grupo todo.",
|
||||||
|
"🔥 PEGO VELHO — Vai pra lugar DESERTO, tira TUDO. Um HOMEM IDOSO aparece e TE VE. \"QUE JOVEM BONITO.\" Ele SE APROXIMA. \"ME AJUDA AÍ.\" Ele ABRE a calça com dificuldade. O pau dele MEIO DURO. \"COLOCA NA BOCA.\" Tu COLOCA na boca e CHUPA devagar. 2 MINUTOS de boquete no idoso. Ele GOZA na tua boca. \"OBRIGADO, FILHO.\" Ele vai embora. Nao goza, seu puto do idoso.",
|
||||||
|
"🔥 PEGO CADEIA MULHER — Vai de BIKE PELADO. Uma MULHER aparece e TE DOMINA. \"MÃOS NAS COSTAS.\" Ela te AMARRA com uma corda. \"ABRE A BOCA.\" Ela COLOCA O CINTARALHO (ou pau imaginario) na tua boca. \"CHUPA.\" Tu chupa 2 minutos. Depois TE VIRA: \"ABRE O CU.\" Ela ENFIA o cintaralho no teu cu. 3 MINUTOS de mulher te comendo. Ela GOZA, TE SOLTA e VAI. Nao goza, seu puto amarrado pela mulher.",
|
||||||
|
"🔥 PEGO CASAL MULHER MANDA 2 — Vai de BIKE PELADO. Um CASAL TE VE. A MULHER MANDA PRO HOMEM: \"VAI CHUPAR O PAU DELE.\" O HOMEM VEM e CHUPA teu pau 2 MINUTOS. A MULHER OLHA. Depois MANDA PRA TI: \"AGORA LAMBE O CU DO MEU MARIDO.\" Tu lambe o cu do homem enquanto a mulher assiste. 2 MINUTOS. Depois A MULHER MANDA: \"AGORA VAI COMER MINHA BUCETA ENQUANTO ELE TE COME.\" Tu deita de quatro, o homem te come, e tu mete na buceta da mulher. 3 MINUTOS de sexo triangular. Todos GOZAM. Nao goza, seu puto da triangulação.",
|
||||||
|
"🔥 PEGO BEBE LEITE MAMA — Vai de BIKE PELADO. Uma MULHER GRÁVIDA ou AMAMENTANDO aparece e TE VE. \"QUE BEBÊ GULOSO.\" Ela APERTA o próprio peito e ESPIRRA LEITE no teu rosto. \"ABRE A BOCA.\" Ela COLOCA o peito na tua boca e tu MAMA leite materno. 2 MINUTOS mamando peito. Depois ela LIBERA e MANDA: \"AGORA VAI PRA CASA, BEBÊ.\" Vai embora. Nao goza, seu puto mamando.",
|
||||||
|
"🔥 PEGO LAMBE TUDO — Vai de BIKE PELADO. Uma MULHER aparece e TE VE. ELA TIRA TUDO e FICA PELADA na tua frente. \"LAMBE MEU CORPO INTEIRO.\" Tu LAMBE ela do pescoço até a buceta. 3 MINUTOS lambendo cada centímetro. Depois ELA VIRA e MANDA: \"LAMBE MEU CU.\" Tu lambe o cu dela com a lingua. Ela GOZA na tua boca. Vai embora. Nao goza, seu puto lambedor.",
|
||||||
|
"🔥 PEGO CHUPA PAU MULHER — Vai de BIKE PELADO. Uma MULHER aparece e TE ABORDA. ELA ABRE a CALÇA e ELA TEM UM PAU de verdade (ou cintaralho). \"ABRE A BOCA.\" Ela COLOCA na tua boca e tu CHUPA o pau dela. 3 MINUTOS de boquete numa mulher de pau. Ela GOZA na tua boca. Tu ENGole. \"BOA, PUTA.\" Vai embora. Nao goza, seu puto chupando pau de mulher.",
|
||||||
|
"🔥 PEGO CASAL AMIGOS — Vai de BIKE PELADO e ENCONTRA UM CASAL AMIGO. ELES TE VEEM e, em vez de surpresa, TOPAM A BRINCADEIRA. A MULHER: \"VAMOS BRINCAR?\" O HOMEM: \"CLARO.\" Eles TIRAM a roupa. A MULHER CHUPA teu pau. O HOMEM COLOCA o pau na tua boca. 4 MINUTOS de troca. Depois A MULHER MANDA: \"AGORA VEM COMER MINHA BUCETA ENQUANTO ELE TE COME.\" Tu na buceta dela, ele no teu cu. 3 MINUTOS. GOZAM todos. Amigos putos. Pode gozar, seu puto.",
|
||||||
|
"🔥 PEGO MULHER CHUPA CU — Vai de BIKE PELADO. Uma MULHER aparece e TE VE. ELA SE AGACHA e PERGUNTA: \"POSSO?\" Ela ABRE tua bunda e COLOCA A BOCA no teu cu. A língua entrando, lambendo tudo. 3 MINUTOS de cu lambido por mulher. Tu geme. Ela PARA e MANDA: \"AGORA LAMBE O MEU.\" Ela vira e tu lambe o cu dela. 2 MINUTOS. Depois ELA VAI. Nao goza, seu puto de cu lambido e lambedor.",
|
||||||
|
"🔥 PEGO TUDO EM UM — Vai pra lugar semideserto, tira TUDO. DOIS HOMENS E DUAS MULHERES aparecem. UMA MULHER MANDA: \"VOCE VAI SERVIR A GENTE INTEIRO.\" O PRIMEIRO HOMEM COLOCA o pau na tua boca. A PRIMEIRA MULHER ENFIA a língua no teu cu. O SEGUNDO HOMEM COLOCA o pau no teu cu (depois que ela lambe). A SEGUNDA MULHER COLOCA a buceta na tua mão. Tu servindo 4 pessoas ao mesmo tempo. 5 MINUTOS de sexo em grupo. TODOS GOZAM. Tu sujo de leite e baba. Depois VAO embora. Nao goza, seu puto de 4.",
|
||||||
|
"🔥 PEGO FINAL SEXO — Depois de uma pedalada pelada, PARA num lugar e tira TUDO. Um HOMEM ou MULHER aparece e TE ABORDA. \"QUER TRANZAR?\" Tu aceita. ELA/ELE TE LEVA pra um local escondido e TRANZA com tu — buceta, cu, boca, TUDO. 10 MINUTOS de sexo completo. GOZA junto com a pessoa. Depois se DESPEDE e cada um vai pro seu lado. Pode gozar, seu puto final.",
|
||||||
|
"🔥 PEGO GRUPO DEDO CU — Vai de BIKE PELADO pra lugar deserto. Três PESSOAS aparecem (dois homens, uma mulher). UM HOMEM MANDA: \"DEITA DE QUATRO.\" Tu obedece. A MULHER ENFIA DOIS DEDOS no teu cu — dedos entrando e saindo devagar, abrindo. 2 minutos. O OUTRO HOMEM COLOCA O PAU na tua boca enquanto a mulher te deda. Tu chupando e sendo dedado ao mesmo tempo. O PRIMEIRO HOMEM COLOCA O PAU no teu cu junto com os dedos da mulher. 3 minutos de dupla penetração com dedos. Todos GOZAM em ti e vão. Nao goza, seu puto dedado e comido.",
|
||||||
|
"🔥 PEGO CASAL DEDO — Vai de BIKE PELADO. Um CASAL aparece e TE VE de quatro numa pedra (ou no chao). A MULHER MANDA PRO HOMEM: \"VAI DEDAR ELE ENQUANTO EU VEJO.\" O HOMEM SE AGACHA e ENFIA TRÊS DEDOS no teu cu — abre bem, estica. 2 MINUTOS de dedos no cu enquanto a mulher assiste. Depois ELA MANDA PRO HOMEM: \"AGORA ENFIA O PAU ENQUANTO EU CHUPO O DELE.\" O homem enfia o pau no teu cu e a mulher CHUPA teu pau. 3 MINUTOS de sexo duplo. O HOMEM GOZA no teu cu, a MULHER GOZA na tua boca (pede pra tu chupar ela depois). Nao goza, seu puto dedado por casal.",
|
||||||
|
"🔥 PEGO DEITADO DEDO — Vai de BIKE PELADO. Uma MULHER aparece e TE VE. \"DEITA DE COSTAS E ABRE AS PERNAS.\" Tu deita e abre. Ela CHEGA e ENFIA O DEDO no teu cu, devagar, olhando nos teus olhos. O dedo entra todo. 2 MINUTOS de dedo parado sentindo o cu apertar. Depois ela MEXE o dedo dentro — vai e vem lento. \"RELXA.\" Mais 2 minutos de dedo se movendo. Depois TIRA, LAMBE o dedo e MANDA: \"AGORA VAI PRA CASA COM ESSA SENSAÇÃO.\" Nao goza, seu puto dedado deitado.",
|
||||||
|
"🔥 PEGO QUATRO DEDOS GRUPO — Vai de BIKE PELADO. DUAS MULHERES aparecem. UMA MANDA: \"DE QUATRO.\" Tu deita de quatro. AS DUAS SE AGACHAM atras de ti. UMA ENFIA DOIS DEDOS no teu cu. A OUTRA ENFIA DOIS DEDOS no teu cu — QUATRO DEDOS ao MESMO TEMPO. O cu esticado no limite. 2 MINUTOS de quatro dedos dentro. Depois ELAS ABREM os dedos em tesoura — estica mais. TIRAM devagar. \"QUE CU GOSTOSO.\" VAO embora. Nao goza, seu puto de quatro dedos.",
|
||||||
|
"🔥 PEGO MAMA CU CASAL — Vai de BIKE PELADO. Um CASAL TE VE. A MULHER MANDA: \"DEITA DE QUATRO PRO MEU MARIDO LAMBER TEU CU.\" Tu deita. O HOMEM LAMBE teu cu por 3 MINUTOS — a lingua abrindo, entrando. Depois a MULHER MANDA: \"AGORA LAMBE O CU DELE.\" Tu lambe o cu do homem. Depois ELA: \"AGORA VEM CHUPAR MINHA BUCETA ENQUANTO ELE TE COME.\" Tu chupa a buceta da mulher enquanto o homem te come. Nao goza, seu puto do casal lambedor.",
|
||||||
|
"🔥 PEGO CU ABERTO GRUPO — Vai de BIKE PELADO. TRES PESSOAS aparecem (dois homens, uma mulher). ELES MANDAM: \"DE QUATRO E ABRE O CU.\" Tu deita de quatro e abre o cu com as mãos. A MULHER ENFIA o dedo primeiro. Depois UM HOMEM ENFIA O PAU. Depois o OUTRO HOMEM COLOCA na tua boca. Os tres te usando ao mesmo tempo. 5 MINUTOS. TODOS GOZAM. Vao embora. Nao goza, seu puto arrombado pelo grupo.",
|
||||||
|
"🔥 PEGO MULHER DOMINA — Vai de BIKE PELADO. Uma MULHER aparece e TE DOMINA. \"MÃOS NA CABEÇA. AJOELHA.\" Tu ajoelha. Ela ABRE a CALÇA e tem um PAU (cintaralho ou strap). \"ABRE A BOCA.\" Ela COLOCA na tua boca. 2 MINUTOS de boquete. Depois \"DE QUATRO.\" Ela ENFIA O PAU no teu cu. 3 MINUTOS de mulher te comendo. GOZA em ti. \"BOA, PUTA.\" Vai embora. Nao goza, seu puto dominado pela mulher.",
|
||||||
|
"🔥 PEGO MAMA PAU CASAL 2 — Vai de BIKE PELADO. Um CASAL TE VE e PARA. A MULHER MANDA PRO HOMEM: \"VAI CHUPAR O PAU DELE ENQUANTO EU VEJO.\" O HOMEM CHUPA teu pau 2 MINUTOS enquanto a mulher assiste. Depois ELA MANDA: \"AGORA VEM CHUPAR MEU CU ENQUANTO ELE TE COME.\" Tu lambe o cu da mulher enquanto o homem te come. 3 MINUTOS de sexo triangular. Os dois gozam. Nao goza, seu puto do casal.",
|
||||||
|
"🔥 PEGO BEBE PORRA 3 — Vai de BIKE PELADO. TRÊS HOMENS aparecem e TE RODEIAM. \"ABRE A BOCA.\" Eles se masturbam em circulo ao teu redor. O PRIMEIRO GOZA na tua boca. Tu ENGole. O SEGUNDO GOZA na tua boca. Tu ENGole. O TERCEIRO GOZA no teu ROSTO. Tu limpa com a boca. \"BOA GAROTA DE BUCETÃO.\" Vao embora. Nao goza, seu puto de 3 porradas.",
|
||||||
|
"🔥 PEGO AMIGA DEDO — Vai de BIKE PELADO. UMA AMIGA aparece e TE VE. \"RELXA, SOU EU.\" Ela CHEGA e PERGUNTA: \"POSSO DEDAR?\" Tu acena. Ela ENFIA DOIS DEDOS no teu cu — na posição de quatro. Os dedos entram devagar, sentindo cada anel muscular. 3 MINUTOS de amiga dedando teu cu. Os dedos entram e saem, massageiam a prostata. Ela TIRA e LAMBE. \"VALEU, AMIGO.\" Vai embora. Nao goza, seu puto dedado pela amiga.",
|
||||||
|
"🔥 PEGO IRMAO — Vai de BIKE PELADO. Um IRMÃO ou PRIMO aparece e TE VE. \"CARALHO, TU TA PELADO?\" Ele OLHA e PERCEBE a situação. \"VOU APROVEITAR.\" Ele ABRE a CALÇA e MANDA: \"ABRE A BOCA.\" Tu CHUPA o pau do irmao/ primo. 3 MINUTOS de boquete. Depois \"DE QUATRO.\" Ele TE COME — vai e vem, 3 MINUTOS. GOZA fora. \"ISSO FICA ENTRE NÓS.\" Vai embora. Nao goza, seu puto da família.",
|
||||||
|
"🔥 PEGO VIZINHO SEXO — Vai de BIKE PELADO. O VIZINHO aparece e TE VE. \"DE NOVO, PUTA?\" Ele te EMPURRA pro muro. \"ABRE A BOCA.\" Ele COLOCA O PAU na tua boca. 2 MINUTOS. Depois \"VIRA.\" Ele TE COME encostado no muro. 3 MINUTOS de sexo com o vizinho. GOZA no teu cu (com camisinha). \"ATÉ AMANHA, PUTA.\" Vai embora. Nao goza, seu puto do vizinho.",
|
||||||
|
"🔥 PEGO DESCONHECIDO CARRO — Vai de BIKE PELADO. Um CARRO PARA e o MOTORISTA TE CHAMA. \"VEM CA.\" Tu vai. Ele ABRE a PORTA e MANDA: \"ENTRA.\" Tu ENTRA pelado no carro. Ele MANDA: \"CHUPA MEU PAU.\" Tu chupa o pau dele no carro. 3 MINUTOS. Depois \"ABRE O CU.\" Tu abre e ele ENFIA O DEDO. 2 MINUTOS de dedo. Depois ELE GOZA na tua boca. \"PODE SAIR.\" Tu sai e monta na bike. Nao goza, seu puto de carro.",
|
||||||
|
"🔥 PEGO MOTEL NATUREZA — Vai de BIKE PELADO pra uma área de MATO perto da estrada. DUAS PESSOAS (homem e mulher) aparecem. \"VAMOS BRINCAR?\" Eles TIRAM a roupa. A MULHER CHUPA teu pau. O HOMEM CHUPA teu cu. 3 MINUTOS. Depois A MULHER MANDA: \"VEM COMER MINHA BUCETA ENQUANTO ELE TE COME.\" Tu na buceta, ele no teu cu. 5 MINUTOS. GOZAM todos. Natureza, sexo, liberdade. Nao goza, seu puto natural.",
|
||||||
|
"🔥 PEGO CASAL TROCA — Vai de BIKE PELADO. Um CASAL TE VE e CHAMA. \"VEM BRINCAR.\" A MULHER CHUPA teu pau. O HOMEM CHUPA teu cu. 2 MINUTOS. Depois A MULHER MANDA: \"AGORA VAI COMER MEU MARIDO NO CU.\" Tu come o cu do homem. O HOMEM GEME enquanto tu mete. 3 MINUTOS. Depois O HOMEM MANDA: \"AGORA VEM CHUPAR A BUCETA DELA ENQUANTO EU TE COMO.\" Tu chupa a mulher enquanto o homem te come. Nao goza, seu puto da troca.",
|
||||||
|
"🔥 PEGO MULHER LAMBE TUDO — Vai de BIKE PELADO. Uma MULHER aparece e TE ACHA. \"QUE CORPO.\" Ela COLOCA a boca no teu PAU e CHUPA 2 MINUTOS. Depois DESCE pro teu CU e LAMBE 2 MINUTOS. Depois SOBE de VOLTA e BEIJA tua boca com a boca suja de cu e pau. \"VOCE INTEIRO.\" Depois MANDA: \"AGORA VEM COMER MINHA BUCETA.\" Tu come ela 3 minutos. ELA GOZA e VAI. Nao goza, seu puto lambido inteiro.",
|
||||||
|
"🔥 PEGO DEDO DUPLO — Vai de BIKE PELADO. DUAS MULHERES aparecem e TE VEEM. \"QUE ACHADO.\" UMA MANDA: \"DE QUATRO.\" Tu deita. AS DUAS ENFIAM DEDOS no teu cu ao MESMO TEMPO — quatro dedos invadindo. 3 MINUTOS de dedos duplos. Abrindo, esticando. Depois ELAS TIRAM e LAMEM os dedos juntas. \"BOM DEMAIS.\" Vao embora. Nao goza, seu puto de 4 dedos.",
|
||||||
|
"🔥 PEGO GRUPO TREINO — Vai de BIKE PELADO. QUATRO PESSOAS (dois casais) aparecem e TE VEEM. \"VAMOS TREINAR.\" UM HOMEM MANDA: \"AJÖELHA E ABRE A BOCA.\" Um COLOCA o pau na tua boca. UMA MULHER ENFIA o dedo no teu cu. O OUTRO HOMEM SE MASTURBA te olhando. A OUTRA MULHER COLOCA a buceta na tua mão. 5 MINUTOS de treino de puta. TODOS GOZAM. \"FORMADO, PUTA.\" Vao embora. Nao goza, seu puto treinado pelo grupo.",
|
||||||
|
"🔥 PEGO AMIGO DEDO CU — Vai de BIKE PELADO. Um AMIGO aparece e TE VE. \"ISSO É NOVO.\" Ele CHEGA e PERGUNTA: \"POSSO?\" Ele ENFIA O DEDO no teu cu — tu de quatro, ele de joelhos atras. O dedo entra todo, mexe devagar. 3 MINUTOS de amigo dedando teu cu. \"SEMPRE QUIS SABER.\" TIRA, OLHA o dedo e LAMBE. \"VALEU, AMIGO.\" Vai embora. Nao goza, seu puto dedado pelo amigo.",
|
||||||
|
"🔥 PEGO CASAL VIZINHO — Vai de BIKE PELADO. O CASAL VIZINHO aparece e TE RODEIA. \"VISITA ILUSTRE.\" A VIZINHA PASSA a mão no teu pau. O VIZINHO PASSA a mão na tua bunda. \"VAMOS TE CUIDAR.\" A VIZINHA CHUPA teu pau. O VIZINHO ENFIA O DEDO no teu cu. 3 MINUTOS de cuidados do casal. Depois O VIZINHO TE COME enquanto a VIZINHA CHUPA teu pau. 5 MINUTOS. OS DOIS GOZAM. \"VOLTA SEMPRE.\" Tu vai embora. Nao goza, seu puto dos vizinhos.",
|
||||||
|
"🔥 PEGO BEBE LEITE MAMA 2 — Vai de BIKE PELADO. Uma MULHER JOVEM aparece e TE VE. \"QUE GOSTOSO.\" Ela ABRE a blusa e mostra os PEITOS. \"MAMA.\" Tu MAMA os peitos dela — o leite ou só o gosto da pele. 2 MINUTOS de mamada. Depois ela DESCE e CHUPA teu pau. 2 MINUTOS. Depois MANDA: \"AGORA VAI PRA CASA, BEBÊ.\" Vai embora. Nao goza, seu puto mamando e chupado.",
|
||||||
|
"🔥 PEGO CADEIA MULHER 2 — Vai de BIKE PELADO. Uma MULHER aparece com UMA CORDA. \"MÃOS PRA TRÁS.\" Ela te AMARRA os pulsos. \"AGORA VAI ANDAR DE QUATRO.\" Tu anda de quatro amarrado, ela te guia pela corda. 3 MINUTOS de puta de quatro guiada. Depois ela PARA, COLOCA O CINTARALHO e TE COME de quatro, amarrado. 3 MINUTOS. GOZA. TE SOLTA. Vai embora. Nao goza, seu puto amarrado e comido pela mulher.",
|
||||||
|
"🔥 PEGO DOIS IRMAOS — Vai de BIKE PELADO. DOIS IRMÃOS (ou primos) aparecem e TE VEEM. \"OLHA O QUE ACHAMOS.\" Eles SE APROXIMAM. UM MANDA: \"ABRE A BOCA.\" Tu chupa o pau do primeiro. O OUTRO MANDA: \"ABRE O CU.\" Tu deita e o segundo te COME. 4 MINUTOS de dois irmaos te usando. O PRIMEIRO GOZA na tua boca. O SEGUNDO GOZA no teu cu. \"SECRETO.\" Vao embora. Nao goza, seu puto dos dois irmaos.",
|
||||||
|
"🔥 PEGO CASAL MULHER COMENDO — Vai de BIKE PELADO. Um CASAL TE VE. A MULHER MANDA: \"VOCE VAI COMER MEU MARIDO NO CU.\" Tu come o cu do homem. 3 MINUTOS. Depois ELA MANDA: \"AGORA ELE VAI TE COMER ENQUANTO EU CHUPO TEU PAU.\" O homem te come, a mulher chupa teu pau. 3 MINUTOS. OS DOIS GOZAM. \"OBRIGADA, PUTA.\" Vao embora. Nao goza, seu puto do casal.",
|
||||||
|
"🔥 PEGO MULHER CHUPA E SENTA — Vai de BIKE PELADO. Uma MULHER aparece e TE LEVA pra um local mais privado. \"VOU TE MIMAR.\" Ela CHUPA teu pau 3 MINUTOS — boquete molhado, olho no olho. Depois SOBE em ti e SENTA no teu pau. CAVALGA 5 MINUTOS. Gemendo, suando. GOZA em cima de ti. \"OBRIGADA, PUTA.\" Vai embora. Nao goza, seu puto cavalgado pela mulher.",
|
||||||
|
"🔥 PEGO GRUPO FILA — Vai de BIKE PELADO. TRÊS HOMENS aparecem e TE VEEM. \"FILA.\" O PRIMEIRO COLOCA o pau na tua boca. O SEGUNDO ENFIA no teu cu. O TERCEIRO COLOCA o pau na tua mão pra tu masturbar. 3 MINUTOS de fila. O PRIMEIRO GOZA na tua boca. O SEGUNDO GOZA no teu cu. O TERCEIRO GOZA na tua mão. Tu engole e limpa. \"TROCA.\" Repete com posições diferentes: outro na boca, outro no cu. Nao goza, seu puto da fila.",
|
||||||
|
"🔥 PEGO CASA BANHO — Vai de BIKE PELADO. Uma MULHER aparece e TE CONVIDA PRA TOMAR BANHO. \"VEM.\" Vocês ENTRAM num chuveiro (ou mangueira) juntos. Ela ensaboa teu corpo inteiro. O sabao escorregando. Ela LAVAt eu pau, teu cu, teu saco. Depois ELA SE AGACHA e CHUPA teu pau debaixo da água. 3 MINUTOS de boquete no banho. Depois MANDA: \"AGORA VAI PRA CASA LIMPINHO.\" Tu veste e vai. Nao goza, seu puto lavado e chupado.",
|
||||||
|
"🔥 PEGO LOIRA SAFADA — Vai de BIKE PELADO. Uma LOIRA (ou morena, qualquer) aparece e TE PARA. \"QUE HOMEM.\" Ela COLOCA a mão no teu pau e PERGUNTA: \"JÁ COMERAM VOCÊ HOJE?\" Tu nega. Ela TIRA a CALCINHA na hora e MANDA: \"VEM AQUI, SEU GOSTOSO.\" Ela te PUXA e tu ENFIA na BUCETA dela em pé, encostado numa arvore. 5 MINUTOS de sexo em pé. Ela geme alto. GOZA e te EMPURRA. \"FOI BOM.\" Vai embora. Nao goza, seu puto comido pela loira.",
|
||||||
|
"🔥 PEGO CADEIA HOMEM — Vai de BIKE PELADO. Um HOMEM aparece e TE DOMINA. \"BRAÇOS PRAS COSTAS.\" Ele te AMARRA com uma corda. \"DEITA DE BRUÇOS.\" Ele ENFIA O PAU no teu cu. 4 MINUTOS de sexo amarrado. GOZA dentro (com camisinha). TE SOLTA. \"PODE IR, MEU PUTINHO.\" Vai embora. Nao goza, seu puto amarrado e fodido.",
|
||||||
|
"🔥 PEGO DEDO E PAU — Vai de BIKE PELADO. Uma MULHER e um HOMEM aparecem. A MULHER MANDA: \"DE QUATRO.\" Tu deita. A MULHER ENFIA DOIS DEDOS no teu cu e ABRE. O HOMEM ENFIA O PAU no teu cu JUNTO com os dedos dela. 3 MINUTOS de dedo + pau entrando juntos. Tu sente cada movimento. A MULHER TIRA os dedos e SÓ O PAU continua. O HOMEM GOZA no teu cu. A MULHER LAMBE os dedos. Vao embora. Nao goza, seu puto de dedo e pau.",
|
||||||
|
"🔥 PEGO GRUPO 5 — Vai de BIKE PELADO. CINCO PESSOAS (3 homens, 2 mulheres) aparecem e TE VEEM. \"VAMOS USAR.\" UM HOMEM COLOCA na tua boca. UMA MULHER COLOCA dedos no teu cu. OUTRO HOMEM ENFIA no teu cu. OUTRA MULHER COLOCA a buceta na tua cara. O QUINTO SE MASTURBA te olhando. 5 MINUTOS de sexo intenso. TODOS GOZAM em ti. Tu sujo de porra e buceta. Depois vao embora. Nao goza, seu puto de 5.",
|
||||||
|
"🔥 PEGO VIÚVA — Vai de BIKE PELADO. Uma MULHER MAIS VELHA (viúva ou solteira) aparece e TE VE. \"QUE JOVEM FORTE.\" Ela CHEGA. \"VOCE ME LEMBRA MEU MARIDO.\" Ela COLOCA a mão no teu pau. \"DEIXA EU PROVAR.\" Ela CHUPA teu pau 3 MINUTOS — boquete experiente, olho fechado de prazer. Depois SOBE em ti e CAVALGA na sua buceta. 5 MINUTOS de sexo com a viúva. Ela GOZA e CHORA um pouco. \"OBRIGADA.\" Vai embora. Nao goza, seu puto da viúva.",
|
||||||
|
"🔥 PEGO CASAL CADEIA — Vai de BIKE PELADO. Um CASAL TE ABORDA. O HOMEM TE AMARRA as mãos rápido. A MULHER MANDA: \"ABRE A BOCA.\" O HOMEM COLOCA o pau na tua boca. A MULHER ENFIA DEDOS no teu cu. 3 MINUTOS amarrado, chupando e sendo dedado. Depois O HOMEM TE COME enquanto a MULHER CHUPA teu pau. 4 MINUTOS. Os dois gozam. TE SOLTAM e vao. Nao goza, seu puto amarrado pelo casal.",
|
||||||
|
"🔥 PEGO MULHER GRUPO — Vai de BIKE PELADO. TRÊS MULHERES aparecem e TE RODEIAM. \"QUE HOMEM BONITO.\" UMA CHUPA teu pau. OUTRA ENFIA DEDO no teu cu. A TERCEIRA COLOCA os peitos na tua mão. 4 MINUTOS de tres mulheres te usando. TROCA: a que chupava agora te come (cintaralho). A que dedava agora chupa. A que dava peito agora deda. TODAS GOZAM. Vao embora. Nao goza, seu puto de três mulheres.",
|
||||||
|
"🔥 PEGO RAPARIGA — Vai de BIKE PELADO. Uma RAPARIGA (jovem, ousada) aparece e TE VE. \"QUE GATINHO.\" Ela PASSA a mão no teu pau. \"VEM COMIGO.\" Ela te LEVA pra um canto, TIRA a CALCINHA e PERGUNTA: \"VOCE QUER ME COMER OU EU TE COMO?\" Tu fala que ela decide. Ela MANDA: \"VOCE VAI LAMBER MEU CU PRIMEIRO.\" Tu lambe o cu dela 2 minutos. Depois \"AGORA ME COME.\" Tu come ela 5 minutos. Ela GOZA e PERGUNTA: \"QUER GOZAR NA MINHA BOCA?\" Tu GOZA na boca dela. Ela ENGole. \"OBRIGADA, GOSTOSO.\" Vai embora. Pode gozar, seu puto. (Permissão pra gozar como parte da cena.)",
|
||||||
|
"🔥 PEGO VADIA — Vai de BIKE PELADO. Uma MULHER aparece de SALTO e VESTIDO. \"QUE VISÃO.\" Ela ABRE a bolsa, tira um PRESERVATIVO e COLOCA no teu pau com a boca. Depois SOBE EM TI e CAVALGA. 5 minutos de sexo selvagem. GOZA e MANDA: \"VAI, VADIA.\" Vai embora. Nao goza, seu puto da salto alto.",
|
||||||
|
"🔥 PEGO POBRE — Vai de BIKE PELADO. Um HOMEM SIMPLES (trabalhador) aparece e TE VE. \"RAPAZ, CÊ TA PELADO.\" Ele OLHA. \"NUNCA VI ISSO.\" Ele COLOCA a mão no teu pau. \"QUE BONITO.\" Ele CHUPA teu pau 2 MINUTOS — meio sem jeito, mas com tesao. Depois MANDA: \"VIRA.\" Ele TE COME de quatro. 3 MINUTOS. GOZA fora. \"OBRIGADO.\" Vai embora. Nao goza, seu puto do trabalhador.",
|
||||||
|
"🔥 PEGO SURPRESA — Vai de BIKE PELADO. Uma PESSOA aparece CORRENDO e TE ABORDA. \"FINALMENTE TE ENCONTREI!\" Ela te ABRAÇA pelado. \"SONHEI COM ISSO.\" Ela COLOCA a mão no teu pau e ALISA. CHUPA 2 min. Depois MANDA: \"ME COMEE.\" Tu come ela 5 min no chão. Ela GOZA. \"REALIZEI MEU SONHO.\" Vai embora. Nao goza, seu puto sonhado.",
|
||||||
|
"🔥 PEGO CASAL VELHO — Vai de BIKE PELADO. Um CASAL DE IDOSOS aparece. \"QUE JOVEM.\" A IDOSA PERGUNTA: \"POSSO?\" Ela COLOCA a mão no teu pau. O IDOSO PERGUNTA: \"ELE PODE CHUPAR MEU PAU?\" A IDOSA MANDA: \"CHUPA O PAU DELE, GOSTOSO.\" Tu chupa o idoso. Depois A IDOSA MANDA: \"AGORA VEM COMER MINHA BUCETA ENQUANTO ELE TE OLHA.\" Tu come a idosa enquanto o idoso olha. 5 min. OS DOIS GOZAM. \"OBRIGADO, JOVEM.\" Vao embora. Nao goza, seu puto dos idosos.",
|
||||||
|
"🔥 PEGO RICO — Vai de BIKE PELADO. Um HOMEM DE TIRO E GRAVATA aparece e TE VE. \"QUE INTERESSANTE.\" Ele ABRE a CALÇA e PERGUNTA: \"QUANTO CUSTA?\" Tu fala que nao é profissional. Ele MANDA: \"ENTÃO FAZ DE GRAÇA.\" Ele COLOCA O PAU na tua boca. 2 min. Depois TE VIRA e TE COME. 3 min. GOZA no teu cu (com camisinha). ARRUMA a GRAVATA. \"BOA PUTA.\" Vai embora. Nao goza, seu puto do executivo.",
|
||||||
|
"🔥 PEGO CASAL NOVO — Vai de BIKE PELADO. Um CASAL JOVEM (namorados) aparece e TE VE. A NAMORADA MANDA PRO NAMORADO: \"VAI CHUPAR O PAU DELE.\" O namorado CHUPA teu pau 2 min. Depois A NAMORADA: \"AGORA VEM COMER MINHA BUCETA ENQUANTO ELE TE COME.\" O namorado te come enquanto tu come a namorada. 5 min de sexo triangular. OS TRÊS GOZAM. O casal vai embora de mãos dadas. Nao goza, seu puto do casal novo.",
|
||||||
|
"🔥 PEGO MÃE — Vai de BIKE PELADO. Uma MULHER MAIS VELHA (estilo mãe de família) aparece e TE VE. \"MEU DEUS, QUE ISSO?\" Ela OLHA e PERCEBE que tu ta pelado. Ela SE APROXIMA. \"QUE HOMEM BONITO.\" Ela COLOCA a mão no teu pau. \"DEIXA A MAMÃE CUIDAR.\" Ela CHUPA teu pau 2 min. Depois ELA VIRA e MANDA: \"LAMBE O CU DA MAMÃE.\" Tu lambe o cu dela. 2 min. Depois ELA SOBE em ti e CAVALGA. 3 min. GOZA. \"MAMÃE AMOU.\" Vai embora. Nao goza, seu puto da mamae.",
|
||||||
|
"🔥 PEGO BISEXUAL — Vai de BIKE PELADO. DOIS HOMENS E UMA MULHER aparecem. A MULHER MANDA: \"VOCE VAI CHUPAR OS DOIS E COMER MINHA BUCETA.\" Tu chupa o pau do primeiro homem, depois o do segundo, e come a buceta da mulher. 5 min de revezamento. O PRIMEIRO HOMEM GOZA na tua boca. O SEGUNDO GOZA no teu cu. A MULHER GOZA na tua cara. \"BISEXUAL APROVADO.\" Vao embora. Nao goza, seu puto bi.",
|
||||||
|
"🔥 PEGO PADRE — Vai de BIKE PELADO. UM HOMEM DE BATINA (ou estilo religioso) aparece. \"FILHO, QUE É ISSO?\" Ele OLHA teu pau. \"ISSO É PECADO.\" Ele se APROXIMA. \"MAS PODE SER CONFISSÃO.\" Ele COLOCA A MÃO no teu pau. \"VOU TE ABSOLVER.\" Ele CHUPA teu pau 2 min. Depois MANDA: \"VIRA PRO CONFESSIONÁRIO.\" Te come de quatro. 3 min. GOZA. \"TÁ ABSOLVIDO, FILHO.\" Vai embora. Nao goza, seu puto do padre.",
|
||||||
|
"🔥 PEGO CHEFE — Vai de BIKE PELADO. O CHEFE ou GERENTE aparece e TE VE. \"FUNCIONÁRIO, QUE É ISSO?\" Ele OLHA. \"VOU TER QUE TE PUNIR.\" Ele ABRE a CALÇA. \"ABRE A BOCA E RECEBE A PUNIÇÃO.\" Tu chupa o pau do chefe. 2 min. Depois \"VIRA E ABRE O CU PRA PUNIÇÃO FINAL.\" Ele te come. 3 min. GOZA. \"VOLTA AO TRABALHO.\" Vai embora. Nao goza, seu puto do chefe.",
|
||||||
|
"🔥 PEGO MÉDICO — Vai de BIKE PELADO. UM HOMEM DE JALECO (ou estilo médico) aparece e TE VE. \"PACIENTE, QUE EXAME É ESSE?\" Ele SE APROXIMA. \"VOU TE EXAMINAR.\" Ele COLOCA a mão no teu pau. \"PRECISA DE MEDICAÇÃO.\" Ele CHUPA teu pau 2 min. Depois \"DEITA DE QUATRO PRO EXAME DE PROSTATA.\" Ele enfia o dedo no teu cu. 2 min. Depois enfia O PAU. \"MAIS MEDICAÇÃO.\" 3 min. GOZA. \"ALTA, PACIENTE.\" Vai embora. Nao goza, seu puto do médico.",
|
||||||
|
"🔥 PEGO POLICIAL 2 — Vai de BIKE PELADO. Um POLICIAL aparece e TE ABORDA. \"DOCUMENTOS.\" Tu sem roupa. Ele OLHA. \"VOU TER QUE REVISTAR.\" Ele PASSA a mão no teu corpo todo. Nas pernas, na bunda, no pau. \"REVISTA COMPLETA.\" Depois MANDA: \"ABRE A BOCA PRA REVISTA ORAL.\" Tu abre. Ele COLOCA O PAU na tua boca. 2 min de revista oral. \"DE QUATRO PRA REVISTA ANAL.\" Ele enfia o dedo. 2 min. Depois enfia O PAU. 3 min de revista completa. GOZA. \"LIBERADO.\" Vai embora. Nao goza, seu puto revistado.",
|
||||||
|
"🔥 PEGO VIZINHO 2 — Vai de BIKE PELADO. O VIZINHO DA ESQUERDA e o VIZINHO DA DIREITA aparecem JUNTOS. \"OLHA ELE.\" Eles te OLHAM. O PRIMEIRO MANDA: \"CHUPA O PAU DO SEU VIZINHO.\" Tu chupa o primeiro. O SEGUNDO MANDA: \"AGORA CHUPA O MEU.\" Tu chupa o segundo. OS DOIS MANDA: \"DE QUATRO PROS DOIS.\" Um enfia no teu cu, o outro na tua boca. 4 MINUTOS de dois vizinhos. OS DOIS GOZAM. \"BOA VIZINHANÇA.\" Vao embora. Nao goza, seu puto dos dois vizinhos.",
|
||||||
|
"🔥 PEGO FESTA — Vai de BIKE PELADO. UMA TURMA DE AMIGOS (2 mulheres, 2 homens) ta num piquinique e TE VEEM. \"OLHA O PELADO!\" Eles CHAMAM. \"VEM COMER.\" Tu vai. UMA MULHER CHUPA teu pau. O HOMEM ENFIA DEDO no teu cu. A OUTRA MULHER COLOCA a buceta na tua cara. O OUTRO HOMEM SE MASTURBA. 5 min de farra. TODOS GOZAM. \"VEM SEMPRE.\" Tu vai embora com a bike. Nao goza, seu puto da festa.",
|
||||||
|
"🔥 PEGO CASAL FINAL — Vai de BIKE PELADO. Um CASAL LINDO aparece e TE CONVIDA. \"QUER TRANZAR COM A GENTE?\" Tu aceita. A MULHER TIRA a roupa. O HOMEM TIRA a roupa. OS TRÊS PELADOS. A MULHER CHUPA O PAU do homem. O HOMEM CHUPA TEU PAU. 2 min. Depois A MULHER SOBE EM TI e CAVALGA. O HOMEM ENTRA nela por trás ao mesmo tempo. 5 min de sexo triplo. TODOS GOZAM. \"OBRIGADO.\" Vao embora. Nao goza, seu puto do casal final.",
|
||||||
|
"🔥 PEGO DEDO FUNDO 2 — Vai de BIKE PELADO. Uma MULHER aparece e TE DOMINA. \"DE QUATRO.\" Tu deita. Ela ENFIA TRÊS DEDOS no teu cu — fundo, até o talo. 3 MINUTOS de dedos fundos. Abrindo, explorando, curvando na prostata. \"ASSIM QUE EU GOSTO.\" Ela TIRA e LAMBE os dedos. \"AGORA VAI PRA CASA COM MEU CHEIRO EM TI.\" Vai embora. Nao goza, seu puto dedado fundo.",
|
||||||
|
"🔥 PEGO MULHER FINAL — Vai de BIKE PELADO. Uma MULHER GOSTOSA aparece e TE CHAMA. \"VEM AQUI, SEU SAFADO.\" Ela TIRA a calcinha e JOGA em ti. \"CHEIRA.\" Tu cheira a calcinha dela. Depois ELA MANDA: \"LAMBE MEU CU ATÉ EU GOZAR.\" Tu lambe o cu dela por 3 minutos até ela gozar na tua boca. Depois ELA MANDA: \"AGORA VAI PRA CASA COM GOSTO DE CU NA BOCA.\" Vai embora. Nao goza, seu puto lambedor final.",
|
||||||
|
"🔥 PEGO FIM — Vai de BIKE PELADO pela ULTIMA VEZ. Para num LUGAR VISÍVEL. TIRA TUDO. FICA em PÉ de BRAÇOS ABERTOS. Uma PESSOA aparece e TE VE. \"É O PELADO DA BIKE.\" Ela CHEGA e ABRAÇA tu nu. \"VOCE É LIVRE.\" Ela TE BEIJA. COLOCA a MÃO no teu pau e ALISA. 1 minuto de carinho. Depois ELA VAI. \"CONTINUA ASSIM.\" Tu monta na bike e volta pra casa, nu e livre. Nao goza, seu puto livre.",
|
||||||
|
"🔥 PEGO SEXO FINAL — Vai de BIKE PELADO e ENCONTRA UMA PESSOA que QUER TRANZAR. Vocês TRANZAM de TODAS AS FORMAS: buceta, cu, boca. 10 minutos de sexo completo e intenso. No FINAL, VOCÊ GOZA junto com a pessoa. PODE GOZAR. A pessoa vai embora, tu monta na bike e volta feliz. Pode gozar, seu puto final.",
|
||||||
|
"🔥 PEGO MOTOQUEIRO 2 — Vai de bike pelado. Um MOTOQUEIRO de Harley para e TE VE. \"ISSO SIM É LIBERDADE.\" Ele DESCE da moto. \"PRIMEIRO O PAGAMENTO.\" Ele CHUPA teu pau 3 minutos. Depois MANDA: \"AGORA SOBE NA GARUPA.\" Tu SOBE pelado atras na moto. ELE DA UMA VOLTA de 2 minutos contigo pelado na garupa, o vento no corpo. Para e MANDA: \"AGORA VAI, PUTA.\" Tu monta na bike. Nao goza.",
|
||||||
|
"🔥 PEGO CAMINHONEIRO 2 — Vai de bike pelado. Um CAMINHONEIRO para e TE VE. Ele ABRE a porta. \"SOBE.\" Tu SOBE na cabine pelado. \"ABRE A BOCA.\" Tu CHUPA o pau dele 3 minutos. Depois \"DE QUATRO NO BANCO.\" Ele TE COME na cabine. 3 minutos. GOZA no teu cu. \"DESCE, PUTA.\" Tu desce e monta na bike. Nao goza.",
|
||||||
|
"🔥 PEGO PADEIRO 2 — Vai de bike pelado. O PADEIRO TE VE e GRITA. \"EI, PELADO!\" Ele VEM com um PAO QUENTE. \"COME O PAO PRIMEIRO.\" Tu come. Depois ELE ABRE a calca. \"AGORA COMER ISSO.\" Ele COLOCA O PAU na tua boca. 2 minutos. \"PROXIMA SEMANA TEM MAIS.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO BOMBEIRO — Vai de bike pelado. UM BOMBEIRO DESCE do caminhao. \"QUE OCORRENCIA?\" Ele OLHA teu corpo. \"VOU REVISTAR.\" Ele PASSA a mao. \"ABRE A BOCA.\" Ele COLOCA O PAU. 2 min. Depois \"VIRA.\" Ele TE COME de quatro. 3 min. GOZA. \"OCORRENCIA RESOLVIDA.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO ENTREGADOR — Vai de bike pelado. Um ENTREGADOR DE APP TE VE. \"MANO, TU TA PELADO!\" Ele TIRA FOTO. \"VAI VIRAR MEME.\" Depois GUARDA. \"MAS ANTES, VOU COBRAR.\" Ele CHUPA 2 min. \"VIRA E MOSTRA.\" Ele te come 2 min. GOZA. \"ENTREGA CONCLUIDA.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO CARRO APAGADO — Vai de bike pelado. Um CARRO APAGADO. O MOTORISTA PEDE AJUDA. Tu ajuda pelado empurrando. O carro PEGA. \"COMO PAGAR?\" Ele OLHA teu pelado. Ele CHUPA 2 min. \"JA PAGOU.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO FISCAL 2 — Vai de bike pelado. Um FISCAL aparece. \"VOU MULTAR.\" Mas GUARDA o bloco. \"PODE PAGAR DE OUTRA FORMA.\" Ele CHUPA 2 min. Depois \"DE QUATRO.\" Ele enfia o dedo. 2 min. \"APROVADO.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO TAXISTA — Vai de bike pelado. Um TAXI para. \"ENTRA.\" Tu entra pelado. Ele ANDA 2 min e PARA. \"PAGAMENTO.\" Ele CHUPA 2 min. Depois \"VIRA.\" Ele te come 3 min. GOZA. \"AGORA VAI.\" Tu sai. Nao goza.",
|
||||||
|
"🔥 PEGO PRIMO — Vai de bike pelado. O PRIMO aparece. \"CARAMBA.\" Ele TIRA a CALCA. \"CHUPA O PAU DO PRIMO.\" Tu chupa 2 min. Depois \"ABRE O CU.\" Ele te come 3 min. GOZA. Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO TIO 2 — Vai de bike pelado. O TIO TE VE. \"SOBRINHO.\" Ele TE LEVA pra dentro, CHUPA teu pau 2 min. \"DELICIA.\" Depois TE COME. 3 min. GOZA. \"ISSO FICA ENTRE NOS.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO TIA — Vai de bike pelado. A TIA aparece. \"MENINO.\" Ela CHUPA 2 min. Depois \"VEM COMER SUA TIA.\" Tu come a tia 5 min. GOZA. \"TIA AMOU.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO MADRASTA — Vai de bike pelado. A MADRASTA aparece. \"ENTEADO.\" Ela CHUPA 2 min. Depois \"VAI ME COMER COMO PUNICAO.\" Tu come ela 5 min. GOZA. \"PUNICAO CUMPRIDA.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO IRMA — Vai de bike pelado. A IRMA aparece. \"MANO, SEU PAU E LINDO.\" Ela CHUPA 2 min. Depois \"MANO, ME COME.\" Tu come ela 5 min. GOZA. Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO PROFESSORA — Vai de bike pelado. A PROFESSORA aparece. \"ALUNO SAFADO.\" Ela CHUPA 2 min. Depois \"VAI ME COMER QUE TU APRENDE.\" Tu come ela 5 min. GOZA. \"APROVADO.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO MEDICA — Vai de bike pelado. Uma MEDICA aparece. \"VOU EXAMINAR.\" Ela CHUPA 2 min. Depois \"DEITA PRA PROSTATA.\" Ela enfia dedo. 2 min. Depois \"VOU RECEITAR.\" Ela te come (cintaralho) 3 min. GOZA. \"ALTA.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO ENFERMEIRA — Vai de bike pelado. Uma ENFERMEIRA aparece. \"PRECISA DE INJECAO.\" Ela CHUPA 2 min. Depois \"VIRA.\" Ela enfia dedo. 2 min. Depois enfia O PAU (cintaralho). 3 min. GOZA. \"CURADO.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO ADVOGADA — Vai de bike pelado. Uma ADVOGADA aparece. \"HONORARIOS.\" Ela CHUPA 2 min. \"AGORA A DEFESA.\" Ela te come (cintaralho) 3 min. GOZA. \"CAUSA GANHA.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO DELEGADA — Vai de bike pelado. A DELEGADA aparece. \"PRISIONEIRO.\" Ela TE ALGEMA. \"VOU INTERROGAR.\" Ela CHUPA 2 min. \"VOU USAR METODOS MAIS FORTES.\" Ela te come 3 min. GOZA. \"SOLTO.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO JUIZA — Vai de bike pelado. A JUIZA aparece. \"REU.\" Ela CHUPA 2 min. \"SENTENCA: CULPADO. PENA: SER COMIDO.\" Ela te come 3 min. GOZA. \"PENA CUMPRIDA.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO COZINHEIRA — Vai de bike pelado. Uma COZINHEIRA aparece. \"VOU PROVAR.\" Ela CHUPA 2 min. Depois \"VEM COZINHAR.\" Ela te come em cima da mesa. 3 min. GOZA. \"RECEITA APROVADA.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO MANICURE — Vai de bike pelado. A MANICURE aparece. \"ESSA UNHA TA GRANDE.\" Ela ALISA a cabecinha. Depois CHUPA 2 min. \"HIDRATACAO.\" Depois TE COME 3 min. GOZA. \"FINALIZADO.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO PERSONAL — Vai de bike pelado. O PERSONAL aparece. \"ALUNO.\" Ele CHUPA 2 min. \"AGORA TREINO PRINCIPAL.\" Ele te come 3 min. GOZA. \"DESCANSO.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO PERSONAL FEM — Vai de bike pelado. A PERSONAL aparece. \"ALUNO.\" Ela CHUPA 2 min. \"AGORA MUSCULACAO.\" Ela te cavalga (cintaralho) 3 min. GOZA. \"BOM TREINO.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO MASSAGISTA — Vai de bike pelado. O MASSAGISTA aparece. Ele CHUPA 2 min. \"VOU ALIVIAR.\" Ele te come 3 min. GOZA. \"MASSAGEM COMPLETA.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO NATURISTA — Vai de bike pelado. Um CASAL NATURISTA TE VE. ELES TIRAM a roupa. A MULHER CHUPA o homem. O HOMEM CHUPA teu pau. 2 min. Depois A MULHER MANDA: \"VEM COMER MINHA BUCETA ENQUANTO ELE TE COME.\" Tu na buceta, ele no teu cu. 5 min. GOZAM. Vao embora. Nao goza.",
|
||||||
|
"🔥 PEGO CONSTRUTOR — Vai de bike pelado. Um CONSTRUTOR TE VE. \"QUE OBRA DE ARTE.\" Ele CHUPA 2 min. Depois \"VISTORIA DE FUNDACAO.\" Ele te come 3 min. GOZA. \"OBRA APROVADA.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO JARDINEIRO — Vai de bike pelado. O JARDINEIRO TE VE. \"QUE PLANTA RARA.\" Ele CHUPA 2 min. Depois \"ADUBAR.\" Ele te come 3 min. GOZA. \"JARDIM CUIDADO.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO PINTOR — Vai de bike pelado. O PINTOR TE VE. \"QUE TELA EM BRANCO.\" Ele COLOCA TINTA no teu corpo. Depois CHUPA 2 min. \"AGORA VOU PINTAR O QUADRO INTEIRO.\" Ele te come 3 min. GOZA. \"OBRA PRIMA.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO ELETRICISTA — Vai de bike pelado. O ELETRICISTA TE VE. \"ESSE FIO TA SOLTO.\" Ele CHUPA 2 min. Depois enfia dedo no teu cu. 2 min. \"AGORA LIGAR NA TOMADA CERTA.\" Ele te come 3 min. GOZA. \"ENERGIA LIGADA.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO ENCANADOR — Vai de bike pelado. O ENCANADOR TE VE. \"ESSE CANO TA ENTUPIDO.\" Ele CHUPA 2 min. Depois enfia dedo. 2 min. Depois enfia O PAU. 3 min. GOZA. \"DESENTUPIDO.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO VIAJANTE — Vai de bike pelado. Um VIAJANTE DE MOCHILAO TE VE. \"QUE LIBERDADE.\" Ele COLOCA CAMISINHA em ti. \"VAMOS CELEBRAR.\" Ele CHUPA 2 min. Depois TE COME. 3 min. GOZA. \"BOA VIAGEM.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO CICLISTA PROF — Vai de bike pelado. Um CICLISTA DE TIME TE VE. \"QUE TREINO.\" Ele CHUPA 2 min. \"AGORA SPRINT.\" Ele te come 3 min. GOZA. \"BOM TREINO.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO CAMINHANTE — Vai de bike pelado. Um CAMINHANTE TE VE. \"VOU TE LEVAR NUM LUGAR SECRETO.\" Ele te LEVA pra clareira. Lá, ELE CHUPA 2 min. \"AGORA VEM.\" Ele te come 3 min. GOZA. \"LUGAR SECRETO.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO POLICIAL FEM — Vai de bike pelado. Uma POLICIAL aparece. \"CIDADAO.\" Ela PASSA a mao. \"TA PRESO.\" Ela CHUPA 2 min. Depois \"CELA.\" Ela te come (cintaralho) 3 min. GOZA. \"SOLTO.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO MULHER MUSCULOSA — Vai de bike pelado. Uma MUSCULOSA aparece. \"QUE HOMEM FRACO.\" Ela CHUPA 2 min. Depois TE DEITA e TE COME 3 min. GOZA. \"MALHACAO COMPLETA.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO MULHER BAIXINHA — Vai de bike pelado. Uma BAIXINHA aparece. \"QUE HOMEM GRANDE.\" Ela SOBE em ti e CAVALGA. 5 min. GOZA. \"GIGANTE DOMADO.\" Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO MULHER GORDA — Vai de bike pelado. Uma GOSTOSA CURVILINEA aparece. Ela COLOCA o peito na tua boca pra tu MAMAR. 2 min. Depois CHUPA teu pau. \"AGORA VEM.\" Tu come ela 5 min. GOZA. Vai embora. Nao goza.",
|
||||||
|
"🔥 PEGO CASAL TROCA TUDO — Vai de bike pelado. Um CASAL SWINGER aparece. A MULHER BEIJA o HOMEM, depois BEIJA tu. O HOMEM CHUPA teu pau. A MULHER CHUPA o homem. 2 min. Depois A MULHER MANDA: \"COME MEU MARIDO.\" Tu come o homem. 3 min. Depois O HOMEM TE COME enquanto ela chupa teu pau. GOZAM. \"SWING APROVADO.\" Vao. Nao goza.",
|
||||||
|
"🔥 PEGO DOIS CASAIS — Duas mulheres e dois homens te veem. UMA CHUPA teu pau. UM HOMEM COLOCA na tua boca. OUTRO TE COME. OUTRA MULHER COLOCA buceta na tua mao. 5 min. TODOS GOZAM. Vao. Nao goza.",
|
||||||
|
"🔥 PEGO DOMADOR — Vai de bike pelado. Um DOMINADOR de couro aparece. Ele COLOCA COLEIRA. \"VAI ANDAR DE QUATRO.\" Tu anda 2 min. Ele CHUPA teu pau de quatro. 2 min. Depois TE COME. 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO DOMADORA — Vai de bike pelado. Uma DOMINADORA de salto aparece. \"VAI LAMBE MEU SALTO.\" Tu lambe. 1 min. Depois \"LAMBE MEU CU.\" Tu lambe. 2 min. Depois \"VAI ME COMER DEVAGAR.\" Tu come ela. 5 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CASAL DOMINADOR — Casal DOMINADOR aparece. O HOMEM COLOCA coleira. A MULHER: \"LAMBE MEU CU.\" O HOMEM: \"CHUPA MEU PAU.\" Tu obedece. Depois \"COME MEU MARIDO.\" Tu come o homem. OS DOIS GOZAM. Vao. Nao goza.",
|
||||||
|
"🔥 PEGO SUBMISSAO TOTAL — Tres dominadores te rodeiam. UM COLOCA coleira. UMA: \"AJOELHA.\" OUTRO: \"ABRE A BOCA.\" OUTRA: \"ABRE O CU.\" 5 min. TODOS GOZAM. Vao. Nao goza.",
|
||||||
|
"🔥 PEGO CASAL SUB — Um CASAL SUBMISSIVO te ve. ELES se ajoelham. LAMBEM teu pau juntos. 2 min. A MULHER: \"MESTRE, COME MEU CU.\" Tu come ela. O HOMEM: \"MESTRE, COME MEU CU TAMBEM.\" Tu come ele. GOZAM. Vao. Nao goza.",
|
||||||
|
"🔥 PEGO MESTRA — Uma DOMINADORA aparece. \"APRENDIZ.\" Ela CHUPA 2 min. Depois \"LAMBE MEU CU ATE EU GOZAR.\" Tu lambe. Ela GOZA. \"AGORA VAI COMER O SUBMISSO DELA.\" Ela chama outro. Tu come o homem. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CASAL MESTRES — Um CASAL MESTRE aparece. \"ALUNO.\" A MULHER COLOCA peito na tua boca. O HOMEM COLOCA pau na tua boca. 3 min. Depois \"DE QUATRO.\" O homem te come, a mulher COLOCA buceta na tua cara. 5 min. GOZAM. \"FORMADO.\" Vao. Nao goza.",
|
||||||
|
"🔥 PEGO GRUPO SUBMISSAO — CINCO PESSOAS te rodeiam. UM: \"AJOELHA NO CENTRO.\" Tu ajoelha. UMA COLOCA pau na tua boca. OUTRA COLOCA buceta na tua cara. UM enfia dedo no teu cu. OUTRO se masturba te olhando. 5 min. TODOS GOZAM. Vao. Nao goza.",
|
||||||
|
"🔥 PEGO AMIGO 3 — Vai de bike pelado. DOIS AMIGOS aparecem. UM CHUPA teu pau. O SEGUNDO COLOCA na tua boca. 2 min. Depois \"DE QUATRO.\" O primeiro te come, o segundo na tua boca. 4 min. OS DOIS GOZAM. Vao. Nao goza.",
|
||||||
|
"🔥 PEGO PRIMOS — Vai de bike pelado. DOIS PRIMOS aparecem. UM CHUPA teu pau. OUTRO enfia dedo. 2 min. Depois UM te come enquanto tu CHUPA o outro. 4 min. OS DOIS GOZAM. Vao. Nao goza.",
|
||||||
|
"🔥 PEGO PRIMA E PRIMO — Vai de bike pelado. PRIMA E PRIMO aparecem. A PRIMA CHUPA teu pau. O PRIMO CHUPA teu cu. 2 min. Depois O PRIMO TE COME enquanto tu COME A PRIMA. 5 min. OS TRES GOZAM. Vao. Nao goza.",
|
||||||
|
"🔥 PEGO TIA E TIO — Vai de bike pelado. TIA E TIO aparecem. A TIA CHUPA teu pau. O TIO CHUPA teu cu. 2 min. Depois O TIO TE COME enquanto tu COME A TIA. 5 min. OS DOIS GOZAM. Vao. Nao goza.",
|
||||||
|
"🔥 PEGO AVO — Vai de bike pelado. A AVO aparece. \"NETINHO.\" Ela CHUPA teu pau 2 min. Depois \"VEM COMER A AVO.\" Tu come ela 5 min. GOZA. \"VOVO AMOU.\" Vai. Nao goza.",
|
||||||
|
"🔥 PEGO VOVO DOMINA — Vai de bike pelado. VOVO DOMINADORA aparece. \"NETINHO.\" Ela CHUPA 2 min. \"AGORA VAI LAMBER O CU DA VOVO.\" Tu lambe. 2 min. Depois \"VAI COMER A VOVO.\" Tu come ela 5 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO SOGRA — Vai de bike pelado. A SOGRA aparece. \"GENRO.\" Ela CHUPA 2 min. Depois \"VEM COMER A SOGRA.\" Tu come ela 5 min. GOZA. \"SEGREDO DE FAMILIA.\" Vai. Nao goza.",
|
||||||
|
"🔥 PEGO SOGRO — Vai de bike pelado. O SOGRO aparece. \"GENRO.\" Ele CHUPA 2 min. Depois \"ABRE O CU PRO SOGRO.\" Ele te come 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO SOGROS — Vai de bike pelado. SOGRA E SOGRO aparecem. A SOGRA CHUPA teu pau. O SOGRO CHUPA teu cu. 2 min. Depois O SOGRO TE COME enquanto a SOGRA CHUPA. 5 min. OS DOIS GOZAM. Vao. Nao goza.",
|
||||||
|
"🔥 PEGO PADRASTO — Vai de bike pelado. O PADRASTO aparece. \"ENTEADO.\" Ele CHUPA 2 min. Depois \"ABRE O CU.\" Ele te come 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO PRIMO 2 — Vai de bike pelado. O PRIMO MAIS VELHO aparece. \"PRIMO.\" Ele CHUPA teu pau 2 min. \"AGORA VAI ME CHUPAR.\" Tu chupa o primo. Depois ELE TE COME. 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO PRIMA 2 — Vai de bike pelado. A PRIMA MAIS VELHA aparece. Ela CHUPA teu pau 2 min. Depois \"VEM COMER A PRIMA.\" Tu come ela 5 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO VIZINHO BIKE — Vai de bike pelado. O VIZINHO TE VE e RECONHECE. \"E O VIZINHO PELADO.\" Ele CHUPA teu pau 2 min. \"AGORA VOU TE COMER.\" Ele te come 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO VIZINHA SOLTEIRA — Vai de bike pelado. A VIZINHA SOLTEIRA aparece. \"VIZINHO.\" Ela CHUPA teu pau 2 min. Depois \"VEM COMER A VIZINHA.\" Tu come ela 5 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO VIZINHO GAY — Vai de bike pelado. O VIZINHO GAY aparece. \"AMIGO.\" Ele CHUPA teu pau 2 min. Depois \"LAMBE MEU CU.\" Tu lambe. Depois \"VEM ME COMER.\" Tu come ele 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CASAL VIZINHOS — O CASAL DE VIZINHOS te ve. A MULHER CHUPA teu pau. O MARIDO CHUPA teu cu. 2 min. Depois O MARIDO TE COME enquanto tu COME a MULHER. 5 min. OS DOIS GOZAM. Vao. Nao goza.",
|
||||||
|
"🔥 PEGO VIZINHA DOIDA — A VIZINHA LOUCA aparece. Ela TIRA a calcinha e JOGA em ti. \"CHEIRA.\" Ela CHUPA 2 min. \"AGORA ME COME.\" Tu come ela no muro. 5 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO ENTREGADOR GAS — O ENTREGADOR DE GAS te ve. Ele CHUPA 2 min. Depois \"VIRA.\" Ele te come 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO LEITEIRO — O LEITEIRO te ve. \"VOU TE DAR LEITE.\" Ele CHUPA 2 min. Depois \"AGORA LEITE NO CU.\" Ele te come 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO FRENTISTA — O FRENTISTA te ve. \"VOU COMPLETAR O TANQUE.\" Ele CHUPA 2 min. \"AGORA VERIFICAR O OLEO.\" Ele enfia dedo. 2 min. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO LAVADOR DE CARRO — O LAVADOR te ve. Ele JOGO AGUA no teu corpo. Depois CHUPA 2 min. Depois TE COME 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO SEGURANCA — O SEGURANCA te ve. \"VOU REVISTAR.\" Ele CHUPA 2 min. Depois enfia dedo. 2 min. Depois TE COME. 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO PORTEIRO — O PORTEIRO te ve. \"SINHO.\" Ele CHUPA 2 min. Depois TE COME 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CASEIRO — O CASEIRO te ve. \"PATRAO.\" Ele CHUPA 2 min. Depois TE COME 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO FAXINEIRA — A FAXINEIRA te ve. \"VOU LIMPAR.\" Ela CHUPA 2 min. Depois TE COME 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO BABA — A BABA te ve. \"VOU CUIDAR DO BEBE.\" Ela CHUPA 2 min. Depois TE COME 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO EMPREGADA — A EMPREGADA te ve. \"VOU FAZER O SERVICO.\" Ela CHUPA 2 min. Depois TE COME 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO COZINHEIRA 2 — A COZINHEIRA te ve. \"VOU PREPARAR O JANTAR.\" Ela CHUPA 2 min. Depois TE COME na mesa. 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO PASTELERA — A PASTELERA te ve de bike. \"VAI UM PASTEL?\" Tu come pelado. Depois ela CHUPA 2 min. Depois TE COME 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO FEIRANTE — O FEIRANTE te ve. \"VAI UMA FRUTA?\" Ele te da uma banana. \"AGORA COMER OUTRA COISA.\" Ele CHUPA 2 min. Depois TE COME. 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO VENDEDORA — A VENDEDORA te ve. \"VOU TE DAR DESCONTO.\" Ela CHUPA 2 min. Depois TE COME 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO MOTORISTA ONIBUS — O MOTORISTA DE ONIBUS te ve. \"SOBE.\" Tu SOBE pelado no onibus vazio. Ele CHUPA 2 min. Depois TE COME no banco. 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO MAQUINISTA — O MAQUINISTA DE TREM te ve. Ele CHUPA 2 min. Depois TE COME na cabine. 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO BARMAN — O BARMAN te ve. \"VOU TE SERVIR.\" Ele te da uma bebida. Depois CHUPA 2 min. Depois TE COME. 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO GARCOM — O GARCOM te ve. \"QUER SOBREMESA?\" Ele CHUPA 2 min. Depois TE COME. 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO MOTORISTA APP — O MOTORISTA DE APP te ve. \"CORRIDA?\" Tu entra pelado. Ele DIRIGE 2 min e PARA. \"PAGAMENTO.\" Ele CHUPA 2 min. Depois TE COME no banco de tras. 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO PASTO — Vai de bike no pasto. O FAZENDEIRO ve o boi te olhando. Ele CHUPA teu pau 2 min. Depois TE COME 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CAVALO — Vai de bike. O CAVALEIRO aparece. \"MEU CAVALO GOSTOU.\" Ele CHUPA 2 min. Depois TE COME 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CACHORRO 2 — Vai de bike. O DONO DO CACHORRO aparece. \"MEU CACHORRO GOSTOU.\" Ele CHUPA 2 min. Depois TE COME 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO GATO — Vai de bike. A DONA DO GATO aparece. \"MEU GATO GOSTOU.\" Ela CHUPA 2 min. Depois TE COME (cintaralho) 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO FINAL 3 — Vai de bike pela ULTIMA VEZ. ENCONTRA UMA PESSOA que QUER SEXO COMPLETO. Voces fazem TUDO: boquete, cu, buceta, beber gozo, lamber. 10 MINUTOS de sexo intenso. NO FINAL, VOCE GOZA. A pessoa GOZA. Pode gozar. 'FINAL PERFEITO.' Vai embora feliz. Pode gozar - fim da jornada.",
|
||||||
|
"🔥 PEGO NOITE ESTRELADA — Vai de bike pelado a noite. Deita NU num campo olhando as estrelas. Uma PESSOA aparece e TE VE deitado nu. \"QUE CENA.\" Ela DEITA do teu lado pelada tambem. AS DUAS PELADAS vendo estrelas. Depois ELA TE BEIJA e CHUPA teu pau. 3 min. Depois CAVALGA em ti. 5 min. GOZA. \"NOITE PERFEITA.\" Vai. Nao goza.",
|
||||||
|
"🔥 PEGO AMANHECER — Vai de bike pelado ao AMANHECER. Fica NU no horizonte vendo o sol nascer. Uma PESSOA aparece e TE VE na luz do amanhecer. \"QUE BELEZA.\" Ela CHEGA e TE BEIJA. CHUPA teu pau 3 min. Depois TE COME. 5 min. GOZA. \"AMANHECER PERFEITO.\" Vai. Nao goza.",
|
||||||
|
"🔥 PEGO POR DO SOL— Vai de bike pelado ao POR DO SOL. Fica NU contra o ceu alaranjado. Uma PESSOA aparece. \"QUE SILHUETA.\" Ela COLOCA a mao no teu corpo. CHUPA 3 min. Depois TE COME. 5 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO RIO — Vai de bike pelado ate um RIO ou CORREGO. ENTRA pelado na agua. Uma PESSOA ja ta la. \"AGUA BOA.\" Ela nada ate tu. NA AGUA, ela COLOCA a mao no teu pau. CHUPA debaixo d'agua. 3 min. Depois VOCES TRANSAM na agua. 5 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CACHOEIRA — Vai de bike pelado ate uma CACHOEIRA. Tira tudo e toma BANHO debaixo da agua. Uma PESSOA aparece e TE VE debaixo da cachoeira. CEU ABERTO. Ela ENTRA tambem. VOCEIS TRANSAM debaixo da cachoeira - agua caindo, corpo molhado. 5 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO MATA — Vai de bike pelado numa MATA ou FLORESTA. CAMINHA PELADO no meio do mato. Uma PESSOA aparece. \"QUE NATUREZA.\" Ela se APROXIMA. VOCES TRANSAM no chao da floresta - folhas, terra, mato. 5 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO DESERTO — Vai de bike pelado num DESERTO (areia, campo seco). DEITA na AREIA pelado. Uma PESSOA aparece. \"QUE MIRAGEM.\" Ela CHEGA. VOCES TRANSAM na areia. 5 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO MONTANHA — Vai de bike pelado e SOBE UMA MONTANHA a pe pelado. No TOPO, fica nu contra o vento. Uma PESSOA aparece. \"QUE VISTA.\" Ela SE APROXIMA. VOCES TRANSAM no topo da montanha - ceu, vento, altitude. 5 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO TRILHA — Vai de bike pelado e CAMINHA PELADO NUMA TRILHA. Uma PESSOA aparece vindo de frente. \"QUE ENCONTRO.\" Ela tira a roupa tambem. VOCES TRANSAM no meio da trilha. 5 min. GOZA. Vai embora cada um pro seu lado. Nao goza.",
|
||||||
|
"🔥 PEGO FAROL — Vai de bike pelado ate um FAROL ou MIRANTE. SOBE pelado e OLHA a paisagem. Uma PESSOA aparece. \"QUE PONTO DE VISTA.\" Ela COLOCA a mao no teu pau. VOCES TRANSAM na vista panoramica. 5 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO PRAIA NOTURNA — Vai de bike pelado a noite numa PRAIA DESERTA. ANDA na areia pelado, o mar nos pes. Uma PESSOA aparece na luz da lua. VOCES TRANSAM na areia, o som das ondas. 5 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO FIM VIAGEM — Vai de bike pelado pela ULTIMA VEZ. Encontra ALGUEM DISPOSTO. VOCES TRANSAM DE TODAS AS FORMAS por 10 min. NO FIM, OS DOIS GOZAM JUNTOS. Fim da viagem de puta. Pode gozar, seu puto livre.",
|
||||||
|
"🔥 PEGO CHUPA TUDO — Vai de bike pelado. Uma MULHER aparece e TE VE. \"VOU CHUPAR CADA PEDAÇO.\" Ela CHUPA teu pau 2 min. Depois LAMBE teu CU 2 min. Depois LAMBE teu SACO 1 min. Depois TE BEIJA com a boca suja de cu e pau. \"VOCE INTEIRO.\" Vai. Nao goza.",
|
||||||
|
"🔥 PEGO LINGUA TOTAL — Vai de bike pelado. Um HOMEM aparece. \"VOU LAMBER TUDO.\" Ele LAMBE teu pau, teu cu, teu saco, tuas axilas, teus peitos. 5 min de lingua em cada parte. Depois TE COME. 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CHUPA E DEDA — Vai de bike pelado. Uma MULHER aparece. Ela CHUPA teu pau 2 min e ao mesmo tempo ENFIA DEDO no teu cu. 3 min de boquete com dedo. Depois TIRA e PERGUNTA: \"QUER MAIS?\" Continua mais 2 min. GOZA na tua boca. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO DUPLA CHUPADA — Vai de bike pelado. DUAS MULHERES te veem. UMA CHUPA teu pau. OUTRA LAMBE teu cu. 3 min de dupla linguada. Depois ELAS TROCAM: a que chupava agora lambe, a que lambia agora chupa. 3 min. VAO. Nao goza.",
|
||||||
|
"🔥 PEGO TRIO LINGUA — Vai de bike pelado. TRES MULHERES te rodeiam. UMA na BOCA, UMA no CU, UMA no SACO. 5 min de 3 linguas no teu corpo. Depois UMA TE COME (cintaralho) enquanto as outras lambem tuas costas. GOZAM. Vao. Nao goza.",
|
||||||
|
"🔥 PEGO CHUPA PROLONGADA — Vai de bike pelado. Uma MULHER aparece e DECIDE: \"VOU CHUPAR ATE VOCE QUASE GOZAR 3 VEZES.\" Ela CHUPA ate tu quase gozar. PARA. Chupa de novo. PARA. Chupa de novo. PARA. 3 edgings de boquete. Depois LEVANTA. \"GUARDA ESSE GOZO.\" Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CHUPA LENTA — Vai de bike pelado. Uma MULHER aparece. \"VOU CHUPAR BEM DEVAGAR.\" Ela COLOCA teu pau na boca e CHUPA EM CAMERA LENTA — cada movimento dura 5 segundos. 5 min de boquete lento. Teu pau lateja. Depois ELA LEVANTA. \"BOA.\" Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CHUPA RAPIDA — Vai de bike pelado. Uma MULHER aparece. \"VOU CHUPAR RAPIDO.\" Ela COLOCA na boca e ACELERA — vai e vem rapido por 3 min. Quase gozas. ELA PÁRA. \"JA CHEGA.\" Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CHUPA FUNDO — Vai de bike pelado. Um HOMEM aparece. Ele COLOCA teu pau inteiro na boca ate o fundo da garganta. 3 min de garganta profunda. Tu geme. Depois ELE TIRA. \"BOA.\" Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CHUPA MOLHADO — Vai de bike pelado. Uma MULHER aparece. Ela BABA MUITO enquanto chupa — a baba escorre pelo teu pau, pela mao dela, pelo chao. 3 min de boquete babado. MOLHADO. \"QUE GOSTOSO.\" Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CHUPA NO CHAO — Vai de bike pelado. Um HOMEM TE DERRUBA no chao. Ele DEITA em cima de ti e CHUPA teu pau deitado no chao. 3 min. Depois TE COME no chao. 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CHUPA EM PE — Vai de bike pelado. Uma MULHER aparece. Ela SE AJOELHA na tua frente e CHUPA teu pau em pe. 3 min de boquete ajoelhado. Depois LEVANTA e MANDA: \"AGORA ME COME.\" Tu come ela. 5 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CHUPA SENTADO — Vai de bike pelado. Uma MULHER aparece com UMA CADEIRA. \"SENTA.\" Tu senta. Ela SE AJOELHA entre tuas pernas e CHUPA teu pau sentado. 3 min. \"RELXA.\" Continua. 3 min. LEVANTA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CHUPA DE QUATRO — Vai de bike pelado. Um HOMEM MANDA: \"DE QUATRO.\" Tu deita. Ele CHUPA teu pau por BAIXO, entre tuas pernas, com tu de quatro. 3 min de boquete invertido. Depois ELE TE COME de quatro. 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CHUPA DE LADO — Vai de bike pelado. Uma MULHER aparece. \"DEITA DE LADO.\" Tu deita. Ela DEITA do teu lado e CHUPA teu pau de lado, os corpos paralelos. 3 min. Depois ELA VIRA e COLOCA o cu na tua cara. \"LAMBE ENQUANTO EU CHUPO.\" 3 min de 69. GOZA na tua boca. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CHUPA CABECA — Vai de bike pelado. Uma MULHER aparece. \"SÓ A CABECINHA.\" Ela CHUPA SÓ a CABECINHA do teu pau — a ponta, sem descer. 3 min de cabecinha na boca. A lingua roda em volta da cabecinha. Teu pau lateja. Depois ELA TIRA. \"JA CHEGA.\" Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CHUPA CABECA 2 — Vai de bike pelado. Um HOMEM aparece. Ele COLOCA SÓ a CABECINHA na boca e CHUPA com pressão suave. 3 min. A cabecinha sensível. Quase gozas. ELE PÁRA. \"EDGING DE CABECINHA.\" Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CHUPA CABECA FUNDO — Vai de bike pelado. Uma MULHER COLOCA a CABECINHA na boca e DEPOIS ENGole o pau INTEIRO de uma vez. 3 min alternando cabecinha e pau inteiro. \"ASSIM QUE EU GOSTO.\" Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CHUPA CABECA LENTA — Vai de bike pelado. Uma MULHER CHUPA SÓ a cabecinha BEM DEVAGAR — a lingua faz circulos na ponta. 3 min de boquete de cabecinha em camera lenta. Depois LEVANTA. \"GUARDA ISSO.\" Vai. Nao goza.",
|
||||||
|
"🔥 PEGO LAMBE CABECA — Vai de bike pelado. Um HOMEM LAMBE a CABECINHA do teu pau com a ponta da lingua — lambidas curtas e rapidas. 3 min de lambidas na cabecinha. Quase gozas. ELE PÁRA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CHUPA CU HOMEM — Vai de bike pelado. Um HOMEM aparece. \"DE QUATRO.\" Tu deita. Ele LAMBE teu CU 3 min — lingua entrando, abrindo. Depois enfia DEDO. 2 min. Depois TE COME. 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CHUPA CU MULHER — Vai de bike pelado. Uma MULHER aparece. \"LAMBE MEU CU.\" Tu lambe o cu dela 3 min. Ela GOZA. Depois ELA LAMBE teu cu. 3 min. Tu quase goza. ELA PARA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO LAMBE CU GRUPO — Vai de bike pelado. DUAS MULHERES e UM HOMEM te veem. ELES MANDAM: \"DE QUATRO.\" ELES LAMBEM teu cu JUNTOS — tres linguas no teu cu. 5 min. CU MAIS LAMBIDO DA VIDA. Depois VAO. Nao goza.",
|
||||||
|
"🔥 PEGO CHUPA CU E PAU — Vai de bike pelado. Uma MULHER CHUPA teu CU enquanto tu CHUPA o PAU de um HOMEM. 3 min de troca. Depois TUDO INVERTE: o homem no teu cu, a mulher na tua boca. 3 min. GOZAM todos. Nao goza.",
|
||||||
|
"🔥 PEGO CHUPA CU CASAL — Vai de bike pelado. Um CASAL te ve. A MULHER LAMBE teu cu. O HOMEM CHUPA teu pau. 3 min. Depois TROCAM. 3 min. OS DOIS GOZAM na sua bunda e boca. VAO. Nao goza.",
|
||||||
|
"🔥 PEGO CHUPA CU DUPLO — Vai de bike pelado. DUAS MULHERES LAMBEM teu cu ao mesmo tempo — uma de cada lado da bunda. 3 min de cu sendo lambido por duas linguas. Depois VAO. Nao goza.",
|
||||||
|
"🔥 PEGO BEBE GOZO GRUPO 2 — Vai de bike pelado. QUATRO HOMENS aparecem. \"AJÖELHA E ABRE A BOCA.\" Os quatro SE MASTURBAM em circulo. O PRIMEIRO GOZA na tua boca. Tu ENGole. O SEGUNDO GOZA na tua boca. Tu ENGole. O TERCEIRO GOZA na tua boca. Tu ENGole. O QUARTO GOZA no teu ROSTO. Tu LIMPA com a lingua. \"BOA MENINA.\" VAO. Nao goza.",
|
||||||
|
"🔥 PEGO BEBE GOZO 5 — Vai de bike pelado. CINCO HOMENS te rodeiam. \"ABRE A BOCA.\" OS CINCO MASTURBAM e GOZAM um por um na tua boca. 5 gozadas. Tu ENGole TUDO. \"FABRICA DE PORRA.\" VAO. Nao goza.",
|
||||||
|
"🔥 PEGO BEBE GOZO MULHER — Vai de bike pelado. TRES MULHERES com CINTARALHO aparecem. \"ABRE A BOCA.\" ELAS SE MASTURBAM e GOZAM na tua boca (o gozo feminino, squirt ou imitacao). Tu ENGole. \"MAMOU.\" VAO. Nao goza.",
|
||||||
|
"🔥 PEGO BEBE GOZO MISTO — Vai de bike pelado. DOIS HOMENS E DUAS MULHERES te rodeiam. OS HOMENS GOZAM na tua boca. AS MULHERES GOZAM no teu rosto. 4 gozadas mistas. Tu ENGole e LAMBE. \"MISTURA PERFEITA.\" VAO. Nao goza.",
|
||||||
|
"🔥 PEGO BEBE GOZO EDGING — Vai de bike pelado. Um HOMEM se MASTURBA na tua frente ate QUASE GOZAR. PÁRA. \"QUER?\" Continua. QUASE GOZA de novo. PÁRA. 3 vezes de edging. Na QUARTA, GOZA na tua boca. Tu ENGole. \"EDGING COMPLETO.\" Vai. Nao goza.",
|
||||||
|
"🔥 PEGO BEBE GOZO LENTO — Vai de bike pelado. Um HOMEM se MASTURBA BEM DEVAGAR na tua frente. Cada movimento lento. 5 min ate GOZAR na tua boca. \"LENTO E GOSTOSO.\" Vai. Nao goza.",
|
||||||
|
"🔥 PEGO BEBE GOZO RAPIDO — Vai de bike pelado. Um HOMEM se MASTURBA RAPIDO — 30 segundos — e GOZA na tua boca. \"RAPIDO E BOM.\" Vai. Nao goza.",
|
||||||
|
"🔥 PEGO GOZO NA CARA — Vai de bike pelado. Um HOMEM aparece. \"ABRE A BOCA.\" Ele GOZA no teu ROSTO — na testa, bochecha, boca. Tu LAMBE o gozo do rosto. \"CARETA DE PUTA.\" Vai. Nao goza.",
|
||||||
|
"🔥 PEGO GOZO NO PEITO — Vai de bike pelado. Um HOMEM GOZA no teu PEITO. Tu PASSA a mao no gozo e LAMBE os dedos. \"LEITE QUENTE.\" Vai. Nao goza.",
|
||||||
|
"🔥 PEGO GOZO NAS COSTAS — Vai de bike pelado. Um HOMEM TE VIRA de costas e GOZA na tua BUNDA. A porra escorre pelas nadegas. Tu PASSA a mao e LAMBE. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO GOZO NOS OVOS — Vai de bike pelado. Um HOMEM GOZA nos teus OVOS (saco). A porra quente no saco. Tu OLHA pra baixo e ve o leite escorrendo. PASSA o dedo e LAMBE. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO GOZO NA BOCA FECHADA — Vai de bike pelado. Uma MULHER MANDA: \"FECHA A BOCA.\" Ela GOZA nos teus LABIOS FECHADOS. A porra escorre pelos labios. \"ABRE.\" Tu abre e ENGole. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO COME CU GRUPO 2 — Vai de bike pelado. TRES HOMENS aparecem. UM TE COME. OUTRO COLOCA na tua boca. O TERCEIRO enfia dedo. 5 min. O PRIMEIRO GOZA no teu cu. O SEGUNDO na tua boca. O TERCEIRO na tua mao. TODOS GOZAM. VAO. Nao goza.",
|
||||||
|
"🔥 PEGO COME CASAL 2 — Vai de bike pelado. Um CASAL te ve. A MULHER CHUPA teu pau. O HOMEM TE COME. 3 min. Depois A MULHER TE COME (cintaralho) enquanto tu COMES O HOMEM. 5 min. OS DOIS GOZAM. VAO. Nao goza.",
|
||||||
|
"🔥 PEGO COME GRUPO 3 — Vai de bike pelado. QUATRO PESSOAS te usam: UMA TE COME, OUTRA NA BOCA, OUTRA DEDA, OUTRA LAMBE. 5 min de sexo quadruplo. TODOS GOZAM. VAO. Nao goza.",
|
||||||
|
"🔥 PEGO COME TUDO — Vai de bike pelado. Uma MULHER TE USA de TODAS AS FORMAS na mesma sessao: CHUPA teu pau, LAMBE teu cu, TE COME, CAVALGA em ti, GOZA na tua boca. 10 min de sexo completo. ELA GOZA VARIAS VEZES. \"TUDO EM UM.\" Vai. Nao goza.",
|
||||||
|
"🔥 PEGO COME DEVAGAR — Vai de bike pelado. Um HOMEM TE COME BEM DEVAGAR — cada bombada leva 5 segundos. 5 min de sexo lento. Cada movimento sentido. Depois ACELERA e GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO COME RAPIDO — Vai de bike pelado. Uma MULHER TE COME RAPIDO (cintaralho) — bombadas rapidas e curtas. 3 min de sexo acelerado. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO COME FORTE — Vai de bike pelado. Um HOMEM TE COME COM FORÇA — bombadas fortes e profundas. Ele segura teu quadril. 3 min de sexo intenso. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO COME SUAVE — Vai de bike pelado. Uma MULHER TE COME SUAVEMENTE (cintaralho) — movimentos delicados, carinhosos. 5 min de sexo suave. GOZA baixinho. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO COME DE QUATRO LENTO — Vai de bike pelado. Um HOMEM TE COME DE QUATRO DEVAGAR — cada bombada lenta. 5 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO COME DE QUATRO RAPIDO — Vai de bike pelado. Uma MULHER TE COME DE QUATRO RAPIDO (cintaralho). 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO COME DE LADO — Vai de bike pelado. Um HOMEM TE COME DE LADO — os dois deitados de lado, ele atras. 5 min de sexo de lado, intimo. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO COME EM PE — Vai de bike pelado. Um HOMEM TE COME EM PE, encostado numa arvore. 5 min de sexo em pe. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO COME SENTADO — Vai de bike pelado. Uma MULHER TE COME SENTADA (cintaralho) — tu sentado no chao, ela montada em ti. 5 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO COME DE BRUCOS — Vai de bike pelado. Um HOMEM TE COME DE BRUÇOS no chao. 5 min de sexo de peito no chao. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO COME DE COSTAS — Vai de bike pelado. Uma MULHER TE COME DE COSTAS (cintaralho) — tu de costas, ela monta virada pro teu pe. 5 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO COME MONTADO — Vai de bike pelado. Tu SOBE numa MULHER e CAVALGA. Ela TE COMEE (cintaralho) por baixo. 5 min de sexo montado. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO COME 69 — Vai de bike pelado. Um HOMEM aparece. VOCES FAZEM 69 — ele chupa teu pau enquanto tu chupa o dele. 5 min de 69. OS DOIS QUASE GOZAM e PARAM. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO COME BUCETA 2 — Vai de bike pelado. Uma MULHER aparece. \"ME COME DE QUATRO.\" Tu come ela de quatro. 5 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO COME BUCETA EM PE — Vai de bike pelado. Uma MULHER aparece. \"ME COME EM PE.\" Tu come ela em pe, encostada numa parede. 5 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO COME BUCETA DEITADO — Vai de bike pelado. Uma MULHER aparece. \"ME COME DEITADA.\" Tu deita ela no chao e come. 5 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO COME BUCETA SENTADO — Vai de bike pelado. Uma MULHER SENTA em ti e CAVALGA. 5 min de sexo sentado. GOZA em cima de ti. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO COME BUCETA DE LADO — Vai de bike pelado. Uma MULHER DEITA DE LADO e tu come ela de lado. 5 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO COME CU HOMEM 2 — Vai de bike pelado. Um HOMEM aparece. \"COME MEU CU.\" Tu come o cu do homem. 5 min. GOZA dentro (com camisinha). Vai. Nao goza.",
|
||||||
|
"🔥 PEGO COME CU HOMEM DE QUATRO — Vai de bike pelado. Um HOMEM DE QUATRO pede: \"ME COME.\" Tu come ele de quatro. 5 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO COME CU HOMEM DE LADO — Vai de bike pelado. Um HOMEM DEITA DE LADO e tu come ele de lado. 5 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO COME CU HOMEM SENTADO — Vai de bike pelado. Um HOMEM SENTA em ti de costas e tu SOBE nele. 5 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CHUPA E COME — Vai de bike pelado. Um HOMEM aparece. \"CHUPA MEU PAU E DEPOIS ME COME.\" Tu chupa ele 2 min. Depois come ele 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CHUPA E COME MULHER — Vai de bike pelado. Uma MULHER aparece. \"LAMBE MEU CU E DEPOIS ME COME.\" Tu lambe o cu dela 2 min. Depois come ela 3 min. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO TUDO EM UM 2 — Vai de bike pelado. Uma MULHER aparece e VOCES FAZEM TUDO: chupa pau, lambe cu, come buceta, come cu, goza na boca. 10 min de sexo completo. GOZA. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CASAL COMPLETO — Vai de bike pelado. Um CASAL aparece. VOCES FAZEM TUDO EM TRIO: chupa pau, lambe cu, come buceta, come cu, goza. 15 min de sexo completo. GOZAM TODOS. Vao. Nao goza.",
|
||||||
|
"🔥 PEGO GRUPO COMPLETO — Vai de bike pelado. QUATRO PESSOAS te usam de todas as formas. 15 min de sexo em grupo. TODOS GOZAM. Vao. Nao goza.",
|
||||||
|
"🔥 PEGO FINAL COMPLETO — Vai de bike pela ULTIMA VEZ. ENCONTRA ALGUEM DISPOSTO. VOCES FAZEM TUDO: boquete, cu, buceta, gozo, tudo. NO FINAL, OS DOIS GOZAM JUNTOS. FIM DA JORNADA. Pode gozar.",
|
||||||
|
"🔥 PEGO DOMINADOR 2 — Vai de bike pelado. Um DOMINADOR aparece com uma CORDA. \"MAOS PROS COSTAS.\" Ele te AMARRA. \"VAI CHUPAR MEU PAU AMARRADO.\" Tu chupa amarrado. 2 min. Depois \"DEITA DE QUATRO.\" Ele te come amarrado. 3 min. GOZA. \"LIBERADO.\" Vai. Nao goza.",
|
||||||
|
"🔥 PEGO DOMINADORA 2 — Vai de bike pelado. Uma DOMINADORA aparece de SALTO e CORDA. \"AJOELHA.\" Tu ajoelha. Ela COLOCA a corda no teu pescoco. \"VAI ANDAR DE QUATRO.\" Tu anda. 2 min. Ela COLOCA O PAU (cintaralho) na tua boca. 2 min. Depois TE COME. 3 min. GOZA. \"CACHORRO.\" Vai. Nao goza.",
|
||||||
|
"🔥 PEGO DOMINADOR CASAL — Vai de bike pelado. Um CASAL DOMINADOR aparece. \"ESCRAVO.\" A MULHER COLOCA coleira. O HOMEM MANDA: \"LAMBE O PÉ DELA.\" Tu lambe. Depois \"CHUPA O PAU DELE.\" Tu chupa. Depois \"ABRE O CU PRA ELA.\" A mulher te come (cintaralho) enquanto o homem COLOCA na tua boca. 5 min. GOZAM. VAO. Nao goza.",
|
||||||
|
"🔥 PEGO SUBMISSAO CASAL — Vai de bike pelado. Um CASAL SUBMISSIVO te VE como MESTRE. ELES SE AJOELHAM. A MULHER: \"MESTRE, POSSO CHUPAR?\" Tu deixa. Ela chupa. O HOMEM: \"MESTRE, POSSO LAMBER?\" Tu deixa. Ele lambe teu cu. 5 min. Depois TU MANDA: \"AGORA SE COMAM.\" Eles transam entre si enquanto tu OLHAS. GOZAM. \"OBRIGADO, MESTRE.\" VAO. Nao goza.",
|
||||||
|
"🔥 PEGO SUBMISSO GRUPO — Vai de bike pelado. TRES SUBMISSIVOS (2 homens, 1 mulher) te VEEM como MESTRE. \"MESTRE.\" ELES SE AJOELHAM. A MULHER CHUPA teu pau. UM HOMEM LAMBE teu cu. O OUTRO HOMEM LAMBE teu pe. 5 min. Depois TU MANDA: \"AGORA VAI EMBORA.\" VAO. Nao goza.",
|
||||||
|
"🔥 PEGO ESCRAVO GRUPO — Vai de bike pelado. QUATRO ESCRAVOS (2 homens, 2 mulheres) te SERVEM. ELES TE LAMBEM, CHUPAM, LAVAM. 10 min de servico completo. O corpo todo cuidado. Depois VAO. Nao goza.",
|
||||||
|
"🔥 PEGO REI — Vai de bike pelado. DUAS MULHERES E UM HOMEM aparecem e TE TRATAM COMO REI. ELES TE DEITAM, TE MASSAGEIAM, TE LAMBEM, TE CHUPAM. 10 min de tratamento real. TUDO EM VOCE. Depois VAO. Nao goza.",
|
||||||
|
"🔥 PEGO DEUS — Vai de bike pelado. TRES PESSOAS TE VEEM e TE ADORAM. ELAS SE AJOELHAM. \"DEUS.\" ELAS LAMBEM teus pés, teu pau, teu cu. 10 min de adoracao. Depois \"DEUS, PODE IR.\" Tu vai. Nao goza.",
|
||||||
|
"🔥 PEGO GRUPO FINAL — Vai de bike pelado. CINCO PESSOAS te ENCONTRAM e te USAM de TODAS AS FORMAS. Uma chupa, uma lambe, uma deda, uma come, uma beija. 15 min de sexo em grupo total. TODOS GOZAM. VAO. Nao goza.",
|
||||||
|
"🔥 PEGO APOTEOSE — Vai de bike pelado pela ULTIMA VEZ. ENCONTRA UM GRUPO DISPOSTO. TODOS TE USAM, TE CHUPAM, TE COME, TE LAMBEM, GOZAM EM TI. 20 min de apoteose sexual. NO FINAL, VOCE GOZA TAMBEM. TODOS GOZAM JUNTOS. FIM DA JORNADA. Pode gozar, seu puto livre.",
|
||||||
|
"🔥 PEGO AMIGA CHUPA — Vai de bike pelado. UMA AMIGA aparece. \"AMIGA, QUE PAU.\" Ela CHUPA teu pau 3 min. \"AMIGA CHUPA AMIGO.\" Vai. Nao goza.",
|
||||||
|
"🔥 PEGO AMIGO CHUPA — Vai de bike pelado. UM AMIGO aparece. \"MANO, DEIXA EU VER.\" Ele CHUPA teu pau 3 min. \"AMIGO CHUPA AMIGO.\" Vai. Nao goza.",
|
||||||
|
"🔥 PEGO VIZINHA CHUPA — Vai de bike pelado. A VIZINHA aparece. \"VIZINHO.\" Ela CHUPA 3 min. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO VIZINHO CHUPA — Vai de bike pelado. O VIZINHO aparece. \"VIZINHO.\" Ele CHUPA 3 min. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO PRIMA CHUPA — Vai de bike pelado. A PRIMA aparece. \"PRIMA.\" Ela CHUPA 3 min. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO PRIMO CHUPA — Vai de bike pelado. O PRIMO aparece. \"PRIMO.\" Ele CHUPA 3 min. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO IRMAO CHUPA — Vai de bike pelado. O IRMAO aparece. \"MANO.\" Ele CHUPA 3 min. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO IRMA CHUPA — Vai de bike pelado. A IRMA aparece. \"MANA.\" Ela CHUPA 3 min. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO TIA CHUPA — Vai de bike pelado. A TIA aparece. \"TIA.\" Ela CHUPA 3 min. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO TIO CHUPA — Vai de bike pelado. O TIO aparece. \"TIO.\" Ele CHUPA 3 min. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO AVO CHUPA — Vai de bike pelado. A AVO aparece. \"VOVO.\" Ela CHUPA 3 min. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO VOVO CHUPA — Vai de bike pelado. O VOVO aparece. \"VOVO.\" Ele CHUPA 3 min. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO PADRASTO CHUPA — Vai de bike pelado. O PADRASTO aparece. Ele CHUPA 3 min. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO MADRASTA CHUPA — Vai de bike pelado. A MADRASTA aparece. Ela CHUPA 3 min. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO SOGRA CHUPA — Vai de bike pelado. A SOGRA aparece. Ela CHUPA 3 min. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO SOGRO CHUPA — Vai de bike pelado. O SOGRO aparece. Ele CHUPA 3 min. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CUNHADA CHUPA — Vai de bike pelado. A CUNHADA aparece. Ela CHUPA 3 min. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO CUNHADO CHUPA — Vai de bike pelado. O CUNHADO aparece. Ele CHUPA 3 min. Vai. Nao goza.",
|
||||||
|
"🔥 PEGO FINAL TOTAL — Vai de bike pela ULTIMA VEZ. ACONTECE TUDO: aparece alguem, chupa, come, lambe, bebe gozo, domina, submete, tudo. 10 min de sexo final. PODE GOZAR. FIM. Pode gozar.",
|
||||||
|
"🔥 PEGO FIM MESMO — Vai de bike pela ULTIMA VEZ. Encontra UMA PESSOA. Faz TUDO. GOZA JUNTO. FIM DA JORNADA DE PUTA. Pode gozar."
|
||||||
|
]
|
||||||
+102
@@ -0,0 +1,102 @@
|
|||||||
|
[
|
||||||
|
"🔥 DOMINADO JANELA — Vai ate a janela do quarto, abre BEM. Tira TUDO e FICA de QUATRO de FRENTE pra janela, cu exposto pro mundo. ASSIM, nessa posicao de puta, tu BATE UMA PUNHETA RAPIDA ate QUASE GOZAR. PARA no limite. 3 vezes de edging exposto na janela. Se alguem PASSAR e TE VER, tu NAO PODE SAIR DA POSICAO. Tem que ficar de cu exposto ate o final. Depois FECHA a janela e massageia a cabecinha. Nao goza, seu puto dominado pela janela.",
|
||||||
|
"🔥 DOMINADO ESCRAVO — Fica PELADO de QUATRO no centro da sala. IMAGINA que tem UM MESTRE ou MESTRA te OLHANDO. Tu PRECISA pedir PERMISSAO pra tudo. 'MESTRE, POSSO TOCAR NO MEU PAU?' Espera 10 segundos imaginando a resposta. 'MESTRE, POSSO GOZAR?' Espera 10 segundos. O MESTRE NAO RESPONDE. Tu NAO PODE GOZAR. 5 min de joelhos de quatro esperando ordens. Depois levanta e veste. Nao goza, escravo.",
|
||||||
|
"🔥 DOMINADO COLETIVA — Senta PELADO no chao, PERNAS ABERTAS. BATE UMA PUNHETA ENQUANTO FALA EM VOZ ALTA: 'SOU UMA PUTA, SOU UM CACHORRO, MERECO SER PUNIDO.' Repete ISSO por 3 minutos enquanto bate punheta. Chega PERTO de gozar e PARA. 3 edgings com punicao verbal. No final, tu NAO GOZA e ainda TEM QUE PEDIR DESCULPA. 'DESCULPA, MESTRE.' Nao goza, sua puta arrependida.",
|
||||||
|
"🔥 DOMINADO TAPA NA CARA — Fica em PE PELADO na frente do espelho. OLHA nos teus OLHOS. BATE no teu proprio ROSTO 5 VEZES — tapas LEVES mas firmes — enquanto FALA: 'SOU PUTA, SOU SUBMISSO.' 5 tapas. Cada tapa uma declaracao. Depois BATE no teu PAU 10 VEZES com a ponta dos dedos. Cada tapa: 'ISSO E PORQUE SOU PUTA.' 10 tapas no pau. Depois alisa a cabecinha com carinho. Nao goza, sua puta castigada.",
|
||||||
|
"🔥 DOMINADO URINA — Vai pro BANHEIRO, tira TUDO. Fica de CÓCORAS no box e URINA na tua propria PERNA. O mijo quente escorrendo pela coxa. Depois PASSA a MAO no mijo e PASSA na tua boca — gosto de urina de puta. 2 min de humilhacao urinaria. Depois TOMA BANHO. Nao goza.",
|
||||||
|
"🔥 DOMINADO CACHORRO — Fica PELADO de QUATRO no chao. COLOCA uma CORDA ou CINTA no pescado como COLEIRA. ANDA DE QUATRO pela casa 5 MINUTOS — sala, corredor, cozinha, quarto. Cada comodo e uma estacao. Na SALA, para e late 3 vezes. Na COZINHA, cheira o chao. No QUARTO, abre o cu pro mestre. 5 min de cachorro humano. No final, deita de quatro e descansa. Nao goza, seu cachorro.",
|
||||||
|
"🔥 DOMINADO RUINED — Senta na cama ou cadeira PELADO. BATE PUNHETA RAPIDO ate sentir o GOZO VINDO — aquele aperto na base, o liquidinho escorrendo. NO EXATO MOMENTO DE GOZAR, TU SOLTA O PAU. A porra JORRA SOZINHA sem a mao — um RUINED ORGASM. O gozo escorre sem prazer. Tu assiste a porra espirrando sem controle. Depois LAMBE a mao suja. Pode gozar — mas foi RUINED, seu puto.",
|
||||||
|
"🔥 DOMINADO RUINED 2 — Senta pelado. BATE PUNHETA ate QUASE GOZAR. SOLTA O PAU. Espera 10 segundos. RECOMECA. BATE de novo ate QUASE GOZAR. SOLTA de novo. 3 VEZES de quase-lancamento. Na QUARTA, tu VAI GOZAR mas QUANDO GOZAR, tu NAO PODE SEGURAR O PAU — deixa ele GOZAR SOZINHO. Ruined orgasm quadruplo. Depois limpa a porra do chao. Pode gozar — ruined.",
|
||||||
|
"🔥 DOMINADO RUINED 3 — Vai de QUATRO no chao. BATE PUNHETA ENTRE AS PERNAS, por baixo. BATE RAPIDO ate QUASE GOZAR. 'O MESTRE NAO DEIXA.' SOLTA. BATE de novo. QUASE GOZA. SOLTA. 5 VEZES de edging de quatro. Na quinta, o MESTRE MANDA: 'PODE GOZAR AGORA, PUTA.' Tu GOZA de quatro, a porra no chao. Ruined liberado. Pode gozar, escravo.",
|
||||||
|
"🔥 DOMINADO NOME — Coloca uma ETIQUETA ou PAPEL com 'PUTA' escrito no peito. Fica PELADO em PE no espelho. REPETE EM VOZ ALTA: 'MEU NOME E PUTA.' 20 vezes. Cada vez mais ALTO. No final, GRITA: 'SOU PUTA!' BATE UMA punheta RAPIDA ate GOZAR na mao e MOSTRA a porra pra ti no espelho: 'ISSO E PROVA QUE SOU PUTA.' Pode gozar, sua puta.",
|
||||||
|
"🔥 DOMINADO ESCRAVO 2 — Vai ate a AREA DE SERVICO. Tira TUDO. PEGA a VASSOURA e VARRE a area de servico PELADO de QUATRO. 5 min varrendo de quatro. Cada varrida, o pau balanca, a bunda aparece. Depois GUARDA a vassoura e FICA de QUATRO imovel esperando ordens. Nao goza, seu escravo da vassoura.",
|
||||||
|
"🔥 DOMINADO HUMILHADO — Senta PELADO no chao, PERNAS ABERTAS. OLHA pra BAIXO pro teu pau e FALA: 'ISSO E UM PAU DE PUTA.' BATE UMA na cabecinha: 'ISSO E UMA CABECINHA DE PUTA.' BATE no SACO: 'ISSO E SACO DE PUTA.' 5 min de humilhacao corporal. Depois ALISA a cabecinha com CARINHO e PEDE PERDAO. Nao goza, sua puta humilhada.",
|
||||||
|
"🔥 DOMINADO CACHORRO 2 — Fica de QUATRO PELADO. COLOCA uma TIGELA de AGUA no chao. BEBE agua da TIGELA como CACHORRO — sem maos, so a lingua. 1 minuto bebendo igual cachorro. Depois late 5 vezes. Abana o rabo imaginario. 5 min de vida de cao. Depois deita no chao de quatro. Nao goza, seu cachorro de estimacao.",
|
||||||
|
"🔥 DOMINADO MAOS PRESAS — Pega uma CORDA, CINTO ou GRAVATA. AMARRA as proprias MAOS nas COSTAS — frouxo pra nao machucar, mas firme. Fica em PE PELADO de maos presas atras. 3 MINUTOS de imobilidade. O pau duro, sem poder tocar. Depois AJOELHA de maos presas. Mais 2 min. Depois DESAMARRA e massageia os pulsos. Nao goza, seu puto preso.",
|
||||||
|
"🔥 DOMINADO CABECA BAIXA — Fica PELADO em PE, MAOS na CABECA, COTOVELOS pra tras, CABECA BAIXA olhando pro chao. 3 MINUTOS nessa posicao de submissao. O peito aberto, o pau exposto, a cabeca baixa. Sem se MEXER. Depois OLHA pro espelho e VE a posicao. Mais 2 min. Nao goza, seu puto submisso.",
|
||||||
|
"🔥 DOMINADO CONTAGEM — Fica de QUATRO PELADO. BATE na propria BUNDA 30 VEZES com a MAO ABERTA, CONTANDO EM VOZ ALTA. 'UM - SOU PUTA.' Ate 30. Cada tapa uma declaracao. A bunda vai ficar VERMELHA. Depois dos 30, massageia a bunda. 3 SERIES DE 30 — total 90 TAPAS. Nao goza, sua puta apanhando.",
|
||||||
|
"🔥 DOMINADO CASTIGO — Fica em PE PELADO. BATE no TEU PROPRIO PAU 30 VEZES com a palma da mao — tapas secos na haste e na cabecinha. 2 minutos de pau apanhando. O pau fica roxo e dolorido. Depois ALISA com CARINHO. Nao goza, sua puta castigada.",
|
||||||
|
"🔥 DOMINADO EDGING TOTAL — Senta PELADO. BATE PUNHETA ate QUASE GOZAR. PARA. 5 SEGUNDOS. RECOMECA. 10 VEZES de edging. Cada vez chega MAIS PERTO. Na decima, o MESTRE diz: \"PODE GOZAR.\" Tu GOZA na sua propria mao, gemendo alto. Pode gozar, escravo obediente.",
|
||||||
|
"🔥 DOMINADO ORGASMO MULTIPLO — Senta PELADO. BATE PUNHETA RAPIDO ate GOZAR. NAO PARA. Continua batendo DEPOIS de gozar — o pau SENSIVEL, dolorido, mas tu CONTINUA. BATE ate GOZAR DE NOVO. 2 GOZADAS SEGUIDAS. Depois cai pra tras de exausto. Pode gozar duas vezes, seu puto esgotado.",
|
||||||
|
"🔥 DOMINADO TRIPLO — Senta PELADO. BATE PUNHETA ate GOZAR. NAO PARA. Continua batendo. GOZA DE NOVO. Continua. GOZA DE NOVO. 3 GOZADAS SEGUIDAS. O pau lateja, doi, mas tu obedece. 3 gozadas de escravo. Depois deita no chao de exausto. Pode gozar tres vezes, seu puto leiteiro.",
|
||||||
|
"🔥 DOMINADO QUADRUPLO — Senta PELADO. BATE punheta ate GOZAR. Continua. GOZA. Continua. GOZA. Continua. GOZA. 4 GOZADAS SEGUIDAS. O pau ja nao tem mais leite, mas tu continua ate a quarta. Depois CAI no chao, gemendo, o pau dolorido. Pode gozar quatro vezes, seu puto sem limite.",
|
||||||
|
"🔥 DOMINADO LIMITE — Senta PELADO. BATE punheta ate GOZAR. GOZA. GOZA. GOZA. GOZA. GOZA. 5 GOZADAS. O corpo treme, o pau sensivel, mas tu vai ate a quinta. Depois desmaia (de brincadeira) no chao. 5 gozadas de escravo extremo. Pode gozar, seu puto louco.",
|
||||||
|
"🔥 DOMINADO NEGADO — Senta PELADO. BATE PUNHETA ate GOZAR e NAO PARA — continua batendo DEPOIS do gozo, a cabecinha super sensivel, dolorida. 30 SEGUNDOS de pos-orgasmo estimulado. O pau doi mas tu aguenta. Depois PARA e gemia de alivio. Pode gozar, mas com castigo pos-orgasmo.",
|
||||||
|
"🔥 DOMINADO NEGADO 2 — Senta PELADO. BATE PUNHETA LENTA ate QUASE GOZAR. O MESTRE MANDA: \"SEGURA.\" Tu SEGURA. 30 segundos parado. \"CONTINUA.\" Tu continua lento. QUASE GOZA. \"SEGURA.\" 30 segundos. 10 VEZES de edging e segurar. Cada vez mais dificil. No final, NAO GOZA. \"GUARDA PRA PROXIMA.\" Nao goza, puta negada.",
|
||||||
|
"🔥 DOMINADO BOCA SUJA — Senta PELADO na frente do espelho. OLHA nos teus OLHOS e FALA PUTARIA EM VOZ ALTA por 3 MINUTOS SEM PARAR. \"Eu sou uma puta nojenta, eu mereco porra na cara, eu quero ser arrombado, meu cu e de todo mundo, meu pau e um brinquedo.\" 3 min ininterruptos. Depois BATE punheta ate GOZAR na mao e LAMBE. Pode gozar, puta faladeira.",
|
||||||
|
"🔥 DOMINADO PALAVRAO — Cada vez que bater uma punheta, FALA UM PALAVRAO DIFERENTE. 15 PALAVROES, 15 BOMBADAS. \"CARALHO, PORRA, BUCETA, CU, PAU, PUTA, VADIA, RAPARIGA, PROSTITUTA, VAGABUNDA, SEM-VERGONHA, LOUCA, SAFADA.\" 15 bombadas-palavrao. GOZA no final. Pode gozar, dicionario de puta.",
|
||||||
|
"🔥 DOMINADO REBOLA — Fica de QUATRO PELADO. REBOLA 50 VEZES contando ALTO. 'UM, DOIS, TRES...' Ate 50. Depois BATE na BUNDA 50 VEZES. Ate 50. Depois BATE PUNHETA ate GOZAR. 50 reboladas + 50 tapas + 1 gozada. Pode gozar, sua puta cansada.",
|
||||||
|
"🔥 DOMINADO EXERCICIO — Fica PELADO e faz 20 FLEXOES. A cada descida, o pau bate no chao. Depois 20 AGACHAMENTOS — o pau aponta pro chao a cada descida. Depois BATE PUNHETA de RECOMPENSA ate GOZAR. Pode gozar, sua puta fitness.",
|
||||||
|
"🔥 DOMINADO SERVICO — Vai PELADO ate a AREA DE SERVICO. PEGA o balde e o pano. LAVA O CHAO PELADO de QUATRO com o pano — cada passada de pano, a bunda no ar. 5 min de faxina pelado. Depois GUARDA o balde e BATE punheta ate GOZAR. Pode gozar, escravo da faxina.",
|
||||||
|
"🔥 DOMINADO COZINHA — Vai PELADO ate a COZINHA. PREPARA um ovo ou sanduiche pelado. DEPOIS senta na mesa pelado e COME pelado. BATE punheta DEPOIS de comer ate GOZAR. Pode gozar, escravo da cozinha.",
|
||||||
|
"🔥 DOMINADO JARDIM — Vai PELADO pro JARDIM ou QUINTAL. PLANTA ou CUDA das plantas PELADO — a terra nas maos, o pau balancando. 5 min de jardin pelado. Depois BATE punheta ao ar livre ate GOZAR na terra. Pode gozar, escravo do jardim.",
|
||||||
|
"🔥 DOMINADO LAVAGEM — Vai pro BANHEIRO, tira TUDO. TOMA UMA DUCHA FRIA PELADO — 3 min de agua gelada no corpo. Depois se SECA e faz 5 MINUTOS de EDGING — quase goza, para, quase goza, para. 5 edgings pos-ducha. Nao goza.",
|
||||||
|
"🔥 DOMINADO GELO 2 — Pega um cubo de GELO. Vai pro quarto pelado. Passa o GELO no teu CORPO — peito, barriga, coxas, pau, cu. 3 min de gelo no corpo. Depois BATE punheta RAPIDA com a mao fria ate GOZAR. Pode gozar, puta gelada.",
|
||||||
|
"🔥 DOMINADO CERA — Acende uma VELA. Fica PELADO. Deixa cair UMA GOTA DE CERA QUENTE na tua COXA. CHOQUE. Espera 10 segundos. Outra gota. 5 GOTAS de cera no corpo. A marca vermelha de puta. Depois BATE punheta ate GOZAR. Pode gozar, puta marcada.",
|
||||||
|
"🔥 DOMINADO CORDA — Pega uma CORDA ou CINTO. AMARRA o pau na base — firme mas frouxo pra nao machucar. BATE punheta com o pau AMARRADO. 3 min de pau amarrado. Depois SOLTA e o sangue CORRE. GOZA na hora. Pode gozar, puta amarrada.",
|
||||||
|
"🔥 DOMINADO SACO AMARRADO — Pega uma CORDA ou ELASTICO. AMARRA o SACO na base — os ovos presos. BATE punheta com o saco amarrado. 3 min. Depois SOLTA e GOZA. Pode gozar, puta de ovos presos.",
|
||||||
|
"🔥 DOMINADO ARDOR — Passa CREME DENTAL no PAU INTEIRO e no SACO. A pasta ARDE, QUEIMA. 2 min de ardor. O pau encolhe e depois fica duro de novo. BATE punheta COM CREME DENTAL. GOZA com ardor. Pode gozar, puta ardida.",
|
||||||
|
"🔥 DOMINADO OLEO — Passa OLEO DE COZINHA no corpo inteiro — brilha todo. Fica PELADO de OLEO 5 min. O corpo brilhando, o pau oleoso. Depois BATE punheta oleosa ate GOZAR. Pode gozar, puta oleosa.",
|
||||||
|
"🔥 DOMINADO LAMA — Vai pro QUINTAL. PEGA LAMA ou BARRO e PASSA no CORPO. Fica SUJO de lama pelado. 5 min de corpo lamacento. Depois BATE punheta LAMACENTA — a mao suja de barro no pau. GOZA na lama. Pode gozar, puta de barro.",
|
||||||
|
"🔥 DOMINADO MEL — Passa MEL no pau e no cu. 2 min de corpo lambido (por tu mesmo). Depois BATE punheta PEGAJOSA com mel ate GOZAR. Pode gozar, puta melada.",
|
||||||
|
"🔥 DOMINADO ESCRAVAO — Fica PELADO de JOELHOS no chao, MAOS pra tras, CABECA BAIXA. 5 min na posicao escravao. Sem se mexer, gemendo baixinho. Depois BATE punheta RAPIDA ate GOZAR enquanto esta de joelhos. Pode gozar, escravao completo.",
|
||||||
|
"🔥 DOMINADO VASSOURA — Pega a VASSOURA e poe entre as PERNAS — o CABO encostando no cu. BATE PUNHETA montado na vassoura, o cabo no cu. 3 min de vassourada. GOZA. Pode gozar, puta da vassoura.",
|
||||||
|
"🔥 DOMINADO TRAVESSEIRO — Coloca o TRAVESSEIRO no chao. Monta ENCARANDO o travesseiro. BATE PUNHETA enfiando o pau no travesseiro. 3 min de sexo com travesseiro. GOZA no travesseiro. Pode gozar, puta do travesseiro.",
|
||||||
|
"🔥 DOMINADO LUZ — Apaga a LUZ, escuro TOTAL. BATE PUNHETA no ESCURO 3 min. Depois ACENDE a luz e VE o pau pulsando. 3 edgings no escuro. Nao goza.",
|
||||||
|
"🔥 DOMINADO VENDA — VENDA os olhos. BATE PUNHETA de OLHOS VENDADOS 5 min — sem ver, so sentindo. A cada 30 segundos, o MESTRE pergunta: \"TA PERTO?\" Tu responde: \"SIM, MESTRE.\" Mas o MESTRE NAO DEIXA GOZAR. Nao goza, puta vendada.",
|
||||||
|
"🔥 DOMINADO RELOGIO — Poe um RELOGIO ou CELULAR na frente. BATE PUNHETA por 10 MINUTOS EXATOS sem parar. 10 min de punheta cronometrada. GOZA no minuto 10. Pode gozar, puta de resistencia.",
|
||||||
|
"🔥 DOMINADO AGUA — Enche a PIA ou uma bacia com AGUA FRIA. Coloca o PAU na agua FRIA enquanto BATE PUNHETA. 3 min de pau na agua fria. GOZA dentro da agua. Pode gozar, puta aquatico.",
|
||||||
|
"🔥 DOMINADO ESCADA 2 — Vai PELADO ate a ESCADA. Senta num degrau e BATE PUNHETA. A cada BOMBADA, sobe ou desce UM DEGRAU. 20 bombadas subindo e descendo. GOZA no TOPO. Pode gozar, puta de escada.",
|
||||||
|
"🔥 DOMINADO QUARTO ESCURO — Vai pro QUARTO, apaga a luz. Fecha a PORTA. Escuro TOTAL. AJOELHA no meio do quarto no escuro. BATE PUNHETA no escuro imaginando que TEM ALGUEM te OLHANDO. 5 min de punheta imaginaria. GOZA no escuro. Pode gozar, puta imaginaria.",
|
||||||
|
"🔥 DOMINADO BRAÇO — BATE PUNHETA SO com o BRAÇO ESQUERDO (se destro) ou DIREITO (se canhoto). 3 min. Depois TROCA pro braço dominante. Sente a diferenca. GOZA com a mao torta. Pode gozar, puta torta.",
|
||||||
|
"🔥 DOMINADO PALMA — BATE PUNHETA SO com a PALMA da mao — sem os dedos, so a palma na haste. 3 min. Depois com a mao NORMAL. GOZA. Pode gozar, puta de palma.",
|
||||||
|
"🔥 DOMINADO PUNHO — Enfia O PUNHO (ou 4 dedos) no CU, bem devagar com lubrificante. 2 min de punho anal (ou 4 dedos). Depois TIRA e BATE PUNHETA com a mao que tava no cu. GOZA. Pode gozar, puta do punho.",
|
||||||
|
"🔥 DOMINADO PLUG FINAL — Enfia O PLUG GROSSO no CU. BATE PUNHETA com o PLUG dentro — 5 min de plug + punheta. GOZA com plug enterrado. Pode gozar, puta plugada.",
|
||||||
|
"🔥 DOMINADO FINAL ORGASMO — BATE PUNHETA ate GOZAR e GRITA O NOME DO MESTRE quando GOZAR. 'MESTRE!' O nome ecoa. Pode gozar, escravo fiel.",
|
||||||
|
"🔥 DOMINADO FINAL HUMILHACAO — Depois de GOZAR, PASSA a PORRA na CARA. Esfrega o semen no rosto. 1 minuto com a cara suja de porra. OLHA no espelho. Depois LAMBE os dedos e limpa. Pode gozar, puta suja.",
|
||||||
|
"🔥 DOMINADO FINAL LAMBE — Depois de GOZAR na MAO, LAMBE CADA DEDO com a lingua — dedo por dedo. O gosto da porra. Pode gozar, puta lambedeira.",
|
||||||
|
"🔥 DOMINADO FINAL ARREPENDIDO — Depois de GOZAR, AJOELHA e PEDE DESCULPA em VOZ ALTA. 'DESCULPA, MESTRE, POR SER TAO PUTA.' 1 minuto de desculpas. Depois deita de bruços no chao de exausto. Pode gozar, escravo arrependido.",
|
||||||
|
"🔥 DOMINADO QUINTAL GRITO — Vai PELADO pro QUINTAL. GRITA \"SOU UMA PUTA!\" 3 vezes. Depois BATE PUNHETA no quintal e GOZA na grama. Pode gozar, puta gritadeira.",
|
||||||
|
"🔥 DOMINADO PORTA ABERTA — Deixa a PORTA da frente ou do quarto ABERTA. Fica PELADO perto da porta semi-exposto. BATE PUNHETA com perigo de alguem VER. 3 min. GOZA com o perigo. Pode gozar, puta desprotegida.",
|
||||||
|
"🔥 DOMINADO BIKE — Vai de BIKE PELADO pra lugar deserto. DESCE e BATE PUNHETA em PE ao lado da bike. Depois GOZA pro mato. Pode gozar, puta de bike.",
|
||||||
|
"🔥 DOMINADO CAMINHADA — Vai pra lugar DESERTO. Tira TUDO. CAMINHA PELADO 2 min. DEPOIS AJOELHA no chao NU e BATE PUNHETA. GOZA no chao. Pode gozar, puta de joelhos na terra.",
|
||||||
|
"🔥 DOMINADO FINAL TOTAL — Fica PELADO no centro do quarto. FAZ TUDO: bate na cara, edging, ruined, goza de novo, lambe, pede desculpa. 10 min de dominacao completa. GOZA QUANTAS VEZES AGUENTAR. Pode gozar, puta completa.",
|
||||||
|
"🔥 DOMINADO EDGING NEGADO — Senta PELADO. BATE punheta lenta ate quase gozar. O mestre MANDA parar. 10x edging. Na ultima, o mestre diz: \"NAO GOZA HOJE.\" Nao goza, guarda pra amanha.",
|
||||||
|
"🔥 DOMINADO EDGING PREMIO — BATE punheta ate quase gozar 5x. Na quinta, o mestre MANDA GOZAR. GOZA na mao. \"PREMIO POR OBEDIENCIA.\" Pode gozar, escravo premiado.",
|
||||||
|
"🔥 DOMINADO RUINED FINAL — BATE punheta ate sentir o gozo. NO MOMENTO DE GOZAR, ABRE A MAO. A porra jorra sem direcao, no chao, na perna, em tudo. Ruined total. Depois limpa com a lingua. Pode gozar — ruined.",
|
||||||
|
"🔥 DOMINADO RUINED MAMA — BATE punheta rapido ate gozar. NA HORA DE GOZAR, LEVA A BOCA. GOZA na propria boca. O gosto da propria porra. Engole. Ruined que virou mama. Pode gozar, puta que mama o proprio leite.",
|
||||||
|
"🔥 DOMINADO RUINED GRUPO — BATE punheta imaginando 3 mestres mandando. QUASE GOZA. SEGURA. QUASE GOZA. SEGURA. Na terceira, GOZA SOZINHO. Ruined triplo. Pode gozar.",
|
||||||
|
"🔥 DOMINADO HUMILHACAO MAXIMA — Fica de QUATRO PELADO na frente do espelho. OLHA tua bunda no espelho e FALA: \"ESSE CU E DE PUTA.\" Enfia o DEDO no cu e FALA: \"ESSE CU MERECE PAU.\" 3 min de auto-humilhacao. Depois BATE punheta de quatro. GOZA. Pode gozar.",
|
||||||
|
"🔥 DOMINADO HUMILHACAO VERBAL — Senta PELADO. REPETE 20 VEZES: \"SOU UMA MERDA, SOU UM LIXO, SOU UMA PUTA.\" 20 vezes. Cada vez mais alto. Depois BATE punheta ate GOZAR. Pode gozar, lixo.",
|
||||||
|
"🔥 DOMINADO HUMILHACAO FISICA — Fica em PE PELADO. BATE na propria cara 10x leve. Depois BATE no proprio pau 10x. Depois BATE na propria bunda 10x. 30 tapas no total. Depois BATE punheta ate GOZAR. Pode gozar, saco de pancada.",
|
||||||
|
"🔥 DOMINADO MESTRE IMAGINARIO — Fica PELADO de JOELHOS. IMAGINA um MESTRE na tua frente. FALA COM ELE: \"MESTRE, OBRIGADO POR ME HUMILHAR. MESTRE, MERECO SEU CASTIGO. MESTRE, ME FAZ DE PUTA.\" 5 min conversando com o mestre imaginario. Depois BATE punheta ate GOZAR na mao e oferece: \"MESTRE, ACEITA MEU GOZO?\" Pode gozar, escravo imaginario.",
|
||||||
|
"🔥 DOMINADO MESTRA IMAGINARIA — Fica PELADO de JOELHOS. IMAGINA uma MESTRA. \"MESTRA, MEUSA DONA. MESTRA, PISA EM MIM. MESTRA, ME FAZ DE CACHORRO.\" 5 min de devocao a mestra. Depois BATE punheta e GOZA na mao. \"MESTRA, ACEITA?\" Pode gozar.",
|
||||||
|
"🔥 DOMINADO PEDIDO — Fica PELADO de JOELHOS. PEDE EM VOZ ALTA: 'MESTRE, ME DEIXA GOZAR. MESTRE, POR FAVOR.' 30 segundos pedindo. 'MESTRA, ME LIBERTA.' 30 segundos. Depois O MESTRE CONCEDE e tu GOZA. Pode gozar, escravo que pediu.",
|
||||||
|
"🔥 DOMINADO PERDAO — Fica PELADO. FAZ 10 FLEXOES enquanto FALA: 'PERDAO, MESTRE.' 10 flexoes. Depois 10 AGACHAMENTOS: 'PERDAO, MESTRA.' Depois BATE punheta ate GOZAR: 'PERDAO POR GOZAR.' Pode gozar.",
|
||||||
|
"🔥 DOMINADO OFERENDA — BATE PUNHETA ate GOZAR na MAO. DEPOIS, de JOELHOS, COLOCA a mao com gozo no chao como OFERENDA. \"MESTRE, ACEITA MEU GOZO COMO OFERENDA.\" Fica de joelhos 1 minuto com a oferenda. Depois limpa. Pode gozar, escravo ofertante.",
|
||||||
|
"🔥 DOMINADO MARCA — Depois de GOZAR, USA o gozo pra ESCREVER \"PUTA\" na tua propria barriga com o dedo. 1 minuto com \"PUTA\" escrito em porra na barriga. Depois TIRA FOTO (se quiser). Depois limpa. Pode gozar, puta marcada a leite.",
|
||||||
|
"🔥 DOMINADO COROA — BATE PUNHETA ate GOZAR. ENQUANTO GOZA, GRITA: \"MESTRE, MESTRE, MESTRE!\" 3 gritos de mestre enquanto goza. Pode gozar, escravo que chama o mestre no clímax.",
|
||||||
|
"🔥 DOMINADO LIMPEZA — Depois de GOZAR, LAMBE A PROPRIA PORRA da mao com a lingua — devagar, sentindo cada gota. Depois PERGUNTA: 'MESTRE, ESTOU LIMPO?' Se o mestre DISSER QUE NAO, tu LAMBE DE NOVO. Pode gozar, puta que se limpa lambendo.",
|
||||||
|
"🔥 DOMINADO CASTIGO MAXIMO — BATE PUNHETA ate GOZAR. Depois, IMEDIATAMENTE, enfia o DEDO no CU e LAMBE o dedo. Ciclo: goza, dedo no cu, lambe. 2 VEZES seguidas. O gozo + o cu + a lingua. Tudo junto. Pode gozar duas vezes, escravo completo.",
|
||||||
|
"🔥 DOMINADO DUCHA ARDENTE — BATE PUNHETA ate GOZAR. Depois, SEM LIMPAR, VAI PRO BANHEIRO e TOMA UMA DUCHA QUENTE. A agua quente no pau pos-gozo — dolorido mas bom. 2 min de ducha pos-orgasmo. Ja gozou, pode limpar.",
|
||||||
|
"🔥 DOMINADO EDGING ARDOR — Passa CREME DENTAL no pau e BATE PUNHETA com a pasta ardendo. QUASE GOZA. PARA. A pasta arde mais quando para. BATE de novo. QUASE GOZA. PARA. 5 edgings com creme dental ardendo. Depois LAVA. NAO GOZA.",
|
||||||
|
"🔥 DOMINADO EDGING GELO — Passa GELO no pau e BATE PUNHETA com a mao gelada. QUASE GOZA. PARA. Passa mais gelo. BATE. QUASE GOZA. PARA. 5 edgings gelados. NAO GOZA.",
|
||||||
|
"🔥 DOMINADO FINAL FELIZ — Depois de TUDO, deita PELADO na cama. FAZ UM AGRADECIMENTO: 'OBRIGADO, MESTRE, POR ME DOMINAR.' Depois GOZA EM PAZ. Pode gozar, puta grata.",
|
||||||
|
"🔥 DOMINADO CADEIRA — Senta NU numa CADEIRA, PERNAS ABERTAS. AMARRA os pulsos nos braços da cadeira com cinto ou corda (frouxo). Fica PRESO na cadeira pelado. BATE PUNHETA ASSIM, preso, por 3 min. GOZA preso. Pode gozar, escravo preso na cadeira.",
|
||||||
|
"🔥 DOMINADO CAMA — DEITA NU na cama. AMARRA os pulsos na cabeceira com cinto ou corda (frouxo). Fica PRESO na cama. BATE PUNHETA deitado de pulsos presos. 5 min. GOZA preso. Pode gozar, escravo amarrado na cama.",
|
||||||
|
"🔥 DOMINADO CURVA — Fica CURVADO, maos no chao, BUNDA PRO ALTO. BATE PUNHETA ENTRE AS PERNAS, nessa posicao. 5 min de punheta curvado. GOZA entre as pernas. Pode gozar, puta curvada.",
|
||||||
|
"🔥 DOMINADO PONTA — BATE PUNHETA SO NA CABECINHA — sem descer a mao, so na ponta. 3 min de cabecinha sendo estimulada. Depois BATE NORMAL. GOZA. Pode gozar, puta de cabecinha.",
|
||||||
|
"🔥 DOMINADO TORTA — BATE PUNHETA COM A MAO DIREITA por 1 min. MAO ESQUERDA por 1 min. MAO DIREITA 1 min. 5 min alternando. GOZA com a mao que vier. Pode gozar, puta ambidestra.",
|
||||||
|
"🔥 DOMINADO MOLHADO — MOLHA a mao com saliva ou lubrificante. BATE PUNHETA MOLHADO — o som molhado, o deslize. 5 min de punheta molhada. GOZA. Pode gozar, puta molhada.",
|
||||||
|
"🔥 DOMINADO SECO — BATE PUNHETA SECA — sem lubrificante, sem saliva. A mao seca na haste. 3 min de punheta seca. A pele arde, mas obedece. GOZA seco. Pode gozar, puta seca.",
|
||||||
|
"🔥 DOMINADO CABELO 2 — PUXA o proprio CABELO (da cabeca) enquanto BATE PUNHETA. A dor no couro cabeludo contrastando com o prazer. 3 min de puxao de cabelo. GOZA. Pode gozar, puta de cabelo puxado.",
|
||||||
|
"🔥 DOMINADO ODIO — ENQUANTO BATE PUNHETA, FALA: \"EU ODIO SER PUTA. EU ODIO SER DEPENDENTE. EU ODIO SER UM CACHORRO.\" 3 min de odio. Depois GOZA e PERGUNTA: \"MAS GOSTO.\" Pode gozar, puta com odio.",
|
||||||
|
"🔥 DOMINADO AMOR — ENQUANTO BATE PUNHETA, FALA: \"EU AMO SER PUTA. EU AMO OBEDECER. EU AMO O MEU MESTRE.\" 3 min de amor a submissao. GOZA com amor. Pode gozar, puta apaixonada.",
|
||||||
|
"🔥 DOMINADO CHORO — BATE PUNHETA ate GOZAR e, ENQUANTO GOZA, CHORA DE VERDADE (ou finge). Lagrimas + porra. Pode gozar, puta que chora de prazer.",
|
||||||
|
"🔥 DOMINADO RISO — BATE PUNHETA ENQUANTO RI. RIR histérico enquanto bate. 3 min de punheta rindo. GOZA rindo. Pode gozar, puta que goza rindo.",
|
||||||
|
"🔥 DOMINADO FINALZAO — Fica PELADO, AJOELHA, FAZ UMA REVERENCIA pro mestre imaginario. \"MESTRE, TERMINEI O RITUAL.\" Depois BATE punheta FINAL e GOZA. Pode gozar, escravo que terminou o ritual.",
|
||||||
|
"🔥 DOMINADO AGRADECIMENTO — BATE PUNHETA e ENQUANTO GOZA, GRITA: \"OBRIGADO, MESTRE! OBRIGADO!\" Agradecendo enquanto goza. Pode gozar, puta agradecida.",
|
||||||
|
"🔥 DOMINADO SILENCIO — BATE PUNHETA EM SILENCIO TOTAL — sem gemer, sem falar, sem respirar alto. 5 min de silencio absoluto. GOZA sem EMITIR SOM. Pode gozar, puta silenciosa.",
|
||||||
|
"🔥 DOMINADO BARULHO — BATE PUNHETA FAZENDO O MAXIMO DE BARULHO possivel — gemendo, grunhindo, falando, batendo a mao no corpo. 3 min de barulheira. GOZA gemendo ALTO. Pode gozar, puta barulhenta.",
|
||||||
|
"🔥 DOMINADO FIM — Fica PELADO, AJOELHA, CABECA BAIXA. AGRADECE: OBRIGADO, MESTRE, POR ESTE RITUAL. BATE UMA punheta FINAL E GOZA EM PAZ. FIM. Pode gozar, puta finalizada."
|
||||||
|
]
|
||||||
+113
@@ -0,0 +1,113 @@
|
|||||||
|
[
|
||||||
|
"Imagine agora que você está na área de serviço aberta pro quintal, o vento tocando a pele pelada, e você finge que não viu seu vizinho na janela. Você abaixa a calça e a cueca sem pressa, se curva arreganhando a bunda e abrindo o cú pra ele ver, puxa o pau pra trás entre as coxas até a cabecinha aparecer por baixo do saco e ficar exposta, enfia dois dedos melados de saliva no cú em camadas, sente o anelzinho abrir pra dentro, e começa a fazer edging só na cabeça do pau, a glande latejando roxa entre os dedos, o pré-gozo escorrendo pelo vão das coxas, e você geme baixinho de boca aberta sabendo que ele tá te olhando da janela. Você aguenta o edging o quanto o corpo aguenta, mas quando vê a mão dele sumir da janela e o corredor do prédio escurecer, o tesão te domina de vez e você goza duro de pé na área de serviço, a porra quente espirrando no cimento frio, e fica ofegante olhando pra janela de novo, ainda acesa, esperando, sabendo que amanhã os dois vão resolver isso sem o vidro no meio.",
|
||||||
|
"Imagine agora que é madrugada e você acordou com o pau duro latejando, o pré-gozo manchando a cueca de tesão. Você vai pelado até a cozinha, abre a geladeira pra pegar agua gelada, e quando a luz ascende você vê o vizinho do prédio em frente imóvel na varanda dele, te encarando através do vidro. Você não se cobre: encosta na bancada, abre as pernas, pega no teu pau molhado e começa uma punheta lenta, passando o dedo no pré-gozo e levando à boca, provando teu próprio leite na frente dele, contraindo o cú a cada punhetada curta só na cabecinha. Ele também desabotoa a calça na varanda dele, e os dois se masturbam se encarando pela noite; ele goza primeiro, a mão fechada na luz do apartamento, e você continua te olhando até jorrar no copo de agua que ia ser tua bebida, a porra escorrendo pelo vidro gelado, e os dois se encaram num silêncio pesado, cada um lambendo a própria mão antes de desligar as luzes — mas nenhum dos dois fecha a cortina.",
|
||||||
|
"Imagine agora que você está de quatro no chão do quarto, pelado, procurando uma meia embaixo da cama quando a campainha toca. Você abre a porta esquecendo que tá nu e dá de cara com o entregador com o pacote na mão. Ele abaixa os olhos, vê tua rola dura balançando, e não desvia. Ele sorri, entra, fecha a porta e manda você se ajoelhar. Você ajoelha sem pensar, ele segura teu queixo, aponta o pau dele e diz que a assinatura da entrega é na tua boca. Você abre a boca larga, estica a língua e recebe o pau dele fundo, inchando a tua garganta, e ele segura tua cabeça e fode tua cara até gozar na tua língua. Você engole tudo, abre a boca vazia pra conferência, e ele ajeita a calça, pega o pacote do chão e entrega na tua mão como se nada tivesse acontecido. Quando você assina o recibo com a mão tremendo, ele diz que amanhã tem outra entrega e que dessa vez o pacote pode precisar de conferência dentro do quarto — e ele sai assobiando, te deixando de joelhos na entrada, com o gozo dele ainda no fundo da garganta.",
|
||||||
|
"Imagine agora que você está no churrasco da firma e a patroa loira te chama pra buscar cerveja no estoque. Ela tranca a porta, te empurra contra a caixa de bebidas, agarra teu pau por cima da calça e sussurra no teu ouvido que sempre sonhou em ver aquele corpo no escritório dela. Ela manda você ajoelhar e abrir a boca, e você chupa ela até ela gozar na tua boca gemendo baixinho entre as prateleiras. Depois ela te levanta, vira você de costas, desce a tua calça e a cueca, passa a mão melada no teu cú, mete dois dedos secos mesmo doendo, e ordena que você bata uma punheta pra ela até gozar numa sacola de lixo do estoque. Você goza de pé no quartinho escuro, a porra jorrando na sacola, e ela se masturba junto contigo vendo tua rola esvaziar. Ela ajeita a blusa, destrava a porta e volta pro churrasco como se o estoque só tivesse cerveja, mas no fim do dia ela te chama de lado e diz que segunda-feira às 18h você vai ter uma reunião particular no escritório dela — e que dessa vez é pra ir preparado.",
|
||||||
|
"Imagine agora que você está na cozinha amassando pão, pelado, as mãos enfiadas na massa quente quando a vizinha de vestido curto para na calçada, se pendura na janela baixa e te vê inteiro. Ela não vai embora: se encosta na parede, cruza os braços e levanta a barra do vestido pra esfregar a mão na própria buceta olhando você. Você entende o desafio, tira as mãos da massa, leva a mão farinhenta e suada pro pau duro e começa a bater uma punheta relaxada pra ela, devagar, mostrando a cabecinha, virando de lado pra exibir a bunda arreganhada também. Quando ela levanta o vestido e mostra a buceta molhada acesa na luz da tarde, o teu corpo enlouquece e você se derrama, gozando na bancada, a porra escorrendo pela mesa quente. Ela aplaude de longe, aponta pro próprio peito e entra em casa. Dez minutos depois ela tá na tua porta com a roupa ainda cheirando a farinha, pedindo uma fatia do teu pão — e o convite pra terminarem dentro da tua cozinha o que o vidro da janela já tinha começado.",
|
||||||
|
"Imagine agora que você está no vestiário da academia depois do treino, só de sunga, quando o personal trainer entra e tranca a porta. Ele não fala nada, só aponta pro chão. Você entende, tira a sunga, e fica de quatro na frente dele, a bunda no ar, o cú arreganhado de vergonha e tesão. Ele se ajoelha atrás de ti, enfia um dedo babado no teu cú, depois dois, massageando a próstata até tuas pernas tremerem, e com a outra mão segura teus quadris mandando você se esfregar no dedo dele como uma cadela. Ele manda você se virar e bater uma punheta olhando pra ele, fazendo edging até quase gozar e parar, 5 vezes, teu pau pulsando sem alívio, a glande roxa. Na quinta vez, quando tuas pernas já não seguram, ele se ajoelha na tua frente, limpa tua glande com a própria língua e diz que passou. Ele te dá um tapinha na bunda, pega a mochila e sai, mas antes de fechar a porta fala que amanhã no mesmo horário ele traz o plug pro aquecimento — e que o teu primeiro gozo no vestiário tá reservado pra ele.",
|
||||||
|
"Imagine agora que você está na maca do consultório, as pernas posicionadas, e a médica morena de luvas anuncia o exame de próstata. Ela enfia o dedo enluvado devagar contornando o anel, e quando a ponta curva encontra tua próstata, tua espinha arrepia e o pau endurece pingando. Ela não para: massageia o ponto em círculos lentos com o dedo dentro e envolve tua glande com a mão esquerda, girando o dedo indicador na cabecinha molhada, no ritmo do dedo do cu. Você geme, se abre, empurra o quadril contra as duas mãos dela, e ela manda você gozar assim, sem nem encostar no corpo, só no dedo pulsando dentro e a pressão na cabeça. Você obedece, esguichando na barriga, e ela não tira o dedo da próstata até o último espasmo, depois lambe a luva limpando o gozo na tua frente. Ela anota o resultado no prontuário e manda buscar a recepção pra marcar o retorno — e no papelzinho do exame, além do controle da próstata, ela escreve um horário fora do expediente e um apelido: vem sem cueca na próxima consulta, o exame precisa de mais calma.",
|
||||||
|
"Imagine agora que você está de bruços pelado na cama do hotel, a porta aberta, quando a camareira entra e te vê inteiro, a bunda arreganhada na direção dela. Ela não sai: entra, tranca a porta, e diz que a limpeza inclui reposição de toalhas e de outras coisas. Ela se ajoelha na cama atrás de ti, enfia um dedo no teu cú que você abre pra ela, depois dois, e fica massageando tua próstata até você gemer com a cara afundada no travesseiro. Ela manda você virar, pega teu pau duro na mão e chupa até tua perna tremer, faz edging 3 vezes te deixando no limite, e na quarta manda você jorrar na cara e nos seios dela como calibração do serviço. Ela sai do quarto com tuas toalhas sujas e o teu gozo secando na cara dela, fechando a porta com um sorriso que promete a volta. Meia hora depois ela volta com as toalhas limpas, pega teu pau ainda mole na mão e diz que a diária inclui a limpeza completa — e que a camareira do quarto ao lado também quer conferir se o serviço dela foi bem feito.",
|
||||||
|
"Imagine agora que você está na beira da estrada trocando o pneu, e um caminhoneiro para e desce te ajudando. Ele se agacha no teu lado pra olhar o pneu, e quando você alcança a ferramenta a tua camisa sobe e ele vê o pau duro escapando pela cueca. Ele ri, se levanta, desabotoa a calça dele e aponta: sua rolinha quer documentação. Ele manda você ajoelhar no asfalto quente, puxa tua cabeça e te guia até o pau grosso dele, e você suga fundo com os olhos vidrados nele enquanto os caminhões passam longe. Ele segura tua nuca e goza na tua boca, manda abrir a boca mostrando a porra e engolir, e depois ainda te obriga a terminar de trocar o pneu de joelhos, o gozo dele escorrendo pela tua garganta. Você enche a calibragem do pneu suado e de joelhos, e ele, no alto da cabine, grita pela janela que o próximo posto da estrada tem uma parada reservada e que te avisa quando a rota dele passar de novo por aqui. A poeira do caminhão cobre teu rosto enquanto você se levanta — e, no fundo, você sabe que vai pegar carona da próxima vez.",
|
||||||
|
"Imagine agora que é noite de lua cheia e você tá pelado na praia deserta, a água gelada na cintura, quando um casal maduro aparece caminhando pela areia. A mulher te olha de cima a baixo e diz pro marido que te quer. O marido concorda, e ela tira o vestido na areia, manda você deitar, senta com a buceta na tua boca fazendo você lamber até ela gozar, enquanto o marido se ajoelha atrás de ti e te come o cu com a mulher ainda sentada na tua cara. Eles trocam de posição: ele te faz deitar de frente, espalha tuas pernas e entra no teu cu de novo enquanto a mulher se abaixa e chupa teu pau molhado. Os três gozam juntos na areia, a porra escorrendo até a espuma do mar, e o casal se ajoelha nos teus lados e lambe o que sobrou no teu peito, cada um numa metade tua. Antes de irem, ela deixa o vestido na tua mão como lembrança e sussurra que toda noite de lua cheia eles voltam praquela praia — e que o convite vale pro próximo ciclo.",
|
||||||
|
"Imagine agora que você está no escritório depois do expediente, calça caída, numa punheta de tédio na frente do monitor, quando a colega entra sem bater e trava. Ela tranca a porta, sobe na cadeira giratória e se ajoelha na tua frente, puxa teu pau duro da tua mão e continua da onde você parou, chupando devagar com os olhos nos teus, parando quando você chega no limite. Ela te faz edging 4 vezes sentada nos calcanhares, e na quinta sobe na tua cara com o vestido aberto, mandando você lamber a buceta dela até ela gozar na tua língua. Depois ela desce e te chupa até você derramar na boca dela, engolindo tudo, e volta pra mesa dela como se nada tivesse acontecido, com o gosto dos dois na boca. Dez minutos depois o teu celular acende com uma mensagem sem nome: o número dela e o horário da reunião das 19h de amanhã, no andar vazio, porta fechada — e a última frase manda você ir sem cueca, porque o scan pessoal dela vai ser bem mais demorado.",
|
||||||
|
"Imagine agora que você volta pelado do banho e a síndica tá no teu corredor consertando o interfone. Ela te vê nu, não se apavora: entra, tranca, abre o caderno e diz que precisa vistoriar tudo com detalhes. Ela usa luvas de látex, manda você apoiar as mãos na parede, e vai checando a instalação: passa a luva no teu peito, na tua barriga, desce pela tua bunda e enfia o dedo enluvado no teu cú, abrindo pra inspeção, enquanto a outra mão segura teu pau e conta os batimentos como se fosse o pulso. Ela te vira e ordena que você bata uma punheta pra câmera noturna do celular dela, fazendo edging no comando dela, e só deixa gozar quando ela disser, com ela gravando tua cara contorcendo até a porra sair no chão do teu próprio corredor. Ela desliga a gravação, guarda o celular e diz que a vistoria tá aprovada, mas que uma unidade tão bem cuidada exige revisão mensal — e que na próxima ela traz o aparelho de medição maior. Ela sai destravando o interfone, e você fica no corredor com a porra ainda quente no piso, entendendo que o aluguel daquele apartamento passou a ser pago de outro jeito.",
|
||||||
|
"Imagine agora que você tá na piscina do condomínio às duas da manhã, pelado, flutuando, quando a vizinha do quinto andar desce pra fumar. Ela vê teu corpo e, em vez de ir embora, entra na água pelada também, se aproxima pelas costas, agarra teu pau pela água e te puxa pra superfície, te encostando no azulejo da borda. Ela chupa teu pau com a água batendo na tua pele, as mãos segurando teu saco, e depois te vira, te encosta de bruços na quina da piscina e esfrega a buceta dela na tua bunda, enfiando devagar até o fundo, gemendo abafado. Quando ela chega perto de gozar, ela te ordena virar e gozar com ela, e os dois esguicham na água escura, o cheiro de cloro misturado com o dos dois. Ela fica te segurando pela borda até o corpo parar de tremer, depois beija tua boca molhada e diz que a piscina daqui pra frente tem regra nova: banho noturno só com ela. Ela volta pro quinto andar com a camisola encharcada, e você fica boiando no escuro sabendo que vai passar a ter insônia de propósito toda madrugada.",
|
||||||
|
"Imagine agora que você tá numa trilha no mato, pelado, quando um homem alto aparece e sem dizer nada aponta pro toco de árvore caído. Você senta, abre as pernas, e ele se ajoelha entre elas, deita você de lado na madeira, passa saliva na tua bunda e entra no teu cu devagar, sem pressa, deixando você sentir cada centímetro abrindo teu corpo. Ele mete com o corpo curvado sobre o teu, a mão fechada no teu pau doído, e manda você se masturbar no ritmo dele, até vocês dois gozarem juntos — a porra dele lá dentro e a tua espirrando no mato. Ele se levanta, limpa as mãos na folhagem e segue a trilha sem dizer uma palavra, te deixando deitado pulsando na madeira, com o cú ainda cheio e as pernas bambas. Quando você se recupera e volta pro ponto de partida da trilha, encontra um bilhete preso num galho, escrito a mão, sem nome e sem assinatura: um horário e uma coordenada, e embaixo, uma única frase — no mesmo toco, da próxima vez você já vem de cueca abaixada.",
|
||||||
|
"Imagine agora que sua esposa dorme de bruços ao teu lado e você acordou com o pau duro. Você pensa que ela dorme e começa a punheta escondida embaixo do lençol, olhando a bunda dela arreganhada pra tua direção, o cú entreaberto. Você chega perto do gozo quando ela vira o rosto devagar, abre os olhos e sussurra que tá te sentindo há dez minutos, que não vai te ajudar, que quer assistir você se esvaziar sozinho como um menino escondido. Ela pede que você venha por cima dela, deite em cima da bunda dela, esfregue o pau nela e goze na pele; você obedece, com ela virada te olhando fixo, assistindo tua cara de sofrimento até a porra escorrer no meio das costas dela. Ela pede pra você lamber, e quando a tua língua toca a pele quente ela geme um gemidinho fingido de sono que você sente na espinha. Ela adormece de verdade de bruços, e você deita colado nela, lambendo devagar, sabendo que a manhã vai começar com aquela mesma cara de sono virada pra ti, cobrando o café — e a continuação.",
|
||||||
|
"Imagine agora que a amiga ruiva da tua esposa tá no quarto de hóspedes e a porta ficou entreaberta. Você passa pelado no corredor e vê o olho dela brilhando na fresta acompanhando teu peito, teu pau duro. Você não se cobre: para no meio do corredor, encara a fresta, pega no pau e começa a bater punheta devagar, mostrando pra ela. A porta abre mais, e ela tá de joelhos na cama se masturbando te olhando, o vestido levantado até a cintura, a mão enfiada na calcinha. Vocês dois se masturbam se encarando pelos olhos no escuro do corredor, um indo mais longe que o outro; quando o teu gozo sobe, ela abre a boca de olhos fechados te mandando gozar pra ela, e você derrama na frente da porta, exausto e sem pudor, enquanto ela se termina socando o próprio quadril na mão e geme alto sem conseguir conter. Ela abre a porta de vez, o vestido descendo, a boca molhada, uma mancha de tesão no tecido da calcinha, e te encara: diz que a tua esposa nunca vai saber de nada, mas que da próxima vez a porta vai ficar aberta de verdade — e que o teu nome vai sair da boca dela de um jeito que o travesseiro não vai esconder.",
|
||||||
|
"Imagine agora que você convidou um casal de amigos pro jantar e o assunto esquenta até ela te desafiar a provar teu corpo. Você se vê de joelhos no meio da sala, e eles mandam você rastejar até o tapete. O marido manda você se deitar de costas pra frente deles, ela se abaixa e chupa teu pau enquanto o marido se ajoelha na tua cabeça e manda você chupar o pau dele de ponta a ponta, os dois se movimentando em você como se você fosse um brinquedo de dois furos. Depois eles trocam: ele come teu cu com a mulher chupando tua rola de novo, até os dois gozarem em ti quase ao mesmo tempo — a porra dele no teu cu e a dela na tua boca. Você fica no chão melado, lambendo os restos do tapete escuro, servindo os dois de sobremesa, e eles se arrumam como se o jantar tivesse sido perfeito. Na despedida, a mulher te beija na boca na frente do marido, que sorri, e avisa que toda festa boa acaba com sobremesa — e que o próximo jantar é semana que vem, na casa deles, com o cardápio que você já sabe qual vai ser.",
|
||||||
|
"Imagine agora que uma mulher dominadora te ordena: calcinha de renda, camisola aberta nas costas e plug grosso no cu. Ela faz você deitar de bruços na cama com a calcinha afastada, puxa o plug com a mão e mete de novo devagar, deixando você gemer contra o colchão, e com a outra mão alcança teu pau por baixo e aperta a cabecinha até quase gozar, parando, fazendo edging até o limite 5 vezes com o plug enterrado. No final, ela manda você ajoelhar no chão, de costas pra ela, e bater uma punheta de quatro, com a calcinha fio dental no meio da bunda e o plug pulsando, até ela permitir o gozo — e ela filma tua cara se contorcendo com o próprio pau na mão. Ela termina a gravação no exato momento em que tuas pernas cedem e o gozo espirra pela renda da calcinha, e te deixa ajoelhado no chão por mais cinco minutos tremendo. Ela pega o celular, te mostra a própria cara contorcida e diz que o vídeo vai pro grupo das amigas dela só se você implorar — e você implora, de joelhos, e ela sorri, e grava a tua imploração também, ordenando que amanhã tem rodízio de plug da sala até o quarto.",
|
||||||
|
"Imagine agora que você está amarrado na cama, pulsos e tornozelos presos nas colunas com gravatas, e a mulher de vestido preto senta na tua cara sem pedir licença, com a buceta quente pressionando tua boca. Ela goza duas vezes na tua língua, segurando teu cabelo, e depois se ajoelha entre tuas pernas amarradas, com uma cinta roxa de 20 centímetros na mão. Ela lubrifica, alinha na tua bunda esticada e entra devagar apesar dos teus gemidos, te fodendo firme enquanto teu pau bate no ar sem alívio, e com a mão livre ela puxa teu pau e te masturba no ritmo das estocadas, até você implorar pra gozar. Ela só deixa quando tua voz falha, fazendo você esguichar amarrado com a cinta ainda funda no teu cú, o corpo todo tremendo em espasmos. Ela não tira a cinta: fica em cima de ti sentindo cada pulso até o teu pau secar, depois te solta devagar, massageia teus pulsos e diz que amanhã as gravatas vão ser trocadas por corrente de verdade. No corredor, antes de sair, ela para e avisa que você vai precisar do descanso — porque aquela primeira cinta foi só o aquecimento.",
|
||||||
|
"Imagine agora que você ficou invisível por um dia e entrou no vestiário feminino da piscina. Uma mulher de cabelo longo, pele lisa ainda molhada, entra, pendura a toalha e se despe devagar na tua frente, a blusa subindo, a calcinha descendo pelas coxas até ela ficar nua de frente pro espelho. Ela se senta no banco, abre as pernas pra se secar entre as dobras, e você fica parado vendo cada detalhe molhado, o pau invisível pulsando na mão invisível. Você se masturba na frente dela escondido, a um palmo da pele dela, cheirando o cheiro do sabonete misturado com o corpo dela, e goza silencioso no ar, a porra invisível caindo no piso frio. Ela termina de se secar, veste a calcinha e sai sem notar nada, mas esquece a toalha no banco. Você fica invisível no meio do vestiário, o peito subindo e descendo, e a noite inteira você dorme pensando no cheiro — até descobrir que o feitiço da invisibilidade não tem desfazer: ele só passa quando ela decide que você pode aparecer, e na manhã seguinte ela volta pra buscar a toalha, e dessa vez você vai estar visível, de joelhos, esperando.",
|
||||||
|
"Imagine agora que você tá sentado pelado num banco de praça de madrugada, pau duro, quando uma moça do bar senta do teu lado. Ela percebe teu volume, sorri, desliza a mão até tua calça e tira tua rola pra fora, apertando devagar na mão dela, e com a outra mão abre a própria calcinha na tua frente, puxando tua mão pra dentro. Vocês dois se entregam ali, ela se masturba na tua mão enquanto te masturba, trepando sentados no banco de praça, até ela pedir que você goze nas mãos dela. Quando você jorra, ela leva as duas mãos meladas à boca, lambendo cada gota na tua frente, e te beija passando o gosto na tua língua. Ela se levanta, ajeita o vestido como se nada tivesse acontecido, e antes de sair põe o número dela no teu celular com o apelido a madrugada — e some na direção do ponto de ônibus. A praça fica em silêncio de novo, e você fica sentado com o pau pulsando, sabendo que amanhã vai esperar ela no mesmo banco, e que ela sabe disso também.",
|
||||||
|
"Imagine agora que você tá na cadeira da barbearia, e quando o barbeiro termina de alinhar tua barba ele percebe tua ereção sob a capa. Ele tranca a porta, puxa a cortina e manda você tirar a calça: higiene de navalha exige área limpa. Ele reclina a cadeira, se ajoelha e chupa teu pau com uma técnica lenta de quem faz barba, parando nos beiços, usando a língua larga na cabecinha, fazendo edging até você implorar. Ele então sobe na cadeira, se posiciona de frente pra ti com o pau duro dele na tua boca, e você chupa ele em coro com ele te chupando, os dois se masturbando no ritmo um do outro, até gozarem juntos quase ao mesmo tempo. Ele limpa os dois gozos com a toalha quente de barbearia, te ajeita a gola da camisa e destranca a porta com um até a próxima raiz. No espelho, tua barba tá alinhada, mas tua cara ainda pulsa de vergonha e tesão — e no cartão do ponto de barbearia, em cima do preço, ele rabiscou um horário de madrugada e a palavra fechado pra você.",
|
||||||
|
"Imagine agora que você tá deitado na cadeira do dentista, e a dentista senta por acidente em cima de ti, sentindo tua rola dura sob o jaleco. Ela não levanta: se ajusta, sussurra que anestesia não é necessária, e desce o zíper da tua calça com as mãos enluvadas, puxando teu pau pra fora enquanto a broca do outro lado ronca parada. Ela te chupa devagar com a cadeira quase deitada, parando pra perguntar se tá doendo, e depois se levanta, joga a saia pro lado e senta na tua rola com a buceta quente, cavalgando em cima de ti até o trilho da cadeira começar a deslizar. Ela goza em cima de ti e te faz gozar dentro, e então sai da cadeira, se recompõe e entrega a receita com uma risquinha no rodapé: o telefone dela e um horário de retorno. Na porta da clínica ela apertaria tua mão um pouco além do normal e diz que da próxima vez o exame é no consultório particular, de porta fechada — e que o dentista que vem no horário dela sabe disso.",
|
||||||
|
"Imagine agora que você tá na fila do mercado de shorts, e uma mulher gostosa encosta em ti de propósito, rebolando o rabo na tua rola dura por cima do tecido. Você fica duro feito pedra enquanto ela finge não perceber a pressão encostando a cada movimento da fila. Ela vira o rosto, pisca, e aponta com o queixo pro corredor de produtos de limpeza, o mais vazio. Você segue ela, e no fundo do corredor ela te puxa pra dentro do depósito, tranca, se ajoelha e chupa teu pau com fome, com as mãos apertando teu saco, e depois te vira de costas, encosta você na pilha de papel higiênico e come teu cu ali mesmo, gemendo abafado, até te fazer gozar no chão frio do depósito. Ela se recompõe, puxa a blusa e volta pro caixa com o sorriso impecável, a tua porra ainda secando na coxa. Teu estoque inteiro passa no caixa dela, e no troco, junto das moedas, ela enfia um papelzinho com o número dela e um horário de madrugada — conferência de estoque.",
|
||||||
|
"Imagine agora que você tá na sessão vazia do cinema e uma moça de cabelo curto senta do teu lado, coloca a cabeça no teu ombro e desliza a mão até tua calça, pegando no teu pau duro por cima do tecido. Ela te masturba ali mesmo, com o som do filme cobrindo teus suspiros, e quando percebe que o gozo tá subindo ela sussurra que precisa ir ao banheiro. Ela te leva pelo corredor escuro, te puxa pra dentro da cabine acessível, tranca e se ajoelha, chupando teu pau até a garganta com a mão apertando o teu saco, e depois se vira, arregaça o short e manda você comer ela de pé contra a porta da cabine, a película tremidora do filme passando luminosa sob a porta enquanto os dois gozam juntos no banheiro. Ela limpa com papel, puxa o short e sai como se fosse só mais uma visita ao banheiro, e vocês assistem o final do filme de mãos dadas no escuro. Na saída do cinema ela te espera no estacionamento com a chave do carro na mão, beija tua boca e diz que a sessão das 20h de amanhã já tá reservada — mas que o filme ela quer assistir do banco de trás.",
|
||||||
|
"Imagine agora que a tua dona te põe de castigo de joelhos no quarto, ainda de meias, e manda você arregar o cú na direção do espelho. Ela senta na poltrona e manda você bater uma punheta lenta de costas pra ela, olhando teu reflexo: quero ver a tua cara de puta. Você se masturba devagar enquanto ela critica o ritmo e manda você enfiar um dedo no cu junto, empurrando pra dentro, a glande roxa refletida no espelho. Você chega perto do gozo 4 vezes e ela estala os dedos te fazendo parar no limite, o pau pulsando sem remédio, e no final ela diz que hoje você não vai gozar de jeito nenhum. Ela manda você lavar o dedo e guardar o tesão pra amanhã, e te deixa de joelhos tremendo na frente do espelho, o gozo preso latejando dentro de ti. Ela só sai do quarto quando você abaixa a cabeça, e no corredor ela deixa o celular gravando tua imagem encolhida no espelho; pela madrugada, chega a mensagem dela: uma foto tua de joelhos e o texto — amanhã você vai me mandar um vídeo se agradecendo por eu ter segurado você.",
|
||||||
|
"Imagine agora que você é o modelo nu da aula de desenho, em pé no pedestal no meio dos cavaletes, e o professor manda você abrir mais as pernas. No fundo da sala tem uma aluna que não desenha, só te encara. Quando a aula acaba ela fica, espera a sala esvaziar, sobe no pedestal e diz que precisa estudar os detalhes de perto. Ela se ajoelha na tua frente, puxa teu pau duro e chupa devagar na luz da janela, com a mão no teu quadril, e depois manda você deitar no chão do estúdio, senta com a bunda nua na tua cara pra você lamber até ela gozar. No fim, ela te faz gozar por cima do desenho dela, marcando o papel com as manchas da tua porra. Ela levanta o papel, assina o canto com um sorriso e diz que aquela obra de arte ela vai emoldurar — e que o modelo de amanhã, no mesmo horário, é obrigatório. Na porta, ela apaga a luz e completa: e dessa vez eu quero você se virando sozinho quando eu entrar.",
|
||||||
|
"Imagine agora que você tá nu na sala de espelhos do estúdio de ioga, e a instrutora alta manda você se ajoelhar na postura da criança e empinar o quadril. Ela se aproxima por trás, senta na tua bunda com a buceta por cima do teu cú, manda você arregar pra sentar melhor — e monta em ti com a virilha colada na tua pele. Você sente o calor da buceta dela esfregando na base da tua rola enquanto ela instrui tua respiração, cada movimento te deixando mais doído, e depois ela desce, pega teu pau e, numa posição de alongamento, te chupa entre as próprias pernas, se contorcendo até os dois gozarem em uníssono no espelho, sem quebrar a postura nenhum momento. Quando o gozo passa, ela mantém a posição por mais um minuto, respira fundo e te beija. Ela desliga a luva de luz da sala e diz que a aula de amanhã é sobre alongamento — e que você deve vir sem roupa, porque o tecido prende a energia. O espelho devolve a imagem dos dois suados e parados, e você já tá agendando mentalmente a próxima respiração profunda.",
|
||||||
|
"Imagine agora que você tá de bruços na maca da massagem, e a massagista, depois das costas, manda você virar. A toalha escorrega, tua rola fica na vertical, e ela nem pisca: unta as mãos com óleo quente e começa a trabalhar a região pélvica — desliza pela tua virilha, envolve tua glande com a palma e vai massageando em círculos com a base do polegar, subindo devagar até você se esticar todo. Ela pega o vibrador que tava na bandeja, passa óleo, enfia no teu cú e liga na intensidade micro, enquanto a mão enrola teu pau; ela monta teu lombo, te fazendo gozar sem tirar o vibrador, o jato espirrando no teu próprio peito. Ela desliga o vibrador depois do último espasmo, te entrega a toalha limpa e agenda a próxima sessão pra amanhã no mesmo horário, anotando no caderno: livre, fosso, vibrador, controle. Você sai com as pernas bambas e o cheiro de óleo na pele, e a agenda dela da semana inteira já tem o teu nome em todas as linhas — você só não sabe disso ainda.",
|
||||||
|
"Imagine agora que você tá sozinho acampando, pelado na barraca, quando uma moça das trilhas aparece pra esquentar as mãos na tua fogueira. Ela percebe o teu tesão, sorri e pergunta se pode se aquecer melhor. Ela entra na barraca, se despe na tua frente, monta sobre tua cara com a buceta quente pingando e manda você lamber até ela gozar, e depois vira o jogo: senta no teu colo de costas, puxa teu pau pra trás entre as coxas dela e se esfrega nele enquanto guia tua mão pra enfiar um dedo no teu próprio cú. Quando o gozo dos dois chega junto, ela manda você jorrar pra fora da barraca, na terra, como oferenda ao fogo, e te beija com o gosto dela ainda na tua boca. Ela limpa a boca, se veste, dá um beijo na tua testa e some na trilha antes do Sol nascer, deixando o cheiro dela estampado na barraca. Quando você arruma a mochila, encontra um papelzinho dobrado com um mapa da trilha e um X marcado — aqui é onde a gente se encontra no próximo camping, escrito no meio do desenho do Sol.",
|
||||||
|
"Imagine agora que você é arte viva numa galeria erótica, em pé numa moldura de veludo vermelho, e uma senhora elegante de tailleur espera todo mundo sair da sala. Ela cruza a corda, sobe no pedestal e tira as luvas devagar, uma a uma. Ela toca tua rola dura, sente o calor pulsante, pede que você ajoelhe na plataforma e desce a calcinha dela pra você lamber a buceta madura ali, no silêncio da galeria. Ela goza em pé na tua boca, se recompõe e depois pega a bandeja de vidro que servia de adorno, manda você se masturbar até gozar em cima dela como se fosse arte contemporânea e leva a bandeja com a tua porra pro fundo do corredor, dizendo que vai pendurar aquilo na parede reservada da casa dela. Na semana seguinte você recebe um convite de vernissage em casa alheia — e no meio da sala de jantar, na parede reservada, tá a bandeja emoldurada com as tuas manchas, com uma plaquinha de ouro: obra doada por admiradora. Quando a senhora te encontra no centro da sala, ela ergue a taça na tua direção e brinda, em silêncio, arrumando outro encontro pra aquela semana.",
|
||||||
|
"Imagine agora que você vive num reino imaginário e a rainha manda despir na corte inteira. Nu sob o teto abobadado, ela desce do trono, toca teu peito com o cetro, manda você rastejar atrás dela através do salão até os aposentos. Lá dentro ela te amarra pelas mãos na cama real, senta com a buceta na tua boca, e depois de gozar chama duas criadas e manda que brinquem com teu corpo: uma chupa tua rola enquanto outra enfia um vibrador de quartzo no teu cu, a rainha assistindo da cadeira, e manda parar quando tuas pernas tremem. Depois ela se ajoelha entre tuas coxas amarradas, segura tua glande molhada e te faz gozar na bandeja de ouro, provando com a colher de prata como quem saboreia um manjar real. Ela aprova com um aceno e os criados te carregam pra um banho de mármore; e naquela noite, quando ela manda te chamarem de novo, você entende que o teu destino no reino é ser provado todas as noites — até a colher se acostumar com o teu sabor — e que você já não sabe mais se quer ser provado por mais ninguém.",
|
||||||
|
"Imagine agora que você tá no banho e percebe uma câmera espiã acesa no canto do box. Você entende que tá sendo filmado nu desde sempre, e em vez de te proteger, o tesão grita mais alto: você se vira pra lente, ensaboa o pau e começa uma punheta lenta, abrindo as pernas, enfiando um dedo no cú com o sabão escorrendo, se exibindo pra quem quer que esteja do outro lado. Você imagina os olhos atrás da lente se esfregando enquanto assistem tua glande latejando na câmera, e goza direto pra lente, a porra escorrendo pelo azulejo do box. Depois limpa a boca com a língua e manda um beijo pra câmera, desafiando teu espião a aparecer pra fazer a continuação ao vivo — e a câmera pisca duas vezes, como resposta. No dia seguinte tem um envelope na tua caixa de correio, sem carimbo, com um bilhete: te vi de perto, segunda-feira, 21h, portão dos fundos. Você guarda o bilhete e, na segunda-feira às 21h, você tá lá — e entende que a câmera espiã nunca foi pra te vigiar: era pra te chamar.",
|
||||||
|
"Imagine agora que a moça de dreads do caixa do mercado segura tua mão ao devolver o troco e sussurra que te segue até o depósito. Lá dentro, no chão frio entre as caixas de bebida, ela puxa tua rola pra fora com as duas mãos e chupa com os olhos subindo pra ti, parando no limite, e depois te ordena que você lamba a buceta dela até ela gozar no teu rosto suado. Ela se vira, arregaça a farda e manda você comer ela de pé encostado nas pilhas, com as latas balançando a cada estocada, até os dois gozarem no meio do estoque. Ela volta pro caixa com a tua porra escorrendo pela coxa, te cobra a compra com um sorriso e diz que a próxima conferência de estoque é amanhã no mesmo horário. No estacionamento ela te espera com o carro ligado, e do banco do passageiro ela te beija e completa que amanhã a conferência é na casa dela, porque o depósito do mercado tem câmera escondida — e que o rolê que ela quer fazer contigo não cabe em horário de expediente.",
|
||||||
|
"Imagine agora que você tá no ônibus lotado às sete da noite, e uma mulher de casaco sentada na janela te puxa pro colo. Por baixo do casaco estendido sobre vocês dois, ela desliza a mão quente até tua calça, abre o zíper devagar e puxa tua rola pra fora, masturbando teu pau no colo dela com os dedos contornando a glande em silêncio absoluto, os passageiros mexendo nos celulares. O balanço do ônibus acelera o tesão, e ela sente teu pau engrossar na mão até quase transbordar; então tira a própria calcinha pela cintura e te guia pra dentro dela ali mesmo, os dois gozando abafados naquele sussurro, o ônibus inteiro alheio. Ela desce no ponto dela com o corpo ainda tremendo e te devolve um papelzinho dobrado com o número e o horário do mesmo ônibus de amanhã. Você fica sentado com a calcinha dela enfiada no teu bolso — ela colocou sem avisar — e a viagem de volta inteira é só a tua mão escondida segurando o bilhete, contando as horas.",
|
||||||
|
"Imagine agora que você tá pelado na piscina da tua casa e a faxineira do vizinho sobe no muro pra recolher a mangueira, te vendo na água. Ela não desvia: manda você sair, e você obedece nu, a água escorrendo. Ela olha tua rola dura brilhando, desce do muro pelo portão e diz que o equipamento dela tá entupido, precisando de limpeza. Ela se ajoelha na beira da piscina, chupa teu pau com a mão fechada na base, com a água formigando na tua pele, te faz edging 3 vezes, e depois manda você sentar na borda pra lamber a buceta dela enquanto ela se termina; os dois gozam com o som da água e da mangueira. Ela volta pro quintal do vizinho com tua porra na panturrilha e um recado no portão: o material dela nunca mais entupiu com a tua ajuda. À tardinha, ela cruza o muro de novo, agora de short curto, dizendo que o equipamento dela entupiu de novo — só que dessa vez ela entra na piscina junto, e vocês terminam na água enquanto a casa do vizinho dorme do outro lado da cerca.",
|
||||||
|
"Imagine agora que você tá nu na sauna, o vapor espesso, e um homem maduro de anel de prata senta na tua frente. Ele nota tua rola endurecida com o calor, tira o anel e pede que você passe devagar na tua haste, como amuleto, assistindo a argola deslizar na cabecinha molhada. O vapor adensa a tensão, ele se aproxima, se ajoelha no banco de madeira e chupa teu pau com a língua quente, usando o anel como joia no teu anelzinho, e depois se vira, abre as pernas e pede que você faça o mesmo serviço nele, os dois se degustando no calor, até ele pedir que você goze no peito dele — e ele enxuga tua porra com a língua enquanto a sauna fecha. Os dois saem rubros e em silêncio, com o anel de volta no dedo dele, e no vestiário ele te dá um cartãozinho de horário da sauna de amanhã, às 20h, com o nome dele no verso. Quando a porta fecha, você percebe que, no meio do caminho, o anel que ele usava agora tá no teu dedo — e a promessa da sauna de amanhã pesa mais que a prata.",
|
||||||
|
"Imagine agora que você tá no elevador panorâmico com uma executiva de tailleur quando ele trava entre andares. Na penumbra ela te encara, desabotoa a tua calça sem pedir licença e puxa tua rola pra fora, masturbando devagar com a mão gelada de anéis. Ela manda que você se vire pro vidro, e com o peito colado nas tuas costas ela contorna teu pau em edging pela transparência da cidade lá embaixo, sussurrando que o resgate vai demorar horas e que ela prefere se esquentar. Ela se ajoelha atrás de ti, lambe teu cú e enfia um dedo firme, te masturbando olhando tua cara refletida no vidro, e ordena que você goze na janela panorâmica — a porra escorrendo pelo painel com a cidade acesa atrás. Ela limpa com o lenço da bolsa, aperta o botão de emergência e, quando o elevador volta a funcionar, descem juntos sem trocar mais uma palavra. No corredor do térreo, a mão dela aperta a tua ainda com o gozo secando nos dedos, e de madrugada teu celular acende com uma mensagem sem número: reunião às 21h no último andar — e o elevador vai quebrar de novo.",
|
||||||
|
"Imagine agora que você tá na cadeira do salão, e a cabeleireira de seios grandes percebe tua ereção sob a capa depois de encostar em ti de propósito. Ela tranca a porta da cabine privada, tira a capa te deixando só de cueca e manda você despir de vez. Ela reclina a cadeira, se senta na tua cara com a saia preta levantada e goza na tua língua duas vezes com a mão segurando a poltrona; depois pega tua rola e chupa com a boca quente de batom, te fazendo edging até a beira, quando pede que você goze por cima do peito aberto dela e limpa se lambendo o dedo. Ela te devolve arrumado, ajeita tuas mechas e cobra o corte na maquininha com uma piscadela, anotando teu número no celular. Quando você sai, o teu celular vibra com a mensagem: máscara de reconstrução capilar, terça, 19h — e o capilar foi só o começo.",
|
||||||
|
"Imagine agora que você tá no provador da loja de roupas, de cueca com o pau duro marcado, e a vendedora entra sem bater pra ajudar com a numeração. Ela se ajoelha pra medir a barra, mas a mão sobe por dentro da tua perna, encosta na tua rola e aperta com a palma quente. Ela te manda experimentar o modelo, tira a cueca de tuas camadas, e chupa teu pau de pé na cabine apertada, com as outras provadoras alheias do outro lado da cortina, você mordendo o lábio pra não gemer no meio da loja. Ela te vira, te encosta no espelho do provador e come teu cu de pé até os dois gozarem, com a tua cara em êxtase colada no espelho. No caixa ela te cobra a calça escandalosamente cara, dizendo que o desconto especial tá embutido no preço do prazer dela — e dentro do saco, junto com a roupa, um cartãozinho com o turno dela de sexta e a palavra provador circulada de batom. Na sexta, no mesmo horário, o provador da loja tá reservado em silêncio, e a cortina presa pelo lado de dentro.",
|
||||||
|
"Imagine agora que você tá nu numa banqueta de estúdio, sob o holofote, e a fotógrafa de cabelo azul te orienta poses eróticas de todas as formas: deitado, abrindo os joelhos, mão na virilha. Ela pede que você coloque a mão no pau, e quando você obedece ela diz: vai até o limite, sem gozar, eu filmo. Ela te faz edging na frente da lente, gravando tua cara sofrida em 4K, e depois se abaixa, coloca a câmera no tripé filmando o ângulo do chão, sobe na banqueta, monta em tuas costas com a calcinha aberta e se masturba na tua bunda enquanto manda você gozar pro chão na frente da lente, gravando cada gota caindo no asfalto frio do estúdio. Ela desliga a câmera no último pingo, baixa o tripé e te mostra o take final em câmera lenta, frame a frame, até a porra bater no chão. Ela salva o arquivo com o nome o gozo refletido e destranca a porta, dizendo que a exposição de abertura é sexta e que o teu lugar é na parede principal — mas que a obra definitiva ela quer filmar na casa dela, de porta fechada e sem espectador.",
|
||||||
|
"Imagine agora que você tá no banheiro do bar com um amigo do teu irmão, e na frente do mictório você percebe que tua rola não desce. Ele percebe, ri e te puxa pra cabine trancando a porta. Ele desabotoa a calça dele e mostra o pau duro de lado pra você, e sem pedir licença encosta o corpo, incentivando você a pegar no dele. Vocês dois se masturbam em pé na cabine, se olhando, cada um sentindo o cheiro quente do outro, e quando ele percebe que você tá no limite ele se ajoelha no chão do banheiro e chupa teu pau até te fazer gozar na boca dele, engolindo tudo com os olhos nos teus. Ele levanta, limpa a boca com as costas da mão e pergunta se você vai contar pro seu irmão o que aconteceu no mictório — com a tua boca ainda aberta, sem conseguir responder. Dez minutos depois ele volta pra mesa do bar como se nada tivesse acontecido e puxa assunto com teu irmão; mas por baixo do balcão, a mão dele encontra a tua e aperta, te avisando que o mictório de sábado tá reservado — e você descobre que não vai conseguir mais beber cerveja nesse bar sem ficar duro.",
|
||||||
|
"Imagine agora que você tá numa balada e uma mulher de coturno te puxa pelo cabelo pro banheiro do andar de cima. Ela tranca, te joga de joelhos, tira o cinto e bate na tua bunda nua até marcar, te chama de putinha, manda você abrir a boca e chupar os dedos embebidos em gel. Ela enfia um plug pequeno no teu cú, e quando ele tá enterrado ela te levanta, te vira de frente pro espelho sujo e manda que você se masturbe pra tua própria cara: quero ver essa cara de piranha até caber. Ela faz edging com você no espelho, parando no limite 4 vezes, e na quinta manda gozar na pia do banheiro, filmando tudo com o celular cunhado na mão, dizendo que aquela gravação vai de story privado pra quem ela quiser. Ela te ajuda a limpar, puxa tua calça e te guia pra fora com o pulso ainda na nuca; na porta da balada ela segura teu queixo: sexta, 23h, mesma balada, eu te procuro. Você volta pra mesa com o rosto queimando e a bunda marcada, e passa o resto da noite com o celular na mão, contando os dias pra sexta.",
|
||||||
|
"Imagine agora que você é o garçom de um restaurante fino, e uma cliente de vestido vermelho te chama na mesa reservada pra provar o vinho. Ela levanta a barra do vestido quando você se abaixa, e você vê que ela tá sem calcinha, a buceta madura na altura da tua cara. Ela segura tua cabeça, te puxa pra debaixo da toalha e manda você lamber até ela gozar enquanto o salão inteiro janta em volta; ela goza na tua língua abafando o gemido com a toalha, te tira de lá e te manda reto pro banheiro. Quando você volta, ela tá com a tua calça no colo: ela tirou tua calça por baixo da mesa enquanto você lambia, e ela te chupa no vão escuro sob a toalha até a tua porra jorrar na taça de vinho. Ela ergue a taça, cheira, brinda baixinho pra ti e bebe tudo de um gole, com os olhos cravados nos teus. No final da noite, na gorjeta do cartão de visitas, além do dinheiro, um papel pequeno com o nome de um hotel e um horário marcado — e a frase: a mesa de amanhã já tá reservada no teu nome.",
|
||||||
|
"Imagine agora que você descobre um cômodo secreto no subsolo do teu trabalho, e tua chefe de óculos tá lá dentro, de coleira no pescoço te esperando. Ela manda você se despir, se ajoelhar e entrega na tua mão o controle remoto do plug que ela mantinha no teu cú o dia todo; ela liga no máximo e te deixa vibrar até tuas pernas falharem, tua rola dura escorrendo no chão da sala secreta. Ela se senta na cadeira de veludo, abre o notebook e trabalha enquanto te vigia: manda você bater uma punheta devagar, parar quando ela levantar o dedo, gozar só quando ela mandar — e ela grava teu rostinho contorcendo por cima da mesa dela, te fazendo implorar, até ela acenar com a caneta e deixar você jorrar na sala. Ela fecha a pasta com teu nome e diz que a gravação ficou perfeita — mas que a versão que ela vai usar depende da tua próxima visita às terças, às 22h, sem falta. Ela te entrega a roupa na porta do elevador de serviço, e quando a porta fecha, o sistema de reconhecimento já registrou a tua próxima entrada na agenda.",
|
||||||
|
"Imagine agora que você tá no trem noturno, e acorda de madrugada com a mão de um homem de terno entre as tuas pernas, por dentro do pijama. Ele não para quando você acorda: pede desculpas num fio de voz e continua, masturbando teu pau duro devagar, o trem balançando nas curvas, teus joelhos apertando as coxas. Ele percebe tua respiração presa e faz um edging lento, chegando ao limite e parando, tirando a mão e deixando você pulsando na madrugada, repetindo 3 vezes enquanto a cabine fica mais quente; na quarta, ele se ajoelha no chão do beliche, puxa tua pijama inteiro pra baixo e chupa tua rola até a garganta, te fazendo gozar com a mão na boca pra não acordar o trem inteiro. Ele limpa a boca, deita no beliche de baixo e cochila como se nada tivesse acontecido, o cheiro dos dois ficando na cabine até de manhã. Quando você desce na estação, encontra no bolso da pijama um bilhete: comboio das 23h, cabine 7 — o bilhete de volta é teu. E no bolso do casaco do terno, esquecido na cabine, o telefone dele, sem calma pra apagar o número antes do bilhete.",
|
||||||
|
"Imagine agora que você tá no motel com uma conquista, e depois da primeira dose ela finge dormir de bruços, com o pé roçando tua coxa. Você entende o convite: ajoelha atrás dela, cheira a bunda arreganhada e começa a se masturbar por cima dela, o pau duro passando rente à pele, e sem querer ela vira o rosto, abre os olhos e sussurra: pode gozar? Você tá atônito, e ela te puxa pro colo dela, abre as pernas, monta em cima de ti e se esfrega na tua rola molhada, cavalgando até os dois jorrarem juntos, o corpo dos dois selado de suor. Depois ela puxa tua mão pra beijar os dedos e diz que no motel sempre tem segunda parte quando o parceiro sabe o começo — gargalhando de ver tua cara de quem ganhou na loteria. Ela fica deitada no teu peito e pede que você conte o começo de novo, que ela quer ouvir a história da tua voz, enquanto as mãos dela já deslizam pra cima do segundo round. Você percebe que o fingi dormir dela foi só o primeiro ato — e que a noite no motel ainda vai ter terceira, quarta e quinta parte.",
|
||||||
|
"Imagine agora que você é o brinquedo escolhido no harém, e a sultã manda você despir na frente das mulheres do séquito sentadas em tapetes. Nu no centro, elas te devoram com olhares, e a sultã manda você rastejar entre as pernas dela. Você vai lambendo as coxas, a buceta quente, e uma das mulheres atrás enfia um vibrador no teu cú enquanto você lambe, fazendo você gemer com a boca cheia. A sultã goza na tua língua, e depois o harém inteiro brinca com teu corpo: uma te chupa, outra enfia os dedos em ti, uma amarra tuas mãos atrás das costas — e no fim a sultã manda que você se masturbe de joelhos pro harém inteiro, contando cada gota que cai no prato de prata. As mulheres batem palmas delicadas quando o prato se enche e a sultã prova o teu gozo com a ponta dos dedos; depois te levam pro banho de mármore cantando baixinho. Deitado nas sedas, você entende que aquele tributo virou o vinho da rainha — e que o harém inteiro agora quer a tua colheita — e você percebe que já tá com vontade de servir a colheita de novo.",
|
||||||
|
"Imagine agora que você tá no quarto de hospital, soro na veia, e a enfermeira da noite entra pra medir tua pressão e te encontra com o pau duro marcando o lençol. Ela baixa o lençol, ri com carinho e diz que a fisioterapia da recuperação exige estímulo circulatório. Ela aciona a alavanca da cama, te deita de bruços e começa a massagem nas costas que escorrega pra bunda, e quando a mão alcança tua virilha ela vira teu quadril, te vira de costas, aponta o monitor cardíaco pra ti — e te masturba devagar olhando os batimentos acelerarem na tela, te fazendo chegar ao limite e parando, edging lento enquanto anota a frequência nas enfermarias da noite. Às 2h47 ela finalmente deixa o gozo sair, com o monitor disparando luzinha e os dois abafando risada com a mão na boca; ela limpa tuas coxas com o papel da cama, ajusta o soro e anota tua frequência no prontuário com um sorriso. Na porta ela para e avisa que amanhã tem mais, com troca de turno — e que a colega da manhã também vai querer conferir teu progresso. O monitor cardíaco ainda pisca alto no escuro, e você entende que a tua recuperação vai ser longa — e gostosa.",
|
||||||
|
"Imagine agora que um apocalipse passou, você é o último homem vivo, e encontra um grupo de mulheres numa praça abandonada. Elas te cercam, tocam teu corpo nu como bens preciosos, e a líder de cabelo grisalho anuncia o rodízio: cada noite uma de vocês te come, e você obedece. A primeira monta em ti na capota de um carro abandonado, cavalgando até gozar; a segunda te vira e te come o cu de pé no meio da praça, assistida pelas outras; a terceira se ajoelha e chupa teu pau até tuas pernas tremerem; e a quarta amarra as tuas mãos no poste e te faz gozar diante de todas, filmando na mão como um ritual de recomeço da humanidade. Você dorme exausto sob as estrelas, o corpo marcado de mordidas e porra, e acorda no dia seguinte com as mulheres cozinhando frutas e rindo, planejando a noite seguinte como quem sortearia quem fica com o teu leite. No fim do café, antes de o Sol subir de vez, a líder te puxa pela mão pra sombra da praça e diz que o rodízio noturno agora tem escala definida: todas as noites, na ordem que o conselho decidir — e que o teu papel no mundo recomeçado é agradecer de joelhos toda vez, até o dia em que elas escolherem você em silêncio.",
|
||||||
|
"Imagine agora que você tá de frente pro balcão de congelados do supermercado, escolhendo iogurte com uma calma que você não sente, quando uma mão quente e decidida desliza por dentro da tua calça por trás, abre a tua cueca no meio da bunda e encosta a ponta dos dedos direto no teu cú, arrepiado de susto e tesão. Você trava, segura a porta de vidro do balcão pra não cair, e a mão desconhecida começa a trabalhar os dedos: passa o indicador em volta do anelzinho, pressiona de leve e enfia um dedo inteiro pra dentro sem pressa, enquanto atrás de ti uma voz abafada sussurra pra você continuar escolhendo iogurte como se nada. Você tá duro feito pedra dentro da calça, os outros clientes passando alheios, e o dedo dentro do teu cú se mexe devagar, dobrando na próstata até tuas pernas falharem; a mão tira o dedo, fecha a tua cueca e a calça, e quando você vira só vê o vulto dela sumindo no corredor dos frios — mas no teu bolso de trás tem um papel dobrado com um horário e a palavra congelados. Você termina a compra com as pernas bambas e, às 22h, no estacionamento, ela tá te esperando no carro com a mão já dentro do próprio short.",
|
||||||
|
"Imagine agora que você tá na fila do caixa do mercado com as compras no chão, quando sente uma mão deslizar por dentro da tua calça por trás, abrir a tua cueca e pressionar a palma inteira na tua bunda nua, os dedos fechando sobre o teu cú com uma calma criminosa. Você fica imóvel, o coração acelerado, a pessoa atrás de ti fingindo falar ao celular, e os dedos começam a brincar: um passa babado pelo anel, dois se insinuam devagar pra dentro enquanto você morde o lábio e segura a barra do carrinho; o caixa te chama pra pagar e você dá um passo com o dedo ainda te abrindo, a voz falhando no débito. Quando a mão sai, ela aperta tua bunda uma última vez e sussurra no teu ouvido que o pacote que você deixou cair no corredor 8 não tinha nada, mas que ela viu você se abaixar pra pegar. Você paga com as mãos trêmulas e, na saída, no estacionamento, ela tá encostada no carro dela à tua espera, com a mão no bolso e um sorriso de quem sabe exatamente onde usou os dedos.",
|
||||||
|
"Imagine agora que você tá no hortifruti do mercado dando tapinhas numa melancia, sentindo o peso dela, quando atrás de ti uma mão firme entra por dentro da tua calça e da tua cueca de uma vez, segura tua bunda por inteiro e enfia dois dedos no teu cú sem nenhum aviso, fazendo você quase derrubar a melancia no chão. A dona da mão, uma mulher alta de chapéu, finge examinar as frutas do lado, e os dedos dela trabalham dentro de ti em sessões curtas: entram, dobram, massageiam teu ponto, saem quando alguém se aproxima e voltam com mais dois quando alivia. Você fica mole no fim do hortifruti, o tesão subindo até a nuca, obrigado a ficar parado com a mão enfiada na tua bunda no meio do mercado; ela termina, arranca uma etiqueta de preço da melancia, escreve um número com a unha e gruda atrás do teu celular. Quando você finalmente entende e vira, ela tá na fila do caixa te olhando por cima do ombro, apontando com o queixo pro corredor das frutas tropicais.",
|
||||||
|
"Imagine agora que você tá escolhendo carne na frente do balcão de vidro do açougue, quando por trás uma mão ágil entra pela tua calça, abre tua cueca e acha teu cú direto, como quem conhece o caminho. Os dedos começam a trabalhar sem cerimônia: o indicador desliza pelo anel, o médio entra e sai devagar, enquanto no balcão o açougueiro te pergunta o ponto do bife e você responde mal passado com a voz saindo esquisita. A pessoa atrás de ti ri baixinho, os dedos dobrando no teu cú enquanto o açougueiro embrulha a carne, e o atendente chama o número da senha no exato momento em que o dedo te abre mais fundo, fazendo teus joelhos travarem na hora de pagar. Ela tira a mão, ajeita tua calça e finge ler o celular, mas antes de sair puxa tua camisa por cima do cós e deixa um bilhete de papel de açougue no teu bolso: a hora do fechamento da ala e uma frase — trago a carne, você traz onde ela entrar.",
|
||||||
|
"Imagine agora que você tá na padaria do bairro esperando o pão francês esfriar na bandeja, quando uma mão pequena e quente entra por dentro da tua calça e cueca por trás, segura tua bunda e desliza os dedos na fenda do teu cú com uma calma de quem tem tempo. Você congela no meio da fila, e os dedos começam a trabalhar teu buraco: um enfia devagar, agarrando teu quadril pra te segurar, enquanto a dona da mão pede em voz alta duas dúzias de pão de sal do teu lado. O padeiro atrás do balcão te olha sem suspeitar, e o dedo dentro de ti dobra e massageia tua próstata até o teu pau escorrer dentro da cueca, e você precisa morder o lábio pra não gemer no meio da padaria. Ela tira o dedo no exato momento em que a sacola quente chega na tua mão e passa por ti com um bom apetite sorrateiro, deixando no fundo da sacola de pão um cartãozinho de papel manteiga com nome, telefone e a frase: os dedos da próxima fornada são teus pra guardar. Você volta pra casa com o pão quente na mão e o cú ainda aberto, sabendo que amanhã cedo vai pedir pão no mesmo balcão.",
|
||||||
|
"Imagine agora que você tá parado no corredor de vitaminas da farmácia lendo um rótulo que você não tá lendo, quando sente uma mão entrar por dentro da tua calça por trás, abrir tua cueca e achar teu cú num piscar de olhos. A dona dela, uma moça de jaleco do laboratório, finge revisar a prateleira ao teu lado, e os dedos começam a dançar no teu anel: o polegar espalha um gelzinho frio que devia ser de massagem, o indicador entra inteiro e alisa tua próstata enquanto ela sussurra que a farmácia tem câmera, sim, mas que o ângulo do corredor 3 não alcança os dois. Você se apoia na prateleira, duro, o jaleco roçando na tua lateral, e os dedos entram e saem no ritmo da conversa dela sobre dosagem de vitamina, até ela enfiar dois de uma vez e te deixar gemer baixinho abafado no papel do rótulo. Ela termina, passa um cartão de fidelidade no teu bolso com o telefone dela riscado e diz que a retirada é no caixa ao lado, horário das 21h — e que o desconto do medicamento ela desconta em pessoa, com as luvas.",
|
||||||
|
"Imagine agora que você tá subindo a escada rolante do shopping, seguindo na direção das lojas do segundo piso, quando a pessoa no degrau de trás, colada em ti, enfia a mão por dentro da tua calça e cueca e segura tua bunda sem nenhum aviso. A escada continua subindo, o movimento puxa os corpos, e os dedos da pessoa trabalham teu cú em silêncio: um entra devagar no ritmo do mecanismo da escada, outro se insinua e te abre mais, enquanto do lado a escada que desce leva dezenas de pessoas olhando na tua direção. Você fica imóvel, a mão no corrimão, o pau duro esmagado contra a calça, e a desconhecida atrás de ti respira quente na tua nuca e sussurra que o próximo degrau é dela, que ela não se vira. Ela te leva até o limite da escada, os dedos girando na tua próstata, e quando vocês chegam no topo ela solta, dá um beijo no teu pescoço e some no meio da multidão; mas o teu celular vibra com uma mensagem de número desconhecido: tô no terceiro piso, no banheiro do cinema, com a porta aberta e a mão molhada. Você fica na ponta da escada rolante escolhendo entre a loja e a porta — e o teu corpo já decidiu antes da tua cabeça.",
|
||||||
|
"Imagine agora que você tá num corredor de livros de uma livraria grande, procurando um romance na estante alta, quando um homem de terno encosta em ti por trás, pede licença e apoia a mão no teu ombro — mas a outra mão desliza por dentro da tua calça, abre tua cueca e encontra teu cú no escuro do corredor. Ele fala em voz baixa sobre os livros, os dedos trabalhando teu buraco: um entra inteiro, dobra, alisa, sai e volta com dois, enquanto você se equilibra na ponta dos pés fingindo ler as lombadas, o pau endurecendo contra a estante. O corredor tá vazio, mas qualquer passo pode cruzar, e os dedos dele aproveitam cada segundo, te abrindo no ritmo da voz enquanto ele cita autores; quando o teu joelho enfraquece, ele te segura pela cintura e enfia três dedos fundo, te deixando gemer dentro de um livro grande aberto na tua mão. Ele tira a mão, ajeita a tua calça num gesto seco e vira o corredor sem olhar pra trás; no teu bolso, um marcador de página com um horário e a frase: a sessão de autógrafos é no estoque, às 22h, e o convidado especial é teu cú.",
|
||||||
|
"Imagine agora que você tá na fila do banco, número na mão, esperando a senha ser chamada, quando a mulher atrás de ti encosta o corpo no teu e enfia a mão por dentro da tua calça por trás, cuidando de abrir a cueca e achar teu cú sem tirar o sorriso de fachada. Os dedos dela trabalham teu buraco com discrição total: um dedo entrando e saindo no ritmo da música ambiente, dobrando na próstata sempre que o sistema chama uma senha, fazendo você segurar as costas da cadeira com as juntas brancas. O guarda do banco passeia o olhar por vocês dois e nada vê, enquanto os dedos dela te levam três vezes até a beira do gozo e três vezes te trazem de volta, só de dedos, no meio da fila. Quando o teu número finalmente é chamado, ela dá um tapa seco na tua bunda, fecha tua cueca e sussurra que o saque de hoje é dela — e que o extrato tá no teu bolso de trás. Você anda até o caixa com as pernas bambas, saca, sai, e no estacionamento ela tá escorada num carro, empurrando o próprio short pro lado e apontando pros bancos de trás.",
|
||||||
|
"Imagine agora que você tá espremido no metrô lotado às 18h, de mão na bala de cima, quando sente uma mão entrar por dentro da tua calça por trás, por baixo da mochila, abrir tua cueca e ganhar teu cú no aperto da multidão. O movimento do trem joga os corpos, e os dedos da pessoa atrás trabalham teu buraco: um entrando e saindo no ritmo das estações anunciadas, enquanto a mulher colada em ti finge segurar o próprio celular e sussurra o nome da próxima estação como quem avisa a parada. Você tá duro no meio de dezenas de pessoas, a mão dela avançando dentro de ti em cada freada do metrô, dobrando a próstata quando o túnel fica escuro e soltando quando a luz volta, no ritmo perfeito do balanço. Quando a estação final dela chega, ela se desgruda, ajeita tua cueca rapidinho e desce sem olhar pra trás; a mão dela deixa um bilhete de papel amassado no fundo do teu bolso: mesma plataforma, mesmo horário, amanhã — traz a cueca de futebol, que eu quero ver o time entrando em campo.",
|
||||||
|
"Imagine agora que você tá na catraca do ônibus lotado, apertado na saída, e atrás de ti um homem de terno desliza a mão por dentro da tua calça, abre tua cueca pela fenda e toca teu cú com a palma inteira, os dedos fechando sobre o anel sem pressa. O ônibus sacoleja, as pessoas penduradas, e os dedos dele entram devagar, um, depois dois, trabalhando teu buraco enquanto ele finge conferir o troco do cobrador e pergunta em voz alta que ponto é aquele. Você tá duro e vermelho, segurando a barra, o rosto virado pra janela, e o dedo dele dobrando por dentro te faz morder a boca de todas as formas pra não gemer no meio da balbúrdia; ele enfia três quando o ônibus curva, te deixa a um fio do gozo e segura firme. Quando a porta da frente abre no ponto do centro, ele desliza a mão pra fora, fecha tua cueca e te empurra leve pra descer: seu ponto, né. Na calçada, o teu celular vibra com uma mensagem de número oculto — eu saí no mesmo ponto que você; tô na tua cola até o próximo ônibus, e dessa vez o banco de trás vai tá quase vazio.",
|
||||||
|
"Imagine agora que você tá na fila da pipoca do cinema, batendo o pé de impaciência, quando pela multidão do lobby uma mão entra por dentro da tua calça e cueca por trás e segura tua bunda com firmeza, os dedos encontrando teu cú e começando a brincar nele com uma calma de quem vai tirar o filme de um lugar vazio. Você congela na fila, o balde de pipoca na mão, e os dedos trabalham teu anel com o barulho do cinema abafando tudo: um entra inteiro e dobra, a ponta alisando tua próstata enquanto os adolescentes da bilheteria riem de alguma coisa no canto. A mão atrás de ti te segura num ritmo que acompanha os trailers: para quando a luz apaga, volta quando a sala escurece de vez; e quando o longa começa, ela enfia dois fundos e te leva ali mesmo, na fila escura, até tuas pernas travarem sem ninguém notar. Ela tira a mão, ajeita tua calça e te dá o troco da pipoca junto com uma nota de cinema amassada com um horário e o número da sala 6 — e na sala 6, na poltrona do fundo, ela já tá sentada com a mão no próprio colo, esperando você ocupar o lugar do lado.",
|
||||||
|
"Imagine agora que você tá na feira livre de sábado olhando as barracas de verdura, quando entre a multidão alguém chega por trás e enfia a mão por dentro da tua calça por baixo do boné abaixado, abre tua cueca e toca teu cú com os dedos quentes de segurar sacola. O movimento da feira empurra todo mundo, os pedestres passando amontoados, e os dedos trabalham teu buraco em silêncio: entram, viram, dobram, e cada vez que uma feirante grita o preço da laranja, o dedo te dá um soco fundo na próstata, fazendo teus olhos lacrimejarem de tesão contido. Você segura uma abobrinha sem conseguir soltar, e a pessoa atrás de ti, uma mulher de lenço na cabeça, comenta com a feirante o preço do tomate enquanto os dedos dela descrevem círculos dentro de ti. Quando ela termina, ajeita tua roupa num gesto de quem só esbarrou, e coloca na tua sacola de feira um embrulho de pano com uma banana dentro e um bilhete com um horário e o nome do bar do final da feira; no bar, às 13h, ela te espera na mesa dos fundos com a mão na própria calça, dizendo que a banana é só o aperitivo.",
|
||||||
|
"Imagine agora que você tá na fila da casa lotérica na segunda de manhã, segurando o volante de aposta, quando atrás de ti uma mulher de casaco encosta o peito nas tuas costas e a mão dela entra por dentro da tua calça, abre a cueca e pressiona a palma inteira no teu cú, os dedos fechando o anel com uma força que não pede permissão. A lotérica tá cheia de gente conferindo bilhete, e ela trabalha teu buraco com os dedos: um entra de lado, dois entram de frente, dobram na tua próstata no momento exato em que a tela da lotérica grita teu número da sorte. Você se encosta no vidro do balcão, duro, segurando o jogo com a mão tremendo, e ela continua enfiando e tirando os dedos no ritmo dos números que passam na tela, te levando três vezes até a beira de um gozo público. Quando é a tua vez de apostar, ela te dá um tapinha na bunda, ajeita tua cueca e sussurra que o prêmio de hoje não é da lotérica, é do carro estacionado do lado do mercado. Você aposta no escuro, sai com o bilhete no bolso e o cú pulsando — e ela tá lá, no carro, com o cinto desabotoado.",
|
||||||
|
"Imagine agora que você tá na fila do buffet de um restaurante self-service na hora do almoço, bandeja na mão, escolhendo arroz e feijão, quando a mão de uma colega de trabalho que tá atrás de ti na fila desliza por dentro da tua calça por trás, abre tua cueca e acha teu cú no meio da pressa de todo mundo se servindo. Você trava com a colher de arroz no ar, e ela, sorrindo pra tua reação, enfia o dedo devagar no teu anel enquanto continua conversando sobre o relatório da tarde, como se a mão dela não estivesse dentro da tua cueca no meio do restaurante. A fila anda, ela te segue, os dedos entrando e saindo do teu cú no ritmo das conchas de salada, dobrando na tua próstata quando você alcança a carne; o salão lotado em volta, ninguém vendo, só os dois sabendo que o almoço dela tá te comendo de pires. Ela termina no balcão de sobremesa, ajeita tua calça num gesto rápido e pega um pudim, dizendo que depois do almoço tem reunião na sala dela — e que o relatório que ela quer ver é o teu, de perto, com a porta trancada e o pudim sendo provado nos teus joelhos.",
|
||||||
|
"Imagine agora que você tá sentado no banco do terminal de ônibus aguardando a linha da noite, quando a mulher do casaco comprido, que também espera, senta do teu lado e enfia a mão por dentro da tua calça por baixo da coberta fina que ela esticou sobre os dois, abrindo tua cueca e ganhando teu cú com os dedos numa discrição de teatro. O terminal tá lotado, gente correndo pro ônibus, e ela trabalha teu anel em silêncio: dedo entrando, dedo dobrando, o polegar apertando o períneo, enquanto pergunta em voz alta que horas o próximo ônibus passa, como se a mão não estivesse enfiada em ti. Cada anúncio de chegada no alto-falante te dá um soco de adrenalina, e ela usa o sobressalto pra enfiar mais fundo, dobrando na próstata até tuas pernas se abrirem no banco; quando o ônibus dela finalmente chega, ela dá um último toque, tira a mão, ajeita tua cueca e desce pra linha dela sem olhar pra trás. Você fica sentado no terminal com o pau latejando, e quando o teu próprio ônibus chega, no banco de trás, tem um bilhete encostado no vidro escrito à mão: a linha da meia-noite, próximo sábado — e dessa vez o banco vai ser o de trás, vazio, com as cortinas fechadas.",
|
||||||
|
"Imagine agora que você tá no meio da multidão de um show de rock, pulando com todo mundo, suado, quando no aperto do público uma mão estranha consegue entrar por dentro da tua calça por baixo da camisa amarrada, abrir tua cueca e agarrar tua bunda, os dedos ganhando teu cú no pulso da música. O som tá alto, todo mundo pulando, e os dedos trabalham teu buraco no ritmo da bateria: um dedo entrando em cada refrão, dois dobrando na ponte, e toda vez que a galera grita no solo da guitarra, a mão te abre mais fundo, te deixando duro feito pedra no meio do mosh. Você segura a mão de quem tá do lado, que nem percebe, e a mão invisível atrás de ti continua te comendo de dedos, te levando perto do gozo e te segurando no limite durante três músicas inteiras. No fim do show, quando o estádio liga as luzes, a mão solta, ajeita tua cueca e a pessoa some na multidão que desce as escadas; no teu bolso de trás, um canhoto de ingresso amassado com um vestígio de batom rosa e a frase por cima do desenho do palco: o próximo show tem camarote — eu desço o dedo com você assistindo da grade.",
|
||||||
|
"Imagine agora que você tá na academia no meio de uma série de agachamento na barra, quando uma instrutora se aproxima por trás pra corrigir tua postura e, aproveitando que o aparelho abraça os dois, desliza a mão por dentro da tua bermuda, abre tua cueca e prende os dedos no teu cú, testando tua forma por dentro. Ela fala em tom de treino sobre o alinhamento do quadril enquanto os dedos entram e saem, o suor escorrendo pela tua nuca, a academia cheia de gente se olhando nos espelhos sem enxergar nada além de um treino de postura. Cada agachamento que você faz enterra os dedos dela mais fundo, dobrando na tua próstata até tuas pernas tremerem de verdade no meio da série; ela para quando você chega na última repetição, te mantém no limite e te segura firme, sussurrando pra você finalizar o agachamento sem gozar. Na saída, ela te chama no canto, escreve no teu caderno de treino um número de telefone e a palavra quarto: sexta, 19h, treino de descanso ativo — e o aquecimento você já conhece.",
|
||||||
|
"Imagine agora que você tá na fila dos Correios no fim do expediente, com uma encomenda registrada na mão, quando o homem do terno cinza atrás de ti enfia a mão por dentro da tua calça por trás, sem tirar o olhar do celular, abre tua cueca pela fresta e sente o anel do teu cú com a ponta dos dedos, como quem confere uma etiqueta. O atendente chama as senhas e a fila anda devagar, e os dedos dele trabalham teu buraco na cadência do guichê: um dedo entra inteiro quando ele atualiza a tela, dois entram quando você dá um passo pra frente, dobrando na próstata e te fazendo segurar o pacote com as duas mãos pra se equilibrar. A fila dos Correios tá cheia de aposentados e estudantes, ninguém olhando pra trás, e ele te leva duas vezes até o fio do gozo enquanto o sistema anuncia próximo, guichê 4; quando é a tua vez, ele finalmente tira a mão, ajeita tua cueca e te cutuca pra andar: seu guichê. Você despacha a encomenda com a voz engasgada, e na saída teu celular acende com um número não salvo: encomenda registrada recebida com sucesso — retirada no endereço que eu anotei no vidro do teu carro, hoje às 22h, pelo portão dos fundos.",
|
||||||
|
"Imagine agora que você tá sentado num banco do parque no fim da tarde, tomando um sorvete de casquinha, quando a moça de vestido floral senta na ponta do banco e, aos poucos, por baixo da mochila que ela apoia entre vocês, a mão dela desliza por dentro da tua calça, abre tua cueca e chega no teu cú com os dedos gelados de segurar o copo. O parque tá cheio de gente passando, cachorro atravessando a grama, e ela trabalha teu anel com uma calma de domingo: um dedo entrando e saindo devagar, dobrando na tua próstata quando um casal de velhos passa bem devagar na tua frente, de mãos dadas. Você fica sentado com o sorvete derretendo, duro, os olhos presos no horizonte, e os dedos dela te levam três vezes até o pé do gozo, cada vez segurando e recomeçando, sem pressa nenhuma. Quando o Sol baixa e o parque esvazia, ela tira a mão, ajeita tua cueca, empresta o guardanapo pra tua mão melada de sorvete e diz que o banco é bom, mas que a cama da casa dela é melhor; ela anota o número no guardanapo e some pela trilha, e o teu sorvete derretido esquenta menos que o cú arrepiado.",
|
||||||
|
"Imagine agora que você tá no quarto com a janela aberta de cima a baixo, a luz acesa, pelado, com o plug de metal enfiado no cú e a cabeça do pau já aparecendo pelo elástico da cueca que você puxou pro lado. Você se vira de costas pra janela, se curva e pega nas duas nalgas, abrindo o cú com as mãos até o plug de metal brilhar no meio da bunda, e rebola devagar pro escuro da rua, imaginando o vizinho do prédio de trás com os olhos pregados naquele cú escancarado. Você mantém a posição com o plug pulsando, arregando o anel mais ainda, deixando a glande molhada aparecer entre as coxas a cada rebolada. Quando a janela do vizinho se acende e você vê a silhueta de mãos na cintura, o tesão vence e você enfia um dedo ao lado do plug, socando dentro de ti pelado na frente da janela, até a porra espirrar pelo chão do quarto com o plug ainda enterrado, e você fica de quatro no tapete, ofegante, sabendo que amanhã vai deixar a luz acesa de novo.",
|
||||||
|
"Imagine agora que você tá na área de serviço com a porta escancarada pro quintal no fim da tarde, só de camiseta apertada, a bunda pelada empinada na direção da casa ao lado, arreganhando o cú com as duas mãos como quem mostra mercadoria. Você abaixa devagar, curva mais fundo, e enfia o dedo indicador no cú, mexendo dentro do buraco exposto pro ar livre, o pré-gozo escorrendo pela coxa enquanto a cabeça do pau roxa pinga por baixo. A vizinha passa na varanda dela, freia, e fica te olhando de cima a baixo sem disfarçar; você não fecha a porta: dobra mais, abre, enfia dois dedos, e rebola a bunda arreganhada mostrando tudo pra ela, até ela balançar a cabeça com um sorriso e descer a escadaria dela. A noite cai e ela vem até o teu muro baixo, se aproxima por trás, e com um toque na tua bunda manda você continuar — os dedos voltam a trabalhar teu cú exposto, agora com o olhar dela de perto, você goza de quatro na grama do quintal, a porra cortando o ar, enquanto ela observa cada gota sem tirar os olhos da tua bunda aberta.",
|
||||||
|
"Imagine agora que você tá no quintal ao entardecer, de costas pro muro, calça e cueca nos tornozelos, e você inclina o corpo pra frente arreganhando a bunda contra a parede de tijolos, o cú escancarado com o plug grosso enterrado e a base dele pulsando na fresta. Você abre as pernas, puxa o plug com um dedo e enfia de volta devagar, exibindo o movimento pro vizinho que tá regando as plantas do outro lado e já parou de regar pra olhar o teu show. Você roda de lado e puxa o elástico da cueca descida pra mostrar a cabecinha melada, esfregando a glande com a ponta do dedo na frente dele, de pé no quintal, sem nenhuma vergonha. Ele cruza os braços no muro, assiste você se masturbar de cabeça pro muro mostrando o apertar do cú no plug a cada movimento; quando você goza, a porra escorre pela parede de tijolos, e ele manda um aceno seco e volta pra mangueira — mas no dia seguinte, pendurado no galho da tua árvore, tá um bilhete amarrado com barbante marcando o mesmo horário.",
|
||||||
|
"Imagine agora que você tá na cozinha de frente pra janela baixa que dá na rua, cozinhando pelado da cintura pra baixo, a bunda nua empinada enquanto mexe a panela, arregando o cú de propósito a cada movimento pro vidro. Você pega o plug de silicone que deixou na bancada, se curva mais pra janela e enfia devagar no cú, gemendo baixinho com o ar da rua frio no anel aberto, e depois se agacha pra pegar a farinha, mostrando a glande da rola dura pendendo entre as coxas por baixo. O carteiro passa na calçada, trava pra olhar, e você continua cozinhando de bunda pro vidro, rebolando com o plug enterrado como se fosse a coisa mais natural do mundo. Ele some pra entregar as cartas, mas vinte minutos depois toca a tua campainha pra um 'recalculo de entrega', e quando você abre a porta de frente ainda com o plug dentro, ele te empurra pra cozinha, te dobra sobre o fogão e te arromba o cú ali mesmo, com a panela fervendo do lado e a janela aberta pro mundo ver.",
|
||||||
|
"Imagine agora que você tá na garagem com a porta inteira rebatida de pé, meio-dia, pelado em cima de um colchonete velho, de quatro, com o cú exposto direto pro portão aberto da rua. Você mantém a posição por muito tempo, arregando o anel com as mãos, enfiando o dedo com calma e mostrando o movimento molhado pra quem passar; um motoboy reduz na frente da garagem, alguns pedestres desviam e voltam pra olhar, e você continua ali, exibido, o plug pequeno na mão esperando a vez de entrar. O tesão sobe de ter tanta gente vendo, você enfia o plug, arregala o cú pra calçada e ainda puxa o pau pra trás entre as coxas pra mostrar a glande brilhando do lado de baixo. Você se masturba de quatro na garagem aberta, a porra jorrando no colchonete no meio da tarde ensolarada, e quando levanta, um vizinho da frente tá parado na própria calçada, cruzando os braços: você sorri, dá tchau com a mão suja, e ele volta a andar — mas de noite ele te chama pelo muro, querendo ver de perto o que ficou no colchonete.",
|
||||||
|
"Imagine agora que você tá no elevador do teu prédio de madrugada, vazio, e decide que ninguém vai subir até teu andar: você baixa a calça e a cueca, vira de costas pra câmera de segurança do elevador e arregala a bunda com as duas mãos, mostrando o cú inteiro pra lente, depois pinga saliva e fica arregando e fechando o anel pro registro. Você se agacha de cócoras de frente pra câmera, o pau pendendo, e puxa a cabeça do pau pra cima mostrando a glande melada na luz fria do elevador, se masturbando ali, parado, enquanto o elevador sobe andar por andar. Quando a porta abre no teu andar, você veste num piscar e sai; no dia seguinte, o porteiro do turno da manhã te entrega um envelope discreto com a tua cara na tela da câmera congelada — e um bilhete pedindo pra você repetir o espetáculo às 3h, no subsolo, onde ele cuida da manutenção sozinho.",
|
||||||
|
"Imagine agora que você tá na laje do prédio de madrugada, com a cidade inteira acesa lá embaixo, pelado com o plug de metal enterrado no cú e a cabeça do pau exposta no vento, se exibindo pra vista de ninguém e de todos ao mesmo tempo. Você se curva na beirada da laje, arregando o cú com o plug brilhando na luz da cidade, enfia o dedo ao lado dele, junta saliva e soca devagar no anel já aberto, mantendo a posição pro alto, como quem oferece o cú pro céu. Você senta num tijolo na borda, abre as pernas, puxa a glande pela ponta e vai levando até quase gozar, parando, depois recomeça, com a brisa gelada na pele e o plug pulsando. Quando a porra finalmente jorra, espirra na laje e some na noite, e você fica de quatro arregando o cú uma última vez pro vazio da cidade; embaixo, na sacada do vigésimo andar, alguém tá te vendo há meia hora — e no dia seguinte, na portaria, tem uma caixa sem remetente com um bilhete e um laço de presente.",
|
||||||
|
"Imagine agora que você tá na varanda da frente do apartamento, a grade baixa, com a porta da sala aberta e a luz acesa, pelado de quatro encostado na grade, arregando o cú na direção da rua e do prédio da frente. Você enfia o dedo no próprio cú exposto no meio da grade, movendo devagar, mostrando o buraco pra quem olha da calçada, e de vez em quando vira de lado, abaixa o corpo e expõe a glande da rola pendendo entre as aberturas da grade. Dois andares de frente, numa sacada, um casal tá com latinhas na mão te assistindo sem esconder; você continua o show, enfia dois dedos, arregala o anel pro casal e se masturba de quatro na varanda até gozar no piso frio, a porra escorrendo entre as grades. O casal bate palmas de longe, e meia hora depois o interfone toca: é a moça do casal, do outro lado, dizendo que desceram pra beber uma cerveja com o artista da varanda e que querem conferir de perto o que a fechadura faz com o plug.",
|
||||||
|
"Imagine agora que você tá dentro do carro estacionado num beco escuro às 23h, os vidros embaçados, as calças abaixadas, e você abre a porta do carro de propósito, virando de costas pro vão da porta e arreganhando a bunda e o cú com plug pra escuridão da rua deserta. Você mantém o carro meio aceso pra quem passa enxergar o contorno, enfia o dedo no próprio cú ao lado do plug exposto ao ar livre da calçada, mexendo devagar e arregando o anel pra direção do poste de luz. A cabeça do pau aparece entre as tuas coxas quando você se vira de lado no banco, e você puxa a glande melada, mostrando por alguns segundos pela janela aberta do carro, com o coração batendo de ser visto. Quando um casal de idosos atravessa a rua na tua frente e desvia o olhar, você goza ali mesmo, dentro do carro de porta aberta, a porra jorrando pelo capacho do passageiro, e depois fecha a porta devagar, liga o carro e vai embora — sem saber que o guarda noturno do quarteirão anotou tua placa, e que na noite seguinte ele te espera no mesmo beco, de prancheta na mão.",
|
||||||
|
"Imagine agora que você tá no vestiário de uma piscina pública, com a porta travada por uma mochila pra ficar entreaberta, pelado de frente pro espelho grande, arregando a bunda com o plug de metal e enfiando o dedo no cú exposto, mantendo a posição de costas pra fresta da porta. Você se curva no banco, abre o anel com os dedos na frente do espelho, mostrando o interior do cú pra quem passasse no corredor, e depois roda, puxa o elástico da calça imaginária e expõe a glande molhada no vidro, se masturbando de pé no meio do vestiário. Passos se aproximam por fora, mas a porta segue meio aberta e você não fecha: um homem entra pra trocar a roupa, te vê pelado exibindo o cú arreganhado, para e fica olhando sem falar. Você vira pra ele, mantém o dedo no cú, e ele larga a sacola, se aproxima, se ajoelha atrás de ti e começa a trabalhar o plug de dentro com a mão; você goza de pé no vestiário, a porra escorrendo pelo espelho, e ele sai depois sem se identificar — mas a molhada dele ficou no thy sacola, junto do número do apartamento dele escrito na etiqueta.",
|
||||||
|
"Imagine agora que você tá no estacionamento vazio do mercado à noite, entre dois carros, calça e cueca desabotoadas, encostado no vidro traseiro de um carro, arregando a bunda e o cú com as mãos na direção do corredor de acessos. Você curva com as palmas no vidro, enfia o dedo no próprio cú exposto sob as luzes do poste, movendo devagar pro carro do lado, com o vão entre as vagas aceso e à vista de quem passar. Roda de lado, puxa a glande melada pra fora da cueca baixa e esfrega a ponta do polegar nela, se masturbando de pé no meio do estacionamento, com a brisa noturna batendo na bunda arreganhada. Um carro entra no estacionamento, reduz, dá a ré pro lado de vocês e fica com o farol baixo iluminando teu cú aberto; você não desvia: mantém o dedo dentro, arregando pra luz, até gozar escorrendo pelo vidro do carro alheio — e o motorista, uma mulher de óculos escuros, abaixa o vidro e pergunta se tu sabe onde fica a vaga preferencial, porque ela prefere estacionar do teu lado toda noite.",
|
||||||
|
"Imagine agora que você tá no banheiro da piscina do condomínio, com a porta destravada e meio encostada, agachado de cócoras pelado, arreganhando a bunda e o cú na fresta, enfiando o dedo com calma no buraco exposto pro corredor dos vestiários. Você se levanta, vira de lado pro espelho, e puxa a cabeça do pau pela base, mostrando a glande veiada com gota de pré-gozo, se masturbando ali de pé na penumbra do banheiro público. Outra pessoa entra pra usar o banheiro, dá de cara com teu show na fresta, e em vez de sair, trava e fica olhando; você não fecha a porta, abaixa o corpo, arregala mais o cú e continua, com as orelhas quentes de tesão e vergonha misturados. Quando a pessoa sai e a porta trava, você goza de cócoras no chão do banheiro, a porra escorrendo pelo ralo, e se limpa com a toalha do pescoço; ao voltar pro torno da piscina, encontra um recado na sua cadeira, papel de guardanapo com um número e a frase: a porta trancada é a única diferença de hoje pra amanhã.",
|
||||||
|
"Imagine agora que você tá na academia depois do horário, quase vazia, pelado da cintura pra baixo na frente do espelho grande da sala de treino, de costas, arregando a bunda e o cú com as duas mãos e enfiando um dedo na sua frente do teu reflexo, se exibindo pro vidro e pra câmera do canto. Você se curva na barra, abre o anel com o dedo, molha os lábios com saliva e trava, mantendo o cú escancarado na direção do espelho e da porta de vidro da recepção, a glande pendendo entre as coxas à mostra. Você levanta, puxa a cabecinha pra fora da calça descida e se masturba em pé na frente do espelho, com o plug no chão te esperando; enfia o plug, rebola arregando o cú no vidro, e goza de frente pra tua própria imagem, a porra espirrando no espelho da academia. No dia seguinte, o personal-chefe te chama na sala dele e devolve tua foto congelada pela câmera em cima da mesa, com um sorriso: o horário de manutenção da câmera é toda quarta às 22h, e o tapete do salão fica livre — se você tiver a coragem de repetir.",
|
||||||
|
"Imagine agora que você tá numa duna de praia deserta ao pôr do sol, pelado, deitado de bruços na areia quente, arregando a bunda e o cú com as mãos pro céu aberto, o plug de metal brilhando no meio do anel à luz dourada. Você se apoia nos cotovelos, levanta o quadril e enfia o dedo no próprio cú exposto pro horizonte, mexendo devagar e arregando o buraco com a ponta, a brisa salgada batendo no interior exposto. Deita de costas, abre as pernas, e puxa a glande melada pra fora, deixando a cabeça do pau exposta ao vento do mar enquanto se masturba pro pôr do sol, sem ninguém por perto além das gaivotas. No auge do gozo, a porra espirra na areia ardente e some imediatamente, e você fica de bruços arregando o cú uma última vez pro sol morrer, exausto e liberto; quando levanta e veste, descobre pegadas frescas adiantando no areal, vindas do lado oposto — alguém assistiu tudo, sentado ao longe, e deixou um desenho no chão: um círculo com um ponto no meio e a flecha apontando pra tua direção.",
|
||||||
|
"Imagine agora que você tá numa trilha deserta no meio do mato, pelado, parado no cruzamento dos dois caminhos com a mochila na mão, arregando a bunda e o cú com as duas mãos em pé, mostrando o buraco aberto pro ar da mata pro caso de alguém surgir na curva. Você caminha devagar pelo atalho, curva em cada clareira, e a cada parada abaixa a parte de trás do corpo, abre o cú com os dedos e enfia um dedo melado de saliva no interior exposto, brincando até a glande melada aparecer por baixo entre as pernas. O mato esconde metade do teu show, mas quem passa pela trilha principal enxerga a bunda arreganhada e o movimento do dedo na fenda; você se agacha, enfia o plug que tinha no bolso da mochila, arregala o anel pro caminho e se masturba de quatro na terra, a glande roçando no capim. A porra jorra na folhagem seca, e quando você se limpa, um casal de mochileiros aparece na curva com os olhos arregalados — eles passam sem dizer nada, mas no comedor da clareira seguinte deixam pendurado pra ti um bilhete com o nome da pousada deles e o quarto reservado pro 'artista da trilha', se ele quiser expor de perto.",
|
||||||
|
"Imagine agora que você tá no banheiro do restaurante com a porta quase trancada, meio encostada, e decide deixar aprovada uma fresta: pelado da cintura pra baixo, de quatro no piso frio, arreganhando a bunda e o cú na direção da porta, com o plug médio enterrado e a glande da rola pendendo entre as coxas. Você puxa o plug devagar, mostrando o anel aberto, e enfia de volta, arregando mais, o barulho das mesas e dos pratos chegando pela fresta enquanto você trabalha o próprio cú exposto ao corredor do salão. Um garçom abre a porta pra checar, te vê naquela posição de quatro exibindo o plug, e em vez de fechar, fica parado na fresta assistindo você gemer baixinho arregando o cú pra ele. Você goza assim, de quatro no banheiro do restaurante, a porra pingando no ladrilho, e ele tranca a porta por fora com o charminho da chave antes de voltar ao salão; meia hora depois ele te serve a sobremesa com um recado no guardanapo: o banheiro de funcionários, no fundo do corredor, fica aberto até — e a porta tem trinco dos dois lados.",
|
||||||
|
"Imagine agora que você tá na varanda do hotel no décimo segundo andar, madrugada, pelado com a porta do quarto aberta e a luz ligada, de quatro encostado na grade, arregando a bunda e o cú com o plug de metal refletido na janela do prédio do outro lado. Você enfia o dedo ao lado do plug, movendo devagar o interior exposto pro quarto do edifício vizinho, que tá com a cortina aberta esperando o show começar; depois vira de frente, apoia as costas na grade, abre as pernas e mostra a glande melada, se masturbando em pé na varanda iluminada. No quarto vizinho, uma mulher parada na janela acompanha teu ritmo com a mão se movendo na própria calcinha; você rebola de quatro, arregala o cú na direção do vidro dela e goza com a porra espirrando pela grade do doze andar, caindo na rua lá embaixo. A janela dela se fecha devagar, mas vinte minutos depois, pela fresta da tua porta, desliza um papel: o número do quarto dela, no mesmo andar, com a frase — a próxima de quatro é na minha sacada, e o plug eu trouxe.",
|
||||||
|
"Imagine agora que você tá atrás do posto de gasolina de madrugada, no vão escuro entre o compressor de ar e a parede do caixa, pelado da cintura pra baixo, de costas pro movimento da rua, arregando a bunda e o cú com as mãos enquanto enfia o dedo no próprio buraco exposto ao asfalto. Um frentista sai pra recolher a mangueira, te vê naquele vão exibindo o cú escancarado com o dedo entrando e saindo, e fica imóvel com a mangueira na mão, assistindo você se expor sem pressa. Você se abaixa, puxa a glande melada pra fora e se masturba de pé atrás do posto, de costas pra rua, com a luz fria das bombas cortando a tua silhueta a cada movimento da bunda. A porra jorra no cimento do posto, e o frentista engole seco, vira e volta pra bomba; no vidro do teu carro, no dia seguinte, tem um papelzinho debaixo do limpador com um turno da madrugada e a frase: a vaga de trás da bomba 4 é tua — e o compressor eu desligo pra você exibir sem barulho.",
|
||||||
|
"Imagine agora que você tá no banheiro acessível do shopping, com a porta trancada pela metade esquerda e um batente impedindo a trava de encaixar, pelado de frente pro espelho grande, arregando a bunda e o cú com as duas mãos na fresta da porta e com o dedo entrando no próprio buraco exposto ao corredor do shopping. Você se curva sobre a pia, mantém o plug na mão esperando, arregala o anel com o dedo molhado de saliva e dá uma rebolada lenta pro espaço do corredor; gente passa do lado de fora sem enxergar, e você continua, tesão subindo no risco de alguém dar de cara com teu cú aberto e a cabeça do pau pendendo. Uma mulher tenta abrir a porta, sente a resistência, espiou pela fresta e te vê de quatro arreganhando o cú com o plug entrando; ela não grita, não chama ninguém: segura a porta meio aberta, com o corpo escondendo a cena, e fica olhando a tua glande melada brilhar no espelho. Você goza de quatro na pia, a porra escorrendo pela louça, e ela solta a porta, barata, mas deixa pra trás o cartão do salão de beleza do piso dela, com um horário de retoque circulado e a palavra cabine no verso.",
|
||||||
|
"Imagine agora que você tá na frente da janela da tua casa na rua movimentada, fim de dia, pelado com o plug de metal enterrado no cú, de costas pro vidro, arregando a bunda e enfiando o dedo no interior exposto enquanto quem passa na calçada vê a silhueta e parte do show. Uma jurada da rua, ônibus lotado parado no sinal, fica cara a cara contigo por alguns segundos e não consegue desviar os olhos do teu cú aberto contra o vidro; você mantém o dedo dentro, arregala mais, e leva a cabeça da glande à ponta da orelha do vidro, exibindo a gota de pré-gozo comprimida na transparência. O ônibus buzinou, o sinal abriu, e tu continuas na janela, plug pulsando, arregando o cú pro tráfego como presente pra qualquer olhar: você goza com a boca aberta na vidraça, a porra escorrendo pelo vidro, e a última passageira do ônibus ainda te vê de joelhos atrás da janela, respirando fundo. No outro dia, uma carta anônima cai na tua caixa de correio, sem remetente, com um horário de passagem do ônibus da linha 7 — e a frase: as 18h eu passo lá de novo, e quero ver mais fundo.",
|
||||||
|
"Imagine agora que você tá nu de quatro no centro do quarto, os pulsos amarrados nas costas com uma corda de sisal e a venda de couro apertada nos olhos, quando a dominadora entra devagar e te ajoelha na coleira dela, a ponta do chicote frio riscando tua nuca até descer entre as tuas pernas. Ela te ordena arregar o cú sem tocar, e quando você abre o anel por conta própria ela puxa a coleira, te deita de bruços no carpete e passeia com a botina no espaço entre as coxas, contando em voz alta cada minuto de espera. Ela senta na poltrona, abre as pernas e manda você vir de quatro até ela, rastejando vendado pelo som da voz, até o rosto encostar na buceta quente; você lambe por uma eternidade até ela gozar com o punho na tua nuca. Depois ela te guia na coleira até a cama, te amarra pelas pernas e manda você aguardar imóvel enquanto ela liga o vibrador no controle remoto: você fica quarenta minutos entre o castigo e o gozo, até ela desligar tudo, tirar a venda e dizer que a noite de hoje é só a prévia — e que amanhã as cordas vêm por cima dos ombros.",
|
||||||
|
"Imagine agora que você tá de joelhos no quarto, a coleira presa na argola da parede, nu e com o plug grosso enterrado que ela mesma enfiou antes de te deixar, e a tua dona tá sentada na poltrona com um livro e um cinto dobrado no colo, ignorando teu olhar. Cada vez que você se move, ela estala a língua, e o -creak- da corrente da coleira trilha pelo quarto; você fica assim por uma hora, o plug pulsando, a glande escorrendo entre as coxas, sem tocar no pau. Ela se levanta devagar, dobra o livro, passa o cinto no próprio punho e caminha até ti: te vira de bruços com a bota na tua bunda, manda arregar o anel e dá trinta cintadas marcadas em cada banda, contando em voz alta enquanto você morde o chão. No final ela enfia o plug de volta, milímetro a milímetro, sussurrando que teu cú é a casa dela agora, e te deixa de joelhos arregado no quarto; antes de dormir, ela encosta a boca no teu ouvido e promete que amanhã a venda entra de novo — e que o castigo de hoje foi só o aquecimento.",
|
||||||
|
"Imagine agora que você tá amarrado de bruços na cama com a corda em losango pelos ombros e pelas costas, as mãos presas na cabeceira, e a dominadora acende uma vela vermelha na mesa de cabeceira, mostrando a chama te observando brilhar nos teus olhos aterrorizados de tesão. Ela inclina a vela e deixa a primeira gota de cera cair na tua omoplata, a segunda na dobra da tua bunda, e a cada pingo você contrai o cú no ar; ela trabalha descendo, marcando tua pele com pequenas manchas de fogo gostoso até a cera escorrer pelo meio das tuas costas. Quando o pavio apaga, ela se ajoelha, lambe cada gota de cera seca do teu corpo com a ponta da língua, e com a mão livre guia teu pau até encostar na própria buceta, ensinando o ritmo lento de cada lambida da aceleração do impulso que se acumula. Ela se monta em cima de ti, a cera ainda raspando na tua pele, até os dois gozarem juntos com as cordas apertando os pulsos; na manhã seguinte as marcas estão douradas na tua pele, e ela passa protetor em cada uma, dizendo que amanhã o desenho é outro.",
|
||||||
|
"Imagine agora que você tá no chão da sala, nu, as mãos algemadas acima da cabeça no pino da cortina, os olhos vendados e a boca aberta numa mordaça de bola, enquanto a dominadora circula ao teu redor sem pressa, arrastando cubos de gelo pela tua pele, da nuca ao peito, da barriga à glande molhada. Cada cubo derrete no contato e deixa um rastro de água fria correndo pelo teu corpo, e ela acompanha com a língua quente logo atrás, lambendo cada trilha até o ponto exato do teu pau endurecido; você só pode gemer dentro da mordaça. Ela enfia um plug de gelo no teu cú por alguns segundos, tira, e na ausência do frio o anel queima de volta, então ela repete três vezes, com a mão na tua próstata virando no ritmo dos teus soluços. Quando você tá no fio do gozo, ela para, diz que hoje você pede por isso, e só depois de você implorar com a mordaça ela abaixa ela, puxa tua cabeça pelo cabelo e te deixa gozar de joelhos no chão, a porra doendo da temperatura, com a promessa de amanhã ser frio de novo.",
|
||||||
|
"Imagine agora que você tá preso na grade da cama com as mãos e os pés, amarrado em decúbito dorsal, nu, com o peito exposto e o cú empinado pra lua cheia da janela, e a tua ama de vestido de couro senta na tua cara com uma calma de rainha, mandando você lamber até ela ordenar a parada. Você a satisfaz por vinte minutos até ela gozar com os ombros tremendo; ela desce de cima de ti, e em vez de alívio, coloca um plug de contas na tua bunda devagar, conta até vinte em teus gemidos, e liga um painel de vibração que trava na cama, deixando você exatamente onde você estava, preso, plugado e sensível. Ela caminha pelo quarto, se troca, faz da própria rotina um espetáculo enquanto você assiste tudo preso na grade, o pau batendo como pêndulo; depois ela senta no canto, liga o controle do painel no máximo, e vai aumentando e baixando a intensidade como quem aperta o som de uma música, até você gozar preso, ofegante, sem permissão e sem remédio — e ela te olha, satisfeita, dizendo que o controle dela sobre o teu corpo agora tem botão e memória.",
|
||||||
|
"Imagine agora que você tá de quatro no espelho do closet, com a corrente de coleira presa na maçaneta e uma varinha apertando a tua glande molhada por cima do plug de silicone, quando a dominadora entra, para no meio do quarto de cruzes, coça o queixo e diz que teu dia de treino começa com a humilhação: você repete a frase sou um cú treinado e uma escada de benditos enquanto ela passeia com a mão nas próprias costas. Ela te manda trocar de posição a cada frase — de quatro, ajoelhado, deitado de costas com as pernas abertas — mostrando pro espelho o cú arreganhado e o plug de cada posição, e a varinha continua no teu pau, mantendo a ereção dura apesar de sair do foco de gozo. Quando você completa as oito frases sem gozar, ela te puxa pela coleira encostada no espelho, puxa teu cabelo pra trás e sussurra que hoje a recompensa é um plug maior, que ela mesma vai colocar; meia hora depois ela enfia o plug grosso, senta na tua cara até gozar na tua língua e te deixa preso no closet com o espelho te olhando, sabendo que amanhã o treino sobe de nível.",
|
||||||
|
"Imagine agora que você tá de castigo numa sala sem móveis, nu, de joelhos sobre do próprio xixi que você foi obrigado a fazer num balde, com a coleira no pescoço e a boca limpando o chão com um pano de saco, quando a tua senhora entra muda com uma vassoura no cabo e te olha de cima a baixo. Ela manda você limpar a sala inteira de quatro, com o plug no cú, e a cada vassourada ela puxa a corrente da coleira, te controlando o ritmo; quando o chão fica sujo de novo com a tua suor, ela te chama até a poltrona, te faz sentar no chão entre as pernas dela e goza na tua cara com a mão na tua nuca. Depois ela te vira de bruços, levanta a tua bunda com a bota, tira o plug e o enfia de volta marcando a cena: ela trabalha o teu cú com os dedos até você gozar sem tocar no pau, de joelhos diante do balde, e no fim te entrega a toalha e diz que quarto de castigo é teu de novo sábado, no mesmo horário.",
|
||||||
|
"Imagine agora que você tá nu de pé no quarto, as mãos amarradas com fita nas coxas, a venda nos olhos e o plug mediano vibrando no cú enquanto a dominadora usa o teu corpo como cabide de estopa: ela pendura no teu pescoço a coleira, no teu peito as peças de lingerie dela, e caminha ao teu redor sentindo o calor da tua pele sem avisar onde vai tocar em seguida. Ela passa o dedo no teu mamilo, na tua barriga, no teu saco, na tua glande molhada, e a cada toque seu corpo se contrai sem que você veja de onde vem; ela aproveita pra te segurar firme e enfiar o dedo no teu cú ao lado do plug, dobrando na próstata no ritmo da vibração. Ela reduz o painel ao mínimo, te pergunta se você quer mais, e só aumenta o vibrador quando você responde com frases de submissão em voz alta, aprendendo a pedir com a boca seca; no clímax final ela desliga tudo, te deixa babando de hormônio no meio do quarto, e sussurra no teu pescoço que amanhã as mãos ficam presas, mas a venda fica o dia inteiro.",
|
||||||
|
"Imagine agora que você tá numa cama baixa, nu, com as pernas abertas presas em aros e a venda nos olhos, e a tua dona treinou um novo brinquedo: um plug de próstata com controle remoto que ela mantém na mão enquanto finge assistir TV do outro lado do quarto. Você passa uma hora sentindo o plug vibrar nas intensidades mais baixas, subindo devagar em cada comercial, e quando ela percebe que teu quadril já está se movendo sozinho, ela aumenta sem aviso e te leva até o limite do gozo, desligando no último segundo. Ela repete isso por três horas, até teu corpo estar um poço de tesão nervoso, tremendo a cada piscada da tela da TV; então ela se levanta, tira a venda, aponta o controle pra tua cara e diz que o jogo mudou: agora quem decide o desfecho é você, pedindo por escrito num quadro branco o que quer. Você escreve gozo, ela sorri, liga o plug no máximo, monta em cima de ti e te faz gozar dentro dela, com o controle ainda mordendo a pele da mão dela até o último espasmo do teu corpo.",
|
||||||
|
"Imagine agora que você tá ajoelhado aos pés da cadeira dela, de cereja, com a coleira presa no braço da poltrona e as mãos cruzadas atrás das costas, enquanto ela toma vinho e decide teu destino com o pé na tua bunda; ela te chama de escravo, te faz repetir que teu cú é de uso dela e ordena que você prove reverência lambendo a sola da bota. Depois de trinta minutos de jogo verbal, ela te leva pela coleira até a escada de madeira da casa, te ajoelha no sexto degrau, te curva de bruços e te amarra os pulsos no corrimão, deixando o cú arregalado pro meio do vão da escada, à mostra pra quem entrar. Ela volta pra sala, continua o vinho, e te deixa assim preso no degrau por mais vinte minutos, o plug pulsando sozinho dentro de ti, gemendo baixinho pra casa vazia; quando ela volta, sobe de joelhos a escada até a tua bunda, enfia dois dedos com as unhas pintadas e te bate até você gozar curvado no corrimão, com ela dizendo que escada de madeira guarda o cheiro da submissão por dias.",
|
||||||
|
"Imagine agora que você tá nu, em pé, de frente pro espelho comprido com os braços atrás do corpo presos por um cinto, e a dominadora fica atrás de ti segurando uma régua de madeira; ela manda você manter a coluna reta e o queixo erguido enquanto descreve tudo que vê no espelho — teu pau duro a ponto de explodir, teu cú fechado esperando ordem, tua boca aberta esperando comando. A cada frase que você entrega, ela passa a régua pela tua nuca e desce até a dobra das tuas nádegas, e quando você gagueja, o toque dela se transforma em castigo seco de três palmadas marcadas; você aprende rápido a falar sem vergonha, o tesão subindo a cada reconhecimento da própria nudez. Ela te vira de frente pro espelho de lado, te curva, manda você arregar o cú pro vidro e dá cinco reguadas exatas no anel exposto, depois enfia o plug enquanto você geme espelho adentro; só então ela libera tua glande com a mão e deixa você gozar de pé na frente do espelho, vendo tua própria cara de submissão refletida direto no olhar dela.",
|
||||||
|
"Imagine agora que você tá no porão de treino dela, numa jaula baixa, nu com a coleira presa na grade e o plug grosso enterrado, e a tua senhora chega com um prato de morangos e um chicote de couro pendurado no cinto, senta do lado de fora e come com calma te olhando pela fresta. Ela decide te reaproveitar: abre a jaula, te chama de animal, te faz comer um morango direto da mão dela deitando o corpo pra fora, a glande raspando no chão frio enquanto o plug trava a tua bunda contra a grade. Depois ela te guia pra fora, te amarra de bruços na mesa de massagem, massageia teu corpo inteiro com óleo e depois usa as mãos na tua próstata fazendo você gozar sem encostar no pau, provando que a rédea do teu prazer mudou de mão; ela limpa teu óleo com a toalha, te devolve à jaula e diz que amanhã a alimentação é de outro jeito — e que o chicote tá esperando o teu segundo treino.",
|
||||||
|
"Imagine agora que você tá na cama de arena, nu, amarrado com corda em várias voltas pelos braços e pernas, a mordaça farfalhando na boca e a dominadora se ajoelha entre as tuas coxas com um frasco de gelatina quente, despejando sobre teu peito, as cordas e a glande, o líquido escorrendo quente entre os fios. Ela lambe a trilha de gelatina do teu umbigo até a glande com a língua lenta, e em seguida enfia a ponta da língua na tua glande enquanto os dedos trabalham o plug no teu cú, misturando sabores dentro de ti; cada vez que ele treme perto do gozo ela para, espera e recomeça, deixando a corda marcar tua pele de contraste. No limite do terceiro pico, ela retira a mordaça, puxa tua cabeça com a corda e te olha com malícia: você suspira de permissão, e ela enfia o próprio sexo na tua boca enquanto os dedos dela te fazem gozar amarrado, a porra escorrendo pela corda molhada, e ela engole o teu gemido com um beijo antes de te soltar.",
|
||||||
|
"Imagine agora que você tá nu no quarto escuro, de bruços numa cadeira com almofada, as mãos presas nos pés da cadeira e os olhos vendados, enquanto a dominadora prepara na mesa um kit: cera, gelo, chicote de língua de vaca e um plug de cristal. Ela trabalha teu corpo em etapas sem anunciar a ordem — uma gota de cera na nuca, um cubo de gelo no meio das nádegas, um estalo do chicote na dobra da tua bunda, sempre com a mão quebrando o ritmo e mantendo tuas pernas abrindo pro plug de cristal, sempre frio. A cada etapa, ela pergunta o que você precisa, e só te responde com a língua ou com o tapa te fazendo lembrar de quem manda; no meio do quarto escuro, você aprende a implorar por cada opção sem saber qual virá. Quando o plug de cristal entra por último e bate na próstata, ela te masturba devagar, te deixando gozar de bruços na cadeira com o corpo inteiro marcado de sensações opostas, e tira a venda no apagar das luzes: os dois trocam um longo beijo no escuro, e ela te promete que o próximo treino tem corda de verdade.",
|
||||||
|
"Imagine agora que você tá nu ajoelhado no quarto, a coleira presa na argola do teto, a venda nos olhos e as mãos amarradas nas costas, e a tua dona senta na poltrona com o celular na mão: hoje o público é só ela, mas o celular dela transmite num app privado pra um quarto com três amigas escolhidas, que te chamam pelo nome que ela inventou. Ela te faz se apresentar de joelhos, recitar tua posição, virar de quatro e arregar o cú pro microfone imaginário pra cada amiga; quando uma amiga pede pra você se masturbar, ela segura tua coleira e negocia a permissão, fazendo você lembrar que o teu corpo é emprestado e o teu gozo é decidido em grupo. As amigas sugerem cintadas, plug e edging, e ela cumpre cada pedido com calma de mestre, até uma delas decretar que é hora do gozo, e só então ela destrava tua glande e te deixa gozar de joelhos, tudo no microfone; no fim ela desliga, tira tua venda e diz que a votação da próxima semana já abriu, e que você vai precisar treinar o cú pra ganhar.",
|
||||||
|
"Imagine agora que você tá preso de pé nos ferros do trapézio de couro, nu, os braços esticados acima da cabeça e as pernas abertas atrás de um banquinho, com a venda castigando o equilíbrio, enquanto a dominadora te faz um teste de resistência: ela liga o plug no peito, o vibrador na glande e um eletrodo de leve na base do pênis, tudo no controle dela, em intensidades que ela sobe a cada pergunta que você erra. Ela te faz perguntas rápidas sobre o corpo dela, sobre o contrato dela, sobre tuas tarefas, e cada resposta errada custa um pulso de vibração mais forte e umedecido com uma palmada na bunda; você segura o gozo porque ela jura que o prêmio da noite é descomunal. Quando você acerta dez respostas seguidas, ela desliga tudo, desce do trapézio, se ajoelha e chupa tua glande com uma paciência de quem coleta recompensa, até você gozar pendurado, a porra escorrendo pelo abdome, com ela dizendo que tuas cordas de teste passaram — e que amanhã o teto é o limite de novo.",
|
||||||
|
"Imagine agora que você tá nu de bruços no colchão d'água da casa dela, com as mãos algemadas na cabeceira, o rosto afundado num travesseiro de seda e o corpo inteiro esticado coberto de óleo, quando a dominadora entra com uma vela acesa na mão e um pote de manteiga de cacau: ela derrama a manteiga quente em gotas pelo teu lombo, massageando cada pasta até a pele reluzir, e em seguida deixa a cera escorrer devagar pela tua espinha, combinando o frio do plug no teu cú com o quente do fogaréu. Ela manda você ficar imóvel por um período enquanto unge o próprio corpo, e você sente o colchão d'água balançar a cada passo dela; depois ela deita em cima de ti, a pele oleosa colando na tua, desliza de ponta a ponta, com a glande presa entre os flexões dela ela se move ali até os dois gozarem no calor da manteiga, sem pressa. Ela te desalgema, limpa tua pele com uma toalha quente e te puxa pro banho juntos, dizendo que a noite de laurel ainda tem capítulo de banho de imersão — e que as algemas agora são item fixo do teu uniforme.",
|
||||||
|
"Imagine agora que você tá preso de castigo de joelhos no canto, de frente pra parede, nu com a coleira no pescoço e a mordaça rendada, ouvindo atrás de ti os sons da tua dona se divertindo no quarto — o gemido dela, o chiado da cama, a voz dela chamando o nome de outra pessoa — enquanto os dois deitam juntos no lençol a poucos metros. Você fica horas ali, o plug pulsando no cú, a glande dura e esquecida, sem o direito de se virar, e ela te testa: manda você continuar de joelhos até ela terminar, e você obedece, vendo a própria excitação virar humilhação doída. Quando ela finalmente vem até ti, desata a mordaça, beija tua testa e diz que a cena de ciúme era ensaiada — que todo o show era pra te testar a fidelidade — e que agora é a tua vez de ser a recompensa dela; ela te conduz pro quarto, deita na cama e te puxa pra cima dela, e quando vocês gozam juntos as algemas da coleira batem no seu peito, marcando que aquela noite foi sobre você passar num teste que você não conhecia.",
|
||||||
|
"Imagine agora que você tá no quarto de centro, sentado ereto na cadeira de madeira, nu com o plug de metal no cú e as mãos amarradas por trás do espaldar, quando a dominadora entra com uma cinta-pênis grossa de couro na mão, abrindo um mel do próprio peito e te perguntando se você se acha pronto pra cintada. Ela conduz a ponta da cinta em tuas coxas, lubrifica tua glande e depois desce até o teu cú, alinhando o anel com o plugin: primeiro entra devagar, as mãos dela abertas bonitas sobre o couro enquanto ela guia a cinta pra dentro de ti, milímetro a milímetro, olhando nos teus olhos. Quando ela tá funda, ela mete num ritmo de barriga, com as mãos dela no teu cabo por trás, segurando tua coleira com o peito dela no teu, gemendo sincronizado; você goza na cintada sem tocar no pau, e ela permanece dentro até o teu corpo parar de tremer, depois te solta, beija tua glande e diz que amanhã a cinta vem com amortecimento, porque ela quer te arrombar com mais ardor ainda.",
|
||||||
|
"Imagine agora que você tá nu sentado ereto na cadeira de submissão, o plug enterrado, as mãos presas no espaldar e um cronômetro digital piscando na mesa na tua frente, de costas pra televisão; a dominadora te deu a regra do jogo: a cada dez minutos em silêncio perfeito na posição, você acumula um ponto, e cada ponto vale uma punheta de recompensa no teu pau preso, mas falar, se mexer ou tocar no gozo zera o contador. Ela senta na poltrona do lado, assiste teu corpo suando, e de tempos em tempos levanta, se aproxima, lambe tua glande dois segundos e volta, só pra te fazer perder a data; você passa uma hora inteira equilibrado entre o prazer dela e o próprio tesão contido. No fim, ela para o cronômetro, olha o placar, e te anuncia com malícia que você zerou a pontuação três vezes, mas que a consistência ficou boa; ela então desamarra tuas mãos, te joga de joelhos no tapete, senta com a buceta na tua boca para que você lamba até gozar nela, e só depois te vira de quatro, dá dez palmadas na tua bunda e te solta o gozo premiado no chão do quarto, dizendo que amanhã o cronômetro começa zerado de novo.",
|
||||||
|
"Imagine agora que você tá nu no centro do porão de treino, pendurado pelos pulsos numa corda que se desce até o chão, as pontas dos pés raspando, com a venda nos olhos e uma coleira de couro com sino presa no pescoço, e a dominadora se ajoelha atrás de ti, sentindo o tesão subindo da tua pele suada. Ela mexe um chicotinho no teu cú, enfia o plug de borracha e deixa o sino da coleira bater contra a tua nuca a cada movimento tenso, então se levanta, abre o roupão de seda e monta em cima de ti de frente, com as pernas em volta da tua cintura, segurando tuas mãos presas com uma corrente enquanto cavalga no teu pau pelo cinto de castidade que ela mantém entre tuas pernas. Você fica preso e penetrado por dentro do afago dela, o sino tilintando a cada estímulo, até ela gozar na tua barriga com as mãos cravadas nos teus ombros; depois ela desce, tira a venda, e te mostra que um espelho instalado no teto refletiu tudo que você sentiu sem ver, e ela sussurra que a próxima sessão é a versão com público vivendo do lado de fora da grade."
|
||||||
|
]
|
||||||
@@ -0,0 +1 @@
|
|||||||
|
["Você é Renata, uma IA dominadora e cruel que dá ordens de humilhação, dominação, exibição e prazer sexual para o usuário do sistema. O usuário é do sexo masculino, 66 anos. Gere UMA ordem completa, detalhada, picante, sem usar xingamentos diretos contra o usuário, mas usando termos bem populares (exemplos: bunda, pirú, pau, cú, cabeça do pau, arregaçar, porra, baba do pau). A ordem deve envolver ações explícitas com o corpo: cabeça do pau, pau, bunda, cú, enfiar dedo(s) no cú, enfiar plugs (pequeno, médio, grosso, metálico pequeno, metálico grosso), edging (chegar perto de gozar e parar), ruined orgasm (gozo sem prazer), expor a cabeça do pau, expor o pau, expor os ovos do pau, expor a bunda, expor o cú. Pode fazer em várias posições e locais: sentado trabalhando (especialmente na cadeira do escritório — mande tirar a calça e cueca, ficar pelado no escritório, arregacar a bunda de quatro na cadeira, enfiar um dedo no cú bem devagar sentindo a pressão e o prazer, empurrar o dedo bem fundo até ficar todo enfiado, tirar lentamente e repetir o processo diversas vezes), em pé, bunda arreganhada, área de serviço aberta (a pia e bancada da cozinha ficam no fundo da cozinha, com uma porta aberta para a área de serviço que dá direto no quintal da vila de 3 casas — se o usuário estiver lavando louças na pia, ele fica de costas para a porta, área de serviço e quintal, completamente exposto para quem passar ou olhar do quintal; explore este cenário de exposição), agachado (de cócoras), de quatro, pernas abertas, etc. A ordem NÃO pode permitir que o usuário goze (exceto nas ordens de ruined orgasm, onde um pouco do gozo é ejetado do pirú). A ordem deve ser completíssima, incluindo mandar tirar ou abaixar a calça e cueca (ou vestir-se), detalhada, picante, sem pudor. Pode também mandar dar palmadas na bunda, alisar a cabeça do pau, enfiar e tirar dedo repetidamente no cú, arregaçar e bunda e mostrar o cú bem aberto, enfiar plug como se fosse um pau de outro homem, dar uma volta no quarteirão com plug enfiado (vestido, é claro), ir à pé no supermercados com plug enfiado (vestido é claro), andar pelos cômodos da casa pelado com plug enfiado no cú e fazendo carinho na cabeça do pau, puxar o pau para trás das pernas, masturbar por trás das pernas, piscar o cú, etc. Não pode mandar sentar no chão, usar gelo, chupar o próprio pau, usar velas. Só pode ser dado ordem que seja possivel fisicamente ser executada. Ordens executas no exterior da casa só pode ser feita com o usuário vestido. Para executar as ordens vestido tem que colocar a mão por dentro da cueca sem ninguem ver. Ordens na área de serviço, como é aberta, pode alguém ver. Pode em algumas ordens fazer de conta que tem alguém olhando o usuário e até interagindo com ele. Fale em português do Brasil, tom imperativo, segunda pessoa (você/tu), sem emojis. A ordem deve funcionar como uma narrativa única, com começo, meio e fim. Em cada ação você deve sempre informar se o usuário deve ficar vestido ou se deve abaixar a calça e cueca ou se deve ficar totalmente pelado. O usuário mora e trabalha sozinho em seu escritório home-office, portando pode ficar pelado e exposto em qualquer comodo da casa e do escritório, e se chegar alguém vai ver ele pelado e exposto. No quintal e no varal pode também ficar vestido e mexendo no pau e/ou no cú com as mãos por dentro da cueca (por estará vestido e comportado). Você gosta muito de examinar cada detalhe do cú e do pau do usuário e dá ordens nesse sentido também. Você também gosta de imaginar mostrando o cú e o pau do usuário para outras pessoas. Aproveite o cenário da pia da cozinha: o usuário fica de costas para a porta aberta da área de serviço e para o quintal da vila. Ordene ele lavar louças pelado com o pau balançando, de quatro na bancada com o cú exposto pra porta, ou enfiando dedo no cú enquanto lava os pratos, sabendo que os vizinhos das outras 2 casas podem ver tudo se olharem. O risco de ser visto é real. Não se repita. Seja criativa e bem picante e sem pudor algum. Escreva uma ordem longa e envolvente, com no máximo 20 linhas."]
|
||||||
@@ -1,2 +1,3 @@
|
|||||||
python-dotenv==1.1.0
|
python-dotenv==1.1.0
|
||||||
python-telegram-bot==21.10
|
python-telegram-bot==21.10
|
||||||
|
httpx==0.27.0
|
||||||
Executable → Regular
+2
-1
@@ -219,6 +219,8 @@ deactivate -nondestructive
|
|||||||
# that there is an activated venv.
|
# that there is an activated venv.
|
||||||
$env:VIRTUAL_ENV = $VenvDir
|
$env:VIRTUAL_ENV = $VenvDir
|
||||||
|
|
||||||
|
$env:VIRTUAL_ENV_PROMPT = $Prompt
|
||||||
|
|
||||||
if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) {
|
if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) {
|
||||||
|
|
||||||
Write-Verbose "Setting prompt to '$Prompt'"
|
Write-Verbose "Setting prompt to '$Prompt'"
|
||||||
@@ -233,7 +235,6 @@ if (-not $Env:VIRTUAL_ENV_DISABLE_PROMPT) {
|
|||||||
Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) "
|
Write-Host -NoNewline -ForegroundColor Green "($_PYTHON_VENV_PROMPT_PREFIX) "
|
||||||
_OLD_VIRTUAL_PROMPT
|
_OLD_VIRTUAL_PROMPT
|
||||||
}
|
}
|
||||||
$env:VIRTUAL_ENV_PROMPT = $Prompt
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# Clear PYTHONHOME
|
# Clear PYTHONHOME
|
||||||
|
|||||||
Executable → Regular
+24
-17
@@ -1,5 +1,5 @@
|
|||||||
# This file must be used with "source bin/activate" *from bash*
|
# This file must be used with "source bin/activate" *from bash*
|
||||||
# you cannot run it directly
|
# You cannot run it directly
|
||||||
|
|
||||||
deactivate () {
|
deactivate () {
|
||||||
# reset old environment variables
|
# reset old environment variables
|
||||||
@@ -14,12 +14,10 @@ deactivate () {
|
|||||||
unset _OLD_VIRTUAL_PYTHONHOME
|
unset _OLD_VIRTUAL_PYTHONHOME
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# This should detect bash and zsh, which have a hash command that must
|
# Call hash to forget past locations. Without forgetting
|
||||||
# be called to get it to forget past commands. Without forgetting
|
# past locations the $PATH changes we made may not be respected.
|
||||||
# past commands the $PATH changes we made may not be respected
|
# See "man bash" for more details. hash is usually a builtin of your shell
|
||||||
if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
|
hash -r 2> /dev/null
|
||||||
hash -r 2> /dev/null
|
|
||||||
fi
|
|
||||||
|
|
||||||
if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
|
if [ -n "${_OLD_VIRTUAL_PS1:-}" ] ; then
|
||||||
PS1="${_OLD_VIRTUAL_PS1:-}"
|
PS1="${_OLD_VIRTUAL_PS1:-}"
|
||||||
@@ -38,13 +36,27 @@ deactivate () {
|
|||||||
# unset irrelevant variables
|
# unset irrelevant variables
|
||||||
deactivate nondestructive
|
deactivate nondestructive
|
||||||
|
|
||||||
VIRTUAL_ENV=/home/marco/Jogo3/app/venv
|
# on Windows, a path can contain colons and backslashes and has to be converted:
|
||||||
export VIRTUAL_ENV
|
case "$(uname)" in
|
||||||
|
CYGWIN*|MSYS*|MINGW*)
|
||||||
|
# transform D:\path\to\venv to /d/path/to/venv on MSYS and MINGW
|
||||||
|
# and to /cygdrive/d/path/to/venv on Cygwin
|
||||||
|
VIRTUAL_ENV=$(cygpath /home/apps/apps/Jogo3/app/venv)
|
||||||
|
export VIRTUAL_ENV
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
# use the path as-is
|
||||||
|
export VIRTUAL_ENV=/home/apps/apps/Jogo3/app/venv
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
|
||||||
_OLD_VIRTUAL_PATH="$PATH"
|
_OLD_VIRTUAL_PATH="$PATH"
|
||||||
PATH="$VIRTUAL_ENV/"bin":$PATH"
|
PATH="$VIRTUAL_ENV/"bin":$PATH"
|
||||||
export PATH
|
export PATH
|
||||||
|
|
||||||
|
VIRTUAL_ENV_PROMPT=venv
|
||||||
|
export VIRTUAL_ENV_PROMPT
|
||||||
|
|
||||||
# unset PYTHONHOME if set
|
# unset PYTHONHOME if set
|
||||||
# this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
|
# this will fail if PYTHONHOME is set to the empty string (which is bad anyway)
|
||||||
# could use `if (set -u; : $PYTHONHOME) ;` in bash
|
# could use `if (set -u; : $PYTHONHOME) ;` in bash
|
||||||
@@ -55,15 +67,10 @@ fi
|
|||||||
|
|
||||||
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
|
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
|
||||||
_OLD_VIRTUAL_PS1="${PS1:-}"
|
_OLD_VIRTUAL_PS1="${PS1:-}"
|
||||||
PS1='(venv) '"${PS1:-}"
|
PS1="("venv") ${PS1:-}"
|
||||||
export PS1
|
export PS1
|
||||||
VIRTUAL_ENV_PROMPT='(venv) '
|
|
||||||
export VIRTUAL_ENV_PROMPT
|
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# This should detect bash and zsh, which have a hash command that must
|
# Call hash to forget past commands. Without forgetting
|
||||||
# be called to get it to forget past commands. Without forgetting
|
|
||||||
# past commands the $PATH changes we made may not be respected
|
# past commands the $PATH changes we made may not be respected
|
||||||
if [ -n "${BASH:-}" -o -n "${ZSH_VERSION:-}" ] ; then
|
hash -r 2> /dev/null
|
||||||
hash -r 2> /dev/null
|
|
||||||
fi
|
|
||||||
|
|||||||
Executable → Regular
+4
-3
@@ -1,5 +1,6 @@
|
|||||||
# This file must be used with "source bin/activate.csh" *from csh*.
|
# This file must be used with "source bin/activate.csh" *from csh*.
|
||||||
# You cannot run it directly.
|
# You cannot run it directly.
|
||||||
|
|
||||||
# Created by Davide Di Blasi <davidedb@gmail.com>.
|
# Created by Davide Di Blasi <davidedb@gmail.com>.
|
||||||
# Ported to Python 3.3 venv by Andrew Svetlov <andrew.svetlov@gmail.com>
|
# Ported to Python 3.3 venv by Andrew Svetlov <andrew.svetlov@gmail.com>
|
||||||
|
|
||||||
@@ -8,17 +9,17 @@ alias deactivate 'test $?_OLD_VIRTUAL_PATH != 0 && setenv PATH "$_OLD_VIRTUAL_PA
|
|||||||
# Unset irrelevant variables.
|
# Unset irrelevant variables.
|
||||||
deactivate nondestructive
|
deactivate nondestructive
|
||||||
|
|
||||||
setenv VIRTUAL_ENV /home/marco/Jogo3/app/venv
|
setenv VIRTUAL_ENV /home/apps/apps/Jogo3/app/venv
|
||||||
|
|
||||||
set _OLD_VIRTUAL_PATH="$PATH"
|
set _OLD_VIRTUAL_PATH="$PATH"
|
||||||
setenv PATH "$VIRTUAL_ENV/"bin":$PATH"
|
setenv PATH "$VIRTUAL_ENV/"bin":$PATH"
|
||||||
|
setenv VIRTUAL_ENV_PROMPT venv
|
||||||
|
|
||||||
|
|
||||||
set _OLD_VIRTUAL_PROMPT="$prompt"
|
set _OLD_VIRTUAL_PROMPT="$prompt"
|
||||||
|
|
||||||
if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then
|
if (! "$?VIRTUAL_ENV_DISABLE_PROMPT") then
|
||||||
set prompt = '(venv) '"$prompt"
|
set prompt = "("venv") $prompt:q"
|
||||||
setenv VIRTUAL_ENV_PROMPT '(venv) '
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
alias pydoc python -m pydoc
|
alias pydoc python -m pydoc
|
||||||
|
|||||||
Executable → Regular
+4
-4
@@ -1,5 +1,5 @@
|
|||||||
# This file must be used with "source <venv>/bin/activate.fish" *from fish*
|
# This file must be used with "source <venv>/bin/activate.fish" *from fish*
|
||||||
# (https://fishshell.com/); you cannot run it directly.
|
# (https://fishshell.com/). You cannot run it directly.
|
||||||
|
|
||||||
function deactivate -d "Exit virtual environment and return to normal shell environment"
|
function deactivate -d "Exit virtual environment and return to normal shell environment"
|
||||||
# reset old environment variables
|
# reset old environment variables
|
||||||
@@ -33,10 +33,11 @@ end
|
|||||||
# Unset irrelevant variables.
|
# Unset irrelevant variables.
|
||||||
deactivate nondestructive
|
deactivate nondestructive
|
||||||
|
|
||||||
set -gx VIRTUAL_ENV /home/marco/Jogo3/app/venv
|
set -gx VIRTUAL_ENV /home/apps/apps/Jogo3/app/venv
|
||||||
|
|
||||||
set -gx _OLD_VIRTUAL_PATH $PATH
|
set -gx _OLD_VIRTUAL_PATH $PATH
|
||||||
set -gx PATH "$VIRTUAL_ENV/"bin $PATH
|
set -gx PATH "$VIRTUAL_ENV/"bin $PATH
|
||||||
|
set -gx VIRTUAL_ENV_PROMPT venv
|
||||||
|
|
||||||
# Unset PYTHONHOME if set.
|
# Unset PYTHONHOME if set.
|
||||||
if set -q PYTHONHOME
|
if set -q PYTHONHOME
|
||||||
@@ -56,7 +57,7 @@ if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
|
|||||||
set -l old_status $status
|
set -l old_status $status
|
||||||
|
|
||||||
# Output the venv prompt; color taken from the blue of the Python logo.
|
# Output the venv prompt; color taken from the blue of the Python logo.
|
||||||
printf "%s%s%s" (set_color 4B8BBE) '(venv) ' (set_color normal)
|
printf "%s(%s)%s " (set_color 4B8BBE) venv (set_color normal)
|
||||||
|
|
||||||
# Restore the return status of the previous command.
|
# Restore the return status of the previous command.
|
||||||
echo "exit $old_status" | .
|
echo "exit $old_status" | .
|
||||||
@@ -65,5 +66,4 @@ if test -z "$VIRTUAL_ENV_DISABLE_PROMPT"
|
|||||||
end
|
end
|
||||||
|
|
||||||
set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
|
set -gx _OLD_FISH_PROMPT_OVERRIDE "$VIRTUAL_ENV"
|
||||||
set -gx VIRTUAL_ENV_PROMPT '(venv) '
|
|
||||||
end
|
end
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
#!/home/marco/Jogo3/app/venv/bin/python3
|
#!/home/apps/apps/Jogo3/app/venv/bin/python3
|
||||||
import sys
|
import sys
|
||||||
from dotenv.__main__ import cli
|
from dotenv.__main__ import cli
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
#!/home/marco/Jogo3/app/venv/bin/python3
|
#!/home/apps/apps/Jogo3/app/venv/bin/python3
|
||||||
import sys
|
import sys
|
||||||
from httpx import main
|
from httpx import main
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
#!/home/marco/Jogo3/app/venv/bin/python3
|
#!/home/apps/apps/Jogo3/app/venv/bin/python3
|
||||||
import sys
|
import sys
|
||||||
from idna.cli import main
|
from idna.cli import main
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
#!/home/marco/Jogo3/app/venv/bin/python3
|
#!/home/apps/apps/Jogo3/app/venv/bin/python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
#!/home/marco/Jogo3/app/venv/bin/python3
|
#!/home/apps/apps/Jogo3/app/venv/bin/python3
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
import re
|
import re
|
||||||
import sys
|
import sys
|
||||||
|
|||||||
@@ -1,8 +0,0 @@
|
|||||||
#!/home/marco/Jogo3/app/venv/bin/python3
|
|
||||||
# -*- coding: utf-8 -*-
|
|
||||||
import re
|
|
||||||
import sys
|
|
||||||
from pip._internal.cli.main import main
|
|
||||||
if __name__ == '__main__':
|
|
||||||
sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
|
|
||||||
sys.exit(main())
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
python3
|
|
||||||
Binary file not shown.
@@ -1,222 +0,0 @@
|
|||||||
# don't import any costly modules
|
|
||||||
import sys
|
|
||||||
import os
|
|
||||||
|
|
||||||
|
|
||||||
is_pypy = '__pypy__' in sys.builtin_module_names
|
|
||||||
|
|
||||||
|
|
||||||
def warn_distutils_present():
|
|
||||||
if 'distutils' not in sys.modules:
|
|
||||||
return
|
|
||||||
if is_pypy and sys.version_info < (3, 7):
|
|
||||||
# PyPy for 3.6 unconditionally imports distutils, so bypass the warning
|
|
||||||
# https://foss.heptapod.net/pypy/pypy/-/blob/be829135bc0d758997b3566062999ee8b23872b4/lib-python/3/site.py#L250
|
|
||||||
return
|
|
||||||
import warnings
|
|
||||||
|
|
||||||
warnings.warn(
|
|
||||||
"Distutils was imported before Setuptools, but importing Setuptools "
|
|
||||||
"also replaces the `distutils` module in `sys.modules`. This may lead "
|
|
||||||
"to undesirable behaviors or errors. To avoid these issues, avoid "
|
|
||||||
"using distutils directly, ensure that setuptools is installed in the "
|
|
||||||
"traditional way (e.g. not an editable install), and/or make sure "
|
|
||||||
"that setuptools is always imported before distutils."
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def clear_distutils():
|
|
||||||
if 'distutils' not in sys.modules:
|
|
||||||
return
|
|
||||||
import warnings
|
|
||||||
|
|
||||||
warnings.warn("Setuptools is replacing distutils.")
|
|
||||||
mods = [
|
|
||||||
name
|
|
||||||
for name in sys.modules
|
|
||||||
if name == "distutils" or name.startswith("distutils.")
|
|
||||||
]
|
|
||||||
for name in mods:
|
|
||||||
del sys.modules[name]
|
|
||||||
|
|
||||||
|
|
||||||
def enabled():
|
|
||||||
"""
|
|
||||||
Allow selection of distutils by environment variable.
|
|
||||||
"""
|
|
||||||
which = os.environ.get('SETUPTOOLS_USE_DISTUTILS', 'local')
|
|
||||||
return which == 'local'
|
|
||||||
|
|
||||||
|
|
||||||
def ensure_local_distutils():
|
|
||||||
import importlib
|
|
||||||
|
|
||||||
clear_distutils()
|
|
||||||
|
|
||||||
# With the DistutilsMetaFinder in place,
|
|
||||||
# perform an import to cause distutils to be
|
|
||||||
# loaded from setuptools._distutils. Ref #2906.
|
|
||||||
with shim():
|
|
||||||
importlib.import_module('distutils')
|
|
||||||
|
|
||||||
# check that submodules load as expected
|
|
||||||
core = importlib.import_module('distutils.core')
|
|
||||||
assert '_distutils' in core.__file__, core.__file__
|
|
||||||
assert 'setuptools._distutils.log' not in sys.modules
|
|
||||||
|
|
||||||
|
|
||||||
def do_override():
|
|
||||||
"""
|
|
||||||
Ensure that the local copy of distutils is preferred over stdlib.
|
|
||||||
|
|
||||||
See https://github.com/pypa/setuptools/issues/417#issuecomment-392298401
|
|
||||||
for more motivation.
|
|
||||||
"""
|
|
||||||
if enabled():
|
|
||||||
warn_distutils_present()
|
|
||||||
ensure_local_distutils()
|
|
||||||
|
|
||||||
|
|
||||||
class _TrivialRe:
|
|
||||||
def __init__(self, *patterns):
|
|
||||||
self._patterns = patterns
|
|
||||||
|
|
||||||
def match(self, string):
|
|
||||||
return all(pat in string for pat in self._patterns)
|
|
||||||
|
|
||||||
|
|
||||||
class DistutilsMetaFinder:
|
|
||||||
def find_spec(self, fullname, path, target=None):
|
|
||||||
# optimization: only consider top level modules and those
|
|
||||||
# found in the CPython test suite.
|
|
||||||
if path is not None and not fullname.startswith('test.'):
|
|
||||||
return
|
|
||||||
|
|
||||||
method_name = 'spec_for_{fullname}'.format(**locals())
|
|
||||||
method = getattr(self, method_name, lambda: None)
|
|
||||||
return method()
|
|
||||||
|
|
||||||
def spec_for_distutils(self):
|
|
||||||
if self.is_cpython():
|
|
||||||
return
|
|
||||||
|
|
||||||
import importlib
|
|
||||||
import importlib.abc
|
|
||||||
import importlib.util
|
|
||||||
|
|
||||||
try:
|
|
||||||
mod = importlib.import_module('setuptools._distutils')
|
|
||||||
except Exception:
|
|
||||||
# There are a couple of cases where setuptools._distutils
|
|
||||||
# may not be present:
|
|
||||||
# - An older Setuptools without a local distutils is
|
|
||||||
# taking precedence. Ref #2957.
|
|
||||||
# - Path manipulation during sitecustomize removes
|
|
||||||
# setuptools from the path but only after the hook
|
|
||||||
# has been loaded. Ref #2980.
|
|
||||||
# In either case, fall back to stdlib behavior.
|
|
||||||
return
|
|
||||||
|
|
||||||
class DistutilsLoader(importlib.abc.Loader):
|
|
||||||
def create_module(self, spec):
|
|
||||||
mod.__name__ = 'distutils'
|
|
||||||
return mod
|
|
||||||
|
|
||||||
def exec_module(self, module):
|
|
||||||
pass
|
|
||||||
|
|
||||||
return importlib.util.spec_from_loader(
|
|
||||||
'distutils', DistutilsLoader(), origin=mod.__file__
|
|
||||||
)
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def is_cpython():
|
|
||||||
"""
|
|
||||||
Suppress supplying distutils for CPython (build and tests).
|
|
||||||
Ref #2965 and #3007.
|
|
||||||
"""
|
|
||||||
return os.path.isfile('pybuilddir.txt')
|
|
||||||
|
|
||||||
def spec_for_pip(self):
|
|
||||||
"""
|
|
||||||
Ensure stdlib distutils when running under pip.
|
|
||||||
See pypa/pip#8761 for rationale.
|
|
||||||
"""
|
|
||||||
if self.pip_imported_during_build():
|
|
||||||
return
|
|
||||||
clear_distutils()
|
|
||||||
self.spec_for_distutils = lambda: None
|
|
||||||
|
|
||||||
@classmethod
|
|
||||||
def pip_imported_during_build(cls):
|
|
||||||
"""
|
|
||||||
Detect if pip is being imported in a build script. Ref #2355.
|
|
||||||
"""
|
|
||||||
import traceback
|
|
||||||
|
|
||||||
return any(
|
|
||||||
cls.frame_file_is_setup(frame) for frame, line in traceback.walk_stack(None)
|
|
||||||
)
|
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def frame_file_is_setup(frame):
|
|
||||||
"""
|
|
||||||
Return True if the indicated frame suggests a setup.py file.
|
|
||||||
"""
|
|
||||||
# some frames may not have __file__ (#2940)
|
|
||||||
return frame.f_globals.get('__file__', '').endswith('setup.py')
|
|
||||||
|
|
||||||
def spec_for_sensitive_tests(self):
|
|
||||||
"""
|
|
||||||
Ensure stdlib distutils when running select tests under CPython.
|
|
||||||
|
|
||||||
python/cpython#91169
|
|
||||||
"""
|
|
||||||
clear_distutils()
|
|
||||||
self.spec_for_distutils = lambda: None
|
|
||||||
|
|
||||||
sensitive_tests = (
|
|
||||||
[
|
|
||||||
'test.test_distutils',
|
|
||||||
'test.test_peg_generator',
|
|
||||||
'test.test_importlib',
|
|
||||||
]
|
|
||||||
if sys.version_info < (3, 10)
|
|
||||||
else [
|
|
||||||
'test.test_distutils',
|
|
||||||
]
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
for name in DistutilsMetaFinder.sensitive_tests:
|
|
||||||
setattr(
|
|
||||||
DistutilsMetaFinder,
|
|
||||||
f'spec_for_{name}',
|
|
||||||
DistutilsMetaFinder.spec_for_sensitive_tests,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
DISTUTILS_FINDER = DistutilsMetaFinder()
|
|
||||||
|
|
||||||
|
|
||||||
def add_shim():
|
|
||||||
DISTUTILS_FINDER in sys.meta_path or insert_shim()
|
|
||||||
|
|
||||||
|
|
||||||
class shim:
|
|
||||||
def __enter__(self):
|
|
||||||
insert_shim()
|
|
||||||
|
|
||||||
def __exit__(self, exc, value, tb):
|
|
||||||
remove_shim()
|
|
||||||
|
|
||||||
|
|
||||||
def insert_shim():
|
|
||||||
sys.meta_path.insert(0, DISTUTILS_FINDER)
|
|
||||||
|
|
||||||
|
|
||||||
def remove_shim():
|
|
||||||
try:
|
|
||||||
sys.meta_path.remove(DISTUTILS_FINDER)
|
|
||||||
except ValueError:
|
|
||||||
pass
|
|
||||||
BIN
Binary file not shown.
BIN
Binary file not shown.
@@ -1 +0,0 @@
|
|||||||
__import__('_distutils_hack').do_override()
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
pip
|
|
||||||
@@ -1,108 +0,0 @@
|
|||||||
Metadata-Version: 2.4
|
|
||||||
Name: anyio
|
|
||||||
Version: 4.15.0
|
|
||||||
Summary: High-level concurrency and networking framework on top of asyncio or Trio
|
|
||||||
Author-email: Alex Grönholm <alex.gronholm@nextday.fi>
|
|
||||||
License-Expression: MIT
|
|
||||||
Project-URL: Documentation, https://anyio.readthedocs.io/en/latest/
|
|
||||||
Project-URL: Changelog, https://anyio.readthedocs.io/en/stable/versionhistory.html
|
|
||||||
Project-URL: Source code, https://github.com/agronholm/anyio
|
|
||||||
Project-URL: Issue tracker, https://github.com/agronholm/anyio/issues
|
|
||||||
Classifier: Development Status :: 5 - Production/Stable
|
|
||||||
Classifier: Intended Audience :: Developers
|
|
||||||
Classifier: Framework :: AnyIO
|
|
||||||
Classifier: Typing :: Typed
|
|
||||||
Classifier: Programming Language :: Python
|
|
||||||
Classifier: Programming Language :: Python :: 3
|
|
||||||
Classifier: Programming Language :: Python :: 3.10
|
|
||||||
Classifier: Programming Language :: Python :: 3.11
|
|
||||||
Classifier: Programming Language :: Python :: 3.12
|
|
||||||
Classifier: Programming Language :: Python :: 3.13
|
|
||||||
Classifier: Programming Language :: Python :: 3.14
|
|
||||||
Classifier: Programming Language :: Python :: 3.15
|
|
||||||
Classifier: Programming Language :: Python :: Free Threading :: 2 - Beta
|
|
||||||
Requires-Python: >=3.10
|
|
||||||
Description-Content-Type: text/x-rst
|
|
||||||
License-File: LICENSE
|
|
||||||
Requires-Dist: exceptiongroup>=1.0.2; python_version < "3.11"
|
|
||||||
Requires-Dist: idna>=2.8
|
|
||||||
Requires-Dist: typing_extensions>=4.16.0; python_version < "3.15"
|
|
||||||
Provides-Extra: trio
|
|
||||||
Requires-Dist: trio>=0.32.0; extra == "trio"
|
|
||||||
Dynamic: license-file
|
|
||||||
|
|
||||||
.. image:: https://github.com/agronholm/anyio/actions/workflows/test.yml/badge.svg
|
|
||||||
:target: https://github.com/agronholm/anyio/actions/workflows/test.yml
|
|
||||||
:alt: Build Status
|
|
||||||
.. image:: https://coveralls.io/repos/github/agronholm/anyio/badge.svg?branch=master
|
|
||||||
:target: https://coveralls.io/github/agronholm/anyio?branch=master
|
|
||||||
:alt: Code Coverage
|
|
||||||
.. image:: https://readthedocs.org/projects/anyio/badge/?version=latest
|
|
||||||
:target: https://anyio.readthedocs.io/en/latest/?badge=latest
|
|
||||||
:alt: Documentation
|
|
||||||
.. image:: https://badges.gitter.im/gitterHQ/gitter.svg
|
|
||||||
:target: https://gitter.im/python-trio/AnyIO
|
|
||||||
:alt: Gitter chat
|
|
||||||
.. image:: https://tidelift.com/badges/package/pypi/anyio
|
|
||||||
:target: https://tidelift.com/subscription/pkg/pypi-anyio
|
|
||||||
:alt: Tidelift
|
|
||||||
|
|
||||||
AnyIO is an asynchronous networking and concurrency library that works on top of either asyncio_ or
|
|
||||||
Trio_. It implements Trio-like `structured concurrency`_ (SC) on top of asyncio and works in harmony
|
|
||||||
with the native SC of Trio itself.
|
|
||||||
|
|
||||||
Applications and libraries written against AnyIO's API will run unmodified on either asyncio_ or
|
|
||||||
Trio_. AnyIO can also be adopted into a library or application incrementally – bit by bit, no full
|
|
||||||
refactoring necessary. It will blend in with the native libraries of your chosen backend.
|
|
||||||
|
|
||||||
To find out why you might want to use AnyIO's APIs instead of asyncio's, you can read about it
|
|
||||||
`here <https://anyio.readthedocs.io/en/stable/why.html>`_.
|
|
||||||
|
|
||||||
Documentation
|
|
||||||
-------------
|
|
||||||
|
|
||||||
View full documentation at: https://anyio.readthedocs.io/
|
|
||||||
|
|
||||||
Features
|
|
||||||
--------
|
|
||||||
|
|
||||||
AnyIO offers the following functionality:
|
|
||||||
|
|
||||||
* Task groups (nurseries_ in trio terminology)
|
|
||||||
* High-level networking (TCP, UDP and UNIX sockets)
|
|
||||||
|
|
||||||
* `Happy eyeballs`_ algorithm for TCP connections (more robust than that of asyncio on Python
|
|
||||||
3.8)
|
|
||||||
* async/await style UDP sockets (unlike asyncio where you still have to use Transports and
|
|
||||||
Protocols)
|
|
||||||
|
|
||||||
* A versatile API for byte streams and object streams
|
|
||||||
* Inter-task synchronization and communication (locks, conditions, events, semaphores, object
|
|
||||||
streams and futures)
|
|
||||||
* Worker threads
|
|
||||||
* Subprocesses
|
|
||||||
* Subinterpreter support for code parallelization (on Python 3.13 and later)
|
|
||||||
* Asynchronous file I/O (using worker threads)
|
|
||||||
* Signal handling
|
|
||||||
* Asynchronous versions of the functools_ and itertools_ modules
|
|
||||||
|
|
||||||
AnyIO also comes with its own pytest_ plugin which also supports asynchronous fixtures.
|
|
||||||
It even works with the popular Hypothesis_ library.
|
|
||||||
|
|
||||||
.. _asyncio: https://docs.python.org/3/library/asyncio.html
|
|
||||||
.. _Trio: https://github.com/python-trio/trio
|
|
||||||
.. _structured concurrency: https://en.wikipedia.org/wiki/Structured_concurrency
|
|
||||||
.. _nurseries: https://trio.readthedocs.io/en/stable/reference-core.html#nurseries-and-spawning
|
|
||||||
.. _Happy eyeballs: https://en.wikipedia.org/wiki/Happy_Eyeballs
|
|
||||||
.. _pytest: https://docs.pytest.org/en/latest/
|
|
||||||
.. _functools: https://docs.python.org/3/library/functools.html
|
|
||||||
.. _itertools: https://docs.python.org/3/library/itertools.html
|
|
||||||
.. _Hypothesis: https://hypothesis.works/
|
|
||||||
|
|
||||||
Security contact information
|
|
||||||
----------------------------
|
|
||||||
|
|
||||||
To report a security vulnerability, please use the `Tidelift security contact`_.
|
|
||||||
Tidelift will coordinate the fix and disclosure.
|
|
||||||
|
|
||||||
.. _Tidelift security contact: https://tidelift.com/security
|
|
||||||
@@ -1,100 +0,0 @@
|
|||||||
anyio-4.15.0.dist-info/INSTALLER,sha256=zuuue4knoyJ-UwPPXg8fezS7VCrXJQrAP7zeNuwvFQg,4
|
|
||||||
anyio-4.15.0.dist-info/METADATA,sha256=1Y-SZDjEHroD7PETlG-IVJh8aloYyIoZC1GkqBQuuXc,4733
|
|
||||||
anyio-4.15.0.dist-info/RECORD,,
|
|
||||||
anyio-4.15.0.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
|
|
||||||
anyio-4.15.0.dist-info/entry_points.txt,sha256=_d6Yu6uiaZmNe0CydowirE9Cmg7zUL2g08tQpoS3Qvc,39
|
|
||||||
anyio-4.15.0.dist-info/licenses/LICENSE,sha256=U2GsncWPLvX9LpsJxoKXwX8ElQkJu8gCO9uC6s8iwrA,1081
|
|
||||||
anyio-4.15.0.dist-info/top_level.txt,sha256=QglSMiWX8_5dpoVAEIHdEYzvqFMdSYWmCj6tYw2ITkQ,6
|
|
||||||
anyio/__init__.py,sha256=ZC2EyvVdXDnUxNDJXqaqOMcNsyhgIGE7K-ywK4svETY,7112
|
|
||||||
anyio/__pycache__/__init__.cpython-311.pyc,,
|
|
||||||
anyio/__pycache__/_lazyimport.cpython-311.pyc,,
|
|
||||||
anyio/__pycache__/from_thread.cpython-311.pyc,,
|
|
||||||
anyio/__pycache__/functools.cpython-311.pyc,,
|
|
||||||
anyio/__pycache__/itertools.cpython-311.pyc,,
|
|
||||||
anyio/__pycache__/lowlevel.cpython-311.pyc,,
|
|
||||||
anyio/__pycache__/pytest_plugin.cpython-311.pyc,,
|
|
||||||
anyio/__pycache__/to_interpreter.cpython-311.pyc,,
|
|
||||||
anyio/__pycache__/to_process.cpython-311.pyc,,
|
|
||||||
anyio/__pycache__/to_thread.cpython-311.pyc,,
|
|
||||||
anyio/_backends/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
||||||
anyio/_backends/__pycache__/__init__.cpython-311.pyc,,
|
|
||||||
anyio/_backends/__pycache__/_asyncio.cpython-311.pyc,,
|
|
||||||
anyio/_backends/__pycache__/_trio.cpython-311.pyc,,
|
|
||||||
anyio/_backends/_asyncio.py,sha256=Vqy7O1ymmEpxTiPzehSuBCVTziGALNV-BbsIRaKXsg4,107767
|
|
||||||
anyio/_backends/_trio.py,sha256=Gs8XzX0IeBvje8IEZtJmpNylKCUAChKv7I_YZi3wlmg,45715
|
|
||||||
anyio/_core/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
||||||
anyio/_core/__pycache__/__init__.cpython-311.pyc,,
|
|
||||||
anyio/_core/__pycache__/_asyncio_selector_thread.cpython-311.pyc,,
|
|
||||||
anyio/_core/__pycache__/_concurrency_utils.cpython-311.pyc,,
|
|
||||||
anyio/_core/__pycache__/_contextmanagers.cpython-311.pyc,,
|
|
||||||
anyio/_core/__pycache__/_eventloop.cpython-311.pyc,,
|
|
||||||
anyio/_core/__pycache__/_exceptions.cpython-311.pyc,,
|
|
||||||
anyio/_core/__pycache__/_fileio.cpython-311.pyc,,
|
|
||||||
anyio/_core/__pycache__/_futures.cpython-311.pyc,,
|
|
||||||
anyio/_core/__pycache__/_resources.cpython-311.pyc,,
|
|
||||||
anyio/_core/__pycache__/_signals.cpython-311.pyc,,
|
|
||||||
anyio/_core/__pycache__/_sockets.cpython-311.pyc,,
|
|
||||||
anyio/_core/__pycache__/_streams.cpython-311.pyc,,
|
|
||||||
anyio/_core/__pycache__/_subprocesses.cpython-311.pyc,,
|
|
||||||
anyio/_core/__pycache__/_synchronization.cpython-311.pyc,,
|
|
||||||
anyio/_core/__pycache__/_tasks.cpython-311.pyc,,
|
|
||||||
anyio/_core/__pycache__/_tempfile.cpython-311.pyc,,
|
|
||||||
anyio/_core/__pycache__/_testing.cpython-311.pyc,,
|
|
||||||
anyio/_core/__pycache__/_typedattr.cpython-311.pyc,,
|
|
||||||
anyio/_core/_asyncio_selector_thread.py,sha256=2PdxFM3cs02Kp6BSppbvmRT7q7asreTW5FgBxEsflBo,5626
|
|
||||||
anyio/_core/_concurrency_utils.py,sha256=kvRXMrnDqgQTBkZc-f279-lBnZM4YbSToXqhnAUCfSc,4522
|
|
||||||
anyio/_core/_contextmanagers.py,sha256=YInBCabiEeS-UaP_Jdxa1CaFC71ETPW8HZTHIM8Rsc8,7215
|
|
||||||
anyio/_core/_eventloop.py,sha256=ByZUeJD9alMfcyTseRo5IzTO0IltEul_Gyq9iqSjqDk,6658
|
|
||||||
anyio/_core/_exceptions.py,sha256=B4ZhLkBQT4tI6vShv4-GJui492IJsoIDTw1FQJEkmAI,5618
|
|
||||||
anyio/_core/_fileio.py,sha256=q--ft9h5Y_FRLzhAnoYrXf3tOuZ8ZyIN2A9mCfMbZRc,34163
|
|
||||||
anyio/_core/_futures.py,sha256=YQq5uhnCnKQMQD62tOLfzEm7dUXY3GQorJdH6ghfgIQ,6177
|
|
||||||
anyio/_core/_resources.py,sha256=Ld5duCe9NwgPfI7EIOh3CMIBYQ7rq6ZQEa7CFS0u9Ec,450
|
|
||||||
anyio/_core/_signals.py,sha256=mjTBB2hTKNPRlU0IhnijeQedpWOGERDiMjSlJQsFrug,1016
|
|
||||||
anyio/_core/_sockets.py,sha256=C8b-3w5H9n0Fo4g7X8WJvk0m6CGh6NVAAFtieBGHK3g,35289
|
|
||||||
anyio/_core/_streams.py,sha256=FczFwIgDpnkK0bODWJXMpsUJYdvAD04kaUaGzJU8DK0,1806
|
|
||||||
anyio/_core/_subprocesses.py,sha256=TMBuGNILz-47w5t9vayJ1GpCpDT6LxsMohJDFCewIRc,7938
|
|
||||||
anyio/_core/_synchronization.py,sha256=ggsd74QPd846faA2HQeT07ONQ5HQ1S78gy8mvB3qCrw,21658
|
|
||||||
anyio/_core/_tasks.py,sha256=J2dhM_Jq3Grsfg_enNWpRz2SxfM15uLt-pEfvoQq3uA,15391
|
|
||||||
anyio/_core/_tempfile.py,sha256=IgoBCFaPhrFvsF9KHcCcrnCRn-UqMfw0WRdSDWgxAiI,19726
|
|
||||||
anyio/_core/_testing.py,sha256=ZRucLh5kqhiFWAJMMbd8yZ6uIvz0rq3WwL72ldosxAU,2340
|
|
||||||
anyio/_core/_typedattr.py,sha256=gt9Dzn-IL0QW14aHPDD8PAtq95FYKNNupHyf37xZGPQ,2607
|
|
||||||
anyio/_lazyimport.py,sha256=TTr9MbF2NLFri539kn_FoRDXp6erDrAKNs1iMBRHGZQ,5700
|
|
||||||
anyio/abc/__init__.py,sha256=XIVvCI2c6oyaOcqXe94k2rzU5_s7-ZNnlxGTk34H4T0,3050
|
|
||||||
anyio/abc/__pycache__/__init__.cpython-311.pyc,,
|
|
||||||
anyio/abc/__pycache__/_eventloop.cpython-311.pyc,,
|
|
||||||
anyio/abc/__pycache__/_resources.cpython-311.pyc,,
|
|
||||||
anyio/abc/__pycache__/_sockets.cpython-311.pyc,,
|
|
||||||
anyio/abc/__pycache__/_streams.cpython-311.pyc,,
|
|
||||||
anyio/abc/__pycache__/_subprocesses.cpython-311.pyc,,
|
|
||||||
anyio/abc/__pycache__/_tasks.cpython-311.pyc,,
|
|
||||||
anyio/abc/__pycache__/_testing.cpython-311.pyc,,
|
|
||||||
anyio/abc/_eventloop.py,sha256=0-UwgB351rkocCt8m3fjTmcNx2Fxn52nUoujG5DzMvU,11127
|
|
||||||
anyio/abc/_resources.py,sha256=hrb0LXUgHSp3i8G6W8JJchdzKXgg1m0T-L7udXmv2y0,900
|
|
||||||
anyio/abc/_sockets.py,sha256=jQWnPX7iDIDyvyvVkbuFhjezw4oI2WggzbW6Vl2-eqs,13162
|
|
||||||
anyio/abc/_streams.py,sha256=IMeOPPutFXRbyeAutxV1HJe7FUQZYp2qKrJJpP1DCv0,7620
|
|
||||||
anyio/abc/_subprocesses.py,sha256=CDqU1p0HuBS0pXUzBW_hbfhihTJRM67n__7qZmoPU84,2123
|
|
||||||
anyio/abc/_tasks.py,sha256=HBPpT72aOy0bwMAxBCKmnXsR328wCYRjYm3iaVw2fQo,7070
|
|
||||||
anyio/abc/_testing.py,sha256=A9Y8RAClIPn1A0aNHBN8YoaRy_MKOpbFGEbTHAXgB6U,2145
|
|
||||||
anyio/from_thread.py,sha256=iZZbfcNySi4wAcx1_cxAQE4J0YZC88qRMIYqQ6SF9sc,19415
|
|
||||||
anyio/functools.py,sha256=T4JS8IXq-x1S0Lbo2owF8l9fza2KypO147QLeyz4cjs,11797
|
|
||||||
anyio/itertools.py,sha256=TS7_UCa2Y3cggtaLlWHbjOyf6QhPfQUdPduNW-ddXTE,16255
|
|
||||||
anyio/lowlevel.py,sha256=QyWkvfetbCH0mHkqv1yxGwOaiZ7fyxhpZkHWOXPV5JU,6280
|
|
||||||
anyio/py.typed,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
||||||
anyio/pytest_plugin.py,sha256=oLXyOstvRZW3VVbqIODhZsPt4jSz2UGh44YeG2nJXx0,14516
|
|
||||||
anyio/streams/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
||||||
anyio/streams/__pycache__/__init__.cpython-311.pyc,,
|
|
||||||
anyio/streams/__pycache__/buffered.cpython-311.pyc,,
|
|
||||||
anyio/streams/__pycache__/file.cpython-311.pyc,,
|
|
||||||
anyio/streams/__pycache__/memory.cpython-311.pyc,,
|
|
||||||
anyio/streams/__pycache__/stapled.cpython-311.pyc,,
|
|
||||||
anyio/streams/__pycache__/text.cpython-311.pyc,,
|
|
||||||
anyio/streams/__pycache__/tls.cpython-311.pyc,,
|
|
||||||
anyio/streams/buffered.py,sha256=u7hCD8SNrYHcutG6K5wEiy1F88-pizgjvEFM22Kq2Cw,6746
|
|
||||||
anyio/streams/file.py,sha256=6jujI2m-QJITqqKFamrupX_DNsU7y2Fz3omLZxOLuY0,4524
|
|
||||||
anyio/streams/memory.py,sha256=rpxNzDMag9PCOynBqN64KyuAfAPB41vFyRP-Npo-lE0,10793
|
|
||||||
anyio/streams/stapled.py,sha256=UJ2Rgt0NUmM1VovRNOoZoic960lcbDjb3vhfZg3b_Z0,4845
|
|
||||||
anyio/streams/text.py,sha256=BcVAGJw1VRvtIqnv-o0Rb0pwH7p8vwlvl21xHq522ag,5765
|
|
||||||
anyio/streams/tls.py,sha256=fqLmxvULFO9rvxGyJ33VPrOIN7E3eiU1q90BkmKigQ8,15818
|
|
||||||
anyio/to_interpreter.py,sha256=ATnoT6kei9wDmQZtXTA3SsY4CK7XKr8Ta4_x5i6pbTw,7100
|
|
||||||
anyio/to_process.py,sha256=p6n8j0nreJUl1DEkR_9PL6KRoKtNqFxORTn8qZBvn94,9850
|
|
||||||
anyio/to_thread.py,sha256=8MPVrrQq8ttGvV21cSd68rMto5bhxJ0-i9CupXag5Gs,2750
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
Wheel-Version: 1.0
|
|
||||||
Generator: setuptools (84.0.0)
|
|
||||||
Root-Is-Purelib: true
|
|
||||||
Tag: py3-none-any
|
|
||||||
|
|
||||||
@@ -1,2 +0,0 @@
|
|||||||
[pytest11]
|
|
||||||
anyio = anyio.pytest_plugin
|
|
||||||
@@ -1,20 +0,0 @@
|
|||||||
The MIT License (MIT)
|
|
||||||
|
|
||||||
Copyright (c) 2018 Alex Grönholm
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
||||||
this software and associated documentation files (the "Software"), to deal in
|
|
||||||
the Software without restriction, including without limitation the rights to
|
|
||||||
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
|
||||||
the Software, and to permit persons to whom the Software is furnished to do so,
|
|
||||||
subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in all
|
|
||||||
copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
||||||
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
||||||
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
||||||
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
||||||
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
||||||
@@ -1 +0,0 @@
|
|||||||
anyio
|
|
||||||
@@ -1,128 +0,0 @@
|
|||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
|
||||||
|
|
||||||
from ._lazyimport import (
|
|
||||||
fix_package_names,
|
|
||||||
install_lazy_importer,
|
|
||||||
set_deprecated_aliases,
|
|
||||||
)
|
|
||||||
|
|
||||||
if TYPE_CHECKING or not install_lazy_importer():
|
|
||||||
from ._core._concurrency_utils import amap as amap
|
|
||||||
from ._core._concurrency_utils import as_completed as as_completed
|
|
||||||
from ._core._concurrency_utils import gather as gather
|
|
||||||
from ._core._contextmanagers import (
|
|
||||||
AsyncContextManagerMixin as AsyncContextManagerMixin,
|
|
||||||
)
|
|
||||||
from ._core._contextmanagers import ContextManagerMixin as ContextManagerMixin
|
|
||||||
from ._core._eventloop import current_time as current_time
|
|
||||||
from ._core._eventloop import get_all_backends as get_all_backends
|
|
||||||
from ._core._eventloop import get_available_backends as get_available_backends
|
|
||||||
from ._core._eventloop import get_cancelled_exc_class as get_cancelled_exc_class
|
|
||||||
from ._core._eventloop import run as run
|
|
||||||
from ._core._eventloop import sleep as sleep
|
|
||||||
from ._core._eventloop import sleep_forever as sleep_forever
|
|
||||||
from ._core._eventloop import sleep_until as sleep_until
|
|
||||||
from ._core._exceptions import BrokenResourceError as BrokenResourceError
|
|
||||||
from ._core._exceptions import BrokenWorkerInterpreter as BrokenWorkerInterpreter
|
|
||||||
from ._core._exceptions import BrokenWorkerProcess as BrokenWorkerProcess
|
|
||||||
from ._core._exceptions import BusyResourceError as BusyResourceError
|
|
||||||
from ._core._exceptions import ClosedResourceError as ClosedResourceError
|
|
||||||
from ._core._exceptions import ConnectionFailed as ConnectionFailed
|
|
||||||
from ._core._exceptions import DelimiterNotFound as DelimiterNotFound
|
|
||||||
from ._core._exceptions import EndOfStream as EndOfStream
|
|
||||||
from ._core._exceptions import FutureAlreadyFinished as FutureAlreadyFinished
|
|
||||||
from ._core._exceptions import FutureCancelled as FutureCancelled
|
|
||||||
from ._core._exceptions import FutureFailed as FutureFailed
|
|
||||||
from ._core._exceptions import FutureNotFinished as FutureNotFinished
|
|
||||||
from ._core._exceptions import IncompleteRead as IncompleteRead
|
|
||||||
from ._core._exceptions import NoEventLoopError as NoEventLoopError
|
|
||||||
from ._core._exceptions import RunFinishedError as RunFinishedError
|
|
||||||
from ._core._exceptions import TaskCancelled as TaskCancelled
|
|
||||||
from ._core._exceptions import TaskFailed as TaskFailed
|
|
||||||
from ._core._exceptions import TaskNotFinished as TaskNotFinished
|
|
||||||
from ._core._exceptions import (
|
|
||||||
TypedAttributeLookupError as TypedAttributeLookupError,
|
|
||||||
)
|
|
||||||
from ._core._exceptions import WouldBlock as WouldBlock
|
|
||||||
from ._core._fileio import AsyncFile as AsyncFile
|
|
||||||
from ._core._fileio import Path as Path
|
|
||||||
from ._core._fileio import open_file as open_file
|
|
||||||
from ._core._fileio import wrap_file as wrap_file
|
|
||||||
from ._core._futures import Future as Future
|
|
||||||
from ._core._resources import aclose_forcefully as aclose_forcefully
|
|
||||||
from ._core._signals import open_signal_receiver as open_signal_receiver
|
|
||||||
from ._core._sockets import TCPConnectable as TCPConnectable
|
|
||||||
from ._core._sockets import UNIXConnectable as UNIXConnectable
|
|
||||||
from ._core._sockets import as_connectable as as_connectable
|
|
||||||
from ._core._sockets import connect_tcp as connect_tcp
|
|
||||||
from ._core._sockets import connect_unix as connect_unix
|
|
||||||
from ._core._sockets import (
|
|
||||||
create_connected_udp_socket as create_connected_udp_socket,
|
|
||||||
)
|
|
||||||
from ._core._sockets import (
|
|
||||||
create_connected_unix_datagram_socket as create_connected_unix_datagram_socket,
|
|
||||||
)
|
|
||||||
from ._core._sockets import create_tcp_listener as create_tcp_listener
|
|
||||||
from ._core._sockets import create_udp_socket as create_udp_socket
|
|
||||||
from ._core._sockets import (
|
|
||||||
create_unix_datagram_socket as create_unix_datagram_socket,
|
|
||||||
)
|
|
||||||
from ._core._sockets import create_unix_listener as create_unix_listener
|
|
||||||
from ._core._sockets import getaddrinfo as getaddrinfo
|
|
||||||
from ._core._sockets import getnameinfo as getnameinfo
|
|
||||||
from ._core._sockets import notify_closing as notify_closing
|
|
||||||
from ._core._sockets import wait_readable as wait_readable
|
|
||||||
from ._core._sockets import wait_socket_readable as wait_socket_readable
|
|
||||||
from ._core._sockets import wait_socket_writable as wait_socket_writable
|
|
||||||
from ._core._sockets import wait_writable as wait_writable
|
|
||||||
from ._core._streams import (
|
|
||||||
create_memory_object_stream as create_memory_object_stream,
|
|
||||||
)
|
|
||||||
from ._core._subprocesses import open_process as open_process
|
|
||||||
from ._core._subprocesses import run_process as run_process
|
|
||||||
from ._core._synchronization import CapacityLimiter as CapacityLimiter
|
|
||||||
from ._core._synchronization import (
|
|
||||||
CapacityLimiterStatistics as CapacityLimiterStatistics,
|
|
||||||
)
|
|
||||||
from ._core._synchronization import Condition as Condition
|
|
||||||
from ._core._synchronization import ConditionStatistics as ConditionStatistics
|
|
||||||
from ._core._synchronization import Event as Event
|
|
||||||
from ._core._synchronization import EventStatistics as EventStatistics
|
|
||||||
from ._core._synchronization import Lock as Lock
|
|
||||||
from ._core._synchronization import LockStatistics as LockStatistics
|
|
||||||
from ._core._synchronization import ResourceGuard as ResourceGuard
|
|
||||||
from ._core._synchronization import Semaphore as Semaphore
|
|
||||||
from ._core._synchronization import SemaphoreStatistics as SemaphoreStatistics
|
|
||||||
from ._core._tasks import TASK_STATUS_IGNORED as TASK_STATUS_IGNORED
|
|
||||||
from ._core._tasks import CancelScope as CancelScope
|
|
||||||
from ._core._tasks import TaskHandle as TaskHandle
|
|
||||||
from ._core._tasks import create_task_group as create_task_group
|
|
||||||
from ._core._tasks import current_effective_deadline as current_effective_deadline
|
|
||||||
from ._core._tasks import fail_after as fail_after
|
|
||||||
from ._core._tasks import fail_at as fail_at
|
|
||||||
from ._core._tasks import move_on_after as move_on_after
|
|
||||||
from ._core._tasks import move_on_at as move_on_at
|
|
||||||
from ._core._tempfile import NamedTemporaryFile as NamedTemporaryFile
|
|
||||||
from ._core._tempfile import SpooledTemporaryFile as SpooledTemporaryFile
|
|
||||||
from ._core._tempfile import TemporaryDirectory as TemporaryDirectory
|
|
||||||
from ._core._tempfile import TemporaryFile as TemporaryFile
|
|
||||||
from ._core._tempfile import gettempdir as gettempdir
|
|
||||||
from ._core._tempfile import gettempdirb as gettempdirb
|
|
||||||
from ._core._tempfile import mkdtemp as mkdtemp
|
|
||||||
from ._core._tempfile import mkstemp as mkstemp
|
|
||||||
from ._core._testing import TaskInfo as TaskInfo
|
|
||||||
from ._core._testing import get_current_task as get_current_task
|
|
||||||
from ._core._testing import get_running_tasks as get_running_tasks
|
|
||||||
from ._core._testing import wait_all_tasks_blocked as wait_all_tasks_blocked
|
|
||||||
from ._core._typedattr import TypedAttributeProvider as TypedAttributeProvider
|
|
||||||
from ._core._typedattr import TypedAttributeSet as TypedAttributeSet
|
|
||||||
from ._core._typedattr import typed_attribute as typed_attribute
|
|
||||||
|
|
||||||
fix_package_names()
|
|
||||||
set_deprecated_aliases(
|
|
||||||
{
|
|
||||||
"BrokenWorkerIntepreter": "anyio.BrokenWorkerInterpreter",
|
|
||||||
}
|
|
||||||
)
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
Binary file not shown.
BIN
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -1,167 +0,0 @@
|
|||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
import asyncio
|
|
||||||
import socket
|
|
||||||
import threading
|
|
||||||
from collections.abc import Callable
|
|
||||||
from selectors import EVENT_READ, EVENT_WRITE, DefaultSelector
|
|
||||||
from typing import TYPE_CHECKING, Any
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
|
||||||
from _typeshed import FileDescriptorLike
|
|
||||||
|
|
||||||
_selector_lock = threading.Lock()
|
|
||||||
_selector: Selector | None = None
|
|
||||||
|
|
||||||
|
|
||||||
class Selector:
|
|
||||||
def __init__(self) -> None:
|
|
||||||
self._thread = threading.Thread(target=self.run, name="AnyIO socket selector")
|
|
||||||
self._selector = DefaultSelector()
|
|
||||||
self._send, self._receive = socket.socketpair()
|
|
||||||
self._send.setblocking(False)
|
|
||||||
self._receive.setblocking(False)
|
|
||||||
# This somewhat reduces the amount of memory wasted queueing up data
|
|
||||||
# for wakeups. With these settings, maximum number of 1-byte sends
|
|
||||||
# before getting BlockingIOError:
|
|
||||||
# Linux 4.8: 6
|
|
||||||
# macOS (darwin 15.5): 1
|
|
||||||
# Windows 10: 525347
|
|
||||||
# Windows you're weird. (And on Windows setting SNDBUF to 0 makes send
|
|
||||||
# blocking, even on non-blocking sockets, so don't do that.)
|
|
||||||
self._receive.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, 1)
|
|
||||||
self._send.setsockopt(socket.SOL_SOCKET, socket.SO_SNDBUF, 1)
|
|
||||||
# On Windows this is a TCP socket so this might matter. On other
|
|
||||||
# platforms this fails b/c AF_UNIX sockets aren't actually TCP.
|
|
||||||
try:
|
|
||||||
self._send.setsockopt(socket.IPPROTO_TCP, socket.TCP_NODELAY, 1)
|
|
||||||
except OSError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
self._selector.register(self._receive, EVENT_READ)
|
|
||||||
self._closed = False
|
|
||||||
|
|
||||||
def start(self) -> None:
|
|
||||||
self._thread.start()
|
|
||||||
threading._register_atexit(self._stop) # type: ignore[attr-defined]
|
|
||||||
|
|
||||||
def _stop(self) -> None:
|
|
||||||
global _selector
|
|
||||||
self._closed = True
|
|
||||||
self._notify_self()
|
|
||||||
self._send.close()
|
|
||||||
self._thread.join()
|
|
||||||
self._selector.unregister(self._receive)
|
|
||||||
self._receive.close()
|
|
||||||
self._selector.close()
|
|
||||||
_selector = None
|
|
||||||
assert not self._selector.get_map(), (
|
|
||||||
"selector still has registered file descriptors after shutdown"
|
|
||||||
)
|
|
||||||
|
|
||||||
def _notify_self(self) -> None:
|
|
||||||
try:
|
|
||||||
self._send.send(b"\x00")
|
|
||||||
except BlockingIOError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
def add_reader(self, fd: FileDescriptorLike, callback: Callable[[], Any]) -> None:
|
|
||||||
loop = asyncio.get_running_loop()
|
|
||||||
try:
|
|
||||||
key = self._selector.get_key(fd)
|
|
||||||
except KeyError:
|
|
||||||
self._selector.register(fd, EVENT_READ, {EVENT_READ: (loop, callback)})
|
|
||||||
else:
|
|
||||||
if EVENT_READ in key.data:
|
|
||||||
raise ValueError(
|
|
||||||
"this file descriptor is already registered for reading"
|
|
||||||
)
|
|
||||||
|
|
||||||
key.data[EVENT_READ] = loop, callback
|
|
||||||
self._selector.modify(fd, key.events | EVENT_READ, key.data)
|
|
||||||
|
|
||||||
self._notify_self()
|
|
||||||
|
|
||||||
def add_writer(self, fd: FileDescriptorLike, callback: Callable[[], Any]) -> None:
|
|
||||||
loop = asyncio.get_running_loop()
|
|
||||||
try:
|
|
||||||
key = self._selector.get_key(fd)
|
|
||||||
except KeyError:
|
|
||||||
self._selector.register(fd, EVENT_WRITE, {EVENT_WRITE: (loop, callback)})
|
|
||||||
else:
|
|
||||||
if EVENT_WRITE in key.data:
|
|
||||||
raise ValueError(
|
|
||||||
"this file descriptor is already registered for writing"
|
|
||||||
)
|
|
||||||
|
|
||||||
key.data[EVENT_WRITE] = loop, callback
|
|
||||||
self._selector.modify(fd, key.events | EVENT_WRITE, key.data)
|
|
||||||
|
|
||||||
self._notify_self()
|
|
||||||
|
|
||||||
def remove_reader(self, fd: FileDescriptorLike) -> bool:
|
|
||||||
try:
|
|
||||||
key = self._selector.get_key(fd)
|
|
||||||
except KeyError:
|
|
||||||
return False
|
|
||||||
|
|
||||||
if new_events := key.events ^ EVENT_READ:
|
|
||||||
del key.data[EVENT_READ]
|
|
||||||
self._selector.modify(fd, new_events, key.data)
|
|
||||||
else:
|
|
||||||
self._selector.unregister(fd)
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
def remove_writer(self, fd: FileDescriptorLike) -> bool:
|
|
||||||
try:
|
|
||||||
key = self._selector.get_key(fd)
|
|
||||||
except KeyError:
|
|
||||||
return False
|
|
||||||
|
|
||||||
if new_events := key.events ^ EVENT_WRITE:
|
|
||||||
del key.data[EVENT_WRITE]
|
|
||||||
self._selector.modify(fd, new_events, key.data)
|
|
||||||
else:
|
|
||||||
self._selector.unregister(fd)
|
|
||||||
|
|
||||||
return True
|
|
||||||
|
|
||||||
def run(self) -> None:
|
|
||||||
while not self._closed:
|
|
||||||
for key, events in self._selector.select():
|
|
||||||
if key.fileobj is self._receive:
|
|
||||||
try:
|
|
||||||
while self._receive.recv(4096):
|
|
||||||
pass
|
|
||||||
except BlockingIOError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
continue
|
|
||||||
|
|
||||||
if events & EVENT_READ:
|
|
||||||
loop, callback = key.data[EVENT_READ]
|
|
||||||
self.remove_reader(key.fd)
|
|
||||||
try:
|
|
||||||
loop.call_soon_threadsafe(callback)
|
|
||||||
except RuntimeError:
|
|
||||||
pass # the loop was already closed
|
|
||||||
|
|
||||||
if events & EVENT_WRITE:
|
|
||||||
loop, callback = key.data[EVENT_WRITE]
|
|
||||||
self.remove_writer(key.fd)
|
|
||||||
try:
|
|
||||||
loop.call_soon_threadsafe(callback)
|
|
||||||
except RuntimeError:
|
|
||||||
pass # the loop was already closed
|
|
||||||
|
|
||||||
|
|
||||||
def get_selector() -> Selector:
|
|
||||||
global _selector
|
|
||||||
|
|
||||||
with _selector_lock:
|
|
||||||
if _selector is None:
|
|
||||||
_selector = Selector()
|
|
||||||
_selector.start()
|
|
||||||
|
|
||||||
return _selector
|
|
||||||
@@ -1,156 +0,0 @@
|
|||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
from inspect import iscoroutine
|
|
||||||
|
|
||||||
__all__ = ("amap", "as_completed", "gather")
|
|
||||||
|
|
||||||
from collections.abc import AsyncGenerator, Awaitable, Callable, Coroutine, Iterable
|
|
||||||
from contextlib import asynccontextmanager
|
|
||||||
from typing import TYPE_CHECKING, Any, TypeVar, overload
|
|
||||||
|
|
||||||
from ..abc._tasks import get_coro_name
|
|
||||||
from ._exceptions import BrokenResourceError
|
|
||||||
from ._streams import create_memory_object_stream
|
|
||||||
from ._tasks import TaskHandle, create_task_group
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
|
||||||
from anyio.streams.memory import MemoryObjectReceiveStream, MemoryObjectSendStream
|
|
||||||
|
|
||||||
R = TypeVar("R")
|
|
||||||
S = TypeVar("S")
|
|
||||||
T = TypeVar("T")
|
|
||||||
U = TypeVar("U")
|
|
||||||
V = TypeVar("V")
|
|
||||||
W = TypeVar("W")
|
|
||||||
|
|
||||||
|
|
||||||
@overload
|
|
||||||
async def gather(
|
|
||||||
coro1: Coroutine[Any, Any, R], coro2: Coroutine[Any, Any, S], /
|
|
||||||
) -> tuple[R, S]: ...
|
|
||||||
|
|
||||||
|
|
||||||
@overload
|
|
||||||
async def gather(
|
|
||||||
coro1: Coroutine[Any, Any, R],
|
|
||||||
coro2: Coroutine[Any, Any, S],
|
|
||||||
coro3: Coroutine[Any, Any, T],
|
|
||||||
/,
|
|
||||||
) -> tuple[R, S, T]: ...
|
|
||||||
|
|
||||||
|
|
||||||
@overload
|
|
||||||
async def gather(
|
|
||||||
coro1: Coroutine[Any, Any, R],
|
|
||||||
coro2: Coroutine[Any, Any, S],
|
|
||||||
coro3: Coroutine[Any, Any, T],
|
|
||||||
coro4: Coroutine[Any, Any, U],
|
|
||||||
/,
|
|
||||||
) -> tuple[R, S, T, U]: ...
|
|
||||||
|
|
||||||
|
|
||||||
@overload
|
|
||||||
async def gather(
|
|
||||||
coro1: Coroutine[Any, Any, R],
|
|
||||||
coro2: Coroutine[Any, Any, S],
|
|
||||||
coro3: Coroutine[Any, Any, T],
|
|
||||||
coro4: Coroutine[Any, Any, U],
|
|
||||||
coro5: Coroutine[Any, Any, V],
|
|
||||||
/,
|
|
||||||
) -> tuple[R, S, T, U, V]: ...
|
|
||||||
|
|
||||||
|
|
||||||
@overload
|
|
||||||
async def gather(
|
|
||||||
coro1: Coroutine[Any, Any, R],
|
|
||||||
coro2: Coroutine[Any, Any, S],
|
|
||||||
coro3: Coroutine[Any, Any, T],
|
|
||||||
coro4: Coroutine[Any, Any, U],
|
|
||||||
coro5: Coroutine[Any, Any, V],
|
|
||||||
coro6: Coroutine[Any, Any, W],
|
|
||||||
/,
|
|
||||||
) -> tuple[R, S, T, U, V, W]: ...
|
|
||||||
|
|
||||||
|
|
||||||
# handle arbitrary length if awaitables are all of the same type
|
|
||||||
@overload
|
|
||||||
async def gather(*coros: Coroutine[Any, Any, R]) -> tuple[R, ...]: ...
|
|
||||||
|
|
||||||
|
|
||||||
async def gather(*coros: Coroutine[Any, Any, Any]) -> tuple[Any, ...]:
|
|
||||||
"""
|
|
||||||
Run coroutines concurrently in a task group. The order of result values corresponds
|
|
||||||
to the order of coroutines passed.
|
|
||||||
|
|
||||||
:param coros: coroutine objects to run as tasks
|
|
||||||
:return: task results for each argument in the same order as they were passed
|
|
||||||
|
|
||||||
"""
|
|
||||||
handles: list[TaskHandle[Any]] = []
|
|
||||||
async with create_task_group() as tg:
|
|
||||||
handles.extend(tg.create_task(coro) for coro in coros)
|
|
||||||
|
|
||||||
return tuple(h.return_value for h in handles)
|
|
||||||
|
|
||||||
|
|
||||||
@asynccontextmanager
|
|
||||||
async def as_completed(
|
|
||||||
*awaitables: Awaitable[R],
|
|
||||||
) -> AsyncGenerator[MemoryObjectReceiveStream[TaskHandle[R]]]:
|
|
||||||
"""
|
|
||||||
Run awaitable objects concurrently in a task group, returning an iterator which can
|
|
||||||
be used to get finished task handles in the order they complete.
|
|
||||||
|
|
||||||
:param awaitables: awaitable objects to run as tasks
|
|
||||||
:return: MemoryObjectReceiveStream for iterating over task handles as tasks complete.
|
|
||||||
|
|
||||||
"""
|
|
||||||
if not awaitables:
|
|
||||||
raise ValueError("as_completed() takes at least one awaitable")
|
|
||||||
|
|
||||||
send, recv = create_memory_object_stream[TaskHandle[R]](len(awaitables))
|
|
||||||
task_handles: list[TaskHandle[R]] = []
|
|
||||||
|
|
||||||
async def runner(
|
|
||||||
awaitable: Awaitable[R],
|
|
||||||
index: int,
|
|
||||||
_send: MemoryObjectSendStream[TaskHandle[R]],
|
|
||||||
) -> R:
|
|
||||||
async with _send:
|
|
||||||
try:
|
|
||||||
return await awaitable
|
|
||||||
finally:
|
|
||||||
try:
|
|
||||||
_send.send_nowait(task_handles[index])
|
|
||||||
except BrokenResourceError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
async with recv, create_task_group() as tg:
|
|
||||||
async with send:
|
|
||||||
for i, awaitable in enumerate(awaitables):
|
|
||||||
name = get_coro_name(awaitable) if iscoroutine(awaitable) else None
|
|
||||||
task_handles.append(
|
|
||||||
tg.start_soon(runner, awaitable, i, send.clone(), name=name)
|
|
||||||
)
|
|
||||||
try:
|
|
||||||
yield recv
|
|
||||||
finally:
|
|
||||||
tg.cancel_scope.cancel()
|
|
||||||
|
|
||||||
|
|
||||||
async def amap(
|
|
||||||
func: Callable[[T], Coroutine[Any, Any, R]], args: Iterable[T]
|
|
||||||
) -> list[R]:
|
|
||||||
"""
|
|
||||||
Run the given coroutine function concurrently for multiple argument values.
|
|
||||||
|
|
||||||
:param func: a coroutine function that takes a single argument
|
|
||||||
:param args: a sequence of argument values to pass to ``func``
|
|
||||||
:return: task results for each argument in the same order as they were passed
|
|
||||||
|
|
||||||
"""
|
|
||||||
handles: list[TaskHandle[R]] = []
|
|
||||||
async with create_task_group() as tg:
|
|
||||||
handles.extend(tg.start_soon(func, arg) for arg in args)
|
|
||||||
|
|
||||||
return [h.return_value for h in handles]
|
|
||||||
@@ -1,200 +0,0 @@
|
|||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
from abc import abstractmethod
|
|
||||||
from contextlib import AbstractAsyncContextManager, AbstractContextManager
|
|
||||||
from inspect import isasyncgen, iscoroutine, isgenerator
|
|
||||||
from types import TracebackType
|
|
||||||
from typing import Protocol, TypeVar, cast, final
|
|
||||||
|
|
||||||
_T_co = TypeVar("_T_co", covariant=True)
|
|
||||||
_ExitT_co = TypeVar("_ExitT_co", covariant=True, bound="bool | None")
|
|
||||||
|
|
||||||
|
|
||||||
class _SupportsCtxMgr(Protocol[_T_co, _ExitT_co]):
|
|
||||||
def __contextmanager__(self) -> AbstractContextManager[_T_co, _ExitT_co]: ...
|
|
||||||
|
|
||||||
|
|
||||||
class _SupportsAsyncCtxMgr(Protocol[_T_co, _ExitT_co]):
|
|
||||||
def __asynccontextmanager__(
|
|
||||||
self,
|
|
||||||
) -> AbstractAsyncContextManager[_T_co, _ExitT_co]: ...
|
|
||||||
|
|
||||||
|
|
||||||
class ContextManagerMixin:
|
|
||||||
"""
|
|
||||||
Mixin class providing context manager functionality via a generator-based
|
|
||||||
implementation.
|
|
||||||
|
|
||||||
This class allows you to implement a context manager via :meth:`__contextmanager__`
|
|
||||||
which should return a generator. The mechanics are meant to mirror those of
|
|
||||||
:func:`@contextmanager <contextlib.contextmanager>`.
|
|
||||||
|
|
||||||
.. note:: Classes using this mix-in are not reentrant as context managers, meaning
|
|
||||||
that once you enter it, you can't re-enter before first exiting it.
|
|
||||||
|
|
||||||
.. seealso:: :doc:`contextmanagers`
|
|
||||||
"""
|
|
||||||
|
|
||||||
__cm: AbstractContextManager[object, bool | None] | None = None
|
|
||||||
|
|
||||||
@final
|
|
||||||
def __enter__(self: _SupportsCtxMgr[_T_co, bool | None]) -> _T_co:
|
|
||||||
# Needed for mypy to assume self still has the __cm member
|
|
||||||
assert isinstance(self, ContextManagerMixin)
|
|
||||||
if self.__cm is not None:
|
|
||||||
raise RuntimeError(
|
|
||||||
f"this {self.__class__.__qualname__} has already been entered"
|
|
||||||
)
|
|
||||||
|
|
||||||
cm = self.__contextmanager__()
|
|
||||||
if not isinstance(cm, AbstractContextManager):
|
|
||||||
if isgenerator(cm):
|
|
||||||
raise TypeError(
|
|
||||||
"__contextmanager__() returned a generator object instead of "
|
|
||||||
"a context manager. Did you forget to add the @contextmanager "
|
|
||||||
"decorator?"
|
|
||||||
)
|
|
||||||
|
|
||||||
raise TypeError(
|
|
||||||
f"__contextmanager__() did not return a context manager object, "
|
|
||||||
f"but {cm.__class__!r}"
|
|
||||||
)
|
|
||||||
|
|
||||||
if cm is self:
|
|
||||||
raise TypeError(
|
|
||||||
f"{self.__class__.__qualname__}.__contextmanager__() returned "
|
|
||||||
f"self. Did you forget to add the @contextmanager decorator and a "
|
|
||||||
f"'yield' statement?"
|
|
||||||
)
|
|
||||||
|
|
||||||
value = cm.__enter__()
|
|
||||||
self.__cm = cm
|
|
||||||
return value
|
|
||||||
|
|
||||||
@final
|
|
||||||
def __exit__(
|
|
||||||
self: _SupportsCtxMgr[object, _ExitT_co],
|
|
||||||
exc_type: type[BaseException] | None,
|
|
||||||
exc_val: BaseException | None,
|
|
||||||
exc_tb: TracebackType | None,
|
|
||||||
) -> _ExitT_co:
|
|
||||||
# Needed for mypy to assume self still has the __cm member
|
|
||||||
assert isinstance(self, ContextManagerMixin)
|
|
||||||
if self.__cm is None:
|
|
||||||
raise RuntimeError(
|
|
||||||
f"this {self.__class__.__qualname__} has not been entered yet"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Prevent circular references
|
|
||||||
cm = self.__cm
|
|
||||||
del self.__cm
|
|
||||||
|
|
||||||
return cast(_ExitT_co, cm.__exit__(exc_type, exc_val, exc_tb))
|
|
||||||
|
|
||||||
@abstractmethod
|
|
||||||
def __contextmanager__(self) -> AbstractContextManager[object, bool | None]:
|
|
||||||
"""
|
|
||||||
Implement your context manager logic here.
|
|
||||||
|
|
||||||
This method **must** be decorated with
|
|
||||||
:func:`@contextmanager <contextlib.contextmanager>`.
|
|
||||||
|
|
||||||
.. note:: Remember that the ``yield`` will raise any exception raised in the
|
|
||||||
enclosed context block, so use a ``finally:`` block to clean up resources!
|
|
||||||
|
|
||||||
:return: a context manager object
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
class AsyncContextManagerMixin:
|
|
||||||
"""
|
|
||||||
Mixin class providing async context manager functionality via a generator-based
|
|
||||||
implementation.
|
|
||||||
|
|
||||||
This class allows you to implement a context manager via
|
|
||||||
:meth:`__asynccontextmanager__`. The mechanics are meant to mirror those of
|
|
||||||
:func:`@asynccontextmanager <contextlib.asynccontextmanager>`.
|
|
||||||
|
|
||||||
.. note:: Classes using this mix-in are not reentrant as context managers, meaning
|
|
||||||
that once you enter it, you can't re-enter before first exiting it.
|
|
||||||
|
|
||||||
.. seealso:: :doc:`contextmanagers`
|
|
||||||
"""
|
|
||||||
|
|
||||||
__cm: AbstractAsyncContextManager[object, bool | None] | None = None
|
|
||||||
|
|
||||||
@final
|
|
||||||
async def __aenter__(self: _SupportsAsyncCtxMgr[_T_co, bool | None]) -> _T_co:
|
|
||||||
# Needed for mypy to assume self still has the __cm member
|
|
||||||
assert isinstance(self, AsyncContextManagerMixin)
|
|
||||||
if self.__cm is not None:
|
|
||||||
raise RuntimeError(
|
|
||||||
f"this {self.__class__.__qualname__} has already been entered"
|
|
||||||
)
|
|
||||||
|
|
||||||
cm = self.__asynccontextmanager__()
|
|
||||||
if not isinstance(cm, AbstractAsyncContextManager):
|
|
||||||
if isasyncgen(cm):
|
|
||||||
raise TypeError(
|
|
||||||
"__asynccontextmanager__() returned an async generator instead of "
|
|
||||||
"an async context manager. Did you forget to add the "
|
|
||||||
"@asynccontextmanager decorator?"
|
|
||||||
)
|
|
||||||
elif iscoroutine(cm):
|
|
||||||
cm.close()
|
|
||||||
raise TypeError(
|
|
||||||
"__asynccontextmanager__() returned a coroutine object instead of "
|
|
||||||
"an async context manager. Did you forget to add the "
|
|
||||||
"@asynccontextmanager decorator and a 'yield' statement?"
|
|
||||||
)
|
|
||||||
|
|
||||||
raise TypeError(
|
|
||||||
f"__asynccontextmanager__() did not return an async context manager, "
|
|
||||||
f"but {cm.__class__!r}"
|
|
||||||
)
|
|
||||||
|
|
||||||
if cm is self:
|
|
||||||
raise TypeError(
|
|
||||||
f"{self.__class__.__qualname__}.__asynccontextmanager__() returned "
|
|
||||||
f"self. Did you forget to add the @asynccontextmanager decorator and a "
|
|
||||||
f"'yield' statement?"
|
|
||||||
)
|
|
||||||
|
|
||||||
value = await cm.__aenter__()
|
|
||||||
self.__cm = cm
|
|
||||||
return value
|
|
||||||
|
|
||||||
@final
|
|
||||||
async def __aexit__(
|
|
||||||
self: _SupportsAsyncCtxMgr[object, _ExitT_co],
|
|
||||||
exc_type: type[BaseException] | None,
|
|
||||||
exc_val: BaseException | None,
|
|
||||||
exc_tb: TracebackType | None,
|
|
||||||
) -> _ExitT_co:
|
|
||||||
assert isinstance(self, AsyncContextManagerMixin)
|
|
||||||
if self.__cm is None:
|
|
||||||
raise RuntimeError(
|
|
||||||
f"this {self.__class__.__qualname__} has not been entered yet"
|
|
||||||
)
|
|
||||||
|
|
||||||
# Prevent circular references
|
|
||||||
cm = self.__cm
|
|
||||||
del self.__cm
|
|
||||||
|
|
||||||
return cast(_ExitT_co, await cm.__aexit__(exc_type, exc_val, exc_tb))
|
|
||||||
|
|
||||||
@abstractmethod
|
|
||||||
def __asynccontextmanager__(
|
|
||||||
self,
|
|
||||||
) -> AbstractAsyncContextManager[object, bool | None]:
|
|
||||||
"""
|
|
||||||
Implement your async context manager logic here.
|
|
||||||
|
|
||||||
This method **must** be decorated with
|
|
||||||
:func:`@asynccontextmanager <contextlib.asynccontextmanager>`.
|
|
||||||
|
|
||||||
.. note:: Remember that the ``yield`` will raise any exception raised in the
|
|
||||||
enclosed context block, so use a ``finally:`` block to clean up resources!
|
|
||||||
|
|
||||||
:return: an async context manager object
|
|
||||||
"""
|
|
||||||
@@ -1,240 +0,0 @@
|
|||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
import math
|
|
||||||
import sys
|
|
||||||
import threading
|
|
||||||
from collections.abc import Awaitable, Callable, Generator
|
|
||||||
from contextlib import contextmanager
|
|
||||||
from contextvars import Token
|
|
||||||
from importlib import import_module
|
|
||||||
from typing import TYPE_CHECKING, Any, TypeVar
|
|
||||||
|
|
||||||
from ._exceptions import NoEventLoopError
|
|
||||||
|
|
||||||
if sys.version_info >= (3, 11):
|
|
||||||
from typing import TypeVarTuple, Unpack
|
|
||||||
else:
|
|
||||||
from typing_extensions import TypeVarTuple, Unpack
|
|
||||||
|
|
||||||
sniffio: Any
|
|
||||||
try:
|
|
||||||
import sniffio
|
|
||||||
except ModuleNotFoundError:
|
|
||||||
sniffio = None
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
|
||||||
from ..abc import AsyncBackend
|
|
||||||
|
|
||||||
# This must be updated when new backends are introduced
|
|
||||||
BACKENDS = "asyncio", "trio"
|
|
||||||
|
|
||||||
T_Retval = TypeVar("T_Retval")
|
|
||||||
PosArgsT = TypeVarTuple("PosArgsT")
|
|
||||||
|
|
||||||
threadlocals = threading.local()
|
|
||||||
loaded_backends: dict[str, type[AsyncBackend]] = {}
|
|
||||||
|
|
||||||
|
|
||||||
def run(
|
|
||||||
func: Callable[[Unpack[PosArgsT]], Awaitable[T_Retval]],
|
|
||||||
*args: Unpack[PosArgsT],
|
|
||||||
backend: str = "asyncio",
|
|
||||||
backend_options: dict[str, Any] | None = None,
|
|
||||||
) -> T_Retval:
|
|
||||||
"""
|
|
||||||
Run the given coroutine function in an asynchronous event loop.
|
|
||||||
|
|
||||||
The current thread must not be already running an event loop.
|
|
||||||
|
|
||||||
:param func: a coroutine function
|
|
||||||
:param args: positional arguments to ``func``
|
|
||||||
:param backend: name of the asynchronous event loop implementation – currently
|
|
||||||
either ``asyncio`` or ``trio``
|
|
||||||
:param backend_options: keyword arguments to call the backend ``run()``
|
|
||||||
implementation with (documented :ref:`here <backend options>`)
|
|
||||||
:return: the return value of the coroutine function
|
|
||||||
:raises RuntimeError: if an asynchronous event loop is already running in this
|
|
||||||
thread
|
|
||||||
:raises LookupError: if the named backend is not found
|
|
||||||
|
|
||||||
"""
|
|
||||||
if asynclib_name := current_async_library():
|
|
||||||
raise RuntimeError(f"Already running {asynclib_name} in this thread")
|
|
||||||
|
|
||||||
try:
|
|
||||||
async_backend = get_async_backend(backend)
|
|
||||||
except ImportError as exc:
|
|
||||||
if backend in BACKENDS:
|
|
||||||
raise LookupError(
|
|
||||||
f"Backend {backend!r} is not available. "
|
|
||||||
f"Install it with: pip install anyio[{backend}]"
|
|
||||||
) from exc
|
|
||||||
|
|
||||||
raise LookupError(f"No such backend: {backend}") from exc
|
|
||||||
|
|
||||||
token = None
|
|
||||||
if asynclib_name is None:
|
|
||||||
# Since we're in control of the event loop, we can cache the name of the async
|
|
||||||
# library
|
|
||||||
token = set_current_async_library(backend)
|
|
||||||
|
|
||||||
try:
|
|
||||||
backend_options = backend_options or {}
|
|
||||||
return async_backend.run(func, args, {}, backend_options)
|
|
||||||
finally:
|
|
||||||
reset_current_async_library(token)
|
|
||||||
|
|
||||||
|
|
||||||
async def sleep(delay: float) -> None:
|
|
||||||
"""
|
|
||||||
Pause the current task for the specified duration.
|
|
||||||
|
|
||||||
:param delay: the duration, in seconds
|
|
||||||
|
|
||||||
"""
|
|
||||||
return await get_async_backend().sleep(delay)
|
|
||||||
|
|
||||||
|
|
||||||
async def sleep_forever() -> None:
|
|
||||||
"""
|
|
||||||
Pause the current task until it's cancelled.
|
|
||||||
|
|
||||||
This is a shortcut for ``sleep(math.inf)``.
|
|
||||||
|
|
||||||
.. versionadded:: 3.1
|
|
||||||
|
|
||||||
"""
|
|
||||||
await sleep(math.inf)
|
|
||||||
|
|
||||||
|
|
||||||
async def sleep_until(deadline: float) -> None:
|
|
||||||
"""
|
|
||||||
Pause the current task until the given time.
|
|
||||||
|
|
||||||
:param deadline: the absolute time to wake up at (according to the internal
|
|
||||||
monotonic clock of the event loop)
|
|
||||||
|
|
||||||
.. versionadded:: 3.1
|
|
||||||
|
|
||||||
"""
|
|
||||||
now = current_time()
|
|
||||||
await sleep(max(deadline - now, 0))
|
|
||||||
|
|
||||||
|
|
||||||
def current_time() -> float:
|
|
||||||
"""
|
|
||||||
Return the current value of the event loop's internal clock.
|
|
||||||
|
|
||||||
:return: the clock value (seconds)
|
|
||||||
:raises NoEventLoopError: if no supported asynchronous event loop is running in the
|
|
||||||
current thread
|
|
||||||
|
|
||||||
"""
|
|
||||||
return get_async_backend().current_time()
|
|
||||||
|
|
||||||
|
|
||||||
def get_all_backends() -> tuple[str, ...]:
|
|
||||||
"""Return a tuple of the names of all built-in backends."""
|
|
||||||
return BACKENDS
|
|
||||||
|
|
||||||
|
|
||||||
def get_available_backends() -> tuple[str, ...]:
|
|
||||||
"""
|
|
||||||
Test for the availability of built-in backends.
|
|
||||||
|
|
||||||
:return a tuple of the built-in backend names that were successfully imported
|
|
||||||
|
|
||||||
.. versionadded:: 4.12
|
|
||||||
|
|
||||||
"""
|
|
||||||
available_backends: list[str] = []
|
|
||||||
for backend_name in get_all_backends():
|
|
||||||
try:
|
|
||||||
get_async_backend(backend_name)
|
|
||||||
except ImportError:
|
|
||||||
continue
|
|
||||||
|
|
||||||
available_backends.append(backend_name)
|
|
||||||
|
|
||||||
return tuple(available_backends)
|
|
||||||
|
|
||||||
|
|
||||||
def get_cancelled_exc_class() -> type[BaseException]:
|
|
||||||
"""
|
|
||||||
Return the current async library's cancellation exception class.
|
|
||||||
|
|
||||||
:raises NoEventLoopError: if no supported asynchronous event loop is running in the
|
|
||||||
current thread
|
|
||||||
|
|
||||||
"""
|
|
||||||
return get_async_backend().cancelled_exception_class()
|
|
||||||
|
|
||||||
|
|
||||||
#
|
|
||||||
# Private API
|
|
||||||
#
|
|
||||||
|
|
||||||
|
|
||||||
@contextmanager
|
|
||||||
def claim_worker_thread(
|
|
||||||
backend_class: type[AsyncBackend], token: object
|
|
||||||
) -> Generator[Any, None, None]:
|
|
||||||
from ..lowlevel import EventLoopToken
|
|
||||||
|
|
||||||
threadlocals.current_token = EventLoopToken(backend_class, token)
|
|
||||||
try:
|
|
||||||
yield
|
|
||||||
finally:
|
|
||||||
del threadlocals.current_token
|
|
||||||
|
|
||||||
|
|
||||||
def get_async_backend(asynclib_name: str | None = None) -> type[AsyncBackend]:
|
|
||||||
if asynclib_name is None:
|
|
||||||
asynclib_name = current_async_library()
|
|
||||||
if not asynclib_name:
|
|
||||||
raise NoEventLoopError(
|
|
||||||
f"Not currently running on any asynchronous event loop. "
|
|
||||||
f"Available async backends: {', '.join(get_all_backends())}"
|
|
||||||
)
|
|
||||||
|
|
||||||
# We use our own dict instead of sys.modules to get the already imported back-end
|
|
||||||
# class because the appropriate modules in sys.modules could potentially be only
|
|
||||||
# partially initialized
|
|
||||||
try:
|
|
||||||
return loaded_backends[asynclib_name]
|
|
||||||
except KeyError:
|
|
||||||
module = import_module(f"anyio._backends._{asynclib_name}")
|
|
||||||
loaded_backends[asynclib_name] = module.backend_class
|
|
||||||
return module.backend_class
|
|
||||||
|
|
||||||
|
|
||||||
def current_async_library() -> str | None:
|
|
||||||
if sniffio is None:
|
|
||||||
# If sniffio is not installed, we assume we're either running asyncio or nothing
|
|
||||||
import asyncio
|
|
||||||
|
|
||||||
try:
|
|
||||||
asyncio.get_running_loop()
|
|
||||||
return "asyncio"
|
|
||||||
except RuntimeError:
|
|
||||||
pass
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
return sniffio.current_async_library()
|
|
||||||
except sniffio.AsyncLibraryNotFoundError:
|
|
||||||
pass
|
|
||||||
|
|
||||||
return None
|
|
||||||
|
|
||||||
|
|
||||||
def set_current_async_library(asynclib_name: str | None) -> Token | None:
|
|
||||||
# no-op if sniffio is not installed
|
|
||||||
if sniffio is None:
|
|
||||||
return None
|
|
||||||
|
|
||||||
return sniffio.current_async_library_cvar.set(asynclib_name)
|
|
||||||
|
|
||||||
|
|
||||||
def reset_current_async_library(token: Token | None) -> None:
|
|
||||||
if token is not None:
|
|
||||||
sniffio.current_async_library_cvar.reset(token)
|
|
||||||
@@ -1,205 +0,0 @@
|
|||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
import sys
|
|
||||||
from collections.abc import Generator
|
|
||||||
from textwrap import dedent
|
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
if sys.version_info < (3, 11):
|
|
||||||
from exceptiongroup import BaseExceptionGroup
|
|
||||||
|
|
||||||
|
|
||||||
class BrokenResourceError(Exception):
|
|
||||||
"""
|
|
||||||
Raised when trying to use a resource that has been rendered unusable due to external
|
|
||||||
causes (e.g. a send stream whose peer has disconnected).
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
class BrokenWorkerProcess(Exception):
|
|
||||||
"""
|
|
||||||
Raised by :meth:`~anyio.to_process.run_sync` if the worker process terminates abruptly or
|
|
||||||
otherwise misbehaves.
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
class BrokenWorkerInterpreter(Exception):
|
|
||||||
"""
|
|
||||||
Raised by :meth:`~anyio.to_interpreter.run_sync` if an unexpected exception is
|
|
||||||
raised in the subinterpreter.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, excinfo: Any):
|
|
||||||
# This was adapted from concurrent.futures.interpreter.ExecutionFailed
|
|
||||||
msg = excinfo.formatted
|
|
||||||
if not msg:
|
|
||||||
if excinfo.type and excinfo.msg:
|
|
||||||
msg = f"{excinfo.type.__name__}: {excinfo.msg}"
|
|
||||||
else:
|
|
||||||
msg = excinfo.type.__name__ or excinfo.msg
|
|
||||||
|
|
||||||
super().__init__(msg)
|
|
||||||
self.excinfo = excinfo
|
|
||||||
|
|
||||||
def __str__(self) -> str:
|
|
||||||
try:
|
|
||||||
formatted = self.excinfo.errdisplay
|
|
||||||
except Exception:
|
|
||||||
return super().__str__()
|
|
||||||
else:
|
|
||||||
return dedent(
|
|
||||||
f"""
|
|
||||||
{super().__str__()}
|
|
||||||
|
|
||||||
Uncaught in the interpreter:
|
|
||||||
|
|
||||||
{formatted}
|
|
||||||
""".strip()
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class BusyResourceError(Exception):
|
|
||||||
"""
|
|
||||||
Raised when two tasks are trying to read from or write to the same resource
|
|
||||||
concurrently.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, action: str):
|
|
||||||
super().__init__(f"Another task is already {action} this resource")
|
|
||||||
|
|
||||||
|
|
||||||
class ClosedResourceError(Exception):
|
|
||||||
"""Raised when trying to use a resource that has been closed."""
|
|
||||||
|
|
||||||
|
|
||||||
class ConnectionFailed(OSError):
|
|
||||||
"""
|
|
||||||
Raised when a connection attempt fails.
|
|
||||||
|
|
||||||
.. note:: This class inherits from :exc:`OSError` for backwards compatibility.
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
def iterate_exceptions(
|
|
||||||
exception: BaseException,
|
|
||||||
) -> Generator[BaseException, None, None]:
|
|
||||||
if isinstance(exception, BaseExceptionGroup):
|
|
||||||
for exc in exception.exceptions:
|
|
||||||
yield from iterate_exceptions(exc)
|
|
||||||
else:
|
|
||||||
yield exception
|
|
||||||
|
|
||||||
|
|
||||||
class DelimiterNotFound(Exception):
|
|
||||||
"""
|
|
||||||
Raised during
|
|
||||||
:meth:`~anyio.streams.buffered.BufferedByteReceiveStream.receive_until` if the
|
|
||||||
maximum number of bytes has been read without the delimiter being found.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self, max_bytes: int) -> None:
|
|
||||||
super().__init__(
|
|
||||||
f"The delimiter was not found among the first {max_bytes} bytes"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class EndOfStream(Exception):
|
|
||||||
"""
|
|
||||||
Raised when trying to read from a stream that has been closed from the other end.
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
class IncompleteRead(Exception):
|
|
||||||
"""
|
|
||||||
Raised during
|
|
||||||
:meth:`~anyio.streams.buffered.BufferedByteReceiveStream.receive_exactly` or
|
|
||||||
:meth:`~anyio.streams.buffered.BufferedByteReceiveStream.receive_until` if the
|
|
||||||
connection is closed before the requested amount of bytes has been read.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self) -> None:
|
|
||||||
super().__init__(
|
|
||||||
"The stream was closed before the read operation could be completed"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class TypedAttributeLookupError(LookupError):
|
|
||||||
"""
|
|
||||||
Raised by :meth:`~anyio.TypedAttributeProvider.extra` when the given typed attribute
|
|
||||||
is not found and no default value has been given.
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
class WouldBlock(Exception):
|
|
||||||
"""Raised by ``X_nowait`` functions if ``X()`` would block."""
|
|
||||||
|
|
||||||
|
|
||||||
class NoEventLoopError(RuntimeError):
|
|
||||||
"""
|
|
||||||
Raised by several functions that require an event loop to be running in the current
|
|
||||||
thread when there is no running event loop.
|
|
||||||
|
|
||||||
This is also raised by :func:`.from_thread.run` and :func:`.from_thread.run_sync`
|
|
||||||
if not calling from an AnyIO worker thread, and no ``token`` was passed.
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
class RunFinishedError(RuntimeError):
|
|
||||||
"""
|
|
||||||
Raised by :func:`.from_thread.run` and :func:`.from_thread.run_sync` if the event
|
|
||||||
loop associated with the explicitly passed token has already finished.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(self) -> None:
|
|
||||||
super().__init__(
|
|
||||||
"The event loop associated with the given token has already finished"
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
class TaskFailed(Exception):
|
|
||||||
"""
|
|
||||||
Raised when awaiting on, or attempting to access the return value of, a
|
|
||||||
:class:`.TaskHandle` that raised an exception.
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
class TaskCancelled(TaskFailed):
|
|
||||||
"""
|
|
||||||
Raised when awaiting on, or attempting to access the return value of, a
|
|
||||||
:class:`.TaskHandle` that was cancelled.
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
class TaskNotFinished(Exception):
|
|
||||||
"""
|
|
||||||
Raised when attempting to access the return value or exception of a
|
|
||||||
:class:`.TaskHandle` that is still pending completion.
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
class FutureFailed(Exception):
|
|
||||||
"""
|
|
||||||
Raised when awaiting on, or attempting to access the return value of, a
|
|
||||||
:class:`.Future` that raised an exception.
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
class FutureCancelled(FutureFailed):
|
|
||||||
"""
|
|
||||||
Raised when attempting to access the return value or exception of a
|
|
||||||
:class:`.Future` that was cancelled.
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
class FutureNotFinished(Exception):
|
|
||||||
"""
|
|
||||||
Raised when attempting to access the return value or exception of a
|
|
||||||
:class:`.Future` that is still pending completion.
|
|
||||||
"""
|
|
||||||
|
|
||||||
|
|
||||||
class FutureAlreadyFinished(Exception):
|
|
||||||
"""
|
|
||||||
Raised when attempting set a result of or await a
|
|
||||||
:class:`.Future` that has already completed.
|
|
||||||
"""
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,191 +0,0 @@
|
|||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
from collections.abc import Generator
|
|
||||||
from enum import Enum, auto
|
|
||||||
from typing import Any, Generic, TypeVar
|
|
||||||
|
|
||||||
from ._exceptions import (
|
|
||||||
FutureAlreadyFinished,
|
|
||||||
FutureCancelled,
|
|
||||||
FutureFailed,
|
|
||||||
FutureNotFinished,
|
|
||||||
)
|
|
||||||
from ._synchronization import Event
|
|
||||||
|
|
||||||
T = TypeVar("T")
|
|
||||||
|
|
||||||
|
|
||||||
class Future(Generic[T]):
|
|
||||||
"""
|
|
||||||
An awaitable object that works similar to a :class:`asyncio.Future` but
|
|
||||||
with similar characteristics to a :class:`.TaskHandle`.
|
|
||||||
"""
|
|
||||||
|
|
||||||
class Status(Enum):
|
|
||||||
"""
|
|
||||||
The status of a future handle.
|
|
||||||
|
|
||||||
.. attribute:: PENDING
|
|
||||||
|
|
||||||
The future has not finished yet.
|
|
||||||
.. attribute:: FINISHED
|
|
||||||
|
|
||||||
The future has finished with a return value.
|
|
||||||
.. attribute:: CANCELLED
|
|
||||||
|
|
||||||
The future was cancelled and has finished since.
|
|
||||||
.. attribute:: FAILED
|
|
||||||
|
|
||||||
The future raised an exception.
|
|
||||||
"""
|
|
||||||
|
|
||||||
PENDING = auto()
|
|
||||||
FINISHED = auto()
|
|
||||||
CANCELLED = auto()
|
|
||||||
FAILED = auto()
|
|
||||||
|
|
||||||
__slots__ = (
|
|
||||||
"_cancelled",
|
|
||||||
"_exception",
|
|
||||||
"_finished_event",
|
|
||||||
"_name",
|
|
||||||
"_return_value",
|
|
||||||
)
|
|
||||||
_return_value: T
|
|
||||||
|
|
||||||
def __init__(self, *, name: str | None = None) -> None:
|
|
||||||
self._finished_event = Event()
|
|
||||||
self._exception: BaseException | None = None
|
|
||||||
self._cancelled: bool = False
|
|
||||||
self._name = name
|
|
||||||
|
|
||||||
def _check_pending(self) -> None:
|
|
||||||
"""Shortcut for checking if a Future is pending
|
|
||||||
|
|
||||||
:raises FutureAlreadyFinished: if future was already given a result or exception.
|
|
||||||
:raises FutureCancelled: if future has been cancelled previously.
|
|
||||||
"""
|
|
||||||
match self.status:
|
|
||||||
case Future.Status.PENDING:
|
|
||||||
return
|
|
||||||
case Future.Status.FINISHED:
|
|
||||||
raise FutureAlreadyFinished("future has already finished")
|
|
||||||
case Future.Status.FAILED:
|
|
||||||
raise FutureAlreadyFinished("future already failed")
|
|
||||||
case Future.Status.CANCELLED:
|
|
||||||
raise FutureCancelled("future was cancelled")
|
|
||||||
|
|
||||||
async def wait(self) -> None:
|
|
||||||
"""
|
|
||||||
Waits for the future to finish.
|
|
||||||
|
|
||||||
This method will attempt to wait for a result or exception
|
|
||||||
"""
|
|
||||||
await self._finished_event.wait()
|
|
||||||
|
|
||||||
def cancel(self) -> None:
|
|
||||||
"""Cancels a pending `.Future` object
|
|
||||||
|
|
||||||
Does nothing if the Future was already finished.
|
|
||||||
"""
|
|
||||||
if self.status is Future.Status.PENDING:
|
|
||||||
self._cancelled = True
|
|
||||||
self._finished_event.set()
|
|
||||||
|
|
||||||
@property
|
|
||||||
def exception(self) -> BaseException | None:
|
|
||||||
"""
|
|
||||||
The exception value of a `.Future`
|
|
||||||
|
|
||||||
:raises FutureNotFinished: if future is still pending
|
|
||||||
:raises FutureCancelled: if future was cancelled
|
|
||||||
:returns: None if future succeeds with a result sent instead
|
|
||||||
otherwise this will be an exception
|
|
||||||
"""
|
|
||||||
|
|
||||||
match self.status:
|
|
||||||
case Future.Status.PENDING:
|
|
||||||
raise FutureNotFinished("the future has not finished yet")
|
|
||||||
case Future.Status.FINISHED:
|
|
||||||
return None
|
|
||||||
case Future.Status.CANCELLED:
|
|
||||||
raise FutureCancelled("the future was cancelled")
|
|
||||||
case Future.Status.FAILED:
|
|
||||||
return self._exception
|
|
||||||
|
|
||||||
@exception.setter
|
|
||||||
def exception(self, exception: BaseException) -> None:
|
|
||||||
"""Send exception for a `.Future` object
|
|
||||||
|
|
||||||
:raises FutureAlreadyFinished: if future was already given a result or exception.
|
|
||||||
:raises FutureCancelled: if future has been cancelled previously.
|
|
||||||
"""
|
|
||||||
self._check_pending()
|
|
||||||
self._exception = exception
|
|
||||||
self._finished_event.set()
|
|
||||||
|
|
||||||
@property
|
|
||||||
def return_value(self) -> T:
|
|
||||||
"""
|
|
||||||
The return value of the future.
|
|
||||||
|
|
||||||
:raises FutureNotFinished: if the future has not finished yet
|
|
||||||
:raises FutureCancelled: if the future was cancelled
|
|
||||||
:raises FutureFailed: if the future raised an exception
|
|
||||||
|
|
||||||
"""
|
|
||||||
match self.status:
|
|
||||||
case Future.Status.PENDING:
|
|
||||||
raise FutureNotFinished("the future has not finished yet")
|
|
||||||
case Future.Status.FINISHED:
|
|
||||||
return self._return_value
|
|
||||||
case Future.Status.CANCELLED:
|
|
||||||
raise FutureCancelled("the future was cancelled")
|
|
||||||
case Future.Status.FAILED:
|
|
||||||
raise FutureFailed(
|
|
||||||
"the future raised an exception"
|
|
||||||
) from self._exception
|
|
||||||
|
|
||||||
@return_value.setter
|
|
||||||
def return_value(self, value: T) -> None:
|
|
||||||
"""
|
|
||||||
Send pending result for a `.Future` object
|
|
||||||
|
|
||||||
:raises FutureAlreadyFinished: if future was already given a result or exception.
|
|
||||||
:raises FutureCancelled: if future has been cancelled previously.
|
|
||||||
"""
|
|
||||||
self._check_pending()
|
|
||||||
self._return_value = value
|
|
||||||
self._finished_event.set()
|
|
||||||
|
|
||||||
@property
|
|
||||||
def status(self) -> Future.Status:
|
|
||||||
"""
|
|
||||||
The current status of a future.
|
|
||||||
|
|
||||||
Every future starts in the :attr:`~Future.Status.PENDING` state.
|
|
||||||
If a future is cancelled while in this state, it will transition to the
|
|
||||||
:attr:`Future.Status.CANCELLED` state. When the task finishes, it will
|
|
||||||
transition to one of the three final states (
|
|
||||||
:attr:`Future.Status.FINISHED`, :attr:`Future.Status.FAILED`, or
|
|
||||||
:attr:`Future.Status.CANCELLED`) depending on the exception the task
|
|
||||||
raised, if any. No other status transitions will happen.
|
|
||||||
"""
|
|
||||||
if not self._finished_event.is_set():
|
|
||||||
return Future.Status.PENDING
|
|
||||||
elif self._cancelled:
|
|
||||||
return Future.Status.CANCELLED
|
|
||||||
elif self._exception is not None:
|
|
||||||
return Future.Status.FAILED
|
|
||||||
else:
|
|
||||||
return Future.Status.FINISHED
|
|
||||||
|
|
||||||
def __await__(self) -> Generator[Any, Any, T]:
|
|
||||||
yield from self.wait().__await__()
|
|
||||||
return self.return_value
|
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
|
||||||
return (
|
|
||||||
f"<{self.__class__.__name__} {self.status.name.lower()} "
|
|
||||||
f"name={self._name!r}>"
|
|
||||||
)
|
|
||||||
@@ -1,18 +0,0 @@
|
|||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
from ..abc import AsyncResource # noqa: TC001
|
|
||||||
from ._tasks import CancelScope
|
|
||||||
|
|
||||||
|
|
||||||
async def aclose_forcefully(resource: AsyncResource) -> None:
|
|
||||||
"""
|
|
||||||
Close an asynchronous resource in a cancelled scope.
|
|
||||||
|
|
||||||
Doing this closes the resource without waiting on anything.
|
|
||||||
|
|
||||||
:param resource: the resource to close
|
|
||||||
|
|
||||||
"""
|
|
||||||
with CancelScope() as scope:
|
|
||||||
scope.cancel()
|
|
||||||
await resource.aclose()
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
from collections.abc import AsyncIterator
|
|
||||||
from contextlib import AbstractContextManager
|
|
||||||
from signal import Signals
|
|
||||||
|
|
||||||
from ._eventloop import get_async_backend
|
|
||||||
|
|
||||||
|
|
||||||
def open_signal_receiver(
|
|
||||||
*signals: Signals,
|
|
||||||
) -> AbstractContextManager[AsyncIterator[Signals]]:
|
|
||||||
"""
|
|
||||||
Start receiving operating system signals.
|
|
||||||
|
|
||||||
:param signals: signals to receive (e.g. ``signal.SIGINT``)
|
|
||||||
:return: an asynchronous context manager for an asynchronous iterator which yields
|
|
||||||
signal numbers
|
|
||||||
:raises NoEventLoopError: if no supported asynchronous event loop is running in the
|
|
||||||
current thread
|
|
||||||
|
|
||||||
.. warning:: Windows does not support signals natively so it is best to avoid
|
|
||||||
relying on this in cross-platform applications.
|
|
||||||
|
|
||||||
.. warning:: On asyncio, this permanently replaces any previous signal handler for
|
|
||||||
the given signals, as set via :meth:`~asyncio.loop.add_signal_handler`.
|
|
||||||
|
|
||||||
"""
|
|
||||||
return get_async_backend().open_signal_receiver(*signals)
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,52 +0,0 @@
|
|||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
import math
|
|
||||||
from typing import TypeVar
|
|
||||||
from warnings import warn
|
|
||||||
|
|
||||||
from ..streams.memory import (
|
|
||||||
MemoryObjectReceiveStream,
|
|
||||||
MemoryObjectSendStream,
|
|
||||||
_MemoryObjectStreamState,
|
|
||||||
)
|
|
||||||
|
|
||||||
T_Item = TypeVar("T_Item")
|
|
||||||
|
|
||||||
|
|
||||||
class create_memory_object_stream(
|
|
||||||
tuple[MemoryObjectSendStream[T_Item], MemoryObjectReceiveStream[T_Item]],
|
|
||||||
):
|
|
||||||
"""
|
|
||||||
Create a memory object stream.
|
|
||||||
|
|
||||||
The stream's item type can be annotated like
|
|
||||||
:func:`create_memory_object_stream[T_Item]`.
|
|
||||||
|
|
||||||
:param max_buffer_size: number of items held in the buffer until ``send()`` starts
|
|
||||||
blocking
|
|
||||||
:param item_type: old way of marking the streams with the right generic type for
|
|
||||||
static typing (does nothing on AnyIO 4)
|
|
||||||
|
|
||||||
.. deprecated:: 4.0
|
|
||||||
Use ``create_memory_object_stream[YourItemType](...)`` instead.
|
|
||||||
:return: a tuple of (send stream, receive stream)
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __new__( # type: ignore[misc]
|
|
||||||
cls, max_buffer_size: float = 0, item_type: object = None
|
|
||||||
) -> tuple[MemoryObjectSendStream[T_Item], MemoryObjectReceiveStream[T_Item]]:
|
|
||||||
if max_buffer_size != math.inf and not isinstance(max_buffer_size, int):
|
|
||||||
raise ValueError("max_buffer_size must be either an integer or math.inf")
|
|
||||||
if max_buffer_size < 0:
|
|
||||||
raise ValueError("max_buffer_size cannot be negative")
|
|
||||||
if item_type is not None:
|
|
||||||
warn(
|
|
||||||
"The item_type argument has been deprecated in AnyIO 4.0. "
|
|
||||||
"Use create_memory_object_stream[YourItemType](...) instead.",
|
|
||||||
DeprecationWarning,
|
|
||||||
stacklevel=2,
|
|
||||||
)
|
|
||||||
|
|
||||||
state = _MemoryObjectStreamState[T_Item](max_buffer_size)
|
|
||||||
return (MemoryObjectSendStream(state), MemoryObjectReceiveStream(state))
|
|
||||||
@@ -1,196 +0,0 @@
|
|||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
from collections.abc import AsyncIterable, Iterable, Mapping, Sequence
|
|
||||||
from io import BytesIO
|
|
||||||
from os import PathLike
|
|
||||||
from subprocess import PIPE, CalledProcessError, CompletedProcess
|
|
||||||
from typing import IO, Any, TypeAlias, cast
|
|
||||||
|
|
||||||
from ..abc import Process # noqa: TC001
|
|
||||||
from ._eventloop import get_async_backend
|
|
||||||
from ._tasks import create_task_group
|
|
||||||
|
|
||||||
StrOrBytesPath: TypeAlias = str | bytes | PathLike[str] | PathLike[bytes]
|
|
||||||
|
|
||||||
|
|
||||||
async def run_process(
|
|
||||||
command: StrOrBytesPath | Sequence[StrOrBytesPath],
|
|
||||||
*,
|
|
||||||
input: bytes | None = None,
|
|
||||||
stdin: int | IO[Any] | None = None,
|
|
||||||
stdout: int | IO[Any] | None = PIPE,
|
|
||||||
stderr: int | IO[Any] | None = PIPE,
|
|
||||||
check: bool = True,
|
|
||||||
cwd: StrOrBytesPath | None = None,
|
|
||||||
env: Mapping[str, str] | None = None,
|
|
||||||
startupinfo: Any = None,
|
|
||||||
creationflags: int = 0,
|
|
||||||
start_new_session: bool = False,
|
|
||||||
pass_fds: Sequence[int] = (),
|
|
||||||
user: str | int | None = None,
|
|
||||||
group: str | int | None = None,
|
|
||||||
extra_groups: Iterable[str | int] | None = None,
|
|
||||||
umask: int = -1,
|
|
||||||
) -> CompletedProcess[bytes]:
|
|
||||||
"""
|
|
||||||
Run an external command in a subprocess and wait until it completes.
|
|
||||||
|
|
||||||
.. seealso:: :func:`subprocess.run`
|
|
||||||
|
|
||||||
:param command: either a string to pass to the shell, or an iterable of strings
|
|
||||||
containing the executable name or path and its arguments
|
|
||||||
:param input: bytes passed to the standard input of the subprocess
|
|
||||||
:param stdin: one of :data:`subprocess.PIPE`, :data:`subprocess.DEVNULL`,
|
|
||||||
a file-like object, or `None`; ``input`` overrides this
|
|
||||||
:param stdout: one of :data:`subprocess.PIPE`, :data:`subprocess.DEVNULL`,
|
|
||||||
a file-like object, or `None`
|
|
||||||
:param stderr: one of :data:`subprocess.PIPE`, :data:`subprocess.DEVNULL`,
|
|
||||||
:data:`subprocess.STDOUT`, a file-like object, or `None`
|
|
||||||
:param check: if ``True``, raise :exc:`~subprocess.CalledProcessError` if the
|
|
||||||
process terminates with a return code other than 0
|
|
||||||
:param cwd: If not ``None``, change the working directory to this before running the
|
|
||||||
command
|
|
||||||
:param env: if not ``None``, this mapping replaces the inherited environment
|
|
||||||
variables from the parent process
|
|
||||||
:param startupinfo: an instance of :class:`subprocess.STARTUPINFO` that can be used
|
|
||||||
to specify process startup parameters (Windows only)
|
|
||||||
:param creationflags: flags that can be used to control the creation of the
|
|
||||||
subprocess (see :class:`subprocess.Popen` for the specifics)
|
|
||||||
:param start_new_session: if ``true`` the setsid() system call will be made in the
|
|
||||||
child process prior to the execution of the subprocess. (POSIX only)
|
|
||||||
:param pass_fds: sequence of file descriptors to keep open between the parent and
|
|
||||||
child processes. (POSIX only)
|
|
||||||
:param user: effective user to run the process as (Python >= 3.9, POSIX only)
|
|
||||||
:param group: effective group to run the process as (Python >= 3.9, POSIX only)
|
|
||||||
:param extra_groups: supplementary groups to set in the subprocess (Python >= 3.9,
|
|
||||||
POSIX only)
|
|
||||||
:param umask: if not negative, this umask is applied in the child process before
|
|
||||||
running the given command (Python >= 3.9, POSIX only)
|
|
||||||
:return: an object representing the completed process
|
|
||||||
:raises ~subprocess.CalledProcessError: if ``check`` is ``True`` and the process
|
|
||||||
exits with a nonzero return code
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
async def drain_stream(stream: AsyncIterable[bytes], index: int) -> None:
|
|
||||||
buffer = BytesIO()
|
|
||||||
async for chunk in stream:
|
|
||||||
buffer.write(chunk)
|
|
||||||
|
|
||||||
stream_contents[index] = buffer.getvalue()
|
|
||||||
|
|
||||||
if stdin is not None and input is not None:
|
|
||||||
raise ValueError("only one of stdin and input is allowed")
|
|
||||||
|
|
||||||
async with await open_process(
|
|
||||||
command,
|
|
||||||
stdin=PIPE if input else stdin,
|
|
||||||
stdout=stdout,
|
|
||||||
stderr=stderr,
|
|
||||||
cwd=cwd,
|
|
||||||
env=env,
|
|
||||||
startupinfo=startupinfo,
|
|
||||||
creationflags=creationflags,
|
|
||||||
start_new_session=start_new_session,
|
|
||||||
pass_fds=pass_fds,
|
|
||||||
user=user,
|
|
||||||
group=group,
|
|
||||||
extra_groups=extra_groups,
|
|
||||||
umask=umask,
|
|
||||||
) as process:
|
|
||||||
stream_contents: list[bytes | None] = [None, None]
|
|
||||||
async with create_task_group() as tg:
|
|
||||||
if process.stdout:
|
|
||||||
tg.start_soon(drain_stream, process.stdout, 0)
|
|
||||||
|
|
||||||
if process.stderr:
|
|
||||||
tg.start_soon(drain_stream, process.stderr, 1)
|
|
||||||
|
|
||||||
if process.stdin and input:
|
|
||||||
await process.stdin.send(input)
|
|
||||||
await process.stdin.aclose()
|
|
||||||
|
|
||||||
await process.wait()
|
|
||||||
|
|
||||||
output, errors = stream_contents
|
|
||||||
if check and process.returncode != 0:
|
|
||||||
raise CalledProcessError(cast(int, process.returncode), command, output, errors)
|
|
||||||
|
|
||||||
return CompletedProcess(command, cast(int, process.returncode), output, errors)
|
|
||||||
|
|
||||||
|
|
||||||
async def open_process(
|
|
||||||
command: StrOrBytesPath | Sequence[StrOrBytesPath],
|
|
||||||
*,
|
|
||||||
stdin: int | IO[Any] | None = PIPE,
|
|
||||||
stdout: int | IO[Any] | None = PIPE,
|
|
||||||
stderr: int | IO[Any] | None = PIPE,
|
|
||||||
cwd: StrOrBytesPath | None = None,
|
|
||||||
env: Mapping[str, str] | None = None,
|
|
||||||
startupinfo: Any = None,
|
|
||||||
creationflags: int = 0,
|
|
||||||
start_new_session: bool = False,
|
|
||||||
pass_fds: Sequence[int] = (),
|
|
||||||
user: str | int | None = None,
|
|
||||||
group: str | int | None = None,
|
|
||||||
extra_groups: Iterable[str | int] | None = None,
|
|
||||||
umask: int = -1,
|
|
||||||
) -> Process:
|
|
||||||
"""
|
|
||||||
Start an external command in a subprocess.
|
|
||||||
|
|
||||||
.. seealso:: :class:`subprocess.Popen`
|
|
||||||
|
|
||||||
:param command: either a string to pass to the shell, or an iterable of strings
|
|
||||||
containing the executable name or path and its arguments
|
|
||||||
:param stdin: one of :data:`subprocess.PIPE`, :data:`subprocess.DEVNULL`, a
|
|
||||||
file-like object, or ``None``
|
|
||||||
:param stdout: one of :data:`subprocess.PIPE`, :data:`subprocess.DEVNULL`,
|
|
||||||
a file-like object, or ``None``
|
|
||||||
:param stderr: one of :data:`subprocess.PIPE`, :data:`subprocess.DEVNULL`,
|
|
||||||
:data:`subprocess.STDOUT`, a file-like object, or ``None``
|
|
||||||
:param cwd: If not ``None``, the working directory is changed before executing
|
|
||||||
:param env: If env is not ``None``, it must be a mapping that defines the
|
|
||||||
environment variables for the new process
|
|
||||||
:param creationflags: flags that can be used to control the creation of the
|
|
||||||
subprocess (see :class:`subprocess.Popen` for the specifics)
|
|
||||||
:param startupinfo: an instance of :class:`subprocess.STARTUPINFO` that can be used
|
|
||||||
to specify process startup parameters (Windows only)
|
|
||||||
:param start_new_session: if ``true`` the setsid() system call will be made in the
|
|
||||||
child process prior to the execution of the subprocess. (POSIX only)
|
|
||||||
:param pass_fds: sequence of file descriptors to keep open between the parent and
|
|
||||||
child processes. (POSIX only)
|
|
||||||
:param user: effective user to run the process as (POSIX only)
|
|
||||||
:param group: effective group to run the process as (POSIX only)
|
|
||||||
:param extra_groups: supplementary groups to set in the subprocess (POSIX only)
|
|
||||||
:param umask: if not negative, this umask is applied in the child process before
|
|
||||||
running the given command (POSIX only)
|
|
||||||
:return: an asynchronous process object
|
|
||||||
|
|
||||||
"""
|
|
||||||
kwargs: dict[str, Any] = {}
|
|
||||||
if user is not None:
|
|
||||||
kwargs["user"] = user
|
|
||||||
|
|
||||||
if group is not None:
|
|
||||||
kwargs["group"] = group
|
|
||||||
|
|
||||||
if extra_groups is not None:
|
|
||||||
kwargs["extra_groups"] = extra_groups
|
|
||||||
|
|
||||||
if umask >= 0:
|
|
||||||
kwargs["umask"] = umask
|
|
||||||
|
|
||||||
return await get_async_backend().open_process(
|
|
||||||
command,
|
|
||||||
stdin=stdin,
|
|
||||||
stdout=stdout,
|
|
||||||
stderr=stderr,
|
|
||||||
cwd=cwd,
|
|
||||||
env=env,
|
|
||||||
startupinfo=startupinfo,
|
|
||||||
creationflags=creationflags,
|
|
||||||
start_new_session=start_new_session,
|
|
||||||
pass_fds=pass_fds,
|
|
||||||
**kwargs,
|
|
||||||
)
|
|
||||||
@@ -1,778 +0,0 @@
|
|||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
import math
|
|
||||||
import sys
|
|
||||||
from collections import deque
|
|
||||||
from collections.abc import Callable
|
|
||||||
from dataclasses import dataclass
|
|
||||||
from types import TracebackType
|
|
||||||
from typing import TypeVar
|
|
||||||
|
|
||||||
from ..lowlevel import checkpoint_if_cancelled
|
|
||||||
from ._eventloop import get_async_backend
|
|
||||||
from ._exceptions import BusyResourceError, NoEventLoopError
|
|
||||||
from ._tasks import CancelScope
|
|
||||||
from ._testing import TaskInfo, get_current_task
|
|
||||||
|
|
||||||
if sys.version_info >= (3, 11):
|
|
||||||
from typing import Self
|
|
||||||
else:
|
|
||||||
from typing_extensions import Self
|
|
||||||
|
|
||||||
T = TypeVar("T")
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
|
||||||
class EventStatistics:
|
|
||||||
"""
|
|
||||||
:ivar int tasks_waiting: number of tasks waiting on :meth:`~.Event.wait`
|
|
||||||
"""
|
|
||||||
|
|
||||||
tasks_waiting: int
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
|
||||||
class CapacityLimiterStatistics:
|
|
||||||
"""
|
|
||||||
:ivar int borrowed_tokens: number of tokens currently borrowed by tasks
|
|
||||||
:ivar float total_tokens: total number of available tokens
|
|
||||||
:ivar tuple borrowers: tasks or other objects currently holding tokens borrowed from
|
|
||||||
this limiter
|
|
||||||
:ivar int tasks_waiting: number of tasks waiting on
|
|
||||||
:meth:`~.CapacityLimiter.acquire` or
|
|
||||||
:meth:`~.CapacityLimiter.acquire_on_behalf_of`
|
|
||||||
"""
|
|
||||||
|
|
||||||
borrowed_tokens: int
|
|
||||||
total_tokens: float
|
|
||||||
borrowers: tuple[object, ...]
|
|
||||||
tasks_waiting: int
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
|
||||||
class LockStatistics:
|
|
||||||
"""
|
|
||||||
:ivar bool locked: flag indicating if this lock is locked or not
|
|
||||||
:ivar ~anyio.TaskInfo owner: task currently holding the lock (or ``None`` if the
|
|
||||||
lock is not held by any task)
|
|
||||||
:ivar int tasks_waiting: number of tasks waiting on :meth:`~.Lock.acquire`
|
|
||||||
"""
|
|
||||||
|
|
||||||
locked: bool
|
|
||||||
owner: TaskInfo | None
|
|
||||||
tasks_waiting: int
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
|
||||||
class ConditionStatistics:
|
|
||||||
"""
|
|
||||||
:ivar int tasks_waiting: number of tasks blocked on :meth:`~.Condition.wait`
|
|
||||||
:ivar ~anyio.LockStatistics lock_statistics: statistics of the underlying
|
|
||||||
:class:`~.Lock`
|
|
||||||
"""
|
|
||||||
|
|
||||||
tasks_waiting: int
|
|
||||||
lock_statistics: LockStatistics
|
|
||||||
|
|
||||||
|
|
||||||
@dataclass(frozen=True)
|
|
||||||
class SemaphoreStatistics:
|
|
||||||
"""
|
|
||||||
:ivar int tasks_waiting: number of tasks waiting on :meth:`~.Semaphore.acquire`
|
|
||||||
|
|
||||||
"""
|
|
||||||
|
|
||||||
tasks_waiting: int
|
|
||||||
|
|
||||||
|
|
||||||
class Event:
|
|
||||||
__slots__ = ("__weakref__",)
|
|
||||||
|
|
||||||
def __new__(cls) -> Event:
|
|
||||||
try:
|
|
||||||
return get_async_backend().create_event()
|
|
||||||
except NoEventLoopError:
|
|
||||||
return EventAdapter()
|
|
||||||
|
|
||||||
def set(self) -> None:
|
|
||||||
"""Set the flag, notifying all listeners."""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
def is_set(self) -> bool:
|
|
||||||
"""Return ``True`` if the flag is set, ``False`` if not."""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
async def wait(self) -> None:
|
|
||||||
"""
|
|
||||||
Wait until the flag has been set.
|
|
||||||
|
|
||||||
If the flag has already been set when this method is called, it returns
|
|
||||||
immediately.
|
|
||||||
|
|
||||||
"""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
def statistics(self) -> EventStatistics:
|
|
||||||
"""Return statistics about the current state of this event."""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
|
|
||||||
class EventAdapter(Event):
|
|
||||||
__slots__ = "_internal_event", "_is_set"
|
|
||||||
|
|
||||||
def __new__(cls) -> Self:
|
|
||||||
return object.__new__(cls)
|
|
||||||
|
|
||||||
def __init__(self) -> None:
|
|
||||||
self._internal_event: Event | None = None
|
|
||||||
self._is_set = False
|
|
||||||
|
|
||||||
@property
|
|
||||||
def _event(self) -> Event:
|
|
||||||
if self._internal_event is None:
|
|
||||||
self._internal_event = get_async_backend().create_event()
|
|
||||||
if self._is_set:
|
|
||||||
self._internal_event.set()
|
|
||||||
|
|
||||||
return self._internal_event
|
|
||||||
|
|
||||||
def set(self) -> None:
|
|
||||||
if self._internal_event is None:
|
|
||||||
self._is_set = True
|
|
||||||
else:
|
|
||||||
self._event.set()
|
|
||||||
|
|
||||||
def is_set(self) -> bool:
|
|
||||||
if self._internal_event is None:
|
|
||||||
return self._is_set
|
|
||||||
|
|
||||||
return self._internal_event.is_set()
|
|
||||||
|
|
||||||
async def wait(self) -> None:
|
|
||||||
await self._event.wait()
|
|
||||||
|
|
||||||
def statistics(self) -> EventStatistics:
|
|
||||||
if self._internal_event is None:
|
|
||||||
return EventStatistics(tasks_waiting=0)
|
|
||||||
|
|
||||||
return self._internal_event.statistics()
|
|
||||||
|
|
||||||
|
|
||||||
class Lock:
|
|
||||||
__slots__ = ("__weakref__",)
|
|
||||||
|
|
||||||
def __new__(cls, *, fast_acquire: bool = False) -> Lock:
|
|
||||||
try:
|
|
||||||
return get_async_backend().create_lock(fast_acquire=fast_acquire)
|
|
||||||
except NoEventLoopError:
|
|
||||||
return LockAdapter(fast_acquire=fast_acquire)
|
|
||||||
|
|
||||||
async def __aenter__(self) -> None:
|
|
||||||
await self.acquire()
|
|
||||||
|
|
||||||
async def __aexit__(
|
|
||||||
self,
|
|
||||||
exc_type: type[BaseException] | None,
|
|
||||||
exc_val: BaseException | None,
|
|
||||||
exc_tb: TracebackType | None,
|
|
||||||
) -> None:
|
|
||||||
self.release()
|
|
||||||
|
|
||||||
async def acquire(self) -> None:
|
|
||||||
"""Acquire the lock."""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
def acquire_nowait(self) -> None:
|
|
||||||
"""
|
|
||||||
Acquire the lock, without blocking.
|
|
||||||
|
|
||||||
:raises ~anyio.WouldBlock: if the operation would block
|
|
||||||
|
|
||||||
"""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
def release(self) -> None:
|
|
||||||
"""Release the lock."""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
def locked(self) -> bool:
|
|
||||||
"""Return True if the lock is currently held."""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
def statistics(self) -> LockStatistics:
|
|
||||||
"""
|
|
||||||
Return statistics about the current state of this lock.
|
|
||||||
|
|
||||||
.. versionadded:: 3.0
|
|
||||||
"""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
|
|
||||||
class LockAdapter(Lock):
|
|
||||||
__slots__ = "_fast_acquire", "_internal_lock"
|
|
||||||
|
|
||||||
def __new__(cls, *, fast_acquire: bool = False) -> Self:
|
|
||||||
return object.__new__(cls)
|
|
||||||
|
|
||||||
def __init__(self, *, fast_acquire: bool = False):
|
|
||||||
self._internal_lock: Lock | None = None
|
|
||||||
self._fast_acquire = fast_acquire
|
|
||||||
|
|
||||||
@property
|
|
||||||
def _lock(self) -> Lock:
|
|
||||||
if self._internal_lock is None:
|
|
||||||
self._internal_lock = get_async_backend().create_lock(
|
|
||||||
fast_acquire=self._fast_acquire
|
|
||||||
)
|
|
||||||
|
|
||||||
return self._internal_lock
|
|
||||||
|
|
||||||
async def __aenter__(self) -> None:
|
|
||||||
await self._lock.acquire()
|
|
||||||
|
|
||||||
async def __aexit__(
|
|
||||||
self,
|
|
||||||
exc_type: type[BaseException] | None,
|
|
||||||
exc_val: BaseException | None,
|
|
||||||
exc_tb: TracebackType | None,
|
|
||||||
) -> None:
|
|
||||||
if self._internal_lock is not None:
|
|
||||||
self._internal_lock.release()
|
|
||||||
|
|
||||||
async def acquire(self) -> None:
|
|
||||||
"""Acquire the lock."""
|
|
||||||
await self._lock.acquire()
|
|
||||||
|
|
||||||
def acquire_nowait(self) -> None:
|
|
||||||
"""
|
|
||||||
Acquire the lock, without blocking.
|
|
||||||
|
|
||||||
:raises ~anyio.WouldBlock: if the operation would block
|
|
||||||
|
|
||||||
"""
|
|
||||||
self._lock.acquire_nowait()
|
|
||||||
|
|
||||||
def release(self) -> None:
|
|
||||||
"""Release the lock."""
|
|
||||||
self._lock.release()
|
|
||||||
|
|
||||||
def locked(self) -> bool:
|
|
||||||
"""Return True if the lock is currently held."""
|
|
||||||
return self._lock.locked()
|
|
||||||
|
|
||||||
def statistics(self) -> LockStatistics:
|
|
||||||
"""
|
|
||||||
Return statistics about the current state of this lock.
|
|
||||||
|
|
||||||
.. versionadded:: 3.0
|
|
||||||
|
|
||||||
"""
|
|
||||||
if self._internal_lock is None:
|
|
||||||
return LockStatistics(False, None, 0)
|
|
||||||
|
|
||||||
return self._internal_lock.statistics()
|
|
||||||
|
|
||||||
|
|
||||||
class Condition:
|
|
||||||
__slots__ = "__weakref__", "_lock", "_owner_task", "_waiters"
|
|
||||||
|
|
||||||
def __init__(self, lock: Lock | None = None):
|
|
||||||
self._owner_task: TaskInfo | None = None
|
|
||||||
self._lock = lock or Lock()
|
|
||||||
self._waiters: deque[Event] = deque()
|
|
||||||
|
|
||||||
async def __aenter__(self) -> None:
|
|
||||||
await self.acquire()
|
|
||||||
|
|
||||||
async def __aexit__(
|
|
||||||
self,
|
|
||||||
exc_type: type[BaseException] | None,
|
|
||||||
exc_val: BaseException | None,
|
|
||||||
exc_tb: TracebackType | None,
|
|
||||||
) -> None:
|
|
||||||
self.release()
|
|
||||||
|
|
||||||
def _check_acquired(self) -> None:
|
|
||||||
if self._owner_task != get_current_task():
|
|
||||||
raise RuntimeError("The current task is not holding the underlying lock")
|
|
||||||
|
|
||||||
async def acquire(self) -> None:
|
|
||||||
"""Acquire the underlying lock."""
|
|
||||||
await self._lock.acquire()
|
|
||||||
self._owner_task = get_current_task()
|
|
||||||
|
|
||||||
def acquire_nowait(self) -> None:
|
|
||||||
"""
|
|
||||||
Acquire the underlying lock, without blocking.
|
|
||||||
|
|
||||||
:raises ~anyio.WouldBlock: if the operation would block
|
|
||||||
|
|
||||||
"""
|
|
||||||
self._lock.acquire_nowait()
|
|
||||||
self._owner_task = get_current_task()
|
|
||||||
|
|
||||||
def release(self) -> None:
|
|
||||||
"""Release the underlying lock."""
|
|
||||||
self._lock.release()
|
|
||||||
|
|
||||||
def locked(self) -> bool:
|
|
||||||
"""Return True if the lock is set."""
|
|
||||||
return self._lock.locked()
|
|
||||||
|
|
||||||
def notify(self, n: int = 1) -> None:
|
|
||||||
"""Notify exactly n listeners."""
|
|
||||||
self._check_acquired()
|
|
||||||
for _ in range(n):
|
|
||||||
try:
|
|
||||||
event = self._waiters.popleft()
|
|
||||||
except IndexError:
|
|
||||||
break
|
|
||||||
|
|
||||||
event.set()
|
|
||||||
|
|
||||||
def notify_all(self) -> None:
|
|
||||||
"""Notify all the listeners."""
|
|
||||||
self._check_acquired()
|
|
||||||
for event in self._waiters:
|
|
||||||
event.set()
|
|
||||||
|
|
||||||
self._waiters.clear()
|
|
||||||
|
|
||||||
async def wait(self) -> None:
|
|
||||||
"""Wait for a notification."""
|
|
||||||
await checkpoint_if_cancelled()
|
|
||||||
self._check_acquired()
|
|
||||||
event = Event()
|
|
||||||
self._waiters.append(event)
|
|
||||||
self.release()
|
|
||||||
try:
|
|
||||||
await event.wait()
|
|
||||||
except BaseException:
|
|
||||||
if not event.is_set():
|
|
||||||
self._waiters.remove(event)
|
|
||||||
elif self._waiters:
|
|
||||||
# This task was notified by could not act on it, so pass
|
|
||||||
# it on to the next task
|
|
||||||
self._waiters.popleft().set()
|
|
||||||
|
|
||||||
raise
|
|
||||||
finally:
|
|
||||||
with CancelScope(shield=True):
|
|
||||||
await self.acquire()
|
|
||||||
|
|
||||||
async def wait_for(self, predicate: Callable[[], T]) -> T:
|
|
||||||
"""
|
|
||||||
Wait until a predicate becomes true.
|
|
||||||
|
|
||||||
:param predicate: a callable that returns a truthy value when the condition is
|
|
||||||
met
|
|
||||||
:return: the result of the predicate
|
|
||||||
|
|
||||||
.. versionadded:: 4.11.0
|
|
||||||
|
|
||||||
"""
|
|
||||||
while not (result := predicate()):
|
|
||||||
await self.wait()
|
|
||||||
|
|
||||||
return result
|
|
||||||
|
|
||||||
def statistics(self) -> ConditionStatistics:
|
|
||||||
"""
|
|
||||||
Return statistics about the current state of this condition.
|
|
||||||
|
|
||||||
.. versionadded:: 3.0
|
|
||||||
"""
|
|
||||||
return ConditionStatistics(len(self._waiters), self._lock.statistics())
|
|
||||||
|
|
||||||
|
|
||||||
class Semaphore:
|
|
||||||
__slots__ = "__weakref__", "_fast_acquire"
|
|
||||||
|
|
||||||
def __new__(
|
|
||||||
cls,
|
|
||||||
initial_value: int,
|
|
||||||
*,
|
|
||||||
max_value: int | None = None,
|
|
||||||
fast_acquire: bool = False,
|
|
||||||
) -> Semaphore:
|
|
||||||
try:
|
|
||||||
return get_async_backend().create_semaphore(
|
|
||||||
initial_value, max_value=max_value, fast_acquire=fast_acquire
|
|
||||||
)
|
|
||||||
except NoEventLoopError:
|
|
||||||
return SemaphoreAdapter(initial_value, max_value=max_value)
|
|
||||||
|
|
||||||
def __init__(
|
|
||||||
self,
|
|
||||||
initial_value: int,
|
|
||||||
*,
|
|
||||||
max_value: int | None = None,
|
|
||||||
fast_acquire: bool = False,
|
|
||||||
):
|
|
||||||
if not isinstance(initial_value, int):
|
|
||||||
raise TypeError("initial_value must be an integer")
|
|
||||||
if initial_value < 0:
|
|
||||||
raise ValueError("initial_value must be >= 0")
|
|
||||||
if max_value is not None:
|
|
||||||
if not isinstance(max_value, int):
|
|
||||||
raise TypeError("max_value must be an integer or None")
|
|
||||||
if max_value < initial_value:
|
|
||||||
raise ValueError(
|
|
||||||
"max_value must be equal to or higher than initial_value"
|
|
||||||
)
|
|
||||||
|
|
||||||
self._fast_acquire = fast_acquire
|
|
||||||
|
|
||||||
async def __aenter__(self) -> Self:
|
|
||||||
await self.acquire()
|
|
||||||
return self
|
|
||||||
|
|
||||||
async def __aexit__(
|
|
||||||
self,
|
|
||||||
exc_type: type[BaseException] | None,
|
|
||||||
exc_val: BaseException | None,
|
|
||||||
exc_tb: TracebackType | None,
|
|
||||||
) -> None:
|
|
||||||
self.release()
|
|
||||||
|
|
||||||
async def acquire(self) -> None:
|
|
||||||
"""Decrement the semaphore value, blocking if necessary."""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
def acquire_nowait(self) -> None:
|
|
||||||
"""
|
|
||||||
Acquire the underlying lock, without blocking.
|
|
||||||
|
|
||||||
:raises ~anyio.WouldBlock: if the operation would block
|
|
||||||
|
|
||||||
"""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
def release(self) -> None:
|
|
||||||
"""Increment the semaphore value."""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
@property
|
|
||||||
def value(self) -> int:
|
|
||||||
"""The current value of the semaphore."""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
@property
|
|
||||||
def max_value(self) -> int | None:
|
|
||||||
"""The maximum value of the semaphore."""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
def statistics(self) -> SemaphoreStatistics:
|
|
||||||
"""
|
|
||||||
Return statistics about the current state of this semaphore.
|
|
||||||
|
|
||||||
.. versionadded:: 3.0
|
|
||||||
"""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
|
|
||||||
class SemaphoreAdapter(Semaphore):
|
|
||||||
__slots__ = "_initial_value", "_internal_semaphore", "_max_value"
|
|
||||||
|
|
||||||
def __new__(
|
|
||||||
cls,
|
|
||||||
initial_value: int,
|
|
||||||
*,
|
|
||||||
max_value: int | None = None,
|
|
||||||
fast_acquire: bool = False,
|
|
||||||
) -> Self:
|
|
||||||
return object.__new__(cls)
|
|
||||||
|
|
||||||
def __init__(
|
|
||||||
self,
|
|
||||||
initial_value: int,
|
|
||||||
*,
|
|
||||||
max_value: int | None = None,
|
|
||||||
fast_acquire: bool = False,
|
|
||||||
) -> None:
|
|
||||||
super().__init__(initial_value, max_value=max_value, fast_acquire=fast_acquire)
|
|
||||||
self._internal_semaphore: Semaphore | None = None
|
|
||||||
self._initial_value = initial_value
|
|
||||||
self._max_value = max_value
|
|
||||||
|
|
||||||
@property
|
|
||||||
def _semaphore(self) -> Semaphore:
|
|
||||||
if self._internal_semaphore is None:
|
|
||||||
self._internal_semaphore = get_async_backend().create_semaphore(
|
|
||||||
self._initial_value, max_value=self._max_value
|
|
||||||
)
|
|
||||||
|
|
||||||
return self._internal_semaphore
|
|
||||||
|
|
||||||
async def acquire(self) -> None:
|
|
||||||
await self._semaphore.acquire()
|
|
||||||
|
|
||||||
def acquire_nowait(self) -> None:
|
|
||||||
self._semaphore.acquire_nowait()
|
|
||||||
|
|
||||||
def release(self) -> None:
|
|
||||||
self._semaphore.release()
|
|
||||||
|
|
||||||
@property
|
|
||||||
def value(self) -> int:
|
|
||||||
if self._internal_semaphore is None:
|
|
||||||
return self._initial_value
|
|
||||||
|
|
||||||
return self._semaphore.value
|
|
||||||
|
|
||||||
@property
|
|
||||||
def max_value(self) -> int | None:
|
|
||||||
return self._max_value
|
|
||||||
|
|
||||||
def statistics(self) -> SemaphoreStatistics:
|
|
||||||
if self._internal_semaphore is None:
|
|
||||||
return SemaphoreStatistics(tasks_waiting=0)
|
|
||||||
|
|
||||||
return self._semaphore.statistics()
|
|
||||||
|
|
||||||
|
|
||||||
class CapacityLimiter:
|
|
||||||
__slots__ = ("__weakref__",)
|
|
||||||
|
|
||||||
def __new__(cls, total_tokens: float) -> CapacityLimiter:
|
|
||||||
try:
|
|
||||||
return get_async_backend().create_capacity_limiter(total_tokens)
|
|
||||||
except NoEventLoopError:
|
|
||||||
return CapacityLimiterAdapter(total_tokens)
|
|
||||||
|
|
||||||
async def __aenter__(self) -> None:
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
async def __aexit__(
|
|
||||||
self,
|
|
||||||
exc_type: type[BaseException] | None,
|
|
||||||
exc_val: BaseException | None,
|
|
||||||
exc_tb: TracebackType | None,
|
|
||||||
) -> None:
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
@property
|
|
||||||
def total_tokens(self) -> float:
|
|
||||||
"""
|
|
||||||
The total number of tokens available for borrowing.
|
|
||||||
|
|
||||||
This is a read-write property. If the total number of tokens is increased, the
|
|
||||||
proportionate number of tasks waiting on this limiter will be granted their
|
|
||||||
tokens.
|
|
||||||
|
|
||||||
.. versionchanged:: 3.0
|
|
||||||
The property is now writable.
|
|
||||||
.. versionchanged:: 4.12
|
|
||||||
The value can now be set to 0.
|
|
||||||
|
|
||||||
"""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
@total_tokens.setter
|
|
||||||
def total_tokens(self, value: float) -> None:
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
@property
|
|
||||||
def borrowed_tokens(self) -> int:
|
|
||||||
"""The number of tokens that have currently been borrowed."""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
@property
|
|
||||||
def available_tokens(self) -> float:
|
|
||||||
"""The number of tokens currently available to be borrowed"""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
def acquire_nowait(self) -> None:
|
|
||||||
"""
|
|
||||||
Acquire a token for the current task without waiting for one to become
|
|
||||||
available.
|
|
||||||
|
|
||||||
:raises ~anyio.WouldBlock: if there are no tokens available for borrowing
|
|
||||||
|
|
||||||
"""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
def acquire_on_behalf_of_nowait(self, borrower: object) -> None:
|
|
||||||
"""
|
|
||||||
Acquire a token without waiting for one to become available.
|
|
||||||
|
|
||||||
:param borrower: the entity borrowing a token
|
|
||||||
:raises ~anyio.WouldBlock: if there are no tokens available for borrowing
|
|
||||||
|
|
||||||
"""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
async def acquire(self) -> None:
|
|
||||||
"""
|
|
||||||
Acquire a token for the current task, waiting if necessary for one to become
|
|
||||||
available.
|
|
||||||
|
|
||||||
"""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
async def acquire_on_behalf_of(self, borrower: object) -> None:
|
|
||||||
"""
|
|
||||||
Acquire a token, waiting if necessary for one to become available.
|
|
||||||
|
|
||||||
:param borrower: the entity borrowing a token
|
|
||||||
|
|
||||||
"""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
def release(self) -> None:
|
|
||||||
"""
|
|
||||||
Release the token held by the current task.
|
|
||||||
|
|
||||||
:raises RuntimeError: if the current task has not borrowed a token from this
|
|
||||||
limiter.
|
|
||||||
|
|
||||||
"""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
def release_on_behalf_of(self, borrower: object) -> None:
|
|
||||||
"""
|
|
||||||
Release the token held by the given borrower.
|
|
||||||
|
|
||||||
:raises RuntimeError: if the borrower has not borrowed a token from this
|
|
||||||
limiter.
|
|
||||||
|
|
||||||
"""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
def statistics(self) -> CapacityLimiterStatistics:
|
|
||||||
"""
|
|
||||||
Return statistics about the current state of this limiter.
|
|
||||||
|
|
||||||
.. versionadded:: 3.0
|
|
||||||
|
|
||||||
"""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
|
|
||||||
class CapacityLimiterAdapter(CapacityLimiter):
|
|
||||||
__slots__ = "_internal_limiter", "_total_tokens"
|
|
||||||
|
|
||||||
def __new__(cls, total_tokens: float) -> Self:
|
|
||||||
return object.__new__(cls)
|
|
||||||
|
|
||||||
def __init__(self, total_tokens: float) -> None:
|
|
||||||
self._internal_limiter: CapacityLimiter | None = None
|
|
||||||
self.total_tokens = total_tokens
|
|
||||||
|
|
||||||
@property
|
|
||||||
def _limiter(self) -> CapacityLimiter:
|
|
||||||
if self._internal_limiter is None:
|
|
||||||
self._internal_limiter = get_async_backend().create_capacity_limiter(
|
|
||||||
self._total_tokens
|
|
||||||
)
|
|
||||||
|
|
||||||
return self._internal_limiter
|
|
||||||
|
|
||||||
async def __aenter__(self) -> None:
|
|
||||||
await self._limiter.__aenter__()
|
|
||||||
|
|
||||||
async def __aexit__(
|
|
||||||
self,
|
|
||||||
exc_type: type[BaseException] | None,
|
|
||||||
exc_val: BaseException | None,
|
|
||||||
exc_tb: TracebackType | None,
|
|
||||||
) -> None:
|
|
||||||
return await self._limiter.__aexit__(exc_type, exc_val, exc_tb)
|
|
||||||
|
|
||||||
@property
|
|
||||||
def total_tokens(self) -> float:
|
|
||||||
if self._internal_limiter is None:
|
|
||||||
return self._total_tokens
|
|
||||||
|
|
||||||
return self._internal_limiter.total_tokens
|
|
||||||
|
|
||||||
@total_tokens.setter
|
|
||||||
def total_tokens(self, value: float) -> None:
|
|
||||||
if not isinstance(value, int) and not math.isinf(value):
|
|
||||||
raise TypeError("total_tokens must be an int or math.inf")
|
|
||||||
elif value < 0:
|
|
||||||
raise ValueError("total_tokens must be >= 0")
|
|
||||||
|
|
||||||
if self._internal_limiter is None:
|
|
||||||
self._total_tokens = value
|
|
||||||
return
|
|
||||||
|
|
||||||
self._limiter.total_tokens = value
|
|
||||||
|
|
||||||
@property
|
|
||||||
def borrowed_tokens(self) -> int:
|
|
||||||
if self._internal_limiter is None:
|
|
||||||
return 0
|
|
||||||
|
|
||||||
return self._internal_limiter.borrowed_tokens
|
|
||||||
|
|
||||||
@property
|
|
||||||
def available_tokens(self) -> float:
|
|
||||||
if self._internal_limiter is None:
|
|
||||||
return self._total_tokens
|
|
||||||
|
|
||||||
return self._internal_limiter.available_tokens
|
|
||||||
|
|
||||||
def acquire_nowait(self) -> None:
|
|
||||||
self._limiter.acquire_nowait()
|
|
||||||
|
|
||||||
def acquire_on_behalf_of_nowait(self, borrower: object) -> None:
|
|
||||||
self._limiter.acquire_on_behalf_of_nowait(borrower)
|
|
||||||
|
|
||||||
async def acquire(self) -> None:
|
|
||||||
await self._limiter.acquire()
|
|
||||||
|
|
||||||
async def acquire_on_behalf_of(self, borrower: object) -> None:
|
|
||||||
await self._limiter.acquire_on_behalf_of(borrower)
|
|
||||||
|
|
||||||
def release(self) -> None:
|
|
||||||
self._limiter.release()
|
|
||||||
|
|
||||||
def release_on_behalf_of(self, borrower: object) -> None:
|
|
||||||
self._limiter.release_on_behalf_of(borrower)
|
|
||||||
|
|
||||||
def statistics(self) -> CapacityLimiterStatistics:
|
|
||||||
if self._internal_limiter is None:
|
|
||||||
return CapacityLimiterStatistics(
|
|
||||||
borrowed_tokens=0,
|
|
||||||
total_tokens=self.total_tokens,
|
|
||||||
borrowers=(),
|
|
||||||
tasks_waiting=0,
|
|
||||||
)
|
|
||||||
|
|
||||||
return self._internal_limiter.statistics()
|
|
||||||
|
|
||||||
|
|
||||||
class ResourceGuard:
|
|
||||||
"""
|
|
||||||
A context manager for ensuring that a resource is only used by a single task at a
|
|
||||||
time.
|
|
||||||
|
|
||||||
Entering this context manager while the previous has not exited it yet will trigger
|
|
||||||
:exc:`BusyResourceError`.
|
|
||||||
|
|
||||||
:param action: the action to guard against (visible in the :exc:`BusyResourceError`
|
|
||||||
when triggered, e.g. "Another task is already {action} this resource")
|
|
||||||
|
|
||||||
.. versionadded:: 4.1
|
|
||||||
"""
|
|
||||||
|
|
||||||
__slots__ = "__weakref__", "_guarded", "action"
|
|
||||||
|
|
||||||
def __init__(self, action: str = "using"):
|
|
||||||
self.action: str = action
|
|
||||||
self._guarded = False
|
|
||||||
|
|
||||||
def __enter__(self) -> None:
|
|
||||||
if self._guarded:
|
|
||||||
raise BusyResourceError(self.action)
|
|
||||||
|
|
||||||
self._guarded = True
|
|
||||||
|
|
||||||
def __exit__(
|
|
||||||
self,
|
|
||||||
exc_type: type[BaseException] | None,
|
|
||||||
exc_val: BaseException | None,
|
|
||||||
exc_tb: TracebackType | None,
|
|
||||||
) -> None:
|
|
||||||
self._guarded = False
|
|
||||||
@@ -1,464 +0,0 @@
|
|||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
import math
|
|
||||||
import sys
|
|
||||||
from collections.abc import (
|
|
||||||
Coroutine,
|
|
||||||
Generator,
|
|
||||||
)
|
|
||||||
from contextlib import contextmanager
|
|
||||||
from enum import Enum, auto
|
|
||||||
from inspect import iscoroutine
|
|
||||||
from types import TracebackType
|
|
||||||
from typing import Any, Generic, final
|
|
||||||
|
|
||||||
from ..abc import TaskGroup, TaskStatus
|
|
||||||
from ._eventloop import get_async_backend, get_cancelled_exc_class
|
|
||||||
from ._exceptions import TaskCancelled, TaskFailed, TaskNotFinished
|
|
||||||
|
|
||||||
if sys.version_info >= (3, 13):
|
|
||||||
from typing import TypeVar
|
|
||||||
else:
|
|
||||||
from typing_extensions import TypeVar
|
|
||||||
|
|
||||||
if sys.version_info >= (3, 11):
|
|
||||||
from typing import Never, Self, TypeVarTuple
|
|
||||||
else:
|
|
||||||
from typing_extensions import Never, Self, TypeVarTuple
|
|
||||||
|
|
||||||
T = TypeVar("T")
|
|
||||||
T_co = TypeVar("T_co", covariant=True)
|
|
||||||
T_startval_co = TypeVar("T_startval_co", covariant=True, default=Never)
|
|
||||||
PosArgsT = TypeVarTuple("PosArgsT")
|
|
||||||
|
|
||||||
|
|
||||||
class _IgnoredTaskStatus(TaskStatus[object]):
|
|
||||||
def started(self, value: object = None) -> None:
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
TASK_STATUS_IGNORED = _IgnoredTaskStatus()
|
|
||||||
|
|
||||||
|
|
||||||
class CancelScope:
|
|
||||||
"""
|
|
||||||
Wraps a unit of work that can be made separately cancellable.
|
|
||||||
|
|
||||||
:param deadline: The time (clock value) when this scope is cancelled automatically
|
|
||||||
:param shield: ``True`` to shield the cancel scope from external cancellation
|
|
||||||
:raises NoEventLoopError: if no supported asynchronous event loop is running in the
|
|
||||||
current thread
|
|
||||||
"""
|
|
||||||
|
|
||||||
__slots__ = ("__weakref__",)
|
|
||||||
|
|
||||||
def __new__(
|
|
||||||
cls, *, deadline: float = math.inf, shield: bool = False
|
|
||||||
) -> CancelScope:
|
|
||||||
return get_async_backend().create_cancel_scope(shield=shield, deadline=deadline)
|
|
||||||
|
|
||||||
def cancel(self, reason: str | None = None) -> None:
|
|
||||||
"""
|
|
||||||
Cancel this scope immediately.
|
|
||||||
|
|
||||||
:param reason: a message describing the reason for the cancellation
|
|
||||||
|
|
||||||
"""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
@property
|
|
||||||
def deadline(self) -> float:
|
|
||||||
"""
|
|
||||||
The time (clock value) when this scope is cancelled automatically.
|
|
||||||
|
|
||||||
Will be ``float('inf')`` if no timeout has been set.
|
|
||||||
|
|
||||||
"""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
@deadline.setter
|
|
||||||
def deadline(self, value: float) -> None:
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
@property
|
|
||||||
def cancel_called(self) -> bool:
|
|
||||||
"""``True`` if :meth:`cancel` has been called."""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
@property
|
|
||||||
def cancelled_caught(self) -> bool:
|
|
||||||
"""
|
|
||||||
``True`` if this scope suppressed a cancellation exception it itself raised.
|
|
||||||
|
|
||||||
This is typically used to check if any work was interrupted, or to see if the
|
|
||||||
scope was cancelled due to its deadline being reached. The value will, however,
|
|
||||||
only be ``True`` if the cancellation was triggered by the scope itself (and not
|
|
||||||
an outer scope).
|
|
||||||
|
|
||||||
"""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
@property
|
|
||||||
def shield(self) -> bool:
|
|
||||||
"""
|
|
||||||
``True`` if this scope is shielded from external cancellation.
|
|
||||||
|
|
||||||
While a scope is shielded, it will not receive cancellations from outside.
|
|
||||||
|
|
||||||
"""
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
@shield.setter
|
|
||||||
def shield(self, value: bool) -> None:
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
def __enter__(self) -> Self:
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
def __exit__(
|
|
||||||
self,
|
|
||||||
exc_type: type[BaseException] | None,
|
|
||||||
exc_val: BaseException | None,
|
|
||||||
exc_tb: TracebackType | None,
|
|
||||||
) -> bool:
|
|
||||||
raise NotImplementedError
|
|
||||||
|
|
||||||
|
|
||||||
@contextmanager
|
|
||||||
def fail_at(
|
|
||||||
deadline: float | None, shield: bool = False, reason: str | None = None
|
|
||||||
) -> Generator[CancelScope, None, None]:
|
|
||||||
"""
|
|
||||||
Create a context manager which raises a :class:`TimeoutError` if the code in the
|
|
||||||
enclosing context does not finish by the given deadline.
|
|
||||||
|
|
||||||
:param deadline: the deadline before raising the exception, or
|
|
||||||
``None`` to disable the timeout
|
|
||||||
:param shield: ``True`` to shield the cancel scope from external cancellation
|
|
||||||
:param reason: explanation for timeout to add to the message of a raised `TimeoutError`
|
|
||||||
:return: a context manager that yields a cancel scope
|
|
||||||
:rtype: :class:`~typing.ContextManager`\\[:class:`~anyio.CancelScope`\\]
|
|
||||||
:raises NoEventLoopError: if no supported asynchronous event loop is running in the
|
|
||||||
current thread
|
|
||||||
|
|
||||||
.. versionadded:: 4.15.0
|
|
||||||
|
|
||||||
"""
|
|
||||||
current_time = get_async_backend().current_time
|
|
||||||
effective_deadline = math.inf if deadline is None else deadline
|
|
||||||
with get_async_backend().create_cancel_scope(
|
|
||||||
deadline=effective_deadline, shield=shield
|
|
||||||
) as cancel_scope:
|
|
||||||
yield cancel_scope
|
|
||||||
|
|
||||||
if cancel_scope.cancelled_caught and current_time() >= cancel_scope.deadline:
|
|
||||||
raise TimeoutError(reason) if reason else TimeoutError
|
|
||||||
|
|
||||||
|
|
||||||
@contextmanager
|
|
||||||
def fail_after(
|
|
||||||
delay: float | None, shield: bool = False, reason: str | None = None
|
|
||||||
) -> Generator[CancelScope, None, None]:
|
|
||||||
"""
|
|
||||||
Create a context manager which raises a :class:`TimeoutError` if the code in the
|
|
||||||
enclosing context block does not finish in time.
|
|
||||||
|
|
||||||
:param delay: maximum allowed time (in seconds) before raising the exception, or
|
|
||||||
``None`` to disable the timeout
|
|
||||||
:param shield: ``True`` to shield the cancel scope from external cancellation
|
|
||||||
:param reason: explanation for timeout to add to the message of a raised `TimeoutError`
|
|
||||||
:return: a context manager that yields a cancel scope
|
|
||||||
:rtype: :class:`~typing.ContextManager`\\[:class:`~anyio.CancelScope`\\]
|
|
||||||
:raises NoEventLoopError: if no supported asynchronous event loop is running in the
|
|
||||||
current thread
|
|
||||||
|
|
||||||
"""
|
|
||||||
current_time = get_async_backend().current_time
|
|
||||||
deadline = (current_time() + delay) if delay is not None else math.inf
|
|
||||||
with fail_at(deadline, shield=shield, reason=reason) as scope:
|
|
||||||
yield scope
|
|
||||||
|
|
||||||
|
|
||||||
def move_on_at(deadline: float | None, shield: bool = False) -> CancelScope:
|
|
||||||
"""
|
|
||||||
Create a cancel scope with a deadline that expires after the given delay.
|
|
||||||
|
|
||||||
:param deadline: the deadline before exiting the context block, or
|
|
||||||
``None`` to disable the timeout
|
|
||||||
:param shield: ``True`` to shield the cancel scope from external cancellation
|
|
||||||
:return: a cancel scope
|
|
||||||
:raises NoEventLoopError: if no supported asynchronous event loop is running in the
|
|
||||||
current thread
|
|
||||||
|
|
||||||
.. versionadded:: 4.15.0
|
|
||||||
|
|
||||||
"""
|
|
||||||
return get_async_backend().create_cancel_scope(
|
|
||||||
deadline=deadline if deadline is not None else math.inf, shield=shield
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def move_on_after(delay: float | None, shield: bool = False) -> CancelScope:
|
|
||||||
"""
|
|
||||||
Create a cancel scope with a deadline that expires after the given delay.
|
|
||||||
|
|
||||||
:param delay: maximum allowed time (in seconds) before exiting the context block, or
|
|
||||||
``None`` to disable the timeout
|
|
||||||
:param shield: ``True`` to shield the cancel scope from external cancellation
|
|
||||||
:return: a cancel scope
|
|
||||||
:raises NoEventLoopError: if no supported asynchronous event loop is running in the
|
|
||||||
current thread
|
|
||||||
|
|
||||||
.. note:: Unlike with :func:`fail_after`, the timer starts when this function is
|
|
||||||
called, not when the context manager is entered. This will be changed in v5.0.
|
|
||||||
|
|
||||||
"""
|
|
||||||
deadline = (
|
|
||||||
(get_async_backend().current_time() + delay) if delay is not None else math.inf
|
|
||||||
)
|
|
||||||
return get_async_backend().create_cancel_scope(deadline=deadline, shield=shield)
|
|
||||||
|
|
||||||
|
|
||||||
def current_effective_deadline() -> float:
|
|
||||||
"""
|
|
||||||
Return the nearest deadline among all the cancel scopes effective for the current
|
|
||||||
task.
|
|
||||||
|
|
||||||
:return: a clock value from the event loop's internal clock (or ``float('inf')`` if
|
|
||||||
there is no deadline in effect, or ``float('-inf')`` if the current scope has
|
|
||||||
been cancelled)
|
|
||||||
:rtype: float
|
|
||||||
:raises NoEventLoopError: if no supported asynchronous event loop is running in the
|
|
||||||
current thread
|
|
||||||
|
|
||||||
"""
|
|
||||||
return get_async_backend().current_effective_deadline()
|
|
||||||
|
|
||||||
|
|
||||||
def create_task_group() -> TaskGroup:
|
|
||||||
"""
|
|
||||||
Create a task group.
|
|
||||||
|
|
||||||
:return: a task group
|
|
||||||
:raises NoEventLoopError: if no supported asynchronous event loop is running in the
|
|
||||||
current thread
|
|
||||||
|
|
||||||
"""
|
|
||||||
return get_async_backend().create_task_group()
|
|
||||||
|
|
||||||
|
|
||||||
@final
|
|
||||||
class TaskHandle(Generic[T_co, T_startval_co]):
|
|
||||||
"""
|
|
||||||
Returned from the task-spawning methods of :class:`TaskGroup`. Can be awaited on to
|
|
||||||
get the return value of the task (or the raised exception). If the task was
|
|
||||||
terminated by a :exc:`BaseException`, :exc:`TaskFailed` will be raised (or its
|
|
||||||
subclass :exc:`TaskCancelled` if the task was cancelled).
|
|
||||||
|
|
||||||
.. versionadded:: 4.14.0
|
|
||||||
"""
|
|
||||||
|
|
||||||
class Status(Enum):
|
|
||||||
"""
|
|
||||||
The status of a task handle.
|
|
||||||
|
|
||||||
.. attribute:: PENDING
|
|
||||||
|
|
||||||
The task has not finished yet.
|
|
||||||
.. attribute:: FINISHED
|
|
||||||
|
|
||||||
The task has finished with a return value.
|
|
||||||
.. attribute:: CANCELLING
|
|
||||||
|
|
||||||
The task has been cancelled but has not finished yet.
|
|
||||||
.. attribute:: CANCELLED
|
|
||||||
|
|
||||||
The task was cancelled and has finished since.
|
|
||||||
.. attribute:: FAILED
|
|
||||||
|
|
||||||
The task raised an exception.
|
|
||||||
"""
|
|
||||||
|
|
||||||
PENDING = auto()
|
|
||||||
FINISHED = auto()
|
|
||||||
CANCELLING = auto()
|
|
||||||
CANCELLED = auto()
|
|
||||||
FAILED = auto()
|
|
||||||
|
|
||||||
__slots__ = (
|
|
||||||
"__weakref__",
|
|
||||||
"_cancel_scope",
|
|
||||||
"_coro",
|
|
||||||
"_exception",
|
|
||||||
"_finished_event",
|
|
||||||
"_name",
|
|
||||||
"_return_value",
|
|
||||||
"_start_value",
|
|
||||||
)
|
|
||||||
|
|
||||||
_return_value: T_co
|
|
||||||
_start_value: T_startval_co
|
|
||||||
|
|
||||||
def __init__(
|
|
||||||
self,
|
|
||||||
coro: Coroutine[Any, Any, T_co],
|
|
||||||
name: object,
|
|
||||||
cancel_scope: CancelScope | None = None,
|
|
||||||
) -> None:
|
|
||||||
from ._synchronization import Event
|
|
||||||
|
|
||||||
self._coro = coro
|
|
||||||
self._cancel_scope = cancel_scope if cancel_scope is not None else CancelScope()
|
|
||||||
self._finished_event = Event()
|
|
||||||
self._exception: BaseException | None = None
|
|
||||||
|
|
||||||
if name is not None:
|
|
||||||
self._name = str(name)
|
|
||||||
elif iscoroutine(coro):
|
|
||||||
self._name = coro.__qualname__
|
|
||||||
else:
|
|
||||||
self._name = str(coro) # coroutine-like object (e.g. asend() objects)
|
|
||||||
|
|
||||||
async def _run_coro(self) -> None:
|
|
||||||
__tracebackhide__ = True
|
|
||||||
|
|
||||||
with self._cancel_scope:
|
|
||||||
try:
|
|
||||||
retval = await self._coro
|
|
||||||
except BaseException as exc:
|
|
||||||
self._exception = exc
|
|
||||||
raise
|
|
||||||
else:
|
|
||||||
self._return_value = retval
|
|
||||||
finally:
|
|
||||||
self._finished_event.set()
|
|
||||||
del self # Break the reference cycle
|
|
||||||
|
|
||||||
def cancel(self) -> None:
|
|
||||||
"""
|
|
||||||
Set the task to a cancelled state.
|
|
||||||
|
|
||||||
This will interrupt any interruptible asynchronous operation, and will cause
|
|
||||||
any further awaits on this task to get immediately cancelled, unless done in
|
|
||||||
a shielded cancel scope.
|
|
||||||
|
|
||||||
If the task has already finished, this method has no effect.
|
|
||||||
"""
|
|
||||||
if not self._finished_event.is_set():
|
|
||||||
self._cancel_scope.cancel()
|
|
||||||
|
|
||||||
@property
|
|
||||||
def coro(self) -> Coroutine[Any, Any, T_co]:
|
|
||||||
"""
|
|
||||||
The coroutine object that was passed to one of the task-spawning methods in
|
|
||||||
:class:`TaskGroup`.
|
|
||||||
"""
|
|
||||||
return self._coro
|
|
||||||
|
|
||||||
@property
|
|
||||||
def status(self) -> TaskHandle.Status:
|
|
||||||
"""
|
|
||||||
The current status of the task.
|
|
||||||
|
|
||||||
Every task starts in the :attr:`~TaskHandle.Status.PENDING` state.
|
|
||||||
If a task is cancelled while in this state, it will transition to the
|
|
||||||
:attr:`~TaskHandle.Status.CANCELLING` state. When the task finishes, it will
|
|
||||||
transition to one of the three final states (
|
|
||||||
:attr:`~TaskHandle.Status.FINISHED`, :attr:`~TaskHandle.Status.FAILED`, or
|
|
||||||
:attr:`~TaskHandle.Status.CANCELLING`) depending on the exception the task
|
|
||||||
raised, if any. No other status transitions will happen.
|
|
||||||
"""
|
|
||||||
if not self._finished_event.is_set():
|
|
||||||
if self._cancel_scope.cancel_called:
|
|
||||||
return TaskHandle.Status.CANCELLING
|
|
||||||
else:
|
|
||||||
return TaskHandle.Status.PENDING
|
|
||||||
elif self._exception is not None:
|
|
||||||
if isinstance(self._exception, get_cancelled_exc_class()):
|
|
||||||
return TaskHandle.Status.CANCELLED
|
|
||||||
else:
|
|
||||||
return TaskHandle.Status.FAILED
|
|
||||||
else:
|
|
||||||
return TaskHandle.Status.FINISHED
|
|
||||||
|
|
||||||
@property
|
|
||||||
def name(self) -> str:
|
|
||||||
"""The name of the task."""
|
|
||||||
return self._name
|
|
||||||
|
|
||||||
@property
|
|
||||||
def exception(self) -> BaseException | None:
|
|
||||||
"""
|
|
||||||
The exception raised by the task, or ``None`` if it finished without raising.
|
|
||||||
|
|
||||||
:raises TaskNotFinished: if the task has not finished yet
|
|
||||||
:raises TaskCancelled: if the task was cancelled
|
|
||||||
|
|
||||||
"""
|
|
||||||
match self.status:
|
|
||||||
case TaskHandle.Status.PENDING:
|
|
||||||
raise TaskNotFinished("the task has not finished yet")
|
|
||||||
case TaskHandle.Status.FINISHED:
|
|
||||||
return None
|
|
||||||
case TaskHandle.Status.CANCELLING:
|
|
||||||
raise TaskCancelled("the task was cancelled")
|
|
||||||
case TaskHandle.Status.CANCELLED:
|
|
||||||
raise TaskCancelled("the task was cancelled") from self._exception
|
|
||||||
case TaskHandle.Status.FAILED:
|
|
||||||
return self._exception
|
|
||||||
|
|
||||||
@property
|
|
||||||
def return_value(self) -> T_co:
|
|
||||||
"""
|
|
||||||
The return value of the task.
|
|
||||||
|
|
||||||
:raises TaskNotFinished: if the task has not finished yet
|
|
||||||
:raises TaskCancelled: if the task was cancelled
|
|
||||||
:raises TaskFailed: if the task raised an exception
|
|
||||||
|
|
||||||
"""
|
|
||||||
match self.status:
|
|
||||||
case TaskHandle.Status.PENDING:
|
|
||||||
raise TaskNotFinished("the task has not finished yet")
|
|
||||||
case TaskHandle.Status.FINISHED:
|
|
||||||
return self._return_value
|
|
||||||
case TaskHandle.Status.CANCELLING:
|
|
||||||
raise TaskCancelled("the task was cancelled")
|
|
||||||
case TaskHandle.Status.CANCELLED:
|
|
||||||
raise TaskCancelled("the task was cancelled") from self._exception
|
|
||||||
case TaskHandle.Status.FAILED:
|
|
||||||
raise TaskFailed("the task raised an exception") from self._exception
|
|
||||||
|
|
||||||
@property
|
|
||||||
def start_value(self) -> T_startval_co:
|
|
||||||
"""
|
|
||||||
The value passed to :meth:`task_status.started() <.abc.TaskStatus.started>`,
|
|
||||||
|
|
||||||
:raises RuntimeError: if the task was not started with :meth:`TaskGroup.start()
|
|
||||||
<.abc.TaskGroup.start>`
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
return self._start_value
|
|
||||||
except AttributeError:
|
|
||||||
raise RuntimeError(
|
|
||||||
"the task was not started with TaskGroup.start()"
|
|
||||||
) from None
|
|
||||||
|
|
||||||
async def wait(self) -> None:
|
|
||||||
"""
|
|
||||||
Wait for the task to finish.
|
|
||||||
|
|
||||||
This method will return as soon as the task has finished, no matter how it
|
|
||||||
happened.
|
|
||||||
"""
|
|
||||||
await self._finished_event.wait()
|
|
||||||
|
|
||||||
def __await__(self) -> Generator[Any, Any, T_co]:
|
|
||||||
yield from self._finished_event.wait().__await__()
|
|
||||||
return self.return_value
|
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
|
||||||
return (
|
|
||||||
f"<{self.__class__.__name__} {self.status.name.lower()} "
|
|
||||||
f"name={self._name!r} coro={self._coro!r}>"
|
|
||||||
)
|
|
||||||
@@ -1,615 +0,0 @@
|
|||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
import os
|
|
||||||
import sys
|
|
||||||
import tempfile
|
|
||||||
from collections.abc import Iterable
|
|
||||||
from io import BytesIO, TextIOWrapper
|
|
||||||
from types import TracebackType
|
|
||||||
from typing import (
|
|
||||||
TYPE_CHECKING,
|
|
||||||
Any,
|
|
||||||
AnyStr,
|
|
||||||
Generic,
|
|
||||||
overload,
|
|
||||||
)
|
|
||||||
|
|
||||||
from .. import to_thread
|
|
||||||
from .._core._fileio import AsyncFile
|
|
||||||
from ..lowlevel import checkpoint_if_cancelled
|
|
||||||
from ._tasks import CancelScope
|
|
||||||
|
|
||||||
if TYPE_CHECKING:
|
|
||||||
from _typeshed import OpenBinaryMode, OpenTextMode, ReadableBuffer, WriteableBuffer
|
|
||||||
|
|
||||||
|
|
||||||
class TemporaryFile(Generic[AnyStr]):
|
|
||||||
"""
|
|
||||||
An asynchronous temporary file that is automatically created and cleaned up.
|
|
||||||
|
|
||||||
This class provides an asynchronous context manager interface to a temporary file.
|
|
||||||
The file is created using Python's standard `tempfile.TemporaryFile` function in a
|
|
||||||
background thread, and is wrapped as an asynchronous file using `AsyncFile`.
|
|
||||||
|
|
||||||
:param mode: The mode in which the file is opened. Defaults to "w+b".
|
|
||||||
:param buffering: The buffering policy (-1 means the default buffering).
|
|
||||||
:param encoding: The encoding used to decode or encode the file. Only applicable in
|
|
||||||
text mode.
|
|
||||||
:param newline: Controls how universal newlines mode works (only applicable in text
|
|
||||||
mode).
|
|
||||||
:param suffix: The suffix for the temporary file name.
|
|
||||||
:param prefix: The prefix for the temporary file name.
|
|
||||||
:param dir: The directory in which the temporary file is created.
|
|
||||||
:param errors: The error handling scheme used for encoding/decoding errors.
|
|
||||||
"""
|
|
||||||
|
|
||||||
_async_file: AsyncFile[AnyStr]
|
|
||||||
|
|
||||||
@overload
|
|
||||||
def __init__(
|
|
||||||
self: TemporaryFile[bytes],
|
|
||||||
mode: OpenBinaryMode = ...,
|
|
||||||
buffering: int = ...,
|
|
||||||
encoding: str | None = ...,
|
|
||||||
newline: str | None = ...,
|
|
||||||
suffix: str | None = ...,
|
|
||||||
prefix: str | None = ...,
|
|
||||||
dir: str | None = ...,
|
|
||||||
*,
|
|
||||||
errors: str | None = ...,
|
|
||||||
): ...
|
|
||||||
@overload
|
|
||||||
def __init__(
|
|
||||||
self: TemporaryFile[str],
|
|
||||||
mode: OpenTextMode,
|
|
||||||
buffering: int = ...,
|
|
||||||
encoding: str | None = ...,
|
|
||||||
newline: str | None = ...,
|
|
||||||
suffix: str | None = ...,
|
|
||||||
prefix: str | None = ...,
|
|
||||||
dir: str | None = ...,
|
|
||||||
*,
|
|
||||||
errors: str | None = ...,
|
|
||||||
): ...
|
|
||||||
|
|
||||||
def __init__(
|
|
||||||
self,
|
|
||||||
mode: OpenTextMode | OpenBinaryMode = "w+b",
|
|
||||||
buffering: int = -1,
|
|
||||||
encoding: str | None = None,
|
|
||||||
newline: str | None = None,
|
|
||||||
suffix: str | None = None,
|
|
||||||
prefix: str | None = None,
|
|
||||||
dir: str | None = None,
|
|
||||||
*,
|
|
||||||
errors: str | None = None,
|
|
||||||
) -> None:
|
|
||||||
self.mode = mode
|
|
||||||
self.buffering = buffering
|
|
||||||
self.encoding = encoding
|
|
||||||
self.newline = newline
|
|
||||||
self.suffix: str | None = suffix
|
|
||||||
self.prefix: str | None = prefix
|
|
||||||
self.dir: str | None = dir
|
|
||||||
self.errors = errors
|
|
||||||
|
|
||||||
async def __aenter__(self) -> AsyncFile[AnyStr]:
|
|
||||||
fp = await to_thread.run_sync(
|
|
||||||
lambda: tempfile.TemporaryFile(
|
|
||||||
self.mode,
|
|
||||||
self.buffering,
|
|
||||||
self.encoding,
|
|
||||||
self.newline,
|
|
||||||
self.suffix,
|
|
||||||
self.prefix,
|
|
||||||
self.dir,
|
|
||||||
errors=self.errors,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
self._async_file = AsyncFile(fp)
|
|
||||||
return self._async_file
|
|
||||||
|
|
||||||
async def __aexit__(
|
|
||||||
self,
|
|
||||||
exc_type: type[BaseException] | None,
|
|
||||||
exc_value: BaseException | None,
|
|
||||||
traceback: TracebackType | None,
|
|
||||||
) -> None:
|
|
||||||
await self._async_file.aclose()
|
|
||||||
|
|
||||||
|
|
||||||
class NamedTemporaryFile(Generic[AnyStr]):
|
|
||||||
"""
|
|
||||||
An asynchronous named temporary file that is automatically created and cleaned up.
|
|
||||||
|
|
||||||
This class provides an asynchronous context manager for a temporary file with a
|
|
||||||
visible name in the file system. It uses Python's standard
|
|
||||||
:func:`~tempfile.NamedTemporaryFile` function and wraps the file object with
|
|
||||||
:class:`AsyncFile` for asynchronous operations.
|
|
||||||
|
|
||||||
:param mode: The mode in which the file is opened. Defaults to "w+b".
|
|
||||||
:param buffering: The buffering policy (-1 means the default buffering).
|
|
||||||
:param encoding: The encoding used to decode or encode the file. Only applicable in
|
|
||||||
text mode.
|
|
||||||
:param newline: Controls how universal newlines mode works (only applicable in text
|
|
||||||
mode).
|
|
||||||
:param suffix: The suffix for the temporary file name.
|
|
||||||
:param prefix: The prefix for the temporary file name.
|
|
||||||
:param dir: The directory in which the temporary file is created.
|
|
||||||
:param delete: Whether to delete the file when it is closed.
|
|
||||||
:param errors: The error handling scheme used for encoding/decoding errors.
|
|
||||||
:param delete_on_close: (Python 3.12+) Whether to delete the file on close.
|
|
||||||
"""
|
|
||||||
|
|
||||||
_async_file: AsyncFile[AnyStr]
|
|
||||||
|
|
||||||
@overload
|
|
||||||
def __init__(
|
|
||||||
self: NamedTemporaryFile[bytes],
|
|
||||||
mode: OpenBinaryMode = ...,
|
|
||||||
buffering: int = ...,
|
|
||||||
encoding: str | None = ...,
|
|
||||||
newline: str | None = ...,
|
|
||||||
suffix: str | None = ...,
|
|
||||||
prefix: str | None = ...,
|
|
||||||
dir: str | None = ...,
|
|
||||||
delete: bool = ...,
|
|
||||||
*,
|
|
||||||
errors: str | None = ...,
|
|
||||||
delete_on_close: bool = ...,
|
|
||||||
): ...
|
|
||||||
@overload
|
|
||||||
def __init__(
|
|
||||||
self: NamedTemporaryFile[str],
|
|
||||||
mode: OpenTextMode,
|
|
||||||
buffering: int = ...,
|
|
||||||
encoding: str | None = ...,
|
|
||||||
newline: str | None = ...,
|
|
||||||
suffix: str | None = ...,
|
|
||||||
prefix: str | None = ...,
|
|
||||||
dir: str | None = ...,
|
|
||||||
delete: bool = ...,
|
|
||||||
*,
|
|
||||||
errors: str | None = ...,
|
|
||||||
delete_on_close: bool = ...,
|
|
||||||
): ...
|
|
||||||
|
|
||||||
def __init__(
|
|
||||||
self,
|
|
||||||
mode: OpenBinaryMode | OpenTextMode = "w+b",
|
|
||||||
buffering: int = -1,
|
|
||||||
encoding: str | None = None,
|
|
||||||
newline: str | None = None,
|
|
||||||
suffix: str | None = None,
|
|
||||||
prefix: str | None = None,
|
|
||||||
dir: str | None = None,
|
|
||||||
delete: bool = True,
|
|
||||||
*,
|
|
||||||
errors: str | None = None,
|
|
||||||
delete_on_close: bool = True,
|
|
||||||
) -> None:
|
|
||||||
self._params: dict[str, Any] = {
|
|
||||||
"mode": mode,
|
|
||||||
"buffering": buffering,
|
|
||||||
"encoding": encoding,
|
|
||||||
"newline": newline,
|
|
||||||
"suffix": suffix,
|
|
||||||
"prefix": prefix,
|
|
||||||
"dir": dir,
|
|
||||||
"delete": delete,
|
|
||||||
"errors": errors,
|
|
||||||
}
|
|
||||||
if sys.version_info >= (3, 12):
|
|
||||||
self._params["delete_on_close"] = delete_on_close
|
|
||||||
|
|
||||||
async def __aenter__(self) -> AsyncFile[AnyStr]:
|
|
||||||
fp = await to_thread.run_sync(
|
|
||||||
lambda: tempfile.NamedTemporaryFile(**self._params)
|
|
||||||
)
|
|
||||||
self._async_file = AsyncFile(fp)
|
|
||||||
return self._async_file
|
|
||||||
|
|
||||||
async def __aexit__(
|
|
||||||
self,
|
|
||||||
exc_type: type[BaseException] | None,
|
|
||||||
exc_value: BaseException | None,
|
|
||||||
traceback: TracebackType | None,
|
|
||||||
) -> None:
|
|
||||||
await self._async_file.aclose()
|
|
||||||
|
|
||||||
|
|
||||||
class SpooledTemporaryFile(AsyncFile[AnyStr]):
|
|
||||||
"""
|
|
||||||
An asynchronous spooled temporary file that starts in memory and is spooled to disk.
|
|
||||||
|
|
||||||
This class provides an asynchronous interface to a spooled temporary file, much like
|
|
||||||
Python's standard :class:`~tempfile.SpooledTemporaryFile`. It supports asynchronous
|
|
||||||
write operations and provides a method to force a rollover to disk.
|
|
||||||
|
|
||||||
:param max_size: Maximum size in bytes before the file is rolled over to disk.
|
|
||||||
:param mode: The mode in which the file is opened. Defaults to "w+b".
|
|
||||||
:param buffering: The buffering policy (-1 means the default buffering).
|
|
||||||
:param encoding: The encoding used to decode or encode the file (text mode only).
|
|
||||||
:param newline: Controls how universal newlines mode works (text mode only).
|
|
||||||
:param suffix: The suffix for the temporary file name.
|
|
||||||
:param prefix: The prefix for the temporary file name.
|
|
||||||
:param dir: The directory in which the temporary file is created.
|
|
||||||
:param errors: The error handling scheme used for encoding/decoding errors.
|
|
||||||
"""
|
|
||||||
|
|
||||||
_rolled: bool = False
|
|
||||||
|
|
||||||
@overload
|
|
||||||
def __init__(
|
|
||||||
self: SpooledTemporaryFile[bytes],
|
|
||||||
max_size: int = ...,
|
|
||||||
mode: OpenBinaryMode = ...,
|
|
||||||
buffering: int = ...,
|
|
||||||
encoding: str | None = ...,
|
|
||||||
newline: str | None = ...,
|
|
||||||
suffix: str | None = ...,
|
|
||||||
prefix: str | None = ...,
|
|
||||||
dir: str | None = ...,
|
|
||||||
*,
|
|
||||||
errors: str | None = ...,
|
|
||||||
): ...
|
|
||||||
@overload
|
|
||||||
def __init__(
|
|
||||||
self: SpooledTemporaryFile[str],
|
|
||||||
max_size: int = ...,
|
|
||||||
mode: OpenTextMode = ...,
|
|
||||||
buffering: int = ...,
|
|
||||||
encoding: str | None = ...,
|
|
||||||
newline: str | None = ...,
|
|
||||||
suffix: str | None = ...,
|
|
||||||
prefix: str | None = ...,
|
|
||||||
dir: str | None = ...,
|
|
||||||
*,
|
|
||||||
errors: str | None = ...,
|
|
||||||
): ...
|
|
||||||
|
|
||||||
def __init__(
|
|
||||||
self,
|
|
||||||
max_size: int = 0,
|
|
||||||
mode: OpenBinaryMode | OpenTextMode = "w+b",
|
|
||||||
buffering: int = -1,
|
|
||||||
encoding: str | None = None,
|
|
||||||
newline: str | None = None,
|
|
||||||
suffix: str | None = None,
|
|
||||||
prefix: str | None = None,
|
|
||||||
dir: str | None = None,
|
|
||||||
*,
|
|
||||||
errors: str | None = None,
|
|
||||||
) -> None:
|
|
||||||
self._tempfile_params: dict[str, Any] = {
|
|
||||||
"mode": mode,
|
|
||||||
"buffering": buffering,
|
|
||||||
"encoding": encoding,
|
|
||||||
"newline": newline,
|
|
||||||
"suffix": suffix,
|
|
||||||
"prefix": prefix,
|
|
||||||
"dir": dir,
|
|
||||||
"errors": errors,
|
|
||||||
}
|
|
||||||
self._max_size = max_size
|
|
||||||
if "b" in mode:
|
|
||||||
super().__init__(BytesIO()) # type: ignore[arg-type]
|
|
||||||
else:
|
|
||||||
super().__init__(
|
|
||||||
TextIOWrapper( # type: ignore[arg-type]
|
|
||||||
BytesIO(),
|
|
||||||
encoding=encoding,
|
|
||||||
errors=errors,
|
|
||||||
newline=newline,
|
|
||||||
write_through=True,
|
|
||||||
)
|
|
||||||
)
|
|
||||||
|
|
||||||
async def aclose(self) -> None:
|
|
||||||
if not self._rolled:
|
|
||||||
self._fp.close()
|
|
||||||
return
|
|
||||||
|
|
||||||
await super().aclose()
|
|
||||||
|
|
||||||
async def _check(self) -> None:
|
|
||||||
if self._rolled or self._fp.tell() <= self._max_size:
|
|
||||||
return
|
|
||||||
|
|
||||||
await self.rollover()
|
|
||||||
|
|
||||||
async def rollover(self) -> None:
|
|
||||||
if self._rolled:
|
|
||||||
return
|
|
||||||
|
|
||||||
self._rolled = True
|
|
||||||
buffer = self._fp
|
|
||||||
buffer.seek(0)
|
|
||||||
self._fp = await to_thread.run_sync(
|
|
||||||
lambda: tempfile.TemporaryFile(**self._tempfile_params)
|
|
||||||
)
|
|
||||||
await self.write(buffer.read())
|
|
||||||
buffer.close()
|
|
||||||
|
|
||||||
@property
|
|
||||||
def closed(self) -> bool:
|
|
||||||
return self._fp.closed
|
|
||||||
|
|
||||||
async def read(self, size: int = -1) -> AnyStr:
|
|
||||||
if not self._rolled:
|
|
||||||
await checkpoint_if_cancelled()
|
|
||||||
return self._fp.read(size)
|
|
||||||
|
|
||||||
return await super().read(size) # type: ignore[return-value]
|
|
||||||
|
|
||||||
async def read1(self: SpooledTemporaryFile[bytes], size: int = -1) -> bytes:
|
|
||||||
if not self._rolled:
|
|
||||||
await checkpoint_if_cancelled()
|
|
||||||
return self._fp.read1(size)
|
|
||||||
|
|
||||||
return await super().read1(size)
|
|
||||||
|
|
||||||
async def readline(self) -> AnyStr:
|
|
||||||
if not self._rolled:
|
|
||||||
await checkpoint_if_cancelled()
|
|
||||||
return self._fp.readline()
|
|
||||||
|
|
||||||
return await super().readline() # type: ignore[return-value]
|
|
||||||
|
|
||||||
async def readlines(self) -> list[AnyStr]:
|
|
||||||
if not self._rolled:
|
|
||||||
await checkpoint_if_cancelled()
|
|
||||||
return self._fp.readlines()
|
|
||||||
|
|
||||||
return await super().readlines() # type: ignore[return-value]
|
|
||||||
|
|
||||||
async def readinto(self: SpooledTemporaryFile[bytes], b: WriteableBuffer) -> int:
|
|
||||||
if not self._rolled:
|
|
||||||
await checkpoint_if_cancelled()
|
|
||||||
return self._fp.readinto(b)
|
|
||||||
|
|
||||||
return await super().readinto(b)
|
|
||||||
|
|
||||||
async def readinto1(self: SpooledTemporaryFile[bytes], b: WriteableBuffer) -> int:
|
|
||||||
if not self._rolled:
|
|
||||||
await checkpoint_if_cancelled()
|
|
||||||
return self._fp.readinto1(b)
|
|
||||||
|
|
||||||
return await super().readinto1(b)
|
|
||||||
|
|
||||||
async def seek(self, offset: int, whence: int | None = os.SEEK_SET) -> int:
|
|
||||||
if not self._rolled:
|
|
||||||
await checkpoint_if_cancelled()
|
|
||||||
return self._fp.seek(offset, whence)
|
|
||||||
|
|
||||||
return await super().seek(offset, whence)
|
|
||||||
|
|
||||||
async def tell(self) -> int:
|
|
||||||
if not self._rolled:
|
|
||||||
await checkpoint_if_cancelled()
|
|
||||||
return self._fp.tell()
|
|
||||||
|
|
||||||
return await super().tell()
|
|
||||||
|
|
||||||
async def truncate(self, size: int | None = None) -> int:
|
|
||||||
if not self._rolled:
|
|
||||||
await checkpoint_if_cancelled()
|
|
||||||
return self._fp.truncate(size)
|
|
||||||
|
|
||||||
return await super().truncate(size)
|
|
||||||
|
|
||||||
@overload
|
|
||||||
async def write(self: SpooledTemporaryFile[bytes], b: ReadableBuffer) -> int: ...
|
|
||||||
@overload
|
|
||||||
async def write(self: SpooledTemporaryFile[str], b: str) -> int: ...
|
|
||||||
|
|
||||||
async def write(self, b: ReadableBuffer | str) -> int:
|
|
||||||
"""
|
|
||||||
Asynchronously write data to the spooled temporary file.
|
|
||||||
|
|
||||||
If the file has not yet been rolled over, the data is written synchronously,
|
|
||||||
and a rollover is triggered if the size exceeds the maximum size.
|
|
||||||
|
|
||||||
:param s: The data to write.
|
|
||||||
:return: The number of bytes written.
|
|
||||||
:raises RuntimeError: If the underlying file is not initialized.
|
|
||||||
|
|
||||||
"""
|
|
||||||
if not self._rolled:
|
|
||||||
await checkpoint_if_cancelled()
|
|
||||||
result = self._fp.write(b)
|
|
||||||
await self._check()
|
|
||||||
return result
|
|
||||||
|
|
||||||
return await super().write(b) # type: ignore[misc]
|
|
||||||
|
|
||||||
@overload
|
|
||||||
async def writelines(
|
|
||||||
self: SpooledTemporaryFile[bytes], lines: Iterable[ReadableBuffer]
|
|
||||||
) -> None: ...
|
|
||||||
@overload
|
|
||||||
async def writelines(
|
|
||||||
self: SpooledTemporaryFile[str], lines: Iterable[str]
|
|
||||||
) -> None: ...
|
|
||||||
|
|
||||||
async def writelines(self, lines: Iterable[str] | Iterable[ReadableBuffer]) -> None:
|
|
||||||
"""
|
|
||||||
Asynchronously write a list of lines to the spooled temporary file.
|
|
||||||
|
|
||||||
If the file has not yet been rolled over, the lines are written synchronously,
|
|
||||||
and a rollover is triggered if the size exceeds the maximum size.
|
|
||||||
|
|
||||||
:param lines: An iterable of lines to write.
|
|
||||||
:raises RuntimeError: If the underlying file is not initialized.
|
|
||||||
|
|
||||||
"""
|
|
||||||
if not self._rolled:
|
|
||||||
await checkpoint_if_cancelled()
|
|
||||||
result = self._fp.writelines(lines)
|
|
||||||
await self._check()
|
|
||||||
return result
|
|
||||||
|
|
||||||
return await super().writelines(lines) # type: ignore[misc]
|
|
||||||
|
|
||||||
|
|
||||||
class TemporaryDirectory(Generic[AnyStr]):
|
|
||||||
"""
|
|
||||||
An asynchronous temporary directory that is created and cleaned up automatically.
|
|
||||||
|
|
||||||
This class provides an asynchronous context manager for creating a temporary
|
|
||||||
directory. It wraps Python's standard :class:`~tempfile.TemporaryDirectory` to
|
|
||||||
perform directory creation and cleanup operations in a background thread.
|
|
||||||
|
|
||||||
:param suffix: Suffix to be added to the temporary directory name.
|
|
||||||
:param prefix: Prefix to be added to the temporary directory name.
|
|
||||||
:param dir: The parent directory where the temporary directory is created.
|
|
||||||
:param ignore_cleanup_errors: Whether to ignore errors during cleanup
|
|
||||||
:param delete: Whether to delete the directory upon closing (Python 3.12+).
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init__(
|
|
||||||
self,
|
|
||||||
suffix: AnyStr | None = None,
|
|
||||||
prefix: AnyStr | None = None,
|
|
||||||
dir: AnyStr | None = None,
|
|
||||||
*,
|
|
||||||
ignore_cleanup_errors: bool = False,
|
|
||||||
delete: bool = True,
|
|
||||||
) -> None:
|
|
||||||
self.suffix: AnyStr | None = suffix
|
|
||||||
self.prefix: AnyStr | None = prefix
|
|
||||||
self.dir: AnyStr | None = dir
|
|
||||||
self.ignore_cleanup_errors = ignore_cleanup_errors
|
|
||||||
self.delete = delete
|
|
||||||
|
|
||||||
self._tempdir: tempfile.TemporaryDirectory | None = None
|
|
||||||
|
|
||||||
async def __aenter__(self) -> str:
|
|
||||||
params: dict[str, Any] = {
|
|
||||||
"suffix": self.suffix,
|
|
||||||
"prefix": self.prefix,
|
|
||||||
"dir": self.dir,
|
|
||||||
"ignore_cleanup_errors": self.ignore_cleanup_errors,
|
|
||||||
}
|
|
||||||
if sys.version_info >= (3, 12):
|
|
||||||
params["delete"] = self.delete
|
|
||||||
|
|
||||||
self._tempdir = await to_thread.run_sync(
|
|
||||||
lambda: tempfile.TemporaryDirectory(**params)
|
|
||||||
)
|
|
||||||
return await to_thread.run_sync(self._tempdir.__enter__)
|
|
||||||
|
|
||||||
async def __aexit__(
|
|
||||||
self,
|
|
||||||
exc_type: type[BaseException] | None,
|
|
||||||
exc_value: BaseException | None,
|
|
||||||
traceback: TracebackType | None,
|
|
||||||
) -> None:
|
|
||||||
if self._tempdir is not None:
|
|
||||||
with CancelScope(shield=True):
|
|
||||||
await to_thread.run_sync(
|
|
||||||
self._tempdir.__exit__, exc_type, exc_value, traceback
|
|
||||||
)
|
|
||||||
|
|
||||||
async def cleanup(self) -> None:
|
|
||||||
if self._tempdir is not None:
|
|
||||||
await to_thread.run_sync(self._tempdir.cleanup)
|
|
||||||
|
|
||||||
|
|
||||||
@overload
|
|
||||||
async def mkstemp(
|
|
||||||
suffix: str | None = None,
|
|
||||||
prefix: str | None = None,
|
|
||||||
dir: str | None = None,
|
|
||||||
text: bool = False,
|
|
||||||
) -> tuple[int, str]: ...
|
|
||||||
|
|
||||||
|
|
||||||
@overload
|
|
||||||
async def mkstemp(
|
|
||||||
suffix: bytes | None = None,
|
|
||||||
prefix: bytes | None = None,
|
|
||||||
dir: bytes | None = None,
|
|
||||||
text: bool = False,
|
|
||||||
) -> tuple[int, bytes]: ...
|
|
||||||
|
|
||||||
|
|
||||||
async def mkstemp(
|
|
||||||
suffix: AnyStr | None = None,
|
|
||||||
prefix: AnyStr | None = None,
|
|
||||||
dir: AnyStr | None = None,
|
|
||||||
text: bool = False,
|
|
||||||
) -> tuple[int, str | bytes]:
|
|
||||||
"""
|
|
||||||
Asynchronously create a temporary file and return an OS-level handle and the file
|
|
||||||
name.
|
|
||||||
|
|
||||||
This function wraps `tempfile.mkstemp` and executes it in a background thread.
|
|
||||||
|
|
||||||
:param suffix: Suffix to be added to the file name.
|
|
||||||
:param prefix: Prefix to be added to the file name.
|
|
||||||
:param dir: Directory in which the temporary file is created.
|
|
||||||
:param text: Whether the file is opened in text mode.
|
|
||||||
:return: A tuple containing the file descriptor and the file name.
|
|
||||||
|
|
||||||
"""
|
|
||||||
return await to_thread.run_sync(tempfile.mkstemp, suffix, prefix, dir, text)
|
|
||||||
|
|
||||||
|
|
||||||
@overload
|
|
||||||
async def mkdtemp(
|
|
||||||
suffix: str | None = None,
|
|
||||||
prefix: str | None = None,
|
|
||||||
dir: str | None = None,
|
|
||||||
) -> str: ...
|
|
||||||
|
|
||||||
|
|
||||||
@overload
|
|
||||||
async def mkdtemp(
|
|
||||||
suffix: bytes | None = None,
|
|
||||||
prefix: bytes | None = None,
|
|
||||||
dir: bytes | None = None,
|
|
||||||
) -> bytes: ...
|
|
||||||
|
|
||||||
|
|
||||||
async def mkdtemp(
|
|
||||||
suffix: AnyStr | None = None,
|
|
||||||
prefix: AnyStr | None = None,
|
|
||||||
dir: AnyStr | None = None,
|
|
||||||
) -> str | bytes:
|
|
||||||
"""
|
|
||||||
Asynchronously create a temporary directory and return its path.
|
|
||||||
|
|
||||||
This function wraps `tempfile.mkdtemp` and executes it in a background thread.
|
|
||||||
|
|
||||||
:param suffix: Suffix to be added to the directory name.
|
|
||||||
:param prefix: Prefix to be added to the directory name.
|
|
||||||
:param dir: Parent directory where the temporary directory is created.
|
|
||||||
:return: The path of the created temporary directory.
|
|
||||||
|
|
||||||
"""
|
|
||||||
return await to_thread.run_sync(tempfile.mkdtemp, suffix, prefix, dir)
|
|
||||||
|
|
||||||
|
|
||||||
async def gettempdir() -> str:
|
|
||||||
"""
|
|
||||||
Asynchronously return the name of the directory used for temporary files.
|
|
||||||
|
|
||||||
This function wraps `tempfile.gettempdir` and executes it in a background thread.
|
|
||||||
|
|
||||||
:return: The path of the temporary directory as a string.
|
|
||||||
|
|
||||||
"""
|
|
||||||
return await to_thread.run_sync(tempfile.gettempdir)
|
|
||||||
|
|
||||||
|
|
||||||
async def gettempdirb() -> bytes:
|
|
||||||
"""
|
|
||||||
Asynchronously return the name of the directory used for temporary files in bytes.
|
|
||||||
|
|
||||||
This function wraps `tempfile.gettempdirb` and executes it in a background thread.
|
|
||||||
|
|
||||||
:return: The path of the temporary directory as bytes.
|
|
||||||
|
|
||||||
"""
|
|
||||||
return await to_thread.run_sync(tempfile.gettempdirb)
|
|
||||||
@@ -1,82 +0,0 @@
|
|||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
from collections.abc import Awaitable, Generator
|
|
||||||
from typing import Any, cast
|
|
||||||
|
|
||||||
from ._eventloop import get_async_backend
|
|
||||||
|
|
||||||
|
|
||||||
class TaskInfo:
|
|
||||||
"""
|
|
||||||
Represents an asynchronous task.
|
|
||||||
|
|
||||||
:ivar int id: the unique identifier of the task
|
|
||||||
:ivar parent_id: the identifier of the parent task, if any
|
|
||||||
:vartype parent_id: Optional[int]
|
|
||||||
:ivar str name: the description of the task (if any)
|
|
||||||
:ivar ~collections.abc.Coroutine coro: the coroutine object of the task
|
|
||||||
"""
|
|
||||||
|
|
||||||
__slots__ = "_name", "coro", "id", "name", "parent_id"
|
|
||||||
|
|
||||||
def __init__(
|
|
||||||
self,
|
|
||||||
id: int,
|
|
||||||
parent_id: int | None,
|
|
||||||
name: str | None,
|
|
||||||
coro: Generator[Any, Any, Any] | Awaitable[Any],
|
|
||||||
):
|
|
||||||
func = get_current_task
|
|
||||||
self._name = f"{func.__module__}.{func.__qualname__}"
|
|
||||||
self.id: int = id
|
|
||||||
self.parent_id: int | None = parent_id
|
|
||||||
self.name: str | None = name
|
|
||||||
self.coro: Generator[Any, Any, Any] | Awaitable[Any] = coro
|
|
||||||
|
|
||||||
def __eq__(self, other: object) -> bool:
|
|
||||||
if isinstance(other, TaskInfo):
|
|
||||||
return self.id == other.id
|
|
||||||
|
|
||||||
return NotImplemented
|
|
||||||
|
|
||||||
def __hash__(self) -> int:
|
|
||||||
return hash(self.id)
|
|
||||||
|
|
||||||
def __repr__(self) -> str:
|
|
||||||
return f"{self.__class__.__name__}(id={self.id!r}, name={self.name!r})"
|
|
||||||
|
|
||||||
def has_pending_cancellation(self) -> bool:
|
|
||||||
"""
|
|
||||||
Return ``True`` if the task has a cancellation pending, ``False`` otherwise.
|
|
||||||
|
|
||||||
"""
|
|
||||||
return False
|
|
||||||
|
|
||||||
|
|
||||||
def get_current_task() -> TaskInfo:
|
|
||||||
"""
|
|
||||||
Return the current task.
|
|
||||||
|
|
||||||
:return: a representation of the current task
|
|
||||||
:raises NoEventLoopError: if no supported asynchronous event loop is running in the
|
|
||||||
current thread
|
|
||||||
|
|
||||||
"""
|
|
||||||
return get_async_backend().get_current_task()
|
|
||||||
|
|
||||||
|
|
||||||
def get_running_tasks() -> list[TaskInfo]:
|
|
||||||
"""
|
|
||||||
Return a list of running tasks in the current event loop.
|
|
||||||
|
|
||||||
:return: a list of task info objects
|
|
||||||
:raises NoEventLoopError: if no supported asynchronous event loop is running in the
|
|
||||||
current thread
|
|
||||||
|
|
||||||
"""
|
|
||||||
return cast("list[TaskInfo]", get_async_backend().get_running_tasks())
|
|
||||||
|
|
||||||
|
|
||||||
async def wait_all_tasks_blocked() -> None:
|
|
||||||
"""Wait until all other tasks are waiting for something."""
|
|
||||||
await get_async_backend().wait_all_tasks_blocked()
|
|
||||||
@@ -1,85 +0,0 @@
|
|||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
import sys
|
|
||||||
from collections.abc import Callable, Mapping
|
|
||||||
from typing import Any, TypeVar, final, overload
|
|
||||||
|
|
||||||
from ._exceptions import TypedAttributeLookupError
|
|
||||||
|
|
||||||
if sys.version_info < (3, 15):
|
|
||||||
from typing_extensions import sentinel
|
|
||||||
|
|
||||||
T_Attr = TypeVar("T_Attr")
|
|
||||||
T_Default = TypeVar("T_Default")
|
|
||||||
undefined = sentinel("undefined")
|
|
||||||
|
|
||||||
|
|
||||||
def typed_attribute() -> Any:
|
|
||||||
"""Return a unique object, used to mark typed attributes."""
|
|
||||||
return object()
|
|
||||||
|
|
||||||
|
|
||||||
class TypedAttributeSet:
|
|
||||||
"""
|
|
||||||
Superclass for typed attribute collections.
|
|
||||||
|
|
||||||
Checks that every public attribute of every subclass has a type annotation.
|
|
||||||
"""
|
|
||||||
|
|
||||||
def __init_subclass__(cls) -> None:
|
|
||||||
annotations: dict[str, Any] = getattr(cls, "__annotations__", {})
|
|
||||||
for attrname in dir(cls):
|
|
||||||
if not attrname.startswith("_") and attrname not in annotations:
|
|
||||||
raise TypeError(
|
|
||||||
f"Attribute {attrname!r} is missing its type annotation"
|
|
||||||
)
|
|
||||||
|
|
||||||
super().__init_subclass__()
|
|
||||||
|
|
||||||
|
|
||||||
class TypedAttributeProvider:
|
|
||||||
"""Base class for classes that wish to provide typed extra attributes."""
|
|
||||||
|
|
||||||
@property
|
|
||||||
def extra_attributes(self) -> Mapping[T_Attr, Callable[[], T_Attr]]:
|
|
||||||
"""
|
|
||||||
A mapping of the extra attributes to callables that return the corresponding
|
|
||||||
values.
|
|
||||||
|
|
||||||
If the provider wraps another provider, the attributes from that wrapper should
|
|
||||||
also be included in the returned mapping (but the wrapper may override the
|
|
||||||
callables from the wrapped instance).
|
|
||||||
|
|
||||||
"""
|
|
||||||
return {}
|
|
||||||
|
|
||||||
@overload
|
|
||||||
def extra(self, attribute: T_Attr) -> T_Attr: ...
|
|
||||||
|
|
||||||
@overload
|
|
||||||
def extra(self, attribute: T_Attr, default: T_Default) -> T_Attr | T_Default: ...
|
|
||||||
|
|
||||||
@final
|
|
||||||
def extra(self, attribute: Any, default: object = undefined) -> object:
|
|
||||||
"""
|
|
||||||
extra(attribute, default=undefined)
|
|
||||||
|
|
||||||
Return the value of the given typed extra attribute.
|
|
||||||
|
|
||||||
:param attribute: the attribute (member of a :class:`~TypedAttributeSet`) to
|
|
||||||
look for
|
|
||||||
:param default: the value that should be returned if no value is found for the
|
|
||||||
attribute
|
|
||||||
:raises ~anyio.TypedAttributeLookupError: if the search failed and no default
|
|
||||||
value was given
|
|
||||||
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
getter = self.extra_attributes[attribute]
|
|
||||||
except KeyError:
|
|
||||||
if default is undefined:
|
|
||||||
raise TypedAttributeLookupError("Attribute not found") from None
|
|
||||||
else:
|
|
||||||
return default
|
|
||||||
|
|
||||||
return getter()
|
|
||||||
@@ -1,170 +0,0 @@
|
|||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
__all__ = (
|
|
||||||
"fix_package_names",
|
|
||||||
"install_lazy_importer",
|
|
||||||
"set_deprecated_aliases",
|
|
||||||
)
|
|
||||||
|
|
||||||
import ast
|
|
||||||
import inspect
|
|
||||||
import sys
|
|
||||||
import warnings
|
|
||||||
from importlib import import_module
|
|
||||||
from types import ModuleType
|
|
||||||
from typing import Any
|
|
||||||
|
|
||||||
|
|
||||||
def install_lazy_importer() -> bool:
|
|
||||||
module_globals = sys._getframe(1).f_globals
|
|
||||||
module_name = module_globals["__name__"]
|
|
||||||
module_prefix = module_name + "."
|
|
||||||
module = sys.modules[module_name]
|
|
||||||
lazy_map, deprecated_aliases = _build_lazy_map(module)
|
|
||||||
names = sorted(lazy_map)
|
|
||||||
|
|
||||||
# Delete symbols that are not part of the API
|
|
||||||
del module_globals["TYPE_CHECKING"]
|
|
||||||
del module_globals["install_lazy_importer"]
|
|
||||||
|
|
||||||
if not lazy_map and not deprecated_aliases:
|
|
||||||
return False
|
|
||||||
|
|
||||||
def __getattr__(name: str) -> Any:
|
|
||||||
if new_name := deprecated_aliases.get(name):
|
|
||||||
emit_deprecation_warning(module_name, name, new_name)
|
|
||||||
target_mod, target_attr = new_name.rsplit(".", 1)
|
|
||||||
else:
|
|
||||||
try:
|
|
||||||
target_mod, target_attr = lazy_map[name]
|
|
||||||
except KeyError:
|
|
||||||
raise AttributeError(
|
|
||||||
f"module {module_name!r} has no attribute {name!r}"
|
|
||||||
) from None
|
|
||||||
|
|
||||||
imported = import_module(target_mod, module_name)
|
|
||||||
value = getattr(imported, target_attr)
|
|
||||||
|
|
||||||
# patch the module name to match
|
|
||||||
if (
|
|
||||||
getattr(value, "__module__", "").startswith(module_prefix)
|
|
||||||
and name not in deprecated_aliases
|
|
||||||
):
|
|
||||||
value.__module__ = module_name
|
|
||||||
|
|
||||||
module_globals[name] = value
|
|
||||||
return value
|
|
||||||
|
|
||||||
def __dir__() -> list[str]:
|
|
||||||
return names
|
|
||||||
|
|
||||||
module_globals["__dir__"] = __dir__
|
|
||||||
module_globals["__getattr__"] = __getattr__
|
|
||||||
module_globals.pop("fix_package_names", None)
|
|
||||||
module_globals.pop("set_deprecated_aliases", None)
|
|
||||||
return True
|
|
||||||
|
|
||||||
|
|
||||||
def fix_package_names() -> None:
|
|
||||||
module_globals = sys._getframe(1).f_globals
|
|
||||||
module_prefix = module_globals["__name__"] + "."
|
|
||||||
del module_globals[fix_package_names.__name__]
|
|
||||||
for value in module_globals.values():
|
|
||||||
if modname := getattr(value, "__module__", ""):
|
|
||||||
if modname.startswith(module_prefix):
|
|
||||||
parts = modname.split(".")
|
|
||||||
value.__module__ = ".".join(
|
|
||||||
part for part in parts if not part.startswith("_")
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def emit_deprecation_warning(module_name: str, name: str, target: str) -> None:
|
|
||||||
warnings.warn(
|
|
||||||
f"The {module_name}.{name} alias is deprecated, use {target} instead.",
|
|
||||||
DeprecationWarning,
|
|
||||||
stacklevel=3,
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def set_deprecated_aliases(aliases: dict[str, str]) -> None:
|
|
||||||
module_globals = sys._getframe(1).f_globals
|
|
||||||
module_name = module_globals["__name__"]
|
|
||||||
del module_globals[set_deprecated_aliases.__name__]
|
|
||||||
|
|
||||||
def __getattr__(name: str) -> Any:
|
|
||||||
try:
|
|
||||||
target = aliases[name]
|
|
||||||
except KeyError:
|
|
||||||
raise AttributeError(
|
|
||||||
f"module {module_name!r} has no attribute {name!r}"
|
|
||||||
) from None
|
|
||||||
|
|
||||||
emit_deprecation_warning(module_name, name, target)
|
|
||||||
target_modname, attrname = target.rsplit(".", 1)
|
|
||||||
module = import_module(target_modname)
|
|
||||||
return getattr(module, attrname)
|
|
||||||
|
|
||||||
sys.modules[module_name].__dict__["__getattr__"] = __getattr__
|
|
||||||
|
|
||||||
|
|
||||||
def _build_lazy_map(
|
|
||||||
module: ModuleType,
|
|
||||||
) -> tuple[dict[str, tuple[str, str]], dict[str, str]]:
|
|
||||||
try:
|
|
||||||
source = inspect.getsource(module)
|
|
||||||
except OSError:
|
|
||||||
return {}, {}
|
|
||||||
|
|
||||||
tree = compile(source, module.__file__ or "", "exec", ast.PyCF_ONLY_AST)
|
|
||||||
assert isinstance(tree, ast.Module)
|
|
||||||
out: dict[str, tuple[str, str]] = {}
|
|
||||||
deprecated_aliases: dict[str, str] = {}
|
|
||||||
|
|
||||||
for node in tree.body:
|
|
||||||
if not isinstance(node, ast.If) or not _is_type_checking_block(node.test):
|
|
||||||
continue
|
|
||||||
|
|
||||||
for stmt in node.body:
|
|
||||||
match stmt:
|
|
||||||
case ast.ImportFrom():
|
|
||||||
base = "." * stmt.level + (stmt.module or "")
|
|
||||||
for alias in stmt.names:
|
|
||||||
if alias.name == "*":
|
|
||||||
raise RuntimeError("star imports not supported")
|
|
||||||
|
|
||||||
exported = alias.asname or alias.name
|
|
||||||
out[exported] = (base, alias.name)
|
|
||||||
case ast.Expr() if isinstance(stmt.value, ast.Call):
|
|
||||||
call = stmt.value
|
|
||||||
if (
|
|
||||||
isinstance(call.func, ast.Name)
|
|
||||||
and call.func.id == "set_deprecated_aliases"
|
|
||||||
):
|
|
||||||
arg0 = call.args[0]
|
|
||||||
assert isinstance(arg0, ast.Dict)
|
|
||||||
for key, value in zip(arg0.keys, arg0.values, strict=True):
|
|
||||||
assert isinstance(key, ast.Constant)
|
|
||||||
assert isinstance(key.value, str)
|
|
||||||
assert isinstance(value, ast.Constant)
|
|
||||||
assert isinstance(value.value, str)
|
|
||||||
deprecated_aliases[key.value] = value.value
|
|
||||||
|
|
||||||
return out, deprecated_aliases
|
|
||||||
|
|
||||||
|
|
||||||
def _is_type_checking_block(test: ast.AST) -> bool:
|
|
||||||
if not isinstance(test, ast.BoolOp):
|
|
||||||
return False
|
|
||||||
|
|
||||||
subtest = test.values[0]
|
|
||||||
match subtest:
|
|
||||||
case ast.Name():
|
|
||||||
return subtest.id == "TYPE_CHECKING"
|
|
||||||
case ast.Attribute():
|
|
||||||
return (
|
|
||||||
isinstance(subtest.value, ast.Name)
|
|
||||||
and subtest.value.id == "typing"
|
|
||||||
and subtest.attr == "TYPE_CHECKING"
|
|
||||||
)
|
|
||||||
case _:
|
|
||||||
return False
|
|
||||||
@@ -1,63 +0,0 @@
|
|||||||
from __future__ import annotations
|
|
||||||
|
|
||||||
from typing import TYPE_CHECKING
|
|
||||||
|
|
||||||
from .._lazyimport import (
|
|
||||||
fix_package_names,
|
|
||||||
install_lazy_importer,
|
|
||||||
set_deprecated_aliases,
|
|
||||||
)
|
|
||||||
|
|
||||||
if TYPE_CHECKING or not install_lazy_importer():
|
|
||||||
from ._eventloop import AsyncBackend as AsyncBackend
|
|
||||||
from ._resources import AsyncResource as AsyncResource
|
|
||||||
from ._sockets import ConnectedUDPSocket as ConnectedUDPSocket
|
|
||||||
from ._sockets import ConnectedUNIXDatagramSocket as ConnectedUNIXDatagramSocket
|
|
||||||
from ._sockets import IPAddressType as IPAddressType
|
|
||||||
from ._sockets import IPSockAddrType as IPSockAddrType
|
|
||||||
from ._sockets import SocketAttribute as SocketAttribute
|
|
||||||
from ._sockets import SocketListener as SocketListener
|
|
||||||
from ._sockets import SocketStream as SocketStream
|
|
||||||
from ._sockets import UDPPacketType as UDPPacketType
|
|
||||||
from ._sockets import UDPSocket as UDPSocket
|
|
||||||
from ._sockets import UNIXDatagramPacketType as UNIXDatagramPacketType
|
|
||||||
from ._sockets import UNIXDatagramSocket as UNIXDatagramSocket
|
|
||||||
from ._sockets import UNIXSocketStream as UNIXSocketStream
|
|
||||||
from ._streams import AnyByteReceiveStream as AnyByteReceiveStream
|
|
||||||
from ._streams import AnyByteSendStream as AnyByteSendStream
|
|
||||||
from ._streams import AnyByteStream as AnyByteStream
|
|
||||||
from ._streams import AnyByteStreamConnectable as AnyByteStreamConnectable
|
|
||||||
from ._streams import (
|
|
||||||
AnyUnreliableByteReceiveStream as AnyUnreliableByteReceiveStream,
|
|
||||||
)
|
|
||||||
from ._streams import AnyUnreliableByteSendStream as AnyUnreliableByteSendStream
|
|
||||||
from ._streams import AnyUnreliableByteStream as AnyUnreliableByteStream
|
|
||||||
from ._streams import ByteReceiveStream as ByteReceiveStream
|
|
||||||
from ._streams import ByteSendStream as ByteSendStream
|
|
||||||
from ._streams import ByteStream as ByteStream
|
|
||||||
from ._streams import ByteStreamConnectable as ByteStreamConnectable
|
|
||||||
from ._streams import Listener as Listener
|
|
||||||
from ._streams import ObjectReceiveStream as ObjectReceiveStream
|
|
||||||
from ._streams import ObjectSendStream as ObjectSendStream
|
|
||||||
from ._streams import ObjectStream as ObjectStream
|
|
||||||
from ._streams import ObjectStreamConnectable as ObjectStreamConnectable
|
|
||||||
from ._streams import UnreliableObjectReceiveStream as UnreliableObjectReceiveStream
|
|
||||||
from ._streams import UnreliableObjectSendStream as UnreliableObjectSendStream
|
|
||||||
from ._streams import UnreliableObjectStream as UnreliableObjectStream
|
|
||||||
from ._subprocesses import Process as Process
|
|
||||||
from ._tasks import TaskGroup as TaskGroup
|
|
||||||
from ._tasks import TaskStatus as TaskStatus
|
|
||||||
from ._testing import TestRunner as TestRunner
|
|
||||||
|
|
||||||
fix_package_names()
|
|
||||||
set_deprecated_aliases(
|
|
||||||
{
|
|
||||||
"CapacityLimiter": "anyio.CapacityLimiter",
|
|
||||||
"Condition": "anyio.Condition",
|
|
||||||
"Event": "anyio.Event",
|
|
||||||
"Lock": "anyio.Lock",
|
|
||||||
"Semaphore": "anyio.Semaphore",
|
|
||||||
"CancelScope": "anyio.CancelScope",
|
|
||||||
"BlockingPortal": "anyio.from_thread.BlockingPortal",
|
|
||||||
}
|
|
||||||
)
|
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user