개정판 2d9fa217
issue #000
1. Save 방식 변경 : XML -> Database
2. Svg 폴더구조 변경 : Svg\Type\*.svg -> Svg\Category\Type\*.svg
Change-Id: I43008c4d23874f23aed16dcdf574b9f36384e955
HYTOS/HYTOS/AppDocData.py | ||
---|---|---|
502 | 502 |
conn = sqlite3.connect(dbPath) |
503 | 503 |
|
504 | 504 |
UPDATE_SYMBOL_SQL = """ |
505 |
UPDATE Symbol |
|
506 |
SET |
|
507 |
name = ?, SymbolType_UID=(select UID from SymbolType where Type=?), threshold = ?, minMatchPoint = ?, isDetectOrigin = ?, |
|
508 |
rotationCount = ?, ocrOption = ?, isContainChild = ?, originalPoint = ?, connectionPoint = ?, |
|
509 |
baseSymbol = ?, additionalSymbol = ?, isExceptDetect = ?, hasInstrumentLabel = ?, width = ?, height = ?, flip = ? |
|
510 |
WHERE uid = ? |
|
505 |
UPDATE Symbols |
|
506 |
SET name = ? |
|
507 |
, originalPoint = ? |
|
508 |
, connectionPoint = ? |
|
509 |
WHERE uid = ? |
|
511 | 510 |
""" |
512 | 511 |
|
513 | 512 |
cursor = conn.cursor() |
514 |
query = (symbol.getName(), symbol.getType(), symbol.getThreshold() |
|
515 |
, symbol.getMinMatchCount(), symbol.getIsDetectOnOrigin(), symbol.getRotationCount() |
|
516 |
, symbol.getOcrOption(), symbol.getIsContainChild() |
|
517 |
, symbol.getOriginalPoint(), symbol.getConnectionPoint() |
|
518 |
, symbol.getBaseSymbol(), symbol.getAdditionalSymbol(), symbol.getIsExceptDetect(), symbol.getHasInstrumentLabel(), symbol.width, symbol.height, symbol.detectFlip, symbol.getUid()) |
|
513 |
query = (symbol.getName(), symbol.getOriginalPoint(), symbol.getConnectionPoint(), symbol.getUid()) |
|
519 | 514 |
cursor.execute(UPDATE_SYMBOL_SQL, query) |
520 | 515 |
conn.commit() |
521 | 516 |
isUpdated = True |
... | ... | |
547 | 542 |
|
548 | 543 |
sql = """select s.UID |
549 | 544 |
, s.Name |
545 |
, t.Category |
|
550 | 546 |
, t.Type |
551 | 547 |
, s.OriginalPoint |
552 | 548 |
, s.ConnectionPoint |
... | ... | |
558 | 554 |
cursor.execute(sql) |
559 | 555 |
rows = cursor.fetchall() |
560 | 556 |
for row in rows: |
561 |
sym = symbol.SymbolBase(row[0], row[1], row[2], row[3], row[4]) |
|
557 |
sym = symbol.SymbolBase(row[0], row[1], row[2], row[3], row[4], row[5])
|
|
562 | 558 |
targetSymbolList.append(sym) |
563 | 559 |
except Exception as ex: |
564 | 560 |
print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)) |
... | ... | |
682 | 678 |
def setCurrentProject(self, project): |
683 | 679 |
self.project = project |
684 | 680 |
self.makeChildDir() |
681 |
self.copySvg() |
|
685 | 682 |
try: |
686 | 683 |
# Creates or opens a file called mydb with a SQLite3 DB |
687 | 684 |
dbPath = os.path.join(self.getCurrentProject().getDbFilePath() , App.NAME + '.db') |
... | ... | |
720 | 717 |
pass |
721 | 718 |
|
722 | 719 |
''' |
720 |
@brief Copy Svg |
|
721 |
@author yeonjin |
|
722 |
@date 19.07.31 |
|
723 |
''' |
|
724 |
def copySvg(self): |
|
725 |
from shutil import copyfile |
|
726 |
|
|
727 |
path = os.path.join(os.getenv('ALLUSERSPROFILE'), App.NAME) |
|
728 |
sourceDir = os.path.join(path, 'svg') |
|
729 |
if not os.path.exists(sourceDir): |
|
730 |
return |
|
731 |
|
|
732 |
project = AppDocData.instance().getCurrentProject() |
|
733 |
targetDir = project.getSvgFilePath() |
|
734 |
|
|
735 |
for root, dirs, files in os.walk(sourceDir): |
|
736 |
for file in files: # loops through directories and files |
|
737 |
sourceFile = os.path.join(root, file) |
|
738 |
targetFile = sourceFile.replace(sourceDir, targetDir) |
|
739 |
if not os.path.exists(targetFile): |
|
740 |
dir = os.path.dirname(targetFile) |
|
741 |
if not os.path.exists(dir): |
|
742 |
os.makedirs(dir) |
|
743 |
|
|
744 |
copyfile(sourceFile, targetFile) |
|
745 |
|
|
746 |
|
|
747 |
|
|
748 |
|
|
749 |
|
|
750 |
|
|
751 |
|
|
752 |
''' |
|
723 | 753 |
@brief Make Directory |
724 | 754 |
@author Jeongwoo |
725 | 755 |
@date 18.05.08 |
... | ... | |
1274 | 1304 |
# Get a cursor object |
1275 | 1305 |
cursor = conn.cursor() |
1276 | 1306 |
|
1277 |
sql = "select * from configuration"
|
|
1307 |
sql = "select Section, Key, Value from configuration"
|
|
1278 | 1308 |
|
1279 | 1309 |
cursor.execute(sql) |
1280 | 1310 |
rows = cursor.fetchall() |
... | ... | |
1602 | 1632 |
|
1603 | 1633 |
sql = """select s.UID |
1604 | 1634 |
, s.Name |
1635 |
, t.Category |
|
1605 | 1636 |
, t.Type |
1606 | 1637 |
, s.OriginalPoint |
1607 | 1638 |
, s.ConnectionPoint |
... | ... | |
1615 | 1646 |
rows = cursor.fetchall() |
1616 | 1647 |
if rows is not None and len(rows) > 0: |
1617 | 1648 |
symbolTuple = rows[0] |
1618 |
ret = symbol.SymbolBase(symbolTuple[0], symbolTuple[1], symbolTuple[2], symbolTuple[3], symbolTuple[4]) |
|
1649 |
ret = symbol.SymbolBase(symbolTuple[0], symbolTuple[1], symbolTuple[2], symbolTuple[3], symbolTuple[4], symbolTuple[5])
|
|
1619 | 1650 |
except Exception as ex: |
1620 | 1651 |
print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)) |
1621 | 1652 |
finally: |
... | ... | |
1623 | 1654 |
|
1624 | 1655 |
return ret |
1625 | 1656 |
|
1657 |
|
|
1658 |
def getSymbolListByUID(self, uid): |
|
1659 |
ret = [] |
|
1660 |
|
|
1661 |
try: |
|
1662 |
dbPath = os.path.join(self.getCurrentProject().getDbFilePath(), AppDocData.DATABASE) |
|
1663 |
conn = sqlite3.connect(dbPath) |
|
1664 |
cursor = conn.cursor() |
|
1665 |
|
|
1666 |
sql = """select s.UID |
|
1667 |
, s.Name |
|
1668 |
, t.Category |
|
1669 |
, t.Type |
|
1670 |
, s.OriginalPoint |
|
1671 |
, s.ConnectionPoint |
|
1672 |
from Symbols s |
|
1673 |
inner join SymbolType t |
|
1674 |
on s.SymbolType_UID = t.uid |
|
1675 |
where s.SymbolType_UID = ?""" |
|
1676 |
|
|
1677 |
try: |
|
1678 |
cursor.execute(sql, (uid,)) |
|
1679 |
rows = cursor.fetchall() |
|
1680 |
if rows is not None and len(rows) > 0: |
|
1681 |
for row in rows: |
|
1682 |
sym = symbol.SymbolBase(row[0], row[1], row[2], row[3], row[4], row[5]) |
|
1683 |
|
|
1684 |
ret.append(sym) |
|
1685 |
except Exception as ex: |
|
1686 |
print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)) |
|
1687 |
finally: |
|
1688 |
conn.close() |
|
1689 |
|
|
1690 |
return ret |
|
1691 |
|
|
1692 |
|
|
1626 | 1693 |
''' |
1627 | 1694 |
@brief get symbol name list |
1628 | 1695 |
@history 18.04.24 Jeongwoo Add isExceptDetect Field |
... | ... | |
1638 | 1705 |
|
1639 | 1706 |
sql = """select s.UID |
1640 | 1707 |
, s.Name |
1708 |
, t.Category |
|
1641 | 1709 |
, t.Type |
1642 | 1710 |
, s.OriginalPoint |
1643 | 1711 |
, s.ConnectionPoint |
... | ... | |
1649 | 1717 |
|
1650 | 1718 |
sql = """select s.UID |
1651 | 1719 |
, s.Name |
1720 |
, t.Category |
|
1652 | 1721 |
, t.Type |
1653 | 1722 |
, s.OriginalPoint |
1654 | 1723 |
, s.ConnectionPoint |
... | ... | |
1660 | 1729 |
rows = cursor.fetchall() |
1661 | 1730 |
if rows is not None and len(rows) > 0: |
1662 | 1731 |
for row in rows: |
1663 |
sym = symbol.SymbolBase(row[0], row[1], row[2], row[3], row[4]) |
|
1732 |
sym = symbol.SymbolBase(row[0], row[1], row[2], row[3], row[4], row[5])
|
|
1664 | 1733 |
|
1665 | 1734 |
ret.append(sym) |
1666 | 1735 |
except Exception as ex: |
... | ... | |
2792 | 2861 |
# Get a cursor object |
2793 | 2862 |
cursor = conn.cursor() |
2794 | 2863 |
|
2795 |
# delete all datas of current drawing |
|
2796 |
pidNo = self.activeDrawing.name |
|
2797 |
sql = "delete from LINE_DATA_LIST where PNID_NO = '{}'".format(pidNo) |
|
2798 |
cursor.execute(sql) |
|
2799 |
sql = "delete from EQUIPMENT_DATA_LIST where PNID_NO = '{}'".format(pidNo) |
|
2800 |
cursor.execute(sql) |
|
2801 |
sql = "delete from VALVE_DATA_LIST where PNID_NO = '{}'".format(pidNo) |
|
2802 |
cursor.execute(sql) |
|
2803 |
sql = "delete from INSTRUMENT_DATA_LIST where PNID_NO = '{}'".format(pidNo) |
|
2804 |
cursor.execute(sql) |
|
2805 |
sql = "delete from NOTE_DATA_LIST where PNID_NO = '{}'".format(pidNo) |
|
2806 |
cursor.execute(sql) |
|
2807 |
sql = "delete from TitleBlockValues where Drawings_UID = '{}'".format(pidNo) |
|
2808 |
cursor.execute(sql) |
|
2809 |
|
|
2810 |
# delete ports |
|
2811 |
sql = "delete from Ports where Components_UID in (select UID from Components where Drawings_UID = (select UID from Drawings where Name= '{}'))".format(pidNo) |
|
2812 |
cursor.execute(sql) |
|
2864 |
uid = self.activeDrawing.UID |
|
2813 | 2865 |
|
2814 |
# delete Attributes
|
|
2815 |
sql = "delete from Attributes where Components_UID in (select UID from Components where Drawings_UID = (select UID from Drawings where Name= '{}'))".format(pidNo)
|
|
2866 |
# delete Points
|
|
2867 |
sql = "delete from Points where Components_UID in (select UID from Components where Drawings_UID = '{}')".format(uid)
|
|
2816 | 2868 |
cursor.execute(sql) |
2817 | 2869 |
|
2818 | 2870 |
# delete Components |
2819 |
sql = "delete from Components where Drawings_UID = (select UID from Drawings where Name= '{}')".format(pidNo) |
|
2820 |
cursor.execute(sql) |
|
2821 |
|
|
2822 |
# delete Vendor Package |
|
2823 |
sql = "delete from VendorPackages where Drawings_UID = '{}'".format(pidNo) |
|
2871 |
sql = "delete from Components where Drawings_UID = '{}'".format(uid) |
|
2824 | 2872 |
cursor.execute(sql) |
2825 | 2873 |
|
2826 | 2874 |
for item in items: |
... | ... | |
3078 | 3126 |
|
3079 | 3127 |
return SymbolCategoryList |
3080 | 3128 |
|
3129 |
|
|
3130 |
def getComponentByComponentUID(self, uid): |
|
3131 |
ComponentList = [] |
|
3132 |
|
|
3133 |
try: |
|
3134 |
dbPath = os.path.join(self.getCurrentProject().getDbFilePath(), AppDocData.DATABASE) |
|
3135 |
|
|
3136 |
conn = sqlite3.connect(dbPath) |
|
3137 |
cursor = conn.cursor() |
|
3138 |
|
|
3139 |
sql = """select c.uid |
|
3140 |
, c.Name |
|
3141 |
, c.Symbols_UID |
|
3142 |
, t.Category |
|
3143 |
, t.type |
|
3144 |
, s.Name |
|
3145 |
, s.OriginalPoint |
|
3146 |
, c.X |
|
3147 |
, c.Y |
|
3148 |
, c.Rotation |
|
3149 |
, c.Scale |
|
3150 |
, p.[Index] |
|
3151 |
, p.x |
|
3152 |
, p.y |
|
3153 |
from points p |
|
3154 |
left join components c |
|
3155 |
on p.components_uid = c.uid |
|
3156 |
left join symbols s |
|
3157 |
on c.Symbols_UID = s.UID |
|
3158 |
left join SymbolType t |
|
3159 |
on s.symboltype_uid = t.uid |
|
3160 |
where c.uid = ? |
|
3161 |
order by p.[Index]""" |
|
3162 |
try: |
|
3163 |
cursor.execute(sql, (uid,)) |
|
3164 |
rows = cursor.fetchall() |
|
3165 |
for row in rows: |
|
3166 |
data = [] |
|
3167 |
for index in range(len(cursor.description)): |
|
3168 |
data.append(row[index]) |
|
3169 |
ComponentList.append(data) # Components_UID |
|
3170 |
except Exception as ex: |
|
3171 |
from App import App |
|
3172 |
|
|
3173 |
message = 'error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno) |
|
3174 |
App.mainWnd().addMessage.emit(MessageType.Error, message) |
|
3175 |
finally: |
|
3176 |
conn.close() |
|
3177 |
|
|
3178 |
return ComponentList |
|
3179 |
|
|
3180 |
''' |
|
3181 |
@brief Return Components By DrawingUID |
|
3182 |
@author yeonjin |
|
3183 |
@date 19.07.29 |
|
3184 |
''' |
|
3185 |
def getComponentListByDrawingUID(self, uid): |
|
3186 |
ComponentList = [] |
|
3187 |
|
|
3188 |
try: |
|
3189 |
dbPath = os.path.join(self.getCurrentProject().getDbFilePath(), AppDocData.DATABASE) |
|
3190 |
|
|
3191 |
conn = sqlite3.connect(dbPath) |
|
3192 |
cursor = conn.cursor() |
|
3193 |
sql = 'select UID from Components where Drawings_UID = "' + uid + '"' |
|
3194 |
try: |
|
3195 |
cursor.execute(sql) |
|
3196 |
rows = cursor.fetchall() |
|
3197 |
for row in rows: |
|
3198 |
ComponentList.append((row[0])) # Components_UID |
|
3199 |
except Exception as ex: |
|
3200 |
from App import App |
|
3201 |
|
|
3202 |
message = 'error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno) |
|
3203 |
App.mainWnd().addMessage.emit(MessageType.Error, message) |
|
3204 |
finally: |
|
3205 |
conn.close() |
|
3206 |
|
|
3207 |
return ComponentList |
|
3208 |
|
|
3081 | 3209 |
''' |
3082 | 3210 |
@brief Return Symbol Type Items By Category |
3083 | 3211 |
@author yeonjin |
... | ... | |
3091 | 3219 |
|
3092 | 3220 |
conn = sqlite3.connect(dbPath) |
3093 | 3221 |
cursor = conn.cursor() |
3094 |
sql = 'SELECT Category, Type FROM SymbolType WHERE Category = "' + category + '"' |
|
3222 |
sql = 'SELECT UID, Category, Type FROM SymbolType WHERE Category = "' + category + '"'
|
|
3095 | 3223 |
try: |
3096 | 3224 |
cursor.execute(sql) |
3097 | 3225 |
rows = cursor.fetchall() |
3098 | 3226 |
for row in rows: |
3099 |
symbolTypeList.append((row[0], row[1])) # Category, Type
|
|
3227 |
symbolTypeList.append((row[0], row[1], row[2])) # UID, Category, Type
|
|
3100 | 3228 |
except Exception as ex: |
3101 | 3229 |
from App import App |
3102 | 3230 |
|
HYTOS/HYTOS/Commands/SaveWorkCommand.py | ||
---|---|---|
21 | 21 |
""" do given work""" |
22 | 22 |
from datetime import datetime |
23 | 23 |
from AppDocData import AppDocData |
24 |
from AppDocData import MessageType |
|
25 |
from EngineeringTextItem import QEngineeringTextItem |
|
26 |
from EngineeringLineNoTextItem import QEngineeringLineNoTextItem |
|
27 |
from EngineeringNoteItem import QEngineeringNoteItem |
|
28 |
from QEngineeringSizeTextItem import QEngineeringSizeTextItem |
|
29 |
from EngineeringEquipmentItem import QEngineeringEquipmentItem |
|
30 |
from EngineeringInstrumentItem import QEngineeringInstrumentItem |
|
31 |
from EngineeringSpecBreakItem import QEngineeringSpecBreakItem |
|
32 |
from EngineeringVendorItem import QEngineeringVendorItem |
|
24 |
from AppDocData import MessageType |
|
33 | 25 |
from SymbolSvgItem import SymbolSvgItem |
34 |
from EngineeringReducerItem import QEngineeringReducerItem
|
|
26 |
from EngineeringStreamlineItem import QEngineeringStreamlineItem
|
|
35 | 27 |
|
36 | 28 |
try: |
37 | 29 |
appDocData = AppDocData.instance() |
38 |
|
|
39 |
titleBlockProps = appDocData.getTitleBlockProperties() |
|
40 | 30 |
items = appDocData.allItems |
41 |
titleBlockItems = [] |
|
42 |
for item in items: |
|
43 |
if type(item) is QEngineeringTextItem: |
|
44 |
for titleBlockProp in titleBlockProps: |
|
45 |
if item.area == titleBlockProp[0]: |
|
46 |
titleBlockItems.append(item) |
|
47 |
|
|
48 |
dbItems = [item for item in items if type(item) is QEngineeringInstrumentItem or type(item) is QEngineeringEquipmentItem or type(item) is QEngineeringReducerItem or\ |
|
49 |
type(item) is QEngineeringNoteItem or type(item) is SymbolSvgItem or type(item) is QEngineeringLineNoTextItem or type(item) is QEngineeringVendorItem] + titleBlockItems |
|
31 |
|
|
32 |
dbItems = [item for item in items if type(item) is SymbolSvgItem or type(item) is QEngineeringStreamlineItem] |
|
50 | 33 |
appDocData.saveToDatabase(dbItems) |
51 | 34 |
|
52 |
self.resultStr = SaveWorkCommand.save_to_xml()
|
|
35 |
self.resultStr = SaveWorkCommand.save_to_database()
|
|
53 | 36 |
|
54 | 37 |
""" update drawing's modified time """ |
55 | 38 |
drawings = appDocData.getDrawings() |
... | ... | |
65 | 48 |
self.display_message.emit(MessageType.Error, message) |
66 | 49 |
|
67 | 50 |
@staticmethod |
68 |
def save_to_xml(): |
|
69 |
""" save recognized items to xml file """ |
|
70 |
import XmlGenerator as xg |
|
51 |
def save_to_database(): |
|
52 |
""" save recognized items to database """ |
|
71 | 53 |
from AppDocData import AppDocData |
54 |
from SymbolSvgItem import SymbolSvgItem |
|
55 |
from EngineeringStreamlineItem import QEngineeringStreamlineItem |
|
72 | 56 |
|
73 |
docData = AppDocData.instance() |
|
74 |
result = xg.writeXmlOnScene(docData.imgName, docData.imgWidth, docData.imgHeight) |
|
57 |
appDocData = AppDocData.instance() |
|
58 |
items = appDocData.allItems |
|
59 |
|
|
60 |
dbItems = [item for item in items if type(item) is SymbolSvgItem or type(item) is QEngineeringStreamlineItem] |
|
61 |
|
|
62 |
resultStr = " Save Count : " + str(len(dbItems)) |
|
75 | 63 |
|
76 |
resultStr = '[저장 결과]'
|
|
64 |
return resultStr
|
|
77 | 65 |
|
78 |
for item in result.items(): |
|
79 |
itemName = str(item[0]) |
|
80 |
itemSuccessCount = str(item[1][0]) |
|
81 |
itemFailUidList = item[1][1] |
|
82 |
resultStr += "\r\n" + itemName + " Save Count : " + itemSuccessCount |
|
83 |
if len(itemFailUidList) > 0: |
|
84 |
resultStr += "\r\n" + itemName + " Error List(UID)" |
|
85 |
for uid in itemFailUidList: |
|
86 |
resultStr += "\r\n" + uid |
|
87 | 66 |
|
88 |
return resultStr |
|
67 |
|
HYTOS/HYTOS/ItemTreeWidget.py | ||
---|---|---|
359 | 359 |
if isEquipmentType: |
360 | 360 |
item = QTreeWidgetItem(self.EqpTreeItem, [child.name]) |
361 | 361 |
item.setData(0, self.TREE_DATA_ROLE, child) |
362 |
#elif child.type == 'Nozzles': |
|
363 |
# for i in range(self.EqpTreeItem.childCount()): |
|
364 |
# eqpTreeItem = eqpRootTreeItem[0].child(i) |
|
365 |
# eqpSymbol = eqpTreeItem.data(0, self.TREE_DATA_ROLE) |
|
366 |
# if child.owner is eqpSymbol: |
|
367 |
# item = QTreeWidgetItem(eqpTreeItem, [child.name]) |
|
368 |
# item.setData(0, self.TREE_DATA_ROLE, child) |
|
369 |
# break |
|
370 |
|
|
362 |
|
|
371 | 363 |
if item is None: |
372 | 364 |
item = QTreeWidgetItem(self.SymbolsTreeItem, [child.name]) |
373 | 365 |
elif child.type == 'Notes': |
... | ... | |
376 | 368 |
item = QTreeWidgetItem(self.SymbolsTreeItem, [child.name]) |
377 | 369 |
|
378 | 370 |
if item is not None: |
379 |
iconPath = os.path.join(AppDocData.instance().getCurrentProject().getSvgFilePath(), child.type , child.name + ".svg") |
|
371 |
iconPath = os.path.join(AppDocData.instance().getCurrentProject().getSvgFilePath(), child.category, child.type , child.name + ".svg")
|
|
380 | 372 |
item.setIcon(0, QIcon(iconPath)) |
381 | 373 |
item.setData(0, self.TREE_DATA_ROLE, child) |
382 | 374 |
brush = QBrush() |
HYTOS/HYTOS/LineNoTracer.py | ||
---|---|---|
493 | 493 |
|
494 | 494 |
svgFileName = end_break_names[0].sName |
495 | 495 |
symbol = docdata.getSymbolByQuery('name', svgFileName) |
496 |
svgFilePath = os.path.join(docdata.getCurrentProject().getSvgFilePath(), symbol.getType(), svgFileName+'.svg') |
|
496 |
svgFilePath = os.path.join(docdata.getCurrentProject().getSvgFilePath(), symbol.getCategory(), symbol.getType(), svgFileName+'.svg')
|
|
497 | 497 |
|
498 | 498 |
#end_breaks = [] |
499 | 499 |
lineNo_froms = [] |
... | ... | |
554 | 554 |
|
555 | 555 |
svgFileName = line_names[0].sName |
556 | 556 |
symbol = docdata.getSymbolByQuery('name', svgFileName) |
557 |
svgFilePath = os.path.join(docdata.getCurrentProject().getSvgFilePath(), symbol.getType(), svgFileName+'.svg') |
|
557 |
svgFilePath = os.path.join(docdata.getCurrentProject().getSvgFilePath(), symbol.getCategory(), symbol.getType(), svgFileName+'.svg')
|
|
558 | 558 |
|
559 | 559 |
allowed_error = 0.000001 |
560 | 560 |
|
HYTOS/HYTOS/MainWindow.py | ||
---|---|---|
101 | 101 |
docData = AppDocData.instance() |
102 | 102 |
project = docData.getCurrentProject() |
103 | 103 |
_translate = QCoreApplication.translate |
104 |
|
|
104 | 105 |
self.setWindowTitle(_translate(App.NAME + " - {}".format(project.name), App.NAME + " - {}".format(project.name))) |
105 | 106 |
self.resizeDocks({self.dockWidgetSymbolExplorer}, {self.dockWidgetDrawingExplorer.sizeHint().width()}, Qt.Horizontal) |
106 | 107 |
|
107 |
self.toolBar.insertSeparator(self.actionValidate) |
|
108 |
|
|
109 | 108 |
self.graphicsView = QtImageViewer.QtImageViewer(self) |
110 | 109 |
self.graphicsView.setParent(self.centralwidget) |
111 | 110 |
self.graphicsView.useDefaultCommand() ##### USE DEFAULT COMMAND |
... | ... | |
146 | 145 |
self.actionGroup.addAction(self.actionZoom) |
147 | 146 |
self.actionGroup.addAction(self.actionFitWindow) |
148 | 147 |
self.actionGroup.addAction(self.actionSave) |
149 |
self.actionGroup.addAction(self.actionValidate) |
|
150 | 148 |
|
151 | 149 |
self.actionGroup.triggered.connect(self.actionGroupTriggered) |
152 | 150 |
|
... | ... | |
331 | 329 |
self._headers.append('Limitation of Velocity') |
332 | 330 |
self._headers.append('Limitation of Press. Drop') |
333 | 331 |
|
334 |
|
|
335 | 332 |
self.tableWidgetHMB.setColumnCount(len(self._headers)) |
336 | 333 |
self.tableWidgetHMB.setHorizontalHeaderLabels(self._headers) |
337 | 334 |
self.tableWidgetHMB.setEditTriggers(QAbstractItemView.NoEditTriggers) |
338 |
|
|
339 |
#self.tableWidgetHMB.setColumnHidden(0, True)
|
|
340 |
#self.tableWidgetHMB.setColumnHidden(1, True)
|
|
335 |
|
|
336 |
self.tableWidgetHMB.setColumnHidden(0, True) |
|
337 |
self.tableWidgetHMB.setColumnHidden(1, True) |
|
341 | 338 |
|
342 | 339 |
self.tableWidgetHMB.resizeColumnsToContents() |
343 | 340 |
|
... | ... | |
363 | 360 |
self.treeWidgetDrawingList.clear() |
364 | 361 |
self.treeWidgetDrawingList.root = QTreeWidgetItem(self.treeWidgetDrawingList, [self.tr('Drawings'), '']) |
365 | 362 |
self.treeWidgetDrawingList.root.setFlags(self.treeWidgetDrawingList.root.flags() | Qt.ItemIsTristate | Qt.ItemIsUserCheckable) |
366 |
self.treeWidgetDrawingList.root.setCheckState(0, Qt.Unchecked) |
|
363 |
#self.treeWidgetDrawingList.root.setCheckState(0, Qt.Unchecked)
|
|
367 | 364 |
|
368 | 365 |
for drawing in drawings: |
366 |
if drawing[1] == 'Template': |
|
367 |
continue |
|
369 | 368 |
item = QTreeWidgetItem(self.treeWidgetDrawingList.root, [drawing[1], drawing[2], drawing[0] if drawing and drawing[0] else '']) |
370 |
item.setFlags(item.flags() | Qt.ItemIsUserCheckable) |
|
371 |
item.setCheckState(0, Qt.Unchecked) |
|
369 |
#item.setFlags(item.flags() | Qt.ItemIsUserCheckable)
|
|
370 |
#item.setCheckState(0, Qt.Unchecked)
|
|
372 | 371 |
|
373 | 372 |
self.treeWidgetDrawingList.root.setText(0, self.tr('Drawings')+'({})'.format(self.treeWidgetDrawingList.root.childCount())) |
374 | 373 |
self.treeWidgetDrawingList.expandItem(self.treeWidgetDrawingList.root) |
... | ... | |
487 | 486 |
itemTypes.append(type(item)) |
488 | 487 |
## |
489 | 488 |
|
489 |
#SaveWorkCommand.save_to_database() |
|
490 | 490 |
self._save_work_cmd = SaveWorkCommand() |
491 | 491 |
self._save_work_cmd.display_message.connect(self.onAddMessage) |
492 | 492 |
self._save_work_cmd.finished.connect(self.save_finished) |
... | ... | |
527 | 527 |
if messageType == MessageType.Error: |
528 | 528 |
item.setBackground(Qt.red) |
529 | 529 |
|
530 |
self.listWidgetLog.insertItem(0, item) |
|
530 |
#self.listWidgetLog.insertItem(0, item)
|
|
531 | 531 |
except Exception as ex: |
532 | 532 |
print('error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno)) |
533 | 533 |
|
... | ... | |
610 | 610 |
appDocData = AppDocData.instance() |
611 | 611 |
appDocData.activeDrawing.hmbTable.reset() |
612 | 612 |
appDocData.clearItemList(True) |
613 |
|
|
613 |
|
|
614 | 614 |
|
615 | 615 |
items = self.graphicsView.scene.items() |
616 | 616 |
for item in items: |
... | ... | |
817 | 817 |
appDocData.activeDrawing = Drawing(appDocData.imgName) |
818 | 818 |
self.itemTreeWidget.setCurrentDrawing(appDocData.activeDrawing.name) |
819 | 819 |
|
820 |
drawingList = self.treeWidgetDrawingList.topLevelItem(0) |
|
821 |
for childIdex in range(drawingList.childCount()): |
|
822 |
drawingList.child(childIdex).setCheckState(0, Qt.Unchecked) |
|
823 |
for childIdex in range(drawingList.childCount()): |
|
824 |
child = drawingList.child(childIdex) |
|
825 |
if child.text(0).replace('.png', '') == appDocData.activeDrawing.name: |
|
826 |
child.setCheckState(0, Qt.Checked) |
|
827 |
break |
|
828 |
|
|
829 |
## Load data on xml |
|
830 |
path = os.path.join(appDocData.getCurrentProject().getTempPath(), drawing + '.xml') |
|
831 |
count = 0 |
|
832 |
if os.path.isfile(path): |
|
833 |
for child in parse(path).getroot().getchildren(): |
|
834 |
count = count + len(child.getchildren()) |
|
820 |
## Load data on database |
|
821 |
components = appDocData.getComponentListByDrawingUID(appDocData.activeDrawing.UID) |
|
822 |
count = len(components) |
|
823 |
|
|
835 | 824 |
if count > 0: |
836 |
try: |
|
837 |
self.progress = QProgressDialog(self.tr("Please wait for a while"), self.tr("Cancel"), 0, 100, self) if not hasattr(self, 'progress') else self.progress |
|
838 |
self.progress.setWindowModality(Qt.WindowModal) |
|
839 |
self.progress.setAutoReset(True) |
|
840 |
self.progress.setAutoClose(True) |
|
841 |
self.progress.setMinimum(0) |
|
842 |
self.progress.resize(600,100) |
|
843 |
self.progress.setWindowTitle(self.tr("Reading file...")) |
|
844 |
self.progress.show() |
|
845 |
|
|
846 |
self.loadRecognitionResultFromXml(path) |
|
847 |
#self.checkAttribute() |
|
848 |
finally: |
|
849 |
self.progress.setValue(self.progress.maximum()) |
|
850 |
self.progress.hide() |
|
825 |
self.load_components(components) |
|
826 |
|
|
851 | 827 |
self.changeViewCheckedState(True) |
852 | 828 |
self.load_HMB() |
853 | 829 |
except Exception as ex: |
... | ... | |
867 | 843 |
self.load_drawing_list() |
868 | 844 |
self.open_border_file() |
869 | 845 |
self.load_data(drawingName) |
870 |
|
|
871 |
''' |
|
872 |
@brief Open image drawing file and then display it |
|
873 |
@author humkyung |
|
874 |
@date 2018.??.?? |
|
875 |
@history 18.04.23 Jeongwoo Add AppDocData.instance().setCurrentPidSource |
|
876 |
18.04.23 Jeongwoo Add Store Set Current Pid Image on AppDocData |
|
877 |
18.05.02 Jeongwoo Add useDefaultCommand() |
|
878 |
humkyung 2018.05.24 load recognition result file if exists |
|
879 |
Jeongwoo 2018.05.29 load data on xml if xml file exist |
|
880 |
humkyung 2018.08.22 clear scene before loading xml file |
|
881 |
''' |
|
882 |
def onOpenImageDrawing(self, path=None): |
|
883 |
from Drawing import Drawing |
|
884 |
from xml.etree.ElementTree import Element, SubElement, dump, ElementTree, parse |
|
885 |
|
|
886 |
try: |
|
887 |
appDocData = AppDocData.instance() |
|
888 |
project = appDocData.getCurrentProject() |
|
889 |
|
|
890 |
#for item in self.graphicsView.scene.items(): |
|
891 |
# self.graphicsView.scene.removeItem(item) |
|
892 |
|
|
893 |
self.path = self.graphicsView.loadImageFromFile(project.getDrawingFilePath(), path if type(path) is str else '') |
|
894 |
if os.path.isfile(self.path): |
|
895 |
appDocData.clear() |
|
896 |
self.onCommandRejected() |
|
897 |
|
|
898 |
appDocData.setImgFilePath(self.path) |
|
899 |
appDocData.activeDrawing = Drawing(appDocData.imgName) |
|
900 |
#appDocData.setCurrentPidSource(Image.open(self.path)) |
|
901 |
self.itemTreeWidget.setCurrentDrawing(appDocData.activeDrawing.name) |
|
902 |
|
|
903 |
drawingList = self.treeWidgetDrawingList.topLevelItem(0) |
|
904 |
for childIdex in range(drawingList.childCount()): |
|
905 |
drawingList.child(childIdex).setCheckState(0, Qt.Unchecked) |
|
906 |
for childIdex in range(drawingList.childCount()): |
|
907 |
child = drawingList.child(childIdex) |
|
908 |
if child.text(0).replace('.png', '') == appDocData.activeDrawing.name: |
|
909 |
child.setCheckState(0, Qt.Checked) |
|
910 |
break |
|
911 |
|
|
912 |
## Load data on xml |
|
913 |
path = os.path.join(appDocData.getCurrentProject().getTempPath(), appDocData.imgName + '.xml') |
|
914 |
count = 0 |
|
915 |
if os.path.isfile(path): |
|
916 |
for child in parse(path).getroot().getchildren(): |
|
917 |
count = count + len(child.getchildren()) |
|
918 |
if count > 0: |
|
919 |
try: |
|
920 |
self.progress = QProgressDialog(self.tr("Please wait for a while"), self.tr("Cancel"), 0, 100, self) if not hasattr(self, 'progress') else self.progress |
|
921 |
self.progress.setWindowModality(Qt.WindowModal) |
|
922 |
self.progress.setAutoReset(True) |
|
923 |
self.progress.setAutoClose(True) |
|
924 |
self.progress.setMinimum(0) |
|
925 |
self.progress.resize(600,100) |
|
926 |
self.progress.setWindowTitle(self.tr("Reading file...")) |
|
927 |
self.progress.show() |
|
928 |
|
|
929 |
self.loadRecognitionResultFromXml(path) |
|
930 |
#self.checkAttribute() |
|
931 |
finally: |
|
932 |
self.progress.setValue(self.progress.maximum()) |
|
933 |
self.progress.hide() |
|
934 |
self.changeViewCheckedState(True) |
|
935 |
except Exception as ex: |
|
936 |
message = 'error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno) |
|
937 |
self.addMessage.emit(MessageType.Error, message) |
|
938 |
|
|
939 |
return self.path |
|
940 |
|
|
846 |
|
|
941 | 847 |
def changeViewCheckedState(self, checked, clear=True): |
942 | 848 |
''' |
943 | 849 |
@brief change view checked state |
... | ... | |
1094 | 1000 |
@history Jeongwoo 2018.05.10 Change method for Checkable action |
1095 | 1001 |
''' |
1096 | 1002 |
def onPlaceLine(self): |
1097 |
#import PlaceStreamlineCommand |
|
1098 |
|
|
1099 |
""" |
|
1100 |
if not self.graphicsView.hasImage(): |
|
1101 |
self.actionLine.setChecked(False) |
|
1102 |
self.showImageSelectionMessageBox() |
|
1103 |
return |
|
1104 |
""" |
|
1105 |
|
|
1106 | 1003 |
self.actionLine.setChecked(True) |
1107 | 1004 |
if not hasattr(self.actionLine, 'tag'): |
1108 | 1005 |
self.actionLine.tag = PlaceStreamlineCommand.PlaceStreamlineCommand(self.graphicsView) |
... | ... | |
1157 | 1054 |
self.tableWidgetHMB.setItem(rowIndex, 0, QTableWidgetItem(str(hmb.uid))) |
1158 | 1055 |
self.tableWidgetHMB.setItem(rowIndex, 1, QTableWidgetItem(str(hmb.drawing_uid))) |
1159 | 1056 |
self.tableWidgetHMB.setItem(rowIndex, 2, QTableWidgetItem(str(hmb.stream_no))) |
1057 |
|
|
1160 | 1058 |
rowIndex += 1 |
1161 | 1059 |
|
1162 | 1060 |
|
... | ... | |
1519 | 1417 |
size = [symbol.getWidth(), symbol.getHeight()] |
1520 | 1418 |
name = symbol.getName() |
1521 | 1419 |
angle = round(math.radians(symbol.getRotatedAngle()), 2) |
1420 |
category = symbol.getCategory() |
|
1522 | 1421 |
_type = symbol.getType() |
1523 | 1422 |
flip = symbol.getDetectFlip() |
1524 | 1423 |
origin = [0,0] |
... | ... | |
1537 | 1436 |
childSymbol = symbol.getAdditionalSymbol() |
1538 | 1437 |
hasInstrumentLabel = symbol.getHasInstrumentLabel() |
1539 | 1438 |
|
1540 |
svgFilePath = os.path.join(project.getSvgFilePath(), _type, name + '.svg') |
|
1439 |
svgFilePath = os.path.join(project.getSvgFilePath(), category, _type, name + '.svg')
|
|
1541 | 1440 |
if os.path.isfile(svgFilePath): |
1542 | 1441 |
svg = SymbolSvgItem.createItem(_type, svgFilePath, owner=None, flip=flip) |
1543 | 1442 |
#print(pt) |
... | ... | |
1933 | 1832 |
return (True, mergedOtherLine) |
1934 | 1833 |
|
1935 | 1834 |
''' |
1936 |
@brief load recognition result |
|
1937 |
@author humkyung |
|
1938 |
@date 2018.04.?? |
|
1939 |
@history humkyung 2018.01.12 parse originalpoint and connectionpoint |
|
1940 |
Jeongwoo 2018.04.17 add QGraphicItem with Rotated text |
|
1941 |
Jeongwoo 2018.04.23 Change to Draw texts on QEngineeringTextItem |
|
1942 |
humkyung 2018.04.23 connect item remove slot to result tree |
|
1943 |
Jeongwoo 2018.04.25 Add if state with QEngineeringNoteItem |
|
1944 |
Jeongwoo 2018.04.26 Change method to create TextItem object with TextItemFactory |
|
1945 |
Jeongwoo 2018.05.03 Change method to draw Svg Item on Scene (svg.addSvgItemToScene) |
|
1946 |
Jeongwoo 2018.05.29 Change method name / Change method to add item / Add Line item |
|
1947 |
Jeongwoo 2018.05.30 Add parameters on SymbolSvgItem.__init__() (parentSymbol, childSymbol) / Change method name / Change XML NODE NAMES |
|
1948 |
Jeongwoo 2018.06.12 Add LineNoTextItem from LINE_NO |
|
1949 |
Jeongwoo 2018.06.14 Add UnknownItem from UNKNOWN |
|
1950 |
Jeongwoo 2018.06.18 Update Scene after all item added |
|
1951 |
Add connect on unknown item |
|
1952 |
Add [transfer] for using pyqtSignal |
|
1953 |
kyouho 2018.07.12 Add line property logic |
|
1954 |
humkyung 2018.08.22 show progress while loading xml file |
|
1955 |
2018.11.22 euisung fix note road |
|
1956 |
''' |
|
1957 |
def loadRecognitionResultFromXml(self, xmlPath): |
|
1958 |
docData = AppDocData.instance() |
|
1959 |
from xml.etree.ElementTree import Element, SubElement, dump, ElementTree, parse |
|
1960 |
from EngineeringRunItem import QEngineeringRunItem |
|
1961 |
from QEngineeringTrimLineNoTextItem import QEngineeringTrimLineNoTextItem |
|
1835 |
@brief load components |
|
1836 |
@author yeonjin |
|
1837 |
@date 2019.07.30 |
|
1838 |
''' |
|
1839 |
def load_components(self, componentsUID): |
|
1840 |
from EngineeringStreamlineItem import QEngineeringStreamlineItem |
|
1841 |
from EngineeringConnectorItem import QEngineeringConnectorItem |
|
1962 | 1842 |
|
1963 | 1843 |
try: |
1964 |
#self.graphicsView.scene.blockSignals(True) |
|
1965 |
|
|
1966 | 1844 |
symbols = [] |
1967 | 1845 |
lines = [] |
1968 | 1846 |
|
1969 |
xml = parse(xmlPath) |
|
1970 |
root = xml.getroot() |
|
1971 |
|
|
1972 |
maxValue = 0 |
|
1973 |
maxValue = maxValue + len(list(root.iter('SYMBOL'))) |
|
1974 |
maxValue = maxValue + len(list(root.iter('ATTRIBUTE'))) |
|
1975 |
maxValue = maxValue + len(list(root.iter('LINE_NO'))) |
|
1976 |
maxValue = maxValue + len(list(root.iter('LINE'))) |
|
1977 |
maxValue = maxValue + len(list(root.iter('UNKNOWN'))) |
|
1978 |
maxValue = maxValue + len(list(root.iter('SIZETEXT'))) |
|
1979 |
maxValue = maxValue + len(list(root.iter('TRIM_LINE_NO'))) |
|
1980 |
self.progress.setMaximum(maxValue) |
|
1981 |
|
|
1982 |
""" parsing all symbols """ |
|
1983 |
for symbol in root.find('SYMBOLS').iter('SYMBOL'): |
|
1984 |
item = SymbolSvgItem.fromXml(symbol) |
|
1985 |
if item is not None: |
|
1986 |
item.transfer.onRemoved.connect(self.itemRemoved) |
|
1987 |
symbols.append(item) |
|
1988 |
docData.symbols.append(item) |
|
1989 |
self.addSvgItemToScene(item) |
|
1990 |
else: |
|
1991 |
pt = [float(x) for x in symbol.find('LOCATION').text.split(',')] |
|
1992 |
size = [float(x) for x in symbol.find('SIZE').text.split(',')] |
|
1993 |
angle = float(symbol.find('ANGLE').text) |
|
1994 |
item = QGraphicsBoundingBoxItem(pt[0], pt[1], size[0], size[1]) |
|
1995 |
item.isSymbol = True |
|
1996 |
item.angle = angle |
|
1997 |
item.setPen(QPen(Qt.red, 5, Qt.SolidLine)) |
|
1998 |
self.graphicsView.scene.addItem(item) |
|
1999 |
|
|
2000 |
self.progress.setValue(self.progress.value() + 1) |
|
2001 |
|
|
2002 |
QApplication.processEvents() |
|
2003 |
|
|
2004 |
# parse texts |
|
2005 |
for text in root.find('TEXTINFOS').iter('ATTRIBUTE'): |
|
2006 |
item = QEngineeringTextItem.fromXml(text) |
|
2007 |
if item is not None: |
|
2008 |
uid = text.find('UID') |
|
2009 |
attributeValue = text.find('ATTRIBUTEVALUE') |
|
2010 |
name = text.find('NAME').text |
|
2011 |
item.transfer.onRemoved.connect(self.itemRemoved) |
|
2012 |
self.addTextItemToScene(item) |
|
2013 |
#docData.texts.append(item) |
|
2014 |
|
|
2015 |
if name == 'TEXT': |
|
2016 |
if uid is not None and attributeValue is not None: |
|
2017 |
item.uid = uid.text |
|
2018 |
item.attribute = attributeValue.text |
|
2019 |
|
|
2020 |
self.progress.setValue(self.progress.value() + 1) |
|
2021 |
|
|
2022 |
QApplication.processEvents() |
|
2023 |
|
|
2024 |
# note |
|
2025 |
for text in root.find('NOTES').iter('ATTRIBUTE'): |
|
2026 |
item = QEngineeringTextItem.fromXml(text) |
|
2027 |
if item is not None: |
|
2028 |
uid = text.find('UID') |
|
2029 |
attributeValue = text.find('ATTRIBUTEVALUE') |
|
2030 |
name = text.find('NAME').text |
|
2031 |
item.transfer.onRemoved.connect(self.itemRemoved) |
|
2032 |
self.addTextItemToScene(item) |
|
2033 |
|
|
2034 |
if name == 'NOTE': |
|
2035 |
if uid is not None: |
|
2036 |
item.uid = uid.text |
|
2037 |
|
|
2038 |
self.progress.setValue(self.progress.value() + 1) |
|
2039 |
|
|
2040 |
QApplication.processEvents() |
|
2041 |
|
|
2042 |
for line in root.find('LINEINFOS').iter('LINE'): |
|
2043 |
item = QEngineeringLineItem.fromXml(line) |
|
2044 |
if item: |
|
2045 |
item.transfer.onRemoved.connect(self.itemRemoved) |
|
2046 |
self.graphicsView.scene.addItem(item) |
|
2047 |
lines.append(item) |
|
2048 |
|
|
2049 |
self.progress.setValue(self.progress.value() + 1) |
|
2050 |
|
|
2051 |
QApplication.processEvents() |
|
2052 |
|
|
2053 |
for unknown in root.iter('UNKNOWN'): |
|
2054 |
item = QEngineeringUnknownItem.fromXml(unknown) |
|
2055 |
item.transfer.onRemoved.connect(self.itemRemoved) |
|
2056 |
if item is not None: |
|
2057 |
item.transfer.onRemoved.connect(self.itemRemoved) |
|
2058 |
self.graphicsView.scene.addItem(item) |
|
2059 |
|
|
2060 |
self.progress.setValue(self.progress.value() + 1) |
|
2061 |
|
|
2062 |
QApplication.processEvents() |
|
2063 |
|
|
2064 |
#""" add tree widget """ |
|
2065 |
#for item in symbols: |
|
2066 |
# docData.symbols.append(item) |
|
2067 |
# self.addSvgItemToScene(item) |
|
2068 |
# self.itemTreeWidget.addTreeItem(self.itemTreeWidget.root, item) |
|
2069 |
|
|
2070 |
for line_no_node in root.find('LINENOS').iter('LINE_NO'): |
|
2071 |
line_no = QEngineeringLineNoTextItem.fromXml(line_no_node) |
|
2072 |
if line_no is None: continue |
|
2073 |
|
|
2074 |
line_no.transfer.onRemoved.connect(self.itemRemoved) |
|
2075 |
self.addTextItemToScene(line_no) |
|
2076 |
line_no_tree_item = self.itemTreeWidget.addTreeItem(self.itemTreeWidget.root, line_no) |
|
2077 |
|
|
2078 |
runs_node = line_no_node.findall('RUN') |
|
2079 |
if runs_node is None: continue |
|
2080 |
|
|
2081 |
for run_node in runs_node: |
|
2082 |
line_run = QEngineeringRunItem() |
|
2083 |
for child_node in run_node: |
|
2084 |
uidElement = child_node.find('UID') |
|
2085 |
if uidElement is not None: |
|
2086 |
uid = uidElement.text |
|
2087 |
run_item = self.graphicsView.findItemByUid(uid) |
|
2088 |
if run_item is not None: |
|
2089 |
run_item._owner = line_no |
|
2090 |
line_run.items.append(run_item) |
|
2091 |
line_run.owner = line_no |
|
2092 |
line_no.runs.append(line_run) |
|
2093 |
|
|
2094 |
for run_item in line_run.items: |
|
2095 |
if issubclass(type(run_item), SymbolSvgItem): self.itemTreeWidget.addTreeItem(line_no_tree_item, run_item) |
|
2096 |
|
|
2097 |
#docData.tracerLineNos.append(line_no) |
|
2098 |
|
|
2099 |
self.progress.setValue(self.progress.value() + 1) |
|
2100 |
QApplication.processEvents() |
|
2101 |
|
|
2102 |
for trimLineNo in root.iter('TRIM_LINE_NO'): |
|
2103 |
line_no = QEngineeringTrimLineNoTextItem() |
|
2104 |
line_no.uid = uuid.UUID(trimLineNo.find('UID').text, version=4) |
|
2105 |
|
|
2106 |
run = trimLineNo.find('RUN') |
|
2107 |
if run is not None: |
|
2108 |
line_run = QEngineeringRunItem() |
|
2109 |
for child in run: |
|
2110 |
uidElement = child.find('UID') |
|
2111 |
if uidElement is not None: |
|
2112 |
uid = uidElement.text |
|
2113 |
run_item = self.graphicsView.findItemByUid(uid) |
|
2114 |
if run_item is not None: |
|
2115 |
run_item.owner = line_no |
|
2116 |
line_run.items.append(run_item) |
|
2117 |
line_no.runs.append(line_run) |
|
2118 |
line_no_tree_item = self.itemTreeWidget.addTreeItem(self.itemTreeWidget.root, line_no) |
|
2119 |
|
|
2120 |
for run_item in line_run.items: |
|
2121 |
if issubclass(type(run_item), SymbolSvgItem): self.itemTreeWidget.addTreeItem(line_no_tree_item, run_item) |
|
2122 |
|
|
2123 |
docData.tracerLineNos.append(line_no) |
|
2124 |
|
|
2125 |
self.progress.setValue(self.progress.value() + 1) |
|
1847 |
appDocData = AppDocData.instance() |
|
1848 |
project = appDocData.getCurrentProject() |
|
2126 | 1849 |
|
2127 |
if root.find('VENDORS') is not None: |
|
2128 |
for vendor in root.find('VENDORS').iter('VENDOR'): |
|
2129 |
item = QEngineeringVendorItem.fromXml(vendor) |
|
2130 |
item.transfer.onRemoved.connect(self.itemRemoved) |
|
2131 |
self.graphicsView.scene.addItem(item) |
|
2132 |
|
|
1850 |
for componentUID in componentsUID: |
|
1851 |
componentInfos = appDocData.getComponentByComponentUID(componentUID) |
|
1852 |
if (len(componentInfos)) > 0: |
|
1853 |
category = componentInfos[0][3] |
|
1854 |
if category == 'Stream Line': |
|
1855 |
item = QEngineeringStreamlineItem.fromDatabase(componentInfos) |
|
1856 |
if item is not None: |
|
1857 |
item.transfer.onRemoved.connect(self.itemRemoved) |
|
1858 |
self.graphicsView.scene.addItem(item) |
|
1859 |
else: |
|
1860 |
item = SymbolSvgItem.fromDatabase(componentInfos) |
|
1861 |
if item is not None: |
|
1862 |
item.transfer.onRemoved.connect(self.itemRemoved) |
|
1863 |
symbols.append(item) |
|
1864 |
appDocData.symbols.append(item) |
|
1865 |
self.addSvgItemToScene(item) |
|
2133 | 1866 |
|
2134 |
""" update scene """ |
|
1867 |
# """ update scene """
|
|
2135 | 1868 |
self.graphicsView.scene.update(self.graphicsView.sceneRect()) |
2136 | 1869 |
for item in self.graphicsView.scene.items(): |
2137 | 1870 |
item.setVisible(True) |
2138 |
|
|
2139 |
|
|
2140 |
|
|
1871 |
|
|
2141 | 1872 |
except Exception as ex: |
2142 | 1873 |
message = 'error occured({}) in {}:{}'.format(ex, sys.exc_info()[-1].tb_frame.f_code.co_filename, sys.exc_info()[-1].tb_lineno) |
2143 | 1874 |
self.addMessage.emit(MessageType.Error, message) |
2144 | 1875 |
finally: |
2145 | 1876 |
pass |
2146 |
#self.graphicsView.scene.blockSignals(False) |
|
2147 |
|
|
1877 |
|
|
2148 | 1878 |
''' |
2149 | 1879 |
@brief Remove added item on same place and Add GraphicsItem |
2150 | 1880 |
@author Jeongwoo |
HYTOS/HYTOS/MainWindow_UI.py | ||
---|---|---|
40 | 40 |
self.menuTheme.setObjectName("menuTheme") |
41 | 41 |
self.menuLanguage = QtWidgets.QMenu(self.menu) |
42 | 42 |
self.menuLanguage.setObjectName("menuLanguage") |
43 |
self.menu_2 = QtWidgets.QMenu(self.menubar) |
|
44 |
self.menu_2.setObjectName("menu_2") |
|
45 | 43 |
self.menu_3 = QtWidgets.QMenu(self.menubar) |
46 | 44 |
self.menu_3.setObjectName("menu_3") |
47 |
self.menu_4 = QtWidgets.QMenu(self.menubar) |
|
48 |
self.menu_4.setObjectName("menu_4") |
|
49 |
self.menu_5 = QtWidgets.QMenu(self.menubar) |
|
50 |
self.menu_5.setObjectName("menu_5") |
|
45 |
self.menuTool = QtWidgets.QMenu(self.menubar) |
|
46 |
self.menuTool.setObjectName("menuTool") |
|
51 | 47 |
MainWindow.setMenuBar(self.menubar) |
52 | 48 |
self.statusbar = QtWidgets.QStatusBar(MainWindow) |
53 | 49 |
self.statusbar.setObjectName("statusbar") |
... | ... | |
84 | 80 |
self.gridLayout_4.addLayout(self.verticalLayoutDrawingList, 0, 0, 1, 1) |
85 | 81 |
self.dockWidgetDrawingExplorer.setWidget(self.dockWidgetContents_2) |
86 | 82 |
MainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(1), self.dockWidgetDrawingExplorer) |
87 |
self.EditToolbar = QtWidgets.QToolBar(MainWindow) |
|
88 |
self.EditToolbar.setEnabled(True) |
|
89 |
self.EditToolbar.setIconSize(QtCore.QSize(32, 32)) |
|
90 |
self.EditToolbar.setObjectName("EditToolbar") |
|
91 |
MainWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.EditToolbar) |
|
92 |
self.dockWidgetOutputWnd = QtWidgets.QDockWidget(MainWindow) |
|
93 |
self.dockWidgetOutputWnd.setFeatures(QtWidgets.QDockWidget.AllDockWidgetFeatures) |
|
94 |
self.dockWidgetOutputWnd.setAllowedAreas(QtCore.Qt.AllDockWidgetAreas) |
|
95 |
self.dockWidgetOutputWnd.setObjectName("dockWidgetOutputWnd") |
|
83 |
self.dockWidgetHMBList = QtWidgets.QDockWidget(MainWindow) |
|
84 |
self.dockWidgetHMBList.setFeatures(QtWidgets.QDockWidget.AllDockWidgetFeatures) |
|
85 |
self.dockWidgetHMBList.setAllowedAreas(QtCore.Qt.AllDockWidgetAreas) |
|
86 |
self.dockWidgetHMBList.setObjectName("dockWidgetHMBList") |
|
96 | 87 |
self.dockWidgetContents_3 = QtWidgets.QWidget() |
97 | 88 |
self.dockWidgetContents_3.setObjectName("dockWidgetContents_3") |
98 | 89 |
self.gridLayout_5 = QtWidgets.QGridLayout(self.dockWidgetContents_3) |
... | ... | |
105 | 96 |
self.tableWidgetHMB.setRowCount(0) |
106 | 97 |
self.horizontalLayout.addWidget(self.tableWidgetHMB) |
107 | 98 |
self.gridLayout_5.addLayout(self.horizontalLayout, 0, 0, 1, 1) |
108 |
self.dockWidgetOutputWnd.setWidget(self.dockWidgetContents_3)
|
|
109 |
MainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(8), self.dockWidgetOutputWnd)
|
|
99 |
self.dockWidgetHMBList.setWidget(self.dockWidgetContents_3)
|
|
100 |
MainWindow.addDockWidget(QtCore.Qt.DockWidgetArea(8), self.dockWidgetHMBList)
|
|
110 | 101 |
self.toolBar = QtWidgets.QToolBar(MainWindow) |
111 | 102 |
font = QtGui.QFont() |
112 | 103 |
font.setFamily("맑은 고딕") |
... | ... | |
146 | 137 |
self.actionLine.setIcon(icon2) |
147 | 138 |
font = QtGui.QFont() |
148 | 139 |
font.setFamily("맑은 고딕") |
149 |
font.setBold(True)
|
|
150 |
font.setWeight(75)
|
|
140 |
font.setBold(False)
|
|
141 |
font.setWeight(50)
|
|
151 | 142 |
self.actionLine.setFont(font) |
152 | 143 |
self.actionLine.setObjectName("actionLine") |
153 | 144 |
self.actionValidate = QtWidgets.QAction(MainWindow) |
... | ... | |
318 | 309 |
icon12 = QtGui.QIcon() |
319 | 310 |
icon12.addPixmap(QtGui.QPixmap(":/newPrefix/save.png"), QtGui.QIcon.Normal, QtGui.QIcon.Off) |
320 | 311 |
self.actionSave.setIcon(icon12) |
312 |
font = QtGui.QFont() |
|
313 |
font.setFamily("맑은 고딕") |
|
314 |
self.actionSave.setFont(font) |
|
321 | 315 |
self.actionSave.setObjectName("actionSave") |
322 | 316 |
self.actionRotate = QtWidgets.QAction(MainWindow) |
323 | 317 |
icon13 = QtGui.QIcon() |
... | ... | |
370 | 364 |
self.actionNew.setObjectName("actionNew") |
371 | 365 |
self.actionCreate_Symbol = QtWidgets.QAction(MainWindow) |
372 | 366 |
self.actionCreate_Symbol.setObjectName("actionCreate_Symbol") |
367 |
self.actionCreate_Stream = QtWidgets.QAction(MainWindow) |
|
368 |
self.actionCreate_Stream.setObjectName("actionCreate_Stream") |
|
373 | 369 |
self.menu.addAction(self.actionNew) |
374 | 370 |
self.menu.addAction(self.actionSave) |
375 | 371 |
self.menu.addAction(self.actionConfiguration) |
... | ... | |
378 | 374 |
self.menu.addAction(self.menuLanguage.menuAction()) |
379 | 375 |
self.menu.addSeparator() |
380 | 376 |
self.menu.addAction(self.actionClose) |
381 |
self.menu_3.addAction(self.actionImage_Drawing) |
|
382 |
self.menu_3.addAction(self.actionViewText) |
|
383 |
self.menu_3.addAction(self.actionViewSymbol) |
|
384 |
self.menu_3.addAction(self.actionViewLine) |
|
385 |
self.menu_3.addSeparator() |
|
386 |
self.menu_3.addAction(self.actionViewUnknown) |
|
387 |
self.menu_3.addAction(self.actionViewInconsistency) |
|
388 |
self.menu_3.addAction(self.actionViewVendor_Area) |
|
389 |
self.menu_3.addSeparator() |
|
390 |
self.menu_3.addAction(self.actionDrawing_Only) |
|
391 |
self.menu_4.addAction(self.actionCreate_Symbol) |
|
377 |
self.menu_3.addAction(self.actionZoom) |
|
378 |
self.menu_3.addAction(self.actionFitWindow) |
|
379 |
self.menuTool.addAction(self.actionLine) |
|
380 |
self.menuTool.addAction(self.actionInitialize) |
|
392 | 381 |
self.menubar.addAction(self.menu.menuAction()) |
393 |
self.menubar.addAction(self.menu_5.menuAction()) |
|
394 |
self.menubar.addAction(self.menu_2.menuAction()) |
|
395 | 382 |
self.menubar.addAction(self.menu_3.menuAction()) |
396 |
self.menubar.addAction(self.menu_4.menuAction()) |
|
397 |
self.EditToolbar.addAction(self.actionRotate) |
|
398 |
self.EditToolbar.addAction(self.actionZoom) |
|
399 |
self.EditToolbar.addAction(self.actionFitWindow) |
|
400 |
self.EditToolbar.addSeparator() |
|
383 |
self.menubar.addAction(self.menuTool.menuAction()) |
|
401 | 384 |
self.toolBar.addAction(self.actionNew) |
402 | 385 |
self.toolBar.addAction(self.actionSave) |
403 | 386 |
self.toolBar.addSeparator() |
404 |
self.toolBar.addAction(self.actionInitialize) |
|
405 | 387 |
self.toolBar.addAction(self.actionLine) |
388 |
self.toolBar.addSeparator() |
|
389 |
self.toolBar.addAction(self.actionInitialize) |
|
390 |
self.toolBar.addAction(self.actionZoom) |
|
391 |
self.toolBar.addAction(self.actionFitWindow) |
|
406 | 392 |
|
407 | 393 |
self.retranslateUi(MainWindow) |
408 | 394 |
QtCore.QMetaObject.connectSlotsByName(MainWindow) |
... | ... | |
413 | 399 |
self.menu.setTitle(_translate("MainWindow", "File")) |
414 | 400 |
self.menuTheme.setTitle(_translate("MainWindow", "Theme")) |
415 | 401 |
self.menuLanguage.setTitle(_translate("MainWindow", "Language")) |
416 |
self.menu_2.setTitle(_translate("MainWindow", "Data")) |
|
417 | 402 |
self.menu_3.setTitle(_translate("MainWindow", "View")) |
418 |
self.menu_4.setTitle(_translate("MainWindow", "Tool")) |
|
419 |
self.menu_5.setTitle(_translate("MainWindow", "Edit")) |
|
403 |
self.menuTool.setTitle(_translate("MainWindow", "Tools")) |
|
420 | 404 |
self.dockWidgetSymbolExplorer.setWindowTitle(_translate("MainWindow", "Symbol Explorer")) |
421 | 405 |
self.dockWidgetDrawingExplorer.setWindowTitle(_translate("MainWindow", "Drawing Explorer")) |
422 | 406 |
self.treeWidgetDrawingList.setSortingEnabled(True) |
423 |
self.EditToolbar.setWindowTitle(_translate("MainWindow", "Edit Toolbar")) |
|
424 |
self.dockWidgetOutputWnd.setWindowTitle(_translate("MainWindow", "Stream No. List")) |
|
407 |
self.dockWidgetHMBList.setWindowTitle(_translate("MainWindow", "HMB List")) |
|
425 | 408 |
self.toolBar.setWindowTitle(_translate("MainWindow", "Main Toolbar")) |
426 | 409 |
self.actionOpen.setText(_translate("MainWindow", "Open")) |
427 | 410 |
self.actionOpen.setToolTip(_translate("MainWindow", "Open(Ctrl + O)")) |
... | ... | |
429 | 412 |
self.actionClose.setText(_translate("MainWindow", "Exit")) |
430 | 413 |
self.actionRecognition.setText(_translate("MainWindow", "Recognize Eng. Info.")) |
431 | 414 |
self.actionRecognition.setToolTip(_translate("MainWindow", "Recognize Eng. Info.")) |
432 |
self.actionLine.setText(_translate("MainWindow", "Create Stream Line"))
|
|
433 |
self.actionLine.setToolTip(_translate("MainWindow", "Create Stream Line(L)"))
|
|
415 |
self.actionLine.setText(_translate("MainWindow", "Stream Line")) |
|
416 |
self.actionLine.setToolTip(_translate("MainWindow", "Stream Line(L)")) |
|
434 | 417 |
self.actionLine.setShortcut(_translate("MainWindow", "L")) |
435 | 418 |
self.actionValidate.setText(_translate("MainWindow", "Validate")) |
436 | 419 |
self.actionValidate.setToolTip(_translate("MainWindow", "Validate(V)")) |
... | ... | |
446 | 429 |
self.actionEquipment_Data_List.setText(_translate("MainWindow", "Equipment Data List")) |
447 | 430 |
self.actionItem_Data_List.setText(_translate("MainWindow", "Engineering Info. List")) |
448 | 431 |
self.actionInstrument_Data_List.setText(_translate("MainWindow", "Instrument Data List")) |
449 |
self.actionInitialize.setText(_translate("MainWindow", "Initialize")) |
|
432 |
self.actionInitialize.setText(_translate("MainWindow", "Clear Screen")) |
|
433 |
self.actionInitialize.setToolTip(_translate("MainWindow", "Clear Screen (Ctrl + Del)")) |
|
434 |
self.actionInitialize.setShortcut(_translate("MainWindow", "Ctrl+Del")) |
|
450 | 435 |
self.actionImage_Drawing.setText(_translate("MainWindow", "Image Drawing (1)")) |
451 | 436 |
self.actionZoom.setText(_translate("MainWindow", "Zoom")) |
452 | 437 |
self.actionZoom.setToolTip(_translate("MainWindow", "Zoom(Z)")) |
453 | 438 |
self.actionZoom.setShortcut(_translate("MainWindow", "Z")) |
454 |
self.actionFitWindow.setText(_translate("MainWindow", "FitWindow")) |
|
439 |
self.actionFitWindow.setText(_translate("MainWindow", "Fit Window")) |
|
440 |
self.actionFitWindow.setToolTip(_translate("MainWindow", "Fit Window")) |
|
455 | 441 |
self.actionViewSymbol.setText(_translate("MainWindow", "Symbol (3)")) |
456 | 442 |
self.actionViewText.setText(_translate("MainWindow", "Text (2)")) |
457 | 443 |
self.actionViewLine.setText(_translate("MainWindow", "Line (4)")) |
... | ... | |
483 | 469 |
self.actionNew.setToolTip(_translate("MainWindow", "New(Ctrl + N)")) |
484 | 470 |
self.actionNew.setShortcut(_translate("MainWindow", "Ctrl+N")) |
485 | 471 |
self.actionCreate_Symbol.setText(_translate("MainWindow", "Symbol Editor")) |
472 |
self.actionCreate_Stream.setText(_translate("MainWindow", "Create Stream")) |
|
486 | 473 |
|
487 | 474 |
import MainWindow_rc |
HYTOS/HYTOS/MainWindow_rc.py | ||
---|---|---|
9 | 9 |
from PyQt5 import QtCore |
10 | 10 |
|
11 | 11 |
qt_resource_data = b"\ |
12 |
\x00\x00\x0f\x6a\
|
|
12 |
\x00\x00\x03\x32\
|
|
13 | 13 |
\x89\ |
14 | 14 |
\x50\x4e\x47\x0d\x0a\x1a\x0a\x00\x00\x00\x0d\x49\x48\x44\x52\x00\ |
15 |
\x00\x00\x40\x00\x00\x00\x40\x08\x06\x00\x00\x00\xaa\x69\x71\xde\
|
|
15 |
\x00\x00\x80\x00\x00\x00\x80\x08\x06\x00\x00\x00\xc3\x3e\x61\xcb\
|
|
16 | 16 |
\x00\x00\x00\x09\x70\x48\x59\x73\x00\x00\x0b\x13\x00\x00\x0b\x13\ |
17 |
\x01\x00\x9a\x9c\x18\x00\x00\x0a\x4d\x69\x43\x43\x50\x50\x68\x6f\ |
|
18 |
\x74\x6f\x73\x68\x6f\x70\x20\x49\x43\x43\x20\x70\x72\x6f\x66\x69\ |
|
19 |
\x6c\x65\x00\x00\x78\xda\x9d\x53\x77\x58\x93\xf7\x16\x3e\xdf\xf7\ |
|
20 |
\x65\x0f\x56\x42\xd8\xf0\xb1\x97\x6c\x81\x00\x22\x23\xac\x08\xc8\ |
|
21 |
\x10\x59\xa2\x10\x92\x00\x61\x84\x10\x12\x40\xc5\x85\x88\x0a\x56\ |
|
22 |
\x14\x15\x11\x9c\x48\x55\xc4\x82\xd5\x0a\x48\x9d\x88\xe2\xa0\x28\ |
|
23 |
\xb8\x67\x41\x8a\x88\x5a\x8b\x55\x5c\x38\xee\x1f\xdc\xa7\xb5\x7d\ |
|
24 |
\x7a\xef\xed\xed\xfb\xd7\xfb\xbc\xe7\x9c\xe7\xfc\xce\x79\xcf\x0f\ |
|
25 |
\x80\x11\x12\x26\x91\xe6\xa2\x6a\x00\x39\x52\x85\x3c\x3a\xd8\x1f\ |
|
26 |
\x8f\x4f\x48\xc4\xc9\xbd\x80\x02\x15\x48\xe0\x04\x20\x10\xe6\xcb\ |
|
27 |
\xc2\x67\x05\xc5\x00\x00\xf0\x03\x79\x78\x7e\x74\xb0\x3f\xfc\x01\ |
|
28 |
\xaf\x6f\x00\x02\x00\x70\xd5\x2e\x24\x12\xc7\xe1\xff\x83\xba\x50\ |
|
29 |
\x26\x57\x00\x20\x91\x00\xe0\x22\x12\xe7\x0b\x01\x90\x52\x00\xc8\ |
|
30 |
\x2e\x54\xc8\x14\x00\xc8\x18\x00\xb0\x53\xb3\x64\x0a\x00\x94\x00\ |
|
31 |
\x00\x6c\x79\x7c\x42\x22\x00\xaa\x0d\x00\xec\xf4\x49\x3e\x05\x00\ |
|
32 |
\xd8\xa9\x93\xdc\x17\x00\xd8\xa2\x1c\xa9\x08\x00\x8d\x01\x00\x99\ |
|
33 |
\x28\x47\x24\x02\x40\xbb\x00\x60\x55\x81\x52\x2c\x02\xc0\xc2\x00\ |
|
34 |
\xa0\xac\x40\x22\x2e\x04\xc0\xae\x01\x80\x59\xb6\x32\x47\x02\x80\ |
|
35 |
\xbd\x05\x00\x76\x8e\x58\x90\x0f\x40\x60\x00\x80\x99\x42\x2c\xcc\ |
|
36 |
\x00\x20\x38\x02\x00\x43\x1e\x13\xcd\x03\x20\x4c\x03\xa0\x30\xd2\ |
|
37 |
\xbf\xe0\xa9\x5f\x70\x85\xb8\x48\x01\x00\xc0\xcb\x95\xcd\x97\x4b\ |
|
38 |
\xd2\x33\x14\xb8\x95\xd0\x1a\x77\xf2\xf0\xe0\xe2\x21\xe2\xc2\x6c\ |
|
39 |
\xb1\x42\x61\x17\x29\x10\x66\x09\xe4\x22\x9c\x97\x9b\x23\x13\x48\ |
|
40 |
\xe7\x03\x4c\xce\x0c\x00\x00\x1a\xf9\xd1\xc1\xfe\x38\x3f\x90\xe7\ |
|
41 |
\xe6\xe4\xe1\xe6\x66\xe7\x6c\xef\xf4\xc5\xa2\xfe\x6b\xf0\x6f\x22\ |
|
42 |
\x3e\x21\xf1\xdf\xfe\xbc\x8c\x02\x04\x00\x10\x4e\xcf\xef\xda\x5f\ |
|
43 |
\xe5\xe5\xd6\x03\x70\xc7\x01\xb0\x75\xbf\x6b\xa9\x5b\x00\xda\x56\ |
|
44 |
\x00\x68\xdf\xf9\x5d\x33\xdb\x09\xa0\x5a\x0a\xd0\x7a\xf9\x8b\x79\ |
|
45 |
\x38\xfc\x40\x1e\x9e\xa1\x50\xc8\x3c\x1d\x1c\x0a\x0b\x0b\xed\x25\ |
|
46 |
\x62\xa1\xbd\x30\xe3\x8b\x3e\xff\x33\xe1\x6f\xe0\x8b\x7e\xf6\xfc\ |
|
47 |
\x40\x1e\xfe\xdb\x7a\xf0\x00\x71\x9a\x40\x99\xad\xc0\xa3\x83\xfd\ |
|
48 |
\x71\x61\x6e\x76\xae\x52\x8e\xe7\xcb\x04\x42\x31\x6e\xf7\xe7\x23\ |
|
49 |
\xfe\xc7\x85\x7f\xfd\x8e\x29\xd1\xe2\x34\xb1\x5c\x2c\x15\x8a\xf1\ |
|
50 |
\x58\x89\xb8\x50\x22\x4d\xc7\x79\xb9\x52\x91\x44\x21\xc9\x95\xe2\ |
|
51 |
\x12\xe9\x7f\x32\xf1\x1f\x96\xfd\x09\x93\x77\x0d\x00\xac\x86\x4f\ |
|
52 |
\xc0\x4e\xb6\x07\xb5\xcb\x6c\xc0\x7e\xee\x01\x02\x8b\x0e\x58\xd2\ |
|
53 |
\x76\x00\x40\x7e\xf3\x2d\x8c\x1a\x0b\x91\x00\x10\x67\x34\x32\x79\ |
|
54 |
\xf7\x00\x00\x93\xbf\xf9\x8f\x40\x2b\x01\x00\xcd\x97\xa4\xe3\x00\ |
|
55 |
\x00\xbc\xe8\x18\x5c\xa8\x94\x17\x4c\xc6\x08\x00\x00\x44\xa0\x81\ |
|
56 |
\x2a\xb0\x41\x07\x0c\xc1\x14\xac\xc0\x0e\x9c\xc1\x1d\xbc\xc0\x17\ |
|
57 |
\x02\x61\x06\x44\x40\x0c\x24\xc0\x3c\x10\x42\x06\xe4\x80\x1c\x0a\ |
|
58 |
\xa1\x18\x96\x41\x19\x54\xc0\x3a\xd8\x04\xb5\xb0\x03\x1a\xa0\x11\ |
|
59 |
\x9a\xe1\x10\xb4\xc1\x31\x38\x0d\xe7\xe0\x12\x5c\x81\xeb\x70\x17\ |
|
60 |
\x06\x60\x18\x9e\xc2\x18\xbc\x86\x09\x04\x41\xc8\x08\x13\x61\x21\ |
|
61 |
\x3a\x88\x11\x62\x8e\xd8\x22\xce\x08\x17\x99\x8e\x04\x22\x61\x48\ |
|
62 |
\x34\x92\x80\xa4\x20\xe9\x88\x14\x51\x22\xc5\xc8\x72\xa4\x02\xa9\ |
|
63 |
\x42\x6a\x91\x5d\x48\x23\xf2\x2d\x72\x14\x39\x8d\x5c\x40\xfa\x90\ |
|
64 |
\xdb\xc8\x20\x32\x8a\xfc\x8a\xbc\x47\x31\x94\x81\xb2\x51\x03\xd4\ |
|
65 |
\x02\x75\x40\xb9\xa8\x1f\x1a\x8a\xc6\xa0\x73\xd1\x74\x34\x0f\x5d\ |
|
66 |
\x80\x96\xa2\x6b\xd1\x1a\xb4\x1e\x3d\x80\xb6\xa2\xa7\xd1\x4b\xe8\ |
|
67 |
\x75\x74\x00\x7d\x8a\x8e\x63\x80\xd1\x31\x0e\x66\x8c\xd9\x61\x5c\ |
|
68 |
\x8c\x87\x45\x60\x89\x58\x1a\x26\xc7\x16\x63\xe5\x58\x35\x56\x8f\ |
|
69 |
\x35\x63\x1d\x58\x37\x76\x15\x1b\xc0\x9e\x61\xef\x08\x24\x02\x8b\ |
|
70 |
\x80\x13\xec\x08\x5e\x84\x10\xc2\x6c\x82\x90\x90\x47\x58\x4c\x58\ |
|
71 |
\x43\xa8\x25\xec\x23\xb4\x12\xba\x08\x57\x09\x83\x84\x31\xc2\x27\ |
|
72 |
\x22\x93\xa8\x4f\xb4\x25\x7a\x12\xf9\xc4\x78\x62\x3a\xb1\x90\x58\ |
|
73 |
\x46\xac\x26\xee\x21\x1e\x21\x9e\x25\x5e\x27\x0e\x13\x5f\x93\x48\ |
|
74 |
\x24\x0e\xc9\x92\xe4\x4e\x0a\x21\x25\x90\x32\x49\x0b\x49\x6b\x48\ |
|
75 |
\xdb\x48\x2d\xa4\x53\xa4\x3e\xd2\x10\x69\x9c\x4c\x26\xeb\x90\x6d\ |
|
76 |
\xc9\xde\xe4\x08\xb2\x80\xac\x20\x97\x91\xb7\x90\x0f\x90\x4f\x92\ |
|
77 |
\xfb\xc9\xc3\xe4\xb7\x14\x3a\xc5\x88\xe2\x4c\x09\xa2\x24\x52\xa4\ |
|
78 |
\x94\x12\x4a\x35\x65\x3f\xe5\x04\xa5\x9f\x32\x42\x99\xa0\xaa\x51\ |
|
79 |
\xcd\xa9\x9e\xd4\x08\xaa\x88\x3a\x9f\x5a\x49\x6d\xa0\x76\x50\x2f\ |
|
80 |
\x53\x87\xa9\x13\x34\x75\x9a\x25\xcd\x9b\x16\x43\xcb\xa4\x2d\xa3\ |
|
81 |
\xd5\xd0\x9a\x69\x67\x69\xf7\x68\x2f\xe9\x74\xba\x09\xdd\x83\x1e\ |
|
82 |
\x45\x97\xd0\x97\xd2\x6b\xe8\x07\xe9\xe7\xe9\x83\xf4\x77\x0c\x0d\ |
|
83 |
\x86\x0d\x83\xc7\x48\x62\x28\x19\x6b\x19\x7b\x19\xa7\x18\xb7\x19\ |
|
84 |
\x2f\x99\x4c\xa6\x05\xd3\x97\x99\xc8\x54\x30\xd7\x32\x1b\x99\x67\ |
|
85 |
\x98\x0f\x98\x6f\x55\x58\x2a\xf6\x2a\x7c\x15\x91\xca\x12\x95\x3a\ |
|
86 |
\x95\x56\x95\x7e\x95\xe7\xaa\x54\x55\x73\x55\x3f\xd5\x79\xaa\x0b\ |
|
87 |
\x54\xab\x55\x0f\xab\x5e\x56\x7d\xa6\x46\x55\xb3\x50\xe3\xa9\x09\ |
|
88 |
\xd4\x16\xab\xd5\xa9\x1d\x55\xbb\xa9\x36\xae\xce\x52\x77\x52\x8f\ |
|
89 |
\x50\xcf\x51\x5f\xa3\xbe\x5f\xfd\x82\xfa\x63\x0d\xb2\x86\x85\x46\ |
|
90 |
\xa0\x86\x48\xa3\x54\x63\xb7\xc6\x19\x8d\x21\x16\xc6\x32\x65\xf1\ |
|
91 |
\x58\x42\xd6\x72\x56\x03\xeb\x2c\x6b\x98\x4d\x62\x5b\xb2\xf9\xec\ |
|
92 |
\x4c\x76\x05\xfb\x1b\x76\x2f\x7b\x4c\x53\x43\x73\xaa\x66\xac\x66\ |
|
93 |
\x91\x66\x9d\xe6\x71\xcd\x01\x0e\xc6\xb1\xe0\xf0\x39\xd9\x9c\x4a\ |
|
94 |
\xce\x21\xce\x0d\xce\x7b\x2d\x03\x2d\x3f\x2d\xb1\xd6\x6a\xad\x66\ |
|
95 |
\xad\x7e\xad\x37\xda\x7a\xda\xbe\xda\x62\xed\x72\xed\x16\xed\xeb\ |
|
96 |
\xda\xef\x75\x70\x9d\x40\x9d\x2c\x9d\xf5\x3a\x6d\x3a\xf7\x75\x09\ |
|
97 |
\xba\x36\xba\x51\xba\x85\xba\xdb\x75\xcf\xea\x3e\xd3\x63\xeb\x79\ |
|
98 |
\xe9\x09\xf5\xca\xf5\x0e\xe9\xdd\xd1\x47\xf5\x6d\xf4\xa3\xf5\x17\ |
|
99 |
\xea\xef\xd6\xef\xd1\x1f\x37\x30\x34\x08\x36\x90\x19\x6c\x31\x38\ |
|
100 |
\x63\xf0\xcc\x90\x63\xe8\x6b\x98\x69\xb8\xd1\xf0\x84\xe1\xa8\x11\ |
|
101 |
\xcb\x68\xba\x91\xc4\x68\xa3\xd1\x49\xa3\x27\xb8\x26\xee\x87\x67\ |
|
102 |
\xe3\x35\x78\x17\x3e\x66\xac\x6f\x1c\x62\xac\x34\xde\x65\xdc\x6b\ |
|
103 |
\x3c\x61\x62\x69\x32\xdb\xa4\xc4\xa4\xc5\xe4\xbe\x29\xcd\x94\x6b\ |
|
104 |
\x9a\x66\xba\xd1\xb4\xd3\x74\xcc\xcc\xc8\x2c\xdc\xac\xd8\xac\xc9\ |
|
105 |
\xec\x8e\x39\xd5\x9c\x6b\x9e\x61\xbe\xd9\xbc\xdb\xfc\x8d\x85\xa5\ |
|
106 |
\x45\x9c\xc5\x4a\x8b\x36\x8b\xc7\x96\xda\x96\x7c\xcb\x05\x96\x4d\ |
|
107 |
\x96\xf7\xac\x98\x56\x3e\x56\x79\x56\xf5\x56\xd7\xac\x49\xd6\x5c\ |
|
108 |
\xeb\x2c\xeb\x6d\xd6\x57\x6c\x50\x1b\x57\x9b\x0c\x9b\x3a\x9b\xcb\ |
|
109 |
\xb6\xa8\xad\x9b\xad\xc4\x76\x9b\x6d\xdf\x14\xe2\x14\x8f\x29\xd2\ |
|
110 |
\x29\xf5\x53\x6e\xda\x31\xec\xfc\xec\x0a\xec\x9a\xec\x06\xed\x39\ |
|
111 |
\xf6\x61\xf6\x25\xf6\x6d\xf6\xcf\x1d\xcc\x1c\x12\x1d\xd6\x3b\x74\ |
|
112 |
\x3b\x7c\x72\x74\x75\xcc\x76\x6c\x70\xbc\xeb\xa4\xe1\x34\xc3\xa9\ |
|
113 |
\xc4\xa9\xc3\xe9\x57\x67\x1b\x67\xa1\x73\x9d\xf3\x35\x17\xa6\x4b\ |
|
114 |
\x90\xcb\x12\x97\x76\x97\x17\x53\x6d\xa7\x8a\xa7\x6e\x9f\x7a\xcb\ |
|
115 |
\x95\xe5\x1a\xee\xba\xd2\xb5\xd3\xf5\xa3\x9b\xbb\x9b\xdc\xad\xd9\ |
|
116 |
\x6d\xd4\xdd\xcc\x3d\xc5\x7d\xab\xfb\x4d\x2e\x9b\x1b\xc9\x5d\xc3\ |
|
117 |
\x3d\xef\x41\xf4\xf0\xf7\x58\xe2\x71\xcc\xe3\x9d\xa7\x9b\xa7\xc2\ |
|
118 |
\xf3\x90\xe7\x2f\x5e\x76\x5e\x59\x5e\xfb\xbd\x1e\x4f\xb3\x9c\x26\ |
|
119 |
\x9e\xd6\x30\x6d\xc8\xdb\xc4\x5b\xe0\xbd\xcb\x7b\x60\x3a\x3e\x3d\ |
|
120 |
\x65\xfa\xce\xe9\x03\x3e\xc6\x3e\x02\x9f\x7a\x9f\x87\xbe\xa6\xbe\ |
|
121 |
\x22\xdf\x3d\xbe\x23\x7e\xd6\x7e\x99\x7e\x07\xfc\x9e\xfb\x3b\xfa\ |
|
122 |
\xcb\xfd\x8f\xf8\xbf\xe1\x79\xf2\x16\xf1\x4e\x05\x60\x01\xc1\x01\ |
|
123 |
\xe5\x01\xbd\x81\x1a\x81\xb3\x03\x6b\x03\x1f\x04\x99\x04\xa5\x07\ |
|
124 |
\x35\x05\x8d\x05\xbb\x06\x2f\x0c\x3e\x15\x42\x0c\x09\x0d\x59\x1f\ |
|
125 |
\x72\x93\x6f\xc0\x17\xf2\x1b\xf9\x63\x33\xdc\x67\x2c\x9a\xd1\x15\ |
|
126 |
\xca\x08\x9d\x15\x5a\x1b\xfa\x30\xcc\x26\x4c\x1e\xd6\x11\x8e\x86\ |
|
127 |
\xcf\x08\xdf\x10\x7e\x6f\xa6\xf9\x4c\xe9\xcc\xb6\x08\x88\xe0\x47\ |
|
128 |
\x6c\x88\xb8\x1f\x69\x19\x99\x17\xf9\x7d\x14\x29\x2a\x32\xaa\x2e\ |
|
129 |
\xea\x51\xb4\x53\x74\x71\x74\xf7\x2c\xd6\xac\xe4\x59\xfb\x67\xbd\ |
|
130 |
\x8e\xf1\x8f\xa9\x8c\xb9\x3b\xdb\x6a\xb6\x72\x76\x67\xac\x6a\x6c\ |
|
131 |
\x52\x6c\x63\xec\x9b\xb8\x80\xb8\xaa\xb8\x81\x78\x87\xf8\x45\xf1\ |
|
132 |
\x97\x12\x74\x13\x24\x09\xed\x89\xe4\xc4\xd8\xc4\x3d\x89\xe3\x73\ |
|
133 |
\x02\xe7\x6c\x9a\x33\x9c\xe4\x9a\x54\x96\x74\x63\xae\xe5\xdc\xa2\ |
|
134 |
\xb9\x17\xe6\xe9\xce\xcb\x9e\x77\x3c\x59\x35\x59\x90\x7c\x38\x85\ |
|
135 |
\x98\x12\x97\xb2\x3f\xe5\x83\x20\x42\x50\x2f\x18\x4f\xe5\xa7\x6e\ |
|
136 |
\x4d\x1d\x13\xf2\x84\x9b\x85\x4f\x45\xbe\xa2\x8d\xa2\x51\xb1\xb7\ |
|
137 |
\xb8\x4a\x3c\x92\xe6\x9d\x56\x95\xf6\x38\xdd\x3b\x7d\x43\xfa\x68\ |
|
138 |
\x86\x4f\x46\x75\xc6\x33\x09\x4f\x52\x2b\x79\x91\x19\x92\xb9\x23\ |
|
139 |
\xf3\x4d\x56\x44\xd6\xde\xac\xcf\xd9\x71\xd9\x2d\x39\x94\x9c\x94\ |
|
140 |
\x9c\xa3\x52\x0d\x69\x96\xb4\x2b\xd7\x30\xb7\x28\xb7\x4f\x66\x2b\ |
|
141 |
\x2b\x93\x0d\xe4\x79\xe6\x6d\xca\x1b\x93\x87\xca\xf7\xe4\x23\xf9\ |
|
142 |
\x73\xf3\xdb\x15\x6c\x85\x4c\xd1\xa3\xb4\x52\xae\x50\x0e\x16\x4c\ |
|
143 |
\x2f\xa8\x2b\x78\x5b\x18\x5b\x78\xb8\x48\xbd\x48\x5a\xd4\x33\xdf\ |
|
144 |
\x66\xfe\xea\xf9\x23\x0b\x82\x16\x7c\xbd\x90\xb0\x50\xb8\xb0\xb3\ |
|
145 |
\xd8\xb8\x78\x59\xf1\xe0\x22\xbf\x45\xbb\x16\x23\x8b\x53\x17\x77\ |
|
146 |
\x2e\x31\x5d\x52\xba\x64\x78\x69\xf0\xd2\x7d\xcb\x68\xcb\xb2\x96\ |
|
147 |
\xfd\x50\xe2\x58\x52\x55\xf2\x6a\x79\xdc\xf2\x8e\x52\x83\xd2\xa5\ |
|
148 |
\xa5\x43\x2b\x82\x57\x34\x95\xa9\x94\xc9\xcb\x6e\xae\xf4\x5a\xb9\ |
|
149 |
\x63\x15\x61\x95\x64\x55\xef\x6a\x97\xd5\x5b\x56\x7f\x2a\x17\x95\ |
|
150 |
\x5f\xac\x70\xac\xa8\xae\xf8\xb0\x46\xb8\xe6\xe2\x57\x4e\x5f\xd5\ |
|
151 |
\x7c\xf5\x79\x6d\xda\xda\xde\x4a\xb7\xca\xed\xeb\x48\xeb\xa4\xeb\ |
|
152 |
\x6e\xac\xf7\x59\xbf\xaf\x4a\xbd\x6a\x41\xd5\xd0\x86\xf0\x0d\xad\ |
|
153 |
\x1b\xf1\x8d\xe5\x1b\x5f\x6d\x4a\xde\x74\xa1\x7a\x6a\xf5\x8e\xcd\ |
|
154 |
\xb4\xcd\xca\xcd\x03\x35\x61\x35\xed\x5b\xcc\xb6\xac\xdb\xf2\xa1\ |
|
155 |
\x36\xa3\xf6\x7a\x9d\x7f\x5d\xcb\x56\xfd\xad\xab\xb7\xbe\xd9\x26\ |
|
156 |
\xda\xd6\xbf\xdd\x77\x7b\xf3\x0e\x83\x1d\x15\x3b\xde\xef\x94\xec\ |
|
157 |
\xbc\xb5\x2b\x78\x57\x6b\xbd\x45\x7d\xf5\x6e\xd2\xee\x82\xdd\x8f\ |
|
158 |
\x1a\x62\x1b\xba\xbf\xe6\x7e\xdd\xb8\x47\x77\x4f\xc5\x9e\x8f\x7b\ |
|
159 |
\xa5\x7b\x07\xf6\x45\xef\xeb\x6a\x74\x6f\x6c\xdc\xaf\xbf\xbf\xb2\ |
|
160 |
\x09\x6d\x52\x36\x8d\x1e\x48\x3a\x70\xe5\x9b\x80\x6f\xda\x9b\xed\ |
|
161 |
\x9a\x77\xb5\x70\x5a\x2a\x0e\xc2\x41\xe5\xc1\x27\xdf\xa6\x7c\x7b\ |
|
162 |
\xe3\x50\xe8\xa1\xce\xc3\xdc\xc3\xcd\xdf\x99\x7f\xb7\xf5\x08\xeb\ |
|
163 |
\x48\x79\x2b\xd2\x3a\xbf\x75\xac\x2d\xa3\x6d\xa0\x3d\xa1\xbd\xef\ |
|
164 |
\xe8\x8c\xa3\x9d\x1d\x5e\x1d\x47\xbe\xb7\xff\x7e\xef\x31\xe3\x63\ |
|
165 |
\x75\xc7\x35\x8f\x57\x9e\xa0\x9d\x28\x3d\xf1\xf9\xe4\x82\x93\xe3\ |
|
166 |
\xa7\x64\xa7\x9e\x9d\x4e\x3f\x3d\xd4\x99\xdc\x79\xf7\x4c\xfc\x99\ |
|
167 |
\x6b\x5d\x51\x5d\xbd\x67\x43\xcf\x9e\x3f\x17\x74\xee\x4c\xb7\x5f\ |
|
168 |
\xf7\xc9\xf3\xde\xe7\x8f\x5d\xf0\xbc\x70\xf4\x22\xf7\x62\xdb\x25\ |
|
169 |
\xb7\x4b\xad\x3d\xae\x3d\x47\x7e\x70\xfd\xe1\x48\xaf\x5b\x6f\xeb\ |
|
170 |
\x65\xf7\xcb\xed\x57\x3c\xae\x74\xf4\x4d\xeb\x3b\xd1\xef\xd3\x7f\ |
|
171 |
\xfa\x6a\xc0\xd5\x73\xd7\xf8\xd7\x2e\x5d\x9f\x79\xbd\xef\xc6\xec\ |
|
172 |
\x1b\xb7\x6e\x26\xdd\x1c\xb8\x25\xba\xf5\xf8\x76\xf6\xed\x17\x77\ |
|
173 |
\x0a\xee\x4c\xdc\x5d\x7a\x8f\x78\xaf\xfc\xbe\xda\xfd\xea\x07\xfa\ |
|
174 |
\x0f\xea\x7f\xb4\xfe\xb1\x65\xc0\x6d\xe0\xf8\x60\xc0\x60\xcf\xc3\ |
|
175 |
\x59\x0f\xef\x0e\x09\x87\x9e\xfe\x94\xff\xd3\x87\xe1\xd2\x47\xcc\ |
|
176 |
\x47\xd5\x23\x46\x23\x8d\x8f\x9d\x1f\x1f\x1b\x0d\x1a\xbd\xf2\x64\ |
|
177 |
\xce\x93\xe1\xa7\xb2\xa7\x13\xcf\xca\x7e\x56\xff\x79\xeb\x73\xab\ |
|
178 |
\xe7\xdf\xfd\xe2\xfb\x4b\xcf\x58\xfc\xd8\xf0\x0b\xf9\x8b\xcf\xbf\ |
|
179 |
\xae\x79\xa9\xf3\x72\xef\xab\xa9\xaf\x3a\xc7\x23\xc7\x1f\xbc\xce\ |
|
180 |
\x79\x3d\xf1\xa6\xfc\xad\xce\xdb\x7d\xef\xb8\xef\xba\xdf\xc7\xbd\ |
|
181 |
\x1f\x99\x28\xfc\x40\xfe\x50\xf3\xd1\xfa\x63\xc7\xa7\xd0\x4f\xf7\ |
|
182 |
\x3e\xe7\x7c\xfe\xfc\x2f\xf7\x84\xf3\xfb\x25\xd2\x9f\x33\x00\x00\ |
|
183 |
\x00\x20\x63\x48\x52\x4d\x00\x00\x7a\x25\x00\x00\x80\x83\x00\x00\ |
|
184 |
\xf9\xff\x00\x00\x80\xe9\x00\x00\x75\x30\x00\x00\xea\x60\x00\x00\ |
|
185 |
\x3a\x98\x00\x00\x17\x6f\x92\x5f\xc5\x46\x00\x00\x04\x97\x49\x44\ |
|
186 |
\x41\x54\x78\xda\xec\x9b\x6b\x88\x55\x55\x14\xc7\x7f\x77\xd4\xac\ |
|
187 |
\x11\x69\xec\x65\x65\x12\x94\x0a\x66\x96\x3d\x08\xb2\x82\x42\x4d\ |
|
188 |
\x32\x29\x99\xbd\x37\xd9\x40\xaf\x49\x65\x8a\xd0\x0a\x23\x09\xeb\ |
|
189 |
\x43\x7e\x90\xd0\xa2\x8c\xd2\x8c\xc6\xbe\xe4\x88\xe7\x1c\x1f\x65\ |
|
190 |
\x54\x23\xd9\xc3\x86\xa6\x0c\xb3\xc4\x3e\xf4\xc0\xa9\xe8\x41\x8f\ |
|
191 |
\x29\x66\x18\xba\xea\xd0\xf4\x61\x2f\xc1\xe4\x7a\xcf\x39\xf7\x9c\ |
|
192 |
\x7b\xce\xe5\xdc\xf3\x87\x0b\xf7\xde\xbd\xf7\x3a\x7b\xfd\xf7\xd9\ |
|
193 |
\x7b\xad\xbd\xd6\xde\x85\xa1\xa1\x21\xea\x19\x0d\xd4\x39\x72\x02\ |
|
194 |
\x72\x02\x72\x02\x72\x02\x72\x02\xea\x19\xc3\xa3\x0a\x50\xda\x84\ |
|
195 |
\x79\xd6\x65\xc0\x54\x60\x22\x70\x3a\xd0\x08\x14\x80\x01\xe0\x4f\ |
|
196 |
\xe0\x5b\xe0\x4b\xe0\x73\x60\x30\x88\x50\xcf\x75\xd2\x25\x20\x00\ |
|
197 |
\xce\x06\x66\x00\xd7\x02\xd3\x81\x09\xa2\x78\x29\xfc\x23\x24\x74\ |
|
198 |
\x01\x1f\x01\xef\x02\xbf\xa6\xfe\x06\x28\x6d\x2e\x05\x2e\xf0\x5c\ |
|
199 |
\x67\x6b\x08\xd9\x37\x00\xf7\x00\x73\x81\x31\x01\xdb\x9c\x22\x6f\ |
|
200 |
\xc8\x54\xa0\x0d\xf8\x0b\x78\x03\xd8\x00\xbc\x9f\xca\x1a\xa0\xb4\ |
|
201 |
\x59\x00\xec\x05\xb6\x28\x6d\x76\x28\x6d\x86\xf9\x34\x99\x05\x74\ |
|
202 |
\x02\xbb\x80\x3b\x42\x28\x5f\x0a\x63\x80\x3b\x81\xf7\x80\x77\x44\ |
|
203 |
\x76\xe2\x8b\xe0\x13\xc7\xd4\xbb\x19\x78\xfd\x04\xf5\xce\x94\x91\ |
|
204 |
\xea\xac\x46\x47\x81\x1b\x45\xf6\xab\xc0\x59\x49\x12\x50\x3c\xee\ |
|
205 |
\xf7\x1c\xa5\xcd\x4e\xa5\xcd\xb1\xd3\xa7\x19\xd8\x07\xdc\x9d\xc0\ |
|
206 |
\x9a\x72\x97\x3c\x4b\x27\x45\x40\xa9\xd5\x78\x26\xb0\x5d\x69\x73\ |
|
207 |
\x12\xf0\x00\xe0\x01\xe7\x26\x68\xbd\xce\x01\x1c\x60\x79\x9a\x7e\ |
|
208 |
\xc0\x1c\xe0\x00\xf0\x7c\x8a\x66\x7c\x85\xd2\xe6\xe9\x34\x1d\xa1\ |
|
209 |
\x09\x15\xb4\x19\x10\xe2\x3a\x65\x14\x1d\xf9\x7e\x40\xcc\x60\x58\ |
|
210 |
\x3c\xac\xb4\x59\x59\xcb\x7e\x00\x40\x9f\x4c\x93\xb7\x81\x8f\x81\ |
|
211 |
\x9f\x80\x7f\x4b\x0c\xc6\x78\xe0\x1a\xe0\x26\x40\x89\x59\x0c\x82\ |
|
212 |
\x65\x4a\x9b\x1f\x3c\xd7\x59\x5b\x6b\xae\xf0\x11\x60\x25\x70\x11\ |
|
213 |
\xd0\x0a\x6c\x06\x7e\x2c\xa1\x3c\xf2\xdf\xf7\xc0\x46\x31\x9f\x53\ |
|
214 |
\x80\x67\x43\x3c\xeb\x45\xa5\xcd\xb4\x5a\x22\x60\xaf\x8c\xe6\x63\ |
|
215 |
\x32\xe2\x61\x71\x10\x78\x48\x3c\xc8\xfd\x01\xdb\x6c\x54\xda\x14\ |
|
216 |
\x6a\x81\x80\x76\xe0\x0a\x60\x4f\x0c\xb2\xba\x80\xab\xe4\xed\xf1\ |
|
217 |
\xc3\x64\xe0\xd1\x5a\x20\xe0\xe4\x98\xe5\x15\x81\xdb\x80\x8e\x00\ |
|
218 |
\x75\x97\x2b\x6d\xce\x48\x9b\x80\x16\x60\x27\x30\xa2\x4a\x72\xcb\ |
|
219 |
\x61\x14\xf0\x48\x2d\xac\x01\x33\x81\x37\xab\x20\x57\x03\xbd\x3e\ |
|
220 |
\x75\x16\x29\x6d\x46\xd5\x82\x15\x98\x25\xa6\x2f\xce\x29\xd1\x07\ |
|
221 |
\xdc\xe7\x53\xa7\x09\x30\x71\x11\x50\x88\xd8\xe1\xd9\xc0\x6b\x31\ |
|
222 |
\x4f\x87\xcd\xc0\x67\x3e\x75\x9a\xe3\x22\xa0\x29\x86\x0e\x37\xc7\ |
|
223 |
\xb9\x83\x13\xac\xf6\x29\xbf\x5e\x69\xd3\x14\x07\x01\x4e\x0c\x9d\ |
|
224 |
\xdd\x0d\xfc\x1e\x33\x01\xdb\x80\xdf\xca\x94\x8f\x06\xae\x8e\xec\ |
|
225 |
\x0a\x7b\xae\xb3\x58\x69\xd3\x23\x9e\x59\x11\x08\x93\x4c\x1c\x29\ |
|
226 |
\x9d\x5c\x0d\x1c\x8e\x99\x80\x43\xc0\x87\x3e\xdb\xe2\x2b\x81\xb7\ |
|
227 |
\x22\xef\x05\x3c\xd7\x79\xa6\x4c\xc4\x28\xc5\xcd\x20\x5d\x3e\x04\ |
|
228 |
\x5c\x9c\xb6\x15\xa8\x36\x7a\x7c\xca\xc7\x65\x9d\x00\xbf\x75\x65\ |
|
229 |
\x74\xd6\x09\x28\xfa\x94\x8f\xc8\x3a\x01\x7e\x0e\xd6\x60\xd6\x09\ |
|
230 |
\xf0\xdb\xf4\xf4\x67\x9d\x80\xf1\x3e\xe5\xbf\x64\x9d\x00\x3f\x47\ |
|
231 |
\xe7\xab\x2c\x13\x30\x1c\x9b\x7e\x2b\x87\x3d\x59\x26\xe0\x16\x6c\ |
|
232 |
\x7e\xe0\x44\x18\x10\x47\x29\xb3\x04\x2c\xf5\x29\xff\xc0\x73\x9d\ |
|
233 |
\xde\xac\x12\x70\x6b\x80\xf9\xbf\x25\xe9\x80\xc8\x64\x92\xc9\x33\ |
|
234 |
\x34\x02\xeb\x7d\xea\xf4\x11\x2c\x88\x1a\x1b\x01\x6d\xc0\x17\xc0\ |
|
235 |
\xd6\x04\x08\xe8\x08\x10\x5b\x68\xf7\x5c\xa7\x3f\x29\x02\x5a\x81\ |
|
236 |
\xb5\xe2\x76\xce\x05\x5e\xae\xa2\xf2\xeb\x64\xf1\x2b\x87\xc3\xc0\ |
|
237 |
\xaa\x30\xa6\xa4\x62\x28\x6d\x5a\x80\x57\x8e\xfb\x7b\x81\xc4\x0c\ |
|
238 |
\x16\xc5\xac\xfc\x7a\x60\x61\x80\x7a\xab\x3c\xd7\xf9\x39\xa8\xd0\ |
|
239 |
\x86\x08\xca\xcf\xc7\xc6\xfa\x4a\x61\xa1\x04\x2b\xa6\xc4\xa0\xf8\ |
|
240 |
\x25\xd8\xf3\x42\x41\x94\xef\x01\x56\x84\x11\xde\x50\xa1\xf2\xcd\ |
|
241 |
\xf8\x27\x29\xae\x03\x3e\x05\x1e\x0f\xe0\xb3\x97\xc2\x58\xe0\x49\ |
|
242 |
\xe0\x13\x6c\x8a\x2d\x08\x6e\xf7\x5c\xe7\x50\x58\x6f\xaa\x12\x8c\ |
|
243 |
\x0b\x58\xaf\x51\x94\x58\x0c\x6c\xc2\xa6\xc1\xbb\xcb\xec\xe3\xc7\ |
|
244 |
\x8a\x79\x9b\x8d\xcd\x04\x85\x39\x5f\xb4\xd4\x73\x9d\xee\xb0\x8a\ |
|
245 |
\x14\x2a\xbd\x2f\xa0\xb4\x79\x01\xb8\xbf\x82\xa6\xbd\xc0\x77\xd8\ |
|
246 |
\x84\xe9\xdf\xd8\xb0\xfb\xa9\xc0\x79\xc0\x85\x54\x76\xa8\x6a\x8d\ |
|
247 |
\xe7\x3a\x4b\x2a\xd1\xa3\x10\xe5\xc2\x84\xd2\xa6\x1d\x7b\x14\x2e\ |
|
248 |
\x4d\xbc\xe4\xb9\x4e\x5b\xa5\x8d\x23\x99\x41\xcf\x75\x5a\x81\x35\ |
|
249 |
\x29\x2a\xff\x54\x14\xe5\xe3\xf2\x03\x96\x00\x0f\x62\xc3\xd4\x49\ |
|
250 |
\xa1\x1f\xb8\x17\x58\x16\x55\x50\x5c\x9e\xe0\x73\xd8\x1c\xfe\xae\ |
|
251 |
\x04\x94\xdf\x0e\x5c\x8e\x3d\x83\x40\xad\x10\x00\xf6\x90\xf3\x0c\ |
|
252 |
\xf1\x0c\xf7\x57\x41\xf1\x6e\x6c\x0e\x60\x1e\xf6\x3c\x31\xb5\x46\ |
|
253 |
\xc0\x51\x6c\x90\x11\x6a\xc1\x66\x65\x8e\x44\x90\x55\x94\xfd\xc5\ |
|
254 |
\xd1\xdd\x9f\x57\x8d\xa8\x4a\x35\x30\x28\x8e\x52\x07\x30\x49\xec\ |
|
255 |
\xfa\x74\x99\x26\xe7\x03\xc3\xca\xb4\xeb\x91\xd1\xde\x8d\x3d\x0c\ |
|
256 |
\x71\xb0\x9a\xf3\x29\x89\xed\xeb\xd7\xf2\x59\x07\x4c\xc3\xa6\xab\ |
|
257 |
\x26\x02\xa7\xf1\xff\xfb\x02\x7f\x00\xdf\xc8\xf4\xd9\x47\xe9\x93\ |
|
258 |
\x64\xb1\xa3\x90\x5f\x9c\xac\x73\xe4\x04\xe4\x04\xe4\x04\xe4\x04\ |
|
259 |
\xd4\x35\xfe\x1b\x00\xc4\xbb\x02\xb9\x0e\xf0\xf7\x07\x00\x00\x00\ |
|
260 |
\x00\x49\x45\x4e\x44\xae\x42\x60\x82\ |
|
261 |
\x00\x01\x69\xce\ |
|
262 |
\x47\ |
|
263 |
\x49\x46\x38\x39\x61\x00\x01\x00\x01\xf7\x00\x00\x00\x00\x00\x78\ |
|
264 |
\x61\x4e\xfa\xc8\x9e\xfa\xce\xa9\xfb\xd1\xaf\xfb\xd2\xb1\xfb\xd3\ |
|
265 |
\xb2\xfa\xd2\xb1\xfa\xd1\xaf\xfa\xd1\xae\xfa\xd0\xac\xfa\xce\xaa\ |
|
266 |
\xfa\xcd\xa8\xfa\xcc\xa5\xfa\xca\xa3\xfa\xc9\xa1\xfa\xc8\x9e\xf9\ |
|
267 |
\xc7\x9d\xf9\xc6\x9b\xf9\xc5\x9a\xf9\xc5\x99\xf9\xc4\x98\xf9\xc3\ |
|
268 |
\x96\xf9\xc2\x95\xf9\xc1\x93\xf9\xc1\x92\xf9\xc0\x91\xf9\xc1\x92\ |
|
269 |
\xf9\xc1\x92\xf9\xc1\x93\xf9\xc1\x92\xf9\xc0\x91\xf9\xc0\x90\xf9\ |
|
270 |
\xc0\x90\xf9\xc0\x90\xfa\xc0\x90\xfa\xc0\x90\xfa\xc0\x90\xfa\xc0\ |
|
271 |
\x90\xfa\xc0\x90\xfa\xc0\x90\xfa\xc0\x90\xfa\xc0\x90\xfa\xbf\x8f\ |
|
272 |
\xfa\xbf\x8f\xfa\xbf\x8f\xfa\xbf\x8f\xfa\xbf\x8f\xfa\xbf\x8f\xfa\ |
|
273 |
\xbf\x8f\xfa\xbf\x8f\xfa\xbf\x8f\xfa\xbf\x8f\xfa\xbe\x8f\xfa\xbd\ |
|
274 |
\x8f\xfa\xbb\x8f\xfa\xb8\x8e\xfa\xb2\x8d\xfb\xa9\x8b\xfc\x9a\x88\ |
|
275 |
\xfe\x88\x84\xff\x7c\x81\xff\x7c\x81\xff\x7c\x81\xff\x7c\x81\xff\ |
|
276 |
\x7c\x81\xff\x7c\x81\xff\x7c\x81\xff\x7c\x81\xff\x7c\x81\xff\x7c\ |
|
277 |
\x81\xff\x7c\x81\xfe\x7c\x81\xfe\x7c\x81\xfe\x7c\x81\xfe\x7c\x81\ |
|
278 |
\xfe\x7c\x81\xfe\x7c\x81\xfe\x7c\x81\xfe\x7c\x81\xfe\x7c\x81\xfe\ |
|
279 |
\x7c\x81\xfe\x7c\x81\xfe\x7c\x81\xfe\x7c\x81\xff\x7c\x81\xff\x7c\ |
|
280 |
\x81\xff\x7c\x81\xff\x7c\x81\xff\x7c\x81\xff\x7c\x81\xff\x7c\x81\ |
|
281 |
\xff\x7c\x81\xff\x7d\x82\xff\x7e\x83\xfe\x7f\x84\xfe\x80\x85\xfe\ |
|
282 |
\x81\x85\xfe\x82\x86\xfe\x83\x87\xfe\x84\x89\xfe\x86\x8a\xfe\x87\ |
|
283 |
\x8c\xfe\x89\x8e\xfe\x8a\x8f\xfe\x8c\x90\xfe\x8d\x92\xfe\x8f\x93\ |
|
284 |
\xfe\x90\x94\xfe\x91\x96\xfe\x93\x97\xfe\x95\x99\xfe\x96\x9a\xfe\ |
|
285 |
\x98\x9c\xfe\x9a\x9e\xfe\x9c\x9f\xfe\x9d\xa1\xfe\x9f\xa3\xfe\xa1\ |
|
286 |
\xa4\xfe\xa2\xa6\xfe\xa4\xa7\xfe\xa6\xaa\xfe\xa8\xab\xfe\xaa\xae\ |
|
287 |
\xfe\xad\xb0\xfe\xaf\xb2\xfe\xb1\xb4\xfe\xb2\xb5\xfe\xb4\xb7\xfe\ |
|
288 |
\xb6\xb9\xfe\xb7\xba\xfe\xb8\xbb\xfe\xba\xbd\xfe\xbb\xbe\xfe\xbc\ |
|
289 |
\xbf\xfe\xbd\xc0\xfe\xbf\xc1\xfe\xc0\xc3\xfe\xc3\xc5\xfe\xc5\xc7\ |
|
290 |
\xfe\xc7\xc9\xfe\xca\xcc\xfe\xcc\xce\xfe\xce\xd0\xfe\xcf\xd0\xfe\ |
|
291 |
\xcf\xd1\xfe\xcf\xd1\xfe\xd0\xd0\xfe\xd1\xcf\xfd\xd3\xcc\xfc\xd6\ |
|
292 |
\xc3\xfb\xd8\xbe\xfb\xd8\xbd\xfb\xd8\xbd\xfb\xd9\xbf\xfb\xda\xc1\ |
|
293 |
\xfb\xdb\xc2\xfb\xdc\xc3\xfb\xdc\xc4\xfc\xde\xc5\xfc\xde\xc7\xfc\ |
|
294 |
\xdf\xc8\xfc\xe0\xc8\xfc\xe0\xc9\xfc\xe1\xcb\xfc\xe1\xcc\xfc\xe1\ |
|
295 |
\xce\xfc\xe0\xd0\xfc\xe0\xd1\xfd\xe1\xd4\xfd\xe0\xd7\xfd\xdf\xda\ |
|
296 |
\xfe\xdf\xdc\xfe\xdf\xde\xfe\xdf\xe0\xfe\xdf\xe0\xfe\xdf\xe0\xfe\ |
|
297 |
\xdf\xdf\xfe\xdd\xde\xfe\xdd\xdc\xfe\xdc\xdb\xfd\xde\xd8\xfd\xe1\ |
|
298 |
\xd5\xfc\xe4\xd4\xfc\xe5\xd5\xfd\xe7\xdb\xfd\xe8\xe0\xfe\xe9\xe3\ |
|
299 |
\xfe\xe9\xe5\xfe\xeb\xe6\xfe\xed\xe8\xfe\xef\xeb\xfe\xef\xeb\xfe\ |
|
300 |
\xf1\xed\xfe\xf2\xf0\xfe\xf4\xf2\xfe\xf4\xf2\xfe\xf5\xf3\xfe\xf5\ |
|
301 |
\xf3\xfe\xf5\xf3\xfe\xf5\xf2\xfe\xf6\xf2\xfe\xf6\xf1\xfe\xf5\xf1\ |
|
302 |
\xfe\xf5\xf0\xfe\xf4\xf0\xfe\xf4\xf1\xfe\xf4\xf3\xfe\xf5\xf4\xfe\ |
|
303 |
\xf7\xf6\xfe\xfa\xf9\xfe\xfc\xfb\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\ |
|
304 |
\xfe\xff\xff\xfe\xff\xff\xfe\xff\xff\xfe\xff\xff\xfe\xff\xff\xfe\ |
|
305 |
\xff\xff\xfe\xff\xff\xfe\xff\xff\xfe\xff\xff\xfe\xff\xff\xfe\xff\ |
|
306 |
\xff\xfe\xff\xff\xfe\xff\xff\xfe\xff\xff\xfe\xff\xff\xfe\xff\xff\ |
|
307 |
\xfe\xff\xff\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\ |
|
308 |
\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\ |
|
309 |
\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\xfe\ |
|
310 |
\xfe\xfe\xfe\xfe\xfe\xfd\xfd\xfe\xfc\xfb\xfe\xfa\xfa\xfe\xfa\xfa\ |
|
311 |
\xfe\xfa\xfa\xfe\xfb\xfa\xfe\xfb\xfa\xfe\xfa\xfa\x21\xff\x0b\x4e\ |
|
312 |
\x45\x54\x53\x43\x41\x50\x45\x32\x2e\x30\x03\x01\x00\x00\x00\x21\ |
|
313 |
\xf9\x04\x09\x03\x00\xd7\x00\x2c\x00\x00\x00\x00\x00\x01\x00\x01\ |
|
314 |
\x00\x08\xfe\x00\xaf\x09\x1c\x48\xb0\xa0\xc1\x83\x08\x13\x2a\x5c\ |
|
315 |
\xc8\xb0\xa1\xc3\x87\x10\x23\x4a\x9c\x48\xb1\xa2\xc5\x8b\x18\x33\ |
|
316 |
\x6a\xdc\xc8\xb1\xa3\xc7\x8f\x20\x43\x8a\x1c\x49\xb2\xa4\xc9\x93\ |
|
317 |
\x28\x53\xaa\x5c\xc9\xb2\xa5\xcb\x97\x30\x63\xca\x9c\x49\xb3\xa6\ |
|
318 |
\xcd\x9b\x38\x73\xea\xdc\xc9\xb3\xa7\xcf\x9f\x40\x83\x0a\x1d\x4a\ |
|
319 |
\xb4\xa8\xd1\xa3\x48\x93\x2a\x5d\xca\xb4\xa9\xd3\xa7\x50\xa3\x4a\ |
|
320 |
\x9d\x4a\xb5\xaa\xd5\xab\x58\xb3\x6a\xdd\xca\xb5\xab\xd7\xaf\x60\ |
|
321 |
\xc3\x8a\x1d\x4b\xb6\xac\xd9\xb3\x68\xd3\xaa\x5d\xcb\xb6\xad\xdb\ |
|
322 |
\xb7\x70\xe3\xca\x9d\x4b\xb7\xae\xdd\xbb\x78\xf3\xea\xdd\xcb\xb7\ |
|
323 |
\xaf\xdf\xbf\x80\x03\x0b\x1e\x4c\xb8\xb0\xe1\xc3\x88\x13\x2b\x5e\ |
|
324 |
\xcc\xb8\xb1\xe3\xc7\x90\x23\x4b\x9e\x4c\xb9\xb2\xe5\xcb\x98\x33\ |
|
325 |
\x6b\xde\xcc\xb9\xb3\xe7\xcf\xa0\x43\x8b\x1e\x4d\xba\xb4\xe9\xd3\ |
|
326 |
\xa8\x53\xab\x5e\x5d\x50\x1f\x2f\x5a\xb4\x22\x39\x62\xa4\x08\x51\ |
|
327 |
\x22\x5a\xd0\x58\x0b\x15\x16\x29\x11\x9f\x39\x66\x7a\x08\x1f\x4e\ |
|
328 |
\x5c\xb8\x9f\x69\xba\x77\x46\x8b\xf4\x47\x4d\xf1\xe7\xd0\x7b\xac\ |
|
329 |
\x79\x96\xdc\x26\x2f\x42\x70\xa2\x6b\x87\x8e\xa7\xba\x4c\x5e\x83\ |
|
330 |
\x9c\xfe\x6f\x1f\xff\x1c\x92\xf7\x96\xae\x04\xa5\x21\xcf\xfe\x39\ |
|
331 |
\x9d\xf3\x2a\x69\xbd\x69\x4f\xbf\x78\x1b\xf8\x27\x69\x65\xaf\xcf\ |
|
332 |
\x5f\x78\x1c\xfc\x24\xc9\x22\x47\x7f\x04\xf6\xf0\x07\x80\x21\x09\ |
|
333 |
\x53\x47\x81\x05\xf2\x82\xa0\x47\xd4\x2c\x22\x06\x83\x04\x1e\xf8\ |
|
334 |
\x20\x47\xbc\xb8\x41\x21\x81\x6e\x48\x73\xa1\x46\xd4\x1c\xd2\xc5\ |
|
335 |
\x86\xfd\x01\x82\xdc\x87\x18\x41\xb3\x20\x89\xd1\xb1\x41\x07\x1e\ |
|
336 |
\x7a\xf4\x01\x48\x21\xb7\x45\x83\x62\x46\xae\x04\xc7\x62\x0f\x61\ |
|
337 |
\xd0\x51\xc8\x23\xae\x08\x73\xa3\x48\x89\xb0\x18\x86\x1e\x8b\x38\ |
|
338 |
\x38\x24\x49\xd3\xe0\x41\xa2\x1c\x8e\xe8\xe3\x90\x2f\x98\x34\x30\ |
|
339 |
\xc2\x05\x13\x08\xd0\xc0\x02\x06\x7c\x72\x4b\x2f\xc9\x2c\xa9\x90\ |
|
340 |
\x34\x73\x50\x58\xc6\x20\xbf\x3c\xd4\x8f\x01\x23\xb4\xe9\xe6\x9b\ |
|
341 |
\x6f\x5a\x50\x00\x29\xbe\x88\x49\xd0\x33\x6d\x30\xa8\x06\x23\x27\ |
|
342 |
\x3e\xc4\x26\x9c\x80\x06\x3a\x02\x01\xb9\x88\x19\xcc\x7a\x04\xbe\ |
|
343 |
\x11\x09\x35\x12\xe1\x22\xe8\xa3\x80\x4a\xf0\x49\x98\x1f\xf2\x52\ |
|
344 |
\x06\x81\x67\x44\x52\xd1\x00\x90\x76\x0a\xa7\x01\x75\x22\xc8\xcb\ |
|
345 |
\x84\xfc\x75\x11\x88\x87\x15\x5d\xe0\xe9\xaa\x6e\x32\x50\x28\x7c\ |
|
346 |
\xfe\xbf\xe8\x58\x5f\x1c\xbd\x60\xc4\xea\xad\x6d\x3a\x10\x6a\x72\ |
|
347 |
\xcf\xa0\xc1\x9f\x17\x8a\x68\xe4\x00\xae\xb8\x1a\x60\x23\x6b\xd1\ |
|
348 |
\xe4\x59\x9f\x19\x4a\x66\xf4\x27\xb1\xac\x5a\x40\x0a\xa3\xa9\xe9\ |
|
349 |
\xb3\x1f\x7d\x75\x1c\xab\x51\x30\x19\x40\x8b\xab\x03\xcc\xa4\x96\ |
|
350 |
\x07\x7f\x82\x7c\xe4\xa8\xb7\xb7\x5a\xf0\x6a\x69\x8c\xf0\xd7\x48\ |
내보내기 Unified diff