From e556b7afce94442cdeb67f98eff7896f176aa5fd Mon Sep 17 00:00:00 2001 From: fredrikr79 Date: Wed, 5 Nov 2025 11:28:37 +0100 Subject: [PATCH] ex5: report --- assignment5/report.md | 150 +++ assignment5/report.pdf | 2287 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 2437 insertions(+) create mode 100644 assignment5/report.md create mode 100644 assignment5/report.pdf diff --git a/assignment5/report.md b/assignment5/report.md new file mode 100644 index 0000000..93ad182 --- /dev/null +++ b/assignment5/report.md @@ -0,0 +1,150 @@ +--- +title: "assignment 5 - prolog" +date: 2025-11-05 +author: fredrik robertsen +margin: + x: 3.5cm + y: 4cm +fontsize: 14pt +mainfont: libertinus serif +lineheight: 1.5 +pagesize: a4 +--- + +## task 1 + +the following code is my solution: + +```prolog +payment(Sum, Coins) :- + payment_acc(0, Sum, Coins). + +payment_acc(Acc, Sum, []) :- + Acc #= Sum. + +payment_acc(Acc, Sum, [coin(Count, Value, Available)|Tail]) :- + Count in 0..Available, + NewAcc #= Acc + Count * Value, + payment_acc(NewAcc, Sum, Tail). +``` + +the predicate `payment/2` has two arguments (hence `/2`). the first, `Sum`, is +a target cost we are attempting to make from a collection of `Coins`, a list of +`coin/3` items, specifying the value of the coin type and how many of such coins +we have available. + +this is a classic constraint satisfaction problem which is solved elegantly in +prolog, even with my messy first-timer code above. + +we are essentially making a search in the state graph of our problem space. this +is what prolog does when it performs a combination of inference/deduction, DFS +and backtracking to find values that fit our variables, given the stated +predicates. + +in this program we create a helper function which `acc`umulates a sum accross +the recursion. this is similar to how we would solve it in oz, except we would +need to implement the search explicitly. prolog does a lot of heavy lifting in +that regard, since we are essentially only recursively creating a long string of +CNF logic statements that constrain our problem until a solution can be found. + +note that i am also using patternmatching to destructure the arguments of the +`payment_acc` predicate. + +## task 2 + +### subtask 1 + +this is my solution code: + +```prolog +% arity 4 predicate +plan(Cabin1, Cabin2, Path, TotalDistance) :- + plan(Cabin1, Cabin2, [Cabin1], Path, TotalDistance). + +% base case +plan(Cabin1, Cabin2, Visited, Path, Distance) :- + not(Cabin1 = Cabin2), + distance(Cabin1, Cabin2, Distance, 1), + append(Visited, [Cabin2], Path). + +% recursive case +plan(Cabin1, Cabin2, Visited, Path, TotalDistance) :- + not(Cabin1 = Cabin2), + distance(Cabin1, CabinX, Distance, 1), + \+ member(CabinX, Visited), + append(Visited, [CabinX], NewVisited), + plan(CabinX, Cabin2, NewVisited, Path, SubDistance), + TotalDistance is Distance + SubDistance. +``` + +as you can see, i learned that you can overload predicates with differing +arities, such that the previous `payment_acc` could've only been named +`payment`. we can also do multiple definitions to clearly state the different +branches of a recursive algorithm, such as the base case and the recursive step. + +we can then use a `plan/5` auxiliary function to carry a log of what cabins we +have already `Visited`. thus, our base case becomes the case where we have +a direct connection between the first and last cabin, such that we can easily +read the distance from the predicate. then just make sure to mark `Cabin2` as +visited. + +in the recursive step we assume there is a `CabinX` that lies between our start +and end cabins. this cabin cannot have been visited previously, lest we enter an +infinite cycle -- `\+ member(CabinX, Visited)`. we can then visit `CabinX` and +continue our search recursively from there -- `plan(CabinX, Cabin2, ...)`. +lastly, we can calculate the `TotalDistance` as the sum of the total distance from `CabinX` +to `Cabin2` and the total distance from `Cabin1` to `CabinX`. + +``` +Cabin1 --> CabinX --> Cabin2 + L Distance J L SubDistance J + L TotalDistance J +``` + +### subtask 2 + +my initial solution was: + +```prolog +bestplan(Cabin1, Cabin2, ShortestPath, ShortestDistance) :- + findall([Path, Distance], (plan(Cabin1, Cabin2, Path, Distance)), Solutions), + shortestpath(Solutions, [ShortestPath, ShortestDistance]). + +% takes a list of [Path, Distance] pairs +shortestpath([[Path, Distance]|[]], Solution) :- Solution = [Path, Distance]. +shortestpath([[Path, Distance]|Tail], [ShortestPath, ShortestDistance]) :- + shortestpath(Tail, [TailPath, TailDistance]), + (Distance < TailDistance -> + (ShortestPath = Path, ShortestDistance = Distance) + ; + (ShortestPath = TailPath, ShortestDistance = TailDistance) + ). +``` + +but i cleaned it up to this: + +```prolog +bestplan(Cabin1, Cabin2, ShortestPath, ShortestDistance) :- + findall([Path, Distance], (plan(Cabin1, Cabin2, Path, Distance)), Solutions), + sort(2, @=<, Solutions, [ShortestSolution|_]), + [ShortestPath, ShortestDistance] = ShortestSolution. +``` + +the main idea is a bit naive: we are just picking out the shortest path from +_all_ the paths we find using the `plan` predicate from the last subtask. it +sounds like it wouldn't be particularly performant, but i think prolog does +a lot of work such that it isn't too terrible. + +anyway, i initially just expanded all the paths found by `plan`, then used +a homemade `shortestpath/2` predicate that works on a list of `[Path, Distance]` +pairs to tail recurse and find the shortest such pair, keeping a running +shortest distance result. this is similar to oz, taking the head of the list, +checking if it is smaller than the current accumulated value, then carry on the +smaller value of the two. the base case is when we only have a single path and +distance: we return that as a solution. + +but this entire process can be shortened to simply sorting the solutions based +on the distance and then picking the first one of that list. the code above +performs such a sort and only takes the first solution in the sorted list, +sorting from low to high based on the key `2`, such that we are sorting the +distance. diff --git a/assignment5/report.pdf b/assignment5/report.pdf new file mode 100644 index 0000000..2f099f3 --- /dev/null +++ b/assignment5/report.pdf @@ -0,0 +1,2287 @@ +%PDF-1.7 +% + +1 0 obj +<< + /Type /Pages + /Count 5 + /Kids [154 0 R 156 0 R 158 0 R 160 0 R 162 0 R] +>> +endobj + +2 0 obj +<< + /Type /Outlines + /First 3 0 R + /Last 4 0 R + /Count 2 +>> +endobj + +3 0 obj +<< + /Parent 2 0 R + /Next 4 0 R + /Title (task 1) + /Dest 150 0 R +>> +endobj + +4 0 obj +<< + /Parent 2 0 R + /Prev 3 0 R + /First 5 0 R + /Last 6 0 R + /Count -2 + /Title (task 2) + /Dest 153 0 R +>> +endobj + +5 0 obj +<< + /Parent 4 0 R + /Next 6 0 R + /Title (subtask 1) + /Dest 151 0 R +>> +endobj + +6 0 obj +<< + /Parent 4 0 R + /Prev 5 0 R + /Title (subtask 2) + /Dest 152 0 R +>> +endobj + +7 0 obj +<< + /Nums [0 119 0 R 1 120 0 R 2 121 0 R 3 122 0 R 4 123 0 R] +>> +endobj + +8 0 obj +<< + /Type /StructTreeRoot + /RoleMap << + /Datetime /Span + /Terms /Part + /Title /P + /Strong /Span + /Em /Span + >> + /K [14 0 R] + /ParentTree << + /Nums [0 9 0 R 1 10 0 R 2 11 0 R 3 12 0 R 4 13 0 R] + >> + /ParentTreeNextKey 5 +>> +endobj + +9 0 obj +[118 0 R 117 0 R 114 0 R 113 0 R 112 0 R 111 0 R 110 0 R 108 0 R 107 0 R 105 0 R 105 0 R 104 0 R 103 0 R 102 0 R 95 0 R 100 0 R 95 0 R 99 0 R 95 0 R 98 0 R 95 0 R 95 0 R 97 0 R 95 0 R 95 0 R 96 0 R 95 0 R 95 0 R 94 0 R 94 0 R 93 0 R 93 0 R 93 0 R] +endobj + +10 0 obj +[93 0 R 93 0 R 91 0 R 92 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 91 0 R 89 0 R 89 0 R 90 0 R 89 0 R 88 0 R 87 0 R 86 0 R 85 0 R 84 0 R 83 0 R 81 0 R 80 0 R 79 0 R 78 0 R 77 0 R 75 0 R 74 0 R 73 0 R 72 0 R 71 0 R 70 0 R 69 0 R 68 0 R] +endobj + +11 0 obj +[64 0 R 64 0 R 66 0 R 64 0 R 65 0 R 64 0 R 64 0 R 64 0 R 60 0 R 63 0 R 60 0 R 60 0 R 62 0 R 60 0 R 60 0 R 60 0 R 60 0 R 61 0 R 60 0 R 50 0 R 59 0 R 50 0 R 50 0 R 50 0 R 58 0 R 50 0 R 50 0 R 57 0 R 50 0 R 56 0 R 50 0 R 55 0 R 50 0 R 50 0 R 54 0 R 50 0 R 53 0 R 50 0 R 50 0 R 52 0 R 50 0 R 51 0 R 50 0 R 49 0 R 48 0 R 47 0 R 45 0 R 44 0 R 43 0 R 42 0 R 42 0 R 41 0 R 41 0 R 39 0 R 38 0 R] +endobj + +12 0 obj +[38 0 R 37 0 R 37 0 R 36 0 R 35 0 R 34 0 R 33 0 R 32 0 R 32 0 R 31 0 R 29 0 R 28 0 R 27 0 R 27 0 R 26 0 R 25 0 R 21 0 R 23 0 R 21 0 R 22 0 R 21 0 R 21 0 R 21 0 R 17 0 R 20 0 R 17 0 R 17 0 R 19 0 R 17 0 R 18 0 R 18 0 R 17 0 R 17 0 R 17 0 R 17 0 R 17 0 R 15 0 R 15 0 R 15 0 R] +endobj + +13 0 obj +[15 0 R 16 0 R 15 0 R 15 0 R] +endobj + +14 0 obj +<< + /Type /StructElem + /S /Document + /P 8 0 R + /K [118 0 R 115 0 R 114 0 R 113 0 R 112 0 R 101 0 R 95 0 R 94 0 R 93 0 R 91 0 R 89 0 R 88 0 R 87 0 R 86 0 R 67 0 R 64 0 R 60 0 R 50 0 R 46 0 R 45 0 R 44 0 R 30 0 R 29 0 R 24 0 R 21 0 R 17 0 R 15 0 R] +>> +endobj + +15 0 obj +<< + /Type /StructElem + /S /P + /P 14 0 R + /K [36 37 38 << + /Type /MCR + /MCID 0 + /Pg 162 0 R + >> 16 0 R << + /Type /MCR + /MCID 2 + /Pg 162 0 R + >> << + /Type /MCR + /MCID 3 + /Pg 162 0 R + >>] + /Pg 160 0 R +>> +endobj + +16 0 obj +<< + /Type /StructElem + /S /Code + /P 15 0 R + /K [1] + /Pg 162 0 R +>> +endobj + +17 0 obj +<< + /Type /StructElem + /S /P + /P 14 0 R + /K [23 20 0 R 25 26 19 0 R 28 18 0 R 31 32 33 34 35] + /Pg 160 0 R +>> +endobj + +18 0 obj +<< + /Type /StructElem + /S /Code + /P 17 0 R + /K [29 30] + /Pg 160 0 R +>> +endobj + +19 0 obj +<< + /Type /StructElem + /S /Code + /P 17 0 R + /K [27] + /Pg 160 0 R +>> +endobj + +20 0 obj +<< + /Type /StructElem + /S /Code + /P 17 0 R + /K [24] + /Pg 160 0 R +>> +endobj + +21 0 obj +<< + /Type /StructElem + /S /P + /P 14 0 R + /K [16 23 0 R 18 22 0 R 20 21 22] + /Pg 160 0 R +>> +endobj + +22 0 obj +<< + /Type /StructElem + /S /Code + /P 21 0 R + /K [19] + /Pg 160 0 R +>> +endobj + +23 0 obj +<< + /Type /StructElem + /S /Em + /P 21 0 R + /K [17] + /Pg 160 0 R +>> +endobj + +24 0 obj +<< + /Type /StructElem + /S /Code + /P 14 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [28 0 R 27 0 R 26 0 R 25 0 R] +>> +endobj + +25 0 obj +<< + /Type /StructElem + /S /P + /P 24 0 R + /K [15] + /Pg 160 0 R +>> +endobj + +26 0 obj +<< + /Type /StructElem + /S /P + /P 24 0 R + /K [14] + /Pg 160 0 R +>> +endobj + +27 0 obj +<< + /Type /StructElem + /S /P + /P 24 0 R + /K [12 13] + /Pg 160 0 R +>> +endobj + +28 0 obj +<< + /Type /StructElem + /S /P + /P 24 0 R + /K [11] + /Pg 160 0 R +>> +endobj + +29 0 obj +<< + /Type /StructElem + /S /P + /P 14 0 R + /K [10] + /Pg 160 0 R +>> +endobj + +30 0 obj +<< + /Type /StructElem + /S /Code + /P 14 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [43 0 R 42 0 R 41 0 R 40 0 R 39 0 R 38 0 R 37 0 R 36 0 R 35 0 R 34 0 R 33 0 R 32 0 R 31 0 R] +>> +endobj + +31 0 obj +<< + /Type /StructElem + /S /P + /P 30 0 R + /K [9] + /Pg 160 0 R +>> +endobj + +32 0 obj +<< + /Type /StructElem + /S /P + /P 30 0 R + /K [7 8] + /Pg 160 0 R +>> +endobj + +33 0 obj +<< + /Type /StructElem + /S /P + /P 30 0 R + /K [6] + /Pg 160 0 R +>> +endobj + +34 0 obj +<< + /Type /StructElem + /S /P + /P 30 0 R + /K [5] + /Pg 160 0 R +>> +endobj + +35 0 obj +<< + /Type /StructElem + /S /P + /P 30 0 R + /K [4] + /Pg 160 0 R +>> +endobj + +36 0 obj +<< + /Type /StructElem + /S /P + /P 30 0 R + /K [3] + /Pg 160 0 R +>> +endobj + +37 0 obj +<< + /Type /StructElem + /S /P + /P 30 0 R + /K [1 2] + /Pg 160 0 R +>> +endobj + +38 0 obj +<< + /Type /StructElem + /S /P + /P 30 0 R + /K [54 << + /Type /MCR + /MCID 0 + /Pg 160 0 R + >>] + /Pg 158 0 R +>> +endobj + +39 0 obj +<< + /Type /StructElem + /S /P + /P 30 0 R + /K [53] + /Pg 158 0 R +>> +endobj + +40 0 obj +<< + /Type /StructElem + /S /P + /P 30 0 R + /K [] +>> +endobj + +41 0 obj +<< + /Type /StructElem + /S /P + /P 30 0 R + /K [51 52] + /Pg 158 0 R +>> +endobj + +42 0 obj +<< + /Type /StructElem + /S /P + /P 30 0 R + /K [49 50] + /Pg 158 0 R +>> +endobj + +43 0 obj +<< + /Type /StructElem + /S /P + /P 30 0 R + /K [48] + /Pg 158 0 R +>> +endobj + +44 0 obj +<< + /Type /StructElem + /S /P + /P 14 0 R + /K [47] + /Pg 158 0 R +>> +endobj + +45 0 obj +<< + /Type /StructElem + /S /H3 + /P 14 0 R + /T (subtask 2) + /K [46] + /Pg 158 0 R +>> +endobj + +46 0 obj +<< + /Type /StructElem + /S /Code + /P 14 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [49 0 R 48 0 R 47 0 R] +>> +endobj + +47 0 obj +<< + /Type /StructElem + /S /P + /P 46 0 R + /K [45] + /Pg 158 0 R +>> +endobj + +48 0 obj +<< + /Type /StructElem + /S /P + /P 46 0 R + /K [44] + /Pg 158 0 R +>> +endobj + +49 0 obj +<< + /Type /StructElem + /S /P + /P 46 0 R + /K [43] + /Pg 158 0 R +>> +endobj + +50 0 obj +<< + /Type /StructElem + /S /P + /P 14 0 R + /K [19 59 0 R 21 22 23 58 0 R 25 26 57 0 R 28 56 0 R 30 55 0 R 32 33 54 0 R 35 53 0 R 37 38 52 0 R 40 51 0 R 42] + /Pg 158 0 R +>> +endobj + +51 0 obj +<< + /Type /StructElem + /S /Code + /P 50 0 R + /K [41] + /Pg 158 0 R +>> +endobj + +52 0 obj +<< + /Type /StructElem + /S /Code + /P 50 0 R + /K [39] + /Pg 158 0 R +>> +endobj + +53 0 obj +<< + /Type /StructElem + /S /Code + /P 50 0 R + /K [36] + /Pg 158 0 R +>> +endobj + +54 0 obj +<< + /Type /StructElem + /S /Code + /P 50 0 R + /K [34] + /Pg 158 0 R +>> +endobj + +55 0 obj +<< + /Type /StructElem + /S /Code + /P 50 0 R + /K [31] + /Pg 158 0 R +>> +endobj + +56 0 obj +<< + /Type /StructElem + /S /Code + /P 50 0 R + /K [29] + /Pg 158 0 R +>> +endobj + +57 0 obj +<< + /Type /StructElem + /S /Code + /P 50 0 R + /K [27] + /Pg 158 0 R +>> +endobj + +58 0 obj +<< + /Type /StructElem + /S /Code + /P 50 0 R + /K [24] + /Pg 158 0 R +>> +endobj + +59 0 obj +<< + /Type /StructElem + /S /Code + /P 50 0 R + /K [20] + /Pg 158 0 R +>> +endobj + +60 0 obj +<< + /Type /StructElem + /S /P + /P 14 0 R + /K [8 63 0 R 10 11 62 0 R 13 14 15 16 61 0 R 18] + /Pg 158 0 R +>> +endobj + +61 0 obj +<< + /Type /StructElem + /S /Code + /P 60 0 R + /K [17] + /Pg 158 0 R +>> +endobj + +62 0 obj +<< + /Type /StructElem + /S /Code + /P 60 0 R + /K [12] + /Pg 158 0 R +>> +endobj + +63 0 obj +<< + /Type /StructElem + /S /Code + /P 60 0 R + /K [9] + /Pg 158 0 R +>> +endobj + +64 0 obj +<< + /Type /StructElem + /S /P + /P 14 0 R + /K [0 1 66 0 R 3 65 0 R 5 6 7] + /Pg 158 0 R +>> +endobj + +65 0 obj +<< + /Type /StructElem + /S /Code + /P 64 0 R + /K [4] + /Pg 158 0 R +>> +endobj + +66 0 obj +<< + /Type /StructElem + /S /Code + /P 64 0 R + /K [2] + /Pg 158 0 R +>> +endobj + +67 0 obj +<< + /Type /StructElem + /S /Code + /P 14 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [85 0 R 84 0 R 83 0 R 82 0 R 81 0 R 80 0 R 79 0 R 78 0 R 77 0 R 76 0 R 75 0 R 74 0 R 73 0 R 72 0 R 71 0 R 70 0 R 69 0 R 68 0 R] +>> +endobj + +68 0 obj +<< + /Type /StructElem + /S /P + /P 67 0 R + /K [32] + /Pg 156 0 R +>> +endobj + +69 0 obj +<< + /Type /StructElem + /S /P + /P 67 0 R + /K [31] + /Pg 156 0 R +>> +endobj + +70 0 obj +<< + /Type /StructElem + /S /P + /P 67 0 R + /K [30] + /Pg 156 0 R +>> +endobj + +71 0 obj +<< + /Type /StructElem + /S /P + /P 67 0 R + /K [29] + /Pg 156 0 R +>> +endobj + +72 0 obj +<< + /Type /StructElem + /S /P + /P 67 0 R + /K [28] + /Pg 156 0 R +>> +endobj + +73 0 obj +<< + /Type /StructElem + /S /P + /P 67 0 R + /K [27] + /Pg 156 0 R +>> +endobj + +74 0 obj +<< + /Type /StructElem + /S /P + /P 67 0 R + /K [26] + /Pg 156 0 R +>> +endobj + +75 0 obj +<< + /Type /StructElem + /S /P + /P 67 0 R + /K [25] + /Pg 156 0 R +>> +endobj + +76 0 obj +<< + /Type /StructElem + /S /P + /P 67 0 R + /K [] +>> +endobj + +77 0 obj +<< + /Type /StructElem + /S /P + /P 67 0 R + /K [24] + /Pg 156 0 R +>> +endobj + +78 0 obj +<< + /Type /StructElem + /S /P + /P 67 0 R + /K [23] + /Pg 156 0 R +>> +endobj + +79 0 obj +<< + /Type /StructElem + /S /P + /P 67 0 R + /K [22] + /Pg 156 0 R +>> +endobj + +80 0 obj +<< + /Type /StructElem + /S /P + /P 67 0 R + /K [21] + /Pg 156 0 R +>> +endobj + +81 0 obj +<< + /Type /StructElem + /S /P + /P 67 0 R + /K [20] + /Pg 156 0 R +>> +endobj + +82 0 obj +<< + /Type /StructElem + /S /P + /P 67 0 R + /K [] +>> +endobj + +83 0 obj +<< + /Type /StructElem + /S /P + /P 67 0 R + /K [19] + /Pg 156 0 R +>> +endobj + +84 0 obj +<< + /Type /StructElem + /S /P + /P 67 0 R + /K [18] + /Pg 156 0 R +>> +endobj + +85 0 obj +<< + /Type /StructElem + /S /P + /P 67 0 R + /K [17] + /Pg 156 0 R +>> +endobj + +86 0 obj +<< + /Type /StructElem + /S /P + /P 14 0 R + /K [16] + /Pg 156 0 R +>> +endobj + +87 0 obj +<< + /Type /StructElem + /S /H3 + /P 14 0 R + /T (subtask 1) + /K [15] + /Pg 156 0 R +>> +endobj + +88 0 obj +<< + /Type /StructElem + /S /H2 + /P 14 0 R + /T (task 2) + /K [14] + /Pg 156 0 R +>> +endobj + +89 0 obj +<< + /Type /StructElem + /S /P + /P 14 0 R + /K [10 11 90 0 R 13] + /Pg 156 0 R +>> +endobj + +90 0 obj +<< + /Type /StructElem + /S /Code + /P 89 0 R + /K [12] + /Pg 156 0 R +>> +endobj + +91 0 obj +<< + /Type /StructElem + /S /P + /P 14 0 R + /K [2 92 0 R 4 5 6 7 8 9] + /Pg 156 0 R +>> +endobj + +92 0 obj +<< + /Type /StructElem + /S /Code + /P 91 0 R + /K [3] + /Pg 156 0 R +>> +endobj + +93 0 obj +<< + /Type /StructElem + /S /P + /P 14 0 R + /K [30 31 32 << + /Type /MCR + /MCID 0 + /Pg 156 0 R + >> << + /Type /MCR + /MCID 1 + /Pg 156 0 R + >>] + /Pg 154 0 R +>> +endobj + +94 0 obj +<< + /Type /StructElem + /S /P + /P 14 0 R + /K [28 29] + /Pg 154 0 R +>> +endobj + +95 0 obj +<< + /Type /StructElem + /S /P + /P 14 0 R + /K [14 100 0 R 16 99 0 R 18 98 0 R 20 21 97 0 R 23 24 96 0 R 26 27] + /Pg 154 0 R +>> +endobj + +96 0 obj +<< + /Type /StructElem + /S /Code + /P 95 0 R + /K [25] + /Pg 154 0 R +>> +endobj + +97 0 obj +<< + /Type /StructElem + /S /Code + /P 95 0 R + /K [22] + /Pg 154 0 R +>> +endobj + +98 0 obj +<< + /Type /StructElem + /S /Code + /P 95 0 R + /K [19] + /Pg 154 0 R +>> +endobj + +99 0 obj +<< + /Type /StructElem + /S /Code + /P 95 0 R + /K [17] + /Pg 154 0 R +>> +endobj + +100 0 obj +<< + /Type /StructElem + /S /Code + /P 95 0 R + /K [15] + /Pg 154 0 R +>> +endobj + +101 0 obj +<< + /Type /StructElem + /S /Code + /P 14 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [111 0 R 110 0 R 109 0 R 108 0 R 107 0 R 106 0 R 105 0 R 104 0 R 103 0 R 102 0 R] +>> +endobj + +102 0 obj +<< + /Type /StructElem + /S /P + /P 101 0 R + /K [13] + /Pg 154 0 R +>> +endobj + +103 0 obj +<< + /Type /StructElem + /S /P + /P 101 0 R + /K [12] + /Pg 154 0 R +>> +endobj + +104 0 obj +<< + /Type /StructElem + /S /P + /P 101 0 R + /K [11] + /Pg 154 0 R +>> +endobj + +105 0 obj +<< + /Type /StructElem + /S /P + /P 101 0 R + /K [9 10] + /Pg 154 0 R +>> +endobj + +106 0 obj +<< + /Type /StructElem + /S /P + /P 101 0 R + /K [] +>> +endobj + +107 0 obj +<< + /Type /StructElem + /S /P + /P 101 0 R + /K [8] + /Pg 154 0 R +>> +endobj + +108 0 obj +<< + /Type /StructElem + /S /P + /P 101 0 R + /K [7] + /Pg 154 0 R +>> +endobj + +109 0 obj +<< + /Type /StructElem + /S /P + /P 101 0 R + /K [] +>> +endobj + +110 0 obj +<< + /Type /StructElem + /S /P + /P 101 0 R + /K [6] + /Pg 154 0 R +>> +endobj + +111 0 obj +<< + /Type /StructElem + /S /P + /P 101 0 R + /K [5] + /Pg 154 0 R +>> +endobj + +112 0 obj +<< + /Type /StructElem + /S /P + /P 14 0 R + /K [4] + /Pg 154 0 R +>> +endobj + +113 0 obj +<< + /Type /StructElem + /S /H2 + /P 14 0 R + /T (task 1) + /K [3] + /Pg 154 0 R +>> +endobj + +114 0 obj +<< + /Type /StructElem + /S /Span + /P 14 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [2] + /Pg 154 0 R +>> +endobj + +115 0 obj +<< + /Type /StructElem + /S /Div + /P 14 0 R + /K [116 0 R] +>> +endobj + +116 0 obj +<< + /Type /StructElem + /S /Div + /P 115 0 R + /K [117 0 R] +>> +endobj + +117 0 obj +<< + /Type /StructElem + /S /Span + /P 116 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [1] + /Pg 154 0 R +>> +endobj + +118 0 obj +<< + /Type /StructElem + /S /Span + /P 14 0 R + /A [<< + /O /Layout + /Placement /Block + >>] + /K [0] + /Pg 154 0 R +>> +endobj + +119 0 obj +<< + /Type /PageLabel + /S /D + /St 1 +>> +endobj + +120 0 obj +<< + /Type /PageLabel + /S /D + /St 2 +>> +endobj + +121 0 obj +<< + /Type /PageLabel + /S /D + /St 3 +>> +endobj + +122 0 obj +<< + /Type /PageLabel + /S /D + /St 4 +>> +endobj + +123 0 obj +<< + /Type /PageLabel + /S /D + /St 5 +>> +endobj + +124 0 obj +<< + /Type /Font + /Subtype /Type0 + /BaseFont /AXTEXR+LibertinusSerif-Italic-Identity-H + /Encoding /Identity-H + /DescendantFonts [125 0 R] + /ToUnicode 128 0 R +>> +endobj + +125 0 obj +<< + /Type /Font + /Subtype /CIDFontType0 + /BaseFont /AXTEXR+LibertinusSerif-Italic + /CIDSystemInfo << + /Registry (Adobe) + /Ordering (Identity) + /Supplement 0 + >> + /FontDescriptor 127 0 R + /DW 0 + /W [0 0 500 1 1 486 2 2 266] +>> +endobj + +126 0 obj +<< + /Length 9 + /Filter /FlateDecode +>> +stream +x{ +endstream +endobj + +127 0 obj +<< + /Type /FontDescriptor + /FontName /AXTEXR+LibertinusSerif-Italic + /Flags 131142 + /FontBBox [0 -10 500 700] + /ItalicAngle -12 + /Ascent 894 + /Descent -246 + /CapHeight 645 + /StemV 95.4 + /CIDSet 126 0 R + /FontFile3 129 0 R +>> +endobj + +128 0 obj +<< + /Length 633 + /Type /CMap + /WMode 0 +>> +stream +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: procset CIDInit +%%IncludeResource: procset CIDInit +%%BeginResource: CMap Custom +%%Title: (Custom Adobe Identity 0) +%%Version: 1 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Identity) def + /Supplement 0 def +end def +/CMapName /Custom def +/CMapVersion 1 def +/CMapType 0 def +/WMode 0 def +1 begincodespacerange +<0000> +endcodespacerange +2 beginbfchar +<0001> <0061> +<0002> <006C> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF +endstream +endobj + +129 0 obj +<< + /Length 592 + /Filter /FlateDecode + /Subtype /CIDFontType0C +>> +stream +xcd`aa`ddLJ-*+-N-L,ILI!#CAAB<}FFB ,~YFqAYy@ByT@wUfFF6>oǔTϔԼ̒JʢHD!$#U*Ғb=&F?f̝bڹ+n^?#\wdN9.洴znM\׹ef`d````OK@A!f 7x{,?:~`WN~Ofc(^}2X$1q`sh> +endobj + +131 0 obj +<< + /Type /Font + /Subtype /CIDFontType0 + /BaseFont /YKIBIO+LibertinusSerif-Bold + /CIDSystemInfo << + /Registry (Adobe) + /Ordering (Identity) + /Supplement 0 + >> + /FontDescriptor 133 0 R + /DW 0 + /W [0 0 500 1 1 505.99997 2 2 427 3 3 322 4 4 521 5 5 616 6 6 905 7 7 489 8 8 358 9 9 250 10 10 514 11 11 358 12 12 581 13 13 428 14 14 551 15 15 325 16 16 613 17 18 514 19 19 598 20 20 542] +>> +endobj + +132 0 obj +<< + /Length 11 + /Filter /FlateDecode +>> +stream +x +endstream +endobj + +133 0 obj +<< + /Type /FontDescriptor + /FontName /YKIBIO+LibertinusSerif-Bold + /Flags 131078 + /FontBBox [0 -238 893 700] + /ItalicAngle 0 + /Ascent 894 + /Descent -246 + /CapHeight 645 + /StemV 168.6 + /CIDSet 132 0 R + /FontFile3 135 0 R +>> +endobj + +134 0 obj +<< + /Length 886 + /Type /CMap + /WMode 0 +>> +stream +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: procset CIDInit +%%IncludeResource: procset CIDInit +%%BeginResource: CMap Custom +%%Title: (Custom Adobe Identity 0) +%%Version: 1 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Identity) def + /Supplement 0 def +end def +/CMapName /Custom def +/CMapVersion 1 def +/CMapType 0 def +/WMode 0 def +1 begincodespacerange +<0000> +endcodespacerange +20 beginbfchar +<0001> <0061> +<0002> <0073> +<0003> <0069> +<0004> <0067> +<0005> <006E> +<0006> <006D> +<0007> <0065> +<0008> <0074> +<0009> <0020> +<000A> <0035> +<000B> <002D> +<000C> <0070> +<000D> <0072> +<000E> <006F> +<000F> <006C> +<0010> <006B> +<0011> <0031> +<0012> <0032> +<0013> <0075> +<0014> <0062> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF +endstream +endobj + +135 0 obj +<< + /Length 2536 + /Filter /FlateDecode + /Subtype /CIDFontType0C +>> +stream +xUyxeOZ%TUeAaurYX[6i6)m3I;QzM#RR+EQy,>F}x.77f͚7f E"H(F$+_t0vţh>]gI,|sߘX7,foZb}ا/i;Xl6GZ4W^(ȋuRPn_-_|RR┺E&-S*RY},VBj 49K$4ẋbX,SBӖ{c,4u]>w18O7:rfp㽕.q6Iy&^H4-Oϋr +f W8؎@ %\qqA.r9oGC  0uuGAkܵnUC*qiH[̼=>HOG4; zx^wT B>L@&n+^+Y\qaQf!B&Rm:ILECN#-[_58taX+&C{w򚫇xS7bZ<.ވaT;D4exfVXLi)V+oUEG y*oA9&KwfOVU60UhFW9>͍gi«uVRCtIoyG= ]1m'zZBeff|tz'o]c;1xTw{Fz#{rB f!x۔p((G ^`?=AP21-h_/Z/tqD3Һ߽Reg3d{K3+J[gNme2Xowo%Q:~ +? q$v`^/#dqU&OGRA>&{alV,#<-{GΦ2++3p1*XE>kw;m7HxKimF\K6BpUͱ?XK@e,;m-*dVsWVis?{2uеU52.DV=K0 43x>_sgr8w ;e; T7'(,X4k,iݩkltmF:zׄR"+W扟&߂3HqIcȹ_Sp8 @\ݓM#‘/tY 8]/2KHm >f +ɢ#UoNGH} E0.m^ 5&)`So™,iH0  ND}M )[vUN3 +l(jW#.}}mOT,62be3@rFk=|$r, m44 b]TIuZ^P0!uC6 m؂]֊ʶ*F֚)5dq\6/{IڻN_N)Si_&[ߗosN{Lu [\H֒X0@|= +x1{u)p\Ou>H |:#HtH^A$r5.2,U"#YmBR1;MQh:i;,&qe42g07*,uz~~npZM\ͺNo S2PP(*Y4pLGhsW9LzkUP?R`BQNTȂ _Km b:,7/ܽjdRoނA9lGߘ|YsᆹνN +VtEeHAAWUi7]ӽaX4|:ȯ]yhhZމz97 a0XLJPȧ?!s׏~JjynߠCv6RvVƵh:l L̚?X +cI# ]&9j(x=¼\c]I+S(+T6E"gfh¯k)A#'6I/vU5RFi"׸ [=ax?;(' oec!}6Z3VH9>:%#@ .ۋu&6?a؝E!F&I-5b'DS8QI1Fk+$;q&cx酅0ƻ.b_,@0/H +\W?#>[PX}Zۅ5z'2W+OZ?Ĕ7]Tc6r)P,ؤJo-fճ"-'MJYƽ5C/Vj-F<9x4mM1LBjeS*HEsd "^OcC dejxH8bV$' +=B/HaJЎNHpV35 +endstream +endobj + +136 0 obj +<< + /Type /Font + /Subtype /Type0 + /BaseFont /MLDMCU+DejaVuSansMono + /Encoding /Identity-H + /DescendantFonts [137 0 R] + /ToUnicode 140 0 R +>> +endobj + +137 0 obj +<< + /Type /Font + /Subtype /CIDFontType2 + /BaseFont /MLDMCU+DejaVuSansMono + /CIDSystemInfo << + /Registry (Adobe) + /Ordering (Identity) + /Supplement 0 + >> + /FontDescriptor 139 0 R + /DW 0 + /CIDToGIDMap /Identity + /W [0 60 602.0508] +>> +endobj + +138 0 obj +<< + /Length 13 + /Filter /FlateDecode +>> +stream +x ~# +endstream +endobj + +139 0 obj +<< + /Type /FontDescriptor + /FontName /MLDMCU+DejaVuSansMono + /Flags 131077 + /FontBBox [0 -235.83984 602.0508 765.1367] + /ItalicAngle 0 + /Ascent 759.7656 + /Descent -240.23438 + /CapHeight 759.7656 + /StemV 95.4 + /CIDSet 138 0 R + /FontFile2 141 0 R +>> +endobj + +140 0 obj +<< + /Length 1446 + /Type /CMap + /WMode 0 +>> +stream +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: procset CIDInit +%%IncludeResource: procset CIDInit +%%BeginResource: CMap Custom +%%Title: (Custom Adobe Identity 0) +%%Version: 1 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Identity) def + /Supplement 0 def +end def +/CMapName /Custom def +/CMapVersion 1 def +/CMapType 0 def +/WMode 0 def +1 begincodespacerange +<0000> +endcodespacerange +60 beginbfchar +<0001> <0070> +<0002> <0061> +<0003> <0079> +<0004> <006D> +<0005> <0065> +<0006> <006E> +<0007> <0074> +<0008> <0028> +<0009> <0053> +<000A> <0075> +<000B> <002C> +<000C> <0020> +<000D> <0043> +<000E> <006F> +<000F> <0069> +<0010> <0073> +<0011> <0029> +<0012> <003A> +<0013> <002D> +<0014> <005F> +<0015> <0063> +<0016> <0030> +<0017> <002E> +<0018> <0041> +<0019> <005B> +<001A> <005D> +<001B> <0023> +<001C> <003D> +<001D> <0056> +<001E> <006C> +<001F> <0076> +<0020> <0062> +<0021> <007C> +<0022> <0054> +<0023> <004E> +<0024> <0077> +<0025> <002B> +<0026> <002A> +<0027> <002F> +<0028> <0032> +<0029> <0033> +<002A> <0025> +<002B> <0072> +<002C> <0034> +<002D> <0064> +<002E> <0031> +<002F> <0050> +<0030> <0068> +<0031> <0044> +<0032> <0058> +<0033> <005C> +<0034> <0035> +<0035> <003E> +<0036> <004C> +<0037> <004A> +<0038> <0066> +<0039> <006B> +<003A> <003C> +<003B> <003B> +<003C> <0040> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF +endstream +endobj + +141 0 obj +<< + /Length 10414 + /Filter /FlateDecode +>> +stream +x{ tTսo}N I&  %TB !"(EWKJ-"E 4 ZEjD[mK-)°k3yh}%̞}'a(s^xdpeU/-8 H~/[,&-[qsg~=ϝe>(@X+>vUsf}59@#{Gsr! qѬʹg{S)žX\UTVAc񒹋y !`A3N鯽)4 @3I+!u6NA5Sdy|IM2kDN)4`~gj1jH>}H"gь Xh 6mA-m%$T9Z4*j,MBNg:&<*)[C +Ё-܇W:NIp8H;`W"'рmF֠2v)0;X;"Y;)͊۔B嶛!R1'Vb +}>D?&ky t&]֮`JARF3ZLI6ͦ_VJI9^&bV,Av``+*NӫX$NGB4V- Uh +l؋ nj i\ivHe F(C VnfRL%~3t_OK{DՔ;'6߸1Dac/{R>d;$D;bc'㏭][aW3ֽ} 8'ȵh 1`ޕTx4WkkDQNb(+awޡv[-??Y;LA\^_7M&74IM&ۮ𦈦ȦhtEZJ$?ekű5J%\XzUs Vw V;.|/ K +Zn$BS2f+}Xeʼn5IWS׾Jާ|Jtr w ȵE__IAR؏[`âFEd!|_HK94u{t`:y枙s>md ُl_CAhlH2tmҤ$> Ւ4>X'$oٛvf6;A^%Q\p vRiumDP~/Q0+"%U@k֮Ygy>ӿA^$'|APw<]B~KN'>!lLVOBB| G6je;c@Eۂ[)v)T&qPD|'0JNnCJ#. =eKB/:eoFf5:4ǎl9z:-)'}oo}Cܷ9.=E ԻPo +N]awFB3P/zIg뗚'7> _]•+GqO$Kxp EjݎtPlDa0jrm$wyIZ K! "R?! @VC-]nqNVZ}"" EqWua"5Ӣmgń9ڤGV;Z/_T/_tE龇k=V'Pz:A$|&}16ߛ|p#S}yΧ?zr+wO;&c))-yysʖ Vd_n/iZg\1b"63"eͩi0dJ'Ҵvg?_;O~H UNCڅ] +#q2j[QU_-\9]_JYZ)vML mz%IaIT\JZ3!Ȑ Kʓ\'$#" +Yh{㘊cTgr١V;Z;}IBcqJL$VFIBLrH|RB/5Ջ>v Y$KʢYrRLY,K5VBR(B*BsZh d4:63 ium'vNSv*;M;;-;;m}>Oggggg;tQQQQQo#&ΐg @mzM'Ӊn߆=97]nuuOC8`I;o[m[%m|$u;mdB=]vGRb q1ё.M q:Vhw!ƶ@xox ͥaI+%4&%/Bs/W4UtMϖ7U\Y93_!Y|yg|6~`+M~,^[I6$r+r"5̈t}(’JkgK(cR> oaP0ׇx$*t*#PELb^0ǟsiZGɕɌ3|e>^~5]٪$T_z~dTYD]xǨ_Vi>WY{vIr< +DbJ +(Eq0*&arx9&L9EhfYfG顢#)G2(_<30x = #Zb= +.רHDd7 z҄+Yn/{NnlnI%-9?ybC$Z8P^#xU,F w$RˋJ0T,@aBϩHX/A4YG1L+EKʒy)^mgGvXP5HI)2IBL&g4x޴/ %^ӒDzR#HS)4tT*7HJ*飌${R*1,_7 #̣-#mcS%{meR-+|\ң,Kl!()&Q,`MٝҝzuuTʭJ\^)?ʾg]iNk1D#)6rDӏv8ȯ~yf`Ttn$]fM!O,DRXsUK`7btG/=|89"o^r1r: žn1ɒl?bGV2ۭԢhP Q!P\ztqOi|/qα 2iGNHY>_2-L&O>בf8>Yםy.Q$`wC§thpyKQJlv ȨhQVj;ݛe4JPG$Wh 3f:;qJok9Ӓ=w<=x89̭H/jȼґVޜ1M+ؾwޓ$G'xh;9~9ҡ +E5]BoAhcβѨ$%mL٬l {Ox(;*>U nKB5𷉞5#T/{o[#[M;}0Ww8e۶O=6|/GD泿<[y6oݏVVzbǯ֊=y?;qcCbltS!ӑ1 q5cgK"ک|5 \x"NN5!.SאI#o,5W_p\qź|ՙ9[ߕ""*&_pj22_l]3),`';ZZHLk_'T,?~u5C;l3y\ |FFgɪ(0ԶVco{GpyTDH5/$Wj>0էMD2QcEk?:Ńe]3ty{̏LḛĬSe(%uRG]o!v+ͲbTἚ#?(j!I4W Kt!&}o]_ӁRzsRLouT\<1'5x1z𞊧57ޞ_n4%IȀ{탏GǮs>7mFބF9EH!6Mz48 6^f\\aF(}QEeK%,1PC%-6UtD 2I(-4|V8U">{e]k7>r}OPyCjb?D%lI:z”Fz4(h=z]EpzkjjR7}F^ߺd*Ώk.2ڵe,?Wg-67ڬfl3SIr{3P"I2+f61AdakW =yKRKӁ&"YMT[i9[f&bvK$[t4\b+UKjgk!)BEχOHk~Zʽ^ F|#=I9 hC]-/DS6n3X;0ė,MZ!KVxxbM/_kp*ouE0qS2]zk}NT~e'x}~m#Y^/~Odtkry$\;_"0)Roi&5PD74#W] 9g>O -;PKV[/)0 ea_.H¼偗$Ѱ71~5k7%f<_N_y_RqXն@[@x>w)?}4!ocհ{N%agzKߗPzۡȴyV5qr66*j?gGܫ1wwC,zBwjc@D&;W-Xzz +#C\{ k|:y*%޾}o*#_RkQwغH'+{D?kyyFHe$SWu~^[ f1I +0U8_^[ZnϠ-XrT'ENpr8<]r M( YF v [Id> $N`\(CJ!*q~M<@"I{6:>N=|@V̞V* 6)i=77כ3ⶼnZlmSl޳-+7XioBƅ, ١"B:@[āK40_U= +"[5A"Zk f)=kH|\+H& HApM%Nw`˱r,E"zc 9‹\$b6#ERTc)`.f}X9D"b!"`Usc.J +c.cr"O&b?XD,F fc!*0(E*1Kv+:a<U(BSuըgŀ[ޛaGK b1! Y( 5D5P%Kt2s#{@Sߔ&$(N\,D.;:!YHoZ_A) +c!%XDT_"8ëԡu۠\67<O)ӯfhذ&q})t +/ڹ +4aeNPҝ0Tl0G?WAivÒ^cXpr+I5'-?U + +gԠR"h]%2T`aЎ{w؍A)\`얉Y%B)jt:)9lt1Bs5:C&t(}~iP2B7s «eطvZȥ[[r}v|3K;:d AެSrlu-Qoa2=f. +rh؈MXJZ|q/ FN ] ;٨#CzƢn |3|! ++l,m yJ)o5CF$x!t_vǏGK\LvM{Lw/ _hvaKv JL;iuK`1UnĽBVh; unʃ{KzPAIu[S/yJo0)nJnw\nG!E:&ɷGuCK]WyΝ.[`wcZsUߟ|wY73<#bNZ5,졉QHl.lX,,`/M=o#( wًbZYY$ߤS1vaWN{"/V9XYȋªYXΕQiRyKRwag1E3#1b(&Fc210S11u կɺ7ދ: Ge:iHaJX6Q#P: :N,0=GըOq~NALf]L0:E #uq#e$ p=ɺ<AjuFbR:& a&b~b +iJ>EGhfukP6!e"ӠCj:0Nwab|NCtҸGO7ZPׄm7P!y=(QcBkYY:GWዑuKE) ?7~-?'c8D܅q/l"0SaGTa$B + }p3AF\EHB2tO@q{V>YN黏kXpzw6Suvӷ9}k5or+NOnsVNOpz78=ƎQ;ma/LgrÎLG|a}CisPWN_.J8~Kw9=NBn  SNwqNvFR*EYNosnsЭ[2VNdƆq3agΞ=L]%?=3>7q4O=aOOzhC5 Ol'tyX}){\cuF7pu>VcqV?t ?Њ&՜z +ﯠ+8uG9]Ü,ZLH^jK.Z퓗p9Z4Um*{Eieo9t>9*wq:RN̎gs8 ͎8 Nt_ﳱ>iTNb)Ntw9Ŝ'l<ӱёl:zwdwq:j*#GDH:| @ilk|>\44iY"9:Yd_LV,r +|!lUZtZ/t3ܬ?yci?o47zY.9Z4;Ͳ7feYV$ʹ4o(pӌfIjo(+,aa gwxhiioN8M "A{NCBX2I,iM̠ ciV946&rDhN84"Ea,UA* Bԥ1`ZUCBQՐ]BBh!;ʜv4d[JlPS%Y9SJM*$)27 FRd0i%PɠP)i&k7~M' ғ +endstream +endobj + +142 0 obj +<< + /Type /Font + /Subtype /Type0 + /BaseFont /ZNLGQM+LibertinusSerif-Regular-Identity-H + /Encoding /Identity-H + /DescendantFonts [143 0 R] + /ToUnicode 146 0 R +>> +endobj + +143 0 obj +<< + /Type /Font + /Subtype /CIDFontType0 + /BaseFont /ZNLGQM+LibertinusSerif-Regular + /CIDSystemInfo << + /Registry (Adobe) + /Ordering (Identity) + /Supplement 0 + >> + /FontDescriptor 145 0 R + /DW 0 + /W [0 0 500 1 1 310 2 2 372 3 3 447 4 4 505.99997 5 5 271 6 6 512 7 7 250 8 8 504 9 9 493 10 10 316 11 11 390 12 12 542 13 15 465 16 16 338 17 17 465 18 18 538 19 19 264 20 20 747 21 21 500 22 22 428 23 23 790 24 24 515 25 25 531 26 26 236 27 27 519 28 28 457 29 30 298 31 31 220 32 32 560 33 33 220 34 34 497 35 35 323 36 36 701 37 38 485 39 39 424 40 40 490 41 41 596 42 42 646 43 43 699 44 44 582 45 45 268 46 46 272 47 47 548 48 49 465] +>> +endobj + +144 0 obj +<< + /Length 13 + /Filter /FlateDecode +>> +stream +x +endstream +endobj + +145 0 obj +<< + /Type /FontDescriptor + /FontName /ZNLGQM+LibertinusSerif-Regular + /Flags 131078 + /FontBBox [-48 -238 782 708] + /ItalicAngle 0 + /Ascent 894 + /Descent -246 + /CapHeight 658 + /StemV 95.4 + /CIDSet 144 0 R + /FontFile3 147 0 R +>> +endobj + +146 0 obj +<< + /Length 1304 + /Type /CMap + /WMode 0 +>> +stream +%!PS-Adobe-3.0 Resource-CMap +%%DocumentNeededResources: procset CIDInit +%%IncludeResource: procset CIDInit +%%BeginResource: CMap Custom +%%Title: (Custom Adobe Identity 0) +%%Version: 1 +%%EndComments +/CIDInit /ProcSet findresource begin +12 dict begin +begincmap +/CIDSystemInfo 3 dict dup begin + /Registry (Adobe) def + /Ordering (Identity) def + /Supplement 0 def +end def +/CMapName /Custom def +/CMapVersion 1 def +/CMapType 0 def +/WMode 0 def +1 begincodespacerange +<0000> +endcodespacerange +49 beginbfchar +<0001> <0066> +<0002> <0072> +<0003> <0065> +<0004> <0064> +<0005> <0069> +<0006> <006B> +<0007> <0020> +<0008> <006F> +<0009> <0062> +<000A> <0074> +<000B> <0073> +<000C> <006E> +<000D> <0032> +<000E> <0030> +<000F> <0035> +<0010> <002D> +<0011> <0031> +<0012> <0068> +<0013> <006C> +<0014> <0077> +<0015> <0067> +<0016> <0063> +<0017> <006D> +<0018> <0079> +<0019> <0075> +<001A> <003A> +<001B> <0070> +<001C> <0061> +<001D> <0028> +<001E> <0029> +<001F> <002E> +<0020> <00660069> +<0021> <002C> +<0022> <0076> +<0023> <002F> +<0024> <0044> +<0025> <0046> +<0026> <0053> +<0027> <007A> +<0028> <0078> +<0029> <00660074> +<002A> <0043> +<002B> <004E> +<002C> <00660066> +<002D> <2019> +<002E> <006A> +<002F> <2013> +<0030> <0033> +<0031> <0034> +endbfchar +endcmap +CMapName currentdict /CMap defineresource pop +end +end +%%EndResource +%%EOF +endstream +endobj + +147 0 obj +<< + /Length 5567 + /Filter /FlateDecode + /Subtype /CIDFontType0C +>> +stream +xX teN MbvFgAA\}-kٗB[}Igidߺ'ݛ6Iۤ@W?bEEq~{NNNd`2!IόOXkجf N?7b̓1g.gC=`0zx`c&.2fb1,&[>/:eg̲̜)9qㆿM-ljǭ7q+Sb2ʌKIϘ`<`2 +;x-vYPjXnjԌ2ti~>d04*p&at03ag>"|OAA885 #2F_Zl^S8'?7co)O?t3χr%P ʌgjz鉽,Zu/ٿw MAt/? 4[}n` <ü 9pp*#l0*ŕ9f[+q:2"-M9m>NDm(DED!GAz4tg)#\\/n;fѨqʍܷr5߫;NwbW:X jKIKrmV=)Vp=gH#+(Dk( 8Hm^٪vbQrDbc5յXӸcљ8R,+7N|`9|E?}+9où?EGQPϓ0h|eMI;te.* ⃠3CT͒.Y= ʭa:HG^AoR2.A*erU&QS*7r=(sR&N#t܂(Hgsu:ۧi Oqdj W,Omϊ""#VC8ku{~@޵;/X!{_$XKma(QlL!F3&,^ WqpV"U"F4k(>Nդ4;k 8H x;nr]~0LCxYb!);T%Ue+Hy秄4F۳)WEuMMc0(^OVҠPF7r5{~}ԙd +3qRQfrb|ZvV^([?s;T׿mx'@wv'A`‰j8j8,"5r}l '</pK<*Mݧ :8_.Wj-(x4?|N4*"AinjFlڍ]{`vȘܔD”ȯsY^3_IT + 8b΃RI&ZY{y0|6tvVj(´4,U_9Gl=pJPJ +).K*H)QD:d<8KV ap_MY0 p~nTkR i25j!Wb&Z_QUڇT{Qh"6]rszCؼw'^M\D6 vHStVMBdUkHܘM\R@ \zD#7>.Wd;-Q3~j * +fqNl[:|Yi'Bmj +_ $YrHL-$Ʃ0rā$S8}&*7!7)\iN&ok.νDNgʬ6M8r^m[hm]//\r>o~rkʋyWf,`7w5DAE%7j%jX .fw>e0?}toK(`ųW02}7@ Ȗ/_l?Jxv"S(ižDJ2N4տ QUY94 x wv0asXe1|0Teg +w~S_%O- hŨV&@/P%{+Nm?Qo c*\'6\CFJj.=4iI bC.;3ʊ +3,5msn|wE XF$6H{dJF^d<H+đ #vlD_z`ќ_\7G/vaȜt* %K+0:DAṀݼ}WA}%Řɤ 䲳H_,aȅ|L]Ԡ+zy/^.Z웍2+~uɇ8=+:1gCqSj˓LJ . ;Xy ^O=wo|ҥnQXK셊CvQmbhYʃN[MX[CR.RD([vnv7ꥆ()єv`wGkZJ صb8AJ%W-vitzl-;GH; /ӽ`; +w!p /k(n>#{Jʺ'!I$%cnV5b'ÜYTU!9{"cS)`_Q, A,",*I%RBq4@cIG^o>B25u$yPU{vҟ:N+|2w,?tUhtΠKǒ6"{ڭ,µŮ?Sxt3^ٳwi|)ˊ ->3ۘopv^$x#{k0aKqlҙ mp$A +(7*$pip Gyro ޽&`w(AKqH*cH2Q$&?s@ ]摻#{<3P, +O+tB@2r\đ+d2\;#i7ZMXi[lI$ @GZ(,K q%&p70y#[x L,AJbBET器 vB\d134_[=8_`$ |JORE o !y +Mޞ "$[i?hzbG&$$ A)ϱ<Obj2 +>g=ldZB<>Զ|Au1x~ NSZbZu4Q>zKz@YN)bG3[\)Z^/~.enFSx%=jhrZ lX>d;wkWvVg&;j3WKR*W*t ٻWCy^Qg@bIK!x H?G:hhyr +BnlO˼2}kێ9V! G DGfE:>nȼuUy--OwtnWT9zxk`)I٭lOw&%fx^nYHYz9_T r"Nɢ:r҅,ķ'p"J̊RI'UvOSo^.Ҋ0 9} k= +CZY:HQ'cp9{`'xn0&  0l5x ^(axxSdRRҰrvހHAQ)\q!K}X?r5uÞ/X}Bv=iݜޭ)n٦Ey !J#3+}߭]5!9Y2C.rknҦʈozLl\I_ڀ9z|G +uld?<~UII5P+U +TWjTJ;.הXέ1Wb %v"d;ʒRg\XJ +,1XּDRTѺH៰^?t<ຯ%VfW,pOVSE!3.IAlxp\Kqh }gvUg3*Ⱥ%}\Æm~ĈIJ)ϣp? `7lF}s=ɦ>˔8C/fC\q4\"RTMu'guMP!ǣ)5mr? (V,-J,JqnϘAӎBfRۇQ}FVo`s`tcQϗYgBzQZhꞷkuֺxpg& Q !I̥fR>=]\[Tf1q2[T 餶A&r!аԸ +Q") 1 ;/c` 0gVZ RtW~uj2j񪬸|q VaWH^OkڠlBPpynΘ@1ȡLN_#٤ЯOsJJ+VQLgpy8': +endstream +endobj + +148 0 obj +[/ICCBased 149 0 R] +endobj + +149 0 obj +<< + /Length 258 + /N 1 + /Range [0 1] + /Filter /FlateDecode +>> +stream +xuJPFOUvDD@`]\ +FMkIRB|&إnऋ(HrTų9` ըa&ʺ:l +3Ŭ*ުnh)&C|>b纝黓AvCƫ+ y') +̵8+/> + /Font << + /f0 130 0 R + /f1 142 0 R + /f2 136 0 R + >> + >> + /MediaBox [0 0 612 792] + /StructParents 0 + /Parent 1 0 R + /Contents 155 0 R +>> +endobj + +155 0 obj +<< + /Length 1696 + /Filter /FlateDecode +>> +stream +xZK6Wpaiy-ТZ{Jruh}a[шŴ$p=yR16}Ll8_gWw_n'ӧ՟0&FqaXM-?W}^JC5] &Vm3Xz+x+ԭD[]nmݺb;j0aկz:pГwlCjV\zb8nd+.\KGZ&5WA6Qg B Ξ̷NOW%\9åH͝RYzHjͥ[@/i-Be{nY/}F 5%91^[{<5#$vQ_"U.&!L}zBFF퍳kCz@H[%u?$IeUd Vܨlx ˃縀͈:H1Ά<+0V9xN;Ng5{,n-i&i#,\_,ߠH=Y(y]}N/r=]Oc%\ʔ 9^`GiN wMˏ76*KI覚.Nbb+rDP SxpWTWȉK).H.E%cZN>9p,_u%踗1-œKHoJ\s Ʌ1>)Ha4asc!uXԞQ<⪨msoM8i[EwvΑ\h0YMC~cpelk<=yF!jcB"rgX.P9ɍsJ MJ.\b$%oUs+4 LF띴G:LϺq#V6DC2ʹv{l:gUn80B&wJ1eU3c33*.&K*-rBufꆃiQ(ˣzE͡iT4mپkax\/"KQ"eU/|)wv{P'QkAWf!oQA$Bzv;w{Tyc?S1h΄4e>ah]01/ *wJse'fx Jq`M|f3_v+{3}~|{eof?kHGH8xᏈQrK^K/ux +endstream +endobj + +156 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 148 0 R + >> + /Font << + /f0 142 0 R + /f1 136 0 R + /f2 130 0 R + >> + >> + /MediaBox [0 0 612 792] + /StructParents 1 + /Parent 1 0 R + /Contents 157 0 R +>> +endobj + +157 0 obj +<< + /Length 1748 + /Filter /FlateDecode +>> +stream +xZ[7~_a.m 4uBJԊ^ng +Z ͖kz{%mؼfJDK7f:n~1\9-[o?k?#9lrmD(NT{{ڦ#% cn5{0Ud,׆(0 rM|s7lKbYVxyV-HT$ʻ304D4e:ڠ@ȯT~'.1nP7c4GULr'r{.AJL{M'unJZ.I,CA V ^^5J ϋ^BSq;t<4%4Ɠި)b!d:MH-P֎RDZ2DZrm=BR05Ɂp$PT}c Jx:נN: jƎ^L%I2$z2| +P=ٜVf͚ٝI%4 F,JX)q#eْC&v4WN܋S`uDZ`V(JyhGHFEɭ dFcN3+BCqy5cs˝s::XzhTŒi!Rw\J^k#Rdn5FAl]]d0|OT\޿w;ĞIC'}:CZn1$;eəzt\ƆF#x'tgA;wQ+$zDbǣ0\t2>ޯPE\ɤqfeNћ{_Û/GňR܈)PӾ>JTXv$ hsT~ǦJ婗FjnHQ3+0Yn" |"2\aPGFŞ)4 f*;z{&$m͇2Jq\8-GG +(Ͱ20NLsBz 8R`3R ;g q0cdQFM9ip )dWf(W"DT˶;-2J3}>5htV7✓~@>!yUj]cǀH*s!cJtV53Hǎ)OnʶZw6*qm|}y=끫l) rÕH? +"D쉰y_(ڍ'\Cf=_=x >TW,_S-j9CU_QESr+sPw,;DJREҀ%hf52nkȢ'EV\[1|_|ݭF:ijn[QG,|GCqFWOn)nOm:`ogϮ۫oڧ>|x?]]m^߿^ns}wA`-4dsw7- +< Mww +endstream +endobj + +158 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 148 0 R + >> + /Font << + /f0 142 0 R + /f1 136 0 R + /f2 130 0 R + >> + >> + /MediaBox [0 0 612 792] + /StructParents 2 + /Parent 1 0 R + /Contents 159 0 R +>> +endobj + +159 0 obj +<< + /Length 2462 + /Filter /FlateDecode +>> +stream +x\o#_P4nj3K +@[{jE}_ZweIp8#W?}nx:wowA;@B@yo;vܽ;<˟?kc^

