| 
						
						
							
								
							
						
						
					 | 
					@ -4,6 +4,7 @@ import cn.afterturn.easypoi.excel.entity.TemplateExportParams; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					import com.alibaba.excel.EasyExcel; | 
					 | 
					 | 
					import com.alibaba.excel.EasyExcel; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					import com.alibaba.excel.ExcelReader; | 
					 | 
					 | 
					import com.alibaba.excel.ExcelReader; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					import com.alibaba.excel.read.metadata.ReadSheet; | 
					 | 
					 | 
					import com.alibaba.excel.read.metadata.ReadSheet; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					import com.alibaba.fastjson.JSON; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					import com.epmet.commons.tools.constant.NumConstant; | 
					 | 
					 | 
					import com.epmet.commons.tools.constant.NumConstant; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					import com.epmet.commons.tools.constant.StrConstant; | 
					 | 
					 | 
					import com.epmet.commons.tools.constant.StrConstant; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult; | 
					 | 
					 | 
					import com.epmet.commons.tools.dto.result.CustomerStaffInfoCacheResult; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -175,14 +176,9 @@ public class HouseServiceImpl implements HouseService, ResultDataResolver { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            pids = getPids(formDTO.getAgencyId()); | 
					 | 
					 | 
					            pids = getPids(formDTO.getAgencyId()); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        } | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        formDTO.setPids(pids); | 
					 | 
					 | 
					        formDTO.setPids(pids); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        PageInfo<IcHouseListResultDTO> pageInfo = null; | 
					 | 
					 | 
					        PageInfo<IcHouseListResultDTO> pageInfo = PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize(),formDTO.getIsPage()) | 
				
			
			
				
				
			
		
	
		
		
			
				
					 | 
					 | 
					        if (formDTO.getIsPage()){ | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            pageInfo = PageHelper.startPage(formDTO.getPageNo(), formDTO.getPageSize(),formDTO.getIsPage()) | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					                    .doSelectPageInfo(() -> icHouseDao.searchHouseByPage(formDTO)); | 
					 | 
					 | 
					                    .doSelectPageInfo(() -> icHouseDao.searchHouseByPage(formDTO)); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        }else{ | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					 | 
					 | 
					            List<IcHouseListResultDTO> resultDTOS = icHouseDao.searchHouseByPage(formDTO); | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            pageInfo = new PageInfo<>(resultDTOS,resultDTOS.size()); | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        } | 
					 | 
					 | 
					 | 
				
			
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        List<IcHouseListResultDTO> records = pageInfo.getList(); | 
					 | 
					 | 
					        List<IcHouseListResultDTO> records = pageInfo.getList(); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        records.forEach(item->{ | 
					 | 
					 | 
					        records.forEach(item->{ | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -214,10 +210,17 @@ public class HouseServiceImpl implements HouseService, ResultDataResolver { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    public void exportBuildinginfo(IcHouseListFormDTO formDTO, HttpServletResponse response) throws Exception { | 
					 | 
					 | 
					    public void exportBuildinginfo(IcHouseListFormDTO formDTO, HttpServletResponse response) throws Exception { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        //如果类型是house 查房屋
 | 
					 | 
					 | 
					        //如果类型是house 查房屋
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        //导出房屋
 | 
					 | 
					 | 
					        //导出房屋
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        PageData<IcHouseListResultDTO> icHouseExcels = getHouseList(formDTO); | 
					 | 
					 | 
					        List<IcHouseListResultDTO> list = new ArrayList<>(); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        do { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            PageData<IcHouseListResultDTO> icHouseExcels = getHouseList(formDTO); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            if (CollectionUtils.isEmpty(icHouseExcels.getList())){ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                break; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            list.addAll(icHouseExcels.getList()); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        }while (list.size() == formDTO.getPageSize()); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        TemplateExportParams templatePath = new TemplateExportParams("excel/house_export.xlsx"); | 
					 | 
					 | 
					        TemplateExportParams templatePath = new TemplateExportParams("excel/house_export.xlsx"); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        Map<String,Object> map = new HashMap<>(); | 
					 | 
					 | 
					        Map<String,Object> map = new HashMap<>(); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        map.put("maplist",icHouseExcels.getList()); | 
					 | 
					 | 
					        map.put("maplist", list); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        ExcelPoiUtils.exportExcel(templatePath ,map,"房屋信息录入表",response); | 
					 | 
					 | 
					        ExcelPoiUtils.exportExcel(templatePath ,map,"房屋信息录入表",response); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    } | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
							
								
							
						
						
					 | 
					@ -474,14 +477,15 @@ public class HouseServiceImpl implements HouseService, ResultDataResolver { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            icBuildingService.update(icBuildingDTO); | 
					 | 
					 | 
					            icBuildingService.update(icBuildingDTO); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        } | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    } | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    Cache<String,Integer> exportNumCacheMap = CacheBuilder.newBuilder().build(); | 
					 | 
					 | 
					    Cache<String,List<HouseIcResiUserResultDTO.HouseMemberResultDTO>> memberMap = CacheBuilder.newBuilder().expireAfterAccess(1, TimeUnit.SECONDS).build(); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					    @Override | 
					 | 
					 | 
					    @Override | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    public PageData<HouseMemberResultDTO> getHouseUser(TokenDto tokenDto, IcHouseListFormDTO formDTO) { | 
					 | 
					 | 
					    public PageData<HouseMemberResultDTO> getHouseUser(TokenDto tokenDto, IcHouseListFormDTO formDTO, Cache<String, Boolean> haveSearchCache) { | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					        RentTenantDataFormDTO resiParam = new RentTenantDataFormDTO(); | 
					 | 
					 | 
					        RentTenantDataFormDTO resiParam = new RentTenantDataFormDTO(); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        resiParam.setCustomerId(tokenDto.getCustomerId()); | 
					 | 
					 | 
					        resiParam.setCustomerId(tokenDto.getCustomerId()); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        resiParam.setAgencyId(formDTO.getAgencyId()); | 
					 | 
					 | 
					        resiParam.setAgencyId(formDTO.getAgencyId()); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        resiParam.setGridId(formDTO.getGridId()); | 
					 | 
					 | 
					        resiParam.setGridId(formDTO.getGridId()); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        resiParam.setPageSize(NumConstant.ONE_THOUSAND); | 
					 | 
					 | 
					        resiParam.setPageSize(NumConstant.ONE_THOUSAND); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        resiParam.setIsPage(false); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        //查询级别 默认按照小区去查
 | 
					 | 
					 | 
					        //查询级别 默认按照小区去查
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        int searchLevel = 0; | 
					 | 
					 | 
					        int searchLevel = 0; | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -502,8 +506,9 @@ public class HouseServiceImpl implements HouseService, ResultDataResolver { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        PageData<HouseMemberResultDTO> result = new PageData<>(resultList,houseData.getList().size()); | 
					 | 
					 | 
					        PageData<HouseMemberResultDTO> result = new PageData<>(resultList,houseData.getList().size()); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        int finalSearchLevel = searchLevel; | 
					 | 
					 | 
					        int finalSearchLevel = searchLevel; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        AtomicInteger num = new AtomicInteger((formDTO.getPageNo()-1) * formDTO.getPageSize()); | 
					 | 
					 | 
					        AtomicInteger num = new AtomicInteger((formDTO.getPageNo()-1) * formDTO.getPageSize()); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        Cache<String,List<HouseIcResiUserResultDTO.HouseMemberResultDTO>> memberMap = CacheBuilder.newBuilder().expireAfterAccess(1, TimeUnit.SECONDS).build(); | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
			
				
					
					 | 
					 | 
					        resultDTOS.parallelStream().forEach(o ->{ | 
					 | 
					 | 
					        resultDTOS.stream().forEach(o ->{ | 
				
			
			
				
				
			
		
	
		
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            resiParam.setNeighborHoodId(o.getNeighborHoodId()); | 
					 | 
					 | 
					            resiParam.setNeighborHoodId(o.getNeighborHoodId()); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            if (finalSearchLevel == 1){ | 
					 | 
					 | 
					            if (finalSearchLevel == 1){ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                resiParam.setBuildingId(o.getBuildingId()); | 
					 | 
					 | 
					                resiParam.setBuildingId(o.getBuildingId()); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -511,12 +516,19 @@ public class HouseServiceImpl implements HouseService, ResultDataResolver { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            if (finalSearchLevel == 2){ | 
					 | 
					 | 
					            if (finalSearchLevel == 2){ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                resiParam.setHouseId(o.getHouseId()); | 
					 | 
					 | 
					                resiParam.setHouseId(o.getHouseId()); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            } | 
					 | 
					 | 
					            } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					            getHouseMembers(resiParam, memberMap); | 
					 | 
					 | 
					            this.getHouseMembers(resiParam, memberMap,haveSearchCache); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					            List<HouseIcResiUserResultDTO.HouseMemberResultDTO> members = memberMap.getIfPresent(o.getHouseId()); | 
					 | 
					 | 
					            List<HouseIcResiUserResultDTO.HouseMemberResultDTO> members = memberMap.getIfPresent(o.getHouseId()); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					            if (members == null){ | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            int n = num.incrementAndGet(); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            //没有住户 则直接写房屋
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            if (CollectionUtils.isEmpty(members)){ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                HouseMemberResultDTO resultDTO = ConvertUtils.sourceToTarget(o, HouseMemberResultDTO.class); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                resultDTO.setNum(n); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					                resultList.add(resultDTO); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                return; | 
					 | 
					 | 
					                return; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            } | 
					 | 
					 | 
					            } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					            int n = num.incrementAndGet(); | 
					 | 
					 | 
					            //有住户 房屋信息是重复的
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					            members.forEach(m->{ | 
					 | 
					 | 
					            members.forEach(m->{ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                HouseMemberResultDTO resultDTO = ConvertUtils.sourceToTarget(m, HouseMemberResultDTO.class); | 
					 | 
					 | 
					                HouseMemberResultDTO resultDTO = ConvertUtils.sourceToTarget(m, HouseMemberResultDTO.class); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                resultDTO.setNum(n); | 
					 | 
					 | 
					                resultDTO.setNum(n); | 
				
			
			
		
	
	
		
		
			
				
					| 
						
						
						
							
								
							
						
					 | 
					@ -538,20 +550,36 @@ public class HouseServiceImpl implements HouseService, ResultDataResolver { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        return result; | 
					 | 
					 | 
					        return result; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    } | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					    public void getHouseMembers(RentTenantDataFormDTO resiParam, Cache<String, List<HouseIcResiUserResultDTO.HouseMemberResultDTO>> memberMap) { | 
					 | 
					 | 
					    /** | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					     * desc:分情况获取 房屋内居民 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					     * @param resiParam | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					     * @param memberMap | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					     * @param haveSearchCache | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					     */ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					    public void getHouseMembers(RentTenantDataFormDTO resiParam, Cache<String, List<HouseIcResiUserResultDTO.HouseMemberResultDTO>> memberMap, Cache<String, Boolean> haveSearchCache) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        String searchKey = resiParam.getHouseId()+resiParam.getBuildingId()+resiParam.getNeighborHoodId()+resiParam.getAgencyId(); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        Boolean haveSearch = haveSearchCache.getIfPresent(searchKey); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        if (haveSearch!= null && haveSearch){ | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            return; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        haveSearchCache.put(searchKey,true); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        List<HouseIcResiUserResultDTO> memberListTemp = null; | 
					 | 
					 | 
					        List<HouseIcResiUserResultDTO> memberListTemp = null; | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        resiParam.setPageNo(NumConstant.ONE); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					        do { | 
					 | 
					 | 
					        do { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            Result<List<HouseIcResiUserResultDTO>> memberResult = epmetUserOpenFeignClient.getHouseMemberList(resiParam); | 
					 | 
					 | 
					            Result<List<HouseIcResiUserResultDTO>> memberResult = epmetUserOpenFeignClient.getHouseMemberList(resiParam); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            log.debug("=======查询居民:"+ resiParam.getPageNo()+",size:"+resiParam.getPageSize()+",result:"+memberResult.getData().size()); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            if (!memberResult.success()) { | 
					 | 
					 | 
					            if (!memberResult.success()) { | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					                throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "调用user服务失败"); | 
					 | 
					 | 
					                throw new EpmetException(EpmetErrorCode.EPMET_COMMON_OPERATION_FAIL.getCode(), "调用user服务失败"); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            } | 
					 | 
					 | 
					            } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            memberListTemp = memberResult.getData(); | 
					 | 
					 | 
					            memberListTemp = memberResult.getData(); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					            log.debug("=======查询居民结果:"+ JSON.toJSONString(memberListTemp)); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					            if (CollectionUtils.isEmpty(memberListTemp)) { | 
					 | 
					 | 
					            if (CollectionUtils.isEmpty(memberListTemp)) { | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					                continue; | 
					 | 
					 | 
					                break; | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					            } | 
					 | 
					 | 
					            } | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					            resiParam.setPageSize(resiParam.getPageSize()+1); | 
					 | 
					 | 
					            resiParam.setPageNo(resiParam.getPageNo()+1); | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					            memberListTemp.parallelStream().forEach(h -> memberMap.put(h.getHomeId(), h.getHouseMemberList())); | 
					 | 
					 | 
					            memberListTemp.parallelStream().forEach(h -> memberMap.put(h.getHomeId(), h.getHouseMemberList())); | 
				
			
			
		
	
		
		
			
				
					
					 | 
					 | 
					        } while (memberListTemp != null && memberListTemp.size() == resiParam.getPageSize()); | 
					 | 
					 | 
					
 | 
				
			
			
				
				
			
		
	
		
		
	
		
		
			
				
					 | 
					 | 
					 | 
					 | 
					 | 
					        } while (memberListTemp.size() == resiParam.getPageSize()); | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    } | 
					 | 
					 | 
					    } | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					
 | 
					 | 
					 | 
					
 | 
				
			
			
		
	
		
		
			
				
					 | 
					 | 
					    /** | 
					 | 
					 | 
					    /** | 
				
			
			
		
	
	
		
		
			
				
					| 
						
							
								
							
						
						
						
					 | 
					
  |