Sum-of-products Evaluation Schemes with Fixed-Point arithmetic, and - - PowerPoint PPT Presentation

sum of products evaluation schemes with fixed point
SMART_READER_LITE
LIVE PREVIEW

Sum-of-products Evaluation Schemes with Fixed-Point arithmetic, and - - PowerPoint PPT Presentation

Context and Objectives Evaluation Schemes Conclusion Sum-of-products Evaluation Schemes with Fixed-Point arithmetic, and their application to IIR filter implementation Benoit Lopez - Thibault Hilaire - Laurent-St ephane Didier DASIP 2012


slide-1
SLIDE 1

Context and Objectives Evaluation Schemes Conclusion

Sum-of-products Evaluation Schemes with Fixed-Point arithmetic, and their application to IIR filter implementation

Benoit Lopez - Thibault Hilaire - Laurent-St´ ephane Didier DASIP 2012 October 24th 2012

1/34

slide-2
SLIDE 2

Context and Objectives Evaluation Schemes Conclusion

Outline

1

Context and Objectives

2

Evaluation Schemes Propagation Degradation errors

3

Conclusion

2/34

slide-3
SLIDE 3

Context and Objectives Evaluation Schemes Conclusion

On the first hand... A filter

h(z) = Pn

i=0 biz−i

1 + Pn

i=1 aiz−i

Signal Processing LTI filters: FIR or IIR Its transfer function: h(z) = n

i=0 biz−i

1 + n

i=1 aiz−i

Algorithmic relationship used to compute output(s) from input(s), for example: y(k) =

n

  • i=0

biu(k − i) −

n

  • i=1

aiy(k − i)

3/34

slide-4
SLIDE 4

Context and Objectives Evaluation Schemes Conclusion

On the other hand... A target

± . . . . . . 2

−γ

2 2

α−2

s β α γ

Hardware target (FPGA, ASIC) or software target (DSP,µC) Using fixed-point arithmetic for different reasons:

no FPU cost size power consumption etc.

4/34

slide-5
SLIDE 5

Context and Objectives Evaluation Schemes Conclusion

h(z) = Pn

i=0 biz−i

1 + Pn

i=1 aiz−i

± . . . . . . 2

−γ

2 2

α−2

s β α γ

Need Methodology and tools for the implementation of embedded filter algorithms in fixed-point arithmetic.

5/34

slide-6
SLIDE 6

Context and Objectives Evaluation Schemes Conclusion

h(z) = Pn

i=0 biz−i

1 + Pn

i=1 aiz−i

± . . . . . . 2

−γ

2 2

α−2

s β α γ

Need Methodology and tools for the implementation of embedded filter algorithms in fixed-point arithmetic. A first (and basic) methodology

1 Given a filter, choose an algorithm 2 Round the coefficients in fixed-point arithmetic 3 Implement algorithm 5/34

slide-7
SLIDE 7

Context and Objectives Evaluation Schemes Conclusion

h(z) = Pn

i=0 biz−i

1 + Pn

i=1 aiz−i

± . . . . . . 2

−γ

2 2

α−2

s β α γ

Need Methodology and tools for the implementation of embedded filter algorithms in fixed-point arithmetic. A first (and basic) methodology

1 Given a filter, choose an algorithm

There are many possible realizations

2 Round the coefficients in fixed-point arithmetic

What format? Depends on the choice of algorithm

3 Implement algorithm

Is there only one possible implementation?

5/34

slide-8
SLIDE 8

Context and Objectives Evaluation Schemes Conclusion

From filter to code

This work is a part of a global approach, transforming filters into fixed-point codes.

best fixed-point filter

pre- implementation measures

realization

  • ptimization

adequacy algorithm architecture fixed-point evaluation schemes

post- implementation measures

code generation realizations filters

6/34

slide-9
SLIDE 9

Context and Objectives Evaluation Schemes Conclusion

From filter to code

This work is a part of a global approach, transforming filters into fixed-point codes.

best fixed-point filter

pre- implementation measures

realization

  • ptimization

adequacy algorithm architecture fixed-point evaluation schemes

post- implementation measures

code generation realizations filters

6/34

slide-10
SLIDE 10

Context and Objectives Evaluation Schemes Conclusion

Objective: Given an algorithm and a target, find the optimal implementation. model the fixed-point algorithms model the hardware resources (computational units, etc.)

