Automated Fast-Track Reconfiguration of Group Communication Systems - - PowerPoint PPT Presentation

automated fast track reconfiguration of group
SMART_READER_LITE
LIVE PREVIEW

Automated Fast-Track Reconfiguration of Group Communication Systems - - PowerPoint PPT Presentation

Automated Fast-Track Reconfiguration of Group Communication Systems Christoph Kreitz Department of Computer Science, Cornell University Ithaca, NY 14853 thanks to Jason Hickey, Mark Hayden, Bob Constable, and Robbert VanRenesse for valuable


slide-1
SLIDE 1

Automated Fast-Track Reconfiguration

  • f Group Communication Systems

Christoph Kreitz

Department of Computer Science, Cornell University Ithaca, NY 14853

thanks to Jason Hickey, Mark Hayden, Bob Constable, and Robbert VanRenesse for valuable contributions

slide-2
SLIDE 2

Automated Fast-Track Reconfiguration ... 1 Introduction

Secure Group Communication Systems

Safety-critical Network Applications Many Properties – Many Protocols

Modular Communication Toolkits — Protocol Layer Stacking

✁ ✁ ✂ ✂✄ ✄ ☎ ☎✆ ✆ ✝✞✝ ✝✞✝✟ ✟ ✠✞✠ ✠✞✠ ✡✞✡ ✡✞✡ ☛✞☛ ☛✞☛ ☛✞☛ ☞ ☞ ☞ ✌✞✌ ✌✞✌✍ ✍ ✎✞✎ ✎✞✎ ✎✞✎ ✏✞✏ ✏✞✏ ✏✞✏ ✑ ✑✒ ✒ ✓✞✓ ✓✞✓ ✔✞✔ ✔✞✔ ✕✞✕ ✕✞✕✖ ✖

FIFO Queues

LAYER LAYER

Message Event NET

SENDER RECEIVER

BOTTOM LAYER Protocol Stack LAYER LAYER LAYER LAYER BOTTOM LAYER Protocol Stack LAYER LAYER LAYER LAYER Header

slide-3
SLIDE 3

Automated Fast-Track Reconfiguration ... 2 Introduction

Why automated Fast-Track Reconfiguration?

  • Performance Cost of Modularity

– Redundant & extraneous code – Communication between modules – Message headers increase net load

  • Individual configurations can be optimized

– State assumptions about common events & states – Analyze path of common events – Rewrite code of protocol stack – Compress headers of common messages – Delay state updates . . . → Dramatic efficiency improvements possible

  • Reconfiguration by hand error-prone

⇓ Formal Reconfiguration Tools Necessary

slide-4
SLIDE 4

Automated Fast-Track Reconfiguration ... 3 Introduction

Simple Protocol Stack: Bottom||Mnak||Pt2pt

Trace path of downgoing Send events

Bottom (200 lines)

let name = Trace.source file ¨BOTTOM¨ type header = NoHdr | ... | ... type state = {mutable all alive : bool ; ... } let init (ls,vs) = {.........} let hdlrs s (ls,vs) {up out=up;upnm out=upnm; dn out=dn;dnlm out=dnlm;dnnm out=dnnm} = ... let up hdlr ev abv hdr = match getType ev, hdr with | (ECast|ESend), NoHdr -> if s.all alive

  • r not (s bottom.failed.(getPeer ev))

then up ev abv else free name ev | . . . and uplm hdlr ev hdr = ... and upnm hdlr ev = ... and dn hdlr ev abv = if s.enabled then match getType ev with | ECast

  • > dn ev abv NoHdr

| ESend

  • > dn ev abv NoHdr

| ECastUnrel

  • > dn (set name ev[Type ECast]) abv Unrel

| ESendUnrel

  • > dn (set name ev[Type ESend]) abv Unrel

| EMergeRequest -> dn ev abv MergeRequest | EMergeGranted -> dn ev abv MergeGranted | EMergeDenied

  • > dn ev abv MergeDenied

|

  • > failwith ¨bad down event[1]¨

else (free name ev) and dnnm hdlr ev = ... in {up in=up hdlr;uplm in=uplm hdlr;upnm in=upnm hdlr; dn in=dn hdlr;dnnm in=dnnm hdlr} let l args vs = Layer.hdr init hdlrs args vs Layer.install name (Layer.init l)

Mnak (350 lines)

let init ack rate (ls,vs) = {.........} let hdlrs s (ls,vs) { ......... } = ... let ... and dn hdlr ev abv = match getType ev with | ECast -> let iov = getIov ev in let buf = Arraye.get s.buf ls.rank in let seqno = Iq.hi buf in assert (Iq.opt insert check buf seqno) ; Arraye.set s.buf ls.rank (Iq.opt insert doread buf seqno iov abv) ; s.acct size <- s.acct size + getIovLen ev ; dn ev abv (Data seqno) |

  • > dn ev abv NoHdr

. . .

Pt2pt (250 lines)

let init (ls,vs) = {.........} let hdlrs s (ls,vs) { ......... } = ... let ... and dn hdlr ev abv = match getType ev with | ESend -> let dest = getPeer ev in if dest = ls.rank then ( eprintf ¨PT2PT:%s\nPT2PT:%s\n¨ (Event.to string ev) (View.string of full (ls,vs)); failwith ¨send to myself¨ ; ) ; let sends = Arraye.get s.sends dest in let seqno = Iq.hi sends in let iov = getIov ev in Arraye.set s.sends dest (Iq.add sends iov abv) ; dn ev abv (Data seqno) |

  • > dn ev abv NoHdr

. . .

slide-5
SLIDE 5

Automated Fast-Track Reconfiguration ... 4 Logical Programming Environment

Link Ensemble Group Communication Toolkit with NuPRL Proof/Program Development System

ENSEMBLE

RECONFIGURED FAST & SECURE

  • f

ENSEMBLE

SIMULATED

Programming Environment

OCaml

Deductive System

NuPRL / TYPE THEORY PROOF OPTIMIZE TRANSFORM EXPORT ENSEMBLE PROOF

RECONFIGURATION

IMPORT ENSEMBLE VERIFY SPECIFICATION

“Logical Programming Environment”

slide-6
SLIDE 6

Automated Fast-Track Reconfiguration ... 5 Logical Programming Environment

Logical Programming Environment: Existing Results

ENSEMBLE

SIMULATED

Programming Environment

OCaml

Deductive System

NuPRL / TYPE THEORY ENSEMBLE

RECONFIGURED

  • f

FAST & SECURE

PROOF OPTIMIZE TRANSFORM IMPORT ENSEMBLE SPECIFICATION EXPORT ENSEMBLE PROOF

RECONFIGURATION

VERIFY

√ Type-theoretical semantics for Ocaml subset √ NuPRL-terms displayed in Ocaml syntax √ Automatic import/export of Ocaml-code into NuPRL √ Ocaml libraries / Ensemble code available in NuPRL

ENSEMBLE

SIMULATED

Programming Environment

OCaml

Deductive System

NuPRL / TYPE THEORY

RECONFIGURED FAST & SECURE

  • f

PROOF OPTIMIZE TRANSFORM VERIFY SPECIFICATION PROOF

RECONFIGURATION

IMPORT EXPORT ENSEMBLE ENSEMBLE ENSEMBLE

√ Programming Logic for Ocaml √ IOA-specification + Verification of Ensemble protocol layers

ENSEMBLE

SIMULATED

Programming Environment

OCaml

Deductive System

NuPRL / TYPE THEORY ENSEMBLE

RECONFIGURED FAST & SECURE

  • f

OPTIMIZE TRANSFORM PROOF SPECIFICATION ENSEMBLE PROOF

RECONFIGURATION

ENSEMBLE IMPORT VERIFY EXPORT

√ Symbolic evaluation rules for Ocaml (NuPRL tactics) √ General evaluation strategies

⇓ Formal reasoning on level of programming language

slide-7
SLIDE 7

Automated Fast-Track Reconfiguration ... 6 Logical Programming Environment

Architecture of Ensemble

✁ ✁ ✂ ✂✄ ✄ ☎ ☎✆ ✆ ✝✞✝ ✝✞✝✟ ✟ ✠✞✠ ✠✞✠ ✡✞✡ ✡✞✡ ☛✞☛ ☛✞☛ ☛✞☛ ☞ ☞ ☞ ✌✞✌ ✌✞✌✍ ✍ ✎✞✎ ✎✞✎ ✎✞✎ ✏✞✏ ✏✞✏ ✏✞✏ ✑ ✑✒ ✒ ✓✞✓ ✓✞✓ ✔✞✔ ✔✞✔ ✕✞✕ ✕✞✕✖ ✖

FIFO Queues

LAYER LAYER

Message Event NET

SENDER RECEIVER

BOTTOM LAYER Protocol Stack LAYER LAYER LAYER LAYER BOTTOM LAYER Protocol Stack LAYER LAYER LAYER LAYER Header

slide-8
SLIDE 8

Automated Fast-Track Reconfiguration ... 7 Layer Reconfiguration

Tactic-based Layer Reconfiguration

  • Interactive reconfiguration

– System provides formal abbreviation for reconfiguration goal

RECONFIGURE LAYER l FOR EVENT event AND STATE sl ASSUMING assumptions

– ‘User’ states assumptions about common case – ‘User’ guides macro steps and decides when to stop

  • Basic program transformation steps

(Nuprl tactics)

– Red: symbolic evaluation / function inlining (outermost or user-controlled) based on evaluation tactics for Ocaml – UseHyp: Context-dependent simplification (equality resoning) – RedLayerStructure: search-free evaluation of common layer structure based on β-/η-reduction and logical lemmata (e.g. distributive laws)

slide-9
SLIDE 9

Automated Fast-Track Reconfiguration ... 8 Layer Reconfiguration

Reconfiguration of the Bottom Layer

⊢ RECONFIGURE LAYER Bottom FOR EVENT UpM(ev, Full(NoHdr, hdr)) AND STATE s bottom ASSUMING getType ev = ECast

∧ s bottom.failed.(getPeer ev) = false

by RedLayerStructure ASSUME

  • 1. getType ev = ECast
  • 2. s bottom.failed.(getPeer ev) = false

⊢ (match (getType ev, NoHdr) with ((ECast | ESend), NoHdr)

  • > ......

| (ECast, Unrel)

  • > ......

| (ESend, Unrel)

  • > ......

| ( , MergeRequest)

  • > ......

| ( , MergeGranted)

  • > ......

| ( , MergeDenied)

  • > ......

|

  • > ......

) (s bottom, Fqueue.empty) by UseHyp 1 ⊢ (if s bottom.all alive or (not (s bottom.failed.(getPeer ev))) then fun ((s, q))

  • > (s, Fqueue.add UpM(ev, hdr) q)

else free name ev ) (s bottom, Fqueue.empty) by UseHyp 2 ⊢ (s bottom,[:UpM(ev,hdr):]) by DONE

slide-10
SLIDE 10

Automated Fast-Track Reconfiguration ... 9 Layer Reconfiguration

Reconfiguration Theorems for Individual Layers Verify reconfigured code ≡ original code

  • Formal abbreviation

RECONFIGURE LAYER l FOR EVENT event AND STATE sl ASSUMING assumptions YIELDS EVENTS [:out-events:] AND STATE s′

l

  • Theorem created automatically

– Reconfiguration provides proof goal – Proof mirrors reconfiguration steps (no search, succeeds always)

  • Fixed set of theorems for each Ensemble release

– Common events: up- & downgoing messages, sending & broadcasting – Common state characterized by Ensemble system developer → Abstract knowledge base of a priori reconfigurations

slide-11
SLIDE 11

Automated Fast-Track Reconfiguration ... 10 Stack Reconfiguration

Theorem-based Stack Reconfiguration

Tactics alone too slow (many steps / large terms) Most layers do not affect common messages

  • Prove theorems about composition of reconfigurations

– For up/down-going, linear/bouncing/splitting traces – (Higher-order) statement obvious

