Optimized packing multidimensional hyperspheres: a unified approach

In this paper an optimized multidimensional hyperspheres packing problem (HPP) is considered for a bounded container. Additional constraints, such as prohibited zones in the container or minimal allowable distances between spheres can also be taken into account. Containers bounded by hyper(spheres, cylinders, planes) are considered. Placement constraints (non-intersection, containment and distant conditions) are formulated using the phi-function technique. A mathematical model of HPP is constructed and analyzed. In terms of the general typology for cutting & packing problems, two classes of HPP are considered: open dimension problem (ODP) and knapsack problem (KP). Various solution strategies for HPP are considered depending on: a) objective function type, b) problem dimension, c) metric characteristics of hyperspheres (congruence, radii distribution and values), d) container’s shape; e) prohibited zones in the container and/or minimal allowable distances. A solution approach is proposed based on multistart strategies, nonlinear programming techniques, greedy and branch-and-bound algorithms, statistical optimization and homothetic transformations, as well as decomposition techniques. A general methodology to solve HPP is suggested. Computational results for benchmark and new instances are presented.


Introduction
Optimized packing consists in placing a number of geometrical objects in a larger object called a container. The objects have to be arranged subject to placement conditions, i.e. placed without overlapping (non-overlapping condition) and completely inside the container (containment condition). Packing problems appear in different practical applications and one of the most frequently used placement problems is packing hyperspheres of different dimensions.
Hypersphere packing problems (HPP) form a broad area on the boundary between computational geometry and combinatorial optimization. Classical works of F. Toth [25], J. Conway, N. Sloane [23], T. Hales [26] and M. Vyazovska [27] study regular lattice hypersphere placement in space (lattice sphere packing). However, in many practical applications [28,29] packing hyperspheres in a bounded domain (container) has to be studied. Packing 2D&3D spheres with balancing conditions were considered, e.g. in [30][31][32][33][34] using phi-functions [35] for modeling placement conditions. Then global/local optimizers combined with multistart or decomposition techniques were used to solve arising optimization problems. Among the principal characteristics of HPP are there space dimension, number of spheres, shape of the container, metric features (congruence, radii) of hyperspheres, correspondence between the sizes of hyperspheres and the container, etc. HPP is NP-hard [36] and thus heuristic approaches are widely used to obtain good approximate solutions in a reasonable computational time. To compare efficiency of different algorithmic approaches, open access collections of benchmark instances are used, see e.g. http://www.packomania.com.
There are a large number of publications on 2D&3D sphere packing problems. However, the multidimensional (with dimension higher than 3) HPP are much less investigated and still of great interest. In this paper we focus on packing high dimensioned hyperspheres into arbitrary shaped containers subject to prohibited packing zones and minimal allowable distance between hyperspheres and/or container's boundary.
The paper is organized as follows. Section 2 reviews related papers and highlights the main contributions of the paper. Section 3 provides the general mathematical model for packing multidimensional hyperspheres. Variants of the general mathematical model are stated in Section 4. Section 5 presents six solution strategies used to different classes of the original model. Numerical results are given in Section 6, while Section 7 concludes. Definition of the phi-function is presented in Appendix A.

