交易运行控制方法和装置与流程

文档序号:11953092阅读:251来源:国知局
交易运行控制方法和装置与流程

本发明涉及计算机技术领域,尤其涉及一种交易运行控制方法和装置。



背景技术:

大型商业银行的信息系统在软件架构上都由前台和后台两部分组成。其中,前台特指柜员可见并直接操作的业务界面,以及如ATM、网上银行等客户操作的前端应用;后台则根据交易的类别等的不同,区分为开放平台和主机平台(如IBM主机平台)两种。尽管前后台程序在操作系统和运行机制上有所不同,但对交易运行的控制是迫切的需求,良好的交易运行控制能够有效提高交易执行效率。

但是,目前的技术中,只能使用CICS Link实现单交易、定向的调用,并根据交易在具体运行环境中实际运行情况进行调度(即只能在运行环境内完成交易并发数的控制),无法实现多交易的调度以及不同运行环境之间的交易并发数均衡控制,使有些交易等待处理的时间较长,从而使交易执行效率较低。



技术实现要素:

有鉴于此,本发明提供了一种交易运行控制方法和装置,能够减少交易等待处理的时间,从而有利于提高交易执行效率。

为实现上述目的,本发明提供如下技术方案:

一种交易运行控制方法,应用于主机系统,所述方法包括:

获取前台客户端发送的交易报文,所述交易报文包括公有报文和私有报文,依据所述公有报文,确定所述交易报文对应的交易;

将所述私有报文存储在预先设置的交易缓冲区,所述交易缓冲区位于预先建立的共享内存区;

确定与所述交易相对应的逻辑分区LPAR,按照预设计算公式,计算所述逻辑分区LPAR内各运行环境的优选权数值,确定所述优先权数值最大的所述运行环境为目标运行环境;

批量调度所述交易缓冲区内的所述交易,将所述交易分配至所述目标运行环境。

优选的,所述确定与所述交易相对应的逻辑分区LPAR,按照预设计算公式,计算所述逻辑分区LPAR内各运行环境的优选权数值,确定所述优先权数值最大的所述运行环境为目标运行环境之前,还包括:

建立各个所述运行环境的连通关系;

从命名计数器NC中调取预设数目个日志号,将所述预设数目个所述日志号存储至公共工作区CWA;

从所述公共工作区CWA中的日志号中按照预设顺序读取一个日志号作为所述交易的唯一日志号;

若所述公共工作区CWA中的日志号已读取完毕,重新从所述命名计数器NC中调取所述预设数目个不同的日志号。

优选的,所述确定与所述交易相对应的逻辑分区LPAR,包括:

依据与所述交易分别相对应的省号和市号,确定与所述省号和市号相对应的所述逻辑分区LPAR。

优选的,所述预设计算公式为:

y=(MAXk*MAXp)/(C*P*K);

其中,y表示所述优选权数值,MAXk表示所述交易的交易码允许的最大交易并发数,MAXp表示运行环境内允许的最大交易并发数,C表示运行环境CPU使用率,P表示当前运行环境内交易并发数,K表示当前所述交易码的交易并发数。

优选的,还包括:

基于位码表bitmap对所述公共工作区CWA中的日志号进行备份。

一种交易运行控制装置,应用于主机系统,所述装置包括:

获取模块,用于获取前台客户端发送的交易报文,所述交易报文包括公有报文和私有报文,依据所述公有报文,确定所述交易报文对应的交易;

存储模块,用于将所述私有报文存储在预先设置的交易缓冲区,所述交易缓冲区位于预先建立的共享内存区;

确定模块,用于确定与所述交易相对应的逻辑分区LPAR,按照预设计算公式,计算所述逻辑分区LPAR内各运行环境的优选权数值,确定所述优先权数值最大的所述运行环境为目标运行环境;

分配模块,用于批量调度所述交易缓冲区内的所述交易,将所述交易分配至所述目标运行环境。

