public without sharing class TransferApplyResponseController {
    // 借出申请
    public TransferApply__c ra { get; set; }
    /**
     * 1.画面输入用借出申请
     * 2.邮件cc用，最多5个
     * 经理(服务) JingliApprovalManager__c        => cc_1
     * 经理(销售) SalesManager__c                 => cc_2
     * 部长(服务) BuchangApprovalManager__c       => cc_3
     * 部长(销售) BuchangApprovalManagerSales__c  => cc_4
     * 总监       ZongJian__c      => cc_5
     */
    public TransferApply__c cc { get; set; }
    // 借出申请ID
    public Id raid { get; private set; }
    // To:备品中心(responsebefore),To:申请者(responseafter)
    public String type { get; set; }

    public Boolean hasError { get; private set; }
    public String baseUrl { get; private set; }

    public String toString { get; private set; }

    public List <String> toNameListWithoutAddonMessage = new List<String> ();
    public List <String> toMailList = new List<String> ();


    public TransferApplyResponseController() {
        //Apexpages.currentPage().getHeaders().put('X-UA-Compatible', 'IE=8');
        baseUrl = URL.getSalesforceBaseUrl().toExternalForm();
        raid = ApexPages.currentPage().getParameters().get('raid');
        type = ApexPages.currentPage().getParameters().get('type');
        toString = '';
    }

    public TransferApplyResponseController(ApexPages.StandardController stdController) {
        //Apexpages.currentPage().getHeaders().put('X-UA-Compatible', 'IE=8');
        baseUrl = URL.getSalesforceBaseUrl().toExternalForm();
        raid = stdController.getId();
        type = ApexPages.currentPage().getParameters().get('type');
    }

    // 画面初始化
    public void init() {
        hasError = true;
        if(String.isBlank(raid)){
            ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.FATAL, '无效的调拨申请Id');
            Apexpages.addMessage(myMsg);
            return;
        }
        ra = new TransferApply__c();
        cc = new TransferApply__c();
        List<TransferApply__c> raList = [select Id
                                              , Name
                                              , Response__c
                                              , ResponseNew__c
                                              , Contact_Person__c
                                              , Contact_Person__r.Name
                                              , Contact_Person__r.Email
                                              , After_Office_Assistant1__c
                                              , After_Office_Assistant1__r.Name
                                              , After_Office_Assistant1__r.Email
                                              , After_Office_Assistant2__c
                                              , After_Office_Assistant2__r.Name
                                              , After_Office_Assistant2__r.Email
                                              , AfterCheckEmail_F__c
                                              , Destination_location__c
                                              , RecordType.Name
                                              , Loaner_centre_accept_Email__c
                                              , AfterOCMAssetEmail_F__c
                                              , CreatedById
                                              , CreatedBy.Email
                                              , CreatedBy.Name
                                              , RecordType.DeveloperName
                                              , ApplyUser__c
                                              , ApplyUser__r.Name
                                              , ApplyUser__r.Email
                                              , Loaner_centre_mail_address__c
                                              , SalesManager__c
                                              , JingliApprovalManager__c
                                              , BuchangApprovalManager__c
                                              , BuchangApprovalManagerSales__c
                                              , Application_accept_time__c
                                           from TransferApply__c
                                          where Id = :raid];
        if (raList.size() > 0) {
            ra = raList[0];
            cc = raList[0];
            cc.JingliApprovalManager__c = null;
            cc.SalesManager__c = null;
            cc.BuchangApprovalManager__c = null;
            cc.BuchangApprovalManagerSales__c = null;
            cc.Zongjian__c = null;
            cc.ResponseNew__c = null;

            if (String.isNotBlank(type)) {
                if (type == 'responsebefore') {
                    setList(ra.CreatedBy.Name, ra.CreatedBy.Email, '（调拨单创建人）', toNameListWithoutAddonMessage, toMailList);
                } else if (type == 'responseafter') {
                    // 现场移交
                    if (ra.RecordType.DeveloperName == 'AgencyToCenter' || ra.RecordType.DeveloperName == 'CenterToCenter' || ra.RecordType.DeveloperName == 'CenterToOther') {
                        setList(ra.Contact_Person__r.Name, ra.Contact_Person__r.Email, '（联络人）', toNameListWithoutAddonMessage, toMailList);
                        if (toNameListWithoutAddonMessage.size() == 0) {
                            ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.FATAL, '没有设置联络人无法发送应答沟通邮件');
                            Apexpages.addMessage(myMsg);
                            return;
                        }
                    }
                    // 分配现地
                    else if (ra.RecordType.DeveloperName == 'CenterToAgency') {
                        setList(ra.After_Office_Assistant1__r.Name, ra.After_Office_Assistant1__r.Email, '（办事处助理1）', toNameListWithoutAddonMessage, toMailList);
                        setList(ra.After_Office_Assistant2__r.Name, ra.After_Office_Assistant2__r.Email, '（办事处助理2）', toNameListWithoutAddonMessage, toMailList);
                        if (toNameListWithoutAddonMessage.size() == 0) {
                            ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.FATAL, '没有设办事处助理无法发送应答沟通邮件');
                            Apexpages.addMessage(myMsg);
                            return;
                        }
                    }
                    else {
                        ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.FATAL, '此调拨单无法使用此功能');
                        Apexpages.addMessage(myMsg);
                        return;
                    }
                }
            }
        }
        else{
            ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.FATAL, '无效的调拨申请Id');
            Apexpages.addMessage(myMsg);
            return;
        }
    }

    private void setList(String userName, String userEmail, String msg, List<String> tomsgList, List<String> toEmailList) {
        if (String.isBlank(userEmail)) {
            return;
        }
        tomsgList.add(userName + msg);
        toEmailList.add(userEmail);
        toString += String.isBlank(toString) ? userEmail + msg : ',' + userEmail + msg;
    }

    // 保存按钮
    public PageReference saveBtn() {
        hasError = true;

        String response = cc.ResponseNew__c;
        if (response == null || response.trim().length() == 0) {
            cc.ResponseNew__c.addError('请输入内容。');
            //hasError=true;
            return null;
        }

        if (toNameListWithoutAddonMessage.size() == 0) {
            ApexPages.Message myMsg = new ApexPages.Message(ApexPages.Severity.FATAL, '没有设办事处助理无法发送应答沟通邮件');
            Apexpages.addMessage(myMsg);
            return null;
        }

        // 送信者
        String username = UserInfo.getName();
        // 发送时间
        Datetime dt = Datetime.now();
        // 相关用户检索
        List<Id> ccList = new List<Id>();
        ccList.add(ra.Contact_Person__c);
        ccList.add(ra.ApplyUser__c);
        if (cc.JingliApprovalManager__c != null) {
            ccList.add(cc.JingliApprovalManager__c);
        }
        if (cc.SalesManager__c != null) {
            ccList.add(cc.SalesManager__c);
        }
        if (cc.BuchangApprovalManager__c != null) {
            ccList.add(cc.BuchangApprovalManager__c);
        }
        if (cc.BuchangApprovalManagerSales__c != null) {
            ccList.add(cc.BuchangApprovalManagerSales__c);
        }
        if (cc.ZongJian__c != null) {
            ccList.add(cc.ZongJian__c);
        }
        Map<Id, User> userMap = new Map<Id, User>([
            select Id, Name, Email from User where Id in :ccList
        ]);

        // 抄送者
        List <String> ccNameList = new List<String> ();
        List<String> ccMailList = new List<String>();
        if(type == 'responseafter'){

            if (ra.RecordType.DeveloperName == 'AgencyToCenter' || ra.RecordType.DeveloperName == 'CenterToCenter') {
                if (String.isNotBlank(ra.AfterOCMAssetEmail_F__c)) {
                    ccNameList.add(ra.AfterOCMAssetEmail_F__c);
                    ccMailList.add(ra.AfterOCMAssetEmail_F__c);
                }
                if (String.isNotBlank(ra.AfterCheckEmail_F__c)) {
                    ccNameList.add(ra.AfterCheckEmail_F__c);
                    ccMailList.add(ra.AfterCheckEmail_F__c);
                }
            }
        }
        if (cc.JingliApprovalManager__c != null) {
            ccNameList.add(userMap.get(cc.JingliApprovalManager__c).Name);
            ccMailList.add(userMap.get(cc.JingliApprovalManager__c).Email);
        }
        if (cc.SalesManager__c != null) {
            ccNameList.add(userMap.get(cc.SalesManager__c).Name);
            ccMailList.add(userMap.get(cc.SalesManager__c).Email);
        }
        if (cc.BuchangApprovalManager__c != null) {
            ccNameList.add(userMap.get(cc.BuchangApprovalManager__c).Name);
            ccMailList.add(userMap.get(cc.BuchangApprovalManager__c).Email);
        }
        if (cc.BuchangApprovalManagerSales__c != null) {
            ccNameList.add(userMap.get(cc.BuchangApprovalManagerSales__c).Name);
            ccMailList.add(userMap.get(cc.BuchangApprovalManagerSales__c).Email);
        }
        if (cc.ZongJian__c != null) {
            ccNameList.add(userMap.get(cc.ZongJian__c).Name);
            ccMailList.add(userMap.get(cc.ZongJian__c).Email);
        }

        String toName = '';
        if (toNameListWithoutAddonMessage.size() > 0) {
            String toNameWithoutAddonMessage = String.join(toNameListWithoutAddonMessage,'，');
            toName += toNameWithoutAddonMessage;
        }

        String ccName = '';
        if (ccNameList.size() > 0) {
            ccName = String.join(ccNameList,'，');
        }

        // 原应答沟通信息
        String oldResponse = ra.Response__c;
        // 现应答沟通信息
        String temp = '';
        /*temp += '****** ' + username + ' ' + dt.format() + ' ******\n';
        temp += '*** To：' + toName + '\n';
        temp += '*** Cc：' + ccName + '\n';
        temp += cc.ResponseNew__c;
        if (oldResponse != null && oldResponse.trim().length() > 0) {
            temp += '\n\n' + oldResponse;
        } else {
            //于2016-07-01加入<a></a>
            temp += '\n\n备品调拨申请链接： ' + baseUrl + '/' + ra.Id +' ';
        }*/
        // 20211105 ljh 应答沟通 update start
        temp += '****** ' + username + ' ' + dt.format() + ' ******<br/>';
        temp += '*** To：' + toName + '<br/>';
        temp += '*** Cc：' + ccName + '<br/>';
        temp += cc.ResponseNew__c;
        if (oldResponse != null && oldResponse.trim().length() > 0) {
            temp += '<br/><br/>' + oldResponse;
        } else {
            //于2016-07-01加入<a></a>
            temp += '<br/><br/>备品调拨申请链接： ' + baseUrl + '/' + ra.Id +' ';
        }
        // 20211105 ljh 应答沟通 update end

        try {
            // 更新应答沟通
            TransferApply__c updra = new TransferApply__c();
            updra.Id = ra.Id;
            updra.Response__c = temp;

            update updra;

            //Create a dummy instance of outbound email object
    //        Messaging.SingleEmailMessage message= new Messaging.SingleEmailMessage();
            //set a roolback point
    //        Savepoint sp = Database.setSavepoint();
            //set desired email template id
    //        message.templateId = 'xxxxxx';
            //set the target object record id(this is mandatory while using email template)
    //        Id recId = [select Id from Contact where Email != null limit 1].id;
    //        message.targetObjectId = recId;
            //fire dummy email
    //        messaging.sendEmail(new Messaging.SingleEmailMessage[] {message});
            //roll back to savepoint so that email is not sent
    //        Database.rollback(sp);
            //Create insatnce of actual email
            Messaging.SingleEmailMessage messageNEW= new Messaging.SingleEmailMessage();
            //get the bode from above dummy instance and set it to your actual email
            //messageNEW.HTMLBody = message.getHtmlBody();
            //messageNEW.Subject = '备品借出申请' + ra.Name + '' + '应答沟通';
            messageNEW.Subject = ra.RecordType.Name + ' ' + ra.Name + ' ' +
                                // ra.Hospital__r.Name + ' ' +
                                // ra.Department_name__c + ' ' +
                                // ra.Demo_purpose1__c + '/' +
                                // ra.Demo_purpose2__c + ' ' +
                                // ra.GI_Diff__c
                                '-备品调拨申请联络';
            // 20211105 ljh 应答沟通 update start
            // messageNEW.PlainTextBody = temp;
            messageNEW.HtmlBody = temp;
            // 20211105 ljh  应答沟通 update end
            //set desired email addresses
            messageNEW.setCharset('UTF-8');
            messageNEW.toAddresses = toMailList;
            messageNEW.ccAddresses = ccMailList;
            //send the mail
            Messaging.SendEmailResult[] results = messaging.sendEmail(new Messaging.SingleEmailMessage[] {messageNEW});
            if(!results[0].success){
                system.debug('=====' + results[0].errors[0].message);
                cc.ResponseNew__c.addError('邮件发送失败。');
                return null;
                //hasError=true;
            }else{
                //邮件发送成功
                // 更新申请受理时间
                if (ra.Application_accept_time__c == null && type == 'responseafter') {
                    TransferApply__c upAppTime = new TransferApply__c();
                    upAppTime.Id = ra.Id;
                    upAppTime.Application_accept_time__c = dt;
                    update upAppTime;
                }
                hasError=false;
                return null;
            }
        } catch (Exception ex) {
            system.debug('=====' + ex.getMessage());
            //hasError = true;
            ApexPages.addMessages(ex);
            return null;
        }

        // return null;
    }

    public  void testMock(){
        Integer i = 0;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;

        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
        i++;
    }
}