cmd/cue/cmd: make eval use output flags

Mostly for consistency sake.

An Eval Mode is added to filetypes to support this.

Retains the old behavior of eval as much as possible.
Few changes:
- The header is now printed to stderr before
  error messages
- The Encoder now prints headers using `//` for CUE.
  This ensures the output CUE is valid in case only a
  single schema is printed.

Also removes "final" as a tag option.

Change-Id: Ib89b80f4500615a7e3d56bd0f723ce0f20cf153c
Reviewed-on: https://cue-review.googlesource.com/c/cue/+/5254
Reviewed-by: Marcel van Lohuizen <mpvl@golang.org>
diff --git a/cmd/cue/cmd/eval.go b/cmd/cue/cmd/eval.go
index ee9e839..b56807e 100644
--- a/cmd/cue/cmd/eval.go
+++ b/cmd/cue/cmd/eval.go
@@ -15,7 +15,6 @@
 package cmd
 
 import (
-	"bytes"
 	"fmt"
 
 	"github.com/spf13/cobra"
@@ -23,6 +22,9 @@
 	"cuelang.org/go/cue"
 	"cuelang.org/go/cue/ast"
 	"cuelang.org/go/cue/format"
+	"cuelang.org/go/cue/token"
+	"cuelang.org/go/internal/encoding"
+	"cuelang.org/go/internal/filetypes"
 )
 
 // newEvalCmd creates a new eval command
@@ -88,69 +90,91 @@
 	b, err := parseArgs(cmd, args, nil)
 	exitOnErr(cmd, err, false)
 