优选的,还包括:

建立模块,用于建立各个所述运行环境的连通关系;

调取模块,用于从命名计数器NC中调取预设数目个日志号,将所述预设数目个所述日志号存储至公共工作区CWA;

读取模块,用于从所述公共工作区CWA中的日志号中按照预设顺序读取一个日志号作为所述交易的唯一日志号;

触发模块,用于若所述公共工作区CWA中的日志号已读取完毕,触发所述调取模块重新从所述命名计数器NC中调取所述预设数目个不同的日志号。

优选的,所述确定模块包括:

确定单元,用于依据与所述交易分别相对应的省号和市号,确定与所述省号和市号相对应的所述逻辑分区LPAR。

优选的,所述确定模块依据的所述预设计算公式为:

y=(MAXk*MAXp)/(C*P*K);

其中,y表示所述优选权数值,MAXk表示所述交易的交易码允许的最大交易并发数,MAXp表示运行环境内允许的最大交易并发数,C表示运行环境CPU使用率,P表示当前运行环境内交易并发数,K表示当前所述交易码的交易并发数。

优选的,还包括:

备份模块,用于基于位码表bitmap对所述公共工作区CWA中的日志号进行备份。

经由上述的技术方案可知,与现有技术相比,本发明提供了一种交易运行控制方法和装置。本发明提供的技术方案,获取到前台客户端发送的交易报文,所述交易报文包括公有报文和私有报文,并依据所述公有报文,确定所述交易报文对应的交易之后,将所述私有报文存储在预先设置的交易缓冲区,所述交易缓冲区位于预先建立的共享内存区,然后确定与所述交易相对应的LPAR,按照预设计算公式,计算所述LPAR内各运行环境的优选权数值,通过比对,确定所述优先权数值最大的所述运行环境为目标运行环境,而所述优先权数值最大的所述运行环境是资源最充足的运行环境(该运行环境内交易并发数较小),最后将所述交易分配至所述目标运行环境,从而能够实现不同运行环境之间的交易并发数的均衡控制,而批量调度所述交易缓冲区内的所述交易来进行运行环境的分配,相对于只能使用CICS Link实现单交易、定向的调用,效率要高很多。由上述分析可以确定,本发明提供的技术方案,能够减少交易等待处理的时间,从而有利于提高交易执行效率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据提供的附图获得其他的附图。

图1为本发明实施例提供的一种交易运行控制方法的流程图;

图2为本发明实施例提供的一种交易运行控制装置的结构图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为使本发明的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本发明作进一步详细的说明。

实施例

请参阅图1,图1为本发明实施例提供的一种交易运行控制方法的流程图。本发明实施例提供的交易运行控制方法,应用于主机系统,可选的,所述主机系统采用银行业内广泛使用的,配备Z/OS系统及CICS(client information control system,客户信息控制系统)管理工具,由IBM公司提供的大型服务机。如图1所示,该方法包括:

步骤S101,获取前台客户端发送的交易报文,所述交易报文包括公有报文和私有报文,依据所述公有报文,确定所述交易报文对应的交易;

具体的,为了实现交易的统一调度,在本发明实施例中,前台客户端向主机系统(即后台主机系统)发送的交易报文是由公有报文和私有报文两部分组成。其中,公有报文是指所有交易均需要的字段,包括交易码等字段,私有报文则包括具体交易特征。当前台客户端的交易通过联机介入,利用CICS LINK的方式调起交易的同时,是基于CICS本身的CWA(common work area公共工作区)传递输入交易报文信息,所述步骤S101可以包括:

读取交易报文数据和交易报文长度;

确定所述交易报文对应的运行环境,获取所述交易报文对应的运行环境的系统号,将所述系统号写入所述交易报文,用于标记所述交易的运行环境;