Related works
One of the most general typologies of Cutting & Packing Problems (C&P) was proposed by Wäscher et al. [37]. According to this typology, there are the following main types of HPP: ODP, PP (Placement Problem), KP, IIPP (Identical Item Placement Problem).
Many publications study 2D circle packing problems (CPP) arising in chemistry and geography, biology and production planning, logistics and additive manufacturing [38]. Hexagonal packing of equal circles was found to be the densest packing among all possible circle packings [39,40]. An optimization method for the open dimension circular packing problem (ODP) based on a descent with respect to groups of variables was presented in [41]. The method allows finding feasible solutions. This approach uses the observation that in a dense packing a circle touches either two other circles, or another circle and the container frontier, or the container frontier only. This technique is known as the block-coordinate descent method [42]. Huang et al. [43] proposed two greedy algorithms for packing circles into a rectangle of fixed dimensions. The first technique selects the next circle to be packed according to the maximum-hole degree rule. The second algorithm improves the later by a self-look-ahead search strategy that determines at each iteration the circle to be packed and its position. CPP with different container shapes, such as circles, squares, rectangles, strips and triangles are considered in [44]. Using a finite grid to approximate the container, optimized circle packing problem is transformed in [45,46] to a large scale linear integer programming problem. In [47] the approach is extended to packing the so-called circular-like objects that can be represented as circles in a certain (not necessary Euclidean) metric. CPP with prohibited zones are investigated in [48][49][50][51]. Prohibited zones in general lead to nonconvexity, multiconnectedness and/or nonconnectedness of the container.
For circular ODP hybrid algorithms combining beam and binary interval search with an open-strip generation procedure and a multi-start separate-beams strategy were proposed in [52,53]. Different models and methods for packing circles and spheres were reviewed in Hifi and R'Hallah [54]. The benchmark instances and the best known solutions for packing equal and non-equal circles into containers of different shapes are presented at E. Specht's website [55].
Hales [26] obtained the upper bound for the density of packing equal spheres [40,56]. For packing unequal spheres in a container Sutou and Day [6] proposed a global optimization approach using a nonlinear programing formulation with quadratic constraints and a linear objective. Twice-differentiable models for 2D and 3D packing problems including packing different-sized spheres are presented in [57]. Kubach et al. [58] adapted the parallel greedy algorithms proposed in [52] for the 3D case. A hybrid algorithm for packing unequal circles and spheres into a larger circular (spherical) container is proposed in [59]. Stoyan et al. [60] proposed a modification of the jump algorithm [61] developed for CPP. This approach based on homothetic transformations was used for packing unequal spheres in various containers of minimum sizes (including the spherical container of minimum radius). A method for packing unequal spheres by combining the best-local position procedure with intensification and diversification stages is proposed in [29]. In [62] the problem of densest packing a given number of equal spheres into multiconnected containers is considered. The algorithm based on the optical-geometric approach and billiard simulation combination is proposed and implemented.
A package for 3-D Molecular Dynamics Simulations was developed by Bigrin et al [63][64][65]. The authors consider molecular simulations as a packing problem where the distance between atoms of different molecules has to be greater than some specified tolerance. The software allows packing millions of atoms, grouped in arbitrarily complex molecules, inside a variety of three-dimensional regions, including intersections of spheres, ellipses, cylinders, planes, or boxes in reasonable time. A review of modeling and solution techniques for packing spheres in various containers is presented in [66,67].
Comparing to 2D&3D case, packing high dimensioned spheres is much less investigated. Random packing hyperspheres of higher dimensions using Monte Carlo method for molecular dynamics simulations is considered in [68]. To reach higher packing fractions a compression algorithm [69] or a particle scaling algorithm [70] are used. A random sequential addition algorithm for packing hyperspheres is proposed in [71]. Skoge et al. [72] study disordered jammed hard-sphere packings in 4D, 5D and 6D. They use a collision-driven packing generation algorithm [73] and obtain the estimates for the packing densities of the maximally random jammed states. The algorithm realizes homothetic transformations of hyperspheres with the common homothetic coefficient for all hyperspheres. Granocentric model for polydisperse sphere packings of high dimension is introduced in [74]. The homothetic transformations method for packing equal hyperspheres into a hypersphere of fixed radius is considered in [75], each hypersphere being not shared with another. The jump algorithm [61] was adopted for packing unequal hyperspheres into a hypersphere of minimum radius in [76].
To summarize, various approaches are used for HPP. Among them are modeling of sphere interaction by molecular dynamics and discrete elements methods; lattice and random packings; sequential addition and probabilistic methods; metaheuristic approaches (genetic and simulated annealing techniques, ant-colony and greedy algorithms); linear and nonlinear programming (continuous and integer); branch and bound algorithms for integer problems; hybrid approaches combining heuristics and mathematical programming methods, etc.
In this paper a unified methodology for packing hyperspheres into bounded containers of arbitrary shapes is presented. Additional restrictions, e.g., prohibited zones or distant conditions are also taken into account. Exact mathematical models and corresponding mathematical programming problems are formulated. Solution techniques are proposed and results of numerical experiments for the collections of benchmark problem instances are presented.
The main contributions of the paper are: 1) Phi-function [36] based modeling tools for packing hyperspheres into containers with prohibited zones bounded by hyperspheres, hypercylinders and hyperplanes.
2) General mathematical model of HPP for different types of objective function (ODP or KP), metric characteristics of hyperspheres (congruence, radii distribution, constraints on the radii values), shapes of the container (hyperrectangle, hypersphere, hypercylinder, d-polytope), restrictions on minimal allowable distances and prohibited zones.
3) Unified methodology to solve HPP based on efficient starting point algorithms and local optimization methods. 4) Computational results for packing multidimensional hyperspheres into different containers with prohibited zones.