RECONFIGURING LAYER Upper FOR EVENT DnM(ev,hdr) AND STATE s u YIELDS EVENTS [:DnM(ev,hdr1):] AND STATE s1 u

∧ RECONFIGURING LAYER Lower

FOR EVENT DnM(ev,hdr1) AND STATE s l YIELDS EVENTS [:DnM(ev,hdr2):] AND STATE s1 l ⇒ RECONFIGURING LAYER Upper || Lower FOR EVENT DnM(ev,hdr) AND STATE (s u,s l) YIELDS EVENTS [:DnM(ev,hdr2):] AND STATE (s1 u,s1 l)

– Proof involves Ensemble’s code for composition

  • Create & prove reconfiguration theorem for stack

– Apply composition theorems to individual layer reconfiguration theorems

slide-12
SLIDE 12

Automated Fast-Track Reconfiguration ... 11 Stack Reconfiguration

Reconfiguration Methodology: Composing Theorems

✂ ✄ ☎ ✆ ✝ ☎ ✞ ✁ ✂ ☎ ✝ ✟ ☎ ✂ ✞ ✂ ✠ ✂ ✁ ✡ ☛ ☞ ✌ ✍ ✎ ✏ ✑ ✂ ✑ ✠
✒ ✁ ✂ ✓ ✁ ✂ ✔ ☎
✕ ✁ ✖ ✞ ✗ ✍ ✘
✂ ✞ ✙ ✚ ✂ ☎ ✝ ☞ ✂ ☎ ✝ ✞ ✂ ✠ ✂ ✁ ✡ ☛ ✑ ✏
✂ ✞ ✛ ✚ ✟ ☎ ✂ ☞ ✟ ☎ ✂ ✞ ✂ ✠ ✂ ✁ ✡ ☛ ✑ ✏
☎ ✝ ✌ ✞ ✙ ✚ ✞ ✛ ✘ ✌ ✁ ✆ ✑ ✂ ✚ ✆ ✑ ✜
☞ ✢ ✣ ✤ ✁ ✤ ✁ ✗
☎ ✝ ✌ ☛ ✤ ✏ ✌ ✌ ✞ ✙ ✚ ✞ ✛ ✘ ✚ ✁ ✆ ✑ ✂ ✘ ✆ ✑ ✜
✡ ✥ ✦ ✆ ✠ ✂ ✄ ✓ ✁ ✡ ✔ ✑ ✂ ✓ ✧ ★ ✝ ✩ ✌ ✁ ✡ ✚ ✆ ✞ ✪ ✘ ✥ ✦
✂ ✞ ✙ ✚ ✁ ✡ ✞ ☞ ✂ ☎ ✝ ✌ ✞ ✙ ✚ ★ ✝ ✩ ✌ ✁ ✡ ✚ ✆ ✞ ✪ ✘ ✘ ✑ ✏
✂ ✌ ✁ ✆ ✑ ✂ ✚ ✆ ✑ ✜
☞ ✞ ✝
✂ ✫ ✂ ☎ ✝ ✌ ✁ ✆ ✑ ✂ ✚ ✆ ✑ ✜
✁ ✡ ✞ ✑ ✏ ✌ ✌ ✌ ✞ ✙ ✚ ✞ ✛ ✘ ✚ ✁ ✆ ✑ ✂ ✘ ✚ ✆ ✑ ✜
✧ ✬ ✏ ✩ ✌ ✁ ✡ ✚ ✆ ✞ ✪ ✘ ✥ ✦
✂ ✞ ✛ ✚ ✁ ✡ ✞ ☞ ✟ ☎ ✂ ✌ ✞ ✛ ✚ ✬ ✏ ✩ ✌ ✁ ✡ ✚ ✆ ✞ ✪ ✘ ✘ ✑ ✏
✂ ✌ ✁ ✆ ✑ ✂ ✚ ✆ ✑ ✜
☞ ✞ ✝
✂ ✫ ✟ ☎ ✂ ✌ ✁ ✆ ✑ ✂ ✚ ✆ ✑ ✜
✁ ✡ ✞ ✑ ✏ ✌ ✌ ✌ ✞ ✙ ✚ ✞ ✛ ✘ ✚ ✁ ✆ ✑ ✂ ✘ ✚ ✆ ✑ ✜
✘ ✌ ✌ ✞ ✙ ✚ ✞ ✛ ✘ ✚ ✁ ✆ ✑ ✂ ✘ ✆ ✑ ✜
✏ ✌ ✍ ✭ ✤ ✂ ✁ ✖ ✓ ✠ ✏ ✜
✖ ✂ ✠ ✮ ✁ ✞ ✠ ✞ ✑ ✏ ✪
✁ ✡ ✁ ✏ ✂ ✠ ✏ ✜ ✂ ✓ ✁ ✏ ✝ ✠ ✞ ✞ ✁ ✞ ✑ ✂ ✂ ☎ ✍ ✠ ✝ ✝ ✖ ☎ ✝ ✖ ✑ ✠ ✂ ✁
✕ ✁ ✖ ✠ ✏ ✜ ✂ ✓ ✁ ✏ ✞ ✝
✂ ✞ ✂ ✓ ✁ ✁ ✆ ✑ ✂ ✂ ✁ ✜ ✁ ✡ ✁ ✏ ✂ ✞ ✗ ✍ ✘
✂ ✓ ✜
☞ ☛ ✤ ✏ ✄ ✂ ✑ ☎ ✏ ✧ ✌ ✌ ✞ ✙ ✚ ✞ ✛ ✘ ✚ ✬ ✏ ✩ ✌ ✁ ✡ ✚ ✆ ✞ ✪ ✘ ✘ ✥ ✦
✂ ✞ ✙ ✚ ✁ ✆ ✑ ✂ ✂ ✁ ✜ ☞ ✂ ☎ ✝ ✌ ✞ ✙ ✚ ✬ ✏ ✩ ✌ ✁ ✡ ✚ ✆ ✞ ✪ ✘ ✘ ✑ ✏
✂ ✌ ✁ ✆ ✑ ✂ ✚ ✆ ✑ ✜
☞ ✞ ✝
✂ ✫ ✂ ☎ ✝ ✌ ✢ ✣ ✤ ✁ ✤ ✁ ✗ ✁ ✆ ✝ ✂ ✕ ✚ ✢ ✣ ✤ ✁ ✤ ✁ ✗ ✁ ✆ ✝ ✂ ✕ ✘ ✁ ✆ ✑ ✂ ✂ ✁ ✜ ✑ ✏
☎ ✝ ✌ ✞ ✙ ✚ ✞ ✛ ✘ ✌ ✁ ✆ ✑ ✂ ✚ ✆ ✑ ✜
✧ ✌ ✌ ✞ ✙ ✚ ✞ ✛ ✘ ✚ ★ ✝ ✩ ✌ ✁ ✡ ✚ ✆ ✞ ✪ ✘ ✘ ✥ ✦
✂ ✞ ✛ ✚ ✁ ✆ ✑ ✂ ✂ ✁ ✜ ☞ ✟ ☎ ✂ ✌ ✞ ✛ ✚ ★ ✝ ✩ ✌ ✁ ✡ ✚ ✆ ✞ ✪ ✘ ✘ ✑ ✏
✂ ✌ ✁ ✆ ✑ ✂ ✚ ✆ ✑ ✜
☞ ✞ ✝
✂ ✫ ✟ ☎ ✂ ✌ ✢ ✣ ✤ ✁ ✤ ✁ ✗ ✁ ✆ ✝ ✂ ✕ ✚ ✢ ✣ ✤ ✁ ✤ ✁ ✗ ✁ ✆ ✝ ✂ ✕ ✘ ✁ ✆ ✑ ✂ ✂ ✁ ✜ ✑ ✏
☎ ✝ ✌ ✞ ✙ ✚ ✞ ✛ ✘ ✌ ✁ ✆ ✑ ✂ ✚ ✆ ✑ ✜
✑ ✏ ✌ ✌ ✞ ✙ ✚ ✞ ✛ ✘ ✚ ✓ ✜
✘ ✯ ✰ ✱ ✲ ✳ ✱ ✴ ✱ ✵ ✶ ✷ ✴ ✱ ✵ ✱ ✰ ✸ ✯ ✴ ✹ ✺ ✴ ✻ ✼ ✯ ✰ ✱ ✽ ✰ ✾ ✵ ✿ ✯ ✱ ✴ ✱ ✵ ✶ ✷ ✼ ❀ ❁ ✵ ✳ ❂ ✴ ❃ ✶ ✲ ❂ ✳ ❁ ✰ ✴ ✴ ✰ ❄ ✳ ✵ ❅ ✽ ✸ ✶ ✲ ❂ ✳ ✲ ✴ ✰ ❆ ✱ ❇ ✳ ✱ ❈ ✯ ✸ ✶ ✲ ❂ ✳ ✲ ✴ ✰ ❉ ❅ ✵ ✷ ❈ ✯ ❊ ✲ ✱ ✱ ✲ ❂ ❈ ✯ ✻ ✻ ❋ ❅ ✯ ✰ ✱ ✿ ✳ ✰ ✺ ❂ ✴ ❃ ✸ ✴ ✹
✼ ✸ ✴ ✹ ❍
✰ ✿ ✰ ❈ ✵ ✽ ✽ ✸ ■ ✳ ❉ ✸ ✰ ✺ ✹ ❂ ✴ ❃ ✻ ✻
✵ ❅ ✽ ✽ ❅ ✰ ✺ ❂ ✴ ❃ ✸ ✴ ✹
✼ ✸ ✴ ✹ ❍
✰ ✿ ✰ ❈ ✵ ✽ ✽ ✸ ❏ ❅ ❉ ✸ ✰ ✺ ✹ ❂ ✴ ❃ ✻ ✻
✵ ❅ ✽ ✴ ✹ ❑▲✼ ✽ ✰ ✾ ✵ ✿ ✯ ✱ ✴ ✱ ✵ ✶ ✷ ✴ ✱ ✵ ✱ ✰ ✸ ✯ ✴ ✹ ✺ ✴ ✻ ❋ ❅ ✯ ✰ ✱ ❑ ✽ ✯ ❁ ✸ ✸ ✴ ✳ ✱ ❇ ✳ ✱ ✹ ✴ ❂ ❅ ✵ ✷ ✹ ✴ ▼ ✲ ✱ ✱ ✲ ❂ ✻ ✹ ✰ ✺ ✰ ❅ ✱ ✻ ✼ ❂ ✵ ✱ ✶ ❑ ✰ ✺ ✰ ❅ ✱ ✹ ✸ ❃ ✰ ✱ ◆ ❖ ✳ ✰ ✰ ✺ ✰ ❅ ✱ ✻ ❀ ❋ ✱ ❑ P ✸ ❏ ❅ ❉ ✸ ✰ ✺ ✹ ❂ ✴ ❃ ✻ ✹ ◗ ❘ ✰ ❅ ✽ ✻ ❙ ❋ ✾ ❃ ✰ ✱ ❆ ✰ ✰ ❁ ✰ ✺ ❚ ❙ ✯ ✴ ❈ ❁ ✵ ❅ ✷ ❯ ✴ ▼ ✲ ✱ ✱ ✲ ❂ ❈ ✰ ❅ ✵ ▼ ✯ ✰ ✽ ✱ ❑ ✰ ❅ ✴ ✳ ✱ ❇ ✳ ✱ ❈ ✴ ✰ ❅ ✽ ✴ ❈ ✸ ❃ ✰ ✱ ❆ ✰ ✰ ❁ ✰ ✺ ✻ ❚ ❱
✵ ✽ ✽ ✴ ✳ ✱ ❇ ✳ ✱ ❈ ✴ ✰ ❅ ✽ ✴ ❈ ✸ ❃ ✰ ✱ ❆ ✰ ✰ ❁ ✰ ✺ ✻ ✸ ❃ ✰ ✱ ❱ ✲ ✺ ✰ ✺ ✻ ❂ ✴ ❃ ❲ ✽ ❅ ✰ ✺ ✸ ❳ ✳ ✱ ❘ ✰ ❅ ✽ ✸ ❱
❑ ❋ ✴ ✳ ✱ ❇ ✳ ✱ ❈ ✴ ✰ ❅ ✽ ✴ ❈ ✸ ❃ ✰ ✱ ❆ ✰ ✰ ❁ ✰ ✺ ✻ ✹ ❂ ✴ ❃ ✻ ✻ ✰ ✯ ✴ ✰ ❑ ✸ ✸ ✴ ✳ ✱ ❇ ✳ ✱ ✹ ✴ ❂ ❅ ✵ ✷ ✹ ✴ ▼ ✲ ✱ ✱ ✲ ❂ ✻ ✹ ✰ ✺ ✰ ❅ ✱ ✻ P ✸ ❏ ❅ ❉ ✸ ✰ ✺ ✹ ❂ ✴ ❃ ✻ ✹ ◗ ❨ ✵ ✴ ✱ ✻ ❙ ❋ ✾ ✴ ▼ ✲ ✱ ✱ ✲ ❂ ❈ ✰ ❅ ✵ ▼ ✯ ✰ ✽ ✱ ❑ ✰ ❅ ✴ ❂ ❅ ✵ ✷ ❈ ▼ ✿ ✾ ❈ ✸ ✯ ✴ ❈ ❁ ✵ ❅ ✷ ✻ ❚ ❱
✲ ✳ ✱ ❋ ❅ ✴ ✰ ❁ ✱ ✽ ✲ ❁ ✰ ✵ ✽ ✴ ❂ ❅ ✵ ✷ ❈ ▼ ✿ ✾ ❈ ✸ ✯ ✴ ❈ ❁ ✵ ❅ ✷ ✻ ✸ ❱
❑ ❋ ✴ ❂ ❅ ✵ ✷ ❈ ▼ ✿ ✾ ❈ ✸ ✯ ✴ ❈ ❁ ✵ ❅ ✷ ✻ ✻ ✰ ✺ ❈ ❋ ✲ ✺ ✸ ❍ ✿ ✯ ✯ ✸ ❩ ✲ ❬ ✽ ❁ ✹ ❂ ✴ ❃ ✻ ✻ ❲ ✽ ❅ ✰ ✺ ✸ ❳ ✳ ✱ ❨ ✵ ✴ ✱ ✸ ❱
❑ ❋ ✴ ❂ ❅ ✵ ✷ ❈ ▼ ✿ ✾ ❈ ✸ ✯ ✴ ❈ ❁ ✵ ❅ ✷ ✻ ✹ ❂ ✴ ❃ ✻ ✻ ✰ ✯ ✴ ✰ ❑ ✸ ✸ ✴ ✳ ✱ ❇ ✳ ✱ ✹ ✴ ❂ ❅ ✵ ✷ ✹ ✴ ▼ ✲ ✱ ✱ ✲ ❂ ✻ ✹ ✰ ✺ ✰ ❅ ✱ ✻ P ✸ ■ ✳ ❉ ✸ ✰ ✺ ✹ ❳ ✳ ✱ ❘ ✰ ❅ ✽ ✸ ✴ ✰
✲ ✹ ❂ ✴ ❃ ✻ ✻ ✹ ◗ ❘ ✰ ❅ ✽ ✻ ❙ ❋ ✾ ❱
✲ ✳ ✱ ✿ ✳ ✽ ✵ ✱ ✰ ✶ ❑ ✰ ✶ ✷ ✴ ✳ ✱ ❇ ✳ ✱ ❈ ❁ ✰ ✶ ✺ ✴ ❈ ✸ ❃ ✰ ✱ ❆ ✰ ✰ ❁ ✰ ✺ ✻ ✴ ✰
✲ ❯ ❅ ✲ ✱ ✴ ▼ ✲ ✱ ✱ ✲ ❂ ❈ ✾ ✵ ❋ ✯ ✰ ✽ ❈ ✸ ❃ ✰ ✱ ❆ ✰ ✰ ❁ ✰ ✺ ✻ ✱ ❑ ✰ ❅ ✴ ✳ ✱ ❇ ✳ ✱ ❈ ❁ ✰ ✶ ✺ ✴ ❈ ✸ ❃ ✰ ✱ ❆ ✰ ✰ ❁ ✰ ✺ ✻ ❚ ❱
✲ ✳ ✱ ✿ ✳ ✽ ✵ ✱ ✰ ✿ ✳ ✽ ✵ ✱ ✰ ✴ ✳ ✱ ❇ ✳ ✱ ❈ ❁ ✰ ✶ ✺ ✴ ❈ ✸ ❃ ✰ ✱ ❆ ✰ ✰ ❁ ✰ ✺ ✻ ✴ ✰
✲ ❲ ✿ ✳ ✰ ✺ ❂ ✴ ❃ ✰ ✯ ✴ ✰ ❑ ✸ ✸ ✴ ✳ ✱ ❇ ✳ ✱ ✹ ✴ ❂ ❅ ✵ ✷ ✹ ✴ ▼ ✲ ✱ ✱ ✲ ❂ ✻ ✹ ✰ ✺ ✰ ❅ ✱ ✻ P ✸ ■ ✳ ❉ ✸ ✰ ✺ ✹ ❳ ✳ ✱ ❨ ✵ ✴ ✱ ✸ ✴ ✰
✲ ✹ ❂ ✴ ❃ ✻ ✻ ✹ ◗ ❨ ✵ ✴ ✱ ✻ ❙ ❋ ✾ ❱
✲ ✳ ✱ ❋ ❅ ✴ ✰ ❁ ✱ ✶ ❑ ✰ ✶ ✷ ✴ ❂ ❅ ✵ ✷ ❈ ▼ ✿ ✾ ❈ ✸ ❃ ✰ ✱ ❆ ✰ ✰ ❁ ✰ ✺ ✻ ✴ ✰
✲ ❯ ❅ ✲ ✱ ✴ ▼ ✲ ✱ ✱ ✲ ❂ ❈ ✾ ✵ ❋ ✯ ✰ ✽ ❈ ✸ ❃ ✰ ✱ ❆ ✰ ✰ ❁ ✰ ✺ ✻ ✱ ❑ ✰ ❅ ✴ ❂ ❅ ✵ ✷ ❈ ▼ ✿ ✾ ❈ ✸ ❃ ✰ ✱ ❆ ✰ ✰ ❁ ✰ ✺ ✻ ❚ ❱
✲ ✳ ✱ ❋ ❅ ✴ ✰ ❁ ✱ ✽ ✲ ❁ ✰ ✵ ✽ ✴ ❂ ❅ ✵ ✷ ❈ ▼ ✿ ✾ ❈ ✸ ❃ ✰ ✱ ❆ ✰ ✰ ❁ ✰ ✺ ✻ ✴ ✰
✲ ✰ ✺ ❈ ❋ ✲ ✺ ✸ ❍ ✿ ✯ ✯ ✸ ❩ ✲ ❬ ✽ ❁ ✹ ❂ ✴ ❃ ✻ ✻ ❲ ✿ ✳ ✰ ✺ ❂ ✴ ❃ ✰ ✯ ✴ ✰ ❑ ✸ ✸ ✴ ✳ ✱ ❇ ✳ ✱ ✹ ✴ ❂ ❅ ✵ ✷ ✹ ✴ ▼ ✲ ✱ ✱ ✲ ❂ ✻ ✹ ✰ ✺ ✰ ❅ ✱ ✻ P ❙ ❑ ✸ ✸ ✴ ✳ ✱ ❇ ✳ ✱ ✹ ✴ ❂ ❅ ✵ ✷ ✹ ✴ ▼ ✲ ✱ ✱ ✲ ❂ ✻ ✹ ✰ ✺ ✰ ❅ ✱ ❋ ❅ ✸ ✴ ✹ ❑ ✽ ✯ ❁ ✻