7/34

slide-11
SLIDE 11

Context and Objectives Evaluation Schemes Conclusion

Objective: Given an algorithm and a target, find the optimal implementation. model the fixed-point algorithms model the hardware resources (computational units, etc.) evaluate the degradation find one/some optimal implemented algorithm(s)

7/34

slide-12
SLIDE 12

Context and Objectives Evaluation Schemes Conclusion

Outline

1

Context and Objectives

2

Evaluation Schemes Propagation Degradation errors

3

Conclusion

8/34

slide-13
SLIDE 13

Context and Objectives Evaluation Schemes Conclusion

Evaluation Scheme

The only operations needed in filter algorithm computation are sum-of-products: S =

n

  • i=1

ci · xi where ci are known constants and xi variables (inputs, state or intermediate variables).

9/34

slide-14
SLIDE 14

Context and Objectives Evaluation Schemes Conclusion

Evaluation Scheme

The only operations needed in filter algorithm computation are sum-of-products: S =

n

  • i=1

ci · xi where ci are known constants and xi variables (inputs, state or intermediate variables). Question: How to implement S in fixed-point arithmetic?

9/34

slide-15
SLIDE 15

Context and Objectives Evaluation Schemes Conclusion

SoP Example

Let H be the transfer function of a butterworth filter of 4th−order:

H(z) = 0.00254078 + 0.01016312z−1 + 0.01524469z−2 + 0.01016312z−3 + 0.00254078z−4 1 − 2.64402372z−1 + 2.77901148z−2 − 1.34558515z−3 + 0.25124989z−4

10/34

slide-16
SLIDE 16

Context and Objectives Evaluation Schemes Conclusion

SoP Example

Let H be the transfer function of a butterworth filter of 4th−order:

H(z) = 0.00254078 + 0.01016312z−1 + 0.01524469z−2 + 0.01016312z−3 + 0.00254078z−4 1 − 2.64402372z−1 + 2.77901148z−2 − 1.34558515z−3 + 0.25124989z−4

Associated algorithm (Direct Form 1):

y(k) = 0.00254078 u(k) + 0.01016312z u(k − 1) + 0.01524469z u(k − 2) +0.01016312z u(k − 3) + 0.00254078 u(k − 4) + 2.64402372 y(k − 1) −2.77901148 y(k − 2) + 1.34558515 y(k − 3) − 0.25124989 y(k − 4)

10/34

slide-17
SLIDE 17

Context and Objectives Evaluation Schemes Conclusion

SoP Example

Let H be the transfer function of a butterworth filter of 4th−order:

H(z) = 0.00254078 + 0.01016312z−1 + 0.01524469z−2 + 0.01016312z−3 + 0.00254078z−4 1 − 2.64402372z−1 + 2.77901148z−2 − 1.34558515z−3 + 0.25124989z−4

Associated algorithm (integer part on 16 bits):

y(k) = 21313.60743424 × 2−23 × u(k) + 21313.60743424 × 2−21 × u(k − 1) +31970.43212288 × 2−21 × u(k − 2) + 21313.60743424 × 2−21 × u(k − 3) +21313.60743424 × 2−23 × u(k − 4) + 21659.84231424 × 2−13 × y(k − 1) −22765.66204416 × 2−13 × y(k − 2) + 22046.0670976 × 2−14 × y(k − 3) −16465.91279104 × 2−16 × y(k − 4)

10/34

slide-18
SLIDE 18

Context and Objectives Evaluation Schemes Conclusion

SoP Example

Let H be the transfer function of a butterworth filter of 4th−order:

H(z) = 0.00254078 + 0.01016312z−1 + 0.01524469z−2 + 0.01016312z−3 + 0.00254078z−4 1 − 2.64402372z−1 + 2.77901148z−2 − 1.34558515z−3 + 0.25124989z−4

Associated algorithm (round to nearest integer):

y(k) = 21314×2−23 × u(k)+21314×2−21 × u(k − 1) +31970×2−21 × u(k − 2)+21314×2−21 × u(k − 3) +21314×2−23 × u(k − 4)+21660×2−13 × y(k − 1) −22766×2−13 × y(k − 2)+22046×2−14 × y(k − 3) −16466×2−16 × y(k − 4)

10/34

slide-19
SLIDE 19