Mathematical model
We consider an optimization packing problem of hyperspheres of different dimensions (2D, 3D and d D, 4 d  ) in the following formulation.

Problem formulation
Let ( )   be a convex container with k variable metric characteristics 1 2 , , ..., k    (sizes of the container). Here is given, where i r is radius of ( ) The non-overlapping conditions (2) can be extended regarding minimum allowable distances 0 ij   between the hyperspheres: where is the Euclidean distance between points a and b .
If p I   , then restrictions on prohibited zones should be taken into account: Packing Problem of Hyperspheres (HPP). Pack hyperspheres from the set ( ) the placement domain ( ) C  providing packing conditions (1)-(4) to optimize objective: maximize the packing factor or minimize the container ( )   volume.
Here the packing factor is defined as the following fraction: the volume of all hyperspheres divided by the volume of the placement domain.

Tools of mathematical modeling
To formalize the packing conditions (1)-(4) the phi-function technique [36] is used.
The condition (1) can be described by means of phi-functions of the hypersphere ( ) Let us define phi-functions of the objects ( ) is a right circular hypercylinder, then The conditions (2) can be stated using phi-functions of the hyperspheres ( ) The adjusted phi-functions of the hyperspheres ( ) The conditions (4) are described by means of phi-functions of ( ) i i S u and l P for

General mathematical model
We denote a vector of variables by A general mathematical model of HPP can be presented in the following form: is an adjusted phi-function of the hyperspheres is a phi-function of ( ) i i S u and l P ,  are restrictions on the placement parameters and metric characteristics of the container ( ) Let us indicate some basic features of the problem (5): 1) The feasible region W is, in general, a disconnected set with multiply connected components.
2) If the phi-functions describing W contain maximum operators, it can be presented as where the subregions , 1, 2, ..., t W t   are described by systems with continuously differentiable functions.
3) The number of variables of the problem (5)

Variants of the general mathematical model
Depending on the type of the objective function ( )   the packing problem (5) can be represented as: 1) the packing problem with variable metric characteristics of the container (ODP [37]); 2) the problem formulated as a knapsack problem (KP [37]); 3) the problem of packing identical hyperspheres (IIPP) being a partial case of KP. As a container  is considered a hypersphere (in particular, a circle or a sphere), a hyperrectangle (including a rectangle or a cuboid), a hypercylinder (in particular, a right circular cylinder), a convex d -polytope (in particular, a convex polygon or a convex polyhedron). The prohibited zones may be given as: circles, convex polygons, objects bounded by circular arcs and line segments for

Open dimension problem (ODP)
Let there be hyperspheres ( ) , so that the sizes of the container will be minimized.
The mathematical model (5) for ODP takes the form where 1 2 ( , , ..., ) is an adjusted phi-function of the 2) The Jacobian and Hessian matrices describing the constraints of the problem (6)

Knapsack problem (KP)
Let the container  be given by its fixed metric characteristics. Hyperspheres from the set ( ) where 1 2 ( , , ..., ) Obviously, solving the problem (7) (7) takes the following form: is a phi-function of the hypersphere ( ) i i S u and the object * \ int .
It should be noted that the maximum value of the objective function is equal to the number of spheres packed into the container and denoted by * * * ( , ) u t    .

Solution algorithms
The overall solution methodology includes analyses of the problem statement, initial data and restrictions; deriving and analysis of mathematical models for HPP in different dimension; constructing initial feasible packings (starting points or approximate solutions) and methods for local and global optimization. The basic elements of the methodology for solving HPP are shown in Figure 1.

