Discovery of substrate cycles in large scale metabolic networks using hierarchical modularity Background: A substrate cycle is a set of metabolic reactions, arranged in a loop, which does not result in net consumption or production of the metabolites. The cycle operates by transforming a cofactor, e.g. oxidizing a reducing equivalent. Substrate cycles have been found experimentally in many parts of metabolism; however, their physiological roles remain unclear. As genome-scale metabolic models become increasingly available, there is now the opportunity to comprehensively catalogue substrate cycles, and gain additional insight into this potentially important motif of metabolic networks. In this study, we present a novel algorithm for the discovery of substrate cycles in large scale metabolic networks by identifying cyclical EFMs in hierarchical modules designed to preserve cyclical interactions using our ShReD metric. Since ShReD-based modules naturally group reactions together based on the shared consumption and production of metabolic cofactors, they serve as a suitable search space to identify substrate cycles that have a net consumption or production of specific cofactors. We show that several representative substrate cycles are identified within their functional context based on known metabolic pathways whose reactions are present in each module. More importantly, we show that many of those substrate cycles are not identified if alternative partition metrics are used instead of ShReD to determine the hierarchical modularity, demonstrating the value of our ShReD-based algorithm for discovering substrate cycles.. The methodology used to identify the substrate cycle motif can be used to exhaustively enumerate cyclical EFMs in hierarchically arranged modules, allowing the analysis to circumvent the scalability limitation of existing EFM analysis tools. Compared to connectivity-based metrics, the ShReD metric used here is more likely to preserve cyclical interactions among network components, and thus is well suited to generating hierarchically partitioned modules for cyclical EFM analysis. To illustrate the advantage of ShReD-based partitioning, we show that several substrate cycles identified in the ShReD modules and reported in the literature are not identified in modules generated using a representative connectivitybased partition metric. In this study, we utilized a network partition approach to identify substrate cycles in the context of metabolic modules. Substrate cycles have been found experimentally in many parts of metabolism, particularly across opposing reactions of glycolysis and gluconeogenesis. However, due to the complexity of metabolic networks, comprehensive characterization has been difficult. In conjunction with large-scale metabolic models, computational approaches offer the benefit that they can systematically consider most (if not all) reactions in a cell type or organism.. Performing motif searches on large-scale networks is challenging, and often intractable, unless the motif is very small. One way to address this problem is to place a upper limit on the number of components in the motif, but this can be arbitrary [16] . On the other hand, finding substrate cycles by enumerating all directed cycles of any size is computationally intractable, because the number of cycles may grow non-linearly with the number of reactions in a cycle. Recently, Gebauer and coworkers addressed this challenge by narrowing their search to cyclical EFMs that metabolize a specific cofactor, ATP. While the same algorithm could be used to target other cofactors, there is the potential drawback that relationships between cyclical EFMs involving different cofactors could be missed. In our work, we instead apply a constraint on the search space. To identify appropriate search spaces while retaining contextual information, we hierarchically partition the network into modules such that the modules are enriched in the desired motif, i.e. metabolic cycles. The trade-off here is that we compromise on the possibility of finding longer cyclical EFMs, as shown by the relatively short cyclical EFM lengths (Figure 3) . Even for the module with the largest number of cyclical EFMs, the lengths range between 2 and 13 reactions (Additional file 1: Figure S1 ), compared to lengths of up to 100 reactions that can be identified from a global analysis [8] . The benefit of a modular approach is that one can be exhaustive in searching for all cyclical EFMs in a given module at a particular hierarchical resolution, which can then facilitate the Table 2 Number of cyclical EFMs associated with each cofactor Figure 3 For each module, the median cyclical EFM length is plotted against the number of reactions in the module. The median cyclical EFM lengths for the Hepatonet1 modules span between 2 and 8 reaction steps.. association of a cyclical EFM with a recognizable metabolic function. Defining an appropriate neighborhood in the network to search for a motif can be challenging, and has often relied on a heuristic such as setting a fixed path distance around a reaction of interest. ShReD-based partition provides a systematically derived grouping of reactions that are enriched with metabolic cycles, and thus defines a natural search space for substrate cycles.. In this paper, we have been thus far careful not to use the terms 'cyclical EFM' and 'substrate cycle' interchangeably. The cyclical EFMs were identified solely based on the stoichiometry and reaction directionality as specified in the published model. While these EFMs could represent substrate cycles, it cannot be concluded that the substrate cycle is active in vivo. For example, many of the cyclical EFMs involve two reversible reactions where one consumes NADP + and produces NADPH in the forward direction, and the other consumes NADH and produces NAD + in the reverse direction (Table 1 , module # 144,976, Figure 2A ). However, whether or not these reactions can indeed operate in opposite directions at the same time with a net conversion of NADP to NADPH at the expense of NADH (or vice versa) depends on the intracellular conditions (e.g. reactant and product concentrations) influencing the thermodynamic driving force. One example of this type of substrate cycle that has been observed in vivo occurs between isocitrate and ketoglutarate, where NAD-dependent isocitrate dehydrogenase (IDH) catalyzes the conversion of isocitrate to ketoglutarate and NADP-dependent IDH catalyzes the conversion of ketoglutarate back to isocitrate [17] .. The thermodynamic feasibility of these substrate cycles could in principle be determined based on Gibbs free energy estimates and experimental flux data [18] . Several earlier studies have considered thermodynamic constraints specifically in the context of cycles. Beard and co-workers formulated the "loop law", which states that the net flux around a loop internal to a reaction network must be zero [19] . It has been shown that these internal loops could be identified using extreme pathway analysis [20] or by enumerating linear combinations of vectors that span the null space of the underlying reaction network. While mathematically rigorous, enumerating null space vector combinations can become intractable for large-scale problems, similar to EFM analysis. More recently, additional methods have been described that utilize the Gibbs free energy criterion of the Second Law [21] to eliminate thermodynamically infeasible reaction cycles. A computationally attractive alternative that does not rely on Gibbs energy parameters was described by Schellenberger and coworkers, who showed that the loop law can be integrated into constraint-based flux analysis by reformulating the optimization problem as a modified mixed integer program (MIP) [22] . The main difference between the present work and these previous studies lies in the type of loop reactions that are targeted for identification. The aforementioned studies sought to eliminate infeasible loops, i.e. futile cycles, when computing flux distributions, whereas the present work seeks to identify feasible loops, i.e. substrate cycles.. In interpreting the results, one also has to consider the "goodness" of the modular partitions. Our algorithm places reactions into groups so as to enrich the modules in cycles. However, it is possible that the algorithm finds a locally optimal result due to the nonlinearity of the problem. If this happens early in the partition process, then it is possible that our algorithm does not identify some substrate cycles. For example, Peterson and coworkers have reported on a metabolic cycle in the rat liver involving pyruvate carboxylase, malate dehydrogenase, and malic enzyme with net oxidation of NADH and NADPH [23] . Our algorithm does not identify this substrate cycle, because cytosolic malic enzyme groups with mitochondrial pyruvate carboxylase and malate dehydrogenase only near the parent module (# 141,802), which is too large for EFM enumeration. One way to address this limitation is to include activity data. Recently, we showed that weighting the edges with metabolic flux data results in different modularity, reflecting the metabolic state of the system [13] . We found that weighting the edges to reflect reaction engagements better ensured that highly active cycles are prioritized in partitioning the network. The practical challenge in adopting this scheme to analyze large-scale networks is obtaining flux data from isotope labeling experiments. On the other hand, it has been shown that methods such as flux balance analysis (FBA) and flux variability analysis (FVA) could reasonably circumscribe the feasible space of flux distributions for a number of genome-scale models.. Prospectively, the discovery of new substrate cycles could yield novel drug targets for metabolic diseases such as obesity, diabetes and cancer [24] . For example, a proposed mechanism for the insulin sensitizing action of thiazolidinedione (TZD) drugs is to induce glycerol kinase gene expression and thereby promote a substrate cycle between lipolysis and fatty acid esterification [25] . Induction of glycerol kinase and activation of the "futile" cycle could reduce the efflux of free fatty acids, whose levels in serum correlate with obesity-related insulin insensitivity. While it remains to be established that this futile cycle is a dominant mechanism in vivo, other studies have corroborated that the glycerol kinase-dependent substrate cycle is a viable mechanism for limiting free fatty acid efflux from human adipose tissue [26] . In addition, a study on cancer cachexia found that the activity of triglyceride-fatty acid substrate cycle was elevated in tumors of murine white adipose tissue due to differential expression of the cycle enzymes [27] , which sets up an intriguing possibility of modulating tumor growth by manipulating these enzymes.. The Cori cycle is another substrate cycle with increased activity in cachectic patients, where lactic acid produced in the tumor is converted to glucose in the liver at the expense of ATP [28] .. The methodology presented in this paper could be extended to identify other substrate cycles that span multiple organ systems, similar to the Cory Cycle. This will obviously require metabolic models that describe more than one cell type or tissue. In this regard, genome-scale metabolic models representing the metabolic networks of multiple interacting cell types [29] or organisms [30] offer exciting possibilities to identify novel, inter-organ or inter-species substrate cycles in the context of recognizable biochemical functions as defined by the corresponding module. Cellular metabolism is exceedingly complex, involving the coordinated actions of many enzymes and regulatory molecules. A useful way to model cellular metabolism is to represent it as a network of biochemical reactions, where one enzyme-catalyzed reaction connects to another through shared reactants, products, and/or cofactors. A common theme in the study of these systems has been to relate a network's function(s) to its layout or "topology". For example, evolved networks typically harbor hubs to which less connected nodes attach as they join the network. This type of "small-world" property has been demonstrated for metabolic networks, with implications for evolution of metabolic functions. Another important property is modularity; i.e., these networks appear to contain smaller subsystems, analogous to integrated circuit modules comprising a larger digital circuit, which has practical implications for engineering biological cells to acquire new synthetic functions [1] .. Several studies have shown that the modules in a metabolic network have hierarchy [2] . These studies utilized graphs, which facilitated the use of established algorithms to compute topological properties. Recently, we introduced a graph-based metric, termed Shortest Retroactive Distance (ShReD), to assess the degree of mutual influence, or retroactive interactions, between reactions in a metabolic network. This metric was used to hierarchically partition a metabolic network into modules that are enriched in allosteric feedback loops and metabolic cycles [3] . Partitioning a network to achieve enrichment of a particular feature, or motif, offers the benefit that the motif can be studied in its modular context.. One motif of particular interest is the substrate cycle, which refers to a set of reactions that forms a loop and does not lead to a net production or consumption of the participating metabolites. Thus defined, a substrate cycle would be thermodynamically infeasible without coupling the cycle's operation to a thermodynamically favorable process such as ATP hydrolysis. Examples of experimentally confirmed substrate cycles involve opposing reactions in glycolysis and gluconeogenesis: inter-conversion of glucose and glucose 6-phosphate; fructose 6-phosphate and fructose 1,6-bisphosphate; and phosphoenolpyruvate and pyruvate. Often also labeled as futile cycles for the seemingly wasteful energy expenditure, substrate cycles have more recently been ascribed physiological functions, for example, thermogenesis [4] . Futile or substrate cycles are not to be confused with infeasible loops, which refer to thermodynamically infeasible cycles.. In the context of cellular homeostasis, substrate cycles could enable the cell to maintain an independent steadystate cycle flux, where the cycle flux can in theory fluctuate without directly altering other fluxes in the metabolic network, provided the cycle does not drastically disturb the cofactor pools. This feature could promote local robustness, which is a key property of modularity [5] . Conversely, if a substrate cycle significantly impacts the consumption or generation of a particular cofactor, then the enzymes of the cycle could be manipulated to selectively adjust the cofactor level while minimally perturbing other parts of metabolism. This type of direct and selective targeting of cofactors could be quite useful in modulating cellular energy expenditure. A substrate cycle in adipose tissue, esterification and hydrolysis of triglycerides, has been investigated as a target to treat obesity through manipulation of cellular bioenergetics [6] . Differential expression of substrate cycle enzymes has also been explored as a possible approach to modulate cancer cell metabolism [7] .. In this light, comprehensively characterizing substrate cycles embedded throughout metabolism could not only shed light on the physiological role of this motif, but also discover potentially novel targets to manipulate metabolic function. Recently, Gebauer and coworkers showed that cyclical elementary flux modes (EFMs) are potential substrate cycles [8] . Using EFMEvolver [9] , the authors found more than 200,000 cyclical EFMs, with a median length (defined as the number of reactions in an EFM) of 35. However, even this large number is likely an underestimate, as the authors focused on substrate cycles involving one specific cofactor, ATP. Given the very large number of potential substrate cycles, the analysis would be greatly facilitated by placing the cycles into context. We present in this paper an approach for identifying substrate cycles in the context of hierarchical modularity. We employ the ShReD metric to partition a large-scale reconstruction of human liver metabolism (HepatoNet1) [10] into modules enriched in metabolic cycles, and conduct an EFM analysis on each module at varying levels of partition hierarchy. We find that it is possible to complete an exhaustive EFM enumeration for all but a small number of modules at the top of the hierarchy. Interestingly, many of the cyclical EFMs identified in this study span several metabolic modules, including transport, lipid synthesis, folate metabolism, sugar metabolism, and amino acid metabolism. The operation of these cyclical EFMs are coupled to many different cofactors as well as transport of inorganic hub compounds such as sulfate, phosphate, and hydronium ions.

O O B I O O O B I O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O B I O O O O O O O O O O O O B I O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O B O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O B I O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


Security Personalization for Internet and Web Services The growth of the Internet has been accompanied by the growth of Internet services (e.g. ecommerce, e-health). This proliferation of services and the increasing attacks on them by malicious individuals have highlighted the need for service security. The security requirements of an Internet or Web service may be specified in a security policy. The provider of the service is then responsible for implementing the security measures contained in the policy. However, a service customer or consumer may have security preferences that are not reflected in the provider's security policy. In order for service providers to attract and retain customers, as well as reach a wider market, a way of personalizing a security policy to a particular customer is needed. We derive the content of an Internet or Web service security policy and propose a flexible security personalization approach that will allow an Internet or Web service provider and customer to negotiate to an agreed-upon personalized security policy. In addition, we present two application examples of security policy personalization, and overview the design of our security personalization prototype. The term "Internet service" is used here to mean any electronic service that is accessed using the Internet, e.g. electronic banking. In the following, we use "Internet service" to refer to all electronic services that are available through the Internet, including Web Services that are based on the Service Oriented Architecture. We use "Web Service" when we wish to indicate that we are treating Web Services in particular.. A large number of Internet services targeting consumers has accompanied the rapid growth of the Internet. Internet services are available for banking, shopping, learning, healthcare, and Government Online, to name a few. However, these services are subject to malicious attack in one form or another. This leads to concerns over their security (Joshi, Aref, Ghafoor, & Spafford, 2001 ).. In order for Internet services to be successful, they must be secured from malicious individuals who constantly try to compromise them. An effective and flexible way of managing security for these services is to make use of security policies. An Internet service security policy is a specification of what security measures will be used to protect the service from security attacks. Work related to the topic of this paper generally fall under three categories: i) the specification and use of security policies, ii) the negotiation of trust, and iii) the personalization of security policies. One work (Ryutov et al., 2005) straddles ii) and iii). Of these three, category i) has the most number of papers, followed by category ii) with fewer but still many papers, followed by category iii) with only a handful of papers. The latter category not only has the smallest number of papers, but the works they describe do not deal with personalization using personal negotiation between a service consumer and a service provider. Rather, they concern automatic negotiation for networking resources or other forms of automatic adaptation of privacy or security policies. Thus our work on personal security policy negotiation is unique as far as we can tell. We provide a summary of each related work below.

B B O O O B I O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O B O B O O O O O O O O O O O O B O O O O O O O O O O O O B O O O O O O O O O O O O O B O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O B O O O O O B B O O O O O O O O O O O O O O O O O O B O O O O O O O O O B O B O O O O O O B B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O B I O O O O O O B I O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O B O O O O B O O O O O O B O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O B O O O B O O O O O B O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O B O O O O O O O O O O O O B O O O O O O O O O O O O B O O O O O O B O B O O O O O O O O O O O O O O O O O


Gene set enrichment analysis for multiple continuous phenotypes Background: Gene set analysis (GSA) methods test the association of sets of genes with phenotypes in gene expression microarray studies. While GSA methods on a single binary or categorical phenotype abounds, little attention has been paid to the case of a continuous phenotype, and there is no method to accommodate correlated multiple continuous phenotypes. Result: We propose here an extension of the linear combination test (LCT) to its new version for multiple continuous phenotypes, incorporating correlations among gene expressions of functionally related gene sets, as well as correlations among multiple phenotypes. Further, we extend our new method to its nonlinear version, referred as nonlinear combination test (NLCT), to test potential nonlinear association of gene sets with multiple phenotypes. Simulation study and a real microarray example demonstrate the practical aspects of the proposed methods. Conclusion: The proposed approaches are effective in controlling type I errors and powerful in testing associations between gene-sets and multiple continuous phenotypes. They are both computationally effective. Naively (univariately) analyzing a group of multiple correlated phenotypes could be dangerous. R-codes to perform LCT and NLCT for multiple continuous phenotypes are available at Our proposed LCT and NLCT approaches are effective in controlling type I errors and powerful in testing associations between gene-sets and multiple continuous phenotypes. They are both computationally effective. Naively (univariately) analyzing a group of multiple correlated phenotypes, i.e., ignoring correlation structure among phenotypes, could be dangerous. We focused here on self-contained GSA methods. We note that competitive and self-contained methods test different hypotheses, and therefore it is important for the user to make an informed choice based on the hypothesis of interest and their understanding of the limitations of the two approaches (see reviews by Nam and Kim [8] and Dinu et al. [27] ). An important limitation of the self-contained approaches is that only a few genes can drive the association between the gene set and the phenotypes. In such cases, post-hoc analysis can be used to reduce the gene set to a core sub-set associated with the phenotypes. Such an analysis has been reported in simulations and in a real example for a single binary phenotype [27] .. Our proposed method is useful for testing associations between sets of genes or pathways and correlated multiple continuous phenotypes. These are often measured in molecular epidemiology studies that include clinicopathological measurements of tissue features such as tumor size and staining based readouts; cellular characteristics indicated by the amount of lymphocytic infiltration in a tumor environment; and subject-specific measurements involving diagnostic or prognostic marker protein or metabolite concentrations. The LCT approach may still need to be adjusted for a mixture of continuous and categorical covariates. The LEP and ADIPOQ levels in the prostate tumor example that we have considered may also have been influenced by patient-specific covariates such as body mass index (BMI), age, and/or smoking status. We note that smoking status did not show a significant association with LEP expression levels (p-value = 0.36), or ADIPOQ expressions levels (p-value = 0.52) in our data, and BMI and age data were not available for our analysis.. The LCT approach can be used for both univariate and multivariate analyses. From the real data analysis, we can see that the univariate LCT for LEP is more sensitive/powerful in comparing to the multiple LCT. Generally speaking, if we knew previously that a subset of the group of phenotypes is more highly associated with the gene sets than the rest of phenotypes, then focusing on the subset of the phenotypes will gain higher power for the test, for further information is incorporated in the testing. Here, we want to point out that naively (univariately) analyzing a group of multiple correlated phenotypes will lead to problems. In the real data analysis, for controlling type I error (e.g. 0.05), it is hard to set a threshold for the two univariate tests, because of correlations between LEP and ADIPOQ. If we can assume that the two phenotypes are independent, we can set a common threshold (roughly as 0.02532057) for them. We then get 209 (11.32%) significant gene sets tested by the naïve approach, but not including 67 (3.63%) of the 159 (8.61%) significant gene sets tested by the multiple LCT. This indicates that naïve approach can identify only gene sets associated with one of the two multiple phenotypes, instead of their combination. LCT methods rely on the linearity assumption. To check the linearity assumption, exploratory data analysis should be used prior to running a formal inference. However, a small sample size which is common in microarray studies, would limit a thorough check for nonlinearities. In the case of small sample size, we prefer using LCT instead of NLCT. The latter is suitable for relatively larger sample sizes and in the case linear assumption does not hold. Our simulation and real microarray studies indicated LCT methods perform very well for small sample sizes. The question of how small is small is debatable and depends largely on the study design. In the case of a binary/ categorical phenotype, at least five samples per group are desirable. In the case of continuous phenotypes, assessing significance based on less than 10 samples is dangerous; an alternative would be to rely upon representations that are more descriptive/exploratory in nature. In terms of computation, both LCT and NLCT are highly efficient compared to other GSA methods, especially given the incorporation of the covariance matrix into the estimations. We noticed that high correlation among genes and/or phenotypes enhances the testing power of LCT and NLCT. To understand this phenomenon, we need to distinguish correlation testing from regression modeling. In the later, we try to explain variance of the dependent variable by a group of predictors. So it is better for the predictors to be linearly independent, since high correlation among them may reduce rank(X), i.e. the real number of predictors. In the former, we are trying to find two linear combinations of genes and phenotypes respectively, with highest correlation between them. High correlation among genes may reduce p = rank(X), i.e. the real dimension of genes; and high correlation among phenotypes may reduce q = rank(Y), i.e. the real dimension of phenotypes. The smaller the dimensions p and q the easier to test the correlation between genes and phenotypes. Microarray data analysis at an individual gene level usually leads to a large list of significant genes, even after multiple comparison adjustment has been made. The process of trying to interpret such a large list of genes is difficult. Molecular biologists have put together lists of genes grouped by function, such as biological pathways or sets of genes. Various pathways or gene sets databases have been compiled, for example, Kyoto Encyclopedia of Genes and Genomes (KEGG) [1, 2] , Gene Ontology [3] , Biocarta [4] and Molecular Signature Data Base [5] . There has been a shift in focus from gene level analysis to pathway level, or gene set level, with many Gene Set Analysis (GSA) methods being proposed in the past decade. The most popular one is Gene Set Enrichment Analysis (GSEA) [6] . Extensive reviews and methodological discussions were given by Goeman and Buhlmann [7] and Nam and Kim [8] .. While GSA methods on a single binary or categorical phenotype abounds, little attention has been paid to the case of a continuous phenotype, and there are no methods to accommodate correlated multiple continuous phenotypes. Such correlated continuous variables are measured routinely in many important clinicopathological observations such as lung functions, tumor size or measurements of marker proteins. A naïve approach to analyzing such data with existing GSA methods would be to categorize the continuous phenotypes into two or more discrete classes, as well as analyze the multiple correlated phenotypes univariately, i.e., one at a time. Such artificial categorization and univariate analyses may lead to less efficiency in gene-set analysis and even cause inaccurate identification of significant gene sets, especially if the multiple phenotypes exhibit relatively higher correlations.. There is an important methodological distinction between the competitive and self-contained GSA approaches [6, 7] . For a binary phenotype, e.g., competitive methods use gene permutation to test whether or not the association of the phenotype with a gene set is similar to its association with the other gene sets (the "Q1 hypothesis"), while self-contained methods employ sample permutation to test the equality of the means of the two vectors of gene-set expressions which correspond to the two phenotype groups (the "Q2 hypothesis"). Here, we focused on the self-contained methods. Unlike the gene permutation strategy, sample permutation preserves correlation structure within gene sets and correlation structure within phenotypes -a key property that we wish to fully take advantage in the proposed GSA methods.. To the best of our knowledge, although correlations among genes in gene sets have long been observed, correlation structure was considered only in a few GSA methods. These were the modified Hotelling's T 2 test for categorical phenotype [9] , and the linear combination test (LCT) for binary phenotype [10] and for continuous phenotype [11] . It has been realized that incorporation of correlations among gene expressions in a GSA approach can significantly improve efficiency of the analysis [9] ; however, it could also spell a heavy computational burden. The linear combination test was designed to incorporate correlations among gene expressions while overcome the computational burden. In the case of binary phenotype, it has been showed that LCT was much more computationally efficient than the modified Hotelling's T 2 test and approximated its superior power very well [10] ; in the case of continuous phenotype, it has been showed that LCT was superior in power to the other GSA methods under compare [11] .. We propose here an extension of LCT to its new version for multiple continuous phenotypes, incorporating correlations among gene expressions of functionally related gene sets, as well as correlations among multiple phenotypes. Further, we extend the new method to its nonlinear version, referred as nonlinear combination test (NLCT), to test potential nonlinear association between gene sets and multiple phenotypes, especially recommended for analyzing relatively larger microarrays. The extension strategy can also be used for other GSA tools for continuous phenotype/phenotypes, such as Global Test [12] . The rest of the article is organized as follows. In section 2 we give detailed derivations of the two proposed GSA methods. In section 3, we used a simulation study to show the practice aspects of these two proposed methods using various settings on sample size, gene-set size, and correlation level among genes and among phenotypes. Section 4 presents the performances of the proposed methods on a real gene expression microarray data from prostate tumor samples of African-American prostate cancer patients [13] .

O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O


Testing trivializing maps in the Hybrid Monte Carlo algorithm We test a recent proposal to use approximate trivializing maps in a field theory to speed up Hybrid Monte Carlo simulations. Simulating the CP N −1 model, we find a small improvement with the leading order transformation, which is however compensated by the additional computational overhead. The scaling of the algorithm towards the continuum is not changed. In particular, the effect of the topological modes on the autocorrelation times is studied. In the simulation of statistical models, many Monte Carlo methods experience a significant increase in effort when approaching a continuous phase transition of the theory. This phenomenon is called critical slowing down and depends strongly on the nature of the underlying theory and the algorithm used. For some models, algorithms have been found which completely eliminate this slowing down or even lead to a speed-up when the critical line is approached. A particular type of critical slowing down is associated with the topological modes of the theories. In QCD, e.g., the topological charge of the gauge configuration is known to be particularly problematic with both single link updates [1] and algorithms based on molecular dynamics [2] .. Recently, a possible solution to the problem has been proposed [3] , for which field transformations given by flow equations are introduced. Exactly integrating the flow equations, the theory becomes trivial and therefore also trivial to simulate. The problem is that the differential equations generating the flow are not exactly known, however, the first terms of a power series of the corresponding kernel can easily be constructed. At this point, it is unclear whether it is sufficient to just know the first order of the differential equations to sufficiently mitigate the problem. Also the accuracy to which the differential equations have to be integrated is unknown.. In this letter, we therefore put this proposal to a test. Since it should work for any field theory, we simulate the CP N −1 model for N = 10 using the Hybrid Monte Carlo (HMC) algorithm [4] , which is an integral part of the program laid out in Ref. [3] . We choose this model, because it shares some similarities with QCD like asymptotic freedom and confinement and, like in QCD, the topological modes show a much more severe critical slowing down than other observables [5] . Most importantly, the accuracy achievable in this two dimensional model is much higher than in QCD and the reduced cost also allows for a better mapping of the rather high dimensional parameter space of the problem.. In Sect. 2 we give the details of the model and how to set up the HMC algorithm for it. After that, we discuss the trivializing map and its construction to leading order in Sec. 3. Then we give the parameters of the simulation which enables us to put the approximate trivializing map to a test whose results we give in Sect. 4 . In the definition of the action, the observables and as a point of reference for the main quantities, we follow the paper by Campostrini, Rossi and Vicari [6] . Whether a modification to an algorithm actually improves its performance is often very difficult to predict. It therefore needs numerical simulations to study its effects. Here we investigated recently proposed field transformations which can lead to a speed-up in HMC simulations. Unfortunately, the result is negative. Although we observe a reduction in autocorrelation times, the scaling towards the continuum limit is not improved. The reduction in the forces, which can be used to increase the step size of the molecular dynamics integration, is compensated by the computational overhead of the method. However, this conclusion does not have to be universally true for all theories. In QCD with dynamical fermions, e.g., the computational cost of the construction would be a minor part of the whole cost of the simulation. Investigating the pure HMC algorithm serves also as an illustration that exponentially slow modes will at some point affect other observables of the theory. The deviation at ξ ≈ 16 from the scaling behavior, which we observe for the observables up to a correlation length of 12, is therefore a cautionary tale for QCD simulations. Even though the slow mode observed in the topological charge might not seem to have any influence on other observables in today's simulations [2] , at some point, the correlation to the topological charge can also affect the scaling behavior towards the continuum limit in these channels. With this setup, we performed extensive runs at correlation lengths between ξ ≈ 2.3 and ξ ≈ 16.6, using the plain HMC and compare it to the THMC with the flow integrated with n s = 1 Euler step. For the latter we use the optimal values of the flow parameter t T with respect to reduction of the force. The detailed parameters can be found in Table 1 , expectation values of various observables in Table 2 . The measured autocorrelation times in units of molecular dynamics time are listed in Table 3 .

O O O O O B I I O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


Dynamic code evolution for Java Dynamic code evolution is a technique to update a program while it is running. In an object-oriented language such as Java, this can be seen as replacing a set of classes by new versions. We modified an existing high-performance virtual machine to allow arbitrary changes to the definition of loaded classes. Besides adding and deleting fields and methods, we also allow any kind of changes to the class and interface hierarchy. Our approach focuses on increasing developer productivity during debugging. Changes can be applied at any point a Java program can be suspended. The evaluation section shows that our modifications to the virtual machine have no negative performance impact on normal program execution. The fast in-place instance update algorithm ensures that the performance characteristics of a change are comparable with performing a full garbage collection run. Standard Java development environments are capable of using the code evolution features of our modified virtual machine, so no additional tools are required. Updating the code of a running program has been investigated early in programming history [12] . With the introduction of executing programs in virtual machines (VM), the possibilities for dynamic code evolution increased because of the additional layer between the executing program and the hardware. Nevertheless, support for this feature in current production-quality VMs is limited. The ability to evolve the code of a running program has advantages in several areas. We distinguish four main applications of dynamic code evolution and their specific requirements:. Debugging. When a developer frequently makes small changes to an application with a long startup time, dynamic code evolution significantly increases productivity. After modifying and compiling the program, the developer can resume it directly * This work was supported by Oracle.. Permission to make digital or hard copies of all or part of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. To copy otherwise, to republish, to post on servers or to redistribute to lists, requires prior specific permission and/or a fee. PPPJ '10, September 15-17, 2010 , Vienna, Austria. Copyright c 2010 ACM 978-1-4503-0269-2. . . $10.00 from where it was suspended instead of stopping and restarting it. For example, modifying the action performed by a button in a graphical user interface does no longer mean that the whole program has to be closed. The main requirement for success is that the code evolution step can be carried out at any time and the programmer does not need to perform additional work, e.g., provide transformation methods for converting between the old and new version of object instances or specify update points. The performance of program execution is also important as an application could do intensive calculations before the first breakpoint is reached or between two consecutive breakpoints. Server Applications. Critical applications that must not be shutdown can only be updated to the next version using dynamic code evolution. The focus lies on safety and correctness of an update. We believe that this can only be achieved by designing an application with code evolution in mind and restricting updates to certain predefined points. The server applications must not be slowed down before or after performing the code evolution. Dynamic Languages. There are various efforts to run dynamic languages on statically typed VMs (see for example [33] ). Dynamic code evolution is a common feature of dynamic languages. Having it as a mechanism of the VM simplifies the implementation of dynamic languages. The requirement here is that small incremental changes, e.g., adding a field or method, can be carried out fast. Dynamic AOP. Dynamic code evolution is also a feature relevant for aspect oriented programming (AOP). There are several dynamic AOP tools that use the current limited possibilities of the Java HotSpot TM VM for dynamic code evolution [5, 46] . Those tools can immediately benefit from enhanced code evolution facilities.. Our approach to dynamic code evolution focuses on improving developer productivity during debugging. It can carry out the change at any point a Java program can be suspended, i.e., at any point a developer can set a breakpoint. Additionally, a Java program can be paused by requesting that every thread stops at the next safepoint. These points are usually used to suspend all threads before a garbage collection run. The Java VM guarantees that at any point during program execution, all threads will reach the next safepoint within a finite time span. Once the VM is suspended, code evolution can be performed.. The strong need for advanced dynamic code evolution features is also expressed by the votes for enhancement requests for the Java HotSpot TM VM: The request for improving the current support for code evolution that allows only swapping method bodies is within the top five enhancement requests. Additionally, the increased productivity through fast code modifications is considered one of the advantages of dynamic languages compared to statically typed languages such as Java. Enabling dynamic code evolution for Java VMs gives this advantage to the Java programming language too.. The main contributions of this paper are:. • We describe the modifications necessary for dynamic code evolution in a production-quality VM.. • Our approach allows arbitrary changes, including the modification of subtype relationships. Nevertheless, it does not introduce any indirections and is without performance loss before or after the code evolution step.. • We allow co-existence of old and new code. An update is possible at any point a Java program can be suspended.. • Our modified version of the Java HotSpot TM VM can be used from within any Java IDE that uses the standard Java Debug Wire Protocol (JDWP), e.g., NetBeans or Eclipse. While the current focus of our implementation lies on debugging, we plan to extend it to the use case of updating server applications. Compared to debugging, the security requirements are higher, but the update may be delayed until a more suitable point in time. We want to extend the redefinition command in such a way that a safe update request can be made. This request is only performed if the problems introduced by binary incompatible changes of the redefined classes that we describe in Section 4 cannot occur. For deleted methods and fields, this means that we have to make sure that they are not accessed in the subsequent execution of the program. We need a reachability analysis starting from all redefined methods that are currently active. In case of hierarchy changes, where class A was formerly a superclass of B, we need to guarantee that no variable of static type A references an instance of type B. In order to check this, we plan to do a stack walk for all active threads as well as a garbage collection run to make sure that all fields will still reference objects of valid types after the update. In Java, the static type of a local variable is not encoded in the bytecodes and only temporarily calculated by the verifier, therefore we need to modify the verifier to cache this information. We presented a technique for dynamic code evolution in Java and described its implementation for the Java HotSpot TM VM. We allow arbitrary modifications to Java classes including changes to the class hierarchy. The update can be performed at any point during program execution, and our VM works with standard Java development environments. Old and new code may co-exist in the VM, and therefore our approach allows redefining methods that are currently active. We discussed the problems introduced by binary incompatible changes, our current solutions, as well as future plans to deal with them.. We showed that a production-quality VM can provide code evolution without losing performance during normal program execution. Our algorithm needs no additional indirections and works with the interpreter as well as with both just-in-time compilers of the Java HotSpot TM VM. The code evolution step is combined with a modified garbage collection run and has similar performance characteristics. The focus of our VM modifications lies on improving debugging productivity.. Our approach is integrated in the latest development version of a high-performance VM. Only few modifications were necessary, and they were limited to specific components although the VM was not designed with code evolution in mind. The implementation is part of a larger effort to extend the Java HotSpot TM VM with first-class support for languages other than Java (especially dynamic languages), called the Da Vinci Machine Project or MultiLanguage Virtual Machine Project (MLVM) [33] . The source code and binaries of our modified virtual machine are available from http://ssw.jku.at/dcevm. We implemented our approach as a modification to the Java HotSpot TM VM [34] , a high-performance VM with an interpreter and two just-in-time compilers (the client compiler [26] and the server compiler [36] ). The implementation is based on the exist-ing mechanism for swapping method bodies [7] and extends it to allow arbitrary changes to loaded types. Our approach focuses on implementing code evolution in an existing VM while keeping the necessary changes small. In particular, we do not modify any of the just-in-time compilers or the interpreter. Our changes affect the garbage collector, the system dictionary, and the class metadata. They are however small and do not influence the VM during normal program execution. Figure 2 gives an overview of the modifications to the VM that are described in the following subsections. The code evolution is triggered by a Java Debug Wire Protocol (JDWP) command [32] . First, the algorithm finds all affected classes and sorts them based on their subtype relationships. Then, the new classes are loaded and added to the type universe of the VM forming a side universe. A modified full garbage collection performs the actual version change. After invalidating state that is no longer consistent with the new class versions, the VM continues executing the program. Steps performed by the code evolution algorithm.

O O B O B O O B O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O B O O O O O O O O B O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O B O O O O O O O O O O O B O O O O O O B O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O B I O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O B O O O O O O O O O O O O B O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O B O B O O O O O O B O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O B O O O O O O O O O O B O O O O O O O O O B O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O B O O O O O O B O O O O O O O O B O O O O O B I O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O B O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O B O O O O O O O O O O B O O O O O O O O O O O B I O O O O O O O O O O O O B I O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O


A Tangent Bundle Theory for Visual Curve Completion Abstract-Visual curve completion is a fundamental perceptual mechanism that completes the missing parts (e.g., due to occlusion) between observed contour fragments. Previous research into the shape of completed curves has generally followed an "axiomatic" approach, where desired perceptual/geometrical properties are first defined as axioms, followed by mathematical investigation into curves that satisfy them. However, determining psychophysically such desired properties is difficult and researchers still debate what they should be in the first place. Instead, here we exploit the observation that curve completion is an early visual process to formalize the problem in the unit tangent bundle R 2 Â S 1 , which abstracts the primary visual cortex (V1) and facilitates exploration of basic principles from which perceptual properties are later derived rather than imposed. Exploring here the elementary principle of least action in V1, we show how the problem becomes one of finding minimum-length admissible curves in R 2 Â S 1 . We formalize the problem in variational terms, we analyze it theoretically, and we formulate practical algorithms for the reconstruction of these completed curves. We then explore their induced visual properties vis-à -vis popular perceptual axioms and show how our theory predicts many perceptual properties reported in the corresponding perceptual literature. Finally, we demonstrate a variety of curve completions and report comparisons to psychophysical data and other completion models. V ISUAL curve completion is a perceptual phenomenon in which the visual system fills in the missing parts between boundary fragments to facilitate the perception of complete objects. When the object is fragmented due to occlusion (Figs. 1A and 1B), the completion is usually called amodal [25] . When the object is illusory and its completed boundary curves are subjective (Fig. 1C) , the completion is known as modal. 1 In the latter case, observers typically report clear intensity edges along the subjective contours and the perception of an illusory shape that is slightly brighter than the surrounding regions [8] , [25] , [37] . In both amodal and modal completion, a significant part of the process is considered low-level and local, affected only a little by context (Fig. 1D ) or visual experience (Fig. 1E) . Like other problems of perceptual organization [37] , it too has been studied from different perspectives of the vision sciences, and in particular by the computational, perceptual, and neurophysiological communities. Due to its low-level and local characteristics, studies of curve completion usually assume that the completed curve is induced by the two oriented line segments at the point of occlusion (hereinafter the inducers). Referring to these inducers, the curve completion problem is typically divided into two parts. First, the grouping problem deals with the organization of candidate inducers into pairs that indeed induce completed curves (see Fig. 2A ). The second, the shape problem, deals with the characterization and reconstruction of the shape of the completed curve between two given inducers. In this paper, we focus on the latter problem, with the goal of formalizing and solving the shape of perceptually completed curves between two given inducers.. Suppose we are given an image region where boundaries are missing (e.g., blue circle in Fig. 1A ) and the two inducers between which the curve is completed (e.g., the white segments in Fig. 1A ). Clearly, there are infinitely many ways to complete a curve between these two inducers (some possible completions are shown in yellow in Fig. 1A) , from which our visual system appears to choose a singular and unique shape (illustrated in magenta in Fig. 1A ). This (somewhat illusive) shape is the objective of computational curve completion in general and of this paper in particular: Problem 1. Given the position and orientation of two inducers p 0 ¼ ½x 0 ; y 0 ; 0 and p 1 ¼ ½x 1 ; y 1 ; 1 in the image plane, find the shape of the "correct" perceptual curve that passes between these inducers.. While we consider as "correct" the completion that agrees the most with perceptual evidence (see below), the notion of "correctness" in the context of our completion task is clearly ill defined. Since formulating visual perception is difficult, one may consider other alternatives also. Most desirable, perhaps, is completing the actual shape of the occluded (or subjective) object at the time the image was captured. But 1. The term modal is often used in this context to indicate completed contours which are "phenomenally present with the usual characteristics of visual modality." On the other hand, the term amodal completion is used when the completed structure is "present in the perception but does not have the phenomenal characteristics of sensory modally." While both phenomena have been reported earlier, these descriptions are attributed to Kanizsa [25, pp. 194-195]. clearly, this requires prior knowledge of the occluded shape (if nothing else, then at least for the evaluation of the completed shape), which renders the completion task meaningless. Clearly, while guessing the actual shape may be possible as part of the completion task (can you guess the shape of the missing boundaries in Fig. 1B?) , the apparent arbitrariness of shapes makes this guess easily tricked (see Fig. 2B to see if your guess was correct).. Instead of the actual shape, one may seek the "typical" or likely shape of the occluded part of the object, which is a weaker but possibly more accessible constraint. Still, this too requires knowledge of the type and the part of the occluded object (to allow access to its typical shape in the occluded part), and hence its recognition or classification from the image data. Naturally, this conflicts with the early nature of the completion problem, and its accepted role as facilitating higher level tasks (like recognition) rather than being dependent on them (e.g., [27, page 159] , [51, page 5] , [56, page 837] , or [39, page 47] , to name but a few).. Given the observations and inherent difficulties above, much of the previous computational curve completion literature has incorporated perceptual considerations, either explicitly or implicitly (e.g., looking for the curve that is chosen by the visual system [51, page 1], modeling the shape, salience, and sharpness of perceived contours [56, page 838 ], or seeking the most "pleasing" curve [27, page 161] are just a few of the stated goals). Since formalizing the visual process is difficult, most previous studies have addressed the problem by defining constraints on the "desired" solution in the image plane. Unfortunately, however, almost all of Here, most observers report the completion of a convex shape behind the occluder, although all contextual cues indicate the presence of a dent. (E) The same phenomenon of "seeing versus thinking" [25] can be demonstrated with familiar objects in photographs. Covering part of a caravan, the occluder here gives rise to the perception of an excessively long camel, one that every observer "knows" is impossible. Indeed, curve completion can override life-long visual experience. The grouping phase deals with the grouping of inducers into pairs between which perceptually completed curves are formed. While in the selected region of this figure (also shown is its edge map) all cyan inducers are possible candidates for pairing with the red inducer (which leads to the possible completed curves such as those plotted in cyan), it seems that perceptual completion occurs only with the green inducer (which might produce the completion in green). (B) The shape problem deals with the inference of the completed shape between a given pair of inducers. As we argue, the "correct" computational completion should match the perceived one rather than the actual physical shape behind the occluder. Here, the ostrich's neck is occluded by a leaf and human observers tend to report completions similar to the one plotted in white. However, the apparent arbitrariness of physical shapes makes this guess easily tricked, as would be the case if at the moment there was a small piece of food in the ostrich's throat. Since we cannot predict the exact state of the occluded object, its actual shape and boundaries at the time the image is captured cannot serve as a measure of correctness for shape completion.. these constraints have been inspired more by intuition and mathematical elegance, and less by perceptual findings or neurophysiological principles. In the next section we review some of the computational models, the axiomatic approach which often motivates them, and the degree of compatibility to perceptual and neurophysiological evidence. We then turn to present a new and rigorous mathematical curve completion theory which is motivated by the structure of the visual system and uses a single basic principle of "least action" in the visual cortical space to provide, among other things, accurate explanations and predictions for existing perceptual evidence.

O B I O O O B I O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O


Designing a practical data filter cache to improve both energy efficiency and performance Conventional Data Filter Cache (DFC) designs improve processor energy efficiency, but degrade performance. Furthermore, the single-cycle line transfer suggested in prior studies adversely affects Level-1 Data Cache (L1 DC) area and energy efficiency. We propose a practical DFC that is accessed early in the pipeline and transfers a line over multiple cycles. Our DFC design improves performance and eliminates a substantial fraction of L1 DC accesses for loads, L1 DC tag checks on stores, and data translation lookaside buffer accesses for both loads and stores. Our evaluation shows that the proposed DFC can reduce the data access energy by 42.5% and improve execution time by 4.2%. The performance demanded for computing continues to escalate as computer systems become more pervasive. As a result, the electricity cost and the environmental impact for computing infrastructure are increasing at an alarming rate. Energy efficiency is of critical importance today for both embedded and general-purpose computing [Hennessy and Patterson 2011] . Clearly it is vital that mobile devices efficiently run their increasingly complex applications as these devices are depending on power supplies with limited capacity. For general-purpose processors, clock rates and per-core performance are now constrained by thermal limitations. Energy-efficient solutions may allow more of the processor power budget to be spent on performance improvements [Huang et al. 2011] . Thus, the design solutions we pursue must be able to reconcile high energy efficiency with high performance.. Recent studies show that servicing data accesses through a Level-1 Data Cache (L1 DC) and a Data Translation Lookaside Buffer (DTLB) account for up to 25% of the total power of an embedded processor [Dally et al. 2008; Hameed et al. 2010] . One technique for reducing processor energy dissipation is the use of filter caches that are tiny caches that are accessed before the L1 caches [Kin et al. 1997 [Kin et al. , 2000 . Since a filter cache is a smaller structure than the L1 DC, there is less capacitance to switch on an access. Thus, accessing a Data Filter Cache (DFC) instead of the L1 DC reduces energy usage. However, filter caches are generally considered impractical by performancedriven processor manufacturers as they typically incur an execution time penalty for each filter cache miss. Furthermore, prior filter cache designs that propose to transfer an entire cache line between the L1 DC and the DFC in a single cycle cause an increase in both the area of the L1 DC and the energy to access it.. While several different techniques associated with the L1 DC have been proposed to either reduce the data access energy dissipation or improve processor performance [Inoue et al. 1999; Zhang et al. 2005; Powell et al. 2001; Nicolaescu et al. 2006; Austin et al. 1995] , we propose a practical DFC design that makes the processor both more energy efficient and faster. This article makes the following contributions: First, we describe practical techniques for accessing a small DFC early in an in-order pipeline that both avoid the DFC miss penalty and can improve performance by eliminating load hazards on DFC hits. Second, we recognize that filling a DFC line in a single cycle has a negative impact on L1 DC area and power, and we describe an approach for transferring a cache line from the L1 DC to the DFC over multiple cycles without incurring any execution time overhead. Third, we demonstrate that our DFC design not only eliminates many L1 DC and DTLB accesses when data is accessed from the DFC, but that it also eliminates a substantial fraction of the L1 DC tag checks and DTLB accesses when storing data to the L1 DC. Finally, we provide a more detailed DFC implementation study as compared to prior filter cache research and show that using a standard-cell DFC can be a practical approach to realizing an efficient DFC.. The remainder of this article is organized as follows: First, we review a typical design of an L1 DC. Second, we describe our proposed DFC design and also show that DTLB accesses can be eliminated on DFC load hits, discuss an approach for accessing the DFC earlier in the pipeline, describe a technique for efficiently transferring an entire line between the L1 DC and the DFC over multiple cycles, and present techniques for making the majority of stores to the L1 DC more efficient. Third, we outline our evaluation framework and present the results of our DFC design. Finally, we review related work on improving data access efficiency and summarize our future work and conclusions for the article. A lazy fill write-allocate policy could be employed to further improve the energy efficiency as compared to the traditional write-allocate policy. On a store miss, the line can be allocated by only writing the tag. This way a store miss does not cause a line fetch. If a load happens for a line which is only allocated and not filled, then the bytes of the line that have not yet been written are fetched from the L1 DC. This lazy fill technique may avoid fetching many words from the L1 DC into a DFC line when cache lines are partly or entirely written first.. For multithreaded processors that periodically switch between a set of threads, a DFC per thread can be employed, as each DFC has a relatively small area footprint. This not only avoids any issues regarding the use of virtually tagged DFCs, but it also reduces contention as each thread has its own private DFC. Multithreaded processors tend to require a highly associative L1 DC to avoid contention between the threads, which makes each L1 DC access more costly in terms of energy. The DFC eliminates a large portion of the L1 DC accesses. It might, therefore, be beneficial to increase the associativity to reduce contention even further, as long as timing requirements can be met. Employing multiple DFCs would require a cache coherency mechanism to be implemented to keep shared data coherent across the DFCs.. Out-of-order processors have a more complex load-store pipeline. Commonly the address generation is followed by a load buffer to support speculative load operations. The use of address speculation and a DFC to access data earlier has the potential to reduce both energy and execution time for out-of-order processors. However, further evaluations are required to determine how the DFC would interact with the conventional behavior of an out-of-order load-store pipeline. We have described how to design and implement data filter caches (DFCs) that are practical in the sense that they not only improve processor energy efficiency, but they also improve processor performance and comply well with rational cell-based implementation flows. Our evaluations show that, for example, a 256B fully associative DFC can provide an overall 42.5% energy reduction for data accesses at the same time as the execution time is improved by 4.2% using speculative DFC accesses. Our energy evaluations have been based on constant clock rates. Thus, the reduction in execution time can offer further energy saving opportunities at the processor level, but this depends on the processor configuration. For low-power systems, there are mainly opportunities to reduce energy in the clock network, while for high-performance systems, leakage energy reductions are possible. In this section, we first evaluate the energy and performance benefits of the proposed DFC for the in-order five-stage pipeline that we implemented in hardware and that is described in Section 4.3. We then describe a more aggressive processor configuration with a two-cycle load latency and use this configuration to evaluate timing and performance improvements of the proposed technique. Figure 8 shows how successful a speculative access to the DFC is across the benchmark suite. As shown, the speculation, on average, is successful 71.9% of the time. Speculation is attempted but fails for 1.9% of the load accesses. For the remaining 26.2% of the load accesses, the offset portion of the address is greater than or equal to 54:14 A. Bardizbanyan et al. the line size, which causes speculation to not be attempted. These results show that speculatively accessing the DFC is worthwhile as almost three-fourths of the memory references for load operations can obtain the appropriate address, enabling the DFC to be accessed in the same cycle that the address is generated. Figure 9 shows the L1 DC and fully associative DFC miss rates for the MiBench applications. The average miss rate for the L1 DC is 0.6%. The benchmarks are sorted by decreasing L1 DC miss rate. The figure clearly shows that there is no correlation between the L1 DC miss rate and the DFC miss rates. The DFC miss rates are under the assumption that the line fetch operation takes one cycle. As described in Section 3.4, an L1 DC would not be designed for reading and writing an entire line in a single cycle unless the processor can benefit from it. But using the miss rate for one cycle line fetch operation gives good insights to the trends in DFC design. Figure 10 shows the unified L2 cache miss rates for MiBench applications. This miss rate is calculated by the following formula: A multiple line buffer approach has been proposed in order to reduce L1 cache energy usage [Ghose and Kamble 1999] , but without affecting the cycle time, which was a drawback in the first line buffer study [Su and Despain 1995] . In the multiple line buffer approach, a parallel check is performed using the tag and line index to verify if the current access resides in the line buffers. When there is a hit in the line buffers, the discharge of the bitlines is avoided, hence energy is saved. The placement of the cache lines inside the line buffers is handled in a fully associative manner in order to keep the reuse of data as high as possible. One of the disadvantages of this approach is that it requires a customized SRAM implementation in order to disable the discharge signal when appropriate. In addition, the guarantee mechanism requires to have a line buffer for each way of the cache for every entry (line index). Given a line index, there is no significant locality between the lines that are residing on different ways. Hence, many of the line buffers become wasteful.. The original filter cache proposal places both an Instruction Filter Cache (IFC) and a DFC between the CPU and the L1 cache [Kin et al. 1997 [Kin et al. , 2000 . This proposed organization can potentially reduce energy usage at the expense of an execution time penalty of one cycle on each filter cache miss. It appears that their design also assumes a one cycle fill of an entire filter cache line, which can negatively impact both the area of the L1 cache and the power to access these caches. We believe this performance penalty and negative impact on L1 DC area and power has prevented filter caches from being adopted by processor manufacturers. Duong et al. [2012] propose to use a fully associative DFC in order to reduce the energy dissipation of an L1 DC. Their DFC tag comparison is performed in the execute stage after the address generation, in order to prevent the DFC miss penalty. They do not mention using virtual tags, but instead just state that the DFC tag comparison is possible in the execute stage due to the small DFC size and the slow clock rate of an embedded processor. Unlike our DFC design, their approach provides no execution time benefit. It also appears their evaluation was performed assuming that entire DFC cache lines can be filled or written back in a single cycle. In addition, they assume that the L1 DC has separate read and write ports, which will significantly increase the area of the L1 DC SRAMs. Unless there is an important benefit due to the processor configuration, an L1 DC will typically have a single shared read/write port for area efficiency. This issue will have an important impact on their proposed writeback filter cache design. Austin et al. [1995] propose to use fast address calculation to access the entire L1 DC earlier in the pipeline, to reduce execution time by resolving the data dependencies earlier. While this technique improves performance, it increases the L1 DC energy since the whole cache needs to be accessed again on speculation failures. Nicolaescu et al. [2006] propose to use a 16-entry fully associative table to store the way information of the last accessed lines. The table is accessed in the stage before the data cache access, with a fast address calculation scheme based on Alpha 21264. If there is a match in the table, only one data cache way is accessed. The addition of the 16-entry fully associative circuit, which has a complexity of a DTLB structure, incurs a significant area and power overhead, which will cancel out some of this technique's energy benefits. This technique can only reduce the energy dissipation of the L1 DC, while the DFC proposed in this work improves the execution time considerably in addition to reducing the overall data access energy.. There have also been some techniques proposed to avoid DTLB accesses. Block buffering has been used to detect recent TLB translations by performing comparisons with the virtual address as soon as it is generated [Lee et al. 2005; Chang and Lan 2007] . Opportunistic virtual caching is a technique to allow some blocks in the L1 caches to be cached with virtual addresses by changing the operating system to indicate which pages can use virtual caching [Basu et al. 2012] . Our DFC design is more effective at reducing data access energy usage, as our approach not only avoids most DTLB accesses but also avoids most L1 DC accesses as well.

O O O O B I O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B I O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O B O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O O