개정판 b82166d4
Inconsitency check 수정
DTI_PID/SPPIDConverter/Main.vb | ||
---|---|---|
950 | 950 |
|
951 | 951 |
Main_Tab.SelectedIndex = 1 |
952 | 952 |
ListBox_Result.Items.Clear() |
953 |
' DataGrid_Result.DataSource = New DataTable() |
|
954 | 953 |
Me.ProgressBar_Status.Visible = True |
955 | 954 |
ProgressBar_Status.Maximum = 100 |
956 | 955 |
ProgressBar_Status.Value = 0 |
957 | 956 |
InitItemCount() |
958 |
' _selectFolderPath = Tree_XMLFiles.SelectedNode.FullPath.Replace("\\", "\") |
|
959 | 957 |
_Main_trd = New Thread(AddressOf ThreadConvert) |
960 | 958 |
_Main_trd.IsBackground = True |
961 | 959 |
_Main_trd.Start() |
... | ... | |
2022 | 2020 |
Dim oLMSymbol As LMSymbol = Nothing |
2023 | 2021 |
Dim dPreConn_x As Double = 0 |
2024 | 2022 |
Dim dPreConn_y As Double = 0 |
2023 |
Dim sStartConnectionUid As String = "" |
|
2024 |
Dim sEndConnectionUid As String = "" |
|
2025 | 2025 |
If sConn1Type <> "" And sConn2Type <> "" Then |
2026 | 2026 |
If sConn1Type = "Line" Then |
2027 |
CheckConnectionLine(dConn1_x, dConn1_y, oStartLMConnector) |
|
2027 |
CheckConnectionLine(dConn1_x, dConn1_y, oStartLMConnector, sStartConnectionUid)
|
|
2028 | 2028 |
Else |
2029 | 2029 |
CheckConnectionSymbolToSymbol(oConn1Rows, dConn1_x, dConn1_y, oStartLMConnector) |
2030 | 2030 |
End If |
2031 | 2031 |
|
2032 | 2032 |
If sConn2Type = "Line" Then |
2033 |
CheckConnectionLine(dConn2_x, dConn2_y, oEndLMConnector) |
|
2033 |
CheckConnectionLine(dConn2_x, dConn2_y, oEndLMConnector, sEndConnectionUid)
|
|
2034 | 2034 |
Else |
2035 | 2035 |
CheckConnectionSymbolToSymbol(oConn2Rows, dConn2_x, dConn2_y, oEndLMConnector) |
2036 | 2036 |
End If |
... | ... | |
2113 | 2113 |
'End If |
2114 | 2114 |
ElseIf sConn1Type <> "" And sConn2Type = "" Then |
2115 | 2115 |
If sConn1Type = "Line" Then |
2116 |
CheckConnectionLine(dConn1_x, dConn1_y, oStartLMConnector) |
|
2116 |
CheckConnectionLine(dConn1_x, dConn1_y, oStartLMConnector, sStartConnectionUid)
|
|
2117 | 2117 |
Else |
2118 | 2118 |
CheckConnectionSymbolToSymbol(oConn1Rows, dConn1_x, dConn1_y, oStartLMConnector) |
2119 | 2119 |
dOriginal_x = dConn1_x |
... | ... | |
2125 | 2125 |
ElseIf sConn1Type = "" And sConn2Type <> "" Then |
2126 | 2126 |
|
2127 | 2127 |
If sConn1Type = "Line" Then |
2128 |
CheckConnectionLine(dConn2_x, dConn2_y, oEndLMConnector) |
|
2128 |
CheckConnectionLine(dConn2_x, dConn2_y, oEndLMConnector, sEndConnectionUid)
|
|
2129 | 2129 |
Else |
2130 | 2130 |
CheckConnectionSymbolToSymbol(oConn2Rows, dConn2_x, dConn2_y, oEndLMConnector) |
2131 | 2131 |
dOriginal_x = dConn2_x |
... | ... | |
2135 | 2135 |
|
2136 | 2136 |
ElseIf sConn3Type <> "" And sConn4Type <> "" Then |
2137 | 2137 |
If sConn1Type = "Line" Then |
2138 |
CheckConnectionLine(dConn3_x, dConn3_y, oStartLMConnector) |
|
2138 |
CheckConnectionLine(dConn3_x, dConn3_y, oStartLMConnector, sStartConnectionUid)
|
|
2139 | 2139 |
Else |
2140 | 2140 |
CheckConnectionSymbolToSymbol(oConn3Rows, dConn3_x, dConn3_y, oStartLMConnector) |
2141 | 2141 |
End If |
2142 | 2142 |
|
2143 | 2143 |
If sConn2Type = "Line" Then |
2144 |
CheckConnectionLine(dConn4_x, dConn4_y, oEndLMConnector) |
|
2144 |
CheckConnectionLine(dConn4_x, dConn4_y, oEndLMConnector, sEndConnectionUid)
|
|
2145 | 2145 |
Else |
2146 | 2146 |
CheckConnectionSymbolToSymbol(oConn4Rows, dConn4_x, dConn4_y, oEndLMConnector) |
2147 | 2147 |
End If |
... | ... | |
2158 | 2158 |
|
2159 | 2159 |
ElseIf sConn3Type <> "" And sConn4Type = "" Then |
2160 | 2160 |
If sConn1Type = "Line" Then |
2161 |
CheckConnectionLine(dConn3_x, dConn3_y, oStartLMConnector) |
|
2161 |
CheckConnectionLine(dConn3_x, dConn3_y, oStartLMConnector, sStartConnectionUid)
|
|
2162 | 2162 |
Else |
2163 | 2163 |
CheckConnectionSymbolToSymbol(oConn3Rows, dConn3_x, dConn3_y, oStartLMConnector) |
2164 | 2164 |
dOriginal_x = dConn3_x |
... | ... | |
2169 | 2169 |
|
2170 | 2170 |
ElseIf sConn3Type = "" And sConn4Type <> "" Then |
2171 | 2171 |
If sConn2Type = "Line" Then |
2172 |
CheckConnectionLine(dConn4_x, dConn4_y, oEndLMConnector) |
|
2172 |
CheckConnectionLine(dConn4_x, dConn4_y, oEndLMConnector, sEndConnectionUid)
|
|
2173 | 2173 |
Else |
2174 | 2174 |
CheckConnectionSymbolToSymbol(oConn4Rows, dConn4_x, dConn4_y, oEndLMConnector) |
2175 | 2175 |
dOriginal_x = dConn4_x |
... | ... | |
2666 | 2666 |
Dim dPreConnX As Double = 0 |
2667 | 2667 |
Dim dPreConnY As Double = 0 |
2668 | 2668 |
|
2669 |
Dim sStartConnectionUid As String = "" |
|
2670 |
Dim sEndConnectionUid As String = "" |
|
2669 | 2671 |
|
2670 | 2672 |
' Dim sTargetDirection As String = CheckBranchLine(dStart_Dwg_x, dStart_Dwg_y, dEnd_Dwg_x, dEnd_Dwg_y, oLMConnector) |
2671 | 2673 |
|
2672 | 2674 |
' If sTargetDirection = "" Then |
2673 |
CheckConnectionLine(dStart_Dwg_x, dStart_Dwg_y, oStartLMConnector) |
|
2675 |
CheckConnectionLine(dStart_Dwg_x, dStart_Dwg_y, oStartLMConnector, sStartConnectionUid)
|
|
2674 | 2676 |
|
2675 | 2677 |
If oStartLMConnector Is Nothing Then |
2676 |
UpdateCheckBranchLine(dStart_Dwg_x, dStart_Dwg_y, oStartLMConnector) |
|
2678 |
UpdateCheckBranchLine(dStart_Dwg_x, dStart_Dwg_y, oStartLMConnector, sStartConnectionUid)
|
|
2677 | 2679 |
If oStartLMConnector Is Nothing Then |
2678 | 2680 |
oLMSymbol1 = CheckConnectionSymbolToLine(oConn1Rows, dStart_Dwg_x, dStart_Dwg_y, dCenterPos_x, dCenterPos_y, oStartLMConnector) |
2679 | 2681 |
If oLMSymbol1 IsNot Nothing Then |
... | ... | |
2698 | 2700 |
sConn1Type = "Line" |
2699 | 2701 |
|
2700 | 2702 |
End If |
2701 |
CheckConnectionLine(dEnd_Dwg_x, dEnd_Dwg_y, oEndLMConnector)
|
|
2703 |
CheckConnectionLine(dEnd_Dwg_x, dEnd_Dwg_y, oEndLMConnector, sEndConnectionUid)
|
|
2702 | 2704 |
If oEndLMConnector Is Nothing Then |
2703 |
UpdateCheckBranchLine(dEnd_Dwg_x, dEnd_Dwg_y, oEndLMConnector) |
|
2705 |
UpdateCheckBranchLine(dEnd_Dwg_x, dEnd_Dwg_y, oEndLMConnector, sEndConnectionUid)
|
|
2704 | 2706 |
If oEndLMConnector Is Nothing Then |
2705 | 2707 |
oLMSymbol2 = CheckConnectionSymbolToLine(oConn2Rows, dEnd_Dwg_x, dEnd_Dwg_y, dCenterPos_x, dCenterPos_y, oEndLMConnector) |
2706 | 2708 |
If oLMSymbol2 IsNot Nothing Then |
... | ... | |
2900 | 2902 |
|
2901 | 2903 |
'모델링 된 PipeLine 데이터 테이블 저장 |
2902 | 2904 |
Dim oAddRow As DataRow = _ModelingLine_Dt.NewRow |
2905 |
oAddRow(_XML_LINE_UID) = sUid |
|
2903 | 2906 |
oAddRow(_XML_LINE_SPID) = oCurrentConnector.ModelItemID |
2904 | 2907 |
oAddRow(_XML_LINE_LMCONNECTOR) = oCurrentConnector |
2905 | 2908 |
oAddRow(_XML_LINE_DRAWING_TF) = "TRUE" |
... | ... | |
2911 | 2914 |
|
2912 | 2915 |
|
2913 | 2916 |
Dim oAttributeRow() As DataRow = oAttribute_Dt.Select(_XML_ATTRIBUTE_UID & " = '" + sLineNoUid + "'") |
2914 |
If oAttributeRow.Length > 0 Then
|
|
2915 |
For Each oAttribute In oAttributeRow
|
|
2916 |
Try
|
|
2917 |
Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString()
|
|
2918 |
Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString()
|
|
2919 |
If sPIDValue.Contains("'") Then
|
|
2920 |
sPIDValue = sPIDValue.Replace("'", """")
|
|
2921 |
End If
|
|
2922 |
Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE)
|
|
2923 |
oPipeRun.Attributes(sSPPIDAttribute).Value = sPIDValue
|
|
2924 |
Catch ex As Exception
|
|
2925 |
End Try
|
|
2926 |
Next
|
|
2927 |
oPipeRun.Commit()
|
|
2928 |
End If
|
|
2917 |
If oAttributeRow.Length > 0 Then |
|
2918 |
For Each oAttribute In oAttributeRow |
|
2919 |
Try |
|
2920 |
Dim sPIDAttribute As String = oAttribute(_XML_ATTRIBUTE_NAME).ToString() |
|
2921 |
Dim sPIDValue As String = oAttribute(_XML_ATTRIBUTE_VALUE).ToString() |
|
2922 |
If sPIDValue.Contains("'") Then |
|
2923 |
sPIDValue = sPIDValue.Replace("'", """") |
|
2924 |
End If |
|
2925 |
Dim sSPPIDAttribute As String = GetAttributeMapping(sPIDAttribute, _DB_COLUMN_ATTRIBUTE_SPPID_ATTRIBUTE) |
|
2926 |
oPipeRun.Attributes(sSPPIDAttribute).Value = sPIDValue |
|
2927 |
Catch ex As Exception |
|
2928 |
End Try |
|
2929 |
Next |
|
2930 |
oPipeRun.Commit() |
|
2931 |
End If |
|
2929 | 2932 |
|
2930 |
Dim sID_1 As String = ""
|
|
2933 |
Dim sID_1 As String = "" |
|
2931 | 2934 |
Dim sID_2 As String = "" |
2932 | 2935 |
Dim oAddConnector As LMConnector = Nothing |
2933 | 2936 |
If oStartLMConnector IsNot Nothing Then |
2934 |
sID_1 = oStartLMConnector.ModelItemID
|
|
2937 |
sID_1 = oStartLMConnector.ModelItemID |
|
2935 | 2938 |
sID_2 = oCurrentConnector.ModelItemID |
2936 | 2939 |
oAddConnector = oStartLMConnector |
2937 | 2940 |
ElseIf oEndLMConnector IsNot Nothing Then |
2938 |
sID_1 = oEndLMConnector.ModelItemID
|
|
2941 |
sID_1 = oEndLMConnector.ModelItemID |
|
2939 | 2942 |
sID_2 = oCurrentConnector.ModelItemID |
2940 | 2943 |
oAddConnector = oEndLMConnector |
2941 | 2944 |
End If |
2942 |
' If sID_1 <> "" And sID_2 <> "" Then |
|
2943 |
' Dim objSurvivorItem As LMAItem = Nothing |
|
2944 |
' Dim oPipeRun1 As LMPipeRun = oPidDataSource.GetPipeRun(sID_1) |
|
2945 |
' Dim oPipeRun2 As LMPipeRun = oPidDataSource.GetPipeRun(sID_2) |
|
2946 |
' _Placement.PIDJoinRuns(oPipeRun1, oPipeRun2) |
|
2947 |
|
|
2948 |
' Dim oChangeRow() As DataRow = _ModelingLine_Dt.Select(_XML_LINE_SPID & " = '" & sID_2 & "'") |
|
2949 |
' If oChangeRow.Length = 1 Then |
|
2950 |
' oChangeRow(0)(_XML_LINE_SPID) = sID_1 |
|
2951 |
' oChangeRow(0)(_XML_LINE_LMCONNECTOR) = oAddConnector |
|
2952 |
' End If |
|
2953 |
'End If |
|
2945 |
If sID_1 <> "" And sID_2 <> "" Then |
|
2946 |
Dim objSurvivorItem As LMAItem = Nothing |
|
2947 |
Dim oPipeRun1 As LMPipeRun = oPidDataSource.GetPipeRun(sID_1) |
|
2948 |
Dim oPipeRun2 As LMPipeRun = oPidDataSource.GetPipeRun(sID_2) |
|
2949 |
_Placement.PIDJoinRuns(oPipeRun1, oPipeRun2) |
|
2950 |
|
|
2951 |
For Each objRep In oPipeRun1.Representations |
|
2952 |
If objRep.Attributes("RepresentationType").Value = "Connector" And objRep.Attributes("ItemStatus").Value = "Active" Then |
|
2953 |
Dim sID As String = objRep.ID |
|
2954 |
oStartLMConnector = _Placement.PIDDataSource.GetConnector(sID) |
|
2955 |
Exit For |
|
2956 |
End If |
|
2957 |
Next |
|
2958 |
|
|
2959 |
'For Each objRep In oPipeRun2.Representations |
|
2960 |
' If objRep.Attributes("RepresentationType").Value = "Connector" And objRep.Attributes("ItemStatus").Value = "Active" Then |
|
2961 |
' Dim sID As String = objRep.ID |
|
2962 |
' oEndLMConnector = _Placement.PIDDataSource.GetConnector(sID) |
|
2963 |
' End If |
|
2964 |
'Next |
|
2965 |
|
|
2966 |
|
|
2967 |
'Dim oChangeRow() As DataRow = _ModelingLine_Dt.Select(_XML_LINE_SPID & " = '" & sID_2 & "'") |
|
2968 |
'If oChangeRow.Length = 1 Then |
|
2969 |
' oChangeRow(0)(_XML_LINE_SPID) = sID_1 |
|
2970 |
' oChangeRow(0)(_XML_LINE_LMCONNECTOR) = oAddConnector |
|
2971 |
'End If |
|
2972 |
End If |
|
2973 |
|
|
2974 |
|
|
2975 |
'//2018.09.07 LMControl에 따라서 inconsytency가 달라지는듯 확인 |
|
2976 |
|
|
2977 |
If sStartConnectionUid <> "" Then |
|
2978 |
Dim oChangeRow() As DataRow = _ModelingLine_Dt.Select(_XML_LINE_UID & " = '" & sStartConnectionUid & "'") |
|
2979 |
If oChangeRow.Length = 1 Then |
|
2980 |
oChangeRow(0)(_XML_LINE_SPID) = sID_1 |
|
2981 |
oChangeRow(0)(_XML_LINE_LMCONNECTOR) = oStartLMConnector |
|
2982 |
End If |
|
2983 |
End If |
|
2984 |
If sEndConnectionUid <> "" Then |
|
2985 |
Dim oChangeRow() As DataRow = _ModelingLine_Dt.Select(_XML_LINE_UID & " = '" & sEndConnectionUid & "'") |
|
2986 |
If oChangeRow.Length = 1 Then |
|
2987 |
oChangeRow(0)(_XML_LINE_SPID) = sID_1 |
|
2988 |
oChangeRow(0)(_XML_LINE_LMCONNECTOR) = oStartLMConnector |
|
2989 |
End If |
|
2990 |
End If |
|
2991 |
|
|
2954 | 2992 |
Else |
2955 |
sReturnUid = ""
|
|
2993 |
sReturnUid = "" |
|
2956 | 2994 |
End If |
2995 |
|
|
2996 |
|
|
2997 |
|
|
2998 |
|
|
2999 |
|
|
2957 | 3000 |
Catch ex As Exception |
2958 | 3001 |
|
2959 | 3002 |
End Try |
... | ... | |
3297 | 3340 |
If sType.ToUpper() = "ELECTRIC" Then |
3298 | 3341 |
Return Color.DarkOrange |
3299 | 3342 |
ElseIf sType.ToUpper() = "CONNECT TO PROCESS" Then |
3300 |
Return Color.LightGreen
|
|
3343 |
Return Color.Green |
|
3301 | 3344 |
ElseIf sType.ToUpper() = "SOFTWARE" Then |
3302 | 3345 |
Return Color.Blue |
3303 | 3346 |
ElseIf sType.ToUpper() = "PNEUMATIC" Then |
... | ... | |
4177 | 4220 |
End Function |
4178 | 4221 |
|
4179 | 4222 |
Private Function UpdateCheckBranchLine(ByRef dX As Double, ByRef dY As Double, |
4180 |
ByRef oLMConnector As LMConnector) As Boolean |
|
4223 |
ByRef oLMConnector As LMConnector, ByRef oUid As String) As Boolean
|
|
4181 | 4224 |
Dim bConnectionFlag As Boolean = False |
4182 | 4225 |
Dim iGapCheck As Integer = 0 |
4183 | 4226 |
Try |
... | ... | |
4227 | 4270 |
Else |
4228 | 4271 |
dX = dMax_X |
4229 | 4272 |
End If |
4230 |
|
|
4273 |
oUid = oModelrow(_XML_LINE_UID).ToString() |
|
4274 |
' Dim oID As String = oModelrow(_XML_LINE_SPID) |
|
4231 | 4275 |
oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR) |
4276 |
' oID = oLMConnector.ModelItemID |
|
4277 |
' oLMConnector = _Placement.PIDDataSource.GetConnector(oID) |
|
4278 |
|
|
4232 | 4279 |
End If |
4233 | 4280 |
|
4234 | 4281 |
|
... | ... | |
4255 | 4302 |
|
4256 | 4303 |
|
4257 | 4304 |
Private Function CheckConnectionLine(ByRef dX As Double, ByRef dY As Double, |
4258 |
ByRef oLMConnector As LMConnector) As Boolean |
|
4305 |
ByRef oLMConnector As LMConnector, ByRef sUid As String) As Boolean
|
|
4259 | 4306 |
Dim bConnectionFlag As Boolean = False |
4260 | 4307 |
Dim iGapCheck As Integer = 0 |
4261 | 4308 |
Try |
... | ... | |
4295 | 4342 |
If bCheckEqual Then |
4296 | 4343 |
Try |
4297 | 4344 |
oLMConnector = oModelrow(_XML_LINE_LMCONNECTOR) |
4345 |
sUid = oModelrow(_XML_LINE_UID) |
|
4298 | 4346 |
oRun = _Placement.PIDDataSource.GetPipeRun(oLMConnector.ModelItemID) |
4299 | 4347 |
Catch ex As Exception |
4300 | 4348 |
End Try |
... | ... | |
5915 | 5963 |
Private Sub ThreadConvert() |
5916 | 5964 |
If _DrawingsList IsNot Nothing Then |
5917 | 5965 |
If _DrawingsList.Count > 0 Then |
5966 |
'TestBranchLine() |
|
5918 | 5967 |
AutoModeling() |
5919 | 5968 |
End If |
5920 | 5969 |
End If |
... | ... | |
6101 | 6150 |
oSettings.ShowDialog() |
6102 | 6151 |
End Sub |
6103 | 6152 |
|
6153 |
|
|
6154 |
Private Sub TestBranchLine() |
|
6155 |
Dim objPlacement As Placement |
|
6156 |
objPlacement = New Placement |
|
6157 |
Dim PipeRunLocation As String |
|
6158 |
Dim objItem As LMAItem |
|
6159 |
Dim objConnector As LMConnector |
|
6160 |
Dim objInputs As PlaceRunInputs |
|
6161 |
Dim objSymbol As LMSymbol |
|
6162 |
Dim ValveLocation As String |
|
6163 |
PipeRunLocation = "\Piping\Routing\Process Lines\Primary Piping.sym" |
|
6164 |
objInputs = New PlaceRunInputs |
|
6165 |
objInputs.AddPoint(0.1, 0.1) |
|
6166 |
objInputs.AddPoint(0.2, 0.1) |
|
6167 |
objItem = objPlacement.PIDCreateItem(PipeRunLocation) |
|
6168 |
objConnector = objPlacement.PIDPlaceRun(objItem, objInputs) |
|
6169 |
ValveLocation = "\Piping\Valves\2 Way Common\Ball Valve.sym" |
|
6170 |
objSymbol = objPlacement.PIDPlaceSymbol(ValveLocation, 0.15, 0.3, , 1.57) |
|
6171 |
objInputs = New PlaceRunInputs |
|
6172 |
objInputs.AddConnectorTarget(objConnector, 0.15, 0.1) |
|
6173 |
' objInputs.AddConnectorTarget(objConnector, 0.12, 0.1) |
|
6174 |
objInputs.AddPoint(0.15, 0.15) |
|
6175 |
objInputs.AddPoint(0.12, 0.15) |
|
6176 |
objInputs.AddPoint(0.12, 0.2) |
|
6177 |
objInputs.AddPoint(0.15, 0.2) |
|
6178 |
objInputs.AddSymbolTarget(objSymbol, 0.15, 0.3) |
|
6179 |
objItem = objPlacement.PIDCreateItem(PipeRunLocation) |
|
6180 |
objConnector = objPlacement.PIDPlaceRun(objItem, objInputs) |
|
6181 |
|
|
6182 |
objInputs = New PlaceRunInputs |
|
6183 |
objInputs.AddConnectorTarget(objConnector, 0.17, 0.1) |
|
6184 |
objInputs.AddPoint(0.17, 0.15) |
|
6185 |
objItem = objPlacement.PIDCreateItem(PipeRunLocation) |
|
6186 |
objConnector = objPlacement.PIDPlaceRun(objItem, objInputs) |
|
6187 |
|
|
6188 |
objInputs = New PlaceRunInputs |
|
6189 |
objInputs.AddConnectorTarget(objConnector, 0.19, 0.1) |
|
6190 |
objInputs.AddPoint(0.19, 0.15) |
|
6191 |
objItem = objPlacement.PIDCreateItem(PipeRunLocation) |
|
6192 |
objConnector = objPlacement.PIDPlaceRun(objItem, objInputs) |
|
6193 |
|
|
6194 |
objInputs = New PlaceRunInputs |
|
6195 |
objInputs.AddConnectorTarget(objConnector, 0.12, 0.1) |
|
6196 |
objInputs.AddPoint(0.12, 0.15) |
|
6197 |
objItem = objPlacement.PIDCreateItem(PipeRunLocation) |
|
6198 |
objConnector = objPlacement.PIDPlaceRun(objItem, objInputs) |
|
6199 |
End Sub |
|
6200 |
|
|
6104 | 6201 |
Private Sub Btn_TestNozzle_Click(sender As Object, e As EventArgs) Handles Btn_TestNozzle.Click |
6105 | 6202 |
|
6106 | 6203 |
Dim sVessel_ID As String = "841D5E640AE5421B9A017DDC2E87FF11" |
내보내기 Unified diff