Reconfigured Stack Code Stack Composition Layers

❭ ❪ ❫ ❴ ❵ ❛ ❜ ❵ ❝ ❞ ❡ ❢ ❣ ❤ ✐ ❣ ❫ ❥ ❦ ❞ ❣ ❧ ♠ ❞ ♥ ♦ ❤ ♣ q ❜ ❵ ❛ ❜ ❵ r ❴ ❵ ❛ ❜ ❵ s q ❵ t ❵ ❞ s ♣ ✉ q r ✈ ♦ ❞ ✇ s ✉ ❢ ❡ t ✉ s ♣ ❞ ♠ r ❥ ♠ ❞ ❣ ❵ s ❵ s ♣ ① q ② r ❫ ❞ q q t ② ❞ q s ❝ ❥ ③ ④ ⑤ ⑥ ⑦ ⑧ ⑨ ❝ ⑦ ⑤ ⑧ ⑩ ❶ ❷ ❥ ❝ ❴ ❵ ❛ ❜ ❵ ⑥ ④ ❝ ❥ ✈ ❥ ⑤ ❭ ✐ ❣ ❫ ❸ ❞ ♠ ❹ ① q ② ❺ ❶ ⑤ ✐ ❦ ❭ ❶ ❭ ❥ q ❜ ❵ ❛ ❜ ❵ ❶ ❦ ❦ ⑨ ❫ ⑦ ⑤ ⑧ ② ❞ ❵ ❭ ❻ ❜ ❞ ❞ ♠ ❼ ❥ ❦ ❞ ❣ ❧ ❽ ② ❞ ❵ ❴ ❞ ❞ ♥ ❞ ♠ ❾❿ ✉ q s ♥ t ❣ ➀ ❷ ⑦ ❥ ⑩ ✐ ❦ ❥ ✈ ❥ ⑤ ❭ ❦ ➁ r ✐ ❣ ❫ ❸ ❞ ♠ ❹ ⑥ ➂ ✉ ✉ ❸ ✐ t ❵ t ❸ ⑦ ➃ s ➄ ♦ q ❜ ❵ ❛ ❜ ❵ s q ❞ ❣ ❧ q s ❸ ② ❞ ❵ ❴ ❞ ❞ ♥ ❞ ♠ ❺ ❺ ❹ ① q ② ❺ ❺ r ➅ ❶ ⑤ ✐ ❦ ❭ ❶ ❭ ❥ q ❜ ❵ ❛ ❜ ❵ ➁ s q ❞ ❣ ❧ q s ❸ ② ❞ ❵ ❴ ❞ ❞ ♥ ❞ ♠ ➆ ⑦ ➃ s t ❧ ❧ q ❜ ❵ ❛ ❜ ❵ s q ❞ ❣ ❧ q s ❸ ② ❞ ❵ ❴ ❞ ❞ ♥ ❞ ♠ ❺ ❸ ② ❞ ❵ ⑦ ❢ ♠ ❞ ♠ ❺ ① q ② ➅ ➇ ➈ ➉ ➊ ➋ ➌ ➍ ➋ ➎ ➏ ➐ ➑ ➒ ➓ ➔ ➒ ➉ → ➣ ➏ ➒ ↔ ↕ ➏ ➙ ➛ ➓ ➜ ➝ ➍ ➋ ➌ ➍ ➋ ➞ ➊ ➋ ➌ ➍ ➋ ➟ ➝ ➋ ➠ ➋ ➏ ➟ ➜ ➡ ➝ ➞ ➢ ➛ ➏ ➤ ➟ ➡ ➑ ➐ ➠ ➡ ➟ ➜ ➏ ↕ ➞ → ↕ ➏ ➒ ➋ ➟ ➋ ➟ ➜ ➥ ➝ ➦ ➞ ➉ ➏ ➝ ➝ ➠ ➦ ➏ ➝ ➟ ➎ → ➧ ➨ ➩ ➫ ➭ ➯ ➲ ➎ ➭ ➩ ➯ ➳ ➵ ➸ → ➎ ➊ ➋ ➌ ➍ ➋ ➫ ➨ ➎ → ➢ → ➩ ➇ ➔ ➒ ➉ ➺ ➏ ↕ ➻ ➥ ➝ ➦ ➼ ➵ ➩ ➔ ➣ ➇ ➵ ➇ → ➝ ➍ ➋ ➌ ➍ ➋ ➵ ➣ ➣ ➲ ➉ ➭ ➩ ➯ ➦ ➏ ➋ ➇ ➽ ➍ ➏ ➏ ↕ ➾ → ➣ ➏ ➒ ↔ ➚ ➦ ➏ ➋ ➊ ➏ ➏ ➙ ➏ ↕ ➪➶ ➡ ➝ ➟ ➙ ➠ ➒ ➹ ➸ ➭ → ➳ ➔ ➣ → ➢ → ➩ ➇ ➣ ➘ ➞ ➔ ➒ ➉ ➺ ➏ ↕ ➻ ➫ ➴ ➡ ➡ ➺ ➔ ➠ ➋ ➠ ➺ ➭ ➷ ➟ ➬ ➛ ➝ ➍ ➋ ➌ ➍ ➋ ➟ ➝ ➏ ➒ ↔ ➝ ➟ ➺ ➦ ➏ ➋ ➊ ➏ ➏ ➙ ➏ ↕ ➼ ➼ ➻ ➥ ➝ ➦ ➼ ➼ ➞ ➮ ➵ ➩ ➔ ➣ ➇ ➵ ➇ → ➝ ➍ ➋ ➌ ➍ ➋ ➘ ➟ ➝ ➏ ➒ ↔ ➝ ➟ ➺ ➦ ➏ ➋ ➊ ➏ ➏ ➙ ➏ ↕ ➱ ➭ ➷ ➟ ➠ ↔ ↔ ➝ ➍ ➋ ➌ ➍ ➋ ➟ ➝ ➏ ➒ ↔ ➝ ➟ ➺ ➦ ➏ ➋ ➊ ➏ ➏ ➙ ➏ ↕ ➼ ➺ ➦ ➏ ➋ ➭ ➑ ↕ ➏ ↕ ➼ ➥ ➝ ➦ ➮ ✃ ❐ ❒ ❮ ❰ Ï Ð ❰ Ñ Ò Ó Ô Õ Ö × Õ ❒ Ø Ù Ò Õ Ú Û Ò Ü Ý Ö Þ ß Ð ❰ Ï Ð ❰ à ❮ ❰ Ï Ð ❰ á ß ❰ â ❰ Ò á Þ ã ß à ä Ý Ò å á ã Ô Ó â ã á Þ Ò Û à Ø Û Ò Õ ❰ á ❰ á Þ æ ß ç à ❒ Ò ß ß â ç Ò ß á Ñ Ø è é ê ë ì í î Ñ ì ê í ï ð ñ Ø Ñ ❮ ❰ Ï Ð ❰ ë é Ñ Ø ä Ø ê ✃ × Õ ❒ ò Ò Û ó æ ß ç ô ð ê × Ù ✃ ð ✃ Ø ß Ð ❰ Ï Ð ❰ ð Ù Ù î ❒ ì ê í ç Ò ❰ ✃ õ Ð Ò Ò Û ö Ø Ù Ò Õ Ú ÷ ç Ò ❰ ❮ Ò Ò Ü Ò Û øù ã ß á Ü â Õ ú ñ ì Ø ï × Ù Ø ä Ø ê ✃ Ù û à × Õ ❒ ò Ò Û ó ë ü ã ã ò × â ❰ â ò ì ý á þ Ý ß Ð ❰ Ï Ð ❰ á ß Ò Õ Ú ß á ò ç Ò ❰ ❮ Ò Ò Ü Ò Û ô ô ó æ ß ç ô ô à ÿ ð ê × Ù ✃ ð ✃ Ø ß Ð ❰ Ï Ð ❰ û á ß Ò Õ Ú ß á ò ç Ò ❰ ❮ Ò Ò Ü Ò Û
  • ì