Context and Objectives Evaluation Schemes Conclusion

In software, addition is commutative but maybe not associative On 4 bits

0.5 =2 0•100 1.5 =2 01•10 4 =2 0100•

11/34

slide-20
SLIDE 20

Context and Objectives Evaluation Schemes Conclusion

In software, addition is commutative but maybe not associative On 4 bits

0.5 =2 0•100 1.5 =2 01•10 4 =2 0100• 4 + (0.5 + 1.5) =2 010•0 + 0100• =2 0110• =10 6 (4 + 0.5) + 1.5 =2 0100• + 01•10 =2 0101• =10 5

11/34

slide-21
SLIDE 21

Context and Objectives Evaluation Schemes Conclusion

In software, addition is commutative but maybe not associative On 4 bits

0.5 =2 0•100 1.5 =2 01•10 4 =2 0100• 4 + (0.5 + 1.5) =2 010•0 + 0100• =2 0110• =10 6 (4 + 0.5) + 1.5 =2 0100• + 01•10 =2 0101• =10 5

Consider the order is important.

+ + × c0 x0 × c1 x1 × c2 x2

(a)

+ + × c1 x1 × c0 x0 × c2 x2

(b)

+ + × c0 x0 × c2 x2 × c1 x1

(c)

(a) = (b) but (a) = (c)

11/34

slide-22
SLIDE 22

Context and Objectives Evaluation Schemes Conclusion

  • SoP

An evaluation scheme for a given SoP with a given order will be called ordered-Sum-of-Products (oSoP). Number of oSoPs For a given SoP of Nth−order, there are N−1

i=1 (2i − 1) possible

  • SoPs to consider.

12/34

slide-23
SLIDE 23

Context and Objectives Evaluation Schemes Conclusion

SoP Example

Let H be the transfer function of a butterworth filter of 4th−order:

H(z) = 0.00254078 + 0.01016312z−1 + 0.01524469z−2 + 0.01016312z−3 + 0.00254078z−4 1 − 2.64402372z−1 + 2.77901148z−2 − 1.34558515z−3 + 0.25124989z−4

Associated algorithm:

y(k) = 21314 × 2−23 × u(k) + 21314 × 2−21 × u(k − 1) +31970 × 2−21 × u(k − 2) + 21314 × 2−21 × u(k − 3) +21314 × 2−23 × u(k − 4) + 21660 × 2−13 × y(k − 1) −22766 × 2−13 × y(k − 2) + 22046 × 2−14 × y(k − 3) −16466 × 2−16 × y(k − 4)

There are here 9 multiplications, so we have 8

i=1(2i − 1) ≃ 2

millions oSoPs to consider. For example...

13/34

slide-24
SLIDE 24

Context and Objectives Evaluation Schemes Conclusion

  • SoP Example 1

S + + + + + + + ×

  • 16466

(16,0,16) y[n − 4] × 22046 (16,2,14) y[n − 3] × 21314 (16,-5,21) u[n − 3] × 31970 (16,-5,21) u[n − 2] × 21314 (16,-5,21) u[n − 1] × 21314 (16,-7,23) u[n − 4] × 21314 (16,-7,23) u[n] + × 21660 (16,3,13) y[n − 1] ×

  • 22766

(16,3,13) y[n − 2]

14/34

slide-25
SLIDE 25

Context and Objectives Evaluation Schemes Conclusion

  • SoP Example 2

S + + + + + ×

  • 16466

(16,0,16) y[n − 4] × 22046 (16,2,14) y[n − 3] × 21314 (16,-5,21) u[n − 1] × 31970 (16,-5,21) u[n − 2] + + + × 21660 (16,3,13) y[n − 1] ×

  • 22766

(16,3,13) y[n − 2] × 21314 (16,-5,21) u[n − 3] × 21314 (16,-7,23) u[n − 4] × 21314 (16,-7,23) u[n]

15/34

slide-26
SLIDE 26

Context and Objectives Evaluation Schemes Conclusion

  • SoP

An evaluation scheme for a given SoP with a given order will be called ordered-Sum-of-Products (oSoP). Number of oSoPs For a given SoP of Nth−order, there are N−1

i=1 (2i − 1) possible

  • SoPs to consider.

Question: Which oSoP should we choose? To do this, we developed a tool that: generates all possible oSoPs propagates fixed-point representation evaluates degradation errors

16/34

slide-27
SLIDE 27

Context and Objectives Evaluation Schemes Conclusion Propagation

Fixed-Point propagation

FPR Fixed-Point Representation (FPR) is defined as the tuple (wordlength, integer part, fractional part). What are the given (input) values? FPR of constants ci’s (given by wordlength and value of ci) FPR of variables xi’s Wordlength of adders and multipliers Final FPR

17/34

slide-28
SLIDE 28

Context and Objectives Evaluation Schemes Conclusion Propagation

S + + × 21660 (16,3,13) y[n − 1] (16,5,11) ( 3 2 , , ) ×

  • 22766

(16,3,13) y[n − 2] (16,5,11) ( 3 2 , , ) ( 3 2 , , ) + + + + × 31970 (16,-5,21) u[n − 2] (16,5,11) (32, , ) × 21314 (16,-5,21) u[n − 3] (16,5,11) (32, , ) (32, , ) + + × 21314 (16,-7,23) u[n] (16,5,11) (32, , ) × 21314 (16,-7,23) u[n − 4] (16,5,11) (32, , ) (32, , ) × 21314 (16,-5,21) u[n − 1] (16,5,11) (32, , ) (32, , ) ( 3 2 , , ) ×

  • 16466

(16,0,16) y[n − 4] (16,5,11) ( 3 2 , , ) (32, , ) × 22046 (16,2,14) y[n − 3] (16,5,11) (32, , ) ( 3 2 , , ) (32, , ) (16,9,7)

18/34

slide-29
SLIDE 29

Context and Objectives Evaluation Schemes Conclusion Propagation

Propagation Rules

From an oSoP parametrized with inputs FPR and wordlength, and using some propagation rules on adders and multipliers, we obtain a fully-parametrized oSoP. Form the previous oSoP, we have the following fully-parametrized

  • SoP...

19/34

slide-30
SLIDE 30

Context and Objectives Evaluation Schemes Conclusion Propagation

S >> 16 + + >> 1 × 21660 (16,3,13) y[n − 1] (16,5,11) (32,8,24) ( 3 2 , 9 , 2 3 ) >> 1 ×

  • 22766

(16,3,13) y[n − 2] (16,5,11) (32,8,24) ( 3 2 , 9 , 2 3 ) (32,9,23) >> 1 + >> 2 + >> 4 + >> 1 + >> 1 × 31970 (16,-5,21) u[n − 2] (16,5,11) (32,0,32) ( 3 2 , 1 , 3 1 ) >> 1 × 21314 (16,-5,21) u[n − 3] (16,5,11) (32,0,32) ( 3 2 , 1 , 3 1 ) (32,1,31) (32,2,30) >> 1 + >> 2 + >> 1 × 21314 (16,-7,23) u[n] (16,5,11) (32,-2,34) ( 3 2 ,

  • 1

, 3 3 ) >> 1 × 21314 (16,-7,23) u[n − 4] (16,5,11) (32,-2,34) ( 3 2 ,

  • 1

, 3 3 ) (32,-1,33) (32,1,31) >> 1 × 21314 (16,-5,21) u[n − 1] (16,5,11) (32,0,32) (32,1,31) (32,1,31) (32,2,30) (32,2,30) (32,6,26) >> 1 ×

  • 16466

(16,0,16) y[n − 4] (16,5,11) (32,5,27) (32,6,26) (32,6,26) ( 3 2 , 8 , 2 4 ) >> 1 × 22046 (16,2,14) y[n − 3] (16,5,11) (32,7,25) ( 3 2 , 8 , 2 4 ) (32,8,24) (32,9,23) (32,9,23) (16,9,7)

20/34

slide-31
SLIDE 31

Context and Objectives Evaluation Schemes Conclusion Degradation errors

Fixed-Point computational errors

Question: How to evaluate the numerical degradations? Fixed-Point implementation implies numerical degradations, which depend on: the way the computations are organized the fixed-point representation of all the signals used in the computations and the fixed-point representation of each step of the

  • perations

21/34

slide-32
SLIDE 32

Context and Objectives Evaluation Schemes Conclusion Degradation errors

Noise

Usually in signal processing, we see degradation errors like additive white uniformly distributed noises.

+