Constructing starting feasible packings
The following methods to construct starting feasible points are proposed: the random packing method, the lattice packing method, the greedy algorithm (modification of the block-coordinate descent method) and the residual optimization method.
The random packing method is used to quickly obtain feasible points for 4, 5, ...,19 d  by choosing random values of hyperspheres centers in the Cartesian or hyperspherical coordinate systems and verifying feasibility. The lattice packing method is used for 2D and 3D packing into a convex container without prohibited zones. It is assumed that the hyperspheres diameters are much smaller than the container's size. For the hexagonal lattice packing each circle is tangent to 6 other circles and each sphere is tangent to 12 other spheres. Translations of the hexagonal lattices are realized to generate denser packings of circles (spheres) into the container and to construct various starting points which further can result in different local extrema.
The greedy algorithm is a modification of the block-coordinate descent method [42] with specific criteria. It can be used to obtain promising starting points in a reasonable time. In the greedy algorithm the problem (5) is reduced to the sequence of problems max ,

Local optimization
To find local extrema the interior point solver IPOPT (Interior Point Optimizer) [78]) is coupled with decomposition methods, modifications of the feasible direction method, the block-coordinate descent method [42] and the descent method based on analysis of Lagrange multipliers.
The combined decomposition and IPOPT method allows reducing the original problem with many nonlinear constraints to a sequence of non-linear programming problems with a significantly smaller number of non-linear constraints. The interior-point method used in IPOPT is a straight-dual interior point method (barrier function method) with proven convergence.
The block-coordinate descent method is used for ODP with more than 10,000 variables. The variables are divided into several groups. Selecting one group of variables, the other variables are considered fixed. To solve the subproblems IPOPT or modifications of the feasible direction method are used. After solving all subproblems the best result is supposed to be an approximation to a local extremum of ODP. To improve the objective function value the process is repeated several times for different groups of variables.
The descent method based on analysis of Lagrange multipliers is applied to problems with inverse convex and linear constraints and is based on the analysis of Lagrange multipliers. It is used together with the block-coordinate descent method and the active constraints strategy. The variables are updated iteratively as follows: To select the descent direction, the vector of Lagrange multipliers The constraint corresponding to the minimum negative multiplier is relaxed. One moves along the feasible region frontier decreasing the objective function until at least one of the non-active constraints is violated. The process continues until all Lagrange multipliers become nonnegative thus fulfilling the necessary and sufficient condition of the extremum.

Global optimization
The problem HPP is NP-hard and thus the exhaustive search of all local extrema is not efficient. In this work methods of searching on a subset of the feasible set and cutting off its unpromising subsets are used.
The decremental neighborhood method (DNS [79]) is based on statistical properties of the objective on permutations of the spheres or the solution tree. Modifications of the method aim to organize direct search of the spheres sequences or the tree branches. The method is used to search for solutions of HPP and to construct promising starting points.
The branch and bound algorithm is adjusted to solve KP. To construct the solution tree, indexes of the binary variables are sorted taken into account hyperspheres having the equal radii. Each level of the tree corresponds to the radius of the certain subset of equal hyperspheres. The number of nodes of each level corresponds to the number of hyperspheres having the same radius. Each terminal node of the solution tree corresponds to a certain subset of hyperspheres from the given set. Pruning rules are based on the lower and upper bounds of the objective function value. The lower bound corresponds to the best currently found value of the objective. The starting value is set to 0 and dynamically updated while the solution tree constructing. The value corresponding to the best known packing factor is chosen as an upper bound. A node is considered as unpromising if it does not meet the corresponding lower and upper bounds.
The homothetic transformations method is based on allowing hyperspheres radii be variable.
where The homothetic transformations are also used to pack unequal hyperspheres (ODP) and form the core of the method of directed sorting of local extrema. Given a local minimum point of the problem (6), an auxiliary problem is formulated considering the hyperspheres radii as variables to define, while metric characteristics of the container are fixed [76]: ( 1) (10) is formed to maximize the volume (area) of the container. Solution of the problem (10) provides a starting point for the problem (6). The corresponding objective function value is at least as good as the previous local minimum. The process continues until there is no an improvement of the objective function.
The method is effective if the hyperspheres radii are uniformly distributed in the range between their minimum and the maximum values. The greater is the heterogeneity of the radii, the less useful is the method.
The multistart method is used together with all the methods of local and global optimization except for the branch and bound algorithm. The best local extremum is taken as an approximation to the global extremum.
To transform KP to ODP a container with variable homothetic ratio can be introduced. Thus, the methods developed for ODP can be applied for KP as well.

Basic strategies
After analyzing all the mathematical models proposed, six basic strategies for solving HPP are highlighted: three for ODP (5) (Figure 2) and three for KP (IIPP) (6) (Figure 3). These strategies depend on: a) objective function type, b) problem dimension, c) metric characteristics of hyperspheres (congruence, radii distribution and values), d) container's shape; e) prohibited zones in the container and/or minimal allowable distances. Strategy 1. ODP-SA-DNS-permutations-IPOPT is based on DNS for sphere permutations and is used to pack a small number of spheres (10-60) with unequal radii significantly different one from another. Consistent statistical optimization is applied to select promising sphere permutations. Using randomly generated sequences and the greedy algorithm, a set of extreme points of the feasible region is generated. The best extreme point and the corresponding permutation are chosen as the center of the neighborhood on the permutation set. The process continues decreasing neighborhood radius. A set of points with minimum values of the objective function are taken as starting points, and a set of local minima of the problem are calculated by the decomposition methods and IPOPT. The best local minimum is selected as an approximation to the global minimum of the problem. Strategy 2. ODP-SA-DNS-tree-IPOPT is another modification of DNS for packing 10-150 equal circles. A special solution tree that defines the extreme points of the feasible region is constructed by the greedy algorithm. Vertices of the tree are associated with extreme points (that can be obtained by the method of eliminating unknowns) and sequences of numbers. The Euclidean metric is introduced on the discrete set formed by the sequences. For directed search of extreme points the decremental neighborhood method is applied. The extreme points are, as in the previous modification, taken as starting points. With the decomposition method and IPOPT corresponding local minima are obtained. The best local minimum is considered as an approximation to the global minimum. Strategy 3. ODP-random-JA-IPOPT is used to pack 10-300 hyperspheres with unequal radii varying gradually from the smallest to the largest (ODP). The radii are supposed to be variable. Feasible starting points are constructed by the random packing and the residual optimization method. The corresponding local minima are calculated by the decomposition method using IPOPT. Using the auxiliary problems, hyperspheres radii are redistributed filling up the container volume (area). The directed search of local extrema is applied yielding an approximation to the global minimum of ODP. This approach allows to make use of discrete and continuous nature of HPP.   Strategy 5. IIPP-random / lattice-IPOPT is used to pack 10-5000 equal hyperspheres. It is based on the homothetic transformations method. First, a starting number of hyperspheres is chosen. To verify whether the hyperspheres are packed into the container an auxiliary problem is solved. Starting points are constructed either by the random packing, or the lattice packing, or the residual optimization depending on characteristics of the hyperspheres and the shape of the container. If a feasible packing is obtained, the number of hyperspheres increases by 1 and a new auxiliary problem is solved. If all starting points failed, then the number of hyperspheres obtained on the previous step is taken as an approximation to the global maximum. The strategy can be also applied to pack over 5000 hyperspheres. In this case, the block-coordinate descent method allows to calculate an approximation to a local maximum of the auxiliary problem. The duration of the process is limited by the computing resources available. For global optimization the block-coordinate descent method together with the multistart method is used. Strategy 6. IIPP-random-SA-Lagrange is suitable for packing more than 5,000 equal spheres. In Strategy 6 optimization is performed by the block-coordinate descent method. Feasible starting points for groups of variables are generated randomly. Descent directions are obtained by analyzing Lagrange multipliers. Iterations are terminated if the algorithm fails to generate a starting point for the current sphere.