ý á â Ú Ú ß Ð ❰ Ï Ð ❰ á ß Ò Õ Ú ß á ò ç Ò ❰ ❮ Ò Ò Ü Ò Û ô ò ç Ò ❰ ì Ô Û Ò Û ô æ ß ç ÿ ✁ ✂ ✄ ☎ ✆ ✝ ✞ ✆ ✟ ✠ ✡ ☛ ☞ ✌ ✍ ☞ ✄ ✎ ✏ ✠ ☞ ✑ ✒ ✠ ✓ ✔ ✌ ✕ ✖ ✞ ✆ ✝ ✞ ✆ ✗ ☎ ✆ ✝ ✞ ✆ ✘ ✖ ✆ ✙ ✆ ✠ ✘ ✕ ✚ ✖ ✗ ✛ ✔ ✠ ✜ ✘ ✚ ☛ ✡ ✙ ✚ ✘ ✕ ✠ ✒ ✗ ✎ ✒ ✠ ☞ ✆ ✘ ✆ ✘ ✕ ✢ ✖ ✣ ✗ ✄ ✠ ✖ ✖ ✙ ✣ ✠ ✖ ✘ ✟ ✎ ✤ ✥ ✦ ✧ ★ ✩ ✪ ✟ ★ ✦ ✩ ✫ ✬ ✭ ✎ ✟ ☎ ✆ ✝ ✞ ✆ ✧ ✥ ✟ ✎ ✛ ✎ ✦ ✁ ✍ ☞ ✄ ✮ ✠ ✒ ✯ ✢ ✖ ✣ ✰ ✬ ✦ ✍ ✏ ✁ ✬ ✁ ✎ ✖ ✞ ✆ ✝ ✞ ✆ ✬ ✏ ✏ ✪ ✄ ★ ✦ ✩ ✣ ✠ ✆ ✁ ✱ ✞ ✠ ✠ ✒ ✲ ✎ ✏ ✠ ☞ ✑ ✳ ✣ ✠ ✆ ☎ ✠ ✠ ✓ ✠ ✒ ✴✵ ✚ ✖ ✘ ✓ ✙ ☞ ✶ ✭ ★ ✎ ✫ ✍ ✏ ✎ ✛ ✎ ✦ ✁ ✏ ✷ ✗ ✍ ☞ ✄ ✮ ✠ ✒ ✯ ✧ ✸ ✚ ✚ ✮ ✍ ✙ ✆ ✙ ✮ ★ ✹ ✘ ✺ ✔ ✖ ✞ ✆ ✝ ✞ ✆ ✘ ✖ ✠ ☞ ✑ ✖ ✘ ✮ ✣ ✠ ✆ ☎ ✠ ✠ ✓ ✠ ✒ ✰ ✰ ✯ ✢ ✖ ✣ ✰ ✰ ✗ ✻ ✬ ✦ ✍ ✏ ✁ ✬ ✁ ✎ ✖ ✞ ✆ ✝ ✞ ✆ ✷ ✘ ✖ ✠ ☞ ✑ ✖ ✘ ✮ ✣ ✠ ✆ ☎ ✠ ✠ ✓ ✠ ✒ ✼ ★ ✹ ✘ ✙ ✑ ✑ ✖ ✞ ✆ ✝ ✞ ✆ ✘ ✖ ✠ ☞ ✑ ✖ ✘ ✮ ✣ ✠ ✆ ☎ ✠ ✠ ✓ ✠ ✒ ✰ ✮ ✣ ✠ ✆ ★ ☛ ✒ ✠ ✒ ✰ ✢ ✖ ✣ ✻ ✽ ✾ ✿ ❀ ❁ ❂ ❃ ❁ ❄ ❅ ❆ ❇ ❈ ❉ ❊ ❈ ✿ ❋
❈ ❍ ■ ❅ ❏ ❑ ❉ ▲ ▼ ❃ ❁ ❂ ❃ ❁ ◆ ❀ ❁ ❂ ❃ ❁ ❖ ▼ ❁ P ❁ ❅ ❖ ▲ ◗ ▼ ◆ ❘ ❑ ❅ ❙ ❖ ◗ ❇ ❆ P ◗ ❖ ▲ ❅ ■ ◆ ❋ ■ ❅ ❈ ❁ ❖ ❁ ❖ ▲ ❚ ▼ ❯ ◆ ✿ ❅ ▼ ▼ P ❯ ❅ ▼ ❖ ❄ ❋ ❱ ❲ ❳ ❨ ❩ ❬ ❭ ❄ ❩ ❳ ❬ ❪ ❫ ❴ ❋ ❄ ❀ ❁ ❂ ❃ ❁ ❨ ❲ ❄ ❋ ❘ ❋ ❳ ✽ ❊ ❈ ✿ ❵ ❅ ■ ❛ ❚ ▼ ❯ ❜ ❫ ❳ ❊
❫ ✽ ❋ ▼ ❃ ❁ ❂ ❃ ❁ ❫
✿ ❩ ❳ ❬ ❯ ❅ ❁ ✽ ❝ ❃ ❅ ❅ ■ ❞ ❋
❈ ❍ ❡ ❯ ❅ ❁ ❀ ❅ ❅ ❏ ❅ ■ ❢❣ ◗ ▼ ❖ ❏ P ❈ ❤ ❴ ❩ ❋ ❪ ❊
❘ ❋ ❳ ✽
◆ ❊ ❈ ✿ ❵ ❅ ■ ❛ ❨ ❥ ◗ ◗ ❵ ❊ P ❁ P ❵ ❩ ❦ ❖ ❧ ❑ ▼ ❃ ❁ ❂ ❃ ❁ ❖ ▼ ❅ ❈ ❍ ▼ ❖ ❵ ❯ ❅ ❁ ❀ ❅ ❅ ❏ ❅ ■ ❜ ❜ ❛ ❚ ▼ ❯ ❜ ❜ ◆ ♠ ❫ ❳ ❊
❫ ✽ ❋ ▼ ❃ ❁ ❂ ❃ ❁ ✐ ❖ ▼ ❅ ❈ ❍ ▼ ❖ ❵ ❯ ❅ ❁ ❀ ❅ ❅ ❏ ❅ ■ ♥ ❩ ❦ ❖ P ❍ ❍ ▼ ❃ ❁ ❂ ❃ ❁ ❖ ▼ ❅ ❈ ❍ ▼ ❖ ❵ ❯ ❅ ❁ ❀ ❅ ❅ ❏ ❅ ■ ❜ ❵ ❯ ❅ ❁ ❩ ❇ ■ ❅ ■ ❜ ❚ ▼ ❯ ♠ ♦ ♣ q r s t ✉ s ✈ ✇ ① ② ③ ④ ⑤ ③ q ⑥ ⑦ ✇ ③ ⑧ ⑨ ✇ ⑩ ❶ ④ ❷ ❸ ✉ s t ✉ s ❹ r s t ✉ s ❺ ❸ s ❻ s ✇ ❺ ❷ ❼ ❸ ❹ ❽ ❶ ✇ ❾ ❺ ❼ ② ① ❻ ❼ ❺ ❷ ✇ ⑨ ❹ ⑥ ⑨ ✇ ③ s ❺ s ❺ ❷ ❿ ❸ ➀ ❹ q ✇ ❸ ❸ ❻ ➀ ✇ ❸ ❺ ✈ ⑥ ➁ ➂ ➃ ➄ ➅ ➆ ➇ ✈ ➅ ➃ ➆ ➈ ➉ ➊ ⑥ ✈ r s t ✉ s ➄ ➂ ✈ ⑥ ❽ ⑥ ➃ ♦ ⑤ ③ q ➋ ✇ ⑨ ➌ ❿ ❸ ➀ ➍ ➉ ➃ ⑤ ⑦ ♦ ➉ ♦ ⑥ ❸ ✉ s t ✉ s ➉ ⑦ ⑦ ➇ q ➅ ➃ ➆ ➀ ✇ s ♦ ➎ ✉ ✇ ✇ ⑨ ➏ ⑥ ⑦ ✇ ③ ⑧ ➐ ➀ ✇ s r ✇ ✇ ⑩ ✇ ⑨ ➑➒ ❼ ❸ ❺ ⑩ ❻ ③ ➓ ➊ ➅ ⑥ ➈ ⑤ ⑦ ⑥ ❽ ⑥ ➃ ♦ ⑦ ➔ ❹ ⑤ ③ q ➋ ✇ ⑨ ➌ ➄ → ❼ ❼ ➋ ⑤ ❻ s ❻ ➋ ➅ ➣ ❺ ↔ ❶ ❸ ✉ s t ✉ s ❺ ❸ ✇ ③ ⑧ ❸ ❺ ➋ ➀ ✇ s r ✇ ✇ ⑩ ✇ ⑨ ➍ ➍ ➌ ❿ ❸ ➀ ➍ ➍ ❹ ↕ ➉ ➃ ⑤ ⑦ ♦ ➉ ♦ ⑥ ❸ ✉ s t ✉ s ➔ ❺ ❸ ✇ ③ ⑧ ❸ ❺ ➋ ➀ ✇ s r ✇ ✇ ⑩ ✇ ⑨ ➙ ➅ ➣ ❺ ❻ ⑧ ⑧ ❸ ✉ s t ✉ s ❺ ❸ ✇ ③ ⑧ ❸ ❺ ➋ ➀ ✇ s r ✇ ✇ ⑩ ✇ ⑨ ➍ ➋ ➀ ✇ s ➅ ② ⑨ ✇ ⑨ ➍ ❿ ❸ ➀ ↕ ➛ ➜ ➝ ➞ ➟ ➠ ➡ ➟ ➢ ➤ ➥ ➦ ➧ ➨ ➩ ➧ ➝ ➫ ➭ ➤ ➧ ➯ ➲ ➤ ➳ ➵ ➨ ➸ ➺ ➡ ➟ ➠ ➡ ➟ ➻ ➞ ➟ ➠ ➡ ➟ ➼ ➺ ➟ ➽ ➟ ➤ ➼ ➸ ➾ ➺ ➻ ➚ ➵ ➤ ➪ ➼ ➾ ➦ ➥ ➽ ➾ ➼ ➸ ➤ ➲ ➻ ➫ ➲ ➤ ➧ ➟ ➼ ➟ ➼ ➸ ➶ ➺ ➹ ➻ ➝ ➤ ➺ ➺ ➽ ➹ ➤ ➺ ➼ ➢ ➫ ➘ ➴ ➷ ➬ ➮ ➱ ✃ ➢ ➮ ➷ ➱ ❐ ❒ ❮ ➫ ➢ ➞ ➟ ➠ ➡ ➟ ➬ ➴ ➢ ➫ ➚ ➫ ➷ ➛ ➩ ➧ ➝ ❰ ➤ ➲ Ï ➶ ➺ ➹ Ð ❒ ➷ ➩ ➭ ➛ ❒ ➛ ➫ ➺ ➡ ➟ ➠ ➡ ➟ ❒ ➭ ➭ ✃ ➝ ➮ ➷ ➱ ➹ ➤ ➟ ➛ Ñ ➡ ➤ ➤ ➲ Ò ➫ ➭ ➤ ➧ ➯ Ó ➹ ➤ ➟ ➞ ➤ ➤ ➳ ➤ ➲ ÔÕ ➾ ➺ ➼ ➳ ➽ ➧ Ö ❮ ➮ ➫ ❐ ➩ ➭ ➫ ➚ ➫ ➷ ➛ ➭ × ➻ ➩ ➧ ➝ ❰ ➤ ➲ Ï ➬ Ø ➾ ➾ ❰ ➩ ➽ ➟ ➽ ❰ ➮ Ù ➼ Ú ➵ ➺ ➡ ➟ ➠ ➡ ➟ ➼ ➺ ➤ ➧ ➯ ➺ ➼ ❰ ➹ ➤ ➟ ➞ ➤ ➤ ➳ ➤ ➲ Ð Ð Ï ➶ ➺ ➹ Ð Ð ➻ Û ❒ ➷ ➩ ➭ ➛ ❒ ➛ ➫ ➺ ➡ ➟ ➠ ➡ ➟ × ➼ ➺ ➤ ➧ ➯ ➺ ➼ ❰ ➹ ➤ ➟ ➞ ➤ ➤ ➳ ➤ ➲ Ü ➮ Ù ➼ ➽ ➯ ➯ ➺ ➡ ➟ ➠ ➡ ➟ ➼ ➺ ➤ ➧ ➯ ➺ ➼ ❰ ➹ ➤ ➟ ➞ ➤ ➤ ➳ ➤ ➲ Ð ❰ ➹ ➤ ➟ ➮ ➦ ➲ ➤ ➲ Ð ➶ ➺ ➹ Û Ý Þ ß à á â ã á ä å æ ç è é ê è ß ë ì å è í î å ï ð é ñ ò ã á â ã á ó à á â ã á ô ò á õ á å ô ñ ö ò ó ÷ ð å ø ô ö ç æ õ ö ô ñ å î ó ë î å è á ô á ô ñ ù ò ú ó ß å ò ò õ ú å ò ô ä ë û ü ý þ ÿ
ä ÿ ý
✄ ☎ ë ä à á â ã á þ ü ä ë ÷ ë ý Ý ê è ß ✆ å î ✝ ù ò ú ✞ ✄ ý ê ì Ý ✄ Ý ë ò ã á â ã á ✄ ì ì ✁ ß ÿ ý
  • ú