ξ(k) > > d Right-shift of d bits: For a right-shift of d bits, first (µ) and second (σ) order moment are: Truncation Best roundoff µ 2−γ−1(1 − 2−d) 2−γ−d−1 σ2

2−2γ 12 (1 − 2−2d) 2−2γ 12 (1 − 2−2d)

22/34

slide-33
SLIDE 33

Context and Objectives Evaluation Schemes Conclusion Degradation errors

S noise + + noise × 21660 y[n − 1] noise ×

  • 22766

y[n − 2] noise + noise + noise + noise + noise × 31970 u[n − 2] noise × 21314 u[n − 3] noise + noise + noise × 21314 u[n] noise × 21314 u[n − 4] noise × 21314 u[n − 1] noise ×

  • 16466

y[n − 4] noise × 22046 y[n − 3]

23/34

slide-34
SLIDE 34

Context and Objectives Evaluation Schemes Conclusion Degradation errors

S

noise

+ + × 21660 y[n − 1] ×

  • 22766

y[n − 2] + + + + × 31970 u[n − 2] × 21314 u[n − 3] + + × 21314 u[n] × 21314 u[n − 4] × 21314 u[n − 1] ×

  • 16466

y[n − 4] × 22046 y[n − 3]

24/34

slide-35
SLIDE 35

Context and Objectives Evaluation Schemes Conclusion Degradation errors

Noise

Different noises are added through the tree This cumulated noise can be viewed as output of a filter y(k) =

n

  • i=0

biu(k − i) −

n

  • i=1

aiy(k − i) y†(k) =

n

  • i=0

biu(k − i) −

n

  • i=1

aiy†(k − i) + ξ(k)

25/34

slide-36
SLIDE 36

Context and Objectives Evaluation Schemes Conclusion Degradation errors

Noise

Different noises are added through the tree This cumulated noise can be viewed as output of a filter e(k) y†(k) − y(k) = ξ(k) −

n

  • i=1

aie(k − i) hξ(z) = 1 1 +

n

  • i=1

aiz−i

25/34

slide-37
SLIDE 37

Context and Objectives Evaluation Schemes Conclusion Degradation errors

Noise

Different noises are added through the tree This cumulated noise can be viewed as output of a filter

+

u(k) y(k) ξ(k) e(k) y†(k) h hξ

25/34

slide-38
SLIDE 38

Context and Objectives Evaluation Schemes Conclusion

  • SoP choice

Once we have evaluated degradations through our oSoPs, we want to choose the best one. There are different criteria to choose oSoPs, like: noise

couple mean/variance

26/34

slide-39
SLIDE 39

Context and Objectives Evaluation Schemes Conclusion

  • SoP choice

Once we have evaluated degradations through our oSoPs, we want to choose the best one. There are different criteria to choose oSoPs, like: noise latency (infinite parallelism)

height of the syntax tree depending on the number of operators of the target

26/34

slide-40
SLIDE 40

Context and Objectives Evaluation Schemes Conclusion

  • SoP choice

Once we have evaluated degradations through our oSoPs, we want to choose the best one. There are different criteria to choose oSoPs, like: noise latency (infinite parallelism) adequacy with hardware target

number of operators wordlength of operators etc.

26/34

slide-41
SLIDE 41

Context and Objectives Evaluation Schemes Conclusion

  • SoP choice

Once we have evaluated degradations through our oSoPs, we want to choose the best one. There are different criteria to choose oSoPs, like: noise latency (infinite parallelism) adequacy with hardware target etc.

26/34

slide-42
SLIDE 42

Context and Objectives Evaluation Schemes Conclusion

Some options

Roundoff around multiplication Roundoff After Multiplication (RAM)

27/34

slide-43
SLIDE 43

Context and Objectives Evaluation Schemes Conclusion

S >> 16 + + >> 1 × 21660 (16,3,13) y[n − 1] (16,5,11) (32,8,24) ( 3 2 , 9 , 2 3 ) >> 1 ×

  • 22766

