Update compressor for data annotation
This commit is contained in:
@@ -66,14 +66,26 @@ class PythonController:
|
||||
button = parameters["button"]
|
||||
x = parameters["x"]
|
||||
y = parameters["y"]
|
||||
self.execute_python_command(f"pyautogui.click(button='{button}', x={x}, y={y})")
|
||||
if "num_clicks" in parameters:
|
||||
num_clicks = parameters["num_clicks"]
|
||||
self.execute_python_command(f"pyautogui.click(button='{button}', x={x}, y={y}, clicks={num_clicks})")
|
||||
else:
|
||||
self.execute_python_command(f"pyautogui.click(button='{button}', x={x}, y={y})")
|
||||
elif "button" in parameters and "x" not in parameters and "y" not in parameters:
|
||||
button = parameters["button"]
|
||||
self.execute_python_command(f"pyautogui.click(button='{button}')")
|
||||
if "num_clicks" in parameters:
|
||||
num_clicks = parameters["num_clicks"]
|
||||
self.execute_python_command(f"pyautogui.click(button='{button}', clicks={num_clicks})")
|
||||
else:
|
||||
self.execute_python_command(f"pyautogui.click(button='{button}')")
|
||||
elif "button" not in parameters and "x" in parameters and "y" in parameters:
|
||||
x = parameters["x"]
|
||||
y = parameters["y"]
|
||||
self.execute_python_command(f"pyautogui.click(x={x}, y={y})")
|
||||
if "num_clicks" in parameters:
|
||||
num_clicks = parameters["num_clicks"]
|
||||
self.execute_python_command(f"pyautogui.click(x={x}, y={y}, clicks={num_clicks})")
|
||||
else:
|
||||
self.execute_python_command(f"pyautogui.click(x={x}, y={y})")
|
||||
else:
|
||||
raise Exception(f"Unknown parameters: {parameters}")
|
||||
|
||||
|
||||
@@ -3,7 +3,7 @@ Y_MAX = 1080
|
||||
|
||||
KEYBOARD_KEYS = ['\t', '\n', '\r', ' ', '!', '"', '#', '$', '%', '&', "'", '(', ')', '*', '+', ',', '-', '.', '/', '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', ':', ';', '<', '=', '>', '?', '@', '[', '\\', ']', '^', '_', '`', 'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', '{', '|', '}', '~', 'accept', 'add', 'alt', 'altleft', 'altright', 'apps', 'backspace', 'browserback', 'browserfavorites', 'browserforward', 'browserhome', 'browserrefresh', 'browsersearch', 'browserstop', 'capslock', 'clear', 'convert', 'ctrl', 'ctrlleft', 'ctrlright', 'decimal', 'del', 'delete', 'divide', 'down', 'end', 'enter', 'esc', 'escape', 'execute', 'f1', 'f10', 'f11', 'f12', 'f13', 'f14', 'f15', 'f16', 'f17', 'f18', 'f19', 'f2', 'f20', 'f21', 'f22', 'f23', 'f24', 'f3', 'f4', 'f5', 'f6', 'f7', 'f8', 'f9', 'final', 'fn', 'hanguel', 'hangul', 'hanja', 'help', 'home', 'insert', 'junja', 'kana', 'kanji', 'launchapp1', 'launchapp2', 'launchmail', 'launchmediaselect', 'left', 'modechange', 'multiply', 'nexttrack', 'nonconvert', 'num0', 'num1', 'num2', 'num3', 'num4', 'num5', 'num6', 'num7', 'num8', 'num9', 'numlock', 'pagedown', 'pageup', 'pause', 'pgdn', 'pgup', 'playpause', 'prevtrack', 'print', 'printscreen', 'prntscrn', 'prtsc', 'prtscr', 'return', 'right', 'scrolllock', 'select', 'separator', 'shift', 'shiftleft', 'shiftright', 'sleep', 'stop', 'subtract', 'tab', 'up', 'volumedown', 'volumemute', 'volumeup', 'win', 'winleft', 'winright', 'yen', 'command', 'option', 'optionleft', 'optionright']
|
||||
|
||||
ACTIONS = [
|
||||
ACTION_SPACE = [
|
||||
{
|
||||
"action_type": "MOVE_TO",
|
||||
"note": "move the cursor to the specified position",
|
||||
@@ -38,7 +38,12 @@ ACTIONS = [
|
||||
"type": float,
|
||||
"range": [0, Y_MAX],
|
||||
"optional": True,
|
||||
}
|
||||
},
|
||||
"num_clicks": {
|
||||
"type": int,
|
||||
"range": [1, 2, 3],
|
||||
"optional": True,
|
||||
},
|
||||
}
|
||||
},
|
||||
{
|
||||
|
||||
1
utils/complex_clicking.json
Normal file
1
utils/complex_clicking.json
Normal file
File diff suppressed because one or more lines are too long
1788
utils/complex_clicking.jsonl
Normal file
1788
utils/complex_clicking.jsonl
Normal file
File diff suppressed because it is too large
Load Diff
@@ -3,78 +3,93 @@ import sys, pathlib;
|
||||
sys.path.append(str(pathlib.Path(__file__).parents[1]))
|
||||
|
||||
import os
|
||||
import math
|
||||
import json
|
||||
from typing import List
|
||||
from desktop_env.envs.desktop_env import Action, MouseClick
|
||||
from copy import deepcopy
|
||||
|
||||
pynput2pyautogui_key = {
|
||||
"alt_l": "altleft",
|
||||
"alt_r": "altright",
|
||||
}
|
||||
|
||||
|
||||
class DuckTrackEventActionConverter:
|
||||
def __init__(self, human_readable: str, compress_move: bool = True):
|
||||
self.human_readable = human_readable
|
||||
self.compress_move = compress_move
|
||||
def __init__(self, ):
|
||||
""""""
|
||||
|
||||
def enum_to_str(self, enum):
|
||||
"""Converts an enum to its string representation if HUMAN_READABLE is True, otherwise returns its value."""
|
||||
return enum.name if self.human_readable else enum.value
|
||||
### Enumerations ###
|
||||
def move_event_to_action(self, event: dict, action_space: str = "computer_13"):
|
||||
"""Converts a mouse move event to its corresponding action."""
|
||||
if action_space == "computer_13":
|
||||
return {
|
||||
"action_type": "MOVE_TO",
|
||||
"parameters": {
|
||||
"x": event["x"],
|
||||
"y": event["y"]
|
||||
}
|
||||
}
|
||||
elif action_space == "pyautogui":
|
||||
return "pyautogui.moveTo({}, {})".format(event["x"], event["y"])
|
||||
|
||||
def compress_mouse_move(self, data: List[dict], index: int):
|
||||
"""Compresses consecutive mouse move events into first and last move events."""
|
||||
first_move, last_move = data[index], data[index]
|
||||
while index < len(data) and data[index]["action"] == "move":
|
||||
last_move = data[index]
|
||||
index += 1
|
||||
return first_move, last_move, index
|
||||
def click_event_to_action(self, event: dict, action_space: str = "computer_13"):
|
||||
"""Converts a mouse click event to its corresponding action."""
|
||||
action = {
|
||||
"action_type": None,
|
||||
"parameters": {
|
||||
"button": None
|
||||
}
|
||||
}
|
||||
|
||||
def move_event_to_action(self, event: dict):
|
||||
return {"action_type": self.enum_to_str(Action.MOUSE_MOVE),
|
||||
"x": event["x"],
|
||||
"y": event["y"]}
|
||||
|
||||
def click_event_to_action(self, event: dict):
|
||||
action = {}
|
||||
mouse_button = event["button"]
|
||||
mouse_pressed = event["pressed"]
|
||||
|
||||
if mouse_pressed:
|
||||
action["action_type"] = self.enum_to_str(Action.MOUSE_DOWN)
|
||||
action["action_type"] = "MOUSE_DOWN"
|
||||
elif not mouse_pressed:
|
||||
action["action_type"] = self.enum_to_str(Action.MOUSE_UP)
|
||||
action["action_type"] = "MOUSE_UP"
|
||||
else:
|
||||
raise NotImplementedError(mouse_pressed)
|
||||
|
||||
if mouse_button == "left":
|
||||
action["click_type"] = self.enum_to_str(MouseClick.LEFT)
|
||||
elif mouse_button == "right":
|
||||
action["click_type"] = self.enum_to_str(MouseClick.RIGHT)
|
||||
elif mouse_button == "middle":
|
||||
action["click_type"] = self.enum_to_str(MouseClick.MIDDLE)
|
||||
if mouse_button in ["left", "right", "middle"]:
|
||||
action["parameters"]["button"] = mouse_button
|
||||
else:
|
||||
raise NotImplementedError(mouse_button)
|
||||
|
||||
return action
|
||||
|
||||
def press_event_to_action(self, event: dict):
|
||||
return {"action_type": self.enum_to_str(Action.KEY_DOWN),
|
||||
"key": [ord(c) for c in event["name"]]}
|
||||
def press_event_to_action(self, event: dict, action_space: str = "computer_13"):
|
||||
"""Converts a key down event to its corresponding action."""
|
||||
# NOTE: the `key down`, `press` have the same meaning here, while different in pyautogui
|
||||
return {
|
||||
"action_type": "KEY_DOWN",
|
||||
"parameters": {
|
||||
"key": event["name"] if event["name"] not in pynput2pyautogui_key else pynput2pyautogui_key[
|
||||
event["name"]]
|
||||
}
|
||||
}
|
||||
|
||||
def release_event_to_action(self, event: dict):
|
||||
return {"action_type": self.enum_to_str(Action.KEY_UP),
|
||||
"key": [ord(c) for c in event["name"]]}
|
||||
def release_event_to_action(self, event: dict, action_space: str = "computer_13"):
|
||||
"""Converts a key release event to its corresponding action."""
|
||||
return {
|
||||
"action_type": "KEY_UP",
|
||||
"parameters": {
|
||||
"key": event["name"] if event["name"] not in pynput2pyautogui_key else pynput2pyautogui_key[
|
||||
event["name"]]
|
||||
}
|
||||
}
|
||||
|
||||
def scroll_event_to_action(self, event: dict):
|
||||
# TODO: need to confirm if df < 0 means scroll up or down
|
||||
def scroll_event_to_action(self, event: dict, action_space: str = "computer_13"):
|
||||
"""Converts a scroll event to its corresponding action."""
|
||||
return {
|
||||
"action_type": "SCROLL",
|
||||
"parameters": {
|
||||
"dx": event["dx"],
|
||||
"dy": event["dy"]
|
||||
}
|
||||
}
|
||||
|
||||
# TODO: NEED to be test to match the scroll up and down with our action, e.g. scroll here once is equal to scroll 10 or scroll 20?
|
||||
if event["dy"] < 0:
|
||||
down = False
|
||||
else:
|
||||
down = True
|
||||
|
||||
return {"action_type": self.enum_to_str(Action.CLICK),
|
||||
"click_type": self.enum_to_str(MouseClick.WHEEL_DOWN) if down else self.enum_to_str(
|
||||
MouseClick.WHEEL_UP)}
|
||||
|
||||
def event_to_action(self, event: dict):
|
||||
def event_to_action(self, event: dict, action_space: str = "computer_13"):
|
||||
"""Converts an event to its corresponding action based on the event type."""
|
||||
if event["action"] == "move":
|
||||
return self.move_event_to_action(event)
|
||||
@@ -89,114 +104,121 @@ class DuckTrackEventActionConverter:
|
||||
else:
|
||||
raise NotImplementedError(event["action"])
|
||||
|
||||
def ducktrack_event_file_to_action(self, ducktrack_event_file: str, out_file: str, compress_move: bool = None):
|
||||
### Compressing ###
|
||||
def compress_mouse_move(self, data: List[dict], index: int):
|
||||
"""Compresses consecutive mouse move events into first and last move events."""
|
||||
first_move, last_move = data[index], data[index]
|
||||
while index < len(data) and data[index]["action"] == "move":
|
||||
last_move = data[index]
|
||||
index += 1
|
||||
return first_move, last_move, index
|
||||
|
||||
### Converting ###
|
||||
def ducktrack_event_file_to_action(self, ducktrack_event_file: str, out_file: str, compress_move: bool = True):
|
||||
"""Converts DuckTrack event data to a list of actions and saves them to a file."""
|
||||
if not os.path.exists(ducktrack_event_file):
|
||||
raise FileNotFoundError(ducktrack_event_file)
|
||||
|
||||
# set to default
|
||||
if compress_move is None:
|
||||
compress_move = self.compress_move
|
||||
|
||||
with open(ducktrack_event_file, 'r') as file:
|
||||
data = [json.loads(line) for line in file]
|
||||
events = [json.loads(line) for line in file]
|
||||
|
||||
result = {"action": [], "event": []}
|
||||
# Save the compressed actions in a list
|
||||
result = []
|
||||
index = 0
|
||||
presses_to_skip = 0
|
||||
releases_to_skip = 0
|
||||
|
||||
# Compress the mouse move events
|
||||
while index < len(data):
|
||||
event = data[index]
|
||||
while index < len(events):
|
||||
|
||||
event = events[index]
|
||||
|
||||
def do_mouse_press(button: str):
|
||||
for j, second_event in enumerate(events[index + 1:]):
|
||||
# make sure the time between mouse clicks is less than 500ms
|
||||
if second_event["time_stamp"] - event["time_stamp"] > 0.5:
|
||||
break
|
||||
|
||||
if "x" in second_event and "y" in second_event:
|
||||
# if the mouse moves out of the click radius/rectangle, it is not a click sequence
|
||||
if math.sqrt((second_event["y"] - event["y"]) ** 2 +
|
||||
(second_event["x"] - event["x"]) ** 2) > 4:
|
||||
break
|
||||
|
||||
if second_event["action"] == "click" and second_event["pressed"]:
|
||||
for k, third_event in enumerate(events[index + j + 2:]):
|
||||
if third_event["time_stamp"] - second_event["time_stamp"] > 0.5:
|
||||
break
|
||||
|
||||
if "x" in third_event and "y" in third_event:
|
||||
if math.sqrt((third_event["y"] - event["y"]) ** 2 +
|
||||
(third_event["x"] - event["x"]) ** 2) > 5:
|
||||
break
|
||||
|
||||
if third_event["action"] == "click" and third_event["pressed"]:
|
||||
result.append({
|
||||
"action_type": "CLICK",
|
||||
"parameters": {
|
||||
"button": button,
|
||||
"num_clicks": 3
|
||||
}
|
||||
})
|
||||
return 2, 2
|
||||
|
||||
result.append({
|
||||
"action_type": "CLICK",
|
||||
"parameters": {
|
||||
"button": button,
|
||||
"num_clicks": 2
|
||||
}
|
||||
})
|
||||
return 1, 1
|
||||
|
||||
result.append({
|
||||
"action_type": "MOUSE_DOWN",
|
||||
"parameters": {
|
||||
"button": button
|
||||
}
|
||||
})
|
||||
return 0, 0
|
||||
|
||||
if event["action"] == "move" and compress_move:
|
||||
first_move, last_move, index = self.compress_mouse_move(data, index)
|
||||
result["action"].extend([self.event_to_action(last_move)])
|
||||
result["event"].extend([last_move])
|
||||
else:
|
||||
result["action"].append(self.event_to_action(event))
|
||||
result["event"].append(event)
|
||||
first_move, last_move, index = self.compress_mouse_move(events, index)
|
||||
result.extend([self.event_to_action(last_move)])
|
||||
|
||||
elif event["action"] == "click":
|
||||
button = event["button"]
|
||||
|
||||
if event["pressed"]:
|
||||
if presses_to_skip == 0:
|
||||
presses, releases = do_mouse_press(button)
|
||||
presses_to_skip += presses
|
||||
releases_to_skip += releases
|
||||
else:
|
||||
presses_to_skip -= 1
|
||||
else:
|
||||
if releases_to_skip == 0:
|
||||
result.append({
|
||||
"action_type": "MOUSE_UP",
|
||||
"parameters": {
|
||||
"button": button
|
||||
}
|
||||
})
|
||||
else:
|
||||
releases_to_skip -= 1
|
||||
index += 1
|
||||
|
||||
# Compress the key down and key up actions
|
||||
# todo: handling the key down and key up events
|
||||
_new_actions = []
|
||||
_action = list(result["action"])
|
||||
idx = 0
|
||||
|
||||
while True:
|
||||
if idx >= len(_action):
|
||||
break
|
||||
|
||||
if _action[idx]["action_type"] == self.enum_to_str(Action.KEY_DOWN):
|
||||
typed_text = []
|
||||
while idx < len(_action) and _action[idx]["action_type"] in [self.enum_to_str(Action.KEY_DOWN), self.enum_to_str(Action.KEY_UP)] and len(_action[idx]["key"]) == 1:
|
||||
if _action[idx]["action_type"] == self.enum_to_str(Action.KEY_DOWN):
|
||||
typed_text.append(chr(_action[idx]["key"][0]))
|
||||
idx += 1
|
||||
if typed_text:
|
||||
_new_actions.append({"action_type": self.enum_to_str(Action.TYPE), "text": typed_text})
|
||||
else:
|
||||
_new_actions.append(_action[idx])
|
||||
idx += 1
|
||||
else:
|
||||
_new_actions.append(_action[idx])
|
||||
idx += 1
|
||||
|
||||
result["action"] = _new_actions
|
||||
|
||||
# Compress the scroll up and scroll down events
|
||||
# todo: handling the key down and key up events
|
||||
_new_actions = []
|
||||
_action = list(result["action"])
|
||||
idx = 0
|
||||
|
||||
while True:
|
||||
if idx >= len(_action):
|
||||
break
|
||||
|
||||
if _action[idx]["action_type"] == self.enum_to_str(Action.CLICK) and _action[idx]["click_type"] in [self.enum_to_str(MouseClick.WHEEL_UP), self.enum_to_str(MouseClick.WHEEL_DOWN)]:
|
||||
typed_text = []
|
||||
while idx < len(_action) and _action[idx]["action_type"] == self.enum_to_str(Action.CLICK) and _action[idx]["click_type"] in [self.enum_to_str(MouseClick.WHEEL_UP), self.enum_to_str(MouseClick.WHEEL_DOWN)]:
|
||||
if _action[idx]["click_type"] == self.enum_to_str(MouseClick.WHEEL_UP):
|
||||
typed_text.append("UP")
|
||||
idx += 1
|
||||
elif _action[idx]["click_type"] == self.enum_to_str(MouseClick.WHEEL_DOWN):
|
||||
typed_text.append("DOWN")
|
||||
idx += 1
|
||||
_new_actions.append({"action_type": self.enum_to_str(Action.CLICK), "click_type": "SCROLL", "text": typed_text})
|
||||
else:
|
||||
_new_actions.append(_action[idx])
|
||||
idx += 1
|
||||
|
||||
result["action"] = _new_actions
|
||||
|
||||
# Compress the mouse down and mouse up actions
|
||||
# todo: handling the key down and key up events
|
||||
_new_actions = []
|
||||
_action = list(result["action"])
|
||||
idx = 0
|
||||
|
||||
while True:
|
||||
if idx >= len(_action):
|
||||
break
|
||||
if _action[idx]["action_type"] == self.enum_to_str(Action.MOUSE_DOWN):
|
||||
if idx + 1 < len(_action) and _action[idx+1]["action_type"] == self.enum_to_str(Action.MOUSE_UP):
|
||||
_new_actions.append({"action_type": self.enum_to_str(Action.CLICK), "click_type": _action[idx]["click_type"]})
|
||||
idx += 2
|
||||
else:
|
||||
_new_actions.append(_action[idx])
|
||||
idx += 1
|
||||
else:
|
||||
_new_actions.append(_action[idx])
|
||||
idx += 1
|
||||
|
||||
result["action"] = _new_actions
|
||||
result.append(self.event_to_action(event))
|
||||
index += 1
|
||||
|
||||
with open(out_file, "w") as f:
|
||||
json.dump(result, f)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
converter = DuckTrackEventActionConverter(human_readable=True)
|
||||
converter.ducktrack_event_file_to_action(ducktrack_event_file="sample.jsonl",
|
||||
out_file="output.json",
|
||||
compress_move=True)
|
||||
converter = DuckTrackEventActionConverter()
|
||||
converter.ducktrack_event_file_to_action(
|
||||
ducktrack_event_file="events_calc.jsonl",
|
||||
out_file="events_calc.json",
|
||||
compress_move=True
|
||||
)
|
||||
|
||||
111
utils/events_calc.json
Normal file
111
utils/events_calc.json
Normal file
@@ -0,0 +1,111 @@
|
||||
[
|
||||
{
|
||||
"action_type": "MOVE_TO",
|
||||
"parameters": {
|
||||
"x": 152,
|
||||
"y": 259
|
||||
}
|
||||
},
|
||||
{
|
||||
"action_type": "MOUSE_DOWN",
|
||||
"parameters": {
|
||||
"button": "left"
|
||||
}
|
||||
},
|
||||
{
|
||||
"action_type": "MOVE_TO",
|
||||
"parameters": {
|
||||
"x": 464,
|
||||
"y": 317
|
||||
}
|
||||
},
|
||||
{
|
||||
"action_type": "MOUSE_UP",
|
||||
"parameters": {
|
||||
"button": "left"
|
||||
}
|
||||
},
|
||||
{
|
||||
"action_type": "MOVE_TO",
|
||||
"parameters": {
|
||||
"x": 466,
|
||||
"y": 317
|
||||
}
|
||||
},
|
||||
{
|
||||
"action_type": "KEY_DOWN",
|
||||
"parameters": {
|
||||
"key": "altleft"
|
||||
}
|
||||
},
|
||||
{
|
||||
"action_type": "KEY_DOWN",
|
||||
"parameters": {
|
||||
"key": "="
|
||||
}
|
||||
},
|
||||
{
|
||||
"action_type": "KEY_UP",
|
||||
"parameters": {
|
||||
"key": "="
|
||||
}
|
||||
},
|
||||
{
|
||||
"action_type": "KEY_UP",
|
||||
"parameters": {
|
||||
"key": "altleft"
|
||||
}
|
||||
},
|
||||
{
|
||||
"action_type": "MOVE_TO",
|
||||
"parameters": {
|
||||
"x": 709,
|
||||
"y": 1047
|
||||
}
|
||||
},
|
||||
{
|
||||
"action_type": "MOUSE_DOWN",
|
||||
"parameters": {
|
||||
"button": "left"
|
||||
}
|
||||
},
|
||||
{
|
||||
"action_type": "MOVE_TO",
|
||||
"parameters": {
|
||||
"x": 709,
|
||||
"y": 1047
|
||||
}
|
||||
},
|
||||
{
|
||||
"action_type": "MOUSE_UP",
|
||||
"parameters": {
|
||||
"button": "left"
|
||||
}
|
||||
},
|
||||
{
|
||||
"action_type": "MOVE_TO",
|
||||
"parameters": {
|
||||
"x": 717,
|
||||
"y": 304
|
||||
}
|
||||
},
|
||||
{
|
||||
"action_type": "MOUSE_DOWN",
|
||||
"parameters": {
|
||||
"button": "left"
|
||||
}
|
||||
},
|
||||
{
|
||||
"action_type": "MOVE_TO",
|
||||
"parameters": {
|
||||
"x": 717,
|
||||
"y": 304
|
||||
}
|
||||
},
|
||||
{
|
||||
"action_type": "MOUSE_UP",
|
||||
"parameters": {
|
||||
"button": "left"
|
||||
}
|
||||
}
|
||||
]
|
||||
423
utils/events_calc.jsonl
Normal file
423
utils/events_calc.jsonl
Normal file
@@ -0,0 +1,423 @@
|
||||
{"time_stamp": 21028.2899763, "action": "move", "x": 686, "y": 306}
|
||||
{"time_stamp": 21028.2965794, "action": "move", "x": 684, "y": 306}
|
||||
{"time_stamp": 21028.3046644, "action": "move", "x": 678, "y": 306}
|
||||
{"time_stamp": 21028.3126807, "action": "move", "x": 670, "y": 306}
|
||||
{"time_stamp": 21028.3208329, "action": "move", "x": 661, "y": 306}
|
||||
{"time_stamp": 21028.3288313, "action": "move", "x": 645, "y": 306}
|
||||
{"time_stamp": 21028.336626, "action": "move", "x": 625, "y": 306}
|
||||
{"time_stamp": 21028.3445457, "action": "move", "x": 603, "y": 305}
|
||||
{"time_stamp": 21028.3527487, "action": "move", "x": 574, "y": 303}
|
||||
{"time_stamp": 21028.3606394, "action": "move", "x": 544, "y": 301}
|
||||
{"time_stamp": 21028.3688565, "action": "move", "x": 508, "y": 300}
|
||||
{"time_stamp": 21028.3768381, "action": "move", "x": 471, "y": 298}
|
||||
{"time_stamp": 21028.3848709, "action": "move", "x": 430, "y": 296}
|
||||
{"time_stamp": 21028.3926563, "action": "move", "x": 389, "y": 296}
|
||||
{"time_stamp": 21028.4009164, "action": "move", "x": 348, "y": 296}
|
||||
{"time_stamp": 21028.4089388, "action": "move", "x": 313, "y": 296}
|
||||
{"time_stamp": 21028.4171707, "action": "move", "x": 280, "y": 296}
|
||||
{"time_stamp": 21028.4245847, "action": "move", "x": 252, "y": 294}
|
||||
{"time_stamp": 21028.4328148, "action": "move", "x": 225, "y": 294}
|
||||
{"time_stamp": 21028.4406678, "action": "move", "x": 208, "y": 294}
|
||||
{"time_stamp": 21028.4486998, "action": "move", "x": 192, "y": 294}
|
||||
{"time_stamp": 21028.4568529, "action": "move", "x": 177, "y": 294}
|
||||
{"time_stamp": 21028.4647334, "action": "move", "x": 163, "y": 293}
|
||||
{"time_stamp": 21028.4729702, "action": "move", "x": 153, "y": 293}
|
||||
{"time_stamp": 21028.4808044, "action": "move", "x": 143, "y": 293}
|
||||
{"time_stamp": 21028.4889062, "action": "move", "x": 135, "y": 293}
|
||||
{"time_stamp": 21028.4967676, "action": "move", "x": 130, "y": 293}
|
||||
{"time_stamp": 21028.5050544, "action": "move", "x": 124, "y": 293}
|
||||
{"time_stamp": 21028.5127317, "action": "move", "x": 120, "y": 293}
|
||||
{"time_stamp": 21028.520827, "action": "move", "x": 117, "y": 293}
|
||||
{"time_stamp": 21028.5289378, "action": "move", "x": 114, "y": 293}
|
||||
{"time_stamp": 21028.5371078, "action": "move", "x": 111, "y": 293}
|
||||
{"time_stamp": 21028.545514, "action": "move", "x": 107, "y": 293}
|
||||
{"time_stamp": 21028.5527022, "action": "move", "x": 104, "y": 292}
|
||||
{"time_stamp": 21028.5605384, "action": "move", "x": 100, "y": 292}
|
||||
{"time_stamp": 21028.5686583, "action": "move", "x": 96, "y": 291}
|
||||
{"time_stamp": 21028.5766951, "action": "move", "x": 90, "y": 291}
|
||||
{"time_stamp": 21028.5847502, "action": "move", "x": 85, "y": 291}
|
||||
{"time_stamp": 21028.5926223, "action": "move", "x": 79, "y": 290}
|
||||
{"time_stamp": 21028.6007454, "action": "move", "x": 74, "y": 290}
|
||||
{"time_stamp": 21028.6088707, "action": "move", "x": 70, "y": 289}
|
||||
{"time_stamp": 21028.6166501, "action": "move", "x": 67, "y": 289}
|
||||
{"time_stamp": 21028.6249259, "action": "move", "x": 66, "y": 289}
|
||||
{"time_stamp": 21028.6647889, "action": "move", "x": 66, "y": 289}
|
||||
{"time_stamp": 21028.6728642, "action": "move", "x": 68, "y": 288}
|
||||
{"time_stamp": 21028.6807781, "action": "move", "x": 70, "y": 286}
|
||||
{"time_stamp": 21028.6888295, "action": "move", "x": 74, "y": 285}
|
||||
{"time_stamp": 21028.6971027, "action": "move", "x": 77, "y": 284}
|
||||
{"time_stamp": 21028.7046499, "action": "move", "x": 81, "y": 282}
|
||||
{"time_stamp": 21028.7129405, "action": "move", "x": 86, "y": 281}
|
||||
{"time_stamp": 21028.7205325, "action": "move", "x": 91, "y": 279}
|
||||
{"time_stamp": 21028.7285422, "action": "move", "x": 98, "y": 278}
|
||||
{"time_stamp": 21028.7366509, "action": "move", "x": 104, "y": 275}
|
||||
{"time_stamp": 21028.7448279, "action": "move", "x": 110, "y": 275}
|
||||
{"time_stamp": 21028.7527897, "action": "move", "x": 116, "y": 273}
|
||||
{"time_stamp": 21028.7609718, "action": "move", "x": 120, "y": 272}
|
||||
{"time_stamp": 21028.7688693, "action": "move", "x": 124, "y": 271}
|
||||
{"time_stamp": 21028.7766846, "action": "move", "x": 128, "y": 270}
|
||||
{"time_stamp": 21028.7848371, "action": "move", "x": 131, "y": 270}
|
||||
{"time_stamp": 21028.7927773, "action": "move", "x": 133, "y": 268}
|
||||
{"time_stamp": 21028.8007498, "action": "move", "x": 134, "y": 268}
|
||||
{"time_stamp": 21028.8088143, "action": "move", "x": 136, "y": 268}
|
||||
{"time_stamp": 21028.8168157, "action": "move", "x": 137, "y": 268}
|
||||
{"time_stamp": 21028.8246469, "action": "move", "x": 139, "y": 268}
|
||||
{"time_stamp": 21028.8327817, "action": "move", "x": 140, "y": 268}
|
||||
{"time_stamp": 21028.8408239, "action": "move", "x": 141, "y": 268}
|
||||
{"time_stamp": 21028.8488115, "action": "move", "x": 142, "y": 267}
|
||||
{"time_stamp": 21028.8571578, "action": "move", "x": 143, "y": 267}
|
||||
{"time_stamp": 21028.8646641, "action": "move", "x": 144, "y": 267}
|
||||
{"time_stamp": 21028.8741985, "action": "move", "x": 145, "y": 267}
|
||||
{"time_stamp": 21028.8809717, "action": "move", "x": 146, "y": 267}
|
||||
{"time_stamp": 21028.8888646, "action": "move", "x": 146, "y": 267}
|
||||
{"time_stamp": 21028.961049, "action": "move", "x": 146, "y": 266}
|
||||
{"time_stamp": 21029.0249854, "action": "move", "x": 147, "y": 265}
|
||||
{"time_stamp": 21029.0328138, "action": "move", "x": 147, "y": 264}
|
||||
{"time_stamp": 21029.0407582, "action": "move", "x": 147, "y": 264}
|
||||
{"time_stamp": 21029.0487772, "action": "move", "x": 148, "y": 263}
|
||||
{"time_stamp": 21029.0569372, "action": "move", "x": 148, "y": 263}
|
||||
{"time_stamp": 21029.065073, "action": "move", "x": 149, "y": 262}
|
||||
{"time_stamp": 21029.0729933, "action": "move", "x": 150, "y": 262}
|
||||
{"time_stamp": 21029.0888149, "action": "move", "x": 150, "y": 261}
|
||||
{"time_stamp": 21029.0971595, "action": "move", "x": 151, "y": 260}
|
||||
{"time_stamp": 21029.10458, "action": "move", "x": 151, "y": 260}
|
||||
{"time_stamp": 21029.1126284, "action": "move", "x": 151, "y": 260}
|
||||
{"time_stamp": 21029.1208764, "action": "move", "x": 151, "y": 259}
|
||||
{"time_stamp": 21029.1287413, "action": "move", "x": 152, "y": 259}
|
||||
{"time_stamp": 21029.1611214, "action": "move", "x": 152, "y": 259}
|
||||
{"time_stamp": 21029.1614723, "action": "click", "x": 152, "y": 259, "button": "left", "pressed": true}
|
||||
{"time_stamp": 21029.2168134, "action": "move", "x": 152, "y": 259}
|
||||
{"time_stamp": 21029.2248681, "action": "move", "x": 154, "y": 259}
|
||||
{"time_stamp": 21029.2327317, "action": "move", "x": 156, "y": 260}
|
||||
{"time_stamp": 21029.2408222, "action": "move", "x": 158, "y": 262}
|
||||
{"time_stamp": 21029.2487515, "action": "move", "x": 163, "y": 263}
|
||||
{"time_stamp": 21029.2568152, "action": "move", "x": 169, "y": 266}
|
||||
{"time_stamp": 21029.2649126, "action": "move", "x": 174, "y": 270}
|
||||
{"time_stamp": 21029.2727425, "action": "move", "x": 183, "y": 273}
|
||||
{"time_stamp": 21029.2807226, "action": "move", "x": 190, "y": 276}
|
||||
{"time_stamp": 21029.2887741, "action": "move", "x": 200, "y": 279}
|
||||
{"time_stamp": 21029.296883, "action": "move", "x": 209, "y": 282}
|
||||
{"time_stamp": 21029.304834, "action": "move", "x": 220, "y": 285}
|
||||
{"time_stamp": 21029.3131548, "action": "move", "x": 233, "y": 287}
|
||||
{"time_stamp": 21029.3207916, "action": "move", "x": 244, "y": 290}
|
||||
{"time_stamp": 21029.3290871, "action": "move", "x": 256, "y": 292}
|
||||
{"time_stamp": 21029.3366508, "action": "move", "x": 268, "y": 293}
|
||||
{"time_stamp": 21029.3445108, "action": "move", "x": 279, "y": 294}
|
||||
{"time_stamp": 21029.3529213, "action": "move", "x": 288, "y": 297}
|
||||
{"time_stamp": 21029.3607282, "action": "move", "x": 298, "y": 297}
|
||||
{"time_stamp": 21029.3691604, "action": "move", "x": 307, "y": 297}
|
||||
{"time_stamp": 21029.3769931, "action": "move", "x": 316, "y": 298}
|
||||
{"time_stamp": 21029.3850192, "action": "move", "x": 324, "y": 300}
|
||||
{"time_stamp": 21029.3927881, "action": "move", "x": 331, "y": 301}
|
||||
{"time_stamp": 21029.4007925, "action": "move", "x": 336, "y": 302}
|
||||
{"time_stamp": 21029.4088638, "action": "move", "x": 342, "y": 304}
|
||||
{"time_stamp": 21029.4167924, "action": "move", "x": 346, "y": 304}
|
||||
{"time_stamp": 21029.4251047, "action": "move", "x": 349, "y": 304}
|
||||
{"time_stamp": 21029.4328699, "action": "move", "x": 352, "y": 306}
|
||||
{"time_stamp": 21029.4409293, "action": "move", "x": 355, "y": 306}
|
||||
{"time_stamp": 21029.4487136, "action": "move", "x": 356, "y": 307}
|
||||
{"time_stamp": 21029.4568755, "action": "move", "x": 358, "y": 308}
|
||||
{"time_stamp": 21029.4647053, "action": "move", "x": 361, "y": 309}
|
||||
{"time_stamp": 21029.4728173, "action": "move", "x": 363, "y": 310}
|
||||
{"time_stamp": 21029.4806011, "action": "move", "x": 365, "y": 311}
|
||||
{"time_stamp": 21029.4889321, "action": "move", "x": 367, "y": 312}
|
||||
{"time_stamp": 21029.4967544, "action": "move", "x": 370, "y": 313}
|
||||
{"time_stamp": 21029.5049087, "action": "move", "x": 374, "y": 314}
|
||||
{"time_stamp": 21029.5129759, "action": "move", "x": 377, "y": 316}
|
||||
{"time_stamp": 21029.5210278, "action": "move", "x": 381, "y": 317}
|
||||
{"time_stamp": 21029.5286154, "action": "move", "x": 386, "y": 317}
|
||||
{"time_stamp": 21029.5371491, "action": "move", "x": 390, "y": 318}
|
||||
{"time_stamp": 21029.5449815, "action": "move", "x": 393, "y": 319}
|
||||
{"time_stamp": 21029.5526305, "action": "move", "x": 397, "y": 319}
|
||||
{"time_stamp": 21029.5604721, "action": "move", "x": 400, "y": 319}
|
||||
{"time_stamp": 21029.5690371, "action": "move", "x": 402, "y": 319}
|
||||
{"time_stamp": 21029.5772927, "action": "move", "x": 405, "y": 319}
|
||||
{"time_stamp": 21029.5846161, "action": "move", "x": 406, "y": 319}
|
||||
{"time_stamp": 21029.5928399, "action": "move", "x": 407, "y": 319}
|
||||
{"time_stamp": 21029.6007032, "action": "move", "x": 408, "y": 319}
|
||||
{"time_stamp": 21029.609118, "action": "move", "x": 409, "y": 319}
|
||||
{"time_stamp": 21029.6166036, "action": "move", "x": 411, "y": 320}
|
||||
{"time_stamp": 21029.6249215, "action": "move", "x": 412, "y": 320}
|
||||
{"time_stamp": 21029.6327262, "action": "move", "x": 414, "y": 320}
|
||||
{"time_stamp": 21029.6408018, "action": "move", "x": 415, "y": 320}
|
||||
{"time_stamp": 21029.649463, "action": "move", "x": 418, "y": 320}
|
||||
{"time_stamp": 21029.6575693, "action": "move", "x": 420, "y": 320}
|
||||
{"time_stamp": 21029.6650956, "action": "move", "x": 423, "y": 320}
|
||||
{"time_stamp": 21029.6729346, "action": "move", "x": 426, "y": 320}
|
||||
{"time_stamp": 21029.6808747, "action": "move", "x": 429, "y": 320}
|
||||
{"time_stamp": 21029.688616, "action": "move", "x": 432, "y": 320}
|
||||
{"time_stamp": 21029.6970675, "action": "move", "x": 435, "y": 320}
|
||||
{"time_stamp": 21029.7049324, "action": "move", "x": 438, "y": 320}
|
||||
{"time_stamp": 21029.7130458, "action": "move", "x": 439, "y": 320}
|
||||
{"time_stamp": 21029.7207522, "action": "move", "x": 440, "y": 320}
|
||||
{"time_stamp": 21029.7289775, "action": "move", "x": 442, "y": 320}
|
||||
{"time_stamp": 21029.7366577, "action": "move", "x": 443, "y": 320}
|
||||
{"time_stamp": 21029.7444825, "action": "move", "x": 445, "y": 320}
|
||||
{"time_stamp": 21029.7526551, "action": "move", "x": 447, "y": 320}
|
||||
{"time_stamp": 21029.7604951, "action": "move", "x": 448, "y": 320}
|
||||
{"time_stamp": 21029.7686569, "action": "move", "x": 450, "y": 319}
|
||||
{"time_stamp": 21029.7775496, "action": "move", "x": 451, "y": 319}
|
||||
{"time_stamp": 21029.7849685, "action": "move", "x": 451, "y": 319}
|
||||
{"time_stamp": 21029.7929356, "action": "move", "x": 452, "y": 319}
|
||||
{"time_stamp": 21029.8007005, "action": "move", "x": 452, "y": 319}
|
||||
{"time_stamp": 21029.8170717, "action": "move", "x": 453, "y": 319}
|
||||
{"time_stamp": 21029.8248574, "action": "move", "x": 453, "y": 318}
|
||||
{"time_stamp": 21029.8330359, "action": "move", "x": 454, "y": 318}
|
||||
{"time_stamp": 21029.8407804, "action": "move", "x": 454, "y": 318}
|
||||
{"time_stamp": 21029.8487615, "action": "move", "x": 455, "y": 318}
|
||||
{"time_stamp": 21029.8648369, "action": "move", "x": 455, "y": 318}
|
||||
{"time_stamp": 21029.8726477, "action": "move", "x": 456, "y": 318}
|
||||
{"time_stamp": 21029.8809607, "action": "move", "x": 457, "y": 317}
|
||||
{"time_stamp": 21029.8888473, "action": "move", "x": 457, "y": 317}
|
||||
{"time_stamp": 21029.9048933, "action": "move", "x": 458, "y": 317}
|
||||
{"time_stamp": 21029.9129577, "action": "move", "x": 458, "y": 317}
|
||||
{"time_stamp": 21029.9208533, "action": "move", "x": 459, "y": 317}
|
||||
{"time_stamp": 21029.9286645, "action": "move", "x": 459, "y": 317}
|
||||
{"time_stamp": 21029.9368461, "action": "move", "x": 461, "y": 317}
|
||||
{"time_stamp": 21029.9448712, "action": "move", "x": 461, "y": 317}
|
||||
{"time_stamp": 21029.953212, "action": "move", "x": 462, "y": 317}
|
||||
{"time_stamp": 21029.9608238, "action": "move", "x": 463, "y": 317}
|
||||
{"time_stamp": 21029.9686821, "action": "move", "x": 463, "y": 317}
|
||||
{"time_stamp": 21029.9768342, "action": "move", "x": 464, "y": 317}
|
||||
{"time_stamp": 21030.361149, "action": "move", "x": 464, "y": 317}
|
||||
{"time_stamp": 21030.3613383, "action": "click", "x": 464, "y": 317, "button": "left", "pressed": false}
|
||||
{"time_stamp": 21030.9690893, "action": "move", "x": 465, "y": 317}
|
||||
{"time_stamp": 21030.9770331, "action": "move", "x": 465, "y": 317}
|
||||
{"time_stamp": 21030.9933165, "action": "move", "x": 466, "y": 317}
|
||||
{"time_stamp": 21031.8410512, "action": "press", "name": "alt_l"}
|
||||
{"time_stamp": 21032.1375784, "action": "press", "name": "="}
|
||||
{"time_stamp": 21032.2331653, "action": "release", "name": "="}
|
||||
{"time_stamp": 21032.4009051, "action": "release", "name": "alt_l"}
|
||||
{"time_stamp": 21033.1212821, "action": "move", "x": 466, "y": 317}
|
||||
{"time_stamp": 21033.1289659, "action": "move", "x": 467, "y": 320}
|
||||
{"time_stamp": 21033.1370348, "action": "move", "x": 471, "y": 325}
|
||||
{"time_stamp": 21033.1456134, "action": "move", "x": 475, "y": 332}
|
||||
{"time_stamp": 21033.1531721, "action": "move", "x": 482, "y": 340}
|
||||
{"time_stamp": 21033.1605014, "action": "move", "x": 490, "y": 349}
|
||||
{"time_stamp": 21033.1692663, "action": "move", "x": 498, "y": 359}
|
||||
{"time_stamp": 21033.1771117, "action": "move", "x": 508, "y": 371}
|
||||
{"time_stamp": 21033.1850449, "action": "move", "x": 521, "y": 383}
|
||||
{"time_stamp": 21033.1929826, "action": "move", "x": 535, "y": 399}
|
||||
{"time_stamp": 21033.201192, "action": "move", "x": 546, "y": 415}
|
||||
{"time_stamp": 21033.2089185, "action": "move", "x": 555, "y": 434}
|
||||
{"time_stamp": 21033.216848, "action": "move", "x": 563, "y": 452}
|
||||
{"time_stamp": 21033.2246769, "action": "move", "x": 570, "y": 469}
|
||||
{"time_stamp": 21033.2328685, "action": "move", "x": 574, "y": 485}
|
||||
{"time_stamp": 21033.2407514, "action": "move", "x": 577, "y": 503}
|
||||
{"time_stamp": 21033.2488102, "action": "move", "x": 578, "y": 518}
|
||||
{"time_stamp": 21033.2569003, "action": "move", "x": 578, "y": 534}
|
||||
{"time_stamp": 21033.2654896, "action": "move", "x": 580, "y": 552}
|
||||
{"time_stamp": 21033.2730147, "action": "move", "x": 580, "y": 571}
|
||||
{"time_stamp": 21033.2808888, "action": "move", "x": 582, "y": 592}
|
||||
{"time_stamp": 21033.2890461, "action": "move", "x": 583, "y": 617}
|
||||
{"time_stamp": 21033.2968868, "action": "move", "x": 586, "y": 643}
|
||||
{"time_stamp": 21033.3050093, "action": "move", "x": 588, "y": 665}
|
||||
{"time_stamp": 21033.3129685, "action": "move", "x": 591, "y": 694}
|
||||
{"time_stamp": 21033.3210515, "action": "move", "x": 592, "y": 716}
|
||||
{"time_stamp": 21033.3289082, "action": "move", "x": 594, "y": 735}
|
||||
{"time_stamp": 21033.3368274, "action": "move", "x": 598, "y": 751}
|
||||
{"time_stamp": 21033.3446464, "action": "move", "x": 601, "y": 761}
|
||||
{"time_stamp": 21033.3532343, "action": "move", "x": 604, "y": 773}
|
||||
{"time_stamp": 21033.3607161, "action": "move", "x": 606, "y": 783}
|
||||
{"time_stamp": 21033.3687129, "action": "move", "x": 608, "y": 794}
|
||||
{"time_stamp": 21033.3769088, "action": "move", "x": 611, "y": 804}
|
||||
{"time_stamp": 21033.3846615, "action": "move", "x": 614, "y": 816}
|
||||
{"time_stamp": 21033.3927661, "action": "move", "x": 617, "y": 826}
|
||||
{"time_stamp": 21033.4008999, "action": "move", "x": 619, "y": 837}
|
||||
{"time_stamp": 21033.408732, "action": "move", "x": 621, "y": 846}
|
||||
{"time_stamp": 21033.4169038, "action": "move", "x": 623, "y": 856}
|
||||
{"time_stamp": 21033.4250181, "action": "move", "x": 623, "y": 865}
|
||||
{"time_stamp": 21033.4329144, "action": "move", "x": 624, "y": 875}
|
||||
{"time_stamp": 21033.4410593, "action": "move", "x": 624, "y": 883}
|
||||
{"time_stamp": 21033.448994, "action": "move", "x": 626, "y": 891}
|
||||
{"time_stamp": 21033.4570193, "action": "move", "x": 626, "y": 899}
|
||||
{"time_stamp": 21033.4648038, "action": "move", "x": 627, "y": 906}
|
||||
{"time_stamp": 21033.4730101, "action": "move", "x": 628, "y": 913}
|
||||
{"time_stamp": 21033.4815421, "action": "move", "x": 631, "y": 920}
|
||||
{"time_stamp": 21033.4891275, "action": "move", "x": 635, "y": 926}
|
||||
{"time_stamp": 21033.4970011, "action": "move", "x": 639, "y": 930}
|
||||
{"time_stamp": 21033.5047772, "action": "move", "x": 647, "y": 935}
|
||||
{"time_stamp": 21033.5132552, "action": "move", "x": 653, "y": 939}
|
||||
{"time_stamp": 21033.5211245, "action": "move", "x": 659, "y": 943}
|
||||
{"time_stamp": 21033.5292347, "action": "move", "x": 665, "y": 947}
|
||||
{"time_stamp": 21033.5373088, "action": "move", "x": 671, "y": 950}
|
||||
{"time_stamp": 21033.5447875, "action": "move", "x": 677, "y": 955}
|
||||
{"time_stamp": 21033.5529495, "action": "move", "x": 684, "y": 960}
|
||||
{"time_stamp": 21033.5609559, "action": "move", "x": 690, "y": 965}
|
||||
{"time_stamp": 21033.5689335, "action": "move", "x": 696, "y": 971}
|
||||
{"time_stamp": 21033.5768783, "action": "move", "x": 700, "y": 977}
|
||||
{"time_stamp": 21033.5846548, "action": "move", "x": 703, "y": 981}
|
||||
{"time_stamp": 21033.5931357, "action": "move", "x": 705, "y": 985}
|
||||
{"time_stamp": 21033.6009205, "action": "move", "x": 707, "y": 988}
|
||||
{"time_stamp": 21033.6088781, "action": "move", "x": 708, "y": 991}
|
||||
{"time_stamp": 21033.6169713, "action": "move", "x": 709, "y": 994}
|
||||
{"time_stamp": 21033.6249134, "action": "move", "x": 709, "y": 997}
|
||||
{"time_stamp": 21033.6328882, "action": "move", "x": 710, "y": 999}
|
||||
{"time_stamp": 21033.6412016, "action": "move", "x": 711, "y": 1003}
|
||||
{"time_stamp": 21033.648939, "action": "move", "x": 711, "y": 1007}
|
||||
{"time_stamp": 21033.6572201, "action": "move", "x": 713, "y": 1010}
|
||||
{"time_stamp": 21033.6647348, "action": "move", "x": 715, "y": 1013}
|
||||
{"time_stamp": 21033.6730325, "action": "move", "x": 716, "y": 1017}
|
||||
{"time_stamp": 21033.6810552, "action": "move", "x": 717, "y": 1021}
|
||||
{"time_stamp": 21033.6890871, "action": "move", "x": 719, "y": 1024}
|
||||
{"time_stamp": 21033.6969594, "action": "move", "x": 720, "y": 1026}
|
||||
{"time_stamp": 21033.7048284, "action": "move", "x": 720, "y": 1028}
|
||||
{"time_stamp": 21033.7126425, "action": "move", "x": 720, "y": 1028}
|
||||
{"time_stamp": 21033.7610156, "action": "move", "x": 720, "y": 1029}
|
||||
{"time_stamp": 21033.7693689, "action": "move", "x": 720, "y": 1029}
|
||||
{"time_stamp": 21033.7772628, "action": "move", "x": 720, "y": 1030}
|
||||
{"time_stamp": 21033.7847737, "action": "move", "x": 720, "y": 1031}
|
||||
{"time_stamp": 21033.7929223, "action": "move", "x": 719, "y": 1031}
|
||||
{"time_stamp": 21033.801029, "action": "move", "x": 719, "y": 1032}
|
||||
{"time_stamp": 21033.808944, "action": "move", "x": 718, "y": 1033}
|
||||
{"time_stamp": 21033.8169394, "action": "move", "x": 717, "y": 1035}
|
||||
{"time_stamp": 21033.8248771, "action": "move", "x": 716, "y": 1035}
|
||||
{"time_stamp": 21033.8334548, "action": "move", "x": 716, "y": 1036}
|
||||
{"time_stamp": 21033.8410779, "action": "move", "x": 715, "y": 1037}
|
||||
{"time_stamp": 21033.8486117, "action": "move", "x": 715, "y": 1039}
|
||||
{"time_stamp": 21033.8568906, "action": "move", "x": 713, "y": 1039}
|
||||
{"time_stamp": 21033.8649249, "action": "move", "x": 712, "y": 1040}
|
||||
{"time_stamp": 21033.8729566, "action": "move", "x": 712, "y": 1042}
|
||||
{"time_stamp": 21033.8810286, "action": "move", "x": 711, "y": 1043}
|
||||
{"time_stamp": 21033.8888454, "action": "move", "x": 711, "y": 1044}
|
||||
{"time_stamp": 21033.8970736, "action": "move", "x": 709, "y": 1045}
|
||||
{"time_stamp": 21033.9051884, "action": "move", "x": 709, "y": 1046}
|
||||
{"time_stamp": 21033.91297, "action": "move", "x": 709, "y": 1047}
|
||||
{"time_stamp": 21033.9210518, "action": "move", "x": 709, "y": 1047}
|
||||
{"time_stamp": 21033.9770341, "action": "move", "x": 709, "y": 1047}
|
||||
{"time_stamp": 21033.9932821, "action": "move", "x": 709, "y": 1047}
|
||||
{"time_stamp": 21033.9933595, "action": "click", "x": 709, "y": 1047, "button": "left", "pressed": true}
|
||||
{"time_stamp": 21034.0734669, "action": "move", "x": 709, "y": 1047}
|
||||
{"time_stamp": 21034.0737272, "action": "click", "x": 709, "y": 1047, "button": "left", "pressed": false}
|
||||
{"time_stamp": 21034.1450402, "action": "move", "x": 709, "y": 1047}
|
||||
{"time_stamp": 21034.1608305, "action": "move", "x": 709, "y": 1047}
|
||||
{"time_stamp": 21034.1690642, "action": "move", "x": 709, "y": 1046}
|
||||
{"time_stamp": 21034.1770086, "action": "move", "x": 709, "y": 1045}
|
||||
{"time_stamp": 21034.1849649, "action": "move", "x": 709, "y": 1044}
|
||||
{"time_stamp": 21034.1927171, "action": "move", "x": 709, "y": 1043}
|
||||
{"time_stamp": 21034.2008052, "action": "move", "x": 709, "y": 1040}
|
||||
{"time_stamp": 21034.2088854, "action": "move", "x": 709, "y": 1038}
|
||||
{"time_stamp": 21034.2167939, "action": "move", "x": 709, "y": 1034}
|
||||
{"time_stamp": 21034.224882, "action": "move", "x": 709, "y": 1029}
|
||||
{"time_stamp": 21034.2327267, "action": "move", "x": 711, "y": 1023}
|
||||
{"time_stamp": 21034.2408131, "action": "move", "x": 711, "y": 1016}
|
||||
{"time_stamp": 21034.2502186, "action": "move", "x": 712, "y": 1005}
|
||||
{"time_stamp": 21034.256732, "action": "move", "x": 713, "y": 991}
|
||||
{"time_stamp": 21034.2646169, "action": "move", "x": 716, "y": 976}
|
||||
{"time_stamp": 21034.2729272, "action": "move", "x": 719, "y": 955}
|
||||
{"time_stamp": 21034.2813953, "action": "move", "x": 722, "y": 929}
|
||||
{"time_stamp": 21034.2889074, "action": "move", "x": 723, "y": 899}
|
||||
{"time_stamp": 21034.2971538, "action": "move", "x": 725, "y": 871}
|
||||
{"time_stamp": 21034.3049341, "action": "move", "x": 727, "y": 838}
|
||||
{"time_stamp": 21034.3130394, "action": "move", "x": 727, "y": 805}
|
||||
{"time_stamp": 21034.3208269, "action": "move", "x": 728, "y": 771}
|
||||
{"time_stamp": 21034.3289492, "action": "move", "x": 728, "y": 742}
|
||||
{"time_stamp": 21034.3367866, "action": "move", "x": 728, "y": 714}
|
||||
{"time_stamp": 21034.3446895, "action": "move", "x": 728, "y": 686}
|
||||
{"time_stamp": 21034.3528319, "action": "move", "x": 728, "y": 662}
|
||||
{"time_stamp": 21034.3606113, "action": "move", "x": 728, "y": 643}
|
||||
{"time_stamp": 21034.3686987, "action": "move", "x": 727, "y": 620}
|
||||
{"time_stamp": 21034.3766536, "action": "move", "x": 725, "y": 605}
|
||||
{"time_stamp": 21034.3847084, "action": "move", "x": 722, "y": 589}
|
||||
{"time_stamp": 21034.3930586, "action": "move", "x": 719, "y": 576}
|
||||
{"time_stamp": 21034.4009346, "action": "move", "x": 716, "y": 565}
|
||||
{"time_stamp": 21034.4090089, "action": "move", "x": 712, "y": 554}
|
||||
{"time_stamp": 21034.416996, "action": "move", "x": 710, "y": 544}
|
||||
{"time_stamp": 21034.4246653, "action": "move", "x": 708, "y": 536}
|
||||
{"time_stamp": 21034.4331124, "action": "move", "x": 707, "y": 527}
|
||||
{"time_stamp": 21034.4410156, "action": "move", "x": 706, "y": 519}
|
||||
{"time_stamp": 21034.4488925, "action": "move", "x": 705, "y": 509}
|
||||
{"time_stamp": 21034.4568042, "action": "move", "x": 705, "y": 500}
|
||||
{"time_stamp": 21034.4650783, "action": "move", "x": 704, "y": 492}
|
||||
{"time_stamp": 21034.472962, "action": "move", "x": 703, "y": 483}
|
||||
{"time_stamp": 21034.4809251, "action": "move", "x": 703, "y": 475}
|
||||
{"time_stamp": 21034.4889399, "action": "move", "x": 703, "y": 467}
|
||||
{"time_stamp": 21034.4968154, "action": "move", "x": 703, "y": 460}
|
||||
{"time_stamp": 21034.505111, "action": "move", "x": 703, "y": 454}
|
||||
{"time_stamp": 21034.5128327, "action": "move", "x": 703, "y": 446}
|
||||
{"time_stamp": 21034.5211697, "action": "move", "x": 704, "y": 439}
|
||||
{"time_stamp": 21034.5291453, "action": "move", "x": 704, "y": 432}
|
||||
{"time_stamp": 21034.53683, "action": "move", "x": 704, "y": 428}
|
||||
{"time_stamp": 21034.5453754, "action": "move", "x": 705, "y": 423}
|
||||
{"time_stamp": 21034.5531997, "action": "move", "x": 705, "y": 419}
|
||||
{"time_stamp": 21034.5610828, "action": "move", "x": 705, "y": 417}
|
||||
{"time_stamp": 21034.568917, "action": "move", "x": 705, "y": 414}
|
||||
{"time_stamp": 21034.5768693, "action": "move", "x": 705, "y": 412}
|
||||
{"time_stamp": 21034.5849601, "action": "move", "x": 706, "y": 409}
|
||||
{"time_stamp": 21034.5930116, "action": "move", "x": 706, "y": 406}
|
||||
{"time_stamp": 21034.6006017, "action": "move", "x": 706, "y": 404}
|
||||
{"time_stamp": 21034.6086777, "action": "move", "x": 706, "y": 402}
|
||||
{"time_stamp": 21034.6167229, "action": "move", "x": 706, "y": 400}
|
||||
{"time_stamp": 21034.6251342, "action": "move", "x": 706, "y": 398}
|
||||
{"time_stamp": 21034.6325694, "action": "move", "x": 706, "y": 396}
|
||||
{"time_stamp": 21034.6407476, "action": "move", "x": 706, "y": 393}
|
||||
{"time_stamp": 21034.6489079, "action": "move", "x": 707, "y": 390}
|
||||
{"time_stamp": 21034.6567719, "action": "move", "x": 707, "y": 388}
|
||||
{"time_stamp": 21034.6648437, "action": "move", "x": 707, "y": 386}
|
||||
{"time_stamp": 21034.6735978, "action": "move", "x": 707, "y": 383}
|
||||
{"time_stamp": 21034.6808034, "action": "move", "x": 707, "y": 381}
|
||||
{"time_stamp": 21034.6887831, "action": "move", "x": 707, "y": 379}
|
||||
{"time_stamp": 21034.6968931, "action": "move", "x": 707, "y": 377}
|
||||
{"time_stamp": 21034.7048123, "action": "move", "x": 707, "y": 375}
|
||||
{"time_stamp": 21034.7127621, "action": "move", "x": 706, "y": 373}
|
||||
{"time_stamp": 21034.7208214, "action": "move", "x": 706, "y": 372}
|
||||
{"time_stamp": 21034.7289712, "action": "move", "x": 705, "y": 371}
|
||||
{"time_stamp": 21034.7366015, "action": "move", "x": 705, "y": 370}
|
||||
{"time_stamp": 21034.7449792, "action": "move", "x": 705, "y": 369}
|
||||
{"time_stamp": 21034.7528215, "action": "move", "x": 705, "y": 368}
|
||||
{"time_stamp": 21034.7611243, "action": "move", "x": 705, "y": 367}
|
||||
{"time_stamp": 21034.7689338, "action": "move", "x": 705, "y": 366}
|
||||
{"time_stamp": 21034.7768638, "action": "move", "x": 705, "y": 365}
|
||||
{"time_stamp": 21034.7849091, "action": "move", "x": 705, "y": 364}
|
||||
{"time_stamp": 21034.792848, "action": "move", "x": 705, "y": 363}
|
||||
{"time_stamp": 21034.8010344, "action": "move", "x": 705, "y": 362}
|
||||
{"time_stamp": 21034.809155, "action": "move", "x": 704, "y": 362}
|
||||
{"time_stamp": 21034.8166183, "action": "move", "x": 704, "y": 359}
|
||||
{"time_stamp": 21034.8249556, "action": "move", "x": 704, "y": 358}
|
||||
{"time_stamp": 21034.8333238, "action": "move", "x": 704, "y": 356}
|
||||
{"time_stamp": 21034.8410045, "action": "move", "x": 703, "y": 354}
|
||||
{"time_stamp": 21034.8486685, "action": "move", "x": 703, "y": 352}
|
||||
{"time_stamp": 21034.857368, "action": "move", "x": 703, "y": 350}
|
||||
{"time_stamp": 21034.8647224, "action": "move", "x": 703, "y": 347}
|
||||
{"time_stamp": 21034.8730798, "action": "move", "x": 703, "y": 346}
|
||||
{"time_stamp": 21034.8809692, "action": "move", "x": 703, "y": 342}
|
||||
{"time_stamp": 21034.8889165, "action": "move", "x": 703, "y": 341}
|
||||
{"time_stamp": 21034.8969094, "action": "move", "x": 704, "y": 339}
|
||||
{"time_stamp": 21034.9052672, "action": "move", "x": 704, "y": 337}
|
||||
{"time_stamp": 21034.9145868, "action": "move", "x": 704, "y": 335}
|
||||
{"time_stamp": 21034.9208561, "action": "move", "x": 704, "y": 334}
|
||||
{"time_stamp": 21034.928931, "action": "move", "x": 704, "y": 333}
|
||||
{"time_stamp": 21034.9374176, "action": "move", "x": 704, "y": 332}
|
||||
{"time_stamp": 21034.9451258, "action": "move", "x": 704, "y": 330}
|
||||
{"time_stamp": 21034.9528709, "action": "move", "x": 704, "y": 329}
|
||||
{"time_stamp": 21034.9611476, "action": "move", "x": 704, "y": 328}
|
||||
{"time_stamp": 21034.968991, "action": "move", "x": 704, "y": 327}
|
||||
{"time_stamp": 21034.9768394, "action": "move", "x": 705, "y": 325}
|
||||
{"time_stamp": 21034.9848553, "action": "move", "x": 705, "y": 324}
|
||||
{"time_stamp": 21034.993121, "action": "move", "x": 705, "y": 323}
|
||||
{"time_stamp": 21035.0007992, "action": "move", "x": 706, "y": 322}
|
||||
{"time_stamp": 21035.0088762, "action": "move", "x": 707, "y": 320}
|
||||
{"time_stamp": 21035.0166123, "action": "move", "x": 707, "y": 320}
|
||||
{"time_stamp": 21035.0247724, "action": "move", "x": 708, "y": 318}
|
||||
{"time_stamp": 21035.0335071, "action": "move", "x": 708, "y": 317}
|
||||
{"time_stamp": 21035.0411458, "action": "move", "x": 709, "y": 317}
|
||||
{"time_stamp": 21035.0491997, "action": "move", "x": 709, "y": 316}
|
||||
{"time_stamp": 21035.0569637, "action": "move", "x": 711, "y": 314}
|
||||
{"time_stamp": 21035.06496, "action": "move", "x": 711, "y": 313}
|
||||
{"time_stamp": 21035.0726588, "action": "move", "x": 712, "y": 312}
|
||||
{"time_stamp": 21035.0807214, "action": "move", "x": 713, "y": 311}
|
||||
{"time_stamp": 21035.0888078, "action": "move", "x": 713, "y": 309}
|
||||
{"time_stamp": 21035.0972443, "action": "move", "x": 713, "y": 309}
|
||||
{"time_stamp": 21035.1048868, "action": "move", "x": 714, "y": 308}
|
||||
{"time_stamp": 21035.1127551, "action": "move", "x": 715, "y": 307}
|
||||
{"time_stamp": 21035.1208842, "action": "move", "x": 715, "y": 306}
|
||||
{"time_stamp": 21035.1285261, "action": "move", "x": 715, "y": 306}
|
||||
{"time_stamp": 21035.1366862, "action": "move", "x": 715, "y": 305}
|
||||
{"time_stamp": 21035.1446592, "action": "move", "x": 716, "y": 305}
|
||||
{"time_stamp": 21035.1528109, "action": "move", "x": 716, "y": 305}
|
||||
{"time_stamp": 21035.1848109, "action": "move", "x": 716, "y": 304}
|
||||
{"time_stamp": 21035.208994, "action": "move", "x": 717, "y": 304}
|
||||
{"time_stamp": 21035.2571327, "action": "move", "x": 717, "y": 304}
|
||||
{"time_stamp": 21035.2573543, "action": "click", "x": 717, "y": 304, "button": "left", "pressed": true}
|
||||
{"time_stamp": 21035.3377191, "action": "move", "x": 717, "y": 304}
|
||||
{"time_stamp": 21035.3379572, "action": "click", "x": 717, "y": 304, "button": "left", "pressed": false}
|
||||
Reference in New Issue
Block a user