å á Ý ✟ ã å å î ✠ ë ì å è í ✡ ú å á à å å ï å î ☛☞ ö ò ô ï õ è ✌ ☎ ÿ ë ✂ ê ì ë ÷ ë ý Ý ì ✍ ó ê è ß ✆ å î ✝ þ ✎ ö ö ✆ ê õ á õ ✆ ÿ ✏ ô ✑ ð ò ã á â ã á ô ò å è í ò ô ✆ ú å á à å å ï å î ✞ ✞ ✝ ù ò ú ✞ ✞ ó ✒ ✄ ý ê ì Ý ✄ Ý ë ò ã á â ã á ✍ ô ò å è í ò ô ✆ ú å á à å å ï å î ✓ ÿ ✏ ô õ í í ò ã á â ã á ô ò å è í ò ô ✆ ú å á à å å ï å î ✞ ✆ ú å á ÿ ç î å î ✞ ù ò ú ✒ ✔ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✖ ✔ ✕ ✗ ✘ ✙ ✚ ✛ ✘ ✜ ✢ ✘ ✗ ✗ ✜ ✣ ✤ ✜ ✕ ✖ ✔ ✕ ✘ ✥ ✦ ✧ ★ ✩ ✪ ✤ ✫ ✩ ✬ ✭ ✫ ✮ ✯ ✰ ✱ ✲ ✳ ✴ ✵ ✶ ✕ ✖ ✔ ✕ ✤ ★ ✯ ✷ ✸ ✷ ✰ ✯ ✪ ✹ ✷ ✫ ★ ✺ ✷ ✱ ✻ ✜ ✷ ✥ ✼ ✷ ✦ ✧ ✙ ★ ✽ ✽ ✰ ✩ ✦ ✾ ✫ ✱ ✙ ✰ ✱ ✰ ✿ ✿ ✰ ❀ ✴ ✵ ✳ ✕ ✖ ✔ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✖ ★ ❁ ✰ ✱ ✚ ✩ ✫ ✱ ✿ ★ ❁ ✰ ✱ ✜ ✫ ✮ ✰ ✩ ★ ❁ ✰ ✱ ❂ ✦ ✷ ❃ ★ ❁ ✰ ✱ ❄ ✷ ✰ ✼ ★ ❁ ✰ ✱ ❅ ✾ ✰ ✱ ✦ ★ ❁ ✰ ✱ ✘ ❁ ❁ ❃ ✢ ✷ ✱ ✦ ✸ ★ ❁ ✰ ✱ ❆ ✰ ✼ ✔ ✕ ✸ ✩ ★ ✺ ✘ ❁ ❁ ❃ ✢ ✷ ✱ ✦ ✸ ✕ ✖ ✔ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✖ ❃ ✰ ✦ ✱ ✫ ✺ ✰ ❇ ✚ ✩ ✫ ❈ ✰ ✣ ✿ ★ ✥ ✩ ❈ ✰ ✢ ✸ ✷ ❃ ✰ ❉ ✗ ✘ ✙ ✚ ✛ ✘ ✜ ✢ ✘ ✗ ✗ ✜ ❉ ✔ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✖ ✦ ✮ ❁ ✰ ✿ ✦ ✫ ✦ ✰ ❇ ❊ ✩ ✰ ❈ ✾ ✢ ❈ ✫ ✿ ✦❋✪ ✔ ✛ ★ ✾ ✰ ❈ ❃ ✣ ✦
✛ ★ ✾ ✰ ❈ ❃ ✣ ✦ ✱ ✫ ❈ ✦ ✷ ★ ✱ ✫ ✩ ✩ ✫ ✮ ✖ ✫ ✩ ✩ ✫ ✮ ■ ✩ ✰ ❈ ✾ ✢ ✿ ✰ ✱ ✯❋✪ ✔ ✛ ★ ✾ ✰ ❈ ❃ ✣ ✦
✛ ★ ✾ ✰ ❈ ❃ ✣ ✦ ✱ ✫ ❈ ✦ ✷ ★ ✱ ✫ ✩ ✩ ✫ ✮ ✖ ✫ ✩ ✩ ✫ ✮ ■ ✷ ✱ ✦ ✰ ✩ ✸ ✫ ❈ ✰ ✪ ✦ ■ ✿ ✰ ✱ ✯ ✢ ❏ ✺ ✷ ✦❋✪ ✿ ✰ ❑ ✱ ★ ✫ ✩ ✩ ✫ ✮ ■ ✿ ✰ ✱ ✯ ✢ ✩ ✰ ❈ ✾❋✪ ✿ ✰ ❑ ✱ ★ ✫ ✩ ✩ ✫ ✮ ■ ✺ ✥ ✦ ✫ ✽ ❃ ✰ ✻ ★ ✦ ✢ ✰ ❏ ❁ ✰ ❈ ✦ ✪ ✽ ★ ★ ❃ ■ ✺ ✥ ✦ ✫ ✽ ❃ ✰ ✿ ✰ ✱ ✯ ✢ ✰ ❏ ❁ ✰ ❈ ✦ ✪ ✿ ✰ ❑ ✱ ★ ✘ ✩ ✩ ✫ ✮ ✸ ✣ ✦ ■ ✺ ✥ ✦ ✫ ✽ ❃ ✰ ✧ ✫ ✱ ✯ ❃ ✰ ✩ ✿▲✪ ✛ ★ ✾ ✰ ❈ ❃ ✣ ✦ ✧ ✫ ✱ ✯ ❃ ✰ ✩ ✿ ■ ✺ ✥ ✦ ✫ ✽ ❃ ✰ ❃ ✰ ✫ ✾ ✷ ✱ ✻ ✪ ✽ ★ ★ ❃ ■ ✺ ✥ ✦ ✫ ✽ ❃ ✰ ✱ ✰ ❏ ✦ ✢ ✿ ✼ ✰ ✰ ❁ ✪ ✚ ✷ ✺ ✰ ✣ ✦ ■ ✺ ✥ ✦ ✫ ✽ ❃ ✰ ✽ ❃ ★ ❈ ✬ ✰ ✯▼✪ ✽ ❃ ★ ❈ ✬ ✰ ✯ ■ ✺ ✥ ✦ ✫ ✽ ❃ ✰ ✯ ✱ ✢ ✽ ❃ ★ ❈ ✬▲✪ ✽ ★ ★ ❃ ■ ✺ ✥ ✦ ✫ ✽ ❃ ✰ ✥ ❁ ✢ ✽ ❃ ★ ❈ ✬ ✢ ★ ✬ ✪ ✽ ★ ★ ❃ ■ ✺ ✥ ✦ ✫ ✽ ❃ ✰ ✸ ✫ ✷ ❃ ✰ ✯◆✪ ✽ ★ ★ ❃ ✘ ✩ ✩ ✫ ✮ ✸ ✣ ✦ ❖ ✔ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✖ ❃ ✰ ✦ ✷ ✱ ✷ ✦ ✿ ✔ ❃ ✿ ✲ ✾ ✿ ✖ ❇ ✣ ✣ ❃ ✰ ✦ ✧ ✯ ❃ ✩ ✿ ✿ ✔ ❃ ✿ ✲ ✾ ✿ ✖ ❊ ✥ ❁ ✢ ★ ✥ ✦ ❇ ✥ ❁ ■ ✥ ❁ ✱ ✺ ✢ ★ ✥ ✦ ❇ ✥ ❁ ✱ ✺ ■ ✯ ✱ ✢ ★ ✥ ✦ ❇ ✯ ✱ ■ ✯ ✱ ❃ ✺ ✢ ★ ✥ ✦ ❇ ✯ ✱ ❃ ✺ ■ ✯ ✱ ✱ ✺ ✢ ★ ✥ ✦ ❇ ✯ ✱ ✱ ✺ ❖ ❇ ✣ ❃ ✰ ✦ ✥ ❁ ✢ ✧ ✯ ❃ ✩ ✰ ✾ ✫ ✽ ✾ ✔ ✖ ❇ ✥ ❁ ✰ ✾ ✫ ✽ ✾ ✫ ✱ ✯ ✥ ❁ ❃ ✺ ✢ ✧ ✯ ❃ ✩ ✰ ✾ ✔ ✖ ❇ ✺ ✫ ✦ ❈ ✧ ✻ ✰ ✦ ✚ ✮ ❁ ✰ ✰ ✾ ✼ ✷ ✦ ✧ ✣ ✫ ✱ ✯ ✥ ❁ ✱ ✺ ✢ ✧ ✯ ❃ ✩ ✰ ✾ ❇ ✺ ✫ ✦ ❈ ✧ ✻ ✰ ✦ ✚ ✮ ❁ ✰ ✰ ✾ ✼ ✷ ✦ ✧ ✣ ✫ ✱ ✯ ✯ ✱ ✢ ✧ ✯ ❃ ✩ ✰ ✾ ✫ ✽ ✾ ❇ ✺ ✫ ✦ ❈ ✧ ✻ ✰ ✦ ✚ ✮ ❁ ✰ ✰ ✾ ✼ ✷ ✦ ✧ ✣ ✫ ✱ ✯ ✯ ✱ ✱ ✺ ✢ ✧ ✯ ❃ ✩ ✰ ✾ ❇ ✺ ✫ ✦ ❈ ✧ ✻ ✰ ✦ ✚ ✮ ❁ ✰ ✰ ✾ ✼ ✷ ✦ ✧ ✣ ✷ ✱ ❊ ✥ ❁ ✢ ✷ ✱ ❇ ✥ ❁ ✢ ✧ ✯ ❃ ✩ ■ ✥ ❁ ❃ ✺ ✢ ✷ ✱ ❇ ✥ ❁ ❃ ✺ ✢ ✧ ✯ ❃ ✩ ■ ✥ ❁ ✱ ✺ ✢ ✷ ✱ ❇ ✥ ❁ ✱ ✺ ✢ ✧ ✯ ❃ ✩ ■ ✯ ✱ ✢ ✷ ✱ ❇ ✯ ✱ ✢ ✧ ✯ ❃ ✩ ■ ✯ ✱ ✱ ✺ ✢ ✷ ✱ ❇ ✯ ✱ ✱ ✺ ✢ ✧ ✯ ❃ ✩ ❖ ❃ ✰ ✦ ❃ ✫ ✩ ✻ ✿ ✾ ✿ ❇ ✜ ✫ ✮ ✰ ✩ ✣ ✧ ✯ ✩ ✷ ✱ ✷ ✦ ✧ ✯ ❃ ✩ ✿ ❆ ★ ✱ ✰ ✔ ✜ ★ ❈ ✫ ❃ ❆ ★ ✭ ✯ ✩ ✔ ✖ ✖ ✫ ✩ ✻ ✿ ✾ ✿ ❃ ✰ ✦ ✢ ❇ ✜ ✫ ✮ ✰ ✩ ✣ ✷ ✱ ✿ ✦ ✫ ❃ ❃ ✱ ✫ ✺ ✰ ❃ ✔ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✕ ✖ P ◗ ❘ ❙ ❚ ❯ ❱ ❚ ❲ ❳ ❨ ❩ ❬ ❭ ❪ ❬ ❘ ❫ ❴ ❳ ❬ ❵ ❛ ❳ ❜ ❝ ❭ ❞ ❡ ❱ ❚ ❯ ❱ ❚ ❢ ❙ ❚ ❯ ❱ ❚ ❣ ❡ ❚ ❤ ❚ ❳ ❣ ❞ ✐ ❡ ❢ ❥ ❝ ❳ ❦ ❣ ✐ ❩ ❨ ❤ ✐ ❣ ❞ ❳ ❛ ❢ ❫ ❛ ❳ ❬ ❚ ❣ ❚ ❣ ❞ ❧ ❡ ♠ ❢ ❘ ❳ ❡ ❡ ❤ ♠ ❳ ❡ ❣ ❲ ❫ ♥ ♦ ♣ q r s t ❲ r ♣ s ✉ ✈ ✇ ❫ ❲ ❙ ❚ ❯ ❱ ❚ q ♦ ❲ ❫ ❥ ❫ ♣ P ❪ ❬ ❘ ① ❳ ❛ ② ❧ ❡ ♠ ③ ✈ ♣ ❪ ❴ P ✈ P ❫ ❡ ❱ ❚ ❯ ❱ ❚ ✈ ❴ ❴ t ❘ r ♣ s ♠ ❳ ❚ P ④ ❱ ❳ ❳ ❛ ⑤ ❫ ❴ ❳ ❬ ❵ ⑥ ♠ ❳ ❚ ❙ ❳ ❳ ❜ ❳ ❛ ⑦⑧ ✐ ❡ ❣ ❜ ❤ ❬ ⑨ ✇ r ❫ ✉ ❪ ❴ ❫ ❥ ❫ ♣ P ❴ ⑩ ❢ ❪ ❬ ❘ ① ❳ ❛ ② q ❶ ✐ ✐ ① ❪ ❤ ❚ ❤ ① r ❷ ❣ ❸ ❝ ❡ ❱ ❚ ❯ ❱ ❚ ❣ ❡ ❳ ❬ ❵ ❡ ❣ ① ♠ ❳ ❚ ❙ ❳ ❳ ❜ ❳ ❛ ③ ③ ② ❧ ❡ ♠ ③ ③ ❢ ❹ ✈ ♣ ❪ ❴ P ✈ P ❫ ❡ ❱ ❚ ❯ ❱ ❚ ⑩ ❣ ❡ ❳ ❬ ❵ ❡ ❣ ① ♠ ❳ ❚ ❙ ❳ ❳ ❜ ❳ ❛ ❺ r ❷ ❣ ❤ ❵ ❵ ❡ ❱ ❚ ❯ ❱ ❚ ❣ ❡ ❳ ❬ ❵ ❡ ❣ ① ♠ ❳ ❚ ❙ ❳ ❳ ❜ ❳ ❛ ③ ① ♠ ❳ ❚ r ❩ ❛ ❳ ❛ ③ ❧ ❡ ♠ ❹ ❻ ❼ ❽ ❾ ❿ ➀ ➁ ❿ ➂ ➃ ➄ ➅ ➆ ➇ ➈ ➆ ❽ ➉ ➊ ➃ ➆ ➋ ➌ ➃ ➍ ➎ ➇ ➏ ➐ ➁ ❿ ➀ ➁ ❿ ➑ ❾ ❿ ➀ ➁ ❿ ➒ ➐ ❿ ➓ ❿ ➃ ➒ ➏ ➔ ➐ ➑ → ➎ ➃ ➣ ➒ ➔ ➅ ➄ ➓ ➔ ➒ ➏ ➃ ➌ ➑ ➉ ➌ ➃ ➆ ❿ ➒ ❿ ➒ ➏ ↔ ➐ ↕ ➑ ❽ ➃ ➐ ➐ ➓ ↕ ➃ ➐ ➒ ➂ ➉ ➙ ➛ ➜ ➝ ➞ ➟ ➠ ➂ ➞ ➜ ➟ ➡ ➢ ➤ ➉ ➂ ❾ ❿ ➀ ➁ ❿ ➝ ➛ ➂ ➉ → ➉ ➜ ❻ ➈ ➆ ❽ ➥ ➃ ➌ ➦ ↔ ➐ ↕ ➧ ➢ ➜ ➈ ➊ ❻ ➢ ❻ ➉ ➐ ➁ ❿ ➀ ➁ ❿ ➢ ➊ ➊ ➠ ❽ ➞ ➜ ➟ ↕ ➃ ❿ ❻ ➨ ➁ ➃ ➃ ➌ ➩ ➉ ➊ ➃ ➆ ➋ ➫ ↕ ➃ ❿ ❾ ➃ ➃ ➍ ➃ ➌ ➭➯ ➔ ➐ ➒ ➍ ➓ ➆ ➲ ➤ ➞ ➉ ➡ ➈ ➊ ➉ → ➉ ➜ ❻ ➊ ➳ ➑ ➈ ➆ ❽ ➥ ➃ ➌ ➦ ➝ ➵ ➔ ➔ ➥ ➈ ➓ ❿ ➓ ➥ ➞ ➸ ➒ ➺ ➎ ➐ ➁ ❿ ➀ ➁ ❿ ➒ ➐ ➃ ➆ ➋ ➐ ➒ ➥ ↕ ➃ ❿ ❾ ➃ ➃ ➍ ➃ ➌ ➧ ➧ ➦ ↔ ➐ ↕ ➧ ➧ ➑ ➻ ➢ ➜ ➈ ➊ ❻ ➢ ❻ ➉ ➐ ➁ ❿ ➀ ➁ ❿ ➳ ➒ ➐ ➃ ➆ ➋ ➐ ➒ ➥ ↕ ➃ ❿ ❾ ➃ ➃ ➍ ➃ ➌ ➼ ➞ ➸ ➒ ➓ ➋ ➋ ➐ ➁ ❿ ➀ ➁ ❿ ➒ ➐ ➃ ➆ ➋ ➐ ➒ ➥ ↕ ➃ ❿ ❾ ➃ ➃ ➍ ➃ ➌ ➧ ➥ ↕ ➃ ❿ ➞ ➅ ➌ ➃ ➌ ➧ ↔ ➐ ↕ ➻ ➽ ➾ ➚ ➪ ➶ ➹ ➘ ➶ ➴ ➷ ➬ ➮ ➱ ✃ ❐ ➱ ➚ ❒ ❮ ➷ ➱ ❰ Ï ➷ Ð Ñ ✃ Ò Ó ➘ ➶ ➹ ➘ ➶ Ô ➪ ➶ ➹ ➘ ➶ Õ Ó ➶ Ö ➶ ➷ Õ Ò × Ó Ô Ø Ñ ➷ Ù Õ × ➮ ➬ Ö × Õ Ò ➷ Ï Ô ❒ Ï ➷ ➱ ➶ Õ ➶ Õ Ò Ú Ó Û Ô ➚ ➷ Ó Ó Ö Û ➷ Ó Õ ➴ ❒ Ü Ý Þ ß à á â ➴ à Þ á ã ä å ❒ ➴ ➪ ➶ ➹ ➘ ➶ ß Ý ➴ ❒ Ø ❒ Þ ➽ ❐ ➱ ➚ æ ➷ Ï ç Ú Ó Û è ä Þ ❐ ❮ ➽ ä ➽ ❒ Ó ➘ ➶ ➹ ➘ ➶ ä ❮ ❮ â ➚ à Þ á Û ➷ ➶ ➽ é ➘ ➷ ➷ Ï ê ❒ ❮ ➷ ➱ ❰ ë Û ➷ ➶ ➪ ➷ ➷ Ð ➷ Ï ìí × Ó Õ Ð Ö ➱ î å à ❒ ã ❐ ❮ ❒ Ø ❒ Þ ➽ ❮ ï Ô ❐ ➱ ➚ æ ➷ Ï ç ß ð × × æ ❐ Ö ➶ Ö æ à ñ Õ ò Ñ Ó ➘ ➶ ➹ ➘ ➶ Õ Ó ➷ ➱ ❰ Ó Õ æ Û ➷ ➶ ➪ ➷ ➷ Ð ➷ Ï è è ç Ú Ó Û è è Ô ó ä Þ ❐ ❮ ➽ ä ➽ ❒ Ó ➘ ➶ ➹ ➘ ➶ ï Õ Ó ➷ ➱ ❰ Ó Õ æ Û ➷ ➶ ➪ ➷ ➷ Ð ➷ Ï ô à ñ Õ Ö ❰ ❰ Ó ➘ ➶ ➹ ➘ ➶ Õ Ó ➷ ➱ ❰ Ó Õ æ Û ➷ ➶ ➪ ➷ ➷ Ð ➷ Ï è æ Û ➷ ➶ à ➮ Ï ➷ Ï è Ú Ó Û ó õ ö ÷ ø ù ú û ù ü ý þ ÿ
  • ÷