(16,3,13) y[n − 2] (16,5,11) (32,8,24) ( 3 2 , 9 , 2 3 ) (32,9,23) >> 1 + >> 2 + >> 4 + >> 1 + >> 1 × 31970 (16,-5,21) u[n − 2] (16,5,11) (32,0,32) ( 3 2 , 1 , 3 1 ) >> 1 × 21314 (16,-5,21) u[n − 3] (16,5,11) (32,0,32) ( 3 2 , 1 , 3 1 ) (32,1,31) (32,2,30) >> 1 + >> 2 + >> 1 × 21314 (16,-7,23) u[n] (16,5,11) (32,-2,34) ( 3 2 ,

  • 1

, 3 3 ) >> 1 × 21314 (16,-7,23) u[n − 4] (16,5,11) (32,-2,34) ( 3 2 ,

  • 1

, 3 3 ) (32,-1,33) (32,1,31) >> 1 × 21314 (16,-5,21) u[n − 1] (16,5,11) (32,0,32) (32,1,31) (32,1,31) (32,2,30) (32,2,30) (32,6,26) >> 1 ×

  • 16466

(16,0,16) y[n − 4] (16,5,11) (32,5,27) (32,6,26) (32,6,26) ( 3 2 , 8 , 2 4 ) >> 1 × 22046 (16,2,14) y[n − 3] (16,5,11) (32,7,25) ( 3 2 , 8 , 2 4 ) (32,8,24) (32,9,23) (32,9,23) (16,9,7)

28/34

slide-44
SLIDE 44

Context and Objectives Evaluation Schemes Conclusion

Some options

Roundoff around multiplication Roundoff After Multiplication (RAM) Roundoff Before Multiplication (RBM)

29/34

slide-45
SLIDE 45

Context and Objectives Evaluation Schemes Conclusion

S >> 16 + + × >> 1 21660 (16,3,13) (16,4,12) y[n − 1] (16,5,11) (32,9,23) × >> 1

  • 22766

(16,3,13) (16,4,12) y[n − 2] (16,5,11) (32,9,23) (32,9,23) >> 1 + >> 2 + >> 4 + >> 1 + × >> 1 31970 (16,-5,21) (16,-4,20) u[n − 2] (16,5,11) (32,1,31) × >> 1 21314 (16,-5,21) (16,-4,20) u[n − 3] (16,5,11) (32,1,31) (32,1,31) (32,2,30) >> 1 + >> 2 + × >> 1 21314 (16,-7,23) (16,-6,22) u[n] (16,5,11) (32,-1,33) × >> 1 21314 (16,-7,23) (16,-6,22) u[n − 4] (16,5,11) (32,-1,33) (32,-1,33) (32,1,31) × >> 1 21314 (16,-5,21) (16,-4,20) u[n − 1] (16,5,11) (32,1,31) (32,1,31) (32,2,30) (32,2,30) (32,6,26) × >> 1

  • 16466

(16,0,16) (16,1,15) y[n − 4] (16,5,11) (32,6,26) (32,6,26) ( 3 2 , 8 , 2 4 ) × >> 1 22046 (16,2,14) (16,3,13) y[n − 3] (16,5,11) ( 3 2 , 8 , 2 4 ) (32,8,24) (32,9,23) (32,9,23) (16,9,7)

30/34

slide-46
SLIDE 46

Context and Objectives Evaluation Schemes Conclusion

Some options

Roundoff around multiplication Roundoff After Multiplication (RAM) Roundoff Before Multiplication (RBM) Without shift Target may oblige us to have no shifts. So, all shifts needed are deferred to constants.

31/34

slide-47
SLIDE 47

Context and Objectives Evaluation Schemes Conclusion

Outline

1

Context and Objectives

2

Evaluation Schemes Propagation Degradation errors

3

Conclusion

32/34

slide-48
SLIDE 48

Context and Objectives Evaluation Schemes Conclusion

Conclusion

We try to answer the following question: For a given sum-of-products, how to produce optimal implementation? The main results are a tool and a methodology: Model the various evaluation schemes Propagate FPR through trees Evaluate degradations

33/34

slide-49
SLIDE 49

Context and Objectives Evaluation Schemes Conclusion

Conclusion

We try to answer the following question: For a given sum-of-products, how to produce optimal implementation? The main results are a tool and a methodology: Model the various evaluation schemes Propagate FPR through trees Evaluate degradations A lot of work still to be done: Propagate intervals rather than FPR Consider adequacy with hardware resources Consider a more realistic model for degradation errors Release the source code of our tool

33/34

slide-50
SLIDE 50

Context and Objectives Evaluation Schemes Conclusion

Thank You

Any Questions?

34/34