获取所述CWA的内存地址,按如下方式实现前后台交易的协同:即前台交易优先将交易报文存储于CWA,然后再通过CICS START调起基于本发明方法实现的调度方法,调度方法可以根据CWA地址读取交易报文信息,并通过格式转换函数,完成公有报文的解析,包含从系统公有报文获得系统号,而私有报文则直接传送至后台交易。

步骤S102,将所述私有报文存储在预先设置的交易缓冲区,所述交易缓冲区位于预先建立的共享内存区;

可选的,所述共享内存区可以设置在所述CWA中,也可以另行设置。将所述私有报文存储在预先设置的交易缓冲区,所述交易缓冲区位于预先建立的共享内存区中,以方便后续批量调度。

步骤S103,确定与所述交易相对应的LPAR(logical partition,逻辑分区),按照预设计算公式,计算所述LPAR内各运行环境的优选权数值,确定所述优先权数值最大的所述运行环境为目标运行环境;

具体的,所述确定与所述交易相对应的LPAR,包括:

依据与所述交易分别相对应的省号和市号,确定与所述省号和市号相对应的所述LPAR。

可选的,所述预设计算公式为:

y=(MAXk*MAXp)/(C*P*K);

其中,y表示所述优选权数值,MAXk表示所述交易的交易码允许的最大交易并发数,MAXp表示运行环境内允许的最大交易并发数,C表示运行环境CPU使用率,P表示当前运行环境内交易并发数,K表示当前所述交易码的交易并发数。

步骤S104,批量调度所述交易缓冲区内的所述交易,将所述交易分配至所述目标运行环境。

需要说明的是,本发明实施例提供的技术方案,所述运行环境是指CICS REGION。

本发明实施例提供的技术方案,获取到前台客户端发送的交易报文,所述交易报文包括公有报文和私有报文,并依据所述公有报文,确定所述交易报文对应的交易之后,将所述私有报文存储在预先设置的交易缓冲区,所述交易缓冲区位于预先建立的共享内存区,然后确定与所述交易相对应的LPAR,按照预设计算公式,计算所述LPAR内各运行环境的优选权数值,通过比对,确定所述优先权数值最大的所述运行环境为目标运行环境,而所述优先权数值最大的所述运行环境是资源最充足的运行环境(该运行环境内交易并发数较小),最后将所述交易分配至所述目标运行环境,从而能够实现不同运行环境之间的交易并发数的均衡控制,而批量调度所述交易缓冲区内的所述交易来进行运行环境的分配,相对于只能使用CICS Link实现单交易、定向的调用,效率要高很多。由上述分析可以确定,本发明实施例提供的技术方案,能够减少交易等待处理的时间,从而有利于提高交易执行效率。

可选的,本发明另外一个实施例提供的技术方案,对所述步骤S103的相关内容进行进一步阐述。

银行信息系统是在全国范围内运行,每个省份在交易使用频度、交易笔数均不一致,因此需要进行流量控制。一般来说,现有技术是通过配置数据库表,对交易码进行描述,是一种静态的调度方式,也就是说现有技术并不能合理的对CICS REGION的执行环境资源进行有效性评估。同时在银行系统中,白天联机运行过程中,尽量避免数据库操作的不一致性,是不会在生产运行时修改静态表信息,但为了实现交易运行环境、并发性的调度,本发明提供的技术方案采用在内存中将静态表修改可实时修改的方法。具体操作如下:

建立按省分区机制,根据交易本身的省市号选择具体的LPAR;

在系统级设置CICS内联机交易存在的最大并发数,当超过时,则报告并发超限报系统忙;

建立内存映射表,用于发布、读取、记录特殊交易的最大并发数、当前CICS REGION正在运行的交易数、各特殊交易执行最大并发数、CICS REGION的CPU使用率,上述各项参数均可通过CICS API函数获取;