✄ ☎ ý
✝ ý ✞ ✟ ✁ ✠ ✡ û ù ú û ù ☛ ø ù ú û ù ☞ ✡ ù ✌ ù ý ☞ ✠ ✍ ✡ ☛ ✎ ✟ ý ✏ ☞ ✍ ÿ þ ✌ ✍ ☞ ✠ ý ✝ ☛ ✄ ✝ ý
  • ù
☞ ù ☞ ✠ ✑ ✡ ✒ ☛ ÷ ý ✡ ✡ ✌ ✒ ý ✡ ☞ ü ✄ ✓ ✔ ✕ ✖ ✗ ✘ ✙ ü ✗ ✕ ✘ ✚ ✛ ✜ ✄ ü ø ù ú û ù ✖ ✔ ü ✄ ✎ ✄ ✕ õ ✂
  • ÷
✢ ý ✝ ✣ ✑ ✡ ✒ ✤ ✛ ✕ ✂ ☎ õ ✛ õ ✄ ✡ û ù ú û ù ✛ ☎ ☎ ✙ ÷ ✗ ✕ ✘ ✒ ý ù õ ✥ û ý ý ✝ ✦ ✄ ☎ ý
✧ ✒ ý ù ø ý ý ✞ ý ✝ ★✩ ✍ ✡ ☞ ✞ ✌
✜ ✗ ✄ ✚ ✂ ☎ ✄ ✎ ✄ ✕ õ ☎ ✫ ☛ ✂
  • ÷