-	w := cmd.OutOrStdout()
-	// Always print a trailing newline. format.Node may not write a trailing
-	// newline if the output is single-line expression.
-	writeNode := func(b []byte, err error) {
-		_, _ = w.Write(b)
-		if !bytes.HasSuffix(b, []byte("\n")) {
-			w.Write([]byte{'\n'})
-		}
+	syn := []cue.Option{
+		cue.Final(), // for backwards compatibility
+		cue.Definitions(true),
+		cue.Attributes(flagAttributes.Bool(cmd)),
+		cue.Optional(flagAll.Bool(cmd) || flagOptional.Bool(cmd)),
 	}
 
+	// Keep for legacy reasons. Note that `cue eval` is to be deprecated by
+	// `cue` eventually.
+	opts := []format.Option{
+		format.UseSpaces(4),
+		format.TabIndent(false),
+	}
+	if flagSimplify.Bool(cmd) {
+		opts = append(opts, format.Simplify())
+	}
+	b.encConfig.Format = opts
+
+	f, err := b.out("-", filetypes.Eval)
+	exitOnErr(cmd, err, true)
+
+	e, err := encoding.NewEncoder(f, b.encConfig)
+	exitOnErr(cmd, err, true)
+
 	iter := b.instances()
 	defer iter.close()
 	for i := 0; iter.scan(); i++ {
-		// TODO: use ImportPath or some other sanitized path.
+		id := ""
 		if len(b.insts) > 1 {
-			fmt.Fprintf(w, "\n// %s\n", iter.id())
+			id = iter.id()
 		}
 		v := iter.instance().Value()
 
-		syn := []cue.Option{
-			cue.Final(), // for backwards compatibility
-			cue.Definitions(true),
-			cue.Attributes(flagAttributes.Bool(cmd)),
-			cue.Optional(flagAll.Bool(cmd) || flagOptional.Bool(cmd)),
-		}
 		if flagConcrete.Bool(cmd) {
 			syn = append(syn, cue.Concrete(true))
 		}
 		if flagHidden.Bool(cmd) || flagAll.Bool(cmd) {
 			syn = append(syn, cue.Hidden(true))
 		}
-		opts := []format.Option{
-			format.UseSpaces(4),
-			format.TabIndent(false),
-		}
-		if flagSimplify.Bool(cmd) {
-			opts = append(opts, format.Simplify())
+
+		errHeader := func() {
+			if id != "" {
+				fmt.Fprintf(cmd.OutOrStderr(), "// %s\n", id)
+			}
 		}
 
 		if len(b.expressions) > 1 {
-			fmt.Fprint(w, "// ")
-			writeNode(format.Node(b.expressions[i%len(b.expressions)]))
+			b, _ := format.Node(b.expressions[i%len(b.expressions)])
+			id = string(b)
 		}
 		if err := v.Err(); err != nil {
+			errHeader()
 			return err
 		}
 		if flagConcrete.Bool(cmd) && !flagIgnore.Bool(cmd) {
 			if err := v.Validate(cue.Concrete(true)); err != nil {
+				errHeader()
 				exitOnErr(cmd, err, false)
 				continue
 			}
 		}
-		writeNode(format.Node(getSyntax(v, syn), opts...))
+
+		f := getSyntax(v, syn)
+		f.Filename = id
+		err := e.EncodeFile(f)
+		if err != nil {
+			errHeader()
+			exitOnErr(cmd, err, false)
+		}
 	}
 	exitOnErr(cmd, iter.err(), true)
 	return nil
 }
 
-func getSyntax(v cue.Value, opts []cue.Option) ast.Node {
+func getSyntax(v cue.Value, opts []cue.Option) *ast.File {
 	n := v.Syntax(opts...)
 	switch x := n.(type) {
+	case *ast.File:
+		return x
 	case *ast.StructLit:
-		n = &ast.File{Decls: x.Elts}
+		return &ast.File{Decls: x.Elts}
+	case ast.Expr:
+		ast.SetRelPos(x, token.NoSpace)
+		return &ast.File{Decls: []ast.Decl{&ast.EmbedDecl{Expr: x}}}
+	default:
+		panic("unreachable")
 	}
-	return n
 }
diff --git a/cmd/cue/cmd/testdata/script/eval_concrete.txt b/cmd/cue/cmd/testdata/script/eval_concrete.txt
index ccc755e..825fa3c 100644
--- a/cmd/cue/cmd/testdata/script/eval_concrete.txt
+++ b/cmd/cue/cmd/testdata/script/eval_concrete.txt
@@ -1,8 +1,13 @@
 cue eval -c -a
-cmp stdout eval_conc.out
+cmp stdout eval_conc.cue
 
--- eval_conc.out --
+cue eval --out yaml
+cmp stdout eval_conc.yaml
+
+-- eval_conc.cue --
 message: "Hello World!"
+-- eval_conc.yaml --
+message: Hello World!
 -- cmd_echo.out --
 Hello World!
 
diff --git a/cmd/cue/cmd/testdata/script/eval_expr.txt b/cmd/cue/cmd/testdata/script/eval_expr.txt
index 69a60f4..4fb2bda 100644
--- a/cmd/cue/cmd/testdata/script/eval_expr.txt
+++ b/cmd/cue/cmd/testdata/script/eval_expr.txt
@@ -5,8 +5,8 @@
 -- expect-stdout --
 // b.a.b
 4
-// b.idx
 -- expect-stderr --
+// b.idx
 invalid non-ground value string (must be concrete int|string):
     ./partial.cue:7:9
     ./partial.cue:8:7
diff --git a/doc/tutorial/kubernetes/testdata/manual.out b/doc/tutorial/kubernetes/testdata/manual.out
index 44c50c6..e13b62f 100644
--- a/doc/tutorial/kubernetes/testdata/manual.out
+++ b/doc/tutorial/kubernetes/testdata/manual.out
@@ -69,8 +69,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -142,8 +140,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -330,8 +326,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -521,8 +515,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -709,8 +701,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -897,8 +887,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -1088,8 +1076,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -1276,8 +1262,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -1467,8 +1451,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -1540,8 +1522,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -1713,8 +1693,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -2064,8 +2042,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -2314,8 +2290,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -2539,8 +2513,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -2735,8 +2707,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -2949,8 +2919,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -3051,8 +3019,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -3360,8 +3326,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -3666,8 +3630,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -3951,8 +3913,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -4235,8 +4195,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -4523,8 +4481,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -4811,8 +4767,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -5046,8 +5000,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -5119,8 +5071,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -5408,8 +5358,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -5663,8 +5611,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -5932,8 +5878,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -6653,8 +6597,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -6726,8 +6668,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -7044,8 +6984,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
@@ -7256,8 +7194,6 @@
         }
     }
 }