Computational results
Numerical experiments were implemented for the known collections of benchmark instances presented in [28,55,80]. Also, new instances were proposed for various container shapes and for packing hyperspheres into a hypersphere ( 4 d  ). To solve linear and nonlinear programming problems the local solvers HOPDM [81], BPMPD [82], IPOPT [78] were used. To test the developed methods for IIPP ( 7 d  ) the global solver GAMS / BARON [83] was applied. We used Intel Core I5 750 processor (2.5 GHz), 6 Gb RAM.
The proposed approach for packing hyperspheres was tested on instances available at the specialized websites and/or published in the corresponding papers. For the problems HPP (ODP, KP, IIPP) the dimension varied from 2 d  (circles) to 2 4 d  (hyperspheres). The benchmark instances used for packing unequal circles into a minimal length rectangle (ODP) are available at the E. Specht website [55]. Strategy 3 was used to solve the problem. Two groups of instances were tested. The first consists of 25 instances with 20-300 circles. The comparison with the best-known results is shown in Table 1. Here the first column provides instance name, the second gives the number of circles, the third and the fourth indicate the minimal length obtained by the proposed approach and the best-known minimal length, correspondingly. Two last columns give the rectangle width and the packing factor.
The second group contains 128 instances with 25, 50, 75, 100 circles thus giving in total 153 instances in both groups. In 81 of 153 instances the best-known results were improved. Based on the numerical experiments we may conclude that the proposed technique is the most efficient for instances with 50-300 circles with radii evenly distributed in a given range. Figure 4 shows packing 300 circles in the rectangle of minimum length (Strategy 3). More examples are available in [55].
The other set of benchmark instances corresponds to packing equal circles in a circle of minimal radius given in [55] in the form of ODP. To perform experiments ODP was reduced to a sequence of IIPP solved in accordance with Strategy 5. The best-known results [55] were improved for some instances having from 1077 to 5000 circles. Table 2 presents corresponding results, while Figure 5 shows packing of 5000 circles in the optimized circular container.
Thus, Strategy 5 using lattice packings as starting points is effective for more than 1000 circles where the lattice packing structure is perturbated marginally.  Table 3. Here the first two columns provide the instance name and the number of spheres to pack. Two next columns define the radius r obtained in [28] and the objective value of * r found for the spherical container by Strategy 3. At the end of the Table 3 new results for the instances corresponding to 40 100 n   (not reported in [28]) are presented.   Packing for 100 spheres (Example ZHXF100) is shown in Figure 6. More results of packing spheres in containers of more complex geometries are illustrated in Figure 8. The results confirm viability of Strategy 3 for different container shapes. Data for these instances are provided in [80]. Some numerical results on packing hyperspheres for 4 d  without prohibited zones one can find in [75,76,80].  centered at (2, 3, 2,1, ...,1,1) and (3, 2, 2,1, ...,1,1) is given. The computational accuracy is 10 −6 . Table 4 presents the rounded values of the objective function. CPU is limited by 5 minutes.  is the hypersphere of radius 4 r  centered at (2,2,2) . The best objective value is * 5.2471 r  . Figure 10 provides illustrations for Examples 2 and 3. The spheres packed are colored in purple while the prohibited zone is colored in blue. Table 4. Packing hyperspheres into a hypersphere of minimum radius for Example 1 (Strategy 5).
Computational results have shown that increasing dimension of hyperspheres (for 3 d  ) leads to dramatically increasing the number of hyperspheres' contacts while decreasing the packing factor. This correlates the research [71].
Sometimes a "degeneration" of the problems with the small number of hyperspheres arises when increasing the hypersphere dimension. In the case the objective value is determined by the position of the largest hypersphere. Insignificant changes of the hyperspheres' positions with the smaller radii do not affect the objective function value. Increasing dimension of hyperspheres also makes harder finding the starting feasible solutions. Figure 11 shows the degenerated case for 2D spheres: the red sphere is the prohibited zone, the blue sphere is the largest sphere packed. The objective value (the spherical container radius) is determined by the position of the blue sphere. Therefore to avoid these situations the use of Strategy 3 (for 3 d  ) is recommended. Figure 11. An example of the problem degeneration in 2D.

Concluding remarks
In this paper smart technologies to solve HPP are proposed. The main factors affecting the computational time are the number of hyperspheres to be packed and their dimension.
Six basic strategies were proposed and tested for different classes of the hyperspheres packing problems. In many practical applications, complex container shapes with prohibited zones arise. To cope with this problem, it is necessary to state analytically corresponding placement conditions. The phi-function modeling approach was used to state non-intersection and containment for hyperspheres in a convex container with prohibited zones.
The other line for future research is developing techniques based on homothetic transformations of hyperspheres and the container. Also, creating new approaches for constructing feasible starting packing is very important in most packing iterative algorithms. An alternative way is studying the combinatorial structure of the packing problem [84] to carry out a directed search for local solutions in the configuration space of geometric objects [85].
An interesting direction for the future research is approximating complex objects or containers by simpler shapes [86], e.g. by spheres [87,88]. Most of subproblems arising in the proposed approach are large-scale optimization problems. Using aggregation and/or decomposition techniques based on the special structure of constraints [89][90][91][92] may reduce computational time and increase the quality of solutions.