调度程序部署在具体运行环境内,也就是说对于调度程序而言,它所可知的系统信息,只能来源于其所在运行环境,为此,在联机介入调用总控之前,需根据系统号,遍历当前LPAR内各运行环境的运行信息,具体包括运行环境的CPU使用率,运行环境内当前并发数,以及当前交易码的并发数,在本发明中,遵循如下权值公式来进行选择,假设,当前CPU使用率为C,运行环境内当前并发数为P,运行环境内最大并发数为MAXp,当前交易码的并发数为K,以及当前交易码的最大并发数MAXk,其中MAXk<=MAXp,根据优选权(值)进行选择,优先选择值大的运行环境;

其中,优选权(值)=(MAXk*MAXp)/(C*P*K)

执行运行环境选择结束后,调度程序对交易进行统一调度。

然而,现有技术中,在CICS运行逻辑中,调度程序在使用CICS Link操作结束后,将控制权交给后台交易,也就是一次仅能发起一笔交易,并不能实现运行环境内全部交易行为的调度。为此,在本发明中,提出了一种基于交易缓冲器的调度方法,具体操作如下:

在共享内存区设置交易缓冲区,用于存储交易的私有报文;

设置交易缓冲区大小最大为MAXp笔交易,所述交易缓冲区的实时大小,取决于所述运行环境内最大还可以执行交易数,即MAXp-P;

当交易缓冲区未满的时候,调度程序将待提交交易存储入交易缓冲区,否则各调度程序均直接调起缓冲区内交易,而当前待执行的交易存放入当前缓冲区位置。

具体的,交易调度过程中,一般对具体任意一类交易的最大并发数MAXk存在限制,因此,在向交易缓冲区添加记录时,还需判断交易是否并发超限制,否则,还需要建立交易备份区进行存储;所述交易备份区具备优先将交易添加入交易缓冲区的权限。

可选的,本发明另外一个实施例提供的技术方案,所述步骤S103之前,还包括:

建立各个所述运行环境的连通关系;

从NC(NAME COUNTER,命名计数器)中调取预设数目个日志号,将所述预设数目个所述日志号存储至公共工作区CWA;

从所述公共工作区CWA中的日志号中按照预设顺序读取一个日志号作为所述交易的唯一日志号;

若所述公共工作区CWA中的日志号已读取完毕,重新从所述NC中调取所述预设数目个不同的日志号。

具体的,上述步骤是对交易的日志号进行分配的过程。

具体的,银行信息系统中为了对交易添加唯一日志号标识,通常采用SYSPlex(包括多个LPAR)提供的硬件结构NC进行唯一顺序号控制,保证了所有运行环境(即CICS REGION)都能实现对唯一日志号的访问。即NC可以用作应用系统唯一的顺序号发生器,为SYSPlex下整个应用系统统一分配全局的唯一(业务)日志号,保证该日志号不重复。

虽然CF(coupling facility,并行耦合器)(CF包括NC)资源相对对银行核心业务系统来说,有着重要的意义和广泛的应用,然而CF资源不仅有限,而且十分昂贵,如核心系统实时的对多种维度的交易量进行了登记同时考虑到效率和性能问题,交易量的信息采取主机CF的NC存储,但是NC的高频使用导致CF CPU很高。为此,在日志号分配上,本发明提出了一种方式,能够节省系统性能开销。

首先需要全局日志号同步:

全局日志号同步是用于对多MVS(Mainframe virtual system,主机虚拟系统)之间进行日志号同步,而MVS之间是物理隔离的,因此,并不能直接使用局部日志号同步过程中物理地址访问的机制,在本发明中,具体操作步骤如下所述:

建立全局日志号同步的依据是计数器名称是否相同,若运行环境1是MVS1中用于共享的CICS REGION,运行环境2是MVS2中用于共享的CICS REGION,假设运行环境2需要建立一个计数器的名称为NAME,而所述NAME已经存在于运行环境1;

主机系统上建立运行环境1、运行环境2之间的连通关系,使得二者可以相互访问,从而保证日志号的唯一;

针对NC个数过多,CF压力大的问题,也需要对NC的使用进行优化:

比如某银行每日交易中有近三分二的交易为对日志号排序不敏感的查询交易,那么可以通过日志号预取来缓解NC压力。比如预取M个日志号到CWA中,由CWA为查询交易分配日志号的方式,来减少交易对日志号NC的访问,同时保证每笔交易日志号唯一,以日交易量3亿笔为例,以往要访问日志号NC 3亿次,现在只要访问日志号1亿+(2亿/M),能够有小减少对NC的使用,从而减轻CF的使用及备份压力,提高系统性能。

运行环境1内联机程序读取传递后的(即CWA中的)日志号,读取计数器的内存地址,实现日志号的更新与读取,当使用数目超过M后,再次从CF的NC中进行日志号预取;

具体的,所述计数器内存地址是指在所述CWA中存在一个32位的计数器,计数器的初始值为0,各交易通过对所述计数器进行加锁后,读取计数器的值,然后再对其进行累加1,最后解锁,当所述计数器的数据大于M后,再次进行数据预取。

可选的,本发明另外一个实施例提供的技术方案,还包括:

基于位码表bitmap(位码表)对所述公共工作区CWA中的日志号进行备份。

具体的,命名计数器在主机系统上十分敏感,一旦出现系统宕机,所导致的数据非一致性,将带来不可估量的后果,进行数据备份时,是对整个计数器结构进行备份,但由于计数器占用的空间可能很大,扫描、备份时间过长,将不利于数据的备份。为此,本发明提出的方法中还基于bitmap建立了数据备份与恢复的机制,具体步骤如下:

为了节省存储空间,Bitmap中每一个位对应为共享区的每4个字节,假设计数器结构占用内存的字节数为N,那么共有N/4个32位数据。这N/4个数据分别映射为bitmap中N/4个位,即bitmap占用N/32字节。

将bitmap划分N/128个int类型的数据,构成集合{b1,b2,..bn};其中bi(i>=1&&i<=N/128),对应了计数器结构中128字节数据的变化;

应用程序修改计数器时,由于具备唯一性,对前文所述计数器(的区间)加锁,修改数据后,还需要同步修改标志位后,方可解锁;

监控程序循环读取bitmap数据,判断数据变化,并同步写VSAM(virutal storage access method,虚拟存储方法)文件;

具体的,监控程序可以是多份,每份用于跟踪计数器结构的不同区间。

可以理解的是,数据恢复过程中,只需读取VSAM文件,并导入内存即可。

可选的,本发明另外一个实施例提供的技术方案,还包括:

对交易的执行进行控制。

具体的,核心银行系统基于业务准则的需求,对交易执行控制提出了提交执行和撤销两方面的需求,具体如下:

交易提交执行:完成安全性校验,包括用户权限控制、交易属性,应用状态等校验等各项校验,并获取静态授权后,根据交易程序名进行交易提交。比如,针对C语言目标码,则通过函数指针完成交易程序调度,针对COBOL程序,则通过Fetch操作。动态加载交易程序,解析交易返回信息,成功做事务提交,否则事务回滚;如果交易返回失败,直接回滚;

交易撤销:完成包含调度程序的统一撤销处理,实现撤销的特殊应用检查,还原正交易数据,设置撤销标志位,调起撤销处理;撤销处理跟普通交易不同,有其特殊性,除了大部分逻辑相同外,一些应用检查略有不同,各种实现代码嵌入在普通交易的逻辑中,按照如下方式进行操作,解析撤销交易的私有报文内容;根据日志号查询正交易详细信息,如交易码、原来的提交用户、终端、渠道等公有交易报文信息。撤销应用检查如下:检查正交易日志记录状态,确保是正常处理成功的,已经撤销或者失败报错;检查当前的会计日期、省市代码、渠道、交易码、用户与正交易的相应要素是否相同,否则拒绝;采用原交易的交易码替换当前的交易码,并将正交易的私有域交易报文替换当前私有报文取得正交易的交易程序名称,按照本发明的上述交易调度方法进行处理。