-
-
 _base: {
     name: string
     label: {
diff --git a/doc/tutorial/kubernetes/testdata/quick.out b/doc/tutorial/kubernetes/testdata/quick.out
index 33aa225..38b396e 100644
--- a/doc/tutorial/kubernetes/testdata/quick.out
+++ b/doc/tutorial/kubernetes/testdata/quick.out
@@ -31,8 +31,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {}
 deployment: {}
@@ -66,8 +64,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {
     bartender: {
@@ -167,8 +163,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {
     breaddispatcher: {
@@ -268,8 +262,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {
     host: {
@@ -369,8 +361,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {
     maitred: {
@@ -470,8 +460,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {
     valeter: {
@@ -571,8 +559,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {
     waiter: {
@@ -671,8 +657,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {
     waterdispatcher: {
@@ -772,8 +756,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {}
 deployment: {}
@@ -807,8 +789,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {
     download: {
@@ -903,8 +883,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {
     etcd: {
@@ -1080,8 +1058,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {
     events: {
@@ -1208,8 +1184,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {
     tasks: {
@@ -1323,8 +1297,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {
     updater: {
@@ -1430,8 +1402,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {
     watcher: {
@@ -1541,8 +1511,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {}
 deployment: {}
@@ -1576,8 +1544,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {
     caller: {
@@ -1714,8 +1680,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {
     dishwasher: {
@@ -1852,8 +1816,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {
     expiditer: {
@@ -1981,8 +1943,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {
     headchef: {
@@ -2110,8 +2070,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {
     linecook: {
@@ -2239,8 +2197,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {
     pastrychef: {
@@ -2368,8 +2324,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {
     souschef: {
@@ -2476,8 +2430,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {}
 deployment: {}
@@ -2511,8 +2463,6 @@
         }
     }
 }
-
-
 configMap: {
     alertmanager: {
         kind:       "ConfigMap"
@@ -2665,8 +2615,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {
     grafana: {
@@ -2793,8 +2741,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {
     "node-exporter": {
@@ -2929,8 +2875,6 @@
         }
     }
 }
-
-
 configMap: {
     prometheus: {
         kind:       "ConfigMap"
@@ -3299,8 +3243,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {}
 deployment: {}
@@ -3334,8 +3276,6 @@
         }
     }
 }
-
-
 configMap: {
     authproxy: {
         kind:       "ConfigMap"
@@ -3507,8 +3447,6 @@
         }
     }
 }
-
-
 configMap: {}
 service: {
     goget: {
@@ -3615,8 +3553,6 @@
         }
     }
 }
-
-
 configMap: {
     nginx: {
         kind:       "ConfigMap"
diff --git a/internal/encoding/encoder.go b/internal/encoding/encoder.go
index 3c0a246..0217af9 100644
--- a/internal/encoding/encoder.go
+++ b/internal/encoding/encoder.go
@@ -107,9 +107,9 @@
 		format := func(name string, n ast.Node) error {
 			if name != "" && cfg.Stream {
 				// TODO: make this relative to DIR
-				fmt.Fprintf(w, "--- %s\n", filepath.Base(name))
+				fmt.Fprintf(w, "// %s\n", filepath.Base(name))
 			} else if useSep {
-				fmt.Println("---")
+				fmt.Println("// ---")
 			}
 			useSep = true
 
diff --git a/internal/filetypes/filetypes.go b/internal/filetypes/filetypes.go
index 8e4269b..cad838c 100644
--- a/internal/filetypes/filetypes.go
+++ b/internal/filetypes/filetypes.go
@@ -34,12 +34,15 @@
 	Input Mode = iota // The default
 	Export
 	Def
+	Eval
 )
 
 func (m Mode) String() string {
 	switch m {
 	default:
 		return "input"
+	case Eval:
+		return "eval"
 	case Export:
 		return "export"
 	case Def:
diff --git a/internal/filetypes/types.cue b/internal/filetypes/types.cue
index 8a26ca9..83d255a 100644
--- a/internal/filetypes/types.cue
+++ b/internal/filetypes/types.cue
@@ -104,6 +104,20 @@
 	}
 }
 
+// eval is a legacy mode
+modes: eval: {
+	Default :: {
+		encoding: *"cue" | _
+		...
+	}
+	FileInfo :: x, x = {
+		docs: true | *false
+	}
+	encodings: cue: {
+		*forms.final | _
+	}
+}
+
 modes: def: {
 	Default :: {
 		encoding: *"cue" | _
@@ -155,7 +169,6 @@
 // tags maps command line tags to file properties.
 tags: {
 	schema: form: "schema"
-	final: form:  "final"
 	graph: form:  "graph"
 	dag: form:    "dag"
 	data: form:   "data"
diff --git a/internal/filetypes/types.go b/internal/filetypes/types.go
index 6fd1edd..535781d 100644
--- a/internal/filetypes/types.go
+++ b/internal/filetypes/types.go
@@ -47,5 +47,5 @@
 	return v
 }
 
-// Data size: 1097 bytes.
-var cuegenInstanceData = []byte("\x01\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xd4WO\x8b\xdc6\x14\xb7f\xb7P\xa9i\xfa\t\n\xae\x0ea3\u0439\x16\x06\xc2^\xd2@.\xa5\xf4\xba\x84Ek\xcb^7\x1e\xc9\xd82\xec\u0499C\xdb4\xed\xe7\xed\a\u0214\xa7'\u0656\xec\xd9%9\x14\xa2\x93\xf5{z\xff\x9f\x9e\x9e\xbf>\xfe\xbd\"\xab\xe3?\t9\xfe\x91$?\x1c\u007f?#\xe4I\xa5:#T&_\n#\x00'g\xe4\xfc\x17\xad\rY%\xe4\xfcgan\u0253\x84|\xf1\xaa\xaaeG\x8e\xef\x93$\xf9\xf6\xf8\u05ca\x90\xa7Wo\xb2^n\x8a\xaav\x9c\xef\x13r|\x97$\x17\xc7?\xcf\b\xf9r\xc4\xdf%dE\xce\u007f\x12;\t\x82\xce-\u0212$\xf9\xf0\xcdW`\t!+B\xa8\xb9od\xb7\xc9zI><\xfd\xb7\x11\xd9[Q\xca\xf4\xa6\xaf\xea\x9c1P\x9dn\xb7\xe9o\x8c\x82T%vr\x9b\xba\u0559\xb6R%\xa3Re:\xafT9\x10~t\x00\xa3\x952\xb2mZi\x84\xa9\xb4\xba\u0726\xaf\x03\x80\xd1B\xb7\xbb\u02c11M\xd3W\xba\xdd1jD\xd9]Z\xad\xf4\n\u057c\xd9\x0e\xfa\x0e\xec\xc0\xbc\n\xb0\r\xd7w/8g\xa1x :&\x10;\x9e\x9dX\x0f\x9a\xac\"#\xef\fj\x1c\xfd\xe1\x00rF\xad\x99\xc8\xccsa\x04\a#(|!\a\x92'\xa4\xac\x973YY/\x91\xd8e\xb7r\x17r\"\x84\xe4_;\xadf\xcc\x00\x029}\x96^\xacG\xc65\xe7\xe9~T\x9c\xee-_\x18u8\x05\xecNG\xbaO\xaf\x03\x8fp\xad\xf9H\xe7E\xa5D\r\x02\x9f\xa39\xf5\xa2=5\xda{/vs:\x80H.uL\xc4\xc53\x9dC@f\xd6r\x00\x87\xb4PZ\v+\xb1\u0500\x1f\xac\u0326\xd5f&\x96[\x14\x95Z\a\x82\b\x0f.1Z\xb6\xa2\xb9\r\x88\x16\xf1I-\xa3\x9c\x96.\xa5:\x9f\xe5\xf4\x93<\xf1e\xec|\x19S\xb3,\x1d\x93\xe7\xd36S1\u026c\x15\xa7\x1b\xa9DS}\x92,\xc7\xcb\U0004af54\x85\xe8k\x03\xb7\xc6v\x81ga\x13X\xf3\xefA\x90\xf3\xe6`;\xc5kUh\xd7-\xf0r\f\xd5e\xda^\xa6\xfb\xb4\x10u'\x19me![\xa92\xd9m\xe7\xc4\xec>\xab\x91\xb0\xc0\x99\u02e2R\x15\xd8\v'n\xb4\xae\xc1e\xd8C\xbea!\x96i\u0559VT\u028c\xe7\xdeJ\xd98\xa7\xba\xad\xc3*\x95\xe9]SKc\u06da\xc3v\x8dn\x8d\xb7\x00\xb1\u03b4R\f\x17\x06\xb1\\g\xdd\xe8\"b\u0098\xb6\xba\xe9\r:\xe0l_;\xe3!D\xec\xc0v:\x97X\x12\x95jz\xd7t&\u0476\xb52\xa6nm;\x87\xcb\x19\xddl6X:4\n8u\xf6D\x01\x9brx\x99\xbe\x1e\x87.E\xe9\x1a\u02bd\xdb`%y]\a_\xa4\aL\xbe\xbc\x83\xc0<n\xef\xb4\xc8\x1e78\n\xd2\xc7\x19\fev\xca\\\xdd7\u0187\xf7\xff\u059d\xcb\xe2s\xc8+\vY\aF_\xeeN\xd9\xe0\xd6\xf86\xf9\x13\x18\xbatoC\xc9\xe8p)\xbc\x99c\xa8&b\xc6'#P\x04\x99pb\x90\xcd\xf6\xe5H}\xc4\x18\x9c\x8f\u050cOz\xe4\u03c9\xe3z\u046aS\xc7\x1f~\x84\xe84\xf0\x13\xae\xf1\x19YV2a`\x16\xb1\x87\xaf`\x84{1LB\xbeD\xbcP\u03b7\xe9\xb5\xdf\xcc\u01cb\a\xdex\xf8\xf2\xaf_\xd4\\\xe3\x82\v\xdb\xecE@~n\xe7\x92\x00a4j\u00b1\xbc\xb0\x1d\xc7\u05301\u03e8A\x8b\x8e\xa9a\xb3\x8e\xee\xf8\x90\x89\u064c\xe0\xd70+D./\x1b~2}\xa8e6l\x8c\xc9\xc0\xb8\xe3\xfcVN\xe7\xb8\xe8\xf1\xf47+\xc8\xcerV<\x1aF\xfea\xc3\xc3H/G8\x8e]4%\xd9\xe9{(#\xff\x80\x87\x91\x89\xefr<=\x8fc<\x8e\\\xe1\x90086\x1d\x0e\x16c\xb0\x18\x82E\xaf\xe2\xdb\xed~-\u4751\xaa\xc30\xbb\xbb\xe5\xd65\xa3\x1c\xfe\x93\x10\x81\xc1\x0ev\x00\xda\x17o\xebA\xd8y\xb4\x06x@k\x80\xeb\xdc\x1d\x0fa\xb5\f\xdbIz\x10\r;\x8b:0D\u035d\x99\xa0\xd0\xfe\x00-\xb5s\xc1\xa2\xa5\x06\f\u06d47\xcd\xee\xa0\xe1T\xb5\x1c\xbbK<\xf1\xf1B\xeb\x8d\xfb\x11\x99\xfc\x10\xf9\xe9\xf3\xc0\u0081\xf2\xe3;\xd7\xe9Q8\x9c)N\\\xb5\x13\xa3\xef#\xbc,I\xfe\v\x00\x00\xff\xff\xf1\xf9\xbd5\x9b\x0f\x00\x00")
+// Data size: 1107 bytes.
+var cuegenInstanceData = []byte("\x01\x1f\x8b\b\x00\x00\x00\x00\x00\x00\xff\xd4WQ\x8b\xdc6\x10\xb66W\xa8D\xda\xfc\x82\x82\xab\x87pY\xe8\xbe\x16\x16\u00bd\xa4\x81\xbc\x94\xd2\xd7#\x1c:[\xf6\xb9\xf1J\u0196\xcb\x1d\xdd}h\x9a\xa6\xfd\x0f\xfd\xaf\xd92\x1a\u0276d\xef\x1dIK\xa1~\xb2\xbf\xd1\xcc|\x9a\x19i\xc6_\x1c\xffX\x91\xd5\xf1\u03c4\x1c\xdf&\u0277\xc7_\x1f\x11\xf2\xb8R\x9d\x11*\x93/\x84\x11\x80\x93G\xe4\xecG\xad\rY%\xe4\xec\aan\xc8\xe3\x84|\xf6\xb2\xaaeG\x8e\xef\x93$\xf9\xea\xf8\xfb\x8a\x90//_g\xbd\xdc\x14U\xed4\xdf'\xe4\xf8.I\u038f\xbf=\"\xe4\xf3\x11\u007f\x97\x90\x159\xfb^\xec$\x18:\xb3 K\x92\xe4\u00d3\xbf\x80\t!+B\xa8\xb9kd\xb7\xc9zI><y\u06c8\xec\x8d(ez\xddWu\xce\x18\xb8N\xb7\xdb\xf4\x17F\xc1\xaa\x12;\xb9M\xdd\u04d9\xb6R%\xa3Re:\xafT9\b\xbes\x00\xa3\x952\xb2mZi\x84\xa9\xb4\xba\u0626\xaf\x02\x80\xd1B\xb7\xbb\x8bA1M\u04d7\xba\xdd1jD\xd9]X\xaf\xf4\x12\u077c\xde\x0e\xfe\x0e\xec\xc0\xbc\v\xe0\x86\xcf\xd7\xcf9g\xa1y\x10:%0;\xae\x9d\xb0\aO\u0591\x91\xb7\x06=\x8e\xfb\xe1\x00rF-MT\xe6\xb90\x82\x03\t\no\xa8\x81\xe2\x89(\xeb\xe5\xccV\xd6K\x14v\u064d\u0705\x9a\b\xa1\xf8\xa7N\xab\x992\x80 N\x9f\xa6\xe7\xebQq\xcdy\xba\x1f\x1d\xa7{\xab\x17F\x1dV\x81\xba\xf3\x91\xee\u04eb`G\xf8\xac\xf9(\xe7E\xa5D\r\x06\x9f!\x9dz\x91O\x8d|\xef\xc4n.\a\x10\u0165\x8e\x85\xf8\xf0L\xe7\x10\x90\x19[\x0e\xe0\x90\x16Jka-\x96\x1a\xf0\x83\xb5\u0674\xda\xcc\xccr\x8b:\xa7\xadhn\x82\b[\xc4\u7b4c\xd2V\xba\xac\xe9|\x96\xb6O\"\xeb+\xd5\xd1\x1d\xa3\xbfl\x1d\xf3\xe333s1I\x9e5\xa7\x1b\xa9DS}\x92-\xa7\xcb\xf1\x14\xbd\x90\x85\xe8k\x03\a\xc3\x1e\xf4\xa7\xe19_\xf3o\xc0\x90\xdb\xcd\xc1^\x06\xafT\xa1\u0745\x80\xf5?\x14\x90i{\x99\xee\xd3B\u051dd\xb4\x95\x85l\xa5\xcad\xb7\x9d\v\xb3\xbb\xacF\xc1\x82f.\x8bJU\xc0\x17V\\k]\u00d6\xe1[\u0528\x82X\xa6UgZQ)3\xae{#e\xe36\xd5m\x1dV\xa9L\xef\x9aZ\x1a{s9l\xd7\xe8\xd6x\x06\x88u\xa6\x95b8\x13\x88\xe5:\xeb\xc6-\"&\x8ci\xab\xeb\xde\xe0\x06\x1c\xf7\xb5#\x0f!b\a\xb6\u04f9\u0112\xa8T\u04fb{e\x12m[+c\xea\xd6\xf6rp9\xa3\x9b\xcd\x06K\x87F\x01\xa7\x8eO\x14\xb0\xa9\x86\xb7\xe9\xebq\xb8\x88(]C\xb9w\x1b\xac$\xef\xeb\xe0\x8b\xf4\x80\u0257\xb7\x10\x98\x87\xf9N\x8b\xeca\xc2Q\x90>\x8e0\x94\xd9)\xba\xbao\x8c\x0f\xef\u007f\xed[\xfe,\xea\u007f9\xb1\xff\x88\xab\xbd\xb4O\x91\xcde\xf1\u007f(B\x16\xaa\x0e\x8a\xfel:g\u00f6\xc6^\xe9W`\xec\u04bd\x8d%\xa3\xc3\t\xf64\u01fcN\u030c-,p\x04\xa9pfP\xcd6\x91\xc8}\xa4\x18\xac\x8f\u070c#F\xb4\x9f\x13\xcb\xf5\"\xabS\xcb\xefo\x8at\x1a\xf8\x89\xd6\xd8\xf3\x96\x9dL\x14\x98E\xec\xe2K\x18)\x9f\x0f\x93\x99/\x11o\x94\xf3mz\xe5?\xe6\xe3\xce=3\a\xbc\xf9V\x1du\x82\xb8\xe0\u009ep\x1e\x88\x9f\xd99)@\x18\x8d:Fl/\xec\x1d\xb14\xec\"3i\xd0Obi\xd8Y\xa2C>d\xc2\x06`)L\xc38\x16my\x99\xf8\xc9\xf4\xa1\x97\xd9d4&\x03\xe3\x8e\xf3d9\x9d+\xa3N\xefOV\x90\x9d\xe5\xacx4\x8c\xfc\xfd\xc4\xc3H/G8\x8e]4\xd2\u067f\x81\xa1\x8c\xfc\xb4\x11F&>\xcb\xf14?\xfeV\xe0|\x18N4\xc3\u01a6\x93\xccb\f\x16C\xb0\xb8\xab\xf8t\xbb_\x1dyk\xa4\xea0\xcc\xeel\xb9\xe7\x8aQ\x0e\xffm\x88\xc0\x14\n_\x00\xda\xf6\xbc\xf5 |y\xb4\x06x@k\x80\xeb\xdc-\x0fa\xb5\f\xdb\xc9~0\r_\x16u`\x88\x9a[3A\xe1\xfa\x03\xb4\xd4n\v\x16-5`xMyj\xf6\v.\x9c\xaa\x96\xe3\xed\x12\x8f\xa7\xbc\xd0z\xe3~\x8c&?h~T>\xb0p\xfa\xfd\xf8\x9b\xeb\xf4\xdc\x1e\x0e@'\x8e\u06899\xfd\x01]\x96$\u007f\a\x00\x00\xff\xff\x14\xd0\xf53+\x10\x00\x00")