CN104699599A - 基于idUCf五元结构的过程间静态切片提取方法 - Google Patents
基于idUCf五元结构的过程间静态切片提取方法 Download PDFInfo
- Publication number
- CN104699599A CN104699599A CN201310666216.7A CN201310666216A CN104699599A CN 104699599 A CN104699599 A CN 104699599A CN 201310666216 A CN201310666216 A CN 201310666216A CN 104699599 A CN104699599 A CN 104699599A
- Authority
- CN
- China
- Prior art keywords
- iducf
- static
- variable
- slicing
- statement
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Landscapes
- Debugging And Monitoring (AREA)
- Devices For Executing Special Programs (AREA)
Abstract
本发明公开了一种基于idUCf五元结构的过程间静态切片提取方法,包括:对程序中的静态切片按照变量的类型、静态切片的位置进行表达,建立表达式;依据对变量的赋值,在所述表达式中进行倒推式搜索;提取所述变量的值等于所述赋值的所有静态切片。通过本发明可以提高计算机空间和时间的利用率,提高切片提取效率。
Description
技术领域
本发明涉及计算机程序分析领域,特别涉及一种基于idUCf五元结构的过程间静态切片提取方法。
背景技术
程序切片技术是一种重要的程序分析和理解技术,广泛应用于程序调试、测试及软件维护中。其原理和方法最早出现在Mark Weiser的博士论文中,Weiser根据数据流方程的迭代解对程序切片进行了定义,并提出了基于控制流图(Control Flow Graph,CFG)的计算过程内程序切片的算法,但此方法所消耗的时间和空间均比较多,计算所得的程序切片准确性也不是很好。K.J.Ottenstein等人引入了基于程序依赖图(Program Dependence Graph,PDG)的图形可达性算法,用于计算过程内切片,但此算法只能计算一个过程内的切片问题,含有多个过程但程序切片计算问题并未得到解决。后来S.Horwitz等人通过把PDG扩展为系统依赖图(SDG)以计算过程间切片,根据系统依赖图,将函数间的切片问题转化为图的可达性问题,从而解决了包含多个过程程序的切片计算问题。
目前,计算程序静态切片主要使用的方法是基于依赖图的遍历算法。系统依赖图能够充分表示程序的数据依赖、控制依赖信息以及函数调用信息,但是SDG数据流分析的复杂度较高,而且,生成系统依赖图的过程中,需要计算与切片无关的数据依赖,这些不必要的计算造成了时间和空间资源的浪费,并严重影响了切片计算的效率。类似地,传统的动态切片算法使用动态依赖图,复杂性也很高,针对这一点,Gyimothy提出利用D/U表达式计算动态切片的方法,不需要使用动态依赖图,可以同时计算程序的控制依赖和数据依赖,空间开销较小。但传统的利用D/U表达式计算动态切片的方法,只考虑了直接控制依赖关系没有考虑多层嵌套的情况,而且由于未考虑函数调用的情况,只能用于过程内动态切片的计算中。
发明内容
本发明解决的问题是现有切片计算方法占用计算机时间和空间大,切片提取效率低;为解决所述问题,本发明提供一种基于idUCf五元结构的过程间静态切片提取方法。
本发明所提供的基于idUCf五元结构的过程间静态切片提取方法, 包括:对程序中的静态切片按照变量的类型、静态切片的位置进行表达,建立表达式;依据对变量的赋值,在所述表达式中进行倒推式搜索;提取所述变量的值等于所述赋值的所有静态切片。
进一步,本发明所提供的基于idUCf五元结构的过程间静态切片提取方法, 包括:
步骤一、对程序进行词法分析,生成TOKEN序列以及函数列表;
步骤二、在TOKEN序列基础上,建立复合语句控制结构信息表,所述复合语句控制结构信息表记录程序中所有复合语句的开始、结束位置;
步骤三、根据TOKEN序列和复合语句控制结构信息表,建立idUCf五元结构,所述idUCf五元结构是程序中定义变量、变量使用、变量控制依赖关系、函数调用关系的表达式;
步骤四、利用基于idUCf五元结构的过程间静态切片算法,提取静态切片。
进一步,所述步骤四,包括:
步骤4-1),为所述idUCf五元结构中的变量赋值;
步骤4-2),反向搜索静态切片,提取变量值等于所述赋值的所有静态切片。
进一步,搜索反向静态切片包括搜索赋值语句和搜索函数调用语句。
进一步,搜索赋值语句包括在静态切片中搜索等于所述赋值的变量,并提取对应的静态切片。
进一步,搜索函数调用语句包括静态切片中的搜索函数调用语句,在函数调用语句与等于所述赋值的变量相关时,提取对应的静态切片。
本发明提出的基于idUCf五元结构的过程间静态切片计算方法,既保留了程序的数据依赖、控制依赖以及函数调用信息,充分考虑了选择、循环结构的多层嵌套情况,又不需要使用SDG,无须计算与切片无关的数据依赖、控制依赖以及不相关函数。
本发明的优点包括:
本文建立了idUCf五元结构的过程间静态切片模型,主要包括以下四个部分:
1.通过词法分析生成TOKEN序列以及函数列表。函数列表中记录了各个函数的函数名,函数返回值类型,参数个数,参数类型以及此函数在TOKEN序列中的位置。将程序转换为TOKEN序列,降低了程序分析的复杂度。函数列表为实现切片计算过程中函数调用的实参-形参之间的转换奠定基础。
2.TOKEN序列缺少程序的结构化信息,因而不能很好的表示变量间的依赖关系,系统依赖图的复杂度较高,针对这一点,本文定义了CNT,精简了控制流关系,利用CNT,在TOKEN序列上进行分析,可根据程序切片的需要选择性计算控制流关系,避免了无关控制依赖的计算,不仅能够达到与控制流图等同的功能,充分表达控制依赖关系,还降低了时间与空间复杂度。
3.影响切片点变量值的直接操作是赋值语句以及函数调用语句,因此,本文在控制语句结构列表的基础上,提出了利用赋值语句和函数调用语句生成idUCf五元结构,充分考虑了数据依赖、控制依赖以及函数调用信息。
4.应用基于idUCf五元结构的过程间静态切片算法,得到过程间静态切片。
附图说明
图1为本发明实施例所提供的基于idUCf五元结构的过程间静态切片提取方法的流程示意图。
实施方式
下面具体实施例,进一步阐述本发明。
本发明提供一种基于idUCf五元结构的过程间静态切片提取方法,静态切片是由程序中的一些语句和控制谓词组成的集合,它包含了所有可能影响兴趣变量的语句,考虑了程序中所有可能的执行路径。根据切片方向的不同,可分为前向切片和后向切片。前向切片是指所有受兴趣点变量的值影响的语句的集合;后向切片是指程序中所有能够影响兴趣点变量的值的语句的集合。本文所描述的是后向切片。
本发明提供一种基于idUCf五元结构的过程间静态切片提取方法,包括:步骤一、对程序进行词法分析,生成TOKEN序列以及函数列表;
步骤二、在TOKEN序列基础上,建立复合语句控制结构信息表,所述复合语句控制结构信息表记录程序中所有复合语句的开始、结束位置;
复合语句控制结构信息表是记录程序P中的所有复合语句(选择、循环)的开始、结束位置等关键信息的集合,它能够精简的记录程序的所有控制依赖关系,以下简称CNT(compound node table )。其结构定义如表1所示。
表1
对于多分支的选择结构,不仅应该记录选择结构的结束位置(endID)和结束行(endline),还应该记录各个分支内部的结束位置(ifendID)和结束行(ifendline),以便进行精确的路径分析。例如表2,多分支选择结构if(第13行),其内部分支结束位置ifendline=16,总分支结束位置endline=20;对于33行的else分支,其内部分支结束位置即为总分支的结束位置,即endline=ifendline=20。循环结构无需考虑多分支情况,因此for的endline与 ifendline的值相同。
表2
复合语句控制结构信息表记录了各复合语句的开始-结束位置等重要信息,按照复合语句控制结构信息表遍历程序的TOKEN序列,可以准确控制程序的扫描路径,复合语句控制结构信息表只记录复合语句信息,其复杂度远远低于控制依赖图。
步骤三、根据TOKEN序列和复合语句控制结构信息表,建立idUCf五元结构,所述idUCf五元结构是程序中定义变量、变量使用、变量控制依赖关系、函数调用关系的表达式;
在本实施例中, i为语句的行号,d为语句i定义的变量,U为语句i使用变量的集合,C为语句i复合关系集合,存储该语句所在的复合语句所对应的CNT 的id号,f为语句i调用函数信息。这样的表达式称为idUCf五元结构。
表3中列出了表2 aa.c中第15行AssignNode和第19行FunctionNode的idUCf五元结构,其中Φ代表空。
表3
在TOKEN序列基础上,根据语句行号i,可以完成对顺序结构的扫描,根据C中的id号查找CNT中所对应的控制结构信息,可完成对选择、循环结构的遍历,因此,根据i,C以及CNT可以计算程序的控制依赖关系。d和U代表语句的定义-使用关系,可以利用它计算数据依赖。f中保存了语句的函数调用信息,根据f查找变量表,可分析函数调用。
步骤四、利用基于idUCf五元结构的过程间静态切片算法,提取静态切片。
过程间静态切片,以切片准则C=(n,V),根据程序的idUCf五元结构<i,d,U,C,f>,从源程序P中抽取结点n前,n为程序中的某个兴趣点;影响或间接影响变量v(v∈V)的所有语句和函数。赋值语句以及函数调用语句直接影响变量的取值,本文将程序语句的操作分为赋值操作与函数调用操作,分别对应idUCf五元结构中的赋值语句结点(AssignNode)与函数调用结点(FunctionNode)。当计算任意变量v的后向切片时,应逆序查找idUCf五元结构,直到找到AssignNode或FunctionNode,使其满足v=AssignNode或FunctionNode的定义变量d。因此,计算变量v的后向切片转化为计算相对应的赋值语句切片AssignSlice(d)或函数调用语句切片FunctionSlice(d)。
(v=d;d为AssignNode或FunctionNode的定义变量)(1)
1. 当d为AssignNode的定义变量时,切片中应加入该赋值语句,并检查其复合关系集合<C>及使用变量集合<U>,首先,依次计算复合关系子切片(ControlSlice(c)),以保证多层嵌套程序的完整性。当使用变量集合<U>不为Φ时,代表定义的变量d无法直接获得初始值,需要通过其使用的变量进行计算。应依次递归计算其使用变量的子切片Slice(u)(u属于U)。赋值语句结点切片AssignSlice(d)可由下式确定:
(2)
当使用变量集合<U>为Φ时,代表定义变量被赋予常数,即找到了变量的初始值,此时,(2)式可变为:
(3)
当计算复合关系子切片ControlSlice(c)时,根据idUCf五元结构中的c (c∈C;c为该复合语句所对应的CNT 的id号) 查找CNT,找到所对应的复合语句的具体信息。
1) 如果该复合语句为选择结构,则依次计算该选择结构的判断变量j的后向切片,以计算判断变量的初始值,即:
(j为判断变量) (4)
2) 如果该复合语句为选择结构,为了计算判断变量以及循环累加变量的初始值,首先应依次计算判断变量j和累加变量a的后向切片Slice(j)和Slice(a),为了保证静态切片的完整性,还应考虑j和a的值在循环体内是否改变,基于以上观点,在循环体内(beginline-endline),顺序查找idUCf五元结构,当j或a与AssignNode或FunctionNode的定义变量d相同时,说明在循环体内,j或a的值发生了改变,则应计算AssignNode或FunctionNode的定义变量d的后向切片。则有:
(5)
2. 当d为FunctionNode的定义变量时,说明此语句调用了函数,且d被赋予所调用函数的return返回值。切片中不仅应加入该赋值语句、复合关系子切片(ControlSlice),而且要在其调用函数中求得返回值切片(Slice(r)),即:
(6)
其中r为所调用函数的return返回值,m为被调函数的形参个数。在计算Slice(r)的过程中,还应记录每个形参的使用标志para_flag。如果调用函数的第i个形参(para_i)为欲求Slice(r)的切片变量,并且AssignNode(para_i)的使用变量始终不为空集,则para_flag_i 的值为1,否则为0。当para_flag_i 的值为1时,说明被调函数中使用了主调函数的形参值,因此,应计算形参(para_i)所对应的实参切片Slice(argue_i)。
当所求切片变量dFunctionNode的使用集<U>,说明d为调用函数的参数之一。
3) 当调用参数传递类型为传值调用时,被调函数中对形参的改变的不影响实参的值,所以无需计算实参(para)所对应的形参切片Slice(argue),则有:
(7)
4) 当所求切片变量d∈FunctionNode的使用集<U>,并且调用参数传递类型为传地址调用时,对形参的改变实际上是对实参的改变,因此,不仅要在调用函数中求得d所对应的形参切片Slice(para_d),同时还应记录形参的使用标志para_flag,当第i个形参的使用标志para_flag_i的取值为1时,说明被调函数的切片计算中需要使用第i个形参所对应的主调函数实参的取值,因此,应计算第i个实参的切片Slice(argue_i)。
(8)
本文在定义了以上8个公式的基础上,给出了基于idUCf五元结构的过程间静态切片算法:
构造标准C=(n,V)的程序切片Slice(V)算法如表4所示:
表4
主算法Slice(V),根据切片准则C=(n,V),对第n行的每个变量d(d∈V),首先根据复合语句控制信息,判断其是否处于复合语句结构中,并调用ControlSlice(c)算法依次处理复合语句结构(解决了选择、循环多层嵌套结构);然后,调用Slicing(d)算法,后向查找变量d的静态切片。
复合关系子切片ControlSlice(c)算法如表5所示:
表5
算法ControlSlice(c)的功能是计算复合语句结构(选择、循环结构)的程序切片,同时保持复合语句结构切片的完整性。对于复合语句结构中的变量x,首先调用Slicing(x)算法查找变量x的切片,目的是为了找到x的初始值。然后在beginline-endline中查找idUCf的五元结构,如果x为第k个idUCf的定义变量,说明x值在此复合结构中被重新赋值,则应依次处理第k个idUCf的使用变量集合U。
后向查找切片变量Slicing(d)算法如表6所示:
表6
算法Slicing(d)的功能是根据idUCf五元结构计算变量d的后向静态切片。对于结点d,后向查找idUCf五元结构,1)如果d与第i个idUCf的定义变量相等,且idUCf类型为AssignNode,则首先调用ControlSlice(c)函数,依次处理复合语句结构的程序切片,然后依次递归调用Slicing(d)函数处理变量使用集U,直到U为空;2)如果d与第i个idUCf的定义变量相等,且idUCf类型为FunctionNode,则调用Slicing(r),在其调用函数中求得返回值切片并返回各形参标志para_flag,根据para_flag的取值判断是否计算形参切片;3)如果d与第i个idUCf的使用变量集合中元素相等,且idUCf类型为FunctionNode,根据实参-形参对应关系,调用Slicing(para_d)函数,在调用函数中求得形参切片并返回各形参标志,根据para_flag的取值判断是否计算形参切片。
为进一步阐述本发明,下面以切片准则(24,aboveAver),计算程序program1 (见表7)的静态切片。静态切片准则是一个二元组C=(n,V),其中V是程序P中变量集合的一个子集,n是程序P中的某个兴趣点(对应于P中的一条语句)
表7
本文切片算法,只计算切片点所在函数以及与切片点计算相关的调用函数时才计算idUCf五元结构和CNT,切片计算结果为:切片slice(24,aboveAver)={24,4,20,40,48,45,43,42,41,19,12,10,9,8},切片集合中元素的顺序为其被加入的顺序。本文算法只对main函数以及GetAboveAver函数进行分析,只计算main函数以及GetAboveAver函数的idUCf五元结构和CNT,无需计算与切片计算无关的GetDetail函数。表8-表11列出了main函数和GetAboveAver函数的CNT以及idUCf五元结构:
表8
i | d | U | C | f |
40 | count | Φ | Φ | Φ |
44 | count | count | 1,2 | Φ |
表9
id | name | beginline | endline | … |
1 | for | 9 | 17 | … |
2 | if | 12 | 16 | … |
表10
id | name | beginline | endline | … |
1 | for | 41 | 46 | … |
2 | if | 42 | 45 | … |
表11
表12为本文算法所得到的静态切片程序,本文算法充分考虑了程序的控制依赖、数据依赖以及函数调用信息。本发明将直接控制依赖关系扩展为复合关系集合<C>,充分考虑了选择、循环结构多层嵌套情况,所得切片精度更高。
表12
本发明公开的基于idUCf五元结构的过程间静态切片提取方法只计算与切片相关的数据依赖、控制依赖以及相关函数,计算复杂度低。本发明在保证多层嵌套结构程序的静态切片完整性的前提下,充分考虑了函数调用信息,降低了时间与空间复杂度,具有很高的理论意义和实用价值。
本发明虽然已以较佳实施例公开如上,但其并不是用来限定本发明,任何本领域技术人员在不脱离本发明的精神和范围内,都可以利用上述揭示的方法和技术内容对本发明技术方案做出可能的变动和修改,因此,凡是未脱离本发明技术方案的内容,依据本发明的技术实质对以上实施例所作的任何简单修改、等同变化及修饰,均属于本发明技术方案的保护范围。
Claims (6)
1.一种基于idUCf五元结构的过程间静态切片提取方法,其特征在于, 包括:对程序中的静态切片按照变量的类型、静态切片的位置进行表达,建立表达式;依据对变量的赋值,在所述表达式中进行倒推式搜索;提取所述变量的值等于所述赋值的所有静态切片。
2.依据权利要求1所述的基于idUCf五元结构的过程间静态切片提取方法,其特征在于,包括:
步骤一、对程序进行词法分析,生成TOKEN序列以及函数列表;
步骤二、在TOKEN序列基础上,建立复合语句控制结构信息表,所述复合语句控制结构信息表记录程序中所有复合语句的开始、结束位置;
步骤三、根据TOKEN序列和复合语句控制结构信息表,建立idUCf五元结构,所述idUCf五元结构是程序中定义变量、变量使用、变量控制依赖关系、函数调用关系的表达式;
步骤四、利用基于idUCf五元结构的过程间静态切片算法,提取静态切片。
3.依据权利要求2所述的基于idUCf五元结构的过程间静态切片提取方法,其特征在于,所述步骤四,包括:
步骤4-1),为所述idUCf五元结构中的变量赋值;
步骤4-2),反向搜索静态切片,提取变量值等于所述赋值的所有静态切片。
4.依据权利要求3所述的基于idUCf五元结构的过程间静态切片提取方法,其特征在于,搜索反向静态切片包括搜索赋值语句和搜索函数调用语句。
5.依据权利要求4所述的基于idUCf五元结构的过程间静态切片提取方法,其特征在于,搜索赋值语句包括在静态切片中搜索等于所述赋值的变量,并提取对应的静态切片。
6.依据权利要求4所述的基于idUCf五元结构的过程间静态切片提取方法,其特征在于,搜索函数调用语句包括静态切片中的搜索函数调用语句,在函数调用语句与等于所述赋值的变量相关时,提取对应的静态切片。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310666216.7A CN104699599B (zh) | 2013-12-10 | 2013-12-10 | 基于idUCf五元结构的过程间静态切片提取方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310666216.7A CN104699599B (zh) | 2013-12-10 | 2013-12-10 | 基于idUCf五元结构的过程间静态切片提取方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104699599A true CN104699599A (zh) | 2015-06-10 |
CN104699599B CN104699599B (zh) | 2018-11-06 |
Family
ID=53346754
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310666216.7A Active CN104699599B (zh) | 2013-12-10 | 2013-12-10 | 基于idUCf五元结构的过程间静态切片提取方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104699599B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106940772A (zh) * | 2016-01-05 | 2017-07-11 | 阿里巴巴集团控股有限公司 | 变量对象的跟踪方法及装置 |
CN107153610A (zh) * | 2017-04-28 | 2017-09-12 | 腾讯科技(深圳)有限公司 | 一种程序语句错误检测方法和装置 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102110051A (zh) * | 2010-12-31 | 2011-06-29 | 北京邮电大学 | 应用程序切片技术的静态缺陷检测方法 |
CN102298681A (zh) * | 2011-06-22 | 2011-12-28 | 西北大学 | 一种基于数据流切片的软件识别方法 |
CN102750223A (zh) * | 2012-06-06 | 2012-10-24 | 东南大学 | 一种基于面向对象程序切片谱的错误定位方法 |
-
2013
- 2013-12-10 CN CN201310666216.7A patent/CN104699599B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102110051A (zh) * | 2010-12-31 | 2011-06-29 | 北京邮电大学 | 应用程序切片技术的静态缺陷检测方法 |
CN102298681A (zh) * | 2011-06-22 | 2011-12-28 | 西北大学 | 一种基于数据流切片的软件识别方法 |
CN102750223A (zh) * | 2012-06-06 | 2012-10-24 | 东南大学 | 一种基于面向对象程序切片谱的错误定位方法 |
Non-Patent Citations (1)
Title |
---|
张晶 等: "基于控制流的多线程程序的静态切片算法", 《吉林大学学报(理学版)》 * |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106940772A (zh) * | 2016-01-05 | 2017-07-11 | 阿里巴巴集团控股有限公司 | 变量对象的跟踪方法及装置 |
CN107153610A (zh) * | 2017-04-28 | 2017-09-12 | 腾讯科技(深圳)有限公司 | 一种程序语句错误检测方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104699599B (zh) | 2018-11-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101408900B (zh) | 一种网格计算环境下的分布式空间数据查询优化方法 | |
JP6338817B2 (ja) | データベースミドルウェアを用いたデータ管理システム及びその方法 | |
US10102039B2 (en) | Converting a hybrid flow | |
CN103176974B (zh) | 优化数据库中访问路径的方法和装置 | |
US9367428B2 (en) | Transparent performance inference of whole software layers and context-sensitive performance debugging | |
CN103020089A (zh) | 一种将excel文件中的数据导入数据库的方法及装置 | |
CN104885078A (zh) | 用于大规模并行处理数据库集群中的两阶段查询优化的方法 | |
CN104090889A (zh) | 数据处理方法及系统 | |
CN105677683A (zh) | 批量数据查询方法和装置 | |
CN104317942A (zh) | 一种基于Hadoop云平台的海量数据比对方法及系统 | |
CN105701128B (zh) | 一种查询语句的优化方法和装置 | |
CN105302915B (zh) | 基于内存计算的高性能数据处理系统 | |
CN104298598A (zh) | 分布式环境下rdfs本体的调试方法 | |
CN108549688B (zh) | 一种数据操作的优化方法、装置、设备和存储介质 | |
CN102915344A (zh) | 一种sql语句处理方法及装置 | |
CN104699599A (zh) | 基于idUCf五元结构的过程间静态切片提取方法 | |
CN109768878B (zh) | 一种基于大数据的网络工单计算方法及装置 | |
CN112395339B (zh) | 系统间数据准入校验方法、装置、计算机设备和存储介质 | |
CN113688284A (zh) | 车联网业务数据的处理方法、装置、电子设备和存储介质 | |
CN108683599B (zh) | 一种基于预处理的流通网络最大流确定方法及系统 | |
KR101256922B1 (ko) | 예측 및 분석을 위한 분산 의사 결정 트리 생성방법 | |
CN105589969A (zh) | 一种数据处理方法及装置 | |
US9158824B2 (en) | Incremental aggregation-based event pattern matching | |
CN111221864B (zh) | 一种基于mysql慢查询日志词频分析的索引智能推荐方法 | |
CN106528849A (zh) | 面向完整历史记录的图查询开销方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |