From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received-SPF: Pass (sender SPF authorized) identity=mailfrom; client-ip=134.134.136.31; helo=mga06.intel.com; envelope-from=yonghong.zhu@intel.com; receiver=edk2-devel@lists.01.org Received: from mga06.intel.com (mga06.intel.com [134.134.136.31]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ml01.01.org (Postfix) with ESMTPS id AB6B3210EE4D2 for ; Mon, 13 Aug 2018 01:01:48 -0700 (PDT) X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga104.jf.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 13 Aug 2018 01:01:48 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.53,232,1531810800"; d="scan'208";a="62710604" Received: from fmsmsx103.amr.corp.intel.com ([10.18.124.201]) by fmsmga008.fm.intel.com with ESMTP; 13 Aug 2018 01:01:47 -0700 Received: from fmsmsx154.amr.corp.intel.com (10.18.116.70) by FMSMSX103.amr.corp.intel.com (10.18.124.201) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 13 Aug 2018 01:01:47 -0700 Received: from shsmsx102.ccr.corp.intel.com (10.239.4.154) by FMSMSX154.amr.corp.intel.com (10.18.116.70) with Microsoft SMTP Server (TLS) id 14.3.319.2; Mon, 13 Aug 2018 01:01:47 -0700 Received: from shsmsx103.ccr.corp.intel.com ([169.254.4.240]) by shsmsx102.ccr.corp.intel.com ([169.254.2.226]) with mapi id 14.03.0319.002; Mon, 13 Aug 2018 16:01:44 +0800 From: "Zhu, Yonghong" To: "Carsey, Jaben" , "edk2-devel@lists.01.org" CC: "Gao, Liming" , "Zhu, Yonghong" Thread-Topic: [PATCH v1 1/1] BaseTools: Eot - fix variable names Thread-Index: AQHULp86qHsjemKcWki4X1MMNxDoBaS9WQEw Date: Mon, 13 Aug 2018 08:01:44 +0000 Message-ID: References: <2909e69e0a6e75b3db5a5abf87b256803e0016fa.1533681419.git.jaben.carsey@intel.com> In-Reply-To: <2909e69e0a6e75b3db5a5abf87b256803e0016fa.1533681419.git.jaben.carsey@intel.com> Accept-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-originating-ip: [10.239.127.40] MIME-Version: 1.0 Subject: Re: [PATCH v1 1/1] BaseTools: Eot - fix variable names X-BeenThere: edk2-devel@lists.01.org X-Mailman-Version: 2.1.27 Precedence: list List-Id: EDK II Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 13 Aug 2018 08:01:48 -0000 Content-Language: en-US Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable Reviewed-by: Yonghong Zhu =20 Best Regards, Zhu Yonghong -----Original Message----- From: Carsey, Jaben=20 Sent: Wednesday, August 08, 2018 6:37 AM To: edk2-devel@lists.01.org Cc: Zhu, Yonghong ; Gao, Liming Subject: [PATCH v1 1/1] BaseTools: Eot - fix variable names 1) currently a couple classes use m instead of self (including some mixed f= unctions that should have previously failed). 2) deleted some blank lines. Cc: Yonghong Zhu Cc: Liming Gao Contributed-under: TianoCore Contribution Agreement 1.1 Signed-off-by: Jaben Carsey --- BaseTools/Source/Python/Eot/Eot.py | 298 ++++++++++---------- 1 file changed, 144 insertions(+), 154 deletions(-) diff --git a/BaseTools/Source/Python/Eot/Eot.py b/BaseTools/Source/Python/E= ot/Eot.py index 6fb882642bff..ce83da14957b 100644 --- a/BaseTools/Source/Python/Eot/Eot.py +++ b/BaseTools/Source/Python/Eot/Eot.py @@ -123,49 +123,49 @@ class CompressedImage(Image): _ORIG_SIZE_ =3D struct.Struct("1I") _CMPRS_TYPE_ =3D struct.Struct("4x 1B") =20 - def __init__(m, CompressedData=3DNone, CompressionType=3DNone, Uncompr= essedLength=3DNone): - Image.__init__(m) + def __init__(self, CompressedData=3DNone, CompressionType=3DNone, Unco= mpressedLength=3DNone): + Image.__init__(self) if UncompressedLength is not None: - m.UncompressedLength =3D UncompressedLength + self.UncompressedLength =3D UncompressedLength if CompressionType is not None: - m.CompressionType =3D CompressionType + self.CompressionType =3D CompressionType if CompressedData is not None: - m.Data =3D CompressedData + self.Data =3D CompressedData =20 - def __str__(m): + def __str__(self): global gIndention - S =3D "algorithm=3D%s uncompressed=3D%x" % (m.CompressionType, m.U= ncompressedLength) - for Sec in m.Sections: + S =3D "algorithm=3D%s uncompressed=3D%x" % (self.CompressionType, = self.UncompressedLength) + for Sec in self.Sections: S +=3D '\n' + str(Sec) =20 return S =20 - def _SetOriginalSize(m, Size): - m.SetField(m._ORIG_SIZE_, 0, Size) + def _SetOriginalSize(self, Size): + self.SetField(self._ORIG_SIZE_, 0, Size) =20 - def _GetOriginalSize(m): - return m.GetField(m._ORIG_SIZE_)[0] + def _GetOriginalSize(self): + return self.GetField(self._ORIG_SIZE_)[0] =20 - def _SetCompressionType(m, Type): - m.SetField(m._CMPRS_TYPE_, 0, Type) + def _SetCompressionType(self, Type): + self.SetField(self._CMPRS_TYPE_, 0, Type) =20 - def _GetCompressionType(m): - return m.GetField(m._CMPRS_TYPE_)[0] + def _GetCompressionType(self): + return self.GetField(self._CMPRS_TYPE_)[0] =20 - def _GetSections(m): + def _GetSections(self): try: from . import EfiCompressor TmpData =3D EfiCompressor.FrameworkDecompress( - m[m._HEADER_SIZE_:], - len(m) - m._HEADER_SIZE_ + self[self._HEADER_SIZE_:], + len(self) - self._HEADER_SIZE_ ) DecData =3D array('B') DecData.fromstring(TmpData) except: from . import EfiCompressor TmpData =3D EfiCompressor.UefiDecompress( - m[m._HEADER_SIZE_:], - len(m) - m._HEADER_SIZE_ + self[self._HEADER_SIZE_:], + len(self) - self._HEADER_SIZE_ ) DecData =3D array('B') DecData.fromstring(TmpData) @@ -195,20 +195,20 @@ class Ui(Ima= ge): _HEADER_ =3D struct.Struct("") _HEADER_SIZE_ =3D 0 =20 - def __init__(m): - Image.__init__(m) + def __init__(self): + Image.__init__(self) =20 - def __str__(m): - return m.String + def __str__(self): + return self.String =20 - def _Unpack(m): + def _Unpack(self): # keep header in this Image object - m.empty() - m.extend(m._BUF_[m._OFF_ : m._OFF_ + m._LEN_]) - return len(m) + self.empty() + self.extend(self._BUF_[self._OFF_ : self._OFF_ + self._LEN_]) + return len(self) =20 - def _GetUiString(m): - return codecs.utf_16_decode(m[0:-2].tostring())[0] + def _GetUiString(self): + return codecs.utf_16_decode(self[0:-2].tostring())[0] =20 String =3D property(_GetUiString) =20 @@ -250,18 +250,18 @@ class Depex(Image): 0x09 : _OPCODE_, #"SOR" } =20 - def __init__(m): - Image.__init__(m) - m._ExprList =3D [] + def __init__(self): + Image.__init__(self) + self._ExprList =3D [] =20 - def __str__(m): + def __str__(self): global gIndention gIndention +=3D 4 Indention =3D ' ' * gIndention S =3D '\n' - for T in m.Expression: - if T in m._OPCODE_STRING_: - S +=3D Indention + m._OPCODE_STRING_[T] + for T in self.Expression: + if T in self._OPCODE_STRING_: + S +=3D Indention + self._OPCODE_STRING_[T] if T not in [0x00, 0x01, 0x02]: S +=3D '\n' else: @@ -269,31 +269,31 @@ class Depex(Image): gIndention -=3D 4 return S =20 - def _Unpack(m): + def _Unpack(self): # keep header in this Image object - m.empty() - m.extend(m._BUF_[m._OFF_ : m._OFF_ + m._LEN_]) - return len(m) + self.empty() + self.extend(self._BUF_[self._OFF_ : self._OFF_ + self._LEN_]) + return len(self) =20 - def _GetExpression(m): - if m._ExprList =3D=3D []: + def _GetExpression(self): + if self._ExprList =3D=3D []: Offset =3D 0 - CurrentData =3D m._OPCODE_ - while Offset < len(m): - Token =3D CurrentData.unpack_from(m, Offset) + CurrentData =3D self._OPCODE_ + while Offset < len(self): + Token =3D CurrentData.unpack_from(self, Offset) Offset +=3D CurrentData.size if len(Token) =3D=3D 1: Token =3D Token[0] - if Token in m._NEXT_: - CurrentData =3D m._NEXT_[Token] + if Token in self._NEXT_: + CurrentData =3D self._NEXT_[Token] else: - CurrentData =3D m._GUID_ + CurrentData =3D self._GUID_ else: - CurrentData =3D m._OPCODE_ - m._ExprList.append(Token) + CurrentData =3D self._OPCODE_ + self._ExprList.append(Token) if CurrentData is None: break - return m._ExprList + return self._ExprList =20 Expression =3D property(_GetExpression) =20 @@ -326,9 +326,7 @@ class FirmwareVolume(Image): def CheckArchProtocol(self): for Item in EotGlobalData.gArchProtocolGuids: if Item.lower() not in EotGlobalData.gProtocolList: - return False - return True =20 def ParseDepex(self, Depex, Type): @@ -441,7 +439,6 @@ class FirmwareVolume(Image): if GuidString in self.UnDispatchedFfsDict: self.OrderedFfsDict[GuidString] =3D self.U= nDispatchedFfsDict.pop(GuidString) self.LoadPpi(Db, GuidString) - self.DisPatchPei(Db) =20 # Parse DXE then @@ -463,7 +460,6 @@ class FirmwareVolume(Image): if GuidString in self.UnDispatchedFfsDict: self.OrderedFfsDict[GuidString] =3D self.U= nDispatchedFfsDict.pop(GuidString) self.LoadProtocol(Db, GuidString) - self.DisPatchDxe(Db) =20 def LoadProtocol(self, Db, ModuleGuid): @@ -564,7 +560,6 @@ class FirmwareVolume(Image): RecordSet =3D Db.TblReport.Exec(SqlCommand) if RecordSet !=3D []: FfsName =3D RecordSet[0][0] - if IsInstalled: self.DisPatchDxe(Db) =20 @@ -608,7 +603,6 @@ class FirmwareVolume(Image): if IsInstalled: self.DisPatchPei(Db) =20 - def __str__(self): global gIndention gIndention +=3D 4 @@ -690,69 +684,69 @@ class GuidDefinedImage(Image): TIANO_COMPRESS_GUID =3D 'A31280AD-481E-41B6-95E8-127F4C984779' LZMA_COMPRESS_GUID =3D 'EE4E5898-3914-4259-9D6E-DC7BD79403CF' =20 - def __init__(m, SectionDefinitionGuid=3DNone, DataOffset=3DNone, Attri= butes=3DNone, Data=3DNone): - Image.__init__(m) + def __init__(self, SectionDefinitionGuid=3DNone, DataOffset=3DNone, At= tributes=3DNone, Data=3DNone): + Image.__init__(self) if SectionDefinitionGuid is not None: - m.SectionDefinitionGuid =3D SectionDefinitionGuid + self.SectionDefinitionGuid =3D SectionDefinitionGuid if DataOffset is not None: - m.DataOffset =3D DataOffset + self.DataOffset =3D DataOffset if Attributes is not None: - m.Attributes =3D Attributes + self.Attributes =3D Attributes if Data is not None: - m.Data =3D Data + self.Data =3D Data =20 - def __str__(m): - S =3D "guid=3D%s" % (gGuidStringFormat % m.SectionDefinitionGuid) - for Sec in m.Sections: + def __str__(self): + S =3D "guid=3D%s" % (gGuidStringFormat % self.SectionDefinitionGui= d) + for Sec in self.Sections: S +=3D "\n" + str(Sec) return S =20 - def _Unpack(m): + def _Unpack(self): # keep header in this Image object - m.empty() - m.extend(m._BUF_[m._OFF_ : m._OFF_ + m._LEN_]) - return len(m) + self.empty() + self.extend(self._BUF_[self._OFF_ : self._OFF_ + self._LEN_]) + return len(self) =20 - def _SetAttribute(m, Attribute): - m.SetField(m._ATTR_, 0, Attribute) + def _SetAttribute(self, Attribute): + self.SetField(self._ATTR_, 0, Attribute) =20 - def _GetAttribute(m): - return m.GetField(m._ATTR_)[0] + def _GetAttribute(self): + return self.GetField(self._ATTR_)[0] =20 - def _SetGuid(m, Guid): - m.SetField(m._GUID_, 0, Guid) + def _SetGuid(self, Guid): + self.SetField(self._GUID_, 0, Guid) =20 - def _GetGuid(m): - return m.GetField(m._GUID_) + def _GetGuid(self): + return self.GetField(self._GUID_) =20 - def _SetDataOffset(m, Offset): - m.SetField(m._DATA_OFFSET_, 0, Offset) + def _SetDataOffset(self, Offset): + self.SetField(self._DATA_OFFSET_, 0, Offset) =20 - def _GetDataOffset(m): - return m.GetField(m._DATA_OFFSET_)[0] + def _GetDataOffset(self): + return self.GetField(self._DATA_OFFSET_)[0] =20 - def _GetSections(m): + def _GetSections(self): SectionList =3D [] - Guid =3D gGuidStringFormat % m.SectionDefinitionGuid - if Guid =3D=3D m.CRC32_GUID: + Guid =3D gGuidStringFormat % self.SectionDefinitionGuid + if Guid =3D=3D self.CRC32_GUID: # skip the CRC32 value, we don't do CRC32 verification here - Offset =3D m.DataOffset - 4 - while Offset < len(m): + Offset =3D self.DataOffset - 4 + while Offset < len(self): Sec =3D Section() try: - Sec.frombuffer(m, Offset) + Sec.frombuffer(self, Offset) Offset +=3D Sec.Size # the section is aligned to 4-byte boundary Offset =3D (Offset + 3) & (~3) except: break SectionList.append(Sec) - elif Guid =3D=3D m.TIANO_COMPRESS_GUID: + elif Guid =3D=3D self.TIANO_COMPRESS_GUID: try: from . import EfiCompressor # skip the header - Offset =3D m.DataOffset - 4 - TmpData =3D EfiCompressor.FrameworkDecompress(m[Offset:], = len(m)-Offset) + Offset =3D self.DataOffset - 4 + TmpData =3D=20 + EfiCompressor.FrameworkDecompress(self[Offset:], len(self)-Offset) DecData =3D array('B') DecData.fromstring(TmpData) Offset =3D 0 @@ -768,12 +762,12 @@ class GuidDefinedImage(Image): SectionList.append(Sec) except: pass - elif Guid =3D=3D m.LZMA_COMPRESS_GUID: + elif Guid =3D=3D self.LZMA_COMPRESS_GUID: try: from . import LzmaCompressor # skip the header - Offset =3D m.DataOffset - 4 - TmpData =3D LzmaCompressor.LzmaDecompress(m[Offset:], len(= m)-Offset) + Offset =3D self.DataOffset - 4 + TmpData =3D LzmaCompressor.LzmaDecompress(self[Offset:],=20 + len(self)-Offset) DecData =3D array('B') DecData.fromstring(TmpData) Offset =3D 0 @@ -835,90 +829,89 @@ class Section(Image): =20 # SubTypeGuid # _FREE_FORM_SUBTYPE_GUID_HEADER_ =3D struct.Struct("1I2H8B") - _SIZE_ =3D struct.Struct("3B") _TYPE_ =3D struct.Struct("3x 1B") =20 - def __init__(m, Type=3DNone, Size=3DNone): - Image.__init__(m) - m._Alignment =3D 1 + def __init__(self, Type=3DNone, Size=3DNone): + Image.__init__(self) + self._Alignment =3D 1 if Type is not None: - m.Type =3D Type + self.Type =3D Type if Size is not None: - m.Size =3D Size + self.Size =3D Size =20 - def __str__(m): + def __str__(self): global gIndention gIndention +=3D 4 SectionInfo =3D ' ' * gIndention - if m.Type in m._TypeName: - SectionInfo +=3D "[SECTION:%s] offset=3D%x size=3D%x" % (m._Ty= peName[m.Type], m._OFF_, m.Size) + if self.Type in self._TypeName: + SectionInfo +=3D "[SECTION:%s] offset=3D%x size=3D%x" %=20 + (self._TypeName[self.Type], self._OFF_, self.Size) else: - SectionInfo +=3D "[SECTION:%x] offset=3D%x size=3D%x = " % (m.Type, m._OFF_, m.Size) - for Offset in m._SubImages: - SectionInfo +=3D ", " + str(m._SubImages[Offset]) + SectionInfo +=3D "[SECTION:%x] offset=3D%x size=3D%x = " % (self.Type, self._OFF_, self.Size) + for Offset in self._SubImages: + SectionInfo +=3D ", " + str(self._SubImages[Offset]) gIndention -=3D 4 return SectionInfo =20 - def _Unpack(m): - m.empty() - Type, =3D m._TYPE_.unpack_from(m._BUF_, m._OFF_) - Size1, Size2, Size3 =3D m._SIZE_.unpack_from(m._BUF_, m._OFF_) + def _Unpack(self): + self.empty() + Type, =3D self._TYPE_.unpack_from(self._BUF_, self._OFF_) + Size1, Size2, Size3 =3D self._SIZE_.unpack_from(self._BUF_,=20 + self._OFF_) Size =3D Size1 + (Size2 << 8) + (Size3 << 16) =20 - if Type not in m._SectionSubImages: + if Type not in self._SectionSubImages: # no need to extract sub-image, keep all in this Image object - m.extend(m._BUF_[m._OFF_ : m._OFF_ + Size]) + self.extend(self._BUF_[self._OFF_ : self._OFF_ + Size]) else: # keep header in this Image object - m.extend(m._BUF_[m._OFF_ : m._OFF_ + m._HEADER_SIZE_]) + self.extend(self._BUF_[self._OFF_ : self._OFF_ +=20 + self._HEADER_SIZE_]) # # use new Image object to represent payload, which may be anot= her kind # of image such as PE32 # - PayloadOffset =3D m._HEADER_SIZE_ - PayloadLen =3D m.Size - m._HEADER_SIZE_ - Payload =3D m._SectionSubImages[m.Type]() - Payload.frombuffer(m._BUF_, m._OFF_ + m._HEADER_SIZE_, Payload= Len) - m._SubImages[PayloadOffset] =3D Payload + PayloadOffset =3D self._HEADER_SIZE_ + PayloadLen =3D self.Size - self._HEADER_SIZE_ + Payload =3D self._SectionSubImages[self.Type]() + Payload.frombuffer(self._BUF_, self._OFF_ + self._HEADER_SIZE_= , PayloadLen) + self._SubImages[PayloadOffset] =3D Payload =20 return Size =20 - def _SetSize(m, Size): + def _SetSize(self, Size): Size1 =3D Size & 0xFF Size2 =3D (Size & 0xFF00) >> 8 Size3 =3D (Size & 0xFF0000) >> 16 - m.SetField(m._SIZE_, 0, Size1, Size2, Size3) + self.SetField(self._SIZE_, 0, Size1, Size2, Size3) =20 - def _GetSize(m): - Size1, Size2, Size3 =3D m.GetField(m._SIZE_) + def _GetSize(self): + Size1, Size2, Size3 =3D self.GetField(self._SIZE_) return Size1 + (Size2 << 8) + (Size3 << 16) =20 - def _SetType(m, Type): - m.SetField(m._TYPE_, 0, Type) + def _SetType(self, Type): + self.SetField(self._TYPE_, 0, Type) =20 - def _GetType(m): - return m.GetField(m._TYPE_)[0] + def _GetType(self): + return self.GetField(self._TYPE_)[0] =20 - def _GetAlignment(m): - return m._Alignment + def _GetAlignment(self): + return self._Alignment =20 - def _SetAlignment(m, Alignment): - m._Alignment =3D Alignment + def _SetAlignment(self, Alignment): + self._Alignment =3D Alignment AlignmentMask =3D Alignment - 1 # section alignment is actually for payload, so we need to add hea= der size - PayloadOffset =3D m._OFF_ + m._HEADER_SIZE_ + PayloadOffset =3D self._OFF_ + self._HEADER_SIZE_ if (PayloadOffset & (~AlignmentMask)) =3D=3D 0: return NewOffset =3D (PayloadOffset + AlignmentMask) & (~AlignmentMask) - while (NewOffset - PayloadOffset) < m._HEADER_SIZE_: - NewOffset +=3D m._Alignment + while (NewOffset - PayloadOffset) < self._HEADER_SIZE_: + NewOffset +=3D self._Alignment =20 - def tofile(m, f): - m.Size =3D len(m) - Image.tofile(m, f) - for Offset in m._SubImages: - m._SubImages[Offset].tofile(f) + def tofile(self, f): + self.Size =3D len(self) + Image.tofile(self, f) + for Offset in self._SubImages: + self._SubImages[Offset].tofile(f) =20 Type =3D property(_GetType, _SetType) Size =3D property(_GetSize, _SetSize) @@ -1043,24 +1036,24 @@ class Ff= s(Image): # Guid1, Guid2, Guid3, Guid4, Guid5, Guid6, Guid7, Guid8, Guid9, G= uid10, Guid11 return self.GetField(self._NAME_) =20 - def _SetSize(m, Size): + def _SetSize(self, Size): Size1 =3D Size & 0xFF Size2 =3D (Size & 0xFF00) >> 8 Size3 =3D (Size & 0xFF0000) >> 16 - m.SetField(m._SIZE_, 0, Size1, Size2, Size3) + self.SetField(self._SIZE_, 0, Size1, Size2, Size3) =20 - def _GetSize(m): - Size1, Size2, Size3 =3D m.GetField(m._SIZE_) + def _GetSize(self): + Size1, Size2, Size3 =3D self.GetField(self._SIZE_) return Size1 + (Size2 << 8) + (Size3 << 16) =20 - def _SetType(m, Type): - m.SetField(m._TYPE_, 0, Type) + def _SetType(self, Type): + self.SetField(self._TYPE_, 0, Type) =20 - def _GetType(m): - return m.GetField(m._TYPE_)[0] + def _GetType(self): + return self.GetField(self._TYPE_)[0] =20 def _SetAttributes(self, Value): - self.SetField(m._ATTR_, 0, Value) + self.SetField(self._ATTR_, 0, Value) =20 def _GetAttributes(self): return self.GetField(self._ATTR_)[0] @@ -1079,10 +1072,10 @@ class= Ffs(Image): return (self.Attributes & self.FFS_ATTRIB_DATA_ALIGNMENT) >> 3 =20 def _SetState(self, Value): - self.SetField(m._STATE_, 0, Value) + self.SetField(self._STATE_, 0, Value) =20 def _GetState(self): - return self.GetField(m._STATE_)[0] + return self.GetField(self._STATE_)[0] =20 Name =3D property(_GetName, _SetName) Guid =3D property(_GetGuid) @@ -1123,9 +1116,7 @@ class FirmwareVolume(Image): def CheckArchProtocol(self): for Item in EotGlobalData.gArchProtocolGuids: if Item.lower() not in EotGlobalData.gProtocolList: - return False - return True =20 def ParseDepex(self, Depex, Type): @@ -1378,7 +1369,6 @@ class FirmwareVolume(Image): if Section.Type =3D=3D 0x1B: CouldBeLoaded, DepexString, FileDepex =3D self.Par= seDepex(Section._SubImages[4], 'Ppi') break - if Section.Type =3D=3D 0x01: CompressSections =3D Section._SubImages[4] for CompressSection in CompressSections.Sections: -- 2.16.2.windows.1