10 Commits
dev ... master

Author SHA1 Message Date
e044c85a04 增加了单帧入侵判断及yoloV10 2025-04-11 17:02:39 +08:00
798c596acc add yolo v10 and modify pipeline 2025-03-28 13:19:54 +08:00
183299c06b systime is modified 2025-03-24 16:52:32 +08:00
0ccfd0151f modify the event pickle file 2024-07-28 19:21:27 +08:00
f14faa323e new updated 2025-03-19 17:39:26 +08:00
9b5b135fa3 20250313 2025-03-13 15:36:29 +08:00
0efe8892f3 1:n modified 2025-02-28 17:55:40 +08:00
b657be729b update one2n.py 2025-02-24 18:56:54 +08:00
64248b1557 pipeline.py 等更新 2025-01-21 18:22:56 +08:00
bfe7bc0fd5 box select in a track and feat simi modify in tracker 2025-01-14 19:00:59 +08:00
580 changed files with 21883 additions and 8200 deletions

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

359
bakeup/pipeline.py Normal file
View File

@ -0,0 +1,359 @@
# -*- coding: utf-8 -*-
"""
Created on Sun Sep 29 08:59:21 2024
@author: ym
"""
import os
# import sys
import cv2
import pickle
import numpy as np
from pathlib import Path
from scipy.spatial.distance import cdist
from track_reid import yolo_resnet_tracker, yolov10_resnet_tracker
from tracking.dotrack.dotracks_back import doBackTracks
from tracking.dotrack.dotracks_front import doFrontTracks
from tracking.utils.drawtracks import plot_frameID_y2, draw_all_trajectories
from utils.getsource import get_image_pairs, get_video_pairs
from tracking.utils.read_data import read_similar
def save_subimgs(imgdict, boxes, spath, ctype, featdict = None):
'''
当前 box 特征和该轨迹前一个 box 特征的相似度,可用于和跟踪序列中的相似度进行比较
'''
boxes = boxes[np.argsort(boxes[:, 7])]
for i in range(len(boxes)):
simi = None
tid, fid, bid = int(boxes[i, 4]), int(boxes[i, 7]), int(boxes[i, 8])
if i>0:
_, fid0, bid0 = int(boxes[i-1, 4]), int(boxes[i-1, 7]), int(boxes[i-1, 8])
if f"{fid0}_{bid0}" in featdict.keys() and f"{fid}_{bid}" in featdict.keys():
feat0 = featdict[f"{fid0}_{bid0}"]
feat1 = featdict[f"{fid}_{bid}"]
simi = 1 - np.maximum(0.0, cdist(feat0[None, :], feat1[None, :], "cosine"))[0][0]
img = imgdict[f"{fid}_{bid}"]
imgpath = spath / f"{ctype}_tid{tid}-{fid}-{bid}.png"
if simi is not None:
imgpath = spath / f"{ctype}_tid{tid}-{fid}-{bid}_sim{simi:.2f}.png"
cv2.imwrite(imgpath, img)
def save_subimgs_1(imgdict, boxes, spath, ctype, simidict = None):
'''
当前 box 特征和该轨迹 smooth_feat 特征的相似度, yolo_resnet_tracker 函数中,
采用该方式记录特征相似度
'''
for i in range(len(boxes)):
tid, fid, bid = int(boxes[i, 4]), int(boxes[i, 7]), int(boxes[i, 8])
key = f"{fid}_{bid}"
img = imgdict[key]
imgpath = spath / f"{ctype}_tid{tid}-{fid}-{bid}.png"
if simidict is not None and key in simidict.keys():
imgpath = spath / f"{ctype}_tid{tid}-{fid}-{bid}_sim{simidict[key]:.2f}.png"
cv2.imwrite(imgpath, img)
def pipeline(
eventpath,
savepath,
SourceType,
weights,
YoloVersion="V5"
):
'''
eventpath: 单个事件的存储路径
'''
optdict = {}
optdict["weights"] = weights
if SourceType == "video":
vpaths = get_video_pairs(eventpath)
elif SourceType == "image":
vpaths = get_image_pairs(eventpath)
event_tracks = []
## 构造购物事件字典
evtname = Path(eventpath).stem
barcode = evtname.split('_')[-1] if len(evtname.split('_'))>=2 \
and len(evtname.split('_')[-1])>=8 \
and evtname.split('_')[-1].isdigit() else ''
'''事件结果存储文件夹'''
if not savepath:
savepath = Path(__file__).resolve().parents[0] / "events_result"
savepath_pipeline = Path(savepath) / Path("Yolos_Tracking") / evtname
"""ShoppingDict pickle 文件保存地址 """
savepath_spdict = Path(savepath) / "ShoppingDict_pkfile"
if not savepath_spdict.exists():
savepath_spdict.mkdir(parents=True, exist_ok=True)
pf_path = Path(savepath_spdict) / Path(str(evtname)+".pickle")
# if pf_path.exists():
# print(f"Pickle file have saved: {evtname}.pickle")
# return
'''====================== 构造 ShoppingDict 模块 ======================='''
ShoppingDict = {"eventPath": eventpath,
"eventName": evtname,
"barcode": barcode,
"eventType": '', # "input", "output", "other"
"frontCamera": {},
"backCamera": {},
"one2n": [] #
}
yrtDict = {}
procpath = Path(eventpath).joinpath('process.data')
if procpath.is_file():
SimiDict = read_similar(procpath)
ShoppingDict["one2n"] = SimiDict['one2n']
for vpath in vpaths:
'''================= 1. 构造相机事件字典 ================='''
CameraEvent = {"cameraType": '', # "front", "back"
"videoPath": '',
"imagePaths": [],
"yoloResnetTracker": [],
"tracking": [],
}
if isinstance(vpath, list):
CameraEvent["imagePaths"] = vpath
bname = os.path.basename(vpath[0])
if not isinstance(vpath, list):
CameraEvent["videoPath"] = vpath
bname = os.path.basename(vpath).split('.')[0]
if bname.split('_')[0] == "0" or bname.find('back')>=0:
CameraEvent["cameraType"] = "back"
if bname.split('_')[0] == "1" or bname.find('front')>=0:
CameraEvent["cameraType"] = "front"
'''================= 2. 事件结果存储文件夹 ================='''
if isinstance(vpath, list):
savepath_pipeline_imgs = savepath_pipeline / Path("images")
else:
savepath_pipeline_imgs = savepath_pipeline / Path(str(Path(vpath).stem))
if not savepath_pipeline_imgs.exists():
savepath_pipeline_imgs.mkdir(parents=True, exist_ok=True)
savepath_pipeline_subimgs = savepath_pipeline / Path("subimgs")
if not savepath_pipeline_subimgs.exists():
savepath_pipeline_subimgs.mkdir(parents=True, exist_ok=True)
'''================= 3. Yolo + Resnet + Tracker ================='''
optdict["source"] = vpath
optdict["save_dir"] = savepath_pipeline_imgs
optdict["is_save_img"] = True
optdict["is_save_video"] = True
if YoloVersion == "V5":
yrtOut = yolo_resnet_tracker(**optdict)
elif YoloVersion == "V10":
yrtOut = yolov10_resnet_tracker(**optdict)
yrtOut_save = []
for frdict in yrtOut:
fr_dict = {}
for k, v in frdict.items():
if k != "imgs":
fr_dict[k]=v
yrtOut_save.append(fr_dict)
CameraEvent["yoloResnetTracker"] = yrtOut_save
# CameraEvent["yoloResnetTracker"] = yrtOut
'''================= 4. tracking ================='''
'''(1) 生成用于 tracking 模块的 boxes、feats'''
bboxes = np.empty((0, 6), dtype=np.float64)
trackerboxes = np.empty((0, 9), dtype=np.float64)
trackefeats = {}
for frameDict in yrtOut:
tboxes = frameDict["tboxes"]
ffeats = frameDict["feats"]
boxes = frameDict["bboxes"]
bboxes = np.concatenate((bboxes, np.array(boxes)), axis=0)
trackerboxes = np.concatenate((trackerboxes, np.array(tboxes)), axis=0)
for i in range(len(tboxes)):
fid, bid = int(tboxes[i, 7]), int(tboxes[i, 8])
trackefeats.update({f"{fid}_{bid}": ffeats[f"{fid}_{bid}"]})
'''(2) tracking, 后摄'''
if CameraEvent["cameraType"] == "back":
vts = doBackTracks(trackerboxes, trackefeats)
vts.classify()
event_tracks.append(("back", vts))
CameraEvent["tracking"] = vts
ShoppingDict["backCamera"] = CameraEvent
yrtDict["backyrt"] = yrtOut
'''(2) tracking, 前摄'''
if CameraEvent["cameraType"] == "front":
vts = doFrontTracks(trackerboxes, trackefeats)
vts.classify()
event_tracks.append(("front", vts))
CameraEvent["tracking"] = vts
ShoppingDict["frontCamera"] = CameraEvent
yrtDict["frontyrt"] = yrtOut
'''========================== 保存模块 ================================='''
'''(1) 保存 ShoppingDict 事件'''
with open(str(pf_path), 'wb') as f:
pickle.dump(ShoppingDict, f)
'''(2) 保存 Tracking 输出的运动轨迹子图,并记录相似度'''
for CamerType, vts in event_tracks:
if len(vts.tracks)==0: continue
if CamerType == 'front':
# yolos = ShoppingDict["frontCamera"]["yoloResnetTracker"]
yolos = yrtDict["frontyrt"]
ctype = 1
if CamerType == 'back':
# yolos = ShoppingDict["backCamera"]["yoloResnetTracker"]
yolos = yrtDict["backyrt"]
ctype = 0
imgdict, featdict, simidict = {}, {}, {}
for y in yolos:
imgdict.update(y["imgs"])
featdict.update(y["feats"])
simidict.update(y["featsimi"])
for track in vts.Residual:
if isinstance(track, np.ndarray):
save_subimgs(imgdict, track, savepath_pipeline_subimgs, ctype, featdict)
else:
save_subimgs(imgdict, track.slt_boxes, savepath_pipeline_subimgs, ctype, featdict)
'''(3) 轨迹显示与保存'''
illus = [None, None]
for CamerType, vts in event_tracks:
if len(vts.tracks)==0: continue
if CamerType == 'front':
edgeline = cv2.imread("./tracking/shopcart/cart_tempt/board_ftmp_line.png")
h, w = edgeline.shape[:2]
# nh, nw = h//2, w//2
# edgeline = cv2.resize(edgeline, (nw, nh), interpolation=cv2.INTER_AREA)
img_tracking = draw_all_trajectories(vts, edgeline, savepath_pipeline, CamerType, draw5p=True)
illus[0] = img_tracking
plt = plot_frameID_y2(vts)
plt.savefig(os.path.join(savepath_pipeline, "front_y2.png"))
if CamerType == 'back':
edgeline = cv2.imread("./tracking/shopcart/cart_tempt/edgeline.png")
h, w = edgeline.shape[:2]
# nh, nw = h//2, w//2
# edgeline = cv2.resize(edgeline, (nw, nh), interpolation=cv2.INTER_AREA)
img_tracking = draw_all_trajectories(vts, edgeline, savepath_pipeline, CamerType, draw5p=True)
illus[1] = img_tracking
illus = [im for im in illus if im is not None]
if len(illus):
img_cat = np.concatenate(illus, axis = 1)
if len(illus)==2:
H, W = img_cat.shape[:2]
cv2.line(img_cat, (int(W/2), 0), (int(W/2), int(H)), (128, 128, 255), 3)
trajpath = os.path.join(savepath_pipeline, "trajectory.png")
cv2.imwrite(trajpath, img_cat)
def execute_pipeline(evtdir = r"D:\datasets\ym\后台数据\unzip",
source_type = "video", # video, image,
save_path = r"D:\work\result_pipeline",
yolo_ver = "V10", # V10, V5
weight_yolo_v5 = r'./ckpts/best_cls10_0906.pt' ,
weight_yolo_v10 = r'./ckpts/best_v10s_width0375_1205.pt',
k=0
):
'''
运行函数 pipeline(),遍历事件文件夹,每个文件夹是一个事件
'''
parmDict = {}
parmDict["SourceType"] = source_type
parmDict["savepath"] = save_path
parmDict["YoloVersion"] = yolo_ver
if parmDict["YoloVersion"] == "V5":
parmDict["weights"] = weight_yolo_v5
elif parmDict["YoloVersion"] == "V10":
parmDict["weights"] = weight_yolo_v10
evtdir = Path(evtdir)
errEvents = []
for item in evtdir.iterdir():
if item.is_dir():
item = evtdir/Path("20250310-175352-741")
parmDict["eventpath"] = item
pipeline(**parmDict)
# try:
# pipeline(**parmDict)
# except Exception as e:
# errEvents.append(str(item))
k+=1
if k==1:
break
errfile = os.path.join(parmDict["savepath"], 'error_events.txt')
with open(errfile, 'w', encoding='utf-8') as f:
for line in errEvents:
f.write(line + '\n')
if __name__ == "__main__":
execute_pipeline()
# spath_v10 = r"D:\work\result_pipeline_v10"
# spath_v5 = r"D:\work\result_pipeline_v5"
# execute_pipeline(save_path=spath_v10, yolo_ver="V10")
# execute_pipeline(save_path=spath_v5, yolo_ver="V5")
datapath = r'/home/wqg/dataset/test_dataset/base_dataset/single_event/source/'
savepath = r'/home/wqg/dataset/pipeline/contrast/single_event_V5'
execute_pipeline(evtdir = datapath,
DataType = "raw", # raw, pkl
kk=1,
source_type = "video", # video, image,
save_path = savepath,
yolo_ver = "V10", # V10, V5
weight_yolo_v5 = r'./ckpts/best_cls10_0906.pt' ,
weight_yolo_v10 = r'./ckpts/best_v10s_width0375_1205.pt',
saveimages = False
)

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -9,17 +9,19 @@ import cv2
import json import json
import numpy as np import numpy as np
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from pathlib import Path
from matplotlib import rcParams from matplotlib import rcParams
from matplotlib.font_manager import FontProperties from matplotlib.font_manager import FontProperties
from scipy.spatial.distance import cdist from scipy.spatial.distance import cdist
from utils.event import ShoppingEvent, save_data from utils.event import ShoppingEvent, save_data
from utils.calsimi import calsimi_vs_stdfeat_new, get_topk_percent, cluster
from utils.tools import get_evtList
import pickle
rcParams['font.sans-serif'] = ['SimHei'] # 用黑体显示中文 rcParams['font.sans-serif'] = ['SimHei'] # 用黑体显示中文
rcParams['axes.unicode_minus'] = False # 正确显示负号 rcParams['axes.unicode_minus'] = False # 正确显示负号
'''*********** USearch ***********''' '''*********** USearch ***********'''
def read_usearch(): def read_usearch():
stdFeaturePath = r"D:\contrast\stdlib\v11_test.json" stdFeaturePath = r"D:\contrast\stdlib\v11_test.json"
@ -35,13 +37,12 @@ def read_usearch():
return stdlib return stdlib
def get_eventlist(): def get_eventlist_errortxt(evtpaths):
''' '''
读取一次测试中的错误事件 读取一次测试中的错误事件
''' '''
evtpaths = r"\\192.168.1.28\share\测试视频数据以及日志\算法全流程测试\202412\images" text1 = "one_2_Small_n_Error.txt"
text1 = "one2n_Error.txt" text2 = "one_2_Big_N_Error.txt"
text2 = "one2SN_Error.txt"
events = [] events = []
text = (text1, text2) text = (text1, text2)
for txt in text: for txt in text:
@ -54,15 +55,15 @@ def get_eventlist():
fpath=os.path.join(evtpaths, line) fpath=os.path.join(evtpaths, line)
events.append(fpath) events.append(fpath)
events = list(set(events)) events = list(set(events))
return events return events
def single_event(): def save_eventdata():
evtpaths = r"/home/wqg/dataset/test_dataset/performence_dataset/"
events = get_eventlist() events = get_eventlist_errortxt(evtpaths)
'''定义当前事件存储地址及生成相应文件件''' '''定义当前事件存储地址及生成相应文件件'''
resultPath = r"\\192.168.1.28\share\测试视频数据以及日志\算法全流程测试\202412\result\single_event" resultPath = r"\\192.168.1.28\share\测试视频数据以及日志\算法全流程测试\202412\result\single_event"
@ -74,120 +75,148 @@ def single_event():
def get_topk_percent(data, k): # def get_topk_percent(data, k):
""" # """
获取数据中最大的 k% 的元素 # 获取数据中最大的 k% 的元素
""" # """
# 将数据转换为 NumPy 数组 # # 将数据转换为 NumPy 数组
if isinstance(data, list): # if isinstance(data, list):
data = np.array(data) # data = np.array(data)
percentile = np.percentile(data, 100-k) # percentile = np.percentile(data, 100-k)
top_k_percent = data[data >= percentile] # top_k_percent = data[data >= percentile]
return top_k_percent # return top_k_percent
def cluster(data, thresh=0.15): # def cluster(data, thresh=0.15):
# data = np.array([0.1, 0.13, 0.7, 0.2, 0.8, 0.52, 0.3, 0.7, 0.85, 0.58]) # # data = np.array([0.1, 0.13, 0.7, 0.2, 0.8, 0.52, 0.3, 0.7, 0.85, 0.58])
# data = np.array([0.1, 0.13, 0.2, 0.3]) # # data = np.array([0.1, 0.13, 0.2, 0.3])
# data = np.array([0.1]) # # data = np.array([0.1])
if isinstance(data, list): # if isinstance(data, list):
data = np.array(data) # data = np.array(data)
data1 = np.sort(data) # data1 = np.sort(data)
cluter, Cluters, = [data1[0]], [] # cluter, Cluters, = [data1[0]], []
for i in range(1, len(data1)): # for i in range(1, len(data1)):
if data1[i] - data1[i-1]< thresh: # if data1[i] - data1[i-1]< thresh:
cluter.append(data1[i]) # cluter.append(data1[i])
else: # else:
Cluters.append(cluter) # Cluters.append(cluter)
cluter = [data1[i]] # cluter = [data1[i]]
Cluters.append(cluter) # Cluters.append(cluter)
clt_center = [] # clt_center = []
for clt in Cluters: # for clt in Cluters:
## 是否应该在此处限制一个聚类中的最小轨迹样本数,应该将该因素放在轨迹分析中 # ## 是否应该在此处限制一个聚类中的最小轨迹样本数,应该将该因素放在轨迹分析中
# if len(clt)>=3: # # if len(clt)>=3:
# clt_center.append(np.mean(clt)) # # clt_center.append(np.mean(clt))
clt_center.append(np.mean(clt)) # clt_center.append(np.mean(clt))
# print(clt_center) # # print(clt_center)
return clt_center # return clt_center
def calc_simil(event, stdfeat): # def calsimi_vs_stdfeat_new(event, stdfeat):
# '''事件与标准库的对比策略
def calsiml(feat1, feat2): # 该比对策略是否可以拓展到事件与事件的比对?
'''轨迹样本和标准特征集样本相似度的选择策略''' # '''
matrix = 1 - cdist(feat1, feat2, 'cosine')
simi_max = []
for i in range(len(matrix)):
sim = np.mean(get_topk_percent(matrix[i, :], 75))
simi_max.append(sim)
cltc_max = cluster(simi_max)
Simi = max(cltc_max)
## cltc_max为空属于编程考虑不周应予以排查解决
# if len(cltc_max):
# Simi = max(cltc_max)
# else:
# Simi = 0 #不应该走到该处
return Simi # def calsiml(feat1, feat2, topkp=75, cluth=0.15):
# '''轨迹样本和标准特征集样本相似度的选择策略'''
# matrix = 1 - cdist(feat1, feat2, 'cosine')
# simi_max = []
# for i in range(len(matrix)):
# sim = np.mean(get_topk_percent(matrix[i, :], topkp))
# simi_max.append(sim)
# cltc_max = cluster(simi_max, cluth)
# Simi = max(cltc_max)
# ## cltc_max为空属于编程考虑不周应予以排查解决
# # if len(cltc_max):
# # Simi = max(cltc_max)
# # else:
# # Simi = 0 #不应该走到该处
front_boxes = np.empty((0, 9), dtype=np.float64) ##和类doTracks兼容 # return Simi
front_feats = np.empty((0, 256), dtype=np.float64) ##和类doTracks兼容
for i in range(len(event.front_boxes)):
front_boxes = np.concatenate((front_boxes, event.front_boxes[i]), axis=0)
front_feats = np.concatenate((front_feats, event.front_feats[i]), axis=0)
back_boxes = np.empty((0, 9), dtype=np.float64) ##和类doTracks兼容
back_feats = np.empty((0, 256), dtype=np.float64) ##和类doTracks兼容
for i in range(len(event.back_boxes)):
back_boxes = np.concatenate((back_boxes, event.back_boxes[i]), axis=0)
back_feats = np.concatenate((back_feats, event.back_feats[i]), axis=0)
if len(front_feats): # front_boxes = np.empty((0, 9), dtype=np.float64) ##和类doTracks兼容
front_simi = calsiml(front_feats, stdfeat) # front_feats = np.empty((0, 256), dtype=np.float64) ##和类doTracks兼容
if len(back_feats): # for i in range(len(event.front_boxes)):
back_simi = calsiml(back_feats, stdfeat) # front_boxes = np.concatenate((front_boxes, event.front_boxes[i]), axis=0)
# front_feats = np.concatenate((front_feats, event.front_feats[i]), axis=0)
'''前后摄相似度融合策略''' # back_boxes = np.empty((0, 9), dtype=np.float64) ##和类doTracks兼容
if len(front_feats) and len(back_feats): # back_feats = np.empty((0, 256), dtype=np.float64) ##和类doTracks兼容
diff_simi = abs(front_simi - back_simi) # for i in range(len(event.back_boxes)):
if diff_simi>0.15: # back_boxes = np.concatenate((back_boxes, event.back_boxes[i]), axis=0)
Similar = max([front_simi, back_simi]) # back_feats = np.concatenate((back_feats, event.back_feats[i]), axis=0)
else:
Similar = (front_simi+back_simi)/2
elif len(front_feats) and len(back_feats)==0:
Similar = front_simi
elif len(front_feats)==0 and len(back_feats):
Similar = back_simi
else:
Similar = None # 在event.front_feats和event.back_feats同时为空时
return Similar # if len(front_feats):
# front_simi = calsiml(front_feats, stdfeat)
# if len(back_feats):
# back_simi = calsiml(back_feats, stdfeat)
# '''前后摄相似度融合策略'''
# if len(front_feats) and len(back_feats):
# diff_simi = abs(front_simi - back_simi)
# if diff_simi>0.15:
# Similar = max([front_simi, back_simi])
# else:
# Similar = (front_simi+back_simi)/2
# elif len(front_feats) and len(back_feats)==0:
# Similar = front_simi
# elif len(front_feats)==0 and len(back_feats):
# Similar = back_simi
# else:
# Similar = None # 在event.front_feats和event.back_feats同时为空时
# return Similar
def simi_matrix(): def simi_matrix():
resultPath = r"\\192.168.1.28\share\测试视频数据以及日志\算法全流程测试\202412\result\single_event" evtpaths = r"/home/wqg/dataset/pipeline/contrast/single_event_V10/evtobjs/"
stdlib = read_usearch() stdfeatPath = r"/home/wqg/dataset/test_dataset/total_barcode/features_json/v11_barcode_0304/"
events = get_eventlist() resultPath = r"/home/wqg/dataset/performence_dataset/result/"
for evtpath in events:
evtname = os.path.basename(evtpath)
_, barcode = evtname.split("_")
# 生成事件与相应标准特征集 evt_paths, bcdSet = get_evtList(evtpaths)
event = ShoppingEvent(evtpath)
stdfeat = stdlib[barcode]
Similar = calc_simil(event, stdfeat) ## read std features
stdDict={}
evtDict = {}
for barcode in bcdSet:
stdpath = os.path.join(stdfeatPath, f"{barcode}.json")
if not os.path.isfile(stdpath):
continue
with open(stdpath, 'r', encoding='utf-8') as f:
stddata = json.load(f)
feat = np.array(stddata["value"])
stdDict[barcode] = feat
for evtpath in evt_paths:
barcode = Path(evtpath).stem.split("_")[-1]
if barcode not in stdDict.keys():
continue
# try:
# with open(evtpath, 'rb') as f:
# evtdata = pickle.load(f)
# except Exception as e:
# print(evtname)
with open(evtpath, 'rb') as f:
event = pickle.load(f)
stdfeat = stdDict[barcode]
Similar = calsimi_vs_stdfeat_new(event, stdfeat)
# 构造 boxes 子图存储路径 # 构造 boxes 子图存储路径
subimgpath = os.path.join(resultPath, f"{event.evtname}", "subimg") subimgpath = os.path.join(resultPath, f"{event.evtname}", "subimg")
@ -197,8 +226,6 @@ def simi_matrix():
if not os.path.exists(histpath): if not os.path.exists(histpath):
os.makedirs(histpath) os.makedirs(histpath)
mean_values, max_values = [], [] mean_values, max_values = [], []
cameras = ('front', 'back') cameras = ('front', 'back')
fig, ax = plt.subplots(2, 3, figsize=(16, 9), dpi=100) fig, ax = plt.subplots(2, 3, figsize=(16, 9), dpi=100)
@ -218,9 +245,9 @@ def simi_matrix():
evtfeat = np.concatenate((evtfeat, event.back_feats[i]), axis=0) evtfeat = np.concatenate((evtfeat, event.back_feats[i]), axis=0)
imgpaths = event.back_imgpaths imgpaths = event.back_imgpaths
assert len(boxes)==len(evtfeat), f"Please check the Event: {evtname}" assert len(boxes)==len(evtfeat), f"Please check the Event: {event.evtname}"
if len(boxes)==0: continue if len(boxes)==0: continue
print(evtname) print(event.evtname)
matrix = 1 - cdist(evtfeat, stdfeat, 'cosine') matrix = 1 - cdist(evtfeat, stdfeat, 'cosine')
simi_1d = matrix.flatten() simi_1d = matrix.flatten()
@ -310,8 +337,8 @@ def simi_matrix():
mean_diff = abs(mean_values[1]-mean_values[0]) mean_diff = abs(mean_values[1]-mean_values[0])
ax[0, 1].set_title(f"mean diff: {mean_diff:.3f}") ax[0, 1].set_title(f"mean diff: {mean_diff:.3f}")
if len(max_values)==2: if len(max_values)==2:
max_values = abs(max_values[1]-max_values[0]) max_diff = abs(max_values[1]-max_values[0])
ax[0, 2].set_title(f"max diff: {max_values:.3f}") ax[0, 2].set_title(f"max diff: {max_diff:.3f}")
try: try:
fig.suptitle(f"Similar: {Similar:.3f}", fontsize=16) fig.suptitle(f"Similar: {Similar:.3f}", fontsize=16)
except Exception as e: except Exception as e:
@ -320,19 +347,14 @@ def simi_matrix():
pltpath = os.path.join(subimgpath, f"hist_max_{kpercent}%_.png") pltpath = os.path.join(subimgpath, f"hist_max_{kpercent}%_.png")
plt.savefig(pltpath) plt.savefig(pltpath)
pltpath1 = os.path.join(histpath, f"{evtname}_.png") pltpath1 = os.path.join(histpath, f"{event.evtname}_.png")
plt.savefig(pltpath1) plt.savefig(pltpath1)
plt.close() plt.close()
def main(): def main():
simi_matrix() simi_matrix()

View File

@ -61,8 +61,9 @@ class Config:
test_val = "D:/比对/cl" test_val = "D:/比对/cl"
# test_val = "./data/test_data_100" # test_val = "./data/test_data_100"
test_model = "checkpoints/best_resnet18_v12.pth" test_model = "checkpoints/best_20250228.pth"
# test_model = "checkpoints/zhanting_res_801.pth" # test_model = "checkpoints/zhanting_res_801.pth"
# test_model = "checkpoints/zhanting_res_abroad_8021.pth"

View File

@ -48,7 +48,7 @@ class FeatsInterface:
modpath = os.path.join(curpath, conf.test_model) modpath = os.path.join(curpath, conf.test_model)
self.model.load_state_dict(torch.load(modpath, map_location=conf.device)) self.model.load_state_dict(torch.load(modpath, map_location=conf.device))
self.model.eval() self.model.eval()
print('load model {} '.format(conf.testbackbone)) # print('load model {} '.format(conf.testbackbone))
def inference(self, images, detections=None): def inference(self, images, detections=None):
''' '''
@ -62,11 +62,21 @@ class FeatsInterface:
patches = [] patches = []
for i, img in enumerate(images): for i, img in enumerate(images):
img = img.copy() img = img.copy()
patch = self.transform(img)
if str(self.device) != "cpu": ## 对 img 进行补黑边生成新的图像new_img
patch = patch.to(device=self.device).half() width, height = img.size
else: new_size = max(width, height)
patch = patch.to(device=self.device) new_img = Image.new("RGB", (new_size, new_size), (0, 0, 0))
paste_x = (new_size - width) // 2
paste_y = (new_size - height) // 2
new_img.paste(img, (paste_x, paste_y))
patch = self.transform(new_img)
patch = patch.to(device=self.device)
# if str(self.device) != "cpu":
# patch = patch.to(device=self.device).half()
# else:
# patch = patch.to(device=self.device)
patches.append(patch) patches.append(patch)
if (i + 1) % self.batch_size == 0: if (i + 1) % self.batch_size == 0:
@ -107,10 +117,12 @@ class FeatsInterface:
patch = self.transform(img1) patch = self.transform(img1)
# patch = patch.to(device=self.device).half() # patch = patch.to(device=self.device).half()
if str(self.device) != "cpu": # if str(self.device) != "cpu":
patch = patch.to(device=self.device).half() # patch = patch.to(device=self.device).half()
else: # patch = patch.to(device=self.device)
patch = patch.to(device=self.device) # else:
# patch = patch.to(device=self.device)
patch = patch.to(device=self.device)
patches.append(patch) patches.append(patch)
if (d + 1) % self.batch_size == 0: if (d + 1) % self.batch_size == 0:

53
contrast/feat_infer.py Normal file
View File

@ -0,0 +1,53 @@
# -*- coding: utf-8 -*-
"""
Created on Fri Feb 28 16:27:17 2025
@author: ym
"""
import os
import time
import pickle
import numpy as np
from PIL import Image
from scipy.spatial.distance import cdist
from feat_extract.config import config as conf
from feat_extract.inference import FeatsInterface #, inference_image
Encoder = FeatsInterface(conf)
def main():
imgpaths = r"D:\全实时\202502\result\Yolos_Tracking\20250228-160049-188_6921168558018_6921168558018\a"
featDict = {}
imgs, imgfiles = [], []
for filename in os.listdir(imgpaths):
file, ext = os.path.splitext(filename)
imgpath = os.path.join(imgpaths, filename)
img = Image.open(imgpath)
imgs.append(img)
imgfiles.append(filename)
feature = Encoder.inference([img])
feature /= np.linalg.norm(feature, axis=1)[:, None]
feature_ft32 = feature.astype(np.float32)
featDict[file] = feature_ft32
feature = Encoder.inference(imgs)
feature /= np.linalg.norm(feature, axis=1)[:, None]
feature_ft32 = feature.astype(np.float32)
matrix = 1 - cdist(feature, feature, 'cosine')
print("do")
if __name__ == '__main__':
main()

View File

@ -38,13 +38,13 @@ def get_std_barcodeDict(bcdpath, savepath, bcdSet):
''' '''
inputs: inputs:
bcdpath: 已清洗的barcode样本图像如果barcode下有'base'文件夹,只选用该文件夹下图像 bcdpath: 已清洗的barcode样本图像如果barcode下有'base'文件夹,只选用该文件夹下图像
(default = r'\\192.168.1.28\share\已标注数据备份\对比数据\barcode\barcode_1771') (default = r'\\\\192.168.1.28\\share\\已标注数据备份\\对比数据\\barcode\\barcode_1771')
功能: 功能:
生成并保存只有一个key值的字典 {barcode: [imgpath1, imgpath1, ...]} 生成并保存只有一个key值的字典 {barcode: [imgpath1, imgpath1, ...]}
savepath: 字典存储地址文件名格式barcode.pickle savepath: 字典存储地址文件名格式barcode.pickle
''' '''
# savepath = r'\\192.168.1.28\share\测试_202406\contrast\std_barcodes' # savepath = r'\\\\192.168.1.28\\share\\测试_202406\\contrast\\std_barcodes'
'''读取数据集中 barcode 列表''' '''读取数据集中 barcode 列表'''
stdBarcodeList = [] stdBarcodeList = []
@ -120,8 +120,7 @@ def stdfeat_infer(imgPath, featPath, bcdSet=None):
# imgPath = r"\\192.168.1.28\share\测试_202406\contrast\std_barcodes" # imgPath = r"\\192.168.1.28\share\测试_202406\contrast\std_barcodes"
# featPath = r"\\192.168.1.28\share\测试_202406\contrast\std_features" # featPath = r"\\192.168.1.28\share\测试_202406\contrast\std_features"
stdBarcodeDict = {}
stdBarcodeDict_ft16 = {}
Encoder = FeatsInterface(conf) Encoder = FeatsInterface(conf)
@ -158,6 +157,8 @@ def stdfeat_infer(imgPath, featPath, bcdSet=None):
feature /= np.linalg.norm(feature, axis=1)[:, None] feature /= np.linalg.norm(feature, axis=1)[:, None]
feature_ft32 = feature.astype(np.float32)
# float16 # float16
feature_ft16 = feature.astype(np.float16) feature_ft16 = feature.astype(np.float16)
feature_ft16 /= np.linalg.norm(feature_ft16, axis=1)[:, None] feature_ft16 /= np.linalg.norm(feature_ft16, axis=1)[:, None]
@ -166,22 +167,20 @@ def stdfeat_infer(imgPath, featPath, bcdSet=None):
# feature_uint8, _ = ft16_to_uint8(feature_ft16) # feature_uint8, _ = ft16_to_uint8(feature_ft16)
feature_uint8 = (feature_ft16*128).astype(np.int8) feature_uint8 = (feature_ft16*128).astype(np.int8)
'''================ 保存单个barcode特征 ================'''
##================== float32
stdbDict["barcode"] = barcode
stdbDict["imgpaths"] = imgpaths
stdbDict["feats_ft32"] = feature_ft32
stdbDict["feats_ft16"] = feature_ft16
stdbDict["feats_uint8"] = feature_uint8
with open(featpath, 'wb') as f:
pickle.dump(stdbDict, f)
except Exception as e: except Exception as e:
print(f"Error accured at: {filename}, with Exception is: {e}") print(f"Error accured at: {filename}, with Exception is: {e}")
'''================ 保存单个barcode特征 ================'''
##================== float32
stdbDict["barcode"] = barcode
stdbDict["imgpaths"] = imgpaths
stdbDict["feats_ft32"] = feature
stdbDict["feats_ft16"] = feature_ft16
stdbDict["feats_uint8"] = feature_uint8
with open(featpath, 'wb') as f:
pickle.dump(stdbDict, f)
stdBarcodeDict[barcode] = feature
stdBarcodeDict_ft16[barcode] = feature_ft16
t2 = time.time() t2 = time.time()
print(f"Barcode: {barcode}, need time: {t2-t1:.1f} secs") print(f"Barcode: {barcode}, need time: {t2-t1:.1f} secs")
@ -192,19 +191,32 @@ def stdfeat_infer(imgPath, featPath, bcdSet=None):
return return
def gen_bcd_features(imgpath, bcdpath, featpath, bcdSet=None): def gen_bcd_features(imgpath, bcdpath, featpath, eventSourcePath):
''' 生成标准特征集 ''' ''' 生成标准特征集 '''
'''1. 提取 imgpath 中样本地址,生成字典{barcode: [imgpath1, imgpath1, ...]} '''1. 提取 imgpath 中样本地址,生成字典{barcode: [imgpath1, imgpath1, ...]}
并存储于: bcdpath, 格式为 barcode.pickle''' 并存储于: bcdpath, 格式为 barcode.pickle'''
bcdList = []
for evtname in os.listdir(eventSourcePath):
bname, ext = os.path.splitext(evtname)
evt = bname.split('_')
if len(evt)>=2 and evt[-1].isdigit() and len(evt[-1])>=10:
bcdList.append(evt[-1])
bcdSet = set(bcdList)
get_std_barcodeDict(imgpath, bcdpath, bcdSet) get_std_barcodeDict(imgpath, bcdpath, bcdSet)
'''2. 特征提取,并保存至文件夹 featpath 中,也根据 bcdSet 交集执行''' '''2. 特征提取,并保存至文件夹 featpath 中,也根据 bcdSet 交集执行'''
stdfeat_infer(bcdpath, featpath, bcdSet) stdfeat_infer(bcdpath, featpath, bcdSet)
def main(): def main():
imgpath = r"\\192.168.1.28\share\数据\已完成数据\展厅数据\v1.0\比对数据\整理\zhantingBase" imgpath = r"\\192.168.1.28\share\数据\已完成数据\展厅数据\v2.0_abroad\比对数据\all_base_二筛"
bcdpath = r"D:\exhibition\dataset\bcdpath" bcdpath = r"D:\exhibition\dataset\bcdpath_abroad"
featpath = r"D:\exhibition\dataset\feats" featpath = r"D:\exhibition\dataset\feats_abroad"
if not os.path.exists(bcdpath):
os.makedirs(bcdpath)
if not os.path.exists(featpath):
os.makedirs(featpath)
gen_bcd_features(imgpath, bcdpath, featpath) gen_bcd_features(imgpath, bcdpath, featpath)

View File

@ -10,46 +10,7 @@ import numpy as np
from pathlib import Path from pathlib import Path
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from scipy.spatial.distance import cdist from scipy.spatial.distance import cdist
from utils.event import ShoppingEvent from utils.tools import init_eventDict
def init_eventdict(sourcePath, stype="data"):
'''stype: str,
'source': 由 videos 或 images 生成的 pickle 文件
'data': 从 data 文件中读取的现场运行数据
'''
k, errEvents = 0, []
for bname in os.listdir(sourcePath):
# bname = r"20241126-135911-bdf91cf9-3e9a-426d-94e8-ddf92238e175_6923555210479"
source_path = os.path.join(sourcePath, bname)
if stype=="data":
pickpath = os.path.join(eventDataPath, f"{bname}.pickle")
if not os.path.isdir(source_path) or os.path.isfile(pickpath):
continue
if stype=="source":
pickpath = os.path.join(eventDataPath, bname)
if not os.path.isfile(source_path) or os.path.isfile(pickpath):
continue
try:
event = ShoppingEvent(source_path, stype)
with open(pickpath, 'wb') as f:
pickle.dump(event, f)
print(bname)
except Exception as e:
errEvents.append(source_path)
print(e)
# k += 1
# if k==1:
# break
errfile = os.path.join(resultPath, 'error_events.txt')
with open(errfile, 'a', encoding='utf-8') as f:
for line in errEvents:
f.write(line + '\n')
def read_eventdict(eventDataPath): def read_eventdict(eventDataPath):
evtDict = {} evtDict = {}
@ -65,37 +26,37 @@ def read_eventdict(eventDataPath):
return evtDict return evtDict
def simi_calc(event, o2nevt, typee=None): def simi_calc(event, o2nevt, pattern, typee=None):
if typee == "11": if pattern==1 or pattern==2:
boxes1 = event.front_boxes if typee == "11":
boxes2 = o2nevt.front_boxes boxes1 = event.front_boxes
boxes2 = o2nevt.front_boxes
feat1 = event.front_feats feat1 = event.front_feats
feat2 = o2nevt.front_feats feat2 = o2nevt.front_feats
if typee == "10": if typee == "10":
boxes1 = event.front_boxes boxes1 = event.front_boxes
boxes2 = o2nevt.back_boxes boxes2 = o2nevt.back_boxes
feat1 = event.front_feats feat1 = event.front_feats
feat2 = o2nevt.back_feats feat2 = o2nevt.back_feats
if typee == "00": if typee == "00":
boxes1 = event.back_boxes boxes1 = event.back_boxes
boxes2 = o2nevt.back_boxes boxes2 = o2nevt.back_boxes
feat1 = event.back_feats feat1 = event.back_feats
feat2 = o2nevt.back_feats feat2 = o2nevt.back_feats
if typee == "01": if typee == "01":
boxes1 = event.back_boxes boxes1 = event.back_boxes
boxes2 = o2nevt.front_boxes boxes2 = o2nevt.front_boxes
feat1 = event.back_feats feat1 = event.back_feats
feat2 = o2nevt.front_feats feat2 = o2nevt.front_feats
'''自定义事件特征选择''' '''自定义事件特征选择'''
if typee==3: if pattern==3 and len(event.feats_compose) and len(o2nevt.feats_compose):
feat1 = event.feats_compose feat1 = [event.feats_compose]
feat2 = o2nevt.feats_compose feat2 = [o2nevt.feats_compose]
if len(feat1) and len(feat2): if len(feat1) and len(feat2):
matrix = 1 - cdist(feat1[0], feat2[0], 'cosine') matrix = 1 - cdist(feat1[0], feat2[0], 'cosine')
@ -109,54 +70,64 @@ def one2n_pr(evtDicts, pattern=1):
''' '''
pattern: pattern:
1: process.data 中记录的相似度 1: process.data 中记录的相似度
2: 根据 process.data 中标记的 type 选择特征计算 2: 根据 process.data 中标记的 type 选择特征组合方式计算相似度
3: 以其它方式选择特征计算 3: 利用 process.data 中的轨迹特征,以其它方式计算相似度
''' '''
tpevents, fnevents, fpevents, tnevents = [], [], [], [] tpevents, fnevents, fpevents, tnevents = [], [], [], []
tpsimi, fnsimi, tnsimi, fpsimi = [], [], [], [] tpsimi, fnsimi, tnsimi, fpsimi = [], [], [], []
errorFile_one2n = [] one2nFile, errorFile_one2n = [], []
errorFile_one2n_ = []
evts_output = []
for evtname, event in evtDicts.items(): for evtname, event in evtDicts.items():
evt_names, evt_barcodes, evt_similars, evt_types = [], [], [], [] evt_names, evt_barcodes, evt_similars, evt_types = [], [], [], []
if len(event.one2n)==0 or len(event.barcode)==0:
continue
evts_output.append(evtname)
for ndict in event.one2n: for ndict in event.one2n:
nname = ndict["event"] nname = ndict["event"]
barcode = ndict["barcode"] barcode = ndict["barcode"]
similar = ndict["similar"] similar = ndict["similar"]
typee = ndict["type"].strip() typee = ndict["type"].strip()
evt_names.append(nname) if len(barcode)==0:
evt_barcodes.append(barcode) continue
evt_types.append(typee) if typee.find(",") >=0:
typee = typee.split(",")[-1]
if pattern==1: if pattern==1:
evt_similars.append(similar) evt_similars.append(similar)
if pattern==2 or pattern==3: if pattern==2 or pattern==3:
o2n_evt = [evt for name, evt in evtDicts.items() if name.find(nname[:15])==0] o2n_evt = [evt for name, evt in evtDicts.items() if name.find(nname[:15])==0]
if len(o2n_evt)==1: if len(o2n_evt)!=1:
o2nevt = o2n_evt[0]
else:
continue continue
if pattern==2: simival = simi_calc(event, o2n_evt[0], pattern, typee)
simival = simi_calc(event, o2nevt, typee)
if pattern==3:
simival = simi_calc(event, o2nevt, typee=pattern)
if simival==None: if simival==None:
continue continue
evt_similars.append(simival) evt_similars.append(simival)
if len(evt_names)==len(evt_barcodes) and len(evt_barcodes)==len(evt_similars) \ evt_names.append(nname)
and len(evt_similars)==len(evt_types) and len(evt_names)>0: evt_barcodes.append(barcode)
evt_types.append(typee)
# if evtname == "20250226-170321-327_6903244678377":
# print("evtname")
## process.data的oneTon的各项中均不包括当前事件的barcode
if event.barcode not in evt_barcodes:
errorFile_one2n.append(evtname)
continue
else:
one2nFile.append(evtname)
if len(evt_names)==len(evt_barcodes)==len(evt_similars)==len(evt_types) and len(evt_names)>0:
# maxsim = evt_similars[evt_similars.index(max(evt_similars))] # maxsim = evt_similars[evt_similars.index(max(evt_similars))]
maxsim = max(evt_similars) maxsim = max(evt_similars)
for i in range(len(evt_names)): for i in range(len(evt_names)):
bcd, simi = evt_barcodes[i], evt_similars[i] bcd, simi = evt_barcodes[i], evt_similars[i]
if bcd==event.barcode and simi==maxsim: if bcd==event.barcode and simi==maxsim:
tpsimi.append(simi) tpsimi.append(simi)
tpevents.append(evtname) tpevents.append(evtname)
@ -170,14 +141,11 @@ def one2n_pr(evtDicts, pattern=1):
fpsimi.append(simi) fpsimi.append(simi)
fpevents.append(evtname) fpevents.append(evtname)
else: else:
errorFile_one2n.append(evtname) errorFile_one2n_.append(evtname)
''' 1:n 数据存储,需根据相似度排序''' ''' 1:n 数据存储,需根据相似度排序'''
PPrecise, PRecall = [], [] PPrecise, PRecall = [], []
NPrecise, NRecall = [], [] NPrecise, NRecall = [], []
Thresh = np.linspace(-0.2, 1, 100) Thresh = np.linspace(-0.2, 1, 100)
for th in Thresh: for th in Thresh:
'''============================= 1:n 计算''' '''============================= 1:n 计算'''
@ -187,9 +155,9 @@ def one2n_pr(evtDicts, pattern=1):
TN = sum(np.array(tnsimi) < th) TN = sum(np.array(tnsimi) < th)
PPrecise.append(TP/(TP+FP+1e-6)) PPrecise.append(TP/(TP+FP+1e-6))
PRecall.append(TP/(len(tpsimi)+len(fnsimi)+1e-6)) PRecall.append(TP/(TP+FN+1e-6))
NPrecise.append(TN/(TN+FN+1e-6)) NPrecise.append(TN/(TN+FN+1e-6))
NRecall.append(TN/(len(tnsimi)+len(fpsimi)+1e-6)) NRecall.append(TN/(TN+FP+1e-6))
'''4. ============================= 1:n 曲线,''' '''4. ============================= 1:n 曲线,'''
@ -200,40 +168,49 @@ def one2n_pr(evtDicts, pattern=1):
ax.plot(Thresh, NRecall, 'c', label='Recall_Neg: TN/TNFN') ax.plot(Thresh, NRecall, 'c', label='Recall_Neg: TN/TNFN')
ax.set_xlim([0, 1]) ax.set_xlim([0, 1])
ax.set_ylim([0, 1]) ax.set_ylim([0, 1])
ax.grid(True)
ax.set_xticks(np.arange(0, 1, 0.1))
ax.set_yticks(np.arange(0, 1, 0.1))
ax.grid(True, linestyle='--')
ax.set_title('1:n Precise & Recall') ax.set_title('1:n Precise & Recall')
ax.set_xlabel(f"Event Num: {len(tpsimi)+len(fnsimi)}") ax.set_xlabel(f"Event Num: {len(one2nFile)}")
ax.legend() ax.legend()
plt.show() plt.show()
## ============================= 1:n 直方图''' ## ============================= 1:n 直方图'''
fig, axes = plt.subplots(2, 2) fig, axes = plt.subplots(2, 2)
axes[0, 0].hist(tpsimi, bins=60, range=(-0.2, 1), edgecolor='black') axes[0, 0].hist(tpsimi, bins=60, range=(-0.2, 1), edgecolor='black')
axes[0, 0].set_xlim([-0.2, 1]) axes[0, 0].set_xlim([-0.2, 1])
axes[0, 0].set_title('TP') axes[0, 0].set_title(f'TP: {len(tpsimi)}')
axes[0, 1].hist(fpsimi, bins=60, range=(-0.2, 1), edgecolor='black') axes[0, 1].hist(fpsimi, bins=60, range=(-0.2, 1), edgecolor='black')
axes[0, 1].set_xlim([-0.2, 1]) axes[0, 1].set_xlim([-0.2, 1])
axes[0, 1].set_title('FP') axes[0, 1].set_title(f'FP: {len(fpsimi)}')
axes[1, 0].hist(tnsimi, bins=60, range=(-0.2, 1), edgecolor='black') axes[1, 0].hist(tnsimi, bins=60, range=(-0.2, 1), edgecolor='black')
axes[1, 0].set_xlim([-0.2, 1]) axes[1, 0].set_xlim([-0.2, 1])
axes[1, 0].set_title('TN') axes[1, 0].set_title(f'TN: {len(tnsimi)}')
axes[1, 1].hist(fnsimi, bins=60, range=(-0.2, 1), edgecolor='black') axes[1, 1].hist(fnsimi, bins=60, range=(-0.2, 1), edgecolor='black')
axes[1, 1].set_xlim([-0.2, 1]) axes[1, 1].set_xlim([-0.2, 1])
axes[1, 1].set_title('FN') axes[1, 1].set_title(f'FN: {len(fnsimi)}')
plt.show() plt.show()
return fpevents return fpevents
def main(): def main():
'''1. 生成事件字典并保存至 eventDataPath, 只需运行一次 ''' '''1. 生成事件字典并保存至 eventDataPath, 只需运行一次 '''
init_eventdict(eventSourcePath, stype="source") init_eventDict(eventSourcePath, eventDataPath, stype="realtime") # 'source', 'data', 'realtime'
# for pfile in os.listdir(eventDataPath):
# evt = os.path.splitext(pfile)[0].split('_')
# cont = len(evt)>=2 and evt[-1].isdigit() and len(evt[-1])>=10
# if not cont:
# continue
'''2. 读取事件字典 ''' '''2. 读取事件字典 '''
evtDicts = read_eventdict(eventDataPath) evtDicts = read_eventdict(eventDataPath)
'''3. 1:n 比对事件评估 ''' '''3. 1:n 比对事件评估 '''
fpevents = one2n_pr(evtDicts, pattern=3) fpevents = one2n_pr(evtDicts, pattern=1)
fpErrFile = str(Path(resultPath).joinpath("one2n_fp_Error.txt")) fpErrFile = str(Path(resultPath).joinpath("one2n_fp_Error.txt"))
with open(fpErrFile, "w") as file: with open(fpErrFile, "w") as file:
@ -243,15 +220,16 @@ def main():
if __name__ == '__main__': if __name__ == '__main__':
eventSourcePath = r"\\192.168.1.28\share\测试视频数据以及日志\算法全流程测试\202412\result\ShoppingDict_pkfile" eventSourcePath = r"\\192.168.1.28\share\测试视频数据以及日志\全实时测试\V12\2025-3-4_2"
resultPath = r"\\192.168.1.28\share\测试视频数据以及日志\算法全流程测试\202412\result\contrast" resultPath = r"\\192.168.1.28\share\测试视频数据以及日志\全实时测试\testing"
eventDataPath = os.path.join(resultPath, "evtobjs") eventDataPath = os.path.join(resultPath, "evtobjs_wang")
similPath = os.path.join(resultPath, "simidata")
if not os.path.exists(eventDataPath): if not os.path.exists(eventDataPath):
os.makedirs(eventDataPath) os.makedirs(eventDataPath)
if not os.path.exists(similPath):
os.makedirs(similPath) # similPath = os.path.join(resultPath, "simidata")
# if not os.path.exists(similPath):
# os.makedirs(similPath)
main() main()

View File

@ -27,187 +27,24 @@ Created on Fri Aug 30 17:53:03 2024
""" """
import numpy as np import numpy as np
import cv2
import os import os
import sys import sys
import random import random
import pickle import pickle
import json import json
import random
import copy
import sys
# import torch
import time
# import json
from pathlib import Path from pathlib import Path
from scipy.spatial.distance import cdist
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import shutil
from datetime import datetime
# from openpyxl import load_workbook, Workbook
# from config import config as conf FILE = Path(__file__).resolve()
# from model import resnet18 as resnet18 ROOT = FILE.parents[1] # YOLOv5 root directory
# from feat_inference import inference_image if str(ROOT) not in sys.path:
sys.path.append(str(ROOT))
sys.path.append(r"D:\DetectTracking") from utils.calsimi import calsimi_vs_stdfeat, calsimi_vs_stdfeat_new
from tracking.utils.read_data import extract_data, read_tracking_output, read_similar, read_deletedBarcode_file from utils.tools import get_evtList, init_eventDict
from tracking.utils.plotting import Annotator, colors from utils.databits import data_precision_compare
from feat_extract.config import config as conf
from feat_extract.inference import FeatsInterface
from utils.event import ShoppingEvent, save_data
from genfeats import gen_bcd_features from genfeats import gen_bcd_features
from event_test import calc_simil
def int8_to_ft16(arr_uint8, amin, amax):
arr_ft16 = (arr_uint8 / 255 * (amax-amin) + amin).astype(np.float16)
return arr_ft16
def ft16_to_uint8(arr_ft16):
# pickpath = r"\\192.168.1.28\share\测试_202406\contrast\std_features_ft32vsft16\6902265587712_ft16.pickle"
# with open(pickpath, 'rb') as f:
# edict = pickle.load(f)
# arr_ft16 = edict['feats']
amin = np.min(arr_ft16)
amax = np.max(arr_ft16)
arr_ft255 = (arr_ft16 - amin) * 255 / (amax-amin)
arr_uint8 = arr_ft255.astype(np.uint8)
arr_ft16_ = int8_to_ft16(arr_uint8, amin, amax)
arrDistNorm = np.linalg.norm(arr_ft16_ - arr_ft16) / arr_ft16_.size
return arr_uint8, arr_ft16_
def data_precision_compare(stdfeat, evtfeat, evtMessage, save=True):
evt, stdbcd, label = evtMessage
rltdata, rltdata_ft16, rltdata_ft16_ = [], [], []
matrix = 1 - cdist(stdfeat, evtfeat, 'cosine')
simi_mean = np.mean(matrix)
simi_max = np.max(matrix)
stdfeatm = np.mean(stdfeat, axis=0, keepdims=True)
evtfeatm = np.mean(evtfeat, axis=0, keepdims=True)
simi_mfeat = 1- np.maximum(0.0, cdist(stdfeatm, evtfeatm, 'cosine'))
rltdata = [label, stdbcd, evt, simi_mean, simi_max, simi_mfeat[0,0]]
##================================================================= float16
stdfeat_ft16 = stdfeat.astype(np.float16)
evtfeat_ft16 = evtfeat.astype(np.float16)
stdfeat_ft16 /= np.linalg.norm(stdfeat_ft16, axis=1)[:, None]
evtfeat_ft16 /= np.linalg.norm(evtfeat_ft16, axis=1)[:, None]
matrix_ft16 = 1 - cdist(stdfeat_ft16, evtfeat_ft16, 'cosine')
simi_mean_ft16 = np.mean(matrix_ft16)
simi_max_ft16 = np.max(matrix_ft16)
stdfeatm_ft16 = np.mean(stdfeat_ft16, axis=0, keepdims=True)
evtfeatm_ft16 = np.mean(evtfeat_ft16, axis=0, keepdims=True)
simi_mfeat_ft16 = 1- np.maximum(0.0, cdist(stdfeatm_ft16, evtfeatm_ft16, 'cosine'))
rltdata_ft16 = [label, stdbcd, evt, simi_mean_ft16, simi_max_ft16, simi_mfeat_ft16[0,0]]
'''****************** uint8 is ok!!!!!! ******************'''
##=================================================================== uint8
# stdfeat_uint8, stdfeat_ft16_ = ft16_to_uint8(stdfeat_ft16)
# evtfeat_uint8, evtfeat_ft16_ = ft16_to_uint8(evtfeat_ft16)
stdfeat_uint8 = (stdfeat_ft16*128).astype(np.int8)
evtfeat_uint8 = (evtfeat_ft16*128).astype(np.int8)
stdfeat_ft16_ = stdfeat_uint8.astype(np.float16)/128
evtfeat_ft16_ = evtfeat_uint8.astype(np.float16)/128
absdiff = np.linalg.norm(stdfeat_ft16_ - stdfeat) / stdfeat.size
matrix_ft16_ = 1 - cdist(stdfeat_ft16_, evtfeat_ft16_, 'cosine')
simi_mean_ft16_ = np.mean(matrix_ft16_)
simi_max_ft16_ = np.max(matrix_ft16_)
stdfeatm_ft16_ = np.mean(stdfeat_ft16_, axis=0, keepdims=True)
evtfeatm_ft16_ = np.mean(evtfeat_ft16_, axis=0, keepdims=True)
simi_mfeat_ft16_ = 1- np.maximum(0.0, cdist(stdfeatm_ft16_, evtfeatm_ft16_, 'cosine'))
rltdata_ft16_ = [label, stdbcd, evt, simi_mean_ft16_, simi_max_ft16_, simi_mfeat_ft16_[0,0]]
if not save:
return
##========================================================= save as float32
rppath = os.path.join(similPath, f'{evt}_ft32.pickle')
with open(rppath, 'wb') as f:
pickle.dump(rltdata, f)
rtpath = os.path.join(similPath, f'{evt}_ft32.txt')
with open(rtpath, 'w', encoding='utf-8') as f:
for result in rltdata:
part = [f"{x:.3f}" if isinstance(x, float) else str(x) for x in result]
line = ', '.join(part)
f.write(line + '\n')
##========================================================= save as float16
rppath_ft16 = os.path.join(similPath, f'{evt}_ft16.pickle')
with open(rppath_ft16, 'wb') as f:
pickle.dump(rltdata_ft16, f)
rtpath_ft16 = os.path.join(similPath, f'{evt}_ft16.txt')
with open(rtpath_ft16, 'w', encoding='utf-8') as f:
for result in rltdata_ft16:
part = [f"{x:.3f}" if isinstance(x, float) else str(x) for x in result]
line = ', '.join(part)
f.write(line + '\n')
##=========================================================== save as uint8
rppath_uint8 = os.path.join(similPath, f'{evt}_uint8.pickle')
with open(rppath_uint8, 'wb') as f:
pickle.dump(rltdata_ft16_, f)
rtpath_uint8 = os.path.join(similPath, f'{evt}_uint8.txt')
with open(rtpath_uint8, 'w', encoding='utf-8') as f:
for result in rltdata_ft16_:
part = [f"{x:.3f}" if isinstance(x, float) else str(x) for x in result]
line = ', '.join(part)
f.write(line + '\n')
def simi_calc(event, stdfeat):
evtfeat = event.feats_compose
if isinstance(event.feats_select, list):
if len(event.feats_select) and len(event.feats_select[0]):
evtfeat = event.feats_select[0]
else:
return None, None, None
else:
evtfeat = event.feats_select
if len(evtfeat)==0 or len(stdfeat)==0:
return None, None, None
evtfeat /= np.linalg.norm(evtfeat, axis=1)[:, None]
stdfeat /= np.linalg.norm(stdfeat, axis=1)[:, None]
matrix = 1 - cdist(evtfeat, stdfeat, 'cosine')
matrix[matrix < 0] = 0
simi_mean = np.mean(matrix)
simi_max = np.max(matrix)
stdfeatm = np.mean(stdfeat, axis=0, keepdims=True)
evtfeatm = np.mean(evtfeat, axis=0, keepdims=True)
simi_mfeat = 1- np.maximum(0.0, cdist(stdfeatm, evtfeatm, 'cosine'))
return simi_mean, simi_max, simi_mfeat[0,0]
def build_std_evt_dict(): def build_std_evt_dict():
@ -218,18 +55,6 @@ def build_std_evt_dict():
stdBarcode = [p.stem for p in Path(stdFeaturePath).iterdir() if p.is_file() and (p.suffix=='.json' or p.suffix=='.pickle')] stdBarcode = [p.stem for p in Path(stdFeaturePath).iterdir() if p.is_file() and (p.suffix=='.json' or p.suffix=='.pickle')]
'''*********** USearch ***********'''
# stdFeaturePath = r"D:\contrast\stdlib\v11_test.json"
# stdBarcode = []
# stdlib = {}
# with open(stdFeaturePath, 'r', encoding='utf-8') as f:
# data = json.load(f)
# for dic in data['total']:
# barcode = dic['key']
# feature = np.array(dic['value'])
# stdBarcode.append(barcode)
# stdlib[barcode] = feature
'''======1. 购物事件列表,该列表中的 Barcode 存在于标准的 stdBarcode 内 ===''' '''======1. 购物事件列表,该列表中的 Barcode 存在于标准的 stdBarcode 内 ==='''
evtList = [(p.stem, p.stem.split('_')[-1]) for p in Path(eventDataPath).iterdir() evtList = [(p.stem, p.stem.split('_')[-1]) for p in Path(eventDataPath).iterdir()
if p.is_file() if p.is_file()
@ -259,9 +84,6 @@ def build_std_evt_dict():
feat = stddata["feats_ft32"] feat = stddata["feats_ft32"]
stdDict[barcode] = feat stdDict[barcode] = feat
'''*********** USearch ***********''' '''*********** USearch ***********'''
# stdDict = {} # stdDict = {}
# for barcode in barcodes: # for barcode in barcodes:
@ -271,13 +93,17 @@ def build_std_evt_dict():
evtDict = {} evtDict = {}
for evtname, barcode in evtList: for evtname, barcode in evtList:
evtpath = os.path.join(eventDataPath, evtname+'.pickle') evtpath = os.path.join(eventDataPath, evtname+'.pickle')
with open(evtpath, 'rb') as f: try:
evtdata = pickle.load(f) with open(evtpath, 'rb') as f:
evtdata = pickle.load(f)
except Exception as e:
print(evtname)
evtDict[evtname] = evtdata evtDict[evtname] = evtdata
return evtList, evtDict, stdDict return evtList, evtDict, stdDict
def one2SN_pr(evtList, evtDict, stdDict): def one2SN_pr(evtList, evtDict, stdDict, simType="simple"):
std_barcodes = set([bcd for _, bcd in evtList]) std_barcodes = set([bcd for _, bcd in evtList])
@ -300,14 +126,21 @@ def one2SN_pr(evtList, evtDict, stdDict):
event = evtDict[evtname] event = evtDict[evtname]
## 无轨迹判断 ## 无轨迹判断
if len(event.front_feats)+len(event.back_feats)==0: if len(event.front_feats)+len(event.back_feats)==0:
print(evtname) errorFile_one2SN.append(evtname)
print(f"No trajectory: {evtname}")
continue continue
barcodes, similars = [], [] barcodes, similars = [], []
for stdbcd in bcd_selected: for stdbcd in bcd_selected:
stdfeat = stdDict[stdbcd] stdfeat = stdDict[stdbcd]
simi_mean, simi_max, simi_mfeat = simi_calc(event, stdfeat)
# simi_mean = calc_simil(event, stdfeat) if simType=="typea":
simi_mean, simi_max, simi_mfeat = calsimi_vs_stdfeat(event, stdfeat)
elif simType=="typeb":
pass
else:
simi_mean, simi_1, simi_2 = calsimi_vs_stdfeat_new(event, stdfeat)
## 在event.front_feats和event.back_feats同时为空时此处不需要保护 ## 在event.front_feats和event.back_feats同时为空时此处不需要保护
# if simi_mean==None: # if simi_mean==None:
@ -351,10 +184,10 @@ def one2SN_pr(evtList, evtDict, stdDict):
FNX = sum(np.array(fn_simi) < th) FNX = sum(np.array(fn_simi) < th)
TNX = sum(np.array(tn_simi) < th) TNX = sum(np.array(tn_simi) < th)
PPreciseX.append(TPX/(TPX+FPX+1e-6)) PPreciseX.append(TPX/(TPX+FPX+1e-6))
PRecallX.append(TPX/(len(tp_simi)+len(fn_simi)+1e-6)) PRecallX.append(TPX/(TPX+FNX+1e-6))
NPreciseX.append(TNX/(TNX+FNX+1e-6)) NPreciseX.append(TNX/(TNX+FNX+1e-6))
NRecallX.append(TNX/(len(tn_simi)+len(fp_simi)+1e-6)) NRecallX.append(TNX/(TNX+FPX+1e-6))
fig, ax = plt.subplots() fig, ax = plt.subplots()
ax.plot(Thresh, PPreciseX, 'r', label='Precise_Pos: TP/TPFP') ax.plot(Thresh, PPreciseX, 'r', label='Precise_Pos: TP/TPFP')
@ -363,11 +196,17 @@ def one2SN_pr(evtList, evtDict, stdDict):
ax.plot(Thresh, NRecallX, 'c', label='Recall_Neg: TN/TNFN') ax.plot(Thresh, NRecallX, 'c', label='Recall_Neg: TN/TNFN')
ax.set_xlim([0, 1]) ax.set_xlim([0, 1])
ax.set_ylim([0, 1]) ax.set_ylim([0, 1])
ax.grid(True) ax.set_xticks(np.arange(0, 1, 0.1))
ax.set_yticks(np.arange(0, 1, 0.1))
ax.grid(True, linestyle='--')
ax.set_title('1:SN Precise & Recall') ax.set_title('1:SN Precise & Recall')
ax.set_xlabel(f"Event Num: {len(evtList)}") ax.set_xlabel(f"Event Num: {len(tp_events) + len(fn_events)}")
ax.legend() ax.legend()
plt.show() plt.show()
rltpath = os.path.join(similPath, f'pr_1toSN_{simType}.png')
plt.savefig(rltpath)
## ============================= 1:N 展厅 直方图''' ## ============================= 1:N 展厅 直方图'''
fig, axes = plt.subplots(2, 2) fig, axes = plt.subplots(2, 2)
axes[0, 0].hist(tp_simi, bins=60, range=(-0.2, 1), edgecolor='black') axes[0, 0].hist(tp_simi, bins=60, range=(-0.2, 1), edgecolor='black')
@ -384,10 +223,13 @@ def one2SN_pr(evtList, evtDict, stdDict):
axes[1, 1].set_title(f'FN({len(fn_simi)})') axes[1, 1].set_title(f'FN({len(fn_simi)})')
plt.show() plt.show()
rltpath = os.path.join(similPath, f'hist_1toSN_{simType}.png')
plt.savefig(rltpath)
def one2one_simi(evtList, evtDict, stdDict):
def one2one_simi(evtList, evtDict, stdDict, simType):
barcodes = set([bcd for _, bcd in evtList]) barcodes = set([bcd for _, bcd in evtList])
'''======1 构造 3 个事件对: 扫 A 放 A, 扫 A 放 B, 合并 ====================''' '''======1 构造 3 个事件对: 扫 A 放 A, 扫 A 放 B, 合并 ===================='''
@ -403,34 +245,61 @@ def one2one_simi(evtList, evtDict, stdDict):
'''======2 计算事件、标准特征集相似度 ==================''' '''======2 计算事件、标准特征集相似度 =================='''
rltdata = [] rltdata = []
errorFile_one2one = []
for i in range(len(mergePairs)): for i in range(len(mergePairs)):
evtname, stdbcd, label = mergePairs[i] evtname, stdbcd, label = mergePairs[i]
event = evtDict[evtname] event = evtDict[evtname]
if len(event.feats_compose)==0: continue if len(event.feats_compose)==0:
errorFile_one2one.append(evtname)
continue
stdfeat = stdDict[stdbcd] # float32 stdfeat = stdDict[stdbcd] # float32
simi_mean, simi_max, simi_mfeat = simi_calc(event, stdfeat) if simType=="typea":
simi_mean, simi_1, simi_2 = calsimi_vs_stdfeat_new(event, stdfeat)
elif simType=="typeb":
pass
else:
simi_mean, simi_1, simi_2 = calsimi_vs_stdfeat(event, stdfeat)
if simi_mean is None: if simi_mean is None:
continue continue
rltdata.append((label, stdbcd, evtname, simi_mean, simi_max, simi_mfeat)) rltdata.append((label, stdbcd, evtname, simi_mean, simi_1, simi_2))
'''================ float32、16、int8 精度比较与存储 =============''' '''================ float32、16、int8 精度比较与存储 ============='''
# data_precision_compare(stdfeat, evtfeat, mergePairs[i], save=True) # data_precision_compare(stdfeat, evtfeat, mergePairs[i], similPath, save=True)
errorFile_one2one = list(set(errorFile_one2one))
return rltdata, errorFile_one2one
return rltdata def one2one_pr(evtList, evtDict, stdDict, simType="simple"):
rltdata, errorFile_one2one = one2one_simi(evtList, evtDict, stdDict, simType)
def one2one_pr(rltdata):
Same, Cross = [], [] Same, Cross = [], []
for label, stdbcd, evtname, simi_mean, simi_max, simi_mft in rltdata: for label, stdbcd, evtname, simi_mean, simi_max, simi_mft in rltdata:
if label == "same": if simType=="simple" and label == "same":
Same.append(simi_max) Same.append(simi_max)
if label == "diff": if simType=="simple" and label == "diff":
Cross.append(simi_max) Cross.append(simi_max)
if simType=="typea" and label == "same":
Same.append(simi_mean)
if simType=="typea" and label == "diff":
Cross.append(simi_mean)
# for label, stdbcd, evtname, simi_mean, simi_max, simi_mft in rltdata:
# if label == "same":
# Same.append(simi_mean)
# if label == "diff":
# Cross.append(simi_mean)
Same = np.array(Same) Same = np.array(Same)
Cross = np.array(Cross) Cross = np.array(Cross)
TPFN = len(Same) TPFN = len(Same)
@ -452,33 +321,47 @@ def one2one_pr(rltdata):
Correct = [] Correct = []
Thresh = np.linspace(-0.2, 1, 100) Thresh = np.linspace(-0.2, 1, 100)
for th in Thresh: for th in Thresh:
TP = np.sum(Same > th) TP = np.sum(Same >= th)
FN = TPFN - TP FN = np.sum(Same < th)
TN = np.sum(Cross < th) # FN = TPFN - TP
FP = TNFP - TN
TN = np.sum(Cross < th)
FP = np.sum(Cross >= th)
# FP = TNFP - TN
Recall_Pos.append(TP/TPFN)
Recall_Neg.append(TN/TNFP)
Precision_Pos.append(TP/(TP+FP+1e-6)) Precision_Pos.append(TP/(TP+FP+1e-6))
Precision_Neg.append(TN/(TN+FN+1e-6)) Precision_Neg.append(TN/(TN+FN+1e-6))
Recall_Pos.append(TP/(TP+FN+1e-6))
Recall_Neg.append(TN/(TN+FP+1e-6))
# Recall_Pos.append(TP/TPFN)
# Recall_Neg.append(TN/TNFP)
Correct.append((TN+TP)/(TPFN+TNFP)) Correct.append((TN+TP)/(TPFN+TNFP))
fig, ax = plt.subplots() fig, ax = plt.subplots()
ax.plot(Thresh, Correct, 'r', label='Correct: (TN+TP)/(TPFN+TNFP)')
ax.plot(Thresh, Precision_Pos, 'r', label='Precision_Pos: TP/(TP+FP)')
ax.plot(Thresh, Recall_Pos, 'b', label='Recall_Pos: TP/TPFN') ax.plot(Thresh, Recall_Pos, 'b', label='Recall_Pos: TP/TPFN')
ax.plot(Thresh, Recall_Neg, 'g', label='Recall_Neg: TN/TNFP') ax.plot(Thresh, Recall_Neg, 'g', label='Recall_Neg: TN/TNFP')
ax.plot(Thresh, Precision_Pos, 'c', label='Precision_Pos: TP/(TP+FP)') ax.plot(Thresh, Correct, 'c', label='Correct: (TN+TP)/(TPFN+TNFP)')
ax.plot(Thresh, Precision_Neg, 'm', label='Precision_Neg: TN/(TN+FN)') ax.plot(Thresh, Precision_Neg, 'm', label='Precision_Neg: TN/(TN+FN)')
ax.set_xlim([0, 1]) ax.set_xlim([0, 1])
ax.set_ylim([0, 1]) ax.set_ylim([0, 1])
ax.grid(True)
ax.set_xticks(np.arange(0, 1, 0.1))
ax.set_yticks(np.arange(0, 1, 0.1))
ax.grid(True, linestyle='--')
ax.set_title('PrecisePos & PreciseNeg') ax.set_title('PrecisePos & PreciseNeg')
ax.set_xlabel(f"Same Num: {TPFN}, Cross Num: {TNFP}") ax.set_xlabel(f"Same Num: {TPFN}, Cross Num: {TNFP}")
ax.legend() ax.legend()
plt.show() plt.show()
rltpath = os.path.join(similPath, 'pr.png') rltpath = os.path.join(similPath, f'pr_1to1_{simType}.png')
plt.savefig(rltpath) # svg, png, pdf plt.savefig(rltpath) # svg, png, pdf
@ -491,7 +374,7 @@ def one2one_pr(rltdata):
axes[1].set_xlim([-0.2, 1]) axes[1].set_xlim([-0.2, 1])
axes[1].set_title(f'TN({len(Cross)})') axes[1].set_title(f'TN({len(Cross)})')
rltpath = os.path.join(similPath, 'hist.png') rltpath = os.path.join(similPath, f'hist_1to1_{simType}.png')
plt.savefig(rltpath) plt.savefig(rltpath)
@ -499,112 +382,25 @@ def one2one_pr(rltdata):
def gen_eventdict(sourcePath, saveimg=True):
k, errEvents = 0, []
for source_path in sourcePath:
evtpath, bname = os.path.split(source_path)
## 兼容事件的两种情况:文件夹 和 Yolo-Resnet-Tracker 的输出
if os.path.isfile(source_path):
bname, ext = os.path.splitext(bname)
evt = bname.split("_")
evt = bname.split('_')
condt = len(evt)>=2 and evt[-1].isdigit() and len(evt[-1])>=10
if not condt: continue
# bname = r"20241126-135911-bdf91cf9-3e9a-426d-94e8-ddf92238e175_6923555210479"
# source_path = os.path.join(evtpath, bname)
# 如果已完成事件生成,则不执行
pickpath = os.path.join(eventDataPath, f"{bname}.pickle")
if os.path.isfile(pickpath): continue
# event = ShoppingEvent(source_path, stype="data")
# with open(pickpath, 'wb') as f:
# pickle.dump(event, f)
try:
event = ShoppingEvent(source_path, stype="source")
# save_data(event, resultPath)
with open(pickpath, 'wb') as f:
pickle.dump(event, f)
print(bname)
except Exception as e:
errEvents.append(source_path)
print(e)
# k += 1
# if k==1:
# break
errfile = os.path.join(resultPath, 'error_events.txt') def test_one2one_one2SN(simType):
with open(errfile, 'w', encoding='utf-8') as f:
for line in errEvents:
f.write(line + '\n')
def init_std_evt_dict():
'''==== 0. 生成事件列表和对应的 Barcodes列表 ==========='''
bcdList, event_spath = [], []
for evtpath in eventSourcePath:
for evtname in os.listdir(evtpath):
bname, ext = os.path.splitext(evtname)
## 处理事件的两种情况:文件夹 和 Yolo-Resnet-Tracker 的输出
fpath = os.path.join(evtpath, evtname)
if os.path.isfile(fpath) and (ext==".pkl" or ext==".pickle"):
evt = bname.split('_')
elif os.path.isdir(fpath):
evt = evtname.split('_')
else:
continue
if len(evt)>=2 and evt[-1].isdigit() and len(evt[-1])>=10:
bcdList.append(evt[-1])
event_spath.append(os.path.join(evtpath, evtname))
'''==== 1. 生成标准特征集, 只需运行一次, 在 genfeats.py 中实现 ==========='''
bcdSet = set(bcdList)
gen_bcd_features(stdSamplePath, stdBarcodePath, stdFeaturePath, bcdSet)
print("stdFeats have generated and saved!")
'''==== 2. 生成事件字典, 只需运行一次 ==============='''
gen_eventdict(event_spath)
print("eventList have generated and saved!")
def test_one2one():
'''1:1性能评估''' '''1:1性能评估'''
# 1. 只需运行一次,生成事件字典和相应的标准特征库字典 # evtpaths, bcdSet = get_evtList(eventSourcePath)
init_std_evt_dict()
# 2. 基于事件barcode集和标准库barcode交集构造事件集合 '''=== 1. 只需运行一次,生成事件对应的标准特征库字典,如已生成,无需运行 ===='''
# gen_bcd_features(stdSamplePath, stdBarcodePath, stdFeaturePath, eventSourcePath)
'''==== 2. 生成事件字典, 只需运行一次 ===================='''
# init_eventDict(eventSourcePath, eventDataPath, source_type)
'''==== 3. 基于事件barcode集和标准库barcode交集构造事件集合 ========='''
evtList, evtDict, stdDict = build_std_evt_dict() evtList, evtDict, stdDict = build_std_evt_dict()
rltdata = one2one_simi(evtList, evtDict, stdDict) one2one_pr(evtList, evtDict, stdDict, simType)
one2one_pr(rltdata)
def test_one2SN():
'''1:SN性能评估'''
# 1. 只需运行一次,生成事件字典和相应的标准特征库字典
init_std_evt_dict()
# 2. 事件barcode集和标准库barcode求交集
evtList, evtDict, stdDict = build_std_evt_dict()
one2SN_pr(evtList, evtDict, stdDict)
one2SN_pr(evtList, evtDict, stdDict, simType)
if __name__ == '__main__': if __name__ == '__main__':
''' '''
@ -612,26 +408,36 @@ if __name__ == '__main__':
(1) stdSamplePath: 用于生成比对标准特征集的原始图像地址 (1) stdSamplePath: 用于生成比对标准特征集的原始图像地址
(2) stdBarcodePath: 比对标准特征集原始图像地址的pickle文件存储{barcode: [imgpath1, imgpath1, ...]} (2) stdBarcodePath: 比对标准特征集原始图像地址的pickle文件存储{barcode: [imgpath1, imgpath1, ...]}
(3) stdFeaturePath: 比对标准特征集特征存储地址 (3) stdFeaturePath: 比对标准特征集特征存储地址
(4) eventSourcePath: 事件地址 (4) eventSourcePath: 事件地址, 包含data文件的文件夹或 Yolo-Resnet-Tracker输出的Pickle文件父文件夹
(5) resultPath: 结果存储地址 (5) resultPath: 结果存储地址
(6) eventDataPath: 用于1:1比对的购物事件存储地址在resultPath下 (6) eventDataPath: 用于1:1比对的购物事件存储地址在resultPath下
(7) similPath: 1:1比对结果存储地址(事件级)在resultPath下 (7) similPath: 1:1比对结果存储地址(事件级)在resultPath下
''' '''
# stdSamplePath = r"\\192.168.1.28\share\数据\已完成数据\展厅数据\v1.0\比对数据\整理\zhantingBase" stdSamplePath = "/home/wqg/dataset/total_barcode/totalBarcode"
# stdBarcodePath = r"D:\exhibition\dataset\bcdpath" stdBarcodePath = "/home/wqg/dataset/total_barcode/bcdpath"
# stdFeaturePath = r"\\192.168.1.28\share\数据\已完成数据\比对数据\barcode\all_totalBarocde\features_json\v11_barcode_11592" stdFeaturePath = "/home/wqg/dataset/test_dataset/total_barcode/features_json/v11_barcode_0304/"
# eventSourcePath = [r'D:\exhibition\images\20241202'] if not os.path.exists(stdBarcodePath):
# eventSourcePath = [r"\\192.168.1.28\share\测试视频数据以及日志\各模块测试记录\展厅测试\1129_展厅模型v801测试组测试"] os.makedirs(stdBarcodePath)
if not os.path.exists(stdFeaturePath):
os.makedirs(stdFeaturePath)
'''source_type:
"source": eventSourcePath 为 Yolo-Resnet-Tracker 输出的 pickle 文件
"data": 基于事件切分的原 data 文件版本
"realtime": 全实时生成的 data 文件
'''
source_type = 'source' # 'source', 'data', 'realtime'
simType = "typea" # "simple", "typea", "typeb"
stdSamplePath = r"\\192.168.1.28\share\数据\已完成数据\比对数据\barcode\all_totalBarocde\totalBarcode" evttype = "single_event_V10"
stdBarcodePath = r"D:\全实时\source_data\bcdpath" # evttype = "single_event_V5"
stdFeaturePath = r"D:\全实时\source_data\stdfeats" # evttype = "performence_V10"
# evttype = "performence_V5"
eventSourcePath = "/home/wqg/dataset/pipeline/yrt/{}/shopping_pkl".format(evttype)
eventSourcePath = [r"\\192.168.1.28\share\测试视频数据以及日志\算法全流程测试\202412\result\ShoppingDict_pkfile"] resultPath = "/home/wqg/dataset/pipeline/contrast/{}".format(evttype)
resultPath = r"\\192.168.1.28\share\测试视频数据以及日志\算法全流程测试\202412\result\contrast"
eventDataPath = os.path.join(resultPath, "evtobjs") eventDataPath = os.path.join(resultPath, "evtobjs")
similPath = os.path.join(resultPath, "simidata") similPath = os.path.join(resultPath, "simidata")
if not os.path.exists(eventDataPath): if not os.path.exists(eventDataPath):
@ -639,9 +445,7 @@ if __name__ == '__main__':
if not os.path.exists(similPath): if not os.path.exists(similPath):
os.makedirs(similPath) os.makedirs(similPath)
# test_one2one() test_one2one_one2SN(simType)
test_one2SN()

View File

@ -1,8 +1,13 @@
# -*- coding: utf-8 -*- # -*- coding: utf-8 -*-
""" """
Created on Wed Sep 11 11:57:30 2024 Created on Wed Sep 11 11:57:30 2024
永辉现场试验输出数据的 1:1 性能评估 contrast_pr:
适用于202410前数据保存版本的需调用 OneToOneCompare.txt 直接利用测试数据中的 data 文件进行 1:1、1:SN、1:n 性能评估
test_compare:
永辉现场试验输出数据的 1:1 性能评估
适用于202410前数据保存版本的需调用 OneToOneCompare.txt
@author: ym @author: ym
""" """
import os import os
@ -11,7 +16,11 @@ from pathlib import Path
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import sys import sys
sys.path.append(r"D:\DetectTracking") FILE = Path(__file__).resolve()
ROOT = FILE.parents[1] # YOLOv5 root directory
if str(ROOT) not in sys.path:
sys.path.append(str(ROOT))
from tracking.utils.read_data import read_similar from tracking.utils.read_data import read_similar
def read_one2one_data(filepath): def read_one2one_data(filepath):
@ -104,24 +113,31 @@ def test_compare():
plot_pr_curve(simiList) plot_pr_curve(simiList)
def contrast_pr(paths): def contrast_pr(evtPaths):
''' '''
1:1 1:1
''' '''
paths = Path(paths)
evtpaths = [] evtpaths = []
for p in paths.iterdir(): # date_ = ['2025-3-4_1', '2025-3-5_1', '2025-3-5_2']
# for dt in date_:
# paths = Path(evtPaths) / dt
abc = []
for p in Path(evtPaths).iterdir():
condt1 = p.is_dir() condt1 = p.is_dir()
condt2 = len(p.name.split('_'))>=2 condt2 = len(p.name.split('_'))>=2
condt3 = len(p.name.split('_')[-1])>8 condt3 = len(p.name.split('_')[-1])>=8
condt4 = p.name.split('_')[-1].isdigit() condt4 = p.name.split('_')[-1].isdigit()
if condt1 and condt2 and condt3 and condt4: if condt1 and condt2 and condt3 and condt4:
evtpaths.append(p) evtpaths.append(p)
elif p.is_dir():
abc.append(p.stem)
# evtpaths = [p for p in paths.iterdir() if p.is_dir() and len(p.name.split('_'))>=2 and len(p.name.split('_')[-1])>8] # evtpaths = [p for p in paths.iterdir() if p.is_dir() and len(p.name.split('_'))>=2 and len(p.name.split('_')[-1])>8]
# evtpaths = [p for p in paths.iterdir() if p.is_dir()] # evtpaths = [p for p in paths.iterdir() if p.is_dir()]
alg_times = []
events, similars = [], [] events, similars = [], []
##===================================== 扫A放A, 扫A放B场景() ##===================================== 扫A放A, 扫A放B场景()
one2oneAA, one2oneAB = [], [] one2oneAA, one2oneAB = [], []
@ -147,11 +163,12 @@ def contrast_pr(paths):
errorFile_one2one, errorFile_one2SN, errorFile_one2n = [], [], [] errorFile_one2one, errorFile_one2SN, errorFile_one2n = [], [], []
errorFile = []
for path in evtpaths: for path in evtpaths:
barcode = path.stem.split('_')[-1] barcode = path.stem.split('_')[-1]
datapath = path.joinpath('process.data') datapath = path.joinpath('process.data')
if not barcode.isdigit() or len(barcode)<10: continue if not barcode.isdigit() or len(barcode)<8: continue
if not datapath.is_file(): continue if not datapath.is_file(): continue
bcdList.append(barcode) bcdList.append(barcode)
@ -167,8 +184,17 @@ def contrast_pr(paths):
one2SN = SimiDict['one2SN'] one2SN = SimiDict['one2SN']
one2n = SimiDict['one2n'] one2n = SimiDict['one2n']
if len(one2one)+len(one2SN)+len(one2n) == 0:
errorFile.append(path.stem)
dtime = SimiDict["algroStartToEnd"]
if dtime >= 0:
alg_times.append((dtime, path.stem))
'''================== 0. 1:1 ===================''' '''================== 0. 1:1 ==================='''
barcodes, similars = [], [] barcodes, similars = [], []
barcodes_ = []
for dt in one2one: for dt in one2one:
one2onePath.append((path.stem)) one2onePath.append((path.stem))
if dt['similar']==0: if dt['similar']==0:
@ -176,6 +202,14 @@ def contrast_pr(paths):
continue continue
barcodes.append(dt['barcode']) barcodes.append(dt['barcode'])
similars.append(dt['similar']) similars.append(dt['similar'])
barcodes_.append(path.stem)
if len(barcodes)==len(similars) and len(barcodes)!=0: if len(barcodes)==len(similars) and len(barcodes)!=0:
## 扫A放A, 扫A放B场景 ## 扫A放A, 扫A放B场景
simAA = [similars[i] for i in range(len(barcodes)) if barcodes[i]==barcode] simAA = [similars[i] for i in range(len(barcodes)) if barcodes[i]==barcode]
@ -204,6 +238,8 @@ def contrast_pr(paths):
_fp_events.append(path.stem) _fp_events.append(path.stem)
else: else:
errorFile_one2one.append(path.stem) errorFile_one2one.append(path.stem)
elif len(one2SN)+len(one2n) == 0:
errorFile_one2one.append(path.stem)
'''================== 2. 取出场景下的 1 : Small N ===================''' '''================== 2. 取出场景下的 1 : Small N ==================='''
@ -212,6 +248,7 @@ def contrast_pr(paths):
barcodes.append(dt['barcode']) barcodes.append(dt['barcode'])
similars.append(dt['similar']) similars.append(dt['similar'])
if len(barcodes)==len(similars) and len(barcodes)!=0: if len(barcodes)==len(similars) and len(barcodes)!=0:
## 扫A放A, 扫A放B场景 ## 扫A放A, 扫A放B场景
simAA = [similars[i] for i in range(len(barcodes)) if barcodes[i]==barcode] simAA = [similars[i] for i in range(len(barcodes)) if barcodes[i]==barcode]
@ -219,10 +256,10 @@ def contrast_pr(paths):
one2SNAA.extend(simAA) one2SNAA.extend(simAA)
one2SNAB.extend(simAB) one2SNAB.extend(simAB)
one2SNPath.append(path.stem) one2SNPath.append(path.stem)
if len(simAA)==0: if len(simAA)==0:
one2SNPath1.append(path.stem) errorFile_one2SN.append(path.stem)
## 相似度排序barcode相等且排名第一为TP适用于多的barcode相似度比较 ## 相似度排序barcode相等且排名第一为TP适用于多的barcode相似度比较
max_idx = similars.index(max(similars)) max_idx = similars.index(max(similars))
@ -247,6 +284,7 @@ def contrast_pr(paths):
'''===================== 3. 取出场景下的 1:n ========================''' '''===================== 3. 取出场景下的 1:n ========================'''
events, evt_barcodes, evt_similars, evt_types = [], [], [], [] events, evt_barcodes, evt_similars, evt_types = [], [], [], []
for dt in one2n: for dt in one2n:
@ -255,8 +293,15 @@ def contrast_pr(paths):
evt_similars.append(dt["similar"]) evt_similars.append(dt["similar"])
evt_types.append(dt["type"]) evt_types.append(dt["type"])
if len(events)==len(evt_barcodes) and len(evt_barcodes)==len(evt_similars) \
and len(evt_similars)==len(evt_types) and len(events)>0:
if len(events)==len(evt_barcodes)==len(evt_similars)==len(evt_types) and len(events)>0:
if not barcode in evt_barcodes:
errorFile_one2n.append(path.stem)
continue
if len(barcodes_):
print("do")
one2nPath.append(path.stem) one2nPath.append(path.stem)
maxsim = evt_similars[evt_similars.index(max(evt_similars))] maxsim = evt_similars[evt_similars.index(max(evt_similars))]
@ -312,9 +357,9 @@ def contrast_pr(paths):
_TN = sum(np.array(one2oneAB) < th) _TN = sum(np.array(one2oneAB) < th)
_PPrecise.append(_TP/(_TP+_FP+1e-6)) _PPrecise.append(_TP/(_TP+_FP+1e-6))
_PRecall.append(_TP/(len(one2oneAA)+1e-6)) _PRecall.append(_TP/(_TP+_FN+1e-6))
_NPrecise.append(_TN/(_TN+_FN+1e-6)) _NPrecise.append(_TN/(_TN+_FN+1e-6))
_NRecall.append(_TN/(len(one2oneAB)+1e-6)) _NRecall.append(_TN/(_TN+_FP+1e-6))
'''===================================== 1:SN 均值''' '''===================================== 1:SN 均值'''
TP_ = sum(np.array(one2SNAA) >= th) TP_ = sum(np.array(one2SNAA) >= th)
@ -334,10 +379,10 @@ def contrast_pr(paths):
FNX = sum(np.array(fn_simi) < th) FNX = sum(np.array(fn_simi) < th)
TNX = sum(np.array(tn_simi) < th) TNX = sum(np.array(tn_simi) < th)
PPreciseX.append(TPX/(TPX+FPX+1e-6)) PPreciseX.append(TPX/(TPX+FPX+1e-6))
PRecallX.append(TPX/(len(tp_simi)+len(fn_simi)+1e-6)) PRecallX.append(TPX/(TPX+FNX+1e-6))
NPreciseX.append(TNX/(TNX+FNX+1e-6)) NPreciseX.append(TNX/(TNX+FNX+1e-6))
NRecallX.append(TNX/(len(tn_simi)+len(fp_simi)+1e-6)) NRecallX.append(TNX/(TNX+FPX+1e-6))
'''===================================== 1:n''' '''===================================== 1:n'''
@ -347,12 +392,18 @@ def contrast_pr(paths):
TN = sum(np.array(tnsimi) < th) TN = sum(np.array(tnsimi) < th)
PPrecise.append(TP/(TP+FP+1e-6)) PPrecise.append(TP/(TP+FP+1e-6))
PRecall.append(TP/(len(tpsimi)+len(fnsimi)+1e-6)) PRecall.append(TP/(TP+FN+1e-6))
NPrecise.append(TN/(TN+FN+1e-6)) NPrecise.append(TN/(TN+FN+1e-6))
NRecall.append(TN/(len(tnsimi)+len(fpsimi)+1e-6)) NRecall.append(TN/(TN+FP+1e-6))
algtime = []
for tm, _ in alg_times:
algtime.append(tm)
fig, ax = plt.subplots()
ax.hist(np.array(algtime), bins=100, edgecolor='black')
ax.set_title('Algorthm Spend Time')
ax.set_xlabel(f"Event Num: {len(alg_times)}")
plt.show()
'''1. ============================= 1:1 最大值方案 曲线''' '''1. ============================= 1:1 最大值方案 曲线'''
fig, ax = plt.subplots() fig, ax = plt.subplots()
@ -362,7 +413,9 @@ def contrast_pr(paths):
ax.plot(Thresh, _NRecall, 'c', label='Recall_Neg: TN/TNFN') ax.plot(Thresh, _NRecall, 'c', label='Recall_Neg: TN/TNFN')
ax.set_xlim([0, 1]) ax.set_xlim([0, 1])
ax.set_ylim([0, 1]) ax.set_ylim([0, 1])
ax.grid(True) ax.set_xticks(np.arange(0, 1, 0.1))
ax.set_yticks(np.arange(0, 1, 0.1))
ax.grid(True, linestyle='--')
ax.set_title('1:1 Precise & Recall') ax.set_title('1:1 Precise & Recall')
ax.set_xlabel(f"Event Num: {len(one2oneAA)+len(one2oneAB)}") ax.set_xlabel(f"Event Num: {len(one2oneAA)+len(one2oneAB)}")
ax.legend() ax.legend()
@ -381,30 +434,30 @@ def contrast_pr(paths):
'''2. ============================= 1:1 均值方案 曲线''' '''2. ============================= 1:1 均值方案 曲线'''
fig, ax = plt.subplots() # fig, ax = plt.subplots()
ax.plot(Thresh, PPrecise_, 'r', label='Precise_Pos: TP/TPFP') # ax.plot(Thresh, PPrecise_, 'r', label='Precise_Pos: TP/TPFP')
ax.plot(Thresh, PRecall_, 'b', label='Recall_Pos: TP/TPFN') # ax.plot(Thresh, PRecall_, 'b', label='Recall_Pos: TP/TPFN')
ax.plot(Thresh, NPrecise_, 'g', label='Precise_Neg: TN/TNFP') # ax.plot(Thresh, NPrecise_, 'g', label='Precise_Neg: TN/TNFP')
ax.plot(Thresh, NRecall_, 'c', label='Recall_Neg: TN/TNFN') # ax.plot(Thresh, NRecall_, 'c', label='Recall_Neg: TN/TNFN')
ax.set_xlim([0, 1]) # ax.set_xlim([0, 1])
ax.set_ylim([0, 1]) # ax.set_ylim([0, 1])
ax.grid(True) # ax.grid(True)
ax.set_title('1:1 Precise & Recall') # ax.set_title('1:1 Precise & Recall')
ax.set_xlabel(f"Event Num: {len(one2SNAA)}") # ax.set_xlabel(f"Event Num: {len(one2SNAA)}")
ax.legend() # ax.legend()
plt.show() # plt.show()
## ============================= 1:1 均值方案 直方图''' # ## ============================= 1:1 均值方案 直方图'''
fig, axes = plt.subplots(2, 1) # fig, axes = plt.subplots(2, 1)
axes[0].hist(np.array(one2SNAA), bins=60, edgecolor='black') # axes[0].hist(np.array(one2SNAA), bins=60, edgecolor='black')
axes[0].set_xlim([-0.2, 1]) # axes[0].set_xlim([-0.2, 1])
axes[0].set_title('AA') # axes[0].set_title('AA')
axes[0].set_xlabel(f"Event Num: {len(one2SNAA)}") # axes[0].set_xlabel(f"Event Num: {len(one2SNAA)}")
axes[1].hist(np.array(one2SNAB), bins=60, edgecolor='black') # axes[1].hist(np.array(one2SNAB), bins=60, edgecolor='black')
axes[1].set_xlim([-0.2, 1]) # axes[1].set_xlim([-0.2, 1])
axes[1].set_title('BB') # axes[1].set_title('BB')
axes[1].set_xlabel(f"Event Num: {len(one2SNAB)}") # axes[1].set_xlabel(f"Event Num: {len(one2SNAB)}")
plt.show() # plt.show()
''''3. ============================= 1:SN 曲线''' ''''3. ============================= 1:SN 曲线'''
fig, ax = plt.subplots() fig, ax = plt.subplots()
@ -414,7 +467,9 @@ def contrast_pr(paths):
ax.plot(Thresh, NRecallX, 'c', label='Recall_Neg: TN/TNFN') ax.plot(Thresh, NRecallX, 'c', label='Recall_Neg: TN/TNFN')
ax.set_xlim([0, 1]) ax.set_xlim([0, 1])
ax.set_ylim([0, 1]) ax.set_ylim([0, 1])
ax.grid(True) ax.set_xticks(np.arange(0, 1, 0.1))
ax.set_yticks(np.arange(0, 1, 0.1))
ax.grid(True, linestyle='--')
ax.set_title('1:SN Precise & Recall') ax.set_title('1:SN Precise & Recall')
ax.set_xlabel(f"Event Num: {len(one2SNAA)}") ax.set_xlabel(f"Event Num: {len(one2SNAA)}")
ax.legend() ax.legend()
@ -444,7 +499,9 @@ def contrast_pr(paths):
ax.plot(Thresh, NRecall, 'c', label='Recall_Neg: TN/TNFN') ax.plot(Thresh, NRecall, 'c', label='Recall_Neg: TN/TNFN')
ax.set_xlim([0, 1]) ax.set_xlim([0, 1])
ax.set_ylim([0, 1]) ax.set_ylim([0, 1])
ax.grid(True) ax.set_xticks(np.arange(0, 1, 0.1))
ax.set_yticks(np.arange(0, 1, 0.1))
ax.grid(True, linestyle='--')
ax.set_title('1:n Precise & Recall') ax.set_title('1:n Precise & Recall')
ax.set_xlabel(f"Event Num: {len(tpsimi)+len(fnsimi)}") ax.set_xlabel(f"Event Num: {len(tpsimi)+len(fnsimi)}")
ax.legend() ax.legend()
@ -461,31 +518,31 @@ def contrast_pr(paths):
axes[1, 0].set_xlim([-0.2, 1]) axes[1, 0].set_xlim([-0.2, 1])
axes[1, 0].set_title(f'TN({len(tnsimi)})') axes[1, 0].set_title(f'TN({len(tnsimi)})')
axes[1, 1].hist(fnsimi, bins=60, edgecolor='black') axes[1, 1].hist(fnsimi, bins=60, edgecolor='black')
axes[1, 1].set_xlim([-0.2, 1]) axes[1, 1].set_xlim([-0.2, 1])
axes[1, 1].set_title(f'FN({len(fnsimi)})') axes[1, 1].set_title(f'FN({len(fnsimi)})')
plt.show() plt.show()
# fpsnErrFile = str(paths.joinpath("one2SN_Error.txt"))
# with open(fpsnErrFile, "w") as file:
# for item in fp_events:
# file.write(item + "\n")
fpsnErrFile = str(paths.joinpath("one2SN_Error.txt")) # fpErrFile = str(paths.joinpath("one2n_Error.txt"))
with open(fpsnErrFile, "w") as file: # with open(fpErrFile, "w") as file:
for item in fp_events: # for item in fpevents:
file.write(item + "\n") # file.write(item + "\n")
fpErrFile = str(paths.joinpath("one2n_Error.txt"))
with open(fpErrFile, "w") as file:
for item in fpevents:
file.write(item + "\n")
# bcdSet = set(bcdList) # bcdSet = set(bcdList)
# one2nErrFile = str(paths.joinpath("one_2_Small_n_Error.txt"))
# one2nErrFile = os.path.join(evtPaths, "one_2_Small_n_Error.txt")
# with open(one2nErrFile, "w") as file: # with open(one2nErrFile, "w") as file:
# for item in fnevents: # for item in fnevents:
# file.write(item + "\n") # file.write(item + "\n")
# one2NErrFile = str(paths.joinpath("one_2_Big_N_Error.txt")) # one2NErrFile = os.path.join(evtPaths, "one_2_Big_N_Error.txt")
# with open(one2NErrFile, "w") as file: # with open(one2NErrFile, "w") as file:
# for item in fn_events: # for item in fn_events:
# file.write(item + "\n") # file.write(item + "\n")
@ -493,9 +550,8 @@ def contrast_pr(paths):
print('Done!') print('Done!')
if __name__ == "__main__": if __name__ == "__main__":
evtpaths = r"D:\全实时\source_data\2024122416" evtpaths = r"/home/wqg/dataset/test_base_dataset/single_event/source"
contrast_pr(evtpaths) contrast_pr(evtpaths)

View File

@ -58,6 +58,12 @@ def save_imgpairs(barcode, imgpaths, matrix, savepath, thresh=(0.4, 0.6), ctype=
def feat_analysis(featpath): def feat_analysis(featpath):
'''
标准特征集中样本类内、类间相似度分布
'''
savepath = r"D:\exhibition\result\stdfeat" savepath = r"D:\exhibition\result\stdfeat"
InterThresh = (0.4, 0.6) InterThresh = (0.4, 0.6)

172
contrast/trail2trail.py Normal file
View File

@ -0,0 +1,172 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
取出再放回场景下商品轨迹特征比对方式与性能分析
Created on Tue Apr 1 17:17:47 2025
@author: wqg
"""
import os
import pickle
import random
import numpy as np
from pathlib import Path
import matplotlib.pyplot as plt
from scipy.spatial.distance import cdist
from utils.calsimi import calsiml, calsimi_vs_evts
def read_eventdict(evtpaths):
evtDict = {}
for filename in os.listdir(evtpaths):
evtname, ext = os.path.splitext(filename)
if ext != ".pickle": continue
evtpath = os.path.join(evtpaths, filename)
with open(evtpath, 'rb') as f:
evtdata = pickle.load(f)
evtDict[evtname] = evtdata
return evtDict
def compute_show_pr(Same, Cross):
TPFN = len(Same)
TNFP = len(Cross)
Recall_Pos, Recall_Neg = [], []
Precision_Pos, Precision_Neg = [], []
Correct = []
Thresh = np.linspace(-0.2, 1, 100)
for th in Thresh:
TP = np.sum(Same >= th)
FN = np.sum(Same < th)
# FN = TPFN - TP
TN = np.sum(Cross < th)
FP = np.sum(Cross >= th)
# FP = TNFP - TN
Precision_Pos.append(TP/(TP+FP+1e-6))
Precision_Neg.append(TN/(TN+FN+1e-6))
Recall_Pos.append(TP/(TP+FN+1e-6))
Recall_Neg.append(TN/(TN+FP+1e-6))
# Recall_Pos.append(TP/TPFN)
# Recall_Neg.append(TN/TNFP)
Correct.append((TN+TP)/(TPFN+TNFP))
fig, ax = plt.subplots()
ax.plot(Thresh, Precision_Pos, 'r', label='Precision_Pos: TP/(TP+FP)')
ax.plot(Thresh, Recall_Pos, 'b', label='Recall_Pos: TP/TPFN')
ax.plot(Thresh, Recall_Neg, 'g', label='Recall_Neg: TN/TNFP')
ax.plot(Thresh, Correct, 'c', label='Correct: (TN+TP)/(TPFN+TNFP)')
ax.plot(Thresh, Precision_Neg, 'm', label='Precision_Neg: TN/(TN+FN)')
ax.set_xlim([0, 1])
ax.set_ylim([0, 1])
ax.set_xticks(np.arange(0, 1, 0.1))
ax.set_yticks(np.arange(0, 1, 0.1))
ax.grid(True, linestyle='--')
ax.set_title('PrecisePos & PreciseNeg')
ax.set_xlabel(f"Same Num: {TPFN}, Cross Num: {TNFP}")
ax.legend()
plt.show()
# rltpath = os.path.join(similPath, f'pr_1to1_{simType}.png')
# plt.savefig(rltpath) # svg, png, pdf
fig, axes = plt.subplots(2,1)
axes[0].hist(Same, bins=60, range=(-0.2, 1), edgecolor='black')
axes[0].set_xlim([-0.2, 1])
axes[0].set_title(f'TP({len(Same)})')
axes[1].hist(Cross, bins=60, range=(-0.2, 1), edgecolor='black')
axes[1].set_xlim([-0.2, 1])
axes[1].set_title(f'TN({len(Cross)})')
# rltpath = os.path.join(similPath, f'hist_1to1_{simType}.png')
# plt.savefig(rltpath)
plt.show()
def trail_to_trail(evtpaths, rltpaths):
# select the method type of how to calculate the feat similarity of trail
simType = 2
##1. read all the ShoppingEvent object in the dir 'evtpaths'
evtDicts = read_eventdict(evtpaths)
##2. Combine event object with the same barcode
barcodes, evtpairDict = [], {}
for k in evtDicts.keys():
evt = k.split('_')
condt = len(evt)>=2 and evt[-1].isdigit() and len(evt[-1])>=10
if not condt: continue
barcode = evt[-1]
if barcode not in evtpairDict.keys():
evtpairDict[barcode] = []
barcodes.append(barcode)
evtpairDict[barcode].append(evtDicts[k])
barcodes = set(barcodes)
AA_list, AB_list = [], []
for barcode in evtpairDict.keys():
events = evtpairDict[barcode]
if len(events)>1:
evta, evtb = random.sample(events, 2)
AA_list.append((evta, evtb, "same"))
evtc = random.sample(events, 1)[0]
dset = list(barcodes.symmetric_difference(set([barcode])))
bcd = random.sample(dset, 1)[0]
evtd = random.sample(evtpairDict[bcd], 1)[0]
AB_list.append((evtc, evtd, "diff"))
mergePairs = AA_list + AB_list
##3. calculate the similar of two event: evta, evtb
new_pirs = []
for evta, evtb, label in mergePairs:
similar = calsimi_vs_evts(evta, evtb, simType)
if similar is None:
continue
new_pirs.append((label, round(similar, 3), evta.evtname[:15], evtb.evtname[:15]))
##4. compute PR and showing
Same = np.array([s for label, s, _, _ in new_pirs if label=="same"])
Cross = np.array([s for label, s, _, _ in new_pirs if label=="diff"])
compute_show_pr(Same, Cross)
def main():
evttypes = ["single_event_V10", "single_event_V5", "performence_V10", "performence_V5"]
# evttypes = ["single_event_V10"]
for evttype in evttypes:
evtpaths = "/home/wqg/dataset/pipeline/contrast/{}/evtobjs/".format(evttype)
rltpaths = "/home/wqg/dataset/pipeline/yrt/{}/yolos_tracking".format(evttype)
trail_to_trail(evtpaths, rltpaths)
if __name__ == '__main__':
main()

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

216
contrast/utils/calsimi.py Normal file
View File

@ -0,0 +1,216 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Mon Mar 31 16:25:43 2025
@author: wqg
"""
import numpy as np
from scipy.spatial.distance import cdist
def get_topk_percent(data, k):
"""
获取数据中最大的 k% 的元素
"""
# 将数据转换为 NumPy 数组
if isinstance(data, list):
data = np.array(data)
percentile = np.percentile(data, 100-k)
top_k_percent = data[data >= percentile]
return top_k_percent
def cluster(data, thresh=0.15):
# data = np.array([0.1, 0.13, 0.7, 0.2, 0.8, 0.52, 0.3, 0.7, 0.85, 0.58])
# data = np.array([0.1, 0.13, 0.2, 0.3])
# data = np.array([0.1])
if isinstance(data, list):
data = np.array(data)
data1 = np.sort(data)
cluter, Cluters, = [data1[0]], []
for i in range(1, len(data1)):
if data1[i] - data1[i-1]< thresh:
cluter.append(data1[i])
else:
Cluters.append(cluter)
cluter = [data1[i]]
Cluters.append(cluter)
clt_center = []
for clt in Cluters:
## 是否应该在此处限制一个聚类中的最小轨迹样本数,应该将该因素放在轨迹分析中
# if len(clt)>=3:
# clt_center.append(np.mean(clt))
clt_center.append(np.mean(clt))
# print(clt_center)
return clt_center
def calsiml(feat1, feat2, topkp=75, cluth=0.15):
'''轨迹样本和标准特征集样本相似度的选择策略'''
matrix = 1 - cdist(feat1, feat2, 'cosine')
simi_max = []
for i in range(len(matrix)):
sim = np.mean(get_topk_percent(matrix[i, :], topkp))
simi_max.append(sim)
cltc_max = cluster(simi_max, cluth)
Simi = max(cltc_max)
## cltc_max为空属于编程考虑不周应予以排查解决
# if len(cltc_max):
# Simi = max(cltc_max)
# else:
# Simi = 0 #不应该走到该处
return Simi
def calsimi_vs_stdfeat_new(event, stdfeat):
'''事件与标准库的对比策略
该比对策略是否可以拓展到事件与事件的比对?
'''
front_boxes = np.empty((0, 9), dtype=np.float64) ##和类doTracks兼容
front_feats = np.empty((0, 256), dtype=np.float64) ##和类doTracks兼容
for i in range(len(event.front_boxes)):
front_boxes = np.concatenate((front_boxes, event.front_boxes[i]), axis=0)
front_feats = np.concatenate((front_feats, event.front_feats[i]), axis=0)
back_boxes = np.empty((0, 9), dtype=np.float64) ##和类doTracks兼容
back_feats = np.empty((0, 256), dtype=np.float64) ##和类doTracks兼容
for i in range(len(event.back_boxes)):
back_boxes = np.concatenate((back_boxes, event.back_boxes[i]), axis=0)
back_feats = np.concatenate((back_feats, event.back_feats[i]), axis=0)
front_simi, back_simi = None, None
if len(front_feats):
front_simi = calsiml(front_feats, stdfeat)
if len(back_feats):
back_simi = calsiml(back_feats, stdfeat)
'''前后摄相似度融合策略'''
if len(front_feats) and len(back_feats):
diff_simi = abs(front_simi - back_simi)
if diff_simi>0.15:
Similar = max([front_simi, back_simi])
else:
Similar = (front_simi+back_simi)/2
elif len(front_feats) and len(back_feats)==0:
Similar = front_simi
elif len(front_feats)==0 and len(back_feats):
Similar = back_simi
else:
Similar = None # 在event.front_feats和event.back_feats同时为空时
return Similar, front_simi, back_simi
def calsimi_vs_stdfeat(event, stdfeat):
evtfeat = event.feats_compose
if isinstance(event.feats_select, list):
if len(event.feats_select) and len(event.feats_select[0]):
evtfeat = event.feats_select[0]
else:
return None, None, None
else:
evtfeat = event.feats_select
if len(evtfeat)==0 or len(stdfeat)==0:
return None, None, None
evtfeat /= np.linalg.norm(evtfeat, axis=1)[:, None]
stdfeat /= np.linalg.norm(stdfeat, axis=1)[:, None]
matrix = 1 - cdist(evtfeat, stdfeat, 'cosine')
matrix[matrix < 0] = 0
simi_mean = np.mean(matrix)
simi_max = np.max(matrix)
stdfeatm = np.mean(stdfeat, axis=0, keepdims=True)
evtfeatm = np.mean(evtfeat, axis=0, keepdims=True)
simi_mfeat = 1- np.maximum(0.0, cdist(stdfeatm, evtfeatm, 'cosine'))
return simi_mean, simi_max, simi_mfeat[0,0]
def calsimi_vs_evts(evta, evtb, simType=1):
if simType==1:
if len(evta.feats_compose) and len(evtb.feats_compose):
feata = evta.feats_compose
featb = evtb.feats_compose
matrix = 1 - cdist(feata, featb, 'cosine')
similar = np.mean(matrix)
else:
similar = None
return similar
if simType==2:
if len(evta.feats_compose) and len(evtb.feats_compose):
feata = evta.feats_compose
featb = evtb.feats_compose
matrix = 1 - cdist(feata, featb, 'cosine')
similar = np.max(matrix)
else:
similar = None
return similar
if simType==3:
if len(evta.feats_compose) and len(evtb.feats_compose):
feata = evta.feats_compose
featb = evtb.feats_compose
similar = calsiml(feata, featb)
else:
similar = None
return similar
##1. the front feats of evta, evtb
fr_feata = np.empty((0, 256), dtype=np.float64) ##和类doTracks兼容
for i in range(len(evta.front_feats)):
fr_feata = np.concatenate((fr_feata, evta.front_feats[i]), axis=0)
fr_featb = np.empty((0, 256), dtype=np.float64) ##和类doTracks兼容
for i in range(len(evtb.front_feats)):
fr_featb = np.concatenate((fr_featb, evtb.front_feats[i]), axis=0)
##2. the back feats of evta, evtb
bk_feata = np.empty((0, 256), dtype=np.float64) ##和类doTracks兼容
for i in range(len(evta.back_feats)):
bk_feata = np.concatenate((bk_feata, evta.back_feats[i]), axis=0)
bk_featb = np.empty((0, 256), dtype=np.float64) ##和类doTracks兼容
for i in range(len(evtb.back_feats)):
bk_featb = np.concatenate((bk_featb, evtb.back_feats[i]), axis=0)
front_simi, back_simi = None, None
if len(fr_feata) and len(fr_featb):
front_simi = calsiml(fr_feata, fr_featb)
if len(bk_feata) and len(bk_featb):
back_simi = calsiml(bk_feata, bk_featb)
'''前后摄相似度融合策略'''
if front_simi is not None and back_simi is not None:
diff_simi = abs(front_simi - back_simi)
if diff_simi>0.15:
similar = max([front_simi, back_simi])
else:
similar = (front_simi+back_simi)/2
elif front_simi is not None and back_simi is None:
similar = front_simi
elif front_simi is None and back_simi is not None:
similar = back_simi
else:
similar = None # 在event.front_feats和event.back_feats同时为空时
return similar

127
contrast/utils/databits.py Normal file
View File

@ -0,0 +1,127 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Apr 1 16:43:04 2025
@author: wqg
"""
import os
import pickle
import numpy as np
from scipy.spatial.distance import cdist
def int8_to_ft16(arr_uint8, amin, amax):
arr_ft16 = (arr_uint8 / 255 * (amax-amin) + amin).astype(np.float16)
return arr_ft16
def ft16_to_uint8(arr_ft16):
# pickpath = r"\\192.168.1.28\share\测试_202406\contrast\std_features_ft32vsft16\6902265587712_ft16.pickle"
# with open(pickpath, 'rb') as f:
# edict = pickle.load(f)
# arr_ft16 = edict['feats']
amin = np.min(arr_ft16)
amax = np.max(arr_ft16)
arr_ft255 = (arr_ft16 - amin) * 255 / (amax-amin)
arr_uint8 = arr_ft255.astype(np.uint8)
arr_ft16_ = int8_to_ft16(arr_uint8, amin, amax)
arrDistNorm = np.linalg.norm(arr_ft16_ - arr_ft16) / arr_ft16_.size
return arr_uint8, arr_ft16_
def data_precision_compare(stdfeat, evtfeat, evtMessage, similPath='', save=True):
evt, stdbcd, label = evtMessage
rltdata, rltdata_ft16, rltdata_ft16_ = [], [], []
matrix = 1 - cdist(stdfeat, evtfeat, 'cosine')
simi_mean = np.mean(matrix)
simi_max = np.max(matrix)
stdfeatm = np.mean(stdfeat, axis=0, keepdims=True)
evtfeatm = np.mean(evtfeat, axis=0, keepdims=True)
simi_mfeat = 1- np.maximum(0.0, cdist(stdfeatm, evtfeatm, 'cosine'))
rltdata = [label, stdbcd, evt, simi_mean, simi_max, simi_mfeat[0,0]]
##================================================================= float16
stdfeat_ft16 = stdfeat.astype(np.float16)
evtfeat_ft16 = evtfeat.astype(np.float16)
stdfeat_ft16 /= np.linalg.norm(stdfeat_ft16, axis=1)[:, None]
evtfeat_ft16 /= np.linalg.norm(evtfeat_ft16, axis=1)[:, None]
matrix_ft16 = 1 - cdist(stdfeat_ft16, evtfeat_ft16, 'cosine')
simi_mean_ft16 = np.mean(matrix_ft16)
simi_max_ft16 = np.max(matrix_ft16)
stdfeatm_ft16 = np.mean(stdfeat_ft16, axis=0, keepdims=True)
evtfeatm_ft16 = np.mean(evtfeat_ft16, axis=0, keepdims=True)
simi_mfeat_ft16 = 1- np.maximum(0.0, cdist(stdfeatm_ft16, evtfeatm_ft16, 'cosine'))
rltdata_ft16 = [label, stdbcd, evt, simi_mean_ft16, simi_max_ft16, simi_mfeat_ft16[0,0]]
'''****************** uint8 is ok!!!!!! ******************'''
##=================================================================== uint8
# stdfeat_uint8, stdfeat_ft16_ = ft16_to_uint8(stdfeat_ft16)
# evtfeat_uint8, evtfeat_ft16_ = ft16_to_uint8(evtfeat_ft16)
stdfeat_uint8 = (stdfeat_ft16*128).astype(np.int8)
evtfeat_uint8 = (evtfeat_ft16*128).astype(np.int8)
stdfeat_ft16_ = stdfeat_uint8.astype(np.float16)/128
evtfeat_ft16_ = evtfeat_uint8.astype(np.float16)/128
absdiff = np.linalg.norm(stdfeat_ft16_ - stdfeat) / stdfeat.size
matrix_ft16_ = 1 - cdist(stdfeat_ft16_, evtfeat_ft16_, 'cosine')
simi_mean_ft16_ = np.mean(matrix_ft16_)
simi_max_ft16_ = np.max(matrix_ft16_)
stdfeatm_ft16_ = np.mean(stdfeat_ft16_, axis=0, keepdims=True)
evtfeatm_ft16_ = np.mean(evtfeat_ft16_, axis=0, keepdims=True)
simi_mfeat_ft16_ = 1- np.maximum(0.0, cdist(stdfeatm_ft16_, evtfeatm_ft16_, 'cosine'))
rltdata_ft16_ = [label, stdbcd, evt, simi_mean_ft16_, simi_max_ft16_, simi_mfeat_ft16_[0,0]]
if not save:
return
##========================================================= save as float32
rppath = os.path.join(similPath, f'{evt}_ft32.pickle')
with open(rppath, 'wb') as f:
pickle.dump(rltdata, f)
rtpath = os.path.join(similPath, f'{evt}_ft32.txt')
with open(rtpath, 'w', encoding='utf-8') as f:
for result in rltdata:
part = [f"{x:.3f}" if isinstance(x, float) else str(x) for x in result]
line = ', '.join(part)
f.write(line + '\n')
##========================================================= save as float16
rppath_ft16 = os.path.join(similPath, f'{evt}_ft16.pickle')
with open(rppath_ft16, 'wb') as f:
pickle.dump(rltdata_ft16, f)
rtpath_ft16 = os.path.join(similPath, f'{evt}_ft16.txt')
with open(rtpath_ft16, 'w', encoding='utf-8') as f:
for result in rltdata_ft16:
part = [f"{x:.3f}" if isinstance(x, float) else str(x) for x in result]
line = ', '.join(part)
f.write(line + '\n')
##=========================================================== save as uint8
rppath_uint8 = os.path.join(similPath, f'{evt}_uint8.pickle')
with open(rppath_uint8, 'wb') as f:
pickle.dump(rltdata_ft16_, f)
rtpath_uint8 = os.path.join(similPath, f'{evt}_uint8.txt')
with open(rtpath_uint8, 'w', encoding='utf-8') as f:
for result in rltdata_ft16_:
part = [f"{x:.3f}" if isinstance(x, float) else str(x) for x in result]
line = ', '.join(part)
f.write(line + '\n')

View File

@ -5,18 +5,30 @@ Created on Tue Nov 26 17:35:05 2024
@author: ym @author: ym
""" """
import os import os
import sys
import cv2 import cv2
import pickle import pickle
import numpy as np import numpy as np
from pathlib import Path from pathlib import Path
import sys FILE = Path(__file__).resolve()
sys.path.append(r"D:\DetectTracking") ROOT = FILE.parents[2] # YOLOv5 root directory
if str(ROOT) not in sys.path:
sys.path.append(str(ROOT))
from tracking.utils.plotting import Annotator, colors from tracking.utils.plotting import Annotator, colors
from tracking.utils.drawtracks import drawTrack from tracking.utils.drawtracks import drawTrack
from tracking.utils.read_data import extract_data, read_tracking_output, read_similar from tracking.utils.read_data import extract_data, read_tracking_output, read_similar
from tracking.utils.read_data import extract_data_realtime, read_tracking_output_realtime from tracking.utils.read_data import extract_data_realtime, read_tracking_output_realtime
# import platform
# import pathlib
# plt = platform.system()
IMG_FORMAT = ['.bmp', '.jpg', '.jpeg', '.png'] IMG_FORMAT = ['.bmp', '.jpg', '.jpeg', '.png']
VID_FORMAT = ['.mp4', '.avi'] VID_FORMAT = ['.mp4', '.avi']
@ -76,7 +88,11 @@ def array2list(bboxes):
class ShoppingEvent: class ShoppingEvent:
def __init__(self, eventpath, stype="data"): def __init__(self, eventpath, stype="data"):
'''stype: str, 'source', 'data', 'realtime', 共三种 ''' '''stype: str, 'source', 'data', 'realtime', 共三种
source: 前后摄视频经 pipeline 生成的文件
data: 基于事件切分的原 data 文件版本
realtime: 全实时生成的 data 文件
'''
self.eventpath = eventpath self.eventpath = eventpath
self.evtname = str(Path(eventpath).stem) self.evtname = str(Path(eventpath).stem)
@ -167,6 +183,8 @@ class ShoppingEvent:
def from_source_pkl(self, eventpath): def from_source_pkl(self, eventpath):
# if plt == 'Windows':
# pathlib.PosixPath = pathlib.WindowsPath
with open(eventpath, 'rb') as f: with open(eventpath, 'rb') as f:
ShoppingDict = pickle.load(f) ShoppingDict = pickle.load(f)
@ -296,13 +314,13 @@ class ShoppingEvent:
self.front_feats = tracking_output_feats self.front_feats = tracking_output_feats
def from_realtime_datafile(self, eventpath): def from_realtime_datafile(self, eventpath):
# evtList = self.evtname.split('_') evtList = self.evtname.split('_')
# if len(evtList)>=2 and len(evtList[-1])>=10 and evtList[-1].isdigit(): if len(evtList)>=2 and len(evtList[-1])>=10 and evtList[-1].isdigit():
# self.barcode = evtList[-1] self.barcode = evtList[-1]
# if len(evtList)==3 and evtList[-1]== evtList[-2]: if len(evtList)==3 and evtList[-1]== evtList[-2]:
# self.evtType = 'input' self.evtType = 'input'
# else: else:
# self.evtType = 'other' self.evtType = 'other'
'''================ path of video =============''' '''================ path of video ============='''
for vidname in os.listdir(eventpath): for vidname in os.listdir(eventpath):
@ -330,7 +348,7 @@ class ShoppingEvent:
if not os.path.isfile(datapath): continue if not os.path.isfile(datapath): continue
CamerType = dataname.split('_')[0] CamerType = dataname.split('_')[0]
'''========== 0/1_track.data ==========''' '''========== 0/1_track.data =========='''
if dataname.find("_track.data")>0: if dataname.find("_tracker.data")>0:
trackerboxes, trackerfeats = extract_data_realtime(datapath) trackerboxes, trackerfeats = extract_data_realtime(datapath)
if CamerType == '0': if CamerType == '0':
self.back_trackerboxes = trackerboxes self.back_trackerboxes = trackerboxes

View File

@ -4,8 +4,81 @@ Created on Thu Oct 31 15:17:01 2024
@author: ym @author: ym
""" """
import os
import numpy as np import numpy as np
import pickle
from pathlib import Path
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from .event import ShoppingEvent
def init_eventDict(sourcePath, eventDataPath, stype="data"):
'''
stype: str,
'source': 由 videos 或 images 生成的 pickle 文件
'data': 从 data 文件中读取的现场运行数据
"realtime": 全实时数据,从 data 文件中读取的现场运行数据
sourcePath:事件文件夹事件类型包含2种
(1) pipeline生成的 pickle 文件
(2) 直接采集的事件文件夹
'''
k, errEvents = 0, []
for evtname in os.listdir(sourcePath):
bname, ext = os.path.splitext(evtname)
source_path = os.path.join(sourcePath, evtname)
if stype=="source" and ext not in ['.pkl', '.pickle']: continue
if stype=="data" and os.path.isfile(source_path): continue
if stype=="realtime" and os.path.isfile(source_path): continue
evt = bname.split('_')
condt = len(evt)>=2 and evt[-1].isdigit() and len(evt[-1])>=10
if not condt: continue
pickpath = os.path.join(eventDataPath, f"{bname}.pickle")
if os.path.isfile(pickpath): continue
# event = ShoppingEvent(source_path, stype)
try:
event = ShoppingEvent(source_path, stype)
with open(pickpath, 'wb') as f:
pickle.dump(event, f)
print(evtname)
except Exception as e:
errEvents.append(source_path)
print(f"Error: {evtname}, {e}")
# k += 1
# if k==1:
# break
errfile = Path(eventDataPath).parent / 'error_events.txt'
with open(str(errfile), 'a', encoding='utf-8') as f:
for line in errEvents:
f.write(line + '\n')
def get_evtList(evtpath):
'''==== 0. 生成事件列表和对应的 Barcodes 集合 ==========='''
bcdList, evtpaths = [], []
for evtname in os.listdir(evtpath):
bname, ext = os.path.splitext(evtname)
## 处理事件的两种情况:文件夹 和 Yolo-Resnet-Tracker 的输出
fpath = os.path.join(evtpath, evtname)
if os.path.isfile(fpath) and (ext==".pkl" or ext==".pickle"):
evt = bname.split('_')
elif os.path.isdir(fpath):
evt = evtname.split('_')
else:
continue
if len(evt)>=2 and evt[-1].isdigit() and len(evt[-1])>=10:
bcdList.append(evt[-1])
evtpaths.append(fpath)
bcdSet = set(bcdList)
return evtpaths, bcdSet

72
dataset/multi-trajs.py Normal file
View File

@ -0,0 +1,72 @@
# -*- coding: utf-8 -*-
"""
Created on Mon Mar 10 09:33:35 2025
基准数据集筛选选取tracking输出多个轨迹的事件
@author: ym
"""
import os
import numpy as np
import sys
sys.path.append(r"D:\DetectTracking")
from tracking.utils.read_data import extract_data, read_tracking_output_realtime
def get_multitraj_file(spath, pattern):
multi_traj_events = []
n = 0
for evtname in os.listdir(spath):
name, ext = os.path.splitext(evtname)
eventpath = os.path.join(spath, evtname)
evt = name.split('_')
condt = len(evt)>=2 and evt[-1].isdigit() and len(evt[-1])>=8
if not condt: continue
if not os.path.isdir(eventpath): continue
trackingboxes = []
for dataname in os.listdir(eventpath):
if os.path.splitext(dataname)[-1] in [".jpg", ".png"]:
continue
datapath = os.path.join(eventpath, dataname)
if not os.path.isfile(datapath): continue
CamerType = dataname.split('_')[0]
if pattern=="realtime" and dataname.find("_tracking_output.data")>0:
trackingboxes, trackingfeats, tracking_outboxes, tracking_outfeats = read_tracking_output_realtime(datapath)
if pattern=="evtsplit" and dataname.find("_track.data")>0:
bboxes, ffeats, trackerboxes, trackerfeats, trackingboxes, trackingfeats = extract_data(datapath)
if len(trackingboxes)>=2:
multi_traj_events.append(evtname)
n += 1
print(f"{n}: {evtname}")
break
multi_traj_file = os.path.join(spath, "multi_traj_file.txt")
with open(multi_traj_file, "w") as file:
for item in multi_traj_events:
file.write(item + "\n")
def main():
spaths = [r"\\192.168.1.28\share\测试视频数据以及日志\各模块测试记录\比对测试\1212",
r"\\192.168.1.28\share\测试视频数据以及日志\各模块测试记录\比对测试\1216",
r"\\192.168.1.28\share\测试视频数据以及日志\各模块测试记录\比对测试\1218",
r"\\192.168.1.28\share\测试视频数据以及日志\各模块测试记录\比对测试\202412"
]
pattern = "evtsplit" # realtime # 全实时版、事件切分版数据读取方式
for spath in spaths:
get_multitraj_file(spath, pattern)
if __name__ == '__main__':
main()

41
execute_pipeline.py Normal file
View File

@ -0,0 +1,41 @@
# -*- coding: utf-8 -*-
"""
Created on Fri Mar 28 11:35:28 2025
@author: ym
"""
from pipeline import execute_pipeline
def execute(datapath, savepath_v5, savepath_v10):
execute_pipeline(evtdir = datapath,
DataType = "raw", # raw, pkl
kk=None,
source_type = "video", # video, image,
save_path = savepath_v5,
yolo_ver = "V5", # V10, V5
weight_yolo_v5 = r'./ckpts/best_cls10_0906.pt' ,
weight_yolo_v10 = r'./ckpts/best_v10s_width0375_1205.pt',
saveimages = False
)
execute_pipeline(evtdir = datapath,
DataType = "raw", # raw, pkl
kk=None,
source_type = "video", # video, image,
save_path = savepath_v10,
yolo_ver = "V10", # V10, V5
weight_yolo_v5 = r'./ckpts/best_cls10_0906.pt' ,
weight_yolo_v10 = r'./ckpts/best_v10s_width0375_1205.pt',
saveimages = False
)
datapath = r'/home/wqg/dataset/test_dataset/base_dataset/single_event/source/'
savepath_v5 = r'/home/wqg/dataset/pipeline/contrast/single_event_V5'
savepath_v10 = r'/home/wqg/dataset/pipeline/contrast/single_event_V10'
execute(datapath, savepath_v5, savepath_v10)
datapath = r'/home/wqg/dataset/test_performence_dataset/'
savepath_v5 = r'/home/wqg/dataset/pipeline/contrast/performence_V5'
savepath_v10 = r'/home/wqg/dataset/pipeline/contrast/performence_V10'
execute(datapath, savepath_v5, savepath_v10)

Binary file not shown.

127
imgs_to_video.py Normal file
View File

@ -0,0 +1,127 @@
# -*- coding: utf-8 -*-
"""
Created on Tue Jan 30 19:15:05 2024
@author: ym
"""
import cv2
import os
import glob
IMG_FORMATS = "bmp", "dng", "jpeg", "jpg", "mpo", "png", "tif", "tiff", "webp", "pfm" # include image suffixes
VID_FORMATS = "asf", "avi", "gif", "m4v", "mkv", "mov", "mp4", "mpeg", "mpg", "ts", "wmv" # include video suffixes
def for_test():
save_path = video_path + img_path
fps, w, h = 10, 1024, 1280
cap = cv2.VideoWriter(save_path, cv2.VideoWriter_fourcc(*'mp4v'), fps, (w, h))
pathx = path + img_path
imgfiles = [f for f in os.listdir(pathx) if not f.find("_cut") != -1]
imgfiles.sort(key = lambda x: int(x[:-5]))
imgpaths = []
for imgfile in imgfiles:
imgpaths.append(os.path.join(pathx, imgfile))
center = (1280/2, 1024/2)
rotate_matrix = cv2.getRotationMatrix2D(center=center, angle=-90, scale=1)
k = 0
for ipath in imgpaths:
img = cv2.imread(ipath)
rotated_image = cv2.warpAffine(src=img, M=rotate_matrix, dsize=(w, h))
cap.write(rotated_image)
print("Have imgs")
def test_1():
# name = os.path.split(img_path)[-1]
# save_path = video_path + name + '.mp4'
save_path = video_path + img_path
fps, w, h = 10, 1024, 1280
cap = cv2.VideoWriter(save_path, cv2.VideoWriter_fourcc(*'mp4v'), fps, (w, h))
pathx = path + img_path
imgfiles = [f for f in os.listdir(pathx) if not f.find("_cut") != -1]
imgfiles.sort(key = lambda x: int(x[:-5]))
imgpaths = []
for imgfile in imgfiles:
imgpaths.append(os.path.join(pathx, imgfile))
# ipaths = [os.path.join(pathx, f) for f in os.listdir(pathx) if not f.find("_cut") != -1]
# ipaths = []
# for f in os.listdir(pathx):
# if not f.find('_cut'):
# ipaths.append(os.path.join(pathx, f))
# ipaths.sort(key = lambda x: int(x.split('_')[-2]))
k = 0
for ipath in imgpaths:
img = cv2.imread(ipath)
cap.write(img)
k += 1
cap.release()
print(img_path + f" have imgs: {k}")
def img2video(imgpath):
if not os.path.isdir(imgpath):
return
files = []
files.extend(sorted(glob.glob(os.path.join(imgpath, "*.*"))))
images = [x for x in files if x.split(".")[-1].lower() in IMG_FORMATS]
h, w = cv2.imread(images[0]).shape[:2]
fps = 25
vidpath = imgpath + '.mp4'
cap = cv2.VideoWriter(vidpath, cv2.VideoWriter_fourcc(*'mp4v'), fps, (w, h))
for p in images:
img = cv2.imread(p)
cap.write(img)
cap.release()
def main():
imgpath = r"D:\work\result\202503251112_v10s_result"
img2video(imgpath)
if __name__ == "__main__":
main()

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -76,7 +76,11 @@ def attempt_load(weights, device=None, inplace=True, fuse=True):
model = Ensemble() model = Ensemble()
for w in weights if isinstance(weights, list) else [weights]: for w in weights if isinstance(weights, list) else [weights]:
ckpt = torch.load(attempt_download(w), map_location=device) # load if torch.__version__ >= '2.6':
ckpt = torch.load(attempt_download(w), map_location=device, weights_only=False) # load
else:
ckpt = torch.load(attempt_download(w), map_location=device)
ckpt = (ckpt.get('ema') or ckpt['model']).to(device).float() # FP32 model ckpt = (ckpt.get('ema') or ckpt['model']).to(device).float() # FP32 model
# Model compatibility updates # Model compatibility updates

View File

@ -10,7 +10,8 @@ import cv2
import pickle import pickle
import numpy as np import numpy as np
from pathlib import Path from pathlib import Path
from track_reid import yolo_resnet_tracker from scipy.spatial.distance import cdist
from track_reid import yolo_resnet_tracker, yolov10_resnet_tracker
from tracking.dotrack.dotracks_back import doBackTracks from tracking.dotrack.dotracks_back import doBackTracks
from tracking.dotrack.dotracks_front import doFrontTracks from tracking.dotrack.dotracks_front import doFrontTracks
@ -19,76 +20,217 @@ from utils.getsource import get_image_pairs, get_video_pairs
from tracking.utils.read_data import read_similar from tracking.utils.read_data import read_similar
def save_subimgs(imgdict, boxes, spath, ctype): def save_subimgs(imgdict, boxes, spath, ctype, featdict = None):
'''
当前 box 特征和该轨迹前一个 box 特征的相似度,可用于和跟踪序列中的相似度进行比较
'''
boxes = boxes[np.argsort(boxes[:, 7])]
for i in range(len(boxes)): for i in range(len(boxes)):
fid, bid = int(boxes[i, 7]), int(boxes[i, 8]) simi = None
if f"{fid}_{bid}" in imgdict.keys(): tid, fid, bid = int(boxes[i, 4]), int(boxes[i, 7]), int(boxes[i, 8])
img = imgdict[f"{fid}_{bid}"]
imgpath = spath / f"{ctype}_{fid}_{bid}.png" if i>0:
cv2.imwrite(imgpath, img) _, fid0, bid0 = int(boxes[i-1, 4]), int(boxes[i-1, 7]), int(boxes[i-1, 8])
if f"{fid0}_{bid0}" in featdict.keys() and f"{fid}_{bid}" in featdict.keys():
feat0 = featdict[f"{fid0}_{bid0}"]
feat1 = featdict[f"{fid}_{bid}"]
simi = 1 - np.maximum(0.0, cdist(feat0[None, :], feat1[None, :], "cosine"))[0][0]
img = imgdict[f"{fid}_{bid}"]
imgpath = spath / f"{ctype}_tid{tid}-{fid}-{bid}.png"
if simi is not None:
imgpath = spath / f"{ctype}_tid{tid}-{fid}-{bid}_sim{simi:.2f}.png"
cv2.imwrite(imgpath, img)
def pipeline( def save_subimgs_1(imgdict, boxes, spath, ctype, simidict = None):
eventpath,
savepath,
SourceType,
weights
):
''' '''
eventpath: 单个事件的存储路径 当前 box 特征和该轨迹 smooth_feat 特征的相似度, yolo_resnet_tracker 函数中,
采用该方式记录特征相似度
''' '''
for i in range(len(boxes)):
tid, fid, bid = int(boxes[i, 4]), int(boxes[i, 7]), int(boxes[i, 8])
if SourceType == "video": key = f"{fid}_{bid}"
vpaths = get_video_pairs(eventpath) img = imgdict[key]
elif SourceType == "image": imgpath = spath / f"{ctype}_tid{tid}-{fid}-{bid}.png"
vpaths = get_image_pairs(eventpath) if simidict is not None and key in simidict.keys():
imgpath = spath / f"{ctype}_tid{tid}-{fid}-{bid}_sim{simidict[key]:.2f}.png"
optdict = {} cv2.imwrite(imgpath, img)
optdict["weights"] = weights
def show_result(event_tracks, yrtDict, savepath_pipe):
'''保存 Tracking 输出的运动轨迹子图,并记录相似度'''
savepath_pipe_subimgs = savepath_pipe / Path("subimgs")
if not savepath_pipe_subimgs.exists():
savepath_pipe_subimgs.mkdir(parents=True, exist_ok=True)
event_tracks = []
for CamerType, vts in event_tracks:
if len(vts.tracks)==0: continue
if CamerType == 'front':
# yolos = ShoppingDict["frontCamera"]["yoloResnetTracker"]
yolos = yrtDict["frontyrt"]
ctype = 1
if CamerType == 'back':
# yolos = ShoppingDict["backCamera"]["yoloResnetTracker"]
yolos = yrtDict["backyrt"]
ctype = 0
imgdict, featdict, simidict = {}, {}, {}
for y in yolos:
imgdict.update(y["imgs"])
featdict.update(y["feats"])
simidict.update(y["featsimi"])
for track in vts.Residual:
if isinstance(track, np.ndarray):
save_subimgs(imgdict, track, savepath_pipe_subimgs, ctype, featdict)
else:
save_subimgs(imgdict, track.slt_boxes, savepath_pipe_subimgs, ctype, featdict)
'''(3) 轨迹显示与保存'''
illus = [None, None]
for CamerType, vts in event_tracks:
if len(vts.tracks)==0: continue
if CamerType == 'front':
edgeline = cv2.imread("./tracking/shopcart/cart_tempt/board_ftmp_line.png")
h, w = edgeline.shape[:2]
# nh, nw = h//2, w//2
# edgeline = cv2.resize(edgeline, (nw, nh), interpolation=cv2.INTER_AREA)
img_tracking = draw_all_trajectories(vts, edgeline, savepath_pipe, CamerType, draw5p=True)
illus[0] = img_tracking
plt = plot_frameID_y2(vts)
plt.savefig(os.path.join(savepath_pipe, "front_y2.png"))
if CamerType == 'back':
edgeline = cv2.imread("./tracking/shopcart/cart_tempt/edgeline.png")
h, w = edgeline.shape[:2]
# nh, nw = h//2, w//2
# edgeline = cv2.resize(edgeline, (nw, nh), interpolation=cv2.INTER_AREA)
img_tracking = draw_all_trajectories(vts, edgeline, savepath_pipe, CamerType, draw5p=True)
illus[1] = img_tracking
illus = [im for im in illus if im is not None]
if len(illus):
img_cat = np.concatenate(illus, axis = 1)
if len(illus)==2:
H, W = img_cat.shape[:2]
cv2.line(img_cat, (int(W/2), 0), (int(W/2), int(H)), (128, 128, 255), 3)
trajpath = os.path.join(savepath_pipe, "trajectory.png")
cv2.imwrite(trajpath, img_cat)
def pipeline(eventpath,
SourceType,
weights,
DataType = "raw", #raw, pkl: images or videos, pkl, pickle file
YoloVersion="V5",
savepath = None,
saveimages = True
):
## 构造购物事件字典 ## 构造购物事件字典
evtname = Path(eventpath).stem evtname = Path(eventpath).stem
barcode = evtname.split('_')[-1] if len(evtname.split('_'))>=2 \ barcode = evtname.split('_')[-1] if len(evtname.split('_'))>=2 \
and len(evtname.split('_')[-1])>=8 \ and len(evtname.split('_')[-1])>=8 \
and evtname.split('_')[-1].isdigit() else '' and evtname.split('_')[-1].isdigit() else ''
'''事件结果存储文件夹'''
'''事件结果存储文件夹: savepath_pipe, savepath_pkl'''
if not savepath: if not savepath:
savepath = Path(__file__).resolve().parents[0] / "events_result" savepath = Path(__file__).resolve().parents[0] / "events_result"
savepath_pipe = Path(savepath) / Path("yolos_tracking") / evtname
savepath_pipeline = Path(savepath) / Path("Yolos_Tracking") / evtname
"""ShoppingDict pickle 文件保存地址 """ savepath_pkl = Path(savepath) / "shopping_pkl"
savepath_spdict = Path(savepath) / "ShoppingDict_pkfile" if not savepath_pkl.exists():
if not savepath_spdict.exists(): savepath_pkl.mkdir(parents=True, exist_ok=True)
savepath_spdict.mkdir(parents=True, exist_ok=True) pklpath = Path(savepath_pkl) / Path(str(evtname)+".pickle")
pf_path = Path(savepath_spdict) / Path(str(evtname)+".pickle")
# if pf_path.exists():
# return
yrt_out = []
if DataType == "raw":
### 不重复执行已经过yolo-resnet-tracker
if pklpath.exists():
print(f"Pickle file have saved: {evtname}.pickle")
return
if SourceType == "video":
vpaths = get_video_pairs(eventpath)
elif SourceType == "image":
vpaths = get_image_pairs(eventpath)
for vpath in vpaths:
'''================= 2. 事件结果存储文件夹 ================='''
if isinstance(vpath, list):
savepath_pipe_imgs = savepath_pipe / Path("images")
else:
savepath_pipe_imgs = savepath_pipe / Path(str(Path(vpath).stem))
if not savepath_pipe_imgs.exists():
savepath_pipe_imgs.mkdir(parents=True, exist_ok=True)
optdict = {}
optdict["weights"] = weights
optdict["source"] = vpath
optdict["save_dir"] = savepath_pipe_imgs
optdict["is_save_img"] = saveimages
optdict["is_save_video"] = True
if YoloVersion == "V5":
yrtOut = yolo_resnet_tracker(**optdict)
elif YoloVersion == "V10":
yrtOut = yolov10_resnet_tracker(**optdict)
yrt_out.append((vpath, yrtOut))
elif DataType == "pkl":
pass
else:
return
'''====================== 构造 ShoppingDict 模块 ======================='''
ShoppingDict = {"eventPath": eventpath, ShoppingDict = {"eventPath": eventpath,
"eventName": evtname, "eventName": evtname,
"barcode": barcode, "barcode": barcode,
"eventType": '', # "input", "output", "other" "eventType": '', # "input", "output", "other"
"frontCamera": {}, "frontCamera": {},
"backCamera": {}, "backCamera": {},
"one2n": [] "one2n": [] #
} }
procpath = Path(eventpath).joinpath('process.data') procpath = Path(eventpath).joinpath('process.data')
if procpath.is_file(): if procpath.is_file():
SimiDict = read_similar(procpath) SimiDict = read_similar(procpath)
ShoppingDict["one2n"] = SimiDict['one2n'] ShoppingDict["one2n"] = SimiDict['one2n']
yrtDict = {}
for vpath in vpaths: event_tracks = []
'''相机事件字典构造''' for vpath, yrtOut in yrt_out:
'''================= 1. 构造相机事件字典 ================='''
CameraEvent = {"cameraType": '', # "front", "back" CameraEvent = {"cameraType": '', # "front", "back"
"videoPath": '', "videoPath": '',
"imagePaths": [], "imagePaths": [],
@ -101,52 +243,45 @@ def pipeline(
bname = os.path.basename(vpath[0]) bname = os.path.basename(vpath[0])
if not isinstance(vpath, list): if not isinstance(vpath, list):
CameraEvent["videoPath"] = vpath CameraEvent["videoPath"] = vpath
bname = os.path.basename(vpath) bname = os.path.basename(vpath).split('.')[0]
if bname.split('_')[0] == "0" or bname.find('back')>=0: if bname.split('_')[0] == "0" or bname.find('back')>=0:
CameraEvent["cameraType"] = "back" CameraEvent["cameraType"] = "back"
if bname.split('_')[0] == "1" or bname.find('front')>=0: if bname.split('_')[0] == "1" or bname.find('front')>=0:
CameraEvent["cameraType"] = "front" CameraEvent["cameraType"] = "front"
'''事件结果存储文件夹'''
if isinstance(vpath, list): '''2种保存方式: (1) no save subimg, (2) save img'''
savepath_pipeline_imgs = savepath_pipeline / Path("images") ###(1) save images
else: yrtOut_save = []
savepath_pipeline_imgs = savepath_pipeline / Path(str(Path(vpath).stem)) for frdict in yrtOut:
if not savepath_pipeline_imgs.exists(): fr_dict = {}
savepath_pipeline_imgs.mkdir(parents=True, exist_ok=True) for k, v in frdict.items():
if k != "imgs":
fr_dict[k]=v
yrtOut_save.append(fr_dict)
CameraEvent["yoloResnetTracker"] = yrtOut_save
savepath_pipeline_subimgs = savepath_pipeline / Path("subimgs") ###(2) no save images
if not savepath_pipeline_subimgs.exists(): # CameraEvent["yoloResnetTracker"] = yrtOut
savepath_pipeline_subimgs.mkdir(parents=True, exist_ok=True)
'''Yolo + Resnet + Tracker'''
optdict["source"] = vpath
optdict["save_dir"] = savepath_pipeline_imgs
yrtOut = yolo_resnet_tracker(**optdict)
CameraEvent["yoloResnetTracker"] = yrtOut
# bboxes = np.empty((0, 9), dtype = np.float32)
# for frameDict in yrtOut:
# bboxes = np.concatenate([bboxes, frameDict["tboxes"]], axis=0)
'''================= 4. tracking ================='''
'''(1) 生成用于 tracking 模块的 boxes、feats'''
bboxes = np.empty((0, 6), dtype=np.float64)
trackerboxes = np.empty((0, 9), dtype=np.float64) trackerboxes = np.empty((0, 9), dtype=np.float64)
trackefeats = {} trackefeats = {}
for frameDict in yrtOut: for frameDict in yrtOut:
tboxes = frameDict["tboxes"] tboxes = frameDict["tboxes"]
ffeats = frameDict["feats"] ffeats = frameDict["feats"]
boxes = frameDict["bboxes"]
bboxes = np.concatenate((bboxes, np.array(boxes)), axis=0)
trackerboxes = np.concatenate((trackerboxes, np.array(tboxes)), axis=0) trackerboxes = np.concatenate((trackerboxes, np.array(tboxes)), axis=0)
for i in range(len(tboxes)): for i in range(len(tboxes)):
fid, bid = int(tboxes[i, 7]), int(tboxes[i, 8]) fid, bid = int(tboxes[i, 7]), int(tboxes[i, 8])
trackefeats.update({f"{fid}_{bid}": ffeats[f"{fid}_{bid}"]}) trackefeats.update({f"{fid}_{bid}": ffeats[f"{fid}_{bid}"]})
'''tracking''' '''(2) tracking, 后摄'''
if CameraEvent["cameraType"] == "back": if CameraEvent["cameraType"] == "back":
vts = doBackTracks(trackerboxes, trackefeats) vts = doBackTracks(trackerboxes, trackefeats)
vts.classify() vts.classify()
@ -155,6 +290,9 @@ def pipeline(
CameraEvent["tracking"] = vts CameraEvent["tracking"] = vts
ShoppingDict["backCamera"] = CameraEvent ShoppingDict["backCamera"] = CameraEvent
yrtDict["backyrt"] = yrtOut
'''(2) tracking, 前摄'''
if CameraEvent["cameraType"] == "front": if CameraEvent["cameraType"] == "front":
vts = doFrontTracks(trackerboxes, trackefeats) vts = doFrontTracks(trackerboxes, trackefeats)
vts.classify() vts.classify()
@ -163,105 +301,82 @@ def pipeline(
CameraEvent["tracking"] = vts CameraEvent["tracking"] = vts
ShoppingDict["frontCamera"] = CameraEvent ShoppingDict["frontCamera"] = CameraEvent
yrtDict["frontyrt"] = yrtOut
with open(str(pf_path), 'wb') as f: '''========================== 保存模块 ================================='''
# 保存 ShoppingDict
with open(str(pklpath), 'wb') as f:
pickle.dump(ShoppingDict, f) pickle.dump(ShoppingDict, f)
# 绘制并保存轨迹图
for CamerType, vts in event_tracks: show_result(event_tracks, yrtDict, savepath_pipe)
if len(vts.tracks)==0: continue
if CamerType == 'front':
yolos = ShoppingDict["frontCamera"]["yoloResnetTracker"]
ctype = 1
if CamerType == 'back':
yolos = ShoppingDict["backCamera"]["yoloResnetTracker"]
ctype = 0
imgdict = {}
for y in yolos:
imgdict.update(y["imgs"])
for track in vts.Residual:
if isinstance(track, np.ndarray):
save_subimgs(imgdict, track, savepath_pipeline_subimgs, ctype)
else:
save_subimgs(imgdict, track.boxes, savepath_pipeline_subimgs, ctype)
'''轨迹显示模块'''
illus = [None, None]
for CamerType, vts in event_tracks:
if len(vts.tracks)==0: continue
if CamerType == 'front': def execute_pipeline(evtdir = r"D:\datasets\ym\后台数据\unzip",
edgeline = cv2.imread("./tracking/shopcart/cart_tempt/board_ftmp_line.png") DataType = "raw", # raw, pkl
save_path = r"D:\work\result_pipeline",
h, w = edgeline.shape[:2] kk=1,
# nh, nw = h//2, w//2 source_type = "video", # video, image,
# edgeline = cv2.resize(edgeline, (nw, nh), interpolation=cv2.INTER_AREA) yolo_ver = "V10", # V10, V5
weight_yolo_v5 = r'./ckpts/best_cls10_0906.pt' ,
img_tracking = draw_all_trajectories(vts, edgeline, savepath_pipeline, CamerType, draw5p=True) weight_yolo_v10 = r'./ckpts/best_v10s_width0375_1205.pt',
illus[0] = img_tracking saveimages = True
):
plt = plot_frameID_y2(vts)
plt.savefig(os.path.join(savepath_pipeline, "front_y2.png"))
if CamerType == 'back':
edgeline = cv2.imread("./tracking/shopcart/cart_tempt/edgeline.png")
h, w = edgeline.shape[:2]
# nh, nw = h//2, w//2
# edgeline = cv2.resize(edgeline, (nw, nh), interpolation=cv2.INTER_AREA)
img_tracking = draw_all_trajectories(vts, edgeline, savepath_pipeline, CamerType, draw5p=True)
illus[1] = img_tracking
illus = [im for im in illus if im is not None]
if len(illus):
img_cat = np.concatenate(illus, axis = 1)
if len(illus)==2:
H, W = img_cat.shape[:2]
cv2.line(img_cat, (int(W/2), 0), (int(W/2), int(H)), (128, 128, 255), 3)
trajpath = os.path.join(savepath_pipeline, "trajectory.png")
cv2.imwrite(trajpath, img_cat)
def main():
''' '''
函数pipeline(),遍历事件文件夹,选择类型 image 或 video, 运行函数 pipeline(),遍历事件文件夹,每个文件夹是一个事件
''' '''
parmDict = {} parmDict = {}
evtdir = r"\\192.168.1.28\share\测试视频数据以及日志\算法全流程测试\202412\images" parmDict["DataType"] = DataType
parmDict["SourceType"] = "video" # video, image parmDict["savepath"] = save_path
parmDict["savepath"] = r"\\192.168.1.28\share\测试视频数据以及日志\算法全流程测试\202412\result" parmDict["SourceType"] = source_type
parmDict["weights"] = r'D:\DetectTracking\ckpts\best_cls10_0906.pt'
parmDict["YoloVersion"] = yolo_ver
if parmDict["YoloVersion"] == "V5":
parmDict["weights"] = weight_yolo_v5
elif parmDict["YoloVersion"] == "V10":
parmDict["weights"] = weight_yolo_v10
parmDict["saveimages"] = saveimages
evtdir = Path(evtdir) evtdir = Path(evtdir)
k, errEvents = 0, [] errEvents = []
k = 0
for item in evtdir.iterdir(): for item in evtdir.iterdir():
if item.is_dir(): if item.is_dir():
# item = evtdir/Path("20241209-160201-b97f7a0e-7322-4375-9f17-c475500097e9_6926265317292") # item = evtdir/Path("20241212-171505-f0afe929-fdfe-4efa-94d0-2fa748d65fbb_6907992518930")
parmDict["eventpath"] = item parmDict["eventpath"] = item
# pipeline(**parmDict) pipeline(**parmDict)
# try:
# pipeline(**parmDict)
# except Exception as e:
# errEvents.append(str(item))
try:
pipeline(**parmDict)
except Exception as e:
errEvents.append(str(item))
k+=1 k+=1
if k==1: if kk is not None and k==kk:
break break
errfile = os.path.join(parmDict["savepath"], f'error_events.txt') errfile = os.path.join(parmDict["savepath"], 'error_events.txt')
with open(errfile, 'w', encoding='utf-8') as f: with open(errfile, 'w', encoding='utf-8') as f:
for line in errEvents: for line in errEvents:
f.write(line + '\n') f.write(line + '\n')
if __name__ == "__main__": if __name__ == "__main__":
main() datapath = r'/home/wqg/dataset/test_dataset/base_dataset/single_event/source/'
savepath = r'/home/wqg/dataset/pipeline/test_result/single_event_V10'
execute_pipeline(evtdir = datapath,
DataType = "raw", # raw, pkl
kk=1,
source_type = "video", # video, image,
save_path = savepath,
yolo_ver = "V10", # V10, V5
weight_yolo_v5 = r'./ckpts/best_cls10_0906.pt' ,
weight_yolo_v10 = r'./ckpts/best_v10s_width0375_1205.pt',
saveimages = False
)

View File

@ -0,0 +1,78 @@
-0.012108 -0.005081 0.040924 0.003206 0.048553 0.078918 -0.036774 -0.049957 -0.034515 -0.037689 -0.058533 -0.006462 -0.106995 0.023758 0.038818 -0.146240 0.001214 -0.077209 0.063110 0.023376 -0.085205 -0.067322 0.021179 -0.015556 0.073242 0.065247 0.014977 0.067261 0.139893 0.000464 0.109802 -0.064697 -0.071045 -0.029648 -0.111511 -0.142334 -0.067627 -0.025436 0.029633 0.066040 0.053192 0.057281 0.001234 -0.017181 -0.051910 0.037964 0.043549 -0.078247 -0.048981 -0.016296 0.035248 -0.083862 -0.072876 0.003597 0.028336 -0.002398 0.107483 0.006378 0.085327 -0.035217 -0.029861 0.000131 -0.062988 0.006710 -0.008194 0.023758 -0.032501 -0.020172 0.024170 0.025360 0.094116 -0.040558 0.105408 -0.062042 0.068726 -0.050781 -0.114441 0.040497 0.053406 0.029068 -0.078308 -0.042084 -0.049103 -0.064392 -0.070618 -0.080261 0.031403 0.029037 -0.032562 -0.031403 0.043365 0.098938 0.028519 -0.054016 -0.072083 -0.052643 0.085449 -0.047882 -0.015900 0.060547 -0.052704 -0.138916 -0.129517 -0.039856 -0.011246 -0.023804 -0.018372 -0.032410 -0.050903 -0.034393 -0.084961 0.021057 0.021820 0.017853 0.013176 -0.117126 -0.067688 0.056610 0.046783 -0.013290 0.103577 -0.041260 0.044434 -0.007912 0.085876 -0.070862 0.111511 -0.028915 0.057495 0.027283 0.020248 0.067871 -0.046204 0.054626 0.028427 -0.036469 -0.026749 -0.139526 0.009445 -0.054443 -0.028671 -0.056305 0.041260 -0.093201 -0.018829 0.037628 -0.005714 -0.018143 0.051910 0.042603 0.027008 -0.056427 0.070496 -0.029129 -0.063782 -0.089355 -0.046783 0.084656 -0.038849 0.090698 0.008919 -0.104309 -0.061005 0.014610 0.047913 -0.006104 -0.095459 -0.017731 0.019455 -0.004402 0.053284 -0.088501 0.057251 -0.054047 -0.017914 0.089661 0.008621 -0.014305 0.015915 0.037170 0.038727 -0.130249 0.015274 0.054504 -0.030716 0.023438 -0.041504 -0.003704 0.158325 0.067566 0.030365 -0.024719 -0.059082 -0.025925 0.050476 -0.016632 0.097839 -0.123474 0.064148 -0.004620 -0.088013 -0.036896 0.013901 0.084900 0.010056 0.102600 -0.083862 -0.117065 -0.007828 0.041779 -0.047638 0.051605 0.071167 -0.017288 -0.054962 -0.060852 0.016983 0.039307 -0.098389 -0.041931 -0.033112 0.116821 0.057831 -0.002653 0.012817 0.169678 0.053131 0.060333 -0.107605 -0.009209 0.014893 0.039185 0.021896 -0.046570 0.000801 -0.055817 0.138062 -0.038574 -0.163208 0.069702 0.098083 -0.007362 0.064392 -0.075867 0.073425 -0.058075 -0.101746 -0.039917 -0.010178 -0.008743 -0.017105 0.078308 0.149292 0.011856 0.003960 -0.000674
-0.063477 -0.007069 -0.005245 0.043976 0.038483 0.101135 -0.004757 -0.054932 -0.051422 -0.036133 -0.048309 0.027176 -0.103699 -0.004608 0.084229 -0.182983 0.023010 -0.036285 0.033508 0.021790 -0.074341 -0.011391 -0.040161 -0.069519 0.094604 0.004799 -0.030457 0.060059 0.128906 0.026169 0.113586 -0.018616 -0.033478 -0.038574 -0.102966 -0.098999 -0.054718 0.003244 0.031738 0.131714 0.053589 0.042694 0.039795 -0.032562 -0.111450 0.017044 0.081055 -0.019135 -0.044891 -0.014748 0.060181 -0.151001 -0.130371 -0.011879 0.079102 0.053833 0.088257 0.000039 0.068909 -0.086487 -0.038635 0.045715 -0.073547 0.018677 -0.019897 0.001243 -0.059570 0.007343 0.019928 0.029938 0.123413 -0.050232 0.097961 -0.030304 0.034943 -0.046692 -0.151978 0.010780 0.073181 -0.010277 -0.048309 -0.025406 -0.028961 0.009995 -0.071777 -0.092896 -0.025650 0.069519 -0.050781 -0.034546 0.014282 0.098694 0.007473 -0.018600 -0.077515 0.020584 0.070129 -0.044800 -0.061768 0.088379 0.033112 -0.132690 -0.062408 0.024338 -0.002018 0.040039 -0.039001 -0.032806 -0.101868 -0.029999 -0.045227 0.028305 -0.005219 -0.003819 0.008522 -0.106812 -0.018646 0.089233 0.054169 -0.016068 0.053772 -0.081543 -0.048126 -0.014633 0.053986 -0.079407 0.055664 -0.039307 0.091797 0.008270 0.032928 0.002785 -0.072266 0.042084 0.021957 -0.082275 -0.010719 -0.054108 0.020813 -0.013069 -0.023575 -0.006931 0.003746 -0.063049 0.038239 0.017975 0.008720 0.039062 0.032166 0.006096 0.000866 -0.040741 0.063049 -0.025879 -0.061676 -0.102600 -0.004028 0.120789 -0.018600 0.109070 0.042145 -0.088501 -0.085327 0.067139 0.030060 0.057587 -0.105774 -0.033752 -0.003479 -0.071960 0.054749 -0.076416 0.059082 -0.061615 -0.074402 0.011024 0.036255 0.008629 0.022537 0.035675 0.038055 -0.098755 0.017593 0.083496 -0.071899 0.078064 -0.056641 -0.000371 0.142578 0.022171 0.017471 -0.028198 -0.018631 -0.034729 -0.004997 -0.010086 0.029083 -0.144043 0.048889 0.027649 -0.043732 -0.013733 0.032166 0.059937 0.065247 0.086365 -0.082214 -0.118225 0.016159 0.026978 -0.108765 0.075317 0.073730 -0.002377 -0.029755 -0.092407 0.007515 0.040344 -0.076843 -0.001449 -0.085571 0.139893 0.066040 0.032013 0.055267 0.190674 -0.031403 0.079285 -0.110779 -0.014015 0.053802 -0.021652 0.025146 -0.032776 -0.013557 -0.074951 0.108276 -0.014259 -0.162109 0.045227 0.068787 -0.029633 0.033112 -0.031174 0.089355 -0.045166 -0.028091 -0.011375 0.008003 0.033997 -0.005348 -0.004387 0.096558 -0.032715 -0.002901 -0.027359
-0.077576 -0.053558 0.011093 -0.053497 0.116943 -0.086792 0.075867 -0.045746 -0.000218 -0.057861 -0.091492 0.010445 -0.062073 -0.062866 -0.031174 -0.150024 0.004971 -0.061249 0.024353 0.016251 -0.026306 0.090149 -0.075073 -0.025162 0.028854 -0.065552 0.041901 0.062683 -0.053772 0.017639 0.095154 -0.059906 0.041077 0.026886 -0.126099 -0.036194 -0.080444 -0.029373 -0.018250 0.068970 0.050110 0.062134 0.103149 -0.002596 -0.033783 0.024185 0.058624 0.058197 -0.106445 -0.039825 0.000286 -0.018631 -0.162476 0.019836 0.084473 -0.012520 0.028641 -0.012932 0.034882 -0.086609 0.089172 0.019257 -0.126099 -0.003334 -0.017380 0.016800 -0.025055 -0.046173 -0.045258 -0.032166 0.094666 0.063904 0.086304 -0.051453 0.015327 -0.037659 -0.069519 0.038483 0.021698 0.001744 0.003468 0.001429 0.038605 -0.032288 -0.028336 -0.085144 0.035767 0.028961 -0.001388 -0.052643 0.046967 0.049225 0.057220 -0.093018 -0.072083 0.013733 0.040741 -0.012871 -0.076965 0.140503 0.066833 -0.099792 0.046936 -0.073730 -0.021301 0.040710 -0.017029 -0.049927 -0.005035 0.020096 0.000294 -0.059784 -0.037323 0.005112 0.043823 -0.012642 0.035919 0.067261 0.013954 -0.066895 0.121582 -0.094360 0.035980 -0.079346 0.015457 0.031250 0.072083 0.038910 -0.011421 -0.055542 -0.067932 -0.012093 -0.023499 0.056702 -0.010284 0.040283 0.030228 -0.025574 0.068359 0.013748 -0.087952 0.062195 0.037903 -0.098389 -0.057770 0.079529 -0.028214 -0.088684 -0.014153 0.002840 0.044678 -0.008965 -0.038696 0.114807 -0.026810 0.000520 -0.017410 0.119385 -0.047760 0.092590 0.002943 -0.060791 -0.084351 0.116455 0.001213 -0.007164 -0.016769 -0.080750 -0.012779 -0.105835 -0.004128 0.012833 -0.084106 -0.078552 0.003675 -0.036682 0.045868 0.074219 -0.055664 0.066711 0.042511 -0.059845 -0.023758 0.004200 -0.011436 0.053497 -0.083374 -0.007359 0.106873 -0.058624 -0.051270 -0.001504 0.010979 0.106140 -0.083496 -0.005470 0.084595 -0.136353 0.100037 -0.094055 -0.118530 0.006615 0.097168 0.061401 0.171265 0.074707 -0.022614 -0.033234 0.000768 0.073120 -0.024551 0.022461 0.069702 0.018723 0.005615 0.111572 -0.059998 0.078064 -0.063538 -0.042786 -0.008965 0.087280 0.095154 -0.046509 0.111267 -0.000310 -0.076599 -0.038605 -0.029648 -0.001067 0.084473 0.078613 -0.070251 -0.036621 0.132446 -0.080200 0.064331 -0.073547 -0.057404 -0.019928 -0.001274 -0.003666 0.029327 -0.064880 0.073303 0.033936 -0.085388 -0.101685 -0.072693 -0.088257 0.097290 -0.092285 0.058624 0.083618 -0.001839 0.002214
0.012100 -0.017914 0.123718 0.020386 -0.031204 0.059601 0.004745 0.045532 -0.051910 0.050903 0.007015 -0.060272 -0.079895 0.067261 0.002798 -0.033691 -0.031464 -0.037476 0.046875 0.075256 -0.049957 -0.001346 -0.024292 0.040894 0.024094 -0.016800 0.035187 0.005093 0.132446 0.115784 0.070129 -0.119995 -0.085449 0.072144 -0.098999 0.043274 0.019623 -0.004848 -0.014832 0.077026 -0.052277 0.055237 0.002892 -0.105774 -0.069458 0.001369 0.058685 -0.028275 -0.055389 -0.015480 0.059052 -0.043640 -0.101868 -0.080688 -0.044342 -0.009109 -0.008865 -0.032959 0.068481 -0.051117 -0.019348 -0.023499 -0.138916 -0.102295 0.007652 -0.011314 -0.051575 -0.036560 0.055298 0.083862 0.101929 0.020950 -0.076294 -0.081787 0.109741 -0.050842 -0.087097 0.006187 0.051941 0.015976 -0.036163 -0.016998 0.029587 0.005726 0.023697 -0.046326 0.079651 0.065063 -0.151611 -0.052094 0.015587 0.095337 0.028885 -0.048798 -0.069641 -0.021301 0.038574 -0.046875 -0.023972 0.031952 -0.006630 -0.082153 -0.101685 0.034210 -0.035095 -0.043854 -0.058197 -0.015915 -0.063721 0.001738 -0.031174 -0.096436 -0.054840 -0.061920 -0.020172 -0.116699 -0.075928 0.029449 0.013954 -0.015602 -0.052979 -0.040497 0.046326 -0.042999 0.162231 -0.049103 0.120300 0.082947 0.103027 -0.014366 0.013855 0.009415 -0.058807 -0.036926 0.044830 0.072815 0.063416 -0.096802 -0.051117 -0.023209 0.076111 -0.051239 0.023956 -0.019775 -0.054108 0.034821 0.028000 0.080566 0.043732 -0.072937 -0.033112 -0.046692 -0.014893 0.013672 -0.068909 -0.118652 -0.046570 0.131836 0.126099 -0.055908 0.015121 -0.140625 -0.007050 0.114441 0.035614 -0.032074 0.054077 -0.035492 -0.003038 -0.006641 0.076782 0.022751 0.037689 -0.002945 0.016556 0.042419 -0.043335 0.028900 0.008049 -0.008308 0.033813 -0.103271 -0.049774 0.082336 -0.068909 -0.073853 -0.021469 -0.044891 0.103394 -0.012192 -0.007942 -0.004391 -0.047180 0.046204 0.131348 -0.021164 0.028107 -0.176880 -0.047241 -0.043976 -0.020782 -0.029831 -0.015900 0.046417 -0.032288 0.097290 -0.137573 -0.046753 -0.063232 0.026077 -0.061981 0.081360 0.011398 0.047455 -0.064758 -0.020905 0.150879 -0.044434 -0.077393 0.055450 -0.063232 0.017776 -0.021881 -0.032196 0.060120 0.076904 0.106079 0.037750 -0.004227 -0.052765 0.031433 -0.076721 -0.005886 -0.052094 0.068359 -0.024261 -0.073181 0.022461 -0.062378 0.032654 -0.013062 0.041748 0.039551 -0.132202 0.002626 -0.028564 -0.096252 0.089661 0.047974 -0.086060 0.008492 0.124695 0.033081 -0.086304 -0.009720 -0.081665
-0.047424 -0.007607 0.101318 -0.001976 0.117554 -0.018417 -0.014389 0.046661 -0.090576 0.022034 -0.069885 0.004242 -0.119812 -0.069824 0.049042 -0.122742 -0.041412 -0.004848 0.093201 0.120239 -0.058502 0.025162 0.052124 0.064453 0.097229 -0.044189 0.048157 0.035828 0.075500 0.000914 0.000320 -0.031403 -0.004795 0.046814 -0.080994 0.005798 -0.108215 -0.048065 0.012489 0.035736 0.035797 0.002916 0.044556 -0.121277 -0.045837 0.017776 0.095032 -0.018875 -0.017914 -0.092041 -0.031128 0.007225 -0.136108 -0.054810 -0.021439 0.026840 0.051239 -0.031143 0.043793 -0.054443 0.000263 0.015640 -0.146729 -0.053741 -0.033508 -0.018036 -0.056580 -0.063049 -0.085327 0.058502 0.128418 -0.005367 -0.028336 -0.058533 0.126953 -0.028580 -0.074524 0.010513 -0.000984 -0.013832 -0.037323 -0.052795 0.062561 0.056244 0.045380 -0.060303 0.072327 0.044373 -0.099365 -0.080688 0.006454 0.073425 0.060059 -0.069641 -0.092529 -0.048492 0.040070 -0.031586 -0.052032 0.122314 0.001475 -0.107239 -0.066772 -0.017578 -0.058289 -0.086060 -0.102051 -0.068176 -0.052246 -0.002888 -0.000543 -0.078979 -0.070312 -0.022812 0.013718 -0.046539 0.008728 0.011978 0.046112 -0.102539 0.097656 -0.035278 -0.015976 -0.021149 0.111084 0.031128 0.071472 0.076477 0.116333 0.020111 0.001237 -0.041321 -0.054260 0.032471 0.013832 0.005772 -0.059143 -0.116150 -0.047028 -0.039948 -0.041046 -0.007965 0.050507 -0.047516 -0.091125 0.056183 0.013191 -0.006599 -0.020508 -0.024155 -0.065186 -0.068298 -0.074097 0.071960 -0.031082 -0.051300 -0.016998 0.166260 0.100281 -0.021439 0.037872 -0.106567 -0.074341 0.155029 0.023499 -0.009918 -0.002010 0.001662 0.003571 -0.032410 0.074219 -0.019592 -0.067932 -0.036682 0.086426 -0.022354 -0.009445 0.034882 0.007618 -0.028656 0.071655 -0.062195 -0.054230 0.027359 -0.072388 0.016510 -0.014427 -0.024414 0.086121 -0.058350 -0.033936 -0.034302 -0.066101 0.041412 -0.014771 -0.071777 0.081604 -0.134766 0.040802 -0.061432 -0.054962 0.000031 0.010544 0.136475 0.034454 0.123169 -0.086731 -0.038086 -0.058899 0.034698 -0.050049 0.136597 0.031250 -0.026001 -0.096130 0.055176 0.048889 0.003933 -0.036957 0.037384 -0.055939 0.008324 0.055511 -0.054718 0.070557 -0.027756 -0.020584 0.037140 -0.009178 -0.025391 0.077515 -0.107971 -0.034210 0.005085 0.105469 -0.051422 0.022552 -0.028137 -0.075195 0.039276 0.014618 -0.017273 0.039917 -0.107483 0.052277 0.133789 -0.097595 -0.032867 0.043335 -0.053894 0.072083 0.019470 0.102600 -0.076660 -0.050629 -0.030777
-0.080505 -0.058533 0.011864 -0.001678 0.079285 0.052399 0.012238 -0.104187 -0.009560 -0.064209 -0.072510 0.008438 -0.029907 -0.007111 0.039764 -0.173584 -0.030594 -0.077271 0.026703 0.029831 -0.011559 0.024887 -0.073792 -0.068542 0.084167 -0.060059 -0.056061 0.052063 0.119446 0.026688 0.128418 -0.056915 0.004204 -0.008247 -0.118225 -0.097595 -0.073425 -0.028030 0.060822 0.055725 0.039764 0.027710 0.043304 0.047302 -0.119995 0.019379 0.059143 0.031372 -0.091125 -0.022583 0.038727 -0.126709 -0.134766 0.025482 0.057831 0.068298 0.091980 0.017868 0.033936 -0.018311 -0.019501 0.026367 -0.061829 -0.030289 -0.009972 0.040405 -0.038208 -0.072815 0.049377 0.000505 0.077209 0.013344 0.128540 -0.053497 0.014687 -0.017090 -0.114319 0.016968 0.017120 0.004723 -0.030945 0.010918 0.053375 -0.049744 -0.081604 -0.075989 -0.019226 -0.011200 0.028000 -0.058167 0.043457 0.146606 -0.003473 -0.056763 -0.102661 0.016907 0.088684 -0.003975 -0.008484 0.077271 0.042816 -0.167725 -0.013969 -0.057343 -0.042023 0.051605 -0.007206 -0.023544 -0.055237 0.021118 -0.016296 0.016174 -0.014778 -0.008080 -0.006760 -0.090637 -0.021362 0.085754 -0.004410 -0.043518 0.083923 -0.045410 0.011360 -0.059631 0.055786 -0.065857 0.099609 -0.043365 0.049103 -0.030960 0.079834 0.015091 -0.074524 0.062378 -0.002151 -0.066467 0.008186 -0.060364 0.020996 -0.007622 -0.054474 0.066833 -0.020447 -0.104797 -0.008919 0.059814 0.016541 -0.058502 0.013443 0.067383 0.023605 -0.026932 0.067322 0.038788 -0.054443 -0.084351 -0.013206 0.074707 -0.032166 0.133423 0.013458 -0.081909 -0.090515 0.097107 0.016434 0.008110 -0.103821 -0.057556 0.016388 -0.100098 0.010689 0.008179 0.022156 -0.106812 -0.065125 0.040619 0.076172 -0.019806 0.020126 0.027634 -0.010498 -0.066589 0.001569 0.063721 -0.032288 0.061005 -0.068542 -0.005470 0.133057 -0.012459 0.023788 -0.021194 -0.045990 0.018005 -0.070679 0.002216 0.103149 -0.174072 -0.004009 -0.003956 -0.104187 -0.059967 0.057373 0.048096 0.091614 0.068298 -0.032013 -0.034943 0.038177 0.028671 -0.078003 0.023148 0.051880 -0.016373 0.016083 -0.047852 -0.015106 0.066223 -0.092773 -0.055389 -0.086304 0.176636 0.107788 0.035675 0.112488 0.119019 -0.050842 0.010208 -0.061218 -0.034546 0.059967 0.055756 -0.014908 -0.075439 0.011406 -0.082825 0.138062 -0.003338 -0.110535 -0.005970 0.036713 -0.006996 0.014854 -0.056152 0.054932 -0.083191 -0.064209 -0.054962 -0.034332 -0.010269 0.063171 -0.007107 0.118225 0.044556 0.010048 0.008392
-0.088867 -0.006584 0.000978 -0.067993 -0.011299 -0.011009 0.091919 -0.084351 0.036530 0.041901 -0.063721 0.012001 -0.107483 -0.014297 0.022476 -0.124573 -0.000116 0.007137 0.017776 0.024994 -0.057831 0.114929 -0.107422 -0.119629 -0.018082 -0.069275 0.029831 0.094910 0.056702 -0.032684 0.101807 -0.029968 0.044250 0.023315 -0.123718 -0.056610 -0.087891 0.049530 0.052582 0.073425 0.061127 0.052246 0.073853 -0.075256 -0.054871 -0.029602 0.077087 0.030472 -0.099854 -0.053833 0.060120 -0.036194 -0.047211 -0.041534 0.003668 -0.029114 -0.004723 -0.045898 0.031342 -0.009613 0.081970 -0.072693 -0.171143 -0.003609 -0.090698 0.020935 0.047028 -0.035736 -0.081055 0.010208 0.024048 0.042877 0.055054 0.009933 0.062866 -0.047363 -0.098572 0.023849 0.138062 -0.007332 -0.095215 0.039154 0.014587 0.045807 -0.023285 -0.072815 0.035950 0.037231 0.002653 -0.076355 -0.052460 0.058777 0.019226 -0.062866 -0.105591 -0.016220 0.041504 -0.006542 -0.126709 0.115234 0.001443 -0.079651 0.064026 0.026627 -0.059448 -0.067078 -0.014763 -0.122192 0.006821 -0.051758 -0.047516 -0.003002 0.004425 -0.054260 0.105713 0.033173 0.099060 0.131104 -0.018097 -0.003410 0.096863 -0.079224 0.019470 -0.086975 0.011299 -0.082825 -0.012100 0.051422 0.013115 -0.035492 -0.059937 0.013115 -0.090332 0.058960 -0.000882 0.038757 -0.038513 -0.004532 0.039673 0.050629 -0.046509 0.003023 0.005344 -0.030563 0.005035 0.064209 -0.028778 0.006279 -0.058899 -0.027649 -0.041077 -0.041351 0.038971 0.049591 -0.023636 -0.045074 0.016525 0.075378 -0.061920 0.112122 0.071411 -0.064880 0.001765 0.072754 -0.046661 0.015541 -0.068176 -0.064514 -0.015358 -0.117432 0.036407 -0.033478 -0.051208 -0.092712 -0.028748 -0.026962 -0.001900 0.014030 0.014725 -0.016388 0.010849 -0.077393 -0.085083 0.049713 -0.052704 0.121094 -0.021759 0.010422 0.097412 -0.024109 -0.140137 -0.008949 0.007927 0.109985 -0.011124 0.024353 0.025482 -0.073242 0.142456 -0.091553 -0.069580 -0.096069 -0.021774 0.060730 0.179810 0.038910 -0.021454 -0.039490 0.057007 0.083679 -0.016129 0.107361 0.080017 0.051025 -0.075317 -0.001435 0.018921 0.044800 -0.044952 0.049469 -0.032196 0.056976 -0.014854 -0.031738 0.077393 0.057098 -0.050568 -0.046539 -0.075928 0.036743 0.049103 0.010155 -0.061493 -0.110291 0.090332 -0.087036 0.046295 -0.108765 -0.011192 -0.040070 -0.048828 -0.023224 0.097900 -0.065552 0.062012 -0.000584 -0.027878 -0.002588 -0.065125 -0.078735 0.083740 -0.138062 0.030319 0.025879 -0.024490 -0.048431
-0.051300 -0.020859 0.057617 -0.010582 0.022110 0.026962 0.007942 -0.035187 -0.054657 -0.036774 0.011246 0.010773 -0.097595 0.114441 -0.003645 -0.121460 0.017792 -0.015625 0.022110 0.024277 -0.058838 0.069641 -0.045593 -0.020126 0.021149 -0.000751 0.026108 0.135010 0.179443 0.020554 0.078430 -0.009842 -0.005142 -0.000080 -0.073425 0.045380 -0.057129 0.017334 -0.059448 0.048676 -0.035065 0.106262 -0.013092 -0.042725 -0.022888 -0.006790 0.006367 -0.058716 -0.158691 0.033722 0.045197 -0.109619 -0.162354 -0.041290 0.016754 -0.032745 -0.010735 -0.013229 0.205811 -0.041870 0.038025 -0.139648 -0.080872 -0.005981 0.028381 0.085510 -0.015297 -0.015747 0.072754 0.020264 0.124390 -0.015617 0.117004 0.014503 0.050568 -0.003368 -0.117371 0.021469 0.078003 0.013817 -0.025665 0.012680 0.013062 -0.035400 -0.067871 -0.055511 0.106873 0.010971 -0.038879 -0.060150 0.008034 0.161377 -0.002237 0.018600 -0.084839 -0.050323 0.088440 -0.079224 -0.017303 0.040192 -0.023834 -0.163452 -0.040710 -0.018036 -0.100952 -0.044556 0.026993 -0.034271 -0.017792 -0.024857 -0.037750 -0.036255 -0.058258 0.010239 0.001386 -0.077209 -0.012238 0.027695 0.031555 -0.043091 0.095520 -0.041351 0.097778 -0.072327 0.081299 -0.061371 0.050049 0.008827 0.008125 -0.054688 -0.034363 0.035400 -0.059387 0.062622 0.090576 0.055542 0.026047 -0.053192 0.032074 -0.041473 -0.055969 -0.104797 0.082214 -0.038300 0.007065 0.084412 -0.032654 0.013519 0.014771 0.082581 0.032806 -0.030441 -0.031189 0.025406 -0.115051 -0.102478 -0.099670 0.149780 0.008041 0.028137 -0.004635 -0.121460 0.013329 0.004730 0.034149 0.053131 -0.068359 -0.078430 -0.028198 -0.091736 0.034668 -0.002895 -0.025543 -0.116272 -0.095520 -0.004330 0.019272 -0.042755 -0.054260 0.022736 0.036102 -0.087097 -0.008148 0.045898 -0.009041 0.071472 -0.077393 0.042511 0.094360 0.028442 -0.039612 -0.008659 -0.105896 0.052887 0.026489 0.017365 0.109253 -0.134766 0.006134 -0.018097 -0.112793 -0.055603 0.104248 0.024277 0.072449 0.057098 -0.103638 -0.006733 -0.025574 0.020660 -0.076965 0.069153 0.072571 -0.009232 -0.036774 -0.026672 0.037659 0.038025 -0.043610 -0.036255 -0.011955 0.078003 0.078003 0.013298 0.081665 0.115784 -0.032104 -0.024979 -0.013283 -0.042999 0.012604 0.030807 -0.041779 -0.076538 0.077942 -0.095276 0.068420 -0.015778 -0.063171 0.052673 0.025345 0.030396 0.063721 -0.054932 0.001950 -0.026535 -0.125000 -0.000515 -0.070312 -0.020355 0.033813 0.021286 0.008537 0.036682 0.021210 0.006847
-0.104370 -0.044647 0.030746 0.011848 0.057526 -0.008278 -0.012321 -0.084900 0.013306 -0.008041 -0.011665 0.005608 -0.072449 0.045380 0.052704 -0.225464 -0.021851 -0.055786 -0.028534 -0.033325 0.019592 0.009315 -0.058075 -0.051392 -0.008530 -0.081909 -0.034363 0.078918 0.180542 0.026077 0.092468 -0.055908 0.032135 0.035034 -0.091492 0.007263 -0.044739 0.077881 0.005806 0.027908 0.028259 0.095764 0.095459 -0.047455 -0.086365 0.040619 -0.034576 -0.012230 -0.138672 0.018646 0.058807 -0.078613 -0.145264 0.000744 0.044678 -0.019974 0.025620 0.016449 0.094116 -0.023499 0.011063 -0.116821 -0.093018 -0.079163 -0.033478 0.082214 0.039917 0.005947 -0.034454 0.014687 0.105103 -0.019745 0.149780 -0.017502 0.051941 -0.025269 -0.117737 0.011627 0.097473 -0.019928 -0.035065 -0.002720 -0.009933 -0.001321 -0.135010 -0.019958 0.007996 -0.021515 0.041016 -0.052032 -0.032013 0.105347 -0.003544 -0.019012 -0.118347 -0.036865 0.089050 -0.061798 -0.030060 0.013054 0.009315 -0.126099 0.021194 -0.010216 -0.059998 0.024414 0.025497 -0.119080 -0.012901 -0.043610 -0.049835 0.018463 -0.039795 -0.019989 0.012512 -0.047516 0.040344 0.077881 0.021484 -0.038879 0.143066 0.057037 0.014130 0.008705 0.130249 -0.043915 0.043121 0.047485 0.037292 -0.067200 -0.014229 0.058319 -0.182983 -0.004654 0.027222 -0.017700 -0.024933 -0.033600 -0.003723 -0.018814 -0.044159 -0.006718 0.004150 0.000915 0.005909 0.134277 -0.049316 0.011063 0.017792 0.025909 -0.031799 -0.111511 0.068176 -0.003735 -0.091797 -0.067139 -0.008560 0.115662 -0.003941 0.027985 -0.008255 -0.088806 0.019333 0.007500 0.017883 -0.011841 -0.027328 -0.056152 0.012512 -0.087036 0.081848 -0.014626 0.033234 -0.166748 -0.066833 0.013641 0.020279 -0.022552 -0.005245 0.001663 0.064636 -0.072571 -0.064026 0.027115 0.056152 0.074036 -0.078918 0.010727 0.105347 0.009193 -0.043793 -0.000097 -0.082092 0.019379 0.000548 -0.050171 0.065491 -0.145508 0.002535 -0.064819 -0.101562 -0.062927 0.045013 0.076782 0.113831 0.007042 -0.057007 -0.105835 0.028839 0.020554 -0.074341 0.041046 0.109985 0.019470 -0.026596 -0.069031 -0.014359 0.044800 -0.088257 -0.047028 -0.020508 0.104370 0.013618 0.026505 0.075867 0.107117 0.017227 -0.016815 -0.076355 -0.040466 0.036407 0.053955 0.004261 -0.093384 0.009308 -0.064148 0.042664 -0.062561 -0.035828 0.031494 0.018021 -0.015701 0.112122 -0.114502 -0.024033 -0.028336 -0.092224 0.048737 -0.041534 0.017349 0.008881 -0.074219 0.060486 -0.008347 0.015701 -0.026077
-0.095947 -0.026047 0.027344 0.035980 0.046448 0.129883 0.020172 -0.056915 -0.045105 -0.038330 0.002014 -0.001935 -0.052185 0.093811 0.022064 -0.136475 -0.049225 0.034637 0.027710 0.038269 -0.049103 0.065002 -0.056946 -0.018112 0.022873 -0.011200 -0.018280 0.084290 0.112793 0.050781 0.059906 -0.030075 -0.001304 0.010452 -0.104248 -0.053345 -0.052673 0.027328 -0.015274 0.077393 -0.003262 0.068054 -0.045074 -0.025360 -0.071289 -0.043030 -0.010139 -0.065796 -0.183838 0.016144 0.036407 -0.138428 -0.114563 -0.108643 -0.009026 0.075745 0.027328 -0.024994 0.111206 -0.014946 -0.013901 -0.061493 -0.060516 0.010551 0.020248 0.074402 -0.028351 -0.078735 0.064270 0.009270 0.059753 -0.037079 0.136719 -0.040497 0.054657 -0.041199 -0.086243 0.060822 0.043182 0.034088 -0.019073 -0.002989 0.005116 -0.018738 -0.123657 -0.032898 0.056366 -0.018906 -0.016174 -0.148438 0.008858 0.132080 0.000813 -0.030853 -0.075317 -0.041046 0.058655 -0.033173 -0.097412 -0.000504 0.018845 -0.106689 -0.062500 0.046875 -0.074463 -0.012138 -0.039978 0.011513 -0.044495 -0.003536 -0.087463 -0.005974 0.012825 -0.054260 -0.017090 -0.107056 -0.083679 0.091797 0.049774 -0.015488 0.029510 -0.032745 0.059174 -0.015213 0.060028 -0.031708 0.087830 -0.000510 0.075195 -0.002844 0.027679 0.042603 -0.133789 0.011833 0.014648 0.020721 -0.047333 -0.118591 -0.008018 -0.050934 -0.000528 -0.060425 0.021545 -0.027740 -0.044586 0.042236 0.034637 -0.058441 0.029419 0.087158 0.060242 -0.032928 0.019379 0.023987 -0.103943 -0.120422 -0.056488 0.115967 0.009727 0.068237 0.020325 -0.129395 0.023407 -0.028778 0.032104 0.056335 -0.065979 -0.075500 -0.028442 -0.086548 0.046143 -0.020660 0.043610 -0.103821 -0.116394 0.068848 0.035919 -0.042480 0.003454 -0.035797 0.048584 -0.114685 0.018066 0.036469 -0.016190 0.095520 -0.009865 0.003464 0.073303 0.039154 0.017899 0.001660 -0.117126 -0.000117 0.054840 0.018219 0.060059 -0.134888 0.041962 -0.028046 -0.152588 -0.041443 0.073730 0.073669 0.061707 0.005127 -0.073181 -0.070007 0.041382 0.110779 -0.088989 0.044067 0.070740 0.012276 -0.035217 -0.096069 0.041901 0.034180 -0.131836 -0.004078 -0.048676 0.093506 0.034943 0.005501 0.058685 0.138672 -0.032196 -0.012367 -0.079590 -0.051605 -0.022095 -0.006977 -0.022263 -0.045441 0.021606 -0.081055 0.053467 0.050232 -0.106323 0.090332 0.005291 -0.009361 0.095703 -0.062988 0.004513 -0.064026 -0.104309 -0.050568 -0.033447 0.005470 0.018951 0.052032 0.073486 -0.012283 0.053772 -0.016800
-0.031860 -0.047791 0.045197 0.023346 -0.000677 0.045898 0.044037 -0.059296 0.020233 -0.066833 -0.062378 0.015701 -0.057922 0.002020 0.056183 -0.177124 0.024643 -0.071167 0.024078 -0.004017 -0.037689 0.069519 -0.084045 -0.090637 0.013695 -0.056885 0.058044 0.072632 0.085571 0.000285 0.122864 -0.086060 -0.027588 -0.043732 -0.105286 -0.093201 -0.031494 -0.006031 0.039429 0.132812 0.056274 0.099060 0.059418 0.065918 -0.132812 0.068237 0.053192 0.010849 -0.078552 -0.004890 0.047455 -0.099365 -0.153442 -0.001022 0.065186 0.010406 0.017441 0.028320 0.068726 -0.101501 0.025269 0.028992 -0.111511 0.006336 -0.025513 0.007652 -0.020035 -0.049316 -0.016266 -0.004486 -0.014359 0.002268 0.110901 -0.034729 0.017639 -0.023376 -0.133301 0.058838 0.112732 0.009926 -0.045715 0.039032 0.001749 0.038666 -0.130127 -0.144043 0.025848 0.013779 0.018265 -0.029999 0.019424 0.112671 0.006294 -0.083313 -0.065002 0.063232 0.036804 -0.062286 -0.025299 0.074951 0.022781 -0.107117 -0.007671 -0.015015 -0.022781 0.074280 -0.002148 -0.049530 -0.007183 -0.048492 0.006523 -0.021179 0.011612 -0.051544 0.030670 -0.066711 0.070435 0.138672 0.015541 -0.001809 0.083923 -0.100586 -0.007534 -0.070190 0.023270 -0.098145 0.098999 -0.040863 0.059418 -0.044952 0.044586 -0.029282 -0.040985 0.036926 0.012825 0.007034 0.058899 0.013443 0.089233 0.012009 -0.056122 0.049194 -0.005688 -0.097107 0.055145 0.041931 0.011375 -0.001695 -0.015747 0.017181 -0.011345 0.021896 0.044098 -0.006321 -0.000619 -0.109619 -0.029160 0.065674 -0.084229 0.110352 0.005646 -0.083008 -0.113037 0.089966 -0.007980 0.033417 -0.092468 -0.076599 -0.082458 -0.099304 0.025986 -0.080566 0.012039 -0.091736 -0.044342 0.057068 0.040894 -0.100281 0.048981 0.008934 0.035309 -0.088318 -0.042877 0.106079 -0.063416 0.087158 -0.100586 -0.012009 0.112671 -0.004330 -0.014503 -0.033600 0.013237 0.049011 -0.042175 0.007294 0.011345 -0.081055 -0.012764 0.035797 -0.070190 -0.064209 0.099792 0.044342 0.123291 0.077209 -0.048737 -0.036560 -0.088684 0.009758 -0.058044 0.030762 0.060059 -0.017120 -0.048798 -0.057678 -0.025833 0.068970 -0.080811 -0.019363 -0.053497 0.152832 0.071655 0.039093 0.078247 0.127808 -0.023605 -0.035706 -0.061646 -0.066833 0.071777 0.066040 0.020416 -0.059540 -0.007286 -0.087646 0.105530 -0.063293 -0.086548 0.008354 0.029022 0.042572 -0.040436 -0.026779 0.085449 -0.018326 -0.041077 0.017593 -0.042358 -0.046509 0.051147 -0.068542 0.035919 -0.012260 -0.020218 -0.042023
0.003683 -0.040375 0.045959 -0.005531 0.034393 0.093811 -0.006748 -0.084595 -0.018311 -0.050476 -0.037109 -0.000509 -0.107544 0.006592 0.010948 -0.151733 -0.011551 -0.022964 0.017471 -0.054138 -0.090027 0.007271 0.001972 -0.029480 0.037720 -0.039764 -0.020172 0.074707 0.123474 -0.020996 0.105835 -0.110840 -0.066650 -0.001163 -0.163330 -0.081970 -0.060699 -0.004177 0.023972 0.104736 0.014053 0.032562 0.054413 -0.027374 -0.081543 0.055695 0.035553 -0.090393 -0.110718 -0.011971 0.050842 -0.066406 -0.144409 -0.045166 0.014626 -0.015854 0.058319 0.002174 0.066650 -0.032898 -0.000545 -0.039581 -0.051880 0.024918 -0.039703 0.013618 -0.010017 -0.045837 0.015236 0.000289 0.067017 -0.081421 0.123657 -0.064880 0.057220 -0.080811 -0.088074 0.060547 0.020935 0.019089 -0.040527 -0.057343 -0.026947 0.006191 -0.102722 -0.084045 0.053253 -0.001462 0.008995 -0.062012 0.022095 0.089722 0.039093 -0.095642 -0.113892 -0.015511 0.002720 -0.040955 -0.004417 0.086426 -0.006630 -0.164673 -0.049438 -0.011353 -0.059814 -0.010315 -0.002935 -0.074890 -0.081055 -0.048187 -0.083313 0.012222 0.022583 -0.016068 0.018982 -0.089783 -0.008865 0.079407 0.025314 -0.023987 0.124451 0.000825 0.004566 -0.015068 0.083069 -0.042816 0.095459 -0.010513 0.045746 0.025208 -0.006954 0.035187 -0.062866 0.013298 0.003489 -0.012367 -0.036377 -0.117554 0.010460 -0.036713 -0.065308 -0.005878 0.027969 -0.044922 -0.044067 0.074585 0.000278 -0.084778 0.018478 0.016235 0.018280 -0.045197 0.067566 -0.025940 -0.017914 -0.085022 -0.018265 0.091125 -0.028229 0.058105 0.022385 -0.120911 -0.051758 -0.023163 0.038116 -0.019501 -0.106689 -0.082092 -0.000672 -0.041779 0.070740 -0.068542 0.020950 -0.110840 -0.013809 0.109436 0.041931 -0.003056 0.025116 0.025818 0.065063 -0.093262 -0.008324 0.018311 -0.051270 -0.002619 -0.085327 -0.001694 0.185913 0.078735 0.025497 -0.039276 -0.092407 -0.009804 0.034576 -0.052490 0.044220 -0.120300 0.049438 -0.082336 -0.144043 -0.024139 0.058380 0.131104 0.041687 0.079895 -0.053436 -0.098206 -0.077332 0.048676 -0.052917 0.059998 0.126587 -0.048950 -0.097168 -0.057556 0.012932 0.076416 -0.116577 -0.054443 -0.031586 0.076782 0.029480 -0.022781 0.050568 0.139648 -0.027405 0.030762 -0.095764 -0.045197 0.015251 0.022324 -0.013550 -0.063538 0.014343 -0.030212 0.069824 -0.041199 -0.110779 0.071472 0.039948 -0.008553 0.070251 -0.062164 0.014580 0.002865 -0.116455 0.007370 -0.012520 -0.015114 0.030136 0.054596 0.128906 0.009544 -0.042206 -0.046936
-0.069946 -0.046143 0.061432 0.004459 0.033783 0.003180 0.025803 -0.036499 -0.056671 -0.008926 -0.099365 0.002981 -0.142700 0.011841 0.006725 -0.138428 -0.034302 -0.034760 0.060303 -0.008133 -0.055664 0.098694 -0.001347 -0.013603 0.047852 -0.076965 0.059235 0.093689 0.057343 -0.041016 0.067566 -0.074890 -0.042511 -0.003345 -0.194824 -0.035339 -0.100342 -0.025818 0.030212 0.098694 -0.013924 0.013809 0.027451 -0.049469 -0.071350 0.031677 0.053040 -0.047333 -0.122620 -0.046753 0.028717 0.010033 -0.179443 -0.069946 0.007759 0.001667 0.023926 -0.048462 0.047241 -0.042969 -0.003458 -0.020813 -0.056641 0.020065 -0.019882 -0.009361 -0.029251 -0.073669 -0.047882 0.007587 0.007053 -0.038025 0.064758 -0.030197 0.073242 -0.087036 -0.046600 0.034424 0.050446 0.017227 -0.022079 -0.007904 0.056763 0.065186 -0.024963 -0.100830 0.098389 0.009987 -0.018906 -0.109985 0.020966 0.071289 0.039825 -0.117981 -0.105774 0.024261 -0.026840 -0.029266 -0.041016 0.141724 0.000244 -0.128174 -0.031738 -0.010307 -0.117432 -0.042145 -0.025726 -0.081604 -0.044800 -0.028748 0.027283 -0.021591 0.025879 -0.011787 0.062134 -0.039734 0.084412 0.094055 0.012749 -0.033844 0.104309 -0.041595 -0.025650 -0.006878 -0.016098 -0.015396 0.062866 -0.027115 0.059113 0.028076 -0.020294 -0.014290 -0.054932 0.043884 0.012466 0.006935 -0.042419 -0.126465 0.048370 -0.064148 -0.075745 0.001100 0.005363 -0.040771 -0.074524 0.063843 0.052429 -0.051331 -0.051849 0.013901 0.019287 0.002291 -0.004154 0.033295 0.007633 -0.091431 -0.022736 0.112061 0.009949 0.039276 0.023102 -0.096252 -0.079041 0.056610 -0.000884 -0.043793 -0.092834 -0.053894 -0.056335 -0.072021 0.056274 -0.043488 -0.094910 -0.087036 0.026169 0.044434 0.025894 -0.028778 0.001543 0.002914 0.077454 -0.107727 -0.022949 0.016464 -0.100830 0.040619 -0.058197 -0.012283 0.116455 0.009964 -0.023285 -0.044189 -0.063049 0.018158 -0.001390 -0.042084 0.036926 -0.067444 0.027557 -0.065186 -0.095032 -0.009460 0.094910 0.147827 0.094666 0.082214 -0.046570 -0.033295 -0.125122 0.065063 0.000936 0.103149 0.108276 -0.107422 -0.102356 0.000134 -0.014381 0.089722 -0.092163 -0.008865 -0.045563 0.029297 0.069824 -0.091736 0.092590 0.029999 -0.106079 -0.054596 -0.028366 -0.036041 0.090332 0.007473 -0.018585 -0.041870 0.066406 -0.099304 0.030273 -0.092102 -0.083313 0.085876 0.015884 -0.001809 0.030472 -0.026962 0.064758 0.090515 -0.106140 -0.008682 -0.068970 -0.098450 0.094543 -0.043030 0.090210 -0.006775 -0.076172 -0.055725
-0.033020 -0.047211 0.086914 -0.024185 0.076660 -0.006481 -0.014580 -0.011963 -0.074890 -0.034943 -0.060944 -0.031891 -0.118347 -0.027725 0.083130 -0.157227 -0.022842 -0.028839 0.057465 0.046783 -0.072998 0.048798 0.025085 -0.038239 0.050293 -0.075684 0.059479 0.032318 0.100098 -0.065857 0.063354 -0.065491 -0.044098 -0.043976 -0.137207 -0.081665 -0.108826 -0.029785 0.005974 0.079651 0.058624 0.082092 0.101929 -0.030731 -0.091675 0.070496 0.101318 -0.028671 -0.048676 -0.070740 -0.003990 0.010506 -0.163086 -0.017197 0.018311 0.022644 0.051880 0.022369 0.065796 -0.059692 0.004829 -0.021500 -0.117310 -0.019989 -0.023132 0.011238 -0.012711 -0.060974 -0.075928 0.011536 0.022598 -0.018982 0.100647 -0.104858 0.085144 -0.053436 -0.076843 0.044434 0.062622 -0.013496 -0.078491 -0.014091 0.009224 0.033447 -0.014969 -0.113464 0.060425 0.016418 -0.033020 -0.047729 0.036133 0.129028 0.037750 -0.067810 -0.113770 -0.007088 -0.012917 -0.056091 0.001848 0.102417 0.007557 -0.169556 -0.052429 -0.035675 -0.063538 -0.010788 -0.037048 -0.109924 -0.037231 -0.043671 -0.027939 -0.072998 -0.017014 -0.015404 0.026749 -0.076538 0.077148 0.071899 0.025253 -0.065247 0.171021 -0.029816 -0.005688 -0.074890 0.071167 -0.013878 0.095581 0.053864 0.068115 0.018066 0.005634 -0.021606 -0.028275 0.048431 0.023254 0.032013 -0.017166 -0.082764 0.047577 -0.040344 -0.090698 0.026398 0.010330 -0.102539 -0.043915 0.129395 -0.018372 -0.005165 -0.007626 -0.006302 0.011475 -0.031830 0.023941 0.018539 -0.001737 -0.084167 -0.034943 0.103455 0.021912 0.028625 0.039764 -0.076111 -0.084961 0.130371 0.020493 0.001660 -0.062561 -0.047272 -0.055084 -0.046509 0.109558 -0.059113 -0.060760 -0.073425 0.052277 0.012611 0.009064 -0.065247 0.054108 0.006470 0.049744 -0.084961 -0.035034 0.051971 -0.068420 0.050354 -0.075928 0.003685 0.096863 -0.031952 -0.038147 -0.061005 -0.044281 0.019791 -0.037262 -0.064697 0.121704 -0.112854 0.005562 -0.054901 -0.079224 -0.031860 0.086914 0.092224 0.058624 0.101501 -0.067810 -0.032806 -0.093506 0.010292 -0.029755 0.084290 0.073853 -0.054535 -0.105957 0.033539 -0.016205 0.030014 -0.076294 0.002235 -0.040894 0.085693 0.078125 0.002449 0.053894 0.066772 -0.006466 0.002022 -0.041443 -0.043030 0.101257 -0.035431 0.014580 -0.012901 0.076660 -0.012085 0.096191 -0.062561 -0.080994 0.021454 0.030838 -0.003508 0.011597 -0.045502 0.090088 0.072754 -0.063293 -0.005390 -0.031891 -0.068604 0.083679 -0.022125 0.128784 -0.043243 -0.031464 -0.039276
-0.071960 -0.010109 0.026733 -0.013763 0.130493 -0.041962 0.062500 -0.002930 -0.079590 -0.052002 -0.037842 0.011383 -0.030716 -0.006660 0.030945 -0.160889 0.016815 -0.025757 0.045532 0.057983 -0.042511 0.099548 -0.058655 -0.016708 0.018967 -0.054657 0.044464 0.081238 0.000474 0.007267 0.036591 -0.036530 0.032288 -0.002655 -0.101196 -0.041565 -0.096497 0.012512 -0.030487 0.072571 0.074280 0.098450 0.079712 -0.026245 -0.028397 0.027893 0.084534 0.002537 -0.105713 0.004124 0.014107 -0.043701 -0.172852 -0.044708 0.049194 0.014343 0.022217 0.009819 0.068298 -0.068726 0.079163 -0.014992 -0.097473 -0.014992 0.003750 0.049622 -0.022034 -0.037598 0.000240 -0.011543 0.110352 0.038696 0.152588 -0.061890 0.027649 -0.042877 -0.108826 0.028015 0.047943 0.006035 -0.033997 0.021866 0.008965 -0.053253 -0.076416 -0.059814 0.057739 0.030136 -0.031982 -0.096313 0.008018 0.046570 0.033997 -0.038055 -0.091919 -0.035614 0.063538 -0.040527 -0.092346 0.073425 0.072449 -0.078552 -0.025314 -0.066589 0.015541 0.047729 -0.055023 -0.066406 -0.024887 -0.010658 -0.035919 -0.066345 -0.043762 0.017548 0.030121 -0.052368 -0.012619 0.061035 0.046692 -0.072937 0.123413 -0.055573 0.047424 -0.034821 0.055847 0.056335 0.117004 0.028351 0.020523 -0.046356 -0.044189 -0.016846 -0.092712 0.051605 0.010727 0.055115 0.012657 -0.020889 0.059631 -0.028168 -0.059814 -0.006104 0.032379 -0.078674 -0.046173 0.076172 -0.009941 -0.040283 0.036835 0.033295 0.055908 -0.006760 -0.009346 0.047791 -0.070068 -0.043518 -0.052765 0.140137 0.000720 0.084229 0.025421 -0.079163 -0.038544 0.096130 0.025665 0.067749 -0.036835 -0.044525 -0.058380 -0.124207 0.032715 -0.027237 -0.040558 -0.101807 -0.034302 -0.032654 0.030426 0.006027 -0.045929 0.022736 0.055603 -0.090210 0.002617 0.013718 -0.003084 0.105347 -0.062927 0.005928 0.090942 -0.040009 -0.029129 -0.025345 -0.026413 0.088806 -0.029373 -0.044952 0.115784 -0.133179 0.072510 -0.037354 -0.161743 -0.038452 0.137695 0.130127 0.136597 0.055237 -0.061249 -0.076233 0.027115 0.096191 -0.040314 0.000861 0.086853 0.035400 -0.026260 0.065552 -0.055847 0.066956 -0.082214 -0.037384 0.011841 0.119324 0.099182 -0.019150 0.068115 0.088196 -0.035645 -0.027756 -0.089600 -0.013451 0.057526 0.028732 -0.044220 0.003584 0.113953 -0.096924 0.076416 -0.021881 -0.067505 0.032501 0.045441 0.008781 0.059296 -0.077393 0.112061 0.051819 -0.097168 -0.084473 -0.111084 -0.048737 0.083984 -0.067200 0.071899 0.061371 0.027313 0.019577
-0.079529 0.000504 -0.010086 0.007622 0.010620 0.083191 -0.005043 -0.026443 0.019272 -0.029617 0.002476 0.063049 -0.135132 0.073303 0.025452 -0.096375 0.058258 0.073425 -0.081421 -0.052979 -0.062988 0.112976 -0.107544 -0.098938 0.029129 -0.033569 0.008575 0.137451 0.139771 0.004406 0.090820 -0.025528 -0.007843 0.026276 -0.100159 -0.023163 -0.083191 0.027557 0.025558 0.093018 -0.062286 0.065247 -0.010727 -0.026474 -0.093445 -0.024399 -0.013863 -0.070923 -0.150879 0.059784 0.093872 -0.136719 -0.126465 -0.110535 0.032684 0.000199 -0.010025 -0.012985 0.134644 -0.027863 0.015442 -0.066223 -0.002583 -0.024261 0.026703 0.062225 -0.031311 0.064087 0.066406 0.009659 0.069153 -0.051331 0.079407 0.074646 0.016968 -0.038879 -0.056671 0.028107 0.064514 0.066895 -0.008865 0.008324 -0.074524 0.063293 -0.096558 -0.101440 0.091309 0.027039 -0.041260 -0.075378 -0.093079 0.045380 0.010269 -0.010284 -0.088684 0.061401 0.073975 -0.005135 -0.047791 0.001044 0.013145 -0.063049 -0.016068 0.078247 -0.046387 -0.053253 0.011703 -0.012413 -0.042145 -0.048218 -0.023483 0.030167 -0.036957 -0.074890 0.044128 -0.040802 0.006348 0.071533 0.085449 0.023560 0.007099 -0.056274 0.001731 0.000491 -0.007584 -0.123291 -0.049133 -0.028992 0.071045 0.000670 0.001268 0.048248 -0.107483 -0.026596 0.090576 -0.003971 0.021408 0.043732 0.018066 -0.019775 -0.064209 -0.063293 0.038971 -0.007889 -0.019424 -0.039795 0.049500 -0.001017 -0.026428 0.064087 0.035126 0.006451 0.023315 0.009567 -0.068420 -0.112427 0.005844 0.106079 0.020996 0.064453 0.021561 -0.149536 0.007706 -0.059448 0.004192 0.045441 -0.058319 -0.073242 -0.050903 -0.113770 0.054443 -0.017990 -0.021790 -0.089844 -0.129395 0.031769 -0.023392 -0.046844 -0.031830 0.018188 0.063721 -0.074829 -0.019226 0.037659 -0.042603 0.125977 -0.028961 0.031189 0.091370 0.007309 -0.065796 0.020187 -0.065979 0.034271 0.054321 -0.022812 -0.053345 -0.029343 0.035492 -0.061523 -0.091675 -0.078491 0.069275 0.024918 0.104126 0.015343 -0.101685 -0.045898 -0.000736 0.069458 -0.045593 0.087036 0.055878 -0.055176 -0.096436 -0.076965 0.055359 0.031494 -0.077576 0.050415 -0.040955 0.010254 0.045319 -0.075562 0.029816 0.142822 -0.105530 -0.000152 -0.111267 0.004009 -0.026749 -0.038391 -0.017105 -0.151001 -0.059906 -0.129883 0.036407 -0.089233 -0.052917 0.091064 0.023361 0.003363 0.090637 0.002390 0.010254 -0.041779 -0.137939 0.010147 -0.095520 0.034332 0.058868 -0.011925 -0.022232 -0.026718 -0.022797 -0.006886
-0.072693 -0.011787 0.100342 0.029190 0.096741 -0.019684 0.018402 0.037231 -0.064331 0.009186 -0.077515 -0.003145 -0.149170 0.004250 0.038330 -0.127319 -0.080322 0.001558 0.156494 0.048126 -0.017059 0.070435 -0.008087 -0.012787 0.066406 -0.074280 0.047668 0.064941 0.083435 -0.022736 0.011276 -0.090149 -0.010353 0.019760 -0.150513 -0.006905 -0.078674 -0.037964 0.036285 0.051544 0.015617 0.030930 0.026199 -0.106262 -0.060455 0.018219 0.044220 -0.033783 -0.121338 -0.094849 0.042358 -0.006203 -0.165649 -0.084229 -0.022522 0.029800 0.033783 0.014145 0.075684 -0.089539 -0.035156 0.019012 -0.122803 -0.063782 0.001392 0.014618 -0.074280 -0.047272 -0.070312 0.039795 0.094666 -0.013855 -0.021057 -0.027512 0.092041 -0.066589 -0.075439 0.019211 -0.010513 0.003649 -0.046082 0.002186 0.051086 0.064331 -0.012848 -0.091431 0.122009 0.034241 -0.076172 -0.113831 0.004368 0.041870 0.080139 -0.067871 -0.110352 0.002583 -0.037354 0.005005 -0.070068 0.104248 -0.016174 -0.111816 -0.064331 0.016663 -0.043671 -0.065491 -0.073608 -0.035492 -0.039215 -0.015137 0.024582 -0.065674 0.000111 -0.018372 0.024048 -0.049591 0.062561 0.103882 0.069397 -0.050171 0.075073 -0.019592 -0.000917 0.012657 0.006210 -0.007477 0.046173 0.083069 0.132812 0.037933 0.013824 0.014709 -0.068970 -0.030670 0.007851 0.022125 -0.054535 -0.118530 0.009766 -0.050751 -0.001475 0.011261 0.024719 -0.009811 -0.078308 0.065979 0.033386 -0.005829 -0.029327 -0.032776 -0.031342 -0.068420 -0.069214 0.087280 -0.032166 -0.089661 -0.018356 0.136597 0.085327 -0.003134 0.019318 -0.119080 -0.030746 0.100891 0.003513 -0.036255 -0.018600 -0.029480 -0.006737 -0.069763 0.092590 -0.022522 -0.085999 -0.026093 0.037994 0.036346 0.022034 -0.048279 -0.045288 -0.054260 0.094971 -0.103271 -0.036591 0.040100 -0.099182 0.089111 -0.009903 -0.037109 0.070801 -0.016495 -0.000906 -0.038086 -0.072266 0.032196 0.007523 -0.042053 0.077698 -0.043976 0.033417 -0.095215 -0.048279 -0.012512 0.067810 0.123413 0.060181 0.102478 -0.058380 -0.033844 -0.083740 0.068726 -0.036957 0.125488 0.066101 -0.080261 -0.090942 0.000573 0.081970 -0.015747 -0.096252 0.084961 -0.094971 -0.005005 0.021103 -0.058350 0.071594 -0.029114 -0.009407 -0.012665 -0.035980 -0.059021 0.083984 -0.117126 0.011208 -0.037720 0.045197 -0.079163 -0.015533 -0.018127 -0.028595 0.071350 -0.029388 -0.018280 0.027435 -0.080078 0.032562 0.068787 -0.091919 0.013695 0.043823 -0.058716 0.068909 0.007935 0.092773 -0.100098 -0.088745 -0.033356
-0.007950 -0.035278 0.057831 0.018951 0.040009 0.057861 0.019089 -0.045471 -0.026199 -0.070374 -0.049622 0.026291 -0.040771 0.017334 0.051025 -0.182129 0.035431 -0.081543 0.058807 0.024933 -0.081543 -0.023117 -0.014015 -0.016800 0.025299 0.008194 0.049255 0.041229 0.077942 -0.002451 0.075806 -0.046875 -0.031464 -0.036194 -0.083435 -0.114136 -0.031921 -0.006477 0.022888 0.106445 0.088684 0.072388 0.048492 0.033081 -0.062561 0.078125 0.087036 -0.037048 -0.020081 0.003115 0.030258 -0.103699 -0.108215 0.015900 0.071838 -0.020798 0.079834 0.027252 0.057709 -0.074097 0.012047 0.019257 -0.096436 0.052429 -0.038361 0.001329 -0.029434 -0.046631 -0.014618 0.018448 0.030243 -0.025192 0.168335 -0.088379 0.070740 -0.048981 -0.149780 0.061310 0.101685 -0.002300 -0.043243 0.023529 -0.009438 -0.023346 -0.120361 -0.102051 -0.004658 0.038849 0.002380 -0.024338 0.025665 0.083313 0.008865 -0.060730 -0.055817 0.001698 0.070251 -0.080933 -0.059021 0.053436 0.001541 -0.092163 -0.046600 -0.045563 0.021912 0.058350 -0.028763 -0.058990 -0.036987 -0.063110 -0.061829 -0.027832 -0.005993 0.017380 0.051575 -0.074219 0.005005 0.106628 0.034149 -0.003845 0.116394 -0.068970 -0.014847 -0.035675 0.072754 -0.024902 0.165527 -0.046539 0.062378 -0.013908 0.005917 0.012070 -0.065552 0.059052 0.009010 -0.031052 -0.008057 -0.077026 0.074341 -0.026443 -0.026672 0.000296 0.014328 -0.067383 0.042511 0.028366 -0.027802 -0.002668 0.038971 0.016785 0.016724 -0.013802 0.059692 -0.043030 -0.026474 -0.107239 -0.049988 0.070251 -0.075562 0.099121 0.016769 -0.078369 -0.092834 0.070801 0.035034 0.045410 -0.121155 -0.035400 -0.053223 -0.070068 0.042480 -0.121887 0.055878 -0.075256 -0.000730 0.051697 0.044586 -0.066711 0.017456 0.035095 0.060059 -0.083984 0.011459 0.074646 -0.027832 0.057739 -0.101990 0.004593 0.145142 0.048706 0.018356 -0.048096 -0.018906 -0.001160 -0.027893 -0.030029 0.060669 -0.124695 0.011932 0.069763 -0.093628 -0.042114 0.092407 0.108276 0.072388 0.098572 -0.062408 -0.101440 -0.021042 -0.002533 -0.066101 -0.004780 0.072632 0.016357 -0.023376 -0.052094 -0.019653 0.076721 -0.082336 -0.079590 0.002762 0.137329 0.065735 0.061859 0.024612 0.165894 0.051178 0.026550 -0.091614 -0.044220 0.049561 0.079407 0.036133 0.005314 0.029495 -0.054199 0.127075 -0.020203 -0.164551 0.056854 0.099121 0.046295 0.000232 -0.062988 0.109070 -0.013542 -0.044708 -0.030670 -0.028122 -0.019379 -0.002829 -0.028305 0.127441 -0.012024 0.033508 -0.031250
-0.036774 0.059906 0.007812 -0.027405 0.027802 0.058563 0.031708 0.019852 -0.058899 -0.040771 0.007118 0.050018 -0.026794 0.039337 0.068176 -0.093628 0.042572 -0.022766 0.023041 0.085815 -0.047882 0.048462 -0.079529 0.003159 0.106384 -0.030624 0.020584 0.071350 0.121277 0.048492 0.021729 -0.000547 -0.001014 0.022263 -0.071899 0.004353 -0.090027 0.009987 0.076843 0.120850 -0.011574 0.002878 -0.028198 -0.043274 -0.122681 -0.010452 0.116882 0.026321 -0.035095 0.026276 0.066223 -0.142700 -0.110718 -0.129028 0.036743 0.092468 0.028946 -0.010063 0.063965 -0.007389 -0.013794 0.029633 -0.019318 -0.097107 0.023788 0.051880 -0.008713 -0.061493 0.045105 0.064148 0.145508 0.015343 0.068848 -0.005005 0.058746 -0.035828 -0.150146 -0.018845 0.108154 0.046631 0.027893 0.075745 0.043640 0.040955 -0.051086 0.006142 0.046204 0.030777 -0.055878 -0.074158 -0.081116 0.028915 0.019135 -0.018143 -0.058716 0.038940 0.121460 -0.087952 -0.074036 0.054962 0.019257 -0.021271 -0.029343 -0.034821 -0.027847 -0.009468 -0.084961 -0.006275 -0.073181 -0.059784 -0.019318 -0.027313 -0.113342 -0.012100 -0.010414 -0.043915 -0.035858 0.075134 0.069458 -0.047394 -0.017044 -0.113342 -0.009277 -0.026855 0.100525 0.005264 0.043335 -0.015671 0.069763 0.025787 0.086182 -0.049744 -0.112976 0.041992 0.081055 -0.014153 -0.055817 -0.042053 -0.008095 -0.052765 -0.008560 0.017288 0.012192 -0.024124 -0.022476 0.016113 0.037781 0.070068 0.021454 -0.025894 0.007637 0.015060 0.012817 0.013016 -0.087769 -0.166626 -0.027710 0.138794 0.077454 0.073425 0.107544 -0.079773 -0.051636 0.136597 -0.005013 0.110535 -0.018265 0.076843 -0.085510 -0.106934 0.052887 -0.015778 0.037201 -0.051636 -0.060486 -0.053040 0.035309 -0.004551 0.028625 -0.018753 0.050964 -0.001712 0.038269 0.086243 -0.074036 0.088501 -0.030411 0.055084 0.105713 -0.083496 -0.026337 -0.014778 -0.037781 0.039856 0.002731 -0.019775 0.012169 -0.116150 -0.026581 0.089050 -0.126953 -0.074463 0.057404 0.060913 0.113647 0.126343 -0.177490 -0.016098 0.121338 0.025635 -0.034912 0.037933 0.054993 0.002819 -0.044312 -0.017319 -0.002031 0.054047 0.002380 0.025864 -0.065430 0.120789 0.033661 0.065063 0.037476 0.164795 0.007702 0.021988 -0.102295 -0.028351 0.027954 -0.056335 -0.024338 -0.043091 -0.024368 -0.092346 0.027893 -0.004936 -0.091309 0.057648 0.029129 0.064697 0.062347 -0.014366 0.105286 -0.029861 -0.035004 -0.012291 -0.043488 -0.002838 0.077637 -0.021118 0.067261 -0.046326 -0.028198 0.019073
-0.019547 0.017227 0.079468 0.050995 -0.020905 0.054535 0.063477 0.010490 -0.075073 -0.027695 -0.036591 0.005089 -0.050415 -0.009796 0.065369 -0.159302 0.028259 -0.103210 0.031952 0.041595 -0.074524 0.036835 0.003414 0.004292 0.091736 -0.019775 0.019318 0.123596 0.091431 0.084656 0.047760 -0.075256 -0.080139 0.047638 -0.089172 -0.030365 -0.032898 -0.005299 0.034027 0.136230 -0.006153 0.004593 -0.020660 -0.057709 -0.154297 0.028580 0.072815 -0.027557 -0.080261 -0.006535 0.044159 -0.076477 -0.194458 -0.118530 0.001003 0.013329 -0.002794 -0.037262 0.078369 -0.052185 -0.019104 0.067749 -0.052307 -0.044281 -0.019089 -0.037018 -0.019043 -0.112366 -0.004452 0.027481 0.078003 -0.022705 0.033630 -0.048706 0.076233 -0.039429 -0.141479 0.001478 0.106079 0.027679 0.019119 -0.010971 0.076660 0.070923 -0.070129 0.007637 0.054382 0.018478 -0.065247 -0.059662 0.035461 0.056519 0.016312 -0.109497 -0.091309 0.016678 0.058228 -0.058716 -0.019608 0.047974 0.008888 -0.077820 -0.052521 -0.039948 -0.047821 0.062927 -0.074585 -0.025009 -0.042480 -0.041351 0.006721 -0.080444 -0.102600 -0.011734 -0.024414 -0.074036 -0.013779 0.098022 0.035858 -0.045227 0.036591 -0.086182 -0.032288 -0.010651 0.117126 0.044708 0.133179 -0.000095 0.007702 -0.000188 0.034454 -0.052490 -0.103088 0.054626 0.019211 0.024567 0.032745 -0.086304 -0.001982 -0.085938 -0.013824 0.042572 0.031250 -0.121704 -0.041443 0.066345 0.049042 0.030045 -0.000487 -0.053009 -0.018280 0.011147 -0.004734 0.001528 -0.063721 -0.177979 -0.077087 0.121643 0.034363 0.026962 0.038391 -0.059692 -0.070862 0.133667 0.021194 0.040527 0.000845 0.043121 -0.090576 -0.050781 0.028046 -0.032043 0.029404 -0.055267 -0.020523 0.029922 0.021484 -0.019424 0.043457 -0.000768 0.095520 -0.065491 0.007076 0.061493 -0.083496 0.017975 -0.070068 -0.006790 0.103516 -0.037903 0.011345 -0.002974 -0.061798 0.018494 0.024857 -0.005688 0.017654 -0.091797 -0.030640 0.061340 -0.094360 0.028656 0.068726 0.114441 0.042694 0.123596 -0.102112 -0.067688 -0.051117 -0.021927 -0.054047 0.016983 0.085022 -0.055756 -0.088867 -0.021667 0.001245 0.129517 -0.000105 -0.028290 -0.089905 0.091797 0.070679 0.044403 0.107361 0.118713 -0.009193 0.001342 -0.065735 -0.090759 0.062744 -0.050201 -0.011253 -0.028641 -0.019089 -0.081360 0.038177 -0.005924 -0.100769 0.075806 -0.002293 0.025299 0.014084 -0.096252 0.108765 0.042755 -0.044373 0.031555 -0.020432 -0.063660 0.049377 0.059967 0.079712 -0.019913 -0.069519 -0.024734
-0.099182 -0.005066 0.021225 0.041534 0.022964 0.086365 0.043854 -0.005367 -0.035828 -0.026932 0.039917 0.029739 -0.040344 0.031403 0.073242 -0.131226 0.041107 -0.035278 0.069397 -0.028214 -0.099670 0.088501 -0.085144 -0.116577 0.074890 -0.016815 -0.033081 0.002676 0.087585 0.018158 0.060028 -0.052917 -0.057190 -0.071045 -0.073059 -0.187256 -0.090088 -0.025604 0.024994 0.117737 0.022842 0.034973 -0.064453 -0.025558 -0.175415 0.025665 0.054901 -0.015671 -0.116333 -0.014664 0.101135 -0.145142 -0.055359 -0.048553 0.041168 0.063782 0.061981 0.016357 0.051331 -0.074158 0.000396 0.041718 -0.044952 -0.043640 0.034119 0.048859 0.000998 0.001293 0.014595 0.047272 0.068970 0.003481 0.036926 -0.000822 -0.002008 -0.007492 -0.104431 -0.055817 0.108215 0.069031 -0.047333 0.022583 -0.067383 0.033600 -0.064941 -0.058563 0.044800 0.029953 -0.033630 -0.083862 -0.016327 0.044037 -0.032349 -0.035828 -0.058197 0.022308 0.098083 -0.023361 -0.011063 0.042847 -0.014885 -0.066040 -0.039337 0.057129 -0.029373 -0.044922 0.020065 0.000145 0.013512 -0.030045 -0.062744 0.014297 -0.052612 -0.045868 -0.033386 -0.074707 -0.004780 0.133057 0.078918 -0.004128 0.010666 -0.044159 0.005611 0.006313 0.010712 -0.095337 0.013992 0.051422 0.012039 0.062927 0.044006 -0.047089 -0.063660 0.002865 0.010681 0.040802 -0.003397 0.039734 0.026505 -0.023529 -0.039856 -0.022858 0.052826 -0.099487 -0.001122 0.035339 0.073364 0.030167 -0.028961 0.042938 0.081665 0.006699 0.060913 -0.011246 -0.012276 -0.092712 -0.021683 0.015945 -0.004311 0.099121 0.032410 -0.060486 0.008461 0.063416 -0.004272 0.095154 -0.043365 0.020187 0.018539 -0.083435 0.078674 -0.111816 0.058105 -0.037048 -0.075562 0.071411 -0.007881 -0.094727 0.003986 0.010460 -0.018463 -0.040161 0.013809 0.112366 -0.119629 0.163940 0.004501 0.022598 0.109497 -0.067810 -0.032806 0.011215 -0.023804 0.021713 0.069763 -0.030396 0.063782 -0.068726 0.049561 0.045929 0.006653 -0.064209 -0.001053 -0.026169 0.076294 0.067444 -0.079590 -0.050201 0.036072 0.091858 -0.073486 0.091614 0.091553 -0.017975 -0.025253 -0.041229 -0.034149 -0.005013 -0.031921 0.080383 -0.113281 0.138306 0.010628 -0.000715 0.087891 0.230347 0.031067 0.060028 -0.186768 -0.050842 0.009583 -0.094971 0.042694 -0.068420 -0.054352 -0.093201 0.130371 -0.096924 -0.046082 0.024399 0.033966 -0.073059 0.068176 -0.030472 0.085205 -0.066650 -0.018066 -0.007835 -0.076233 -0.012787 0.037811 -0.001780 0.080505 -0.025040 0.006687 0.001554
-0.002672 0.004059 0.026733 0.010757 0.015106 0.086914 0.065796 -0.050537 -0.040924 -0.048615 0.022690 0.055389 -0.011513 0.045227 0.033173 -0.125732 0.079285 -0.035553 -0.069458 -0.001429 -0.090271 0.070923 -0.080750 -0.076172 0.032318 -0.036713 -0.007397 0.093140 0.125244 0.035828 0.122253 -0.069458 -0.008095 0.041077 -0.101562 0.009193 -0.057312 0.009148 0.008636 0.118774 -0.010574 0.071045 0.069946 -0.021774 -0.111633 0.034119 0.096008 -0.027496 -0.103882 0.057892 0.067505 -0.157715 -0.170532 -0.086731 0.047028 -0.013161 0.005875 0.026962 0.098511 -0.056976 0.056030 -0.040436 -0.045837 -0.006550 -0.013000 0.021942 0.004185 -0.050049 0.054352 -0.001036 0.066711 -0.023544 0.143799 -0.037781 0.002804 -0.054565 -0.118469 0.071777 0.097595 0.006382 -0.001653 0.035065 -0.008743 -0.016754 -0.103516 -0.054108 0.050659 0.013130 -0.025101 -0.030762 -0.003277 0.105652 -0.010101 -0.058441 -0.089661 0.018799 0.079163 -0.045532 -0.021484 0.046417 0.048798 -0.106201 -0.002993 -0.044739 -0.018768 0.088440 -0.031174 -0.044067 -0.074158 -0.052063 -0.064575 -0.041046 -0.092102 -0.040955 0.045959 -0.056305 -0.005505 0.094849 0.033752 0.009224 0.042328 -0.089050 0.023071 -0.056366 0.105957 -0.021790 0.109131 0.007389 0.033264 -0.050262 -0.002802 0.002913 -0.065247 0.039398 0.060150 0.015266 0.048676 -0.018097 0.017242 -0.038422 -0.031677 0.015205 0.021362 -0.086975 -0.015106 0.045349 -0.014008 0.016617 0.021271 0.014214 -0.007179 0.000177 0.051727 -0.010948 -0.080811 -0.132080 -0.056763 0.114258 -0.016556 0.067444 0.043976 -0.097473 -0.050110 0.037781 0.044250 0.073608 -0.092468 -0.046295 -0.076172 -0.115295 0.041016 -0.032104 0.046783 -0.104492 -0.117310 0.002762 0.021545 -0.027527 0.015839 0.030273 0.060760 -0.074524 0.025879 0.048279 0.001818 0.040070 -0.119873 0.030243 0.137207 0.011017 -0.027191 -0.044159 -0.044098 0.067688 0.014481 -0.005348 -0.002609 -0.142456 0.010223 0.002949 -0.171997 -0.035400 0.100769 0.081604 0.081970 0.059143 -0.123291 -0.072754 -0.009857 0.011314 -0.049072 -0.004211 0.082336 0.008682 -0.069885 -0.027573 0.000644 0.088989 -0.042786 -0.016357 -0.022034 0.107605 0.057037 0.054565 0.092285 0.171631 -0.045654 -0.001109 -0.085327 -0.042786 0.014229 0.013802 -0.041016 -0.080200 0.034760 -0.088806 0.052002 -0.017181 -0.106201 0.052856 0.030502 0.021698 0.059326 -0.036957 0.097900 -0.040710 -0.097534 0.022766 -0.035065 -0.043304 0.049133 0.008873 0.037415 0.034973 -0.000811 -0.023911
-0.033356 -0.034546 -0.002728 -0.010056 0.047394 0.056671 0.029099 -0.058655 -0.011841 -0.065125 -0.045746 0.014122 -0.076660 -0.031021 0.024994 -0.169678 0.030624 -0.044495 -0.001725 -0.036255 -0.101257 0.080139 -0.048157 -0.075623 0.039581 -0.062866 0.001045 0.083923 0.044678 -0.019852 0.106628 -0.089905 -0.023071 -0.026917 -0.182129 -0.073608 -0.077209 -0.002439 0.049744 0.131470 0.022186 0.041656 0.075195 -0.002686 -0.084961 0.042877 0.093628 -0.039886 -0.089966 0.005455 0.045105 -0.053894 -0.172852 -0.057800 0.061707 0.005562 0.041077 0.003012 0.045776 -0.064636 0.011955 -0.010483 -0.055603 0.030624 -0.040955 -0.002554 -0.006348 -0.032593 -0.009300 -0.040100 0.045074 -0.042480 0.140015 -0.053650 0.026001 -0.093994 -0.088379 0.059540 0.052246 -0.005692 -0.018097 0.005764 -0.009865 -0.022491 -0.081421 -0.091553 0.035004 0.014458 -0.016434 -0.054993 0.022873 0.091614 0.036102 -0.076050 -0.091797 0.046722 0.009140 -0.052368 -0.044617 0.126587 0.048370 -0.133057 -0.008705 -0.047302 -0.049835 0.045441 -0.021759 -0.079041 -0.095947 -0.056152 -0.045135 -0.001440 -0.000105 0.001273 0.044281 -0.042694 0.036774 0.108521 0.006268 -0.019897 0.098999 -0.052521 -0.018921 -0.036499 0.017334 -0.034393 0.091980 -0.027481 0.028458 -0.001714 -0.017715 -0.019150 -0.042480 0.030685 0.010597 -0.005608 -0.005108 -0.054871 0.061890 -0.028534 -0.086487 0.041534 0.016510 -0.054535 -0.017990 0.066528 -0.003099 -0.050201 -0.029160 0.005199 0.038422 0.025894 0.066162 -0.002695 -0.018707 -0.069336 -0.027725 0.089233 -0.053650 0.092407 0.040314 -0.085083 -0.075317 0.048584 0.026321 0.045410 -0.115051 -0.083374 -0.040924 -0.103516 0.055267 -0.074280 -0.021698 -0.116638 -0.051788 0.030289 0.049744 0.005131 -0.006432 0.023773 0.052612 -0.105286 -0.009377 0.040436 -0.077515 0.061005 -0.105042 0.013550 0.160889 0.029907 -0.029160 -0.053619 -0.014496 0.007076 -0.007786 -0.039001 0.028610 -0.123962 0.070007 -0.055634 -0.137451 -0.039246 0.110840 0.134766 0.123657 0.061676 -0.064392 -0.060852 -0.029709 0.063049 -0.045807 0.026840 0.109619 -0.006126 -0.074280 0.000083 -0.064453 0.094727 -0.112854 -0.029205 -0.023346 0.117798 0.074585 -0.022858 0.062134 0.143433 -0.079590 0.000958 -0.085815 -0.018127 0.053772 0.046356 -0.032806 -0.054596 0.056396 -0.064941 0.058990 -0.066284 -0.106201 0.040741 0.034576 -0.010460 0.062805 -0.015701 0.069458 0.016159 -0.072998 -0.021057 -0.067200 -0.071716 0.063721 -0.050934 0.106812 0.044342 -0.018616 -0.041840
-0.002821 0.025803 0.044159 -0.007591 -0.024857 0.100464 0.018265 -0.035095 -0.049591 -0.051483 0.053223 0.046173 -0.100525 0.140991 0.019089 -0.059235 0.053009 0.067810 0.021881 0.004410 -0.064148 0.106201 -0.068420 -0.088318 -0.002048 0.011604 0.072021 0.107178 0.106323 -0.033020 0.077148 -0.049347 -0.022018 0.043884 -0.082520 -0.040894 -0.057526 0.048553 0.011414 0.103027 -0.017990 0.108459 -0.035797 -0.016418 -0.051697 0.023163 0.007095 -0.065979 -0.154297 0.067993 0.091003 -0.135864 -0.106628 -0.130615 -0.037048 -0.020493 -0.021149 -0.003214 0.139038 -0.022232 0.056915 -0.089417 0.001871 0.043243 0.046478 0.065369 0.028397 -0.019608 0.087036 0.010872 0.025284 -0.052429 0.152222 0.034760 0.020905 -0.041595 -0.078308 0.075989 0.096252 0.080444 -0.035065 0.052490 -0.054169 0.023605 -0.102539 -0.073547 0.130005 -0.001807 0.007305 -0.077881 -0.066772 0.059479 0.007988 -0.028412 -0.092896 -0.011925 0.027695 -0.005627 -0.034302 0.000691 -0.004726 -0.073181 -0.055084 0.019928 -0.072266 -0.013229 0.012375 -0.010880 -0.020554 -0.072815 -0.058380 -0.015511 -0.014206 -0.043518 0.066040 -0.064392 -0.000247 0.099304 0.052490 0.055054 0.046112 -0.056427 0.085571 -0.024567 -0.008087 -0.085571 0.037323 -0.014427 0.026825 -0.016541 0.011932 0.040955 -0.093994 0.043274 0.098633 0.071960 0.004017 -0.027695 0.053528 -0.031250 -0.008774 -0.073975 0.043427 -0.053040 -0.031952 -0.015961 0.043121 -0.045288 -0.002979 0.093811 0.058044 0.015060 0.017899 -0.038239 -0.063110 -0.134277 -0.084229 0.096497 -0.025116 0.036163 0.024384 -0.130493 0.025482 -0.093994 0.017410 0.059753 -0.103088 -0.052063 -0.083374 -0.091187 0.051514 -0.075562 0.025864 -0.063293 -0.094788 0.089661 0.011978 -0.108154 0.006912 0.005478 0.068909 -0.083801 0.034546 0.054291 -0.032684 0.099304 -0.043427 0.046051 0.089722 0.046509 -0.021622 -0.017944 -0.077271 0.085449 0.083252 -0.005154 -0.003345 0.003571 0.014122 -0.010872 -0.154053 -0.054291 0.108093 0.058777 0.062164 0.033569 -0.105652 -0.056183 -0.039368 0.063660 -0.009010 0.036804 0.081543 -0.072205 -0.087402 -0.086365 0.053528 0.036438 -0.058533 0.001586 0.004669 0.008781 0.012077 0.014732 0.028824 0.194580 -0.026169 -0.044373 -0.102966 -0.045837 -0.014503 -0.018097 -0.004013 -0.075745 -0.009956 -0.122498 0.033783 -0.042450 -0.033264 0.083496 0.011345 0.036377 0.034454 -0.009483 0.047577 -0.016571 -0.102356 0.020218 -0.106445 -0.011894 0.062073 0.010345 -0.014198 -0.018204 -0.013016 -0.013954
-0.051422 -0.053284 0.033264 -0.019348 0.068909 0.092041 -0.007626 -0.049500 -0.018585 -0.018509 -0.024490 0.023331 -0.092041 -0.051697 0.052521 -0.158569 -0.001888 0.013802 -0.018372 0.056274 -0.113647 0.049927 -0.018723 -0.039642 0.066772 -0.038025 0.009285 0.036957 0.110291 -0.014015 0.099365 -0.024445 0.010544 0.026718 -0.131836 -0.059906 -0.123230 -0.000493 0.050476 0.082458 0.036774 0.028610 0.064758 -0.040253 -0.095154 0.006378 0.111267 -0.037750 -0.070679 -0.021194 -0.011139 -0.085022 -0.119202 -0.054291 -0.006268 0.027054 0.079224 -0.026031 0.058014 -0.014084 0.014961 -0.047241 -0.129150 0.021713 -0.073364 -0.006302 -0.001666 -0.072205 -0.045105 0.010315 0.056580 -0.057861 0.106812 -0.061462 0.089111 -0.050049 -0.067810 0.059448 0.066345 -0.023392 -0.041290 -0.026657 0.015091 0.015144 -0.044128 -0.069580 0.012932 0.013809 -0.035828 -0.072083 -0.007751 0.153931 0.008934 -0.084351 -0.102417 -0.019806 0.050262 -0.049683 -0.085144 0.093811 0.042603 -0.149292 -0.028427 0.007362 -0.094604 -0.027130 -0.071899 -0.089783 -0.086975 -0.042114 -0.065063 -0.013649 -0.061584 -0.073181 0.021790 -0.049225 0.014732 0.083130 0.011467 -0.037445 0.103821 -0.039001 -0.027924 -0.068298 0.101074 -0.050781 0.085571 0.016190 0.086304 0.005844 0.006462 -0.003719 -0.077576 0.048737 0.023132 -0.030807 -0.052460 -0.083557 0.000701 -0.020462 -0.086426 0.015518 0.030045 -0.053162 -0.056732 0.058624 -0.009583 -0.033203 -0.043854 0.026459 -0.024567 -0.022308 0.034515 0.014580 -0.033356 -0.088257 -0.021194 0.123474 0.008614 0.056152 0.046875 -0.116333 -0.063660 0.066162 0.046844 0.070007 -0.092346 -0.072937 -0.010422 -0.103455 0.078003 -0.042969 -0.005531 -0.107361 -0.028351 0.019852 0.002773 0.000597 0.063965 -0.000360 0.041931 -0.072998 -0.041748 0.056549 -0.057983 0.047974 -0.065735 0.014565 0.132202 -0.018295 -0.050079 -0.066467 -0.073059 0.010010 -0.011925 -0.054504 0.052734 -0.181274 0.077820 -0.045624 -0.124268 -0.041901 0.023117 0.122131 0.085083 0.061157 -0.073975 -0.050476 0.016479 0.056702 -0.098999 0.088379 0.071533 0.014328 -0.107910 -0.022766 0.011124 0.049835 -0.092468 0.015518 -0.040497 0.075928 0.046265 -0.019745 0.064575 0.108826 -0.066101 0.046539 -0.070496 -0.008858 0.036987 -0.034485 -0.040802 -0.058136 0.095459 -0.040802 0.078247 -0.049438 -0.113708 0.022324 0.021973 -0.035706 0.082458 -0.057648 0.056549 0.057007 -0.092590 -0.034424 -0.006813 -0.047485 0.076721 -0.015038 0.098694 -0.017593 0.005287 -0.057800
-0.083923 -0.012230 0.036377 0.001880 0.021027 0.098328 0.088074 -0.047119 -0.083435 0.030960 0.012840 0.022110 -0.025635 0.007576 0.040222 -0.104980 0.031799 0.003391 -0.014328 0.080750 -0.052856 0.077148 -0.070862 -0.006203 0.115295 -0.024765 -0.053528 0.059540 0.118042 0.079163 0.098328 -0.004402 -0.044159 0.083862 -0.062927 -0.026306 -0.086182 -0.012077 0.033142 0.084900 -0.015068 -0.005337 -0.015839 -0.082764 -0.130981 -0.024643 0.101074 -0.011688 -0.087646 -0.039490 0.030334 -0.163574 -0.107239 -0.141602 0.025986 0.070068 0.046326 -0.045837 0.022034 -0.036896 0.001183 0.026443 -0.074341 -0.006821 0.000267 -0.016037 -0.049896 -0.116150 0.032227 0.029068 0.074280 -0.000811 0.057343 -0.062927 0.066162 -0.058685 -0.067627 0.012573 0.090881 0.003183 -0.027817 -0.003468 0.041870 0.008095 -0.015152 -0.011559 0.040588 0.029663 -0.109985 -0.122498 0.018463 0.107300 -0.009285 -0.073914 -0.101318 0.005703 0.119202 -0.004696 -0.077576 0.057648 0.032440 -0.077576 -0.057434 0.044891 -0.054169 0.004650 -0.093750 0.040436 -0.063660 0.020065 -0.064148 -0.044128 -0.085144 -0.079407 0.019424 -0.082153 -0.070129 0.058411 0.043793 0.005188 -0.016678 -0.095032 -0.012497 -0.041290 0.122498 0.006672 0.086182 -0.002424 0.070068 -0.000957 0.029709 0.001432 -0.095703 0.081177 0.028687 -0.013474 -0.014427 -0.095276 -0.040283 -0.039459 0.027740 -0.009064 0.014862 -0.117004 -0.057037 -0.005444 0.065369 -0.016647 0.021286 0.017456 0.014336 -0.040070 0.027634 0.029068 -0.074524 -0.130371 -0.008507 0.121033 0.050934 0.060547 0.081299 -0.095215 -0.080566 0.089905 0.025238 0.028152 -0.066772 -0.001808 -0.019608 -0.091431 0.045502 0.032990 0.038818 -0.041168 -0.083618 0.009956 -0.001778 0.008873 0.040405 0.021317 0.054016 -0.076111 0.024612 0.043762 -0.044189 0.048004 -0.010689 -0.006115 0.116516 -0.037201 -0.032440 -0.022400 -0.051666 0.048187 -0.004246 0.000114 0.003225 -0.202393 0.018555 0.010117 -0.122131 0.004211 -0.005424 0.051971 0.013687 0.083557 -0.095276 -0.114319 0.024429 0.051422 -0.080688 0.077942 0.073425 0.004986 -0.061737 -0.074890 0.051819 0.075134 -0.044739 0.034943 -0.110535 0.098267 0.082581 0.013878 0.101440 0.111450 -0.069519 0.039032 -0.114014 -0.040375 0.022415 -0.049500 -0.053467 -0.050598 0.028809 -0.076111 0.046692 0.017807 -0.155518 0.061096 -0.004524 -0.013512 0.040497 -0.059937 0.103699 -0.029770 -0.070801 -0.027710 0.006432 -0.050720 0.047729 0.082214 0.055542 -0.018814 0.014801 -0.007912
-0.038055 0.019958 0.049561 0.041565 -0.013458 0.048767 0.025894 0.024277 -0.060150 -0.004219 -0.010170 -0.001792 -0.160034 0.095154 0.058044 -0.100464 0.001265 0.027161 0.046783 -0.025162 -0.106812 0.093262 -0.044556 -0.096619 0.016220 -0.045166 0.054718 0.070923 0.123962 -0.019836 0.048279 -0.039490 -0.060577 -0.031555 -0.121948 -0.039825 -0.044128 0.019684 -0.011787 0.158203 0.004612 0.101318 0.011192 -0.075317 -0.130127 0.006428 0.025177 -0.051422 -0.121582 -0.009109 0.119995 -0.091309 -0.114380 -0.091431 0.021194 0.017303 -0.006992 0.022659 0.126465 -0.099365 0.009476 -0.004822 -0.075073 -0.054962 0.034912 0.069763 -0.049225 0.017838 0.015327 0.080994 0.060272 -0.027176 0.003904 -0.002186 0.049194 -0.050659 -0.130371 -0.002192 0.100281 0.084290 -0.059326 0.002989 -0.040375 0.130737 -0.059326 -0.131836 0.087219 0.074768 -0.063599 -0.080322 -0.046356 0.012016 0.013664 -0.023819 -0.105591 0.052124 0.015106 -0.039337 -0.053833 -0.005165 -0.013947 -0.066895 -0.040619 0.096863 -0.030121 -0.054016 0.003914 -0.058014 -0.029083 -0.039673 -0.031174 -0.045319 -0.036102 -0.071655 0.032715 -0.075317 0.040039 0.135498 0.072388 -0.003748 0.016144 -0.075562 -0.011444 -0.019455 0.019958 -0.112732 -0.013557 0.066162 0.090149 0.043732 0.008461 0.006870 -0.085693 -0.037445 0.064697 0.061066 0.021210 0.004478 0.039917 -0.038757 -0.034210 -0.053619 0.005909 -0.031921 -0.039185 0.028717 0.054077 0.104980 0.003412 -0.048187 0.026352 -0.015762 0.012947 0.008896 -0.033752 -0.166016 -0.004364 0.092224 0.071167 0.043793 0.024017 -0.109741 0.025528 0.055420 -0.035034 0.036987 0.007515 -0.043732 -0.076782 -0.078735 0.110657 -0.079407 -0.035950 -0.041412 -0.048218 0.031616 -0.016083 -0.081970 -0.014015 -0.019241 0.048950 -0.077698 -0.032562 0.088989 -0.120178 0.118713 -0.021210 0.001942 0.062225 -0.024872 -0.034668 0.016403 -0.064392 0.011452 0.080566 -0.017426 0.007988 -0.010399 0.001991 0.002514 0.012474 -0.013641 0.063721 0.014748 0.064331 0.069824 -0.111450 -0.060699 -0.041199 0.053741 -0.033447 0.122681 0.055145 -0.037018 -0.078003 -0.044312 0.109619 -0.029160 -0.057770 0.092041 -0.087097 0.020737 0.011780 -0.014877 0.043213 0.157104 0.013802 -0.001750 -0.102783 -0.048615 0.028397 -0.114380 0.045258 -0.077942 -0.051392 -0.072021 0.063110 -0.056976 -0.049683 0.069885 0.005642 0.024658 0.067627 -0.033905 0.082336 -0.031616 -0.055603 0.076233 -0.071289 0.024704 0.048096 -0.029373 0.031235 -0.098694 -0.029358 -0.051636
-0.004452 -0.003263 0.044342 -0.006626 -0.053192 0.069397 0.042877 -0.056915 -0.046265 0.008614 0.029205 0.022827 -0.115234 0.135010 0.019547 -0.107544 0.045074 -0.041199 0.021286 0.038055 -0.053955 0.044586 -0.040985 -0.052399 0.010002 0.046509 0.083252 0.088867 0.118347 0.006226 0.137695 -0.022202 -0.039490 0.046051 -0.126831 0.006031 -0.063843 0.069519 -0.022369 0.105652 0.003038 0.086365 -0.016495 -0.068909 -0.058624 0.046265 0.041656 -0.025833 -0.147827 0.074951 0.087585 -0.111328 -0.089783 -0.045929 -0.039398 -0.042816 0.020233 -0.039825 0.115112 -0.023148 0.064209 -0.119690 -0.067322 0.015686 -0.012474 0.029480 0.039520 -0.064575 0.069946 0.050079 0.045074 -0.043518 0.098206 0.012657 0.035065 -0.056824 -0.109619 0.025223 0.181030 0.065186 -0.042755 0.002779 -0.012924 0.016998 -0.074890 -0.020874 0.043762 0.030609 -0.012344 -0.064575 -0.027969 0.075317 -0.031830 -0.088074 -0.102173 -0.070312 0.048645 -0.054413 -0.077881 0.036102 0.006519 -0.100037 -0.084290 0.012535 -0.069458 0.001565 -0.011230 -0.068726 -0.033447 -0.057190 -0.034302 -0.009758 -0.048798 -0.059326 0.039276 -0.068848 -0.020523 0.094482 0.011330 0.043030 0.027939 -0.042725 0.054535 -0.037201 0.069885 -0.043793 0.076294 -0.003647 0.001885 -0.037964 -0.023758 0.065857 -0.118225 0.075134 0.091858 0.037872 0.010193 -0.075256 0.036346 -0.028183 -0.009163 -0.073242 0.034363 -0.046265 -0.061066 0.029587 0.015068 0.049042 0.014870 0.028641 0.002771 -0.004677 0.019989 -0.054474 -0.090332 -0.145630 -0.111145 0.144409 0.008011 0.021179 0.024017 -0.122192 0.022675 -0.038422 0.025162 0.049561 -0.044037 -0.019165 -0.047638 -0.083862 0.040771 -0.022903 0.056702 -0.056274 -0.073792 0.062195 -0.005711 -0.024521 0.060150 0.056305 0.059448 -0.111938 0.012901 0.081360 -0.014015 0.033936 -0.054382 0.023087 0.100586 0.006187 -0.010628 -0.044983 -0.104614 0.061401 0.101868 0.008530 0.007843 -0.097961 0.028030 0.008217 -0.117371 0.002672 0.015297 0.066162 0.060944 0.068481 -0.106323 -0.106628 -0.019516 0.086060 -0.014824 0.052307 0.153687 -0.034546 -0.062866 -0.079590 0.061523 0.054749 -0.015961 -0.017670 -0.028564 0.031555 -0.010193 0.001993 0.068970 0.194458 0.015320 -0.025223 -0.097961 -0.022797 0.008041 0.039307 -0.012276 -0.081604 0.062195 -0.112732 0.043121 -0.034241 -0.062866 0.054230 0.003893 -0.008354 0.059448 -0.064819 0.097900 0.029205 -0.097595 0.057068 -0.076172 -0.037506 0.039276 -0.005642 -0.021835 -0.007084 0.002829 -0.035126
-0.080139 0.004890 -0.001188 0.046844 0.072693 0.085388 0.084534 -0.066772 -0.044617 -0.047699 -0.011375 0.073181 0.018509 0.016113 0.049194 -0.158936 0.030365 -0.027267 -0.007996 0.014519 -0.053772 0.057190 -0.085571 -0.049103 0.083740 -0.027191 -0.049347 0.051361 0.051422 0.041779 0.085693 -0.028198 0.012779 0.012482 -0.092712 -0.095398 -0.074829 -0.011581 0.019470 0.119629 0.044159 0.030579 0.025757 0.000083 -0.146851 0.000938 0.061279 0.013176 -0.099609 0.006954 0.043182 -0.188354 -0.097656 -0.082886 0.081238 0.083069 0.045135 0.009468 0.023773 -0.058685 0.018066 0.069092 -0.034332 0.019608 0.002611 0.055145 -0.013062 -0.083740 -0.012505 0.011131 0.061371 -0.009201 0.141357 -0.026199 -0.012093 -0.035156 -0.107788 0.054169 0.078979 0.015884 0.001720 0.011414 -0.000395 0.002388 -0.108826 -0.038513 -0.011688 0.020126 0.017487 -0.117859 0.001474 0.061646 -0.007038 -0.099609 -0.049377 0.022385 0.109009 -0.014183 -0.091675 0.050903 0.050476 -0.048248 -0.011078 0.019104 -0.001171 0.070435 -0.063477 0.000863 -0.054108 0.003925 -0.076904 0.012589 -0.035004 -0.063782 0.013916 -0.074951 -0.024246 0.123535 0.056976 -0.007507 0.017807 -0.104675 -0.013039 -0.002748 0.068481 -0.010826 0.069519 -0.019684 0.079712 0.008194 0.024170 -0.037933 -0.099243 0.041016 -0.020508 -0.035614 -0.032837 -0.054535 -0.007641 -0.051270 -0.032806 0.027237 -0.019363 -0.102844 -0.036621 0.020004 0.051178 -0.048828 0.022568 0.046082 0.014961 -0.015465 0.061035 0.025742 -0.050659 -0.103210 0.005821 0.090210 -0.042328 0.137695 0.047302 -0.056671 -0.088135 0.026230 0.009293 0.060486 -0.082214 -0.012062 -0.048553 -0.106201 0.036316 -0.059143 0.075867 -0.070923 -0.123840 0.009308 0.043732 -0.019302 0.046173 0.003698 0.048248 -0.068726 0.069641 0.036407 -0.002552 0.116455 -0.049225 -0.005409 0.101929 -0.024002 0.010139 -0.021988 -0.026489 0.043884 -0.013351 0.011971 0.002176 -0.134521 0.053864 0.043152 -0.145874 -0.009880 0.046692 0.069763 0.107300 0.033142 -0.075317 -0.113953 0.057220 0.077209 -0.058929 0.024109 0.078674 0.010574 -0.005505 -0.062317 -0.047791 0.089294 -0.067322 0.031433 -0.073792 0.165283 0.046631 0.052277 0.091003 0.161255 -0.064880 0.014786 -0.149048 -0.061127 0.018341 0.003496 -0.018280 -0.043152 -0.007374 -0.106079 0.107605 0.002144 -0.118347 0.058624 0.047455 -0.022339 0.051453 -0.018509 0.119446 -0.072937 -0.071106 -0.066040 -0.018814 -0.003826 0.042603 -0.009926 0.090393 0.017899 0.019165 -0.000245
-0.030579 -0.037018 0.093201 0.015778 0.078064 0.032928 0.022293 0.082703 -0.059753 0.003086 -0.045227 0.000596 -0.054291 -0.059052 0.061707 -0.088745 -0.034332 -0.014809 0.086731 0.160278 -0.056366 -0.066589 0.036774 0.089905 0.090210 0.009636 0.026077 -0.027557 0.016968 0.083679 -0.018631 0.008858 0.003799 0.117126 0.026550 0.008095 0.037170 -0.028229 0.033295 0.040161 0.073914 0.005024 0.001634 -0.070068 -0.045959 0.003378 0.119141 -0.002274 0.080994 -0.085571 -0.057495 -0.076599 -0.026367 -0.031464 -0.032349 0.023834 0.024841 -0.012764 0.016953 -0.099731 -0.003805 0.074524 -0.208862 -0.037750 -0.047943 -0.038391 -0.048187 -0.069763 -0.091858 0.089111 0.118225 0.008972 -0.071716 -0.071350 0.172852 0.015701 -0.140259 0.027908 0.032715 -0.045319 -0.041779 -0.024933 0.084473 0.029877 0.050842 -0.041412 0.011452 0.068237 -0.089905 -0.071350 0.063354 0.056488 0.036224 -0.055786 -0.018738 -0.056885 0.116516 -0.026413 -0.086548 0.023834 0.003456 -0.014076 -0.033020 0.016556 -0.023911 -0.034790 -0.151733 -0.000883 0.007282 0.021057 -0.060242 -0.113281 -0.088074 -0.038452 -0.003799 -0.064636 -0.042694 0.023941 0.029373 -0.067871 0.026962 -0.071167 0.017639 -0.045990 0.175659 0.033539 0.085632 0.070190 0.128174 -0.032074 0.009315 -0.019562 -0.051971 0.042542 -0.012505 -0.010437 -0.022537 -0.078613 -0.066284 0.007004 0.042450 -0.038605 0.033142 -0.059052 -0.033142 -0.005440 0.029236 0.005566 0.004143 -0.050781 -0.080627 -0.057678 -0.090698 0.048889 -0.018723 -0.071594 -0.012131 0.097778 0.065002 -0.034515 0.014633 -0.086060 -0.095154 0.182861 0.037933 0.029266 0.042664 -0.020813 0.018372 -0.017059 0.061340 -0.045166 0.019165 0.017838 0.089233 -0.003374 -0.013435 0.050690 -0.005253 -0.067871 0.054901 -0.025330 -0.087952 0.077820 -0.061127 -0.020996 -0.034485 -0.053070 0.055450 -0.042877 -0.023346 0.032867 -0.033447 0.044708 -0.034271 -0.017487 0.050476 -0.171387 0.005592 0.011017 0.029465 0.005554 -0.027390 0.081787 -0.023773 0.083374 -0.061462 -0.067871 0.020706 0.000172 -0.124146 0.077881 -0.054108 0.109253 0.004658 0.000799 0.107300 -0.016739 -0.046753 0.033905 -0.065918 0.052002 0.015900 0.018280 0.033203 -0.024475 0.074829 0.086670 0.011276 -0.063782 0.028366 -0.084595 0.009186 0.057159 0.066040 -0.009193 -0.011086 0.063416 -0.104187 0.005638 0.014366 0.065186 -0.005424 -0.165405 0.008659 0.043091 -0.047668 -0.023590 0.128174 -0.068726 -0.009415 0.021774 0.091858 -0.136597 0.015137 -0.045898
-0.097900 -0.018066 0.051697 0.019623 0.008308 0.054993 0.025314 0.018570 -0.082092 -0.039581 0.048065 0.013893 -0.109375 0.099854 0.100342 -0.077087 0.026047 0.072449 -0.006367 0.084534 0.055847 0.022552 -0.057312 -0.060486 0.006004 -0.032623 0.081543 0.034210 0.077637 0.053314 0.000253 -0.009506 -0.018860 0.089722 -0.050903 -0.019867 -0.038330 0.086731 0.004475 0.070068 -0.022797 0.084473 -0.011024 -0.071716 -0.089417 0.056183 0.073059 -0.011292 -0.130615 0.056915 0.068665 -0.116150 -0.125244 -0.077576 -0.018539 0.022568 -0.005653 0.009415 0.091187 -0.064270 0.009895 -0.085022 -0.014755 -0.078003 0.048340 0.013161 0.053345 0.062744 0.091125 0.020935 0.079407 -0.019775 0.131348 0.004440 0.037231 -0.047302 -0.085388 -0.055511 0.148926 0.048828 0.012016 0.061859 -0.052124 0.043701 -0.084106 0.016937 0.085449 -0.008255 -0.029602 -0.050293 -0.017563 -0.014091 -0.009750 0.044678 -0.108948 0.004478 0.055115 0.002878 -0.032898 -0.045074 0.082214 0.002533 -0.034515 0.052887 -0.027649 0.064697 -0.076904 0.002522 0.028824 -0.096069 -0.039642 -0.075378 -0.058044 0.027420 0.006630 -0.056244 -0.016632 0.046265 0.115295 0.037964 0.048584 -0.019958 0.029434 0.036774 0.031677 0.102539 0.026459 0.063293 -0.002195 -0.015373 0.055328 0.092224 -0.222046 -0.008385 0.105103 0.042145 -0.004360 0.073853 0.018982 -0.002781 0.087463 -0.057251 0.038391 -0.029236 -0.003014 0.008064 0.056366 0.065063 0.057526 0.026001 0.101929 -0.042145 -0.003368 -0.092712 -0.089111 -0.134155 -0.114685 0.151978 0.124756 -0.077515 0.033600 -0.085449 0.059052 0.060242 0.060303 0.068237 0.011040 0.039124 -0.060333 -0.064514 0.077393 0.022858 0.079651 -0.027756 -0.029053 0.028442 -0.040955 -0.069580 -0.007431 0.016357 0.113892 0.011200 0.002327 0.112061 0.005257 0.063049 -0.024750 0.065796 0.031769 -0.041870 -0.043793 0.047272 -0.039032 0.026520 0.028107 -0.060211 0.005028 -0.050201 -0.088867 -0.031158 -0.087830 -0.014725 0.121155 0.001140 0.015823 0.015404 -0.078125 -0.130859 0.043182 0.061218 -0.070740 -0.057983 0.125732 -0.048492 -0.028580 -0.128052 0.052490 0.029022 -0.032959 0.008850 -0.044250 0.009117 0.011604 0.011948 0.021652 0.154175 0.051300 0.027084 -0.116333 -0.057465 0.009033 -0.081299 0.069641 0.015854 -0.030167 -0.017487 -0.080994 0.013069 -0.023911 0.075012 -0.004845 0.028564 0.012962 -0.094604 0.042114 0.035065 -0.041901 0.061371 -0.045441 0.001947 0.041168 -0.013412 0.010803 -0.132324 -0.024384 0.009148
-0.050232 -0.029907 0.029968 0.070984 0.040710 0.065491 0.114807 -0.041656 -0.019653 -0.049713 0.020020 0.046844 0.043121 0.021820 0.034637 -0.145630 0.047852 0.023804 -0.006161 -0.040955 -0.043427 0.136475 -0.111938 -0.082581 -0.001426 -0.034973 -0.012955 0.096436 0.057983 0.032257 0.080627 -0.060852 -0.016174 0.016693 -0.043213 -0.080688 -0.024429 0.023132 -0.031769 0.094055 0.025726 0.101501 0.004742 0.028336 -0.125488 0.051392 0.007545 -0.058228 -0.176270 0.028961 0.068970 -0.171387 -0.127075 -0.095520 0.025986 -0.006886 -0.003963 0.056519 0.089661 -0.105347 0.064758 0.019669 -0.063782 0.007202 0.014999 0.034882 -0.034515 -0.042053 0.035858 -0.013237 0.015320 -0.006924 0.108337 -0.011086 -0.015358 -0.022949 -0.088440 0.025055 0.085266 0.061005 -0.041260 0.001339 -0.058899 0.009125 -0.177124 -0.073792 0.059448 0.004276 -0.011566 -0.114624 0.002691 0.027420 -0.015915 -0.088440 -0.077026 0.015884 0.075745 0.013824 -0.046204 -0.033752 0.046173 -0.033112 -0.021545 0.055817 0.058533 0.073975 -0.020203 0.016922 0.015854 -0.007866 -0.065552 -0.027496 -0.030762 -0.083130 -0.013062 -0.079712 -0.051575 0.155884 0.075806 0.015732 0.021255 -0.049866 0.022003 0.001189 0.040924 -0.016296 0.103638 0.013123 0.013039 -0.034515 -0.007328 0.027924 -0.120667 -0.017715 0.004032 0.057098 0.083252 0.068054 0.028336 -0.015518 -0.012276 -0.002171 0.035767 -0.115479 -0.029968 -0.012703 0.080688 -0.033661 0.025665 0.030258 0.041992 0.010574 0.039276 -0.009750 -0.027176 -0.101196 0.001236 0.045654 -0.032471 0.082581 -0.019379 -0.112549 -0.007164 -0.027527 0.015656 0.076782 -0.042267 -0.071228 -0.061951 -0.131348 0.024002 -0.043549 0.032562 -0.092407 -0.122681 0.095642 0.008530 -0.117371 -0.001532 0.015182 0.058105 -0.061249 0.008995 0.044281 -0.008644 0.132935 -0.058197 -0.035675 0.070190 0.010468 0.012047 -0.007393 -0.053864 0.072571 0.029541 -0.009552 -0.011047 -0.050598 0.042328 0.004589 -0.117554 -0.022949 0.094116 0.025574 0.060303 0.010223 -0.022995 -0.119873 -0.039307 0.081360 -0.078552 -0.005035 0.116333 0.007858 -0.052277 -0.078552 0.024384 0.069702 -0.081299 0.028488 -0.078247 0.109619 0.064941 -0.002388 0.070129 0.161743 -0.045288 -0.000926 -0.184326 -0.087952 -0.029404 -0.009354 -0.010010 -0.072388 -0.047394 -0.092651 0.095642 -0.003744 -0.057465 0.071289 0.021484 -0.011467 0.009033 -0.077759 0.086975 -0.024933 -0.098328 -0.000576 -0.064819 -0.001911 0.031372 0.021484 0.007420 0.017944 0.024734 0.006130
-0.070312 -0.005947 0.027618 -0.002037 0.045868 0.094788 -0.056000 -0.002676 -0.092529 -0.000098 -0.038666 0.000777 -0.112854 -0.026031 0.094971 -0.123108 -0.035004 0.058929 0.032867 0.143921 -0.101318 0.009460 0.048767 0.023743 0.085571 -0.051208 0.009773 0.037415 0.153442 -0.009506 -0.009415 0.047485 -0.008148 -0.026474 -0.073853 -0.024109 -0.130859 -0.002478 0.042175 0.065063 0.014091 -0.019730 -0.001864 -0.110046 -0.086609 -0.030090 0.122681 -0.036438 0.006531 -0.043915 -0.005352 -0.071289 -0.099792 -0.074951 0.020462 0.102295 0.080017 -0.046722 0.071350 -0.001657 -0.061432 -0.028610 -0.097229 -0.024887 -0.031525 0.010147 -0.036255 -0.037689 -0.015274 0.051361 0.073059 -0.043304 0.058685 -0.057983 0.124451 -0.046875 -0.077332 -0.012367 0.040070 -0.007004 -0.012955 -0.023727 0.041443 0.056854 0.003002 -0.048309 0.021881 0.006939 -0.093628 -0.066345 -0.004349 0.089478 0.017868 0.017838 -0.099304 -0.013039 0.048340 -0.071167 -0.080261 0.075989 0.008705 -0.080566 -0.064148 0.042450 -0.083374 -0.087280 -0.110718 -0.050629 -0.102295 -0.045929 -0.040955 -0.021957 -0.051788 -0.016785 0.003160 -0.040283 -0.007442 0.025772 0.054565 -0.064758 0.072998 -0.059113 -0.057770 -0.015366 0.114136 -0.001216 0.047028 0.026245 0.125000 0.076599 0.069824 0.006954 -0.129395 0.022415 0.060455 -0.057617 -0.141724 -0.126831 -0.048492 -0.066589 -0.018692 -0.019989 0.018097 0.004642 -0.044586 0.027374 0.009232 0.081543 0.006332 -0.012268 -0.023163 -0.063416 0.009834 -0.015190 -0.050354 -0.125854 -0.034637 0.161377 0.135254 -0.010040 0.093994 -0.096130 -0.037140 0.148193 0.019608 0.066284 -0.063049 0.018158 -0.025818 -0.031464 0.107483 -0.025482 -0.022354 -0.057739 0.009651 -0.041138 -0.025269 0.002100 0.043091 -0.059875 0.049072 -0.019424 -0.014809 0.080505 -0.093262 0.033081 0.023361 0.031952 0.056000 -0.024506 -0.039490 -0.036987 -0.076477 -0.077393 -0.005325 -0.055328 0.055359 -0.152344 -0.000388 -0.001614 -0.039124 -0.037048 0.022781 0.091675 0.016159 0.081970 -0.097595 -0.041138 0.042297 0.039703 -0.089233 0.108032 0.036102 0.006413 -0.089600 -0.045868 0.068665 -0.008690 -0.049316 0.040558 -0.070251 0.029251 0.045563 0.009613 0.018402 0.071106 -0.039612 0.086121 -0.033844 -0.010750 0.041962 -0.111572 -0.017242 -0.006210 0.042236 0.008698 0.037933 0.017273 -0.159790 0.076294 0.046417 -0.012756 0.083435 -0.056946 0.047729 0.075806 -0.023743 -0.013535 0.029831 0.017609 0.031708 -0.005264 0.139771 -0.110962 0.002268 -0.048065
-0.035767 -0.028107 0.045929 -0.037933 0.070496 0.030014 -0.012184 -0.032318 -0.044220 -0.037415 -0.006599 -0.011330 -0.102112 -0.027328 0.026840 -0.131714 0.000075 -0.027939 0.042206 0.035828 -0.093262 0.045410 -0.005596 -0.039001 0.031158 -0.007919 0.068787 0.019775 0.079224 -0.026947 0.100586 -0.049438 -0.006439 0.016922 -0.156250 -0.088623 -0.143799 0.002457 0.034729 0.079590 0.053314 0.076050 0.067627 -0.045105 -0.054840 0.045074 0.089355 -0.026901 -0.108093 -0.014633 0.006062 -0.019257 -0.135010 -0.043091 -0.006924 0.009819 0.092285 -0.018723 0.063599 -0.013832 0.025146 -0.062317 -0.085999 0.012665 -0.025925 0.012329 0.038208 -0.059631 -0.033295 -0.005219 0.065918 -0.035797 0.147095 -0.098022 0.075745 -0.080505 -0.058929 0.057678 0.080933 0.002102 -0.039459 0.020325 -0.005451 -0.022675 -0.041809 -0.048492 0.052094 0.000624 -0.019958 -0.042084 -0.002735 0.118835 0.040894 -0.062866 -0.113464 -0.030167 0.006264 -0.055481 -0.066833 0.098206 0.023132 -0.157227 -0.057220 -0.055023 -0.093445 -0.007530 -0.026260 -0.098022 -0.075623 -0.070374 -0.055664 -0.030441 -0.048279 -0.001378 0.035217 -0.053864 0.032135 0.102173 0.018951 -0.026199 0.147583 -0.019958 0.011856 -0.044617 0.048828 -0.011116 0.110779 0.059631 0.029861 0.012886 -0.013382 0.018631 -0.055603 0.059906 0.041870 0.021408 -0.063843 -0.107910 0.060547 -0.055664 -0.073547 0.029037 0.039612 -0.057556 -0.074158 0.116821 -0.035431 -0.027084 -0.019653 0.024796 0.051483 -0.036377 0.030197 0.015320 -0.047394 -0.079163 -0.072998 0.112488 -0.006538 0.038269 0.031555 -0.084351 -0.020676 0.063049 0.054199 0.054077 -0.087952 -0.020065 -0.016617 -0.083801 0.092407 -0.069885 -0.009178 -0.080750 0.012032 0.029785 0.014832 -0.017441 0.030228 0.036194 0.063232 -0.088074 -0.005589 0.055847 -0.049408 0.054474 -0.069763 0.041809 0.150879 -0.020218 -0.037109 -0.076172 -0.051025 0.012947 0.016388 -0.071106 0.109802 -0.121643 0.075317 -0.041870 -0.148315 -0.014671 0.074036 0.124207 0.103149 0.084045 -0.095215 -0.055084 0.019196 0.047821 -0.036011 0.040833 0.103882 -0.032471 -0.097717 0.020737 -0.028336 0.044922 -0.089417 -0.019363 0.011261 0.056000 0.037628 -0.000360 0.052429 0.125732 0.008881 0.008469 -0.083374 -0.002447 0.065125 -0.005718 -0.024139 -0.027908 0.113953 -0.034790 0.071411 -0.088074 -0.095764 0.026947 0.019043 -0.036530 0.084534 -0.050842 0.095459 0.061249 -0.070190 -0.039642 -0.068420 -0.081421 0.086121 -0.024994 0.115662 0.010643 0.001048 -0.042938
-0.091309 -0.041840 -0.017227 0.037476 0.069885 0.044189 0.057861 -0.029266 -0.035309 -0.055267 -0.106934 0.024063 -0.093384 0.016891 0.045410 -0.146362 0.001634 0.006683 -0.012306 -0.022766 -0.077454 0.142578 -0.045990 -0.073303 -0.001961 -0.089905 0.025497 0.131470 0.034973 -0.025711 0.072876 -0.081116 0.028412 -0.016251 -0.164062 -0.047333 -0.079407 -0.027161 -0.004993 0.115906 -0.000871 0.073303 0.066528 -0.007275 -0.096741 -0.039948 0.037781 -0.021149 -0.162842 0.002285 0.025742 -0.072144 -0.179810 -0.034698 0.064026 0.039551 -0.065430 0.031036 0.084961 -0.096802 0.046753 -0.069153 -0.085754 0.019531 0.001538 0.039551 -0.013947 -0.062134 -0.020050 -0.045135 0.008232 -0.022339 0.072754 -0.022461 0.042664 -0.027893 -0.066223 0.106750 0.055603 0.015106 -0.000353 -0.016129 -0.004581 0.042572 -0.094482 -0.113770 0.063538 -0.018570 0.047882 -0.108887 0.034668 0.083069 0.016022 -0.083069 -0.078003 0.029419 0.018051 -0.007244 -0.045563 0.074158 0.056213 -0.064514 0.036407 -0.005085 -0.079163 0.047119 -0.011284 -0.049530 0.023422 -0.042633 -0.030258 -0.032562 0.023331 -0.043365 0.062622 -0.031860 0.053589 0.091492 0.073608 -0.046844 0.089233 -0.118652 0.055664 -0.030838 0.002535 0.000182 0.031006 0.015556 0.028030 -0.007492 -0.024673 0.002804 -0.065674 -0.035919 -0.008743 0.040161 -0.004658 -0.004826 0.024841 -0.029205 -0.084839 -0.019821 -0.018845 -0.077515 -0.025772 0.092590 0.040924 -0.062927 -0.013405 0.046051 0.015869 0.004486 -0.002451 0.030060 -0.008904 -0.057587 0.004189 0.094482 -0.026001 0.055389 0.022614 -0.095093 -0.021057 0.026230 0.010574 0.017090 -0.046967 -0.122070 -0.079651 -0.090088 0.019547 -0.047516 -0.067566 -0.165405 -0.081055 0.008186 0.000103 0.003269 -0.035248 -0.039276 0.045563 -0.115479 -0.036804 0.019348 -0.029617 0.090759 -0.084106 -0.030762 0.057007 0.000660 -0.056763 0.034943 -0.035400 0.054810 -0.015884 0.019852 0.019379 -0.079041 0.067017 -0.085449 -0.099670 -0.030701 0.124390 0.064148 0.111633 -0.025208 -0.040375 -0.062103 -0.080139 0.138184 -0.017395 0.055206 0.063110 -0.013359 -0.071106 0.022064 -0.030945 0.079041 -0.114380 0.032623 -0.056000 0.107788 0.084167 -0.085693 0.073547 0.055695 -0.135986 -0.074097 -0.056183 -0.044922 0.000926 0.001854 -0.036560 -0.027893 0.038849 -0.101257 0.027390 -0.097290 -0.100708 0.075928 0.016922 0.016983 0.103394 -0.017441 0.029602 0.039764 -0.133789 -0.025330 -0.077148 -0.069824 0.042938 -0.094421 0.061188 0.018356 -0.027145 -0.025879
-0.061066 -0.021957 0.035431 0.039612 0.062927 0.059570 0.050812 -0.066895 -0.020813 -0.034119 -0.001148 0.043549 -0.057648 0.027618 0.052643 -0.205322 0.026062 -0.054840 0.010536 -0.028885 -0.074707 0.044586 -0.067505 -0.072266 0.040802 -0.040161 -0.032990 0.038513 0.103943 0.008881 0.097107 -0.040070 0.016800 -0.012970 -0.144653 -0.059906 -0.068909 0.024048 -0.019058 0.117981 0.054718 0.063965 0.069275 -0.036316 -0.106079 0.026123 0.047852 -0.004196 -0.139160 0.018509 0.058411 -0.120972 -0.130737 -0.024231 0.047852 0.012466 0.039642 0.025833 0.072998 -0.072571 0.034790 -0.040039 -0.092712 0.003031 -0.043274 0.066650 0.022888 -0.055481 -0.055908 0.037231 0.093384 -0.040070 0.130981 -0.022552 0.026627 -0.030457 -0.127930 0.039185 0.125854 -0.011856 -0.034729 0.004208 -0.013329 0.027222 -0.098328 -0.038208 -0.004276 0.035645 0.026871 -0.069702 -0.033752 0.125366 -0.009605 -0.075562 -0.074463 -0.013626 0.070557 -0.060669 -0.076355 0.072571 0.039673 -0.134766 0.013535 0.013916 -0.059937 0.033691 -0.016647 -0.115356 -0.044189 -0.049225 -0.082092 0.000600 -0.055176 -0.054932 -0.003834 -0.064392 0.029053 0.121155 0.034332 -0.033508 0.079712 -0.024933 -0.009132 -0.041016 0.092529 -0.048798 0.056488 0.038147 0.050446 -0.014854 -0.034546 -0.025528 -0.074890 0.018234 0.001547 -0.002087 -0.014481 -0.023422 0.013733 -0.016922 -0.078247 -0.005035 0.004311 -0.041626 -0.010475 0.121460 -0.014023 -0.003683 -0.015335 0.021606 -0.012581 -0.027542 0.054810 0.007996 -0.063904 -0.077637 -0.014053 0.113525 -0.040710 0.091614 0.022186 -0.059570 -0.020645 0.021362 0.027283 0.066956 -0.056458 -0.046112 -0.014099 -0.104309 0.065491 -0.075256 0.044952 -0.117065 -0.089661 0.004448 0.041565 -0.029251 0.034943 0.019028 0.037933 -0.091064 0.006676 0.051117 -0.005554 0.119019 -0.100830 0.016006 0.124634 -0.021378 -0.024353 -0.039337 -0.066162 0.037781 0.008987 -0.010506 0.054413 -0.155273 0.069824 0.004520 -0.108948 -0.011665 0.039429 0.075989 0.123352 0.037445 -0.085571 -0.080505 0.030151 0.056213 -0.082275 0.067200 0.123779 0.005703 -0.033813 -0.027008 -0.048981 0.056152 -0.060150 0.013588 -0.044891 0.151123 0.009689 0.036743 0.106384 0.175293 -0.015526 0.007092 -0.106384 -0.048767 0.038971 0.006836 0.002825 -0.048950 0.058472 -0.086487 0.096802 -0.052094 -0.065979 0.015602 0.015030 -0.056427 0.105164 -0.034729 0.068726 -0.017593 -0.072266 0.001398 -0.032166 -0.016296 0.043579 -0.044891 0.073181 -0.002176 0.015717 -0.036774
-0.011597 0.009224 0.061188 0.070740 0.073547 0.052887 -0.026871 0.083252 -0.070923 -0.001356 -0.093811 0.005955 -0.091614 -0.039978 0.073364 -0.068909 -0.029114 -0.033630 0.058228 0.120239 -0.106262 -0.059082 0.057251 0.069885 0.067627 -0.049286 0.014259 -0.031097 0.088196 0.033508 -0.025818 -0.014336 0.009621 0.014389 -0.079468 0.024826 -0.024017 -0.077820 0.016602 0.073914 0.024841 0.001710 0.062378 -0.100647 -0.078003 -0.022888 0.122253 0.000040 0.076477 -0.063660 -0.003466 -0.040161 -0.079285 -0.014557 0.041351 0.068359 0.052734 0.028244 0.029968 -0.084961 -0.066406 0.045776 -0.136475 -0.087402 -0.042419 0.018021 -0.061584 -0.041382 -0.070190 0.104126 0.098328 0.002977 -0.072937 -0.080078 0.143066 -0.029068 -0.132568 0.028336 0.015007 -0.030914 0.022186 -0.002262 0.049469 0.087830 0.045807 -0.076599 0.004013 0.071411 -0.085022 -0.018448 0.013542 0.060883 0.048798 -0.014961 -0.034607 0.030136 0.042328 -0.078186 -0.047882 0.059143 0.006111 -0.029709 -0.021576 0.013359 -0.017532 -0.040680 -0.119812 -0.066467 -0.069275 -0.033325 -0.018875 -0.096008 -0.067505 0.002481 0.014648 -0.038788 0.010139 0.038971 0.049042 -0.079041 0.011505 -0.084534 -0.050446 -0.005039 0.130249 0.012039 0.049469 0.085938 0.175659 0.074280 0.031830 -0.021423 -0.025299 -0.042999 0.006660 -0.051910 -0.071777 -0.079224 -0.076660 -0.045349 0.005753 0.008797 -0.035706 0.030579 -0.033783 0.053070 0.002026 0.114746 0.017044 -0.108704 -0.089905 -0.048492 -0.040924 0.036560 -0.011375 -0.103210 0.014679 0.131836 0.124023 -0.057343 0.045837 -0.080994 -0.054962 0.225952 0.025452 0.000490 0.022919 0.020508 -0.018982 0.003445 0.080078 -0.043701 -0.025253 -0.005783 0.083252 -0.078308 -0.010803 0.050323 -0.010391 -0.081543 0.032043 -0.020203 -0.036926 0.093506 -0.078491 -0.028183 -0.041382 -0.035553 0.061707 -0.043945 -0.007530 -0.010330 -0.018250 -0.056915 -0.019485 -0.027054 0.023788 -0.136719 -0.041107 0.009155 0.041870 -0.008469 0.007008 0.052856 0.003860 0.090637 -0.115417 -0.002768 0.017212 -0.024734 -0.053833 0.091553 -0.062744 0.034027 -0.034973 0.033691 0.096558 -0.058594 -0.018204 0.091980 -0.073120 0.035553 -0.003664 0.016418 0.012451 -0.008110 0.060913 0.102478 0.032410 -0.007519 0.040680 -0.139771 0.026581 0.017151 0.062439 0.025986 -0.003233 0.021759 -0.130249 0.036438 0.039551 0.060944 0.073242 -0.053162 0.029663 0.031250 -0.030518 0.022049 0.114746 -0.025497 -0.012901 -0.002275 0.155518 -0.161133 -0.037170 -0.063354
-0.047546 -0.023758 0.042542 -0.047363 0.066833 -0.041779 0.041504 -0.040222 -0.007126 -0.023148 0.013535 0.075623 0.037292 0.117981 0.036499 -0.130005 0.065063 -0.047546 -0.057251 0.029495 0.096741 0.032898 -0.152954 0.003876 0.018631 -0.086853 -0.006409 0.061615 0.137817 0.045410 0.065552 -0.032776 0.040253 0.101868 0.046295 0.095825 -0.003689 0.045654 -0.001965 0.002628 0.003094 0.096252 0.092407 -0.000301 -0.030411 0.070801 -0.017792 0.035248 -0.086548 0.040710 0.054749 -0.144531 -0.140625 -0.026474 0.059601 -0.027328 0.003029 0.033813 0.067993 -0.014908 0.105164 -0.083557 -0.056946 -0.053192 0.002748 0.062561 -0.024384 -0.066895 0.061249 0.046051 0.103149 0.039368 0.154785 -0.015549 0.016678 0.009064 -0.130737 0.056152 0.083374 0.003569 -0.022964 0.046509 0.032196 0.001301 -0.147095 -0.020615 0.013458 0.006241 0.022507 -0.056213 -0.086853 0.069214 -0.021530 -0.022369 -0.067627 -0.040405 0.122925 -0.043274 -0.015564 -0.025757 0.032806 -0.054962 0.034637 -0.050781 0.043610 0.078064 0.010925 0.005165 0.043823 -0.012611 0.012711 -0.055298 -0.082886 -0.037628 0.066467 -0.057343 -0.035492 0.005573 0.058411 -0.018677 0.061371 0.014023 0.046448 -0.006062 0.133057 0.051208 0.087708 -0.036682 0.049042 -0.146362 0.006248 0.033600 -0.148071 0.060181 0.053619 -0.022552 0.049866 0.005589 0.027740 0.054840 0.017700 0.008614 -0.005390 -0.048889 0.056854 0.022598 -0.042847 -0.038269 0.069641 0.053619 -0.026962 -0.056732 0.002092 0.011528 -0.084106 -0.072876 0.011353 0.123413 -0.013611 0.046997 0.035767 -0.113037 -0.054047 0.012878 0.018555 -0.016571 -0.016068 -0.046722 -0.034576 -0.131836 -0.015221 0.083557 0.055145 -0.114807 -0.067139 -0.029114 0.051392 -0.038544 0.010284 0.048645 0.067322 -0.032104 0.003948 -0.030884 0.130859 0.050812 -0.085999 0.001678 0.091492 -0.013969 -0.018661 0.000199 -0.078308 0.139160 -0.080933 -0.039093 0.011566 -0.147583 -0.093506 0.002775 -0.182007 -0.064697 0.063904 0.039551 0.084534 0.064941 -0.064941 -0.081909 0.015106 -0.031647 -0.029648 -0.004768 0.049103 -0.009132 -0.000238 -0.073364 0.047211 0.071411 -0.005383 -0.143433 0.010498 0.102234 0.060913 0.069458 0.031860 0.054413 0.024933 -0.060486 -0.056671 -0.021652 0.030045 0.107666 0.000616 -0.051849 0.001122 -0.101013 0.022095 0.000906 -0.044556 0.032837 0.017914 0.101440 -0.040161 -0.076477 0.005505 -0.028046 -0.100037 0.004539 -0.033722 0.070374 0.022491 -0.028687 -0.061249 0.013702 0.033997 0.030701
0.014473 -0.034119 0.076538 -0.039612 -0.028641 0.061066 0.025070 -0.008263 -0.005573 0.011421 -0.007374 -0.061554 -0.087097 0.022202 0.023483 -0.081116 -0.011429 -0.012222 0.002342 0.027771 -0.042023 0.060852 -0.086670 -0.025589 0.027206 -0.032440 0.048462 0.064453 0.123291 0.051361 0.125854 -0.123230 -0.093323 0.047607 -0.126587 -0.006531 -0.001294 0.017899 0.049347 0.108154 -0.029846 0.091553 0.049713 -0.031235 -0.083130 0.039703 0.069885 -0.061554 -0.088257 -0.031342 0.063354 -0.049011 -0.139160 -0.125122 -0.040863 -0.012276 0.014091 -0.006950 0.072876 -0.041565 -0.003115 -0.011948 -0.124146 -0.067383 -0.012741 -0.031219 -0.061920 -0.048340 0.064026 0.021210 0.057159 -0.006321 0.014450 -0.095825 0.084717 -0.098328 -0.084595 0.047943 0.068665 0.023560 -0.087341 -0.003687 -0.006123 0.002434 -0.054291 -0.087402 0.082031 0.042755 -0.143188 -0.068115 -0.005428 0.108215 0.049103 -0.070618 -0.098938 0.025558 -0.001887 -0.050659 -0.031464 0.047943 0.013100 -0.127686 -0.095276 0.018875 -0.006142 -0.009178 -0.046021 -0.020844 -0.091003 -0.032654 -0.036682 -0.068481 -0.017105 -0.079895 0.011940 -0.114563 -0.054688 0.088318 0.005554 0.003443 0.003407 -0.046753 0.018051 -0.080139 0.103638 -0.066956 0.122498 0.011688 0.087402 -0.040070 0.027115 0.026596 -0.058319 0.000517 0.048065 0.052429 0.082947 -0.065063 0.021484 0.012314 0.025787 0.012779 0.028336 -0.056519 -0.028610 0.026627 0.014771 0.013885 0.026306 -0.073730 0.003214 -0.005219 0.036652 0.012558 -0.054321 -0.135376 -0.006046 0.097778 0.049194 0.029404 0.053009 -0.162231 -0.052979 0.078552 0.017075 -0.005718 -0.014236 -0.096313 -0.058319 -0.086609 0.076782 0.018204 -0.008408 -0.052917 -0.016693 0.073547 -0.001875 -0.023941 0.035248 0.008995 0.055481 -0.131226 -0.072449 0.057892 -0.099121 -0.011238 -0.066101 -0.033051 0.144775 0.017151 -0.028503 -0.044769 -0.038635 0.047211 0.063477 -0.034912 0.005493 -0.143921 -0.007713 -0.073669 -0.118103 -0.075745 0.046417 0.080505 0.037750 0.116882 -0.116699 -0.062347 -0.059784 0.027313 -0.051025 0.061737 0.056671 0.023499 -0.138428 -0.059875 0.115784 0.025925 -0.123718 0.005402 -0.067627 0.060822 0.036591 -0.028976 0.015266 0.117188 0.032471 0.005711 -0.075623 -0.026398 0.034332 -0.024155 -0.017349 -0.085449 0.020905 -0.020660 -0.029572 -0.003895 -0.078003 0.029953 -0.027817 0.064880 0.003700 -0.083801 0.043823 -0.029938 -0.093872 0.063416 -0.011620 -0.064819 0.060669 0.093323 0.026871 -0.031494 -0.012276 -0.063843
-0.061096 -0.034180 0.016708 -0.004459 0.078674 0.043854 0.034973 -0.013474 -0.020416 -0.079041 -0.052979 0.015152 -0.075928 -0.004086 0.027908 -0.154907 0.022537 -0.027115 0.061340 0.005032 -0.082458 0.102417 -0.106262 -0.059845 0.019073 -0.054169 0.025116 0.042633 0.013664 0.002943 0.083679 -0.076782 0.020721 -0.008904 -0.157715 -0.083618 -0.054688 0.002615 0.030457 0.119812 0.049530 0.081665 0.064941 0.007214 -0.043915 0.024017 0.088196 -0.016129 -0.106934 0.000476 0.054657 -0.065552 -0.165405 -0.052826 0.031311 0.023575 0.041382 0.019058 0.062561 -0.073364 0.031830 -0.015396 -0.106628 0.008072 -0.014641 0.039062 -0.029907 -0.038452 0.003872 0.006195 0.094971 0.007469 0.120117 -0.061401 0.070374 -0.066406 -0.123718 0.063721 0.054291 -0.002232 -0.036285 0.050110 -0.011627 -0.019592 -0.083435 -0.107056 0.039398 0.043976 -0.024170 -0.083496 -0.019394 0.110229 0.052704 -0.044373 -0.066772 0.033447 0.029785 -0.051575 -0.093140 0.103516 0.067261 -0.106812 -0.005936 -0.036285 -0.024399 0.024460 -0.033112 -0.065552 -0.056519 -0.051727 -0.047485 -0.035828 0.000826 0.006443 0.031616 -0.069580 -0.006382 0.119385 0.033997 -0.038025 0.072327 -0.051239 0.028107 -0.038940 0.007168 -0.042236 0.106689 -0.004845 0.066345 -0.024338 -0.018845 -0.015900 -0.054749 0.008995 0.011536 0.016815 0.004055 -0.008705 0.070190 0.020355 -0.052002 0.008987 0.011536 -0.023346 0.009384 0.072876 0.006355 -0.069458 -0.023331 0.021637 0.050232 0.031647 0.025726 0.027863 -0.042084 -0.059723 -0.018326 0.102600 -0.051544 0.081177 0.030106 -0.117065 -0.037018 0.068970 0.037140 0.065125 -0.077576 -0.099731 -0.036926 -0.136108 0.043549 -0.079773 -0.024719 -0.106995 -0.031677 0.022919 0.065308 -0.011642 -0.044739 0.002163 0.029343 -0.116821 -0.016449 0.059479 -0.075195 0.111328 -0.100525 0.004383 0.154663 0.004131 -0.028015 -0.032196 -0.026886 0.048737 -0.012581 -0.037201 0.073486 -0.138306 0.068420 -0.040649 -0.131348 -0.072205 0.120667 0.112854 0.150757 0.066406 -0.085205 -0.036255 0.022202 0.083191 -0.069092 0.037537 0.061035 0.019791 -0.041931 0.009712 -0.025162 0.044495 -0.122681 -0.018677 -0.011780 0.136597 0.057556 -0.032928 0.046082 0.146729 -0.019363 0.002245 -0.083191 -0.004807 0.050751 0.022430 -0.008263 -0.018570 0.085205 -0.088013 0.040436 -0.065125 -0.093872 0.017929 0.023941 0.022186 0.068237 -0.032104 0.045532 0.007732 -0.081238 -0.051208 -0.088257 -0.060059 0.066040 -0.064453 0.093262 0.009872 0.026764 -0.039276
-0.055603 -0.061920 0.038422 -0.025848 0.053955 0.044678 0.032410 -0.068237 0.017670 -0.039398 -0.052277 0.017654 -0.041870 -0.048950 0.006226 -0.141968 0.011536 -0.020844 0.026443 0.006992 -0.059845 0.092346 -0.109375 -0.057953 0.053650 -0.040527 -0.006413 0.048279 0.083618 -0.001571 0.146118 -0.094421 0.018707 0.051605 -0.086853 -0.092407 -0.055298 -0.045898 0.077576 0.058716 0.029633 0.066467 0.063843 0.022690 -0.066711 0.006302 0.046997 -0.004311 -0.115662 -0.061005 0.006062 -0.081604 -0.133179 -0.049591 -0.009773 -0.013741 0.041199 0.008232 0.063110 -0.042633 0.049469 -0.019806 -0.149658 0.028763 -0.048523 -0.000068 -0.020737 -0.101135 -0.016647 -0.007118 0.062378 -0.001393 0.058441 -0.057922 0.080750 -0.014572 -0.076294 0.102356 0.034515 -0.024353 -0.062042 0.004822 0.025345 -0.024750 -0.057739 -0.088013 0.042908 -0.003452 -0.010773 -0.059357 -0.002190 0.195312 0.040192 -0.098206 -0.080322 -0.003990 0.053528 -0.011665 -0.017410 0.094177 0.028534 -0.157349 0.008324 -0.030838 -0.076965 -0.001004 -0.006222 -0.033081 -0.018646 -0.020279 -0.038116 -0.028366 -0.020126 -0.057648 0.027191 -0.070435 -0.004478 0.100525 -0.002728 -0.039032 0.098145 -0.054993 0.054871 -0.082825 0.053864 -0.095947 0.097534 0.013641 0.043243 -0.067810 0.001536 0.002729 -0.019699 0.060028 -0.022415 0.003891 0.025330 -0.024078 0.036713 0.057190 -0.063354 0.054535 0.026367 -0.128174 0.014526 0.079834 -0.006462 -0.133301 -0.047760 0.044189 -0.013390 -0.003633 0.014923 0.068909 -0.010109 -0.038940 0.031113 0.057648 -0.096313 0.079346 0.023987 -0.125000 -0.088684 0.045746 0.032776 0.016296 -0.081421 -0.131104 0.022369 -0.126709 0.001607 -0.028122 -0.036957 -0.127319 -0.025192 0.048279 0.045624 -0.029633 0.014297 0.009827 0.001327 -0.105896 -0.061401 0.037262 -0.055298 0.063599 -0.100952 -0.036652 0.161377 0.008453 -0.062103 -0.022156 -0.031586 0.092346 -0.052582 -0.010941 0.068359 -0.154907 0.080078 -0.063782 -0.126587 -0.076965 0.032318 0.052856 0.087708 0.072998 -0.037811 -0.019516 -0.027542 0.027939 -0.077637 0.080261 0.032562 -0.006676 -0.088928 -0.017548 0.027084 0.059784 -0.097839 -0.035126 -0.058441 0.135986 0.075928 -0.032806 0.076660 0.075195 -0.051819 0.003353 -0.062561 -0.012054 0.051422 0.019608 -0.047882 -0.066223 0.070740 -0.069336 0.075317 -0.101196 -0.091125 -0.022324 -0.021759 0.014168 0.027542 -0.055725 0.008873 -0.012512 -0.092407 -0.046783 -0.030624 -0.084290 0.065918 0.004498 0.040009 0.049805 -0.000741 -0.034882
-0.060638 -0.070374 0.009338 0.015732 0.041565 0.058899 0.074402 -0.082520 0.070129 -0.046600 -0.068970 0.046387 -0.047943 -0.062378 0.004658 -0.173706 0.018311 -0.037323 -0.013893 -0.057983 -0.084229 0.062561 -0.109009 -0.099609 0.020355 -0.056549 -0.021133 0.057037 0.040405 0.013985 0.146362 -0.112732 0.021194 0.043304 -0.137451 -0.106018 -0.025864 -0.005577 0.046692 0.102051 0.048157 0.050018 0.086060 0.010963 -0.104248 0.023514 0.063660 -0.015594 -0.115784 -0.026093 0.039185 -0.105042 -0.106873 -0.002371 0.028488 -0.052368 0.026352 0.018463 0.036804 -0.101868 0.062286 -0.004162 -0.159790 0.035095 -0.095093 -0.013168 0.006760 -0.026688 -0.073364 -0.011673 0.044769 -0.021240 0.050720 -0.009956 0.035980 -0.026733 -0.094788 0.063049 0.076843 -0.016647 -0.053009 -0.017960 -0.016739 0.009552 -0.086975 -0.105652 0.009041 0.029953 0.025589 -0.046722 0.017044 0.108521 0.020798 -0.135864 -0.061707 0.016876 0.057404 -0.000764 -0.060303 0.104919 0.041534 -0.115417 0.063782 0.020691 -0.037567 0.025757 -0.011017 -0.075500 -0.008369 -0.030365 -0.066101 0.009224 0.000971 -0.067200 0.028931 -0.042053 0.034882 0.153442 0.008957 -0.010452 0.079773 -0.068176 0.009827 -0.056458 0.041168 -0.088440 0.056549 0.030792 0.023453 -0.038116 -0.049072 0.012306 -0.039520 0.001280 -0.043762 0.006691 0.038025 0.031555 0.029022 0.054901 -0.067688 0.036163 0.030090 -0.085022 0.005413 0.055389 0.002741 -0.067505 -0.063721 -0.010300 -0.031616 -0.008217 0.038391 0.036835 0.016052 -0.031982 0.032227 0.050110 -0.104614 0.097595 -0.009132 -0.100647 -0.064941 0.028381 0.028778 0.019699 -0.059875 -0.132080 0.026428 -0.114929 0.012909 -0.065308 0.002298 -0.118591 -0.045013 0.061707 0.011208 0.007904 -0.000392 0.024292 0.024170 -0.085022 -0.074219 0.060089 -0.051636 0.068481 -0.106750 -0.051636 0.149170 0.027512 -0.056519 -0.006786 -0.003473 0.075562 -0.011917 0.004318 -0.002480 -0.124817 0.132812 -0.087830 -0.069519 -0.049377 0.013985 0.055908 0.119812 0.024948 -0.002237 -0.070862 -0.019821 0.074219 -0.092224 0.062042 0.087341 0.043396 -0.049591 -0.018341 0.003220 0.064697 -0.106079 0.019821 -0.060059 0.128052 0.013252 -0.052917 0.097046 0.100342 -0.050690 0.025925 -0.099487 -0.027206 0.027390 0.031982 -0.034576 -0.093201 0.050415 -0.065369 0.071228 -0.104370 -0.064148 -0.010559 0.001022 -0.033173 0.056854 -0.078613 0.011581 -0.021362 -0.086487 -0.011368 0.001410 -0.093018 0.042023 -0.049072 0.053802 0.035553 -0.020889 -0.060089
0.023193 0.001149 0.062744 0.003769 0.007133 0.086792 0.035675 0.007191 -0.062805 -0.018066 0.013443 0.092102 0.027893 0.075867 0.041992 -0.098022 0.043182 -0.023315 0.018387 0.077332 -0.068359 -0.022888 -0.045898 0.033783 0.117493 -0.015732 -0.013466 0.049042 0.117188 0.052155 0.031174 -0.058228 -0.023392 0.082825 -0.031097 0.065308 0.006081 -0.002943 0.050476 0.115784 -0.038452 -0.019394 -0.014137 -0.068115 -0.109558 0.029800 0.122192 -0.014748 -0.017899 0.034119 0.056885 -0.188599 -0.111023 -0.129761 0.006203 -0.004696 0.020798 0.011093 0.089844 -0.024490 0.016266 0.022446 -0.070129 -0.019897 -0.047516 -0.013306 -0.024277 -0.096436 0.030365 0.071777 0.135254 -0.033997 0.052582 -0.006252 0.070557 -0.011330 -0.152954 0.038940 0.096375 0.003012 0.033630 0.007126 0.079102 0.022110 -0.059174 0.022232 0.023743 0.047363 -0.059601 -0.083801 -0.051361 0.062378 -0.007526 -0.119080 -0.030197 -0.034607 0.107300 -0.078186 -0.035645 0.050110 0.032471 -0.045105 -0.023514 0.001751 0.003010 0.039948 -0.120972 0.004021 -0.085571 -0.038391 -0.049713 -0.049652 -0.117065 -0.047455 -0.012482 -0.065002 -0.077026 0.059448 0.040222 -0.044250 -0.033234 -0.067139 -0.010063 -0.019150 0.166260 0.049805 0.120300 -0.016617 0.070190 -0.018021 0.037933 -0.045044 -0.138184 0.043823 0.041290 -0.028854 -0.020981 -0.098267 -0.044952 -0.020554 0.029175 0.016891 0.026077 -0.061768 -0.033112 -0.009926 0.029526 0.022690 0.039032 -0.049316 -0.053040 0.019531 -0.011505 -0.028000 -0.035004 -0.158936 -0.028763 0.148315 0.082947 0.013809 0.079773 -0.126343 -0.108093 0.063660 0.050934 0.078003 -0.018356 0.002357 -0.036224 -0.085083 0.035065 0.004337 0.080200 -0.057281 -0.061523 -0.026016 0.031204 0.017181 0.063599 -0.004654 0.074341 -0.000058 0.058197 0.040527 -0.043732 -0.013779 -0.078674 0.001524 0.098877 -0.000624 0.016434 -0.038330 -0.078918 0.055664 0.017487 -0.021576 -0.031494 -0.174194 -0.031586 0.061829 -0.121277 -0.007286 0.013138 0.072876 0.016220 0.107849 -0.132690 -0.058075 0.043945 -0.003456 -0.078918 0.027039 0.079285 0.018265 -0.050232 -0.067200 0.079468 0.074951 -0.004425 -0.002911 -0.091431 0.101624 -0.008171 0.066284 0.049347 0.151611 0.017059 0.068298 -0.083740 -0.076660 0.024567 -0.059509 -0.021866 -0.022949 0.018204 -0.048981 -0.011070 0.066711 -0.094543 0.069580 0.025803 0.054993 -0.010719 -0.074646 0.047302 -0.001543 -0.061493 0.043182 0.057068 -0.007050 0.024445 0.080017 0.041992 -0.056915 -0.034302 -0.030548
-0.032227 -0.010994 0.012581 0.011612 -0.009598 0.050751 0.035614 -0.057861 0.034912 -0.053345 -0.051361 0.006264 -0.113647 0.020279 0.014130 -0.161377 0.024353 -0.004150 -0.024460 -0.087830 -0.060638 0.078674 -0.105225 -0.079956 -0.003056 -0.030502 0.036102 0.129028 0.093628 0.007591 0.121338 -0.059753 -0.035065 -0.029800 -0.127563 -0.043732 -0.006145 0.038177 0.010666 0.149780 0.017517 0.110535 0.057068 0.022430 -0.078125 0.038849 -0.008675 -0.063904 -0.134033 0.004578 0.078003 -0.080078 -0.161133 -0.085022 0.044830 -0.017853 0.007332 0.000362 0.126587 -0.086182 0.020416 0.006371 -0.076294 0.006870 -0.008270 0.038483 -0.045074 0.005508 0.006691 0.008003 0.051178 -0.032990 0.095520 -0.000670 0.020523 -0.068420 -0.126587 0.049713 0.079590 0.038757 -0.067444 -0.007717 -0.049042 0.064026 -0.151245 -0.145264 0.058167 0.038910 -0.028976 -0.058594 -0.031006 0.066162 0.045654 -0.051422 -0.070618 0.070435 0.016281 -0.066406 -0.070984 0.050598 0.000807 -0.112610 -0.023788 0.039490 -0.006840 0.008278 0.009384 -0.050781 -0.055939 -0.051544 -0.027802 0.013062 0.041687 -0.054810 0.014130 -0.079834 0.012413 0.139771 0.034729 0.004448 0.056213 -0.067810 -0.012077 -0.023544 0.011772 -0.117554 0.035522 -0.061493 0.081299 -0.038971 -0.021088 0.018051 -0.050354 0.001351 0.041473 0.011345 0.050873 0.001576 0.071411 0.015358 -0.059174 -0.005672 0.025665 -0.024551 0.022980 0.025894 0.012794 -0.016144 -0.001170 -0.012070 0.011818 0.014244 0.052368 0.012451 -0.047699 -0.109558 0.025299 0.097290 -0.074585 0.116821 0.006001 -0.113281 -0.065613 -0.017914 -0.015991 0.025360 -0.074402 -0.111694 -0.084229 -0.099609 0.046814 -0.063171 -0.020050 -0.104492 -0.084900 0.069885 0.051514 -0.054138 0.002159 0.018646 0.071777 -0.124573 -0.038147 0.038818 -0.063660 0.093323 -0.086487 -0.004780 0.134277 0.053711 -0.011627 -0.005779 -0.039551 0.012016 0.016525 0.008698 -0.033173 -0.041504 0.056885 -0.026550 -0.110901 -0.035095 0.102051 0.071777 0.135132 0.068054 -0.080383 -0.069397 -0.057648 0.021729 -0.058441 0.065247 0.083069 -0.020020 -0.092041 -0.079529 0.021622 0.067627 -0.112366 -0.030472 -0.025085 0.090698 0.052002 -0.016571 0.022232 0.147827 -0.060120 -0.026093 -0.093140 -0.018387 0.032562 0.060883 0.003983 -0.096313 -0.047974 -0.080200 0.071350 -0.059509 -0.084045 0.049683 0.015381 0.036072 0.035614 -0.019470 0.051239 -0.050354 -0.084839 0.016510 -0.062561 0.022461 0.040619 -0.031982 0.011147 -0.004005 -0.018356 -0.036560
-0.075134 -0.008278 0.033417 0.027756 0.126221 0.011703 0.049927 -0.051819 -0.031891 -0.074463 -0.035400 0.113342 -0.008476 0.070801 0.052887 -0.204468 0.033569 -0.004620 0.081909 0.032959 -0.017288 0.056580 -0.080688 -0.038116 0.053314 -0.052673 -0.003845 0.121643 0.066467 -0.006992 0.008842 -0.034210 0.065796 -0.027252 -0.073792 -0.019501 -0.077209 0.014946 -0.014816 0.076416 0.056732 0.030182 -0.002415 -0.009209 -0.054169 0.030365 0.054932 0.005394 -0.126465 0.043213 0.056030 -0.157593 -0.148438 -0.024673 0.066833 0.003017 0.021362 0.039185 0.110046 -0.060211 0.056519 -0.022202 -0.060303 0.016266 -0.032410 0.067444 -0.019150 -0.028824 -0.003399 0.009171 0.124207 -0.006424 0.171265 0.048676 -0.000312 0.010818 -0.154175 0.014587 0.066650 0.011513 0.008347 0.032623 0.018051 -0.018341 -0.133545 -0.029755 0.032043 0.022720 0.040802 -0.107300 -0.045685 0.043182 -0.005123 -0.060608 -0.047516 -0.052826 0.104126 -0.031769 -0.084351 0.083069 0.056854 -0.065735 0.014809 -0.023209 0.023392 0.037354 -0.059723 -0.048492 -0.007477 -0.038330 -0.038177 0.003105 -0.032318 0.000036 0.016891 -0.029861 -0.017273 0.080322 0.082703 -0.063904 0.088806 -0.042664 0.020538 0.005650 0.033539 0.037903 0.073853 -0.023315 0.031143 -0.037018 -0.011139 -0.015427 -0.142822 0.030441 0.019379 -0.013016 -0.043701 -0.012146 0.026566 -0.008453 -0.051514 -0.019623 0.047729 -0.035370 0.004627 0.014771 0.008995 -0.040863 0.016357 0.070374 0.003471 -0.000860 -0.012177 -0.006802 -0.054901 -0.063110 -0.049164 0.151001 -0.012665 0.113586 0.032593 -0.098816 -0.053955 0.008766 0.022156 0.094910 -0.071045 -0.021194 -0.026138 -0.129761 0.002737 -0.048431 0.025223 -0.118591 -0.100891 -0.027222 0.065491 -0.041718 -0.019745 0.009544 0.070923 -0.045929 0.060394 0.020767 0.018127 0.149170 -0.059753 0.023682 0.073181 0.002338 0.005871 -0.023178 -0.073120 0.086853 -0.025513 -0.005859 0.060059 -0.098022 0.071228 0.006298 -0.145508 -0.045685 0.102905 0.095825 0.142944 0.041290 -0.049896 -0.063354 0.043335 0.100281 -0.073975 0.015869 0.137451 -0.003206 0.008713 -0.021194 -0.050201 0.078552 -0.054504 -0.023499 -0.036987 0.142456 0.048431 0.024353 0.084473 0.133057 -0.055878 -0.009468 -0.105286 -0.060547 0.036743 0.030609 -0.015823 -0.022720 0.047241 -0.148438 0.088928 0.022034 -0.042389 0.071045 0.052246 -0.020050 0.031586 -0.053009 0.050323 0.014351 -0.090088 -0.053711 -0.032898 0.034149 0.044159 -0.066833 0.048157 0.018021 -0.000889 0.033264
-0.066040 -0.024734 0.018906 -0.061371 0.065063 0.067810 -0.030350 -0.032257 -0.038818 -0.007263 -0.017715 -0.006317 -0.166016 -0.008316 0.040253 -0.107666 -0.032166 0.048187 -0.007004 0.083679 -0.065430 0.032593 -0.008751 -0.006649 0.075317 -0.009590 0.076965 0.018311 0.076355 -0.016785 0.080139 -0.005001 -0.005802 0.062805 -0.157959 -0.063538 -0.160156 0.021500 0.049408 0.097290 0.016861 0.029221 0.024933 -0.081299 -0.078430 -0.015854 0.077942 -0.012482 -0.106079 -0.026138 -0.005653 -0.053589 -0.075562 -0.079468 -0.032898 0.063660 0.078125 -0.074402 0.044434 0.008598 0.020859 -0.059601 -0.081726 -0.012428 -0.023209 0.021729 0.036957 -0.056519 -0.032867 0.042480 0.089600 -0.055389 0.075317 -0.045166 0.095703 -0.065552 -0.040070 0.032440 0.097168 0.048828 -0.039215 -0.033447 -0.001348 0.056244 -0.008209 -0.025513 0.046936 0.009064 -0.028763 -0.100769 -0.041077 0.074036 0.035278 -0.087830 -0.113281 -0.036133 0.040985 -0.041565 -0.114319 0.091309 0.039001 -0.108215 -0.056854 0.029633 -0.130859 -0.076843 -0.071594 -0.077942 -0.072571 -0.048676 -0.056335 -0.008301 -0.056488 -0.079285 0.015594 -0.052155 -0.006031 0.070984 0.038239 -0.033813 0.084656 -0.054047 0.002674 -0.039185 0.074585 -0.013084 0.015396 0.039459 0.066467 0.047607 0.011658 0.022873 -0.112183 0.055450 0.063782 -0.003454 -0.111023 -0.119324 -0.007423 -0.028503 -0.062561 -0.018509 0.030075 -0.039154 -0.133423 0.063538 0.027222 -0.026001 -0.020828 0.025543 0.035736 -0.039825 -0.000655 0.031174 -0.051208 -0.095093 -0.029678 0.163818 0.072632 0.026154 0.062469 -0.100891 -0.028915 0.050140 0.032196 0.047028 -0.027985 -0.012878 -0.009163 -0.066406 0.095642 -0.008583 -0.013420 -0.060028 0.011673 0.029587 -0.022873 0.043457 0.081116 0.021332 0.072449 -0.050964 -0.029907 0.055817 -0.069214 0.041779 -0.002172 0.033783 0.106201 -0.061493 -0.056610 -0.024475 -0.076172 0.007664 0.039093 -0.055481 0.045258 -0.146606 0.086609 -0.069702 -0.134277 -0.005939 0.004292 0.097839 0.094666 0.076233 -0.111938 -0.073669 0.066345 0.111328 -0.039764 0.107361 0.098267 -0.031616 -0.098999 -0.019775 0.029465 0.026428 -0.075378 0.024750 -0.033752 0.020935 0.001862 -0.056488 0.034485 0.111267 -0.035706 0.023071 -0.105530 0.017334 0.028732 -0.056519 -0.027008 -0.035919 0.072083 -0.035126 0.031372 -0.081787 -0.081604 0.035583 -0.005039 -0.033264 0.116882 -0.052002 0.067322 0.072876 -0.099487 -0.052551 -0.045837 -0.038757 0.109070 -0.025238 0.085815 -0.060486 -0.017059 -0.037506
-0.031982 -0.021790 0.031555 0.021912 0.060516 0.075806 0.046448 -0.064026 -0.039215 -0.049469 -0.021423 0.049469 -0.033966 0.037079 0.047699 -0.167358 0.011520 -0.014488 0.036743 0.019913 -0.056396 0.066040 -0.031769 -0.033295 0.048401 -0.013565 0.017029 0.106018 0.080444 -0.009750 0.079224 -0.065979 -0.012459 -0.016876 -0.127808 -0.075562 -0.094055 0.012337 -0.004158 0.100586 0.029266 0.046722 0.011780 -0.003387 -0.098206 0.034363 0.048431 -0.048767 -0.140503 0.036713 0.033447 -0.119507 -0.143066 -0.073242 0.019608 0.026260 0.018021 0.008751 0.084900 -0.026169 0.030304 -0.026779 -0.052338 0.041412 -0.017075 0.024506 -0.005310 -0.096802 0.006416 -0.027725 0.030884 -0.050323 0.172607 -0.030350 0.022537 -0.044830 -0.088013 0.071655 0.078186 0.020309 -0.008057 -0.014351 -0.001354 -0.014725 -0.133423 -0.037598 0.033051 -0.005108 0.023010 -0.116638 0.000167 0.079773 -0.002316 -0.123840 -0.068726 -0.042999 0.033783 -0.031494 -0.068604 0.059845 0.032318 -0.095459 -0.063049 -0.008667 -0.017761 0.044617 -0.054596 -0.033600 -0.037292 -0.039703 -0.061676 -0.002571 -0.003704 -0.048035 0.012253 -0.072876 -0.020325 0.099304 0.061096 -0.021072 0.078918 -0.048798 0.014511 -0.022507 0.055786 0.021500 0.116699 -0.025696 0.033691 -0.000589 0.004452 -0.000154 -0.112061 0.030563 -0.000870 0.005127 -0.029694 -0.097046 0.024933 -0.066895 -0.059387 -0.000053 0.017685 -0.082458 -0.050690 0.040497 0.030060 -0.065674 0.024109 0.060089 0.014839 0.002800 0.032532 -0.018768 -0.044434 -0.110352 -0.056061 0.112000 -0.025238 0.095154 0.042145 -0.106506 -0.048981 -0.029465 0.034454 0.062134 -0.090881 -0.037048 -0.065918 -0.096802 0.039948 -0.056274 0.046539 -0.097473 -0.092102 0.058136 0.037354 -0.047485 0.060455 0.013588 0.075562 -0.101257 0.056091 0.018341 -0.002752 0.091370 -0.063538 0.001582 0.097778 0.019562 0.025192 -0.056732 -0.088623 0.048248 0.028030 -0.020157 0.042755 -0.097717 0.059662 -0.008942 -0.182739 -0.021896 0.073730 0.125244 0.083618 0.046875 -0.056824 -0.097351 -0.030396 0.102783 -0.045959 0.019608 0.141113 -0.032471 -0.079346 -0.050262 -0.038116 0.111938 -0.088501 -0.009193 -0.048767 0.113464 0.047760 0.011429 0.060120 0.150879 -0.060730 -0.020203 -0.126953 -0.074097 0.009468 0.018555 -0.027481 -0.040344 0.032959 -0.105713 0.086487 0.000989 -0.094971 0.093506 0.040375 -0.032562 0.034760 -0.040314 0.093750 0.028824 -0.118042 -0.036316 -0.044067 -0.020691 0.048096 0.022095 0.074097 0.031006 -0.009438 -0.003340
-0.010719 -0.047516 0.054260 -0.028244 0.075684 -0.020187 -0.030701 -0.037933 0.010094 -0.063660 -0.090820 -0.022995 -0.117493 -0.111267 -0.000849 -0.157471 -0.006535 -0.065674 0.036835 0.008980 -0.076416 0.007378 0.016113 0.004253 0.023972 -0.017670 0.074219 0.046722 0.011253 -0.012955 0.108643 -0.105774 -0.006603 0.033295 -0.138306 -0.087891 -0.069824 -0.020798 0.038300 0.071838 0.069458 0.076355 0.117737 -0.009850 -0.032928 0.075317 0.059296 -0.024017 -0.052521 -0.062469 -0.024734 0.052704 -0.158447 -0.004654 0.006565 -0.044983 0.078979 -0.015495 0.048676 -0.052246 0.024277 0.001264 -0.123230 0.003538 -0.064636 -0.023834 0.008736 -0.029434 -0.073120 -0.025101 0.073303 -0.020126 0.080688 -0.092651 0.089844 -0.069824 -0.072205 0.072266 0.013466 -0.014198 -0.039062 -0.043030 -0.006359 -0.016235 -0.037720 -0.090454 0.033691 0.007835 -0.021576 -0.007618 0.058136 0.101746 0.090149 -0.106812 -0.083618 -0.008278 -0.005859 -0.051666 -0.020248 0.143555 0.022537 -0.144775 -0.027939 -0.077271 -0.052826 0.000447 -0.023163 -0.118530 -0.063110 -0.044800 -0.027557 -0.030960 0.006832 0.020248 0.029144 -0.055267 0.021576 0.080505 -0.011185 -0.060150 0.177612 -0.031891 0.019363 -0.032471 0.056915 -0.018036 0.113770 0.036133 0.029388 -0.025772 -0.041138 0.003038 -0.025589 0.041260 -0.003250 0.014160 -0.013855 -0.087463 0.040161 -0.004322 -0.096680 0.065979 0.056793 -0.076355 -0.061096 0.106140 -0.045624 -0.087891 -0.029770 -0.028839 0.004711 -0.031708 0.011780 0.036682 -0.007244 -0.016739 -0.018936 0.106201 -0.062469 0.020096 -0.007771 -0.088623 -0.089783 0.081787 0.038940 -0.027237 -0.050171 -0.076721 -0.007412 -0.039124 0.047363 -0.069641 -0.058502 -0.093079 0.081055 0.034546 0.031311 0.049286 0.010574 0.026428 0.064087 -0.098755 -0.059418 0.021332 -0.051514 -0.029816 -0.098572 -0.021713 0.163940 0.016495 -0.026810 -0.044830 -0.010437 0.013260 -0.007965 -0.056641 0.071228 -0.107910 0.099182 -0.113770 -0.119995 -0.004932 0.077087 0.129150 0.110596 0.095825 -0.053162 -0.053253 -0.061310 0.020645 -0.024933 0.036133 0.062500 -0.018158 -0.099243 0.053955 -0.031708 0.063599 -0.094971 -0.064758 0.010223 0.062134 0.055420 -0.051086 0.042969 0.044373 -0.017044 0.024536 -0.036438 0.011887 0.089172 0.047363 -0.037537 -0.032532 0.110474 -0.010170 0.052917 -0.098694 -0.087402 0.001915 0.023849 0.006237 0.043945 -0.088135 0.029907 0.075989 -0.085022 -0.045990 -0.029343 -0.091431 0.067078 -0.025650 0.126587 0.032471 -0.028030 -0.056061
-0.026825 -0.001142 0.095154 0.014915 0.076599 -0.012466 0.003685 0.010399 -0.107178 -0.000659 -0.077393 -0.002531 -0.100342 -0.023651 0.034363 -0.146362 -0.026962 -0.043976 0.073914 0.039612 -0.093262 0.040222 0.046600 0.035706 0.071716 -0.087769 0.016632 0.047699 0.067261 -0.026886 0.003588 -0.095642 -0.040344 -0.014626 -0.146484 -0.021500 -0.088440 -0.058685 -0.003698 0.095886 0.014420 0.003836 0.072571 -0.117065 -0.069153 0.027924 0.092773 -0.036438 -0.040619 -0.091248 0.021271 0.026306 -0.177368 -0.085266 0.033417 0.011795 0.036163 -0.006542 0.038300 -0.061523 -0.008820 0.023422 -0.082153 -0.030930 -0.044495 0.000344 -0.046631 -0.069153 -0.091858 0.043823 0.083069 -0.018173 0.020981 -0.083435 0.104614 -0.073608 -0.078796 0.035889 0.015839 -0.006546 -0.024384 -0.038147 0.055878 0.058502 0.014389 -0.058960 0.075867 0.035095 -0.074280 -0.071899 0.016006 0.075439 0.066528 -0.087097 -0.094788 -0.003847 -0.006168 -0.060486 -0.011993 0.150391 0.000656 -0.122070 -0.022919 -0.033752 -0.061127 -0.040100 -0.060242 -0.107910 -0.079529 -0.029907 -0.019394 -0.080322 -0.037598 0.010284 0.034882 -0.052185 0.035095 0.050262 0.033234 -0.094299 0.112000 -0.042816 -0.027237 -0.013023 0.090515 0.038025 0.094788 0.069641 0.085388 0.051483 -0.022247 -0.060974 -0.042023 0.017105 -0.007587 0.028717 -0.054810 -0.149292 -0.024857 -0.060913 -0.052460 0.028793 0.013969 -0.057251 -0.076355 0.114624 -0.010818 -0.000941 -0.009178 -0.066589 -0.014999 -0.044037 -0.009758 0.054108 -0.016388 -0.068604 -0.004456 0.141846 0.069702 -0.000619 0.060913 -0.072876 -0.080688 0.148804 0.013145 -0.039032 -0.028122 -0.011429 -0.035034 -0.011734 0.080017 -0.046448 -0.084106 -0.065979 0.071777 -0.037140 0.015007 0.017715 0.005112 -0.021027 0.070312 -0.083801 -0.008057 0.002850 -0.085449 0.012077 -0.050781 -0.019516 0.098083 -0.010155 -0.026947 -0.046509 -0.044708 0.006699 0.008621 -0.052338 0.067688 -0.125977 0.031006 -0.069336 -0.078247 0.009003 0.070312 0.147339 0.051117 0.117004 -0.103516 -0.035919 -0.085266 0.018402 0.000220 0.108948 0.068298 -0.053955 -0.105408 0.074768 -0.002300 0.033569 -0.048279 0.010574 -0.048676 0.049133 0.045502 -0.030334 0.085266 0.020142 -0.026855 0.014938 -0.016037 -0.034332 0.106628 -0.077209 -0.019073 0.008835 0.096008 -0.026810 0.028778 -0.045227 -0.097229 0.065796 0.022873 -0.010498 0.067627 -0.059692 0.061981 0.084229 -0.062500 -0.007957 -0.001264 -0.080383 0.068237 0.016998 0.151978 -0.034576 -0.055176 -0.057098
-0.004070 -0.031494 0.024445 0.001722 0.036530 0.064453 0.096924 -0.097107 -0.022339 -0.053741 0.003220 0.037750 0.040558 -0.000585 0.019043 -0.163696 0.021500 -0.009216 0.011467 0.008682 -0.037659 0.088989 -0.055023 -0.046875 0.037292 -0.023849 -0.016541 0.125732 0.062500 0.011032 0.096436 -0.056091 -0.019897 0.012421 -0.068481 -0.054230 -0.048828 0.024414 -0.000864 0.084656 0.031952 0.040253 0.003229 0.034271 -0.093201 0.056824 0.049377 -0.051697 -0.125732 0.028778 0.028763 -0.143311 -0.136597 -0.082703 0.017212 -0.008499 0.006886 0.016556 0.063904 -0.050110 0.055542 0.007164 -0.054413 0.066284 -0.024826 -0.009468 -0.014763 -0.109070 0.029022 -0.060486 0.004425 -0.029022 0.169067 -0.033325 -0.016449 -0.034546 -0.082214 0.053223 0.061462 0.023346 -0.029327 -0.012932 0.018555 -0.052856 -0.143433 -0.034302 0.040497 -0.022659 0.007858 -0.097351 0.041412 0.070190 -0.012215 -0.117065 -0.087585 -0.030899 0.051941 -0.001621 -0.043457 0.042480 0.040070 -0.093994 -0.035736 -0.025787 0.010101 0.088867 -0.042297 0.008209 -0.031372 -0.002741 -0.066833 -0.012344 -0.017181 -0.053131 0.008247 -0.063110 -0.040649 0.106873 0.018707 -0.005123 0.069214 -0.049133 0.017792 -0.052887 0.060089 0.024902 0.144043 -0.046631 -0.025574 -0.047424 0.006733 0.010895 -0.094116 0.068848 0.001453 0.026962 0.036743 -0.049835 0.036133 -0.038269 -0.031830 0.031082 0.040070 -0.134399 -0.042725 -0.003952 0.044739 -0.087219 0.018066 0.054413 0.015381 0.012909 0.041962 -0.013947 -0.030106 -0.097412 -0.052917 0.067322 -0.056580 0.113220 0.019257 -0.089478 -0.070557 -0.023529 0.021576 0.064392 -0.106628 -0.059906 -0.055542 -0.110901 0.004768 -0.025757 0.038422 -0.100830 -0.109558 0.089905 0.051117 -0.062744 0.046021 0.032166 0.070129 -0.067566 0.032349 0.018539 -0.001149 0.072021 -0.076660 -0.013885 0.091492 0.047699 0.029663 -0.049500 -0.068970 0.077026 -0.012909 -0.001268 0.021774 -0.098267 0.051270 -0.000048 -0.182007 -0.008110 0.089172 0.106750 0.053101 0.044159 -0.004147 -0.101990 -0.050293 0.064209 -0.064819 -0.023270 0.145874 0.004982 -0.055511 -0.061829 -0.024124 0.135254 -0.078552 -0.048401 -0.056671 0.119629 0.094360 0.046509 0.083130 0.136597 -0.086853 -0.028305 -0.119568 -0.097595 0.003109 0.062988 -0.059814 -0.049652 0.011078 -0.087952 0.101624 0.044983 -0.084290 0.061066 0.014557 -0.024445 -0.026123 -0.071045 0.096741 0.012817 -0.087646 -0.031586 -0.035828 -0.036011 0.046814 0.038147 0.035736 0.077148 0.010597 0.013542
-0.089478 -0.001444 0.014336 -0.060852 0.055878 0.036224 -0.029312 -0.086670 -0.066650 -0.050171 0.043976 0.012482 -0.034546 0.020737 0.031891 -0.158936 -0.008736 0.054901 0.033325 0.057861 -0.022369 0.103210 -0.058014 -0.055267 0.081543 -0.035492 -0.037445 0.112671 0.131836 0.001912 0.071106 -0.061615 0.026718 0.017014 -0.010139 -0.044556 -0.117493 -0.002420 0.043213 0.031250 0.003841 0.045776 -0.029953 -0.049530 -0.053009 -0.021027 -0.000838 0.001067 -0.141968 -0.031616 0.030014 -0.099487 -0.140747 -0.104553 0.006149 0.037354 0.021408 -0.022644 0.109924 0.001818 0.050934 -0.064819 -0.042389 -0.003883 0.023865 0.038361 0.001685 -0.041809 0.062622 -0.040436 0.134888 -0.009613 0.107849 -0.007965 0.013290 0.005394 -0.047424 0.039551 -0.022278 0.031708 -0.034515 -0.030197 0.014763 -0.070557 -0.054169 0.012512 0.076538 -0.079773 -0.027557 -0.059998 -0.006908 0.146240 0.032410 0.004662 -0.116333 -0.071167 0.074768 0.000502 0.011696 0.094727 0.023148 -0.162109 -0.016769 -0.055847 -0.107300 -0.023804 0.020004 0.023529 -0.051239 0.000063 -0.046082 0.002375 -0.063110 -0.027664 -0.005657 -0.068970 -0.072266 0.019440 0.035187 -0.076294 0.115723 -0.048798 0.126953 -0.054230 0.075500 -0.038422 0.051056 0.063660 -0.039032 -0.060699 0.050049 0.010971 -0.103271 0.071655 0.051727 0.057098 -0.040863 -0.072632 -0.018005 0.009201 -0.032532 0.026688 0.110413 -0.147461 -0.026855 0.078735 -0.033905 -0.103699 -0.003283 0.101135 0.047089 -0.076965 -0.004360 0.054291 -0.113770 -0.023148 -0.063721 0.117004 0.004364 0.048584 0.078613 -0.103027 -0.013367 0.008011 0.016708 0.058685 -0.048523 -0.056580 0.037842 -0.072998 0.019241 0.012833 -0.022568 -0.140137 -0.083923 0.003632 0.024277 -0.002558 -0.000967 0.001655 0.017136 -0.072144 -0.006947 0.005230 -0.021301 0.085632 0.009605 0.036255 0.058319 0.002375 -0.066162 0.022552 -0.060486 0.076538 0.013504 -0.004963 0.113831 -0.130859 0.094116 -0.092163 -0.165161 -0.070312 0.064392 0.050140 0.064026 0.060059 -0.081848 -0.036682 0.020309 0.078430 -0.050751 0.074524 0.074219 -0.015656 -0.057617 0.001320 -0.003748 0.034241 -0.056183 -0.067200 -0.056732 0.092590 0.085693 0.020050 0.108398 0.110352 -0.080750 -0.020859 -0.069092 -0.029388 0.044891 -0.014008 -0.088745 -0.055084 0.033081 -0.081726 0.059967 -0.034912 -0.068237 0.026260 -0.023468 -0.059692 0.076172 -0.075989 -0.020721 -0.010353 -0.044464 -0.068726 -0.066345 -0.008331 0.061829 0.027527 0.031464 0.080872 0.038513 0.028366
-0.062408 -0.005272 0.035858 0.024475 0.013756 0.063599 0.076172 -0.012306 -0.046051 -0.010338 0.046051 0.047089 -0.020370 0.125977 0.032806 -0.044434 0.043762 0.031525 -0.032593 -0.036285 -0.016846 0.110229 -0.091736 -0.060394 -0.014778 -0.024841 0.057587 0.054138 0.046539 -0.015022 0.097229 -0.061920 -0.042023 0.043427 -0.091248 -0.060913 -0.045197 0.009727 -0.016266 0.100098 -0.019348 0.131348 0.002016 -0.001991 -0.119385 0.069336 0.021545 -0.038818 -0.149536 0.046021 0.066711 -0.136597 -0.059021 -0.120605 -0.007526 0.016983 -0.029251 0.012665 0.054901 -0.055206 0.084778 -0.060425 -0.007553 -0.017395 0.066528 0.074036 0.067505 -0.029099 0.032806 0.006680 -0.004990 -0.008743 0.113831 0.021347 -0.024155 -0.042786 -0.072388 0.059479 0.149658 0.075378 -0.047089 0.028458 -0.089294 0.038361 -0.113831 -0.077026 0.103210 -0.009605 0.037354 -0.161621 -0.035461 0.005459 -0.025620 -0.107483 -0.056305 -0.006897 0.070251 -0.029190 -0.008888 -0.013275 -0.000651 -0.013863 -0.058502 0.045013 -0.030060 0.001821 -0.009804 -0.007607 0.039581 -0.040863 -0.076416 0.003191 0.018143 -0.084351 0.050446 -0.079956 0.004322 0.112183 0.060577 0.040894 0.027771 -0.041229 0.088013 0.039764 0.024078 -0.018387 0.011353 -0.009911 0.040375 -0.019012 -0.021194 0.000870 -0.094238 0.032318 0.036957 0.085999 0.003948 0.016327 0.025085 -0.032959 -0.012283 -0.080994 0.007828 -0.084900 -0.073181 0.012978 0.102600 -0.067017 0.028152 0.097717 0.066284 0.010513 0.042389 -0.028870 -0.000340 -0.100525 -0.023438 0.055084 -0.036896 0.041748 0.013954 -0.100525 -0.028107 -0.092346 0.005375 0.023224 -0.072510 -0.029663 -0.089783 -0.081360 0.074585 -0.081604 0.076477 -0.070251 -0.090637 0.098511 -0.017960 -0.079651 0.053375 0.010002 0.062042 -0.080994 0.024063 0.038239 -0.007313 0.090820 -0.045624 0.004478 0.088989 -0.018555 -0.023315 0.010490 -0.039551 0.105225 0.082581 -0.026443 -0.044159 -0.026978 0.003798 -0.021225 -0.147827 -0.054535 0.053833 0.026993 0.085815 -0.001345 -0.092773 -0.122253 -0.054199 0.123108 0.026001 0.034058 0.122681 -0.040314 -0.052612 -0.094543 -0.016525 0.056152 -0.062164 0.049469 -0.018387 0.083130 -0.025772 -0.039520 0.033325 0.184326 -0.015305 -0.046356 -0.188232 -0.051666 -0.050781 0.003689 0.007957 -0.068359 -0.035461 -0.109070 0.043793 -0.083435 -0.001154 0.075562 0.038330 0.033325 0.044281 -0.020157 0.088684 -0.042419 -0.149170 0.006863 -0.094788 -0.051361 0.057861 -0.017487 -0.015320 -0.014015 -0.031647 0.013161
-0.067444 0.000429 -0.001907 -0.031860 0.010582 0.110718 0.027420 -0.031677 -0.004593 -0.075073 0.053162 0.039581 -0.036407 0.003826 0.068542 -0.119995 0.066406 -0.017776 -0.005981 0.014107 -0.057861 0.055878 -0.105591 -0.071838 0.102051 -0.018311 -0.011719 0.038208 0.111877 0.064453 0.075012 -0.036102 -0.049561 -0.016373 -0.062317 -0.128296 -0.097046 0.009689 0.053955 0.136841 -0.011200 0.006046 -0.058594 0.006577 -0.176636 0.029816 0.088440 0.004833 -0.089478 0.027252 0.067810 -0.174316 -0.099182 -0.072021 0.034088 0.078491 0.057098 -0.032867 0.060120 -0.027267 0.001397 0.029449 -0.016098 -0.046661 0.012794 0.018646 0.033539 -0.012070 0.059143 0.026306 0.112244 -0.003887 0.098633 0.007183 -0.000101 -0.002554 -0.121704 -0.058258 0.121521 0.062317 -0.000849 0.032410 -0.032745 0.024734 -0.085327 -0.016525 0.040894 0.010452 -0.027374 -0.055359 -0.028488 0.061249 -0.015854 -0.036316 -0.052795 0.030609 0.120544 -0.057404 -0.020386 0.065247 0.026840 -0.078674 -0.027267 0.012054 -0.051361 -0.012642 -0.018112 0.019577 -0.026978 -0.053802 -0.051086 0.016815 -0.082214 -0.033112 -0.054321 -0.075195 -0.040649 0.087463 0.072021 -0.018967 0.014931 -0.067871 -0.011574 -0.034027 0.054565 -0.044281 0.018768 -0.021057 -0.016037 0.033691 0.082764 -0.055023 -0.084534 0.054352 0.060608 0.011398 -0.009903 0.033142 0.027710 -0.005997 -0.040955 0.008484 0.069580 -0.091736 0.003775 0.011002 0.058746 0.000948 -0.015762 0.041229 0.086487 0.035095 0.051819 -0.031143 -0.033569 -0.122192 -0.046997 0.083740 0.006359 0.104614 0.062164 -0.065369 -0.054413 0.076965 0.015236 0.130127 -0.050812 0.038391 -0.015060 -0.095520 0.045441 -0.046417 0.098206 -0.044281 -0.076965 0.053558 0.017288 -0.034393 0.055969 0.048096 0.023300 0.019592 0.030258 0.113892 -0.100952 0.097839 -0.018906 0.061798 0.152100 -0.074646 -0.019089 0.005634 -0.026855 0.037201 0.027618 -0.033356 0.026581 -0.112183 0.011452 0.051941 -0.090332 -0.072937 0.027786 -0.006287 0.106079 0.103210 -0.111511 -0.028900 0.075806 0.051483 -0.100769 0.031372 0.110229 -0.021194 -0.041199 -0.058167 -0.055511 0.064026 -0.011803 -0.000834 -0.081116 0.149048 0.031891 0.040680 0.069336 0.243896 -0.003000 0.066284 -0.158691 -0.042786 0.006226 -0.039154 0.005371 -0.067383 -0.057678 -0.075317 0.088806 -0.057983 -0.055573 0.016876 0.026413 -0.019943 0.022720 -0.023499 0.067810 -0.040100 -0.020248 -0.024200 -0.057922 -0.002216 0.069153 0.012398 0.050140 -0.017487 -0.019272 0.023651
-0.043671 -0.044678 0.047729 0.014687 0.095642 0.017212 0.028351 -0.019348 -0.039185 -0.052765 -0.075378 0.017715 -0.024185 -0.091919 0.069336 -0.204102 0.000704 -0.074829 0.043365 0.039551 -0.105713 0.018829 0.015747 -0.014244 0.080627 -0.026230 0.034790 0.042114 0.023254 -0.015869 0.056213 -0.021530 -0.008255 -0.028488 -0.085815 -0.101746 -0.076721 -0.027466 0.044891 0.093445 0.104675 0.023865 0.058289 0.013519 -0.087219 0.059052 0.128906 -0.022736 -0.026108 -0.053192 -0.035187 -0.041473 -0.119812 -0.002947 0.015701 0.007988 0.078186 0.008095 0.038971 -0.070251 0.031006 0.055756 -0.129761 0.027756 -0.076294 -0.029861 -0.011528 -0.088745 -0.096680 0.012352 0.041748 -0.031952 0.092224 -0.080505 0.065857 -0.023895 -0.115112 0.034302 0.072998 -0.026215 -0.054199 -0.024521 0.048065 0.008133 -0.062439 -0.063599 -0.008324 0.011948 -0.007542 -0.055847 0.046173 0.091980 0.005680 -0.109070 -0.060333 -0.025208 0.054749 -0.066406 -0.062103 0.103699 0.022171 -0.121704 -0.021713 -0.056549 -0.030701 0.032104 -0.077759 -0.089905 -0.035126 -0.034241 -0.035645 -0.030441 -0.052338 -0.027451 0.001888 -0.043976 0.026718 0.109802 0.003271 -0.075317 0.140381 -0.053162 -0.034760 -0.043854 0.084839 0.012459 0.131470 -0.003733 0.041870 -0.021561 -0.003759 -0.057495 -0.038940 0.079041 -0.027267 -0.022873 -0.023438 -0.066772 0.039032 -0.034729 -0.098022 0.046783 0.043060 -0.113098 -0.026901 0.084534 -0.014526 -0.029083 -0.031036 -0.002348 -0.023178 0.008476 0.017380 0.016708 -0.003544 -0.066956 -0.030533 0.077820 -0.048370 0.094055 0.025864 -0.041443 -0.117859 0.122559 0.027054 0.082947 -0.064941 -0.033691 -0.034424 -0.093384 0.042725 -0.096802 -0.021591 -0.105835 0.012260 0.014900 0.031143 -0.033997 0.049744 -0.005253 0.045471 -0.062378 -0.039581 0.046661 -0.077271 0.062622 -0.088196 -0.016602 0.105225 -0.030136 -0.017166 -0.046814 -0.038025 0.008324 -0.067078 -0.037140 0.086853 -0.138916 0.072754 0.037872 -0.085999 -0.012009 0.063965 0.144287 0.088135 0.088318 -0.032928 -0.060974 -0.012642 0.022842 -0.082336 0.035309 0.075867 0.026794 -0.060577 0.027206 -0.066284 0.097473 -0.062561 -0.043274 -0.035187 0.140869 0.081055 0.011383 0.075684 0.089417 -0.033630 0.024872 -0.075073 -0.039276 0.076721 0.019577 -0.008881 0.019363 0.065247 -0.045197 0.129272 -0.045105 -0.112122 0.018097 0.053192 -0.012909 0.026047 -0.077332 0.122253 0.078674 -0.042786 -0.065430 -0.018356 -0.059845 0.061127 -0.054840 0.125732 0.017395 0.005493 -0.031677
0.001164 -0.007889 0.024002 0.004211 0.020706 0.098999 -0.011993 -0.006130 -0.000281 -0.056091 -0.043091 0.040649 -0.030945 -0.003162 0.082581 -0.150024 0.054230 -0.017761 0.032074 0.098511 -0.099121 0.007664 -0.062164 -0.020187 0.060394 -0.003134 0.013832 0.114685 0.145020 0.065369 0.048096 -0.045288 -0.010880 -0.030518 -0.036377 -0.039032 -0.045166 0.025574 0.024597 0.096069 0.025284 0.031250 0.000423 -0.018127 -0.090637 0.010307 0.120972 -0.038330 -0.024521 0.048096 0.052521 -0.144531 -0.133179 -0.032440 0.011749 0.008255 0.044342 -0.001781 0.149414 -0.013947 0.002848 -0.012970 -0.125732 -0.031281 -0.064880 -0.005775 -0.054840 -0.008331 0.082397 0.031189 0.127075 -0.003881 0.091003 -0.008003 0.071472 0.010323 -0.173584 -0.008095 0.071777 0.002977 -0.019073 -0.005424 -0.004250 -0.026947 -0.108032 -0.054199 0.004913 0.057648 -0.093323 -0.037659 -0.016342 0.101318 0.001986 -0.038727 -0.034393 -0.040253 0.101196 -0.083557 -0.059174 0.056152 0.047485 -0.082031 -0.073486 0.003059 0.068542 0.001768 -0.092163 -0.032532 -0.073425 -0.052612 -0.032104 -0.021667 -0.045593 -0.018433 -0.046967 -0.081787 -0.104309 0.048126 0.052216 -0.061798 0.024963 -0.072754 -0.004253 -0.046051 0.124878 -0.017990 0.131592 -0.043213 0.054474 -0.018845 0.047485 -0.013100 -0.130493 0.006847 0.049530 -0.024048 0.025253 -0.003454 -0.002123 0.003275 -0.023209 -0.016083 0.064514 -0.038727 0.044037 -0.022079 -0.005821 0.064636 0.038727 -0.023987 -0.036896 0.035858 0.020767 -0.063782 -0.054962 -0.124207 -0.050812 0.158081 0.044403 0.067749 0.056458 -0.157715 -0.064026 0.095337 0.051270 0.131714 -0.036530 -0.032257 -0.041779 -0.098328 0.008469 -0.018417 0.060974 -0.081848 -0.074951 -0.014259 0.008675 0.005146 0.039886 -0.005363 0.022293 -0.043732 0.014374 0.078369 -0.062195 0.032776 -0.045471 -0.003633 0.111389 0.004295 0.012482 -0.046173 -0.054749 0.021057 0.031616 -0.017715 0.051239 -0.153564 0.032043 0.023361 -0.083801 -0.098083 0.034485 0.057953 0.067566 0.097534 -0.093140 -0.027161 0.048157 0.051392 -0.137329 0.022491 0.060638 0.063721 -0.080627 -0.048859 0.054321 0.046539 -0.043427 0.000618 -0.069824 0.132812 0.045959 0.013954 0.014832 0.185181 0.006157 0.103149 -0.086487 -0.013969 0.010307 -0.037598 -0.021408 -0.067261 0.033234 -0.055634 0.070679 0.045959 -0.106445 0.040070 0.073120 0.032410 0.006523 -0.087036 0.034088 0.017502 -0.062683 0.008438 0.003162 0.041382 0.009300 0.052734 0.055573 -0.020050 -0.002001 -0.015381
-0.048859 -0.030777 0.000655 -0.051544 0.023270 0.056366 0.023071 -0.088745 -0.016068 -0.035614 -0.055237 0.032227 -0.106079 -0.016068 0.066101 -0.179688 0.008842 -0.006176 0.026794 0.039062 -0.065857 0.037323 -0.050323 -0.081116 0.075989 -0.040466 0.028564 0.074097 0.080505 -0.051025 0.095215 -0.038452 -0.006481 0.002453 -0.139648 -0.099426 -0.112244 0.039093 0.088196 0.119324 0.059906 0.002907 0.052063 -0.033295 -0.086975 0.023544 0.110901 -0.015442 -0.073059 -0.021393 0.044434 -0.084229 -0.117981 -0.047974 0.014778 0.009102 0.073608 -0.031464 0.040588 -0.006077 0.023468 -0.008865 -0.089966 0.050720 -0.086304 -0.030060 0.007065 -0.060455 -0.041718 0.006069 0.046783 -0.054993 0.142700 -0.036896 0.062866 -0.069275 -0.096619 0.036804 0.111389 -0.002861 -0.056702 0.002335 0.029221 0.034332 -0.071167 -0.048676 0.002871 0.024094 0.001997 -0.057465 -0.033630 0.070618 0.022430 -0.095764 -0.110352 -0.015778 0.011658 -0.025558 -0.109131 0.119812 0.043640 -0.127808 -0.008148 -0.002499 -0.041168 0.016281 -0.059509 -0.082703 -0.078064 -0.067932 -0.027939 0.008659 -0.018127 -0.030228 0.052185 -0.031708 0.044861 0.119690 0.023880 -0.013481 0.110901 -0.055542 -0.052338 -0.057281 0.027039 -0.018829 0.076660 -0.021698 0.033508 0.013329 0.016342 0.015656 -0.118286 0.077087 0.017609 -0.044006 -0.067017 -0.089417 0.064514 0.003893 -0.050415 0.049957 0.009140 -0.067505 -0.012100 0.044006 -0.018890 -0.012764 -0.021973 -0.019089 0.001949 -0.008644 0.050140 -0.009819 -0.022095 -0.109863 -0.022659 0.114563 -0.016052 0.109863 0.090576 -0.086609 -0.076294 0.062073 0.017380 0.062561 -0.100708 -0.035461 -0.027695 -0.116821 0.053833 -0.036957 -0.004070 -0.080505 -0.020203 0.021667 0.033691 -0.017731 0.073425 0.039185 0.070740 -0.058105 -0.005924 0.054871 -0.078003 0.090820 -0.049255 0.019379 0.127075 0.011093 -0.035156 -0.062622 -0.042572 0.024872 -0.039734 -0.036255 0.036499 -0.104065 0.085571 -0.024826 -0.130615 -0.039429 0.039368 0.133789 0.107788 0.092712 -0.038300 -0.079895 0.035095 0.053986 -0.055878 0.061432 0.130127 -0.035614 -0.097412 -0.052887 0.002048 0.100159 -0.067505 -0.033875 -0.053253 0.084534 0.033813 0.013580 0.047760 0.135132 -0.054413 0.012276 -0.113403 -0.005337 0.082886 0.002254 -0.012665 -0.043732 0.043274 -0.061127 0.073486 -0.051849 -0.109558 0.038086 0.008926 -0.029297 0.027161 -0.038361 0.105530 0.062561 -0.018860 -0.019562 -0.040131 -0.025650 0.078369 -0.056732 0.089233 -0.006195 -0.039612 -0.047333
-0.001166 0.010895 0.002741 0.019150 -0.003345 0.100403 0.091431 -0.059937 -0.039917 -0.050903 0.020706 0.076111 0.012131 0.071472 0.063965 -0.100891 0.102600 0.026535 -0.043762 0.036560 -0.066528 0.091980 -0.107422 -0.109680 0.005711 -0.031158 -0.013802 0.112122 0.107910 0.000538 0.100098 -0.034058 0.021286 0.048981 -0.033478 -0.026550 -0.020523 0.047943 -0.000154 0.101013 0.016098 0.103455 0.040955 0.001747 -0.099487 0.018768 0.078674 -0.011574 -0.092285 0.077087 0.076599 -0.209961 -0.106323 -0.084412 0.028778 -0.011780 -0.038696 0.050232 0.112000 -0.062469 0.091125 -0.066895 -0.069031 0.024506 -0.016022 0.052826 0.035217 -0.050659 0.072021 0.006279 0.029785 -0.009750 0.152954 0.014076 0.008110 -0.006203 -0.139160 0.061951 0.137573 0.036865 -0.041595 0.043701 -0.034149 -0.011147 -0.122253 -0.057007 0.042389 0.015793 0.016220 -0.061523 -0.029068 0.079590 -0.034546 -0.043060 -0.083862 -0.017776 0.114746 -0.011864 -0.018906 -0.020691 0.059875 -0.036133 0.005272 0.006901 0.009941 0.081543 -0.032227 -0.028503 0.004406 -0.053314 -0.092163 -0.038422 -0.059418 -0.053711 0.043701 -0.061737 -0.038147 0.097229 0.039795 0.021774 0.030838 -0.091919 0.071533 -0.048126 0.092957 -0.035309 0.080322 -0.012589 -0.002171 -0.063416 -0.000635 0.038055 -0.113403 0.048706 0.058441 0.039246 0.057159 0.067322 0.015236 0.012215 -0.009430 -0.034698 -0.002417 -0.114685 0.007637 -0.003164 0.035309 0.000844 0.036194 0.045624 -0.007515 0.027100 0.063721 -0.058563 -0.048065 -0.126221 -0.032471 0.092163 -0.048218 0.060852 0.033630 -0.104614 -0.016403 -0.011086 0.029343 0.098083 -0.078979 -0.057007 -0.075378 -0.119080 0.013596 -0.033447 0.061615 -0.100525 -0.145386 0.026627 0.000723 -0.060730 0.030823 0.006855 0.025223 -0.052032 0.028183 0.068848 0.023117 0.082275 -0.093201 -0.002077 0.084534 0.020767 -0.035858 -0.008858 -0.043396 0.107910 0.017258 0.022842 -0.013603 -0.092651 0.008057 0.018173 -0.137207 -0.060059 0.070923 0.008690 0.044189 0.004776 -0.064636 -0.094604 0.017929 0.044159 -0.054199 -0.008286 0.076477 0.033630 -0.046692 -0.075317 0.042297 0.069946 -0.022324 0.007179 -0.044067 0.128174 0.048828 0.058136 0.041626 0.208618 -0.034912 0.009781 -0.130737 -0.046173 -0.033386 0.005070 -0.028259 -0.078979 0.000317 -0.091248 0.082214 -0.004185 -0.075623 0.032257 0.030838 0.046143 0.030914 -0.046143 0.080750 -0.037628 -0.089355 0.024200 -0.063660 -0.011574 0.024948 -0.015625 -0.011009 0.017914 0.008499 0.011322
-0.062378 0.026535 0.004150 0.000620 0.027817 0.069214 0.012505 -0.007492 -0.012291 -0.070618 0.008972 0.037079 -0.111572 0.032379 0.050262 -0.138062 0.059021 0.056854 0.023621 0.005459 -0.100037 0.119141 -0.117737 -0.116638 0.031708 -0.024826 0.045868 0.096619 0.080261 -0.011246 0.055695 -0.026093 0.010155 -0.032104 -0.089722 -0.093018 -0.080078 0.034973 0.042511 0.139771 0.029816 0.087280 -0.007462 -0.012817 -0.073730 -0.019379 0.051361 -0.039764 -0.118774 0.013588 0.088074 -0.117310 -0.130737 -0.114075 0.032928 0.018188 0.025864 0.011612 0.133545 -0.075073 0.022064 0.003918 -0.054230 -0.001420 0.002138 0.055725 -0.032806 0.046234 0.021408 0.026535 0.080261 -0.021820 0.103943 0.021149 0.035248 -0.044922 -0.108032 0.015282 0.085999 0.054596 -0.048340 0.059814 -0.059479 0.035187 -0.088257 -0.097534 0.083496 0.045410 -0.069031 -0.045868 -0.079407 0.059235 0.035522 0.021225 -0.078613 0.057587 0.057373 -0.034454 -0.094604 0.044952 0.035126 -0.067688 -0.011627 0.048035 -0.025146 -0.027130 -0.017731 -0.038727 -0.053741 -0.077148 -0.040192 -0.010078 -0.042328 -0.037750 0.022629 -0.049591 0.004871 0.132812 0.077881 0.001681 0.040619 -0.098755 0.000537 -0.040436 -0.027054 -0.122192 0.013718 0.009972 0.057465 0.010681 0.018082 0.007648 -0.080872 0.002913 0.078003 0.036713 0.012413 0.046600 0.073120 0.001769 -0.047882 -0.018112 0.054962 -0.036255 0.018005 -0.004375 0.012695 0.038361 -0.036255 0.009399 0.061676 0.034393 0.026855 0.015625 -0.070923 -0.112427 -0.020432 0.103943 -0.006359 0.101135 0.043213 -0.108765 0.004704 0.045776 -0.000290 0.129150 -0.054504 -0.052246 -0.064331 -0.135010 0.061157 -0.078918 -0.046021 -0.066650 -0.094055 0.004139 0.005238 -0.087219 -0.038849 -0.001846 0.048615 -0.077271 -0.013664 0.091187 -0.101868 0.182617 -0.027679 0.039856 0.085022 -0.006748 -0.072205 -0.012222 -0.014297 0.028107 0.036560 -0.010910 0.018433 -0.035187 0.080933 -0.000783 -0.074890 -0.076904 0.119446 0.041260 0.133789 0.057617 -0.112183 -0.024323 0.062012 0.060333 -0.070984 0.065369 0.048767 -0.007660 -0.081055 -0.023926 0.027328 0.000690 -0.082214 0.040741 -0.031677 0.074829 0.050171 -0.006275 0.020599 0.188965 -0.038696 0.019943 -0.117798 -0.001084 0.040436 -0.056976 0.006424 -0.069763 -0.013321 -0.101807 0.070984 -0.064453 -0.068726 0.048981 0.013702 0.007206 0.071167 -0.001639 0.069275 -0.028214 -0.033844 -0.021164 -0.106934 0.008148 0.075684 -0.057220 0.024246 -0.030930 0.016113 -0.020020
-0.065186 -0.059052 0.035492 0.022552 0.102356 -0.026459 0.013931 -0.061310 0.030151 -0.001068 -0.119507 0.046692 -0.110901 -0.092834 0.043762 -0.211060 -0.027374 -0.083801 0.076660 0.024338 -0.056030 0.001520 -0.006508 -0.078918 0.050659 -0.047760 0.012932 0.065979 0.032532 -0.038513 0.077576 -0.057831 0.052887 -0.020432 -0.136230 -0.069397 -0.081970 -0.014381 0.029068 0.044281 0.098206 -0.006912 0.103394 -0.040070 -0.062866 0.036499 0.096130 0.013519 -0.060608 -0.045105 0.003340 -0.014160 -0.128784 0.096863 0.008804 -0.052612 0.061951 0.004765 0.031525 -0.056061 0.034546 -0.000740 -0.164551 0.018723 -0.132568 -0.044678 -0.008385 -0.012566 -0.107117 -0.013695 0.086548 -0.027573 0.048706 0.007782 0.026611 0.009178 -0.111084 0.005573 0.034210 -0.059143 -0.041992 -0.042297 0.047882 0.007759 -0.031372 -0.076050 -0.026779 0.048706 0.018250 -0.018616 0.040070 0.087036 0.003002 -0.109802 -0.077942 -0.063110 0.018112 0.006435 -0.052032 0.166016 0.045563 -0.156372 0.022720 -0.034332 -0.020508 0.012085 -0.048706 -0.139648 -0.022644 -0.017700 0.012711 0.012047 -0.012558 -0.004494 0.037079 0.006783 0.091919 0.075134 -0.004856 -0.080078 0.151611 -0.008293 -0.052856 -0.051514 0.014084 -0.027069 0.056427 0.027802 0.028091 -0.033020 -0.039337 -0.030685 -0.053589 0.036621 -0.060425 -0.047546 -0.004341 -0.012825 0.031219 0.020218 -0.106384 0.043762 0.029831 -0.047302 -0.000170 0.066223 -0.040924 -0.012215 -0.075012 0.000321 -0.091736 -0.034302 -0.012657 0.027466 0.008247 0.007164 -0.019516 0.104675 -0.031174 0.093201 -0.005280 -0.064331 -0.071533 0.095947 0.024597 0.022003 -0.065613 -0.069031 0.055420 -0.089417 0.007980 -0.048981 -0.035492 -0.104370 0.007534 -0.014366 0.035767 0.032684 0.006218 0.015518 0.027771 -0.065125 -0.067383 0.035400 -0.042908 0.060638 -0.079285 -0.025818 0.109802 -0.015175 -0.028564 -0.058014 -0.029236 0.051819 -0.058624 -0.030212 0.084045 -0.104614 0.137085 -0.075073 -0.016144 -0.012451 -0.001327 0.119934 0.131714 0.049347 0.041382 -0.036224 -0.026703 0.062225 -0.082153 0.078857 0.097168 0.000224 -0.043427 0.035492 -0.042572 0.069519 -0.050354 0.009949 -0.060699 0.077393 0.042297 -0.053833 0.123962 0.014854 -0.076111 0.021210 -0.019897 -0.005096 0.094788 -0.014542 -0.023239 -0.056152 0.131348 -0.090393 0.101135 -0.059296 -0.016907 -0.033112 0.014816 -0.094849 0.020081 -0.096558 0.044769 0.101074 -0.058014 -0.022919 0.028015 -0.045319 0.067749 -0.086853 0.085510 0.032898 -0.072021 -0.042542
-0.044037 -0.017609 -0.003967 0.025787 -0.033356 0.087036 0.052643 -0.085632 -0.028549 -0.049774 -0.004349 0.000102 -0.095947 0.099731 0.009697 -0.097656 -0.008499 0.013268 0.043060 -0.088501 -0.092468 0.114990 -0.066101 -0.149902 -0.021530 -0.033142 0.019958 0.072693 0.088013 -0.057831 0.123535 -0.063171 -0.035126 -0.038910 -0.149902 -0.097900 -0.044312 0.011398 0.022293 0.124634 0.005680 0.098145 -0.008568 0.006710 -0.091675 0.013802 0.002211 -0.047729 -0.178223 0.011108 0.105530 -0.115845 -0.076965 -0.039215 0.019409 -0.009087 -0.002985 0.021515 0.086975 -0.087769 0.043549 -0.063599 -0.037048 0.060913 0.035095 0.061737 0.022415 -0.018860 0.036469 0.003260 -0.022354 -0.040009 0.095032 0.008095 -0.016403 -0.059265 -0.072937 0.050293 0.094299 0.067078 -0.064453 0.036377 -0.049988 0.032196 -0.091492 -0.123779 0.090393 -0.016113 0.058899 -0.062866 0.001644 0.054565 -0.005520 -0.037048 -0.106750 0.038727 -0.013275 0.003876 -0.028824 0.037750 -0.020172 -0.113098 0.000759 0.035950 -0.101257 -0.006878 0.072205 -0.028534 -0.002104 -0.047913 -0.063538 0.027924 0.046906 -0.042145 0.063171 -0.054352 0.076721 0.181030 0.017090 0.055511 0.064148 -0.070129 0.067261 -0.022568 -0.059631 -0.135620 0.003609 0.021454 -0.010277 0.017029 -0.014076 0.065674 -0.027390 0.014503 0.042297 0.055817 -0.006687 -0.014267 0.088379 -0.025696 -0.027466 -0.038239 0.011536 -0.066895 -0.017960 0.059967 0.045441 -0.015358 -0.025345 0.054962 0.061310 -0.010460 0.058777 -0.009186 -0.004234 -0.105408 -0.042542 0.008270 -0.081055 0.079773 0.000951 -0.079224 0.033295 -0.055847 -0.012527 0.022034 -0.119568 -0.088867 -0.029083 -0.091064 0.062805 -0.116089 -0.018814 -0.093872 -0.087097 0.120483 0.012550 -0.102661 -0.026321 0.007473 0.013695 -0.090820 -0.012321 0.084045 -0.096436 0.116211 -0.056946 0.007290 0.090515 0.067871 -0.028885 0.010910 -0.041473 0.023331 0.051575 0.025269 0.018494 0.004665 0.054840 -0.019928 -0.050201 -0.037018 0.083496 0.016907 0.075989 0.006336 -0.025681 -0.065735 -0.056976 0.079712 -0.012032 0.068604 0.104248 -0.046906 -0.030563 -0.073914 0.032532 0.023239 -0.093567 0.017670 -0.044434 0.067505 0.009964 -0.003929 0.073547 0.176025 -0.038116 -0.055908 -0.112488 -0.052582 0.005180 0.021210 0.012222 -0.081421 -0.031799 -0.085693 0.084351 -0.102661 -0.059753 0.056213 0.004128 -0.018127 0.074280 0.004330 0.061523 -0.066772 -0.048248 0.034851 -0.098267 -0.047913 0.030518 -0.076355 0.033478 0.016205 -0.012535 -0.042542
-0.037567 -0.018387 0.045563 0.016235 -0.037048 0.093018 0.060608 -0.068909 -0.042664 0.020874 0.045776 0.017776 -0.015244 0.056732 0.034210 -0.156616 0.039795 -0.019760 0.015640 -0.002621 -0.077515 0.069153 -0.070496 -0.030380 0.058380 -0.007351 -0.033661 0.065674 0.159668 0.049530 0.098389 -0.056366 -0.074890 -0.031525 -0.083679 -0.053619 -0.056519 0.016769 -0.014328 0.128662 -0.024460 0.031403 -0.019073 -0.055634 -0.140259 0.020050 0.045532 -0.047974 -0.107117 0.004341 0.083923 -0.153198 -0.125610 -0.126953 0.061981 0.016525 0.036987 -0.018875 0.075562 -0.039398 -0.020935 0.009315 -0.060394 0.019669 -0.015366 -0.006897 -0.047546 -0.060730 0.020325 0.006557 0.047150 -0.028259 0.106018 -0.044861 0.034851 -0.060547 -0.087341 0.015587 0.130981 0.002357 -0.020447 -0.000444 -0.003511 0.002573 -0.084412 -0.026291 0.028458 0.050415 -0.100952 -0.088806 -0.023849 0.119751 -0.015503 -0.079163 -0.064453 0.017502 0.065735 -0.074219 -0.054108 0.068176 0.011147 -0.097839 -0.058289 0.070129 -0.009781 0.014503 -0.021255 -0.013092 -0.103210 -0.028290 -0.070007 -0.007164 -0.042236 -0.064026 -0.003733 -0.083435 -0.026459 0.097900 0.038330 0.005661 -0.005699 -0.060455 -0.058838 -0.057495 0.087280 -0.053955 0.103394 -0.010056 0.047211 0.018570 0.013260 -0.045868 -0.099976 0.031738 0.023575 0.012123 0.014061 -0.086975 0.014816 -0.042694 -0.003559 0.003906 0.023346 -0.077332 0.007069 0.016159 0.024155 0.043335 0.024246 -0.017670 0.025314 -0.011322 0.072083 -0.024185 -0.048981 -0.135498 -0.007710 0.093201 0.025772 0.093079 0.071472 -0.101929 -0.062256 0.030899 0.011818 0.055664 -0.091187 -0.024475 -0.044037 -0.084900 0.067444 -0.039703 0.063232 -0.059265 -0.107788 0.006542 0.024261 -0.054504 0.060333 0.041931 0.052368 -0.085388 0.049530 0.052307 -0.061859 0.081726 -0.040619 0.014763 0.124817 0.016571 -0.011169 -0.071350 -0.027237 0.017059 0.054901 -0.015251 -0.004173 -0.157227 0.023834 0.039703 -0.095276 -0.024475 0.012993 0.037994 0.057861 0.085876 -0.116516 -0.084656 -0.021957 0.026901 -0.083740 0.073181 0.130859 0.001221 -0.087341 -0.093811 0.004791 0.072876 -0.061707 0.035431 -0.099731 0.119263 0.035736 0.052429 0.081604 0.201538 -0.024857 0.030411 -0.129395 -0.069580 0.040405 -0.024902 -0.020096 -0.066467 0.014465 -0.062927 0.066772 0.004543 -0.120117 0.066223 0.015350 -0.044128 0.014572 -0.020935 0.091919 -0.053741 -0.022049 0.040131 -0.018784 -0.022980 0.016830 0.079773 0.044586 -0.006500 0.026611 -0.045532
-0.033173 -0.038910 0.041443 -0.022934 0.004532 0.071899 0.005272 -0.051056 -0.012466 -0.067139 -0.024704 0.005486 -0.195190 0.102722 0.019897 -0.125977 0.006180 0.018005 0.051300 -0.024002 -0.047394 0.067322 -0.076599 -0.101257 0.035339 0.003508 0.048218 0.090454 0.090149 -0.041443 0.104187 -0.070801 -0.029037 0.032104 -0.180176 -0.090149 -0.042603 0.045044 0.031616 0.116028 0.003031 0.087769 0.009178 0.000744 -0.044556 0.004803 -0.005760 -0.071533 -0.172119 0.024673 0.086426 -0.086914 -0.140625 -0.068665 -0.019577 -0.025284 0.015007 0.000917 0.123291 -0.039398 -0.002161 -0.053192 -0.048096 0.044495 0.006908 0.050446 -0.025299 -0.014351 0.031097 0.017014 0.060425 -0.069214 0.126953 0.000859 0.074524 -0.068848 -0.081665 0.068665 0.082214 0.043976 -0.057007 0.026306 -0.024521 0.033630 -0.076904 -0.096252 0.086426 0.052277 -0.001371 -0.072083 -0.042572 0.111206 0.046692 -0.052460 -0.107971 0.022949 -0.008743 0.002626 -0.070923 0.027664 0.023651 -0.143188 -0.039215 0.033325 -0.075684 -0.001597 0.009712 -0.052002 -0.041962 -0.056702 -0.040436 -0.020081 0.016174 -0.018036 0.037323 -0.089050 0.030426 0.112122 0.038788 0.025406 0.064270 -0.031082 0.025269 -0.071472 -0.037781 -0.114807 0.037201 -0.025497 0.049866 0.005981 -0.001042 0.065979 -0.081238 0.030548 0.052246 0.015076 0.031235 -0.040344 0.089111 0.007820 -0.050537 -0.042847 0.001695 -0.039764 -0.010811 0.036743 0.028122 -0.062073 -0.028427 0.041046 0.076111 0.022171 0.019226 0.012497 -0.061218 -0.121277 -0.037750 0.094360 -0.027588 0.067871 0.002193 -0.139038 0.002125 -0.039154 0.028595 0.011581 -0.072571 -0.113281 -0.034851 -0.106384 0.058777 -0.034302 -0.029053 -0.052734 -0.048401 0.092957 0.045807 -0.081787 -0.023315 0.042725 0.062927 -0.126221 -0.010536 0.065491 -0.058807 0.123840 -0.082642 0.020416 0.119202 0.055511 -0.014702 -0.021194 -0.082153 0.043152 0.021591 -0.011375 0.052460 -0.045013 0.038971 -0.057068 -0.113403 -0.043243 0.106201 0.067322 0.081604 0.053070 -0.058807 -0.040985 -0.026306 0.051208 -0.052368 0.066162 0.078247 -0.096619 -0.070007 -0.081665 0.061890 0.044830 -0.117188 -0.007866 -0.039856 0.046722 0.047882 -0.027985 0.026581 0.151733 -0.021057 -0.027252 -0.072510 -0.032440 0.037964 -0.006611 0.034210 -0.071960 0.014946 -0.098389 0.047516 -0.049805 -0.054871 0.052795 -0.015884 0.019424 0.026382 -0.013390 0.022095 -0.020401 -0.101990 0.009636 -0.101013 -0.024231 0.075989 0.009132 0.046875 -0.036804 -0.023529 -0.039276
0.024765 0.013641 0.069031 0.026260 -0.038086 0.073608 -0.000193 -0.009422 -0.077454 -0.049744 -0.008705 0.017868 -0.154175 0.078308 0.089905 -0.135742 0.047150 -0.103699 0.045074 0.019226 -0.102905 -0.021515 0.020218 -0.096619 0.076660 -0.015213 0.022263 0.052429 0.112915 -0.020950 0.055115 -0.073486 -0.078125 -0.016495 -0.149780 -0.083740 -0.030472 0.006916 0.005970 0.165039 0.010254 0.023239 0.002136 -0.053558 -0.147705 0.051239 0.094055 -0.007942 -0.045044 0.041107 0.102966 -0.073364 -0.137329 -0.000795 -0.006554 -0.015137 -0.002796 0.011002 0.083374 -0.053436 0.004238 -0.010704 -0.024475 -0.047150 -0.031403 0.036774 0.058990 -0.023834 0.015099 0.079529 0.103638 -0.059540 0.036469 0.017517 0.047913 0.005543 -0.182861 -0.025681 0.149658 0.063843 -0.025360 -0.012749 0.016220 0.084717 -0.010193 -0.025177 0.032562 0.063660 0.009819 0.002153 -0.002142 0.082581 -0.020584 -0.060394 -0.102295 -0.011353 0.058533 -0.057617 0.069580 0.058197 0.014580 -0.127441 -0.025650 -0.036469 -0.099670 0.019165 0.001848 -0.131836 -0.029449 -0.074890 -0.029678 -0.042450 -0.098938 0.012848 -0.015549 -0.085205 0.028641 0.060394 0.015060 -0.061005 0.064453 -0.042877 0.001800 -0.065308 0.091064 -0.068604 0.037628 0.019455 -0.026428 0.023270 0.037750 -0.062225 -0.056091 0.060364 0.046600 0.040619 0.054932 0.007812 0.012886 -0.024582 -0.082092 -0.027740 -0.003609 -0.107178 -0.027847 0.099243 0.040680 0.071655 -0.024841 -0.011650 0.012375 0.046326 0.034576 -0.058899 -0.033752 -0.143433 -0.092102 0.109436 0.038300 0.027969 0.021393 -0.040619 -0.021393 0.105591 0.021118 0.057983 0.006222 0.020523 -0.033386 -0.012535 0.061218 -0.071289 0.040558 -0.048431 -0.007534 0.032043 0.015366 -0.028137 0.058105 0.025421 0.008781 -0.041077 -0.005630 0.126343 -0.096497 0.024216 -0.103577 0.039429 0.113159 -0.045288 -0.010056 0.005428 -0.071045 0.032501 0.072632 -0.015289 0.061554 -0.079407 -0.046234 0.044556 0.000374 0.001034 0.040039 0.039856 0.035034 0.098267 -0.109863 -0.017517 -0.030090 -0.008537 -0.025314 0.063232 0.093079 -0.079041 -0.043854 0.003139 -0.010094 0.044525 0.027939 -0.014282 -0.083923 0.106995 0.022217 0.037750 0.098999 0.225342 0.040222 0.031586 -0.046478 -0.064697 0.061401 -0.069336 0.052277 -0.043182 0.003111 -0.073486 0.101379 -0.060059 -0.021957 -0.002312 0.020065 -0.000199 0.044617 -0.056213 0.083435 0.020538 -0.036072 0.078979 -0.077148 -0.040863 0.077271 0.004623 0.075562 -0.042328 -0.085083 -0.030380
0.001683 0.035309 0.014091 -0.016830 -0.051758 0.094299 0.049835 -0.086304 -0.088623 0.001838 0.031525 0.029373 -0.062378 0.119019 0.043274 -0.061554 0.027847 0.060913 0.009857 0.078369 -0.019348 0.070618 0.007751 -0.043427 -0.002445 0.024277 0.044983 0.168457 0.110962 -0.010437 0.076416 -0.007538 -0.044922 0.021790 -0.036194 0.003620 -0.072937 0.066162 -0.024490 0.071838 0.005402 0.064758 -0.061737 -0.057129 -0.054352 0.030823 0.030914 -0.038940 -0.106201 0.066956 0.067017 -0.128784 -0.073608 -0.108704 -0.027023 0.008163 -0.033203 -0.037262 0.099670 0.011559 0.071228 -0.101196 0.004795 0.039215 0.036346 0.027222 0.035645 -0.069580 0.132568 -0.030014 -0.012436 -0.035858 0.142700 0.025375 -0.016479 -0.040833 -0.080994 0.041870 0.080566 0.085266 -0.034790 -0.029236 -0.017975 -0.009163 -0.095093 -0.019943 0.075378 -0.046112 0.011345 -0.099609 0.024078 0.006474 -0.038025 -0.044189 -0.122864 -0.091187 0.049530 0.007278 -0.022949 0.006344 -0.008057 -0.038116 -0.102478 0.002180 -0.037537 0.007866 -0.029495 0.014854 -0.009705 -0.027756 -0.062317 0.004036 0.010361 -0.051056 0.080383 -0.055206 -0.060638 0.023163 0.025818 0.041382 0.056427 -0.074768 0.106201 -0.006535 0.064758 0.020340 0.057251 -0.039001 -0.022095 -0.048828 0.029251 0.071472 -0.145630 0.087036 0.087891 0.057617 -0.030777 -0.094482 -0.009369 -0.062103 0.020294 -0.082214 0.043518 -0.097473 -0.074524 -0.053589 0.062317 -0.023987 0.072327 0.097534 0.015335 -0.035492 0.032898 -0.085999 -0.084656 -0.129761 -0.114441 0.122986 0.009232 0.035553 0.067200 -0.107117 0.008217 -0.090027 -0.013176 0.027756 -0.096802 -0.003054 -0.094360 -0.022766 0.024231 -0.013062 0.070557 -0.068787 -0.111755 0.074219 -0.007309 -0.019913 0.071716 -0.003485 0.063599 -0.092041 0.043243 0.025131 0.024200 0.007641 0.015129 0.025406 0.037109 0.041077 0.004162 -0.000073 -0.096191 0.074219 0.094727 0.034485 -0.020905 -0.022400 0.011505 -0.029602 -0.164062 -0.012695 0.044708 0.082581 0.000236 0.022232 -0.060547 -0.148560 -0.067383 0.115906 0.025131 0.015236 0.132812 -0.032196 -0.074890 -0.108704 0.047485 0.080383 -0.023422 -0.043091 -0.026459 0.004879 0.038452 0.028244 0.049408 0.155884 -0.080688 -0.058075 -0.091797 -0.049011 -0.045288 0.043091 -0.057129 -0.071289 -0.020828 -0.111877 0.045868 0.049164 -0.078064 0.103577 0.021988 0.008766 0.025848 -0.068115 0.090698 0.010666 -0.097534 0.020340 -0.064087 0.013916 0.014030 0.028152 -0.022598 0.031250 -0.008415 0.029190
-0.030441 0.005058 0.003736 -0.004818 0.008118 0.096985 0.018341 -0.067200 0.010612 -0.053619 -0.017181 0.037933 -0.060028 0.036072 0.034363 -0.182373 0.043335 -0.019318 0.020920 0.009766 -0.067200 0.060699 -0.105591 -0.051727 0.033691 -0.022385 -0.025391 0.118958 0.124817 0.047699 0.091614 -0.082458 0.000361 -0.031342 -0.111145 -0.042297 -0.029236 0.038452 0.018753 0.126953 -0.002131 0.050598 0.008438 -0.015442 -0.060181 -0.014206 0.049469 -0.029404 -0.091919 0.042816 0.087585 -0.138794 -0.149658 -0.079407 0.062164 0.010269 0.006035 -0.005280 0.105347 -0.048035 0.001196 -0.037537 -0.078674 0.002470 -0.032532 0.033569 -0.037170 -0.007664 0.048492 0.004082 0.120117 -0.017624 0.123047 0.007038 0.052429 -0.041718 -0.149292 0.044525 0.076233 0.003391 -0.020981 0.015266 -0.016769 -0.036926 -0.110229 -0.059296 0.028687 0.039154 -0.043030 -0.059326 -0.048889 0.125366 0.021957 -0.019257 -0.051514 0.013672 0.085815 -0.073242 -0.067078 0.099426 0.035126 -0.103943 -0.011566 -0.005695 -0.020981 0.006992 -0.009209 -0.048584 -0.083679 -0.063538 -0.068848 0.015480 -0.006779 -0.018188 0.011452 -0.073669 -0.050995 0.074524 0.034821 -0.024933 0.024261 -0.074158 0.027603 -0.055420 0.067444 -0.088257 0.079346 -0.049316 0.046387 -0.036987 0.010139 -0.016724 -0.089539 0.004669 0.039642 0.001071 0.017685 -0.034424 0.014992 0.016037 -0.025009 -0.022125 0.036896 -0.012566 0.053253 0.020706 -0.007751 -0.012451 0.009453 0.021393 -0.002148 0.009537 0.059296 -0.013901 -0.087646 -0.083496 -0.011116 0.129272 -0.045410 0.111755 0.054626 -0.125732 -0.035095 0.016220 0.018311 0.075378 -0.085083 -0.075806 -0.038483 -0.097900 0.020401 -0.060760 0.042999 -0.119507 -0.114746 0.004990 0.052826 0.013725 -0.009201 0.002411 0.029800 -0.120300 0.001229 0.054596 -0.044495 0.089600 -0.075684 0.011383 0.147461 0.048065 -0.028366 -0.021164 -0.029358 0.043365 0.049347 0.010307 0.013489 -0.153198 0.065063 -0.019669 -0.122498 -0.100525 0.063416 0.086060 0.126953 0.063354 -0.119690 -0.050720 0.029678 0.063843 -0.088562 0.053070 0.082581 0.054230 -0.053223 -0.046875 -0.015472 0.056396 -0.095215 -0.023987 -0.035675 0.153564 0.037811 0.015076 0.050781 0.203491 -0.036346 0.012558 -0.077026 -0.020294 0.016495 0.039093 -0.032471 -0.068298 0.026428 -0.116089 0.037262 -0.019363 -0.107605 0.041992 0.031982 0.006493 0.079407 -0.032715 0.008957 -0.064087 -0.070190 -0.005875 -0.046356 -0.011818 0.012238 -0.006649 0.042694 0.026016 0.029388 -0.025711
-0.092346 -0.061859 0.064636 0.016190 -0.011208 0.003059 0.068542 -0.064453 0.013496 -0.043915 -0.048431 0.031158 -0.097961 0.120422 -0.042786 -0.114990 0.011200 -0.024490 0.009338 -0.086914 0.011444 0.110657 -0.107544 -0.040253 -0.025772 -0.068359 0.043457 0.115784 0.059052 0.003843 0.080750 -0.087585 -0.010796 0.095154 -0.152222 -0.011078 -0.019455 0.025848 0.030807 0.066284 -0.049011 0.060211 -0.004284 0.003906 -0.040344 0.035065 -0.052521 -0.053741 -0.217285 0.014046 0.092346 -0.060516 -0.149414 -0.086731 0.000065 -0.074951 -0.017395 -0.015144 0.084839 -0.031204 0.026169 -0.070251 -0.008286 0.018448 0.000338 0.052368 0.001972 -0.043304 0.000965 0.011864 -0.009834 -0.029297 0.119995 0.020721 0.074890 -0.076172 -0.049713 0.046906 0.098816 0.039948 -0.001049 0.071594 0.026825 0.052429 -0.119629 -0.061310 0.115723 -0.007202 0.045471 -0.112915 -0.034149 0.043427 0.029160 -0.096313 -0.090149 0.052307 0.022446 0.001012 -0.052155 0.026550 -0.001058 -0.058899 0.039612 0.019379 -0.092407 -0.004250 0.029648 -0.046906 0.025665 -0.051392 0.001493 -0.017776 0.023880 -0.007988 0.079834 -0.025040 0.068481 0.139160 0.024353 0.046783 0.066895 -0.016922 0.029785 0.022675 -0.041840 -0.034424 0.047394 -0.042328 0.024002 -0.029373 -0.047760 0.074402 -0.123169 0.013611 0.028534 0.021912 0.004181 -0.047729 0.066284 -0.021637 -0.021362 -0.022675 0.002602 0.002033 -0.020706 0.043579 0.047028 -0.091187 -0.038727 0.037994 0.066895 0.009323 0.011887 0.023148 -0.031464 -0.102661 -0.012566 0.066406 -0.057648 0.030640 -0.023041 -0.114258 -0.009094 -0.053162 0.001650 -0.064575 -0.081726 -0.088013 -0.054718 -0.113953 0.014565 -0.014565 -0.060303 -0.105469 -0.030869 0.078125 0.043793 -0.095825 -0.063477 0.011551 0.092163 -0.089539 -0.016647 0.005489 -0.018982 0.088928 -0.089966 -0.001853 0.119141 0.055603 -0.035339 0.009117 -0.070374 0.057343 0.004524 -0.003967 -0.017303 -0.021606 -0.013084 -0.061737 -0.143188 -0.038666 0.128418 0.087830 0.115479 0.020142 -0.037079 -0.045258 -0.066223 0.033051 0.007793 0.020187 0.104736 -0.111084 -0.053650 -0.087402 0.024872 0.106262 -0.098022 -0.046143 -0.006088 0.012596 0.028244 -0.070374 0.074646 0.058868 -0.057922 -0.090454 -0.065430 -0.051697 0.032928 0.086548 0.001606 -0.085693 0.001943 -0.119934 -0.020660 -0.091431 -0.033997 0.102417 -0.011475 0.062500 0.046112 -0.039032 -0.009071 -0.018570 -0.128418 0.020874 -0.115234 -0.080933 0.062439 -0.049377 0.030472 -0.003914 -0.037140 -0.040588
-0.076355 -0.016800 0.036438 0.028854 0.002865 0.054474 0.033936 -0.019562 -0.085815 -0.018036 0.072449 0.045715 -0.023636 0.152710 0.098694 -0.097290 0.036041 0.045135 0.005322 0.030441 0.025406 0.047180 -0.053864 -0.081421 -0.018188 -0.057922 0.024124 0.051941 0.100037 -0.002913 0.013496 -0.038910 -0.018417 0.018570 -0.050903 -0.023590 -0.018127 0.083008 -0.011833 0.071411 -0.028305 0.101807 0.005505 -0.056732 -0.102722 0.066467 0.056366 -0.026047 -0.124878 0.082947 0.089111 -0.154663 -0.112671 -0.086975 0.020599 0.007843 -0.033539 0.036743 0.097107 -0.039276 0.031586 -0.121643 -0.005344 -0.028152 0.036682 0.052155 0.078613 0.031799 0.070618 -0.007496 0.048370 -0.034149 0.193604 0.023758 -0.008118 -0.028992 -0.109985 -0.006493 0.164917 0.023331 -0.000519 0.056458 -0.052124 -0.003832 -0.124695 0.007481 0.064148 -0.017944 0.028625 -0.100952 -0.030792 0.009163 -0.050995 0.000345 -0.084778 -0.040527 0.061920 -0.038727 0.014633 -0.040192 0.049988 -0.006680 -0.030746 0.038177 -0.015480 0.072632 -0.030975 -0.027222 0.022049 -0.092163 -0.080200 -0.021240 -0.023605 0.016693 0.024307 -0.054413 0.017853 0.058228 0.075562 0.017059 0.073059 0.017578 0.039978 0.049713 0.045837 0.069641 0.042542 0.028198 -0.016846 -0.026123 0.018097 0.029572 -0.223877 0.010040 0.061279 0.043579 -0.025101 0.038605 0.033234 -0.029694 0.044525 -0.067383 0.005478 -0.037628 0.017868 0.032867 0.052155 0.035675 0.063965 0.071533 0.069519 -0.027802 0.058228 -0.122925 -0.040131 -0.121155 -0.086914 0.102844 0.056824 -0.023880 0.039032 -0.076782 0.036743 -0.033325 0.046204 0.080444 -0.067810 0.006123 -0.064453 -0.075562 0.088623 -0.045807 0.119629 -0.091064 -0.106445 0.028641 -0.013626 -0.088074 0.022858 0.001543 0.082764 -0.011200 0.044556 0.067261 0.019608 0.088562 -0.056946 0.054138 0.039703 0.007446 -0.032074 0.008430 -0.046478 0.042725 0.051880 -0.064697 0.018555 -0.060486 -0.072815 0.002707 -0.102783 -0.047546 0.096069 0.016891 0.034485 -0.026123 -0.061096 -0.137939 0.022781 0.075989 -0.053833 -0.043335 0.160645 -0.014679 -0.016495 -0.136353 -0.007889 0.056122 -0.040436 0.007717 -0.036865 0.084290 -0.015213 0.044525 0.021729 0.218018 0.036041 0.001776 -0.151123 -0.088745 -0.012070 -0.044098 0.052856 -0.006870 -0.026077 -0.043610 -0.022552 0.003536 0.000071 0.074646 0.037537 0.012733 0.017776 -0.066772 0.041382 -0.008270 -0.054871 0.074524 -0.066772 0.009590 0.010582 -0.029388 0.010422 -0.059753 -0.018417 0.008064
-0.061890 -0.039551 0.072510 -0.015511 0.042847 0.019516 -0.046082 0.015228 -0.013947 0.047913 -0.014160 -0.010521 -0.098694 0.078491 0.012909 -0.078613 -0.057953 -0.037445 0.031799 0.107178 0.027527 -0.050232 -0.031921 0.037231 0.100464 0.024445 0.056122 0.016693 0.075134 0.101685 0.070190 -0.120728 -0.038483 0.111023 -0.092773 0.026108 -0.032990 -0.021942 0.050201 0.047913 -0.060089 0.003527 -0.044312 -0.116333 -0.077087 -0.009789 0.050964 0.012131 -0.082458 -0.027512 0.048828 -0.073120 -0.050537 -0.054993 -0.039337 0.006485 0.033813 -0.044403 0.052673 -0.022385 0.003109 -0.012634 -0.098755 -0.123779 -0.000731 -0.027206 -0.019363 0.009132 0.045898 0.053589 0.172363 -0.001333 -0.080750 -0.008438 0.060913 -0.020782 -0.058441 -0.001517 0.061432 0.049561 -0.016602 -0.042450 0.025070 -0.029480 0.029434 0.042084 0.050079 0.020874 -0.114868 -0.091187 0.000793 0.045990 0.020386 -0.110413 -0.042023 -0.076721 0.097351 -0.014015 -0.027191 0.083679 0.023849 -0.059937 -0.091736 0.016815 -0.030197 -0.042236 -0.085510 0.012650 -0.048035 0.009407 -0.012695 -0.024567 -0.070312 -0.084961 -0.022934 -0.080505 -0.109253 0.009560 0.042236 -0.037720 -0.048889 -0.050812 0.082947 0.001262 0.121948 0.025162 0.053375 0.075134 0.063232 -0.030746 0.031708 0.023575 -0.141602 -0.008881 0.046997 0.014778 -0.003922 -0.119751 -0.084534 0.005833 0.062988 -0.020538 0.064087 -0.057983 -0.118713 0.016281 0.029434 0.035400 0.035858 -0.015129 -0.005802 -0.065979 -0.060730 0.037506 -0.082092 -0.061279 -0.049347 0.169922 0.149902 -0.029480 0.040497 -0.144043 -0.046204 0.073425 0.045685 -0.023788 0.088379 -0.002628 0.071533 -0.015152 0.046173 0.070679 0.044800 -0.018021 -0.015213 0.007294 -0.058594 0.105530 0.025711 0.013092 0.059204 -0.084229 -0.042694 0.044952 -0.045288 -0.046875 0.018646 -0.027054 0.055267 -0.051086 -0.028366 0.030670 -0.029022 0.052765 0.124939 -0.012573 0.014542 -0.194092 0.042480 -0.100708 -0.055206 -0.021896 -0.059662 0.031738 0.024445 0.081665 -0.138306 -0.085266 0.040588 0.123474 -0.028107 0.080322 0.064087 0.029160 -0.025192 -0.027786 0.099182 -0.021759 -0.067017 0.055969 -0.109253 0.036011 -0.052612 -0.092957 0.072937 0.065125 0.059021 0.042328 -0.077209 -0.008865 0.030518 -0.072327 -0.016037 -0.051849 0.057068 -0.058441 -0.091431 -0.005932 -0.033173 0.035828 -0.019562 -0.025238 0.066650 -0.149780 -0.008934 -0.024734 -0.121155 0.012817 0.050934 -0.069031 0.045990 0.090759 0.029129 -0.066284 -0.017639 -0.030655
0.037872 -0.030411 0.065491 -0.066345 0.024139 0.051453 -0.011505 -0.052368 -0.018646 -0.018967 -0.039948 -0.013763 -0.110840 -0.002972 0.040710 -0.152344 -0.006618 -0.011940 0.065369 0.066528 -0.067993 0.008232 -0.003304 -0.007904 0.069824 0.010941 0.038757 0.108032 0.134033 -0.013596 0.095947 -0.077698 -0.061462 -0.002569 -0.114319 -0.054199 -0.062500 0.033600 0.015038 0.089600 0.034149 0.042480 0.027206 -0.033569 -0.054871 0.042603 0.086609 -0.065857 -0.061584 -0.009270 0.024628 -0.060547 -0.132080 -0.053314 -0.036407 -0.022934 0.038116 -0.021759 0.113281 -0.002869 0.009758 -0.031982 -0.122864 0.013100 -0.060303 -0.017746 -0.027649 -0.060638 0.010231 0.004429 0.100769 -0.048828 0.103088 -0.045074 0.088928 -0.035858 -0.114136 0.036469 0.063965 0.004143 -0.080750 -0.056671 0.015053 -0.031677 -0.055664 -0.058228 0.051605 0.042633 -0.072327 -0.074036 0.002657 0.125000 0.036743 -0.105347 -0.089417 -0.078674 0.034515 -0.054657 -0.036621 0.098938 0.008148 -0.171143 -0.105408 -0.016830 -0.016663 -0.029755 -0.060333 -0.072876 -0.084900 -0.035278 -0.057831 -0.020462 -0.012711 -0.040741 -0.015053 -0.100525 -0.048462 0.040039 0.005207 -0.058594 0.099670 -0.020294 0.011292 -0.099731 0.118774 -0.036804 0.120728 -0.033630 0.038757 -0.015930 0.013008 -0.000036 -0.079956 0.065796 0.037048 0.011459 0.015190 -0.112305 0.018326 -0.006958 -0.057892 -0.019684 0.051422 -0.082703 -0.042389 0.031433 -0.001151 -0.032623 0.021286 -0.008308 -0.017868 -0.001355 0.021606 -0.021393 -0.038574 -0.099976 -0.036560 0.143066 0.021103 0.071045 0.039825 -0.143311 -0.088928 0.030731 0.036438 0.037109 -0.061005 -0.069885 -0.020508 -0.058624 0.058197 -0.012260 0.010788 -0.066345 -0.016037 0.055084 0.020248 0.001548 0.077209 0.036072 0.055481 -0.098816 -0.016815 0.036804 -0.059357 0.010712 -0.064697 -0.005898 0.134521 0.030975 0.008690 -0.077087 -0.083557 0.052856 0.035675 -0.033600 0.083252 -0.153809 0.060822 -0.056946 -0.127563 -0.045227 0.021759 0.111877 0.040833 0.119202 -0.075867 -0.058746 -0.049408 0.054718 -0.083435 0.075684 0.118408 0.003222 -0.116394 -0.032379 0.039673 0.064209 -0.088074 -0.017120 -0.059662 0.093079 0.047455 -0.004372 0.028259 0.137329 -0.011383 0.037750 -0.073547 -0.041901 0.039917 -0.003773 -0.031219 -0.058472 0.069214 -0.048431 0.069763 0.015198 -0.076538 0.026321 0.017822 -0.005577 -0.013290 -0.090820 0.050720 0.050995 -0.107361 0.006077 -0.009552 -0.030014 0.065002 0.085327 0.065552 0.002981 -0.033813 -0.028625
-0.112000 -0.065613 0.082397 0.127197 0.102661 -0.021759 -0.018616 0.000806 -0.097168 -0.024445 -0.131836 -0.011772 -0.074585 0.042389 0.028900 -0.165405 -0.037628 -0.101990 0.115723 0.052216 -0.024811 -0.036499 0.035461 0.026398 -0.021271 -0.016220 0.038788 0.046783 -0.000107 0.009521 0.014137 -0.018539 -0.013023 -0.060944 -0.085144 -0.096497 0.002235 -0.069214 -0.037323 0.013794 0.085083 0.070923 0.020340 0.006546 0.016235 0.058319 0.045502 -0.048981 -0.009430 -0.036346 0.018478 -0.010460 -0.131470 0.083862 0.058990 -0.028320 0.098511 -0.004219 0.037567 -0.082214 -0.033203 0.042023 -0.085693 0.028336 0.002293 0.010948 -0.093262 0.036774 0.012260 0.033905 0.065552 0.027908 0.088074 -0.054565 0.063171 -0.025040 -0.134399 -0.013298 0.005455 -0.010048 -0.062744 0.002703 0.018570 -0.053375 -0.060059 -0.143311 0.012718 0.046722 -0.038757 -0.058380 0.106995 0.052490 0.011658 0.010033 -0.065552 -0.020355 0.081421 -0.035675 -0.017548 0.032013 0.008171 -0.066833 -0.090759 -0.055969 0.042969 0.006832 -0.028152 -0.070923 -0.012566 0.035675 0.025070 -0.033051 0.073303 0.113037 0.043182 -0.100464 -0.025940 0.039398 0.017441 -0.059448 0.125244 -0.013748 0.009254 0.079346 0.009773 -0.012123 0.166260 -0.068298 0.095276 -0.022141 -0.040802 0.041168 -0.064270 0.054077 -0.022949 -0.036469 0.026581 -0.062347 0.052704 -0.036163 0.013634 -0.087769 -0.004974 -0.040863 0.011047 0.013107 0.020416 -0.007298 0.053528 0.078186 0.042328 -0.034332 0.008850 -0.012260 -0.035156 -0.032318 -0.062561 0.077759 -0.013229 0.052216 -0.063599 -0.081848 -0.079102 0.115051 0.049927 -0.043121 -0.110718 -0.041962 -0.002954 -0.017609 -0.002710 -0.095520 -0.025894 -0.061523 0.062866 0.042053 0.029160 -0.041412 -0.107605 0.005695 0.028992 -0.124939 -0.012680 0.046204 -0.041931 0.038971 -0.049103 -0.052094 0.080994 0.074280 0.051361 -0.002745 -0.009933 -0.055603 -0.032593 -0.047699 0.122009 -0.087891 -0.005188 0.027176 0.014091 -0.019974 0.121582 0.121704 0.045197 0.051239 0.006561 -0.096863 -0.064636 0.013847 -0.040802 0.015373 0.022644 -0.018265 0.069580 -0.025055 0.001861 0.037292 -0.105408 -0.105347 0.018784 0.102966 0.115417 -0.070984 0.057861 0.049438 0.004341 0.026627 -0.024338 0.012405 0.085449 0.068054 0.066895 0.031128 0.076477 -0.088562 0.147217 -0.004913 -0.142944 0.081543 0.153931 0.035553 0.015335 -0.113037 0.082947 0.016510 -0.079224 -0.075378 -0.063110 -0.022919 -0.018158 -0.044464 0.152710 0.003454 0.017349 -0.001744
0.024445 -0.004959 0.021393 -0.007038 0.014244 0.074524 0.087280 -0.074158 -0.004257 -0.042816 0.008919 0.074097 0.011314 0.064880 0.026398 -0.125732 0.051178 -0.037018 0.030655 0.028885 -0.038483 0.010880 -0.094116 -0.034302 0.013962 0.000459 -0.005886 0.045410 0.089294 0.038055 0.110413 -0.046112 0.016556 0.058228 -0.048676 -0.011101 -0.005836 0.056671 -0.025009 0.108276 0.068420 0.079407 0.059448 -0.010284 -0.090515 0.070129 0.059387 0.021088 -0.084473 0.063599 0.085022 -0.198242 -0.077820 -0.024704 0.015488 -0.002390 0.026215 0.020309 0.072449 -0.036804 0.087158 -0.026337 -0.109314 0.017731 -0.037506 0.050171 0.015884 -0.103271 0.043762 0.044067 0.088867 0.003057 0.150513 -0.020325 0.021378 -0.010582 -0.184204 0.064270 0.118286 0.029083 -0.025162 0.012474 -0.005775 0.002539 -0.150269 -0.047638 -0.024475 0.051086 0.048431 -0.082336 -0.033447 0.054291 -0.016647 -0.110657 -0.055267 -0.063782 0.085144 -0.040771 -0.091187 0.017014 0.044647 -0.067322 -0.015297 0.004799 0.058228 0.067993 -0.040314 -0.030045 -0.023438 -0.023712 -0.086121 -0.022034 -0.037598 -0.058044 0.024063 -0.082642 -0.068176 0.117676 0.034210 0.006729 0.025101 -0.037476 0.036438 -0.039001 0.127441 0.000664 0.119690 -0.011345 0.043243 -0.059113 -0.003496 0.019028 -0.125732 0.045990 0.013664 0.003201 -0.000055 -0.036713 0.017227 0.026199 0.005135 0.002310 -0.005512 -0.052521 -0.008881 0.005119 0.001591 -0.036407 0.068420 0.005283 -0.041870 -0.024521 0.038300 -0.035370 -0.042725 -0.119019 -0.025635 0.116638 -0.050873 0.085876 0.031952 -0.117920 -0.044861 -0.026932 0.025986 0.051727 -0.057159 -0.035522 -0.039948 -0.106384 0.017654 -0.041016 0.141357 -0.058533 -0.084656 0.055206 0.072571 0.005478 0.075867 0.033112 0.045471 -0.039124 0.062408 0.047638 0.040558 0.037048 -0.086182 -0.011314 0.137573 0.009262 0.058075 -0.042755 -0.089172 0.111877 0.013428 0.007027 0.003151 -0.131104 0.021729 0.026016 -0.153320 -0.007889 -0.002403 0.057526 0.087036 0.073120 -0.070068 -0.120117 0.033203 0.053223 -0.068420 0.003628 0.113342 0.041046 -0.008690 -0.084595 0.048889 0.066223 -0.025330 -0.031799 -0.041626 0.114441 -0.025009 0.099609 0.052368 0.190796 0.048645 0.016983 -0.124939 -0.060059 -0.013924 0.051483 -0.013954 -0.063416 0.027985 -0.086914 0.078979 0.045837 -0.071411 0.013458 0.019608 0.025742 -0.003618 -0.085388 0.065735 -0.031677 -0.074463 0.016113 0.011948 0.041656 0.004967 0.005054 0.012589 -0.005062 0.017532 -0.011566
0.029953 -0.013474 0.005219 0.002035 0.036438 0.116882 0.053589 -0.086487 0.025543 -0.071228 -0.028503 0.045746 -0.036041 -0.035278 0.020935 -0.167480 0.026062 -0.015396 0.001961 -0.016571 -0.115295 0.022934 -0.049438 -0.045227 0.035950 -0.010551 -0.011765 0.055298 0.073364 0.010277 0.121826 -0.084473 -0.006413 -0.003103 -0.108093 -0.085815 -0.040924 0.004807 0.010979 0.148926 0.074402 0.053284 0.072937 0.013420 -0.113464 0.037689 0.065918 -0.027008 -0.069885 0.004993 0.047455 -0.155396 -0.089783 -0.035217 0.047302 0.013351 0.044128 0.024063 0.055450 -0.080566 0.057281 0.025635 -0.116211 0.045532 -0.056000 0.022171 -0.012932 -0.075500 -0.013382 0.007359 0.054871 -0.044830 0.113159 -0.052612 0.022385 -0.042480 -0.135498 0.096924 0.050842 0.025711 -0.035339 -0.042694 -0.038208 0.014427 -0.136841 -0.105286 -0.008705 0.026199 0.026550 -0.054749 0.009018 0.073730 0.022873 -0.121338 -0.058472 -0.000524 0.051208 -0.042358 -0.086426 0.083374 0.025757 -0.103516 -0.008835 0.012268 0.010529 0.035583 -0.036377 -0.047058 -0.066467 -0.036163 -0.109863 0.006222 -0.008209 -0.089172 0.022842 -0.073303 -0.032593 0.131104 0.033112 -0.007282 0.062012 -0.097046 0.010574 -0.066833 0.108398 -0.062744 0.093872 -0.002075 0.072998 -0.005943 0.002975 -0.005527 -0.043213 0.004768 -0.013397 -0.006516 -0.014000 -0.061157 0.004002 0.005531 -0.055267 0.027863 0.025208 -0.070923 -0.024551 0.020645 -0.008316 -0.059326 0.021240 -0.007599 -0.040771 -0.024139 0.055939 -0.001364 -0.014488 -0.087219 0.006828 0.093262 -0.082947 0.124084 0.037567 -0.106873 -0.081299 -0.000940 0.010704 0.051056 -0.084412 -0.085449 -0.037170 -0.075928 0.038391 -0.093994 0.069702 -0.090210 -0.069641 0.078491 0.049774 0.012657 0.062744 0.009048 0.042297 -0.074707 0.005501 0.048553 -0.026596 0.038727 -0.088745 -0.021088 0.159058 0.035614 0.025772 -0.036469 -0.047668 0.050629 0.016006 0.010376 -0.012001 -0.133057 0.102722 -0.020599 -0.138794 -0.022644 0.027054 0.093872 0.096008 0.073120 -0.069092 -0.106201 -0.017929 0.072937 -0.075562 0.045990 0.088806 0.055054 -0.065125 -0.041687 0.008331 0.059509 -0.088562 -0.004913 -0.044037 0.125488 0.007214 0.046326 0.055695 0.166382 -0.024643 0.035248 -0.120117 -0.051453 -0.011063 0.034363 -0.034760 -0.066223 0.013374 -0.056030 0.101868 -0.005829 -0.125488 0.024704 0.035126 -0.002274 0.052002 -0.053436 0.063904 -0.032135 -0.082581 -0.023102 0.028015 0.003983 0.021683 0.001993 0.084351 0.007034 0.012581 -0.039917
-0.087769 0.036560 -0.014854 -0.026093 0.032013 0.087830 -0.023117 -0.024857 -0.040527 -0.076050 0.055786 0.048889 -0.098328 0.078857 0.061951 -0.124268 0.045410 0.056091 -0.023148 -0.006985 -0.083801 0.085632 -0.086304 -0.098145 0.065735 -0.033936 -0.003508 0.066345 0.118591 -0.011742 0.038269 -0.028809 0.005920 -0.010269 -0.085266 -0.078186 -0.106689 0.024307 0.035065 0.133667 -0.021729 0.058624 -0.034790 -0.043762 -0.120056 -0.024948 0.032166 -0.018829 -0.130737 0.033630 0.086975 -0.145508 -0.110291 -0.122253 0.049194 0.072693 0.013710 -0.004509 0.120789 -0.035492 0.021652 -0.049286 0.016449 -0.037872 0.042084 0.098328 0.041840 0.028641 0.025024 0.030563 0.123596 -0.035248 0.113708 0.035736 0.019577 -0.022858 -0.091431 0.013084 0.095642 0.081726 -0.005825 0.030334 -0.060547 0.045776 -0.072571 -0.017334 0.081848 -0.014679 -0.002552 -0.061462 -0.085205 0.064575 0.017456 0.021927 -0.078613 0.030411 0.088013 -0.048950 -0.029282 0.039398 0.013512 -0.074646 0.020996 0.023804 -0.108582 -0.049500 0.018555 -0.020584 -0.031799 -0.078857 -0.075745 0.013847 -0.082397 -0.034393 -0.004452 -0.054504 -0.010002 0.092712 0.093872 -0.025604 0.054260 -0.073547 0.054626 -0.010284 0.032959 -0.068420 -0.044983 0.047974 0.012131 0.038391 0.040283 -0.004875 -0.103577 0.010002 0.095154 0.051270 -0.063538 0.004436 0.007282 -0.019165 -0.056183 -0.030655 0.060638 -0.050812 -0.026428 0.063110 0.013168 0.007820 -0.023697 0.053162 0.095947 -0.009369 0.035278 0.011040 -0.078308 -0.113525 -0.034821 0.108521 0.022324 0.054718 0.066956 -0.073547 0.028915 0.010056 0.007179 0.112854 -0.019485 0.001120 -0.038330 -0.081299 0.088074 -0.061768 0.010460 -0.090271 -0.100586 -0.001813 -0.009277 -0.035065 -0.006092 -0.000404 0.045380 -0.028732 0.018387 0.068726 -0.064453 0.147095 -0.012383 0.081299 0.068420 -0.037445 -0.078491 0.038208 -0.049896 0.021713 0.067261 -0.015533 0.026550 -0.064331 0.056641 -0.019501 -0.101318 -0.057007 0.086731 -0.001513 0.119324 0.042389 -0.153076 -0.031921 0.099487 0.073486 -0.041077 0.077759 0.076721 -0.029739 -0.042633 -0.016678 -0.019562 0.003281 -0.037598 0.026978 -0.038055 0.091553 0.005447 0.023407 0.046204 0.220337 -0.022858 0.016800 -0.130127 -0.016876 0.007256 -0.073120 0.004986 -0.063416 -0.050507 -0.079773 0.054016 -0.091248 -0.055267 0.059845 0.008247 -0.015854 0.132935 0.005527 0.018799 -0.061218 -0.043396 -0.028030 -0.105957 0.017517 0.067932 -0.042023 0.046173 -0.028458 0.005692 0.008682
-0.033905 -0.010063 0.010475 0.028061 0.000831 0.092346 0.066772 -0.061890 -0.022461 -0.038391 -0.023987 0.047791 -0.089417 0.077515 0.033020 -0.158936 0.044373 -0.005390 0.007298 -0.049622 -0.062805 0.061127 -0.090576 -0.058411 0.037201 0.019714 0.006535 0.118103 0.107910 0.011147 0.113403 -0.028152 -0.020752 0.012268 -0.110291 -0.040619 -0.012619 0.035553 -0.012932 0.143921 0.011864 0.072144 0.002089 -0.005554 -0.071960 0.014870 0.002523 -0.054810 -0.154053 0.034454 0.084351 -0.159912 -0.133545 -0.073669 0.024261 -0.016525 -0.007549 0.012573 0.112671 -0.079712 0.030670 -0.025208 -0.060913 0.046600 -0.009300 0.039520 -0.031311 -0.053864 0.025101 0.031891 0.083862 -0.068115 0.095703 0.016052 0.045746 -0.037903 -0.137329 0.057800 0.126465 0.035156 -0.046997 -0.015930 -0.025940 0.052124 -0.133911 -0.069824 0.032745 0.047363 0.007706 -0.090759 -0.049957 0.089966 0.001418 -0.070557 -0.063416 0.007286 0.063965 -0.045227 -0.076355 0.038208 0.022064 -0.095642 -0.025391 0.036377 -0.030136 0.032959 -0.002844 -0.034363 -0.035461 -0.058136 -0.062866 0.012177 -0.004219 -0.051819 0.014893 -0.086060 -0.031128 0.113525 0.061066 0.003689 0.021027 -0.069519 0.004791 -0.038544 0.037201 -0.074158 0.051666 -0.062927 0.051819 -0.039001 -0.019623 0.018753 -0.079712 0.026642 0.030151 -0.007431 0.034454 -0.016739 0.032898 0.012856 -0.035248 -0.051880 0.009262 -0.056061 0.019958 0.022934 0.042877 -0.031586 0.013885 0.030228 0.005589 0.012245 0.030975 -0.014542 -0.069641 -0.114502 0.013329 0.107056 -0.059784 0.109802 0.022842 -0.117126 -0.031433 -0.059418 0.014366 0.057556 -0.075073 -0.085999 -0.051727 -0.103638 0.021164 -0.058899 0.034485 -0.107117 -0.113586 0.062134 0.058411 -0.043884 0.016235 0.033386 0.058685 -0.120605 0.006039 0.044220 -0.026627 0.105652 -0.097778 0.000656 0.133057 0.043579 0.002386 -0.000733 -0.081299 0.048187 0.020477 0.022964 -0.022614 -0.089478 0.054169 0.027222 -0.121887 -0.010696 0.054169 0.060516 0.083984 0.054321 -0.092896 -0.102966 -0.025711 0.049805 -0.069092 0.072083 0.113281 -0.028076 -0.065979 -0.103699 0.019089 0.085693 -0.073120 -0.026154 -0.057983 0.112488 0.046417 0.002396 0.048737 0.194580 -0.052795 -0.022827 -0.119019 -0.047028 -0.002781 0.034302 0.004517 -0.045349 -0.025986 -0.120300 0.070129 -0.039703 -0.109863 0.063782 0.016815 0.006935 0.052399 -0.022034 0.068359 -0.034088 -0.101135 0.008308 -0.055573 0.016754 0.015465 -0.000374 0.007195 -0.009209 -0.002911 -0.021408
-0.043091 -0.074707 0.030762 0.044189 0.068420 0.064697 0.070557 -0.066711 0.023422 -0.018509 -0.068115 0.015182 0.015259 -0.031021 0.004971 -0.173340 -0.047028 -0.085815 -0.002056 -0.055786 -0.067444 0.063293 -0.015465 -0.020035 0.030167 -0.042603 -0.023300 0.080322 0.056793 0.006626 0.108521 -0.078430 -0.032959 0.001125 -0.131714 -0.067383 -0.053436 -0.029114 0.023041 0.051941 0.024460 0.018204 0.018951 0.028656 -0.114868 0.057922 0.021469 -0.083435 -0.149658 -0.013062 0.002634 -0.074219 -0.098755 -0.028625 -0.016525 0.002815 0.051331 0.014877 0.036224 -0.028854 0.029007 -0.013840 -0.087097 0.013306 -0.050018 -0.002832 -0.003235 -0.139893 -0.032013 -0.032379 -0.026428 -0.041199 0.093018 -0.061249 0.011299 -0.043488 -0.068909 0.066772 0.039917 0.016357 -0.031982 -0.050903 0.030884 -0.006672 -0.155518 -0.059631 0.021103 -0.055878 0.049042 -0.136841 0.058929 0.076721 -0.021622 -0.182251 -0.069580 -0.034363 0.028671 -0.032654 -0.035553 0.047241 -0.015701 -0.119263 -0.038696 -0.027405 -0.034515 0.028381 -0.032013 -0.031494 0.001493 0.000972 -0.043457 0.012154 0.006317 -0.078064 -0.001413 -0.044128 -0.005516 0.138794 -0.003353 -0.024109 0.081909 0.020981 0.002401 0.013618 0.064697 0.018433 0.130615 -0.029724 0.027985 -0.014122 -0.015076 0.014168 -0.069763 0.021881 -0.057343 -0.018723 -0.013161 -0.102844 0.002810 -0.068542 -0.075195 0.033783 0.019791 -0.076599 -0.082825 0.070618 0.046234 -0.102051 -0.022705 0.054321 -0.025116 -0.003193 0.033783 0.020203 0.003263 -0.080505 -0.028366 0.029434 -0.066040 0.090759 -0.017670 -0.090271 -0.055359 -0.022873 0.026093 0.003563 -0.091675 -0.077026 -0.012459 -0.096680 0.018005 -0.052368 0.018585 -0.139160 -0.061554 0.139038 0.042145 -0.051941 0.045349 -0.013756 0.051697 -0.088867 -0.030624 0.006317 -0.030533 0.047272 -0.082031 -0.050598 0.115112 0.030975 0.045471 -0.038574 -0.118958 0.009911 -0.013443 -0.020813 0.036499 -0.113037 0.054443 -0.031128 -0.144897 -0.019470 0.033966 0.141113 0.071655 0.030624 0.018234 -0.082947 -0.068115 0.085388 -0.046967 0.022537 0.127686 -0.006241 -0.070862 -0.053101 -0.033081 0.125366 -0.101135 -0.025787 -0.065186 0.108337 0.043793 -0.034058 0.087830 0.066711 -0.067688 -0.030396 -0.114014 -0.064880 -0.030090 0.061493 -0.038361 -0.081726 0.008476 -0.071838 0.104797 -0.027725 -0.072205 0.060272 0.018280 -0.041992 0.053253 -0.085815 0.059601 0.029129 -0.146851 -0.035278 -0.010963 -0.057373 0.040222 0.020554 0.108521 0.056427 -0.013786 -0.013420
-0.039215 -0.067261 0.094055 -0.064087 0.059204 -0.040588 -0.004719 -0.043976 -0.040375 0.006104 -0.084229 -0.029160 -0.164185 0.001306 0.024918 -0.141968 -0.058075 -0.036530 0.089294 0.020020 -0.039429 0.009346 0.022797 0.000039 0.045959 -0.077148 0.057648 0.022858 0.077393 -0.075012 0.054077 -0.072083 -0.042786 0.010666 -0.177368 -0.047852 -0.090759 -0.008438 0.018585 0.064026 0.038452 0.020096 0.077148 -0.079285 -0.039581 0.061005 0.077576 -0.025085 -0.065613 -0.094971 0.011909 0.048462 -0.112488 -0.000763 -0.017792 -0.027252 0.058228 -0.030045 0.029221 -0.021332 0.008820 -0.056274 -0.120544 -0.008987 -0.070496 0.001659 0.014915 -0.063232 -0.118469 0.045441 0.052368 -0.028946 0.052734 -0.067017 0.122498 -0.068542 -0.069641 0.016251 0.082214 -0.012611 -0.082092 -0.028564 0.052734 0.062256 0.025452 -0.066101 0.062866 0.030960 -0.004002 -0.079895 0.003546 0.091309 0.051483 -0.108765 -0.112549 -0.041412 -0.020218 -0.046265 -0.027588 0.148315 -0.014610 -0.169067 -0.013329 -0.013206 -0.105103 -0.082336 -0.026978 -0.146606 -0.031464 -0.043732 -0.024704 -0.042877 0.009636 0.002218 0.044769 -0.041443 0.087524 0.066895 -0.008499 -0.061340 0.165283 0.025574 -0.020477 -0.053375 0.052490 0.004951 0.055481 0.045013 0.047241 0.031494 -0.040131 -0.001564 -0.050476 0.064880 0.008156 0.017136 -0.073730 -0.138916 0.030197 -0.003706 -0.076477 0.003685 0.006142 -0.031616 -0.073914 0.134155 -0.013878 -0.037811 -0.032990 -0.037109 0.002953 -0.051514 0.000969 0.029892 0.021820 -0.051971 -0.006363 0.112793 0.029617 0.013397 0.036743 -0.077454 -0.070007 0.090759 0.009613 -0.065186 -0.046967 -0.044037 0.014175 -0.028412 0.096252 -0.030090 -0.072571 -0.059479 0.109558 0.024170 0.024841 -0.001913 0.044861 0.033081 0.063354 -0.066040 -0.055328 0.026306 -0.077393 0.016174 -0.059357 0.000043 0.123230 -0.007015 -0.043549 -0.053009 -0.068298 0.030396 -0.021835 -0.059265 0.101685 -0.119019 0.038910 -0.106201 -0.064331 -0.011925 0.016785 0.110779 0.070557 0.111938 -0.042145 -0.030884 -0.067566 0.029221 -0.007294 0.128784 0.121887 -0.074097 -0.081421 0.020447 0.013786 0.037659 -0.068787 -0.013481 -0.035614 0.033630 0.006725 -0.046417 0.061432 0.023666 0.006065 -0.009491 -0.026978 -0.022049 0.107727 -0.006538 0.009056 -0.015793 0.110046 -0.008354 0.036865 -0.082458 -0.034393 0.011353 -0.011482 -0.016418 0.030472 -0.069458 0.033051 0.090698 -0.068787 0.010857 -0.011711 -0.089050 0.087891 -0.033722 0.123901 -0.053345 -0.069336 -0.062683
-0.112854 -0.025482 0.005482 0.020279 0.059692 -0.042267 0.031586 -0.048950 -0.040253 -0.008797 -0.152100 -0.019165 -0.092712 0.010941 0.067322 -0.196411 -0.033844 -0.128418 0.088440 -0.000941 -0.011795 0.060852 -0.057220 -0.080078 0.030167 -0.071960 0.015747 0.114380 0.041992 -0.030792 0.071228 -0.067261 -0.022034 -0.100281 -0.171021 -0.104553 -0.062744 -0.014526 0.041565 0.075012 0.055084 0.038727 0.058868 -0.008957 -0.048981 0.021347 0.071350 -0.002934 -0.083008 -0.048096 0.058441 0.016479 -0.157471 0.041962 0.062988 0.012779 0.034943 0.006897 0.017471 -0.050293 -0.016953 0.004257 -0.076538 -0.017776 -0.031067 -0.000585 -0.045929 -0.025711 -0.016251 -0.004734 0.053497 0.028519 0.076660 -0.033356 0.027313 -0.052063 -0.125488 -0.010010 0.077148 -0.005856 -0.081116 0.015457 0.038208 -0.011597 -0.062988 -0.092346 0.008179 0.033844 -0.002117 -0.068359 0.028885 0.069336 0.012299 -0.041962 -0.082153 0.001546 0.020584 -0.035828 -0.025558 0.138916 0.010719 -0.124268 -0.024048 -0.078857 -0.009933 0.028809 0.010895 -0.094849 -0.002447 -0.027924 0.041931 0.009644 0.069641 0.064941 0.050018 -0.048584 0.053802 0.081238 0.006062 -0.069580 0.112488 -0.035706 -0.007183 -0.000055 -0.043152 -0.015388 0.080627 -0.061707 0.012703 -0.020157 -0.009735 -0.017563 -0.061432 0.052826 -0.030060 -0.027008 0.017593 -0.034180 0.079041 -0.005634 -0.054993 0.007370 -0.028214 -0.054626 0.047760 0.097351 0.009506 0.006466 -0.007553 0.018219 0.018982 0.004433 0.056000 0.005699 -0.029144 -0.038330 -0.012337 0.068604 -0.049377 0.138794 0.038452 -0.048859 -0.057190 0.119629 -0.011131 -0.016388 -0.085999 -0.041748 -0.026672 -0.086365 -0.005589 -0.055542 -0.055328 -0.126465 -0.010002 -0.000075 0.053864 -0.018692 -0.035675 0.012138 0.006001 -0.150146 -0.037598 0.029358 -0.077698 0.111450 -0.063232 -0.025040 0.106018 0.013931 -0.026550 -0.011070 -0.001914 0.011086 -0.045319 -0.014580 0.110291 -0.079956 0.046265 -0.014252 -0.047577 -0.076416 0.076904 0.119873 0.131226 0.067993 -0.004433 -0.053619 -0.027161 0.069031 0.002426 0.054901 0.091003 -0.032990 -0.026718 0.008980 -0.078064 0.097534 -0.083130 -0.061493 -0.047638 0.164429 0.107849 -0.063660 0.074524 0.083435 -0.049347 -0.061462 -0.059631 0.017822 0.106140 0.058350 0.019424 -0.014931 0.043335 -0.115051 0.099854 -0.094849 -0.084900 0.024323 0.053223 -0.014671 0.043610 -0.033905 0.098694 0.012497 -0.041504 -0.034546 -0.106934 -0.053223 0.045807 -0.100769 0.110535 0.067444 -0.041168 -0.007671
0.017929 -0.018723 -0.028030 -0.025391 -0.024414 0.104248 0.000623 -0.090576 0.012886 -0.088074 -0.033875 0.031174 -0.089233 0.002180 0.017212 -0.142944 0.062256 0.000796 -0.041046 -0.027954 -0.096313 0.043091 -0.066956 -0.069275 0.053711 0.016785 0.011047 0.129639 0.107422 0.004948 0.141479 -0.057739 -0.037903 -0.012688 -0.108948 -0.051483 -0.035034 0.022781 0.030731 0.154053 -0.013000 0.054474 0.030518 0.028152 -0.082092 0.015396 0.034088 -0.048859 -0.096619 0.042938 0.058502 -0.138428 -0.170166 -0.067566 0.056458 -0.012047 0.028152 -0.009102 0.133301 -0.045746 0.004971 -0.000458 -0.037506 0.070374 -0.028275 -0.009819 -0.040436 -0.026962 0.068970 -0.034058 0.070068 -0.070984 0.132202 -0.013420 0.021973 -0.052765 -0.103882 0.072327 0.060364 0.022430 -0.001070 -0.031494 -0.021042 -0.002335 -0.120117 -0.080688 0.014008 0.025497 -0.028107 -0.007694 -0.004406 0.115601 0.030579 -0.062622 -0.068481 0.046753 0.018555 -0.059967 -0.034088 0.076965 0.049377 -0.135620 -0.026871 -0.005478 -0.021561 0.064209 0.002422 -0.012718 -0.115234 -0.056885 -0.036591 0.015289 -0.011833 -0.022507 0.001439 -0.073853 -0.038391 0.088257 0.024506 -0.002724 0.050873 -0.104797 -0.018936 -0.078918 0.032776 -0.081909 0.076416 -0.085388 0.011993 -0.019592 0.017456 0.025284 -0.053833 0.039703 0.056122 -0.031097 0.040771 -0.040741 0.060303 0.008430 -0.068237 0.038300 0.034637 -0.087036 0.021988 0.003504 -0.006550 -0.035339 0.009674 -0.004513 0.029251 0.043396 0.049835 -0.022720 -0.046173 -0.121399 -0.010719 0.112610 -0.057343 0.103699 0.038666 -0.120850 -0.086792 -0.016953 0.029556 0.070862 -0.096436 -0.106140 -0.059906 -0.092346 0.007980 -0.026062 0.008110 -0.095581 -0.107666 0.038788 0.058289 0.006073 0.033997 0.066467 0.055206 -0.080505 0.024368 0.040283 -0.058960 0.023438 -0.107239 0.017838 0.144287 0.062073 0.005550 -0.036774 -0.038910 -0.003952 -0.001529 0.014221 -0.024261 -0.099182 0.055969 -0.010254 -0.140259 -0.009117 0.089600 0.045227 0.080200 0.082581 -0.085815 -0.054718 -0.025909 0.009064 -0.076782 0.021667 0.086670 -0.027649 -0.095337 -0.069458 0.016449 0.102173 -0.077820 -0.062378 -0.053497 0.096436 0.087646 0.025070 0.020370 0.190552 -0.091797 0.025452 -0.078735 -0.017929 0.026031 0.049042 -0.031311 -0.075256 -0.015388 -0.050415 0.075134 -0.027069 -0.144165 0.044617 0.023788 0.020142 0.003881 0.007057 0.047974 -0.027649 -0.059631 -0.002188 -0.046631 0.020798 0.024246 0.027603 0.028336 0.039246 -0.015083 -0.034363

BIN
practice/data_.bin Normal file

Binary file not shown.

90
practice/json_to_data.py Normal file
View File

@ -0,0 +1,90 @@
# -*- coding: utf-8 -*-
"""
Created on Wed Dec 18 15:44:33 2024
@author: ieemoo-zl003
"""
import json
import struct
import numpy as np
json_path = r"D:\DetectTracking\practice\resv11_test.json"
def write_binary_file(filename, datas):
with open(filename, 'wb') as f:
# 先写入数据中的key数量为C++读取提供便利)
key_count = len(datas)
f.write(struct.pack('I', key_count)) # 'I'代表无符号整型4字节
feats_32, feats_16 = [], []
for data in datas:
key = data['key']
feats = data['value']
key_bytes = key.encode('utf-8')
key_len = len(key)
length_byte = struct.pack('<B', key_len)
f.write(length_byte)
# f.write(struct.pack('Q', len(key_bytes)))
f.write(key_bytes)
value_count = len(feats)
f.write(struct.pack('I', (value_count * 256)))
# 遍历字典写入每个key及其对应的浮点数值列表
for values in feats:
# 写入每个浮点数值(保留小数点后六位)
feat16 = []
for value in values:
# 使用'f'格式单精度浮点4字节并四舍五入保留六位小数
value_half = np.float16(value)
# print(value_half.tobytes())
f.write(value_half.tobytes())
feat16.append(value_half)
feats_16.append(feat16)
feats_32.append(values)
feats16 = np.array(feats_16)
feats32 = np.array(feats_32)
print("Done")
def main_xh():
# 1. 打开JSON文件
with open(json_path, 'r', encoding='utf-8') as file:
# 2. 读取并解析JSON文件内容
data = json.load(file)
for flag, values in data.items():
# 逐个写入values中的每个值保留小数点后六位每个值占一行
write_binary_file(r"D:\DetectTracking\practice\data_.bin", values)
'''
with open('D://07Test/全实时/output.txt', 'w', encoding='utf-8') as txt_file:
for flag, values in data.items():
# 逐个写入values中的每个值保留小数点后六位每个值占一行
for value in values:
key = value['key']
feats = value['value']
# 写入key
txt_file.write(key)
txt_file.write("\n")
for feat in feats:
for number in feat:
# 使用格式化字符串保留六位小数,并写入文件
txt_file.write(f"{number:.6f} ")
txt_file.write("\n")
'''
def main_wang():
pass
if __name__ == "__main__":
main_xh()

Binary file not shown.

Binary file not shown.

View File

@ -9,11 +9,10 @@ import numpy as np
# from matplotlib.pylab import mpl # from matplotlib.pylab import mpl
# mpl.use('Qt5Agg') # mpl.use('Qt5Agg')
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from move_detect import MoveDetect
import sys import sys
sys.path.append(r"D:\DetectTracking") sys.path.append(r"D:\DetectTracking")
from move_detect import MoveDetect
# from tracking.utils.read_data import extract_data, read_deletedBarcode_file, read_tracking_output, read_weight_timeConsuming # from tracking.utils.read_data import extract_data, read_deletedBarcode_file, read_tracking_output, read_weight_timeConsuming
from tracking.utils.read_data import read_weight_timeConsuming from tracking.utils.read_data import read_weight_timeConsuming
@ -124,25 +123,28 @@ def devide_motion_state(tboxes, width):
''' '''
periods = []
if len(tboxes) < width:
return periods
fboxes, frameTstamp = array2frame(tboxes) fboxes, frameTstamp = array2frame(tboxes)
fnum = len(frameTstamp) fnum = len(frameTstamp)
if fnum < width: return periods
state = np.zeros((fnum, 2), dtype=np.int64) state = np.zeros((fnum, 2), dtype=np.int64)
frameState = np.concatenate((frameTstamp, state), axis = 1).astype(np.int64) frameState = np.concatenate((frameTstamp, state), axis = 1).astype(np.int64)
handState = np.concatenate((frameTstamp, state), axis = 1).astype(np.int64) handState = np.concatenate((frameTstamp, state), axis = 1).astype(np.int64)
if fnum < width:
return frameState, handState
mtrackFid = {} mtrackFid = {}
handFid = {} handFid = {}
'''frameState 标记由图像判断的购物车状态0: 静止1: 运动''' '''frameState 标记由图像判断的购物车状态0: 静止1: 运动'''
for idx in range(width, fnum+1): for idx in range(width, fnum+1):
idx0 = idx-width idx0 = idx-width
# if idx == 40:
# print("123")
lboxes = np.concatenate(fboxes[idx0:idx], axis = 0) lboxes = np.concatenate(fboxes[idx0:idx], axis = 0)
md = MoveDetect(lboxes) md = MoveDetect(lboxes)
md.classify() md.classify()

View File

@ -9,9 +9,10 @@ import sys
import numpy as np import numpy as np
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from datetime import datetime from datetime import datetime
from contrast.utils.event import ShoppingEvent
sys.path.append(r"D:\DetectTracking") sys.path.append(r"D:\DetectTracking")
from contrast.utils.event import ShoppingEvent
from tracking.utils.read_data import read_weight_sensor, extract_data_realtime, read_tracking_output_realtime from tracking.utils.read_data import read_weight_sensor, extract_data_realtime, read_tracking_output_realtime
from tracking.utils.read_data import read_process from tracking.utils.read_data import read_process

420
realtime/intrude_detect.py Normal file
View File

@ -0,0 +1,420 @@
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Tue Apr 8 10:07:17 2025
@author: wqg
"""
import csv
import os
import platform
import sys
import pickle
import cv2
import numpy as np
from pathlib import Path
import matplotlib.pyplot as plt
import matplotlib.pyplot as plt
from typing import List, Tuple
from scipy.spatial.distance import cdist
from scipy.spatial import ConvexHull
from shapely.geometry import Point, Polygon
##################################################### for method: run_yrt()
FILE = Path(__file__).resolve()
ROOT = FILE.parents[1]
if str(ROOT) not in sys.path:
sys.path.insert(0, str(ROOT))
from track_reid import yolov10_resnet_tracker
from event_time_specify import devide_motion_state
def cross(o: Tuple[float, float], a: Tuple[float, float], b: Tuple[float, float]) -> float:
""" 计算向量 OA × OB 的叉积 """
return (a[0] - o[0]) * (b[1] - o[1]) - (a[1] - o[1]) * (b[0] - o[0])
def compute_convex_hull(points: List[Tuple[float, float]]) -> List[Tuple[float, float]]:
""" 使用 Andrew's Monotone Chain 算法求二维点集的凸包 """
points = sorted(set(points)) # 排序并去重
if len(points) <= 1:
return points
lower = []
for p in points:
while len(lower) >= 2 and cross(lower[-2], lower[-1], p) <= 0:
lower.pop()
lower.append(p)
upper = []
for p in reversed(points):
while len(upper) >= 2 and cross(upper[-2], upper[-1], p) <= 0:
upper.pop()
upper.append(p)
# 去掉重复的连接点
return lower[:-1] + upper[:-1]
def is_point_in_convex_hull(point: Tuple[float, float], hull: List[Tuple[float, float]]) -> bool:
""" 判断一个点是否在凸包(含边界)内 """
n = len(hull)
if n < 3:
# 对于点或线段,直接判断是否共线或在线段上
if n == 1:
return point == hull[0]
if n == 2:
a, b = hull
return abs(cross(a, b, point)) < 1e-10 and min(a[0], b[0]) <= point[0] <= max(a[0], b[0]) and min(a[1], b[1]) <= point[1] <= max(a[1], b[1])
return False
for i in range(n):
a = hull[i]
b = hull[(i + 1) % n]
if cross(a, b, point) < -1e-10: # 必须全部在左边或边上
return False
return True
def plot_convex_hull(points: List[Tuple[float, float]], hull: List[Tuple[float, float]], test_points: List[Tuple[float, float]] = None):
x_all, y_all = zip(*points)
fig, ax = plt.subplots()
ax.set_xlim(0, 1024)
ax.set_ylim(1280, 0)
ax.plot(x_all, y_all, 'o', label='Points')
# 凸包闭环线
hull_loop = hull + [hull[0]]
hx, hy = zip(*hull_loop)
ax.plot(hx, hy, 'r-', linewidth=2, label='Convex Hull')
# 如果有测试点
if test_points:
for pt in test_points:
color = 'green' if is_point_in_convex_hull(pt, hull) else 'black'
ax.plot(pt[0], pt[1], 's', color=color, markersize=8)
ax.text(pt[0] + 0.05, pt[1], f'{pt}', fontsize=9)
ax.legend()
ax.grid(True)
plt.title("Convex Hull Visualization")
plt.show()
def convex_scipy():
points = np.array([
[0, 0],
[2, 0],
[1, 1],
[2, 2],
[0, 2],
[1, 0.5]])
hull = ConvexHull(points)
# 凸包顶点的索引
print("凸包顶点索引:{}".format(hull.vertices))
print("凸包顶点坐标:")
for i in hull.vertices:
print(points[i])
# 将凸包坐标构造成 Polygon
hull_points = points[hull.vertices]
polygon = Polygon(hull_points)
# 判断一个点是否在凸包内
p = Point(1, 1) # 示例点
print("是否在凸包内:", polygon.contains(p)) # True or False
def test_convex():
# 测试数据
sample_points = [(0, 0), (1, 1), (2, 2), (2, 0), (0, 2), (1, 0.5)]
convex_hull = compute_convex_hull(sample_points)
# 测试点在凸包内
test_point_inside = (1, 1)
test_point_outside = (3, 3)
test_point_on_edge = (1, 0)
inside = is_point_in_convex_hull(test_point_inside, convex_hull)
outside = is_point_in_convex_hull(test_point_outside, convex_hull)
on_edge = is_point_in_convex_hull(test_point_on_edge, convex_hull)
convex_hull, inside, outside, on_edge
# 展示图像
plot_convex_hull(sample_points, convex_hull, [test_point_inside, test_point_outside, test_point_on_edge])
def array2frame(tboxes):
"tboxes: [x1, y1, x2, y2, track_id, score, cls, frame_index, box_index]"
idx = np.where(tboxes[:, 6] != 0)[0]
bboxes = tboxes[idx, :]
frameID = np.sort(np.unique(bboxes[:, 7].astype(int)))
fboxes = []
for fid in frameID:
idx = np.where(bboxes[:, 7] == fid)[0]
box = bboxes[idx, :]
fboxes.append(box)
return fboxes
def convex_based(tboxes, width, TH=40):
fboxes = array2frame(tboxes)
fnum = len(fboxes)
fids = np.array([i+1 for i in range(fnum)])[:, np.newaxis]
state = np.zeros((fnum, 1), dtype=np.int64)
frameState = np.concatenate((fids, state), axis = 1).astype(np.int64)
if fnum < width:
return frameState
for idx1 in range(width, fnum+1):
idx0 = idx1 - width
idx = idx1 - width//2 - 1
iboxes = fboxes[:idx]
cboxes = fboxes[idx][:, 0:4]
cur_xy = np.zeros((len(cboxes), 2))
cur_xy[:, 0] = (fboxes[idx][:, 0]+fboxes[idx][:, 2])/2
cur_xy[:, 1] = (fboxes[idx][:, 1]+fboxes[idx][:, 3])/2
for i in range(width//2):
x1, y1, x2, y2 = iboxes[i][:, 0], iboxes[i][:, 1], iboxes[i][:, 2], iboxes[i][:, 3]
boxes = np.array([(x1, y1), (x1, y2), (x2, y1), (x2, y2)]).transpose(0, 2, 1).reshape(-1, 2)
box1 = [(x, y) for x, y in boxes]
convex_hull = compute_convex_hull(box1)
for pt in cur_xy:
inside = is_point_in_convex_hull(pt, convex_hull)
if not inside:
break
if not inside:
break
# Based on the distance between the four corners of the current frame boxes
# and adjacent frame boxes
iboxes = fboxes[idx0:idx] + fboxes[idx+1:idx1]
cboxes = fboxes[idx][:, 0:4]
cx1, cy1, cx2, cy2 = cboxes[:, 0], cboxes[:, 1], cboxes[:, 2], cboxes[:, 3]
cxy = np.array([(cx1, cy1), (cx1, cy2), (cx2, cy1), (cx2, cy2)]).transpose(0, 2, 1).reshape(-1, 2)
iiboxes = np.concatenate(iboxes, axis=0)
ix1, iy1, ix2, iy2 = iiboxes[:, 0], iiboxes[:, 1], iiboxes[:, 2], iiboxes[:, 3]
ixy = np.array([(ix1, iy1), (ix1, iy2), (ix2, iy1), (ix2, iy2)]).transpose(0, 2, 1).reshape(-1, 2)
Dist = cdist(cxy, ixy).round(2)
max_dist = np.max(np.min(Dist, axis=1))
if max_dist > TH and not inside:
frameState[idx, 1] = 1
# plot_convex_hull(boxes, convex_hull, [pt])
frameState[idx, 1] = 1
return frameState
def single_point(tboxes, width, TH=60):
"""width: window width, >=2"""
fboxes = array2frame(tboxes)
fnum = len(fboxes)
fids = np.array([i+1 for i in range(fnum)])[:, np.newaxis]
state = np.zeros((fnum, 1), dtype=np.int64)
frameState = np.concatenate((fids, state), axis = 1).astype(np.int64)
if fnum < width:
return frameState
for idx1 in range(width, fnum+1):
idx0 = idx1 - width
idx = idx1 - width//2 - 1
iboxe1 = fboxes[idx0:idx]
iboxe2 = fboxes[idx+1:idx1]
iboxes = fboxes[idx0:idx] + fboxes[idx+1:idx1]
cboxes = fboxes[idx][:, 0:4]
cur_xy = np.zeros((len(cboxes), 2))
cur_xy[:, 0] = (fboxes[idx][:, 0]+fboxes[idx][:, 2])/2
cur_xy[:, 1] = (fboxes[idx][:, 1]+fboxes[idx][:, 3])/2
Dist = np.empty((len(cboxes), 0))
for i in range(width-1):
boxes = iboxes[i][:, 0:4]
box_xy = np.zeros((len(boxes), 2))
box_xy[:, 0] = (boxes[:, 0]+boxes[:, 2])/2
box_xy[:, 1] = (boxes[:, 1]+boxes[:, 3])/2
dist2 = cdist(cur_xy, box_xy).round(2)
Dist = np.concatenate((Dist, dist2), axis=1)
max_dist = np.max(np.min(Dist, axis=1))
if max_dist > TH:
frameState[idx, 1] = 1
return frameState
def intrude():
pkpath = Path("/home/wqg/dataset/small-goods/pkfiles")
savepath = Path("/home/wqg/dataset/small-goods/illustration_convex")
if not savepath.exists():
savepath.mkdir(parents=True, exist_ok=True)
err_trail, err_single, err_all = [], [], []
num = 0
for pth in pkpath.iterdir():
# item = r"69042386_20250407-145737_front_returnGood_b82d28427666_15_17700000001.pickle"
# pth = pkpath/item
with open(str(pth), 'rb') as f:
yrt = pickle.load(f)
evtname = pth.stem
bboxes = []
trackerboxes = np.empty((0, 10), dtype=np.float64)
for frameDict in yrt:
boxes = frameDict["bboxes"]
tboxes = frameDict["tboxes"]
tboxes = np.concatenate((tboxes, tboxes[:,7][:, None]), axis=1)
bboxes.append(boxes)
trackerboxes = np.concatenate((trackerboxes, np.array(tboxes)), axis=0)
'''single-points based for intrusion detection'''
# wd =5
# fstate1 = single_point(trackerboxes, wd)
'''convex-based '''
width = 5
fstate = convex_based(trackerboxes, width, TH=60)
# fstate = np.zeros(fstate1.shape)
# fstate[:, 0] = fstate1[:, 0]
# fstate[:, 1] = fstate1[:, 1] * fstate2[:, 1]
'''trajectory based for intrusion detection
period: 0 1 2 3
fid timestamp(fid) 基于滑动窗的tid扩展 滑动窗覆盖的运动区间
'''
win_width = 12
period, handState = devide_motion_state(trackerboxes, win_width)
num += 1
if np.all(period[:,2:4]==0):
err_trail.append(evtname)
if np.all(fstate[:,1]==0):
err_single.append(evtname)
if np.all(period[:,2:4]==0) and np.all(fstate[:,1]==0):
err_all.append(evtname)
fig, (ax1, ax2) = plt.subplots(2, 1)
ax1.plot(period[:, 1], period[:, 2], 'bo-', linewidth=1, markersize=4)
ax1.plot(period[:, 1], period[:, 3], 'rx-', linewidth=1, markersize=8)
ax2.plot(fstate[:, 0], fstate[:, 1], 'rx-', linewidth=1, markersize=8)
plt.savefig(os.path.join(str(savepath), f"{evtname}.png"))
plt.close()
# if num==1:
# break
rate_trail = 1 - len(err_trail)/num
rate_single = 1 - len(err_single)/num
rate_all = 1 - len(err_all)/num
print(f"rate_trail: {rate_trail}")
print(f"rate_single: {rate_single}")
print(f"rate_all: {rate_all}")
txtpath = savepath.parents[0] / "error.txt"
with open(str(txtpath), "w") as f:
f.write(f"rate_trail: {rate_trail}" + "\n")
f.write(f"rate_single: {rate_single}" + "\n")
f.write(f"rate_all: {rate_all}" + "\n")
f.write("\n" + "err_trail" + "\n")
for line in err_trail:
f.write(line + "\n")
f.write("\n" + "err_single" + "\n")
for line in err_single:
f.write(line + "\n")
f.write("\n" + "err_all" + "\n")
for line in err_all:
f.write(line + "\n")
print("Done!")
def run_yrt():
datapath = Path("/home/wqg/dataset/small-goods/videos/")
savepath = Path("/home/wqg/dataset/small-goods/result/")
pkpath = Path("/home/wqg/dataset/small-goods/pkfiles/")
if not savepath.exists():
savepath.mkdir(parents=True, exist_ok=True)
if not pkpath.exists():
pkpath.mkdir(parents=True, exist_ok=True)
optdict = {}
optdict["weights"] = ROOT / 'ckpts/best_v10s_width0375_1205.pt'
optdict["is_save_img"] = False
optdict["is_save_video"] = True
k = 0
for pth in datapath.iterdir():
item = "69042386_20250407-145819_back_returnGood_b82d28427666_15_17700000001.mp4"
pth = pth.parents[0] /item
optdict["source"] = pth
optdict["save_dir"] = savepath
# try:
yrtOut = yolov10_resnet_tracker(**optdict)
pkpath_ = pkpath / f"{Path(pth).stem}.pickle"
with open(str(pkpath_), 'wb') as f:
pickle.dump(yrtOut, f)
k += 1
if k==1:
break
# except Exception as e:
# print("abc")
if __name__ == '__main__':
# run_yrt()
intrude()
# test_convex()

View File

@ -13,10 +13,25 @@ from pathlib import Path
import glob import glob
import numpy as np import numpy as np
import copy import copy
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
from collections import OrderedDict
from event_time_specify import devide_motion_state #, state_measure
import sys
FILE = Path(__file__).resolve()
ROOT = FILE.parents[1] # YOLOv5 root directory
if str(ROOT) not in sys.path:
sys.path.append(str(ROOT)) # add ROOT to PATH
from imgs_inference import run_yolo from imgs_inference import run_yolo
from event_time_specify import devide_motion_state#, state_measure
from tracking.utils.read_data import read_weight_sensor from tracking.utils.read_data import read_weight_sensor
# IMG_FORMATS = 'bmp', 'dng', 'jpeg', 'jpg', 'mpo', 'png', 'tif', 'tiff', 'webp', 'pfm' # include image suffixes # IMG_FORMATS = 'bmp', 'dng', 'jpeg', 'jpg', 'mpo', 'png', 'tif', 'tiff', 'webp', 'pfm' # include image suffixes
@ -400,8 +415,8 @@ def splitevent(imgpath, MotionSlice):
def runyolo(): def runyolo():
eventdirs = r"\\192.168.1.28\share\realtime\eventdata" eventdirs = r"\\192.168.1.28\share\个人文件\wqg\realtime\eventdata"
savedir = r"\\192.168.1.28\share\realtime\result" savedir = r"\\192.168.1.28\share\个人文件\wqg\realtime\result"
k = 0 k = 0
for edir in os.listdir(eventdirs): for edir in os.listdir(eventdirs):
@ -419,12 +434,40 @@ def run_tracking(trackboxes, MotionSlice):
pass pass
def read_wsensor(filepath):
WeightDict = OrderedDict()
with open(filepath, 'r', encoding='utf-8') as f:
lines = f.readlines()
clean_lines = [line.strip().replace("'", '').replace('"', '') for line in lines]
for i, line in enumerate(clean_lines):
line = line.strip()
line = line.strip()
if line.find(':') < 0: continue
# if line.find("Weight") >= 0:
# label = "Weight"
# continue
keyword = line.split(':')[0]
value = line.split(':')[1]
# if label == "Weight":
if len(keyword) and len(value):
vdata = [float(s) for s in value.split(',') if len(s)]
WeightDict[keyword] = vdata[-1]
weights = [(float(t), w) for t, w in WeightDict.items()]
weights = np.array(weights).astype(np.int64)
return weights
def show_seri(): def show_seri():
datapath = r"\\192.168.1.28\share\个人文件\wqg\realtime\eventdata\1731316835560" datapath = r"\\192.168.1.28\share\个人文件\wqg\realtime\eventdata\1731316835560"
savedir = r"D:\DetectTracking\realtime\1" savedir = r"\\192.168.1.28\share\个人文件\wqg\realtime\1"
imgdir = datapath.split('\\')[-2] + "_" + datapath.split('\\')[-1] imgdir = datapath.split('\\')[-2] + "_" + datapath.split('\\')[-1]
@ -450,7 +493,7 @@ def show_seri():
'''===============读取重力信号数据===================''' '''===============读取重力信号数据==================='''
seneorfile = os.path.join(datapath, 'sensor.txt') seneorfile = os.path.join(datapath, 'sensor.txt')
weights = read_weight_sensor(seneorfile) weights = read_wsensor(seneorfile)
# weights = [(float(t), w) for t, w in WeightDict.items()] # weights = [(float(t), w) for t, w in WeightDict.items()]
# weights = np.array(weights) # weights = np.array(weights)
@ -471,10 +514,8 @@ def show_seri():
def main(): def main():
# runyolo() # runyolo()
show_seri() show_seri()
if __name__ == '__main__': if __name__ == '__main__':
main() main()

281
realtime/tracker_test.py Normal file
View File

@ -0,0 +1,281 @@
# -*- coding: utf-8 -*-
"""
Created on Sun Mar 2 14:15:57 2025
@author: ym
"""
import numpy as np
import cv2
import os
from pathlib import Path
import sys
sys.path.append(r"D:\DetectTracking")
# from tracking.utils.read_data import extract_data_realtime, read_tracking_output_realtime
from tracking.utils.plotting import Annotator, colors
from tracking.utils import Boxes, IterableSimpleNamespace, yaml_load, boxes_add_fid
from tracking.trackers import BOTSORT, BYTETracker
from tracking.utils.showtrack import drawtracks
from hands.hand_inference import hand_pose
from tracking.utils.read_data import read_weight_sensor, extract_data_realtime, read_tracking_output_realtime
from contrast.feat_extract.config import config as conf
from contrast.feat_extract.inference import FeatsInterface
from tracking.utils.drawtracks import drawTrack
ReIDEncoder = FeatsInterface(conf)
W, H = 1024, 1280
Mode = 'front' #'back'
ImgFormat = ['.jpg', '.jpeg', '.png', '.bmp']
'''调用tracking()函数,利用本地跟踪算法获取各目标轨迹,可以比较本地跟踪算法与现场跟踪算法的区别。'''
def init_tracker(tracker_yaml = None, bs=1):
"""
Initialize tracker for object tracking during prediction.
"""
TRACKER_MAP = {'bytetrack': BYTETracker, 'botsort': BOTSORT}
cfg = IterableSimpleNamespace(**yaml_load(tracker_yaml))
tracker = TRACKER_MAP[cfg.tracker_type](args=cfg, frame_rate=30)
return tracker
def init_trackers(tracker_yaml = None, bs=1):
"""
Initialize trackers for object tracking during prediction.
"""
# tracker_yaml = r"./tracking/trackers/cfg/botsort.yaml"
TRACKER_MAP = {'bytetrack': BYTETracker, 'botsort': BOTSORT}
cfg = IterableSimpleNamespace(**yaml_load(tracker_yaml))
trackers = []
for _ in range(bs):
tracker = TRACKER_MAP[cfg.tracker_type](args=cfg, frame_rate=30)
trackers.append(tracker)
return trackers
def draw_box(img, tracks):
annotator = Annotator(img.copy(), line_width=2)
# for *xyxy, conf, cls in reversed(tracks):
# name = f'{int(cls)} {conf:.2f}'
# color = colors(int(cls), True)
# annotator.box_label(xyxy, name, color=color)
for *xyxy, id, conf, cls, fid, bid in reversed(tracks):
name = f'ID:{int(id)} {int(cls)} {conf:.2f}'
color = colors(int(cls), True)
annotator.box_label(xyxy, name, color=color)
im0 = annotator.result()
return im0
def tracking(bboxes, ffeats):
tracker_yaml = "./tracking/trackers/cfg/botsort.yaml"
tracker = init_tracker(tracker_yaml)
TrackBoxes = np.empty((0, 9), dtype = np.float32)
TracksDict = {}
frmIds = []
'''========================== 执行跟踪处理 ============================='''
# dets 与 feats 应保持严格对应
k=0
for dets, feats in zip(bboxes, ffeats):
frmIds.append(np.unique(dets[:, 6]).astype(np.int64)[0])
boxes = dets[:, :6]
det_tracking = Boxes(boxes).cpu().numpy()
tracks, outfeats = tracker.update(det_tracking, features=feats)
'''tracks: [x1, y1, x2, y2, track_id, score, cls, frame_index, box_index]
0 1 2 3 4 5 6 7 8
这里frame_index 也可以用视频的 帧ID 代替, box_index 保持不变
'''
k += 1
imgpath = r"D:\全实时\202502\tracker\Yolos_Tracking\tracker\1_1740891284792\1_1740891284792_{}.png".format(int(k))
img = cv2.imread(imgpath)
im0 = draw_box(img, tracks)
savepath = r"D:\全实时\202502\tracker\Yolos_Tracking\tracker\1_1740891284792\b\1_1740891284792_{}_b.png".format(k)
cv2.imwrite(savepath, im0)
if len(tracks):
TrackBoxes = np.concatenate([TrackBoxes, tracks], axis=0)
# =============================================================================
# FeatDict = {}
# for track in tracks:
# tid = int(track[8])
# FeatDict.update({tid: feats[tid, :]})
#
# frameID = tracks[0, 7]
#
# # print(f"frameID: {int(frameID)}")
# assert len(tracks) == len(FeatDict), f"Please check the func: tracker.update() at frameID({int(frameID)})"
#
# TracksDict[f"frame_{int(frameID)}"] = {"feats":FeatDict}
# =============================================================================
return TrackBoxes, TracksDict
def dotrack():
datapath = r"D:\全实时\202502\tracker\1_tracker_in.data"
bboxes, ffeats = extract_data_realtime(datapath)
trackerboxes, tracker_feat_dict = tracking(bboxes, ffeats)
print("done!")
# def plotbox():
# fpath = r"\\192.168.1.28\share\测试视频数据以及日志\全实时测试\V12\2025-3-3\20250303-103833-338_6928804010091_6928804010091\1_tracking_output.data"
# imgpath = r"D:\全实时\202502\result\Yolos_Tracking\20250303-103833-338_6928804010091_6928804010091\1_1740969517953"
# trackingboxes, trackingfeats, tracking_outboxes, tracking_outfeats = read_tracking_output_realtime(fpath)
# for *xyxy, id, conf, cls, fid, bid in tracking_outboxes[0]:
# imgname = f"1_1740969517953_{int(fid)}.png"
# img_path = os.path.join(imgpath, imgname)
# img = cv2.imread(img_path)
# annotator = Annotator(img.copy(), line_width=2)
# name = f'ID:{int(id)} {int(cls)} {conf:.2f}'
# color = colors(int(cls), True)
# annotator.box_label(xyxy, name, color=color)
# im0 = annotator.result()
# cv2.imwrite(os.path.join(imgpath, f"1_1740969517953_{int(fid)}_.png"), im0)
# print(f"1_1740969676295_{int(fid)}_.png")
# print("done")
def video2imgs(videopath):
cap = cv2.VideoCapture(str(videopath))
k = 0
while True:
ret, frame = cap.read()
if frame is None:
break
k += 1
imgpath = videopath.parent / f"{videopath.stem}_{k}.png"
cv2.imwrite(str(imgpath), frame)
def extract_evtimgs(evtpath):
vidpaths = [v for v in evtpath.iterdir() if v.suffix == '.mp4']
for vidpath in vidpaths:
video2imgs(vidpath)
stamps = [name.stem.split('_')[1] for name in vidpaths]
if len(set(stamps)==1):
return stamps[0]
return None
def draw_tracking_boxes(evtpath, stamp):
for datapath in evtpath.iterdir():
if datapath.name.find('_tracking_output.data')<=0:
continue
camera = datapath.stem.split('_')[0]
trackingboxes, trackingfeats, tracking_outboxes, tracking_outfeats = read_tracking_output_realtime(str(datapath))
## 该模块先读取轨迹数据再根据帧ID读取相应图像
for *xyxy, id, conf, cls, fid, bid in tracking_outboxes[0]:
imgpath = evtpath / f"{camera}_{stamp}_{int(fid)}.png"
img = cv2.imread(str(imgpath))
annotator = Annotator(img.copy(), line_width=2)
name = f'ID:{int(id)} {int(cls)} {conf:.2f}'
color = colors(int(cls), True)
annotator.box_label(xyxy, name, color=color)
im0 = annotator.result()
cv2.imwrite(imgpath, im0)
print(datapath.name)
def draw_traj(evtpath):
for datapath in evtpath.iterdir():
if datapath.name.find('_tracking_output.data')<=0:
continue
fname = datapath.name
trackingboxes, trackingfeats, tracking_outboxes, tracking_outfeats = read_tracking_output_realtime(datapath)
CamerType = fname.split('_')[0]
if CamerType == '1':
edgeline = cv2.imread("./CartTemp/board_ftmp_line.png")
if CamerType == '0':
edgeline = cv2.imread("./CartTemp/edgeline.png")
edgeline = drawTrack(tracking_outboxes, edgeline)
imgpath = datapath.parent / f"{datapath.stem}.png"
cv2.imwrite(str(imgpath), edgeline)
def main():
path = r"\\192.168.1.28\share\测试视频数据以及日志\全实时测试\V12\2025-3-3\20250303-104225-381_6920459958674"
evtpaths = [p for p in Path(path).iterdir() if p.is_dir()]
for evtpath in evtpaths:
#1. 从事件的前后摄视频提取图像
stamp = extract_evtimgs(evtpath)
#2. 根据 0/1_tracking_output.data 中提取的轨迹在img中绘制box
draw_tracking_boxes(evtpath, stamp)
#3. 根据 0/1_tracking_output.data 中提取的轨迹在edgeline中绘制box
draw_traj(evtpath)
if __name__ == '__main__':
# dotrack()
# plotbox()
vpath = r"D:\datasets\ym\VID_20250307_105606"
extract_evtimgs(Path(vpath))

View File

@ -38,6 +38,7 @@ import glob
import numpy as np import numpy as np
import pickle import pickle
import torch import torch
from scipy.spatial.distance import cdist
FILE = Path(__file__).resolve() FILE = Path(__file__).resolve()
ROOT = FILE.parents[0] # YOLOv5 root directory ROOT = FILE.parents[0] # YOLOv5 root directory
@ -63,7 +64,10 @@ from hands.hand_inference import hand_pose
from contrast.feat_extract.config import config as conf from contrast.feat_extract.config import config as conf
from contrast.feat_extract.inference import FeatsInterface from contrast.feat_extract.inference import FeatsInterface
from ultralytics import YOLOv10
ReIDEncoder = FeatsInterface(conf) ReIDEncoder = FeatsInterface(conf)
print(f'load model {conf.testbackbone} in {Path(__file__).stem}')
IMG_FORMATS = '.bmp', '.dng', '.jpeg', '.jpg', '.mpo', '.png', '.tif', '.tiff', '.webp', '.pfm' # include image suffixes IMG_FORMATS = '.bmp', '.dng', '.jpeg', '.jpg', '.mpo', '.png', '.tif', '.tiff', '.webp', '.pfm' # include image suffixes
VID_FORMATS = '.asf', '.avi', '.gif', '.m4v', '.mkv', '.mov', '.mp4', '.mpeg', '.mpg', '.ts', '.wmv' # include video suffixes VID_FORMATS = '.asf', '.avi', '.gif', '.m4v', '.mkv', '.mov', '.mp4', '.mpeg', '.mpg', '.ts', '.wmv' # include video suffixes
@ -124,18 +128,166 @@ def init_trackers(tracker_yaml = None, bs=1):
""" """
# tracker_yaml = r"./tracking/trackers/cfg/botsort.yaml" # tracker_yaml = r"./tracking/trackers/cfg/botsort.yaml"
tracker_yaml = str(tracker_yaml)
TRACKER_MAP = {'bytetrack': BYTETracker, 'botsort': BOTSORT} TRACKER_MAP = {'bytetrack': BYTETracker, 'botsort': BOTSORT}
cfg = IterableSimpleNamespace(**yaml_load(tracker_yaml)) cfg = IterableSimpleNamespace(**yaml_load(tracker_yaml))
trackers = [] trackers = []
for _ in range(bs): for _ in range(bs):
tracker = TRACKER_MAP[cfg.tracker_type](args=cfg, frame_rate=30) tracker = TRACKER_MAP[cfg.tracker_type](args=cfg, frame_rate=30)
if cfg.with_reid:
tracker.encoder = ReIDEncoder
trackers.append(tracker) trackers.append(tracker)
return trackers return trackers
'''=============== used in pipeline.py for Yolov10 =================='''
def yolov10_resnet_tracker(
weights = ROOT / 'ckpts/best_v10s_width0375_1205.pt', # model path or triton URL
source = '', # file/dir/URL/glob/screen/0(webcam)
save_dir = '',
is_save_img = True,
is_save_video = True,
'''=============== used in pipeline.py ==================''' tracker_yaml = ROOT / "tracking/trackers/cfg/botsort.yaml",
line_thickness=3, # bounding box thickness (pixels)
hide_labels=False, # hide labels
):
## load a custom model
model = YOLOv10(weights)
custom = {"conf": 0.1, "batch": 1, "save": False, "mode": "predict"}
kwargs = {"save": True, "imgsz": 640, "conf": 0.1}
args = {**model.overrides, **custom, **kwargs}
predictor = model.task_map[model.task]["predictor"](overrides=args, _callbacks=model.callbacks)
vid_path, vid_writer = None, None
tracker = init_trackers(tracker_yaml)[0]
yoloResnetTracker = []
for i, result in enumerate(predictor.stream_inference(source)):
datamode = predictor.dataset.mode
det = result.boxes.data.cpu().numpy()
im0 = result.orig_img
names = result.names
path = result.path
im_array = result.plot()
## to do tracker.update()
det_tracking = Boxes(det, im0.shape)
tracks, outfeats = tracker.update(det_tracking, im0)
if datamode == "video":
frameId = predictor.dataset.frame
elif datamode == "image":
frameId = predictor.dataset.count
annotator = Annotator(im0.copy(), line_width=line_thickness, example=str(names))
simdict, simdict1 = {}, {}
for fid, bid, mfeat, cfeat, features in outfeats:
if mfeat is not None and cfeat is not None:
simi = 1 - np.maximum(0.0, cdist(mfeat[None, :], cfeat[None, :], "cosine"))[0][0]
simdict.update({f"{int(frameId)}_{int(bid)}":simi})
if cfeat is not None and len(features)>=2:
mfeat = features[-2]
simi = 1 - np.maximum(0.0, cdist(mfeat[None, :], cfeat[None, :], "cosine"))[0][0]
simdict1.update({f"{int(frameId)}_{int(bid)}":simi})
if len(tracks) > 0:
tracks[:, 7] = frameId
# trackerBoxes = np.concatenate([trackerBoxes, tracks], axis=0)
'''================== 1. 存储 dets/subimgs/features Dict ============='''
imgs, features = ReIDEncoder.inference(im0, tracks)
imgdict, featdict = {}, {}
for ii, bid in enumerate(tracks[:, 8]):
featdict.update({f"{int(frameId)}_{int(bid)}": features[ii, :]}) # [f"feat_{int(bid)}"] = features[i, :]
imgdict.update({f"{int(frameId)}_{int(bid)}": imgs[ii]})
frameDict = {"path": path,
"fid": int(frameId),
"bboxes": det,
"tboxes": tracks,
"imgs": imgdict,
"feats": featdict,
"featsimi": simdict, # 当前 box 特征和该轨迹 smooth_feat 特征的相似度
"featsimi1": simdict1 # 当前 box 特征和该轨迹前一个 box 特征的相似度
}
yoloResnetTracker.append(frameDict)
# imgs, features = inference_image(im0, tracks)
# TrackerFeats = np.concatenate([TrackerFeats, features], axis=0)
'''================== 2. 提取手势位置 ==================='''
for *xyxy, id, conf, cls, fid, bid in reversed(tracks):
name = ('' if id==-1 else f'id:{int(id)} ') + names[int(cls)]
if f"{int(frameId)}_{int(bid)}" in simdict.keys():
sim = simdict[f"{int(frameId)}_{int(bid)}"]
label = f"{name} {sim:.2f}"
else:
label = None if hide_labels else name
# label = None if hide_labels else (name if hide_conf else f'{name} {conf:.1f}')
if id >=0 and cls==0:
color = colors(int(cls), True)
elif id >=0 and cls!=0:
color = colors(int(id), True)
else:
color = colors(19, True) # 19为调色板的最后一个元素
annotator.box_label(xyxy, label, color=color)
'''====== Save results (image and video) ======'''
# save_path = str(save_dir / Path(path).name) # 带有后缀名
im0 = annotator.result()
if is_save_img:
save_path_img = str(save_dir / Path(path).stem)
if datamode == 'image':
imgpath = save_path_img + ".png"
if datamode == 'video' :
imgpath = save_path_img + f"_{frameId}.png"
cv2.imwrite(Path(imgpath), im0)
# if dataset.mode == 'video' and is_save_video:
if is_save_video:
if datamode == 'video':
video_path = str(save_dir / Path(path).stem) + '.mp4' # 带有后缀名
else:
videoname = str(Path(path).stem).split('_')[0] + '.mp4'
video_path = str(save_dir / videoname)
if vid_path != video_path: # new video
vid_path = video_path
vid_cap = predictor.dataset.cap
if isinstance(vid_writer, cv2.VideoWriter):
vid_writer.release() # release previous video writer
if vid_cap: # video
fps = vid_cap.get(cv2.CAP_PROP_FPS)
w = int(vid_cap.get(cv2.CAP_PROP_FRAME_WIDTH))
h = int(vid_cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
else: # stream
fps, w, h = 25, im0.shape[1], im0.shape[0]
## for image rotating in dataloader.LoadImages.__next__()
w, h = im0.shape[1], im0.shape[0]
video_path = str(Path(video_path).with_suffix('.mp4')) # force *.mp4 suffix on results videos
vid_writer = cv2.VideoWriter(video_path, cv2.VideoWriter_fourcc(*'mp4v'), fps, (w, h))
vid_writer.write(im0)
return yoloResnetTracker
'''=============== used in pipeline.py for Yolov5 =================='''
@smart_inference_mode() @smart_inference_mode()
def yolo_resnet_tracker( def yolo_resnet_tracker(
weights=ROOT / 'yolov5s.pt', # model path or triton URL weights=ROOT / 'yolov5s.pt', # model path or triton URL
@ -144,7 +296,7 @@ def yolo_resnet_tracker(
is_save_img = True, is_save_img = True,
is_save_video = True, is_save_video = True,
tracker_yaml = "./tracking/trackers/cfg/botsort.yaml", tracker_yaml = ROOT / "tracking/trackers/cfg/botsort.yaml",
imgsz=(640, 640), # inference size (height, width) imgsz=(640, 640), # inference size (height, width)
conf_thres=0.25, # confidence threshold conf_thres=0.25, # confidence threshold
iou_thres=0.45, # NMS IOU threshold iou_thres=0.45, # NMS IOU threshold
@ -209,20 +361,33 @@ def yolo_resnet_tracker(
# Process predictions # Process predictions
for i, det in enumerate(pred): # per image for i, det in enumerate(pred): # per image
im0 = im0s.copy() im0 = im0s.copy()
annotator = Annotator(im0.copy(), line_width=line_thickness, example=str(names)) annotator = Annotator(im0.copy(), line_width=line_thickness, example=str(names))
s += '%gx%g ' % im.shape[2:] # print string s += '%gx%g ' % im.shape[2:] # print string
if len(det): if len(det):
# Rescale boxes from img_size to im0 size # Rescale boxes from img_size to im0 size
det[:, :4] = scale_boxes(im.shape[2:], det[:, :4], im0.shape).round() det[:, :4] = scale_boxes(im.shape[2:], det[:, :4], im0.shape).round()
# det = det.cpu().numpy() det = det.cpu().numpy()
## ================================================================ writed by WQG ## ================================================================ writed by WQG
'''tracks: [x1, y1, x2, y2, track_id, score, cls, frame_index, box_index] '''tracks: [x1, y1, x2, y2, track_id, score, cls, frame_index, box_index]
0 1 2 3 4 5 6 7 8 0 1 2 3 4 5 6 7 8
这里frame_index 也可以用视频的 帧ID 代替, box_index 保持不变 这里frame_index 也可以用视频的 帧ID 代替, box_index 保持不变
''' '''
det_tracking = Boxes(det, im0.shape).cpu().numpy() det_tracking = Boxes(det, im0.shape).cpu().numpy()
tracks = tracker.update(det_tracking, im0) tracks, outfeats = tracker.update(det_tracking, im0)
simdict, simdict1 = {}, {}
for fid, bid, mfeat, cfeat, features in outfeats:
if mfeat is not None and cfeat is not None:
simi = 1 - np.maximum(0.0, cdist(mfeat[None, :], cfeat[None, :], "cosine"))[0][0]
simdict.update({f"{int(frameId)}_{int(bid)}":simi})
if cfeat is not None and len(features)>=2:
mfeat = features[-2]
simi = 1 - np.maximum(0.0, cdist(mfeat[None, :], cfeat[None, :], "cosine"))[0][0]
simdict1.update({f"{int(frameId)}_{int(bid)}":simi})
if len(tracks) > 0: if len(tracks) > 0:
tracks[:, 7] = frameId tracks[:, 7] = frameId
@ -239,7 +404,10 @@ def yolo_resnet_tracker(
"bboxes": det, "bboxes": det,
"tboxes": tracks, "tboxes": tracks,
"imgs": imgdict, "imgs": imgdict,
"feats": featdict} "feats": featdict,
"featsimi": simdict, # 当前 box 特征和该轨迹 smooth_feat 特征的相似度
"featsimi1": simdict1 # 当前 box 特征和该轨迹前一个 box 特征的相似度
}
yoloResnetTracker.append(frameDict) yoloResnetTracker.append(frameDict)
# imgs, features = inference_image(im0, tracks) # imgs, features = inference_image(im0, tracks)
@ -248,7 +416,14 @@ def yolo_resnet_tracker(
'''================== 2. 提取手势位置 ===================''' '''================== 2. 提取手势位置 ==================='''
for *xyxy, id, conf, cls, fid, bid in reversed(tracks): for *xyxy, id, conf, cls, fid, bid in reversed(tracks):
name = ('' if id==-1 else f'id:{int(id)} ') + names[int(cls)] name = ('' if id==-1 else f'id:{int(id)} ') + names[int(cls)]
label = None if hide_labels else (name if hide_conf else f'{name} {conf:.2f}') if f"{int(frameId)}_{int(bid)}" in simdict.keys():
sim = simdict[f"{int(frameId)}_{int(bid)}"]
label = f"{name} {sim:.2f}"
else:
label = None if hide_labels else name
# label = None if hide_labels else (name if hide_conf else f'{name} {conf:.1f}')
if id >=0 and cls==0: if id >=0 and cls==0:
color = colors(int(cls), True) color = colors(int(cls), True)
@ -288,6 +463,10 @@ def yolo_resnet_tracker(
h = int(vid_cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) h = int(vid_cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
else: # stream else: # stream
fps, w, h = 25, im0.shape[1], im0.shape[0] fps, w, h = 25, im0.shape[1], im0.shape[0]
## for image rotating in dataloader.LoadImages.__next__()
w, h = im0.shape[1], im0.shape[0]
vdieo_path = str(Path(vdieo_path).with_suffix('.mp4')) # force *.mp4 suffix on results videos vdieo_path = str(Path(vdieo_path).with_suffix('.mp4')) # force *.mp4 suffix on results videos
vid_writer[i] = cv2.VideoWriter(vdieo_path, cv2.VideoWriter_fourcc(*'mp4v'), fps, (w, h)) vid_writer[i] = cv2.VideoWriter(vdieo_path, cv2.VideoWriter_fourcc(*'mp4v'), fps, (w, h))
vid_writer[i].write(im0) vid_writer[i].write(im0)
@ -309,7 +488,7 @@ def run(
project=ROOT / 'runs/detect', # save results to project/name project=ROOT / 'runs/detect', # save results to project/name
name='exp', # save results to project/name name='exp', # save results to project/name
tracker_yaml = "./tracking/trackers/cfg/botsort.yaml", tracker_yaml = ROOT / "tracking/trackers/cfg/botsort.yaml",
imgsz=(640, 640), # inference size (height, width) imgsz=(640, 640), # inference size (height, width)
conf_thres=0.25, # confidence threshold conf_thres=0.25, # confidence threshold
iou_thres=0.45, # NMS IOU threshold iou_thres=0.45, # NMS IOU threshold
@ -489,7 +668,7 @@ def run(
''' '''
det_tracking = Boxes(det, im0.shape).cpu().numpy() det_tracking = Boxes(det, im0.shape).cpu().numpy()
tracks = tracker.update(det_tracking, im0) tracks, outfeats = tracker.update(det_tracking, im0)
if len(tracks) == 0: if len(tracks) == 0:
continue continue
@ -571,6 +750,9 @@ def run(
h = int(vid_cap.get(cv2.CAP_PROP_FRAME_HEIGHT)) h = int(vid_cap.get(cv2.CAP_PROP_FRAME_HEIGHT))
else: # stream else: # stream
fps, w, h = 30, im0.shape[1], im0.shape[0] fps, w, h = 30, im0.shape[1], im0.shape[0]
## for image rotating in dataloader.LoadImages.__next__()
w, h = im0.shape[1], im0.shape[0]
save_path = str(Path(save_path).with_suffix('.mp4')) # force *.mp4 suffix on results videos save_path = str(Path(save_path).with_suffix('.mp4')) # force *.mp4 suffix on results videos
vid_writer[i] = cv2.VideoWriter(save_path, cv2.VideoWriter_fourcc(*'mp4v'), fps, (w, h)) vid_writer[i] = cv2.VideoWriter(save_path, cv2.VideoWriter_fourcc(*'mp4v'), fps, (w, h))
vid_writer[i].write(im0) vid_writer[i].write(im0)
@ -631,8 +813,6 @@ def run(
def parse_opt(): def parse_opt():
modelpath = ROOT / 'ckpts/best_cls10_0906.pt' # 'ckpts/best_15000_0908.pt', 'ckpts/yolov5s.pt', 'ckpts/best_20000_cls30.pt, best_yolov5m_250000' modelpath = ROOT / 'ckpts/best_cls10_0906.pt' # 'ckpts/best_15000_0908.pt', 'ckpts/yolov5s.pt', 'ckpts/best_20000_cls30.pt, best_yolov5m_250000'
'''datapath为视频文件目录或视频文件''' '''datapath为视频文件目录或视频文件'''
datapath = r"D:/datasets/ym/videos/标记视频/" # ROOT/'data/videos', ROOT/'data/images' images datapath = r"D:/datasets/ym/videos/标记视频/" # ROOT/'data/videos', ROOT/'data/images' images
# datapath = r"D:\datasets\ym\highvalue\videos" # datapath = r"D:\datasets\ym\highvalue\videos"
@ -685,7 +865,7 @@ def find_video_imgs(root_dir):
def main(): def main_v5():
''' '''
run(): 单张图像或单个视频文件的推理,不支持图像序列, run(): 单张图像或单个视频文件的推理,不支持图像序列,
''' '''
@ -704,10 +884,10 @@ def main():
# p = r"D:\exhibition\images\153112511_0_seek_105.mp4" # p = r"D:\exhibition\images\153112511_0_seek_105.mp4"
# p = r"D:\exhibition\images\image" # p = r"D:\exhibition\images\image"
p = r"\\192.168.1.28\share\数据\原始数据\小物品数据\视频\82654976401_20241213-143457_front_addGood_5478c9a53bbe_40_17700000001.mp4" p = r"D:\datasets\ym\后台数据\unzip\20250310-175352-741"
optdict["project"] = r"D:\小物品入侵检测\result" optdict["project"] = r"D:\work\result"
# optdict["project"] = r"D:\exhibition\result" optdict["weights"] = ROOT / 'ckpts/best_cls10_0906.pt'
if os.path.isdir(p): if os.path.isdir(p):
files = find_video_imgs(p) files = find_video_imgs(p)
k = 0 k = 0
@ -716,17 +896,39 @@ def main():
run(**optdict) run(**optdict)
k += 1 k += 1
if k == 1: if k == 2:
break break
elif os.path.isfile(p): elif os.path.isfile(p):
optdict["source"] = p optdict["source"] = p
run(**optdict) run(**optdict)
def main_v10():
datapath = r'D:\datasets\ym\后台数据\unzip\20250310-175352-741\0.mp4'
savepath = r'D:\work\result'
savepath = savepath / Path(str(Path(datapath).stem))
if not savepath.exists():
savepath.mkdir(parents=True, exist_ok=True)
weightpath = ROOT / 'ckpts/best_v10s_width0375_1205.pt'
optdict = {}
optdict["weights"] = weightpath
optdict["source"] = datapath
optdict["save_dir"] = savepath
optdict["is_save_img"] = True
optdict["is_save_video"] = True
yrtOut = yolov10_resnet_tracker(**optdict)
if __name__ == '__main__': if __name__ == '__main__':
main() # main_v5()
main_v10()

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