✢ ý ✝ ✣ ✖ ✬ ✍ ✍ ✢ ✂ ✌ ù ✌ ✢ ✗ ✭ ☞ ✮ ✟ ✡ û ù ú û ù ☞ ✡ ý
✡ ☞ ✢ ✒ ý ù ø ý ý ✞ ý ✝ ✤ ✤ ✣ ✑ ✡ ✒ ✤ ✤ ☛ ✯ ✛ ✕ ✂ ☎ õ ✛ õ ✄ ✡ û ù ú û ù ✫ ☞ ✡ ý
✡ ☞ ✢ ✒ ý ù ø ý ý ✞ ý ✝ ✰ ✗ ✭ ☞ ✌ ✆ ✆ ✡ û ù ú û ù ☞ ✡ ý
✡ ☞ ✢ ✒ ý ù ø ý ý ✞ ý ✝ ✤ ✢ ✒ ý ù ✗ ÿ ✝ ý ✝ ✤ ✑ ✡ ✒ ✯ ✱ ✲ ✳ ✴ ✵ ✶ ✷ ✵ ✸ ✹ ✺ ✻ ✼ ✽ ✾ ✼ ✳ ✿ ❀ ✹ ✼ ❁ ❂ ✹ ❃ ❄ ✽ ❅ ❆ ✷ ✵ ✶ ✷ ✵ ❇ ✴ ✵ ✶ ✷ ✵ ❈ ❆ ✵ ❉ ✵ ✹ ❈ ❅ ❊ ❆ ❇ ❋ ❄ ✹
❊ ✻ ✺ ❉ ❊ ❈ ❅ ✹ ❂ ❇ ✿ ❂ ✹ ✼ ✵ ❈ ✵ ❈ ❅ ❍ ❆ ■ ❇ ✳ ✹ ❆ ❆ ❉ ■ ✹ ❆ ❈ ✸ ✿ ❏ ❑ ▲ ▼ ◆ ❖ P ✸ ◆ ▲ ❖ ◗ ❘ ❙ ✿ ✸ ✴ ✵ ✶ ✷ ✵ ▼ ❑ ✸ ✿ ❋ ✿ ▲ ✱ ✾ ✼ ✳ ❚ ✹ ❂ ❯ ❍ ❆ ■ ❱ ❘ ▲ ✾ ❀ ✱ ❘ ✱ ✿ ❆ ✷ ✵ ✶ ✷ ✵ ❘ ❀ ❀ P ✳ ◆ ▲ ❖ ■ ✹ ✵ ✱ ❲ ✷ ✹ ✹ ❂ ❳ ✿ ❀ ✹ ✼ ❁ ❨ ■ ✹ ✵ ✴ ✹ ✹ ❃ ✹ ❂ ❩❬ ❊ ❆ ❈ ❃ ❉ ✼ ❭ ❙ ◆ ✿ ◗ ✾ ❀ ✿ ❋ ✿ ▲ ✱ ❀ ❪ ❇ ✾ ✼ ✳ ❚ ✹ ❂ ❯ ▼ ❫ ❊ ❊ ❚ ✾ ❉ ✵ ❉ ❚ ◆ ❴ ❈ ❵ ❄ ❆ ✷ ✵ ✶ ✷ ✵ ❈ ❆ ✹ ✼ ❁ ❆ ❈ ❚ ■ ✹ ✵ ✴ ✹ ✹ ❃ ✹ ❂ ❱ ❱ ❯ ❍ ❆ ■ ❱ ❱ ❇ ❛ ❘ ▲ ✾ ❀ ✱ ❘ ✱ ✿ ❆ ✷ ✵ ✶ ✷ ✵ ❪ ❈ ❆ ✹ ✼ ❁ ❆ ❈ ❚ ■ ✹ ✵ ✴ ✹ ✹ ❃ ✹ ❂ ❜ ◆ ❴ ❈ ❉ ❁ ❁ ❆ ✷ ✵ ✶ ✷ ✵ ❈ ❆ ✹ ✼ ❁ ❆ ❈ ❚ ■ ✹ ✵ ✴ ✹ ✹ ❃ ✹ ❂ ❱ ❚ ■ ✹ ✵ ◆ ✻ ❂ ✹ ❂ ❱ ❍ ❆ ■ ❛ ❝ ❞ ❡ ❢ ❣ ❤ ✐ ❣ ❥ ❦ ❧ ♠ ♥ ♦ ♣ ♥ ❡ q r ❦ ♥ s t ❦ ✉ ✈ ♦ ✇ ① ✐ ❣ ❤ ✐ ❣ ② ❢ ❣ ❤ ✐ ❣ ③ ① ❣ ④ ❣ ❦ ③ ✇ ⑤ ① ② ⑥ ✈ ❦ ⑦ ③ ⑤ ♠ ❧ ④ ⑤ ③ ✇ ❦ t ② q t ❦ ♥ ❣ ③ ❣ ③ ✇ ⑧ ① ⑨ ② ❡ ❦ ① ① ④ ⑨ ❦ ① ③ ❥ q ⑩ ❶ ❷ ❸ ❹ ❺ ❻ ❥ ❹ ❷ ❺ ❼ ❽ ❾ q ❥ ❢ ❣ ❤ ✐ ❣ ❸ ❶ ❥ q ⑥ q ❷ ❝ ♣ ♥ ❡ ❿ ❦ t ➀ ⑧ ① ⑨ ➁ ❽ ❷ ♣ r ❝ ❽ ❝ q ① ✐ ❣ ❤ ✐ ❣ ❽ r r ❻ ❡ ❹ ❷ ❺ ⑨ ❦ ❣ ❝ ➂ ✐ ❦ ❦ t ➃ q r ❦ ♥ s ➄ ⑨ ❦ ❣ ❢ ❦ ❦ ✉ ❦ t ➅➆ ⑤ ① ③ ✉ ④ ♥ ➇ ❾ ❹ q ❼ ♣ r q ⑥ q ❷ ❝ r ➈ ② ♣ ♥ ❡ ❿ ❦ t ➀ ❸ ➉ ⑤ ⑤ ❿ ♣ ④ ❣ ④ ❿ ❹ ➊ ③ ➋ ✈ ① ✐ ❣ ❤ ✐ ❣ ③ ① ❦ ♥ s ① ③ ❿ ⑨ ❦ ❣ ❢ ❦ ❦ ✉ ❦ t ➁ ➁ ➀ ⑧ ① ⑨ ➁ ➁ ② ➌ ❽ ❷ ♣ r ❝ ❽ ❝ q ① ✐ ❣ ❤ ✐ ❣ ➈ ③ ① ❦ ♥ s ① ③ ❿ ⑨ ❦ ❣ ❢ ❦ ❦ ✉ ❦ t ➍ ❹ ➊ ③ ④ s s ① ✐ ❣ ❤ ✐ ❣ ③ ① ❦ ♥ s ① ③ ❿ ⑨ ❦ ❣ ❢ ❦ ❦ ✉ ❦ t ➁ ❿ ⑨ ❦ ❣ ❹ ♠ t ❦ t ➁ ⑧ ① ⑨ ➌ ➎ ➏ ➐ ➑ ➒ ➓ ➔ ➒ → ➣ ↔ ↕ ➙ ➛ ➜ ➙ ➐ ➝ ➞ ➣ ➙ ➟ ➠ ➣ ➡ ➢ ➛ ➤ ➥ ➔ ➒ ➓ ➔ ➒ ➦ ➑ ➒ ➓ ➔ ➒ ➧ ➥ ➒ ➨ ➒ ➣ ➧ ➤ ➩ ➥ ➦ ➫ ➢ ➣ ➭ ➧ ➩ ↕ ↔ ➨ ➩ ➧ ➤ ➣ ➠ ➦ ➝ ➠ ➣ ➙ ➒ ➧ ➒ ➧ ➤ ➯ ➥ ➲ ➦ ➐ ➣ ➥ ➥ ➨ ➲ ➣ ➥ ➧ → ➝ ➳ ➵ ➸ ➺ ➻ ➼ ➽ → ➻ ➸ ➼ ➾ ➚ ➪ ➝ → ➑ ➒ ➓ ➔ ➒ ➺ ➵ → ➝ ➫ ➝ ➸ ➎ ➜ ➙ ➐ ➶ ➣ ➠ ➹ ➯ ➥ ➲ ➘ ➚ ➸ ➜ ➞ ➎ ➚ ➎ ➝ ➥ ➔ ➒ ➓ ➔ ➒ ➚ ➞ ➞ ➽ ➐ ➻ ➸ ➼ ➲ ➣ ➒ ➎ ➴ ➔ ➣ ➣ ➠ ➷ ➝ ➞ ➣ ➙ ➟ ➬ ➲ ➣ ➒ ➑ ➣ ➣ ➡ ➣ ➠ ➮➱ ➩ ➥ ➧ ➡ ➨ ➙ ✃ ➪ ➻ ➝ ➾ ➜ ➞ ➝ ➫ ➝ ➸ ➎ ➞ ❐ ➦ ➜ ➙ ➐ ➶ ➣ ➠ ➹ ➺ ❒ ➩ ➩ ➶ ➜ ➨ ➒ ➨ ➶ ➻ ❮ ➧ ❰ ➢ ➥ ➔ ➒ ➓ ➔ ➒ ➧ ➥ ➣ ➙ ➟ ➥ ➧ ➶ ➲ ➣ ➒ ➑ ➣ ➣ ➡ ➣ ➠ ➘ ➘ ➹ ➯ ➥ ➲ ➘ ➘ ➦ Ï ➚ ➸ ➜ ➞ ➎ ➚ ➎ ➝ ➥ ➔ ➒ ➓ ➔ ➒ ❐ ➧ ➥ ➣ ➙ ➟ ➥ ➧ ➶ ➲ ➣ ➒ ➑ ➣ ➣ ➡ ➣ ➠ Ð ➻ ❮ ➧ ➨ ➟ ➟ ➥ ➔ ➒ ➓ ➔ ➒ ➧ ➥ ➣ ➙ ➟ ➥ ➧ ➶ ➲ ➣ ➒ ➑ ➣ ➣ ➡ ➣ ➠ ➘ ➶ ➲ ➣ ➒ ➻ ↕ ➠ ➣ ➠ ➘ ➯ ➥ ➲ Ï Ñ Ò Ó Ô Õ Ö × Õ Ø Ù Ú Û Ü Ý Þ Ü Ó ß à Ù Ü á â Ù ã ä Ý å æ × Õ Ö × Õ ç Ô Õ Ö × Õ è æ Õ é Õ Ù è å ê æ ç ë ä Ù ì è ê Û Ú é ê è å Ù â ç ß â Ù Ü Õ è Õ è å í æ î ç Ó Ù æ æ é î Ù æ è Ø ß ï ð ñ ò ó ô õ Ø ó ñ ô ö ÷ ø ß Ø Ô Õ Ö × Õ ò ð Ø ß ë ß ñ Ñ Þ Ü Ó ù Ù â ú í æ î û ÷ ñ Þ à Ñ ÷ Ñ ß æ × Õ Ö × Õ ÷ à à õ Ó ó ñ ô î Ù Õ Ñ ü × Ù Ù â ý ß à Ù Ü á þ î Ù Õ Ô Ù Ù ã Ù â ÿ ê æ è ã é Ü ✁ ø ó ß ö Þ à ß ë ß ñ Ñ à ✂ ç Þ Ü Ó ù Ù â ú ò ✄ ê ê ù Þ é Õ é ù ó ☎ è ✆ ä æ × Õ Ö × Õ è æ Ù Ü á æ è ù î Ù Õ Ô Ù Ù ã Ù â û û ú í æ î û û ç ✝ ÷ ñ Þ à Ñ ÷ Ñ ß æ × Õ Ö × Õ ✂ è æ Ù Ü á æ è ù î Ù Õ Ô Ù Ù ã Ù â ✞ ó ☎ è é á á æ × Õ Ö × Õ è æ Ù Ü á æ è ù î Ù Õ Ô Ù Ù ã Ù â û ù î Ù Õ ó Û â Ù â û í æ î ✝

