public with sharing class lexToAddMaintenanceContractController { @AuraEnabled public static String canAddMc(String recordId) { List mcpeList = [Select Id from MaintanceContractPackEstimate__c Where MaintanceContractPack__c = :recordId and Decide__c =true limit 1]; if(mcpeList.size()>0) { return '2'; //有decide的报价组合之后,不能添加小合同 } else { List mcpeStatusList = [Select Id from MaintanceContractPackEstimate__c Where MaintanceContractPack__c = :recordId and ( Process_Status__c='申请中' OR Process_Status__c='批准' ) limit 1]; if(mcpeStatusList.size()>0) { //有不是草案中的报价组合,提示重新做报价 return '3'; } } return '1'; } //zzm 20231026 start @AuraEnabled public static String getContractType(String recordId) { List mcpList = [Select Id,Contract_Type__c From MaintanceContractPack__c Where Id = :recordId]; if(mcpList.size()>0) { return mcpList[0].Contract_Type__c; } else { return '1'; } } //zzm 20231026 end @AuraEnabled public static McInfoList init(String recordId,String contractType) { McInfoList mcInfoList = new McInfoList(); if(String.isNotBlank(contractType)) { contractType = EncodingUtil.urlDecode(contractType,'UTF-8'); } String status = '引合中'; mcInfoList.selectedMcLists = [SELECT Id,Management_Code__c, Name, Hospital__c,Hospital__r.Name,Service_Contract_Staff__c,Service_Contract_Staff__r.Name FROM Maintenance_Contract__c Where MaintanceContractPack__c = :recordId ]; mcInfoList.allMcLists = [SELECT Id,Management_Code__c, Name, Hospital__c,Hospital__r.Name,Service_Contract_Staff__c ,Service_Contract_Staff__r.Name FROM Maintenance_Contract__c Where MaintanceContractPack__c =null And Status__c = :status And Contract_Type__c = :contractType Limit 50]; return mcInfoList; } //搜索 @AuraEnabled public static List searchMc(String txt, String con, String val, String contractType,String searchHospital) { if(String.isNotBlank(contractType)) { contractType = EncodingUtil.urlDecode(contractType,'UTF-8'); } return getMaintenanceContract(txt,con,val,contractType,searchHospital); } //检索验证 private static List getMaintenanceContract(String txt, String con, String val, String contractType,String searchHospital) { String soql = 'SELECT Id,Management_Code__c, Name, Hospital__c,Hospital__r.Name,Service_Contract_Staff__c,Service_Contract_Staff__r.Name FROM Maintenance_Contract__c where MaintanceContractPack__c =null And Status__c =\'' +'引合中' + '\''; if(String.isNotBlank(contractType)) { soql += ' and Contract_Type__c= \'' +contractType +'\''; } if(String.isNotBlank(val)){ soql += ' and ' ; soql += makeTextSql(txt, con, val); } if(String.isNotBlank(searchHospital)){ soql += ' and Hospital__c= :searchHospital' ; } soql += ' limit 50'; // if(String.isBlank(val)) { // soql += ' Contract_Type__c= \''+contractType + '\' limit 50'; // } else { // soql += makeTextSql(txt, con, val); // soql += ' and Contract_Type__c= \''+contractType + '\' limit 50'; // } // if(String.isBlank(val)) { // soql += ' Contract_Type__c= '+contractType + ' limit 50'; // } else { // soql += makeTextSql(txt, con, val); // soql += ' and Contract_Type__c= '+contractType + ' limit 50'; // // soql += ' and Contract_Type__c= \''+contractType + '\' limit 50'; // } // system.debug('=======search soql:' +makeTextSql(txt, con, val)); system.debug('====getAssetconfim:' + soql); return Database.query(soql); } // 拼接检索条件sql文 private static String makeTextSql(String txt1, String con, String val) { String soql = ''; if (String.isBlank(con)) { con = 'equals'; } if (!String.isBlank(txt1)) { if ((con == 'contains' || con == 'notcontains') && val.contains(' ')) { String[] vals = val.split(' '); String cSql = ''; if (vals.size() > 0) { String txt = txt1.substring(2); soql += ' ( '; for (String v : vals) { if (String.isNotBlank(v)) { if (con == 'contains') { soql += txt + ' like \'%' + v + '%\' or '; } else { soql += txt + ' not like \'%' + v + '%\' and '; } } } soql = soql.substring(0, soql.length() - 4); soql += ')'; } system.debug('containssoql: ' + soql); } else if ((con == 'equals' || con == 'notequals') && val.contains(',')) { String[] vals = val.split(','); if (vals.size() > 0) { String txt = txt1.substring(2); soql += ' ( '; for (String v : vals) { if (con == 'equals') { soql += txt + ' = \'' + v + '\' or '; } else { // notequals soql += txt + ' <> \'' + v + '\' and '; } } soql = soql.substring(0, soql.length() - 4); soql += ')'; } } else { String cSql = makeTextSqlStr(txt1, con, val); if (con != 'notcontains') { soql += makeTextSqlStr(txt1, con, val); } else { // notcontains if (!String.isBlank(cSql)) { cSql = cSql.substring(5); soql += ' (NOT ' + cSql + ') '; } } } } return soql; } private static String makeTextSqlStr(String txt1, String con, String val) { String soql = ''; if (!String.isBlank(txt1)) { String txt = txt1.substring(2); String colType = txt1.substring(0, 2); String tmpVal = val.trim(); // 空白の場合''にする if (String.isBlank(tmpVal)) { if (con == 'equals') { //soql += ' and ' + txt + ' = ' + tmpVal; soql += ' ' + txt + ' = null'; } else if (con == 'notequals') { soql += ' ' + txt + ' <> null'; } else { // 空白の場合、contains, notcontains と starts withは無視 } } else { soql += ' ' + txt; if (con == 'equals') { if (colType == 'S:') { soql += ' = \'' + tmpVal + '\''; } else { soql += ' = ' + tmpVal + ' '; } } else if (con == 'notequals') { if (colType == 'S:') { soql += ' <> \'' + tmpVal + '\''; } else { soql += ' <> ' + tmpVal + ' '; } } else if (con == 'contains' || con == 'notcontains') { soql += ' like \'%' + String.escapeSingleQuotes(tmpVal.replaceAll('%', '\\%')) + '%\''; } else if (con == 'starts with') { soql += ' like \'' + String.escapeSingleQuotes(tmpVal.replaceAll('%', '\\%')) + '%\''; } else { if (colType == 'S:') { soql += ' ' + con + '\'' + tmpVal + '\''; } else { soql += ' ' + con + ' ' + tmpVal + ' '; } } } } return soql; } //添加进打包合同 @AuraEnabled public static String exchangeMc(List selectedMcs,String recordId) { List oldMcs = [SELECT Id,Management_Code__c, Name FROM Maintenance_Contract__c Where MaintanceContractPack__c = :recordId ]; List upMcList = new List(); if(selectedMcs !=null && selectedMcs.size()>0) { for(Maintenance_Contract__c mc:oldMcs) { if(!selectedMcs.contains(mc.Id)){ mc.MaintanceContractPack__c = null; upMcList.add(mc); } } for(String mcId : selectedMcs) { Maintenance_Contract__c mcObj = new Maintenance_Contract__c(); mcObj.Id = mcId; mcObj.MaintanceContractPack__c = recordId; upMcList.add(mcObj); } } else { for(Maintenance_Contract__c mc:oldMcs) { mc.MaintanceContractPack__c = null; upMcList.add(mc); } } try{ //加先款经销商名 String SalesOfficeCode_selection = null; MaintanceContractPack__c mcp = new MaintanceContractPack__c(); mcp.Id = recordId; List mcpList = [Select Id from MaintanceContractPack__c where ID= :recordId]; if (upMcList.size()>0) { List selectedMcsInfo = [Select Id ,SalesOfficeCode_selection__c from Maintenance_Contract__c Where id in :selectedMcs limit 1]; if(selectedMcsInfo.size()>0 && mcpList.size()>0) { SalesOfficeCode_selection = selectedMcsInfo[0].SalesOfficeCode_selection__c; } // mcp.SalesOfficeCode_selection__c = SalesOfficeCode_selection; update upMcList; update mcp; // String updateColunmRes = updateColunm(recordId); // system.debug('大合同金额更新结果:'+updateColunmRes); } return '1'; // else { // return '请选择维修合同!'; // } }catch(exception e){ return e.getMessage(); // return e.getDmlMessage(0); } } //zzm 20231026 start //更新报价的上期合同信息 @AuraEnabled public static String updateLastMc(String recordId) { String lastMcStr = '999'; //zzm 20231121 上期合同信息bug修复 try{ String reportId = ''; List reportList = [select Id from Report where DeveloperName ='Repair_Contract_Repair_Fault' limit 1]; if(reportList.size()>0) { reportId = reportList[0].Id; } List mcLastIds = new List(); // MaintanceContractPack__c mcp = [select id,name from MaintanceContractPack__c where Estimation_Id__r.id =:recordId]; MaintanceContractPackEstimate__c mcpe = [select id,name,MaintanceContractPack__c from MaintanceContractPackEstimate__c where Id =:recordId]; List mcList = [select id,Name,LastMContract1_NO__c,LastMContract2_NO__c,LastMContract3_NO__c,LastMContract4_NO__c,LastMContract5_NO__c from Maintenance_Contract__c where MaintanceContractPack__c=:mcpe.MaintanceContractPack__c]; for(Maintenance_Contract__c mc:mcList) { if(String.isNotBlank(mc.LastMContract1_NO__c)) { mcLastIds.add(mc.LastMContract1_NO__c); } if(String.isNotBlank(mc.LastMContract2_NO__c)) { mcLastIds.add(mc.LastMContract2_NO__c); } if(String.isNotBlank(mc.LastMContract3_NO__c)) { mcLastIds.add(mc.LastMContract3_NO__c); } if(String.isNotBlank(mc.LastMContract4_NO__c)) { mcLastIds.add(mc.LastMContract4_NO__c); } if(String.isNotBlank(mc.LastMContract5_NO__c)) { mcLastIds.add(mc.LastMContract5_NO__c); } } if(mcLastIds.size()>0) { lastMcStr = String.join(mcLastIds, ','); } String url = '/lightning/r/Report/' + reportId+'/view?fv0='+lastMcStr; System.debug('url:'+url); return url; } catch (exception e){ return '2'; } } //打包报价 -过去三年修理实绩 @AuraEnabled public static String initDBPast2YearsRepairPriceRep(String recordId){ try { String reportId = ''; List reportList = [select Id from Report where DeveloperName ='Last2YearsRepairPrice3' limit 1]; if(reportList.size()>0) { reportId = reportList[0].Id; } String mCEName = [select Maintenance_Contract_Estimate__c from MaintanceContractPackEstimate__c where Id = :recordId].Maintenance_Contract_Estimate__c; String url = '/lightning/r/Report/' + reportId+'/view?fv0='+mCEName; return url; } catch (exception e) { return '2'; } } //打包报价 -编辑按钮覆盖 @AuraEnabled public static String initToAmpApprovalEdit(String recordId){ try { MaintanceContractPackEstimate__c mcpe = [select Id,MaintanceContractPack__c from MaintanceContractPackEstimate__c where Id = :recordId]; String url = '/apex/toMcpApproval?id='+mcpe.MaintanceContractPack__c+'&mcpeId=' +mcpe.Id; return url; } catch (exception e) { return '2'; } } //zzm 20231026 end // private static String updateColunm(String recordId){ // //当前维修合同 // List mcList = [Select Id,Submit_contract_to_Financial_dept__c,HP_Dealer_print__c,Contract_print_completed__c,OCM_Print_request__c,GuidePrice_DownF__c,GuidePrice_UpF__c,Request_quotation_AmountF__c, // Contract_Start_Date__c, // Contract_End_Date__c, // Limit_Price_Amount__c, // Total_Contract_Price__c, // Contract_Amount__c from Maintenance_Contract__c // where MaintanceContractPack__c = :recordId]; // MaintanceContractPack__c mcp = new MaintanceContractPack__c(); // mcp.id = recordId; // Decimal GuidePrice_DownF = 0; // Decimal GuidePrice_UpF = 0; // Decimal FieldRequest_quotation_Amount = 0; // Decimal Limit_Price_Amount = 0; // Decimal Contract_Amount = 0; // Decimal Total_Contract_Price = 0; // for ( Maintenance_Contract__c mc :mcList) { // //增加上限金额汇总 // if (mc.Limit_Price_Amount__c !=null) { // Limit_Price_Amount += mc.Limit_Price_Amount__c; // } // if (mc.GuidePrice_DownF__c !=null) { // GuidePrice_DownF += mc.GuidePrice_DownF__c; // } // if (mc.GuidePrice_UpF__c !=null) { // GuidePrice_UpF += mc.GuidePrice_UpF__c; // } // if (mc.Request_quotation_AmountF__c!=null) { // FieldRequest_quotation_Amount += mc.Request_quotation_AmountF__c; // } // if (mc.Contract_Amount__c!=null) { // Contract_Amount += mc.Contract_Amount__c; // } // //合同定价总额 // if (mc.Total_Contract_Price__c!=null) { // Total_Contract_Price += mc.Total_Contract_Price__c; // } // } // mcp.Limit_Price_Amount__c = Limit_Price_Amount; // mcp.GuidePrice_DownF__c = GuidePrice_DownF; // mcp.GuidePrice_UpF__c = GuidePrice_UpF; // mcp.FieldRequest_quotation_Amount__c = FieldRequest_quotation_Amount; // mcp.Contract_Amount__c = Contract_Amount; // mcp.Total_Contract_Price__c = Total_Contract_Price; // update mcp; // try{ // update mcp; // return '1'; // }catch(exception e){ // return e.getMessage(); // } // } //zzm 20231026 start //合同复核初始化 @AuraEnabled public static McpPreInfo initMcpPreSubmit(String recordId) { McpPreInfo mcpPre = new McpPreInfo(); try { MaintanceContractPack__c mcp =[ SElECT Id, Name, Estimation_Id__c, OCM_Print_request__c, HP_Dealer_print__c, Contract_print_completed__c, Submit_contract_to_Financial_dept__c, Contract_Conclusion_Date__c from MaintanceContractPack__c Where Id =:recordId ]; mcpPre.mcp = mcp; // mcpPre.decideEstimationId = mcp.Estimation_Id__c; List mcpeList = [select Id,Decide__c from MaintanceContractPackEstimate__c where Id=:mcp.Estimation_Id__c and Decide__c=true]; mcpPre.mcpeList = mcpeList; List mcList = [select Id,Name,Decided_Estimation__c,Status__c,MC_approval_status__c,Is_Recognition_Model_True__c,Contract_print_completed__c,Contract_quotation_or_not__c,Maintenance_Contract_No__c,upload_to_sap_time__c,upload_to_RM_time__c,old_Is_RecognitionModel__c,Payment_Plan_Sum_First__c from Maintenance_Contract__c where MaintanceContractPack__c=:recordId]; mcpPre.mcList = mcList; } catch (Exception e) { System.debug(e.getMessage()); } return mcpPre; } //更新大合同日期到小合同 @AuraEnabled public static String updateMcDate(String recordId) { try { MaintanceContractPack__c mcp =[ SElECT Id, Name, Estimation_Id__c, OCM_Print_request__c, HP_Dealer_print__c, Contract_print_completed__c, Submit_contract_to_Financial_dept__c, Contract_Conclusion_Date__c from MaintanceContractPack__c Where Id =:recordId ]; List mcList = [select Id,Name,Decided_Estimation__c,Status__c,MC_approval_status__c,Is_Recognition_Model_True__c,Contract_print_completed__c,Contract_quotation_or_not__c,Maintenance_Contract_No__c,upload_to_sap_time__c,upload_to_RM_time__c,old_Is_RecognitionModel__c,Payment_Plan_Sum_First__c from Maintenance_Contract__c where MaintanceContractPack__c=:recordId]; for(Maintenance_Contract__c mc:mcList) { mc.OCM_Print_request__c = mcp.OCM_Print_request__c; mc.HP_Dealer_print__c = mcp.HP_Dealer_print__c; mc.Contract_print_completed__c = mcp.Contract_print_completed__c; mc.Submit_contract_to_Financial_dept__c = mcp.Submit_contract_to_Financial_dept__c; mc.Contract_Conclusion_Date__c = mcp.Contract_Conclusion_Date__c; } if(mcList.size()>0){ update mcList; } return '1'; } catch (Exception e) { return '2'; } } // //打包合同合同复核审批流 // @AuraEnabled // public static String preSubmitMcp(String recordId) { // try{ // Approval.ProcessSubmitRequest psr = new Approval.ProcessSubmitRequest(); // psr.setObjectId(recordId); // Approval.ProcessResult submitResult = Approval.process(psr); // return '1'; // }catch(exception e){ // return e.getMessage(); // } // } //初始化上传认款合同 @AuraEnabled public static List initUploadToRecognition(String recordId) { List mcList = [select Id,Name,Decided_Estimation__c,Contract_quotation_or_not__c,Maintenance_Contract_No__c,upload_to_sap_time__c,upload_to_RM_time__c,old_Is_RecognitionModel__c,Payment_Plan_Sum_First__c from Maintenance_Contract__c where MaintanceContractPack__c=:recordId]; return mcList; } //zzm 20231026 end public class McInfoList { @AuraEnabled public List allMcLists; @AuraEnabled public List selectedMcLists; } //zzm 20231026 start public class McpPreInfo{ @AuraEnabled public MaintanceContractPack__c mcp; // @AuraEnabled // public String decideEstimationId; @AuraEnabled public List mcpeList; @AuraEnabled public Boolean decideEstimationFlag; @AuraEnabled public List mcList; } //zzm 20231026 end 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++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; i++; } }