s(>Vj )Ћ<١(&>y/@rS`~r涻HLdBGyz"/:m0a&~ыlv4䴽TЌxr+zKSdI`t@U + cmH̳p1Sx\<%5&ISp}B1%&V` +.i/٪i5_,.f!"ٺ/!o]{ dglo Fq6lcI H1dGSr_N5<#&jhQf<록yZYKNG2IqAZNL{8*UmZ9$k X 0m1eM`O r,HFLud'Aq޲.ѲSAВAJؖ0.FRE/4)#b@YȒiÑ/TLiw*8`W lcu]1%–H^ /家&uC^u-F+A(. +~1HHL+c(%׾ho_fcOK~!"Qlc2siUqU"5e`uT&z e'J3v 3{NE'g9RJ%QakZKlI$}׮?XDyQ7$|5 *MD+=MFw-vhT~]VF?S)+m]lQW "xW(STС FR21b.GC#t+7_M#4_T!&xc%iBb*$&,^9°7Sm_ "SB/ RYdV +.;5qEc4ts:x=\OU&9*wz 2 alkh[?:q*V#h@'6KMYflA9 !4Yk_*EV"L7I+%ijnktrҔdM& TAiXN [e,bvH|pњ" Aگq1mp*Lhiz_&[ ـ1er}HH%BVWBn9f w>V e7"@H 1u{D<(f:Wҵ99SJzd?sݶ5eau췓b1]0Vu%eUpfy&q +]Օa|āI13dr|a= 33@]Ռ/$eK%Ƅ \PH[ڈa3btpxw??N?=|8;}x8n2nEGt1_C +endstream +endobj + +160 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 148 0 R + >> + /Font << + /f0 136 0 R + /f1 142 0 R + /f2 124 0 R + >> + >> + /MediaBox [0 0 612 792] + /StructParents 3 + /Parent 1 0 R + /Contents 161 0 R +>> +endobj + +161 0 obj +<< + /Length 2241 + /Filter /FlateDecode +>> +stream +x\[o#5~ϯpP\/B H @[(M"m=tf2>>>v: ]43|n/_ٲg]WL,xrB2[I#WR9Rn-.ovj!ՇF0)bW◧BkeyyEw/ZHt?ܿJLOWvOxrKJnk̒A=alAHYVzGQEI:c]j#ӻEȚetUN9Vlz9UZ4ʦ1RP3)1F9ZPGYL/fw֔j (>s(T5 '" 9%k(ok_Fn}W/=I&$\f@YhCSs7VS !y #(d1 &%VP4}B<4K) 4J#$s౏,UU43q磘RY[i90}@ȑRutNtF+Bq Bt y!`[Žx,ILD}^R˥z?' u]@VF+cQk)>_%xkw.kCѾ[%9ۛC4&Me)Ju܊HzB,EX.\hR `2a,j ZRSR^8,5~?ɒ- )fUxj3w-J"뵻`~P>R^ ĉduâwK*]2zIq +kHqJn+w<(U8b:IM-Fɒ$d(fҰ"]䚅 +ݦ~c^1F7&:%¨֊[4E[4ȣB КN 4 dKXMaFB֙ç%bV['Oa.LG kۻ$PWFpX^nP[tAmX&gD/ِ AB$6*2n&o]b=C7kg-G1OTǚzC‰֤<*LUO&+)7fƺ .uw"#>TP[s* ;TuԥE!u{Ol9:jv NTOyz/ܠ\Q{d~@cUCZ5f+oPBa[; UGdԓ$y 36I… +[$Dy22z9xhY`\;%4d&MOe%wB& iWxw"SCrpK=h vfS/ӫܦYhه-2X]TEGtEejIcv{M}5R)Z bL|Q7;FYS::# $C‹Mx<&*NlR'm;(ɤCVvuII˅v-\Ll~\8tگ&R3"80dϔ(uC7M²SNZHȔ7qX5'6vKC,Rdt܅h 1,|4û35!Ҫ4_nct̩= "jfJ/~(5lŎ#m8ߗ'A$EJw4 mcw(E[ևxFSGN%*8e RsWG˚[@i!-h0"b פCCzHho5I52U߶<&r2UD[N^eϯ4wR.Hzz=*8Zs;?Gx1Uzxz.B"`|WL'ӑ(Ӿ`[6Z]cw?~|qݽ{o7ww7GW?v{{{n +Ž_G6 %sd_e +endstream +endobj + +162 0 obj +<< + /Type /Page + /Resources << + /ProcSet [/PDF /Text /ImageC /ImageB] + /ColorSpace << + /c0 148 0 R + >> + /Font << + /f0 142 0 R + /f1 136 0 R + >> + >> + /MediaBox [0 0 612 792] + /StructParents 4 + /Parent 1 0 R + /Contents 163 0 R +>> +endobj + +163 0 obj +<< + /Length 415 + /Filter /FlateDecode +>> +stream +xo0WrmBbLdKLțL6N(VcBõwj϶Q1 a8/ (g yl ${O22 B#v2,q\+ʊ}[R)9g:s>k*Vop a,Qe&!5 o֡T][T%FI:CNu"^}}eXy,!|&tDSX h{i BKǂ +hoƑ{׻MAfb̩!7Dx,w$qOEO=)ϰ*YZQtcs{+o;V?؏yV)YyF*r*$RQ1(!]& +endstream +endobj + +164 0 obj +<< + /Title (assignment 5 - prolog) + /Author (fredrik robertsen) + /Creator (Typst 0.14.0) + /ModDate (D:19800101000000Z) + /CreationDate (D:19800101000000Z) +>> +endobj + +165 0 obj +<< + /Length 1176 + /Type /Metadata + /Subtype /XML +>> +stream +assignment 5 - prologfredrik robertsenTypst 0.14.0en-US1980-01-01T00:00:00+00:001980-01-01T00:00:00+00:005application/pdfkRY120cn7nuhNIxB8Tli0w==WEb50iv/yduRPv22h6/esw==proof1.7 +endstream +endobj + +166 0 obj +<< + /Type /Catalog + /Pages 1 0 R + /Metadata 165 0 R + /PageLabels 7 0 R + /Lang (en-US) + /StructTreeRoot 8 0 R + /MarkInfo << + /Marked true + /Suspects false + >> + /ViewerPreferences << + /Direction /L2R + >> + /Outlines 2 0 R +>> +endobj + +xref +0 167 +0000000000 65535 f +0000000016 00000 n +0000000114 00000 n +0000000194 00000 n +0000000280 00000 n +0000000407 00000 n +0000000496 00000 n +0000000585 00000 n +0000000667 00000 n +0000000930 00000 n +0000001194 00000 n +0000001444 00000 n +0000001848 00000 n +0000002140 00000 n +0000002187 00000 n +0000002458 00000 n +0000002711 00000 n +0000002800 00000 n +0000002932 00000 n +0000003025 00000 n +0000003115 00000 n +0000003205 00000 n +0000003318 00000 n +0000003408 00000 n +0000003496 00000 n +0000003649 00000 n +0000003736 00000 n +0000003823 00000 n +0000003913 00000 n +0000004000 00000 n +0000004087 00000 n +0000004303 00000 n +0000004389 00000 n +0000004477 00000 n +0000004563 00000 n +0000004649 00000 n +0000004735 00000 n +0000004821 00000 n +0000004909 00000 n +0000005047 00000 n +0000005134 00000 n +0000005205 00000 n +0000005295 00000 n +0000005385 00000 n +0000005472 00000 n +0000005559 00000 n +0000005664 00000 n +0000005810 00000 n +0000005897 00000 n +0000005984 00000 n +0000006071 00000 n +0000006263 00000 n +0000006353 00000 n +0000006443 00000 n +0000006533 00000 n +0000006623 00000 n +0000006713 00000 n +0000006803 00000 n +0000006893 00000 n +0000006983 00000 n +0000007073 00000 n +0000007201 00000 n +0000007291 00000 n +0000007381 00000 n +0000007470 00000 n +0000007580 00000 n +0000007669 00000 n +0000007758 00000 n +0000008009 00000 n +0000008096 00000 n +0000008183 00000 n +0000008270 00000 n +0000008357 00000 n +0000008444 00000 n +0000008531 00000 n +0000008618 00000 n +0000008705 00000 n +0000008776 00000 n +0000008863 00000 n +0000008950 00000 n +0000009037 00000 n +0000009124 00000 n +0000009211 00000 n +0000009282 00000 n +0000009369 00000 n +0000009456 00000 n +0000009543 00000 n +0000009630 00000 n +0000009735 00000 n +0000009837 00000 n +0000009937 00000 n +0000010027 00000 n +0000010132 00000 n +0000010221 00000 n +0000010416 00000 n +0000010506 00000 n +0000010653 00000 n +0000010743 00000 n +0000010833 00000 n +0000010923 00000 n +0000011013 00000 n +0000011104 00000 n +0000011310 00000 n +0000011399 00000 n +0000011488 00000 n +0000011577 00000 n +0000011668 00000 n +0000011741 00000 n +0000011829 00000 n +0000011917 00000 n +0000011990 00000 n +0000012078 00000 n +0000012166 00000 n +0000012253 00000 n +0000012355 00000 n +0000012497 00000 n +0000012578 00000 n +0000012660 00000 n +0000012803 00000 n +0000012945 00000 n +0000013004 00000 n +0000013063 00000 n +0000013122 00000 n +0000013181 00000 n +0000013240 00000 n +0000013424 00000 n +0000013685 00000 n +0000013771 00000 n +0000014025 00000 n +0000014739 00000 n +0000015436 00000 n +0000015618 00000 n +0000016039 00000 n +0000016128 00000 n +0000016380 00000 n +0000017347 00000 n +0000019989 00000 n +0000020154 00000 n +0000020422 00000 n +0000020513 00000 n +0000020790 00000 n +0000022318 00000 n +0000032813 00000 n +0000032998 00000 n +0000033672 00000 n +0000033763 00000 n +0000034019 00000 n +0000035405 00000 n +0000041078 00000 n +0000041116 00000 n +0000041475 00000 n +0000041527 00000 n +0000041580 00000 n +0000041633 00000 n +0000041686 00000 n +0000041986 00000 n +0000043762 00000 n +0000044062 00000 n +0000045890 00000 n +0000046190 00000 n +0000048732 00000 n +0000049032 00000 n +0000051353 00000 n +0000051635 00000 n +0000052129 00000 n +0000052309 00000 n +0000053576 00000 n +trailer +<< + /Size 167 + /Root 166 0 R + /Info 164 0 R + /ID [(WEb50iv/yduRPv22h6/esw==) (kRY120cn7nuhNIxB8Tli0w==)] +>> +startxref +53836 +%%EOF \ No newline at end of file