Composition Theorems

Up/Linear Up/Bounce Up/Split Dn/Split Dn/Bounce Dn/Linear

Compose function

Bottom Layer Layer Top Layer Layer Layer Layer Layer

Application Stack

Up/Send Up/Cast Dn/Send Dn/Cast

Reconfiguration Theorems CODE Reconfigure Common Case Simple Compositions Verify

slide-13
SLIDE 13

Automated Fast-Track Reconfiguration ... 12 Stack Reconfiguration

Example Reconfiguration of Pt2pt||Mnak||Bottom

RECONFIGURING LAYER Pt2pt FOR EVENT DnM(ev,hdr) AND STATE s pt2pt ASSUMING getType ev = ESend

getPeer ev = ls.rank YIELDS EVENTS [:DnM(ev,Full(Data(Iq.hi s pt2pt.sends.(getPeer ev)), hdr)):] AND STATE Iq.add s pt2pt.sends.(getPeer ev) (getIov ev) hdr] RECONFIGURING LAYER Mnak FOR EVENT DnM(ev,hdr) AND STATE s mnak ASSUMING getType ev = ESend YIELDS EVENTS [:DnM(ev,Full(NoHdr, hdr)):] AND STATE s mnak RECONFIGURING LAYER Bottom FOR EVENT DnM(ev,hdr) AND STATE s bottom ASSUMING getType ev = ESend

s bottom.enabled YIELDS EVENTS [:DnM(ev,Full(NoHdr, hdr)):] AND STATE s bottom

Generated Reconfiguration Theorem for Application Stack

RECONFIGURING LAYER Pt2pt||Mnak||Bottom FOR EVENT DnM(ev,hdr) AND STATE (s pt2pt, s mnak, s bottom) ASSUMING getType ev = ESend

∧ getPeer ev = ls.rank ∧ s bottom.enabled

YIELDS EVENTS [:DnM(ev,Full(NoHdr, Full(NoHdr, Full(Data(Iq.hi s pt2pt.sends.(getPeer ev)),hdr)))):] AND STATE ( Iq.add s pt2pt.sends.(getPeer ev) (getIov ev) hdr] , s mnak , s bottom )

slide-14
SLIDE 14

Automated Fast-Track Reconfiguration ... 13 Header Compression

Header Compression: suppress superfluous headers

✁ ✂ ✂ ✂✄ ✄ ✄ ☎ ☎ ☎ ☎ ☎ ☎ ✆ ✆ ✆ ✆ ✆ ✆ ✝ ✝✞ ✞ ✟ ✟✠ ✠ ✡ ✡ ✡ ✡☛ ☛ ☞ ☞ ☞ ☞ ✌ ✌ ✌ ✌ ✍ ✍ ✍ ✍ ✎ ✎ ✎ ✎ ✏ ✏ ✏ ✏ ✑ ✑ ✑ ✑ ✒ ✒ ✒ ✒ ✒ ✒ ✓ ✓ ✓ ✔ ✔ ✔ ✔✕ ✕ ✖ ✖ ✖ ✖✗ ✗ ✘ ✘ ✘ ✘ ✙ ✙ ✙ ✙ ✚ ✚ ✚✛ ✛ ✛ ✜ ✜ ✜✢ ✢ ✢ ✣ ✣ ✣ ✣ ✣ ✣ ✤ ✤ ✤ ✤ ✤ ✤ ✥ ✥ ✥ ✥ ✥ ✥ ✦ ✦ ✦ ✧ ✧ ✧ ✧ ✧ ✧★ ★ ★ ✩ ✩ ✩ ✩ ✩ ✩ ✪ ✪ ✪ ✪ ✪ ✪ ✫ ✫ ✫ ✫ ✫ ✫ ✬ ✬ ✬ ✬ ✬ ✬ ✭ ✭ ✭ ✭ ✭ ✭ ✭ ✭ ✮ ✮ ✮ ✮ ✯ ✯ ✯ ✯ ✯ ✯✰ ✰ ✰ ✱ ✱ ✱ ✱ ✱ ✱✲ ✲ ✲ ✳ ✳ ✳ ✳ ✳ ✳✴ ✴ ✴ ✵ ✵ ✵ ✵ ✵ ✵ ✶ ✶ ✶ ✶ ✶ ✶ ✷ ✷ ✷ ✷ ✷ ✷ ✸ ✸ ✸ ✸ ✸ ✸ ✹ ✹ ✹✺ ✺ ✺ ✻ ✻ ✻✼ ✼ ✼ ✽ ✽ ✽ ✽ ✽ ✽ ✾ ✾ ✾ ✾ ✾ ✾ ✿ ✿ ✿ ✿ ✿ ✿ ❀ ❀ ❀ ❁ ❁ ❁ ❁ ❁ ❁❂ ❂ ❂ ❃ ❃ ❃ ❃ ❃ ❃❄ ❄ ❄ ❅ ❅ ❅ ❅❆ ❆ ❇ ❇ ❇ ❇ ❇ ❇ ❈ ❈ ❈ ❈ ❈ ❈ ❉ ❉ ❉ ❉ ❉ ❉❊ ❊ ❊ ❋ ❋●
  • BOTTOM LAYER

LAYER LAYER LAYER LAYER BOTTOM LAYER LAYER LAYER LAYER LAYER Header Protocol Stack Protocol Stack Event NET Compressed Message

Expansion Compression

RECEIVER SENDER

Integrate into Reconfiguration Process

slide-15
SLIDE 15

Automated Fast-Track Reconfiguration ... 14 Header Compression

Header Compression

  • Generate code for header compression & expansion

– Analyze free variables in reconfiguration theorem for upgoing messages

let compress hdr = match hdr with Full(NoHdr, Full(NoHdr, Full(Data(seqno), hdr))) -> OptSend(seqno, hdr) | Full(NoHdr, Full(Data(seqno), Full(NoHdr, hdr))) -> OptCast(seqno, hdr) | hdr

  • > Normal(hdr)

– Code for expand inverts compress

  • Prove theorems about wrapping stacks with compression

– Higher-order theorems with parameters compress and expand – Statement obvious: wrapped stack operates on compressed headers like regular stack on uncompressed headers – Proof involves Ensemble’s code for layer wrapping

  • Apply compression theorems to stack reconfiguration theorem
slide-16
SLIDE 16

Automated Fast-Track Reconfiguration ... 15 Code Generation

Code Generation

Bottom

no ?

Bottom Pt2Pt Top Full Stack

yes no yes ? Standard Normal ? ? Normal Standard

Mnak

NET

APPLICATION Code Reconfigured Message Standard Conditions Normal Conditions Stack Pt2Pt Top Full Stack Mnak APPLICATION

NET

slide-17
SLIDE 17

Automated Fast-Track Reconfiguration ... 16 Code Generation

Code Generation

  • Convert reconfiguration theorems into code pieces

– Modified output states → assignments s.f <- e – Output events → call of connected event handlers – Assumptions → conditional / case-expression

  • Assemble code pieces

– Case expression for up & down, ECast & ESend – Call original event handler for non-common cases

  • Add overhead to match common layer structure
  • Export into Ocaml environment

Completely automated

slide-18
SLIDE 18

Automated Fast-Track Reconfiguration ... 17 Code Generation

The Application Interface: Optimized Global Design

Partial_appl Message Handling Management Group Communication Message Handling Management Group Communication Partial_appl

Total, Collect, Frag

Bottom

Switch, Migrate, Leave, Merge Mflow, Pt2Pt. Mnak ...... Elect, Suspect, Stable, Vsync..

? no

Total, Collect, Frag

Bottom

Switch, Migrate, Leave, Merge Mflow, Pt2Pt. Mnak ...... Elect, Suspect, Stable, Vsync..

Message Standard Conditions Normal Conditions Stack Top

NET

APPLICATION

Code Reconfigured

? Standard Normal ? no yes

NET

APPLICATION

? yes Standard Normal

Top

Application connects to partial appl layer

– More efficient in common case – Only layers below partial appl deal with data – Violates simple state-event model (composition theorem does not apply) → Compose partial appl with stack via specialized tactics

slide-19
SLIDE 19

Automated Fast-Track Reconfiguration ... 18 Conclusion

Conclusion

  • Existing reconfiguration tools

– Semi-automatic layer reconfiguration – Set of standard reconfigurations for each layer – Automatic stack reconfiguration, header compression, code generation

  • Test results: default stack (25 layers)

– Reconfiguration process takes 2 minutes (Sparc 450 / 300Mhz) – Optimized stack guaranteed to have same functionality as original – Object code size 25% of original (12k, incl. overhead) – Code latency 24% of original (32 µs)

  • Future work

– Additional techniques (bypass marshalling, integrate transport mechanism) – Automate fast-path analysis and dynamic layer/stack reconfiguration – Integrate tools into Ensemble distribution