为了更加全面地阐述本发明提供的技术方案,对应于本发明实施例提供的交易运行控制方法,本发明公开一种交易运行控制装置。

请参阅图2,图2为本发明实施例提供的一种交易运行控制装置的结构图。本发明实施例提供的交易运行控制装置,应用于主机系统,如图2所示,该装置包括:

获取模块201,用于获取前台客户端发送的交易报文,所述交易报文包括公有报文和私有报文,依据所述公有报文,确定所述交易报文对应的交易;

存储模块202,用于将所述私有报文存储在预先设置的交易缓冲区,所述交易缓冲区位于预先建立的共享内存区;

确定模块203,用于确定与所述交易相对应的LPAR,按照预设计算公式,计算所述LPAR内各运行环境的优选权数值,确定所述优先权数值最大的所述运行环境为目标运行环境;

分配模块204,用于批量调度所述交易缓冲区内的所述交易,将所述交易分配至所述目标运行环境。

应用本发明实施例提供的交易运行控制装置,能够减少交易等待处理的时间,从而有利于提高交易执行效率。

可选的,本发明另外一个实施例提供的交易运行控制装置,还包括:

建立模块,用于建立各个所述运行环境的连通关系;

调取模块,用于从NC中调取预设数目个日志号,将所述预设数目个所述日志号存储至公共工作区CWA;

读取模块,用于从所述公共工作区CWA中的日志号中按照预设顺序读取一个日志号作为所述交易的唯一日志号;

触发模块,用于若所述公共工作区CWA中的日志号已读取完毕,触发所述调取模块重新从所述NC中调取所述预设数目个不同的日志号。

可选的,本发明另外一个实施例提供的交易运行控制装置,所述确定模块包括:

确定单元,用于依据与所述交易分别相对应的省号和市号,确定与所述省号和市号相对应的所述LPAR。

可选的,本发明另外一个实施例提供的交易运行控制装置,所述确定模块依据的所述预设计算公式为:

y=(MAXk*MAXp)/(C*P*K);

其中,y表示所述优选权数值,MAXk表示所述交易的交易码允许的最大交易并发数,MAXp表示运行环境内允许的最大交易并发数,C表示运行环境CPU使用率,P表示当前运行环境内交易并发数,K表示当前所述交易码的交易并发数。

可选的,本发明另外一个实施例提供的交易运行控制装置,还包括:

备份模块,用于基于位码表bitmap对所述公共工作区CWA中的日志号进行备份。

经由上述的技术方案可知,与现有技术相比,本发明提供了一种交易运行控制方法和装置。本发明提供的技术方案,获取到前台客户端发送的交易报文,所述交易报文包括公有报文和私有报文,并依据所述公有报文,确定所述交易报文对应的交易之后,将所述私有报文存储在预先设置的交易缓冲区,所述交易缓冲区位于预先建立的共享内存区,然后确定与所述交易相对应的LPAR,按照预设计算公式,计算所述LPAR内各运行环境的优选权数值,通过比对,确定所述优先权数值最大的所述运行环境为目标运行环境,而所述优先权数值最大的所述运行环境是资源最充足的运行环境(该运行环境内交易并发数较小),最后将所述交易分配至所述目标运行环境,从而能够实现不同运行环境之间的交易并发数的均衡控制,而批量调度所述交易缓冲区内的所述交易来进行运行环境的分配,相对于只能使用CICS Link实现单交易、定向的调用,效率要高很多。由上述分析可以确定,本发明提供的技术方案,能够减少交易等待处理的时间,从而有利于提高交易执行效率。

最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似部分互相参见即可。对于实施例公开的装置而言,由于其与实施例公开的方法相对应,所以描述的比较简单,相关之处参见方法部分说明即可。

结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器或技术领域内所公知的任意其它形式的存储介质中。

对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1