Þ ¥bonds€¬cell_resultsÞ ÄÙ$9fe42679-dce3-4ee3-b565-eed4ff7d8e4dŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙï<div class="markdown"><h3>Figure 5.2:</h3>
<p>The optimal policy and state-value function for blackjack found by Monte Carlo ES.  The state value function shown was computed from the action-value function found by Monte Carlo ES</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"'Ð°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$9fe42679-dce3-4ee3-b565-eed4ff7d8e4d¹depends_on_disabled_cellsÂ§runtimeÎ ¥µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$06960937-a87a-4015-bdeb-5d17aa41fe6bŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ5plot_blackjack_value (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš%þÛ˜°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$06960937-a87a-4015-bdeb-5d17aa41fe6b¹depends_on_disabled_cellsÂ§runtimeÎ Üdµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$abdcbbad-747a-41ba-a95d-82404e735793Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ4make_Ïµsoft_policy! (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš(þÕñ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$abdcbbad-747a-41ba-a95d-82404e735793¹depends_on_disabled_cellsÂ§runtimeÎ ³£µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$846ccb44-a18b-4d87-bbf8-fc59eaf87708Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚÉ<div class="markdown"><p>Number of Episodes: <bond def="opmc1" unique_id="cLzytx4IJAJe"><span style='display: contents;'>
	<input type='number' min='1' step='1' max='10000000' value='1000'>
	<input type=submit id='teixlucpgs'>
	<script id='teixlucpgs'>

let key = "teixlucpgs"

let div = currentScript.parentElement
let button = currentScript.previousElementSibling
let input = div.firstElementChild
if(input === button) {
	return
}


let set_input_value = (() => {
	let result = null
	try {
	result = setBoundElementValueLikePluto
} catch (e) {
	result = ((input, new_value) => {
	// fallback in case https://github.com/fonsp/Pluto.jl/pull/1755 is not available
    if (new_value == null) {
        //@ts-ignore
        input.value = new_value
        return
    }
    if (input instanceof HTMLInputElement) {
        switch (input.type) {
            case "range":
            case "number": {
                if (input.valueAsNumber !== new_value) {
                    input.valueAsNumber = new_value
                }
                return
            }
            case "date": {
                if (input.valueAsDate == null || Number(input.valueAsDate) !== Number(new_value)) {
                    input.valueAsDate = new_value
                }
                return
            }
            case "checkbox": {
                if (input.checked !== new_value) {
                    input.checked = new_value
                }
                return
            }
            case "file": {
                // Can't set files :(
                return
            }
        }
    } else if (input instanceof HTMLSelectElement && input.multiple) {
        for (let option of Array.from(input.options)) {
            option.selected = new_value.includes(option.value)
        }
        return
    }
    //@ts-ignore
    if (input.value !== new_value) {
        //@ts-ignore
        input.value = new_value
    }
})
}
return result
})()



let private_value = null
let public_value = null




private_value = public_value = div.value
if(private_value != null) {
	set_input_value(input, private_value)
} else {

	// private_value = public_value = input.value
}

input.oninput = (e) => {
	e.stopPropagation()
}
const gen = Generators.input(input)

// If the child does not have an initial value, the `gen.next().value` promise will never resolve. If it does, then it resolves instantly.
let first_value = await Promise.any([
	gen.next().value,
	Promise.resolve(undefined)
])
private_value = public_value = first_value

;(async () => {
	while(true) {
		private_value = await gen.next().value
		// div.dispatchEvent(new CustomEvent("input", {}))
	}
})()

button.addEventListener("click", () => {
	public_value = private_value
	div.dispatchEvent(new CustomEvent("input", {}))
})


Object.defineProperty(div, 'value', {
	get: () => public_value,
	set: (newval) => {
		private_value = newval
		public_value = newval
		
		set_input_value(input, newval)
	},
	configurable: true,
});

</script></span></bond></p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš0—Ë°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$846ccb44-a18b-4d87-bbf8-fc59eaf87708¹depends_on_disabled_cellsÂ§runtimeÎñ/+µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$154edd83-350d-4acf-adfb-6a2d20599b53Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ)showrace (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš/öfˆ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$154edd83-350d-4acf-adfb-6a2d20599b53¹depends_on_disabled_cellsÂ§runtimeÎ 6]µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$ff9276eb-2151-4a6f-8257-8348047a9f4eŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyƒ¨elements“’’…¦prefixÙI@NamedTuple{position::Tuple{Int64, Int64}, velocity::Tuple{Int64, Int64}}¨elements›’’ƒ¨elements’’¨position’ƒ¨elements’’’¡6ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°9cbae2ac4ef69449Ù!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡0ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°9b52efd7a2a08bd5Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°38489c3038c1df3dÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡7ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°627f1c091b0a4b9cÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°1539b04621ff8c7dÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°10ed139d1891153dÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡8ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°6d43cd1c8dd97fd1Ù!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°78e123e4f427692aÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°ba6e6e87bab90698Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¢10ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°dad6dff378d50b10Ù!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡2ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°83bf2aef4031930bÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°7f05885cf5a97609Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¢12ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°ba2d0d303a66d681Ù!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡2ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°83bf2aef4031930bÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°4fdd2575d8325500Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¢13ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°e6f480949e3f3c15Ù!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°1539b04621ff8c7dÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid¯1dfbc9164ac7630Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¢14ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°7717f5f1045ca395Ù!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°1539b04621ff8c7dÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid¯4cab6926e0cac33Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¢16ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°9466b49b27b0fbe4Ù!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡2ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°83bf2aef4031930bÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°7215dbdcb350d980Ù!application/vnd.pluto.tree+object’	’ƒ¨elements’’¨position’ƒ¨elements’’’¢17ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°5cabddc83be126e5Ù!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°1539b04621ff8c7dÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°80c7dd8e4d5c743aÙ!application/vnd.pluto.tree+object¤more’ÍF’ƒ¨elements’’¨position’ƒ¨elements’’’¢29ªtext/plain’’¢29ªtext/plain¤type¥Tuple¨objectid°7233ef8a34e83c81Ù!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡3ªtext/plain’’¡3ªtext/plain¤type¥Tuple¨objectid°3ed622ab32dfec93Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°56645bf7a9faff88Ù!application/vnd.pluto.tree+object¤type¥Array¬prefix_short ¨objectid¯47e58d64316784dÙ!application/vnd.pluto.tree+object’’…¦prefix³Tuple{Int64, Int64}¨elements›’’ƒ¨elements’’’¡0ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°9b52efd7a2a08bd5Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡0ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°86128cc9b5ae8f4aÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡1ªtext/plain’’¢-1ªtext/plain¤type¥Tuple¨objectid°467534c86eaf64c9Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡0ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°9b52efd7a2a08bd5Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢-1ªtext/plain’’¢-1ªtext/plain¤type¥Tuple¨objectid°a5f5003e88013c47Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡0ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°9b52efd7a2a08bd5Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡1ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°1539b04621ff8c7dÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢-1ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°29547c053cf46d53Ù!application/vnd.pluto.tree+object’	’ƒ¨elements’’’¡1ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°78e123e4f427692aÙ!application/vnd.pluto.tree+object¤more’ÍF’ƒ¨elements’’’¡0ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°9b52efd7a2a08bd5Ù!application/vnd.pluto.tree+object¤type¥Array¬prefix_short ¨objectid°e60c88608632daaeÙ!application/vnd.pluto.tree+object’’…¦prefix§Float32¨elements›’’¤-1.0ªtext/plain’’¤-1.0ªtext/plain’’¤-1.0ªtext/plain’’¤-1.0ªtext/plain’’¤-1.0ªtext/plain’’¤-1.0ªtext/plain’’¤-1.0ªtext/plain’’¤-1.0ªtext/plain’	’¤-1.0ªtext/plain¤more’ÍF’¤-1.0ªtext/plain¤type¥Array¬prefix_short ¨objectid°eac5b2068fa52d22Ù!application/vnd.pluto.tree+object¤type¥Tuple¨objectid°19350ad34cc18b19¤mimeÙ!application/vnd.pluto.tree+object¬rootassignee­race_episode2²last_run_timestampËAÚš0a-Ü°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$ff9276eb-2151-4a6f-8257-8348047a9f4e¹depends_on_disabled_cellsÂ§runtimeÎ ñ°µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$6f914006-1d8d-41f5-ae8a-fbe0b336946cŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÛ 1;	<div style = "display: flex;">
	<div>
Race finished in 11 steps
<div style="background-color: white; color: black;">
	<div style="display:flex; align-items: flex-start">
	<div class = "track">
		<div class = "start" style="grid-column-start: 8; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 5; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 14; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 16; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 3; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 11; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 19; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 22; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 6; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 17; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 21; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 13; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 9; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 18; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 2; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 20; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 1; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 23; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 7; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 12; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 10; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 15; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 4; grid-row-start: 1;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 5;"></div><div class = "" vx = "1" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 17; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 12;"></div><div class = "" vx = "2" vy = "4" dvx = "1" dvy = "-1" style="grid-column-start: 21; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 26;"></div><div class = "" vx = "3" vy = "3" dvx = "1" dvy = "-1" style="grid-column-start: 24; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 3;"></div><div class = "" vx = "4" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 28; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 8;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "-1" style="grid-column-start: 16; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 5;"></div><div class = "" vx = "1" vy = "3" dvx = "0" dvy = "1" style="grid-column-start: 18; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 24;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 16; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 12;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 16; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 14;"></div><div class = "" vx = "1" vy = "4" dvx = "1" dvy = "1" style="grid-column-start: 19; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 16;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 16; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 27;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 30;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 27;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 23;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 28;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 29;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 26;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 25;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 24;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 22;"></div>
	</div>
	Finish <br> line
	</div>
	<div>Starting line</div>
</div>
</div>

	<div>
Race finished in 22 steps
<div style="background-color: white; color: black;">
	<div style="display:flex; align-items: flex-start">
	<div class = "track">
		<div class = "start" style="grid-column-start: 8; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 5; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 14; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 16; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 3; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 11; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "0" dvy = "1" style="grid-column-start: 19; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 22; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "0" dvy = "-1" style="grid-column-start: 6; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 17; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 21; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 13; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 9; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 18; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 2; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 20; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 1; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 23; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 7; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 12; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 10; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 15; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 4; grid-row-start: 1;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 12;"></div><div class = "" vx = "1" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 19; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 8;"></div><div class = "" vx = "1" vy = "2" dvx = "-1" dvy = "0" style="grid-column-start: 20; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 23;"></div><div class = "" vx = "3" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 26; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 16;"></div><div class = "" vx = "3" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 13; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 11;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "0" style="grid-column-start: 20; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 28;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "-1" style="grid-column-start: 6; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 7;"></div><div class = "" vx = "2" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 18; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 3;"></div><div class = "" vx = "1" vy = "0" dvx = "1" dvy = "0" style="grid-column-start: 8; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 5;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 20; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 11;"></div><div class = "" vx = "1" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 20; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 24;"></div><div class = "" vx = "1" vy = "2" dvx = "1" dvy = "-1" style="grid-column-start: 16; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 28;"></div><div class = "" vx = "2" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 15; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 20;"></div><div class = "" vx = "1" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 23;"></div><div class = "" vx = "1" vy = "0" dvx = "0" dvy = "1" style="grid-column-start: 21; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 27;"></div><div class = "" vx = "2" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 10; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 28;"></div><div class = "" vx = "1" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 22; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 23;"></div><div class = "" vx = "2" vy = "3" dvx = "1" dvy = "-1" style="grid-column-start: 23; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 13;"></div><div class = "" vx = "1" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 21; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 20;"></div><div class = "" vx = "4" vy = "3" dvx = "-1" dvy = "1" style="grid-column-start: 30; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 27;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 30;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 27;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 23;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 28;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 29;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 26;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 25;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 24;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 22;"></div>
	</div>
	Finish <br> line
	</div>
	<div>Starting line</div>
</div>
</div>

	</div>
¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš4t‚°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$6f914006-1d8d-41f5-ae8a-fbe0b336946c¹depends_on_disabled_cellsÂ§runtimeÎ1]‘µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$4197cc28-b24c-48cb-bd8d-ef998983ad77Š¦queuedÂ¤logs�§runningÂ¦output†¤body ¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš)T\¯°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$4197cc28-b24c-48cb-bd8d-ef998983ad77¹depends_on_disabled_cellsÂ§runtimeÎ ?Oµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$e67d9deb-a074-48ba-84db-2e6938ea01f8Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ3monte_carlo_pred_Q (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš-U¸°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$e67d9deb-a074-48ba-84db-2e6938ea01f8¹depends_on_disabled_cellsÂ§runtimeÎ À2µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$82a1f11e-b1b3-4c7d-ab9d-9f6136ae8195Š¦queuedÂ¤logs�§runningÂ¦output†¤body¿2Ã—1 Matrix{Float32}:
 0.5
 0.5¤mimeªtext/plain¬rootassignee³const onestate_Ï€_b²last_run_timestampËAÚš,Æe°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$82a1f11e-b1b3-4c7d-ab9d-9f6136ae8195¹depends_on_disabled_cellsÂ§runtimeÎß&µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$11f8290f-f589-49ff-9602-99ccc4192884Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚm…<div class="markdown"><p>Statistics for Steps to Finish Race on Track 2</p>

<table><tr><th align="right">Statistic</th><th align="right"><div class="markdown"><p>Off policy MC Control</p>
</div></th><th align="right">Random Policy</th></tr><tr><td align="right">Mean</td><td align="right">290</td><td align="right">286</td></tr><tr><td align="right">Median</td><td align="right">218</td><td align="right">194</td></tr><tr><td align="right">Std</td><td align="right">263</td><td align="right">282</td></tr><tr><td align="right">Minimum</td><td align="right">10</td><td align="right">10</td></tr><tr><td align="right">Maximum</td><td align="right">1848</td><td align="right">1999</td></tr></table>
<p>Cummulative Distribution Function of Steps to Finish Race 	<script id='plot_1'>
		// We start by putting all the variable interpolation here at the beginning
		// We have to convert all typedarrays in the layout to normal arrays. See Issue #25
		// We use lodash for this for compactness
		function removeTypedArray(o) {
			return _.isTypedArray(o) ? Array.from(o) :
			_.isPlainObject(o) ? _.mapValues(o, removeTypedArray) : 
			o
		}

		// Publish the plot object to JS
		let plot_obj = _.update(/* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("c6e0de0c-3901-11f0-234e-bd09c571f662/8b2f6661ab801d2c"), "layout", removeTypedArray)
		// Get the plotly listeners
		const plotly_listeners = {}
		// Get the JS listeners
		const js_listeners = {}
		// Deal with eventual custom classes
		let custom_classlist = []


		// Load the plotly library
		let Plotly = undefined
		try {
			let _mod = await import("./plotlyjs/plotlyjs-2.26.2.min.js")
			Plotly = _mod.default
		} catch (e) {
			console.log("Local load failed, trying with the web esm.sh version")
			let _mod = await import("https://esm.sh/plotly.js-dist-min@2.26.2/es2022/plotly.js-dist-min.mjs")
			Plotly = _mod.default
		}

		// Check if we have to force local mathjax font cache
		if (false && window?.MathJax?.config?.svg?.fontCache === 'global') {
			window.MathJax.config.svg.fontCache = 'local'
		}

		// Flag to check if this cell was  manually ran or reactively ran
const firstRun = this ? false : true
const CONTAINER = this ?? html`<div class='plutoplotly-container'>`
const PLOT = CONTAINER.querySelector('.js-plotly-plot') ?? CONTAINER.appendChild(html`<div>`)
const parent = CONTAINER.parentElement
// We use a controller to remove event listeners upon invalidation
const controller = new AbortController()
// We have to add this to keep supporting @bind with the old API using PLOT
PLOT.addEventListener('input', (e) => {
	CONTAINER.value = PLOT.value
	if (e.bubbles) {
		return
	}
	CONTAINER.dispatchEvent(new CustomEvent('input'))
}, { signal: controller.signal })

	// This create the style subdiv on first run
	firstRun && CONTAINER.appendChild(html`
	<style>
	.plutoplotly-container {
		width: 100%;
		height: 100%;
		min-height: 0;
		min-width: 0;
	}
	.plutoplotly-container .js-plotly-plot .plotly div {
		margin: 0 auto; // This centers the plot
	}
	.plutoplotly-container.popped-out {
		overflow: auto;
		z-index: 1000;
		position: fixed;
		resize: both;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		border-top-left-radius: 0px;
		border-top-right-radius: 0px;
	}
	.plutoplotly-clipboard-header {
		display: flex;
		flex-flow: row wrap;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-top-left-radius: 12px;
		border-top-right-radius: 12px;
		position: fixed;
		z-index: 1001;
		cursor: move;
		transform: translate(0px, -100%);
		padding: 5px;
	}
	.plutoplotly-clipboard-header span {
		display: inline-block;
		flex: 1
	}
	.plutoplotly-clipboard-header.hidden {
		display: none;
	}
	.clipboard-span {
		position: relative;
	}
	.clipboard-value {
		padding-right: 5px;
		padding-left: 2px;
		cursor: text;
	}
	.clipboard-span.format {
		display: none;
	}
	.clipboard-span.filename {
		flex: 0 0 100%;
		text-align: center;
		border-top: 3px solid var(--kbd-border-color);
		margin-top: 5px;
		display: none;
	}
	.plutoplotly-container.filesave .clipboard-span.filename {
		display: inline-block;
	}
	.clipboard-value.filename {
		margin-left: 3px;
		text-align: left;
		min-width: min(60%, min-content);
	}
	.plutoplotly-container.filesave .clipboard-span.format {
		display: inline-flex;
	}
	.clipboard-span.format .label {
		flex: 0 0 0;
	}
	.clipboard-value.format {
		position: relative;
		flex: 1 0 auto;
		min-width: 30px;
		margin-right: 10px;
	}
	div.format-options {
		display: inline-flex;
		flex-flow: column;
		position: absolute;
		background: var(--main-bg-color);
		border-radius: 12px;
		padding-left: 3px;
		z-index: 2000;
	}
	div.format-options:hover {
		cursor: pointer;
		border: 3px solid var(--kbd-border-color);
		padding: 3px;
		transform: translate(-3px, -6px);
	}
	div.format-options .format-option {
		display: none;
	}
	div.format-options:hover .format-option {
		display: inline-block;
	}
	.format-option:not(.selected) {
		margin-top: 3px;
	}
	div.format-options .format-option.selected {
		order: -1;
		display: inline-block;
	}
	.format-option:hover {
		background-color: var(--kbd-border-color);
	}
	span.config-value {
		font-weight: normal;
		color: var(--pluto-output-color);
		display: none;
		position: absolute;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		transform: translate(0px, calc(-100% - 10px));
		padding: 5px;
	}
	.label {
		user-select: none;
	}
	.label:hover span.config-value {
		display: inline-block;
		min-width: 150px;
	}
	.clipboard-span.matching-config .label {
		color: var(--cm-macro-color);
		font-weight: bold;
	}
	.clipboard-span.different-config .label {
		color: var(--cm-tag-color);
		font-weight: bold;
	}
</style>
`)

let original_height = plot_obj.layout.height
let original_width = plot_obj.layout.width
// For the height we have to also put a fixed value in case the plot is put on a non-fixed-size container (like the default wrapper)
// We define a variable to check whether we still have to remove the fixed height
let remove_container_size = firstRun
let container_height = original_height ?? PLOT.container_height ?? 400
CONTAINER.style.height = container_height + 'px'

// We create a Promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// We import interact for dragging/resizing
const { default: interact } = await import('https://esm.sh/interactjs@1.10.19')


function getImageOptions() {
  const o = plot_obj.config.toImageButtonOptions ?? {};
  return {
    format: o.format ?? "png",
    width: o.width ?? original_width,
    height: o.height ?? original_height,
    scale: o.scale ?? 1,
    filename: o.filename ?? "newplot",
  };
}

const CLIPBOARD_HEADER =
  CONTAINER.querySelector(".plutoplotly-clipboard-header") ??
  CONTAINER.insertAdjacentElement(
    "afterbegin",
    html`<div class="plutoplotly-clipboard-header hidden">
      <span class="clipboard-span format"
        ><span class="label">Format:</span
        ><span class="clipboard-value format"></span
      ></span>
      <span class="clipboard-span width"
        ><span class="label">Width:</span
        ><span class="clipboard-value width"></span>px</span
      >
      <span class="clipboard-span height"
        ><span class="label">Height:</span
        ><span class="clipboard-value height"></span>px</span
      >
      <span class="clipboard-span scale"
        ><span class="label">Scale:</span
        ><span class="clipboard-value scale"></span
      ></span>
      <button class="clipboard-span set">Set</button>
      <button class="clipboard-span unset">Unset</button>
      <span class="clipboard-span filename"
        ><span class="label">Filename:</span
        ><span class="clipboard-value filename"></span
      ></span>
    </div>`
  );

function checkConfigSync(container) {
  const valid_classes = [
    "missing-config",
    "matching-config",
    "different-config",
  ];
  function setClass(cl) {
    for (const name of valid_classes) {
      container.classList.toggle(name, name == cl);
    }
  }
  // We use the custom getters we'll set up in the container
  const { ui_value, config_value, config_span, key } = container;
  if (config_value === undefined) {
    setClass("missing-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> is not present in the config.`;
  } else if (ui_value == config_value) {
    setClass("matching-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has the same value in the config and in the header.`;
  } else {
    setClass("different-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has a different value (<em>${config_value}</em>) in the config.`;
  }
  // Add info about setting and unsetting
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click on the label <em><b>once</b></em> to set the current UI value in the config.`
  );
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click <em><b>twice</b></em> to remove this key from the config.`
  );
}

const valid_formats = ["png", "svg", "webp", "jpeg", "full-json"];
function initializeUIValueSpan(span, key, value) {
  const container = span.closest(".clipboard-span");
  span.contentEditable = key === "format" ? "false" : "true";
  let parse = (x) => x;
  let update = (x) => (span.textContent = x);
  if (key === "width" || key === "height") {
    parse = (x) => Math.round(parseFloat(x));
  } else if (key === "scale") {
    parse = parseFloat;
  } else if (key === "format") {
    // We remove contentEditable
    span.contentEditable = "false";
    // Here we first add the subspans for each option
    const opts_div = span.appendChild(html`<div class="format-options"></div>`);
    for (const fmt of valid_formats) {
      const opt = opts_div.appendChild(
        html`<span class="format-option ${fmt}">${fmt}</span>`
      );
      opt.onclick = (e) => {
        span.value = opt.textContent;
      };
    }
    parse = (x) => {
      return valid_formats.includes(x) ? x : localValue;
    };
    update = (x) => {
      for (const opt of opts_div.children) {
        opt.classList.toggle("selected", opt.textContent === x);
      }
    };
  } else {
    // We only have filename here
  }
  let localValue;
  Object.defineProperty(span, "value", {
    get: () => {
      return localValue;
    },
    set: (val) => {
      if (val !== "") {
        localValue = parse(val);
      }
      update(localValue);
      checkConfigSync(container);
    },
  });
  // We also assign a listener so that the editable is blurred when enter is pressed
  span.onkeydown = (e) => {
    if (e.keyCode === 13) {
      e.preventDefault();
      span.blur();
    }
  };
  span.value = value;
}

function initializeConfigValueSpan(span, key) {
  // Here we mostly want to define the setter and getter
  const container = span.closest(".clipboard-span");
  Object.defineProperty(span, "value", {
    get: () => {
      return plot_obj.config.toImageButtonOptions[key];
    },
    set: (val) => {
      // if undefined is passed, we remove the entry from the options
      if (val === undefined) {
        delete plot_obj.config.toImageButtonOptions[key];
      } else {
        plot_obj.config.toImageButtonOptions[key] = val;
      }
      checkConfigSync(container);
    },
  });
}

const config_spans = {};
for (const [key, value] of Object.entries(getImageOptions())) {
  const container = CLIPBOARD_HEADER.querySelector(`.clipboard-span.${key}`);
  const label = container.querySelector(".label");
  // We give the label a function that on single click will set the current value and with double click will unset it
  label.onclick = DualClick(
    () => {
      container.config_value = container.ui_value;
    },
    (e) => {
      console.log("e", e);
      e.preventDefault();
      container.config_value = undefined;
    }
  );
  const ui_value_span = container.querySelector(".clipboard-value");
  const config_value_span =
    container.querySelector(".config-value") ??
    label.insertAdjacentElement(
      "afterbegin",
      html`<span class="config-value"></span>`
    );
  // Assing the two spans as properties of the containing span
  container.ui_span = ui_value_span;
  container.config_span = config_value_span;
  container.key = key;
  config_spans[key] = container;
  if (firstRun) {
    plot_obj.config.toImageButtonOptions =
      plot_obj.config.toImageButtonOptions ?? {};
    // We do the initialization of the value span
    initializeUIValueSpan(ui_value_span, key, value);
    // Then we initialize the config value
    initializeConfigValueSpan(config_value_span, key);
    // We put some convenience getters/setters
    // ui_value forward
    Object.defineProperty(container, "ui_value", {
      get: () => ui_value_span.value,
      set: (val) => {
        ui_value_span.value = val;
      },
    });
    // config_value forward
    Object.defineProperty(container, "config_value", {
      get: () => config_value_span.value,
      set: (val) => {
        config_value_span.value = val;
      },
    });
  }
}

// These objects will contain the default value

// This code updates the image options in the PLOT config with the provided ones
function setImageOptions(o) {
  for (const [key, container] of Object.entries(config_spans)) {
    container.config_value = o[key];
  }
}
function unsetImageOptions() {
  setImageOptions({});
}

const set_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.set");
const unset_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.unset");
if (firstRun) {
  set_button.onclick = (e) => {
    for (const container of Object.values(config_spans)) {
      container.config_value = container.ui_value;
    }
  };
  unset_button.onclick = unsetImageOptions;
}

// We add a function to check if the clipboard is popped out
CONTAINER.isPoppedOut = () => {
  return CONTAINER.classList.contains("popped-out");
};

CLIPBOARD_HEADER.onmousedown = function (event) {
  if (event.target.matches("span.clipboard-value")) {
    console.log("We don't move!");
    return;
  }
  const start = {
    left: parseFloat(CONTAINER.style.left),
    top: parseFloat(CONTAINER.style.top),
    X: event.pageX,
    Y: event.pageY,
  };
  function moveAt(event, start) {
    const top = event.pageY - start.Y + start.top + "px";
    const left = event.pageX - start.X + start.left + "px";
    CLIPBOARD_HEADER.style.left = left;
    CONTAINER.style.left = left;
    CONTAINER.style.top = top;
  }

  // move our absolutely positioned ball under the pointer
  moveAt(event, start);
  function onMouseMove(event) {
    moveAt(event, start);
  }

  // We use this to remove the mousemove when clicking outside of the container
  const controller = new AbortController();

  // move the container on mousemove
  document.addEventListener("mousemove", onMouseMove, {
    signal: controller.signal,
  });
  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        cleanUp();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );

  function cleanUp() {
    console.log("cleaning up the plot move listener");
    controller.abort();
    CLIPBOARD_HEADER.onmouseup = null;
  }

  // (3) drop the ball, remove unneeded handlers
  CLIPBOARD_HEADER.onmouseup = cleanUp;
};

function sendToClipboard(blob) {
  if (!navigator.clipboard) {
    alert(
      "The Clipboard API does not seem to be available, make sure the Pluto notebook is being used from either localhost or an https source."
    );
  }
  navigator.clipboard
    .write([
      new ClipboardItem({
        // The key is determined dynamically based on the blob's type.
        [blob.type]: blob,
      }),
    ])
    .then(
      function () {
        console.log("Async: Copying to clipboard was successful!");
      },
      function (err) {
        console.error("Async: Could not copy text: ", err);
      }
    );
}

function copyImageToClipboard() {
  // We extract the image options from the provided parameters (if they exist)
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key. We also ignore format because the clipboard only supports png.
    if (val === undefined || key === "format") {
      continue;
    }
    config[key] = val;
  }
  Plotly.toImage(PLOT, config).then(function (dataUrl) {
    fetch(dataUrl)
      .then((res) => res.blob())
      .then((blob) => {
        const paste_receiver = document.querySelector('paste-receiver.plutoplotly')
        if (paste_receiver) {
          paste_receiver.attachImage(dataUrl, CONTAINER)
        }
        sendToClipboard(blob)
      });
  });
}

function saveImageToFile() {
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key.
    if (val === undefined) {
      continue;
    }
    config[key] = val;
  }
  Plotly.downloadImage(PLOT, config);
}

let container_rect = { width: 0, height: 0, top: 0, left: 0 };
function unpop_container(cl) {
  CONTAINER.classList.toggle("popped-out", false);
  CONTAINER.classList.toggle(cl, false);
  // We fix the height back to the value it had before popout, also setting the flag to signal that upon first resize we remove the fixed inline-style
  CONTAINER.style.height = container_rect.height + "px";
  remove_container_size = true;
  // We set the other fixed inline-styles to null
  CONTAINER.style.width = "";
  CONTAINER.style.top = "";
  CONTAINER.style.left = "";
  // We also remove the CLIPBOARD_HEADER
  CLIPBOARD_HEADER.style.width = "";
  CLIPBOARD_HEADER.style.left = "";
  // Finally we remove the hidden class to the header
  CLIPBOARD_HEADER.classList.toggle("hidden", true);
  return;
}
function popout_container(opts) {
  const cl = opts?.cl;
  const target_container_size = opts?.target_container_size ?? {};
  const target_plot_size = opts?.target_plot_size ?? {};
  if (CONTAINER.isPoppedOut()) {
    return unpop_container(cl);
  }
  CONTAINER.classList.toggle(cl, cl === undefined ? false : true);
  // We extract the current size of the container, save them and fix them
  const { width, height, top, left } = CONTAINER.getBoundingClientRect();
  container_rect = { width, height, top, left };
  // We save the current plot size before we pop as it will fill the screen
  const current_plot_size = {
    width: PLOT._fullLayout.width,
    height: PLOT._fullLayout.height,
  };
  // We have to save the pad data before popping so we can resize precisely
  const pad = {};
  pad.unpopped = getSizeData().container_pad;
  CONTAINER.classList.toggle("popped-out", true);
  pad.popped = getSizeData().container_pad;
  // We do top and left based on the current rect
  for (const key of ["top", "left"]) {
    const start_val = target_container_size[key] ?? container_rect[key];
    let offset = 0;
    for (const kind of ["padding", "border"]) {
      offset += pad.popped[kind][key] - pad.unpopped[kind][key];
    }
    CONTAINER.style[key] = start_val - offset + "px";
    if (key === "left") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  // We compute the width and height depending on eventual config data
  const csz = computeContainerSize({
    width:
      target_plot_size.width ??
      config_spans.width.config_value ??
      current_plot_size.width,
    height:
      target_plot_size.height ??
      config_spans.height.config_value ??
      current_plot_size.height,
  });
  for (const key of ["width", "height"]) {
    const val = target_container_size[key] ?? csz[key];
    CONTAINER.style[key] = val + "px";
    if (key === "width") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  CLIPBOARD_HEADER.classList.toggle("hidden", false);
  const controller = new AbortController();

  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        unpop_container();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );
}

CONTAINER.popOut = popout_container;

function DualClick(single_func, dbl_func) {
  let nclicks = 0;
  return function (...args) {
    nclicks += 1;
    if (nclicks > 1) {
      dbl_func(...args);
      nclicks = 0;
    } else {
      delay(300).then(() => {
        if (nclicks == 1) {
          single_func(...args);
        }
        nclicks = 0;
      });
    }
  };
}

// We remove the default download image button
plot_obj.config.modeBarButtonsToRemove = _.union(
  plot_obj.config.modeBarButtonsToRemove,
  ["toImage"]
);
// We add the custom button to the modebar
plot_obj.config.modeBarButtonsToAdd = _.union(
  plot_obj.config.modeBarButtonsToAdd,
  [
    {
      name: "Copy PNG to Clipboard",
      icon: {
        height: 520,
        width: 520,
        path: "M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z",
      },
      direction: "up",
      click: DualClick(copyImageToClipboard, () => {
        popout_container();
      }),
    },
    {
      name: "Download Image",
      icon: Plotly.Icons.camera,
      direction: "up",
      click: DualClick(saveImageToFile, () => {
        popout_container({ cl: "filesave" });
      }),
    },
  ]
);

function getOffsetData(el) {
  let cs = window.getComputedStyle(el, null);
  const odata = {
    padding: {
      left: parseFloat(cs.paddingLeft),
      right: parseFloat(cs.paddingRight),
      top: parseFloat(cs.paddingTop),
      bottom: parseFloat(cs.paddingBottom),
      width: parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight),
      height: parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom),
    },
    border: {
      left: parseFloat(cs.borderLeftWidth),
      right: parseFloat(cs.borderRightWidth),
      top: parseFloat(cs.borderTopWidth),
      bottom: parseFloat(cs.borderBottomWidth),
      width: parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth),
      height: parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth),
    }
  };
  if (el === PLOT) {
    // For the PLOT we also want to take into account the offset
    odata.offset = {
      top: PLOT.offsetParent == CONTAINER ? PLOT.offsetTop : 0,
      left: PLOT.offsetParent == CONTAINER ? PLOT.offsetLeft : 0,
    }
  }
  return odata;
}
function getSizeData() {
  const data = {
    plot_pad: getOffsetData(PLOT),
    plot_rect: PLOT.getBoundingClientRect(),
    container_pad: getOffsetData(CONTAINER),
    container_rect: CONTAINER.getBoundingClientRect(),
  };
  return data;
}
function computeContainerSize({ width, height }, sizeData = getSizeData()) {
  const computed_size = computePlotSize(sizeData);
  const offsets = computed_size.offsets;

  const plot_data = {
    width: width ?? computed_size.width,
    height: height ?? computed_size.height,
  };

  return {
    width: (width ?? computed_size.width) + offsets.width,
    height: (height ?? computed_size.height) + offsets.height,
    noChange: width == computed_size.width && height == computed_size.height,
  }
}

// This function will change the container size so that the resulting plot will be matching the provided specs
function changeContainerSize({ width, height }, sizeData = getSizeData()) {
  if (!CONTAINER.isPoppedOut()) {
    console.log("Tried to change container size when not popped, ignoring");
    return;
  }

  const csz = computeContainerSize({ width, height }, sizeData);

  if (csz.noChange) {
    console.log("Size is the same as current, ignoring");
    return
  }
  // We are now going to set he width and height of the container
  for (const key of ["width", "height"]) {
    CONTAINER.style[key] = csz[key] + "px";
  }
}
// We now create the function that will update the plot based on the values specified
function updateFromHeader() {
  const header_data = {
    height: config_spans.height.ui_value,
    width: config_spans.width.ui_value,
  };
  changeContainerSize(header_data);
}
// We assign this function to the onblur event of width and height
if (firstRun) {
  for (const container of Object.values(config_spans)) {
    container.ui_span.onblur = (e) => {
      container.ui_value = container.ui_span.textContent;
      updateFromHeader();
    };
  }
}
// This function computes the plot size to use for relayout as a function of the container size
function computePlotSize(data = getSizeData()) {
  // Remove Padding
  const { container_pad, plot_pad, container_rect } = data;
  const offsets = {
    width:
      plot_pad.padding.width +
      plot_pad.border.width +
      plot_pad.offset.left +
      container_pad.padding.width +
      container_pad.border.width,
    height:
      plot_pad.padding.height +
      plot_pad.border.height +
      plot_pad.offset.top +
      container_pad.padding.height +
      container_pad.border.height,
  };
  const sz = {
    width: Math.round(container_rect.width - offsets.width),
    height: Math.round(container_rect.height - offsets.height),
    offsets,
  };
  return sz;
}

// Create the resizeObserver to make the plot even more responsive! :magic:
const resizeObserver = new ResizeObserver((entries) => {
  const sizeData = getSizeData();
  const {container_rect, container_pad} = sizeData;
  let plot_size = computePlotSize(sizeData);
  // We save the height in the PLOT object
  PLOT.container_height = container_rect.height;
  // We deal with some stuff if the container is poppped
  CLIPBOARD_HEADER.style.width = container_rect.width + "px";
  CLIPBOARD_HEADER.style.left = container_rect.left + "px";
  config_spans.height.ui_value = plot_size.height;
  config_spans.width.ui_value = plot_size.width;
  /* 
		The addition of the invalid argument `plutoresize` seems to fix the problem with calling `relayout` simply with `{autosize: true}` as update breaking mouse relayout events tracking. 
		See https://github.com/plotly/plotly.js/issues/6156 for details
		*/
  let config = {
    // If this is popped out, we ignore the original width/height
    width: (CONTAINER.isPoppedOut() ? undefined : original_width) ?? plot_size.width,
    height: (CONTAINER.isPoppedOut() ? undefined : original_height) ?? plot_size.height,
    plutoresize: true,
  };
  Plotly.relayout(PLOT, config).then(() => {
    if (remove_container_size && !CONTAINER.isPoppedOut()) {
      // This is needed to avoid the first resize upon plot creation to already be without a fixed height
      CONTAINER.style.height = "";
      CONTAINER.style.width = "";
      remove_container_size = false;
    }
  });
});

resizeObserver.observe(CONTAINER);


Plotly.react(PLOT, plot_obj).then(() => {
	// Assign the Plotly event listeners
	for (const [key, listener_vec] of Object.entries(plotly_listeners)) {
		for (const listener of listener_vec) {
			PLOT.on(key, listener)
		}
	}
	// Assign the JS event listeners
	for (const [key, listener_vec] of Object.entries(js_listeners)) {
		for (const listener of listener_vec) {
			PLOT.addEventListener(key, listener, {
				signal: controller.signal
			})
		}
	}
}
)


invalidation.then(() => {
	// Remove all plotly listeners
	PLOT.removeAllListeners()
	// Remove all JS listeners
	controller.abort()
	// Remove the resizeObserver
	resizeObserver.disconnect()
})



		return CONTAINER
	</script>
</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš2­OH°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$11f8290f-f589-49ff-9602-99ccc4192884¹depends_on_disabled_cellsÂ§runtimeÎÈS˜µpublished_object_keys‘Ù5c6e0de0c-3901-11f0-234e-bd09c571f662/8b2f6661ab801d2c¸depends_on_skipped_cellsÂ§erroredÂÙ$7fb4244c-828a-49d6-a15b-178fa3a42e00Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ¿2Ã—200 Matrix{Float32}:
 1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0  â€¦  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0¤mimeªtext/plain¬rootassignee³const Ï€_blackjack1²last_run_timestampËAÚš%hØ
°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$7fb4244c-828a-49d6-a15b-178fa3a42e00¹depends_on_disabled_cellsÂ§runtimeÎÉ§	µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$0609ad22-0adc-4e4f-afed-b7a46d216576Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚm‹<div class="markdown"><p>Statistics for Steps to Finish Race on Track 1</p>

<table><tr><th align="right">Statistic</th><th align="right"><div class="markdown"><p>Monte Carlo Exploring Starts</p>
</div></th><th align="right">Random Policy</th></tr><tr><td align="right">Mean</td><td align="right">66</td><td align="right">2397</td></tr><tr><td align="right">Median</td><td align="right">48</td><td align="right">1754</td></tr><tr><td align="right">Std</td><td align="right">56</td><td align="right">2118</td></tr><tr><td align="right">Minimum</td><td align="right">14</td><td align="right">17</td></tr><tr><td align="right">Maximum</td><td align="right">372</td><td align="right">9985</td></tr></table>
<p>Cummulative Distribution Function of Steps to Finish Race 	<script id='plot_1'>
		// We start by putting all the variable interpolation here at the beginning
		// We have to convert all typedarrays in the layout to normal arrays. See Issue #25
		// We use lodash for this for compactness
		function removeTypedArray(o) {
			return _.isTypedArray(o) ? Array.from(o) :
			_.isPlainObject(o) ? _.mapValues(o, removeTypedArray) : 
			o
		}

		// Publish the plot object to JS
		let plot_obj = _.update(/* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("c6e0de0c-3901-11f0-234e-bd09c571f662/b6b6df0af3e3a8ae"), "layout", removeTypedArray)
		// Get the plotly listeners
		const plotly_listeners = {}
		// Get the JS listeners
		const js_listeners = {}
		// Deal with eventual custom classes
		let custom_classlist = []


		// Load the plotly library
		let Plotly = undefined
		try {
			let _mod = await import("./plotlyjs/plotlyjs-2.26.2.min.js")
			Plotly = _mod.default
		} catch (e) {
			console.log("Local load failed, trying with the web esm.sh version")
			let _mod = await import("https://esm.sh/plotly.js-dist-min@2.26.2/es2022/plotly.js-dist-min.mjs")
			Plotly = _mod.default
		}

		// Check if we have to force local mathjax font cache
		if (false && window?.MathJax?.config?.svg?.fontCache === 'global') {
			window.MathJax.config.svg.fontCache = 'local'
		}

		// Flag to check if this cell was  manually ran or reactively ran
const firstRun = this ? false : true
const CONTAINER = this ?? html`<div class='plutoplotly-container'>`
const PLOT = CONTAINER.querySelector('.js-plotly-plot') ?? CONTAINER.appendChild(html`<div>`)
const parent = CONTAINER.parentElement
// We use a controller to remove event listeners upon invalidation
const controller = new AbortController()
// We have to add this to keep supporting @bind with the old API using PLOT
PLOT.addEventListener('input', (e) => {
	CONTAINER.value = PLOT.value
	if (e.bubbles) {
		return
	}
	CONTAINER.dispatchEvent(new CustomEvent('input'))
}, { signal: controller.signal })

	// This create the style subdiv on first run
	firstRun && CONTAINER.appendChild(html`
	<style>
	.plutoplotly-container {
		width: 100%;
		height: 100%;
		min-height: 0;
		min-width: 0;
	}
	.plutoplotly-container .js-plotly-plot .plotly div {
		margin: 0 auto; // This centers the plot
	}
	.plutoplotly-container.popped-out {
		overflow: auto;
		z-index: 1000;
		position: fixed;
		resize: both;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		border-top-left-radius: 0px;
		border-top-right-radius: 0px;
	}
	.plutoplotly-clipboard-header {
		display: flex;
		flex-flow: row wrap;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-top-left-radius: 12px;
		border-top-right-radius: 12px;
		position: fixed;
		z-index: 1001;
		cursor: move;
		transform: translate(0px, -100%);
		padding: 5px;
	}
	.plutoplotly-clipboard-header span {
		display: inline-block;
		flex: 1
	}
	.plutoplotly-clipboard-header.hidden {
		display: none;
	}
	.clipboard-span {
		position: relative;
	}
	.clipboard-value {
		padding-right: 5px;
		padding-left: 2px;
		cursor: text;
	}
	.clipboard-span.format {
		display: none;
	}
	.clipboard-span.filename {
		flex: 0 0 100%;
		text-align: center;
		border-top: 3px solid var(--kbd-border-color);
		margin-top: 5px;
		display: none;
	}
	.plutoplotly-container.filesave .clipboard-span.filename {
		display: inline-block;
	}
	.clipboard-value.filename {
		margin-left: 3px;
		text-align: left;
		min-width: min(60%, min-content);
	}
	.plutoplotly-container.filesave .clipboard-span.format {
		display: inline-flex;
	}
	.clipboard-span.format .label {
		flex: 0 0 0;
	}
	.clipboard-value.format {
		position: relative;
		flex: 1 0 auto;
		min-width: 30px;
		margin-right: 10px;
	}
	div.format-options {
		display: inline-flex;
		flex-flow: column;
		position: absolute;
		background: var(--main-bg-color);
		border-radius: 12px;
		padding-left: 3px;
		z-index: 2000;
	}
	div.format-options:hover {
		cursor: pointer;
		border: 3px solid var(--kbd-border-color);
		padding: 3px;
		transform: translate(-3px, -6px);
	}
	div.format-options .format-option {
		display: none;
	}
	div.format-options:hover .format-option {
		display: inline-block;
	}
	.format-option:not(.selected) {
		margin-top: 3px;
	}
	div.format-options .format-option.selected {
		order: -1;
		display: inline-block;
	}
	.format-option:hover {
		background-color: var(--kbd-border-color);
	}
	span.config-value {
		font-weight: normal;
		color: var(--pluto-output-color);
		display: none;
		position: absolute;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		transform: translate(0px, calc(-100% - 10px));
		padding: 5px;
	}
	.label {
		user-select: none;
	}
	.label:hover span.config-value {
		display: inline-block;
		min-width: 150px;
	}
	.clipboard-span.matching-config .label {
		color: var(--cm-macro-color);
		font-weight: bold;
	}
	.clipboard-span.different-config .label {
		color: var(--cm-tag-color);
		font-weight: bold;
	}
</style>
`)

let original_height = plot_obj.layout.height
let original_width = plot_obj.layout.width
// For the height we have to also put a fixed value in case the plot is put on a non-fixed-size container (like the default wrapper)
// We define a variable to check whether we still have to remove the fixed height
let remove_container_size = firstRun
let container_height = original_height ?? PLOT.container_height ?? 400
CONTAINER.style.height = container_height + 'px'

// We create a Promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// We import interact for dragging/resizing
const { default: interact } = await import('https://esm.sh/interactjs@1.10.19')


function getImageOptions() {
  const o = plot_obj.config.toImageButtonOptions ?? {};
  return {
    format: o.format ?? "png",
    width: o.width ?? original_width,
    height: o.height ?? original_height,
    scale: o.scale ?? 1,
    filename: o.filename ?? "newplot",
  };
}

const CLIPBOARD_HEADER =
  CONTAINER.querySelector(".plutoplotly-clipboard-header") ??
  CONTAINER.insertAdjacentElement(
    "afterbegin",
    html`<div class="plutoplotly-clipboard-header hidden">
      <span class="clipboard-span format"
        ><span class="label">Format:</span
        ><span class="clipboard-value format"></span
      ></span>
      <span class="clipboard-span width"
        ><span class="label">Width:</span
        ><span class="clipboard-value width"></span>px</span
      >
      <span class="clipboard-span height"
        ><span class="label">Height:</span
        ><span class="clipboard-value height"></span>px</span
      >
      <span class="clipboard-span scale"
        ><span class="label">Scale:</span
        ><span class="clipboard-value scale"></span
      ></span>
      <button class="clipboard-span set">Set</button>
      <button class="clipboard-span unset">Unset</button>
      <span class="clipboard-span filename"
        ><span class="label">Filename:</span
        ><span class="clipboard-value filename"></span
      ></span>
    </div>`
  );

function checkConfigSync(container) {
  const valid_classes = [
    "missing-config",
    "matching-config",
    "different-config",
  ];
  function setClass(cl) {
    for (const name of valid_classes) {
      container.classList.toggle(name, name == cl);
    }
  }
  // We use the custom getters we'll set up in the container
  const { ui_value, config_value, config_span, key } = container;
  if (config_value === undefined) {
    setClass("missing-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> is not present in the config.`;
  } else if (ui_value == config_value) {
    setClass("matching-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has the same value in the config and in the header.`;
  } else {
    setClass("different-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has a different value (<em>${config_value}</em>) in the config.`;
  }
  // Add info about setting and unsetting
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click on the label <em><b>once</b></em> to set the current UI value in the config.`
  );
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click <em><b>twice</b></em> to remove this key from the config.`
  );
}

const valid_formats = ["png", "svg", "webp", "jpeg", "full-json"];
function initializeUIValueSpan(span, key, value) {
  const container = span.closest(".clipboard-span");
  span.contentEditable = key === "format" ? "false" : "true";
  let parse = (x) => x;
  let update = (x) => (span.textContent = x);
  if (key === "width" || key === "height") {
    parse = (x) => Math.round(parseFloat(x));
  } else if (key === "scale") {
    parse = parseFloat;
  } else if (key === "format") {
    // We remove contentEditable
    span.contentEditable = "false";
    // Here we first add the subspans for each option
    const opts_div = span.appendChild(html`<div class="format-options"></div>`);
    for (const fmt of valid_formats) {
      const opt = opts_div.appendChild(
        html`<span class="format-option ${fmt}">${fmt}</span>`
      );
      opt.onclick = (e) => {
        span.value = opt.textContent;
      };
    }
    parse = (x) => {
      return valid_formats.includes(x) ? x : localValue;
    };
    update = (x) => {
      for (const opt of opts_div.children) {
        opt.classList.toggle("selected", opt.textContent === x);
      }
    };
  } else {
    // We only have filename here
  }
  let localValue;
  Object.defineProperty(span, "value", {
    get: () => {
      return localValue;
    },
    set: (val) => {
      if (val !== "") {
        localValue = parse(val);
      }
      update(localValue);
      checkConfigSync(container);
    },
  });
  // We also assign a listener so that the editable is blurred when enter is pressed
  span.onkeydown = (e) => {
    if (e.keyCode === 13) {
      e.preventDefault();
      span.blur();
    }
  };
  span.value = value;
}

function initializeConfigValueSpan(span, key) {
  // Here we mostly want to define the setter and getter
  const container = span.closest(".clipboard-span");
  Object.defineProperty(span, "value", {
    get: () => {
      return plot_obj.config.toImageButtonOptions[key];
    },
    set: (val) => {
      // if undefined is passed, we remove the entry from the options
      if (val === undefined) {
        delete plot_obj.config.toImageButtonOptions[key];
      } else {
        plot_obj.config.toImageButtonOptions[key] = val;
      }
      checkConfigSync(container);
    },
  });
}

const config_spans = {};
for (const [key, value] of Object.entries(getImageOptions())) {
  const container = CLIPBOARD_HEADER.querySelector(`.clipboard-span.${key}`);
  const label = container.querySelector(".label");
  // We give the label a function that on single click will set the current value and with double click will unset it
  label.onclick = DualClick(
    () => {
      container.config_value = container.ui_value;
    },
    (e) => {
      console.log("e", e);
      e.preventDefault();
      container.config_value = undefined;
    }
  );
  const ui_value_span = container.querySelector(".clipboard-value");
  const config_value_span =
    container.querySelector(".config-value") ??
    label.insertAdjacentElement(
      "afterbegin",
      html`<span class="config-value"></span>`
    );
  // Assing the two spans as properties of the containing span
  container.ui_span = ui_value_span;
  container.config_span = config_value_span;
  container.key = key;
  config_spans[key] = container;
  if (firstRun) {
    plot_obj.config.toImageButtonOptions =
      plot_obj.config.toImageButtonOptions ?? {};
    // We do the initialization of the value span
    initializeUIValueSpan(ui_value_span, key, value);
    // Then we initialize the config value
    initializeConfigValueSpan(config_value_span, key);
    // We put some convenience getters/setters
    // ui_value forward
    Object.defineProperty(container, "ui_value", {
      get: () => ui_value_span.value,
      set: (val) => {
        ui_value_span.value = val;
      },
    });
    // config_value forward
    Object.defineProperty(container, "config_value", {
      get: () => config_value_span.value,
      set: (val) => {
        config_value_span.value = val;
      },
    });
  }
}

// These objects will contain the default value

// This code updates the image options in the PLOT config with the provided ones
function setImageOptions(o) {
  for (const [key, container] of Object.entries(config_spans)) {
    container.config_value = o[key];
  }
}
function unsetImageOptions() {
  setImageOptions({});
}

const set_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.set");
const unset_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.unset");
if (firstRun) {
  set_button.onclick = (e) => {
    for (const container of Object.values(config_spans)) {
      container.config_value = container.ui_value;
    }
  };
  unset_button.onclick = unsetImageOptions;
}

// We add a function to check if the clipboard is popped out
CONTAINER.isPoppedOut = () => {
  return CONTAINER.classList.contains("popped-out");
};

CLIPBOARD_HEADER.onmousedown = function (event) {
  if (event.target.matches("span.clipboard-value")) {
    console.log("We don't move!");
    return;
  }
  const start = {
    left: parseFloat(CONTAINER.style.left),
    top: parseFloat(CONTAINER.style.top),
    X: event.pageX,
    Y: event.pageY,
  };
  function moveAt(event, start) {
    const top = event.pageY - start.Y + start.top + "px";
    const left = event.pageX - start.X + start.left + "px";
    CLIPBOARD_HEADER.style.left = left;
    CONTAINER.style.left = left;
    CONTAINER.style.top = top;
  }

  // move our absolutely positioned ball under the pointer
  moveAt(event, start);
  function onMouseMove(event) {
    moveAt(event, start);
  }

  // We use this to remove the mousemove when clicking outside of the container
  const controller = new AbortController();

  // move the container on mousemove
  document.addEventListener("mousemove", onMouseMove, {
    signal: controller.signal,
  });
  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        cleanUp();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );

  function cleanUp() {
    console.log("cleaning up the plot move listener");
    controller.abort();
    CLIPBOARD_HEADER.onmouseup = null;
  }

  // (3) drop the ball, remove unneeded handlers
  CLIPBOARD_HEADER.onmouseup = cleanUp;
};

function sendToClipboard(blob) {
  if (!navigator.clipboard) {
    alert(
      "The Clipboard API does not seem to be available, make sure the Pluto notebook is being used from either localhost or an https source."
    );
  }
  navigator.clipboard
    .write([
      new ClipboardItem({
        // The key is determined dynamically based on the blob's type.
        [blob.type]: blob,
      }),
    ])
    .then(
      function () {
        console.log("Async: Copying to clipboard was successful!");
      },
      function (err) {
        console.error("Async: Could not copy text: ", err);
      }
    );
}

function copyImageToClipboard() {
  // We extract the image options from the provided parameters (if they exist)
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key. We also ignore format because the clipboard only supports png.
    if (val === undefined || key === "format") {
      continue;
    }
    config[key] = val;
  }
  Plotly.toImage(PLOT, config).then(function (dataUrl) {
    fetch(dataUrl)
      .then((res) => res.blob())
      .then((blob) => {
        const paste_receiver = document.querySelector('paste-receiver.plutoplotly')
        if (paste_receiver) {
          paste_receiver.attachImage(dataUrl, CONTAINER)
        }
        sendToClipboard(blob)
      });
  });
}

function saveImageToFile() {
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key.
    if (val === undefined) {
      continue;
    }
    config[key] = val;
  }
  Plotly.downloadImage(PLOT, config);
}

let container_rect = { width: 0, height: 0, top: 0, left: 0 };
function unpop_container(cl) {
  CONTAINER.classList.toggle("popped-out", false);
  CONTAINER.classList.toggle(cl, false);
  // We fix the height back to the value it had before popout, also setting the flag to signal that upon first resize we remove the fixed inline-style
  CONTAINER.style.height = container_rect.height + "px";
  remove_container_size = true;
  // We set the other fixed inline-styles to null
  CONTAINER.style.width = "";
  CONTAINER.style.top = "";
  CONTAINER.style.left = "";
  // We also remove the CLIPBOARD_HEADER
  CLIPBOARD_HEADER.style.width = "";
  CLIPBOARD_HEADER.style.left = "";
  // Finally we remove the hidden class to the header
  CLIPBOARD_HEADER.classList.toggle("hidden", true);
  return;
}
function popout_container(opts) {
  const cl = opts?.cl;
  const target_container_size = opts?.target_container_size ?? {};
  const target_plot_size = opts?.target_plot_size ?? {};
  if (CONTAINER.isPoppedOut()) {
    return unpop_container(cl);
  }
  CONTAINER.classList.toggle(cl, cl === undefined ? false : true);
  // We extract the current size of the container, save them and fix them
  const { width, height, top, left } = CONTAINER.getBoundingClientRect();
  container_rect = { width, height, top, left };
  // We save the current plot size before we pop as it will fill the screen
  const current_plot_size = {
    width: PLOT._fullLayout.width,
    height: PLOT._fullLayout.height,
  };
  // We have to save the pad data before popping so we can resize precisely
  const pad = {};
  pad.unpopped = getSizeData().container_pad;
  CONTAINER.classList.toggle("popped-out", true);
  pad.popped = getSizeData().container_pad;
  // We do top and left based on the current rect
  for (const key of ["top", "left"]) {
    const start_val = target_container_size[key] ?? container_rect[key];
    let offset = 0;
    for (const kind of ["padding", "border"]) {
      offset += pad.popped[kind][key] - pad.unpopped[kind][key];
    }
    CONTAINER.style[key] = start_val - offset + "px";
    if (key === "left") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  // We compute the width and height depending on eventual config data
  const csz = computeContainerSize({
    width:
      target_plot_size.width ??
      config_spans.width.config_value ??
      current_plot_size.width,
    height:
      target_plot_size.height ??
      config_spans.height.config_value ??
      current_plot_size.height,
  });
  for (const key of ["width", "height"]) {
    const val = target_container_size[key] ?? csz[key];
    CONTAINER.style[key] = val + "px";
    if (key === "width") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  CLIPBOARD_HEADER.classList.toggle("hidden", false);
  const controller = new AbortController();

  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        unpop_container();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );
}

CONTAINER.popOut = popout_container;

function DualClick(single_func, dbl_func) {
  let nclicks = 0;
  return function (...args) {
    nclicks += 1;
    if (nclicks > 1) {
      dbl_func(...args);
      nclicks = 0;
    } else {
      delay(300).then(() => {
        if (nclicks == 1) {
          single_func(...args);
        }
        nclicks = 0;
      });
    }
  };
}

// We remove the default download image button
plot_obj.config.modeBarButtonsToRemove = _.union(
  plot_obj.config.modeBarButtonsToRemove,
  ["toImage"]
);
// We add the custom button to the modebar
plot_obj.config.modeBarButtonsToAdd = _.union(
  plot_obj.config.modeBarButtonsToAdd,
  [
    {
      name: "Copy PNG to Clipboard",
      icon: {
        height: 520,
        width: 520,
        path: "M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z",
      },
      direction: "up",
      click: DualClick(copyImageToClipboard, () => {
        popout_container();
      }),
    },
    {
      name: "Download Image",
      icon: Plotly.Icons.camera,
      direction: "up",
      click: DualClick(saveImageToFile, () => {
        popout_container({ cl: "filesave" });
      }),
    },
  ]
);

function getOffsetData(el) {
  let cs = window.getComputedStyle(el, null);
  const odata = {
    padding: {
      left: parseFloat(cs.paddingLeft),
      right: parseFloat(cs.paddingRight),
      top: parseFloat(cs.paddingTop),
      bottom: parseFloat(cs.paddingBottom),
      width: parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight),
      height: parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom),
    },
    border: {
      left: parseFloat(cs.borderLeftWidth),
      right: parseFloat(cs.borderRightWidth),
      top: parseFloat(cs.borderTopWidth),
      bottom: parseFloat(cs.borderBottomWidth),
      width: parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth),
      height: parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth),
    }
  };
  if (el === PLOT) {
    // For the PLOT we also want to take into account the offset
    odata.offset = {
      top: PLOT.offsetParent == CONTAINER ? PLOT.offsetTop : 0,
      left: PLOT.offsetParent == CONTAINER ? PLOT.offsetLeft : 0,
    }
  }
  return odata;
}
function getSizeData() {
  const data = {
    plot_pad: getOffsetData(PLOT),
    plot_rect: PLOT.getBoundingClientRect(),
    container_pad: getOffsetData(CONTAINER),
    container_rect: CONTAINER.getBoundingClientRect(),
  };
  return data;
}
function computeContainerSize({ width, height }, sizeData = getSizeData()) {
  const computed_size = computePlotSize(sizeData);
  const offsets = computed_size.offsets;

  const plot_data = {
    width: width ?? computed_size.width,
    height: height ?? computed_size.height,
  };

  return {
    width: (width ?? computed_size.width) + offsets.width,
    height: (height ?? computed_size.height) + offsets.height,
    noChange: width == computed_size.width && height == computed_size.height,
  }
}

// This function will change the container size so that the resulting plot will be matching the provided specs
function changeContainerSize({ width, height }, sizeData = getSizeData()) {
  if (!CONTAINER.isPoppedOut()) {
    console.log("Tried to change container size when not popped, ignoring");
    return;
  }

  const csz = computeContainerSize({ width, height }, sizeData);

  if (csz.noChange) {
    console.log("Size is the same as current, ignoring");
    return
  }
  // We are now going to set he width and height of the container
  for (const key of ["width", "height"]) {
    CONTAINER.style[key] = csz[key] + "px";
  }
}
// We now create the function that will update the plot based on the values specified
function updateFromHeader() {
  const header_data = {
    height: config_spans.height.ui_value,
    width: config_spans.width.ui_value,
  };
  changeContainerSize(header_data);
}
// We assign this function to the onblur event of width and height
if (firstRun) {
  for (const container of Object.values(config_spans)) {
    container.ui_span.onblur = (e) => {
      container.ui_value = container.ui_span.textContent;
      updateFromHeader();
    };
  }
}
// This function computes the plot size to use for relayout as a function of the container size
function computePlotSize(data = getSizeData()) {
  // Remove Padding
  const { container_pad, plot_pad, container_rect } = data;
  const offsets = {
    width:
      plot_pad.padding.width +
      plot_pad.border.width +
      plot_pad.offset.left +
      container_pad.padding.width +
      container_pad.border.width,
    height:
      plot_pad.padding.height +
      plot_pad.border.height +
      plot_pad.offset.top +
      container_pad.padding.height +
      container_pad.border.height,
  };
  const sz = {
    width: Math.round(container_rect.width - offsets.width),
    height: Math.round(container_rect.height - offsets.height),
    offsets,
  };
  return sz;
}

// Create the resizeObserver to make the plot even more responsive! :magic:
const resizeObserver = new ResizeObserver((entries) => {
  const sizeData = getSizeData();
  const {container_rect, container_pad} = sizeData;
  let plot_size = computePlotSize(sizeData);
  // We save the height in the PLOT object
  PLOT.container_height = container_rect.height;
  // We deal with some stuff if the container is poppped
  CLIPBOARD_HEADER.style.width = container_rect.width + "px";
  CLIPBOARD_HEADER.style.left = container_rect.left + "px";
  config_spans.height.ui_value = plot_size.height;
  config_spans.width.ui_value = plot_size.width;
  /* 
		The addition of the invalid argument `plutoresize` seems to fix the problem with calling `relayout` simply with `{autosize: true}` as update breaking mouse relayout events tracking. 
		See https://github.com/plotly/plotly.js/issues/6156 for details
		*/
  let config = {
    // If this is popped out, we ignore the original width/height
    width: (CONTAINER.isPoppedOut() ? undefined : original_width) ?? plot_size.width,
    height: (CONTAINER.isPoppedOut() ? undefined : original_height) ?? plot_size.height,
    plutoresize: true,
  };
  Plotly.relayout(PLOT, config).then(() => {
    if (remove_container_size && !CONTAINER.isPoppedOut()) {
      // This is needed to avoid the first resize upon plot creation to already be without a fixed height
      CONTAINER.style.height = "";
      CONTAINER.style.width = "";
      remove_container_size = false;
    }
  });
});

resizeObserver.observe(CONTAINER);


Plotly.react(PLOT, plot_obj).then(() => {
	// Assign the Plotly event listeners
	for (const [key, listener_vec] of Object.entries(plotly_listeners)) {
		for (const listener of listener_vec) {
			PLOT.on(key, listener)
		}
	}
	// Assign the JS event listeners
	for (const [key, listener_vec] of Object.entries(js_listeners)) {
		for (const listener of listener_vec) {
			PLOT.addEventListener(key, listener, {
				signal: controller.signal
			})
		}
	}
}
)


invalidation.then(() => {
	// Remove all plotly listeners
	PLOT.removeAllListeners()
	// Remove all JS listeners
	controller.abort()
	// Remove the resizeObserver
	resizeObserver.disconnect()
})



		return CONTAINER
	</script>
</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš3!Ç°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$0609ad22-0adc-4e4f-afed-b7a46d216576¹depends_on_disabled_cellsÂ§runtimeÎX6Ó$µpublished_object_keys‘Ù5c6e0de0c-3901-11f0-234e-bd09c571f662/b6b6df0af3e3a8ae¸depends_on_skipped_cellsÂ§erroredÂÙ$61eb74eb-88e0-42e6-a14b-3730a800694dŠ¦queuedÂ¤logs�§runningÂ¦output†¤body¿2Ã—1 Matrix{Float32}:
 1.0
 0.0¤mimeªtext/plain¬rootassignee¸const onestate_Ï€_target²last_run_timestampËAÚš, Ç°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$61eb74eb-88e0-42e6-a14b-3730a800694d¹depends_on_disabled_cellsÂ§runtimeÎ”ãµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$6a96304b-add3-4135-8ccf-46cc23859d53Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙN<div class="markdown"><h4>Off-policy MC Control Racetrack Solution</h4>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"*wÑ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$6a96304b-add3-4135-8ccf-46cc23859d53¹depends_on_disabled_cellsÂ§runtimeÎ é²µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$c883748c-76b9-4086-8698-b40df51390daŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚ'<div class="markdown"><blockquote>
<h3><em>Exercise 5.4</em></h3>
<p>The pseudocode for Monte Carlo ES is inefficient because, for each state-action pair, it maintains a list of all returns and repeatedly calculates their mean.  It would be more dfficient to use techniques similar to those explained in Section 2.4 to maintain just the mean and a count &#40;for each state-action pair&#41; and update them incrementally.  Describe how the pseudocode would be altered to achieve this.</p>
</blockquote>
<p>Returns&#40;s,a&#41; will not maintain a list but instead be a list of single values for each state-action pair.  Additionally, another list Counts&#40;s,a&#41; should be initialized at 0 for each pair.  When new G values are obtained for state-action pairs, the Count&#40;s,a&#41; value should be incremented by 1.  Then Returns&#40;s,a&#41; can be updated with the following formula: </p>
<p class="tex">$$\text&#123;Returns&#125;&#40;s,a&#41; &#61; \frac&#123;\text&#123;Returns&#125;&#40;s,a&#41; \times &#40;\text&#123;Count&#125;&#40;s,a&#41; - 1&#41; &#43; G&#40;s,a&#41;&#125;&#123;\text&#123;Count&#125;&#40;s,a&#41;&#125; &#61; \text&#123;Returns&#125;&#40;s,a&#41; &#43; \frac&#123;G&#40;s,a&#41; - \text&#123;Returns&#125;&#40;s,a&#41;&#125;&#123;\text&#123;Count&#125;&#40;s,a&#41;&#125;$$</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"')„°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$c883748c-76b9-4086-8698-b40df51390da¹depends_on_disabled_cellsÂ§runtimeÎ 'µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$f071b7e2-3f78-4132-8b84-f810f178c89dŠ¦queuedÂ¤logs�§runningÂ¦output†¤body…¦prefixÙNMDP_Opaque{OneState, OneStateAction, typeof(one_state_simulator), var"#48#49"}¨elements–’¦states’…¦prefix¾Main.var"workspace#3".OneState¨elements‘’’…¦prefix¨OneState¨elements�¤type¦struct¬prefix_short¨OneState¨objectid°ffffffff38bdf29fÙ!application/vnd.pluto.tree+object¤type¥Array¬prefix_short ¨objectid°f894cef2b5e927e6Ù!application/vnd.pluto.tree+object’«statelookup’…¦prefixÙ+Dict{Main.var"workspace#3".OneState, Int64}¨elements‘’’…¦prefix¨OneState¨elements�¤type¦struct¬prefix_short¨OneState¨objectid°ffffffff38bdf29fÙ!application/vnd.pluto.tree+object’¡1ªtext/plain¤type¤Dict¬prefix_short¤Dict¨objectid°62a6db26cb4a56b2Ù!application/vnd.pluto.tree+object’§actions’…¦prefixÙ$Main.var"workspace#3".OneStateAction¨elements’’’…¦prefix¤Left¨elements�¤type¦struct¬prefix_short¤Left¨objectid°ffffffff5e48f957Ù!application/vnd.pluto.tree+object’’…¦prefix¥Right¨elements�¤type¦struct¬prefix_short¥Right¨objectid°ffffffff2428617aÙ!application/vnd.pluto.tree+object¤type¥Array¬prefix_short ¨objectid°6ea419802207c1a3Ù!application/vnd.pluto.tree+object’¬actionlookup’…¦prefixÙ1Dict{Main.var"workspace#3".OneStateAction, Int64}¨elements’’’…¦prefix¤Left¨elements�¤type¦struct¬prefix_short¤Left¨objectid°ffffffff5e48f957Ù!application/vnd.pluto.tree+object’¡1ªtext/plain’’…¦prefix¥Right¨elements�¤type¦struct¬prefix_short¥Right¨objectid°ffffffff2428617aÙ!application/vnd.pluto.tree+object’¡2ªtext/plain¤type¤Dict¬prefix_short¤Dict¨objectid°86f98bf29f7f50c5Ù!application/vnd.pluto.tree+object’ªstate_init’Ù$#48 (generic function with 1 method)ªtext/plain’©simulator’Ù4one_state_simulator (generic function with 1 method)ªtext/plain¤type¦struct¬prefix_shortªMDP_Opaque¨objectid°a8df05bb1d73c880¤mimeÙ!application/vnd.pluto.tree+object¬rootassigneeÀ²last_run_timestampËAÚš,•:°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$f071b7e2-3f78-4132-8b84-f810f178c89d¹depends_on_disabled_cellsÂ§runtimeÎ¾VŒµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$8d7b9826-b52c-4d5a-8c63-e83a1229a0beŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙk<div class="markdown"><p>Example trajectories after training for 1000 episodes with Ïµ&#61; 0.01</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš3÷•š°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$8d7b9826-b52c-4d5a-8c63-e83a1229a0be¹depends_on_disabled_cellsÂ§runtimeÎ ,”µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$67e535c7-437a-49ba-b5ab-9dfe63fe4aaaŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙA<div class="markdown"><h4>Racetrack Environment Setup</h4>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš")ïg°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$67e535c7-437a-49ba-b5ab-9dfe63fe4aaa¹depends_on_disabled_cellsÂ§runtimeÎ ê£µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$c8f3f7e3-be7e-4615-a667-d9f789928883Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ,updatevalue (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš)`ÖÃ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$c8f3f7e3-be7e-4615-a667-d9f789928883¹depends_on_disabled_cellsÂ§runtimeÎ »ôµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$30809344-b4ab-468b-b4b7-5ef3dca5ffc7Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚ<div class="markdown"><blockquote>
<h3><em>Exercise 5.2</em></h3>
<p>Suppose every-visit MC was used instead of first-visit MC on the blackjack task.  Would you expect the results to be very different?  Why or why not?</p>
</blockquote>
<p>As an episode proceeds in blackjack the states will not repeat since every time a card is dealt the player sum changes, or the usable Ace flag changes.  Thus the check ensuring that only the first visit to a state is counted in the return average will have no effect on the MC evaluation.</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"&ˆ'°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$30809344-b4ab-468b-b4b7-5ef3dca5ffc7¹depends_on_disabled_cellsÂ§runtimeÎ u’µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$e2a720b0-a8c4-43a2-bf34-750ff3323004Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚ—<div class="markdown"><h2>5.4 Monte Carlo Control without Exploring Starts</h2>
<p>To only way to ensure all state-action pairs are visited without exploring starts is to use a policy with a non-zero probability of visiting all such states.  One policy that meets this criterion is an <em>Ïµ-soft</em> policy meaning that <span class="tex">$\pi&#40;a \vert s&#41; &gt; 0 \: \forall \: s \in \mathcal&#123;S&#125;$</span>.  To achieve this with Monte Carlo Control, we simply update the policy to be <span class="tex">$\epsilon$</span>-greedy for every Q update, so the maximizing &#40;greedy&#41; action is given a probability <span class="tex">$1 - \epsilon &#43; \frac&#123;\epsilon&#125;&#123;\vert \mathcal&#123;A&#125;&#40;s&#41; \vert&#125;$</span> and all other actions are given the probability <span class="tex">$\frac&#123;\epsilon&#125;&#123;\vert \mathcal&#123;A&#125;&#40;s&#41; \vert&#125;$</span>.</p>
<p>Below is code implementing MC control for Ïµ-soft policies.  It is mostly identical to the every visit method except the policy is always used to select the initial action and the policy update uses an Ïµ-greedy update rather than a greedy one.</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"'M°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$e2a720b0-a8c4-43a2-bf34-750ff3323004¹depends_on_disabled_cellsÂ§runtimeÎ ºäµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$1067fcc4-cbc6-453c-a996-d420c498619aŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚm‹<div class="markdown"><p>Statistics for Steps to Finish Race on Track 1</p>

<table><tr><th align="right">Statistic</th><th align="right"><div class="markdown"><p>Off policy MC Control</p>
</div></th><th align="right">Random Policy</th></tr><tr><td align="right">Mean</td><td align="right">2689</td><td align="right">2445</td></tr><tr><td align="right">Median</td><td align="right">2228</td><td align="right">1801</td></tr><tr><td align="right">Std</td><td align="right">2148</td><td align="right">2174</td></tr><tr><td align="right">Minimum</td><td align="right">14</td><td align="right">17</td></tr><tr><td align="right">Maximum</td><td align="right">9983</td><td align="right">9986</td></tr></table>
<p>Cummulative Distribution Function of Steps to Finish Race 	<script id='plot_1'>
		// We start by putting all the variable interpolation here at the beginning
		// We have to convert all typedarrays in the layout to normal arrays. See Issue #25
		// We use lodash for this for compactness
		function removeTypedArray(o) {
			return _.isTypedArray(o) ? Array.from(o) :
			_.isPlainObject(o) ? _.mapValues(o, removeTypedArray) : 
			o
		}

		// Publish the plot object to JS
		let plot_obj = _.update(/* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("c6e0de0c-3901-11f0-234e-bd09c571f662/49c525f145d8c899"), "layout", removeTypedArray)
		// Get the plotly listeners
		const plotly_listeners = {}
		// Get the JS listeners
		const js_listeners = {}
		// Deal with eventual custom classes
		let custom_classlist = []


		// Load the plotly library
		let Plotly = undefined
		try {
			let _mod = await import("./plotlyjs/plotlyjs-2.26.2.min.js")
			Plotly = _mod.default
		} catch (e) {
			console.log("Local load failed, trying with the web esm.sh version")
			let _mod = await import("https://esm.sh/plotly.js-dist-min@2.26.2/es2022/plotly.js-dist-min.mjs")
			Plotly = _mod.default
		}

		// Check if we have to force local mathjax font cache
		if (false && window?.MathJax?.config?.svg?.fontCache === 'global') {
			window.MathJax.config.svg.fontCache = 'local'
		}

		// Flag to check if this cell was  manually ran or reactively ran
const firstRun = this ? false : true
const CONTAINER = this ?? html`<div class='plutoplotly-container'>`
const PLOT = CONTAINER.querySelector('.js-plotly-plot') ?? CONTAINER.appendChild(html`<div>`)
const parent = CONTAINER.parentElement
// We use a controller to remove event listeners upon invalidation
const controller = new AbortController()
// We have to add this to keep supporting @bind with the old API using PLOT
PLOT.addEventListener('input', (e) => {
	CONTAINER.value = PLOT.value
	if (e.bubbles) {
		return
	}
	CONTAINER.dispatchEvent(new CustomEvent('input'))
}, { signal: controller.signal })

	// This create the style subdiv on first run
	firstRun && CONTAINER.appendChild(html`
	<style>
	.plutoplotly-container {
		width: 100%;
		height: 100%;
		min-height: 0;
		min-width: 0;
	}
	.plutoplotly-container .js-plotly-plot .plotly div {
		margin: 0 auto; // This centers the plot
	}
	.plutoplotly-container.popped-out {
		overflow: auto;
		z-index: 1000;
		position: fixed;
		resize: both;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		border-top-left-radius: 0px;
		border-top-right-radius: 0px;
	}
	.plutoplotly-clipboard-header {
		display: flex;
		flex-flow: row wrap;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-top-left-radius: 12px;
		border-top-right-radius: 12px;
		position: fixed;
		z-index: 1001;
		cursor: move;
		transform: translate(0px, -100%);
		padding: 5px;
	}
	.plutoplotly-clipboard-header span {
		display: inline-block;
		flex: 1
	}
	.plutoplotly-clipboard-header.hidden {
		display: none;
	}
	.clipboard-span {
		position: relative;
	}
	.clipboard-value {
		padding-right: 5px;
		padding-left: 2px;
		cursor: text;
	}
	.clipboard-span.format {
		display: none;
	}
	.clipboard-span.filename {
		flex: 0 0 100%;
		text-align: center;
		border-top: 3px solid var(--kbd-border-color);
		margin-top: 5px;
		display: none;
	}
	.plutoplotly-container.filesave .clipboard-span.filename {
		display: inline-block;
	}
	.clipboard-value.filename {
		margin-left: 3px;
		text-align: left;
		min-width: min(60%, min-content);
	}
	.plutoplotly-container.filesave .clipboard-span.format {
		display: inline-flex;
	}
	.clipboard-span.format .label {
		flex: 0 0 0;
	}
	.clipboard-value.format {
		position: relative;
		flex: 1 0 auto;
		min-width: 30px;
		margin-right: 10px;
	}
	div.format-options {
		display: inline-flex;
		flex-flow: column;
		position: absolute;
		background: var(--main-bg-color);
		border-radius: 12px;
		padding-left: 3px;
		z-index: 2000;
	}
	div.format-options:hover {
		cursor: pointer;
		border: 3px solid var(--kbd-border-color);
		padding: 3px;
		transform: translate(-3px, -6px);
	}
	div.format-options .format-option {
		display: none;
	}
	div.format-options:hover .format-option {
		display: inline-block;
	}
	.format-option:not(.selected) {
		margin-top: 3px;
	}
	div.format-options .format-option.selected {
		order: -1;
		display: inline-block;
	}
	.format-option:hover {
		background-color: var(--kbd-border-color);
	}
	span.config-value {
		font-weight: normal;
		color: var(--pluto-output-color);
		display: none;
		position: absolute;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		transform: translate(0px, calc(-100% - 10px));
		padding: 5px;
	}
	.label {
		user-select: none;
	}
	.label:hover span.config-value {
		display: inline-block;
		min-width: 150px;
	}
	.clipboard-span.matching-config .label {
		color: var(--cm-macro-color);
		font-weight: bold;
	}
	.clipboard-span.different-config .label {
		color: var(--cm-tag-color);
		font-weight: bold;
	}
</style>
`)

let original_height = plot_obj.layout.height
let original_width = plot_obj.layout.width
// For the height we have to also put a fixed value in case the plot is put on a non-fixed-size container (like the default wrapper)
// We define a variable to check whether we still have to remove the fixed height
let remove_container_size = firstRun
let container_height = original_height ?? PLOT.container_height ?? 400
CONTAINER.style.height = container_height + 'px'

// We create a Promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// We import interact for dragging/resizing
const { default: interact } = await import('https://esm.sh/interactjs@1.10.19')


function getImageOptions() {
  const o = plot_obj.config.toImageButtonOptions ?? {};
  return {
    format: o.format ?? "png",
    width: o.width ?? original_width,
    height: o.height ?? original_height,
    scale: o.scale ?? 1,
    filename: o.filename ?? "newplot",
  };
}

const CLIPBOARD_HEADER =
  CONTAINER.querySelector(".plutoplotly-clipboard-header") ??
  CONTAINER.insertAdjacentElement(
    "afterbegin",
    html`<div class="plutoplotly-clipboard-header hidden">
      <span class="clipboard-span format"
        ><span class="label">Format:</span
        ><span class="clipboard-value format"></span
      ></span>
      <span class="clipboard-span width"
        ><span class="label">Width:</span
        ><span class="clipboard-value width"></span>px</span
      >
      <span class="clipboard-span height"
        ><span class="label">Height:</span
        ><span class="clipboard-value height"></span>px</span
      >
      <span class="clipboard-span scale"
        ><span class="label">Scale:</span
        ><span class="clipboard-value scale"></span
      ></span>
      <button class="clipboard-span set">Set</button>
      <button class="clipboard-span unset">Unset</button>
      <span class="clipboard-span filename"
        ><span class="label">Filename:</span
        ><span class="clipboard-value filename"></span
      ></span>
    </div>`
  );

function checkConfigSync(container) {
  const valid_classes = [
    "missing-config",
    "matching-config",
    "different-config",
  ];
  function setClass(cl) {
    for (const name of valid_classes) {
      container.classList.toggle(name, name == cl);
    }
  }
  // We use the custom getters we'll set up in the container
  const { ui_value, config_value, config_span, key } = container;
  if (config_value === undefined) {
    setClass("missing-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> is not present in the config.`;
  } else if (ui_value == config_value) {
    setClass("matching-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has the same value in the config and in the header.`;
  } else {
    setClass("different-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has a different value (<em>${config_value}</em>) in the config.`;
  }
  // Add info about setting and unsetting
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click on the label <em><b>once</b></em> to set the current UI value in the config.`
  );
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click <em><b>twice</b></em> to remove this key from the config.`
  );
}

const valid_formats = ["png", "svg", "webp", "jpeg", "full-json"];
function initializeUIValueSpan(span, key, value) {
  const container = span.closest(".clipboard-span");
  span.contentEditable = key === "format" ? "false" : "true";
  let parse = (x) => x;
  let update = (x) => (span.textContent = x);
  if (key === "width" || key === "height") {
    parse = (x) => Math.round(parseFloat(x));
  } else if (key === "scale") {
    parse = parseFloat;
  } else if (key === "format") {
    // We remove contentEditable
    span.contentEditable = "false";
    // Here we first add the subspans for each option
    const opts_div = span.appendChild(html`<div class="format-options"></div>`);
    for (const fmt of valid_formats) {
      const opt = opts_div.appendChild(
        html`<span class="format-option ${fmt}">${fmt}</span>`
      );
      opt.onclick = (e) => {
        span.value = opt.textContent;
      };
    }
    parse = (x) => {
      return valid_formats.includes(x) ? x : localValue;
    };
    update = (x) => {
      for (const opt of opts_div.children) {
        opt.classList.toggle("selected", opt.textContent === x);
      }
    };
  } else {
    // We only have filename here
  }
  let localValue;
  Object.defineProperty(span, "value", {
    get: () => {
      return localValue;
    },
    set: (val) => {
      if (val !== "") {
        localValue = parse(val);
      }
      update(localValue);
      checkConfigSync(container);
    },
  });
  // We also assign a listener so that the editable is blurred when enter is pressed
  span.onkeydown = (e) => {
    if (e.keyCode === 13) {
      e.preventDefault();
      span.blur();
    }
  };
  span.value = value;
}

function initializeConfigValueSpan(span, key) {
  // Here we mostly want to define the setter and getter
  const container = span.closest(".clipboard-span");
  Object.defineProperty(span, "value", {
    get: () => {
      return plot_obj.config.toImageButtonOptions[key];
    },
    set: (val) => {
      // if undefined is passed, we remove the entry from the options
      if (val === undefined) {
        delete plot_obj.config.toImageButtonOptions[key];
      } else {
        plot_obj.config.toImageButtonOptions[key] = val;
      }
      checkConfigSync(container);
    },
  });
}

const config_spans = {};
for (const [key, value] of Object.entries(getImageOptions())) {
  const container = CLIPBOARD_HEADER.querySelector(`.clipboard-span.${key}`);
  const label = container.querySelector(".label");
  // We give the label a function that on single click will set the current value and with double click will unset it
  label.onclick = DualClick(
    () => {
      container.config_value = container.ui_value;
    },
    (e) => {
      console.log("e", e);
      e.preventDefault();
      container.config_value = undefined;
    }
  );
  const ui_value_span = container.querySelector(".clipboard-value");
  const config_value_span =
    container.querySelector(".config-value") ??
    label.insertAdjacentElement(
      "afterbegin",
      html`<span class="config-value"></span>`
    );
  // Assing the two spans as properties of the containing span
  container.ui_span = ui_value_span;
  container.config_span = config_value_span;
  container.key = key;
  config_spans[key] = container;
  if (firstRun) {
    plot_obj.config.toImageButtonOptions =
      plot_obj.config.toImageButtonOptions ?? {};
    // We do the initialization of the value span
    initializeUIValueSpan(ui_value_span, key, value);
    // Then we initialize the config value
    initializeConfigValueSpan(config_value_span, key);
    // We put some convenience getters/setters
    // ui_value forward
    Object.defineProperty(container, "ui_value", {
      get: () => ui_value_span.value,
      set: (val) => {
        ui_value_span.value = val;
      },
    });
    // config_value forward
    Object.defineProperty(container, "config_value", {
      get: () => config_value_span.value,
      set: (val) => {
        config_value_span.value = val;
      },
    });
  }
}

// These objects will contain the default value

// This code updates the image options in the PLOT config with the provided ones
function setImageOptions(o) {
  for (const [key, container] of Object.entries(config_spans)) {
    container.config_value = o[key];
  }
}
function unsetImageOptions() {
  setImageOptions({});
}

const set_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.set");
const unset_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.unset");
if (firstRun) {
  set_button.onclick = (e) => {
    for (const container of Object.values(config_spans)) {
      container.config_value = container.ui_value;
    }
  };
  unset_button.onclick = unsetImageOptions;
}

// We add a function to check if the clipboard is popped out
CONTAINER.isPoppedOut = () => {
  return CONTAINER.classList.contains("popped-out");
};

CLIPBOARD_HEADER.onmousedown = function (event) {
  if (event.target.matches("span.clipboard-value")) {
    console.log("We don't move!");
    return;
  }
  const start = {
    left: parseFloat(CONTAINER.style.left),
    top: parseFloat(CONTAINER.style.top),
    X: event.pageX,
    Y: event.pageY,
  };
  function moveAt(event, start) {
    const top = event.pageY - start.Y + start.top + "px";
    const left = event.pageX - start.X + start.left + "px";
    CLIPBOARD_HEADER.style.left = left;
    CONTAINER.style.left = left;
    CONTAINER.style.top = top;
  }

  // move our absolutely positioned ball under the pointer
  moveAt(event, start);
  function onMouseMove(event) {
    moveAt(event, start);
  }

  // We use this to remove the mousemove when clicking outside of the container
  const controller = new AbortController();

  // move the container on mousemove
  document.addEventListener("mousemove", onMouseMove, {
    signal: controller.signal,
  });
  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        cleanUp();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );

  function cleanUp() {
    console.log("cleaning up the plot move listener");
    controller.abort();
    CLIPBOARD_HEADER.onmouseup = null;
  }

  // (3) drop the ball, remove unneeded handlers
  CLIPBOARD_HEADER.onmouseup = cleanUp;
};

function sendToClipboard(blob) {
  if (!navigator.clipboard) {
    alert(
      "The Clipboard API does not seem to be available, make sure the Pluto notebook is being used from either localhost or an https source."
    );
  }
  navigator.clipboard
    .write([
      new ClipboardItem({
        // The key is determined dynamically based on the blob's type.
        [blob.type]: blob,
      }),
    ])
    .then(
      function () {
        console.log("Async: Copying to clipboard was successful!");
      },
      function (err) {
        console.error("Async: Could not copy text: ", err);
      }
    );
}

function copyImageToClipboard() {
  // We extract the image options from the provided parameters (if they exist)
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key. We also ignore format because the clipboard only supports png.
    if (val === undefined || key === "format") {
      continue;
    }
    config[key] = val;
  }
  Plotly.toImage(PLOT, config).then(function (dataUrl) {
    fetch(dataUrl)
      .then((res) => res.blob())
      .then((blob) => {
        const paste_receiver = document.querySelector('paste-receiver.plutoplotly')
        if (paste_receiver) {
          paste_receiver.attachImage(dataUrl, CONTAINER)
        }
        sendToClipboard(blob)
      });
  });
}

function saveImageToFile() {
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key.
    if (val === undefined) {
      continue;
    }
    config[key] = val;
  }
  Plotly.downloadImage(PLOT, config);
}

let container_rect = { width: 0, height: 0, top: 0, left: 0 };
function unpop_container(cl) {
  CONTAINER.classList.toggle("popped-out", false);
  CONTAINER.classList.toggle(cl, false);
  // We fix the height back to the value it had before popout, also setting the flag to signal that upon first resize we remove the fixed inline-style
  CONTAINER.style.height = container_rect.height + "px";
  remove_container_size = true;
  // We set the other fixed inline-styles to null
  CONTAINER.style.width = "";
  CONTAINER.style.top = "";
  CONTAINER.style.left = "";
  // We also remove the CLIPBOARD_HEADER
  CLIPBOARD_HEADER.style.width = "";
  CLIPBOARD_HEADER.style.left = "";
  // Finally we remove the hidden class to the header
  CLIPBOARD_HEADER.classList.toggle("hidden", true);
  return;
}
function popout_container(opts) {
  const cl = opts?.cl;
  const target_container_size = opts?.target_container_size ?? {};
  const target_plot_size = opts?.target_plot_size ?? {};
  if (CONTAINER.isPoppedOut()) {
    return unpop_container(cl);
  }
  CONTAINER.classList.toggle(cl, cl === undefined ? false : true);
  // We extract the current size of the container, save them and fix them
  const { width, height, top, left } = CONTAINER.getBoundingClientRect();
  container_rect = { width, height, top, left };
  // We save the current plot size before we pop as it will fill the screen
  const current_plot_size = {
    width: PLOT._fullLayout.width,
    height: PLOT._fullLayout.height,
  };
  // We have to save the pad data before popping so we can resize precisely
  const pad = {};
  pad.unpopped = getSizeData().container_pad;
  CONTAINER.classList.toggle("popped-out", true);
  pad.popped = getSizeData().container_pad;
  // We do top and left based on the current rect
  for (const key of ["top", "left"]) {
    const start_val = target_container_size[key] ?? container_rect[key];
    let offset = 0;
    for (const kind of ["padding", "border"]) {
      offset += pad.popped[kind][key] - pad.unpopped[kind][key];
    }
    CONTAINER.style[key] = start_val - offset + "px";
    if (key === "left") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  // We compute the width and height depending on eventual config data
  const csz = computeContainerSize({
    width:
      target_plot_size.width ??
      config_spans.width.config_value ??
      current_plot_size.width,
    height:
      target_plot_size.height ??
      config_spans.height.config_value ??
      current_plot_size.height,
  });
  for (const key of ["width", "height"]) {
    const val = target_container_size[key] ?? csz[key];
    CONTAINER.style[key] = val + "px";
    if (key === "width") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  CLIPBOARD_HEADER.classList.toggle("hidden", false);
  const controller = new AbortController();

  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        unpop_container();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );
}

CONTAINER.popOut = popout_container;

function DualClick(single_func, dbl_func) {
  let nclicks = 0;
  return function (...args) {
    nclicks += 1;
    if (nclicks > 1) {
      dbl_func(...args);
      nclicks = 0;
    } else {
      delay(300).then(() => {
        if (nclicks == 1) {
          single_func(...args);
        }
        nclicks = 0;
      });
    }
  };
}

// We remove the default download image button
plot_obj.config.modeBarButtonsToRemove = _.union(
  plot_obj.config.modeBarButtonsToRemove,
  ["toImage"]
);
// We add the custom button to the modebar
plot_obj.config.modeBarButtonsToAdd = _.union(
  plot_obj.config.modeBarButtonsToAdd,
  [
    {
      name: "Copy PNG to Clipboard",
      icon: {
        height: 520,
        width: 520,
        path: "M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z",
      },
      direction: "up",
      click: DualClick(copyImageToClipboard, () => {
        popout_container();
      }),
    },
    {
      name: "Download Image",
      icon: Plotly.Icons.camera,
      direction: "up",
      click: DualClick(saveImageToFile, () => {
        popout_container({ cl: "filesave" });
      }),
    },
  ]
);

function getOffsetData(el) {
  let cs = window.getComputedStyle(el, null);
  const odata = {
    padding: {
      left: parseFloat(cs.paddingLeft),
      right: parseFloat(cs.paddingRight),
      top: parseFloat(cs.paddingTop),
      bottom: parseFloat(cs.paddingBottom),
      width: parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight),
      height: parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom),
    },
    border: {
      left: parseFloat(cs.borderLeftWidth),
      right: parseFloat(cs.borderRightWidth),
      top: parseFloat(cs.borderTopWidth),
      bottom: parseFloat(cs.borderBottomWidth),
      width: parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth),
      height: parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth),
    }
  };
  if (el === PLOT) {
    // For the PLOT we also want to take into account the offset
    odata.offset = {
      top: PLOT.offsetParent == CONTAINER ? PLOT.offsetTop : 0,
      left: PLOT.offsetParent == CONTAINER ? PLOT.offsetLeft : 0,
    }
  }
  return odata;
}
function getSizeData() {
  const data = {
    plot_pad: getOffsetData(PLOT),
    plot_rect: PLOT.getBoundingClientRect(),
    container_pad: getOffsetData(CONTAINER),
    container_rect: CONTAINER.getBoundingClientRect(),
  };
  return data;
}
function computeContainerSize({ width, height }, sizeData = getSizeData()) {
  const computed_size = computePlotSize(sizeData);
  const offsets = computed_size.offsets;

  const plot_data = {
    width: width ?? computed_size.width,
    height: height ?? computed_size.height,
  };

  return {
    width: (width ?? computed_size.width) + offsets.width,
    height: (height ?? computed_size.height) + offsets.height,
    noChange: width == computed_size.width && height == computed_size.height,
  }
}

// This function will change the container size so that the resulting plot will be matching the provided specs
function changeContainerSize({ width, height }, sizeData = getSizeData()) {
  if (!CONTAINER.isPoppedOut()) {
    console.log("Tried to change container size when not popped, ignoring");
    return;
  }

  const csz = computeContainerSize({ width, height }, sizeData);

  if (csz.noChange) {
    console.log("Size is the same as current, ignoring");
    return
  }
  // We are now going to set he width and height of the container
  for (const key of ["width", "height"]) {
    CONTAINER.style[key] = csz[key] + "px";
  }
}
// We now create the function that will update the plot based on the values specified
function updateFromHeader() {
  const header_data = {
    height: config_spans.height.ui_value,
    width: config_spans.width.ui_value,
  };
  changeContainerSize(header_data);
}
// We assign this function to the onblur event of width and height
if (firstRun) {
  for (const container of Object.values(config_spans)) {
    container.ui_span.onblur = (e) => {
      container.ui_value = container.ui_span.textContent;
      updateFromHeader();
    };
  }
}
// This function computes the plot size to use for relayout as a function of the container size
function computePlotSize(data = getSizeData()) {
  // Remove Padding
  const { container_pad, plot_pad, container_rect } = data;
  const offsets = {
    width:
      plot_pad.padding.width +
      plot_pad.border.width +
      plot_pad.offset.left +
      container_pad.padding.width +
      container_pad.border.width,
    height:
      plot_pad.padding.height +
      plot_pad.border.height +
      plot_pad.offset.top +
      container_pad.padding.height +
      container_pad.border.height,
  };
  const sz = {
    width: Math.round(container_rect.width - offsets.width),
    height: Math.round(container_rect.height - offsets.height),
    offsets,
  };
  return sz;
}

// Create the resizeObserver to make the plot even more responsive! :magic:
const resizeObserver = new ResizeObserver((entries) => {
  const sizeData = getSizeData();
  const {container_rect, container_pad} = sizeData;
  let plot_size = computePlotSize(sizeData);
  // We save the height in the PLOT object
  PLOT.container_height = container_rect.height;
  // We deal with some stuff if the container is poppped
  CLIPBOARD_HEADER.style.width = container_rect.width + "px";
  CLIPBOARD_HEADER.style.left = container_rect.left + "px";
  config_spans.height.ui_value = plot_size.height;
  config_spans.width.ui_value = plot_size.width;
  /* 
		The addition of the invalid argument `plutoresize` seems to fix the problem with calling `relayout` simply with `{autosize: true}` as update breaking mouse relayout events tracking. 
		See https://github.com/plotly/plotly.js/issues/6156 for details
		*/
  let config = {
    // If this is popped out, we ignore the original width/height
    width: (CONTAINER.isPoppedOut() ? undefined : original_width) ?? plot_size.width,
    height: (CONTAINER.isPoppedOut() ? undefined : original_height) ?? plot_size.height,
    plutoresize: true,
  };
  Plotly.relayout(PLOT, config).then(() => {
    if (remove_container_size && !CONTAINER.isPoppedOut()) {
      // This is needed to avoid the first resize upon plot creation to already be without a fixed height
      CONTAINER.style.height = "";
      CONTAINER.style.width = "";
      remove_container_size = false;
    }
  });
});

resizeObserver.observe(CONTAINER);


Plotly.react(PLOT, plot_obj).then(() => {
	// Assign the Plotly event listeners
	for (const [key, listener_vec] of Object.entries(plotly_listeners)) {
		for (const listener of listener_vec) {
			PLOT.on(key, listener)
		}
	}
	// Assign the JS event listeners
	for (const [key, listener_vec] of Object.entries(js_listeners)) {
		for (const listener of listener_vec) {
			PLOT.addEventListener(key, listener, {
				signal: controller.signal
			})
		}
	}
}
)


invalidation.then(() => {
	// Remove all plotly listeners
	PLOT.removeAllListeners()
	// Remove all JS listeners
	controller.abort()
	// Remove the resizeObserver
	resizeObserver.disconnect()
})



		return CONTAINER
	</script>
</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš2iñ•°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$1067fcc4-cbc6-453c-a996-d420c498619a¹depends_on_disabled_cellsÂ§runtimeÎð)ÚÁµpublished_object_keys‘Ù5c6e0de0c-3901-11f0-234e-bd09c571f662/49c525f145d8c899¸depends_on_skipped_cellsÂ§erroredÂÙ$6496c993-6d47-4a6e-a497-2a2de172fbc3Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙŠ<div class="markdown"><h3>Off-policy Monte-Carlo Prediction Algorithm for Estimating <span class="tex">$Q \approx q_Ï€$</span></h3>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš")Ñ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$6496c993-6d47-4a6e-a497-2a2de172fbc3¹depends_on_disabled_cellsÂ§runtimeÎ ñ�µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$aa647f3e-a4b2-4825-bb2a-1c2469d2c0ebŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚmˆ<div class="markdown"><p>Statistics for Steps to Finish Race on Track 2</p>

<table><tr><th align="right">Statistic</th><th align="right"><div class="markdown"><p>Monte Carlo Exploring Starts</p>
</div></th><th align="right">Random Policy</th></tr><tr><td align="right">Mean</td><td align="right">26</td><td align="right">293</td></tr><tr><td align="right">Median</td><td align="right">21</td><td align="right">220</td></tr><tr><td align="right">Std</td><td align="right">15</td><td align="right">263</td></tr><tr><td align="right">Minimum</td><td align="right">12</td><td align="right">11</td></tr><tr><td align="right">Maximum</td><td align="right">112</td><td align="right">1894</td></tr></table>
<p>Cummulative Distribution Function of Steps to Finish Race 	<script id='plot_1'>
		// We start by putting all the variable interpolation here at the beginning
		// We have to convert all typedarrays in the layout to normal arrays. See Issue #25
		// We use lodash for this for compactness
		function removeTypedArray(o) {
			return _.isTypedArray(o) ? Array.from(o) :
			_.isPlainObject(o) ? _.mapValues(o, removeTypedArray) : 
			o
		}

		// Publish the plot object to JS
		let plot_obj = _.update(/* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("c6e0de0c-3901-11f0-234e-bd09c571f662/e01572e8e76890cd"), "layout", removeTypedArray)
		// Get the plotly listeners
		const plotly_listeners = {}
		// Get the JS listeners
		const js_listeners = {}
		// Deal with eventual custom classes
		let custom_classlist = []


		// Load the plotly library
		let Plotly = undefined
		try {
			let _mod = await import("./plotlyjs/plotlyjs-2.26.2.min.js")
			Plotly = _mod.default
		} catch (e) {
			console.log("Local load failed, trying with the web esm.sh version")
			let _mod = await import("https://esm.sh/plotly.js-dist-min@2.26.2/es2022/plotly.js-dist-min.mjs")
			Plotly = _mod.default
		}

		// Check if we have to force local mathjax font cache
		if (false && window?.MathJax?.config?.svg?.fontCache === 'global') {
			window.MathJax.config.svg.fontCache = 'local'
		}

		// Flag to check if this cell was  manually ran or reactively ran
const firstRun = this ? false : true
const CONTAINER = this ?? html`<div class='plutoplotly-container'>`
const PLOT = CONTAINER.querySelector('.js-plotly-plot') ?? CONTAINER.appendChild(html`<div>`)
const parent = CONTAINER.parentElement
// We use a controller to remove event listeners upon invalidation
const controller = new AbortController()
// We have to add this to keep supporting @bind with the old API using PLOT
PLOT.addEventListener('input', (e) => {
	CONTAINER.value = PLOT.value
	if (e.bubbles) {
		return
	}
	CONTAINER.dispatchEvent(new CustomEvent('input'))
}, { signal: controller.signal })

	// This create the style subdiv on first run
	firstRun && CONTAINER.appendChild(html`
	<style>
	.plutoplotly-container {
		width: 100%;
		height: 100%;
		min-height: 0;
		min-width: 0;
	}
	.plutoplotly-container .js-plotly-plot .plotly div {
		margin: 0 auto; // This centers the plot
	}
	.plutoplotly-container.popped-out {
		overflow: auto;
		z-index: 1000;
		position: fixed;
		resize: both;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		border-top-left-radius: 0px;
		border-top-right-radius: 0px;
	}
	.plutoplotly-clipboard-header {
		display: flex;
		flex-flow: row wrap;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-top-left-radius: 12px;
		border-top-right-radius: 12px;
		position: fixed;
		z-index: 1001;
		cursor: move;
		transform: translate(0px, -100%);
		padding: 5px;
	}
	.plutoplotly-clipboard-header span {
		display: inline-block;
		flex: 1
	}
	.plutoplotly-clipboard-header.hidden {
		display: none;
	}
	.clipboard-span {
		position: relative;
	}
	.clipboard-value {
		padding-right: 5px;
		padding-left: 2px;
		cursor: text;
	}
	.clipboard-span.format {
		display: none;
	}
	.clipboard-span.filename {
		flex: 0 0 100%;
		text-align: center;
		border-top: 3px solid var(--kbd-border-color);
		margin-top: 5px;
		display: none;
	}
	.plutoplotly-container.filesave .clipboard-span.filename {
		display: inline-block;
	}
	.clipboard-value.filename {
		margin-left: 3px;
		text-align: left;
		min-width: min(60%, min-content);
	}
	.plutoplotly-container.filesave .clipboard-span.format {
		display: inline-flex;
	}
	.clipboard-span.format .label {
		flex: 0 0 0;
	}
	.clipboard-value.format {
		position: relative;
		flex: 1 0 auto;
		min-width: 30px;
		margin-right: 10px;
	}
	div.format-options {
		display: inline-flex;
		flex-flow: column;
		position: absolute;
		background: var(--main-bg-color);
		border-radius: 12px;
		padding-left: 3px;
		z-index: 2000;
	}
	div.format-options:hover {
		cursor: pointer;
		border: 3px solid var(--kbd-border-color);
		padding: 3px;
		transform: translate(-3px, -6px);
	}
	div.format-options .format-option {
		display: none;
	}
	div.format-options:hover .format-option {
		display: inline-block;
	}
	.format-option:not(.selected) {
		margin-top: 3px;
	}
	div.format-options .format-option.selected {
		order: -1;
		display: inline-block;
	}
	.format-option:hover {
		background-color: var(--kbd-border-color);
	}
	span.config-value {
		font-weight: normal;
		color: var(--pluto-output-color);
		display: none;
		position: absolute;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		transform: translate(0px, calc(-100% - 10px));
		padding: 5px;
	}
	.label {
		user-select: none;
	}
	.label:hover span.config-value {
		display: inline-block;
		min-width: 150px;
	}
	.clipboard-span.matching-config .label {
		color: var(--cm-macro-color);
		font-weight: bold;
	}
	.clipboard-span.different-config .label {
		color: var(--cm-tag-color);
		font-weight: bold;
	}
</style>
`)

let original_height = plot_obj.layout.height
let original_width = plot_obj.layout.width
// For the height we have to also put a fixed value in case the plot is put on a non-fixed-size container (like the default wrapper)
// We define a variable to check whether we still have to remove the fixed height
let remove_container_size = firstRun
let container_height = original_height ?? PLOT.container_height ?? 400
CONTAINER.style.height = container_height + 'px'

// We create a Promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// We import interact for dragging/resizing
const { default: interact } = await import('https://esm.sh/interactjs@1.10.19')


function getImageOptions() {
  const o = plot_obj.config.toImageButtonOptions ?? {};
  return {
    format: o.format ?? "png",
    width: o.width ?? original_width,
    height: o.height ?? original_height,
    scale: o.scale ?? 1,
    filename: o.filename ?? "newplot",
  };
}

const CLIPBOARD_HEADER =
  CONTAINER.querySelector(".plutoplotly-clipboard-header") ??
  CONTAINER.insertAdjacentElement(
    "afterbegin",
    html`<div class="plutoplotly-clipboard-header hidden">
      <span class="clipboard-span format"
        ><span class="label">Format:</span
        ><span class="clipboard-value format"></span
      ></span>
      <span class="clipboard-span width"
        ><span class="label">Width:</span
        ><span class="clipboard-value width"></span>px</span
      >
      <span class="clipboard-span height"
        ><span class="label">Height:</span
        ><span class="clipboard-value height"></span>px</span
      >
      <span class="clipboard-span scale"
        ><span class="label">Scale:</span
        ><span class="clipboard-value scale"></span
      ></span>
      <button class="clipboard-span set">Set</button>
      <button class="clipboard-span unset">Unset</button>
      <span class="clipboard-span filename"
        ><span class="label">Filename:</span
        ><span class="clipboard-value filename"></span
      ></span>
    </div>`
  );

function checkConfigSync(container) {
  const valid_classes = [
    "missing-config",
    "matching-config",
    "different-config",
  ];
  function setClass(cl) {
    for (const name of valid_classes) {
      container.classList.toggle(name, name == cl);
    }
  }
  // We use the custom getters we'll set up in the container
  const { ui_value, config_value, config_span, key } = container;
  if (config_value === undefined) {
    setClass("missing-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> is not present in the config.`;
  } else if (ui_value == config_value) {
    setClass("matching-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has the same value in the config and in the header.`;
  } else {
    setClass("different-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has a different value (<em>${config_value}</em>) in the config.`;
  }
  // Add info about setting and unsetting
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click on the label <em><b>once</b></em> to set the current UI value in the config.`
  );
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click <em><b>twice</b></em> to remove this key from the config.`
  );
}

const valid_formats = ["png", "svg", "webp", "jpeg", "full-json"];
function initializeUIValueSpan(span, key, value) {
  const container = span.closest(".clipboard-span");
  span.contentEditable = key === "format" ? "false" : "true";
  let parse = (x) => x;
  let update = (x) => (span.textContent = x);
  if (key === "width" || key === "height") {
    parse = (x) => Math.round(parseFloat(x));
  } else if (key === "scale") {
    parse = parseFloat;
  } else if (key === "format") {
    // We remove contentEditable
    span.contentEditable = "false";
    // Here we first add the subspans for each option
    const opts_div = span.appendChild(html`<div class="format-options"></div>`);
    for (const fmt of valid_formats) {
      const opt = opts_div.appendChild(
        html`<span class="format-option ${fmt}">${fmt}</span>`
      );
      opt.onclick = (e) => {
        span.value = opt.textContent;
      };
    }
    parse = (x) => {
      return valid_formats.includes(x) ? x : localValue;
    };
    update = (x) => {
      for (const opt of opts_div.children) {
        opt.classList.toggle("selected", opt.textContent === x);
      }
    };
  } else {
    // We only have filename here
  }
  let localValue;
  Object.defineProperty(span, "value", {
    get: () => {
      return localValue;
    },
    set: (val) => {
      if (val !== "") {
        localValue = parse(val);
      }
      update(localValue);
      checkConfigSync(container);
    },
  });
  // We also assign a listener so that the editable is blurred when enter is pressed
  span.onkeydown = (e) => {
    if (e.keyCode === 13) {
      e.preventDefault();
      span.blur();
    }
  };
  span.value = value;
}

function initializeConfigValueSpan(span, key) {
  // Here we mostly want to define the setter and getter
  const container = span.closest(".clipboard-span");
  Object.defineProperty(span, "value", {
    get: () => {
      return plot_obj.config.toImageButtonOptions[key];
    },
    set: (val) => {
      // if undefined is passed, we remove the entry from the options
      if (val === undefined) {
        delete plot_obj.config.toImageButtonOptions[key];
      } else {
        plot_obj.config.toImageButtonOptions[key] = val;
      }
      checkConfigSync(container);
    },
  });
}

const config_spans = {};
for (const [key, value] of Object.entries(getImageOptions())) {
  const container = CLIPBOARD_HEADER.querySelector(`.clipboard-span.${key}`);
  const label = container.querySelector(".label");
  // We give the label a function that on single click will set the current value and with double click will unset it
  label.onclick = DualClick(
    () => {
      container.config_value = container.ui_value;
    },
    (e) => {
      console.log("e", e);
      e.preventDefault();
      container.config_value = undefined;
    }
  );
  const ui_value_span = container.querySelector(".clipboard-value");
  const config_value_span =
    container.querySelector(".config-value") ??
    label.insertAdjacentElement(
      "afterbegin",
      html`<span class="config-value"></span>`
    );
  // Assing the two spans as properties of the containing span
  container.ui_span = ui_value_span;
  container.config_span = config_value_span;
  container.key = key;
  config_spans[key] = container;
  if (firstRun) {
    plot_obj.config.toImageButtonOptions =
      plot_obj.config.toImageButtonOptions ?? {};
    // We do the initialization of the value span
    initializeUIValueSpan(ui_value_span, key, value);
    // Then we initialize the config value
    initializeConfigValueSpan(config_value_span, key);
    // We put some convenience getters/setters
    // ui_value forward
    Object.defineProperty(container, "ui_value", {
      get: () => ui_value_span.value,
      set: (val) => {
        ui_value_span.value = val;
      },
    });
    // config_value forward
    Object.defineProperty(container, "config_value", {
      get: () => config_value_span.value,
      set: (val) => {
        config_value_span.value = val;
      },
    });
  }
}

// These objects will contain the default value

// This code updates the image options in the PLOT config with the provided ones
function setImageOptions(o) {
  for (const [key, container] of Object.entries(config_spans)) {
    container.config_value = o[key];
  }
}
function unsetImageOptions() {
  setImageOptions({});
}

const set_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.set");
const unset_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.unset");
if (firstRun) {
  set_button.onclick = (e) => {
    for (const container of Object.values(config_spans)) {
      container.config_value = container.ui_value;
    }
  };
  unset_button.onclick = unsetImageOptions;
}

// We add a function to check if the clipboard is popped out
CONTAINER.isPoppedOut = () => {
  return CONTAINER.classList.contains("popped-out");
};

CLIPBOARD_HEADER.onmousedown = function (event) {
  if (event.target.matches("span.clipboard-value")) {
    console.log("We don't move!");
    return;
  }
  const start = {
    left: parseFloat(CONTAINER.style.left),
    top: parseFloat(CONTAINER.style.top),
    X: event.pageX,
    Y: event.pageY,
  };
  function moveAt(event, start) {
    const top = event.pageY - start.Y + start.top + "px";
    const left = event.pageX - start.X + start.left + "px";
    CLIPBOARD_HEADER.style.left = left;
    CONTAINER.style.left = left;
    CONTAINER.style.top = top;
  }

  // move our absolutely positioned ball under the pointer
  moveAt(event, start);
  function onMouseMove(event) {
    moveAt(event, start);
  }

  // We use this to remove the mousemove when clicking outside of the container
  const controller = new AbortController();

  // move the container on mousemove
  document.addEventListener("mousemove", onMouseMove, {
    signal: controller.signal,
  });
  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        cleanUp();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );

  function cleanUp() {
    console.log("cleaning up the plot move listener");
    controller.abort();
    CLIPBOARD_HEADER.onmouseup = null;
  }

  // (3) drop the ball, remove unneeded handlers
  CLIPBOARD_HEADER.onmouseup = cleanUp;
};

function sendToClipboard(blob) {
  if (!navigator.clipboard) {
    alert(
      "The Clipboard API does not seem to be available, make sure the Pluto notebook is being used from either localhost or an https source."
    );
  }
  navigator.clipboard
    .write([
      new ClipboardItem({
        // The key is determined dynamically based on the blob's type.
        [blob.type]: blob,
      }),
    ])
    .then(
      function () {
        console.log("Async: Copying to clipboard was successful!");
      },
      function (err) {
        console.error("Async: Could not copy text: ", err);
      }
    );
}

function copyImageToClipboard() {
  // We extract the image options from the provided parameters (if they exist)
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key. We also ignore format because the clipboard only supports png.
    if (val === undefined || key === "format") {
      continue;
    }
    config[key] = val;
  }
  Plotly.toImage(PLOT, config).then(function (dataUrl) {
    fetch(dataUrl)
      .then((res) => res.blob())
      .then((blob) => {
        const paste_receiver = document.querySelector('paste-receiver.plutoplotly')
        if (paste_receiver) {
          paste_receiver.attachImage(dataUrl, CONTAINER)
        }
        sendToClipboard(blob)
      });
  });
}

function saveImageToFile() {
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key.
    if (val === undefined) {
      continue;
    }
    config[key] = val;
  }
  Plotly.downloadImage(PLOT, config);
}

let container_rect = { width: 0, height: 0, top: 0, left: 0 };
function unpop_container(cl) {
  CONTAINER.classList.toggle("popped-out", false);
  CONTAINER.classList.toggle(cl, false);
  // We fix the height back to the value it had before popout, also setting the flag to signal that upon first resize we remove the fixed inline-style
  CONTAINER.style.height = container_rect.height + "px";
  remove_container_size = true;
  // We set the other fixed inline-styles to null
  CONTAINER.style.width = "";
  CONTAINER.style.top = "";
  CONTAINER.style.left = "";
  // We also remove the CLIPBOARD_HEADER
  CLIPBOARD_HEADER.style.width = "";
  CLIPBOARD_HEADER.style.left = "";
  // Finally we remove the hidden class to the header
  CLIPBOARD_HEADER.classList.toggle("hidden", true);
  return;
}
function popout_container(opts) {
  const cl = opts?.cl;
  const target_container_size = opts?.target_container_size ?? {};
  const target_plot_size = opts?.target_plot_size ?? {};
  if (CONTAINER.isPoppedOut()) {
    return unpop_container(cl);
  }
  CONTAINER.classList.toggle(cl, cl === undefined ? false : true);
  // We extract the current size of the container, save them and fix them
  const { width, height, top, left } = CONTAINER.getBoundingClientRect();
  container_rect = { width, height, top, left };
  // We save the current plot size before we pop as it will fill the screen
  const current_plot_size = {
    width: PLOT._fullLayout.width,
    height: PLOT._fullLayout.height,
  };
  // We have to save the pad data before popping so we can resize precisely
  const pad = {};
  pad.unpopped = getSizeData().container_pad;
  CONTAINER.classList.toggle("popped-out", true);
  pad.popped = getSizeData().container_pad;
  // We do top and left based on the current rect
  for (const key of ["top", "left"]) {
    const start_val = target_container_size[key] ?? container_rect[key];
    let offset = 0;
    for (const kind of ["padding", "border"]) {
      offset += pad.popped[kind][key] - pad.unpopped[kind][key];
    }
    CONTAINER.style[key] = start_val - offset + "px";
    if (key === "left") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  // We compute the width and height depending on eventual config data
  const csz = computeContainerSize({
    width:
      target_plot_size.width ??
      config_spans.width.config_value ??
      current_plot_size.width,
    height:
      target_plot_size.height ??
      config_spans.height.config_value ??
      current_plot_size.height,
  });
  for (const key of ["width", "height"]) {
    const val = target_container_size[key] ?? csz[key];
    CONTAINER.style[key] = val + "px";
    if (key === "width") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  CLIPBOARD_HEADER.classList.toggle("hidden", false);
  const controller = new AbortController();

  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        unpop_container();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );
}

CONTAINER.popOut = popout_container;

function DualClick(single_func, dbl_func) {
  let nclicks = 0;
  return function (...args) {
    nclicks += 1;
    if (nclicks > 1) {
      dbl_func(...args);
      nclicks = 0;
    } else {
      delay(300).then(() => {
        if (nclicks == 1) {
          single_func(...args);
        }
        nclicks = 0;
      });
    }
  };
}

// We remove the default download image button
plot_obj.config.modeBarButtonsToRemove = _.union(
  plot_obj.config.modeBarButtonsToRemove,
  ["toImage"]
);
// We add the custom button to the modebar
plot_obj.config.modeBarButtonsToAdd = _.union(
  plot_obj.config.modeBarButtonsToAdd,
  [
    {
      name: "Copy PNG to Clipboard",
      icon: {
        height: 520,
        width: 520,
        path: "M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z",
      },
      direction: "up",
      click: DualClick(copyImageToClipboard, () => {
        popout_container();
      }),
    },
    {
      name: "Download Image",
      icon: Plotly.Icons.camera,
      direction: "up",
      click: DualClick(saveImageToFile, () => {
        popout_container({ cl: "filesave" });
      }),
    },
  ]
);

function getOffsetData(el) {
  let cs = window.getComputedStyle(el, null);
  const odata = {
    padding: {
      left: parseFloat(cs.paddingLeft),
      right: parseFloat(cs.paddingRight),
      top: parseFloat(cs.paddingTop),
      bottom: parseFloat(cs.paddingBottom),
      width: parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight),
      height: parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom),
    },
    border: {
      left: parseFloat(cs.borderLeftWidth),
      right: parseFloat(cs.borderRightWidth),
      top: parseFloat(cs.borderTopWidth),
      bottom: parseFloat(cs.borderBottomWidth),
      width: parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth),
      height: parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth),
    }
  };
  if (el === PLOT) {
    // For the PLOT we also want to take into account the offset
    odata.offset = {
      top: PLOT.offsetParent == CONTAINER ? PLOT.offsetTop : 0,
      left: PLOT.offsetParent == CONTAINER ? PLOT.offsetLeft : 0,
    }
  }
  return odata;
}
function getSizeData() {
  const data = {
    plot_pad: getOffsetData(PLOT),
    plot_rect: PLOT.getBoundingClientRect(),
    container_pad: getOffsetData(CONTAINER),
    container_rect: CONTAINER.getBoundingClientRect(),
  };
  return data;
}
function computeContainerSize({ width, height }, sizeData = getSizeData()) {
  const computed_size = computePlotSize(sizeData);
  const offsets = computed_size.offsets;

  const plot_data = {
    width: width ?? computed_size.width,
    height: height ?? computed_size.height,
  };

  return {
    width: (width ?? computed_size.width) + offsets.width,
    height: (height ?? computed_size.height) + offsets.height,
    noChange: width == computed_size.width && height == computed_size.height,
  }
}

// This function will change the container size so that the resulting plot will be matching the provided specs
function changeContainerSize({ width, height }, sizeData = getSizeData()) {
  if (!CONTAINER.isPoppedOut()) {
    console.log("Tried to change container size when not popped, ignoring");
    return;
  }

  const csz = computeContainerSize({ width, height }, sizeData);

  if (csz.noChange) {
    console.log("Size is the same as current, ignoring");
    return
  }
  // We are now going to set he width and height of the container
  for (const key of ["width", "height"]) {
    CONTAINER.style[key] = csz[key] + "px";
  }
}
// We now create the function that will update the plot based on the values specified
function updateFromHeader() {
  const header_data = {
    height: config_spans.height.ui_value,
    width: config_spans.width.ui_value,
  };
  changeContainerSize(header_data);
}
// We assign this function to the onblur event of width and height
if (firstRun) {
  for (const container of Object.values(config_spans)) {
    container.ui_span.onblur = (e) => {
      container.ui_value = container.ui_span.textContent;
      updateFromHeader();
    };
  }
}
// This function computes the plot size to use for relayout as a function of the container size
function computePlotSize(data = getSizeData()) {
  // Remove Padding
  const { container_pad, plot_pad, container_rect } = data;
  const offsets = {
    width:
      plot_pad.padding.width +
      plot_pad.border.width +
      plot_pad.offset.left +
      container_pad.padding.width +
      container_pad.border.width,
    height:
      plot_pad.padding.height +
      plot_pad.border.height +
      plot_pad.offset.top +
      container_pad.padding.height +
      container_pad.border.height,
  };
  const sz = {
    width: Math.round(container_rect.width - offsets.width),
    height: Math.round(container_rect.height - offsets.height),
    offsets,
  };
  return sz;
}

// Create the resizeObserver to make the plot even more responsive! :magic:
const resizeObserver = new ResizeObserver((entries) => {
  const sizeData = getSizeData();
  const {container_rect, container_pad} = sizeData;
  let plot_size = computePlotSize(sizeData);
  // We save the height in the PLOT object
  PLOT.container_height = container_rect.height;
  // We deal with some stuff if the container is poppped
  CLIPBOARD_HEADER.style.width = container_rect.width + "px";
  CLIPBOARD_HEADER.style.left = container_rect.left + "px";
  config_spans.height.ui_value = plot_size.height;
  config_spans.width.ui_value = plot_size.width;
  /* 
		The addition of the invalid argument `plutoresize` seems to fix the problem with calling `relayout` simply with `{autosize: true}` as update breaking mouse relayout events tracking. 
		See https://github.com/plotly/plotly.js/issues/6156 for details
		*/
  let config = {
    // If this is popped out, we ignore the original width/height
    width: (CONTAINER.isPoppedOut() ? undefined : original_width) ?? plot_size.width,
    height: (CONTAINER.isPoppedOut() ? undefined : original_height) ?? plot_size.height,
    plutoresize: true,
  };
  Plotly.relayout(PLOT, config).then(() => {
    if (remove_container_size && !CONTAINER.isPoppedOut()) {
      // This is needed to avoid the first resize upon plot creation to already be without a fixed height
      CONTAINER.style.height = "";
      CONTAINER.style.width = "";
      remove_container_size = false;
    }
  });
});

resizeObserver.observe(CONTAINER);


Plotly.react(PLOT, plot_obj).then(() => {
	// Assign the Plotly event listeners
	for (const [key, listener_vec] of Object.entries(plotly_listeners)) {
		for (const listener of listener_vec) {
			PLOT.on(key, listener)
		}
	}
	// Assign the JS event listeners
	for (const [key, listener_vec] of Object.entries(js_listeners)) {
		for (const listener of listener_vec) {
			PLOT.addEventListener(key, listener, {
				signal: controller.signal
			})
		}
	}
}
)


invalidation.then(() => {
	// Remove all plotly listeners
	PLOT.removeAllListeners()
	// Remove all JS listeners
	controller.abort()
	// Remove the resizeObserver
	resizeObserver.disconnect()
})



		return CONTAINER
	</script>
</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš38Ñ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$aa647f3e-a4b2-4825-bb2a-1c2469d2c0eb¹depends_on_disabled_cellsÂ§runtimeÎã` µpublished_object_keys‘Ù5c6e0de0c-3901-11f0-234e-bd09c571f662/e01572e8e76890cd¸depends_on_skipped_cellsÂ§erroredÂÙ$1d3d509c-b11b-4c57-b100-9bcf0489af2bŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ5create_greedy_policy (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš%êz–°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$1d3d509c-b11b-4c57-b100-9bcf0489af2b¹depends_on_disabled_cellsÂ§runtimeÎ '2µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$989ccacd-b410-4967-bf6a-9244e3be785dŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚÉ<div class="markdown"><p>Number of Episodes: <bond def="mces1" unique_id="8HtqeGHqSRbX"><span style='display: contents;'>
	<input type='number' min='1' step='1' max='10000000' value='1000'>
	<input type=submit id='hidwhufxvo'>
	<script id='hidwhufxvo'>

let key = "hidwhufxvo"

let div = currentScript.parentElement
let button = currentScript.previousElementSibling
let input = div.firstElementChild
if(input === button) {
	return
}


let set_input_value = (() => {
	let result = null
	try {
	result = setBoundElementValueLikePluto
} catch (e) {
	result = ((input, new_value) => {
	// fallback in case https://github.com/fonsp/Pluto.jl/pull/1755 is not available
    if (new_value == null) {
        //@ts-ignore
        input.value = new_value
        return
    }
    if (input instanceof HTMLInputElement) {
        switch (input.type) {
            case "range":
            case "number": {
                if (input.valueAsNumber !== new_value) {
                    input.valueAsNumber = new_value
                }
                return
            }
            case "date": {
                if (input.valueAsDate == null || Number(input.valueAsDate) !== Number(new_value)) {
                    input.valueAsDate = new_value
                }
                return
            }
            case "checkbox": {
                if (input.checked !== new_value) {
                    input.checked = new_value
                }
                return
            }
            case "file": {
                // Can't set files :(
                return
            }
        }
    } else if (input instanceof HTMLSelectElement && input.multiple) {
        for (let option of Array.from(input.options)) {
            option.selected = new_value.includes(option.value)
        }
        return
    }
    //@ts-ignore
    if (input.value !== new_value) {
        //@ts-ignore
        input.value = new_value
    }
})
}
return result
})()



let private_value = null
let public_value = null




private_value = public_value = div.value
if(private_value != null) {
	set_input_value(input, private_value)
} else {

	// private_value = public_value = input.value
}

input.oninput = (e) => {
	e.stopPropagation()
}
const gen = Generators.input(input)

// If the child does not have an initial value, the `gen.next().value` promise will never resolve. If it does, then it resolves instantly.
let first_value = await Promise.any([
	gen.next().value,
	Promise.resolve(undefined)
])
private_value = public_value = first_value

;(async () => {
	while(true) {
		private_value = await gen.next().value
		// div.dispatchEvent(new CustomEvent("input", {}))
	}
})()

button.addEventListener("click", () => {
	public_value = private_value
	div.dispatchEvent(new CustomEvent("input", {}))
})


Object.defineProperty(div, 'value', {
	get: () => public_value,
	set: (newval) => {
		private_value = newval
		public_value = newval
		
		set_input_value(input, newval)
	},
	configurable: true,
});

</script></span></bond></p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš2­�V°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$989ccacd-b410-4967-bf6a-9244e3be785d¹depends_on_disabled_cellsÂ§runtimeÎ IAµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$b352d98e-0854-45e3-ac73-8ef434525563Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ-<div class="markdown"><h5>Track 1</h5>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"*“†°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$b352d98e-0854-45e3-ac73-8ef434525563¹depends_on_disabled_cellsÂ§runtimeÎ 2µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$202eb066-877d-4537-85b2-31b41db8eca0Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ7initialize_state_value (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš$êÆa°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$202eb066-877d-4537-85b2-31b41db8eca0¹depends_on_disabled_cellsÂ§runtimeÎ zµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$3955d71a-3105-445a-868d-66ba0b3dc515Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyƒ¨elements“’’…¦prefixÙI@NamedTuple{position::Tuple{Int64, Int64}, velocity::Tuple{Int64, Int64}}¨elements›’’ƒ¨elements’’¨position’ƒ¨elements’’’¡5ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°973ae957c0c386bdÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡0ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°9b52efd7a2a08bd5Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°38a36543e5c0565dÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡5ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°aa0ea68f3321721eÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡0ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°86128cc9b5ae8f4aÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°a5ae9d4489cafe9eÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡5ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°b43f250e13820c5dÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡0ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°86128cc9b5ae8f4aÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°c78b25d0de97c561Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡0ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°9b52efd7a2a08bd5Ù!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡0ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°9b52efd7a2a08bd5Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°d890206a17017f05Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡0ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°86128cc9b5ae8f4aÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡0ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°86128cc9b5ae8f4aÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°a73e50cd8a791327Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°78e123e4f427692aÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°1539b04621ff8c7dÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°9cf524b963504fedÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡3ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°ec7c7c340006434bÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡2ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°83bf2aef4031930bÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°d15eb91b7380924bÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡5ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°aa0ea68f3321721eÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡2ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°83bf2aef4031930bÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°b886071211e2d247Ù!application/vnd.pluto.tree+object’	’ƒ¨elements’’¨position’ƒ¨elements’’’¡3ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°aa4c36dcad24fa29Ù!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡0ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°9b52efd7a2a08bd5Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°cbb4b2033bae62e6Ù!application/vnd.pluto.tree+object¤more’Í)“’ƒ¨elements’’¨position’ƒ¨elements’’’¢11ªtext/plain’’¢31ªtext/plain¤type¥Tuple¨objectid°708b97aaecca0215Ù!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡2ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°83bf2aef4031930bÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°16b090449ff3fea9Ù!application/vnd.pluto.tree+object¤type¥Array¬prefix_short ¨objectid°ecbb05fe5d574067Ù!application/vnd.pluto.tree+object’’…¦prefix³Tuple{Int64, Int64}¨elements›’’ƒ¨elements’’’¡0ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°86128cc9b5ae8f4aÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢-1ªtext/plain’’¢-1ªtext/plain¤type¥Tuple¨objectid°a5f5003e88013c47Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡0ªtext/plain’’¢-1ªtext/plain¤type¥Tuple¨objectid°4b2797d2a8e67906Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢-1ªtext/plain’’¢-1ªtext/plain¤type¥Tuple¨objectid°a5f5003e88013c47Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢-1ªtext/plain’’¢-1ªtext/plain¤type¥Tuple¨objectid°a5f5003e88013c47Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡1ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°1539b04621ff8c7dÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢-1ªtext/plain’’¢-1ªtext/plain¤type¥Tuple¨objectid°a5f5003e88013c47Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢-1ªtext/plain’’¢-1ªtext/plain¤type¥Tuple¨objectid°a5f5003e88013c47Ù!application/vnd.pluto.tree+object’	’ƒ¨elements’’’¢-1ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°29547c053cf46d53Ù!application/vnd.pluto.tree+object¤more’Í)“’ƒ¨elements’’’¡1ªtext/plain’’¢-1ªtext/plain¤type¥Tuple¨objectid°467534c86eaf64c9Ù!application/vnd.pluto.tree+object¤type¥Array¬prefix_short ¨objectid°9e75db11c0cce9efÙ!application/vnd.pluto.tree+object’’…¦prefix§Float32¨elements›’’¤-1.0ªtext/plain’’¤-1.0ªtext/plain’’¤-1.0ªtext/plain’’¤-1.0ªtext/plain’’¤-1.0ªtext/plain’’¤-1.0ªtext/plain’’¤-1.0ªtext/plain’’¤-1.0ªtext/plain’	’¤-1.0ªtext/plain¤more’Í)“’¤-1.0ªtext/plain¤type¥Array¬prefix_short ¨objectid°e00184e643e43cd3Ù!application/vnd.pluto.tree+object¤type¥Tuple¨objectid°1f1e7dd1b96b7efe¤mimeÙ!application/vnd.pluto.tree+object¬rootassignee­race_episode1²last_run_timestampËAÚš0`°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$3955d71a-3105-445a-868d-66ba0b3dc515¹depends_on_disabled_cellsÂ§runtimeÎ
°;µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$f406be9e-3e3f-4b55-99b0-4858c774ed96Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙQ<div class="markdown"><h2>5.2 Monte Carlo Estimation of Action Values</h2>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"&¡ä°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$f406be9e-3e3f-4b55-99b0-4858c774ed96¹depends_on_disabled_cellsÂ§runtimeÎ Ñeµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$648bfc3f-0649-4401-a97f-89e21057f7b7Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙk<div class="markdown"><p>Example trajectories after training for 1000 episodes with Ïµ&#61; 0.01</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš3~Àä°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$648bfc3f-0649-4401-a97f-89e21057f7b7¹depends_on_disabled_cellsÂ§runtimeÎ ‚ƒºµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$e10378eb-12b3-4468-9c22-1838107da450Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙD<div class="markdown"><h3>Example 5.5: Infinite Variance</h3>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"(<â°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$e10378eb-12b3-4468-9c22-1838107da450¹depends_on_disabled_cellsÂ§runtimeÎ Ô¯µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$2e57e4b5-d228-4ce3-b9d8-cf4375bb7c50Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ?<div class="markdown"><h1>Dependencies and Settings</h1>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš",C°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$2e57e4b5-d228-4ce3-b9d8-cf4375bb7c50¹depends_on_disabled_cellsÂ§runtimeÎ â“µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$edb4ad06-5e6e-48c4-9ee4-ae0b92927a91Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙX<div class="markdown"><p>Example trajectories after 1000 episodes of training</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš3(¨°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$edb4ad06-5e6e-48c4-9ee4-ae0b92927a91¹depends_on_disabled_cellsÂ§runtimeÎ ìµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$9df79a71-e58a-497b-bb02-debb69144925Š¦queuedÂ¤logs�§runningÂ¦output†¤body…¦prefixÚíMDP_Opaque{@NamedTuple{position::Tuple{Int64, Int64}, velocity::Tuple{Int64, Int64}}, Tuple{Int64, Int64}, var"#simulator#140"{Float64, @NamedTuple{start::Set{Tuple{Int64, Int64}}, finish::Set{Tuple{Int64, Int64}}, body::Set{Tuple{Int64, Int64}}}, var"#take_action#139"{Dict{@NamedTuple{position::Tuple{Int64, Int64}, velocity::Tuple{Int64, Int64}}, Int64}}}, var"#state_init#138"{@NamedTuple{start::Set{Tuple{Int64, Int64}}, finish::Set{Tuple{Int64, Int64}}, body::Set{Tuple{Int64, Int64}}}}}¨elements–’¦states’…¦prefixÙI@NamedTuple{position::Tuple{Int64, Int64}, velocity::Tuple{Int64, Int64}}¨elements›’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡0ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°9b52efd7a2a08bd5Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°e21e0d549cc4c557Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡0ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°86128cc9b5ae8f4aÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°7f58cd1418ac4ecfÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡0ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°fc41ae7a664555b0Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°1c9be938e1978e57Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡0ªtext/plain’’¡3ªtext/plain¤type¥Tuple¨objectid°5a8d0f981b76571aÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°de42b54207e3ed51Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡0ªtext/plain’’¡4ªtext/plain¤type¥Tuple¨objectid°6ac4b5902680c6bbÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°b60bb04f8974fbb6Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°1539b04621ff8c7dÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°811cc4bfed2188eeÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°78e123e4f427692aÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°ba63b0bf4384bfebÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°e3e6b1884080a98dÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°588abfe8835e67f0Ù!application/vnd.pluto.tree+object’	’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡3ªtext/plain¤type¥Tuple¨objectid°7d75a9159c58bddfÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°e0a89afaeeb8cc2aÙ!application/vnd.pluto.tree+object¤more’Í„’ƒ¨elements’’¨position’ƒ¨elements’’’¢11ªtext/plain’’¢26ªtext/plain¤type¥Tuple¨objectid°1981f96b58fe709eÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡4ªtext/plain’’¡4ªtext/plain¤type¥Tuple¨objectid°a7048b0d6f799239Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°d3ab164e30a99253Ù!application/vnd.pluto.tree+object¤type¥Array¬prefix_short ¨objectid°e421b5fa4b4d4a53Ù!application/vnd.pluto.tree+object’«statelookup’…¦prefixÙVDict{@NamedTuple{position::Tuple{Int64, Int64}, velocity::Tuple{Int64, Int64}}, Int64}¨elements›’’ƒ¨elements’’¨position’ƒ¨elements’’’¢11ªtext/plain’’¢26ªtext/plain¤type¥Tuple¨objectid°1981f96b58fe709eÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°78e123e4f427692aÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°971d69af0bd32d78Ù!application/vnd.pluto.tree+object’¤7282ªtext/plain’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢27ªtext/plain¤type¥Tuple¨objectid°c993a6666cbf7092Ù!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°e3e6b1884080a98dÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°4d8f8079c2772807Ù!application/vnd.pluto.tree+object’¤1908ªtext/plain’’ƒ¨elements’’¨position’ƒ¨elements’’’¡0ªtext/plain’’¢19ªtext/plain¤type¥Tuple¨objectid°57770a702873d84eÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡4ªtext/plain’’¡4ªtext/plain¤type¥Tuple¨objectid°a7048b0d6f799239Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°a8405c040066ce51Ù!application/vnd.pluto.tree+object’¤3550ªtext/plain’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢22ªtext/plain¤type¥Tuple¨objectid°51a896f4005fc5cbÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡4ªtext/plain¤type¥Tuple¨objectid°3258627267de1f67Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°aaf4cf16033b1ed0Ù!application/vnd.pluto.tree+object’¤5310ªtext/plain’’ƒ¨elements’’¨position’ƒ¨elements’’’¡5ªtext/plain’’¢18ªtext/plain¤type¥Tuple¨objectid¯f9eb085cdaf3608Ù!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡0ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°9b52efd7a2a08bd5Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°b1e9830ad348a6f5Ù!application/vnd.pluto.tree+object’¤6251ªtext/plain’’ƒ¨elements’’¨position’ƒ¨elements’’’¢-2ªtext/plain’’¢10ªtext/plain¤type¥Tuple¨objectid°9461b7cf1c0d4966Ù!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡4ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°27c77ee4a87cee0dÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°dfee357e5db661e7Ù!application/vnd.pluto.tree+object’£223ªtext/plain’’ƒ¨elements’’¨position’ƒ¨elements’’’¡5ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°b43f250e13820c5dÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡0ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°fc41ae7a664555b0Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°8140d1c434ea8616Ù!application/vnd.pluto.tree+object’¤2703ªtext/plain’’ƒ¨elements’’¨position’ƒ¨elements’’’¢-3ªtext/plain’’¢25ªtext/plain¤type¥Tuple¨objectid°d19d751ad1b8973eÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡2ªtext/plain’’¡4ªtext/plain¤type¥Tuple¨objectid°fe67fb157b710308Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°67110a0493596685Ù!application/vnd.pluto.tree+object’¤2590ªtext/plain’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡3ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°aa4c36dcad24fa29Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°500de2a9e8aa0c4fÙ!application/vnd.pluto.tree+object’¢16ªtext/plain’’ƒ¨elements’’¨position’ƒ¨elements’’’¡3ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°c1258421771ca213Ù!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡4ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°ab958923df88f7e9Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°e0a57c37bcb0dd81Ù!application/vnd.pluto.tree+object’¤5972ªtext/plain¤more¤type¤Dict¬prefix_short¤Dict¨objectid°90f6bc3c2d86001aÙ!application/vnd.pluto.tree+object’§actions’…¦prefix³Tuple{Int64, Int64}¨elements™’’ƒ¨elements’’’¢-1ªtext/plain’’¢-1ªtext/plain¤type¥Tuple¨objectid°a5f5003e88013c47Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢-1ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°29547c053cf46d53Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢-1ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°d7f044f2876f60eaÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡0ªtext/plain’’¢-1ªtext/plain¤type¥Tuple¨objectid°4b2797d2a8e67906Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡0ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°9b52efd7a2a08bd5Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡0ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°86128cc9b5ae8f4aÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡1ªtext/plain’’¢-1ªtext/plain¤type¥Tuple¨objectid°467534c86eaf64c9Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡1ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°1539b04621ff8c7dÙ!application/vnd.pluto.tree+object’	’ƒ¨elements’’’¡1ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°78e123e4f427692aÙ!application/vnd.pluto.tree+object¤type¥Array¬prefix_short ¨objectid°d05a5360a94e8964Ù!application/vnd.pluto.tree+object’¬actionlookup’…¦prefixÙ Dict{Tuple{Int64, Int64}, Int64}¨elements™’’ƒ¨elements’’’¡0ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°9b52efd7a2a08bd5Ù!application/vnd.pluto.tree+object’¡5ªtext/plain’’ƒ¨elements’’’¡1ªtext/plain’’¢-1ªtext/plain¤type¥Tuple¨objectid°467534c86eaf64c9Ù!application/vnd.pluto.tree+object’¡7ªtext/plain’’ƒ¨elements’’’¢-1ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°29547c053cf46d53Ù!application/vnd.pluto.tree+object’¡2ªtext/plain’’ƒ¨elements’’’¡0ªtext/plain’’¢-1ªtext/plain¤type¥Tuple¨objectid°4b2797d2a8e67906Ù!application/vnd.pluto.tree+object’¡4ªtext/plain’’ƒ¨elements’’’¡0ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°86128cc9b5ae8f4aÙ!application/vnd.pluto.tree+object’¡6ªtext/plain’’ƒ¨elements’’’¡1ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°78e123e4f427692aÙ!application/vnd.pluto.tree+object’¡9ªtext/plain’’ƒ¨elements’’’¢-1ªtext/plain’’¢-1ªtext/plain¤type¥Tuple¨objectid°a5f5003e88013c47Ù!application/vnd.pluto.tree+object’¡1ªtext/plain’’ƒ¨elements’’’¢-1ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°d7f044f2876f60eaÙ!application/vnd.pluto.tree+object’¡3ªtext/plain’’ƒ¨elements’’’¡1ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°1539b04621ff8c7dÙ!application/vnd.pluto.tree+object’¡8ªtext/plain¤type¤Dict¬prefix_short¤Dict¨objectid°a3900af5d2b89d05Ù!application/vnd.pluto.tree+object’ªstate_init’Ù¿(::Main.var"workspace#3".var"#state_init#138"{@NamedTuple{start::Set{Tuple{Int64, Int64}}, finish::Set{Tuple{Int64, Int64}}, body::Set{Tuple{Int64, Int64}}}}) (generic function with 1 method)ªtext/plain’©simulator’ÚL(::Main.var"workspace#3".var"#simulator#140"{Float64, @NamedTuple{start::Set{Tuple{Int64, Int64}}, finish::Set{Tuple{Int64, Int64}}, body::Set{Tuple{Int64, Int64}}}, Main.var"workspace#3".var"#take_action#139"{Dict{@NamedTuple{position::Tuple{Int64, Int64}, velocity::Tuple{Int64, Int64}}, Int64}}}) (generic function with 1 method)ªtext/plain¤type¦struct¬prefix_shortªMDP_Opaque¨objectid°bc07d72df3db267a¤mimeÙ!application/vnd.pluto.tree+object¬rootassignee°const track1_mdp²last_run_timestampËAÚš/ÌG$°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$9df79a71-e58a-497b-bb02-debb69144925¹depends_on_disabled_cellsÂ§runtimeÎôp®µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$cebb79b7-c9d6-4b79-ba0e-b2f3c7587724Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚD<div class="markdown"><blockquote>
<h3><em>Exercise 5.12: Racetrack &#40;programming&#41;</em></h3>
<p>Consider driving a race car around a turn like those shown in Figure 5.5.  You want to go as fast as possible, but not so fast as to run off the track.  In our simplified racetrack, the car is at one of a discrete set of grid positions, the cells in the diagram.  The velocity is also discrete, a number of grid cells moved horizontally and vertically per time step.  The actions are increments to the velocity components.  Each may be changed by &#43;1, -1, or 0 in each step, for a total of nine &#40;3x3&#41; actions.  Both velocity components are restricted to be nonnegative and less than 5, and they cannot both be zero except at the starting line.  Each episode begins in one of the randomly selected start states with both velocity components zero and ends when the car crosses the finish line.  The rewards are -1 for each step until the car crosses the finish line.  If the car hits the track boundry, it is moved back to a random position on the starting line, both velocity components are reduced to zero, and the episode continues.  Before updating the car&#39;s location at each time step, check to see if the projected path of the car intersects the track boundary.  If it intersects the finish line, the episode ends; if it intersects anywhere else, the car is considered to have hit the track boundary and is sent back to the starting line.  To make the task more challenging, with probality 0.1 at each time step the velocity increments are both zero, independently of the intended increments.  Apply a Monte Carlo control method to this task to compute the optimal policy from each starting state.  Exhibit several trajectories following the optimal policy &#40;but turn the noise off for these trajectories&#41;.</p>
</blockquote>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš")Õ$°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$cebb79b7-c9d6-4b79-ba0e-b2f3c7587724¹depends_on_disabled_cellsÂ§runtimeÎ 2ßµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$54f73eb8-dcea-4da0-83af-35720e56ccbcŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ4monte_carlo_Ïµsoft (generic function with 2 methods)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš)Ú°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$54f73eb8-dcea-4da0-83af-35720e56ccbc¹depends_on_disabled_cellsÂ§runtimeÎ ,öµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$418c045d-90c7-42d8-9126-90185f7e197bŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÛ «®<div class="markdown"><table><tr><th align="right"></th><th align="center"><span class="tex">$\pi_*$</span> &#40;Black &#61; Stick, White &#61; Hit&#41;</th><th align="center"><span class="tex">$v_*$</span></th></tr><tr><td align="right">Usable ace</td><td align="center">	<script id='plot_1'>
		// We start by putting all the variable interpolation here at the beginning
		// We have to convert all typedarrays in the layout to normal arrays. See Issue #25
		// We use lodash for this for compactness
		function removeTypedArray(o) {
			return _.isTypedArray(o) ? Array.from(o) :
			_.isPlainObject(o) ? _.mapValues(o, removeTypedArray) : 
			o
		}

		// Publish the plot object to JS
		let plot_obj = _.update(/* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("c6e0de0c-3901-11f0-234e-bd09c571f662/e97923405a5e6801"), "layout", removeTypedArray)
		// Get the plotly listeners
		const plotly_listeners = {}
		// Get the JS listeners
		const js_listeners = {}
		// Deal with eventual custom classes
		let custom_classlist = []


		// Load the plotly library
		let Plotly = undefined
		try {
			let _mod = await import("./plotlyjs/plotlyjs-2.26.2.min.js")
			Plotly = _mod.default
		} catch (e) {
			console.log("Local load failed, trying with the web esm.sh version")
			let _mod = await import("https://esm.sh/plotly.js-dist-min@2.26.2/es2022/plotly.js-dist-min.mjs")
			Plotly = _mod.default
		}

		// Check if we have to force local mathjax font cache
		if (false && window?.MathJax?.config?.svg?.fontCache === 'global') {
			window.MathJax.config.svg.fontCache = 'local'
		}

		// Flag to check if this cell was  manually ran or reactively ran
const firstRun = this ? false : true
const CONTAINER = this ?? html`<div class='plutoplotly-container'>`
const PLOT = CONTAINER.querySelector('.js-plotly-plot') ?? CONTAINER.appendChild(html`<div>`)
const parent = CONTAINER.parentElement
// We use a controller to remove event listeners upon invalidation
const controller = new AbortController()
// We have to add this to keep supporting @bind with the old API using PLOT
PLOT.addEventListener('input', (e) => {
	CONTAINER.value = PLOT.value
	if (e.bubbles) {
		return
	}
	CONTAINER.dispatchEvent(new CustomEvent('input'))
}, { signal: controller.signal })

	// This create the style subdiv on first run
	firstRun && CONTAINER.appendChild(html`
	<style>
	.plutoplotly-container {
		width: 100%;
		height: 100%;
		min-height: 0;
		min-width: 0;
	}
	.plutoplotly-container .js-plotly-plot .plotly div {
		margin: 0 auto; // This centers the plot
	}
	.plutoplotly-container.popped-out {
		overflow: auto;
		z-index: 1000;
		position: fixed;
		resize: both;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		border-top-left-radius: 0px;
		border-top-right-radius: 0px;
	}
	.plutoplotly-clipboard-header {
		display: flex;
		flex-flow: row wrap;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-top-left-radius: 12px;
		border-top-right-radius: 12px;
		position: fixed;
		z-index: 1001;
		cursor: move;
		transform: translate(0px, -100%);
		padding: 5px;
	}
	.plutoplotly-clipboard-header span {
		display: inline-block;
		flex: 1
	}
	.plutoplotly-clipboard-header.hidden {
		display: none;
	}
	.clipboard-span {
		position: relative;
	}
	.clipboard-value {
		padding-right: 5px;
		padding-left: 2px;
		cursor: text;
	}
	.clipboard-span.format {
		display: none;
	}
	.clipboard-span.filename {
		flex: 0 0 100%;
		text-align: center;
		border-top: 3px solid var(--kbd-border-color);
		margin-top: 5px;
		display: none;
	}
	.plutoplotly-container.filesave .clipboard-span.filename {
		display: inline-block;
	}
	.clipboard-value.filename {
		margin-left: 3px;
		text-align: left;
		min-width: min(60%, min-content);
	}
	.plutoplotly-container.filesave .clipboard-span.format {
		display: inline-flex;
	}
	.clipboard-span.format .label {
		flex: 0 0 0;
	}
	.clipboard-value.format {
		position: relative;
		flex: 1 0 auto;
		min-width: 30px;
		margin-right: 10px;
	}
	div.format-options {
		display: inline-flex;
		flex-flow: column;
		position: absolute;
		background: var(--main-bg-color);
		border-radius: 12px;
		padding-left: 3px;
		z-index: 2000;
	}
	div.format-options:hover {
		cursor: pointer;
		border: 3px solid var(--kbd-border-color);
		padding: 3px;
		transform: translate(-3px, -6px);
	}
	div.format-options .format-option {
		display: none;
	}
	div.format-options:hover .format-option {
		display: inline-block;
	}
	.format-option:not(.selected) {
		margin-top: 3px;
	}
	div.format-options .format-option.selected {
		order: -1;
		display: inline-block;
	}
	.format-option:hover {
		background-color: var(--kbd-border-color);
	}
	span.config-value {
		font-weight: normal;
		color: var(--pluto-output-color);
		display: none;
		position: absolute;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		transform: translate(0px, calc(-100% - 10px));
		padding: 5px;
	}
	.label {
		user-select: none;
	}
	.label:hover span.config-value {
		display: inline-block;
		min-width: 150px;
	}
	.clipboard-span.matching-config .label {
		color: var(--cm-macro-color);
		font-weight: bold;
	}
	.clipboard-span.different-config .label {
		color: var(--cm-tag-color);
		font-weight: bold;
	}
</style>
`)

let original_height = plot_obj.layout.height
let original_width = plot_obj.layout.width
// For the height we have to also put a fixed value in case the plot is put on a non-fixed-size container (like the default wrapper)
// We define a variable to check whether we still have to remove the fixed height
let remove_container_size = firstRun
let container_height = original_height ?? PLOT.container_height ?? 400
CONTAINER.style.height = container_height + 'px'

// We create a Promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// We import interact for dragging/resizing
const { default: interact } = await import('https://esm.sh/interactjs@1.10.19')


function getImageOptions() {
  const o = plot_obj.config.toImageButtonOptions ?? {};
  return {
    format: o.format ?? "png",
    width: o.width ?? original_width,
    height: o.height ?? original_height,
    scale: o.scale ?? 1,
    filename: o.filename ?? "newplot",
  };
}

const CLIPBOARD_HEADER =
  CONTAINER.querySelector(".plutoplotly-clipboard-header") ??
  CONTAINER.insertAdjacentElement(
    "afterbegin",
    html`<div class="plutoplotly-clipboard-header hidden">
      <span class="clipboard-span format"
        ><span class="label">Format:</span
        ><span class="clipboard-value format"></span
      ></span>
      <span class="clipboard-span width"
        ><span class="label">Width:</span
        ><span class="clipboard-value width"></span>px</span
      >
      <span class="clipboard-span height"
        ><span class="label">Height:</span
        ><span class="clipboard-value height"></span>px</span
      >
      <span class="clipboard-span scale"
        ><span class="label">Scale:</span
        ><span class="clipboard-value scale"></span
      ></span>
      <button class="clipboard-span set">Set</button>
      <button class="clipboard-span unset">Unset</button>
      <span class="clipboard-span filename"
        ><span class="label">Filename:</span
        ><span class="clipboard-value filename"></span
      ></span>
    </div>`
  );

function checkConfigSync(container) {
  const valid_classes = [
    "missing-config",
    "matching-config",
    "different-config",
  ];
  function setClass(cl) {
    for (const name of valid_classes) {
      container.classList.toggle(name, name == cl);
    }
  }
  // We use the custom getters we'll set up in the container
  const { ui_value, config_value, config_span, key } = container;
  if (config_value === undefined) {
    setClass("missing-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> is not present in the config.`;
  } else if (ui_value == config_value) {
    setClass("matching-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has the same value in the config and in the header.`;
  } else {
    setClass("different-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has a different value (<em>${config_value}</em>) in the config.`;
  }
  // Add info about setting and unsetting
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click on the label <em><b>once</b></em> to set the current UI value in the config.`
  );
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click <em><b>twice</b></em> to remove this key from the config.`
  );
}

const valid_formats = ["png", "svg", "webp", "jpeg", "full-json"];
function initializeUIValueSpan(span, key, value) {
  const container = span.closest(".clipboard-span");
  span.contentEditable = key === "format" ? "false" : "true";
  let parse = (x) => x;
  let update = (x) => (span.textContent = x);
  if (key === "width" || key === "height") {
    parse = (x) => Math.round(parseFloat(x));
  } else if (key === "scale") {
    parse = parseFloat;
  } else if (key === "format") {
    // We remove contentEditable
    span.contentEditable = "false";
    // Here we first add the subspans for each option
    const opts_div = span.appendChild(html`<div class="format-options"></div>`);
    for (const fmt of valid_formats) {
      const opt = opts_div.appendChild(
        html`<span class="format-option ${fmt}">${fmt}</span>`
      );
      opt.onclick = (e) => {
        span.value = opt.textContent;
      };
    }
    parse = (x) => {
      return valid_formats.includes(x) ? x : localValue;
    };
    update = (x) => {
      for (const opt of opts_div.children) {
        opt.classList.toggle("selected", opt.textContent === x);
      }
    };
  } else {
    // We only have filename here
  }
  let localValue;
  Object.defineProperty(span, "value", {
    get: () => {
      return localValue;
    },
    set: (val) => {
      if (val !== "") {
        localValue = parse(val);
      }
      update(localValue);
      checkConfigSync(container);
    },
  });
  // We also assign a listener so that the editable is blurred when enter is pressed
  span.onkeydown = (e) => {
    if (e.keyCode === 13) {
      e.preventDefault();
      span.blur();
    }
  };
  span.value = value;
}

function initializeConfigValueSpan(span, key) {
  // Here we mostly want to define the setter and getter
  const container = span.closest(".clipboard-span");
  Object.defineProperty(span, "value", {
    get: () => {
      return plot_obj.config.toImageButtonOptions[key];
    },
    set: (val) => {
      // if undefined is passed, we remove the entry from the options
      if (val === undefined) {
        delete plot_obj.config.toImageButtonOptions[key];
      } else {
        plot_obj.config.toImageButtonOptions[key] = val;
      }
      checkConfigSync(container);
    },
  });
}

const config_spans = {};
for (const [key, value] of Object.entries(getImageOptions())) {
  const container = CLIPBOARD_HEADER.querySelector(`.clipboard-span.${key}`);
  const label = container.querySelector(".label");
  // We give the label a function that on single click will set the current value and with double click will unset it
  label.onclick = DualClick(
    () => {
      container.config_value = container.ui_value;
    },
    (e) => {
      console.log("e", e);
      e.preventDefault();
      container.config_value = undefined;
    }
  );
  const ui_value_span = container.querySelector(".clipboard-value");
  const config_value_span =
    container.querySelector(".config-value") ??
    label.insertAdjacentElement(
      "afterbegin",
      html`<span class="config-value"></span>`
    );
  // Assing the two spans as properties of the containing span
  container.ui_span = ui_value_span;
  container.config_span = config_value_span;
  container.key = key;
  config_spans[key] = container;
  if (firstRun) {
    plot_obj.config.toImageButtonOptions =
      plot_obj.config.toImageButtonOptions ?? {};
    // We do the initialization of the value span
    initializeUIValueSpan(ui_value_span, key, value);
    // Then we initialize the config value
    initializeConfigValueSpan(config_value_span, key);
    // We put some convenience getters/setters
    // ui_value forward
    Object.defineProperty(container, "ui_value", {
      get: () => ui_value_span.value,
      set: (val) => {
        ui_value_span.value = val;
      },
    });
    // config_value forward
    Object.defineProperty(container, "config_value", {
      get: () => config_value_span.value,
      set: (val) => {
        config_value_span.value = val;
      },
    });
  }
}

// These objects will contain the default value

// This code updates the image options in the PLOT config with the provided ones
function setImageOptions(o) {
  for (const [key, container] of Object.entries(config_spans)) {
    container.config_value = o[key];
  }
}
function unsetImageOptions() {
  setImageOptions({});
}

const set_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.set");
const unset_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.unset");
if (firstRun) {
  set_button.onclick = (e) => {
    for (const container of Object.values(config_spans)) {
      container.config_value = container.ui_value;
    }
  };
  unset_button.onclick = unsetImageOptions;
}

// We add a function to check if the clipboard is popped out
CONTAINER.isPoppedOut = () => {
  return CONTAINER.classList.contains("popped-out");
};

CLIPBOARD_HEADER.onmousedown = function (event) {
  if (event.target.matches("span.clipboard-value")) {
    console.log("We don't move!");
    return;
  }
  const start = {
    left: parseFloat(CONTAINER.style.left),
    top: parseFloat(CONTAINER.style.top),
    X: event.pageX,
    Y: event.pageY,
  };
  function moveAt(event, start) {
    const top = event.pageY - start.Y + start.top + "px";
    const left = event.pageX - start.X + start.left + "px";
    CLIPBOARD_HEADER.style.left = left;
    CONTAINER.style.left = left;
    CONTAINER.style.top = top;
  }

  // move our absolutely positioned ball under the pointer
  moveAt(event, start);
  function onMouseMove(event) {
    moveAt(event, start);
  }

  // We use this to remove the mousemove when clicking outside of the container
  const controller = new AbortController();

  // move the container on mousemove
  document.addEventListener("mousemove", onMouseMove, {
    signal: controller.signal,
  });
  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        cleanUp();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );

  function cleanUp() {
    console.log("cleaning up the plot move listener");
    controller.abort();
    CLIPBOARD_HEADER.onmouseup = null;
  }

  // (3) drop the ball, remove unneeded handlers
  CLIPBOARD_HEADER.onmouseup = cleanUp;
};

function sendToClipboard(blob) {
  if (!navigator.clipboard) {
    alert(
      "The Clipboard API does not seem to be available, make sure the Pluto notebook is being used from either localhost or an https source."
    );
  }
  navigator.clipboard
    .write([
      new ClipboardItem({
        // The key is determined dynamically based on the blob's type.
        [blob.type]: blob,
      }),
    ])
    .then(
      function () {
        console.log("Async: Copying to clipboard was successful!");
      },
      function (err) {
        console.error("Async: Could not copy text: ", err);
      }
    );
}

function copyImageToClipboard() {
  // We extract the image options from the provided parameters (if they exist)
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key. We also ignore format because the clipboard only supports png.
    if (val === undefined || key === "format") {
      continue;
    }
    config[key] = val;
  }
  Plotly.toImage(PLOT, config).then(function (dataUrl) {
    fetch(dataUrl)
      .then((res) => res.blob())
      .then((blob) => {
        const paste_receiver = document.querySelector('paste-receiver.plutoplotly')
        if (paste_receiver) {
          paste_receiver.attachImage(dataUrl, CONTAINER)
        }
        sendToClipboard(blob)
      });
  });
}

function saveImageToFile() {
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key.
    if (val === undefined) {
      continue;
    }
    config[key] = val;
  }
  Plotly.downloadImage(PLOT, config);
}

let container_rect = { width: 0, height: 0, top: 0, left: 0 };
function unpop_container(cl) {
  CONTAINER.classList.toggle("popped-out", false);
  CONTAINER.classList.toggle(cl, false);
  // We fix the height back to the value it had before popout, also setting the flag to signal that upon first resize we remove the fixed inline-style
  CONTAINER.style.height = container_rect.height + "px";
  remove_container_size = true;
  // We set the other fixed inline-styles to null
  CONTAINER.style.width = "";
  CONTAINER.style.top = "";
  CONTAINER.style.left = "";
  // We also remove the CLIPBOARD_HEADER
  CLIPBOARD_HEADER.style.width = "";
  CLIPBOARD_HEADER.style.left = "";
  // Finally we remove the hidden class to the header
  CLIPBOARD_HEADER.classList.toggle("hidden", true);
  return;
}
function popout_container(opts) {
  const cl = opts?.cl;
  const target_container_size = opts?.target_container_size ?? {};
  const target_plot_size = opts?.target_plot_size ?? {};
  if (CONTAINER.isPoppedOut()) {
    return unpop_container(cl);
  }
  CONTAINER.classList.toggle(cl, cl === undefined ? false : true);
  // We extract the current size of the container, save them and fix them
  const { width, height, top, left } = CONTAINER.getBoundingClientRect();
  container_rect = { width, height, top, left };
  // We save the current plot size before we pop as it will fill the screen
  const current_plot_size = {
    width: PLOT._fullLayout.width,
    height: PLOT._fullLayout.height,
  };
  // We have to save the pad data before popping so we can resize precisely
  const pad = {};
  pad.unpopped = getSizeData().container_pad;
  CONTAINER.classList.toggle("popped-out", true);
  pad.popped = getSizeData().container_pad;
  // We do top and left based on the current rect
  for (const key of ["top", "left"]) {
    const start_val = target_container_size[key] ?? container_rect[key];
    let offset = 0;
    for (const kind of ["padding", "border"]) {
      offset += pad.popped[kind][key] - pad.unpopped[kind][key];
    }
    CONTAINER.style[key] = start_val - offset + "px";
    if (key === "left") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  // We compute the width and height depending on eventual config data
  const csz = computeContainerSize({
    width:
      target_plot_size.width ??
      config_spans.width.config_value ??
      current_plot_size.width,
    height:
      target_plot_size.height ??
      config_spans.height.config_value ??
      current_plot_size.height,
  });
  for (const key of ["width", "height"]) {
    const val = target_container_size[key] ?? csz[key];
    CONTAINER.style[key] = val + "px";
    if (key === "width") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  CLIPBOARD_HEADER.classList.toggle("hidden", false);
  const controller = new AbortController();

  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        unpop_container();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );
}

CONTAINER.popOut = popout_container;

function DualClick(single_func, dbl_func) {
  let nclicks = 0;
  return function (...args) {
    nclicks += 1;
    if (nclicks > 1) {
      dbl_func(...args);
      nclicks = 0;
    } else {
      delay(300).then(() => {
        if (nclicks == 1) {
          single_func(...args);
        }
        nclicks = 0;
      });
    }
  };
}

// We remove the default download image button
plot_obj.config.modeBarButtonsToRemove = _.union(
  plot_obj.config.modeBarButtonsToRemove,
  ["toImage"]
);
// We add the custom button to the modebar
plot_obj.config.modeBarButtonsToAdd = _.union(
  plot_obj.config.modeBarButtonsToAdd,
  [
    {
      name: "Copy PNG to Clipboard",
      icon: {
        height: 520,
        width: 520,
        path: "M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z",
      },
      direction: "up",
      click: DualClick(copyImageToClipboard, () => {
        popout_container();
      }),
    },
    {
      name: "Download Image",
      icon: Plotly.Icons.camera,
      direction: "up",
      click: DualClick(saveImageToFile, () => {
        popout_container({ cl: "filesave" });
      }),
    },
  ]
);

function getOffsetData(el) {
  let cs = window.getComputedStyle(el, null);
  const odata = {
    padding: {
      left: parseFloat(cs.paddingLeft),
      right: parseFloat(cs.paddingRight),
      top: parseFloat(cs.paddingTop),
      bottom: parseFloat(cs.paddingBottom),
      width: parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight),
      height: parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom),
    },
    border: {
      left: parseFloat(cs.borderLeftWidth),
      right: parseFloat(cs.borderRightWidth),
      top: parseFloat(cs.borderTopWidth),
      bottom: parseFloat(cs.borderBottomWidth),
      width: parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth),
      height: parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth),
    }
  };
  if (el === PLOT) {
    // For the PLOT we also want to take into account the offset
    odata.offset = {
      top: PLOT.offsetParent == CONTAINER ? PLOT.offsetTop : 0,
      left: PLOT.offsetParent == CONTAINER ? PLOT.offsetLeft : 0,
    }
  }
  return odata;
}
function getSizeData() {
  const data = {
    plot_pad: getOffsetData(PLOT),
    plot_rect: PLOT.getBoundingClientRect(),
    container_pad: getOffsetData(CONTAINER),
    container_rect: CONTAINER.getBoundingClientRect(),
  };
  return data;
}
function computeContainerSize({ width, height }, sizeData = getSizeData()) {
  const computed_size = computePlotSize(sizeData);
  const offsets = computed_size.offsets;

  const plot_data = {
    width: width ?? computed_size.width,
    height: height ?? computed_size.height,
  };

  return {
    width: (width ?? computed_size.width) + offsets.width,
    height: (height ?? computed_size.height) + offsets.height,
    noChange: width == computed_size.width && height == computed_size.height,
  }
}

// This function will change the container size so that the resulting plot will be matching the provided specs
function changeContainerSize({ width, height }, sizeData = getSizeData()) {
  if (!CONTAINER.isPoppedOut()) {
    console.log("Tried to change container size when not popped, ignoring");
    return;
  }

  const csz = computeContainerSize({ width, height }, sizeData);

  if (csz.noChange) {
    console.log("Size is the same as current, ignoring");
    return
  }
  // We are now going to set he width and height of the container
  for (const key of ["width", "height"]) {
    CONTAINER.style[key] = csz[key] + "px";
  }
}
// We now create the function that will update the plot based on the values specified
function updateFromHeader() {
  const header_data = {
    height: config_spans.height.ui_value,
    width: config_spans.width.ui_value,
  };
  changeContainerSize(header_data);
}
// We assign this function to the onblur event of width and height
if (firstRun) {
  for (const container of Object.values(config_spans)) {
    container.ui_span.onblur = (e) => {
      container.ui_value = container.ui_span.textContent;
      updateFromHeader();
    };
  }
}
// This function computes the plot size to use for relayout as a function of the container size
function computePlotSize(data = getSizeData()) {
  // Remove Padding
  const { container_pad, plot_pad, container_rect } = data;
  const offsets = {
    width:
      plot_pad.padding.width +
      plot_pad.border.width +
      plot_pad.offset.left +
      container_pad.padding.width +
      container_pad.border.width,
    height:
      plot_pad.padding.height +
      plot_pad.border.height +
      plot_pad.offset.top +
      container_pad.padding.height +
      container_pad.border.height,
  };
  const sz = {
    width: Math.round(container_rect.width - offsets.width),
    height: Math.round(container_rect.height - offsets.height),
    offsets,
  };
  return sz;
}

// Create the resizeObserver to make the plot even more responsive! :magic:
const resizeObserver = new ResizeObserver((entries) => {
  const sizeData = getSizeData();
  const {container_rect, container_pad} = sizeData;
  let plot_size = computePlotSize(sizeData);
  // We save the height in the PLOT object
  PLOT.container_height = container_rect.height;
  // We deal with some stuff if the container is poppped
  CLIPBOARD_HEADER.style.width = container_rect.width + "px";
  CLIPBOARD_HEADER.style.left = container_rect.left + "px";
  config_spans.height.ui_value = plot_size.height;
  config_spans.width.ui_value = plot_size.width;
  /* 
		The addition of the invalid argument `plutoresize` seems to fix the problem with calling `relayout` simply with `{autosize: true}` as update breaking mouse relayout events tracking. 
		See https://github.com/plotly/plotly.js/issues/6156 for details
		*/
  let config = {
    // If this is popped out, we ignore the original width/height
    width: (CONTAINER.isPoppedOut() ? undefined : original_width) ?? plot_size.width,
    height: (CONTAINER.isPoppedOut() ? undefined : original_height) ?? plot_size.height,
    plutoresize: true,
  };
  Plotly.relayout(PLOT, config).then(() => {
    if (remove_container_size && !CONTAINER.isPoppedOut()) {
      // This is needed to avoid the first resize upon plot creation to already be without a fixed height
      CONTAINER.style.height = "";
      CONTAINER.style.width = "";
      remove_container_size = false;
    }
  });
});

resizeObserver.observe(CONTAINER);


Plotly.react(PLOT, plot_obj).then(() => {
	// Assign the Plotly event listeners
	for (const [key, listener_vec] of Object.entries(plotly_listeners)) {
		for (const listener of listener_vec) {
			PLOT.on(key, listener)
		}
	}
	// Assign the JS event listeners
	for (const [key, listener_vec] of Object.entries(js_listeners)) {
		for (const listener of listener_vec) {
			PLOT.addEventListener(key, listener, {
				signal: controller.signal
			})
		}
	}
}
)


invalidation.then(() => {
	// Remove all plotly listeners
	PLOT.removeAllListeners()
	// Remove all JS listeners
	controller.abort()
	// Remove the resizeObserver
	resizeObserver.disconnect()
})



		return CONTAINER
	</script>
</td><td align="center">	<script id='plot_2'>
		// We start by putting all the variable interpolation here at the beginning
		// We have to convert all typedarrays in the layout to normal arrays. See Issue #25
		// We use lodash for this for compactness
		function removeTypedArray(o) {
			return _.isTypedArray(o) ? Array.from(o) :
			_.isPlainObject(o) ? _.mapValues(o, removeTypedArray) : 
			o
		}

		// Publish the plot object to JS
		let plot_obj = _.update(/* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("c6e0de0c-3901-11f0-234e-bd09c571f662/317eb0286b9488bc"), "layout", removeTypedArray)
		// Get the plotly listeners
		const plotly_listeners = {}
		// Get the JS listeners
		const js_listeners = {}
		// Deal with eventual custom classes
		let custom_classlist = []


		// Load the plotly library
		let Plotly = undefined
		try {
			let _mod = await import("./plotlyjs/plotlyjs-2.26.2.min.js")
			Plotly = _mod.default
		} catch (e) {
			console.log("Local load failed, trying with the web esm.sh version")
			let _mod = await import("https://esm.sh/plotly.js-dist-min@2.26.2/es2022/plotly.js-dist-min.mjs")
			Plotly = _mod.default
		}

		// Check if we have to force local mathjax font cache
		if (false && window?.MathJax?.config?.svg?.fontCache === 'global') {
			window.MathJax.config.svg.fontCache = 'local'
		}

		// Flag to check if this cell was  manually ran or reactively ran
const firstRun = this ? false : true
const CONTAINER = this ?? html`<div class='plutoplotly-container'>`
const PLOT = CONTAINER.querySelector('.js-plotly-plot') ?? CONTAINER.appendChild(html`<div>`)
const parent = CONTAINER.parentElement
// We use a controller to remove event listeners upon invalidation
const controller = new AbortController()
// We have to add this to keep supporting @bind with the old API using PLOT
PLOT.addEventListener('input', (e) => {
	CONTAINER.value = PLOT.value
	if (e.bubbles) {
		return
	}
	CONTAINER.dispatchEvent(new CustomEvent('input'))
}, { signal: controller.signal })

	// This create the style subdiv on first run
	firstRun && CONTAINER.appendChild(html`
	<style>
	.plutoplotly-container {
		width: 100%;
		height: 100%;
		min-height: 0;
		min-width: 0;
	}
	.plutoplotly-container .js-plotly-plot .plotly div {
		margin: 0 auto; // This centers the plot
	}
	.plutoplotly-container.popped-out {
		overflow: auto;
		z-index: 1000;
		position: fixed;
		resize: both;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		border-top-left-radius: 0px;
		border-top-right-radius: 0px;
	}
	.plutoplotly-clipboard-header {
		display: flex;
		flex-flow: row wrap;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-top-left-radius: 12px;
		border-top-right-radius: 12px;
		position: fixed;
		z-index: 1001;
		cursor: move;
		transform: translate(0px, -100%);
		padding: 5px;
	}
	.plutoplotly-clipboard-header span {
		display: inline-block;
		flex: 1
	}
	.plutoplotly-clipboard-header.hidden {
		display: none;
	}
	.clipboard-span {
		position: relative;
	}
	.clipboard-value {
		padding-right: 5px;
		padding-left: 2px;
		cursor: text;
	}
	.clipboard-span.format {
		display: none;
	}
	.clipboard-span.filename {
		flex: 0 0 100%;
		text-align: center;
		border-top: 3px solid var(--kbd-border-color);
		margin-top: 5px;
		display: none;
	}
	.plutoplotly-container.filesave .clipboard-span.filename {
		display: inline-block;
	}
	.clipboard-value.filename {
		margin-left: 3px;
		text-align: left;
		min-width: min(60%, min-content);
	}
	.plutoplotly-container.filesave .clipboard-span.format {
		display: inline-flex;
	}
	.clipboard-span.format .label {
		flex: 0 0 0;
	}
	.clipboard-value.format {
		position: relative;
		flex: 1 0 auto;
		min-width: 30px;
		margin-right: 10px;
	}
	div.format-options {
		display: inline-flex;
		flex-flow: column;
		position: absolute;
		background: var(--main-bg-color);
		border-radius: 12px;
		padding-left: 3px;
		z-index: 2000;
	}
	div.format-options:hover {
		cursor: pointer;
		border: 3px solid var(--kbd-border-color);
		padding: 3px;
		transform: translate(-3px, -6px);
	}
	div.format-options .format-option {
		display: none;
	}
	div.format-options:hover .format-option {
		display: inline-block;
	}
	.format-option:not(.selected) {
		margin-top: 3px;
	}
	div.format-options .format-option.selected {
		order: -1;
		display: inline-block;
	}
	.format-option:hover {
		background-color: var(--kbd-border-color);
	}
	span.config-value {
		font-weight: normal;
		color: var(--pluto-output-color);
		display: none;
		position: absolute;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		transform: translate(0px, calc(-100% - 10px));
		padding: 5px;
	}
	.label {
		user-select: none;
	}
	.label:hover span.config-value {
		display: inline-block;
		min-width: 150px;
	}
	.clipboard-span.matching-config .label {
		color: var(--cm-macro-color);
		font-weight: bold;
	}
	.clipboard-span.different-config .label {
		color: var(--cm-tag-color);
		font-weight: bold;
	}
</style>
`)

let original_height = plot_obj.layout.height
let original_width = plot_obj.layout.width
// For the height we have to also put a fixed value in case the plot is put on a non-fixed-size container (like the default wrapper)
// We define a variable to check whether we still have to remove the fixed height
let remove_container_size = firstRun
let container_height = original_height ?? PLOT.container_height ?? 400
CONTAINER.style.height = container_height + 'px'

// We create a Promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// We import interact for dragging/resizing
const { default: interact } = await import('https://esm.sh/interactjs@1.10.19')


function getImageOptions() {
  const o = plot_obj.config.toImageButtonOptions ?? {};
  return {
    format: o.format ?? "png",
    width: o.width ?? original_width,
    height: o.height ?? original_height,
    scale: o.scale ?? 1,
    filename: o.filename ?? "newplot",
  };
}

const CLIPBOARD_HEADER =
  CONTAINER.querySelector(".plutoplotly-clipboard-header") ??
  CONTAINER.insertAdjacentElement(
    "afterbegin",
    html`<div class="plutoplotly-clipboard-header hidden">
      <span class="clipboard-span format"
        ><span class="label">Format:</span
        ><span class="clipboard-value format"></span
      ></span>
      <span class="clipboard-span width"
        ><span class="label">Width:</span
        ><span class="clipboard-value width"></span>px</span
      >
      <span class="clipboard-span height"
        ><span class="label">Height:</span
        ><span class="clipboard-value height"></span>px</span
      >
      <span class="clipboard-span scale"
        ><span class="label">Scale:</span
        ><span class="clipboard-value scale"></span
      ></span>
      <button class="clipboard-span set">Set</button>
      <button class="clipboard-span unset">Unset</button>
      <span class="clipboard-span filename"
        ><span class="label">Filename:</span
        ><span class="clipboard-value filename"></span
      ></span>
    </div>`
  );

function checkConfigSync(container) {
  const valid_classes = [
    "missing-config",
    "matching-config",
    "different-config",
  ];
  function setClass(cl) {
    for (const name of valid_classes) {
      container.classList.toggle(name, name == cl);
    }
  }
  // We use the custom getters we'll set up in the container
  const { ui_value, config_value, config_span, key } = container;
  if (config_value === undefined) {
    setClass("missing-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> is not present in the config.`;
  } else if (ui_value == config_value) {
    setClass("matching-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has the same value in the config and in the header.`;
  } else {
    setClass("different-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has a different value (<em>${config_value}</em>) in the config.`;
  }
  // Add info about setting and unsetting
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click on the label <em><b>once</b></em> to set the current UI value in the config.`
  );
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click <em><b>twice</b></em> to remove this key from the config.`
  );
}

const valid_formats = ["png", "svg", "webp", "jpeg", "full-json"];
function initializeUIValueSpan(span, key, value) {
  const container = span.closest(".clipboard-span");
  span.contentEditable = key === "format" ? "false" : "true";
  let parse = (x) => x;
  let update = (x) => (span.textContent = x);
  if (key === "width" || key === "height") {
    parse = (x) => Math.round(parseFloat(x));
  } else if (key === "scale") {
    parse = parseFloat;
  } else if (key === "format") {
    // We remove contentEditable
    span.contentEditable = "false";
    // Here we first add the subspans for each option
    const opts_div = span.appendChild(html`<div class="format-options"></div>`);
    for (const fmt of valid_formats) {
      const opt = opts_div.appendChild(
        html`<span class="format-option ${fmt}">${fmt}</span>`
      );
      opt.onclick = (e) => {
        span.value = opt.textContent;
      };
    }
    parse = (x) => {
      return valid_formats.includes(x) ? x : localValue;
    };
    update = (x) => {
      for (const opt of opts_div.children) {
        opt.classList.toggle("selected", opt.textContent === x);
      }
    };
  } else {
    // We only have filename here
  }
  let localValue;
  Object.defineProperty(span, "value", {
    get: () => {
      return localValue;
    },
    set: (val) => {
      if (val !== "") {
        localValue = parse(val);
      }
      update(localValue);
      checkConfigSync(container);
    },
  });
  // We also assign a listener so that the editable is blurred when enter is pressed
  span.onkeydown = (e) => {
    if (e.keyCode === 13) {
      e.preventDefault();
      span.blur();
    }
  };
  span.value = value;
}

function initializeConfigValueSpan(span, key) {
  // Here we mostly want to define the setter and getter
  const container = span.closest(".clipboard-span");
  Object.defineProperty(span, "value", {
    get: () => {
      return plot_obj.config.toImageButtonOptions[key];
    },
    set: (val) => {
      // if undefined is passed, we remove the entry from the options
      if (val === undefined) {
        delete plot_obj.config.toImageButtonOptions[key];
      } else {
        plot_obj.config.toImageButtonOptions[key] = val;
      }
      checkConfigSync(container);
    },
  });
}

const config_spans = {};
for (const [key, value] of Object.entries(getImageOptions())) {
  const container = CLIPBOARD_HEADER.querySelector(`.clipboard-span.${key}`);
  const label = container.querySelector(".label");
  // We give the label a function that on single click will set the current value and with double click will unset it
  label.onclick = DualClick(
    () => {
      container.config_value = container.ui_value;
    },
    (e) => {
      console.log("e", e);
      e.preventDefault();
      container.config_value = undefined;
    }
  );
  const ui_value_span = container.querySelector(".clipboard-value");
  const config_value_span =
    container.querySelector(".config-value") ??
    label.insertAdjacentElement(
      "afterbegin",
      html`<span class="config-value"></span>`
    );
  // Assing the two spans as properties of the containing span
  container.ui_span = ui_value_span;
  container.config_span = config_value_span;
  container.key = key;
  config_spans[key] = container;
  if (firstRun) {
    plot_obj.config.toImageButtonOptions =
      plot_obj.config.toImageButtonOptions ?? {};
    // We do the initialization of the value span
    initializeUIValueSpan(ui_value_span, key, value);
    // Then we initialize the config value
    initializeConfigValueSpan(config_value_span, key);
    // We put some convenience getters/setters
    // ui_value forward
    Object.defineProperty(container, "ui_value", {
      get: () => ui_value_span.value,
      set: (val) => {
        ui_value_span.value = val;
      },
    });
    // config_value forward
    Object.defineProperty(container, "config_value", {
      get: () => config_value_span.value,
      set: (val) => {
        config_value_span.value = val;
      },
    });
  }
}

// These objects will contain the default value

// This code updates the image options in the PLOT config with the provided ones
function setImageOptions(o) {
  for (const [key, container] of Object.entries(config_spans)) {
    container.config_value = o[key];
  }
}
function unsetImageOptions() {
  setImageOptions({});
}

const set_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.set");
const unset_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.unset");
if (firstRun) {
  set_button.onclick = (e) => {
    for (const container of Object.values(config_spans)) {
      container.config_value = container.ui_value;
    }
  };
  unset_button.onclick = unsetImageOptions;
}

// We add a function to check if the clipboard is popped out
CONTAINER.isPoppedOut = () => {
  return CONTAINER.classList.contains("popped-out");
};

CLIPBOARD_HEADER.onmousedown = function (event) {
  if (event.target.matches("span.clipboard-value")) {
    console.log("We don't move!");
    return;
  }
  const start = {
    left: parseFloat(CONTAINER.style.left),
    top: parseFloat(CONTAINER.style.top),
    X: event.pageX,
    Y: event.pageY,
  };
  function moveAt(event, start) {
    const top = event.pageY - start.Y + start.top + "px";
    const left = event.pageX - start.X + start.left + "px";
    CLIPBOARD_HEADER.style.left = left;
    CONTAINER.style.left = left;
    CONTAINER.style.top = top;
  }

  // move our absolutely positioned ball under the pointer
  moveAt(event, start);
  function onMouseMove(event) {
    moveAt(event, start);
  }

  // We use this to remove the mousemove when clicking outside of the container
  const controller = new AbortController();

  // move the container on mousemove
  document.addEventListener("mousemove", onMouseMove, {
    signal: controller.signal,
  });
  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        cleanUp();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );

  function cleanUp() {
    console.log("cleaning up the plot move listener");
    controller.abort();
    CLIPBOARD_HEADER.onmouseup = null;
  }

  // (3) drop the ball, remove unneeded handlers
  CLIPBOARD_HEADER.onmouseup = cleanUp;
};

function sendToClipboard(blob) {
  if (!navigator.clipboard) {
    alert(
      "The Clipboard API does not seem to be available, make sure the Pluto notebook is being used from either localhost or an https source."
    );
  }
  navigator.clipboard
    .write([
      new ClipboardItem({
        // The key is determined dynamically based on the blob's type.
        [blob.type]: blob,
      }),
    ])
    .then(
      function () {
        console.log("Async: Copying to clipboard was successful!");
      },
      function (err) {
        console.error("Async: Could not copy text: ", err);
      }
    );
}

function copyImageToClipboard() {
  // We extract the image options from the provided parameters (if they exist)
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key. We also ignore format because the clipboard only supports png.
    if (val === undefined || key === "format") {
      continue;
    }
    config[key] = val;
  }
  Plotly.toImage(PLOT, config).then(function (dataUrl) {
    fetch(dataUrl)
      .then((res) => res.blob())
      .then((blob) => {
        const paste_receiver = document.querySelector('paste-receiver.plutoplotly')
        if (paste_receiver) {
          paste_receiver.attachImage(dataUrl, CONTAINER)
        }
        sendToClipboard(blob)
      });
  });
}

function saveImageToFile() {
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key.
    if (val === undefined) {
      continue;
    }
    config[key] = val;
  }
  Plotly.downloadImage(PLOT, config);
}

let container_rect = { width: 0, height: 0, top: 0, left: 0 };
function unpop_container(cl) {
  CONTAINER.classList.toggle("popped-out", false);
  CONTAINER.classList.toggle(cl, false);
  // We fix the height back to the value it had before popout, also setting the flag to signal that upon first resize we remove the fixed inline-style
  CONTAINER.style.height = container_rect.height + "px";
  remove_container_size = true;
  // We set the other fixed inline-styles to null
  CONTAINER.style.width = "";
  CONTAINER.style.top = "";
  CONTAINER.style.left = "";
  // We also remove the CLIPBOARD_HEADER
  CLIPBOARD_HEADER.style.width = "";
  CLIPBOARD_HEADER.style.left = "";
  // Finally we remove the hidden class to the header
  CLIPBOARD_HEADER.classList.toggle("hidden", true);
  return;
}
function popout_container(opts) {
  const cl = opts?.cl;
  const target_container_size = opts?.target_container_size ?? {};
  const target_plot_size = opts?.target_plot_size ?? {};
  if (CONTAINER.isPoppedOut()) {
    return unpop_container(cl);
  }
  CONTAINER.classList.toggle(cl, cl === undefined ? false : true);
  // We extract the current size of the container, save them and fix them
  const { width, height, top, left } = CONTAINER.getBoundingClientRect();
  container_rect = { width, height, top, left };
  // We save the current plot size before we pop as it will fill the screen
  const current_plot_size = {
    width: PLOT._fullLayout.width,
    height: PLOT._fullLayout.height,
  };
  // We have to save the pad data before popping so we can resize precisely
  const pad = {};
  pad.unpopped = getSizeData().container_pad;
  CONTAINER.classList.toggle("popped-out", true);
  pad.popped = getSizeData().container_pad;
  // We do top and left based on the current rect
  for (const key of ["top", "left"]) {
    const start_val = target_container_size[key] ?? container_rect[key];
    let offset = 0;
    for (const kind of ["padding", "border"]) {
      offset += pad.popped[kind][key] - pad.unpopped[kind][key];
    }
    CONTAINER.style[key] = start_val - offset + "px";
    if (key === "left") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  // We compute the width and height depending on eventual config data
  const csz = computeContainerSize({
    width:
      target_plot_size.width ??
      config_spans.width.config_value ??
      current_plot_size.width,
    height:
      target_plot_size.height ??
      config_spans.height.config_value ??
      current_plot_size.height,
  });
  for (const key of ["width", "height"]) {
    const val = target_container_size[key] ?? csz[key];
    CONTAINER.style[key] = val + "px";
    if (key === "width") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  CLIPBOARD_HEADER.classList.toggle("hidden", false);
  const controller = new AbortController();

  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        unpop_container();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );
}

CONTAINER.popOut = popout_container;

function DualClick(single_func, dbl_func) {
  let nclicks = 0;
  return function (...args) {
    nclicks += 1;
    if (nclicks > 1) {
      dbl_func(...args);
      nclicks = 0;
    } else {
      delay(300).then(() => {
        if (nclicks == 1) {
          single_func(...args);
        }
        nclicks = 0;
      });
    }
  };
}

// We remove the default download image button
plot_obj.config.modeBarButtonsToRemove = _.union(
  plot_obj.config.modeBarButtonsToRemove,
  ["toImage"]
);
// We add the custom button to the modebar
plot_obj.config.modeBarButtonsToAdd = _.union(
  plot_obj.config.modeBarButtonsToAdd,
  [
    {
      name: "Copy PNG to Clipboard",
      icon: {
        height: 520,
        width: 520,
        path: "M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z",
      },
      direction: "up",
      click: DualClick(copyImageToClipboard, () => {
        popout_container();
      }),
    },
    {
      name: "Download Image",
      icon: Plotly.Icons.camera,
      direction: "up",
      click: DualClick(saveImageToFile, () => {
        popout_container({ cl: "filesave" });
      }),
    },
  ]
);

function getOffsetData(el) {
  let cs = window.getComputedStyle(el, null);
  const odata = {
    padding: {
      left: parseFloat(cs.paddingLeft),
      right: parseFloat(cs.paddingRight),
      top: parseFloat(cs.paddingTop),
      bottom: parseFloat(cs.paddingBottom),
      width: parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight),
      height: parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom),
    },
    border: {
      left: parseFloat(cs.borderLeftWidth),
      right: parseFloat(cs.borderRightWidth),
      top: parseFloat(cs.borderTopWidth),
      bottom: parseFloat(cs.borderBottomWidth),
      width: parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth),
      height: parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth),
    }
  };
  if (el === PLOT) {
    // For the PLOT we also want to take into account the offset
    odata.offset = {
      top: PLOT.offsetParent == CONTAINER ? PLOT.offsetTop : 0,
      left: PLOT.offsetParent == CONTAINER ? PLOT.offsetLeft : 0,
    }
  }
  return odata;
}
function getSizeData() {
  const data = {
    plot_pad: getOffsetData(PLOT),
    plot_rect: PLOT.getBoundingClientRect(),
    container_pad: getOffsetData(CONTAINER),
    container_rect: CONTAINER.getBoundingClientRect(),
  };
  return data;
}
function computeContainerSize({ width, height }, sizeData = getSizeData()) {
  const computed_size = computePlotSize(sizeData);
  const offsets = computed_size.offsets;

  const plot_data = {
    width: width ?? computed_size.width,
    height: height ?? computed_size.height,
  };

  return {
    width: (width ?? computed_size.width) + offsets.width,
    height: (height ?? computed_size.height) + offsets.height,
    noChange: width == computed_size.width && height == computed_size.height,
  }
}

// This function will change the container size so that the resulting plot will be matching the provided specs
function changeContainerSize({ width, height }, sizeData = getSizeData()) {
  if (!CONTAINER.isPoppedOut()) {
    console.log("Tried to change container size when not popped, ignoring");
    return;
  }

  const csz = computeContainerSize({ width, height }, sizeData);

  if (csz.noChange) {
    console.log("Size is the same as current, ignoring");
    return
  }
  // We are now going to set he width and height of the container
  for (const key of ["width", "height"]) {
    CONTAINER.style[key] = csz[key] + "px";
  }
}
// We now create the function that will update the plot based on the values specified
function updateFromHeader() {
  const header_data = {
    height: config_spans.height.ui_value,
    width: config_spans.width.ui_value,
  };
  changeContainerSize(header_data);
}
// We assign this function to the onblur event of width and height
if (firstRun) {
  for (const container of Object.values(config_spans)) {
    container.ui_span.onblur = (e) => {
      container.ui_value = container.ui_span.textContent;
      updateFromHeader();
    };
  }
}
// This function computes the plot size to use for relayout as a function of the container size
function computePlotSize(data = getSizeData()) {
  // Remove Padding
  const { container_pad, plot_pad, container_rect } = data;
  const offsets = {
    width:
      plot_pad.padding.width +
      plot_pad.border.width +
      plot_pad.offset.left +
      container_pad.padding.width +
      container_pad.border.width,
    height:
      plot_pad.padding.height +
      plot_pad.border.height +
      plot_pad.offset.top +
      container_pad.padding.height +
      container_pad.border.height,
  };
  const sz = {
    width: Math.round(container_rect.width - offsets.width),
    height: Math.round(container_rect.height - offsets.height),
    offsets,
  };
  return sz;
}

// Create the resizeObserver to make the plot even more responsive! :magic:
const resizeObserver = new ResizeObserver((entries) => {
  const sizeData = getSizeData();
  const {container_rect, container_pad} = sizeData;
  let plot_size = computePlotSize(sizeData);
  // We save the height in the PLOT object
  PLOT.container_height = container_rect.height;
  // We deal with some stuff if the container is poppped
  CLIPBOARD_HEADER.style.width = container_rect.width + "px";
  CLIPBOARD_HEADER.style.left = container_rect.left + "px";
  config_spans.height.ui_value = plot_size.height;
  config_spans.width.ui_value = plot_size.width;
  /* 
		The addition of the invalid argument `plutoresize` seems to fix the problem with calling `relayout` simply with `{autosize: true}` as update breaking mouse relayout events tracking. 
		See https://github.com/plotly/plotly.js/issues/6156 for details
		*/
  let config = {
    // If this is popped out, we ignore the original width/height
    width: (CONTAINER.isPoppedOut() ? undefined : original_width) ?? plot_size.width,
    height: (CONTAINER.isPoppedOut() ? undefined : original_height) ?? plot_size.height,
    plutoresize: true,
  };
  Plotly.relayout(PLOT, config).then(() => {
    if (remove_container_size && !CONTAINER.isPoppedOut()) {
      // This is needed to avoid the first resize upon plot creation to already be without a fixed height
      CONTAINER.style.height = "";
      CONTAINER.style.width = "";
      remove_container_size = false;
    }
  });
});

resizeObserver.observe(CONTAINER);


Plotly.react(PLOT, plot_obj).then(() => {
	// Assign the Plotly event listeners
	for (const [key, listener_vec] of Object.entries(plotly_listeners)) {
		for (const listener of listener_vec) {
			PLOT.on(key, listener)
		}
	}
	// Assign the JS event listeners
	for (const [key, listener_vec] of Object.entries(js_listeners)) {
		for (const listener of listener_vec) {
			PLOT.addEventListener(key, listener, {
				signal: controller.signal
			})
		}
	}
}
)


invalidation.then(() => {
	// Remove all plotly listeners
	PLOT.removeAllListeners()
	// Remove all JS listeners
	controller.abort()
	// Remove the resizeObserver
	resizeObserver.disconnect()
})



		return CONTAINER
	</script>
</td></tr><tr><td align="right">No usable ace</td><td align="center">	<script id='plot_3'>
		// We start by putting all the variable interpolation here at the beginning
		// We have to convert all typedarrays in the layout to normal arrays. See Issue #25
		// We use lodash for this for compactness
		function removeTypedArray(o) {
			return _.isTypedArray(o) ? Array.from(o) :
			_.isPlainObject(o) ? _.mapValues(o, removeTypedArray) : 
			o
		}

		// Publish the plot object to JS
		let plot_obj = _.update(/* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("c6e0de0c-3901-11f0-234e-bd09c571f662/298eb806dc8714d9"), "layout", removeTypedArray)
		// Get the plotly listeners
		const plotly_listeners = {}
		// Get the JS listeners
		const js_listeners = {}
		// Deal with eventual custom classes
		let custom_classlist = []


		// Load the plotly library
		let Plotly = undefined
		try {
			let _mod = await import("./plotlyjs/plotlyjs-2.26.2.min.js")
			Plotly = _mod.default
		} catch (e) {
			console.log("Local load failed, trying with the web esm.sh version")
			let _mod = await import("https://esm.sh/plotly.js-dist-min@2.26.2/es2022/plotly.js-dist-min.mjs")
			Plotly = _mod.default
		}

		// Check if we have to force local mathjax font cache
		if (false && window?.MathJax?.config?.svg?.fontCache === 'global') {
			window.MathJax.config.svg.fontCache = 'local'
		}

		// Flag to check if this cell was  manually ran or reactively ran
const firstRun = this ? false : true
const CONTAINER = this ?? html`<div class='plutoplotly-container'>`
const PLOT = CONTAINER.querySelector('.js-plotly-plot') ?? CONTAINER.appendChild(html`<div>`)
const parent = CONTAINER.parentElement
// We use a controller to remove event listeners upon invalidation
const controller = new AbortController()
// We have to add this to keep supporting @bind with the old API using PLOT
PLOT.addEventListener('input', (e) => {
	CONTAINER.value = PLOT.value
	if (e.bubbles) {
		return
	}
	CONTAINER.dispatchEvent(new CustomEvent('input'))
}, { signal: controller.signal })

	// This create the style subdiv on first run
	firstRun && CONTAINER.appendChild(html`
	<style>
	.plutoplotly-container {
		width: 100%;
		height: 100%;
		min-height: 0;
		min-width: 0;
	}
	.plutoplotly-container .js-plotly-plot .plotly div {
		margin: 0 auto; // This centers the plot
	}
	.plutoplotly-container.popped-out {
		overflow: auto;
		z-index: 1000;
		position: fixed;
		resize: both;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		border-top-left-radius: 0px;
		border-top-right-radius: 0px;
	}
	.plutoplotly-clipboard-header {
		display: flex;
		flex-flow: row wrap;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-top-left-radius: 12px;
		border-top-right-radius: 12px;
		position: fixed;
		z-index: 1001;
		cursor: move;
		transform: translate(0px, -100%);
		padding: 5px;
	}
	.plutoplotly-clipboard-header span {
		display: inline-block;
		flex: 1
	}
	.plutoplotly-clipboard-header.hidden {
		display: none;
	}
	.clipboard-span {
		position: relative;
	}
	.clipboard-value {
		padding-right: 5px;
		padding-left: 2px;
		cursor: text;
	}
	.clipboard-span.format {
		display: none;
	}
	.clipboard-span.filename {
		flex: 0 0 100%;
		text-align: center;
		border-top: 3px solid var(--kbd-border-color);
		margin-top: 5px;
		display: none;
	}
	.plutoplotly-container.filesave .clipboard-span.filename {
		display: inline-block;
	}
	.clipboard-value.filename {
		margin-left: 3px;
		text-align: left;
		min-width: min(60%, min-content);
	}
	.plutoplotly-container.filesave .clipboard-span.format {
		display: inline-flex;
	}
	.clipboard-span.format .label {
		flex: 0 0 0;
	}
	.clipboard-value.format {
		position: relative;
		flex: 1 0 auto;
		min-width: 30px;
		margin-right: 10px;
	}
	div.format-options {
		display: inline-flex;
		flex-flow: column;
		position: absolute;
		background: var(--main-bg-color);
		border-radius: 12px;
		padding-left: 3px;
		z-index: 2000;
	}
	div.format-options:hover {
		cursor: pointer;
		border: 3px solid var(--kbd-border-color);
		padding: 3px;
		transform: translate(-3px, -6px);
	}
	div.format-options .format-option {
		display: none;
	}
	div.format-options:hover .format-option {
		display: inline-block;
	}
	.format-option:not(.selected) {
		margin-top: 3px;
	}
	div.format-options .format-option.selected {
		order: -1;
		display: inline-block;
	}
	.format-option:hover {
		background-color: var(--kbd-border-color);
	}
	span.config-value {
		font-weight: normal;
		color: var(--pluto-output-color);
		display: none;
		position: absolute;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		transform: translate(0px, calc(-100% - 10px));
		padding: 5px;
	}
	.label {
		user-select: none;
	}
	.label:hover span.config-value {
		display: inline-block;
		min-width: 150px;
	}
	.clipboard-span.matching-config .label {
		color: var(--cm-macro-color);
		font-weight: bold;
	}
	.clipboard-span.different-config .label {
		color: var(--cm-tag-color);
		font-weight: bold;
	}
</style>
`)

let original_height = plot_obj.layout.height
let original_width = plot_obj.layout.width
// For the height we have to also put a fixed value in case the plot is put on a non-fixed-size container (like the default wrapper)
// We define a variable to check whether we still have to remove the fixed height
let remove_container_size = firstRun
let container_height = original_height ?? PLOT.container_height ?? 400
CONTAINER.style.height = container_height + 'px'

// We create a Promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// We import interact for dragging/resizing
const { default: interact } = await import('https://esm.sh/interactjs@1.10.19')


function getImageOptions() {
  const o = plot_obj.config.toImageButtonOptions ?? {};
  return {
    format: o.format ?? "png",
    width: o.width ?? original_width,
    height: o.height ?? original_height,
    scale: o.scale ?? 1,
    filename: o.filename ?? "newplot",
  };
}

const CLIPBOARD_HEADER =
  CONTAINER.querySelector(".plutoplotly-clipboard-header") ??
  CONTAINER.insertAdjacentElement(
    "afterbegin",
    html`<div class="plutoplotly-clipboard-header hidden">
      <span class="clipboard-span format"
        ><span class="label">Format:</span
        ><span class="clipboard-value format"></span
      ></span>
      <span class="clipboard-span width"
        ><span class="label">Width:</span
        ><span class="clipboard-value width"></span>px</span
      >
      <span class="clipboard-span height"
        ><span class="label">Height:</span
        ><span class="clipboard-value height"></span>px</span
      >
      <span class="clipboard-span scale"
        ><span class="label">Scale:</span
        ><span class="clipboard-value scale"></span
      ></span>
      <button class="clipboard-span set">Set</button>
      <button class="clipboard-span unset">Unset</button>
      <span class="clipboard-span filename"
        ><span class="label">Filename:</span
        ><span class="clipboard-value filename"></span
      ></span>
    </div>`
  );

function checkConfigSync(container) {
  const valid_classes = [
    "missing-config",
    "matching-config",
    "different-config",
  ];
  function setClass(cl) {
    for (const name of valid_classes) {
      container.classList.toggle(name, name == cl);
    }
  }
  // We use the custom getters we'll set up in the container
  const { ui_value, config_value, config_span, key } = container;
  if (config_value === undefined) {
    setClass("missing-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> is not present in the config.`;
  } else if (ui_value == config_value) {
    setClass("matching-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has the same value in the config and in the header.`;
  } else {
    setClass("different-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has a different value (<em>${config_value}</em>) in the config.`;
  }
  // Add info about setting and unsetting
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click on the label <em><b>once</b></em> to set the current UI value in the config.`
  );
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click <em><b>twice</b></em> to remove this key from the config.`
  );
}

const valid_formats = ["png", "svg", "webp", "jpeg", "full-json"];
function initializeUIValueSpan(span, key, value) {
  const container = span.closest(".clipboard-span");
  span.contentEditable = key === "format" ? "false" : "true";
  let parse = (x) => x;
  let update = (x) => (span.textContent = x);
  if (key === "width" || key === "height") {
    parse = (x) => Math.round(parseFloat(x));
  } else if (key === "scale") {
    parse = parseFloat;
  } else if (key === "format") {
    // We remove contentEditable
    span.contentEditable = "false";
    // Here we first add the subspans for each option
    const opts_div = span.appendChild(html`<div class="format-options"></div>`);
    for (const fmt of valid_formats) {
      const opt = opts_div.appendChild(
        html`<span class="format-option ${fmt}">${fmt}</span>`
      );
      opt.onclick = (e) => {
        span.value = opt.textContent;
      };
    }
    parse = (x) => {
      return valid_formats.includes(x) ? x : localValue;
    };
    update = (x) => {
      for (const opt of opts_div.children) {
        opt.classList.toggle("selected", opt.textContent === x);
      }
    };
  } else {
    // We only have filename here
  }
  let localValue;
  Object.defineProperty(span, "value", {
    get: () => {
      return localValue;
    },
    set: (val) => {
      if (val !== "") {
        localValue = parse(val);
      }
      update(localValue);
      checkConfigSync(container);
    },
  });
  // We also assign a listener so that the editable is blurred when enter is pressed
  span.onkeydown = (e) => {
    if (e.keyCode === 13) {
      e.preventDefault();
      span.blur();
    }
  };
  span.value = value;
}

function initializeConfigValueSpan(span, key) {
  // Here we mostly want to define the setter and getter
  const container = span.closest(".clipboard-span");
  Object.defineProperty(span, "value", {
    get: () => {
      return plot_obj.config.toImageButtonOptions[key];
    },
    set: (val) => {
      // if undefined is passed, we remove the entry from the options
      if (val === undefined) {
        delete plot_obj.config.toImageButtonOptions[key];
      } else {
        plot_obj.config.toImageButtonOptions[key] = val;
      }
      checkConfigSync(container);
    },
  });
}

const config_spans = {};
for (const [key, value] of Object.entries(getImageOptions())) {
  const container = CLIPBOARD_HEADER.querySelector(`.clipboard-span.${key}`);
  const label = container.querySelector(".label");
  // We give the label a function that on single click will set the current value and with double click will unset it
  label.onclick = DualClick(
    () => {
      container.config_value = container.ui_value;
    },
    (e) => {
      console.log("e", e);
      e.preventDefault();
      container.config_value = undefined;
    }
  );
  const ui_value_span = container.querySelector(".clipboard-value");
  const config_value_span =
    container.querySelector(".config-value") ??
    label.insertAdjacentElement(
      "afterbegin",
      html`<span class="config-value"></span>`
    );
  // Assing the two spans as properties of the containing span
  container.ui_span = ui_value_span;
  container.config_span = config_value_span;
  container.key = key;
  config_spans[key] = container;
  if (firstRun) {
    plot_obj.config.toImageButtonOptions =
      plot_obj.config.toImageButtonOptions ?? {};
    // We do the initialization of the value span
    initializeUIValueSpan(ui_value_span, key, value);
    // Then we initialize the config value
    initializeConfigValueSpan(config_value_span, key);
    // We put some convenience getters/setters
    // ui_value forward
    Object.defineProperty(container, "ui_value", {
      get: () => ui_value_span.value,
      set: (val) => {
        ui_value_span.value = val;
      },
    });
    // config_value forward
    Object.defineProperty(container, "config_value", {
      get: () => config_value_span.value,
      set: (val) => {
        config_value_span.value = val;
      },
    });
  }
}

// These objects will contain the default value

// This code updates the image options in the PLOT config with the provided ones
function setImageOptions(o) {
  for (const [key, container] of Object.entries(config_spans)) {
    container.config_value = o[key];
  }
}
function unsetImageOptions() {
  setImageOptions({});
}

const set_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.set");
const unset_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.unset");
if (firstRun) {
  set_button.onclick = (e) => {
    for (const container of Object.values(config_spans)) {
      container.config_value = container.ui_value;
    }
  };
  unset_button.onclick = unsetImageOptions;
}

// We add a function to check if the clipboard is popped out
CONTAINER.isPoppedOut = () => {
  return CONTAINER.classList.contains("popped-out");
};

CLIPBOARD_HEADER.onmousedown = function (event) {
  if (event.target.matches("span.clipboard-value")) {
    console.log("We don't move!");
    return;
  }
  const start = {
    left: parseFloat(CONTAINER.style.left),
    top: parseFloat(CONTAINER.style.top),
    X: event.pageX,
    Y: event.pageY,
  };
  function moveAt(event, start) {
    const top = event.pageY - start.Y + start.top + "px";
    const left = event.pageX - start.X + start.left + "px";
    CLIPBOARD_HEADER.style.left = left;
    CONTAINER.style.left = left;
    CONTAINER.style.top = top;
  }

  // move our absolutely positioned ball under the pointer
  moveAt(event, start);
  function onMouseMove(event) {
    moveAt(event, start);
  }

  // We use this to remove the mousemove when clicking outside of the container
  const controller = new AbortController();

  // move the container on mousemove
  document.addEventListener("mousemove", onMouseMove, {
    signal: controller.signal,
  });
  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        cleanUp();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );

  function cleanUp() {
    console.log("cleaning up the plot move listener");
    controller.abort();
    CLIPBOARD_HEADER.onmouseup = null;
  }

  // (3) drop the ball, remove unneeded handlers
  CLIPBOARD_HEADER.onmouseup = cleanUp;
};

function sendToClipboard(blob) {
  if (!navigator.clipboard) {
    alert(
      "The Clipboard API does not seem to be available, make sure the Pluto notebook is being used from either localhost or an https source."
    );
  }
  navigator.clipboard
    .write([
      new ClipboardItem({
        // The key is determined dynamically based on the blob's type.
        [blob.type]: blob,
      }),
    ])
    .then(
      function () {
        console.log("Async: Copying to clipboard was successful!");
      },
      function (err) {
        console.error("Async: Could not copy text: ", err);
      }
    );
}

function copyImageToClipboard() {
  // We extract the image options from the provided parameters (if they exist)
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key. We also ignore format because the clipboard only supports png.
    if (val === undefined || key === "format") {
      continue;
    }
    config[key] = val;
  }
  Plotly.toImage(PLOT, config).then(function (dataUrl) {
    fetch(dataUrl)
      .then((res) => res.blob())
      .then((blob) => {
        const paste_receiver = document.querySelector('paste-receiver.plutoplotly')
        if (paste_receiver) {
          paste_receiver.attachImage(dataUrl, CONTAINER)
        }
        sendToClipboard(blob)
      });
  });
}

function saveImageToFile() {
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key.
    if (val === undefined) {
      continue;
    }
    config[key] = val;
  }
  Plotly.downloadImage(PLOT, config);
}

let container_rect = { width: 0, height: 0, top: 0, left: 0 };
function unpop_container(cl) {
  CONTAINER.classList.toggle("popped-out", false);
  CONTAINER.classList.toggle(cl, false);
  // We fix the height back to the value it had before popout, also setting the flag to signal that upon first resize we remove the fixed inline-style
  CONTAINER.style.height = container_rect.height + "px";
  remove_container_size = true;
  // We set the other fixed inline-styles to null
  CONTAINER.style.width = "";
  CONTAINER.style.top = "";
  CONTAINER.style.left = "";
  // We also remove the CLIPBOARD_HEADER
  CLIPBOARD_HEADER.style.width = "";
  CLIPBOARD_HEADER.style.left = "";
  // Finally we remove the hidden class to the header
  CLIPBOARD_HEADER.classList.toggle("hidden", true);
  return;
}
function popout_container(opts) {
  const cl = opts?.cl;
  const target_container_size = opts?.target_container_size ?? {};
  const target_plot_size = opts?.target_plot_size ?? {};
  if (CONTAINER.isPoppedOut()) {
    return unpop_container(cl);
  }
  CONTAINER.classList.toggle(cl, cl === undefined ? false : true);
  // We extract the current size of the container, save them and fix them
  const { width, height, top, left } = CONTAINER.getBoundingClientRect();
  container_rect = { width, height, top, left };
  // We save the current plot size before we pop as it will fill the screen
  const current_plot_size = {
    width: PLOT._fullLayout.width,
    height: PLOT._fullLayout.height,
  };
  // We have to save the pad data before popping so we can resize precisely
  const pad = {};
  pad.unpopped = getSizeData().container_pad;
  CONTAINER.classList.toggle("popped-out", true);
  pad.popped = getSizeData().container_pad;
  // We do top and left based on the current rect
  for (const key of ["top", "left"]) {
    const start_val = target_container_size[key] ?? container_rect[key];
    let offset = 0;
    for (const kind of ["padding", "border"]) {
      offset += pad.popped[kind][key] - pad.unpopped[kind][key];
    }
    CONTAINER.style[key] = start_val - offset + "px";
    if (key === "left") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  // We compute the width and height depending on eventual config data
  const csz = computeContainerSize({
    width:
      target_plot_size.width ??
      config_spans.width.config_value ??
      current_plot_size.width,
    height:
      target_plot_size.height ??
      config_spans.height.config_value ??
      current_plot_size.height,
  });
  for (const key of ["width", "height"]) {
    const val = target_container_size[key] ?? csz[key];
    CONTAINER.style[key] = val + "px";
    if (key === "width") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  CLIPBOARD_HEADER.classList.toggle("hidden", false);
  const controller = new AbortController();

  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        unpop_container();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );
}

CONTAINER.popOut = popout_container;

function DualClick(single_func, dbl_func) {
  let nclicks = 0;
  return function (...args) {
    nclicks += 1;
    if (nclicks > 1) {
      dbl_func(...args);
      nclicks = 0;
    } else {
      delay(300).then(() => {
        if (nclicks == 1) {
          single_func(...args);
        }
        nclicks = 0;
      });
    }
  };
}

// We remove the default download image button
plot_obj.config.modeBarButtonsToRemove = _.union(
  plot_obj.config.modeBarButtonsToRemove,
  ["toImage"]
);
// We add the custom button to the modebar
plot_obj.config.modeBarButtonsToAdd = _.union(
  plot_obj.config.modeBarButtonsToAdd,
  [
    {
      name: "Copy PNG to Clipboard",
      icon: {
        height: 520,
        width: 520,
        path: "M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z",
      },
      direction: "up",
      click: DualClick(copyImageToClipboard, () => {
        popout_container();
      }),
    },
    {
      name: "Download Image",
      icon: Plotly.Icons.camera,
      direction: "up",
      click: DualClick(saveImageToFile, () => {
        popout_container({ cl: "filesave" });
      }),
    },
  ]
);

function getOffsetData(el) {
  let cs = window.getComputedStyle(el, null);
  const odata = {
    padding: {
      left: parseFloat(cs.paddingLeft),
      right: parseFloat(cs.paddingRight),
      top: parseFloat(cs.paddingTop),
      bottom: parseFloat(cs.paddingBottom),
      width: parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight),
      height: parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom),
    },
    border: {
      left: parseFloat(cs.borderLeftWidth),
      right: parseFloat(cs.borderRightWidth),
      top: parseFloat(cs.borderTopWidth),
      bottom: parseFloat(cs.borderBottomWidth),
      width: parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth),
      height: parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth),
    }
  };
  if (el === PLOT) {
    // For the PLOT we also want to take into account the offset
    odata.offset = {
      top: PLOT.offsetParent == CONTAINER ? PLOT.offsetTop : 0,
      left: PLOT.offsetParent == CONTAINER ? PLOT.offsetLeft : 0,
    }
  }
  return odata;
}
function getSizeData() {
  const data = {
    plot_pad: getOffsetData(PLOT),
    plot_rect: PLOT.getBoundingClientRect(),
    container_pad: getOffsetData(CONTAINER),
    container_rect: CONTAINER.getBoundingClientRect(),
  };
  return data;
}
function computeContainerSize({ width, height }, sizeData = getSizeData()) {
  const computed_size = computePlotSize(sizeData);
  const offsets = computed_size.offsets;

  const plot_data = {
    width: width ?? computed_size.width,
    height: height ?? computed_size.height,
  };

  return {
    width: (width ?? computed_size.width) + offsets.width,
    height: (height ?? computed_size.height) + offsets.height,
    noChange: width == computed_size.width && height == computed_size.height,
  }
}

// This function will change the container size so that the resulting plot will be matching the provided specs
function changeContainerSize({ width, height }, sizeData = getSizeData()) {
  if (!CONTAINER.isPoppedOut()) {
    console.log("Tried to change container size when not popped, ignoring");
    return;
  }

  const csz = computeContainerSize({ width, height }, sizeData);

  if (csz.noChange) {
    console.log("Size is the same as current, ignoring");
    return
  }
  // We are now going to set he width and height of the container
  for (const key of ["width", "height"]) {
    CONTAINER.style[key] = csz[key] + "px";
  }
}
// We now create the function that will update the plot based on the values specified
function updateFromHeader() {
  const header_data = {
    height: config_spans.height.ui_value,
    width: config_spans.width.ui_value,
  };
  changeContainerSize(header_data);
}
// We assign this function to the onblur event of width and height
if (firstRun) {
  for (const container of Object.values(config_spans)) {
    container.ui_span.onblur = (e) => {
      container.ui_value = container.ui_span.textContent;
      updateFromHeader();
    };
  }
}
// This function computes the plot size to use for relayout as a function of the container size
function computePlotSize(data = getSizeData()) {
  // Remove Padding
  const { container_pad, plot_pad, container_rect } = data;
  const offsets = {
    width:
      plot_pad.padding.width +
      plot_pad.border.width +
      plot_pad.offset.left +
      container_pad.padding.width +
      container_pad.border.width,
    height:
      plot_pad.padding.height +
      plot_pad.border.height +
      plot_pad.offset.top +
      container_pad.padding.height +
      container_pad.border.height,
  };
  const sz = {
    width: Math.round(container_rect.width - offsets.width),
    height: Math.round(container_rect.height - offsets.height),
    offsets,
  };
  return sz;
}

// Create the resizeObserver to make the plot even more responsive! :magic:
const resizeObserver = new ResizeObserver((entries) => {
  const sizeData = getSizeData();
  const {container_rect, container_pad} = sizeData;
  let plot_size = computePlotSize(sizeData);
  // We save the height in the PLOT object
  PLOT.container_height = container_rect.height;
  // We deal with some stuff if the container is poppped
  CLIPBOARD_HEADER.style.width = container_rect.width + "px";
  CLIPBOARD_HEADER.style.left = container_rect.left + "px";
  config_spans.height.ui_value = plot_size.height;
  config_spans.width.ui_value = plot_size.width;
  /* 
		The addition of the invalid argument `plutoresize` seems to fix the problem with calling `relayout` simply with `{autosize: true}` as update breaking mouse relayout events tracking. 
		See https://github.com/plotly/plotly.js/issues/6156 for details
		*/
  let config = {
    // If this is popped out, we ignore the original width/height
    width: (CONTAINER.isPoppedOut() ? undefined : original_width) ?? plot_size.width,
    height: (CONTAINER.isPoppedOut() ? undefined : original_height) ?? plot_size.height,
    plutoresize: true,
  };
  Plotly.relayout(PLOT, config).then(() => {
    if (remove_container_size && !CONTAINER.isPoppedOut()) {
      // This is needed to avoid the first resize upon plot creation to already be without a fixed height
      CONTAINER.style.height = "";
      CONTAINER.style.width = "";
      remove_container_size = false;
    }
  });
});

resizeObserver.observe(CONTAINER);


Plotly.react(PLOT, plot_obj).then(() => {
	// Assign the Plotly event listeners
	for (const [key, listener_vec] of Object.entries(plotly_listeners)) {
		for (const listener of listener_vec) {
			PLOT.on(key, listener)
		}
	}
	// Assign the JS event listeners
	for (const [key, listener_vec] of Object.entries(js_listeners)) {
		for (const listener of listener_vec) {
			PLOT.addEventListener(key, listener, {
				signal: controller.signal
			})
		}
	}
}
)


invalidation.then(() => {
	// Remove all plotly listeners
	PLOT.removeAllListeners()
	// Remove all JS listeners
	controller.abort()
	// Remove the resizeObserver
	resizeObserver.disconnect()
})



		return CONTAINER
	</script>
</td><td align="center">	<script id='plot_4'>
		// We start by putting all the variable interpolation here at the beginning
		// We have to convert all typedarrays in the layout to normal arrays. See Issue #25
		// We use lodash for this for compactness
		function removeTypedArray(o) {
			return _.isTypedArray(o) ? Array.from(o) :
			_.isPlainObject(o) ? _.mapValues(o, removeTypedArray) : 
			o
		}

		// Publish the plot object to JS
		let plot_obj = _.update(/* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("c6e0de0c-3901-11f0-234e-bd09c571f662/dd4bace5c1b653a4"), "layout", removeTypedArray)
		// Get the plotly listeners
		const plotly_listeners = {}
		// Get the JS listeners
		const js_listeners = {}
		// Deal with eventual custom classes
		let custom_classlist = []


		// Load the plotly library
		let Plotly = undefined
		try {
			let _mod = await import("./plotlyjs/plotlyjs-2.26.2.min.js")
			Plotly = _mod.default
		} catch (e) {
			console.log("Local load failed, trying with the web esm.sh version")
			let _mod = await import("https://esm.sh/plotly.js-dist-min@2.26.2/es2022/plotly.js-dist-min.mjs")
			Plotly = _mod.default
		}

		// Check if we have to force local mathjax font cache
		if (false && window?.MathJax?.config?.svg?.fontCache === 'global') {
			window.MathJax.config.svg.fontCache = 'local'
		}

		// Flag to check if this cell was  manually ran or reactively ran
const firstRun = this ? false : true
const CONTAINER = this ?? html`<div class='plutoplotly-container'>`
const PLOT = CONTAINER.querySelector('.js-plotly-plot') ?? CONTAINER.appendChild(html`<div>`)
const parent = CONTAINER.parentElement
// We use a controller to remove event listeners upon invalidation
const controller = new AbortController()
// We have to add this to keep supporting @bind with the old API using PLOT
PLOT.addEventListener('input', (e) => {
	CONTAINER.value = PLOT.value
	if (e.bubbles) {
		return
	}
	CONTAINER.dispatchEvent(new CustomEvent('input'))
}, { signal: controller.signal })

	// This create the style subdiv on first run
	firstRun && CONTAINER.appendChild(html`
	<style>
	.plutoplotly-container {
		width: 100%;
		height: 100%;
		min-height: 0;
		min-width: 0;
	}
	.plutoplotly-container .js-plotly-plot .plotly div {
		margin: 0 auto; // This centers the plot
	}
	.plutoplotly-container.popped-out {
		overflow: auto;
		z-index: 1000;
		position: fixed;
		resize: both;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		border-top-left-radius: 0px;
		border-top-right-radius: 0px;
	}
	.plutoplotly-clipboard-header {
		display: flex;
		flex-flow: row wrap;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-top-left-radius: 12px;
		border-top-right-radius: 12px;
		position: fixed;
		z-index: 1001;
		cursor: move;
		transform: translate(0px, -100%);
		padding: 5px;
	}
	.plutoplotly-clipboard-header span {
		display: inline-block;
		flex: 1
	}
	.plutoplotly-clipboard-header.hidden {
		display: none;
	}
	.clipboard-span {
		position: relative;
	}
	.clipboard-value {
		padding-right: 5px;
		padding-left: 2px;
		cursor: text;
	}
	.clipboard-span.format {
		display: none;
	}
	.clipboard-span.filename {
		flex: 0 0 100%;
		text-align: center;
		border-top: 3px solid var(--kbd-border-color);
		margin-top: 5px;
		display: none;
	}
	.plutoplotly-container.filesave .clipboard-span.filename {
		display: inline-block;
	}
	.clipboard-value.filename {
		margin-left: 3px;
		text-align: left;
		min-width: min(60%, min-content);
	}
	.plutoplotly-container.filesave .clipboard-span.format {
		display: inline-flex;
	}
	.clipboard-span.format .label {
		flex: 0 0 0;
	}
	.clipboard-value.format {
		position: relative;
		flex: 1 0 auto;
		min-width: 30px;
		margin-right: 10px;
	}
	div.format-options {
		display: inline-flex;
		flex-flow: column;
		position: absolute;
		background: var(--main-bg-color);
		border-radius: 12px;
		padding-left: 3px;
		z-index: 2000;
	}
	div.format-options:hover {
		cursor: pointer;
		border: 3px solid var(--kbd-border-color);
		padding: 3px;
		transform: translate(-3px, -6px);
	}
	div.format-options .format-option {
		display: none;
	}
	div.format-options:hover .format-option {
		display: inline-block;
	}
	.format-option:not(.selected) {
		margin-top: 3px;
	}
	div.format-options .format-option.selected {
		order: -1;
		display: inline-block;
	}
	.format-option:hover {
		background-color: var(--kbd-border-color);
	}
	span.config-value {
		font-weight: normal;
		color: var(--pluto-output-color);
		display: none;
		position: absolute;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		transform: translate(0px, calc(-100% - 10px));
		padding: 5px;
	}
	.label {
		user-select: none;
	}
	.label:hover span.config-value {
		display: inline-block;
		min-width: 150px;
	}
	.clipboard-span.matching-config .label {
		color: var(--cm-macro-color);
		font-weight: bold;
	}
	.clipboard-span.different-config .label {
		color: var(--cm-tag-color);
		font-weight: bold;
	}
</style>
`)

let original_height = plot_obj.layout.height
let original_width = plot_obj.layout.width
// For the height we have to also put a fixed value in case the plot is put on a non-fixed-size container (like the default wrapper)
// We define a variable to check whether we still have to remove the fixed height
let remove_container_size = firstRun
let container_height = original_height ?? PLOT.container_height ?? 400
CONTAINER.style.height = container_height + 'px'

// We create a Promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// We import interact for dragging/resizing
const { default: interact } = await import('https://esm.sh/interactjs@1.10.19')


function getImageOptions() {
  const o = plot_obj.config.toImageButtonOptions ?? {};
  return {
    format: o.format ?? "png",
    width: o.width ?? original_width,
    height: o.height ?? original_height,
    scale: o.scale ?? 1,
    filename: o.filename ?? "newplot",
  };
}

const CLIPBOARD_HEADER =
  CONTAINER.querySelector(".plutoplotly-clipboard-header") ??
  CONTAINER.insertAdjacentElement(
    "afterbegin",
    html`<div class="plutoplotly-clipboard-header hidden">
      <span class="clipboard-span format"
        ><span class="label">Format:</span
        ><span class="clipboard-value format"></span
      ></span>
      <span class="clipboard-span width"
        ><span class="label">Width:</span
        ><span class="clipboard-value width"></span>px</span
      >
      <span class="clipboard-span height"
        ><span class="label">Height:</span
        ><span class="clipboard-value height"></span>px</span
      >
      <span class="clipboard-span scale"
        ><span class="label">Scale:</span
        ><span class="clipboard-value scale"></span
      ></span>
      <button class="clipboard-span set">Set</button>
      <button class="clipboard-span unset">Unset</button>
      <span class="clipboard-span filename"
        ><span class="label">Filename:</span
        ><span class="clipboard-value filename"></span
      ></span>
    </div>`
  );

function checkConfigSync(container) {
  const valid_classes = [
    "missing-config",
    "matching-config",
    "different-config",
  ];
  function setClass(cl) {
    for (const name of valid_classes) {
      container.classList.toggle(name, name == cl);
    }
  }
  // We use the custom getters we'll set up in the container
  const { ui_value, config_value, config_span, key } = container;
  if (config_value === undefined) {
    setClass("missing-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> is not present in the config.`;
  } else if (ui_value == config_value) {
    setClass("matching-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has the same value in the config and in the header.`;
  } else {
    setClass("different-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has a different value (<em>${config_value}</em>) in the config.`;
  }
  // Add info about setting and unsetting
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click on the label <em><b>once</b></em> to set the current UI value in the config.`
  );
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click <em><b>twice</b></em> to remove this key from the config.`
  );
}

const valid_formats = ["png", "svg", "webp", "jpeg", "full-json"];
function initializeUIValueSpan(span, key, value) {
  const container = span.closest(".clipboard-span");
  span.contentEditable = key === "format" ? "false" : "true";
  let parse = (x) => x;
  let update = (x) => (span.textContent = x);
  if (key === "width" || key === "height") {
    parse = (x) => Math.round(parseFloat(x));
  } else if (key === "scale") {
    parse = parseFloat;
  } else if (key === "format") {
    // We remove contentEditable
    span.contentEditable = "false";
    // Here we first add the subspans for each option
    const opts_div = span.appendChild(html`<div class="format-options"></div>`);
    for (const fmt of valid_formats) {
      const opt = opts_div.appendChild(
        html`<span class="format-option ${fmt}">${fmt}</span>`
      );
      opt.onclick = (e) => {
        span.value = opt.textContent;
      };
    }
    parse = (x) => {
      return valid_formats.includes(x) ? x : localValue;
    };
    update = (x) => {
      for (const opt of opts_div.children) {
        opt.classList.toggle("selected", opt.textContent === x);
      }
    };
  } else {
    // We only have filename here
  }
  let localValue;
  Object.defineProperty(span, "value", {
    get: () => {
      return localValue;
    },
    set: (val) => {
      if (val !== "") {
        localValue = parse(val);
      }
      update(localValue);
      checkConfigSync(container);
    },
  });
  // We also assign a listener so that the editable is blurred when enter is pressed
  span.onkeydown = (e) => {
    if (e.keyCode === 13) {
      e.preventDefault();
      span.blur();
    }
  };
  span.value = value;
}

function initializeConfigValueSpan(span, key) {
  // Here we mostly want to define the setter and getter
  const container = span.closest(".clipboard-span");
  Object.defineProperty(span, "value", {
    get: () => {
      return plot_obj.config.toImageButtonOptions[key];
    },
    set: (val) => {
      // if undefined is passed, we remove the entry from the options
      if (val === undefined) {
        delete plot_obj.config.toImageButtonOptions[key];
      } else {
        plot_obj.config.toImageButtonOptions[key] = val;
      }
      checkConfigSync(container);
    },
  });
}

const config_spans = {};
for (const [key, value] of Object.entries(getImageOptions())) {
  const container = CLIPBOARD_HEADER.querySelector(`.clipboard-span.${key}`);
  const label = container.querySelector(".label");
  // We give the label a function that on single click will set the current value and with double click will unset it
  label.onclick = DualClick(
    () => {
      container.config_value = container.ui_value;
    },
    (e) => {
      console.log("e", e);
      e.preventDefault();
      container.config_value = undefined;
    }
  );
  const ui_value_span = container.querySelector(".clipboard-value");
  const config_value_span =
    container.querySelector(".config-value") ??
    label.insertAdjacentElement(
      "afterbegin",
      html`<span class="config-value"></span>`
    );
  // Assing the two spans as properties of the containing span
  container.ui_span = ui_value_span;
  container.config_span = config_value_span;
  container.key = key;
  config_spans[key] = container;
  if (firstRun) {
    plot_obj.config.toImageButtonOptions =
      plot_obj.config.toImageButtonOptions ?? {};
    // We do the initialization of the value span
    initializeUIValueSpan(ui_value_span, key, value);
    // Then we initialize the config value
    initializeConfigValueSpan(config_value_span, key);
    // We put some convenience getters/setters
    // ui_value forward
    Object.defineProperty(container, "ui_value", {
      get: () => ui_value_span.value,
      set: (val) => {
        ui_value_span.value = val;
      },
    });
    // config_value forward
    Object.defineProperty(container, "config_value", {
      get: () => config_value_span.value,
      set: (val) => {
        config_value_span.value = val;
      },
    });
  }
}

// These objects will contain the default value

// This code updates the image options in the PLOT config with the provided ones
function setImageOptions(o) {
  for (const [key, container] of Object.entries(config_spans)) {
    container.config_value = o[key];
  }
}
function unsetImageOptions() {
  setImageOptions({});
}

const set_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.set");
const unset_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.unset");
if (firstRun) {
  set_button.onclick = (e) => {
    for (const container of Object.values(config_spans)) {
      container.config_value = container.ui_value;
    }
  };
  unset_button.onclick = unsetImageOptions;
}

// We add a function to check if the clipboard is popped out
CONTAINER.isPoppedOut = () => {
  return CONTAINER.classList.contains("popped-out");
};

CLIPBOARD_HEADER.onmousedown = function (event) {
  if (event.target.matches("span.clipboard-value")) {
    console.log("We don't move!");
    return;
  }
  const start = {
    left: parseFloat(CONTAINER.style.left),
    top: parseFloat(CONTAINER.style.top),
    X: event.pageX,
    Y: event.pageY,
  };
  function moveAt(event, start) {
    const top = event.pageY - start.Y + start.top + "px";
    const left = event.pageX - start.X + start.left + "px";
    CLIPBOARD_HEADER.style.left = left;
    CONTAINER.style.left = left;
    CONTAINER.style.top = top;
  }

  // move our absolutely positioned ball under the pointer
  moveAt(event, start);
  function onMouseMove(event) {
    moveAt(event, start);
  }

  // We use this to remove the mousemove when clicking outside of the container
  const controller = new AbortController();

  // move the container on mousemove
  document.addEventListener("mousemove", onMouseMove, {
    signal: controller.signal,
  });
  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        cleanUp();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );

  function cleanUp() {
    console.log("cleaning up the plot move listener");
    controller.abort();
    CLIPBOARD_HEADER.onmouseup = null;
  }

  // (3) drop the ball, remove unneeded handlers
  CLIPBOARD_HEADER.onmouseup = cleanUp;
};

function sendToClipboard(blob) {
  if (!navigator.clipboard) {
    alert(
      "The Clipboard API does not seem to be available, make sure the Pluto notebook is being used from either localhost or an https source."
    );
  }
  navigator.clipboard
    .write([
      new ClipboardItem({
        // The key is determined dynamically based on the blob's type.
        [blob.type]: blob,
      }),
    ])
    .then(
      function () {
        console.log("Async: Copying to clipboard was successful!");
      },
      function (err) {
        console.error("Async: Could not copy text: ", err);
      }
    );
}

function copyImageToClipboard() {
  // We extract the image options from the provided parameters (if they exist)
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key. We also ignore format because the clipboard only supports png.
    if (val === undefined || key === "format") {
      continue;
    }
    config[key] = val;
  }
  Plotly.toImage(PLOT, config).then(function (dataUrl) {
    fetch(dataUrl)
      .then((res) => res.blob())
      .then((blob) => {
        const paste_receiver = document.querySelector('paste-receiver.plutoplotly')
        if (paste_receiver) {
          paste_receiver.attachImage(dataUrl, CONTAINER)
        }
        sendToClipboard(blob)
      });
  });
}

function saveImageToFile() {
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key.
    if (val === undefined) {
      continue;
    }
    config[key] = val;
  }
  Plotly.downloadImage(PLOT, config);
}

let container_rect = { width: 0, height: 0, top: 0, left: 0 };
function unpop_container(cl) {
  CONTAINER.classList.toggle("popped-out", false);
  CONTAINER.classList.toggle(cl, false);
  // We fix the height back to the value it had before popout, also setting the flag to signal that upon first resize we remove the fixed inline-style
  CONTAINER.style.height = container_rect.height + "px";
  remove_container_size = true;
  // We set the other fixed inline-styles to null
  CONTAINER.style.width = "";
  CONTAINER.style.top = "";
  CONTAINER.style.left = "";
  // We also remove the CLIPBOARD_HEADER
  CLIPBOARD_HEADER.style.width = "";
  CLIPBOARD_HEADER.style.left = "";
  // Finally we remove the hidden class to the header
  CLIPBOARD_HEADER.classList.toggle("hidden", true);
  return;
}
function popout_container(opts) {
  const cl = opts?.cl;
  const target_container_size = opts?.target_container_size ?? {};
  const target_plot_size = opts?.target_plot_size ?? {};
  if (CONTAINER.isPoppedOut()) {
    return unpop_container(cl);
  }
  CONTAINER.classList.toggle(cl, cl === undefined ? false : true);
  // We extract the current size of the container, save them and fix them
  const { width, height, top, left } = CONTAINER.getBoundingClientRect();
  container_rect = { width, height, top, left };
  // We save the current plot size before we pop as it will fill the screen
  const current_plot_size = {
    width: PLOT._fullLayout.width,
    height: PLOT._fullLayout.height,
  };
  // We have to save the pad data before popping so we can resize precisely
  const pad = {};
  pad.unpopped = getSizeData().container_pad;
  CONTAINER.classList.toggle("popped-out", true);
  pad.popped = getSizeData().container_pad;
  // We do top and left based on the current rect
  for (const key of ["top", "left"]) {
    const start_val = target_container_size[key] ?? container_rect[key];
    let offset = 0;
    for (const kind of ["padding", "border"]) {
      offset += pad.popped[kind][key] - pad.unpopped[kind][key];
    }
    CONTAINER.style[key] = start_val - offset + "px";
    if (key === "left") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  // We compute the width and height depending on eventual config data
  const csz = computeContainerSize({
    width:
      target_plot_size.width ??
      config_spans.width.config_value ??
      current_plot_size.width,
    height:
      target_plot_size.height ??
      config_spans.height.config_value ??
      current_plot_size.height,
  });
  for (const key of ["width", "height"]) {
    const val = target_container_size[key] ?? csz[key];
    CONTAINER.style[key] = val + "px";
    if (key === "width") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  CLIPBOARD_HEADER.classList.toggle("hidden", false);
  const controller = new AbortController();

  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        unpop_container();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );
}

CONTAINER.popOut = popout_container;

function DualClick(single_func, dbl_func) {
  let nclicks = 0;
  return function (...args) {
    nclicks += 1;
    if (nclicks > 1) {
      dbl_func(...args);
      nclicks = 0;
    } else {
      delay(300).then(() => {
        if (nclicks == 1) {
          single_func(...args);
        }
        nclicks = 0;
      });
    }
  };
}

// We remove the default download image button
plot_obj.config.modeBarButtonsToRemove = _.union(
  plot_obj.config.modeBarButtonsToRemove,
  ["toImage"]
);
// We add the custom button to the modebar
plot_obj.config.modeBarButtonsToAdd = _.union(
  plot_obj.config.modeBarButtonsToAdd,
  [
    {
      name: "Copy PNG to Clipboard",
      icon: {
        height: 520,
        width: 520,
        path: "M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z",
      },
      direction: "up",
      click: DualClick(copyImageToClipboard, () => {
        popout_container();
      }),
    },
    {
      name: "Download Image",
      icon: Plotly.Icons.camera,
      direction: "up",
      click: DualClick(saveImageToFile, () => {
        popout_container({ cl: "filesave" });
      }),
    },
  ]
);

function getOffsetData(el) {
  let cs = window.getComputedStyle(el, null);
  const odata = {
    padding: {
      left: parseFloat(cs.paddingLeft),
      right: parseFloat(cs.paddingRight),
      top: parseFloat(cs.paddingTop),
      bottom: parseFloat(cs.paddingBottom),
      width: parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight),
      height: parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom),
    },
    border: {
      left: parseFloat(cs.borderLeftWidth),
      right: parseFloat(cs.borderRightWidth),
      top: parseFloat(cs.borderTopWidth),
      bottom: parseFloat(cs.borderBottomWidth),
      width: parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth),
      height: parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth),
    }
  };
  if (el === PLOT) {
    // For the PLOT we also want to take into account the offset
    odata.offset = {
      top: PLOT.offsetParent == CONTAINER ? PLOT.offsetTop : 0,
      left: PLOT.offsetParent == CONTAINER ? PLOT.offsetLeft : 0,
    }
  }
  return odata;
}
function getSizeData() {
  const data = {
    plot_pad: getOffsetData(PLOT),
    plot_rect: PLOT.getBoundingClientRect(),
    container_pad: getOffsetData(CONTAINER),
    container_rect: CONTAINER.getBoundingClientRect(),
  };
  return data;
}
function computeContainerSize({ width, height }, sizeData = getSizeData()) {
  const computed_size = computePlotSize(sizeData);
  const offsets = computed_size.offsets;

  const plot_data = {
    width: width ?? computed_size.width,
    height: height ?? computed_size.height,
  };

  return {
    width: (width ?? computed_size.width) + offsets.width,
    height: (height ?? computed_size.height) + offsets.height,
    noChange: width == computed_size.width && height == computed_size.height,
  }
}

// This function will change the container size so that the resulting plot will be matching the provided specs
function changeContainerSize({ width, height }, sizeData = getSizeData()) {
  if (!CONTAINER.isPoppedOut()) {
    console.log("Tried to change container size when not popped, ignoring");
    return;
  }

  const csz = computeContainerSize({ width, height }, sizeData);

  if (csz.noChange) {
    console.log("Size is the same as current, ignoring");
    return
  }
  // We are now going to set he width and height of the container
  for (const key of ["width", "height"]) {
    CONTAINER.style[key] = csz[key] + "px";
  }
}
// We now create the function that will update the plot based on the values specified
function updateFromHeader() {
  const header_data = {
    height: config_spans.height.ui_value,
    width: config_spans.width.ui_value,
  };
  changeContainerSize(header_data);
}
// We assign this function to the onblur event of width and height
if (firstRun) {
  for (const container of Object.values(config_spans)) {
    container.ui_span.onblur = (e) => {
      container.ui_value = container.ui_span.textContent;
      updateFromHeader();
    };
  }
}
// This function computes the plot size to use for relayout as a function of the container size
function computePlotSize(data = getSizeData()) {
  // Remove Padding
  const { container_pad, plot_pad, container_rect } = data;
  const offsets = {
    width:
      plot_pad.padding.width +
      plot_pad.border.width +
      plot_pad.offset.left +
      container_pad.padding.width +
      container_pad.border.width,
    height:
      plot_pad.padding.height +
      plot_pad.border.height +
      plot_pad.offset.top +
      container_pad.padding.height +
      container_pad.border.height,
  };
  const sz = {
    width: Math.round(container_rect.width - offsets.width),
    height: Math.round(container_rect.height - offsets.height),
    offsets,
  };
  return sz;
}

// Create the resizeObserver to make the plot even more responsive! :magic:
const resizeObserver = new ResizeObserver((entries) => {
  const sizeData = getSizeData();
  const {container_rect, container_pad} = sizeData;
  let plot_size = computePlotSize(sizeData);
  // We save the height in the PLOT object
  PLOT.container_height = container_rect.height;
  // We deal with some stuff if the container is poppped
  CLIPBOARD_HEADER.style.width = container_rect.width + "px";
  CLIPBOARD_HEADER.style.left = container_rect.left + "px";
  config_spans.height.ui_value = plot_size.height;
  config_spans.width.ui_value = plot_size.width;
  /* 
		The addition of the invalid argument `plutoresize` seems to fix the problem with calling `relayout` simply with `{autosize: true}` as update breaking mouse relayout events tracking. 
		See https://github.com/plotly/plotly.js/issues/6156 for details
		*/
  let config = {
    // If this is popped out, we ignore the original width/height
    width: (CONTAINER.isPoppedOut() ? undefined : original_width) ?? plot_size.width,
    height: (CONTAINER.isPoppedOut() ? undefined : original_height) ?? plot_size.height,
    plutoresize: true,
  };
  Plotly.relayout(PLOT, config).then(() => {
    if (remove_container_size && !CONTAINER.isPoppedOut()) {
      // This is needed to avoid the first resize upon plot creation to already be without a fixed height
      CONTAINER.style.height = "";
      CONTAINER.style.width = "";
      remove_container_size = false;
    }
  });
});

resizeObserver.observe(CONTAINER);


Plotly.react(PLOT, plot_obj).then(() => {
	// Assign the Plotly event listeners
	for (const [key, listener_vec] of Object.entries(plotly_listeners)) {
		for (const listener of listener_vec) {
			PLOT.on(key, listener)
		}
	}
	// Assign the JS event listeners
	for (const [key, listener_vec] of Object.entries(js_listeners)) {
		for (const listener of listener_vec) {
			PLOT.addEventListener(key, listener, {
				signal: controller.signal
			})
		}
	}
}
)


invalidation.then(() => {
	// Remove all plotly listeners
	PLOT.removeAllListeners()
	// Remove all JS listeners
	controller.abort()
	// Remove the resizeObserver
	resizeObserver.disconnect()
})



		return CONTAINER
	</script>
</td></tr></table>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš/	Ü/°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$418c045d-90c7-42d8-9126-90185f7e197b¹depends_on_disabled_cellsÂ§runtimeÎ Ý&µpublished_object_keys”Ù5c6e0de0c-3901-11f0-234e-bd09c571f662/317eb0286b9488bcÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/298eb806dc8714d9Ù5c6e0de0c-3901-11f0-234e-bd09c571f662/dd4bace5c1b653a4Ù5c6e0de0c-3901-11f0-234e-bd09c571f662/e97923405a5e6801¸depends_on_skipped_cellsÂ§erroredÂÙ$6979db32-670d-466a-9a6e-97c2d8527f3dŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚp°<div class="markdown"><blockquote>
<h3><em>Exercise 5.7</em></h3>
<p>In learning curves such as those shown in Figure 5.3 error generally decreases with training, as indeed happened for the ordinary importance-sampling method.  But for the weighted importance-sampling method error first increased and then decreased.  Why do you think this happened?</p>
</blockquote>
<p>In figure 5.3, the true value is about -.277 and we initialized the value function at zero.  For any given episode it is likely that the observed return will be -1.0 or 1.0 for a win or a loss.  Weighted importance sampling won&#39;t update the state value for trajectories which cannot occur in the target policy, so for some of the runs at this early state the state value is unchanged at the 0 initial value.  It is only after a certain number of episodes have occured that all of the values will be updated and produce an estimate which is worse than the initial value.  Once many samples with non zero weight are collected for each run, then the estimate starts to approach the true value again.  If instead we initialized the state value far away from the true value, then you would not see the initial increase in estimate error.  See below for an example using an initial value of 1.  In this case, no update from weighted importance sampling would produce an error larger than the initial value.</p>
<h3>Blackjack State Estimate with Bad Initialization</h3>
<p>Weighted importance sampling produces lower error estimates of the value of a single blackjack state from off-policy episodes</p>
	<script id='plot_1'>
		// We start by putting all the variable interpolation here at the beginning
		// We have to convert all typedarrays in the layout to normal arrays. See Issue #25
		// We use lodash for this for compactness
		function removeTypedArray(o) {
			return _.isTypedArray(o) ? Array.from(o) :
			_.isPlainObject(o) ? _.mapValues(o, removeTypedArray) : 
			o
		}

		// Publish the plot object to JS
		let plot_obj = _.update(/* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("c6e0de0c-3901-11f0-234e-bd09c571f662/8998d22fe9cbcd7d"), "layout", removeTypedArray)
		// Get the plotly listeners
		const plotly_listeners = {}
		// Get the JS listeners
		const js_listeners = {}
		// Deal with eventual custom classes
		let custom_classlist = []


		// Load the plotly library
		let Plotly = undefined
		try {
			let _mod = await import("./plotlyjs/plotlyjs-2.26.2.min.js")
			Plotly = _mod.default
		} catch (e) {
			console.log("Local load failed, trying with the web esm.sh version")
			let _mod = await import("https://esm.sh/plotly.js-dist-min@2.26.2/es2022/plotly.js-dist-min.mjs")
			Plotly = _mod.default
		}

		// Check if we have to force local mathjax font cache
		if (false && window?.MathJax?.config?.svg?.fontCache === 'global') {
			window.MathJax.config.svg.fontCache = 'local'
		}

		// Flag to check if this cell was  manually ran or reactively ran
const firstRun = this ? false : true
const CONTAINER = this ?? html`<div class='plutoplotly-container'>`
const PLOT = CONTAINER.querySelector('.js-plotly-plot') ?? CONTAINER.appendChild(html`<div>`)
const parent = CONTAINER.parentElement
// We use a controller to remove event listeners upon invalidation
const controller = new AbortController()
// We have to add this to keep supporting @bind with the old API using PLOT
PLOT.addEventListener('input', (e) => {
	CONTAINER.value = PLOT.value
	if (e.bubbles) {
		return
	}
	CONTAINER.dispatchEvent(new CustomEvent('input'))
}, { signal: controller.signal })

	// This create the style subdiv on first run
	firstRun && CONTAINER.appendChild(html`
	<style>
	.plutoplotly-container {
		width: 100%;
		height: 100%;
		min-height: 0;
		min-width: 0;
	}
	.plutoplotly-container .js-plotly-plot .plotly div {
		margin: 0 auto; // This centers the plot
	}
	.plutoplotly-container.popped-out {
		overflow: auto;
		z-index: 1000;
		position: fixed;
		resize: both;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		border-top-left-radius: 0px;
		border-top-right-radius: 0px;
	}
	.plutoplotly-clipboard-header {
		display: flex;
		flex-flow: row wrap;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-top-left-radius: 12px;
		border-top-right-radius: 12px;
		position: fixed;
		z-index: 1001;
		cursor: move;
		transform: translate(0px, -100%);
		padding: 5px;
	}
	.plutoplotly-clipboard-header span {
		display: inline-block;
		flex: 1
	}
	.plutoplotly-clipboard-header.hidden {
		display: none;
	}
	.clipboard-span {
		position: relative;
	}
	.clipboard-value {
		padding-right: 5px;
		padding-left: 2px;
		cursor: text;
	}
	.clipboard-span.format {
		display: none;
	}
	.clipboard-span.filename {
		flex: 0 0 100%;
		text-align: center;
		border-top: 3px solid var(--kbd-border-color);
		margin-top: 5px;
		display: none;
	}
	.plutoplotly-container.filesave .clipboard-span.filename {
		display: inline-block;
	}
	.clipboard-value.filename {
		margin-left: 3px;
		text-align: left;
		min-width: min(60%, min-content);
	}
	.plutoplotly-container.filesave .clipboard-span.format {
		display: inline-flex;
	}
	.clipboard-span.format .label {
		flex: 0 0 0;
	}
	.clipboard-value.format {
		position: relative;
		flex: 1 0 auto;
		min-width: 30px;
		margin-right: 10px;
	}
	div.format-options {
		display: inline-flex;
		flex-flow: column;
		position: absolute;
		background: var(--main-bg-color);
		border-radius: 12px;
		padding-left: 3px;
		z-index: 2000;
	}
	div.format-options:hover {
		cursor: pointer;
		border: 3px solid var(--kbd-border-color);
		padding: 3px;
		transform: translate(-3px, -6px);
	}
	div.format-options .format-option {
		display: none;
	}
	div.format-options:hover .format-option {
		display: inline-block;
	}
	.format-option:not(.selected) {
		margin-top: 3px;
	}
	div.format-options .format-option.selected {
		order: -1;
		display: inline-block;
	}
	.format-option:hover {
		background-color: var(--kbd-border-color);
	}
	span.config-value {
		font-weight: normal;
		color: var(--pluto-output-color);
		display: none;
		position: absolute;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		transform: translate(0px, calc(-100% - 10px));
		padding: 5px;
	}
	.label {
		user-select: none;
	}
	.label:hover span.config-value {
		display: inline-block;
		min-width: 150px;
	}
	.clipboard-span.matching-config .label {
		color: var(--cm-macro-color);
		font-weight: bold;
	}
	.clipboard-span.different-config .label {
		color: var(--cm-tag-color);
		font-weight: bold;
	}
</style>
`)

let original_height = plot_obj.layout.height
let original_width = plot_obj.layout.width
// For the height we have to also put a fixed value in case the plot is put on a non-fixed-size container (like the default wrapper)
// We define a variable to check whether we still have to remove the fixed height
let remove_container_size = firstRun
let container_height = original_height ?? PLOT.container_height ?? 400
CONTAINER.style.height = container_height + 'px'

// We create a Promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// We import interact for dragging/resizing
const { default: interact } = await import('https://esm.sh/interactjs@1.10.19')


function getImageOptions() {
  const o = plot_obj.config.toImageButtonOptions ?? {};
  return {
    format: o.format ?? "png",
    width: o.width ?? original_width,
    height: o.height ?? original_height,
    scale: o.scale ?? 1,
    filename: o.filename ?? "newplot",
  };
}

const CLIPBOARD_HEADER =
  CONTAINER.querySelector(".plutoplotly-clipboard-header") ??
  CONTAINER.insertAdjacentElement(
    "afterbegin",
    html`<div class="plutoplotly-clipboard-header hidden">
      <span class="clipboard-span format"
        ><span class="label">Format:</span
        ><span class="clipboard-value format"></span
      ></span>
      <span class="clipboard-span width"
        ><span class="label">Width:</span
        ><span class="clipboard-value width"></span>px</span
      >
      <span class="clipboard-span height"
        ><span class="label">Height:</span
        ><span class="clipboard-value height"></span>px</span
      >
      <span class="clipboard-span scale"
        ><span class="label">Scale:</span
        ><span class="clipboard-value scale"></span
      ></span>
      <button class="clipboard-span set">Set</button>
      <button class="clipboard-span unset">Unset</button>
      <span class="clipboard-span filename"
        ><span class="label">Filename:</span
        ><span class="clipboard-value filename"></span
      ></span>
    </div>`
  );

function checkConfigSync(container) {
  const valid_classes = [
    "missing-config",
    "matching-config",
    "different-config",
  ];
  function setClass(cl) {
    for (const name of valid_classes) {
      container.classList.toggle(name, name == cl);
    }
  }
  // We use the custom getters we'll set up in the container
  const { ui_value, config_value, config_span, key } = container;
  if (config_value === undefined) {
    setClass("missing-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> is not present in the config.`;
  } else if (ui_value == config_value) {
    setClass("matching-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has the same value in the config and in the header.`;
  } else {
    setClass("different-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has a different value (<em>${config_value}</em>) in the config.`;
  }
  // Add info about setting and unsetting
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click on the label <em><b>once</b></em> to set the current UI value in the config.`
  );
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click <em><b>twice</b></em> to remove this key from the config.`
  );
}

const valid_formats = ["png", "svg", "webp", "jpeg", "full-json"];
function initializeUIValueSpan(span, key, value) {
  const container = span.closest(".clipboard-span");
  span.contentEditable = key === "format" ? "false" : "true";
  let parse = (x) => x;
  let update = (x) => (span.textContent = x);
  if (key === "width" || key === "height") {
    parse = (x) => Math.round(parseFloat(x));
  } else if (key === "scale") {
    parse = parseFloat;
  } else if (key === "format") {
    // We remove contentEditable
    span.contentEditable = "false";
    // Here we first add the subspans for each option
    const opts_div = span.appendChild(html`<div class="format-options"></div>`);
    for (const fmt of valid_formats) {
      const opt = opts_div.appendChild(
        html`<span class="format-option ${fmt}">${fmt}</span>`
      );
      opt.onclick = (e) => {
        span.value = opt.textContent;
      };
    }
    parse = (x) => {
      return valid_formats.includes(x) ? x : localValue;
    };
    update = (x) => {
      for (const opt of opts_div.children) {
        opt.classList.toggle("selected", opt.textContent === x);
      }
    };
  } else {
    // We only have filename here
  }
  let localValue;
  Object.defineProperty(span, "value", {
    get: () => {
      return localValue;
    },
    set: (val) => {
      if (val !== "") {
        localValue = parse(val);
      }
      update(localValue);
      checkConfigSync(container);
    },
  });
  // We also assign a listener so that the editable is blurred when enter is pressed
  span.onkeydown = (e) => {
    if (e.keyCode === 13) {
      e.preventDefault();
      span.blur();
    }
  };
  span.value = value;
}

function initializeConfigValueSpan(span, key) {
  // Here we mostly want to define the setter and getter
  const container = span.closest(".clipboard-span");
  Object.defineProperty(span, "value", {
    get: () => {
      return plot_obj.config.toImageButtonOptions[key];
    },
    set: (val) => {
      // if undefined is passed, we remove the entry from the options
      if (val === undefined) {
        delete plot_obj.config.toImageButtonOptions[key];
      } else {
        plot_obj.config.toImageButtonOptions[key] = val;
      }
      checkConfigSync(container);
    },
  });
}

const config_spans = {};
for (const [key, value] of Object.entries(getImageOptions())) {
  const container = CLIPBOARD_HEADER.querySelector(`.clipboard-span.${key}`);
  const label = container.querySelector(".label");
  // We give the label a function that on single click will set the current value and with double click will unset it
  label.onclick = DualClick(
    () => {
      container.config_value = container.ui_value;
    },
    (e) => {
      console.log("e", e);
      e.preventDefault();
      container.config_value = undefined;
    }
  );
  const ui_value_span = container.querySelector(".clipboard-value");
  const config_value_span =
    container.querySelector(".config-value") ??
    label.insertAdjacentElement(
      "afterbegin",
      html`<span class="config-value"></span>`
    );
  // Assing the two spans as properties of the containing span
  container.ui_span = ui_value_span;
  container.config_span = config_value_span;
  container.key = key;
  config_spans[key] = container;
  if (firstRun) {
    plot_obj.config.toImageButtonOptions =
      plot_obj.config.toImageButtonOptions ?? {};
    // We do the initialization of the value span
    initializeUIValueSpan(ui_value_span, key, value);
    // Then we initialize the config value
    initializeConfigValueSpan(config_value_span, key);
    // We put some convenience getters/setters
    // ui_value forward
    Object.defineProperty(container, "ui_value", {
      get: () => ui_value_span.value,
      set: (val) => {
        ui_value_span.value = val;
      },
    });
    // config_value forward
    Object.defineProperty(container, "config_value", {
      get: () => config_value_span.value,
      set: (val) => {
        config_value_span.value = val;
      },
    });
  }
}

// These objects will contain the default value

// This code updates the image options in the PLOT config with the provided ones
function setImageOptions(o) {
  for (const [key, container] of Object.entries(config_spans)) {
    container.config_value = o[key];
  }
}
function unsetImageOptions() {
  setImageOptions({});
}

const set_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.set");
const unset_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.unset");
if (firstRun) {
  set_button.onclick = (e) => {
    for (const container of Object.values(config_spans)) {
      container.config_value = container.ui_value;
    }
  };
  unset_button.onclick = unsetImageOptions;
}

// We add a function to check if the clipboard is popped out
CONTAINER.isPoppedOut = () => {
  return CONTAINER.classList.contains("popped-out");
};

CLIPBOARD_HEADER.onmousedown = function (event) {
  if (event.target.matches("span.clipboard-value")) {
    console.log("We don't move!");
    return;
  }
  const start = {
    left: parseFloat(CONTAINER.style.left),
    top: parseFloat(CONTAINER.style.top),
    X: event.pageX,
    Y: event.pageY,
  };
  function moveAt(event, start) {
    const top = event.pageY - start.Y + start.top + "px";
    const left = event.pageX - start.X + start.left + "px";
    CLIPBOARD_HEADER.style.left = left;
    CONTAINER.style.left = left;
    CONTAINER.style.top = top;
  }

  // move our absolutely positioned ball under the pointer
  moveAt(event, start);
  function onMouseMove(event) {
    moveAt(event, start);
  }

  // We use this to remove the mousemove when clicking outside of the container
  const controller = new AbortController();

  // move the container on mousemove
  document.addEventListener("mousemove", onMouseMove, {
    signal: controller.signal,
  });
  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        cleanUp();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );

  function cleanUp() {
    console.log("cleaning up the plot move listener");
    controller.abort();
    CLIPBOARD_HEADER.onmouseup = null;
  }

  // (3) drop the ball, remove unneeded handlers
  CLIPBOARD_HEADER.onmouseup = cleanUp;
};

function sendToClipboard(blob) {
  if (!navigator.clipboard) {
    alert(
      "The Clipboard API does not seem to be available, make sure the Pluto notebook is being used from either localhost or an https source."
    );
  }
  navigator.clipboard
    .write([
      new ClipboardItem({
        // The key is determined dynamically based on the blob's type.
        [blob.type]: blob,
      }),
    ])
    .then(
      function () {
        console.log("Async: Copying to clipboard was successful!");
      },
      function (err) {
        console.error("Async: Could not copy text: ", err);
      }
    );
}

function copyImageToClipboard() {
  // We extract the image options from the provided parameters (if they exist)
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key. We also ignore format because the clipboard only supports png.
    if (val === undefined || key === "format") {
      continue;
    }
    config[key] = val;
  }
  Plotly.toImage(PLOT, config).then(function (dataUrl) {
    fetch(dataUrl)
      .then((res) => res.blob())
      .then((blob) => {
        const paste_receiver = document.querySelector('paste-receiver.plutoplotly')
        if (paste_receiver) {
          paste_receiver.attachImage(dataUrl, CONTAINER)
        }
        sendToClipboard(blob)
      });
  });
}

function saveImageToFile() {
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key.
    if (val === undefined) {
      continue;
    }
    config[key] = val;
  }
  Plotly.downloadImage(PLOT, config);
}

let container_rect = { width: 0, height: 0, top: 0, left: 0 };
function unpop_container(cl) {
  CONTAINER.classList.toggle("popped-out", false);
  CONTAINER.classList.toggle(cl, false);
  // We fix the height back to the value it had before popout, also setting the flag to signal that upon first resize we remove the fixed inline-style
  CONTAINER.style.height = container_rect.height + "px";
  remove_container_size = true;
  // We set the other fixed inline-styles to null
  CONTAINER.style.width = "";
  CONTAINER.style.top = "";
  CONTAINER.style.left = "";
  // We also remove the CLIPBOARD_HEADER
  CLIPBOARD_HEADER.style.width = "";
  CLIPBOARD_HEADER.style.left = "";
  // Finally we remove the hidden class to the header
  CLIPBOARD_HEADER.classList.toggle("hidden", true);
  return;
}
function popout_container(opts) {
  const cl = opts?.cl;
  const target_container_size = opts?.target_container_size ?? {};
  const target_plot_size = opts?.target_plot_size ?? {};
  if (CONTAINER.isPoppedOut()) {
    return unpop_container(cl);
  }
  CONTAINER.classList.toggle(cl, cl === undefined ? false : true);
  // We extract the current size of the container, save them and fix them
  const { width, height, top, left } = CONTAINER.getBoundingClientRect();
  container_rect = { width, height, top, left };
  // We save the current plot size before we pop as it will fill the screen
  const current_plot_size = {
    width: PLOT._fullLayout.width,
    height: PLOT._fullLayout.height,
  };
  // We have to save the pad data before popping so we can resize precisely
  const pad = {};
  pad.unpopped = getSizeData().container_pad;
  CONTAINER.classList.toggle("popped-out", true);
  pad.popped = getSizeData().container_pad;
  // We do top and left based on the current rect
  for (const key of ["top", "left"]) {
    const start_val = target_container_size[key] ?? container_rect[key];
    let offset = 0;
    for (const kind of ["padding", "border"]) {
      offset += pad.popped[kind][key] - pad.unpopped[kind][key];
    }
    CONTAINER.style[key] = start_val - offset + "px";
    if (key === "left") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  // We compute the width and height depending on eventual config data
  const csz = computeContainerSize({
    width:
      target_plot_size.width ??
      config_spans.width.config_value ??
      current_plot_size.width,
    height:
      target_plot_size.height ??
      config_spans.height.config_value ??
      current_plot_size.height,
  });
  for (const key of ["width", "height"]) {
    const val = target_container_size[key] ?? csz[key];
    CONTAINER.style[key] = val + "px";
    if (key === "width") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  CLIPBOARD_HEADER.classList.toggle("hidden", false);
  const controller = new AbortController();

  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        unpop_container();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );
}

CONTAINER.popOut = popout_container;

function DualClick(single_func, dbl_func) {
  let nclicks = 0;
  return function (...args) {
    nclicks += 1;
    if (nclicks > 1) {
      dbl_func(...args);
      nclicks = 0;
    } else {
      delay(300).then(() => {
        if (nclicks == 1) {
          single_func(...args);
        }
        nclicks = 0;
      });
    }
  };
}

// We remove the default download image button
plot_obj.config.modeBarButtonsToRemove = _.union(
  plot_obj.config.modeBarButtonsToRemove,
  ["toImage"]
);
// We add the custom button to the modebar
plot_obj.config.modeBarButtonsToAdd = _.union(
  plot_obj.config.modeBarButtonsToAdd,
  [
    {
      name: "Copy PNG to Clipboard",
      icon: {
        height: 520,
        width: 520,
        path: "M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z",
      },
      direction: "up",
      click: DualClick(copyImageToClipboard, () => {
        popout_container();
      }),
    },
    {
      name: "Download Image",
      icon: Plotly.Icons.camera,
      direction: "up",
      click: DualClick(saveImageToFile, () => {
        popout_container({ cl: "filesave" });
      }),
    },
  ]
);

function getOffsetData(el) {
  let cs = window.getComputedStyle(el, null);
  const odata = {
    padding: {
      left: parseFloat(cs.paddingLeft),
      right: parseFloat(cs.paddingRight),
      top: parseFloat(cs.paddingTop),
      bottom: parseFloat(cs.paddingBottom),
      width: parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight),
      height: parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom),
    },
    border: {
      left: parseFloat(cs.borderLeftWidth),
      right: parseFloat(cs.borderRightWidth),
      top: parseFloat(cs.borderTopWidth),
      bottom: parseFloat(cs.borderBottomWidth),
      width: parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth),
      height: parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth),
    }
  };
  if (el === PLOT) {
    // For the PLOT we also want to take into account the offset
    odata.offset = {
      top: PLOT.offsetParent == CONTAINER ? PLOT.offsetTop : 0,
      left: PLOT.offsetParent == CONTAINER ? PLOT.offsetLeft : 0,
    }
  }
  return odata;
}
function getSizeData() {
  const data = {
    plot_pad: getOffsetData(PLOT),
    plot_rect: PLOT.getBoundingClientRect(),
    container_pad: getOffsetData(CONTAINER),
    container_rect: CONTAINER.getBoundingClientRect(),
  };
  return data;
}
function computeContainerSize({ width, height }, sizeData = getSizeData()) {
  const computed_size = computePlotSize(sizeData);
  const offsets = computed_size.offsets;

  const plot_data = {
    width: width ?? computed_size.width,
    height: height ?? computed_size.height,
  };

  return {
    width: (width ?? computed_size.width) + offsets.width,
    height: (height ?? computed_size.height) + offsets.height,
    noChange: width == computed_size.width && height == computed_size.height,
  }
}

// This function will change the container size so that the resulting plot will be matching the provided specs
function changeContainerSize({ width, height }, sizeData = getSizeData()) {
  if (!CONTAINER.isPoppedOut()) {
    console.log("Tried to change container size when not popped, ignoring");
    return;
  }

  const csz = computeContainerSize({ width, height }, sizeData);

  if (csz.noChange) {
    console.log("Size is the same as current, ignoring");
    return
  }
  // We are now going to set he width and height of the container
  for (const key of ["width", "height"]) {
    CONTAINER.style[key] = csz[key] + "px";
  }
}
// We now create the function that will update the plot based on the values specified
function updateFromHeader() {
  const header_data = {
    height: config_spans.height.ui_value,
    width: config_spans.width.ui_value,
  };
  changeContainerSize(header_data);
}
// We assign this function to the onblur event of width and height
if (firstRun) {
  for (const container of Object.values(config_spans)) {
    container.ui_span.onblur = (e) => {
      container.ui_value = container.ui_span.textContent;
      updateFromHeader();
    };
  }
}
// This function computes the plot size to use for relayout as a function of the container size
function computePlotSize(data = getSizeData()) {
  // Remove Padding
  const { container_pad, plot_pad, container_rect } = data;
  const offsets = {
    width:
      plot_pad.padding.width +
      plot_pad.border.width +
      plot_pad.offset.left +
      container_pad.padding.width +
      container_pad.border.width,
    height:
      plot_pad.padding.height +
      plot_pad.border.height +
      plot_pad.offset.top +
      container_pad.padding.height +
      container_pad.border.height,
  };
  const sz = {
    width: Math.round(container_rect.width - offsets.width),
    height: Math.round(container_rect.height - offsets.height),
    offsets,
  };
  return sz;
}

// Create the resizeObserver to make the plot even more responsive! :magic:
const resizeObserver = new ResizeObserver((entries) => {
  const sizeData = getSizeData();
  const {container_rect, container_pad} = sizeData;
  let plot_size = computePlotSize(sizeData);
  // We save the height in the PLOT object
  PLOT.container_height = container_rect.height;
  // We deal with some stuff if the container is poppped
  CLIPBOARD_HEADER.style.width = container_rect.width + "px";
  CLIPBOARD_HEADER.style.left = container_rect.left + "px";
  config_spans.height.ui_value = plot_size.height;
  config_spans.width.ui_value = plot_size.width;
  /* 
		The addition of the invalid argument `plutoresize` seems to fix the problem with calling `relayout` simply with `{autosize: true}` as update breaking mouse relayout events tracking. 
		See https://github.com/plotly/plotly.js/issues/6156 for details
		*/
  let config = {
    // If this is popped out, we ignore the original width/height
    width: (CONTAINER.isPoppedOut() ? undefined : original_width) ?? plot_size.width,
    height: (CONTAINER.isPoppedOut() ? undefined : original_height) ?? plot_size.height,
    plutoresize: true,
  };
  Plotly.relayout(PLOT, config).then(() => {
    if (remove_container_size && !CONTAINER.isPoppedOut()) {
      // This is needed to avoid the first resize upon plot creation to already be without a fixed height
      CONTAINER.style.height = "";
      CONTAINER.style.width = "";
      remove_container_size = false;
    }
  });
});

resizeObserver.observe(CONTAINER);


Plotly.react(PLOT, plot_obj).then(() => {
	// Assign the Plotly event listeners
	for (const [key, listener_vec] of Object.entries(plotly_listeners)) {
		for (const listener of listener_vec) {
			PLOT.on(key, listener)
		}
	}
	// Assign the JS event listeners
	for (const [key, listener_vec] of Object.entries(js_listeners)) {
		for (const listener of listener_vec) {
			PLOT.addEventListener(key, listener, {
				signal: controller.signal
			})
		}
	}
}
)


invalidation.then(() => {
	// Remove all plotly listeners
	PLOT.removeAllListeners()
	// Remove all JS listeners
	controller.abort()
	// Remove the resizeObserver
	resizeObserver.disconnect()
})



		return CONTAINER
	</script>


</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš-F›g°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$6979db32-670d-466a-9a6e-97c2d8527f3d¹depends_on_disabled_cellsÂ§runtimeÎ?m"µpublished_object_keys‘Ù5c6e0de0c-3901-11f0-234e-bd09c571f662/8998d22fe9cbcd7d¸depends_on_skipped_cellsÂ§erroredÂÙ$cd928f87-2832-4595-8ce5-79b69cc56bd9Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙg<div class="markdown"><h4>Figure 5.5</h4>
<p>A couple of right turns for the racetrack task.</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"*&g°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$cd928f87-2832-4595-8ce5-79b69cc56bd9¹depends_on_disabled_cellsÂ§runtimeÎ �¿µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$ba044e4f-e2a6-4f96-8756-5b24b1bb5ca2Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÛ *á<div style = "display: flex; align-items: flex-end;">
<div>
Race finished in 10643 steps
<div style="background-color: white; color: black;">
	<div style="display:flex; align-items: flex-start">
	<div class = "track">
		<div class = "start" vx = "0" vy = "0" dvx = "0" dvy = "1" style="grid-column-start: 4; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "0" dvy = "0" style="grid-column-start: 8; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 9; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "0" dvy = "-1" style="grid-column-start: 6; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 7; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 5; grid-row-start: 1;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 5;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 6; grid-row-start: 27;"></div><div class = "" vx = "1" vy = "3" dvx = "1" dvy = "1" style="grid-column-start: 9; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 23;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "1" style="grid-column-start: 4; grid-row-start: 18;"></div><div class = "" vx = "2" vy = "3" dvx = "-1" dvy = "1" style="grid-column-start: 10; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 22;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 8; grid-row-start: 24;"></div><div class = "" vx = "0" vy = "4" dvx = "0" dvy = "0" style="grid-column-start: 7; grid-row-start: 14;"></div><div class = "" vx = "1" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 10; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 27;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "1" style="grid-column-start: 5; grid-row-start: 11;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 7; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 31;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 11; grid-row-start: 29;"></div><div class = "" vx = "1" vy = "3" dvx = "1" dvy = "1" style="grid-column-start: 6; grid-row-start: 30;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "0" style="grid-column-start: 6; grid-row-start: 13;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "-1" style="grid-column-start: 8; grid-row-start: 15;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 11;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "0" style="grid-column-start: 4; grid-row-start: 24;"></div><div class = "" vx = "1" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 7; grid-row-start: 7;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 8; grid-row-start: 17;"></div><div class = "" vx = "0" vy = "4" dvx = "0" dvy = "1" style="grid-column-start: 6; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 30;"></div><div class = "" vx = "1" vy = "4" dvx = "0" dvy = "-1" style="grid-column-start: 5; grid-row-start: 22;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 6; grid-row-start: 20;"></div><div class = "" vx = "1" vy = "3" dvx = "0" dvy = "-1" style="grid-column-start: 5; grid-row-start: 12;"></div><div class = "" vx = "2" vy = "0" dvx = "0" dvy = "-1" style="grid-column-start: 13; grid-row-start: 32;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "-1" style="grid-column-start: 8; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 26;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 9; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 23;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 4; grid-row-start: 15;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 12;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 12; grid-row-start: 32;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 16;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 4; grid-row-start: 17;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "0" style="grid-column-start: 6; grid-row-start: 19;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 6; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 25;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "-1" style="grid-column-start: 5; grid-row-start: 5;"></div><div class = "" vx = "1" vy = "3" dvx = "1" dvy = "-1" style="grid-column-start: 6; grid-row-start: 26;"></div><div class = "" vx = "1" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 6; grid-row-start: 8;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "-1" style="grid-column-start: 8; grid-row-start: 29;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "0" style="grid-column-start: 5; grid-row-start: 23;"></div><div class = "" vx = "1" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 9; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 29;"></div><div class = "" vx = "1" vy = "2" dvx = "-1" dvy = "0" style="grid-column-start: 7; grid-row-start: 18;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 30;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 6; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 29;"></div><div class = "" vx = "1" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 10; grid-row-start: 28;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "0" style="grid-column-start: 5; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 13;"></div><div class = "" vx = "1" vy = "4" dvx = "-1" dvy = "0" style="grid-column-start: 8; grid-row-start: 11;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 6; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 24;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 9; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 20;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 6; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 7; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 27;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "1" style="grid-column-start: 6; grid-row-start: 28;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 6; grid-row-start: 3;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 8; grid-row-start: 22;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 4; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 9;"></div><div class = "" vx = "0" vy = "4" dvx = "0" dvy = "-1" style="grid-column-start: 8; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 28;"></div><div class = "" vx = "3" vy = "3" dvx = "0" dvy = "0" style="grid-column-start: 11; grid-row-start: 31;"></div><div class = "" vx = "1" vy = "3" dvx = "1" dvy = "0" style="grid-column-start: 7; grid-row-start: 15;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 26;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "0" style="grid-column-start: 5; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 25;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "-1" style="grid-column-start: 6; grid-row-start: 6;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "0" style="grid-column-start: 4; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 13;"></div><div class = "" vx = "0" vy = "4" dvx = "0" dvy = "1" style="grid-column-start: 7; grid-row-start: 25;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "0" style="grid-column-start: 4; grid-row-start: 12;"></div><div class = "" vx = "0" vy = "4" dvx = "0" dvy = "1" style="grid-column-start: 9; grid-row-start: 27;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 8; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 20;"></div><div class = "" vx = "1" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 8; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 10;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 6; grid-row-start: 14;"></div><div class = "" vx = "0" vy = "4" dvx = "-1" dvy = "-1" style="grid-column-start: 5; grid-row-start: 30;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 5; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 19;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 4; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 27;"></div><div class = "" vx = "0" vy = "4" dvx = "-1" dvy = "0" style="grid-column-start: 7; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 32;"></div><div class = "" vx = "1" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 6; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "-1" style="grid-column-start: 8; grid-row-start: 31;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "-1" style="grid-column-start: 9; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 23;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 5; grid-row-start: 20;"></div><div class = "" vx = "1" vy = "3" dvx = "1" dvy = "1" style="grid-column-start: 9; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 31;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "0" style="grid-column-start: 9; grid-row-start: 32;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 6; grid-row-start: 7;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 9; grid-row-start: 20;"></div><div class = "" vx = "1" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 14; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 29;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 5; grid-row-start: 19;"></div><div class = "" vx = "1" vy = "3" dvx = "1" dvy = "1" style="grid-column-start: 5; grid-row-start: 9;"></div><div class = "" vx = "0" vy = "4" dvx = "0" dvy = "1" style="grid-column-start: 4; grid-row-start: 31;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 11; grid-row-start: 30;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 6;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 6; grid-row-start: 16;"></div><div class = "" vx = "2" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 9;"></div><div class = "" vx = "1" vy = "4" dvx = "-1" dvy = "1" style="grid-column-start: 9; grid-row-start: 19;"></div><div class = "" vx = "1" vy = "0" dvx = "1" dvy = "0" style="grid-column-start: 11; grid-row-start: 32;"></div><div class = "" vx = "0" vy = "4" dvx = "0" dvy = "1" style="grid-column-start: 5; grid-row-start: 26;"></div><div class = "" vx = "1" vy = "2" dvx = "1" dvy = "-1" style="grid-column-start: 5; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 22;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 7; grid-row-start: 22;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "-1" style="grid-column-start: 8; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 9; grid-row-start: 26;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 8;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 7; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 14;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 5; grid-row-start: 10;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "1" style="grid-column-start: 6; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 27;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "1" style="grid-column-start: 4; grid-row-start: 27;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 5; grid-row-start: 4;"></div><div class = "" vx = "1" vy = "2" dvx = "-1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 10;"></div><div class = "" vx = "0" vy = "4" dvx = "0" dvy = "-1" style="grid-column-start: 5; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 7; grid-row-start: 5;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "0" style="grid-column-start: 8; grid-row-start: 30;"></div><div class = "" vx = "1" vy = "3" dvx = "0" dvy = "1" style="grid-column-start: 8; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 7;"></div><div class = "" vx = "1" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 9; grid-row-start: 4;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 8; grid-row-start: 32;"></div><div class = "" vx = "1" vy = "3" dvx = "0" dvy = "1" style="grid-column-start: 7; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 30;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 5; grid-row-start: 28;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 5; grid-row-start: 3;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "-1" style="grid-column-start: 8; grid-row-start: 20;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 6; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 30;"></div><div class = "" vx = "2" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 15; grid-row-start: 32;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 9; grid-row-start: 28;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 9; grid-row-start: 3;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "-1" style="grid-column-start: 4; grid-row-start: 30;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 14; grid-row-start: 32;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 4; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 16;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 7; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 14;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "0" style="grid-column-start: 4; grid-row-start: 32;"></div><div class = "" vx = "1" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 5; grid-row-start: 6;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "1" style="grid-column-start: 8; grid-row-start: 19;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "1" style="grid-column-start: 8; grid-row-start: 9;"></div><div class = "" vx = "1" vy = "2" dvx = "1" dvy = "-1" style="grid-column-start: 6; grid-row-start: 15;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "-1" style="grid-column-start: 4; grid-row-start: 20;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "0" style="grid-column-start: 6; grid-row-start: 17;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 9; grid-row-start: 6;"></div><div class = "" vx = "1" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 11; grid-row-start: 28;"></div><div class = "" vx = "0" vy = "4" dvx = "0" dvy = "0" style="grid-column-start: 8; grid-row-start: 26;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "1" style="grid-column-start: 8; grid-row-start: 8;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "0" style="grid-column-start: 6; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 31;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 4; grid-row-start: 19;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "0" style="grid-column-start: 4; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 18;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 10; grid-row-start: 29;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 5; grid-row-start: 14;"></div><div class = "" vx = "1" vy = "0" dvx = "1" dvy = "1" style="grid-column-start: 5; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 27;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 4; grid-row-start: 8;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 8; grid-row-start: 10;"></div><div class = "" vx = "1" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 9; grid-row-start: 14;"></div><div class = "" vx = "1" vy = "4" dvx = "0" dvy = "1" style="grid-column-start: 7; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 16;"></div><div class = "" vx = "2" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 9; grid-row-start: 2;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 6; grid-row-start: 29;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "1" style="grid-column-start: 5; grid-row-start: 7;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 8; grid-row-start: 4;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "0" style="grid-column-start: 8; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 29;"></div><div class = "" vx = "2" vy = "3" dvx = "1" dvy = "0" style="grid-column-start: 9; grid-row-start: 7;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 4; grid-row-start: 10;"></div><div class = "" vx = "2" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 8; grid-row-start: 28;"></div><div class = "" vx = "1" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 8; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 18;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 7; grid-row-start: 30;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 5; grid-row-start: 16;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "-1" style="grid-column-start: 4; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 15;"></div><div class = "" vx = "2" vy = "4" dvx = "0" dvy = "-1" style="grid-column-start: 7; grid-row-start: 13;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "1" style="grid-column-start: 4; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 17;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 6; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 28;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 7; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 20;"></div><div class = "" vx = "1" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 9; grid-row-start: 16;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "0" style="grid-column-start: 7; grid-row-start: 20;"></div><div class = "" vx = "1" vy = "2" dvx = "-1" dvy = "1" style="grid-column-start: 8; grid-row-start: 6;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "-1" style="grid-column-start: 4; grid-row-start: 28;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 4; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 25;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "1" style="grid-column-start: 6; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 19;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "0" style="grid-column-start: 5; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 24;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 6; grid-row-start: 12;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 7; grid-row-start: 19;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 32;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 4; grid-row-start: 6;"></div><div class = "" vx = "2" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 26;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 8; grid-row-start: 14;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 7; grid-row-start: 26;"></div><div class = "" vx = "2" vy = "2" dvx = "0" dvy = "-1" style="grid-column-start: 7; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 29;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 8; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 17;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 6; grid-row-start: 5;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "0" style="grid-column-start: 5; grid-row-start: 24;"></div><div class = "" vx = "2" vy = "4" dvx = "0" dvy = "0" style="grid-column-start: 10; grid-row-start: 31;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "-1" style="grid-column-start: 8; grid-row-start: 7;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 4; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 25;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "-1" style="grid-column-start: 6; grid-row-start: 23;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "0" style="grid-column-start: 9; grid-row-start: 24;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 7; grid-row-start: 10;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 4; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 11;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 5; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 21;"></div><div class = "" vx = "1" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 7; grid-row-start: 4;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "1" style="grid-column-start: 5; grid-row-start: 17;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "1" style="grid-column-start: 7; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 6; grid-row-start: 31;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 4; grid-row-start: 7;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 8; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 28;"></div><div class = "" vx = "1" vy = "3" dvx = "1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 15;"></div><div class = "" vx = "0" vy = "4" dvx = "-1" dvy = "-1" style="grid-column-start: 5; grid-row-start: 25;"></div><div class = "" vx = "1" vy = "4" dvx = "-1" dvy = "0" style="grid-column-start: 9; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 29;"></div><div class = "" vx = "1" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 13; grid-row-start: 31;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 7; grid-row-start: 28;"></div><div class = "" vx = "2" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 12;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 27;"></div><div class = "" vx = "1" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 12; grid-row-start: 31;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "-1" style="grid-column-start: 4; grid-row-start: 16;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "1" style="grid-column-start: 8; grid-row-start: 18;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 7; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 28;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 28;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 29;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 31;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 30;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 27;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 32;"></div>
	</div>
	Finish <br> line
	</div>
	<div>Starting line</div>
</div>
</div>

<div>
Race finished in 582 steps
<div style="background-color: white; color: black;">
	<div style="display:flex; align-items: flex-start">
	<div class = "track">
		<div class = "start" vx = "0" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 8; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "0" dvy = "-1" style="grid-column-start: 5; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 14; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "0" dvy = "-1" style="grid-column-start: 16; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 3; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "0" dvy = "0" style="grid-column-start: 11; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "1" dvy = "0" style="grid-column-start: 19; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "1" dvy = "1" style="grid-column-start: 22; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 6; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 17; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 21; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "1" dvy = "1" style="grid-column-start: 13; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "1" dvy = "1" style="grid-column-start: 9; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "1" dvy = "1" style="grid-column-start: 18; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 2; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "0" dvy = "0" style="grid-column-start: 20; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 1; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "0" dvy = "1" style="grid-column-start: 23; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "0" dvy = "0" style="grid-column-start: 7; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "0" dvy = "0" style="grid-column-start: 12; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 10; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "0" dvy = "-1" style="grid-column-start: 15; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "1" dvy = "0" style="grid-column-start: 4; grid-row-start: 1;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 29;"></div><div class = "" vx = "1" vy = "0" dvx = "0" dvy = "1" style="grid-column-start: 18; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 17;"></div><div class = "" vx = "1" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 20; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 25;"></div><div class = "" vx = "1" vy = "2" dvx = "-1" dvy = "0" style="grid-column-start: 23; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 19;"></div><div class = "" vx = "1" vy = "0" dvx = "0" dvy = "1" style="grid-column-start: 19; grid-row-start: 9;"></div><div class = "" vx = "2" vy = "2" dvx = "-1" dvy = "0" style="grid-column-start: 27; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 26;"></div><div class = "" vx = "2" vy = "3" dvx = "-1" dvy = "1" style="grid-column-start: 21; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 9;"></div><div class = "" vx = "1" vy = "3" dvx = "1" dvy = "0" style="grid-column-start: 22; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 19;"></div><div class = "" vx = "1" vy = "2" dvx = "-1" dvy = "0" style="grid-column-start: 20; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 22;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 2; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 26;"></div><div class = "" vx = "1" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 23; grid-row-start: 4;"></div><div class = "" vx = "1" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 8; grid-row-start: 8;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 18; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 21;"></div><div class = "" vx = "3" vy = "2" dvx = "0" dvy = "-1" style="grid-column-start: 13; grid-row-start: 6;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 22; grid-row-start: 2;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 4; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 24;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 13; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 26;"></div><div class = "" vx = "3" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 17; grid-row-start: 8;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "1" style="grid-column-start: 14; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 27;"></div><div class = "" vx = "2" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 20; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 19;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 18; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 29;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "-1" style="grid-column-start: 23; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 3;"></div><div class = "" vx = "1" vy = "1" dvx = "1" dvy = "-1" style="grid-column-start: 4; grid-row-start: 2;"></div><div class = "" vx = "2" vy = "0" dvx = "0" dvy = "-1" style="grid-column-start: 23; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 25;"></div><div class = "" vx = "0" vy = "4" dvx = "0" dvy = "-1" style="grid-column-start: 23; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 13;"></div><div class = "" vx = "4" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 22; grid-row-start: 7;"></div><div class = "" vx = "2" vy = "4" dvx = "0" dvy = "0" style="grid-column-start: 26; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 24;"></div><div class = "" vx = "1" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 28; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 19;"></div><div class = "" vx = "2" vy = "3" dvx = "1" dvy = "-1" style="grid-column-start: 16; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 26;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 18; grid-row-start: 8;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 6; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 29;"></div><div class = "" vx = "1" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 21; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 9;"></div><div class = "" vx = "1" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 19; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 14;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "-1" style="grid-column-start: 23; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 26;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 16; grid-row-start: 8;"></div><div class = "" vx = "1" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 20; grid-row-start: 10;"></div><div class = "" vx = "1" vy = "0" dvx = "1" dvy = "0" style="grid-column-start: 8; grid-row-start: 4;"></div><div class = "" vx = "1" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 23; grid-row-start: 6;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "1" style="grid-column-start: 14; grid-row-start: 9;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "-1" style="grid-column-start: 23; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 16;"></div><div class = "" vx = "3" vy = "0" dvx = "0" dvy = "0" style="grid-column-start: 13; grid-row-start: 2;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 19; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 8;"></div><div class = "" vx = "2" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 17; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 15;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "0" style="grid-column-start: 12; grid-row-start: 9;"></div><div class = "" vx = "3" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 20; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 25;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 21; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 8; grid-row-start: 3;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 18; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 29;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 19; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 21;"></div><div class = "" vx = "1" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 19; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 20;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 21; grid-row-start: 19;"></div><div class = "" vx = "1" vy = "0" dvx = "0" dvy = "0" style="grid-column-start: 21; grid-row-start: 9;"></div><div class = "" vx = "3" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 17; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 28;"></div><div class = "" vx = "2" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 17; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 26;"></div><div class = "" vx = "1" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 12; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 20;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 20; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 22;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 20; grid-row-start: 3;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "-1" style="grid-column-start: 18; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 5;"></div><div class = "" vx = "1" vy = "3" dvx = "0" dvy = "-1" style="grid-column-start: 23; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 26;"></div><div class = "" vx = "1" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 21; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 23;"></div><div class = "" vx = "2" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 8; grid-row-start: 6;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 2; grid-row-start: 2;"></div><div class = "" vx = "2" vy = "0" dvx = "0" dvy = "0" style="grid-column-start: 23; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 22;"></div><div class = "" vx = "1" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 14; grid-row-start: 10;"></div><div class = "" vx = "1" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 6; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 8;"></div><div class = "" vx = "3" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 18; grid-row-start: 11;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 18; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 9;"></div><div class = "" vx = "2" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 25;"></div><div class = "" vx = "1" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 17; grid-row-start: 6;"></div><div class = "" vx = "1" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 17; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 22;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 20; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 11;"></div><div class = "" vx = "1" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 20; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 28;"></div><div class = "" vx = "1" vy = "0" dvx = "1" dvy = "0" style="grid-column-start: 6; grid-row-start: 2;"></div><div class = "" vx = "2" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 16; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 29;"></div><div class = "" vx = "1" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 5; grid-row-start: 4;"></div><div class = "" vx = "4" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 14; grid-row-start: 4;"></div><div class = "" vx = "1" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 23; grid-row-start: 7;"></div><div class = "" vx = "1" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 25; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 22;"></div><div class = "" vx = "2" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 7; grid-row-start: 3;"></div><div class = "" vx = "1" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 12; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 7;"></div><div class = "" vx = "4" vy = "2" dvx = "0" dvy = "-1" style="grid-column-start: 18; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 30;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "1" style="grid-column-start: 8; grid-row-start: 5;"></div><div class = "" vx = "2" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 18; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 10;"></div><div class = "" vx = "3" vy = "0" dvx = "0" dvy = "0" style="grid-column-start: 14; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 28;"></div><div class = "" vx = "1" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 5; grid-row-start: 3;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 14; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 23;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "1" style="grid-column-start: 22; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 4;"></div><div class = "" vx = "1" vy = "0" dvx = "1" dvy = "0" style="grid-column-start: 11; grid-row-start: 4;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 19; grid-row-start: 5;"></div><div class = "" vx = "1" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 19; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 29;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 21; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 21;"></div><div class = "" vx = "3" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 17; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 22;"></div><div class = "" vx = "1" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 16; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 11;"></div><div class = "" vx = "1" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 16; grid-row-start: 12;"></div><div class = "" vx = "2" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 12; grid-row-start: 3;"></div><div class = "" vx = "2" vy = "0" dvx = "0" dvy = "1" style="grid-column-start: 8; grid-row-start: 2;"></div><div class = "" vx = "2" vy = "0" dvx = "1" dvy = "0" style="grid-column-start: 23; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 20; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 29;"></div><div class = "" vx = "2" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 10; grid-row-start: 4;"></div><div class = "" vx = "1" vy = "2" dvx = "1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 23;"></div><div class = "" vx = "1" vy = "0" dvx = "1" dvy = "1" style="grid-column-start: 19; grid-row-start: 2;"></div><div class = "" vx = "2" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 7; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 23;"></div><div class = "" vx = "3" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 27; grid-row-start: 27;"></div><div class = "" vx = "2" vy = "0" dvx = "1" dvy = "1" style="grid-column-start: 15; grid-row-start: 10;"></div><div class = "" vx = "2" vy = "1" dvx = "1" dvy = "-1" style="grid-column-start: 11; grid-row-start: 11;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "-1" style="grid-column-start: 17; grid-row-start: 2;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 3; grid-row-start: 3;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 11; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 23;"></div><div class = "" vx = "1" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 22; grid-row-start: 15;"></div><div class = "" vx = "1" vy = "3" dvx = "1" dvy = "0" style="grid-column-start: 21; grid-row-start: 11;"></div><div class = "" vx = "1" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 20; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 28;"></div><div class = "" vx = "2" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 21; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 7;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "-1" style="grid-column-start: 22; grid-row-start: 17;"></div><div class = "" vx = "1" vy = "2" dvx = "-1" dvy = "0" style="grid-column-start: 5; grid-row-start: 6;"></div><div class = "" vx = "2" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 14; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 23;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 1; grid-row-start: 3;"></div><div class = "" vx = "1" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 9; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 11;"></div><div class = "" vx = "1" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 18; grid-row-start: 5;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 18; grid-row-start: 14;"></div><div class = "" vx = "2" vy = "1" dvx = "1" dvy = "-1" style="grid-column-start: 10; grid-row-start: 3;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 19; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 21;"></div><div class = "" vx = "2" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 15; grid-row-start: 4;"></div><div class = "" vx = "2" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 17; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 19;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 22; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 21;"></div><div class = "" vx = "2" vy = "0" dvx = "0" dvy = "0" style="grid-column-start: 12; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 12;"></div><div class = "" vx = "4" vy = "0" dvx = "0" dvy = "0" style="grid-column-start: 20; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 24;"></div><div class = "" vx = "2" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 16; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 14;"></div><div class = "" vx = "1" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 18; grid-row-start: 2;"></div><div class = "" vx = "2" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 24; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 11;"></div><div class = "" vx = "2" vy = "2" dvx = "-1" dvy = "-1" style="grid-column-start: 23; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 12;"></div><div class = "" vx = "1" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 15; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 28;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 15; grid-row-start: 3;"></div><div class = "" vx = "1" vy = "2" dvx = "1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 23;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 21; grid-row-start: 6;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 21; grid-row-start: 12;"></div><div class = "" vx = "3" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 16; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 26;"></div><div class = "" vx = "1" vy = "2" dvx = "-1" dvy = "1" style="grid-column-start: 22; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 30;"></div><div class = "" vx = "1" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 18; grid-row-start: 7;"></div><div class = "" vx = "1" vy = "2" dvx = "0" dvy = "-1" style="grid-column-start: 10; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 12;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 5; grid-row-start: 5;"></div><div class = "" vx = "3" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 14; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 14;"></div><div class = "" vx = "1" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 19; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 20;"></div><div class = "" vx = "1" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 7; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 22;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "0" style="grid-column-start: 13; grid-row-start: 15;"></div><div class = "" vx = "1" vy = "0" dvx = "1" dvy = "1" style="grid-column-start: 20; grid-row-start: 16;"></div><div class = "" vx = "3" vy = "1" dvx = "1" dvy = "-1" style="grid-column-start: 16; grid-row-start: 7;"></div><div class = "" vx = "1" vy = "2" dvx = "-1" dvy = "0" style="grid-column-start: 12; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 22;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "-1" style="grid-column-start: 5; grid-row-start: 2;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 14; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 20;"></div><div class = "" vx = "1" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 9; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 29;"></div><div class = "" vx = "1" vy = "0" dvx = "0" dvy = "0" style="grid-column-start: 15; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 27;"></div><div class = "" vx = "0" vy = "4" dvx = "-1" dvy = "0" style="grid-column-start: 23; grid-row-start: 24;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 13; grid-row-start: 9;"></div><div class = "" vx = "2" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 12; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 25;"></div><div class = "" vx = "1" vy = "2" dvx = "-1" dvy = "1" style="grid-column-start: 22; grid-row-start: 10;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 21; grid-row-start: 5;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 21; grid-row-start: 14;"></div><div class = "" vx = "2" vy = "3" dvx = "1" dvy = "-1" style="grid-column-start: 24; grid-row-start: 25;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "-1" style="grid-column-start: 18; grid-row-start: 16;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 23; grid-row-start: 13;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 5; grid-row-start: 7;"></div><div class = "" vx = "2" vy = "0" dvx = "1" dvy = "1" style="grid-column-start: 14; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 23;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 3; grid-row-start: 2;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 11; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 23;"></div><div class = "" vx = "2" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 21; grid-row-start: 2;"></div><div class = "" vx = "2" vy = "0" dvx = "0" dvy = "0" style="grid-column-start: 22; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 16;"></div><div class = "" vx = "2" vy = "0" dvx = "1" dvy = "0" style="grid-column-start: 12; grid-row-start: 7;"></div><div class = "" vx = "1" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 13; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 26;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "1" style="grid-column-start: 23; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 26;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 1; grid-row-start: 2;"></div><div class = "" vx = "1" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 22; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 27;"></div><div class = "" vx = "2" vy = "0" dvx = "1" dvy = "0" style="grid-column-start: 10; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 27;"></div><div class = "" vx = "1" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 11; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 15;"></div><div class = "" vx = "1" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 4; grid-row-start: 4;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "-1" style="grid-column-start: 15; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 26;"></div><div class = "" vx = "2" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 21; grid-row-start: 7;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "0" style="grid-column-start: 22; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 24;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 2;"></div><div class = "" vx = "3" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 10; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 19;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 23; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 29;"></div><div class = "" vx = "2" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 15; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 30;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 4; grid-row-start: 3;"></div><div class = "" vx = "1" vy = "1" dvx = "1" dvy = "-1" style="grid-column-start: 13; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 29;"></div><div class = "" vx = "1" vy = "4" dvx = "1" dvy = "-1" style="grid-column-start: 22; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 26;"></div><div class = "" vx = "3" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 15; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 24;"></div><div class = "" vx = "2" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 23; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 30;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "-1" style="grid-column-start: 17; grid-row-start: 13;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "-1" style="grid-column-start: 21; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 24;"></div><div class = "" vx = "2" vy = "0" dvx = "0" dvy = "-1" style="grid-column-start: 13; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 30;"></div><div class = "" vx = "1" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 22; grid-row-start: 6;"></div><div class = "" vx = "3" vy = "3" dvx = "0" dvy = "-1" style="grid-column-start: 22; grid-row-start: 12;"></div><div class = "" vx = "2" vy = "2" dvx = "1" dvy = "-1" style="grid-column-start: 20; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 24;"></div><div class = "" vx = "3" vy = "3" dvx = "0" dvy = "0" style="grid-column-start: 30; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 8;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "0" style="grid-column-start: 4; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 24;"></div><div class = "" vx = "1" vy = "3" dvx = "1" dvy = "0" style="grid-column-start: 19; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 28;"></div><div class = "" vx = "3" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 13; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 27;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 30;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 27;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 23;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 28;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 29;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 26;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 25;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 24;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 22;"></div>
	</div>
	Finish <br> line
	</div>
	<div>Starting line</div>
</div>
</div>

</div>
¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš0m�`°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$ba044e4f-e2a6-4f96-8756-5b24b1bb5ca2¹depends_on_disabled_cellsÂ§runtimeÎ©U�µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$6d6e8916-9b36-4af1-b77d-86cb6a416f88Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ-<div class="markdown"><h5>Track 1</h5>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"+r°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$6d6e8916-9b36-4af1-b77d-86cb6a416f88¹depends_on_disabled_cellsÂ§runtimeÎ =µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$cede8090-5b1a-436b-a184-fca5c4d3de48Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚç<div class="markdown"><blockquote>
<h3><em>Exercise 5.5</em></h3>
<p>Consider an MDP with a single nonterminal state and a single action that transitions back to the nonterminal state with probability <span class="tex">$p$</span> and transitions to the terminal state with probability <span class="tex">$1-p$</span>.  Let the reward be &#43;1 on all transitions, and let <span class="tex">$\gamma&#61;1$</span>.  Suppose you observe one episode that lasts 10 steps, with a return of 10.  What are the first-visit and every-visit estimators of the value of the nonterminal state?</p>
</blockquote>
<p>For the first-visit estimator, we only consider the single future reward from the starting state which would be 10.  There is nothing to average since we just have the single value of 10 for the episode.</p>
<p>For the every-visit estimator, we need to average together all 10 visits to the non-terminal state.  For the first visit, the future reward is 10.  For the second visit it is 9, third 8, and so forth.  The final visit has a reward of 1, so the value estimate is the average of 10, 9, ..., 1 which is <span class="tex">$\frac&#123;&#40;1&#43;10&#41; \times 5&#125;&#123;10&#125;&#61;\frac&#123;55&#125;&#123;10&#125; &#61; 5.5$</span></p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"(¼°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$cede8090-5b1a-436b-a184-fca5c4d3de48¹depends_on_disabled_cellsÂ§runtimeÎ ”¾µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$8668ffc3-6c8c-4c25-8d47-9977bef929d2Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚÉ<div class="markdown"><p>Number of Episodes: <bond def="opmc2" unique_id="u06jnj9Gk500"><span style='display: contents;'>
	<input type='number' min='1' step='1' max='10000000' value='1000'>
	<input type=submit id='gitupofvxw'>
	<script id='gitupofvxw'>

let key = "gitupofvxw"

let div = currentScript.parentElement
let button = currentScript.previousElementSibling
let input = div.firstElementChild
if(input === button) {
	return
}


let set_input_value = (() => {
	let result = null
	try {
	result = setBoundElementValueLikePluto
} catch (e) {
	result = ((input, new_value) => {
	// fallback in case https://github.com/fonsp/Pluto.jl/pull/1755 is not available
    if (new_value == null) {
        //@ts-ignore
        input.value = new_value
        return
    }
    if (input instanceof HTMLInputElement) {
        switch (input.type) {
            case "range":
            case "number": {
                if (input.valueAsNumber !== new_value) {
                    input.valueAsNumber = new_value
                }
                return
            }
            case "date": {
                if (input.valueAsDate == null || Number(input.valueAsDate) !== Number(new_value)) {
                    input.valueAsDate = new_value
                }
                return
            }
            case "checkbox": {
                if (input.checked !== new_value) {
                    input.checked = new_value
                }
                return
            }
            case "file": {
                // Can't set files :(
                return
            }
        }
    } else if (input instanceof HTMLSelectElement && input.multiple) {
        for (let option of Array.from(input.options)) {
            option.selected = new_value.includes(option.value)
        }
        return
    }
    //@ts-ignore
    if (input.value !== new_value) {
        //@ts-ignore
        input.value = new_value
    }
})
}
return result
})()



let private_value = null
let public_value = null




private_value = public_value = div.value
if(private_value != null) {
	set_input_value(input, private_value)
} else {

	// private_value = public_value = input.value
}

input.oninput = (e) => {
	e.stopPropagation()
}
const gen = Generators.input(input)

// If the child does not have an initial value, the `gen.next().value` promise will never resolve. If it does, then it resolves instantly.
let first_value = await Promise.any([
	gen.next().value,
	Promise.resolve(undefined)
])
private_value = public_value = first_value

;(async () => {
	while(true) {
		private_value = await gen.next().value
		// div.dispatchEvent(new CustomEvent("input", {}))
	}
})()

button.addEventListener("click", () => {
	public_value = private_value
	div.dispatchEvent(new CustomEvent("input", {}))
})


Object.defineProperty(div, 'value', {
	get: () => public_value,
	set: (newval) => {
		private_value = newval
		public_value = newval
		
		set_input_value(input, newval)
	},
	configurable: true,
});

</script></span></bond></p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš2j@Ì°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$8668ffc3-6c8c-4c25-8d47-9977bef929d2¹depends_on_disabled_cellsÂ§runtimeÎ ãWµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$5834c5e0-8a04-47ea-aab8-881c73d8fd4fŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ-<div class="markdown"><h5>Track 1</h5>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"+°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$5834c5e0-8a04-47ea-aab8-881c73d8fd4f¹depends_on_disabled_cellsÂ§runtimeÎ É�µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$14536b70-35f0-46ba-93fc-3365a1e8c15cŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚ"<div class="markdown"><h5>Results Summary</h5>
<p>Off policy MC control training is slow because the random behavior policy takes a very long time to complete a race &#40;~2500 or ~300 steps&#41;.  Even after 1000 episodes performance is indistinguishable from the random policy.</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"*Ò-°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$14536b70-35f0-46ba-93fc-3365a1e8c15c¹depends_on_disabled_cellsÂ§runtimeÎ ý¥µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$39da4cf9-5265-41bc-83d4-311e86675db7Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyƒ¨elements’’’Ù¿2Ã—200 Matrix{Float32}:
 1.0  1.0  1.0  1.0  1.0  1.0  1.0  0.0  â€¦  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  1.0     1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0ªtext/plain’’Ù´2Ã—200 Matrix{Float32}:
 -0.316785  -0.557123   0.0869449  -0.245725  â€¦  -1.0       0.399294  -1.0
 -0.763317  -0.76558   -0.294025   -0.286185      0.945092  0.889636   0.827852ªtext/plain¤type¥Tuple¨objectid°e5040a83b7785ebe¤mimeÙ!application/vnd.pluto.tree+object¬rootassigneeÀ²last_run_timestampËAÚš/ë·°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$39da4cf9-5265-41bc-83d4-311e86675db7¹depends_on_disabled_cellsÂ§runtimeÎpgqÓµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$d97f693d-27f2-49be-a549-07a290c95b53Š¦queuedÂ¤logs�§runningÂ¦output†¤body ¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš)T(°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$d97f693d-27f2-49be-a549-07a290c95b53¹depends_on_disabled_cellsÂ§runtimeÎ ·µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$f9bc84ff-c2f9-4ac2-b2ce-34dfcf837a73Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÛ «®<div class="markdown"><table><tr><th align="right"></th><th align="center"><span class="tex">$\pi_*$</span> &#40;Black &#61; Stick, White &#61; Hit&#41;</th><th align="center"><span class="tex">$v_*$</span></th></tr><tr><td align="right">Usable ace</td><td align="center">	<script id='plot_1'>
		// We start by putting all the variable interpolation here at the beginning
		// We have to convert all typedarrays in the layout to normal arrays. See Issue #25
		// We use lodash for this for compactness
		function removeTypedArray(o) {
			return _.isTypedArray(o) ? Array.from(o) :
			_.isPlainObject(o) ? _.mapValues(o, removeTypedArray) : 
			o
		}

		// Publish the plot object to JS
		let plot_obj = _.update(/* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("c6e0de0c-3901-11f0-234e-bd09c571f662/7b3f5adc32cbaebf"), "layout", removeTypedArray)
		// Get the plotly listeners
		const plotly_listeners = {}
		// Get the JS listeners
		const js_listeners = {}
		// Deal with eventual custom classes
		let custom_classlist = []


		// Load the plotly library
		let Plotly = undefined
		try {
			let _mod = await import("./plotlyjs/plotlyjs-2.26.2.min.js")
			Plotly = _mod.default
		} catch (e) {
			console.log("Local load failed, trying with the web esm.sh version")
			let _mod = await import("https://esm.sh/plotly.js-dist-min@2.26.2/es2022/plotly.js-dist-min.mjs")
			Plotly = _mod.default
		}

		// Check if we have to force local mathjax font cache
		if (false && window?.MathJax?.config?.svg?.fontCache === 'global') {
			window.MathJax.config.svg.fontCache = 'local'
		}

		// Flag to check if this cell was  manually ran or reactively ran
const firstRun = this ? false : true
const CONTAINER = this ?? html`<div class='plutoplotly-container'>`
const PLOT = CONTAINER.querySelector('.js-plotly-plot') ?? CONTAINER.appendChild(html`<div>`)
const parent = CONTAINER.parentElement
// We use a controller to remove event listeners upon invalidation
const controller = new AbortController()
// We have to add this to keep supporting @bind with the old API using PLOT
PLOT.addEventListener('input', (e) => {
	CONTAINER.value = PLOT.value
	if (e.bubbles) {
		return
	}
	CONTAINER.dispatchEvent(new CustomEvent('input'))
}, { signal: controller.signal })

	// This create the style subdiv on first run
	firstRun && CONTAINER.appendChild(html`
	<style>
	.plutoplotly-container {
		width: 100%;
		height: 100%;
		min-height: 0;
		min-width: 0;
	}
	.plutoplotly-container .js-plotly-plot .plotly div {
		margin: 0 auto; // This centers the plot
	}
	.plutoplotly-container.popped-out {
		overflow: auto;
		z-index: 1000;
		position: fixed;
		resize: both;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		border-top-left-radius: 0px;
		border-top-right-radius: 0px;
	}
	.plutoplotly-clipboard-header {
		display: flex;
		flex-flow: row wrap;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-top-left-radius: 12px;
		border-top-right-radius: 12px;
		position: fixed;
		z-index: 1001;
		cursor: move;
		transform: translate(0px, -100%);
		padding: 5px;
	}
	.plutoplotly-clipboard-header span {
		display: inline-block;
		flex: 1
	}
	.plutoplotly-clipboard-header.hidden {
		display: none;
	}
	.clipboard-span {
		position: relative;
	}
	.clipboard-value {
		padding-right: 5px;
		padding-left: 2px;
		cursor: text;
	}
	.clipboard-span.format {
		display: none;
	}
	.clipboard-span.filename {
		flex: 0 0 100%;
		text-align: center;
		border-top: 3px solid var(--kbd-border-color);
		margin-top: 5px;
		display: none;
	}
	.plutoplotly-container.filesave .clipboard-span.filename {
		display: inline-block;
	}
	.clipboard-value.filename {
		margin-left: 3px;
		text-align: left;
		min-width: min(60%, min-content);
	}
	.plutoplotly-container.filesave .clipboard-span.format {
		display: inline-flex;
	}
	.clipboard-span.format .label {
		flex: 0 0 0;
	}
	.clipboard-value.format {
		position: relative;
		flex: 1 0 auto;
		min-width: 30px;
		margin-right: 10px;
	}
	div.format-options {
		display: inline-flex;
		flex-flow: column;
		position: absolute;
		background: var(--main-bg-color);
		border-radius: 12px;
		padding-left: 3px;
		z-index: 2000;
	}
	div.format-options:hover {
		cursor: pointer;
		border: 3px solid var(--kbd-border-color);
		padding: 3px;
		transform: translate(-3px, -6px);
	}
	div.format-options .format-option {
		display: none;
	}
	div.format-options:hover .format-option {
		display: inline-block;
	}
	.format-option:not(.selected) {
		margin-top: 3px;
	}
	div.format-options .format-option.selected {
		order: -1;
		display: inline-block;
	}
	.format-option:hover {
		background-color: var(--kbd-border-color);
	}
	span.config-value {
		font-weight: normal;
		color: var(--pluto-output-color);
		display: none;
		position: absolute;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		transform: translate(0px, calc(-100% - 10px));
		padding: 5px;
	}
	.label {
		user-select: none;
	}
	.label:hover span.config-value {
		display: inline-block;
		min-width: 150px;
	}
	.clipboard-span.matching-config .label {
		color: var(--cm-macro-color);
		font-weight: bold;
	}
	.clipboard-span.different-config .label {
		color: var(--cm-tag-color);
		font-weight: bold;
	}
</style>
`)

let original_height = plot_obj.layout.height
let original_width = plot_obj.layout.width
// For the height we have to also put a fixed value in case the plot is put on a non-fixed-size container (like the default wrapper)
// We define a variable to check whether we still have to remove the fixed height
let remove_container_size = firstRun
let container_height = original_height ?? PLOT.container_height ?? 400
CONTAINER.style.height = container_height + 'px'

// We create a Promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// We import interact for dragging/resizing
const { default: interact } = await import('https://esm.sh/interactjs@1.10.19')


function getImageOptions() {
  const o = plot_obj.config.toImageButtonOptions ?? {};
  return {
    format: o.format ?? "png",
    width: o.width ?? original_width,
    height: o.height ?? original_height,
    scale: o.scale ?? 1,
    filename: o.filename ?? "newplot",
  };
}

const CLIPBOARD_HEADER =
  CONTAINER.querySelector(".plutoplotly-clipboard-header") ??
  CONTAINER.insertAdjacentElement(
    "afterbegin",
    html`<div class="plutoplotly-clipboard-header hidden">
      <span class="clipboard-span format"
        ><span class="label">Format:</span
        ><span class="clipboard-value format"></span
      ></span>
      <span class="clipboard-span width"
        ><span class="label">Width:</span
        ><span class="clipboard-value width"></span>px</span
      >
      <span class="clipboard-span height"
        ><span class="label">Height:</span
        ><span class="clipboard-value height"></span>px</span
      >
      <span class="clipboard-span scale"
        ><span class="label">Scale:</span
        ><span class="clipboard-value scale"></span
      ></span>
      <button class="clipboard-span set">Set</button>
      <button class="clipboard-span unset">Unset</button>
      <span class="clipboard-span filename"
        ><span class="label">Filename:</span
        ><span class="clipboard-value filename"></span
      ></span>
    </div>`
  );

function checkConfigSync(container) {
  const valid_classes = [
    "missing-config",
    "matching-config",
    "different-config",
  ];
  function setClass(cl) {
    for (const name of valid_classes) {
      container.classList.toggle(name, name == cl);
    }
  }
  // We use the custom getters we'll set up in the container
  const { ui_value, config_value, config_span, key } = container;
  if (config_value === undefined) {
    setClass("missing-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> is not present in the config.`;
  } else if (ui_value == config_value) {
    setClass("matching-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has the same value in the config and in the header.`;
  } else {
    setClass("different-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has a different value (<em>${config_value}</em>) in the config.`;
  }
  // Add info about setting and unsetting
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click on the label <em><b>once</b></em> to set the current UI value in the config.`
  );
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click <em><b>twice</b></em> to remove this key from the config.`
  );
}

const valid_formats = ["png", "svg", "webp", "jpeg", "full-json"];
function initializeUIValueSpan(span, key, value) {
  const container = span.closest(".clipboard-span");
  span.contentEditable = key === "format" ? "false" : "true";
  let parse = (x) => x;
  let update = (x) => (span.textContent = x);
  if (key === "width" || key === "height") {
    parse = (x) => Math.round(parseFloat(x));
  } else if (key === "scale") {
    parse = parseFloat;
  } else if (key === "format") {
    // We remove contentEditable
    span.contentEditable = "false";
    // Here we first add the subspans for each option
    const opts_div = span.appendChild(html`<div class="format-options"></div>`);
    for (const fmt of valid_formats) {
      const opt = opts_div.appendChild(
        html`<span class="format-option ${fmt}">${fmt}</span>`
      );
      opt.onclick = (e) => {
        span.value = opt.textContent;
      };
    }
    parse = (x) => {
      return valid_formats.includes(x) ? x : localValue;
    };
    update = (x) => {
      for (const opt of opts_div.children) {
        opt.classList.toggle("selected", opt.textContent === x);
      }
    };
  } else {
    // We only have filename here
  }
  let localValue;
  Object.defineProperty(span, "value", {
    get: () => {
      return localValue;
    },
    set: (val) => {
      if (val !== "") {
        localValue = parse(val);
      }
      update(localValue);
      checkConfigSync(container);
    },
  });
  // We also assign a listener so that the editable is blurred when enter is pressed
  span.onkeydown = (e) => {
    if (e.keyCode === 13) {
      e.preventDefault();
      span.blur();
    }
  };
  span.value = value;
}

function initializeConfigValueSpan(span, key) {
  // Here we mostly want to define the setter and getter
  const container = span.closest(".clipboard-span");
  Object.defineProperty(span, "value", {
    get: () => {
      return plot_obj.config.toImageButtonOptions[key];
    },
    set: (val) => {
      // if undefined is passed, we remove the entry from the options
      if (val === undefined) {
        delete plot_obj.config.toImageButtonOptions[key];
      } else {
        plot_obj.config.toImageButtonOptions[key] = val;
      }
      checkConfigSync(container);
    },
  });
}

const config_spans = {};
for (const [key, value] of Object.entries(getImageOptions())) {
  const container = CLIPBOARD_HEADER.querySelector(`.clipboard-span.${key}`);
  const label = container.querySelector(".label");
  // We give the label a function that on single click will set the current value and with double click will unset it
  label.onclick = DualClick(
    () => {
      container.config_value = container.ui_value;
    },
    (e) => {
      console.log("e", e);
      e.preventDefault();
      container.config_value = undefined;
    }
  );
  const ui_value_span = container.querySelector(".clipboard-value");
  const config_value_span =
    container.querySelector(".config-value") ??
    label.insertAdjacentElement(
      "afterbegin",
      html`<span class="config-value"></span>`
    );
  // Assing the two spans as properties of the containing span
  container.ui_span = ui_value_span;
  container.config_span = config_value_span;
  container.key = key;
  config_spans[key] = container;
  if (firstRun) {
    plot_obj.config.toImageButtonOptions =
      plot_obj.config.toImageButtonOptions ?? {};
    // We do the initialization of the value span
    initializeUIValueSpan(ui_value_span, key, value);
    // Then we initialize the config value
    initializeConfigValueSpan(config_value_span, key);
    // We put some convenience getters/setters
    // ui_value forward
    Object.defineProperty(container, "ui_value", {
      get: () => ui_value_span.value,
      set: (val) => {
        ui_value_span.value = val;
      },
    });
    // config_value forward
    Object.defineProperty(container, "config_value", {
      get: () => config_value_span.value,
      set: (val) => {
        config_value_span.value = val;
      },
    });
  }
}

// These objects will contain the default value

// This code updates the image options in the PLOT config with the provided ones
function setImageOptions(o) {
  for (const [key, container] of Object.entries(config_spans)) {
    container.config_value = o[key];
  }
}
function unsetImageOptions() {
  setImageOptions({});
}

const set_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.set");
const unset_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.unset");
if (firstRun) {
  set_button.onclick = (e) => {
    for (const container of Object.values(config_spans)) {
      container.config_value = container.ui_value;
    }
  };
  unset_button.onclick = unsetImageOptions;
}

// We add a function to check if the clipboard is popped out
CONTAINER.isPoppedOut = () => {
  return CONTAINER.classList.contains("popped-out");
};

CLIPBOARD_HEADER.onmousedown = function (event) {
  if (event.target.matches("span.clipboard-value")) {
    console.log("We don't move!");
    return;
  }
  const start = {
    left: parseFloat(CONTAINER.style.left),
    top: parseFloat(CONTAINER.style.top),
    X: event.pageX,
    Y: event.pageY,
  };
  function moveAt(event, start) {
    const top = event.pageY - start.Y + start.top + "px";
    const left = event.pageX - start.X + start.left + "px";
    CLIPBOARD_HEADER.style.left = left;
    CONTAINER.style.left = left;
    CONTAINER.style.top = top;
  }

  // move our absolutely positioned ball under the pointer
  moveAt(event, start);
  function onMouseMove(event) {
    moveAt(event, start);
  }

  // We use this to remove the mousemove when clicking outside of the container
  const controller = new AbortController();

  // move the container on mousemove
  document.addEventListener("mousemove", onMouseMove, {
    signal: controller.signal,
  });
  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        cleanUp();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );

  function cleanUp() {
    console.log("cleaning up the plot move listener");
    controller.abort();
    CLIPBOARD_HEADER.onmouseup = null;
  }

  // (3) drop the ball, remove unneeded handlers
  CLIPBOARD_HEADER.onmouseup = cleanUp;
};

function sendToClipboard(blob) {
  if (!navigator.clipboard) {
    alert(
      "The Clipboard API does not seem to be available, make sure the Pluto notebook is being used from either localhost or an https source."
    );
  }
  navigator.clipboard
    .write([
      new ClipboardItem({
        // The key is determined dynamically based on the blob's type.
        [blob.type]: blob,
      }),
    ])
    .then(
      function () {
        console.log("Async: Copying to clipboard was successful!");
      },
      function (err) {
        console.error("Async: Could not copy text: ", err);
      }
    );
}

function copyImageToClipboard() {
  // We extract the image options from the provided parameters (if they exist)
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key. We also ignore format because the clipboard only supports png.
    if (val === undefined || key === "format") {
      continue;
    }
    config[key] = val;
  }
  Plotly.toImage(PLOT, config).then(function (dataUrl) {
    fetch(dataUrl)
      .then((res) => res.blob())
      .then((blob) => {
        const paste_receiver = document.querySelector('paste-receiver.plutoplotly')
        if (paste_receiver) {
          paste_receiver.attachImage(dataUrl, CONTAINER)
        }
        sendToClipboard(blob)
      });
  });
}

function saveImageToFile() {
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key.
    if (val === undefined) {
      continue;
    }
    config[key] = val;
  }
  Plotly.downloadImage(PLOT, config);
}

let container_rect = { width: 0, height: 0, top: 0, left: 0 };
function unpop_container(cl) {
  CONTAINER.classList.toggle("popped-out", false);
  CONTAINER.classList.toggle(cl, false);
  // We fix the height back to the value it had before popout, also setting the flag to signal that upon first resize we remove the fixed inline-style
  CONTAINER.style.height = container_rect.height + "px";
  remove_container_size = true;
  // We set the other fixed inline-styles to null
  CONTAINER.style.width = "";
  CONTAINER.style.top = "";
  CONTAINER.style.left = "";
  // We also remove the CLIPBOARD_HEADER
  CLIPBOARD_HEADER.style.width = "";
  CLIPBOARD_HEADER.style.left = "";
  // Finally we remove the hidden class to the header
  CLIPBOARD_HEADER.classList.toggle("hidden", true);
  return;
}
function popout_container(opts) {
  const cl = opts?.cl;
  const target_container_size = opts?.target_container_size ?? {};
  const target_plot_size = opts?.target_plot_size ?? {};
  if (CONTAINER.isPoppedOut()) {
    return unpop_container(cl);
  }
  CONTAINER.classList.toggle(cl, cl === undefined ? false : true);
  // We extract the current size of the container, save them and fix them
  const { width, height, top, left } = CONTAINER.getBoundingClientRect();
  container_rect = { width, height, top, left };
  // We save the current plot size before we pop as it will fill the screen
  const current_plot_size = {
    width: PLOT._fullLayout.width,
    height: PLOT._fullLayout.height,
  };
  // We have to save the pad data before popping so we can resize precisely
  const pad = {};
  pad.unpopped = getSizeData().container_pad;
  CONTAINER.classList.toggle("popped-out", true);
  pad.popped = getSizeData().container_pad;
  // We do top and left based on the current rect
  for (const key of ["top", "left"]) {
    const start_val = target_container_size[key] ?? container_rect[key];
    let offset = 0;
    for (const kind of ["padding", "border"]) {
      offset += pad.popped[kind][key] - pad.unpopped[kind][key];
    }
    CONTAINER.style[key] = start_val - offset + "px";
    if (key === "left") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  // We compute the width and height depending on eventual config data
  const csz = computeContainerSize({
    width:
      target_plot_size.width ??
      config_spans.width.config_value ??
      current_plot_size.width,
    height:
      target_plot_size.height ??
      config_spans.height.config_value ??
      current_plot_size.height,
  });
  for (const key of ["width", "height"]) {
    const val = target_container_size[key] ?? csz[key];
    CONTAINER.style[key] = val + "px";
    if (key === "width") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  CLIPBOARD_HEADER.classList.toggle("hidden", false);
  const controller = new AbortController();

  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        unpop_container();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );
}

CONTAINER.popOut = popout_container;

function DualClick(single_func, dbl_func) {
  let nclicks = 0;
  return function (...args) {
    nclicks += 1;
    if (nclicks > 1) {
      dbl_func(...args);
      nclicks = 0;
    } else {
      delay(300).then(() => {
        if (nclicks == 1) {
          single_func(...args);
        }
        nclicks = 0;
      });
    }
  };
}

// We remove the default download image button
plot_obj.config.modeBarButtonsToRemove = _.union(
  plot_obj.config.modeBarButtonsToRemove,
  ["toImage"]
);
// We add the custom button to the modebar
plot_obj.config.modeBarButtonsToAdd = _.union(
  plot_obj.config.modeBarButtonsToAdd,
  [
    {
      name: "Copy PNG to Clipboard",
      icon: {
        height: 520,
        width: 520,
        path: "M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z",
      },
      direction: "up",
      click: DualClick(copyImageToClipboard, () => {
        popout_container();
      }),
    },
    {
      name: "Download Image",
      icon: Plotly.Icons.camera,
      direction: "up",
      click: DualClick(saveImageToFile, () => {
        popout_container({ cl: "filesave" });
      }),
    },
  ]
);

function getOffsetData(el) {
  let cs = window.getComputedStyle(el, null);
  const odata = {
    padding: {
      left: parseFloat(cs.paddingLeft),
      right: parseFloat(cs.paddingRight),
      top: parseFloat(cs.paddingTop),
      bottom: parseFloat(cs.paddingBottom),
      width: parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight),
      height: parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom),
    },
    border: {
      left: parseFloat(cs.borderLeftWidth),
      right: parseFloat(cs.borderRightWidth),
      top: parseFloat(cs.borderTopWidth),
      bottom: parseFloat(cs.borderBottomWidth),
      width: parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth),
      height: parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth),
    }
  };
  if (el === PLOT) {
    // For the PLOT we also want to take into account the offset
    odata.offset = {
      top: PLOT.offsetParent == CONTAINER ? PLOT.offsetTop : 0,
      left: PLOT.offsetParent == CONTAINER ? PLOT.offsetLeft : 0,
    }
  }
  return odata;
}
function getSizeData() {
  const data = {
    plot_pad: getOffsetData(PLOT),
    plot_rect: PLOT.getBoundingClientRect(),
    container_pad: getOffsetData(CONTAINER),
    container_rect: CONTAINER.getBoundingClientRect(),
  };
  return data;
}
function computeContainerSize({ width, height }, sizeData = getSizeData()) {
  const computed_size = computePlotSize(sizeData);
  const offsets = computed_size.offsets;

  const plot_data = {
    width: width ?? computed_size.width,
    height: height ?? computed_size.height,
  };

  return {
    width: (width ?? computed_size.width) + offsets.width,
    height: (height ?? computed_size.height) + offsets.height,
    noChange: width == computed_size.width && height == computed_size.height,
  }
}

// This function will change the container size so that the resulting plot will be matching the provided specs
function changeContainerSize({ width, height }, sizeData = getSizeData()) {
  if (!CONTAINER.isPoppedOut()) {
    console.log("Tried to change container size when not popped, ignoring");
    return;
  }

  const csz = computeContainerSize({ width, height }, sizeData);

  if (csz.noChange) {
    console.log("Size is the same as current, ignoring");
    return
  }
  // We are now going to set he width and height of the container
  for (const key of ["width", "height"]) {
    CONTAINER.style[key] = csz[key] + "px";
  }
}
// We now create the function that will update the plot based on the values specified
function updateFromHeader() {
  const header_data = {
    height: config_spans.height.ui_value,
    width: config_spans.width.ui_value,
  };
  changeContainerSize(header_data);
}
// We assign this function to the onblur event of width and height
if (firstRun) {
  for (const container of Object.values(config_spans)) {
    container.ui_span.onblur = (e) => {
      container.ui_value = container.ui_span.textContent;
      updateFromHeader();
    };
  }
}
// This function computes the plot size to use for relayout as a function of the container size
function computePlotSize(data = getSizeData()) {
  // Remove Padding
  const { container_pad, plot_pad, container_rect } = data;
  const offsets = {
    width:
      plot_pad.padding.width +
      plot_pad.border.width +
      plot_pad.offset.left +
      container_pad.padding.width +
      container_pad.border.width,
    height:
      plot_pad.padding.height +
      plot_pad.border.height +
      plot_pad.offset.top +
      container_pad.padding.height +
      container_pad.border.height,
  };
  const sz = {
    width: Math.round(container_rect.width - offsets.width),
    height: Math.round(container_rect.height - offsets.height),
    offsets,
  };
  return sz;
}

// Create the resizeObserver to make the plot even more responsive! :magic:
const resizeObserver = new ResizeObserver((entries) => {
  const sizeData = getSizeData();
  const {container_rect, container_pad} = sizeData;
  let plot_size = computePlotSize(sizeData);
  // We save the height in the PLOT object
  PLOT.container_height = container_rect.height;
  // We deal with some stuff if the container is poppped
  CLIPBOARD_HEADER.style.width = container_rect.width + "px";
  CLIPBOARD_HEADER.style.left = container_rect.left + "px";
  config_spans.height.ui_value = plot_size.height;
  config_spans.width.ui_value = plot_size.width;
  /* 
		The addition of the invalid argument `plutoresize` seems to fix the problem with calling `relayout` simply with `{autosize: true}` as update breaking mouse relayout events tracking. 
		See https://github.com/plotly/plotly.js/issues/6156 for details
		*/
  let config = {
    // If this is popped out, we ignore the original width/height
    width: (CONTAINER.isPoppedOut() ? undefined : original_width) ?? plot_size.width,
    height: (CONTAINER.isPoppedOut() ? undefined : original_height) ?? plot_size.height,
    plutoresize: true,
  };
  Plotly.relayout(PLOT, config).then(() => {
    if (remove_container_size && !CONTAINER.isPoppedOut()) {
      // This is needed to avoid the first resize upon plot creation to already be without a fixed height
      CONTAINER.style.height = "";
      CONTAINER.style.width = "";
      remove_container_size = false;
    }
  });
});

resizeObserver.observe(CONTAINER);


Plotly.react(PLOT, plot_obj).then(() => {
	// Assign the Plotly event listeners
	for (const [key, listener_vec] of Object.entries(plotly_listeners)) {
		for (const listener of listener_vec) {
			PLOT.on(key, listener)
		}
	}
	// Assign the JS event listeners
	for (const [key, listener_vec] of Object.entries(js_listeners)) {
		for (const listener of listener_vec) {
			PLOT.addEventListener(key, listener, {
				signal: controller.signal
			})
		}
	}
}
)


invalidation.then(() => {
	// Remove all plotly listeners
	PLOT.removeAllListeners()
	// Remove all JS listeners
	controller.abort()
	// Remove the resizeObserver
	resizeObserver.disconnect()
})



		return CONTAINER
	</script>
</td><td align="center">	<script id='plot_2'>
		// We start by putting all the variable interpolation here at the beginning
		// We have to convert all typedarrays in the layout to normal arrays. See Issue #25
		// We use lodash for this for compactness
		function removeTypedArray(o) {
			return _.isTypedArray(o) ? Array.from(o) :
			_.isPlainObject(o) ? _.mapValues(o, removeTypedArray) : 
			o
		}

		// Publish the plot object to JS
		let plot_obj = _.update(/* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("c6e0de0c-3901-11f0-234e-bd09c571f662/acf9294267fab534"), "layout", removeTypedArray)
		// Get the plotly listeners
		const plotly_listeners = {}
		// Get the JS listeners
		const js_listeners = {}
		// Deal with eventual custom classes
		let custom_classlist = []


		// Load the plotly library
		let Plotly = undefined
		try {
			let _mod = await import("./plotlyjs/plotlyjs-2.26.2.min.js")
			Plotly = _mod.default
		} catch (e) {
			console.log("Local load failed, trying with the web esm.sh version")
			let _mod = await import("https://esm.sh/plotly.js-dist-min@2.26.2/es2022/plotly.js-dist-min.mjs")
			Plotly = _mod.default
		}

		// Check if we have to force local mathjax font cache
		if (false && window?.MathJax?.config?.svg?.fontCache === 'global') {
			window.MathJax.config.svg.fontCache = 'local'
		}

		// Flag to check if this cell was  manually ran or reactively ran
const firstRun = this ? false : true
const CONTAINER = this ?? html`<div class='plutoplotly-container'>`
const PLOT = CONTAINER.querySelector('.js-plotly-plot') ?? CONTAINER.appendChild(html`<div>`)
const parent = CONTAINER.parentElement
// We use a controller to remove event listeners upon invalidation
const controller = new AbortController()
// We have to add this to keep supporting @bind with the old API using PLOT
PLOT.addEventListener('input', (e) => {
	CONTAINER.value = PLOT.value
	if (e.bubbles) {
		return
	}
	CONTAINER.dispatchEvent(new CustomEvent('input'))
}, { signal: controller.signal })

	// This create the style subdiv on first run
	firstRun && CONTAINER.appendChild(html`
	<style>
	.plutoplotly-container {
		width: 100%;
		height: 100%;
		min-height: 0;
		min-width: 0;
	}
	.plutoplotly-container .js-plotly-plot .plotly div {
		margin: 0 auto; // This centers the plot
	}
	.plutoplotly-container.popped-out {
		overflow: auto;
		z-index: 1000;
		position: fixed;
		resize: both;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		border-top-left-radius: 0px;
		border-top-right-radius: 0px;
	}
	.plutoplotly-clipboard-header {
		display: flex;
		flex-flow: row wrap;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-top-left-radius: 12px;
		border-top-right-radius: 12px;
		position: fixed;
		z-index: 1001;
		cursor: move;
		transform: translate(0px, -100%);
		padding: 5px;
	}
	.plutoplotly-clipboard-header span {
		display: inline-block;
		flex: 1
	}
	.plutoplotly-clipboard-header.hidden {
		display: none;
	}
	.clipboard-span {
		position: relative;
	}
	.clipboard-value {
		padding-right: 5px;
		padding-left: 2px;
		cursor: text;
	}
	.clipboard-span.format {
		display: none;
	}
	.clipboard-span.filename {
		flex: 0 0 100%;
		text-align: center;
		border-top: 3px solid var(--kbd-border-color);
		margin-top: 5px;
		display: none;
	}
	.plutoplotly-container.filesave .clipboard-span.filename {
		display: inline-block;
	}
	.clipboard-value.filename {
		margin-left: 3px;
		text-align: left;
		min-width: min(60%, min-content);
	}
	.plutoplotly-container.filesave .clipboard-span.format {
		display: inline-flex;
	}
	.clipboard-span.format .label {
		flex: 0 0 0;
	}
	.clipboard-value.format {
		position: relative;
		flex: 1 0 auto;
		min-width: 30px;
		margin-right: 10px;
	}
	div.format-options {
		display: inline-flex;
		flex-flow: column;
		position: absolute;
		background: var(--main-bg-color);
		border-radius: 12px;
		padding-left: 3px;
		z-index: 2000;
	}
	div.format-options:hover {
		cursor: pointer;
		border: 3px solid var(--kbd-border-color);
		padding: 3px;
		transform: translate(-3px, -6px);
	}
	div.format-options .format-option {
		display: none;
	}
	div.format-options:hover .format-option {
		display: inline-block;
	}
	.format-option:not(.selected) {
		margin-top: 3px;
	}
	div.format-options .format-option.selected {
		order: -1;
		display: inline-block;
	}
	.format-option:hover {
		background-color: var(--kbd-border-color);
	}
	span.config-value {
		font-weight: normal;
		color: var(--pluto-output-color);
		display: none;
		position: absolute;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		transform: translate(0px, calc(-100% - 10px));
		padding: 5px;
	}
	.label {
		user-select: none;
	}
	.label:hover span.config-value {
		display: inline-block;
		min-width: 150px;
	}
	.clipboard-span.matching-config .label {
		color: var(--cm-macro-color);
		font-weight: bold;
	}
	.clipboard-span.different-config .label {
		color: var(--cm-tag-color);
		font-weight: bold;
	}
</style>
`)

let original_height = plot_obj.layout.height
let original_width = plot_obj.layout.width
// For the height we have to also put a fixed value in case the plot is put on a non-fixed-size container (like the default wrapper)
// We define a variable to check whether we still have to remove the fixed height
let remove_container_size = firstRun
let container_height = original_height ?? PLOT.container_height ?? 400
CONTAINER.style.height = container_height + 'px'

// We create a Promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// We import interact for dragging/resizing
const { default: interact } = await import('https://esm.sh/interactjs@1.10.19')


function getImageOptions() {
  const o = plot_obj.config.toImageButtonOptions ?? {};
  return {
    format: o.format ?? "png",
    width: o.width ?? original_width,
    height: o.height ?? original_height,
    scale: o.scale ?? 1,
    filename: o.filename ?? "newplot",
  };
}

const CLIPBOARD_HEADER =
  CONTAINER.querySelector(".plutoplotly-clipboard-header") ??
  CONTAINER.insertAdjacentElement(
    "afterbegin",
    html`<div class="plutoplotly-clipboard-header hidden">
      <span class="clipboard-span format"
        ><span class="label">Format:</span
        ><span class="clipboard-value format"></span
      ></span>
      <span class="clipboard-span width"
        ><span class="label">Width:</span
        ><span class="clipboard-value width"></span>px</span
      >
      <span class="clipboard-span height"
        ><span class="label">Height:</span
        ><span class="clipboard-value height"></span>px</span
      >
      <span class="clipboard-span scale"
        ><span class="label">Scale:</span
        ><span class="clipboard-value scale"></span
      ></span>
      <button class="clipboard-span set">Set</button>
      <button class="clipboard-span unset">Unset</button>
      <span class="clipboard-span filename"
        ><span class="label">Filename:</span
        ><span class="clipboard-value filename"></span
      ></span>
    </div>`
  );

function checkConfigSync(container) {
  const valid_classes = [
    "missing-config",
    "matching-config",
    "different-config",
  ];
  function setClass(cl) {
    for (const name of valid_classes) {
      container.classList.toggle(name, name == cl);
    }
  }
  // We use the custom getters we'll set up in the container
  const { ui_value, config_value, config_span, key } = container;
  if (config_value === undefined) {
    setClass("missing-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> is not present in the config.`;
  } else if (ui_value == config_value) {
    setClass("matching-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has the same value in the config and in the header.`;
  } else {
    setClass("different-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has a different value (<em>${config_value}</em>) in the config.`;
  }
  // Add info about setting and unsetting
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click on the label <em><b>once</b></em> to set the current UI value in the config.`
  );
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click <em><b>twice</b></em> to remove this key from the config.`
  );
}

const valid_formats = ["png", "svg", "webp", "jpeg", "full-json"];
function initializeUIValueSpan(span, key, value) {
  const container = span.closest(".clipboard-span");
  span.contentEditable = key === "format" ? "false" : "true";
  let parse = (x) => x;
  let update = (x) => (span.textContent = x);
  if (key === "width" || key === "height") {
    parse = (x) => Math.round(parseFloat(x));
  } else if (key === "scale") {
    parse = parseFloat;
  } else if (key === "format") {
    // We remove contentEditable
    span.contentEditable = "false";
    // Here we first add the subspans for each option
    const opts_div = span.appendChild(html`<div class="format-options"></div>`);
    for (const fmt of valid_formats) {
      const opt = opts_div.appendChild(
        html`<span class="format-option ${fmt}">${fmt}</span>`
      );
      opt.onclick = (e) => {
        span.value = opt.textContent;
      };
    }
    parse = (x) => {
      return valid_formats.includes(x) ? x : localValue;
    };
    update = (x) => {
      for (const opt of opts_div.children) {
        opt.classList.toggle("selected", opt.textContent === x);
      }
    };
  } else {
    // We only have filename here
  }
  let localValue;
  Object.defineProperty(span, "value", {
    get: () => {
      return localValue;
    },
    set: (val) => {
      if (val !== "") {
        localValue = parse(val);
      }
      update(localValue);
      checkConfigSync(container);
    },
  });
  // We also assign a listener so that the editable is blurred when enter is pressed
  span.onkeydown = (e) => {
    if (e.keyCode === 13) {
      e.preventDefault();
      span.blur();
    }
  };
  span.value = value;
}

function initializeConfigValueSpan(span, key) {
  // Here we mostly want to define the setter and getter
  const container = span.closest(".clipboard-span");
  Object.defineProperty(span, "value", {
    get: () => {
      return plot_obj.config.toImageButtonOptions[key];
    },
    set: (val) => {
      // if undefined is passed, we remove the entry from the options
      if (val === undefined) {
        delete plot_obj.config.toImageButtonOptions[key];
      } else {
        plot_obj.config.toImageButtonOptions[key] = val;
      }
      checkConfigSync(container);
    },
  });
}

const config_spans = {};
for (const [key, value] of Object.entries(getImageOptions())) {
  const container = CLIPBOARD_HEADER.querySelector(`.clipboard-span.${key}`);
  const label = container.querySelector(".label");
  // We give the label a function that on single click will set the current value and with double click will unset it
  label.onclick = DualClick(
    () => {
      container.config_value = container.ui_value;
    },
    (e) => {
      console.log("e", e);
      e.preventDefault();
      container.config_value = undefined;
    }
  );
  const ui_value_span = container.querySelector(".clipboard-value");
  const config_value_span =
    container.querySelector(".config-value") ??
    label.insertAdjacentElement(
      "afterbegin",
      html`<span class="config-value"></span>`
    );
  // Assing the two spans as properties of the containing span
  container.ui_span = ui_value_span;
  container.config_span = config_value_span;
  container.key = key;
  config_spans[key] = container;
  if (firstRun) {
    plot_obj.config.toImageButtonOptions =
      plot_obj.config.toImageButtonOptions ?? {};
    // We do the initialization of the value span
    initializeUIValueSpan(ui_value_span, key, value);
    // Then we initialize the config value
    initializeConfigValueSpan(config_value_span, key);
    // We put some convenience getters/setters
    // ui_value forward
    Object.defineProperty(container, "ui_value", {
      get: () => ui_value_span.value,
      set: (val) => {
        ui_value_span.value = val;
      },
    });
    // config_value forward
    Object.defineProperty(container, "config_value", {
      get: () => config_value_span.value,
      set: (val) => {
        config_value_span.value = val;
      },
    });
  }
}

// These objects will contain the default value

// This code updates the image options in the PLOT config with the provided ones
function setImageOptions(o) {
  for (const [key, container] of Object.entries(config_spans)) {
    container.config_value = o[key];
  }
}
function unsetImageOptions() {
  setImageOptions({});
}

const set_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.set");
const unset_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.unset");
if (firstRun) {
  set_button.onclick = (e) => {
    for (const container of Object.values(config_spans)) {
      container.config_value = container.ui_value;
    }
  };
  unset_button.onclick = unsetImageOptions;
}

// We add a function to check if the clipboard is popped out
CONTAINER.isPoppedOut = () => {
  return CONTAINER.classList.contains("popped-out");
};

CLIPBOARD_HEADER.onmousedown = function (event) {
  if (event.target.matches("span.clipboard-value")) {
    console.log("We don't move!");
    return;
  }
  const start = {
    left: parseFloat(CONTAINER.style.left),
    top: parseFloat(CONTAINER.style.top),
    X: event.pageX,
    Y: event.pageY,
  };
  function moveAt(event, start) {
    const top = event.pageY - start.Y + start.top + "px";
    const left = event.pageX - start.X + start.left + "px";
    CLIPBOARD_HEADER.style.left = left;
    CONTAINER.style.left = left;
    CONTAINER.style.top = top;
  }

  // move our absolutely positioned ball under the pointer
  moveAt(event, start);
  function onMouseMove(event) {
    moveAt(event, start);
  }

  // We use this to remove the mousemove when clicking outside of the container
  const controller = new AbortController();

  // move the container on mousemove
  document.addEventListener("mousemove", onMouseMove, {
    signal: controller.signal,
  });
  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        cleanUp();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );

  function cleanUp() {
    console.log("cleaning up the plot move listener");
    controller.abort();
    CLIPBOARD_HEADER.onmouseup = null;
  }

  // (3) drop the ball, remove unneeded handlers
  CLIPBOARD_HEADER.onmouseup = cleanUp;
};

function sendToClipboard(blob) {
  if (!navigator.clipboard) {
    alert(
      "The Clipboard API does not seem to be available, make sure the Pluto notebook is being used from either localhost or an https source."
    );
  }
  navigator.clipboard
    .write([
      new ClipboardItem({
        // The key is determined dynamically based on the blob's type.
        [blob.type]: blob,
      }),
    ])
    .then(
      function () {
        console.log("Async: Copying to clipboard was successful!");
      },
      function (err) {
        console.error("Async: Could not copy text: ", err);
      }
    );
}

function copyImageToClipboard() {
  // We extract the image options from the provided parameters (if they exist)
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key. We also ignore format because the clipboard only supports png.
    if (val === undefined || key === "format") {
      continue;
    }
    config[key] = val;
  }
  Plotly.toImage(PLOT, config).then(function (dataUrl) {
    fetch(dataUrl)
      .then((res) => res.blob())
      .then((blob) => {
        const paste_receiver = document.querySelector('paste-receiver.plutoplotly')
        if (paste_receiver) {
          paste_receiver.attachImage(dataUrl, CONTAINER)
        }
        sendToClipboard(blob)
      });
  });
}

function saveImageToFile() {
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key.
    if (val === undefined) {
      continue;
    }
    config[key] = val;
  }
  Plotly.downloadImage(PLOT, config);
}

let container_rect = { width: 0, height: 0, top: 0, left: 0 };
function unpop_container(cl) {
  CONTAINER.classList.toggle("popped-out", false);
  CONTAINER.classList.toggle(cl, false);
  // We fix the height back to the value it had before popout, also setting the flag to signal that upon first resize we remove the fixed inline-style
  CONTAINER.style.height = container_rect.height + "px";
  remove_container_size = true;
  // We set the other fixed inline-styles to null
  CONTAINER.style.width = "";
  CONTAINER.style.top = "";
  CONTAINER.style.left = "";
  // We also remove the CLIPBOARD_HEADER
  CLIPBOARD_HEADER.style.width = "";
  CLIPBOARD_HEADER.style.left = "";
  // Finally we remove the hidden class to the header
  CLIPBOARD_HEADER.classList.toggle("hidden", true);
  return;
}
function popout_container(opts) {
  const cl = opts?.cl;
  const target_container_size = opts?.target_container_size ?? {};
  const target_plot_size = opts?.target_plot_size ?? {};
  if (CONTAINER.isPoppedOut()) {
    return unpop_container(cl);
  }
  CONTAINER.classList.toggle(cl, cl === undefined ? false : true);
  // We extract the current size of the container, save them and fix them
  const { width, height, top, left } = CONTAINER.getBoundingClientRect();
  container_rect = { width, height, top, left };
  // We save the current plot size before we pop as it will fill the screen
  const current_plot_size = {
    width: PLOT._fullLayout.width,
    height: PLOT._fullLayout.height,
  };
  // We have to save the pad data before popping so we can resize precisely
  const pad = {};
  pad.unpopped = getSizeData().container_pad;
  CONTAINER.classList.toggle("popped-out", true);
  pad.popped = getSizeData().container_pad;
  // We do top and left based on the current rect
  for (const key of ["top", "left"]) {
    const start_val = target_container_size[key] ?? container_rect[key];
    let offset = 0;
    for (const kind of ["padding", "border"]) {
      offset += pad.popped[kind][key] - pad.unpopped[kind][key];
    }
    CONTAINER.style[key] = start_val - offset + "px";
    if (key === "left") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  // We compute the width and height depending on eventual config data
  const csz = computeContainerSize({
    width:
      target_plot_size.width ??
      config_spans.width.config_value ??
      current_plot_size.width,
    height:
      target_plot_size.height ??
      config_spans.height.config_value ??
      current_plot_size.height,
  });
  for (const key of ["width", "height"]) {
    const val = target_container_size[key] ?? csz[key];
    CONTAINER.style[key] = val + "px";
    if (key === "width") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  CLIPBOARD_HEADER.classList.toggle("hidden", false);
  const controller = new AbortController();

  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        unpop_container();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );
}

CONTAINER.popOut = popout_container;

function DualClick(single_func, dbl_func) {
  let nclicks = 0;
  return function (...args) {
    nclicks += 1;
    if (nclicks > 1) {
      dbl_func(...args);
      nclicks = 0;
    } else {
      delay(300).then(() => {
        if (nclicks == 1) {
          single_func(...args);
        }
        nclicks = 0;
      });
    }
  };
}

// We remove the default download image button
plot_obj.config.modeBarButtonsToRemove = _.union(
  plot_obj.config.modeBarButtonsToRemove,
  ["toImage"]
);
// We add the custom button to the modebar
plot_obj.config.modeBarButtonsToAdd = _.union(
  plot_obj.config.modeBarButtonsToAdd,
  [
    {
      name: "Copy PNG to Clipboard",
      icon: {
        height: 520,
        width: 520,
        path: "M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z",
      },
      direction: "up",
      click: DualClick(copyImageToClipboard, () => {
        popout_container();
      }),
    },
    {
      name: "Download Image",
      icon: Plotly.Icons.camera,
      direction: "up",
      click: DualClick(saveImageToFile, () => {
        popout_container({ cl: "filesave" });
      }),
    },
  ]
);

function getOffsetData(el) {
  let cs = window.getComputedStyle(el, null);
  const odata = {
    padding: {
      left: parseFloat(cs.paddingLeft),
      right: parseFloat(cs.paddingRight),
      top: parseFloat(cs.paddingTop),
      bottom: parseFloat(cs.paddingBottom),
      width: parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight),
      height: parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom),
    },
    border: {
      left: parseFloat(cs.borderLeftWidth),
      right: parseFloat(cs.borderRightWidth),
      top: parseFloat(cs.borderTopWidth),
      bottom: parseFloat(cs.borderBottomWidth),
      width: parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth),
      height: parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth),
    }
  };
  if (el === PLOT) {
    // For the PLOT we also want to take into account the offset
    odata.offset = {
      top: PLOT.offsetParent == CONTAINER ? PLOT.offsetTop : 0,
      left: PLOT.offsetParent == CONTAINER ? PLOT.offsetLeft : 0,
    }
  }
  return odata;
}
function getSizeData() {
  const data = {
    plot_pad: getOffsetData(PLOT),
    plot_rect: PLOT.getBoundingClientRect(),
    container_pad: getOffsetData(CONTAINER),
    container_rect: CONTAINER.getBoundingClientRect(),
  };
  return data;
}
function computeContainerSize({ width, height }, sizeData = getSizeData()) {
  const computed_size = computePlotSize(sizeData);
  const offsets = computed_size.offsets;

  const plot_data = {
    width: width ?? computed_size.width,
    height: height ?? computed_size.height,
  };

  return {
    width: (width ?? computed_size.width) + offsets.width,
    height: (height ?? computed_size.height) + offsets.height,
    noChange: width == computed_size.width && height == computed_size.height,
  }
}

// This function will change the container size so that the resulting plot will be matching the provided specs
function changeContainerSize({ width, height }, sizeData = getSizeData()) {
  if (!CONTAINER.isPoppedOut()) {
    console.log("Tried to change container size when not popped, ignoring");
    return;
  }

  const csz = computeContainerSize({ width, height }, sizeData);

  if (csz.noChange) {
    console.log("Size is the same as current, ignoring");
    return
  }
  // We are now going to set he width and height of the container
  for (const key of ["width", "height"]) {
    CONTAINER.style[key] = csz[key] + "px";
  }
}
// We now create the function that will update the plot based on the values specified
function updateFromHeader() {
  const header_data = {
    height: config_spans.height.ui_value,
    width: config_spans.width.ui_value,
  };
  changeContainerSize(header_data);
}
// We assign this function to the onblur event of width and height
if (firstRun) {
  for (const container of Object.values(config_spans)) {
    container.ui_span.onblur = (e) => {
      container.ui_value = container.ui_span.textContent;
      updateFromHeader();
    };
  }
}
// This function computes the plot size to use for relayout as a function of the container size
function computePlotSize(data = getSizeData()) {
  // Remove Padding
  const { container_pad, plot_pad, container_rect } = data;
  const offsets = {
    width:
      plot_pad.padding.width +
      plot_pad.border.width +
      plot_pad.offset.left +
      container_pad.padding.width +
      container_pad.border.width,
    height:
      plot_pad.padding.height +
      plot_pad.border.height +
      plot_pad.offset.top +
      container_pad.padding.height +
      container_pad.border.height,
  };
  const sz = {
    width: Math.round(container_rect.width - offsets.width),
    height: Math.round(container_rect.height - offsets.height),
    offsets,
  };
  return sz;
}

// Create the resizeObserver to make the plot even more responsive! :magic:
const resizeObserver = new ResizeObserver((entries) => {
  const sizeData = getSizeData();
  const {container_rect, container_pad} = sizeData;
  let plot_size = computePlotSize(sizeData);
  // We save the height in the PLOT object
  PLOT.container_height = container_rect.height;
  // We deal with some stuff if the container is poppped
  CLIPBOARD_HEADER.style.width = container_rect.width + "px";
  CLIPBOARD_HEADER.style.left = container_rect.left + "px";
  config_spans.height.ui_value = plot_size.height;
  config_spans.width.ui_value = plot_size.width;
  /* 
		The addition of the invalid argument `plutoresize` seems to fix the problem with calling `relayout` simply with `{autosize: true}` as update breaking mouse relayout events tracking. 
		See https://github.com/plotly/plotly.js/issues/6156 for details
		*/
  let config = {
    // If this is popped out, we ignore the original width/height
    width: (CONTAINER.isPoppedOut() ? undefined : original_width) ?? plot_size.width,
    height: (CONTAINER.isPoppedOut() ? undefined : original_height) ?? plot_size.height,
    plutoresize: true,
  };
  Plotly.relayout(PLOT, config).then(() => {
    if (remove_container_size && !CONTAINER.isPoppedOut()) {
      // This is needed to avoid the first resize upon plot creation to already be without a fixed height
      CONTAINER.style.height = "";
      CONTAINER.style.width = "";
      remove_container_size = false;
    }
  });
});

resizeObserver.observe(CONTAINER);


Plotly.react(PLOT, plot_obj).then(() => {
	// Assign the Plotly event listeners
	for (const [key, listener_vec] of Object.entries(plotly_listeners)) {
		for (const listener of listener_vec) {
			PLOT.on(key, listener)
		}
	}
	// Assign the JS event listeners
	for (const [key, listener_vec] of Object.entries(js_listeners)) {
		for (const listener of listener_vec) {
			PLOT.addEventListener(key, listener, {
				signal: controller.signal
			})
		}
	}
}
)


invalidation.then(() => {
	// Remove all plotly listeners
	PLOT.removeAllListeners()
	// Remove all JS listeners
	controller.abort()
	// Remove the resizeObserver
	resizeObserver.disconnect()
})



		return CONTAINER
	</script>
</td></tr><tr><td align="right">No usable ace</td><td align="center">	<script id='plot_3'>
		// We start by putting all the variable interpolation here at the beginning
		// We have to convert all typedarrays in the layout to normal arrays. See Issue #25
		// We use lodash for this for compactness
		function removeTypedArray(o) {
			return _.isTypedArray(o) ? Array.from(o) :
			_.isPlainObject(o) ? _.mapValues(o, removeTypedArray) : 
			o
		}

		// Publish the plot object to JS
		let plot_obj = _.update(/* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("c6e0de0c-3901-11f0-234e-bd09c571f662/1c437dfc407d8916"), "layout", removeTypedArray)
		// Get the plotly listeners
		const plotly_listeners = {}
		// Get the JS listeners
		const js_listeners = {}
		// Deal with eventual custom classes
		let custom_classlist = []


		// Load the plotly library
		let Plotly = undefined
		try {
			let _mod = await import("./plotlyjs/plotlyjs-2.26.2.min.js")
			Plotly = _mod.default
		} catch (e) {
			console.log("Local load failed, trying with the web esm.sh version")
			let _mod = await import("https://esm.sh/plotly.js-dist-min@2.26.2/es2022/plotly.js-dist-min.mjs")
			Plotly = _mod.default
		}

		// Check if we have to force local mathjax font cache
		if (false && window?.MathJax?.config?.svg?.fontCache === 'global') {
			window.MathJax.config.svg.fontCache = 'local'
		}

		// Flag to check if this cell was  manually ran or reactively ran
const firstRun = this ? false : true
const CONTAINER = this ?? html`<div class='plutoplotly-container'>`
const PLOT = CONTAINER.querySelector('.js-plotly-plot') ?? CONTAINER.appendChild(html`<div>`)
const parent = CONTAINER.parentElement
// We use a controller to remove event listeners upon invalidation
const controller = new AbortController()
// We have to add this to keep supporting @bind with the old API using PLOT
PLOT.addEventListener('input', (e) => {
	CONTAINER.value = PLOT.value
	if (e.bubbles) {
		return
	}
	CONTAINER.dispatchEvent(new CustomEvent('input'))
}, { signal: controller.signal })

	// This create the style subdiv on first run
	firstRun && CONTAINER.appendChild(html`
	<style>
	.plutoplotly-container {
		width: 100%;
		height: 100%;
		min-height: 0;
		min-width: 0;
	}
	.plutoplotly-container .js-plotly-plot .plotly div {
		margin: 0 auto; // This centers the plot
	}
	.plutoplotly-container.popped-out {
		overflow: auto;
		z-index: 1000;
		position: fixed;
		resize: both;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		border-top-left-radius: 0px;
		border-top-right-radius: 0px;
	}
	.plutoplotly-clipboard-header {
		display: flex;
		flex-flow: row wrap;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-top-left-radius: 12px;
		border-top-right-radius: 12px;
		position: fixed;
		z-index: 1001;
		cursor: move;
		transform: translate(0px, -100%);
		padding: 5px;
	}
	.plutoplotly-clipboard-header span {
		display: inline-block;
		flex: 1
	}
	.plutoplotly-clipboard-header.hidden {
		display: none;
	}
	.clipboard-span {
		position: relative;
	}
	.clipboard-value {
		padding-right: 5px;
		padding-left: 2px;
		cursor: text;
	}
	.clipboard-span.format {
		display: none;
	}
	.clipboard-span.filename {
		flex: 0 0 100%;
		text-align: center;
		border-top: 3px solid var(--kbd-border-color);
		margin-top: 5px;
		display: none;
	}
	.plutoplotly-container.filesave .clipboard-span.filename {
		display: inline-block;
	}
	.clipboard-value.filename {
		margin-left: 3px;
		text-align: left;
		min-width: min(60%, min-content);
	}
	.plutoplotly-container.filesave .clipboard-span.format {
		display: inline-flex;
	}
	.clipboard-span.format .label {
		flex: 0 0 0;
	}
	.clipboard-value.format {
		position: relative;
		flex: 1 0 auto;
		min-width: 30px;
		margin-right: 10px;
	}
	div.format-options {
		display: inline-flex;
		flex-flow: column;
		position: absolute;
		background: var(--main-bg-color);
		border-radius: 12px;
		padding-left: 3px;
		z-index: 2000;
	}
	div.format-options:hover {
		cursor: pointer;
		border: 3px solid var(--kbd-border-color);
		padding: 3px;
		transform: translate(-3px, -6px);
	}
	div.format-options .format-option {
		display: none;
	}
	div.format-options:hover .format-option {
		display: inline-block;
	}
	.format-option:not(.selected) {
		margin-top: 3px;
	}
	div.format-options .format-option.selected {
		order: -1;
		display: inline-block;
	}
	.format-option:hover {
		background-color: var(--kbd-border-color);
	}
	span.config-value {
		font-weight: normal;
		color: var(--pluto-output-color);
		display: none;
		position: absolute;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		transform: translate(0px, calc(-100% - 10px));
		padding: 5px;
	}
	.label {
		user-select: none;
	}
	.label:hover span.config-value {
		display: inline-block;
		min-width: 150px;
	}
	.clipboard-span.matching-config .label {
		color: var(--cm-macro-color);
		font-weight: bold;
	}
	.clipboard-span.different-config .label {
		color: var(--cm-tag-color);
		font-weight: bold;
	}
</style>
`)

let original_height = plot_obj.layout.height
let original_width = plot_obj.layout.width
// For the height we have to also put a fixed value in case the plot is put on a non-fixed-size container (like the default wrapper)
// We define a variable to check whether we still have to remove the fixed height
let remove_container_size = firstRun
let container_height = original_height ?? PLOT.container_height ?? 400
CONTAINER.style.height = container_height + 'px'

// We create a Promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// We import interact for dragging/resizing
const { default: interact } = await import('https://esm.sh/interactjs@1.10.19')


function getImageOptions() {
  const o = plot_obj.config.toImageButtonOptions ?? {};
  return {
    format: o.format ?? "png",
    width: o.width ?? original_width,
    height: o.height ?? original_height,
    scale: o.scale ?? 1,
    filename: o.filename ?? "newplot",
  };
}

const CLIPBOARD_HEADER =
  CONTAINER.querySelector(".plutoplotly-clipboard-header") ??
  CONTAINER.insertAdjacentElement(
    "afterbegin",
    html`<div class="plutoplotly-clipboard-header hidden">
      <span class="clipboard-span format"
        ><span class="label">Format:</span
        ><span class="clipboard-value format"></span
      ></span>
      <span class="clipboard-span width"
        ><span class="label">Width:</span
        ><span class="clipboard-value width"></span>px</span
      >
      <span class="clipboard-span height"
        ><span class="label">Height:</span
        ><span class="clipboard-value height"></span>px</span
      >
      <span class="clipboard-span scale"
        ><span class="label">Scale:</span
        ><span class="clipboard-value scale"></span
      ></span>
      <button class="clipboard-span set">Set</button>
      <button class="clipboard-span unset">Unset</button>
      <span class="clipboard-span filename"
        ><span class="label">Filename:</span
        ><span class="clipboard-value filename"></span
      ></span>
    </div>`
  );

function checkConfigSync(container) {
  const valid_classes = [
    "missing-config",
    "matching-config",
    "different-config",
  ];
  function setClass(cl) {
    for (const name of valid_classes) {
      container.classList.toggle(name, name == cl);
    }
  }
  // We use the custom getters we'll set up in the container
  const { ui_value, config_value, config_span, key } = container;
  if (config_value === undefined) {
    setClass("missing-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> is not present in the config.`;
  } else if (ui_value == config_value) {
    setClass("matching-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has the same value in the config and in the header.`;
  } else {
    setClass("different-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has a different value (<em>${config_value}</em>) in the config.`;
  }
  // Add info about setting and unsetting
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click on the label <em><b>once</b></em> to set the current UI value in the config.`
  );
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click <em><b>twice</b></em> to remove this key from the config.`
  );
}

const valid_formats = ["png", "svg", "webp", "jpeg", "full-json"];
function initializeUIValueSpan(span, key, value) {
  const container = span.closest(".clipboard-span");
  span.contentEditable = key === "format" ? "false" : "true";
  let parse = (x) => x;
  let update = (x) => (span.textContent = x);
  if (key === "width" || key === "height") {
    parse = (x) => Math.round(parseFloat(x));
  } else if (key === "scale") {
    parse = parseFloat;
  } else if (key === "format") {
    // We remove contentEditable
    span.contentEditable = "false";
    // Here we first add the subspans for each option
    const opts_div = span.appendChild(html`<div class="format-options"></div>`);
    for (const fmt of valid_formats) {
      const opt = opts_div.appendChild(
        html`<span class="format-option ${fmt}">${fmt}</span>`
      );
      opt.onclick = (e) => {
        span.value = opt.textContent;
      };
    }
    parse = (x) => {
      return valid_formats.includes(x) ? x : localValue;
    };
    update = (x) => {
      for (const opt of opts_div.children) {
        opt.classList.toggle("selected", opt.textContent === x);
      }
    };
  } else {
    // We only have filename here
  }
  let localValue;
  Object.defineProperty(span, "value", {
    get: () => {
      return localValue;
    },
    set: (val) => {
      if (val !== "") {
        localValue = parse(val);
      }
      update(localValue);
      checkConfigSync(container);
    },
  });
  // We also assign a listener so that the editable is blurred when enter is pressed
  span.onkeydown = (e) => {
    if (e.keyCode === 13) {
      e.preventDefault();
      span.blur();
    }
  };
  span.value = value;
}

function initializeConfigValueSpan(span, key) {
  // Here we mostly want to define the setter and getter
  const container = span.closest(".clipboard-span");
  Object.defineProperty(span, "value", {
    get: () => {
      return plot_obj.config.toImageButtonOptions[key];
    },
    set: (val) => {
      // if undefined is passed, we remove the entry from the options
      if (val === undefined) {
        delete plot_obj.config.toImageButtonOptions[key];
      } else {
        plot_obj.config.toImageButtonOptions[key] = val;
      }
      checkConfigSync(container);
    },
  });
}

const config_spans = {};
for (const [key, value] of Object.entries(getImageOptions())) {
  const container = CLIPBOARD_HEADER.querySelector(`.clipboard-span.${key}`);
  const label = container.querySelector(".label");
  // We give the label a function that on single click will set the current value and with double click will unset it
  label.onclick = DualClick(
    () => {
      container.config_value = container.ui_value;
    },
    (e) => {
      console.log("e", e);
      e.preventDefault();
      container.config_value = undefined;
    }
  );
  const ui_value_span = container.querySelector(".clipboard-value");
  const config_value_span =
    container.querySelector(".config-value") ??
    label.insertAdjacentElement(
      "afterbegin",
      html`<span class="config-value"></span>`
    );
  // Assing the two spans as properties of the containing span
  container.ui_span = ui_value_span;
  container.config_span = config_value_span;
  container.key = key;
  config_spans[key] = container;
  if (firstRun) {
    plot_obj.config.toImageButtonOptions =
      plot_obj.config.toImageButtonOptions ?? {};
    // We do the initialization of the value span
    initializeUIValueSpan(ui_value_span, key, value);
    // Then we initialize the config value
    initializeConfigValueSpan(config_value_span, key);
    // We put some convenience getters/setters
    // ui_value forward
    Object.defineProperty(container, "ui_value", {
      get: () => ui_value_span.value,
      set: (val) => {
        ui_value_span.value = val;
      },
    });
    // config_value forward
    Object.defineProperty(container, "config_value", {
      get: () => config_value_span.value,
      set: (val) => {
        config_value_span.value = val;
      },
    });
  }
}

// These objects will contain the default value

// This code updates the image options in the PLOT config with the provided ones
function setImageOptions(o) {
  for (const [key, container] of Object.entries(config_spans)) {
    container.config_value = o[key];
  }
}
function unsetImageOptions() {
  setImageOptions({});
}

const set_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.set");
const unset_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.unset");
if (firstRun) {
  set_button.onclick = (e) => {
    for (const container of Object.values(config_spans)) {
      container.config_value = container.ui_value;
    }
  };
  unset_button.onclick = unsetImageOptions;
}

// We add a function to check if the clipboard is popped out
CONTAINER.isPoppedOut = () => {
  return CONTAINER.classList.contains("popped-out");
};

CLIPBOARD_HEADER.onmousedown = function (event) {
  if (event.target.matches("span.clipboard-value")) {
    console.log("We don't move!");
    return;
  }
  const start = {
    left: parseFloat(CONTAINER.style.left),
    top: parseFloat(CONTAINER.style.top),
    X: event.pageX,
    Y: event.pageY,
  };
  function moveAt(event, start) {
    const top = event.pageY - start.Y + start.top + "px";
    const left = event.pageX - start.X + start.left + "px";
    CLIPBOARD_HEADER.style.left = left;
    CONTAINER.style.left = left;
    CONTAINER.style.top = top;
  }

  // move our absolutely positioned ball under the pointer
  moveAt(event, start);
  function onMouseMove(event) {
    moveAt(event, start);
  }

  // We use this to remove the mousemove when clicking outside of the container
  const controller = new AbortController();

  // move the container on mousemove
  document.addEventListener("mousemove", onMouseMove, {
    signal: controller.signal,
  });
  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        cleanUp();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );

  function cleanUp() {
    console.log("cleaning up the plot move listener");
    controller.abort();
    CLIPBOARD_HEADER.onmouseup = null;
  }

  // (3) drop the ball, remove unneeded handlers
  CLIPBOARD_HEADER.onmouseup = cleanUp;
};

function sendToClipboard(blob) {
  if (!navigator.clipboard) {
    alert(
      "The Clipboard API does not seem to be available, make sure the Pluto notebook is being used from either localhost or an https source."
    );
  }
  navigator.clipboard
    .write([
      new ClipboardItem({
        // The key is determined dynamically based on the blob's type.
        [blob.type]: blob,
      }),
    ])
    .then(
      function () {
        console.log("Async: Copying to clipboard was successful!");
      },
      function (err) {
        console.error("Async: Could not copy text: ", err);
      }
    );
}

function copyImageToClipboard() {
  // We extract the image options from the provided parameters (if they exist)
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key. We also ignore format because the clipboard only supports png.
    if (val === undefined || key === "format") {
      continue;
    }
    config[key] = val;
  }
  Plotly.toImage(PLOT, config).then(function (dataUrl) {
    fetch(dataUrl)
      .then((res) => res.blob())
      .then((blob) => {
        const paste_receiver = document.querySelector('paste-receiver.plutoplotly')
        if (paste_receiver) {
          paste_receiver.attachImage(dataUrl, CONTAINER)
        }
        sendToClipboard(blob)
      });
  });
}

function saveImageToFile() {
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key.
    if (val === undefined) {
      continue;
    }
    config[key] = val;
  }
  Plotly.downloadImage(PLOT, config);
}

let container_rect = { width: 0, height: 0, top: 0, left: 0 };
function unpop_container(cl) {
  CONTAINER.classList.toggle("popped-out", false);
  CONTAINER.classList.toggle(cl, false);
  // We fix the height back to the value it had before popout, also setting the flag to signal that upon first resize we remove the fixed inline-style
  CONTAINER.style.height = container_rect.height + "px";
  remove_container_size = true;
  // We set the other fixed inline-styles to null
  CONTAINER.style.width = "";
  CONTAINER.style.top = "";
  CONTAINER.style.left = "";
  // We also remove the CLIPBOARD_HEADER
  CLIPBOARD_HEADER.style.width = "";
  CLIPBOARD_HEADER.style.left = "";
  // Finally we remove the hidden class to the header
  CLIPBOARD_HEADER.classList.toggle("hidden", true);
  return;
}
function popout_container(opts) {
  const cl = opts?.cl;
  const target_container_size = opts?.target_container_size ?? {};
  const target_plot_size = opts?.target_plot_size ?? {};
  if (CONTAINER.isPoppedOut()) {
    return unpop_container(cl);
  }
  CONTAINER.classList.toggle(cl, cl === undefined ? false : true);
  // We extract the current size of the container, save them and fix them
  const { width, height, top, left } = CONTAINER.getBoundingClientRect();
  container_rect = { width, height, top, left };
  // We save the current plot size before we pop as it will fill the screen
  const current_plot_size = {
    width: PLOT._fullLayout.width,
    height: PLOT._fullLayout.height,
  };
  // We have to save the pad data before popping so we can resize precisely
  const pad = {};
  pad.unpopped = getSizeData().container_pad;
  CONTAINER.classList.toggle("popped-out", true);
  pad.popped = getSizeData().container_pad;
  // We do top and left based on the current rect
  for (const key of ["top", "left"]) {
    const start_val = target_container_size[key] ?? container_rect[key];
    let offset = 0;
    for (const kind of ["padding", "border"]) {
      offset += pad.popped[kind][key] - pad.unpopped[kind][key];
    }
    CONTAINER.style[key] = start_val - offset + "px";
    if (key === "left") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  // We compute the width and height depending on eventual config data
  const csz = computeContainerSize({
    width:
      target_plot_size.width ??
      config_spans.width.config_value ??
      current_plot_size.width,
    height:
      target_plot_size.height ??
      config_spans.height.config_value ??
      current_plot_size.height,
  });
  for (const key of ["width", "height"]) {
    const val = target_container_size[key] ?? csz[key];
    CONTAINER.style[key] = val + "px";
    if (key === "width") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  CLIPBOARD_HEADER.classList.toggle("hidden", false);
  const controller = new AbortController();

  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        unpop_container();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );
}

CONTAINER.popOut = popout_container;

function DualClick(single_func, dbl_func) {
  let nclicks = 0;
  return function (...args) {
    nclicks += 1;
    if (nclicks > 1) {
      dbl_func(...args);
      nclicks = 0;
    } else {
      delay(300).then(() => {
        if (nclicks == 1) {
          single_func(...args);
        }
        nclicks = 0;
      });
    }
  };
}

// We remove the default download image button
plot_obj.config.modeBarButtonsToRemove = _.union(
  plot_obj.config.modeBarButtonsToRemove,
  ["toImage"]
);
// We add the custom button to the modebar
plot_obj.config.modeBarButtonsToAdd = _.union(
  plot_obj.config.modeBarButtonsToAdd,
  [
    {
      name: "Copy PNG to Clipboard",
      icon: {
        height: 520,
        width: 520,
        path: "M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z",
      },
      direction: "up",
      click: DualClick(copyImageToClipboard, () => {
        popout_container();
      }),
    },
    {
      name: "Download Image",
      icon: Plotly.Icons.camera,
      direction: "up",
      click: DualClick(saveImageToFile, () => {
        popout_container({ cl: "filesave" });
      }),
    },
  ]
);

function getOffsetData(el) {
  let cs = window.getComputedStyle(el, null);
  const odata = {
    padding: {
      left: parseFloat(cs.paddingLeft),
      right: parseFloat(cs.paddingRight),
      top: parseFloat(cs.paddingTop),
      bottom: parseFloat(cs.paddingBottom),
      width: parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight),
      height: parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom),
    },
    border: {
      left: parseFloat(cs.borderLeftWidth),
      right: parseFloat(cs.borderRightWidth),
      top: parseFloat(cs.borderTopWidth),
      bottom: parseFloat(cs.borderBottomWidth),
      width: parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth),
      height: parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth),
    }
  };
  if (el === PLOT) {
    // For the PLOT we also want to take into account the offset
    odata.offset = {
      top: PLOT.offsetParent == CONTAINER ? PLOT.offsetTop : 0,
      left: PLOT.offsetParent == CONTAINER ? PLOT.offsetLeft : 0,
    }
  }
  return odata;
}
function getSizeData() {
  const data = {
    plot_pad: getOffsetData(PLOT),
    plot_rect: PLOT.getBoundingClientRect(),
    container_pad: getOffsetData(CONTAINER),
    container_rect: CONTAINER.getBoundingClientRect(),
  };
  return data;
}
function computeContainerSize({ width, height }, sizeData = getSizeData()) {
  const computed_size = computePlotSize(sizeData);
  const offsets = computed_size.offsets;

  const plot_data = {
    width: width ?? computed_size.width,
    height: height ?? computed_size.height,
  };

  return {
    width: (width ?? computed_size.width) + offsets.width,
    height: (height ?? computed_size.height) + offsets.height,
    noChange: width == computed_size.width && height == computed_size.height,
  }
}

// This function will change the container size so that the resulting plot will be matching the provided specs
function changeContainerSize({ width, height }, sizeData = getSizeData()) {
  if (!CONTAINER.isPoppedOut()) {
    console.log("Tried to change container size when not popped, ignoring");
    return;
  }

  const csz = computeContainerSize({ width, height }, sizeData);

  if (csz.noChange) {
    console.log("Size is the same as current, ignoring");
    return
  }
  // We are now going to set he width and height of the container
  for (const key of ["width", "height"]) {
    CONTAINER.style[key] = csz[key] + "px";
  }
}
// We now create the function that will update the plot based on the values specified
function updateFromHeader() {
  const header_data = {
    height: config_spans.height.ui_value,
    width: config_spans.width.ui_value,
  };
  changeContainerSize(header_data);
}
// We assign this function to the onblur event of width and height
if (firstRun) {
  for (const container of Object.values(config_spans)) {
    container.ui_span.onblur = (e) => {
      container.ui_value = container.ui_span.textContent;
      updateFromHeader();
    };
  }
}
// This function computes the plot size to use for relayout as a function of the container size
function computePlotSize(data = getSizeData()) {
  // Remove Padding
  const { container_pad, plot_pad, container_rect } = data;
  const offsets = {
    width:
      plot_pad.padding.width +
      plot_pad.border.width +
      plot_pad.offset.left +
      container_pad.padding.width +
      container_pad.border.width,
    height:
      plot_pad.padding.height +
      plot_pad.border.height +
      plot_pad.offset.top +
      container_pad.padding.height +
      container_pad.border.height,
  };
  const sz = {
    width: Math.round(container_rect.width - offsets.width),
    height: Math.round(container_rect.height - offsets.height),
    offsets,
  };
  return sz;
}

// Create the resizeObserver to make the plot even more responsive! :magic:
const resizeObserver = new ResizeObserver((entries) => {
  const sizeData = getSizeData();
  const {container_rect, container_pad} = sizeData;
  let plot_size = computePlotSize(sizeData);
  // We save the height in the PLOT object
  PLOT.container_height = container_rect.height;
  // We deal with some stuff if the container is poppped
  CLIPBOARD_HEADER.style.width = container_rect.width + "px";
  CLIPBOARD_HEADER.style.left = container_rect.left + "px";
  config_spans.height.ui_value = plot_size.height;
  config_spans.width.ui_value = plot_size.width;
  /* 
		The addition of the invalid argument `plutoresize` seems to fix the problem with calling `relayout` simply with `{autosize: true}` as update breaking mouse relayout events tracking. 
		See https://github.com/plotly/plotly.js/issues/6156 for details
		*/
  let config = {
    // If this is popped out, we ignore the original width/height
    width: (CONTAINER.isPoppedOut() ? undefined : original_width) ?? plot_size.width,
    height: (CONTAINER.isPoppedOut() ? undefined : original_height) ?? plot_size.height,
    plutoresize: true,
  };
  Plotly.relayout(PLOT, config).then(() => {
    if (remove_container_size && !CONTAINER.isPoppedOut()) {
      // This is needed to avoid the first resize upon plot creation to already be without a fixed height
      CONTAINER.style.height = "";
      CONTAINER.style.width = "";
      remove_container_size = false;
    }
  });
});

resizeObserver.observe(CONTAINER);


Plotly.react(PLOT, plot_obj).then(() => {
	// Assign the Plotly event listeners
	for (const [key, listener_vec] of Object.entries(plotly_listeners)) {
		for (const listener of listener_vec) {
			PLOT.on(key, listener)
		}
	}
	// Assign the JS event listeners
	for (const [key, listener_vec] of Object.entries(js_listeners)) {
		for (const listener of listener_vec) {
			PLOT.addEventListener(key, listener, {
				signal: controller.signal
			})
		}
	}
}
)


invalidation.then(() => {
	// Remove all plotly listeners
	PLOT.removeAllListeners()
	// Remove all JS listeners
	controller.abort()
	// Remove the resizeObserver
	resizeObserver.disconnect()
})



		return CONTAINER
	</script>
</td><td align="center">	<script id='plot_4'>
		// We start by putting all the variable interpolation here at the beginning
		// We have to convert all typedarrays in the layout to normal arrays. See Issue #25
		// We use lodash for this for compactness
		function removeTypedArray(o) {
			return _.isTypedArray(o) ? Array.from(o) :
			_.isPlainObject(o) ? _.mapValues(o, removeTypedArray) : 
			o
		}

		// Publish the plot object to JS
		let plot_obj = _.update(/* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("c6e0de0c-3901-11f0-234e-bd09c571f662/10b6971fa80c859d"), "layout", removeTypedArray)
		// Get the plotly listeners
		const plotly_listeners = {}
		// Get the JS listeners
		const js_listeners = {}
		// Deal with eventual custom classes
		let custom_classlist = []


		// Load the plotly library
		let Plotly = undefined
		try {
			let _mod = await import("./plotlyjs/plotlyjs-2.26.2.min.js")
			Plotly = _mod.default
		} catch (e) {
			console.log("Local load failed, trying with the web esm.sh version")
			let _mod = await import("https://esm.sh/plotly.js-dist-min@2.26.2/es2022/plotly.js-dist-min.mjs")
			Plotly = _mod.default
		}

		// Check if we have to force local mathjax font cache
		if (false && window?.MathJax?.config?.svg?.fontCache === 'global') {
			window.MathJax.config.svg.fontCache = 'local'
		}

		// Flag to check if this cell was  manually ran or reactively ran
const firstRun = this ? false : true
const CONTAINER = this ?? html`<div class='plutoplotly-container'>`
const PLOT = CONTAINER.querySelector('.js-plotly-plot') ?? CONTAINER.appendChild(html`<div>`)
const parent = CONTAINER.parentElement
// We use a controller to remove event listeners upon invalidation
const controller = new AbortController()
// We have to add this to keep supporting @bind with the old API using PLOT
PLOT.addEventListener('input', (e) => {
	CONTAINER.value = PLOT.value
	if (e.bubbles) {
		return
	}
	CONTAINER.dispatchEvent(new CustomEvent('input'))
}, { signal: controller.signal })

	// This create the style subdiv on first run
	firstRun && CONTAINER.appendChild(html`
	<style>
	.plutoplotly-container {
		width: 100%;
		height: 100%;
		min-height: 0;
		min-width: 0;
	}
	.plutoplotly-container .js-plotly-plot .plotly div {
		margin: 0 auto; // This centers the plot
	}
	.plutoplotly-container.popped-out {
		overflow: auto;
		z-index: 1000;
		position: fixed;
		resize: both;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		border-top-left-radius: 0px;
		border-top-right-radius: 0px;
	}
	.plutoplotly-clipboard-header {
		display: flex;
		flex-flow: row wrap;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-top-left-radius: 12px;
		border-top-right-radius: 12px;
		position: fixed;
		z-index: 1001;
		cursor: move;
		transform: translate(0px, -100%);
		padding: 5px;
	}
	.plutoplotly-clipboard-header span {
		display: inline-block;
		flex: 1
	}
	.plutoplotly-clipboard-header.hidden {
		display: none;
	}
	.clipboard-span {
		position: relative;
	}
	.clipboard-value {
		padding-right: 5px;
		padding-left: 2px;
		cursor: text;
	}
	.clipboard-span.format {
		display: none;
	}
	.clipboard-span.filename {
		flex: 0 0 100%;
		text-align: center;
		border-top: 3px solid var(--kbd-border-color);
		margin-top: 5px;
		display: none;
	}
	.plutoplotly-container.filesave .clipboard-span.filename {
		display: inline-block;
	}
	.clipboard-value.filename {
		margin-left: 3px;
		text-align: left;
		min-width: min(60%, min-content);
	}
	.plutoplotly-container.filesave .clipboard-span.format {
		display: inline-flex;
	}
	.clipboard-span.format .label {
		flex: 0 0 0;
	}
	.clipboard-value.format {
		position: relative;
		flex: 1 0 auto;
		min-width: 30px;
		margin-right: 10px;
	}
	div.format-options {
		display: inline-flex;
		flex-flow: column;
		position: absolute;
		background: var(--main-bg-color);
		border-radius: 12px;
		padding-left: 3px;
		z-index: 2000;
	}
	div.format-options:hover {
		cursor: pointer;
		border: 3px solid var(--kbd-border-color);
		padding: 3px;
		transform: translate(-3px, -6px);
	}
	div.format-options .format-option {
		display: none;
	}
	div.format-options:hover .format-option {
		display: inline-block;
	}
	.format-option:not(.selected) {
		margin-top: 3px;
	}
	div.format-options .format-option.selected {
		order: -1;
		display: inline-block;
	}
	.format-option:hover {
		background-color: var(--kbd-border-color);
	}
	span.config-value {
		font-weight: normal;
		color: var(--pluto-output-color);
		display: none;
		position: absolute;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		transform: translate(0px, calc(-100% - 10px));
		padding: 5px;
	}
	.label {
		user-select: none;
	}
	.label:hover span.config-value {
		display: inline-block;
		min-width: 150px;
	}
	.clipboard-span.matching-config .label {
		color: var(--cm-macro-color);
		font-weight: bold;
	}
	.clipboard-span.different-config .label {
		color: var(--cm-tag-color);
		font-weight: bold;
	}
</style>
`)

let original_height = plot_obj.layout.height
let original_width = plot_obj.layout.width
// For the height we have to also put a fixed value in case the plot is put on a non-fixed-size container (like the default wrapper)
// We define a variable to check whether we still have to remove the fixed height
let remove_container_size = firstRun
let container_height = original_height ?? PLOT.container_height ?? 400
CONTAINER.style.height = container_height + 'px'

// We create a Promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// We import interact for dragging/resizing
const { default: interact } = await import('https://esm.sh/interactjs@1.10.19')


function getImageOptions() {
  const o = plot_obj.config.toImageButtonOptions ?? {};
  return {
    format: o.format ?? "png",
    width: o.width ?? original_width,
    height: o.height ?? original_height,
    scale: o.scale ?? 1,
    filename: o.filename ?? "newplot",
  };
}

const CLIPBOARD_HEADER =
  CONTAINER.querySelector(".plutoplotly-clipboard-header") ??
  CONTAINER.insertAdjacentElement(
    "afterbegin",
    html`<div class="plutoplotly-clipboard-header hidden">
      <span class="clipboard-span format"
        ><span class="label">Format:</span
        ><span class="clipboard-value format"></span
      ></span>
      <span class="clipboard-span width"
        ><span class="label">Width:</span
        ><span class="clipboard-value width"></span>px</span
      >
      <span class="clipboard-span height"
        ><span class="label">Height:</span
        ><span class="clipboard-value height"></span>px</span
      >
      <span class="clipboard-span scale"
        ><span class="label">Scale:</span
        ><span class="clipboard-value scale"></span
      ></span>
      <button class="clipboard-span set">Set</button>
      <button class="clipboard-span unset">Unset</button>
      <span class="clipboard-span filename"
        ><span class="label">Filename:</span
        ><span class="clipboard-value filename"></span
      ></span>
    </div>`
  );

function checkConfigSync(container) {
  const valid_classes = [
    "missing-config",
    "matching-config",
    "different-config",
  ];
  function setClass(cl) {
    for (const name of valid_classes) {
      container.classList.toggle(name, name == cl);
    }
  }
  // We use the custom getters we'll set up in the container
  const { ui_value, config_value, config_span, key } = container;
  if (config_value === undefined) {
    setClass("missing-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> is not present in the config.`;
  } else if (ui_value == config_value) {
    setClass("matching-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has the same value in the config and in the header.`;
  } else {
    setClass("different-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has a different value (<em>${config_value}</em>) in the config.`;
  }
  // Add info about setting and unsetting
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click on the label <em><b>once</b></em> to set the current UI value in the config.`
  );
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click <em><b>twice</b></em> to remove this key from the config.`
  );
}

const valid_formats = ["png", "svg", "webp", "jpeg", "full-json"];
function initializeUIValueSpan(span, key, value) {
  const container = span.closest(".clipboard-span");
  span.contentEditable = key === "format" ? "false" : "true";
  let parse = (x) => x;
  let update = (x) => (span.textContent = x);
  if (key === "width" || key === "height") {
    parse = (x) => Math.round(parseFloat(x));
  } else if (key === "scale") {
    parse = parseFloat;
  } else if (key === "format") {
    // We remove contentEditable
    span.contentEditable = "false";
    // Here we first add the subspans for each option
    const opts_div = span.appendChild(html`<div class="format-options"></div>`);
    for (const fmt of valid_formats) {
      const opt = opts_div.appendChild(
        html`<span class="format-option ${fmt}">${fmt}</span>`
      );
      opt.onclick = (e) => {
        span.value = opt.textContent;
      };
    }
    parse = (x) => {
      return valid_formats.includes(x) ? x : localValue;
    };
    update = (x) => {
      for (const opt of opts_div.children) {
        opt.classList.toggle("selected", opt.textContent === x);
      }
    };
  } else {
    // We only have filename here
  }
  let localValue;
  Object.defineProperty(span, "value", {
    get: () => {
      return localValue;
    },
    set: (val) => {
      if (val !== "") {
        localValue = parse(val);
      }
      update(localValue);
      checkConfigSync(container);
    },
  });
  // We also assign a listener so that the editable is blurred when enter is pressed
  span.onkeydown = (e) => {
    if (e.keyCode === 13) {
      e.preventDefault();
      span.blur();
    }
  };
  span.value = value;
}

function initializeConfigValueSpan(span, key) {
  // Here we mostly want to define the setter and getter
  const container = span.closest(".clipboard-span");
  Object.defineProperty(span, "value", {
    get: () => {
      return plot_obj.config.toImageButtonOptions[key];
    },
    set: (val) => {
      // if undefined is passed, we remove the entry from the options
      if (val === undefined) {
        delete plot_obj.config.toImageButtonOptions[key];
      } else {
        plot_obj.config.toImageButtonOptions[key] = val;
      }
      checkConfigSync(container);
    },
  });
}

const config_spans = {};
for (const [key, value] of Object.entries(getImageOptions())) {
  const container = CLIPBOARD_HEADER.querySelector(`.clipboard-span.${key}`);
  const label = container.querySelector(".label");
  // We give the label a function that on single click will set the current value and with double click will unset it
  label.onclick = DualClick(
    () => {
      container.config_value = container.ui_value;
    },
    (e) => {
      console.log("e", e);
      e.preventDefault();
      container.config_value = undefined;
    }
  );
  const ui_value_span = container.querySelector(".clipboard-value");
  const config_value_span =
    container.querySelector(".config-value") ??
    label.insertAdjacentElement(
      "afterbegin",
      html`<span class="config-value"></span>`
    );
  // Assing the two spans as properties of the containing span
  container.ui_span = ui_value_span;
  container.config_span = config_value_span;
  container.key = key;
  config_spans[key] = container;
  if (firstRun) {
    plot_obj.config.toImageButtonOptions =
      plot_obj.config.toImageButtonOptions ?? {};
    // We do the initialization of the value span
    initializeUIValueSpan(ui_value_span, key, value);
    // Then we initialize the config value
    initializeConfigValueSpan(config_value_span, key);
    // We put some convenience getters/setters
    // ui_value forward
    Object.defineProperty(container, "ui_value", {
      get: () => ui_value_span.value,
      set: (val) => {
        ui_value_span.value = val;
      },
    });
    // config_value forward
    Object.defineProperty(container, "config_value", {
      get: () => config_value_span.value,
      set: (val) => {
        config_value_span.value = val;
      },
    });
  }
}

// These objects will contain the default value

// This code updates the image options in the PLOT config with the provided ones
function setImageOptions(o) {
  for (const [key, container] of Object.entries(config_spans)) {
    container.config_value = o[key];
  }
}
function unsetImageOptions() {
  setImageOptions({});
}

const set_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.set");
const unset_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.unset");
if (firstRun) {
  set_button.onclick = (e) => {
    for (const container of Object.values(config_spans)) {
      container.config_value = container.ui_value;
    }
  };
  unset_button.onclick = unsetImageOptions;
}

// We add a function to check if the clipboard is popped out
CONTAINER.isPoppedOut = () => {
  return CONTAINER.classList.contains("popped-out");
};

CLIPBOARD_HEADER.onmousedown = function (event) {
  if (event.target.matches("span.clipboard-value")) {
    console.log("We don't move!");
    return;
  }
  const start = {
    left: parseFloat(CONTAINER.style.left),
    top: parseFloat(CONTAINER.style.top),
    X: event.pageX,
    Y: event.pageY,
  };
  function moveAt(event, start) {
    const top = event.pageY - start.Y + start.top + "px";
    const left = event.pageX - start.X + start.left + "px";
    CLIPBOARD_HEADER.style.left = left;
    CONTAINER.style.left = left;
    CONTAINER.style.top = top;
  }

  // move our absolutely positioned ball under the pointer
  moveAt(event, start);
  function onMouseMove(event) {
    moveAt(event, start);
  }

  // We use this to remove the mousemove when clicking outside of the container
  const controller = new AbortController();

  // move the container on mousemove
  document.addEventListener("mousemove", onMouseMove, {
    signal: controller.signal,
  });
  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        cleanUp();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );

  function cleanUp() {
    console.log("cleaning up the plot move listener");
    controller.abort();
    CLIPBOARD_HEADER.onmouseup = null;
  }

  // (3) drop the ball, remove unneeded handlers
  CLIPBOARD_HEADER.onmouseup = cleanUp;
};

function sendToClipboard(blob) {
  if (!navigator.clipboard) {
    alert(
      "The Clipboard API does not seem to be available, make sure the Pluto notebook is being used from either localhost or an https source."
    );
  }
  navigator.clipboard
    .write([
      new ClipboardItem({
        // The key is determined dynamically based on the blob's type.
        [blob.type]: blob,
      }),
    ])
    .then(
      function () {
        console.log("Async: Copying to clipboard was successful!");
      },
      function (err) {
        console.error("Async: Could not copy text: ", err);
      }
    );
}

function copyImageToClipboard() {
  // We extract the image options from the provided parameters (if they exist)
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key. We also ignore format because the clipboard only supports png.
    if (val === undefined || key === "format") {
      continue;
    }
    config[key] = val;
  }
  Plotly.toImage(PLOT, config).then(function (dataUrl) {
    fetch(dataUrl)
      .then((res) => res.blob())
      .then((blob) => {
        const paste_receiver = document.querySelector('paste-receiver.plutoplotly')
        if (paste_receiver) {
          paste_receiver.attachImage(dataUrl, CONTAINER)
        }
        sendToClipboard(blob)
      });
  });
}

function saveImageToFile() {
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key.
    if (val === undefined) {
      continue;
    }
    config[key] = val;
  }
  Plotly.downloadImage(PLOT, config);
}

let container_rect = { width: 0, height: 0, top: 0, left: 0 };
function unpop_container(cl) {
  CONTAINER.classList.toggle("popped-out", false);
  CONTAINER.classList.toggle(cl, false);
  // We fix the height back to the value it had before popout, also setting the flag to signal that upon first resize we remove the fixed inline-style
  CONTAINER.style.height = container_rect.height + "px";
  remove_container_size = true;
  // We set the other fixed inline-styles to null
  CONTAINER.style.width = "";
  CONTAINER.style.top = "";
  CONTAINER.style.left = "";
  // We also remove the CLIPBOARD_HEADER
  CLIPBOARD_HEADER.style.width = "";
  CLIPBOARD_HEADER.style.left = "";
  // Finally we remove the hidden class to the header
  CLIPBOARD_HEADER.classList.toggle("hidden", true);
  return;
}
function popout_container(opts) {
  const cl = opts?.cl;
  const target_container_size = opts?.target_container_size ?? {};
  const target_plot_size = opts?.target_plot_size ?? {};
  if (CONTAINER.isPoppedOut()) {
    return unpop_container(cl);
  }
  CONTAINER.classList.toggle(cl, cl === undefined ? false : true);
  // We extract the current size of the container, save them and fix them
  const { width, height, top, left } = CONTAINER.getBoundingClientRect();
  container_rect = { width, height, top, left };
  // We save the current plot size before we pop as it will fill the screen
  const current_plot_size = {
    width: PLOT._fullLayout.width,
    height: PLOT._fullLayout.height,
  };
  // We have to save the pad data before popping so we can resize precisely
  const pad = {};
  pad.unpopped = getSizeData().container_pad;
  CONTAINER.classList.toggle("popped-out", true);
  pad.popped = getSizeData().container_pad;
  // We do top and left based on the current rect
  for (const key of ["top", "left"]) {
    const start_val = target_container_size[key] ?? container_rect[key];
    let offset = 0;
    for (const kind of ["padding", "border"]) {
      offset += pad.popped[kind][key] - pad.unpopped[kind][key];
    }
    CONTAINER.style[key] = start_val - offset + "px";
    if (key === "left") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  // We compute the width and height depending on eventual config data
  const csz = computeContainerSize({
    width:
      target_plot_size.width ??
      config_spans.width.config_value ??
      current_plot_size.width,
    height:
      target_plot_size.height ??
      config_spans.height.config_value ??
      current_plot_size.height,
  });
  for (const key of ["width", "height"]) {
    const val = target_container_size[key] ?? csz[key];
    CONTAINER.style[key] = val + "px";
    if (key === "width") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  CLIPBOARD_HEADER.classList.toggle("hidden", false);
  const controller = new AbortController();

  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        unpop_container();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );
}

CONTAINER.popOut = popout_container;

function DualClick(single_func, dbl_func) {
  let nclicks = 0;
  return function (...args) {
    nclicks += 1;
    if (nclicks > 1) {
      dbl_func(...args);
      nclicks = 0;
    } else {
      delay(300).then(() => {
        if (nclicks == 1) {
          single_func(...args);
        }
        nclicks = 0;
      });
    }
  };
}

// We remove the default download image button
plot_obj.config.modeBarButtonsToRemove = _.union(
  plot_obj.config.modeBarButtonsToRemove,
  ["toImage"]
);
// We add the custom button to the modebar
plot_obj.config.modeBarButtonsToAdd = _.union(
  plot_obj.config.modeBarButtonsToAdd,
  [
    {
      name: "Copy PNG to Clipboard",
      icon: {
        height: 520,
        width: 520,
        path: "M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z",
      },
      direction: "up",
      click: DualClick(copyImageToClipboard, () => {
        popout_container();
      }),
    },
    {
      name: "Download Image",
      icon: Plotly.Icons.camera,
      direction: "up",
      click: DualClick(saveImageToFile, () => {
        popout_container({ cl: "filesave" });
      }),
    },
  ]
);

function getOffsetData(el) {
  let cs = window.getComputedStyle(el, null);
  const odata = {
    padding: {
      left: parseFloat(cs.paddingLeft),
      right: parseFloat(cs.paddingRight),
      top: parseFloat(cs.paddingTop),
      bottom: parseFloat(cs.paddingBottom),
      width: parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight),
      height: parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom),
    },
    border: {
      left: parseFloat(cs.borderLeftWidth),
      right: parseFloat(cs.borderRightWidth),
      top: parseFloat(cs.borderTopWidth),
      bottom: parseFloat(cs.borderBottomWidth),
      width: parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth),
      height: parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth),
    }
  };
  if (el === PLOT) {
    // For the PLOT we also want to take into account the offset
    odata.offset = {
      top: PLOT.offsetParent == CONTAINER ? PLOT.offsetTop : 0,
      left: PLOT.offsetParent == CONTAINER ? PLOT.offsetLeft : 0,
    }
  }
  return odata;
}
function getSizeData() {
  const data = {
    plot_pad: getOffsetData(PLOT),
    plot_rect: PLOT.getBoundingClientRect(),
    container_pad: getOffsetData(CONTAINER),
    container_rect: CONTAINER.getBoundingClientRect(),
  };
  return data;
}
function computeContainerSize({ width, height }, sizeData = getSizeData()) {
  const computed_size = computePlotSize(sizeData);
  const offsets = computed_size.offsets;

  const plot_data = {
    width: width ?? computed_size.width,
    height: height ?? computed_size.height,
  };

  return {
    width: (width ?? computed_size.width) + offsets.width,
    height: (height ?? computed_size.height) + offsets.height,
    noChange: width == computed_size.width && height == computed_size.height,
  }
}

// This function will change the container size so that the resulting plot will be matching the provided specs
function changeContainerSize({ width, height }, sizeData = getSizeData()) {
  if (!CONTAINER.isPoppedOut()) {
    console.log("Tried to change container size when not popped, ignoring");
    return;
  }

  const csz = computeContainerSize({ width, height }, sizeData);

  if (csz.noChange) {
    console.log("Size is the same as current, ignoring");
    return
  }
  // We are now going to set he width and height of the container
  for (const key of ["width", "height"]) {
    CONTAINER.style[key] = csz[key] + "px";
  }
}
// We now create the function that will update the plot based on the values specified
function updateFromHeader() {
  const header_data = {
    height: config_spans.height.ui_value,
    width: config_spans.width.ui_value,
  };
  changeContainerSize(header_data);
}
// We assign this function to the onblur event of width and height
if (firstRun) {
  for (const container of Object.values(config_spans)) {
    container.ui_span.onblur = (e) => {
      container.ui_value = container.ui_span.textContent;
      updateFromHeader();
    };
  }
}
// This function computes the plot size to use for relayout as a function of the container size
function computePlotSize(data = getSizeData()) {
  // Remove Padding
  const { container_pad, plot_pad, container_rect } = data;
  const offsets = {
    width:
      plot_pad.padding.width +
      plot_pad.border.width +
      plot_pad.offset.left +
      container_pad.padding.width +
      container_pad.border.width,
    height:
      plot_pad.padding.height +
      plot_pad.border.height +
      plot_pad.offset.top +
      container_pad.padding.height +
      container_pad.border.height,
  };
  const sz = {
    width: Math.round(container_rect.width - offsets.width),
    height: Math.round(container_rect.height - offsets.height),
    offsets,
  };
  return sz;
}

// Create the resizeObserver to make the plot even more responsive! :magic:
const resizeObserver = new ResizeObserver((entries) => {
  const sizeData = getSizeData();
  const {container_rect, container_pad} = sizeData;
  let plot_size = computePlotSize(sizeData);
  // We save the height in the PLOT object
  PLOT.container_height = container_rect.height;
  // We deal with some stuff if the container is poppped
  CLIPBOARD_HEADER.style.width = container_rect.width + "px";
  CLIPBOARD_HEADER.style.left = container_rect.left + "px";
  config_spans.height.ui_value = plot_size.height;
  config_spans.width.ui_value = plot_size.width;
  /* 
		The addition of the invalid argument `plutoresize` seems to fix the problem with calling `relayout` simply with `{autosize: true}` as update breaking mouse relayout events tracking. 
		See https://github.com/plotly/plotly.js/issues/6156 for details
		*/
  let config = {
    // If this is popped out, we ignore the original width/height
    width: (CONTAINER.isPoppedOut() ? undefined : original_width) ?? plot_size.width,
    height: (CONTAINER.isPoppedOut() ? undefined : original_height) ?? plot_size.height,
    plutoresize: true,
  };
  Plotly.relayout(PLOT, config).then(() => {
    if (remove_container_size && !CONTAINER.isPoppedOut()) {
      // This is needed to avoid the first resize upon plot creation to already be without a fixed height
      CONTAINER.style.height = "";
      CONTAINER.style.width = "";
      remove_container_size = false;
    }
  });
});

resizeObserver.observe(CONTAINER);


Plotly.react(PLOT, plot_obj).then(() => {
	// Assign the Plotly event listeners
	for (const [key, listener_vec] of Object.entries(plotly_listeners)) {
		for (const listener of listener_vec) {
			PLOT.on(key, listener)
		}
	}
	// Assign the JS event listeners
	for (const [key, listener_vec] of Object.entries(js_listeners)) {
		for (const listener of listener_vec) {
			PLOT.addEventListener(key, listener, {
				signal: controller.signal
			})
		}
	}
}
)


invalidation.then(() => {
	// Remove all plotly listeners
	PLOT.removeAllListeners()
	// Remove all JS listeners
	controller.abort()
	// Remove the resizeObserver
	resizeObserver.disconnect()
})



		return CONTAINER
	</script>
</td></tr></table>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš(øN°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$f9bc84ff-c2f9-4ac2-b2ce-34dfcf837a73¹depends_on_disabled_cellsÂ§runtimeÎœ½Iµpublished_object_keys”Ù5c6e0de0c-3901-11f0-234e-bd09c571f662/10b6971fa80c859dÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/1c437dfc407d8916Ù5c6e0de0c-3901-11f0-234e-bd09c571f662/7b3f5adc32cbaebfÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/acf9294267fab534¸depends_on_skipped_cellsÂ§erroredÂÙ$8f38a3e9-1872-4ea6-9a03-87112af4bf07Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ1sampleracepolicy (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš/á¹°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$8f38a3e9-1872-4ea6-9a03-87112af4bf07¹depends_on_disabled_cellsÂ§runtimeÎ ¢K³µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$627d5aa3-974f-4949-8b65-9500eba1d7ccŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ+figure_5_2 (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš&Fú°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$627d5aa3-974f-4949-8b65-9500eba1d7cc¹depends_on_disabled_cellsÂ§runtimeÎMA¿µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$02dd1e77-2a7e-4123-94db-d17b31a8b15aŠ¦queuedÂ¤logs�§runningÂ¦output†¤body…¦prefix®BlackjackState¨elements“’£sum’¢13ªtext/plain’¦upcard’¡2ªtext/plain’¢ua’¤trueªtext/plain¤type¦struct¬prefix_short®BlackjackState¨objectid°a2f2eb542cb25fd2¤mimeÙ!application/vnd.pluto.tree+object¬rootassignee¶const blackjack_state1²last_run_timestampËAÚš)ª¹N°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$02dd1e77-2a7e-4123-94db-d17b31a8b15a¹depends_on_disabled_cellsÂ§runtimeÎ 7Ýµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$09b67730-39e7-4209-8117-6bc3adfb342aŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚ�<div class="markdown"><p class="tex">$$\begin&#123;flalign&#125;
	&amp;&#61;0.1 \sum_&#123;N&#61;1&#125;^\infty \left &#40; \frac&#123;1&#125;&#123;2&#125; \right &#41; ^N 0.9^&#123;N-1&#125; \left &#40; \frac&#123;\sum_&#123;i&#61;1&#125;^N 2^i&#125;&#123;N&#125; \right &#41; ^2 \\
	&amp;&#61;\frac&#123;0.1&#125;&#123;0.9&#125; \sum_&#123;N&#61;1&#125;^\infty 0.45^&#123;N&#125; N^&#123;-2&#125; \left &#40; \sum_&#123;i&#61;1&#125;^N 2^i \right &#41; ^2 \\
\end&#123;flalign&#125;$$</p>
<p>Consider the term: <span class="tex">$\left &#40; \sum_&#123;i&#61;1&#125;^N 2^i \right &#41; ^2 &#61; &#40;2 &#43; 2^2 &#43; 2^3 &#43; \cdots &#43; 2^N&#41;^2 \gt 2^&#123;2N&#125;$</span> since all the other terms in the parentheses are positive.</p>
<p class="tex">$$\begin&#123;flalign&#125;
	&amp;\gt\frac&#123;0.1&#125;&#123;0.9&#125; \sum_&#123;N&#61;1&#125;^\infty 0.45^&#123;N&#125; N^&#123;-2&#125; 2^&#123;2N&#125; \\
	&amp;&#61; \frac&#123;0.1&#125;&#123;0.9&#125; \sum_&#123;N&#61;1&#125;^\infty 0.45^&#123;N&#125; N^&#123;-2&#125; 4^&#123;N&#125; \\
	&amp;&#61; \frac&#123;0.1&#125;&#123;0.9&#125; \sum_&#123;N&#61;1&#125;^\infty \frac&#123;1.8^&#123;N&#125;&#125;&#123;N^&#123;2&#125;&#125; \\
\end&#123;flalign&#125;$$</p>
<p>The question is then reduced to whether the following infinite sum diverges: <span class="tex">$\sum_&#123;N&#61;1&#125;^\infty \frac&#123;1.8^&#123;N&#125;&#125;&#123;N^&#123;2&#125;&#125;$</span>.  Consider the logarithm of each term in the series <span class="tex">$\log &#123;\frac&#123;1.8^N&#125;&#123;N^2&#125;&#125; &#61; \log&#123;1.8^N&#125; - \log&#123;N^2&#125; &#61; N \log&#123;1.8&#125; - 2 \log&#123;N&#125;$</span>.  As N approaches infinity <span class="tex">$N \gt \log&#123;N&#125;$</span> so the log of each term diverges as do the terms individually as does the series.  Therefore the variance diverges with ever-visit MC as it does with first visit MC.</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"(¤×°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$09b67730-39e7-4209-8117-6bc3adfb342a¹depends_on_disabled_cellsÂ§runtimeÎ Ã«µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$b7dfc031-6bf6-44cd-b814-05f693a0a27dŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚ´¥	<div style = "display: flex;">
	<div>
Race finished in 65 steps
<div style="background-color: white; color: black;">
	<div style="display:flex; align-items: flex-start">
	<div class = "track">
		<div class = "start" style="grid-column-start: 4; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 8; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "0" dvy = "1" style="grid-column-start: 9; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "1" dvy = "0" style="grid-column-start: 6; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 5; grid-row-start: 1;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 27;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 9; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 18;"></div><div class = "" vx = "1" vy = "0" dvx = "0" dvy = "-1" style="grid-column-start: 10; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 11;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 13;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "0" style="grid-column-start: 8; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 7;"></div><div class = "" vx = "1" vy = "4" dvx = "-1" dvy = "-1" style="grid-column-start: 8; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 25;"></div><div class = "" vx = "1" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 12; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 26;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 6; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 30;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 6; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 3;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "1" style="grid-column-start: 8; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 9;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 8; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 25;"></div><div class = "" vx = "1" vy = "2" dvx = "-1" dvy = "0" style="grid-column-start: 6; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 20;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "0" style="grid-column-start: 8; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 31;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 31;"></div><div class = "" vx = "1" vy = "0" dvx = "0" dvy = "0" style="grid-column-start: 11; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 21;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 27;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 5; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 7;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 9; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "0" style="grid-column-start: 8; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 24;"></div><div class = "" vx = "2" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 14; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 32;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "-1" style="grid-column-start: 9; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 19;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "-1" style="grid-column-start: 8; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 14;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 5; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 8;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 8; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 16;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 9; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 7;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 8; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 15;"></div><div class = "" vx = "1" vy = "3" dvx = "0" dvy = "1" style="grid-column-start: 7; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 29;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 8; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 31;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 8; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 16;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "1" style="grid-column-start: 8; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 28;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 28;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 29;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 31;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 30;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 27;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 32;"></div>
	</div>
	Finish <br> line
	</div>
	<div>Starting line</div>
</div>
</div>

	<div>
Race finished in 200 steps
<div style="background-color: white; color: black;">
	<div style="display:flex; align-items: flex-start">
	<div class = "track">
		<div class = "start" vx = "0" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 4; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 8; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "0" dvy = "1" style="grid-column-start: 9; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 6; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 5; grid-row-start: 1;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 27;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 9; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 18;"></div><div class = "" vx = "1" vy = "0" dvx = "0" dvy = "-1" style="grid-column-start: 10; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 11;"></div><div class = "" vx = "2" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 13;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "0" style="grid-column-start: 8; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 7;"></div><div class = "" vx = "1" vy = "4" dvx = "-1" dvy = "-1" style="grid-column-start: 8; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 25;"></div><div class = "" vx = "1" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 12; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 26;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 6; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 30;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 6; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 3;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "1" style="grid-column-start: 8; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 9;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 8; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 25;"></div><div class = "" vx = "1" vy = "2" dvx = "-1" dvy = "0" style="grid-column-start: 6; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 20;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "0" style="grid-column-start: 8; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 31;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 31;"></div><div class = "" vx = "1" vy = "0" dvx = "0" dvy = "0" style="grid-column-start: 11; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 21;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 27;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 5; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 7;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 9; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "0" style="grid-column-start: 8; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 24;"></div><div class = "" vx = "2" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 14; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 32;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "-1" style="grid-column-start: 9; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 19;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "-1" style="grid-column-start: 8; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 14;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 5; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 8;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 8; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 16;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 9; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 7;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 8; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 15;"></div><div class = "" vx = "1" vy = "3" dvx = "0" dvy = "1" style="grid-column-start: 7; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 29;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 8; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 31;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 8; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 10;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 4; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 16;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "1" style="grid-column-start: 8; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 28;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 28;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 29;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 31;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 30;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 27;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 32;"></div>
	</div>
	Finish <br> line
	</div>
	<div>Starting line</div>
</div>
</div>

	</div>
¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš3Ó°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$b7dfc031-6bf6-44cd-b814-05f693a0a27d¹depends_on_disabled_cellsÂ§runtimeÎ -µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$2572e35c-e6a3-4562-aa0f-6a5ab32d39eaŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚ		<div style="display: flex; flex-direction: row; align-items: flex-start; justify-content: center; background-color: rgb(100, 100, 100)">
	
	<div class="backup">
		<div>State Value Function</div>
		<div class="circlestate"></div>
		<div class="arrow"></div>
		<div class="circleaction"></div>
		<div class="arrow"></div>
		<div class="circlestate"></div>
		<div class="arrow"></div>
		<div class="circleaction"></div>
		<div style = "color: black; font-size: 30px;">&#8942;</div>
		<div class="circleaction"></div>
		<div class="arrow"></div>
		<div class="term"></div>
	</div>
	<div class="backup">
		<div>State Action Value Function</div>
		<div class="circleaction"></div>
		<div class="arrow"></div>
		<div class="circlestate"></div>
		<div class="arrow"></div>
		<div class="circleaction"></div>
		<div class="arrow"></div>
		<div class="circlestate"></div>
		<div style = "color: black; font-size: 30px;">&#8942;</div>
		<div class="circlestate"></div>
		<div class="arrow"></div>
		<div class="circleaction"></div>
		<div class="arrow"></div>
		<div class="term"></div>
	</div>
	<div>
		<div class="q_backup"></div>
	</div>
</div>

<style>

	.backup {
		margin: 5px;
	}
	.backup, .backup * {
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: center;
		color: black;
	}
	.circlestate, .circleaction {
		margin: 0;
	}
	.circlestate::before {
		content: '';
		display: inline-block;
		border: 1px solid black;
		border-radius: 50%;
		height: 20px;
		width: 20px;
		background-color: white;
	}
	.circleaction::before {
		content: '';
		display: inline-block;
		border: 1px solid black;
		border-radius: 50%;
		height: 10px;
		width: 10px;
		background-color: black;
	}
	.arrow {
		display: flex;
		justify-content: center;
		align-items: center;
	}
	.arrow::before {
		content: '';
		display: inline-block;
		width: 2px;
		height: 30px;
		background-color: black;
		margin-bottom: 0px;
	}
	.arrow::after {
		content: '';
		display: inline-block;
		width: 4px;
		height: 4px;
		border-bottom: 3px solid black;
		border-right: 3px solid black;
		transform: translateY(-5px) rotate(45deg);
		position: relative;
	}
	.term::before {
		content: '';
		display: inline-block;
		width: 20px;
		height: 20px;
		border: 2px solid black;
		background-color: rgb(50, 50, 50);
	}
</style>
¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš%ÝÌy°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$2572e35c-e6a3-4562-aa0f-6a5ab32d39ea¹depends_on_disabled_cellsÂ§runtimeÎ 8µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$859354fe-7f40-4658-bf12-b5ee20a815a7Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙO<div class="markdown"><h2>5.8 Discounting-aware Importance Sampling</h2>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"+Ä"°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$859354fe-7f40-4658-bf12-b5ee20a815a7¹depends_on_disabled_cellsÂ§runtimeÎ :µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$f9f6c182-62f8-4a5a-8b43-8716db468427Š¦queuedÂ¤logs�§runningÂ¦output†¤body±5.656854249492381¤mimeªtext/plain¬rootassignee®const maxspeed²last_run_timestampËAÚš/0ðÌ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$f9f6c182-62f8-4a5a-8b43-8716db468427¹depends_on_disabled_cellsÂ§runtimeÎq²:µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$47daf83b-8fe9-4491-b9ae-84bd269d5546Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ=<div class="markdown"><h2>5.3 Monte Carlo Control</h2>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"&×°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$47daf83b-8fe9-4491-b9ae-84bd269d5546¹depends_on_disabled_cellsÂ§runtimeÎ %µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$ba8a5804-4be3-43fe-95d7-c957ce02a1d4Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ2make_action_style (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš0 Ž°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$ba8a5804-4be3-43fe-95d7-c957ce02a1d4¹depends_on_disabled_cellsÂ§runtimeÎ 	Yµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$481ad435-cc80-4164-882d-8310b010ca91Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ=make_simple_blackjack_policy (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš%<b°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$481ad435-cc80-4164-882d-8310b010ca91¹depends_on_disabled_cellsÂ§runtimeÎ Ãüµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$8bcaa31b-8caf-43da-83a0-47e0c04c2a30Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚë«<div style="display: flex; justify-content: space-around;">
<div>Track 1</div>
<div>Track 2</div>
</div>
<div style="display: flex; justify-content: space-between; align-items: flex-end; background-color: gray;">
<div>

<div style="background-color: white; color: black;">
	<div style="display:flex; align-items: flex-start">
	<div class = "track">
		<div class = "start" style="grid-column-start: 4; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 8; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 9; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 6; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 7; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 5; grid-row-start: 1;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 28;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 28;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 29;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 31;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 30;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 27;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 32;"></div>
	</div>
	Finish <br> line
	</div>
	<div>Starting line</div>
</div>
</div>

<div>

<div style="background-color: white; color: black;">
	<div style="display:flex; align-items: flex-start">
	<div class = "track">
		<div class = "start" style="grid-column-start: 8; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 5; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 14; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 16; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 3; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 11; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 19; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 22; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 6; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 17; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 21; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 13; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 9; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 18; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 2; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 20; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 1; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 23; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 7; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 12; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 10; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 15; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 4; grid-row-start: 1;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 27;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 30;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 27;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 23;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 28;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 29;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 26;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 25;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 24;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 22;"></div>
	</div>
	Finish <br> line
	</div>
	<div>Starting line</div>
</div>
</div>

</div>
¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš0?¬2°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$8bcaa31b-8caf-43da-83a0-47e0c04c2a30¹depends_on_disabled_cellsÂ§runtimeÎásÌµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$7c9486cd-1916-4e13-b415-fb113bd9e04bŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙH<div class="markdown"><h2>5.7 Off-policy Monte Carlo Control</h2>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš")8†°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$7c9486cd-1916-4e13-b415-fb113bd9e04b¹depends_on_disabled_cellsÂ§runtimeÎ ÚPµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$821ce23a-524b-4203-96d6-4d5b454fe1fdŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚm~<div class="markdown"><p>Statistics for Steps to Finish Race on Track 2</p>

<table><tr><th align="right">Statistic</th><th align="right"><div class="markdown"><p>Monte Carlo Ïµ-Soft</p>
</div></th><th align="right">Random Policy</th></tr><tr><td align="right">Mean</td><td align="right">24</td><td align="right">288</td></tr><tr><td align="right">Median</td><td align="right">18</td><td align="right">202</td></tr><tr><td align="right">Std</td><td align="right">16</td><td align="right">273</td></tr><tr><td align="right">Minimum</td><td align="right">9</td><td align="right">12</td></tr><tr><td align="right">Maximum</td><td align="right">113</td><td align="right">1782</td></tr></table>
<p>Cummulative Distribution Function of Steps to Finish Race 	<script id='plot_1'>
		// We start by putting all the variable interpolation here at the beginning
		// We have to convert all typedarrays in the layout to normal arrays. See Issue #25
		// We use lodash for this for compactness
		function removeTypedArray(o) {
			return _.isTypedArray(o) ? Array.from(o) :
			_.isPlainObject(o) ? _.mapValues(o, removeTypedArray) : 
			o
		}

		// Publish the plot object to JS
		let plot_obj = _.update(/* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("c6e0de0c-3901-11f0-234e-bd09c571f662/47097f3aa74a6daf"), "layout", removeTypedArray)
		// Get the plotly listeners
		const plotly_listeners = {}
		// Get the JS listeners
		const js_listeners = {}
		// Deal with eventual custom classes
		let custom_classlist = []


		// Load the plotly library
		let Plotly = undefined
		try {
			let _mod = await import("./plotlyjs/plotlyjs-2.26.2.min.js")
			Plotly = _mod.default
		} catch (e) {
			console.log("Local load failed, trying with the web esm.sh version")
			let _mod = await import("https://esm.sh/plotly.js-dist-min@2.26.2/es2022/plotly.js-dist-min.mjs")
			Plotly = _mod.default
		}

		// Check if we have to force local mathjax font cache
		if (false && window?.MathJax?.config?.svg?.fontCache === 'global') {
			window.MathJax.config.svg.fontCache = 'local'
		}

		// Flag to check if this cell was  manually ran or reactively ran
const firstRun = this ? false : true
const CONTAINER = this ?? html`<div class='plutoplotly-container'>`
const PLOT = CONTAINER.querySelector('.js-plotly-plot') ?? CONTAINER.appendChild(html`<div>`)
const parent = CONTAINER.parentElement
// We use a controller to remove event listeners upon invalidation
const controller = new AbortController()
// We have to add this to keep supporting @bind with the old API using PLOT
PLOT.addEventListener('input', (e) => {
	CONTAINER.value = PLOT.value
	if (e.bubbles) {
		return
	}
	CONTAINER.dispatchEvent(new CustomEvent('input'))
}, { signal: controller.signal })

	// This create the style subdiv on first run
	firstRun && CONTAINER.appendChild(html`
	<style>
	.plutoplotly-container {
		width: 100%;
		height: 100%;
		min-height: 0;
		min-width: 0;
	}
	.plutoplotly-container .js-plotly-plot .plotly div {
		margin: 0 auto; // This centers the plot
	}
	.plutoplotly-container.popped-out {
		overflow: auto;
		z-index: 1000;
		position: fixed;
		resize: both;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		border-top-left-radius: 0px;
		border-top-right-radius: 0px;
	}
	.plutoplotly-clipboard-header {
		display: flex;
		flex-flow: row wrap;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-top-left-radius: 12px;
		border-top-right-radius: 12px;
		position: fixed;
		z-index: 1001;
		cursor: move;
		transform: translate(0px, -100%);
		padding: 5px;
	}
	.plutoplotly-clipboard-header span {
		display: inline-block;
		flex: 1
	}
	.plutoplotly-clipboard-header.hidden {
		display: none;
	}
	.clipboard-span {
		position: relative;
	}
	.clipboard-value {
		padding-right: 5px;
		padding-left: 2px;
		cursor: text;
	}
	.clipboard-span.format {
		display: none;
	}
	.clipboard-span.filename {
		flex: 0 0 100%;
		text-align: center;
		border-top: 3px solid var(--kbd-border-color);
		margin-top: 5px;
		display: none;
	}
	.plutoplotly-container.filesave .clipboard-span.filename {
		display: inline-block;
	}
	.clipboard-value.filename {
		margin-left: 3px;
		text-align: left;
		min-width: min(60%, min-content);
	}
	.plutoplotly-container.filesave .clipboard-span.format {
		display: inline-flex;
	}
	.clipboard-span.format .label {
		flex: 0 0 0;
	}
	.clipboard-value.format {
		position: relative;
		flex: 1 0 auto;
		min-width: 30px;
		margin-right: 10px;
	}
	div.format-options {
		display: inline-flex;
		flex-flow: column;
		position: absolute;
		background: var(--main-bg-color);
		border-radius: 12px;
		padding-left: 3px;
		z-index: 2000;
	}
	div.format-options:hover {
		cursor: pointer;
		border: 3px solid var(--kbd-border-color);
		padding: 3px;
		transform: translate(-3px, -6px);
	}
	div.format-options .format-option {
		display: none;
	}
	div.format-options:hover .format-option {
		display: inline-block;
	}
	.format-option:not(.selected) {
		margin-top: 3px;
	}
	div.format-options .format-option.selected {
		order: -1;
		display: inline-block;
	}
	.format-option:hover {
		background-color: var(--kbd-border-color);
	}
	span.config-value {
		font-weight: normal;
		color: var(--pluto-output-color);
		display: none;
		position: absolute;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		transform: translate(0px, calc(-100% - 10px));
		padding: 5px;
	}
	.label {
		user-select: none;
	}
	.label:hover span.config-value {
		display: inline-block;
		min-width: 150px;
	}
	.clipboard-span.matching-config .label {
		color: var(--cm-macro-color);
		font-weight: bold;
	}
	.clipboard-span.different-config .label {
		color: var(--cm-tag-color);
		font-weight: bold;
	}
</style>
`)

let original_height = plot_obj.layout.height
let original_width = plot_obj.layout.width
// For the height we have to also put a fixed value in case the plot is put on a non-fixed-size container (like the default wrapper)
// We define a variable to check whether we still have to remove the fixed height
let remove_container_size = firstRun
let container_height = original_height ?? PLOT.container_height ?? 400
CONTAINER.style.height = container_height + 'px'

// We create a Promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// We import interact for dragging/resizing
const { default: interact } = await import('https://esm.sh/interactjs@1.10.19')


function getImageOptions() {
  const o = plot_obj.config.toImageButtonOptions ?? {};
  return {
    format: o.format ?? "png",
    width: o.width ?? original_width,
    height: o.height ?? original_height,
    scale: o.scale ?? 1,
    filename: o.filename ?? "newplot",
  };
}

const CLIPBOARD_HEADER =
  CONTAINER.querySelector(".plutoplotly-clipboard-header") ??
  CONTAINER.insertAdjacentElement(
    "afterbegin",
    html`<div class="plutoplotly-clipboard-header hidden">
      <span class="clipboard-span format"
        ><span class="label">Format:</span
        ><span class="clipboard-value format"></span
      ></span>
      <span class="clipboard-span width"
        ><span class="label">Width:</span
        ><span class="clipboard-value width"></span>px</span
      >
      <span class="clipboard-span height"
        ><span class="label">Height:</span
        ><span class="clipboard-value height"></span>px</span
      >
      <span class="clipboard-span scale"
        ><span class="label">Scale:</span
        ><span class="clipboard-value scale"></span
      ></span>
      <button class="clipboard-span set">Set</button>
      <button class="clipboard-span unset">Unset</button>
      <span class="clipboard-span filename"
        ><span class="label">Filename:</span
        ><span class="clipboard-value filename"></span
      ></span>
    </div>`
  );

function checkConfigSync(container) {
  const valid_classes = [
    "missing-config",
    "matching-config",
    "different-config",
  ];
  function setClass(cl) {
    for (const name of valid_classes) {
      container.classList.toggle(name, name == cl);
    }
  }
  // We use the custom getters we'll set up in the container
  const { ui_value, config_value, config_span, key } = container;
  if (config_value === undefined) {
    setClass("missing-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> is not present in the config.`;
  } else if (ui_value == config_value) {
    setClass("matching-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has the same value in the config and in the header.`;
  } else {
    setClass("different-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has a different value (<em>${config_value}</em>) in the config.`;
  }
  // Add info about setting and unsetting
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click on the label <em><b>once</b></em> to set the current UI value in the config.`
  );
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click <em><b>twice</b></em> to remove this key from the config.`
  );
}

const valid_formats = ["png", "svg", "webp", "jpeg", "full-json"];
function initializeUIValueSpan(span, key, value) {
  const container = span.closest(".clipboard-span");
  span.contentEditable = key === "format" ? "false" : "true";
  let parse = (x) => x;
  let update = (x) => (span.textContent = x);
  if (key === "width" || key === "height") {
    parse = (x) => Math.round(parseFloat(x));
  } else if (key === "scale") {
    parse = parseFloat;
  } else if (key === "format") {
    // We remove contentEditable
    span.contentEditable = "false";
    // Here we first add the subspans for each option
    const opts_div = span.appendChild(html`<div class="format-options"></div>`);
    for (const fmt of valid_formats) {
      const opt = opts_div.appendChild(
        html`<span class="format-option ${fmt}">${fmt}</span>`
      );
      opt.onclick = (e) => {
        span.value = opt.textContent;
      };
    }
    parse = (x) => {
      return valid_formats.includes(x) ? x : localValue;
    };
    update = (x) => {
      for (const opt of opts_div.children) {
        opt.classList.toggle("selected", opt.textContent === x);
      }
    };
  } else {
    // We only have filename here
  }
  let localValue;
  Object.defineProperty(span, "value", {
    get: () => {
      return localValue;
    },
    set: (val) => {
      if (val !== "") {
        localValue = parse(val);
      }
      update(localValue);
      checkConfigSync(container);
    },
  });
  // We also assign a listener so that the editable is blurred when enter is pressed
  span.onkeydown = (e) => {
    if (e.keyCode === 13) {
      e.preventDefault();
      span.blur();
    }
  };
  span.value = value;
}

function initializeConfigValueSpan(span, key) {
  // Here we mostly want to define the setter and getter
  const container = span.closest(".clipboard-span");
  Object.defineProperty(span, "value", {
    get: () => {
      return plot_obj.config.toImageButtonOptions[key];
    },
    set: (val) => {
      // if undefined is passed, we remove the entry from the options
      if (val === undefined) {
        delete plot_obj.config.toImageButtonOptions[key];
      } else {
        plot_obj.config.toImageButtonOptions[key] = val;
      }
      checkConfigSync(container);
    },
  });
}

const config_spans = {};
for (const [key, value] of Object.entries(getImageOptions())) {
  const container = CLIPBOARD_HEADER.querySelector(`.clipboard-span.${key}`);
  const label = container.querySelector(".label");
  // We give the label a function that on single click will set the current value and with double click will unset it
  label.onclick = DualClick(
    () => {
      container.config_value = container.ui_value;
    },
    (e) => {
      console.log("e", e);
      e.preventDefault();
      container.config_value = undefined;
    }
  );
  const ui_value_span = container.querySelector(".clipboard-value");
  const config_value_span =
    container.querySelector(".config-value") ??
    label.insertAdjacentElement(
      "afterbegin",
      html`<span class="config-value"></span>`
    );
  // Assing the two spans as properties of the containing span
  container.ui_span = ui_value_span;
  container.config_span = config_value_span;
  container.key = key;
  config_spans[key] = container;
  if (firstRun) {
    plot_obj.config.toImageButtonOptions =
      plot_obj.config.toImageButtonOptions ?? {};
    // We do the initialization of the value span
    initializeUIValueSpan(ui_value_span, key, value);
    // Then we initialize the config value
    initializeConfigValueSpan(config_value_span, key);
    // We put some convenience getters/setters
    // ui_value forward
    Object.defineProperty(container, "ui_value", {
      get: () => ui_value_span.value,
      set: (val) => {
        ui_value_span.value = val;
      },
    });
    // config_value forward
    Object.defineProperty(container, "config_value", {
      get: () => config_value_span.value,
      set: (val) => {
        config_value_span.value = val;
      },
    });
  }
}

// These objects will contain the default value

// This code updates the image options in the PLOT config with the provided ones
function setImageOptions(o) {
  for (const [key, container] of Object.entries(config_spans)) {
    container.config_value = o[key];
  }
}
function unsetImageOptions() {
  setImageOptions({});
}

const set_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.set");
const unset_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.unset");
if (firstRun) {
  set_button.onclick = (e) => {
    for (const container of Object.values(config_spans)) {
      container.config_value = container.ui_value;
    }
  };
  unset_button.onclick = unsetImageOptions;
}

// We add a function to check if the clipboard is popped out
CONTAINER.isPoppedOut = () => {
  return CONTAINER.classList.contains("popped-out");
};

CLIPBOARD_HEADER.onmousedown = function (event) {
  if (event.target.matches("span.clipboard-value")) {
    console.log("We don't move!");
    return;
  }
  const start = {
    left: parseFloat(CONTAINER.style.left),
    top: parseFloat(CONTAINER.style.top),
    X: event.pageX,
    Y: event.pageY,
  };
  function moveAt(event, start) {
    const top = event.pageY - start.Y + start.top + "px";
    const left = event.pageX - start.X + start.left + "px";
    CLIPBOARD_HEADER.style.left = left;
    CONTAINER.style.left = left;
    CONTAINER.style.top = top;
  }

  // move our absolutely positioned ball under the pointer
  moveAt(event, start);
  function onMouseMove(event) {
    moveAt(event, start);
  }

  // We use this to remove the mousemove when clicking outside of the container
  const controller = new AbortController();

  // move the container on mousemove
  document.addEventListener("mousemove", onMouseMove, {
    signal: controller.signal,
  });
  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        cleanUp();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );

  function cleanUp() {
    console.log("cleaning up the plot move listener");
    controller.abort();
    CLIPBOARD_HEADER.onmouseup = null;
  }

  // (3) drop the ball, remove unneeded handlers
  CLIPBOARD_HEADER.onmouseup = cleanUp;
};

function sendToClipboard(blob) {
  if (!navigator.clipboard) {
    alert(
      "The Clipboard API does not seem to be available, make sure the Pluto notebook is being used from either localhost or an https source."
    );
  }
  navigator.clipboard
    .write([
      new ClipboardItem({
        // The key is determined dynamically based on the blob's type.
        [blob.type]: blob,
      }),
    ])
    .then(
      function () {
        console.log("Async: Copying to clipboard was successful!");
      },
      function (err) {
        console.error("Async: Could not copy text: ", err);
      }
    );
}

function copyImageToClipboard() {
  // We extract the image options from the provided parameters (if they exist)
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key. We also ignore format because the clipboard only supports png.
    if (val === undefined || key === "format") {
      continue;
    }
    config[key] = val;
  }
  Plotly.toImage(PLOT, config).then(function (dataUrl) {
    fetch(dataUrl)
      .then((res) => res.blob())
      .then((blob) => {
        const paste_receiver = document.querySelector('paste-receiver.plutoplotly')
        if (paste_receiver) {
          paste_receiver.attachImage(dataUrl, CONTAINER)
        }
        sendToClipboard(blob)
      });
  });
}

function saveImageToFile() {
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key.
    if (val === undefined) {
      continue;
    }
    config[key] = val;
  }
  Plotly.downloadImage(PLOT, config);
}

let container_rect = { width: 0, height: 0, top: 0, left: 0 };
function unpop_container(cl) {
  CONTAINER.classList.toggle("popped-out", false);
  CONTAINER.classList.toggle(cl, false);
  // We fix the height back to the value it had before popout, also setting the flag to signal that upon first resize we remove the fixed inline-style
  CONTAINER.style.height = container_rect.height + "px";
  remove_container_size = true;
  // We set the other fixed inline-styles to null
  CONTAINER.style.width = "";
  CONTAINER.style.top = "";
  CONTAINER.style.left = "";
  // We also remove the CLIPBOARD_HEADER
  CLIPBOARD_HEADER.style.width = "";
  CLIPBOARD_HEADER.style.left = "";
  // Finally we remove the hidden class to the header
  CLIPBOARD_HEADER.classList.toggle("hidden", true);
  return;
}
function popout_container(opts) {
  const cl = opts?.cl;
  const target_container_size = opts?.target_container_size ?? {};
  const target_plot_size = opts?.target_plot_size ?? {};
  if (CONTAINER.isPoppedOut()) {
    return unpop_container(cl);
  }
  CONTAINER.classList.toggle(cl, cl === undefined ? false : true);
  // We extract the current size of the container, save them and fix them
  const { width, height, top, left } = CONTAINER.getBoundingClientRect();
  container_rect = { width, height, top, left };
  // We save the current plot size before we pop as it will fill the screen
  const current_plot_size = {
    width: PLOT._fullLayout.width,
    height: PLOT._fullLayout.height,
  };
  // We have to save the pad data before popping so we can resize precisely
  const pad = {};
  pad.unpopped = getSizeData().container_pad;
  CONTAINER.classList.toggle("popped-out", true);
  pad.popped = getSizeData().container_pad;
  // We do top and left based on the current rect
  for (const key of ["top", "left"]) {
    const start_val = target_container_size[key] ?? container_rect[key];
    let offset = 0;
    for (const kind of ["padding", "border"]) {
      offset += pad.popped[kind][key] - pad.unpopped[kind][key];
    }
    CONTAINER.style[key] = start_val - offset + "px";
    if (key === "left") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  // We compute the width and height depending on eventual config data
  const csz = computeContainerSize({
    width:
      target_plot_size.width ??
      config_spans.width.config_value ??
      current_plot_size.width,
    height:
      target_plot_size.height ??
      config_spans.height.config_value ??
      current_plot_size.height,
  });
  for (const key of ["width", "height"]) {
    const val = target_container_size[key] ?? csz[key];
    CONTAINER.style[key] = val + "px";
    if (key === "width") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  CLIPBOARD_HEADER.classList.toggle("hidden", false);
  const controller = new AbortController();

  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        unpop_container();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );
}

CONTAINER.popOut = popout_container;

function DualClick(single_func, dbl_func) {
  let nclicks = 0;
  return function (...args) {
    nclicks += 1;
    if (nclicks > 1) {
      dbl_func(...args);
      nclicks = 0;
    } else {
      delay(300).then(() => {
        if (nclicks == 1) {
          single_func(...args);
        }
        nclicks = 0;
      });
    }
  };
}

// We remove the default download image button
plot_obj.config.modeBarButtonsToRemove = _.union(
  plot_obj.config.modeBarButtonsToRemove,
  ["toImage"]
);
// We add the custom button to the modebar
plot_obj.config.modeBarButtonsToAdd = _.union(
  plot_obj.config.modeBarButtonsToAdd,
  [
    {
      name: "Copy PNG to Clipboard",
      icon: {
        height: 520,
        width: 520,
        path: "M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z",
      },
      direction: "up",
      click: DualClick(copyImageToClipboard, () => {
        popout_container();
      }),
    },
    {
      name: "Download Image",
      icon: Plotly.Icons.camera,
      direction: "up",
      click: DualClick(saveImageToFile, () => {
        popout_container({ cl: "filesave" });
      }),
    },
  ]
);

function getOffsetData(el) {
  let cs = window.getComputedStyle(el, null);
  const odata = {
    padding: {
      left: parseFloat(cs.paddingLeft),
      right: parseFloat(cs.paddingRight),
      top: parseFloat(cs.paddingTop),
      bottom: parseFloat(cs.paddingBottom),
      width: parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight),
      height: parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom),
    },
    border: {
      left: parseFloat(cs.borderLeftWidth),
      right: parseFloat(cs.borderRightWidth),
      top: parseFloat(cs.borderTopWidth),
      bottom: parseFloat(cs.borderBottomWidth),
      width: parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth),
      height: parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth),
    }
  };
  if (el === PLOT) {
    // For the PLOT we also want to take into account the offset
    odata.offset = {
      top: PLOT.offsetParent == CONTAINER ? PLOT.offsetTop : 0,
      left: PLOT.offsetParent == CONTAINER ? PLOT.offsetLeft : 0,
    }
  }
  return odata;
}
function getSizeData() {
  const data = {
    plot_pad: getOffsetData(PLOT),
    plot_rect: PLOT.getBoundingClientRect(),
    container_pad: getOffsetData(CONTAINER),
    container_rect: CONTAINER.getBoundingClientRect(),
  };
  return data;
}
function computeContainerSize({ width, height }, sizeData = getSizeData()) {
  const computed_size = computePlotSize(sizeData);
  const offsets = computed_size.offsets;

  const plot_data = {
    width: width ?? computed_size.width,
    height: height ?? computed_size.height,
  };

  return {
    width: (width ?? computed_size.width) + offsets.width,
    height: (height ?? computed_size.height) + offsets.height,
    noChange: width == computed_size.width && height == computed_size.height,
  }
}

// This function will change the container size so that the resulting plot will be matching the provided specs
function changeContainerSize({ width, height }, sizeData = getSizeData()) {
  if (!CONTAINER.isPoppedOut()) {
    console.log("Tried to change container size when not popped, ignoring");
    return;
  }

  const csz = computeContainerSize({ width, height }, sizeData);

  if (csz.noChange) {
    console.log("Size is the same as current, ignoring");
    return
  }
  // We are now going to set he width and height of the container
  for (const key of ["width", "height"]) {
    CONTAINER.style[key] = csz[key] + "px";
  }
}
// We now create the function that will update the plot based on the values specified
function updateFromHeader() {
  const header_data = {
    height: config_spans.height.ui_value,
    width: config_spans.width.ui_value,
  };
  changeContainerSize(header_data);
}
// We assign this function to the onblur event of width and height
if (firstRun) {
  for (const container of Object.values(config_spans)) {
    container.ui_span.onblur = (e) => {
      container.ui_value = container.ui_span.textContent;
      updateFromHeader();
    };
  }
}
// This function computes the plot size to use for relayout as a function of the container size
function computePlotSize(data = getSizeData()) {
  // Remove Padding
  const { container_pad, plot_pad, container_rect } = data;
  const offsets = {
    width:
      plot_pad.padding.width +
      plot_pad.border.width +
      plot_pad.offset.left +
      container_pad.padding.width +
      container_pad.border.width,
    height:
      plot_pad.padding.height +
      plot_pad.border.height +
      plot_pad.offset.top +
      container_pad.padding.height +
      container_pad.border.height,
  };
  const sz = {
    width: Math.round(container_rect.width - offsets.width),
    height: Math.round(container_rect.height - offsets.height),
    offsets,
  };
  return sz;
}

// Create the resizeObserver to make the plot even more responsive! :magic:
const resizeObserver = new ResizeObserver((entries) => {
  const sizeData = getSizeData();
  const {container_rect, container_pad} = sizeData;
  let plot_size = computePlotSize(sizeData);
  // We save the height in the PLOT object
  PLOT.container_height = container_rect.height;
  // We deal with some stuff if the container is poppped
  CLIPBOARD_HEADER.style.width = container_rect.width + "px";
  CLIPBOARD_HEADER.style.left = container_rect.left + "px";
  config_spans.height.ui_value = plot_size.height;
  config_spans.width.ui_value = plot_size.width;
  /* 
		The addition of the invalid argument `plutoresize` seems to fix the problem with calling `relayout` simply with `{autosize: true}` as update breaking mouse relayout events tracking. 
		See https://github.com/plotly/plotly.js/issues/6156 for details
		*/
  let config = {
    // If this is popped out, we ignore the original width/height
    width: (CONTAINER.isPoppedOut() ? undefined : original_width) ?? plot_size.width,
    height: (CONTAINER.isPoppedOut() ? undefined : original_height) ?? plot_size.height,
    plutoresize: true,
  };
  Plotly.relayout(PLOT, config).then(() => {
    if (remove_container_size && !CONTAINER.isPoppedOut()) {
      // This is needed to avoid the first resize upon plot creation to already be without a fixed height
      CONTAINER.style.height = "";
      CONTAINER.style.width = "";
      remove_container_size = false;
    }
  });
});

resizeObserver.observe(CONTAINER);


Plotly.react(PLOT, plot_obj).then(() => {
	// Assign the Plotly event listeners
	for (const [key, listener_vec] of Object.entries(plotly_listeners)) {
		for (const listener of listener_vec) {
			PLOT.on(key, listener)
		}
	}
	// Assign the JS event listeners
	for (const [key, listener_vec] of Object.entries(js_listeners)) {
		for (const listener of listener_vec) {
			PLOT.addEventListener(key, listener, {
				signal: controller.signal
			})
		}
	}
}
)


invalidation.then(() => {
	// Remove all plotly listeners
	PLOT.removeAllListeners()
	// Remove all JS listeners
	controller.abort()
	// Remove the resizeObserver
	resizeObserver.disconnect()
})



		return CONTAINER
	</script>
</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš4+°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$821ce23a-524b-4203-96d6-4d5b454fe1fd¹depends_on_disabled_cellsÂ§runtimeÎµñ™µpublished_object_keys‘Ù5c6e0de0c-3901-11f0-234e-bd09c571f662/47097f3aa74a6daf¸depends_on_skipped_cellsÂ§erroredÂÙ$dc57a71f-e44c-4385-ad2a-e6c14d5e5201Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚ	ø<div class="markdown"><blockquote>
<h3><em>Exercise 5.14</em></h3>
<p>Modify the algorithm for off-policy Monte Carlo control &#40;page 111&#41; to use the idea of the truncated weighted-average estimator &#40;5.10&#41;.  Note that you will first need to convert this equation to action values.</p>
</blockquote>
<p>Equation &#40;5.10&#41;</p>
<p class="tex">$$V&#40;s&#41; &#61; \frac&#123;\sum_&#123;t \in \mathscr&#123;T&#125;&#40;s&#41;&#125;\left&#40;&#40;1-\gamma&#41;\sum_&#123;h&#61;t&#43;1&#125;^&#123;T&#40;t&#41;-1&#125;\gamma^&#123;h-t-1&#125; \rho_&#123;t:h-1&#125; \bar&#123;G&#125;_&#123;t:h&#125; &#43; \gamma^&#123;T&#40;t&#41;-t-1&#125; \rho_&#123;t:T&#40;t&#41;-1&#125; \bar&#123;G&#125;_&#123;t:T&#40;t&#41;&#125; \right&#41;&#125;&#123;\sum_&#123;t \in \mathscr&#123;T&#125;&#40;s&#41;&#125; \left&#40; &#40;1-\gamma&#41; \sum_&#123;h&#61;t&#43;1&#125;^&#123;T&#40;t&#41;-1&#125; \gamma^&#123;h-t-1&#125; \rho_&#123;t:h-1&#125; &#43; \gamma^&#123;T&#40;t&#41;-t-1&#125; \rho_&#123;t:T&#40;t&#41;-1&#125; \right&#41;&#125;$$</p>
<p>Converting this to action-value estimates:</p>
<p class="tex">$$Q&#40;s,a&#41; &#61; \frac&#123;\sum_&#123;t \in \mathscr&#123;T&#125;&#40;s,a&#41;&#125;\left&#40; R_&#123;t&#43;1&#125; &#43; &#40;1-\gamma&#41;\sum_&#123;h&#61;t&#43;2&#125;^&#123;T&#40;t&#41;-1&#125;\gamma^&#123;h-t-1&#125; \rho_&#123;t&#43;1:h-1&#125; \bar&#123;G&#125;_&#123;t&#43;1:h&#125; &#43; \gamma^&#123;T&#40;t&#41;-t-1&#125; \rho_&#123;t&#43;1:T&#40;t&#41;-1&#125; \bar&#123;G&#125;_&#123;t&#43;1:T&#40;t&#41;&#125; \right&#41;&#125;&#123;\sum_&#123;t \in \mathscr&#123;T&#125;&#40;s,a&#41;&#125; \left&#40; 1 &#43; &#40;1-\gamma&#41; \sum_&#123;h&#61;t&#43;2&#125;^&#123;T&#40;t&#41;-1&#125; \gamma^&#123;h-t-1&#125; \rho_&#123;t&#43;1:h-1&#125; &#43; \gamma^&#123;T&#40;t&#41;-t-1&#125; \rho_&#123;t&#43;1:T&#40;t&#41;-1&#125; \right&#41;&#125;$$</p>
<p>For the algorithm on page 111, need to add a variable in the loop to keep track of <span class="tex">$\bar&#123;G&#125;$</span> both from the start of the episode forwards.  The inner loop should also start from the beginning of each episode and go forwards rather than starting at the end going backwards.  The term added to the numerator and denominator will be ready including <span class="tex">$\bar&#123;G&#125;$</span> and <span class="tex">$\rho$</span> once the end of the episode is reached.  A <span class="tex">$\gamma$</span> accumulator can be initiazed at 1 and kept track of in the inner loop by repeatedly multiplying by Î³ each iteration.</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš",([°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$dc57a71f-e44c-4385-ad2a-e6c14d5e5201¹depends_on_disabled_cellsÂ§runtimeÎ û‹µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$00cd2194-af13-415a-b725-bb34832e5d9aŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ*figure5_3 (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš+0 Q°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$00cd2194-af13-415a-b725-bb34832e5d9a¹depends_on_disabled_cellsÂ§runtimeÎ ¬ùµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$da66b3be-1fe2-4edb-9560-71ce7c0bed12Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyƒ¨elements’’’Ú9Ã—12875 Matrix{Float32}:
 0.111111  0.111111  0.111111  0.111111  â€¦  0.111111  0.111111  0.111111  0.111111
 0.111111  0.111111  0.111111  0.111111     0.111111  0.111111  0.111111  0.111111
 0.111111  0.111111  0.111111  0.111111     0.111111  0.111111  0.111111  0.111111
 0.111111  0.111111  0.111111  0.111111     0.111111  0.111111  0.111111  0.111111
 0.111111  0.111111  0.111111  0.111111     0.111111  0.111111  0.111111  0.111111
 0.111111  0.111111  0.111111  0.111111  â€¦  0.111111  0.111111  0.111111  0.111111
 0.111111  0.111111  0.111111  0.111111     0.111111  0.111111  0.111111  0.111111
 0.111111  0.111111  0.111111  0.111111     0.111111  0.111111  0.111111  0.111111
 0.111111  0.111111  0.111111  0.111111     0.111111  0.111111  0.111111  0.111111ªtext/plain’’Ú9Ã—12875 Matrix{Float32}:
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  â€¦  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  â€¦  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0ªtext/plain¤type¥Tuple¨objectid°2c7d92a4fbb2a408¤mimeÙ!application/vnd.pluto.tree+object¬rootassigneeÀ²last_run_timestampËAÚš2{ÛÆ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$da66b3be-1fe2-4edb-9560-71ce7c0bed12¹depends_on_disabled_cellsÂ§runtimeÎ¢ƒ�µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$d16ac2a8-1a5a-4ded-9285-d2c6cd550066Š¦queuedÂ¤logs�§runningÂ¦output†¤body¬-0.2774324f0¤mimeªtext/plain¬rootassignee¼const blackjack_state_value1²last_run_timestampËAÚš*|×í°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$d16ac2a8-1a5a-4ded-9285-d2c6cd550066¹depends_on_disabled_cellsÂ§runtimeÎ®Ó¼µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$830d6d61-7259-43e7-8d6d-09bc81818dd9Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚlÁ<div class="markdown"><h3>Figure 5.4</h3>
<p>Ordinary importance sampling produces surprisingly unstable estimates on the one-state MDP shown in Example 5.5.  The correct estimate here is 1 &#40;<span class="tex">$\gamma &#61; 1$</span>&#41;, and, even through this is the expected value of a sample return &#40;after importance sampling&#41;, the variance of the samples is infinite, and the estimates do not converge to this value.  In contrast weighted importance samping produces the correct value of 1 after the first episode that ends with the left action. 	<script id='plot_1'>
		// We start by putting all the variable interpolation here at the beginning
		// We have to convert all typedarrays in the layout to normal arrays. See Issue #25
		// We use lodash for this for compactness
		function removeTypedArray(o) {
			return _.isTypedArray(o) ? Array.from(o) :
			_.isPlainObject(o) ? _.mapValues(o, removeTypedArray) : 
			o
		}

		// Publish the plot object to JS
		let plot_obj = _.update(/* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("c6e0de0c-3901-11f0-234e-bd09c571f662/aebe9ff9bf4a3c7"), "layout", removeTypedArray)
		// Get the plotly listeners
		const plotly_listeners = {}
		// Get the JS listeners
		const js_listeners = {}
		// Deal with eventual custom classes
		let custom_classlist = []


		// Load the plotly library
		let Plotly = undefined
		try {
			let _mod = await import("./plotlyjs/plotlyjs-2.26.2.min.js")
			Plotly = _mod.default
		} catch (e) {
			console.log("Local load failed, trying with the web esm.sh version")
			let _mod = await import("https://esm.sh/plotly.js-dist-min@2.26.2/es2022/plotly.js-dist-min.mjs")
			Plotly = _mod.default
		}

		// Check if we have to force local mathjax font cache
		if (false && window?.MathJax?.config?.svg?.fontCache === 'global') {
			window.MathJax.config.svg.fontCache = 'local'
		}

		// Flag to check if this cell was  manually ran or reactively ran
const firstRun = this ? false : true
const CONTAINER = this ?? html`<div class='plutoplotly-container'>`
const PLOT = CONTAINER.querySelector('.js-plotly-plot') ?? CONTAINER.appendChild(html`<div>`)
const parent = CONTAINER.parentElement
// We use a controller to remove event listeners upon invalidation
const controller = new AbortController()
// We have to add this to keep supporting @bind with the old API using PLOT
PLOT.addEventListener('input', (e) => {
	CONTAINER.value = PLOT.value
	if (e.bubbles) {
		return
	}
	CONTAINER.dispatchEvent(new CustomEvent('input'))
}, { signal: controller.signal })

	// This create the style subdiv on first run
	firstRun && CONTAINER.appendChild(html`
	<style>
	.plutoplotly-container {
		width: 100%;
		height: 100%;
		min-height: 0;
		min-width: 0;
	}
	.plutoplotly-container .js-plotly-plot .plotly div {
		margin: 0 auto; // This centers the plot
	}
	.plutoplotly-container.popped-out {
		overflow: auto;
		z-index: 1000;
		position: fixed;
		resize: both;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		border-top-left-radius: 0px;
		border-top-right-radius: 0px;
	}
	.plutoplotly-clipboard-header {
		display: flex;
		flex-flow: row wrap;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-top-left-radius: 12px;
		border-top-right-radius: 12px;
		position: fixed;
		z-index: 1001;
		cursor: move;
		transform: translate(0px, -100%);
		padding: 5px;
	}
	.plutoplotly-clipboard-header span {
		display: inline-block;
		flex: 1
	}
	.plutoplotly-clipboard-header.hidden {
		display: none;
	}
	.clipboard-span {
		position: relative;
	}
	.clipboard-value {
		padding-right: 5px;
		padding-left: 2px;
		cursor: text;
	}
	.clipboard-span.format {
		display: none;
	}
	.clipboard-span.filename {
		flex: 0 0 100%;
		text-align: center;
		border-top: 3px solid var(--kbd-border-color);
		margin-top: 5px;
		display: none;
	}
	.plutoplotly-container.filesave .clipboard-span.filename {
		display: inline-block;
	}
	.clipboard-value.filename {
		margin-left: 3px;
		text-align: left;
		min-width: min(60%, min-content);
	}
	.plutoplotly-container.filesave .clipboard-span.format {
		display: inline-flex;
	}
	.clipboard-span.format .label {
		flex: 0 0 0;
	}
	.clipboard-value.format {
		position: relative;
		flex: 1 0 auto;
		min-width: 30px;
		margin-right: 10px;
	}
	div.format-options {
		display: inline-flex;
		flex-flow: column;
		position: absolute;
		background: var(--main-bg-color);
		border-radius: 12px;
		padding-left: 3px;
		z-index: 2000;
	}
	div.format-options:hover {
		cursor: pointer;
		border: 3px solid var(--kbd-border-color);
		padding: 3px;
		transform: translate(-3px, -6px);
	}
	div.format-options .format-option {
		display: none;
	}
	div.format-options:hover .format-option {
		display: inline-block;
	}
	.format-option:not(.selected) {
		margin-top: 3px;
	}
	div.format-options .format-option.selected {
		order: -1;
		display: inline-block;
	}
	.format-option:hover {
		background-color: var(--kbd-border-color);
	}
	span.config-value {
		font-weight: normal;
		color: var(--pluto-output-color);
		display: none;
		position: absolute;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		transform: translate(0px, calc(-100% - 10px));
		padding: 5px;
	}
	.label {
		user-select: none;
	}
	.label:hover span.config-value {
		display: inline-block;
		min-width: 150px;
	}
	.clipboard-span.matching-config .label {
		color: var(--cm-macro-color);
		font-weight: bold;
	}
	.clipboard-span.different-config .label {
		color: var(--cm-tag-color);
		font-weight: bold;
	}
</style>
`)

let original_height = plot_obj.layout.height
let original_width = plot_obj.layout.width
// For the height we have to also put a fixed value in case the plot is put on a non-fixed-size container (like the default wrapper)
// We define a variable to check whether we still have to remove the fixed height
let remove_container_size = firstRun
let container_height = original_height ?? PLOT.container_height ?? 400
CONTAINER.style.height = container_height + 'px'

// We create a Promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// We import interact for dragging/resizing
const { default: interact } = await import('https://esm.sh/interactjs@1.10.19')


function getImageOptions() {
  const o = plot_obj.config.toImageButtonOptions ?? {};
  return {
    format: o.format ?? "png",
    width: o.width ?? original_width,
    height: o.height ?? original_height,
    scale: o.scale ?? 1,
    filename: o.filename ?? "newplot",
  };
}

const CLIPBOARD_HEADER =
  CONTAINER.querySelector(".plutoplotly-clipboard-header") ??
  CONTAINER.insertAdjacentElement(
    "afterbegin",
    html`<div class="plutoplotly-clipboard-header hidden">
      <span class="clipboard-span format"
        ><span class="label">Format:</span
        ><span class="clipboard-value format"></span
      ></span>
      <span class="clipboard-span width"
        ><span class="label">Width:</span
        ><span class="clipboard-value width"></span>px</span
      >
      <span class="clipboard-span height"
        ><span class="label">Height:</span
        ><span class="clipboard-value height"></span>px</span
      >
      <span class="clipboard-span scale"
        ><span class="label">Scale:</span
        ><span class="clipboard-value scale"></span
      ></span>
      <button class="clipboard-span set">Set</button>
      <button class="clipboard-span unset">Unset</button>
      <span class="clipboard-span filename"
        ><span class="label">Filename:</span
        ><span class="clipboard-value filename"></span
      ></span>
    </div>`
  );

function checkConfigSync(container) {
  const valid_classes = [
    "missing-config",
    "matching-config",
    "different-config",
  ];
  function setClass(cl) {
    for (const name of valid_classes) {
      container.classList.toggle(name, name == cl);
    }
  }
  // We use the custom getters we'll set up in the container
  const { ui_value, config_value, config_span, key } = container;
  if (config_value === undefined) {
    setClass("missing-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> is not present in the config.`;
  } else if (ui_value == config_value) {
    setClass("matching-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has the same value in the config and in the header.`;
  } else {
    setClass("different-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has a different value (<em>${config_value}</em>) in the config.`;
  }
  // Add info about setting and unsetting
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click on the label <em><b>once</b></em> to set the current UI value in the config.`
  );
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click <em><b>twice</b></em> to remove this key from the config.`
  );
}

const valid_formats = ["png", "svg", "webp", "jpeg", "full-json"];
function initializeUIValueSpan(span, key, value) {
  const container = span.closest(".clipboard-span");
  span.contentEditable = key === "format" ? "false" : "true";
  let parse = (x) => x;
  let update = (x) => (span.textContent = x);
  if (key === "width" || key === "height") {
    parse = (x) => Math.round(parseFloat(x));
  } else if (key === "scale") {
    parse = parseFloat;
  } else if (key === "format") {
    // We remove contentEditable
    span.contentEditable = "false";
    // Here we first add the subspans for each option
    const opts_div = span.appendChild(html`<div class="format-options"></div>`);
    for (const fmt of valid_formats) {
      const opt = opts_div.appendChild(
        html`<span class="format-option ${fmt}">${fmt}</span>`
      );
      opt.onclick = (e) => {
        span.value = opt.textContent;
      };
    }
    parse = (x) => {
      return valid_formats.includes(x) ? x : localValue;
    };
    update = (x) => {
      for (const opt of opts_div.children) {
        opt.classList.toggle("selected", opt.textContent === x);
      }
    };
  } else {
    // We only have filename here
  }
  let localValue;
  Object.defineProperty(span, "value", {
    get: () => {
      return localValue;
    },
    set: (val) => {
      if (val !== "") {
        localValue = parse(val);
      }
      update(localValue);
      checkConfigSync(container);
    },
  });
  // We also assign a listener so that the editable is blurred when enter is pressed
  span.onkeydown = (e) => {
    if (e.keyCode === 13) {
      e.preventDefault();
      span.blur();
    }
  };
  span.value = value;
}

function initializeConfigValueSpan(span, key) {
  // Here we mostly want to define the setter and getter
  const container = span.closest(".clipboard-span");
  Object.defineProperty(span, "value", {
    get: () => {
      return plot_obj.config.toImageButtonOptions[key];
    },
    set: (val) => {
      // if undefined is passed, we remove the entry from the options
      if (val === undefined) {
        delete plot_obj.config.toImageButtonOptions[key];
      } else {
        plot_obj.config.toImageButtonOptions[key] = val;
      }
      checkConfigSync(container);
    },
  });
}

const config_spans = {};
for (const [key, value] of Object.entries(getImageOptions())) {
  const container = CLIPBOARD_HEADER.querySelector(`.clipboard-span.${key}`);
  const label = container.querySelector(".label");
  // We give the label a function that on single click will set the current value and with double click will unset it
  label.onclick = DualClick(
    () => {
      container.config_value = container.ui_value;
    },
    (e) => {
      console.log("e", e);
      e.preventDefault();
      container.config_value = undefined;
    }
  );
  const ui_value_span = container.querySelector(".clipboard-value");
  const config_value_span =
    container.querySelector(".config-value") ??
    label.insertAdjacentElement(
      "afterbegin",
      html`<span class="config-value"></span>`
    );
  // Assing the two spans as properties of the containing span
  container.ui_span = ui_value_span;
  container.config_span = config_value_span;
  container.key = key;
  config_spans[key] = container;
  if (firstRun) {
    plot_obj.config.toImageButtonOptions =
      plot_obj.config.toImageButtonOptions ?? {};
    // We do the initialization of the value span
    initializeUIValueSpan(ui_value_span, key, value);
    // Then we initialize the config value
    initializeConfigValueSpan(config_value_span, key);
    // We put some convenience getters/setters
    // ui_value forward
    Object.defineProperty(container, "ui_value", {
      get: () => ui_value_span.value,
      set: (val) => {
        ui_value_span.value = val;
      },
    });
    // config_value forward
    Object.defineProperty(container, "config_value", {
      get: () => config_value_span.value,
      set: (val) => {
        config_value_span.value = val;
      },
    });
  }
}

// These objects will contain the default value

// This code updates the image options in the PLOT config with the provided ones
function setImageOptions(o) {
  for (const [key, container] of Object.entries(config_spans)) {
    container.config_value = o[key];
  }
}
function unsetImageOptions() {
  setImageOptions({});
}

const set_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.set");
const unset_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.unset");
if (firstRun) {
  set_button.onclick = (e) => {
    for (const container of Object.values(config_spans)) {
      container.config_value = container.ui_value;
    }
  };
  unset_button.onclick = unsetImageOptions;
}

// We add a function to check if the clipboard is popped out
CONTAINER.isPoppedOut = () => {
  return CONTAINER.classList.contains("popped-out");
};

CLIPBOARD_HEADER.onmousedown = function (event) {
  if (event.target.matches("span.clipboard-value")) {
    console.log("We don't move!");
    return;
  }
  const start = {
    left: parseFloat(CONTAINER.style.left),
    top: parseFloat(CONTAINER.style.top),
    X: event.pageX,
    Y: event.pageY,
  };
  function moveAt(event, start) {
    const top = event.pageY - start.Y + start.top + "px";
    const left = event.pageX - start.X + start.left + "px";
    CLIPBOARD_HEADER.style.left = left;
    CONTAINER.style.left = left;
    CONTAINER.style.top = top;
  }

  // move our absolutely positioned ball under the pointer
  moveAt(event, start);
  function onMouseMove(event) {
    moveAt(event, start);
  }

  // We use this to remove the mousemove when clicking outside of the container
  const controller = new AbortController();

  // move the container on mousemove
  document.addEventListener("mousemove", onMouseMove, {
    signal: controller.signal,
  });
  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        cleanUp();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );

  function cleanUp() {
    console.log("cleaning up the plot move listener");
    controller.abort();
    CLIPBOARD_HEADER.onmouseup = null;
  }

  // (3) drop the ball, remove unneeded handlers
  CLIPBOARD_HEADER.onmouseup = cleanUp;
};

function sendToClipboard(blob) {
  if (!navigator.clipboard) {
    alert(
      "The Clipboard API does not seem to be available, make sure the Pluto notebook is being used from either localhost or an https source."
    );
  }
  navigator.clipboard
    .write([
      new ClipboardItem({
        // The key is determined dynamically based on the blob's type.
        [blob.type]: blob,
      }),
    ])
    .then(
      function () {
        console.log("Async: Copying to clipboard was successful!");
      },
      function (err) {
        console.error("Async: Could not copy text: ", err);
      }
    );
}

function copyImageToClipboard() {
  // We extract the image options from the provided parameters (if they exist)
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key. We also ignore format because the clipboard only supports png.
    if (val === undefined || key === "format") {
      continue;
    }
    config[key] = val;
  }
  Plotly.toImage(PLOT, config).then(function (dataUrl) {
    fetch(dataUrl)
      .then((res) => res.blob())
      .then((blob) => {
        const paste_receiver = document.querySelector('paste-receiver.plutoplotly')
        if (paste_receiver) {
          paste_receiver.attachImage(dataUrl, CONTAINER)
        }
        sendToClipboard(blob)
      });
  });
}

function saveImageToFile() {
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key.
    if (val === undefined) {
      continue;
    }
    config[key] = val;
  }
  Plotly.downloadImage(PLOT, config);
}

let container_rect = { width: 0, height: 0, top: 0, left: 0 };
function unpop_container(cl) {
  CONTAINER.classList.toggle("popped-out", false);
  CONTAINER.classList.toggle(cl, false);
  // We fix the height back to the value it had before popout, also setting the flag to signal that upon first resize we remove the fixed inline-style
  CONTAINER.style.height = container_rect.height + "px";
  remove_container_size = true;
  // We set the other fixed inline-styles to null
  CONTAINER.style.width = "";
  CONTAINER.style.top = "";
  CONTAINER.style.left = "";
  // We also remove the CLIPBOARD_HEADER
  CLIPBOARD_HEADER.style.width = "";
  CLIPBOARD_HEADER.style.left = "";
  // Finally we remove the hidden class to the header
  CLIPBOARD_HEADER.classList.toggle("hidden", true);
  return;
}
function popout_container(opts) {
  const cl = opts?.cl;
  const target_container_size = opts?.target_container_size ?? {};
  const target_plot_size = opts?.target_plot_size ?? {};
  if (CONTAINER.isPoppedOut()) {
    return unpop_container(cl);
  }
  CONTAINER.classList.toggle(cl, cl === undefined ? false : true);
  // We extract the current size of the container, save them and fix them
  const { width, height, top, left } = CONTAINER.getBoundingClientRect();
  container_rect = { width, height, top, left };
  // We save the current plot size before we pop as it will fill the screen
  const current_plot_size = {
    width: PLOT._fullLayout.width,
    height: PLOT._fullLayout.height,
  };
  // We have to save the pad data before popping so we can resize precisely
  const pad = {};
  pad.unpopped = getSizeData().container_pad;
  CONTAINER.classList.toggle("popped-out", true);
  pad.popped = getSizeData().container_pad;
  // We do top and left based on the current rect
  for (const key of ["top", "left"]) {
    const start_val = target_container_size[key] ?? container_rect[key];
    let offset = 0;
    for (const kind of ["padding", "border"]) {
      offset += pad.popped[kind][key] - pad.unpopped[kind][key];
    }
    CONTAINER.style[key] = start_val - offset + "px";
    if (key === "left") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  // We compute the width and height depending on eventual config data
  const csz = computeContainerSize({
    width:
      target_plot_size.width ??
      config_spans.width.config_value ??
      current_plot_size.width,
    height:
      target_plot_size.height ??
      config_spans.height.config_value ??
      current_plot_size.height,
  });
  for (const key of ["width", "height"]) {
    const val = target_container_size[key] ?? csz[key];
    CONTAINER.style[key] = val + "px";
    if (key === "width") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  CLIPBOARD_HEADER.classList.toggle("hidden", false);
  const controller = new AbortController();

  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        unpop_container();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );
}

CONTAINER.popOut = popout_container;

function DualClick(single_func, dbl_func) {
  let nclicks = 0;
  return function (...args) {
    nclicks += 1;
    if (nclicks > 1) {
      dbl_func(...args);
      nclicks = 0;
    } else {
      delay(300).then(() => {
        if (nclicks == 1) {
          single_func(...args);
        }
        nclicks = 0;
      });
    }
  };
}

// We remove the default download image button
plot_obj.config.modeBarButtonsToRemove = _.union(
  plot_obj.config.modeBarButtonsToRemove,
  ["toImage"]
);
// We add the custom button to the modebar
plot_obj.config.modeBarButtonsToAdd = _.union(
  plot_obj.config.modeBarButtonsToAdd,
  [
    {
      name: "Copy PNG to Clipboard",
      icon: {
        height: 520,
        width: 520,
        path: "M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z",
      },
      direction: "up",
      click: DualClick(copyImageToClipboard, () => {
        popout_container();
      }),
    },
    {
      name: "Download Image",
      icon: Plotly.Icons.camera,
      direction: "up",
      click: DualClick(saveImageToFile, () => {
        popout_container({ cl: "filesave" });
      }),
    },
  ]
);

function getOffsetData(el) {
  let cs = window.getComputedStyle(el, null);
  const odata = {
    padding: {
      left: parseFloat(cs.paddingLeft),
      right: parseFloat(cs.paddingRight),
      top: parseFloat(cs.paddingTop),
      bottom: parseFloat(cs.paddingBottom),
      width: parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight),
      height: parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom),
    },
    border: {
      left: parseFloat(cs.borderLeftWidth),
      right: parseFloat(cs.borderRightWidth),
      top: parseFloat(cs.borderTopWidth),
      bottom: parseFloat(cs.borderBottomWidth),
      width: parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth),
      height: parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth),
    }
  };
  if (el === PLOT) {
    // For the PLOT we also want to take into account the offset
    odata.offset = {
      top: PLOT.offsetParent == CONTAINER ? PLOT.offsetTop : 0,
      left: PLOT.offsetParent == CONTAINER ? PLOT.offsetLeft : 0,
    }
  }
  return odata;
}
function getSizeData() {
  const data = {
    plot_pad: getOffsetData(PLOT),
    plot_rect: PLOT.getBoundingClientRect(),
    container_pad: getOffsetData(CONTAINER),
    container_rect: CONTAINER.getBoundingClientRect(),
  };
  return data;
}
function computeContainerSize({ width, height }, sizeData = getSizeData()) {
  const computed_size = computePlotSize(sizeData);
  const offsets = computed_size.offsets;

  const plot_data = {
    width: width ?? computed_size.width,
    height: height ?? computed_size.height,
  };

  return {
    width: (width ?? computed_size.width) + offsets.width,
    height: (height ?? computed_size.height) + offsets.height,
    noChange: width == computed_size.width && height == computed_size.height,
  }
}

// This function will change the container size so that the resulting plot will be matching the provided specs
function changeContainerSize({ width, height }, sizeData = getSizeData()) {
  if (!CONTAINER.isPoppedOut()) {
    console.log("Tried to change container size when not popped, ignoring");
    return;
  }

  const csz = computeContainerSize({ width, height }, sizeData);

  if (csz.noChange) {
    console.log("Size is the same as current, ignoring");
    return
  }
  // We are now going to set he width and height of the container
  for (const key of ["width", "height"]) {
    CONTAINER.style[key] = csz[key] + "px";
  }
}
// We now create the function that will update the plot based on the values specified
function updateFromHeader() {
  const header_data = {
    height: config_spans.height.ui_value,
    width: config_spans.width.ui_value,
  };
  changeContainerSize(header_data);
}
// We assign this function to the onblur event of width and height
if (firstRun) {
  for (const container of Object.values(config_spans)) {
    container.ui_span.onblur = (e) => {
      container.ui_value = container.ui_span.textContent;
      updateFromHeader();
    };
  }
}
// This function computes the plot size to use for relayout as a function of the container size
function computePlotSize(data = getSizeData()) {
  // Remove Padding
  const { container_pad, plot_pad, container_rect } = data;
  const offsets = {
    width:
      plot_pad.padding.width +
      plot_pad.border.width +
      plot_pad.offset.left +
      container_pad.padding.width +
      container_pad.border.width,
    height:
      plot_pad.padding.height +
      plot_pad.border.height +
      plot_pad.offset.top +
      container_pad.padding.height +
      container_pad.border.height,
  };
  const sz = {
    width: Math.round(container_rect.width - offsets.width),
    height: Math.round(container_rect.height - offsets.height),
    offsets,
  };
  return sz;
}

// Create the resizeObserver to make the plot even more responsive! :magic:
const resizeObserver = new ResizeObserver((entries) => {
  const sizeData = getSizeData();
  const {container_rect, container_pad} = sizeData;
  let plot_size = computePlotSize(sizeData);
  // We save the height in the PLOT object
  PLOT.container_height = container_rect.height;
  // We deal with some stuff if the container is poppped
  CLIPBOARD_HEADER.style.width = container_rect.width + "px";
  CLIPBOARD_HEADER.style.left = container_rect.left + "px";
  config_spans.height.ui_value = plot_size.height;
  config_spans.width.ui_value = plot_size.width;
  /* 
		The addition of the invalid argument `plutoresize` seems to fix the problem with calling `relayout` simply with `{autosize: true}` as update breaking mouse relayout events tracking. 
		See https://github.com/plotly/plotly.js/issues/6156 for details
		*/
  let config = {
    // If this is popped out, we ignore the original width/height
    width: (CONTAINER.isPoppedOut() ? undefined : original_width) ?? plot_size.width,
    height: (CONTAINER.isPoppedOut() ? undefined : original_height) ?? plot_size.height,
    plutoresize: true,
  };
  Plotly.relayout(PLOT, config).then(() => {
    if (remove_container_size && !CONTAINER.isPoppedOut()) {
      // This is needed to avoid the first resize upon plot creation to already be without a fixed height
      CONTAINER.style.height = "";
      CONTAINER.style.width = "";
      remove_container_size = false;
    }
  });
});

resizeObserver.observe(CONTAINER);


Plotly.react(PLOT, plot_obj).then(() => {
	// Assign the Plotly event listeners
	for (const [key, listener_vec] of Object.entries(plotly_listeners)) {
		for (const listener of listener_vec) {
			PLOT.on(key, listener)
		}
	}
	// Assign the JS event listeners
	for (const [key, listener_vec] of Object.entries(js_listeners)) {
		for (const listener of listener_vec) {
			PLOT.addEventListener(key, listener, {
				signal: controller.signal
			})
		}
	}
}
)


invalidation.then(() => {
	// Remove all plotly listeners
	PLOT.removeAllListeners()
	// Remove all JS listeners
	controller.abort()
	// Remove the resizeObserver
	resizeObserver.disconnect()
})



		return CONTAINER
	</script>
</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš-9-4°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$830d6d61-7259-43e7-8d6d-09bc81818dd9¹depends_on_disabled_cellsÂ§runtimeÎêÌ`£µpublished_object_keys‘Ù4c6e0de0c-3901-11f0-234e-bd09c571f662/aebe9ff9bf4a3c7¸depends_on_skipped_cellsÂ§erroredÂÙ$e293e184-5938-40b5-a04b-5306760a06aeŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ9estimate_blackjack_state (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš)»Qe°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$e293e184-5938-40b5-a04b-5306760a06ae¹depends_on_disabled_cellsÂ§runtimeÎ ¤Zµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$66645f1a-b591-43e7-b931-8ed0cc7d6898Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÛ AÔ	<div style = "display: flex;">
	<div>
Race finished in 58 steps
<div style="background-color: white; color: black;">
	<div style="display:flex; align-items: flex-start">
	<div class = "track">
		<div class = "start" style="grid-column-start: 8; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 5; grid-row-start: 1;"></div><div class = "start" vx = "2" vy = "0" dvx = "0" dvy = "-1" style="grid-column-start: 14; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 16; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "0" dvy = "-1" style="grid-column-start: 3; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 11; grid-row-start: 1;"></div><div class = "start" vx = "3" vy = "0" dvx = "1" dvy = "0" style="grid-column-start: 19; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "1" dvy = "1" style="grid-column-start: 22; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 6; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 17; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 21; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "1" dvy = "0" style="grid-column-start: 13; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "1" dvy = "0" style="grid-column-start: 9; grid-row-start: 1;"></div><div class = "start" vx = "2" vy = "0" dvx = "1" dvy = "1" style="grid-column-start: 18; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 2; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 20; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 1; grid-row-start: 1;"></div><div class = "start" vx = "4" vy = "0" dvx = "1" dvy = "1" style="grid-column-start: 23; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 7; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "0" dvy = "0" style="grid-column-start: 12; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "1" dvy = "1" style="grid-column-start: 10; grid-row-start: 1;"></div><div class = "start" vx = "2" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 15; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "1" dvy = "1" style="grid-column-start: 4; grid-row-start: 1;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 15;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "1" style="grid-column-start: 8; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 13;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "0" style="grid-column-start: 19; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 27;"></div><div class = "" vx = "2" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 31; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 8;"></div><div class = "" vx = "1" vy = "4" dvx = "-1" dvy = "1" style="grid-column-start: 18; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 20;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "0" style="grid-column-start: 18; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 4;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "-1" style="grid-column-start: 18; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 8;"></div><div class = "" vx = "1" vy = "2" dvx = "-1" dvy = "1" style="grid-column-start: 17; grid-row-start: 4;"></div><div class = "" vx = "2" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 29; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 21;"></div><div class = "" vx = "4" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 19; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 9;"></div><div class = "" vx = "2" vy = "4" dvx = "-1" dvy = "1" style="grid-column-start: 17; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 11;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 20; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 28;"></div><div class = "" vx = "4" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 23; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 4;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 19; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 2;"></div><div class = "" vx = "2" vy = "0" dvx = "0" dvy = "0" style="grid-column-start: 23; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 8;"></div><div class = "" vx = "1" vy = "4" dvx = "-1" dvy = "-1" style="grid-column-start: 18; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 9;"></div><div class = "" vx = "1" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 7; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 28;"></div><div class = "" vx = "2" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 6; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 4;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 14; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 23;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 8; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 5;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "0" style="grid-column-start: 18; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 4;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "1" style="grid-column-start: 17; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 14;"></div><div class = "" vx = "2" vy = "0" dvx = "1" dvy = "0" style="grid-column-start: 18; grid-row-start: 2;"></div><div class = "" vx = "3" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 24; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 30;"></div><div class = "" vx = "2" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 21; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 12;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 16; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 2;"></div><div class = "" vx = "1" vy = "1" dvx = "1" dvy = "-1" style="grid-column-start: 14; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 9;"></div><div class = "" vx = "2" vy = "1" dvx = "1" dvy = "-1" style="grid-column-start: 12; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 23;"></div><div class = "" vx = "3" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 21; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 17;"></div><div class = "" vx = "3" vy = "2" dvx = "-1" dvy = "0" style="grid-column-start: 27; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 29;"></div><div class = "" vx = "3" vy = "0" dvx = "1" dvy = "1" style="grid-column-start: 15; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 26;"></div><div class = "" vx = "1" vy = "3" dvx = "1" dvy = "1" style="grid-column-start: 15; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 21;"></div><div class = "" vx = "1" vy = "3" dvx = "1" dvy = "-1" style="grid-column-start: 19; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 27;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 30;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 27;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 23;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 28;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 29;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 26;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 25;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 24;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 22;"></div>
	</div>
	Finish <br> line
	</div>
	<div>Starting line</div>
</div>
</div>

	<div>
Race finished in 117 steps
<div style="background-color: white; color: black;">
	<div style="display:flex; align-items: flex-start">
	<div class = "track">
		<div class = "start" vx = "0" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 8; grid-row-start: 1;"></div><div class = "start" vx = "2" vy = "0" dvx = "0" dvy = "0" style="grid-column-start: 5; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "0" dvy = "0" style="grid-column-start: 14; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 16; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 3; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 11; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 19; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 22; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 6; grid-row-start: 1;"></div><div class = "start" vx = "4" vy = "0" dvx = "1" dvy = "1" style="grid-column-start: 17; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "0" dvy = "-1" style="grid-column-start: 21; grid-row-start: 1;"></div><div class = "start" vx = "3" vy = "0" dvx = "1" dvy = "0" style="grid-column-start: 13; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "0" dvy = "-1" style="grid-column-start: 9; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "0" dvy = "1" style="grid-column-start: 18; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 2; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 20; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 1; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "0" dvy = "1" style="grid-column-start: 23; grid-row-start: 1;"></div><div class = "start" vx = "2" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 7; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "0" dvy = "0" style="grid-column-start: 12; grid-row-start: 1;"></div><div class = "start" vx = "2" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 10; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 15; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 4; grid-row-start: 1;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 17;"></div><div class = "" vx = "2" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 17; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 13;"></div><div class = "" vx = "3" vy = "2" dvx = "0" dvy = "-1" style="grid-column-start: 29; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 17;"></div><div class = "" vx = "2" vy = "0" dvx = "0" dvy = "0" style="grid-column-start: 20; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 25;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "1" style="grid-column-start: 23; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 19;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 19; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 24;"></div><div class = "" vx = "0" vy = "4" dvx = "-1" dvy = "1" style="grid-column-start: 21; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 26;"></div><div class = "" vx = "1" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 23; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 8;"></div><div class = "" vx = "1" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 18; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 6;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 22; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 24;"></div><div class = "" vx = "1" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 13; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 25;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 19; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 27;"></div><div class = "" vx = "1" vy = "2" dvx = "-1" dvy = "1" style="grid-column-start: 20; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 4;"></div><div class = "" vx = "0" vy = "4" dvx = "-1" dvy = "0" style="grid-column-start: 18; grid-row-start: 19;"></div><div class = "" vx = "1" vy = "2" dvx = "-1" dvy = "1" style="grid-column-start: 18; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 11;"></div><div class = "" vx = "1" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 2; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 2;"></div><div class = "" vx = "1" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 23; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 25;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "-1" style="grid-column-start: 19; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 15;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "-1" style="grid-column-start: 18; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 10;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "-1" style="grid-column-start: 8; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 2;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "-1" style="grid-column-start: 19; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 8;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "-1" style="grid-column-start: 17; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 18; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 8; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 10;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "1" style="grid-column-start: 14; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 7;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 11; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 20;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "1" style="grid-column-start: 21; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 20;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "-1" style="grid-column-start: 20; grid-row-start: 11;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "1" style="grid-column-start: 20; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 3;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 18; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 28;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "0" style="grid-column-start: 23; grid-row-start: 5;"></div><div class = "" vx = "0" vy = "4" dvx = "-1" dvy = "-1" style="grid-column-start: 23; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 22;"></div><div class = "" vx = "1" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 11; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 5;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "-1" style="grid-column-start: 10; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 11;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 18; grid-row-start: 3;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "-1" style="grid-column-start: 18; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 25;"></div><div class = "" vx = "1" vy = "2" dvx = "-1" dvy = "-1" style="grid-column-start: 19; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 11;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "1" style="grid-column-start: 20; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 4;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 23; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 26;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "0" style="grid-column-start: 9; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 5;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "0" style="grid-column-start: 18; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 3;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 14; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 4;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 19; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 17; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 6;"></div><div class = "" vx = "2" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 26; grid-row-start: 23;"></div><div class = "" vx = "1" vy = "2" dvx = "0" dvy = "-1" style="grid-column-start: 12; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 3;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 8; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 4;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 9; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 23;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 19; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 11;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 17; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 23;"></div><div class = "" vx = "2" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 22; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 3;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 19; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 4;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 17; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 22;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 18; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 14;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 18; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 5;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 14; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 15;"></div><div class = "" vx = "0" vy = "4" dvx = "-1" dvy = "0" style="grid-column-start: 20; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 2;"></div><div class = "" vx = "1" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 14; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 20;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 9; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 7;"></div><div class = "" vx = "1" vy = "4" dvx = "0" dvy = "0" style="grid-column-start: 15; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 18;"></div><div class = "" vx = "0" vy = "4" dvx = "-1" dvy = "1" style="grid-column-start: 21; grid-row-start: 23;"></div><div class = "" vx = "4" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 21; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 4;"></div><div class = "" vx = "1" vy = "4" dvx = "0" dvy = "0" style="grid-column-start: 16; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 26;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 1; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 27;"></div><div class = "" vx = "1" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 7;"></div><div class = "" vx = "1" vy = "0" dvx = "0" dvy = "-1" style="grid-column-start: 23; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 5;"></div><div class = "" vx = "2" vy = "2" dvx = "0" dvy = "-1" style="grid-column-start: 15; grid-row-start: 14;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "-1" style="grid-column-start: 23; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 28;"></div><div class = "" vx = "1" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 22; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 2;"></div><div class = "" vx = "1" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 10; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 23;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 23; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 30;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 9; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 7;"></div><div class = "" vx = "0" vy = "4" dvx = "0" dvy = "0" style="grid-column-start: 20; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 13;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 21; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 12;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 20; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 30;"></div><div class = "" vx = "1" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 24; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 27;"></div><div class = "" vx = "1" vy = "4" dvx = "0" dvy = "-1" style="grid-column-start: 17; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 6;"></div><div class = "" vx = "0" vy = "4" dvx = "0" dvy = "0" style="grid-column-start: 20; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 27;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 30;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 27;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 23;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 28;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 29;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 26;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 25;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 24;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 22;"></div>
	</div>
	Finish <br> line
	</div>
	<div>Starting line</div>
</div>
</div>

	</div>
¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš2}÷@°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$66645f1a-b591-43e7-b931-8ed0cc7d6898¹depends_on_disabled_cellsÂ§runtimeÎ ™äµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$658ceeaa-1b45-47bd-a364-eaa1759d17acŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ3race_track_episode (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš/_´°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$658ceeaa-1b45-47bd-a364-eaa1759d17ac¹depends_on_disabled_cellsÂ§runtimeÎ x¬µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$04752549-ffca-4e31-869e-714f835d3e85Š¦queuedÂ¤logs�§runningÂ¦output†¤body¢23¤mimeªtext/plain¬rootassignee»const blackjack_stateindex1²last_run_timestampËAÚš)®Åï°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$04752549-ffca-4e31-869e-714f835d3e85¹depends_on_disabled_cellsÂ§runtimeÎ M&®µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$e89706f1-0c6a-4da4-82a1-ccf153f2e186Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙR<div class="markdown"><h4>Monte Carlo Exploring Starts Solution Method</h4>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"*ìx°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$e89706f1-0c6a-4da4-82a1-ccf153f2e186¹depends_on_disabled_cellsÂ§runtimeÎ Ý^µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$ab10ccd7-75ba-475c-af26-f8b36daaf880Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚ<div class="markdown"><blockquote>
<h3><em>Exercise 5.11</em></h3>
<p>In the boxed algorithm for off-policy MC control, you may have been expecting the <span class="tex">$W$</span> update to have involved the importance-sampling ratio <span class="tex">$\frac&#123;\pi&#40;A_t|S_t&#41;&#125;&#123;b&#40;A_t|S_T&#41;&#125;$</span>, but instead it involves <span class="tex">$\frac&#123;1&#125;&#123;b&#40;A_t|S_t&#41;&#125;$</span>.  Why is this nevertheless correct?</p>
</blockquote>
<p>The target policy <span class="tex">$\pi&#40;s&#41;$</span> is always deterministic, only selecting a single action according to <span class="tex">$\pi&#40;s&#41;&#61;\text&#123;argmax&#125;_a Q&#40;s,a&#41;$</span>.  Therefore the numerator in importance-sampling ratio will either be 1 when the trajectory action matches the one given by <span class="tex">$\pi&#40;s&#41;$</span> or it will be 0.  The inner loop will exit if such as action is selected as it will result in zero values of W for the rest of the trajectory and thus no further updates to <span class="tex">$Q&#40;s,a&#41;$</span> or <span class="tex">$\pi&#40;s&#41;$</span>.  The only value of <span class="tex">$\pi&#40;s&#41;$</span> that would be encountered in the equation is therefore 1 which is why the numerator is a constant.</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš")º|°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$ab10ccd7-75ba-475c-af26-f8b36daaf880¹depends_on_disabled_cellsÂ§runtimeÎ J»µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$4481fa33-1ff3-4778-8486-d4d8a15775cdŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÛ 4b	<div style = "display: flex;">
	<div>
Race finished in 14 steps
<div style="background-color: white; color: black;">
	<div style="display:flex; align-items: flex-start">
	<div class = "track">
		<div class = "start" style="grid-column-start: 8; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 5; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 14; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 16; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 3; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 11; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 19; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 22; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 6; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 17; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 21; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 13; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 9; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 18; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 2; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 20; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 1; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 23; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 7; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 12; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 10; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 15; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 4; grid-row-start: 1;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 29;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 18; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 8;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 17; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 3;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "-1" style="grid-column-start: 18; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 5;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "-1" style="grid-column-start: 18; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 10;"></div><div class = "" vx = "2" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 22; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 11;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 17; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 5;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 18; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 30;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 18; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 14;"></div><div class = "" vx = "1" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 19; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 5;"></div><div class = "" vx = "4" vy = "4" dvx = "0" dvy = "0" style="grid-column-start: 29; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 21;"></div><div class = "" vx = "1" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 20; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 3;"></div><div class = "" vx = "3" vy = "3" dvx = "1" dvy = "1" style="grid-column-start: 25; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 27;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 30;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 27;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 23;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 28;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 29;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 26;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 25;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 24;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 22;"></div>
	</div>
	Finish <br> line
	</div>
	<div>Starting line</div>
</div>
</div>

	<div>
Race finished in 44 steps
<div style="background-color: white; color: black;">
	<div style="display:flex; align-items: flex-start">
	<div class = "track">
		<div class = "start" style="grid-column-start: 8; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 5; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 14; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 16; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 3; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 11; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "0" dvy = "-1" style="grid-column-start: 19; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 22; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 6; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 17; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 21; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 13; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 9; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 18; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 2; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "1" dvy = "0" style="grid-column-start: 20; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 1; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 23; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 7; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 12; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 10; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 15; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 4; grid-row-start: 1;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 29;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "1" style="grid-column-start: 21; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 2;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 19; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 8;"></div><div class = "" vx = "1" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 17; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 25;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "0" style="grid-column-start: 21; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 19; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 8;"></div><div class = "" vx = "4" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 31; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 28;"></div><div class = "" vx = "2" vy = "1" dvx = "1" dvy = "-1" style="grid-column-start: 23; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 26;"></div><div class = "" vx = "1" vy = "2" dvx = "-1" dvy = "0" style="grid-column-start: 21; grid-row-start: 8;"></div><div class = "" vx = "1" vy = "0" dvx = "0" dvy = "-1" style="grid-column-start: 16; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 6;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 2; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 10;"></div><div class = "" vx = "1" vy = "2" dvx = "-1" dvy = "1" style="grid-column-start: 6; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 22;"></div><div class = "" vx = "1" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 20; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 4;"></div><div class = "" vx = "1" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 14; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 4;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "1" style="grid-column-start: 21; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 28;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 5; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 13;"></div><div class = "" vx = "1" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 3; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 4;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 19; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 29;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 21; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 23;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 19; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 21;"></div><div class = "" vx = "1" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 15; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 14;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 18; grid-row-start: 2;"></div><div class = "" vx = "2" vy = "3" dvx = "1" dvy = "-1" style="grid-column-start: 24; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 23;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 21; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 26;"></div><div class = "" vx = "1" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 22; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 22;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 5; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 9;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 12; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 28; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 23;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 21; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 2;"></div><div class = "" vx = "1" vy = "4" dvx = "1" dvy = "-1" style="grid-column-start: 22; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 17;"></div><div class = "" vx = "3" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 27; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 25; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 29; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 23; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 24;"></div><div class = "" vx = "2" vy = "2" dvx = "1" dvy = "-1" style="grid-column-start: 23; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 31; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 21; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 32; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 22; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 26; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 30; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 24; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 17; grid-row-start: 20;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "-1" style="grid-column-start: 6; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 20; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 19; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 18; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 28;"></div><div class = "" vx = "1" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 13; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 27; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 27;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 30;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 27;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 23;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 28;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 29;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 26;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 25;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 24;"></div><div class = "finish" style="grid-column-start: 32; grid-row-start: 22;"></div>
	</div>
	Finish <br> line
	</div>
	<div>Starting line</div>
</div>
</div>

	</div>
¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš3*wû°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$4481fa33-1ff3-4778-8486-d4d8a15775cd¹depends_on_disabled_cellsÂ§runtimeÎ °ñ¨µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$1b02e593-d791-424c-b956-62cc480fcf40Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚŸ<div class="markdown"><h5>Results Summary</h5>
<p>Unlike the other techniques, Monte Carlo Ïµ-Soft requires selecting the parameter Ïµ and the performance of each algorithm varies a lot with this parameter and the number of training episodes.  For a short training time of 1,000 episodes, small values of Ïµ seem to perform better such as 0.01 or 0.02.  Under those conditions, performance of the policies is far better than random with mean episode lengths of 32 and 24 respectively.  Longer training improves the results but also requires changing Ïµ and possibly introducing a decay rate so it can start high and approach 0 after a large number of episodes.</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"+©ü°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$1b02e593-d791-424c-b956-62cc480fcf40¹depends_on_disabled_cellsÂ§runtimeÎ ïµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$72e9721f-ee17-4557-b090-71728e6c22ceŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ+makelookup (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš$Ø­°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$72e9721f-ee17-4557-b090-71728e6c22ce¹depends_on_disabled_cellsÂ§runtimeÎ Bíµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$11723075-d1db-4512-abf2-3fe494a71a3bŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ-check_policy (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš$ý—°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$11723075-d1db-4512-abf2-3fe494a71a3b¹depends_on_disabled_cellsÂ§runtimeÎ uÊµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$059b1c0f-eb21-4a4a-8aed-64e9ac07b541Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚÉ<div class="markdown"><p>Number of Episodes: <bond def="mces2" unique_id="HBhB843vhuLe"><span style='display: contents;'>
	<input type='number' min='1' step='1' max='10000000' value='1000'>
	<input type=submit id='ajycuyrqfj'>
	<script id='ajycuyrqfj'>

let key = "ajycuyrqfj"

let div = currentScript.parentElement
let button = currentScript.previousElementSibling
let input = div.firstElementChild
if(input === button) {
	return
}


let set_input_value = (() => {
	let result = null
	try {
	result = setBoundElementValueLikePluto
} catch (e) {
	result = ((input, new_value) => {
	// fallback in case https://github.com/fonsp/Pluto.jl/pull/1755 is not available
    if (new_value == null) {
        //@ts-ignore
        input.value = new_value
        return
    }
    if (input instanceof HTMLInputElement) {
        switch (input.type) {
            case "range":
            case "number": {
                if (input.valueAsNumber !== new_value) {
                    input.valueAsNumber = new_value
                }
                return
            }
            case "date": {
                if (input.valueAsDate == null || Number(input.valueAsDate) !== Number(new_value)) {
                    input.valueAsDate = new_value
                }
                return
            }
            case "checkbox": {
                if (input.checked !== new_value) {
                    input.checked = new_value
                }
                return
            }
            case "file": {
                // Can't set files :(
                return
            }
        }
    } else if (input instanceof HTMLSelectElement && input.multiple) {
        for (let option of Array.from(input.options)) {
            option.selected = new_value.includes(option.value)
        }
        return
    }
    //@ts-ignore
    if (input.value !== new_value) {
        //@ts-ignore
        input.value = new_value
    }
})
}
return result
})()



let private_value = null
let public_value = null




private_value = public_value = div.value
if(private_value != null) {
	set_input_value(input, private_value)
} else {

	// private_value = public_value = input.value
}

input.oninput = (e) => {
	e.stopPropagation()
}
const gen = Generators.input(input)

// If the child does not have an initial value, the `gen.next().value` promise will never resolve. If it does, then it resolves instantly.
let first_value = await Promise.any([
	gen.next().value,
	Promise.resolve(undefined)
])
private_value = public_value = first_value

;(async () => {
	while(true) {
		private_value = await gen.next().value
		// div.dispatchEvent(new CustomEvent("input", {}))
	}
})()

button.addEventListener("click", () => {
	public_value = private_value
	div.dispatchEvent(new CustomEvent("input", {}))
})


Object.defineProperty(div, 'value', {
	get: () => public_value,
	set: (newval) => {
		private_value = newval
		public_value = newval
		
		set_input_value(input, newval)
	},
	configurable: true,
});

</script></span></bond></p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš3"“°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$059b1c0f-eb21-4a4a-8aed-64e9ac07b541¹depends_on_disabled_cellsÂ§runtimeÎ y£µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$b2115f33-f8e2-452e-9b0e-90610f0f09b1Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ3make_random_policy (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš$ä©m°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$b2115f33-f8e2-452e-9b0e-90610f0f09b1¹depends_on_disabled_cellsÂ§runtimeÎ Ž�µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$82284c63-2306-4469-9b1a-a5ec87037e79Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÛ «S<div style = "display: flex; flex-wrap: wrap; flex-direction: row; width: 800px; background-color: white; color: black; align-items: center; justify-content: center;">
	<div style = "width: 50px;">Usable ace</div>
	<div>	<script id='plot_1'>
		// We start by putting all the variable interpolation here at the beginning
		// We have to convert all typedarrays in the layout to normal arrays. See Issue #25
		// We use lodash for this for compactness
		function removeTypedArray(o) {
			return _.isTypedArray(o) ? Array.from(o) :
			_.isPlainObject(o) ? _.mapValues(o, removeTypedArray) : 
			o
		}

		// Publish the plot object to JS
		let plot_obj = _.update(/* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("c6e0de0c-3901-11f0-234e-bd09c571f662/c2f9f46c95453d02"), "layout", removeTypedArray)
		// Get the plotly listeners
		const plotly_listeners = {}
		// Get the JS listeners
		const js_listeners = {}
		// Deal with eventual custom classes
		let custom_classlist = []


		// Load the plotly library
		let Plotly = undefined
		try {
			let _mod = await import("./plotlyjs/plotlyjs-2.26.2.min.js")
			Plotly = _mod.default
		} catch (e) {
			console.log("Local load failed, trying with the web esm.sh version")
			let _mod = await import("https://esm.sh/plotly.js-dist-min@2.26.2/es2022/plotly.js-dist-min.mjs")
			Plotly = _mod.default
		}

		// Check if we have to force local mathjax font cache
		if (false && window?.MathJax?.config?.svg?.fontCache === 'global') {
			window.MathJax.config.svg.fontCache = 'local'
		}

		// Flag to check if this cell was  manually ran or reactively ran
const firstRun = this ? false : true
const CONTAINER = this ?? html`<div class='plutoplotly-container'>`
const PLOT = CONTAINER.querySelector('.js-plotly-plot') ?? CONTAINER.appendChild(html`<div>`)
const parent = CONTAINER.parentElement
// We use a controller to remove event listeners upon invalidation
const controller = new AbortController()
// We have to add this to keep supporting @bind with the old API using PLOT
PLOT.addEventListener('input', (e) => {
	CONTAINER.value = PLOT.value
	if (e.bubbles) {
		return
	}
	CONTAINER.dispatchEvent(new CustomEvent('input'))
}, { signal: controller.signal })

	// This create the style subdiv on first run
	firstRun && CONTAINER.appendChild(html`
	<style>
	.plutoplotly-container {
		width: 100%;
		height: 100%;
		min-height: 0;
		min-width: 0;
	}
	.plutoplotly-container .js-plotly-plot .plotly div {
		margin: 0 auto; // This centers the plot
	}
	.plutoplotly-container.popped-out {
		overflow: auto;
		z-index: 1000;
		position: fixed;
		resize: both;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		border-top-left-radius: 0px;
		border-top-right-radius: 0px;
	}
	.plutoplotly-clipboard-header {
		display: flex;
		flex-flow: row wrap;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-top-left-radius: 12px;
		border-top-right-radius: 12px;
		position: fixed;
		z-index: 1001;
		cursor: move;
		transform: translate(0px, -100%);
		padding: 5px;
	}
	.plutoplotly-clipboard-header span {
		display: inline-block;
		flex: 1
	}
	.plutoplotly-clipboard-header.hidden {
		display: none;
	}
	.clipboard-span {
		position: relative;
	}
	.clipboard-value {
		padding-right: 5px;
		padding-left: 2px;
		cursor: text;
	}
	.clipboard-span.format {
		display: none;
	}
	.clipboard-span.filename {
		flex: 0 0 100%;
		text-align: center;
		border-top: 3px solid var(--kbd-border-color);
		margin-top: 5px;
		display: none;
	}
	.plutoplotly-container.filesave .clipboard-span.filename {
		display: inline-block;
	}
	.clipboard-value.filename {
		margin-left: 3px;
		text-align: left;
		min-width: min(60%, min-content);
	}
	.plutoplotly-container.filesave .clipboard-span.format {
		display: inline-flex;
	}
	.clipboard-span.format .label {
		flex: 0 0 0;
	}
	.clipboard-value.format {
		position: relative;
		flex: 1 0 auto;
		min-width: 30px;
		margin-right: 10px;
	}
	div.format-options {
		display: inline-flex;
		flex-flow: column;
		position: absolute;
		background: var(--main-bg-color);
		border-radius: 12px;
		padding-left: 3px;
		z-index: 2000;
	}
	div.format-options:hover {
		cursor: pointer;
		border: 3px solid var(--kbd-border-color);
		padding: 3px;
		transform: translate(-3px, -6px);
	}
	div.format-options .format-option {
		display: none;
	}
	div.format-options:hover .format-option {
		display: inline-block;
	}
	.format-option:not(.selected) {
		margin-top: 3px;
	}
	div.format-options .format-option.selected {
		order: -1;
		display: inline-block;
	}
	.format-option:hover {
		background-color: var(--kbd-border-color);
	}
	span.config-value {
		font-weight: normal;
		color: var(--pluto-output-color);
		display: none;
		position: absolute;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		transform: translate(0px, calc(-100% - 10px));
		padding: 5px;
	}
	.label {
		user-select: none;
	}
	.label:hover span.config-value {
		display: inline-block;
		min-width: 150px;
	}
	.clipboard-span.matching-config .label {
		color: var(--cm-macro-color);
		font-weight: bold;
	}
	.clipboard-span.different-config .label {
		color: var(--cm-tag-color);
		font-weight: bold;
	}
</style>
`)

let original_height = plot_obj.layout.height
let original_width = plot_obj.layout.width
// For the height we have to also put a fixed value in case the plot is put on a non-fixed-size container (like the default wrapper)
// We define a variable to check whether we still have to remove the fixed height
let remove_container_size = firstRun
let container_height = original_height ?? PLOT.container_height ?? 400
CONTAINER.style.height = container_height + 'px'

// We create a Promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// We import interact for dragging/resizing
const { default: interact } = await import('https://esm.sh/interactjs@1.10.19')


function getImageOptions() {
  const o = plot_obj.config.toImageButtonOptions ?? {};
  return {
    format: o.format ?? "png",
    width: o.width ?? original_width,
    height: o.height ?? original_height,
    scale: o.scale ?? 1,
    filename: o.filename ?? "newplot",
  };
}

const CLIPBOARD_HEADER =
  CONTAINER.querySelector(".plutoplotly-clipboard-header") ??
  CONTAINER.insertAdjacentElement(
    "afterbegin",
    html`<div class="plutoplotly-clipboard-header hidden">
      <span class="clipboard-span format"
        ><span class="label">Format:</span
        ><span class="clipboard-value format"></span
      ></span>
      <span class="clipboard-span width"
        ><span class="label">Width:</span
        ><span class="clipboard-value width"></span>px</span
      >
      <span class="clipboard-span height"
        ><span class="label">Height:</span
        ><span class="clipboard-value height"></span>px</span
      >
      <span class="clipboard-span scale"
        ><span class="label">Scale:</span
        ><span class="clipboard-value scale"></span
      ></span>
      <button class="clipboard-span set">Set</button>
      <button class="clipboard-span unset">Unset</button>
      <span class="clipboard-span filename"
        ><span class="label">Filename:</span
        ><span class="clipboard-value filename"></span
      ></span>
    </div>`
  );

function checkConfigSync(container) {
  const valid_classes = [
    "missing-config",
    "matching-config",
    "different-config",
  ];
  function setClass(cl) {
    for (const name of valid_classes) {
      container.classList.toggle(name, name == cl);
    }
  }
  // We use the custom getters we'll set up in the container
  const { ui_value, config_value, config_span, key } = container;
  if (config_value === undefined) {
    setClass("missing-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> is not present in the config.`;
  } else if (ui_value == config_value) {
    setClass("matching-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has the same value in the config and in the header.`;
  } else {
    setClass("different-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has a different value (<em>${config_value}</em>) in the config.`;
  }
  // Add info about setting and unsetting
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click on the label <em><b>once</b></em> to set the current UI value in the config.`
  );
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click <em><b>twice</b></em> to remove this key from the config.`
  );
}

const valid_formats = ["png", "svg", "webp", "jpeg", "full-json"];
function initializeUIValueSpan(span, key, value) {
  const container = span.closest(".clipboard-span");
  span.contentEditable = key === "format" ? "false" : "true";
  let parse = (x) => x;
  let update = (x) => (span.textContent = x);
  if (key === "width" || key === "height") {
    parse = (x) => Math.round(parseFloat(x));
  } else if (key === "scale") {
    parse = parseFloat;
  } else if (key === "format") {
    // We remove contentEditable
    span.contentEditable = "false";
    // Here we first add the subspans for each option
    const opts_div = span.appendChild(html`<div class="format-options"></div>`);
    for (const fmt of valid_formats) {
      const opt = opts_div.appendChild(
        html`<span class="format-option ${fmt}">${fmt}</span>`
      );
      opt.onclick = (e) => {
        span.value = opt.textContent;
      };
    }
    parse = (x) => {
      return valid_formats.includes(x) ? x : localValue;
    };
    update = (x) => {
      for (const opt of opts_div.children) {
        opt.classList.toggle("selected", opt.textContent === x);
      }
    };
  } else {
    // We only have filename here
  }
  let localValue;
  Object.defineProperty(span, "value", {
    get: () => {
      return localValue;
    },
    set: (val) => {
      if (val !== "") {
        localValue = parse(val);
      }
      update(localValue);
      checkConfigSync(container);
    },
  });
  // We also assign a listener so that the editable is blurred when enter is pressed
  span.onkeydown = (e) => {
    if (e.keyCode === 13) {
      e.preventDefault();
      span.blur();
    }
  };
  span.value = value;
}

function initializeConfigValueSpan(span, key) {
  // Here we mostly want to define the setter and getter
  const container = span.closest(".clipboard-span");
  Object.defineProperty(span, "value", {
    get: () => {
      return plot_obj.config.toImageButtonOptions[key];
    },
    set: (val) => {
      // if undefined is passed, we remove the entry from the options
      if (val === undefined) {
        delete plot_obj.config.toImageButtonOptions[key];
      } else {
        plot_obj.config.toImageButtonOptions[key] = val;
      }
      checkConfigSync(container);
    },
  });
}

const config_spans = {};
for (const [key, value] of Object.entries(getImageOptions())) {
  const container = CLIPBOARD_HEADER.querySelector(`.clipboard-span.${key}`);
  const label = container.querySelector(".label");
  // We give the label a function that on single click will set the current value and with double click will unset it
  label.onclick = DualClick(
    () => {
      container.config_value = container.ui_value;
    },
    (e) => {
      console.log("e", e);
      e.preventDefault();
      container.config_value = undefined;
    }
  );
  const ui_value_span = container.querySelector(".clipboard-value");
  const config_value_span =
    container.querySelector(".config-value") ??
    label.insertAdjacentElement(
      "afterbegin",
      html`<span class="config-value"></span>`
    );
  // Assing the two spans as properties of the containing span
  container.ui_span = ui_value_span;
  container.config_span = config_value_span;
  container.key = key;
  config_spans[key] = container;
  if (firstRun) {
    plot_obj.config.toImageButtonOptions =
      plot_obj.config.toImageButtonOptions ?? {};
    // We do the initialization of the value span
    initializeUIValueSpan(ui_value_span, key, value);
    // Then we initialize the config value
    initializeConfigValueSpan(config_value_span, key);
    // We put some convenience getters/setters
    // ui_value forward
    Object.defineProperty(container, "ui_value", {
      get: () => ui_value_span.value,
      set: (val) => {
        ui_value_span.value = val;
      },
    });
    // config_value forward
    Object.defineProperty(container, "config_value", {
      get: () => config_value_span.value,
      set: (val) => {
        config_value_span.value = val;
      },
    });
  }
}

// These objects will contain the default value

// This code updates the image options in the PLOT config with the provided ones
function setImageOptions(o) {
  for (const [key, container] of Object.entries(config_spans)) {
    container.config_value = o[key];
  }
}
function unsetImageOptions() {
  setImageOptions({});
}

const set_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.set");
const unset_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.unset");
if (firstRun) {
  set_button.onclick = (e) => {
    for (const container of Object.values(config_spans)) {
      container.config_value = container.ui_value;
    }
  };
  unset_button.onclick = unsetImageOptions;
}

// We add a function to check if the clipboard is popped out
CONTAINER.isPoppedOut = () => {
  return CONTAINER.classList.contains("popped-out");
};

CLIPBOARD_HEADER.onmousedown = function (event) {
  if (event.target.matches("span.clipboard-value")) {
    console.log("We don't move!");
    return;
  }
  const start = {
    left: parseFloat(CONTAINER.style.left),
    top: parseFloat(CONTAINER.style.top),
    X: event.pageX,
    Y: event.pageY,
  };
  function moveAt(event, start) {
    const top = event.pageY - start.Y + start.top + "px";
    const left = event.pageX - start.X + start.left + "px";
    CLIPBOARD_HEADER.style.left = left;
    CONTAINER.style.left = left;
    CONTAINER.style.top = top;
  }

  // move our absolutely positioned ball under the pointer
  moveAt(event, start);
  function onMouseMove(event) {
    moveAt(event, start);
  }

  // We use this to remove the mousemove when clicking outside of the container
  const controller = new AbortController();

  // move the container on mousemove
  document.addEventListener("mousemove", onMouseMove, {
    signal: controller.signal,
  });
  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        cleanUp();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );

  function cleanUp() {
    console.log("cleaning up the plot move listener");
    controller.abort();
    CLIPBOARD_HEADER.onmouseup = null;
  }

  // (3) drop the ball, remove unneeded handlers
  CLIPBOARD_HEADER.onmouseup = cleanUp;
};

function sendToClipboard(blob) {
  if (!navigator.clipboard) {
    alert(
      "The Clipboard API does not seem to be available, make sure the Pluto notebook is being used from either localhost or an https source."
    );
  }
  navigator.clipboard
    .write([
      new ClipboardItem({
        // The key is determined dynamically based on the blob's type.
        [blob.type]: blob,
      }),
    ])
    .then(
      function () {
        console.log("Async: Copying to clipboard was successful!");
      },
      function (err) {
        console.error("Async: Could not copy text: ", err);
      }
    );
}

function copyImageToClipboard() {
  // We extract the image options from the provided parameters (if they exist)
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key. We also ignore format because the clipboard only supports png.
    if (val === undefined || key === "format") {
      continue;
    }
    config[key] = val;
  }
  Plotly.toImage(PLOT, config).then(function (dataUrl) {
    fetch(dataUrl)
      .then((res) => res.blob())
      .then((blob) => {
        const paste_receiver = document.querySelector('paste-receiver.plutoplotly')
        if (paste_receiver) {
          paste_receiver.attachImage(dataUrl, CONTAINER)
        }
        sendToClipboard(blob)
      });
  });
}

function saveImageToFile() {
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key.
    if (val === undefined) {
      continue;
    }
    config[key] = val;
  }
  Plotly.downloadImage(PLOT, config);
}

let container_rect = { width: 0, height: 0, top: 0, left: 0 };
function unpop_container(cl) {
  CONTAINER.classList.toggle("popped-out", false);
  CONTAINER.classList.toggle(cl, false);
  // We fix the height back to the value it had before popout, also setting the flag to signal that upon first resize we remove the fixed inline-style
  CONTAINER.style.height = container_rect.height + "px";
  remove_container_size = true;
  // We set the other fixed inline-styles to null
  CONTAINER.style.width = "";
  CONTAINER.style.top = "";
  CONTAINER.style.left = "";
  // We also remove the CLIPBOARD_HEADER
  CLIPBOARD_HEADER.style.width = "";
  CLIPBOARD_HEADER.style.left = "";
  // Finally we remove the hidden class to the header
  CLIPBOARD_HEADER.classList.toggle("hidden", true);
  return;
}
function popout_container(opts) {
  const cl = opts?.cl;
  const target_container_size = opts?.target_container_size ?? {};
  const target_plot_size = opts?.target_plot_size ?? {};
  if (CONTAINER.isPoppedOut()) {
    return unpop_container(cl);
  }
  CONTAINER.classList.toggle(cl, cl === undefined ? false : true);
  // We extract the current size of the container, save them and fix them
  const { width, height, top, left } = CONTAINER.getBoundingClientRect();
  container_rect = { width, height, top, left };
  // We save the current plot size before we pop as it will fill the screen
  const current_plot_size = {
    width: PLOT._fullLayout.width,
    height: PLOT._fullLayout.height,
  };
  // We have to save the pad data before popping so we can resize precisely
  const pad = {};
  pad.unpopped = getSizeData().container_pad;
  CONTAINER.classList.toggle("popped-out", true);
  pad.popped = getSizeData().container_pad;
  // We do top and left based on the current rect
  for (const key of ["top", "left"]) {
    const start_val = target_container_size[key] ?? container_rect[key];
    let offset = 0;
    for (const kind of ["padding", "border"]) {
      offset += pad.popped[kind][key] - pad.unpopped[kind][key];
    }
    CONTAINER.style[key] = start_val - offset + "px";
    if (key === "left") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  // We compute the width and height depending on eventual config data
  const csz = computeContainerSize({
    width:
      target_plot_size.width ??
      config_spans.width.config_value ??
      current_plot_size.width,
    height:
      target_plot_size.height ??
      config_spans.height.config_value ??
      current_plot_size.height,
  });
  for (const key of ["width", "height"]) {
    const val = target_container_size[key] ?? csz[key];
    CONTAINER.style[key] = val + "px";
    if (key === "width") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  CLIPBOARD_HEADER.classList.toggle("hidden", false);
  const controller = new AbortController();

  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        unpop_container();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );
}

CONTAINER.popOut = popout_container;

function DualClick(single_func, dbl_func) {
  let nclicks = 0;
  return function (...args) {
    nclicks += 1;
    if (nclicks > 1) {
      dbl_func(...args);
      nclicks = 0;
    } else {
      delay(300).then(() => {
        if (nclicks == 1) {
          single_func(...args);
        }
        nclicks = 0;
      });
    }
  };
}

// We remove the default download image button
plot_obj.config.modeBarButtonsToRemove = _.union(
  plot_obj.config.modeBarButtonsToRemove,
  ["toImage"]
);
// We add the custom button to the modebar
plot_obj.config.modeBarButtonsToAdd = _.union(
  plot_obj.config.modeBarButtonsToAdd,
  [
    {
      name: "Copy PNG to Clipboard",
      icon: {
        height: 520,
        width: 520,
        path: "M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z",
      },
      direction: "up",
      click: DualClick(copyImageToClipboard, () => {
        popout_container();
      }),
    },
    {
      name: "Download Image",
      icon: Plotly.Icons.camera,
      direction: "up",
      click: DualClick(saveImageToFile, () => {
        popout_container({ cl: "filesave" });
      }),
    },
  ]
);

function getOffsetData(el) {
  let cs = window.getComputedStyle(el, null);
  const odata = {
    padding: {
      left: parseFloat(cs.paddingLeft),
      right: parseFloat(cs.paddingRight),
      top: parseFloat(cs.paddingTop),
      bottom: parseFloat(cs.paddingBottom),
      width: parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight),
      height: parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom),
    },
    border: {
      left: parseFloat(cs.borderLeftWidth),
      right: parseFloat(cs.borderRightWidth),
      top: parseFloat(cs.borderTopWidth),
      bottom: parseFloat(cs.borderBottomWidth),
      width: parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth),
      height: parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth),
    }
  };
  if (el === PLOT) {
    // For the PLOT we also want to take into account the offset
    odata.offset = {
      top: PLOT.offsetParent == CONTAINER ? PLOT.offsetTop : 0,
      left: PLOT.offsetParent == CONTAINER ? PLOT.offsetLeft : 0,
    }
  }
  return odata;
}
function getSizeData() {
  const data = {
    plot_pad: getOffsetData(PLOT),
    plot_rect: PLOT.getBoundingClientRect(),
    container_pad: getOffsetData(CONTAINER),
    container_rect: CONTAINER.getBoundingClientRect(),
  };
  return data;
}
function computeContainerSize({ width, height }, sizeData = getSizeData()) {
  const computed_size = computePlotSize(sizeData);
  const offsets = computed_size.offsets;

  const plot_data = {
    width: width ?? computed_size.width,
    height: height ?? computed_size.height,
  };

  return {
    width: (width ?? computed_size.width) + offsets.width,
    height: (height ?? computed_size.height) + offsets.height,
    noChange: width == computed_size.width && height == computed_size.height,
  }
}

// This function will change the container size so that the resulting plot will be matching the provided specs
function changeContainerSize({ width, height }, sizeData = getSizeData()) {
  if (!CONTAINER.isPoppedOut()) {
    console.log("Tried to change container size when not popped, ignoring");
    return;
  }

  const csz = computeContainerSize({ width, height }, sizeData);

  if (csz.noChange) {
    console.log("Size is the same as current, ignoring");
    return
  }
  // We are now going to set he width and height of the container
  for (const key of ["width", "height"]) {
    CONTAINER.style[key] = csz[key] + "px";
  }
}
// We now create the function that will update the plot based on the values specified
function updateFromHeader() {
  const header_data = {
    height: config_spans.height.ui_value,
    width: config_spans.width.ui_value,
  };
  changeContainerSize(header_data);
}
// We assign this function to the onblur event of width and height
if (firstRun) {
  for (const container of Object.values(config_spans)) {
    container.ui_span.onblur = (e) => {
      container.ui_value = container.ui_span.textContent;
      updateFromHeader();
    };
  }
}
// This function computes the plot size to use for relayout as a function of the container size
function computePlotSize(data = getSizeData()) {
  // Remove Padding
  const { container_pad, plot_pad, container_rect } = data;
  const offsets = {
    width:
      plot_pad.padding.width +
      plot_pad.border.width +
      plot_pad.offset.left +
      container_pad.padding.width +
      container_pad.border.width,
    height:
      plot_pad.padding.height +
      plot_pad.border.height +
      plot_pad.offset.top +
      container_pad.padding.height +
      container_pad.border.height,
  };
  const sz = {
    width: Math.round(container_rect.width - offsets.width),
    height: Math.round(container_rect.height - offsets.height),
    offsets,
  };
  return sz;
}

// Create the resizeObserver to make the plot even more responsive! :magic:
const resizeObserver = new ResizeObserver((entries) => {
  const sizeData = getSizeData();
  const {container_rect, container_pad} = sizeData;
  let plot_size = computePlotSize(sizeData);
  // We save the height in the PLOT object
  PLOT.container_height = container_rect.height;
  // We deal with some stuff if the container is poppped
  CLIPBOARD_HEADER.style.width = container_rect.width + "px";
  CLIPBOARD_HEADER.style.left = container_rect.left + "px";
  config_spans.height.ui_value = plot_size.height;
  config_spans.width.ui_value = plot_size.width;
  /* 
		The addition of the invalid argument `plutoresize` seems to fix the problem with calling `relayout` simply with `{autosize: true}` as update breaking mouse relayout events tracking. 
		See https://github.com/plotly/plotly.js/issues/6156 for details
		*/
  let config = {
    // If this is popped out, we ignore the original width/height
    width: (CONTAINER.isPoppedOut() ? undefined : original_width) ?? plot_size.width,
    height: (CONTAINER.isPoppedOut() ? undefined : original_height) ?? plot_size.height,
    plutoresize: true,
  };
  Plotly.relayout(PLOT, config).then(() => {
    if (remove_container_size && !CONTAINER.isPoppedOut()) {
      // This is needed to avoid the first resize upon plot creation to already be without a fixed height
      CONTAINER.style.height = "";
      CONTAINER.style.width = "";
      remove_container_size = false;
    }
  });
});

resizeObserver.observe(CONTAINER);


Plotly.react(PLOT, plot_obj).then(() => {
	// Assign the Plotly event listeners
	for (const [key, listener_vec] of Object.entries(plotly_listeners)) {
		for (const listener of listener_vec) {
			PLOT.on(key, listener)
		}
	}
	// Assign the JS event listeners
	for (const [key, listener_vec] of Object.entries(js_listeners)) {
		for (const listener of listener_vec) {
			PLOT.addEventListener(key, listener, {
				signal: controller.signal
			})
		}
	}
}
)


invalidation.then(() => {
	// Remove all plotly listeners
	PLOT.removeAllListeners()
	// Remove all JS listeners
	controller.abort()
	// Remove the resizeObserver
	resizeObserver.disconnect()
})



		return CONTAINER
	</script>
</div> 
	<div>	<script id='plot_2'>
		// We start by putting all the variable interpolation here at the beginning
		// We have to convert all typedarrays in the layout to normal arrays. See Issue #25
		// We use lodash for this for compactness
		function removeTypedArray(o) {
			return _.isTypedArray(o) ? Array.from(o) :
			_.isPlainObject(o) ? _.mapValues(o, removeTypedArray) : 
			o
		}

		// Publish the plot object to JS
		let plot_obj = _.update(/* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("c6e0de0c-3901-11f0-234e-bd09c571f662/cc789608a7b2df16"), "layout", removeTypedArray)
		// Get the plotly listeners
		const plotly_listeners = {}
		// Get the JS listeners
		const js_listeners = {}
		// Deal with eventual custom classes
		let custom_classlist = []


		// Load the plotly library
		let Plotly = undefined
		try {
			let _mod = await import("./plotlyjs/plotlyjs-2.26.2.min.js")
			Plotly = _mod.default
		} catch (e) {
			console.log("Local load failed, trying with the web esm.sh version")
			let _mod = await import("https://esm.sh/plotly.js-dist-min@2.26.2/es2022/plotly.js-dist-min.mjs")
			Plotly = _mod.default
		}

		// Check if we have to force local mathjax font cache
		if (false && window?.MathJax?.config?.svg?.fontCache === 'global') {
			window.MathJax.config.svg.fontCache = 'local'
		}

		// Flag to check if this cell was  manually ran or reactively ran
const firstRun = this ? false : true
const CONTAINER = this ?? html`<div class='plutoplotly-container'>`
const PLOT = CONTAINER.querySelector('.js-plotly-plot') ?? CONTAINER.appendChild(html`<div>`)
const parent = CONTAINER.parentElement
// We use a controller to remove event listeners upon invalidation
const controller = new AbortController()
// We have to add this to keep supporting @bind with the old API using PLOT
PLOT.addEventListener('input', (e) => {
	CONTAINER.value = PLOT.value
	if (e.bubbles) {
		return
	}
	CONTAINER.dispatchEvent(new CustomEvent('input'))
}, { signal: controller.signal })

	// This create the style subdiv on first run
	firstRun && CONTAINER.appendChild(html`
	<style>
	.plutoplotly-container {
		width: 100%;
		height: 100%;
		min-height: 0;
		min-width: 0;
	}
	.plutoplotly-container .js-plotly-plot .plotly div {
		margin: 0 auto; // This centers the plot
	}
	.plutoplotly-container.popped-out {
		overflow: auto;
		z-index: 1000;
		position: fixed;
		resize: both;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		border-top-left-radius: 0px;
		border-top-right-radius: 0px;
	}
	.plutoplotly-clipboard-header {
		display: flex;
		flex-flow: row wrap;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-top-left-radius: 12px;
		border-top-right-radius: 12px;
		position: fixed;
		z-index: 1001;
		cursor: move;
		transform: translate(0px, -100%);
		padding: 5px;
	}
	.plutoplotly-clipboard-header span {
		display: inline-block;
		flex: 1
	}
	.plutoplotly-clipboard-header.hidden {
		display: none;
	}
	.clipboard-span {
		position: relative;
	}
	.clipboard-value {
		padding-right: 5px;
		padding-left: 2px;
		cursor: text;
	}
	.clipboard-span.format {
		display: none;
	}
	.clipboard-span.filename {
		flex: 0 0 100%;
		text-align: center;
		border-top: 3px solid var(--kbd-border-color);
		margin-top: 5px;
		display: none;
	}
	.plutoplotly-container.filesave .clipboard-span.filename {
		display: inline-block;
	}
	.clipboard-value.filename {
		margin-left: 3px;
		text-align: left;
		min-width: min(60%, min-content);
	}
	.plutoplotly-container.filesave .clipboard-span.format {
		display: inline-flex;
	}
	.clipboard-span.format .label {
		flex: 0 0 0;
	}
	.clipboard-value.format {
		position: relative;
		flex: 1 0 auto;
		min-width: 30px;
		margin-right: 10px;
	}
	div.format-options {
		display: inline-flex;
		flex-flow: column;
		position: absolute;
		background: var(--main-bg-color);
		border-radius: 12px;
		padding-left: 3px;
		z-index: 2000;
	}
	div.format-options:hover {
		cursor: pointer;
		border: 3px solid var(--kbd-border-color);
		padding: 3px;
		transform: translate(-3px, -6px);
	}
	div.format-options .format-option {
		display: none;
	}
	div.format-options:hover .format-option {
		display: inline-block;
	}
	.format-option:not(.selected) {
		margin-top: 3px;
	}
	div.format-options .format-option.selected {
		order: -1;
		display: inline-block;
	}
	.format-option:hover {
		background-color: var(--kbd-border-color);
	}
	span.config-value {
		font-weight: normal;
		color: var(--pluto-output-color);
		display: none;
		position: absolute;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		transform: translate(0px, calc(-100% - 10px));
		padding: 5px;
	}
	.label {
		user-select: none;
	}
	.label:hover span.config-value {
		display: inline-block;
		min-width: 150px;
	}
	.clipboard-span.matching-config .label {
		color: var(--cm-macro-color);
		font-weight: bold;
	}
	.clipboard-span.different-config .label {
		color: var(--cm-tag-color);
		font-weight: bold;
	}
</style>
`)

let original_height = plot_obj.layout.height
let original_width = plot_obj.layout.width
// For the height we have to also put a fixed value in case the plot is put on a non-fixed-size container (like the default wrapper)
// We define a variable to check whether we still have to remove the fixed height
let remove_container_size = firstRun
let container_height = original_height ?? PLOT.container_height ?? 400
CONTAINER.style.height = container_height + 'px'

// We create a Promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// We import interact for dragging/resizing
const { default: interact } = await import('https://esm.sh/interactjs@1.10.19')


function getImageOptions() {
  const o = plot_obj.config.toImageButtonOptions ?? {};
  return {
    format: o.format ?? "png",
    width: o.width ?? original_width,
    height: o.height ?? original_height,
    scale: o.scale ?? 1,
    filename: o.filename ?? "newplot",
  };
}

const CLIPBOARD_HEADER =
  CONTAINER.querySelector(".plutoplotly-clipboard-header") ??
  CONTAINER.insertAdjacentElement(
    "afterbegin",
    html`<div class="plutoplotly-clipboard-header hidden">
      <span class="clipboard-span format"
        ><span class="label">Format:</span
        ><span class="clipboard-value format"></span
      ></span>
      <span class="clipboard-span width"
        ><span class="label">Width:</span
        ><span class="clipboard-value width"></span>px</span
      >
      <span class="clipboard-span height"
        ><span class="label">Height:</span
        ><span class="clipboard-value height"></span>px</span
      >
      <span class="clipboard-span scale"
        ><span class="label">Scale:</span
        ><span class="clipboard-value scale"></span
      ></span>
      <button class="clipboard-span set">Set</button>
      <button class="clipboard-span unset">Unset</button>
      <span class="clipboard-span filename"
        ><span class="label">Filename:</span
        ><span class="clipboard-value filename"></span
      ></span>
    </div>`
  );

function checkConfigSync(container) {
  const valid_classes = [
    "missing-config",
    "matching-config",
    "different-config",
  ];
  function setClass(cl) {
    for (const name of valid_classes) {
      container.classList.toggle(name, name == cl);
    }
  }
  // We use the custom getters we'll set up in the container
  const { ui_value, config_value, config_span, key } = container;
  if (config_value === undefined) {
    setClass("missing-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> is not present in the config.`;
  } else if (ui_value == config_value) {
    setClass("matching-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has the same value in the config and in the header.`;
  } else {
    setClass("different-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has a different value (<em>${config_value}</em>) in the config.`;
  }
  // Add info about setting and unsetting
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click on the label <em><b>once</b></em> to set the current UI value in the config.`
  );
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click <em><b>twice</b></em> to remove this key from the config.`
  );
}

const valid_formats = ["png", "svg", "webp", "jpeg", "full-json"];
function initializeUIValueSpan(span, key, value) {
  const container = span.closest(".clipboard-span");
  span.contentEditable = key === "format" ? "false" : "true";
  let parse = (x) => x;
  let update = (x) => (span.textContent = x);
  if (key === "width" || key === "height") {
    parse = (x) => Math.round(parseFloat(x));
  } else if (key === "scale") {
    parse = parseFloat;
  } else if (key === "format") {
    // We remove contentEditable
    span.contentEditable = "false";
    // Here we first add the subspans for each option
    const opts_div = span.appendChild(html`<div class="format-options"></div>`);
    for (const fmt of valid_formats) {
      const opt = opts_div.appendChild(
        html`<span class="format-option ${fmt}">${fmt}</span>`
      );
      opt.onclick = (e) => {
        span.value = opt.textContent;
      };
    }
    parse = (x) => {
      return valid_formats.includes(x) ? x : localValue;
    };
    update = (x) => {
      for (const opt of opts_div.children) {
        opt.classList.toggle("selected", opt.textContent === x);
      }
    };
  } else {
    // We only have filename here
  }
  let localValue;
  Object.defineProperty(span, "value", {
    get: () => {
      return localValue;
    },
    set: (val) => {
      if (val !== "") {
        localValue = parse(val);
      }
      update(localValue);
      checkConfigSync(container);
    },
  });
  // We also assign a listener so that the editable is blurred when enter is pressed
  span.onkeydown = (e) => {
    if (e.keyCode === 13) {
      e.preventDefault();
      span.blur();
    }
  };
  span.value = value;
}

function initializeConfigValueSpan(span, key) {
  // Here we mostly want to define the setter and getter
  const container = span.closest(".clipboard-span");
  Object.defineProperty(span, "value", {
    get: () => {
      return plot_obj.config.toImageButtonOptions[key];
    },
    set: (val) => {
      // if undefined is passed, we remove the entry from the options
      if (val === undefined) {
        delete plot_obj.config.toImageButtonOptions[key];
      } else {
        plot_obj.config.toImageButtonOptions[key] = val;
      }
      checkConfigSync(container);
    },
  });
}

const config_spans = {};
for (const [key, value] of Object.entries(getImageOptions())) {
  const container = CLIPBOARD_HEADER.querySelector(`.clipboard-span.${key}`);
  const label = container.querySelector(".label");
  // We give the label a function that on single click will set the current value and with double click will unset it
  label.onclick = DualClick(
    () => {
      container.config_value = container.ui_value;
    },
    (e) => {
      console.log("e", e);
      e.preventDefault();
      container.config_value = undefined;
    }
  );
  const ui_value_span = container.querySelector(".clipboard-value");
  const config_value_span =
    container.querySelector(".config-value") ??
    label.insertAdjacentElement(
      "afterbegin",
      html`<span class="config-value"></span>`
    );
  // Assing the two spans as properties of the containing span
  container.ui_span = ui_value_span;
  container.config_span = config_value_span;
  container.key = key;
  config_spans[key] = container;
  if (firstRun) {
    plot_obj.config.toImageButtonOptions =
      plot_obj.config.toImageButtonOptions ?? {};
    // We do the initialization of the value span
    initializeUIValueSpan(ui_value_span, key, value);
    // Then we initialize the config value
    initializeConfigValueSpan(config_value_span, key);
    // We put some convenience getters/setters
    // ui_value forward
    Object.defineProperty(container, "ui_value", {
      get: () => ui_value_span.value,
      set: (val) => {
        ui_value_span.value = val;
      },
    });
    // config_value forward
    Object.defineProperty(container, "config_value", {
      get: () => config_value_span.value,
      set: (val) => {
        config_value_span.value = val;
      },
    });
  }
}

// These objects will contain the default value

// This code updates the image options in the PLOT config with the provided ones
function setImageOptions(o) {
  for (const [key, container] of Object.entries(config_spans)) {
    container.config_value = o[key];
  }
}
function unsetImageOptions() {
  setImageOptions({});
}

const set_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.set");
const unset_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.unset");
if (firstRun) {
  set_button.onclick = (e) => {
    for (const container of Object.values(config_spans)) {
      container.config_value = container.ui_value;
    }
  };
  unset_button.onclick = unsetImageOptions;
}

// We add a function to check if the clipboard is popped out
CONTAINER.isPoppedOut = () => {
  return CONTAINER.classList.contains("popped-out");
};

CLIPBOARD_HEADER.onmousedown = function (event) {
  if (event.target.matches("span.clipboard-value")) {
    console.log("We don't move!");
    return;
  }
  const start = {
    left: parseFloat(CONTAINER.style.left),
    top: parseFloat(CONTAINER.style.top),
    X: event.pageX,
    Y: event.pageY,
  };
  function moveAt(event, start) {
    const top = event.pageY - start.Y + start.top + "px";
    const left = event.pageX - start.X + start.left + "px";
    CLIPBOARD_HEADER.style.left = left;
    CONTAINER.style.left = left;
    CONTAINER.style.top = top;
  }

  // move our absolutely positioned ball under the pointer
  moveAt(event, start);
  function onMouseMove(event) {
    moveAt(event, start);
  }

  // We use this to remove the mousemove when clicking outside of the container
  const controller = new AbortController();

  // move the container on mousemove
  document.addEventListener("mousemove", onMouseMove, {
    signal: controller.signal,
  });
  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        cleanUp();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );

  function cleanUp() {
    console.log("cleaning up the plot move listener");
    controller.abort();
    CLIPBOARD_HEADER.onmouseup = null;
  }

  // (3) drop the ball, remove unneeded handlers
  CLIPBOARD_HEADER.onmouseup = cleanUp;
};

function sendToClipboard(blob) {
  if (!navigator.clipboard) {
    alert(
      "The Clipboard API does not seem to be available, make sure the Pluto notebook is being used from either localhost or an https source."
    );
  }
  navigator.clipboard
    .write([
      new ClipboardItem({
        // The key is determined dynamically based on the blob's type.
        [blob.type]: blob,
      }),
    ])
    .then(
      function () {
        console.log("Async: Copying to clipboard was successful!");
      },
      function (err) {
        console.error("Async: Could not copy text: ", err);
      }
    );
}

function copyImageToClipboard() {
  // We extract the image options from the provided parameters (if they exist)
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key. We also ignore format because the clipboard only supports png.
    if (val === undefined || key === "format") {
      continue;
    }
    config[key] = val;
  }
  Plotly.toImage(PLOT, config).then(function (dataUrl) {
    fetch(dataUrl)
      .then((res) => res.blob())
      .then((blob) => {
        const paste_receiver = document.querySelector('paste-receiver.plutoplotly')
        if (paste_receiver) {
          paste_receiver.attachImage(dataUrl, CONTAINER)
        }
        sendToClipboard(blob)
      });
  });
}

function saveImageToFile() {
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key.
    if (val === undefined) {
      continue;
    }
    config[key] = val;
  }
  Plotly.downloadImage(PLOT, config);
}

let container_rect = { width: 0, height: 0, top: 0, left: 0 };
function unpop_container(cl) {
  CONTAINER.classList.toggle("popped-out", false);
  CONTAINER.classList.toggle(cl, false);
  // We fix the height back to the value it had before popout, also setting the flag to signal that upon first resize we remove the fixed inline-style
  CONTAINER.style.height = container_rect.height + "px";
  remove_container_size = true;
  // We set the other fixed inline-styles to null
  CONTAINER.style.width = "";
  CONTAINER.style.top = "";
  CONTAINER.style.left = "";
  // We also remove the CLIPBOARD_HEADER
  CLIPBOARD_HEADER.style.width = "";
  CLIPBOARD_HEADER.style.left = "";
  // Finally we remove the hidden class to the header
  CLIPBOARD_HEADER.classList.toggle("hidden", true);
  return;
}
function popout_container(opts) {
  const cl = opts?.cl;
  const target_container_size = opts?.target_container_size ?? {};
  const target_plot_size = opts?.target_plot_size ?? {};
  if (CONTAINER.isPoppedOut()) {
    return unpop_container(cl);
  }
  CONTAINER.classList.toggle(cl, cl === undefined ? false : true);
  // We extract the current size of the container, save them and fix them
  const { width, height, top, left } = CONTAINER.getBoundingClientRect();
  container_rect = { width, height, top, left };
  // We save the current plot size before we pop as it will fill the screen
  const current_plot_size = {
    width: PLOT._fullLayout.width,
    height: PLOT._fullLayout.height,
  };
  // We have to save the pad data before popping so we can resize precisely
  const pad = {};
  pad.unpopped = getSizeData().container_pad;
  CONTAINER.classList.toggle("popped-out", true);
  pad.popped = getSizeData().container_pad;
  // We do top and left based on the current rect
  for (const key of ["top", "left"]) {
    const start_val = target_container_size[key] ?? container_rect[key];
    let offset = 0;
    for (const kind of ["padding", "border"]) {
      offset += pad.popped[kind][key] - pad.unpopped[kind][key];
    }
    CONTAINER.style[key] = start_val - offset + "px";
    if (key === "left") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  // We compute the width and height depending on eventual config data
  const csz = computeContainerSize({
    width:
      target_plot_size.width ??
      config_spans.width.config_value ??
      current_plot_size.width,
    height:
      target_plot_size.height ??
      config_spans.height.config_value ??
      current_plot_size.height,
  });
  for (const key of ["width", "height"]) {
    const val = target_container_size[key] ?? csz[key];
    CONTAINER.style[key] = val + "px";
    if (key === "width") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  CLIPBOARD_HEADER.classList.toggle("hidden", false);
  const controller = new AbortController();

  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        unpop_container();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );
}

CONTAINER.popOut = popout_container;

function DualClick(single_func, dbl_func) {
  let nclicks = 0;
  return function (...args) {
    nclicks += 1;
    if (nclicks > 1) {
      dbl_func(...args);
      nclicks = 0;
    } else {
      delay(300).then(() => {
        if (nclicks == 1) {
          single_func(...args);
        }
        nclicks = 0;
      });
    }
  };
}

// We remove the default download image button
plot_obj.config.modeBarButtonsToRemove = _.union(
  plot_obj.config.modeBarButtonsToRemove,
  ["toImage"]
);
// We add the custom button to the modebar
plot_obj.config.modeBarButtonsToAdd = _.union(
  plot_obj.config.modeBarButtonsToAdd,
  [
    {
      name: "Copy PNG to Clipboard",
      icon: {
        height: 520,
        width: 520,
        path: "M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z",
      },
      direction: "up",
      click: DualClick(copyImageToClipboard, () => {
        popout_container();
      }),
    },
    {
      name: "Download Image",
      icon: Plotly.Icons.camera,
      direction: "up",
      click: DualClick(saveImageToFile, () => {
        popout_container({ cl: "filesave" });
      }),
    },
  ]
);

function getOffsetData(el) {
  let cs = window.getComputedStyle(el, null);
  const odata = {
    padding: {
      left: parseFloat(cs.paddingLeft),
      right: parseFloat(cs.paddingRight),
      top: parseFloat(cs.paddingTop),
      bottom: parseFloat(cs.paddingBottom),
      width: parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight),
      height: parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom),
    },
    border: {
      left: parseFloat(cs.borderLeftWidth),
      right: parseFloat(cs.borderRightWidth),
      top: parseFloat(cs.borderTopWidth),
      bottom: parseFloat(cs.borderBottomWidth),
      width: parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth),
      height: parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth),
    }
  };
  if (el === PLOT) {
    // For the PLOT we also want to take into account the offset
    odata.offset = {
      top: PLOT.offsetParent == CONTAINER ? PLOT.offsetTop : 0,
      left: PLOT.offsetParent == CONTAINER ? PLOT.offsetLeft : 0,
    }
  }
  return odata;
}
function getSizeData() {
  const data = {
    plot_pad: getOffsetData(PLOT),
    plot_rect: PLOT.getBoundingClientRect(),
    container_pad: getOffsetData(CONTAINER),
    container_rect: CONTAINER.getBoundingClientRect(),
  };
  return data;
}
function computeContainerSize({ width, height }, sizeData = getSizeData()) {
  const computed_size = computePlotSize(sizeData);
  const offsets = computed_size.offsets;

  const plot_data = {
    width: width ?? computed_size.width,
    height: height ?? computed_size.height,
  };

  return {
    width: (width ?? computed_size.width) + offsets.width,
    height: (height ?? computed_size.height) + offsets.height,
    noChange: width == computed_size.width && height == computed_size.height,
  }
}

// This function will change the container size so that the resulting plot will be matching the provided specs
function changeContainerSize({ width, height }, sizeData = getSizeData()) {
  if (!CONTAINER.isPoppedOut()) {
    console.log("Tried to change container size when not popped, ignoring");
    return;
  }

  const csz = computeContainerSize({ width, height }, sizeData);

  if (csz.noChange) {
    console.log("Size is the same as current, ignoring");
    return
  }
  // We are now going to set he width and height of the container
  for (const key of ["width", "height"]) {
    CONTAINER.style[key] = csz[key] + "px";
  }
}
// We now create the function that will update the plot based on the values specified
function updateFromHeader() {
  const header_data = {
    height: config_spans.height.ui_value,
    width: config_spans.width.ui_value,
  };
  changeContainerSize(header_data);
}
// We assign this function to the onblur event of width and height
if (firstRun) {
  for (const container of Object.values(config_spans)) {
    container.ui_span.onblur = (e) => {
      container.ui_value = container.ui_span.textContent;
      updateFromHeader();
    };
  }
}
// This function computes the plot size to use for relayout as a function of the container size
function computePlotSize(data = getSizeData()) {
  // Remove Padding
  const { container_pad, plot_pad, container_rect } = data;
  const offsets = {
    width:
      plot_pad.padding.width +
      plot_pad.border.width +
      plot_pad.offset.left +
      container_pad.padding.width +
      container_pad.border.width,
    height:
      plot_pad.padding.height +
      plot_pad.border.height +
      plot_pad.offset.top +
      container_pad.padding.height +
      container_pad.border.height,
  };
  const sz = {
    width: Math.round(container_rect.width - offsets.width),
    height: Math.round(container_rect.height - offsets.height),
    offsets,
  };
  return sz;
}

// Create the resizeObserver to make the plot even more responsive! :magic:
const resizeObserver = new ResizeObserver((entries) => {
  const sizeData = getSizeData();
  const {container_rect, container_pad} = sizeData;
  let plot_size = computePlotSize(sizeData);
  // We save the height in the PLOT object
  PLOT.container_height = container_rect.height;
  // We deal with some stuff if the container is poppped
  CLIPBOARD_HEADER.style.width = container_rect.width + "px";
  CLIPBOARD_HEADER.style.left = container_rect.left + "px";
  config_spans.height.ui_value = plot_size.height;
  config_spans.width.ui_value = plot_size.width;
  /* 
		The addition of the invalid argument `plutoresize` seems to fix the problem with calling `relayout` simply with `{autosize: true}` as update breaking mouse relayout events tracking. 
		See https://github.com/plotly/plotly.js/issues/6156 for details
		*/
  let config = {
    // If this is popped out, we ignore the original width/height
    width: (CONTAINER.isPoppedOut() ? undefined : original_width) ?? plot_size.width,
    height: (CONTAINER.isPoppedOut() ? undefined : original_height) ?? plot_size.height,
    plutoresize: true,
  };
  Plotly.relayout(PLOT, config).then(() => {
    if (remove_container_size && !CONTAINER.isPoppedOut()) {
      // This is needed to avoid the first resize upon plot creation to already be without a fixed height
      CONTAINER.style.height = "";
      CONTAINER.style.width = "";
      remove_container_size = false;
    }
  });
});

resizeObserver.observe(CONTAINER);


Plotly.react(PLOT, plot_obj).then(() => {
	// Assign the Plotly event listeners
	for (const [key, listener_vec] of Object.entries(plotly_listeners)) {
		for (const listener of listener_vec) {
			PLOT.on(key, listener)
		}
	}
	// Assign the JS event listeners
	for (const [key, listener_vec] of Object.entries(js_listeners)) {
		for (const listener of listener_vec) {
			PLOT.addEventListener(key, listener, {
				signal: controller.signal
			})
		}
	}
}
)


invalidation.then(() => {
	// Remove all plotly listeners
	PLOT.removeAllListeners()
	// Remove all JS listeners
	controller.abort()
	// Remove the resizeObserver
	resizeObserver.disconnect()
})



		return CONTAINER
	</script>
</div>
	<div style = "width: 50px;">No usable ace</div>
	<div>	<script id='plot_3'>
		// We start by putting all the variable interpolation here at the beginning
		// We have to convert all typedarrays in the layout to normal arrays. See Issue #25
		// We use lodash for this for compactness
		function removeTypedArray(o) {
			return _.isTypedArray(o) ? Array.from(o) :
			_.isPlainObject(o) ? _.mapValues(o, removeTypedArray) : 
			o
		}

		// Publish the plot object to JS
		let plot_obj = _.update(/* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("c6e0de0c-3901-11f0-234e-bd09c571f662/985b842d3ecfdc58"), "layout", removeTypedArray)
		// Get the plotly listeners
		const plotly_listeners = {}
		// Get the JS listeners
		const js_listeners = {}
		// Deal with eventual custom classes
		let custom_classlist = []


		// Load the plotly library
		let Plotly = undefined
		try {
			let _mod = await import("./plotlyjs/plotlyjs-2.26.2.min.js")
			Plotly = _mod.default
		} catch (e) {
			console.log("Local load failed, trying with the web esm.sh version")
			let _mod = await import("https://esm.sh/plotly.js-dist-min@2.26.2/es2022/plotly.js-dist-min.mjs")
			Plotly = _mod.default
		}

		// Check if we have to force local mathjax font cache
		if (false && window?.MathJax?.config?.svg?.fontCache === 'global') {
			window.MathJax.config.svg.fontCache = 'local'
		}

		// Flag to check if this cell was  manually ran or reactively ran
const firstRun = this ? false : true
const CONTAINER = this ?? html`<div class='plutoplotly-container'>`
const PLOT = CONTAINER.querySelector('.js-plotly-plot') ?? CONTAINER.appendChild(html`<div>`)
const parent = CONTAINER.parentElement
// We use a controller to remove event listeners upon invalidation
const controller = new AbortController()
// We have to add this to keep supporting @bind with the old API using PLOT
PLOT.addEventListener('input', (e) => {
	CONTAINER.value = PLOT.value
	if (e.bubbles) {
		return
	}
	CONTAINER.dispatchEvent(new CustomEvent('input'))
}, { signal: controller.signal })

	// This create the style subdiv on first run
	firstRun && CONTAINER.appendChild(html`
	<style>
	.plutoplotly-container {
		width: 100%;
		height: 100%;
		min-height: 0;
		min-width: 0;
	}
	.plutoplotly-container .js-plotly-plot .plotly div {
		margin: 0 auto; // This centers the plot
	}
	.plutoplotly-container.popped-out {
		overflow: auto;
		z-index: 1000;
		position: fixed;
		resize: both;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		border-top-left-radius: 0px;
		border-top-right-radius: 0px;
	}
	.plutoplotly-clipboard-header {
		display: flex;
		flex-flow: row wrap;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-top-left-radius: 12px;
		border-top-right-radius: 12px;
		position: fixed;
		z-index: 1001;
		cursor: move;
		transform: translate(0px, -100%);
		padding: 5px;
	}
	.plutoplotly-clipboard-header span {
		display: inline-block;
		flex: 1
	}
	.plutoplotly-clipboard-header.hidden {
		display: none;
	}
	.clipboard-span {
		position: relative;
	}
	.clipboard-value {
		padding-right: 5px;
		padding-left: 2px;
		cursor: text;
	}
	.clipboard-span.format {
		display: none;
	}
	.clipboard-span.filename {
		flex: 0 0 100%;
		text-align: center;
		border-top: 3px solid var(--kbd-border-color);
		margin-top: 5px;
		display: none;
	}
	.plutoplotly-container.filesave .clipboard-span.filename {
		display: inline-block;
	}
	.clipboard-value.filename {
		margin-left: 3px;
		text-align: left;
		min-width: min(60%, min-content);
	}
	.plutoplotly-container.filesave .clipboard-span.format {
		display: inline-flex;
	}
	.clipboard-span.format .label {
		flex: 0 0 0;
	}
	.clipboard-value.format {
		position: relative;
		flex: 1 0 auto;
		min-width: 30px;
		margin-right: 10px;
	}
	div.format-options {
		display: inline-flex;
		flex-flow: column;
		position: absolute;
		background: var(--main-bg-color);
		border-radius: 12px;
		padding-left: 3px;
		z-index: 2000;
	}
	div.format-options:hover {
		cursor: pointer;
		border: 3px solid var(--kbd-border-color);
		padding: 3px;
		transform: translate(-3px, -6px);
	}
	div.format-options .format-option {
		display: none;
	}
	div.format-options:hover .format-option {
		display: inline-block;
	}
	.format-option:not(.selected) {
		margin-top: 3px;
	}
	div.format-options .format-option.selected {
		order: -1;
		display: inline-block;
	}
	.format-option:hover {
		background-color: var(--kbd-border-color);
	}
	span.config-value {
		font-weight: normal;
		color: var(--pluto-output-color);
		display: none;
		position: absolute;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		transform: translate(0px, calc(-100% - 10px));
		padding: 5px;
	}
	.label {
		user-select: none;
	}
	.label:hover span.config-value {
		display: inline-block;
		min-width: 150px;
	}
	.clipboard-span.matching-config .label {
		color: var(--cm-macro-color);
		font-weight: bold;
	}
	.clipboard-span.different-config .label {
		color: var(--cm-tag-color);
		font-weight: bold;
	}
</style>
`)

let original_height = plot_obj.layout.height
let original_width = plot_obj.layout.width
// For the height we have to also put a fixed value in case the plot is put on a non-fixed-size container (like the default wrapper)
// We define a variable to check whether we still have to remove the fixed height
let remove_container_size = firstRun
let container_height = original_height ?? PLOT.container_height ?? 400
CONTAINER.style.height = container_height + 'px'

// We create a Promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// We import interact for dragging/resizing
const { default: interact } = await import('https://esm.sh/interactjs@1.10.19')


function getImageOptions() {
  const o = plot_obj.config.toImageButtonOptions ?? {};
  return {
    format: o.format ?? "png",
    width: o.width ?? original_width,
    height: o.height ?? original_height,
    scale: o.scale ?? 1,
    filename: o.filename ?? "newplot",
  };
}

const CLIPBOARD_HEADER =
  CONTAINER.querySelector(".plutoplotly-clipboard-header") ??
  CONTAINER.insertAdjacentElement(
    "afterbegin",
    html`<div class="plutoplotly-clipboard-header hidden">
      <span class="clipboard-span format"
        ><span class="label">Format:</span
        ><span class="clipboard-value format"></span
      ></span>
      <span class="clipboard-span width"
        ><span class="label">Width:</span
        ><span class="clipboard-value width"></span>px</span
      >
      <span class="clipboard-span height"
        ><span class="label">Height:</span
        ><span class="clipboard-value height"></span>px</span
      >
      <span class="clipboard-span scale"
        ><span class="label">Scale:</span
        ><span class="clipboard-value scale"></span
      ></span>
      <button class="clipboard-span set">Set</button>
      <button class="clipboard-span unset">Unset</button>
      <span class="clipboard-span filename"
        ><span class="label">Filename:</span
        ><span class="clipboard-value filename"></span
      ></span>
    </div>`
  );

function checkConfigSync(container) {
  const valid_classes = [
    "missing-config",
    "matching-config",
    "different-config",
  ];
  function setClass(cl) {
    for (const name of valid_classes) {
      container.classList.toggle(name, name == cl);
    }
  }
  // We use the custom getters we'll set up in the container
  const { ui_value, config_value, config_span, key } = container;
  if (config_value === undefined) {
    setClass("missing-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> is not present in the config.`;
  } else if (ui_value == config_value) {
    setClass("matching-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has the same value in the config and in the header.`;
  } else {
    setClass("different-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has a different value (<em>${config_value}</em>) in the config.`;
  }
  // Add info about setting and unsetting
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click on the label <em><b>once</b></em> to set the current UI value in the config.`
  );
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click <em><b>twice</b></em> to remove this key from the config.`
  );
}

const valid_formats = ["png", "svg", "webp", "jpeg", "full-json"];
function initializeUIValueSpan(span, key, value) {
  const container = span.closest(".clipboard-span");
  span.contentEditable = key === "format" ? "false" : "true";
  let parse = (x) => x;
  let update = (x) => (span.textContent = x);
  if (key === "width" || key === "height") {
    parse = (x) => Math.round(parseFloat(x));
  } else if (key === "scale") {
    parse = parseFloat;
  } else if (key === "format") {
    // We remove contentEditable
    span.contentEditable = "false";
    // Here we first add the subspans for each option
    const opts_div = span.appendChild(html`<div class="format-options"></div>`);
    for (const fmt of valid_formats) {
      const opt = opts_div.appendChild(
        html`<span class="format-option ${fmt}">${fmt}</span>`
      );
      opt.onclick = (e) => {
        span.value = opt.textContent;
      };
    }
    parse = (x) => {
      return valid_formats.includes(x) ? x : localValue;
    };
    update = (x) => {
      for (const opt of opts_div.children) {
        opt.classList.toggle("selected", opt.textContent === x);
      }
    };
  } else {
    // We only have filename here
  }
  let localValue;
  Object.defineProperty(span, "value", {
    get: () => {
      return localValue;
    },
    set: (val) => {
      if (val !== "") {
        localValue = parse(val);
      }
      update(localValue);
      checkConfigSync(container);
    },
  });
  // We also assign a listener so that the editable is blurred when enter is pressed
  span.onkeydown = (e) => {
    if (e.keyCode === 13) {
      e.preventDefault();
      span.blur();
    }
  };
  span.value = value;
}

function initializeConfigValueSpan(span, key) {
  // Here we mostly want to define the setter and getter
  const container = span.closest(".clipboard-span");
  Object.defineProperty(span, "value", {
    get: () => {
      return plot_obj.config.toImageButtonOptions[key];
    },
    set: (val) => {
      // if undefined is passed, we remove the entry from the options
      if (val === undefined) {
        delete plot_obj.config.toImageButtonOptions[key];
      } else {
        plot_obj.config.toImageButtonOptions[key] = val;
      }
      checkConfigSync(container);
    },
  });
}

const config_spans = {};
for (const [key, value] of Object.entries(getImageOptions())) {
  const container = CLIPBOARD_HEADER.querySelector(`.clipboard-span.${key}`);
  const label = container.querySelector(".label");
  // We give the label a function that on single click will set the current value and with double click will unset it
  label.onclick = DualClick(
    () => {
      container.config_value = container.ui_value;
    },
    (e) => {
      console.log("e", e);
      e.preventDefault();
      container.config_value = undefined;
    }
  );
  const ui_value_span = container.querySelector(".clipboard-value");
  const config_value_span =
    container.querySelector(".config-value") ??
    label.insertAdjacentElement(
      "afterbegin",
      html`<span class="config-value"></span>`
    );
  // Assing the two spans as properties of the containing span
  container.ui_span = ui_value_span;
  container.config_span = config_value_span;
  container.key = key;
  config_spans[key] = container;
  if (firstRun) {
    plot_obj.config.toImageButtonOptions =
      plot_obj.config.toImageButtonOptions ?? {};
    // We do the initialization of the value span
    initializeUIValueSpan(ui_value_span, key, value);
    // Then we initialize the config value
    initializeConfigValueSpan(config_value_span, key);
    // We put some convenience getters/setters
    // ui_value forward
    Object.defineProperty(container, "ui_value", {
      get: () => ui_value_span.value,
      set: (val) => {
        ui_value_span.value = val;
      },
    });
    // config_value forward
    Object.defineProperty(container, "config_value", {
      get: () => config_value_span.value,
      set: (val) => {
        config_value_span.value = val;
      },
    });
  }
}

// These objects will contain the default value

// This code updates the image options in the PLOT config with the provided ones
function setImageOptions(o) {
  for (const [key, container] of Object.entries(config_spans)) {
    container.config_value = o[key];
  }
}
function unsetImageOptions() {
  setImageOptions({});
}

const set_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.set");
const unset_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.unset");
if (firstRun) {
  set_button.onclick = (e) => {
    for (const container of Object.values(config_spans)) {
      container.config_value = container.ui_value;
    }
  };
  unset_button.onclick = unsetImageOptions;
}

// We add a function to check if the clipboard is popped out
CONTAINER.isPoppedOut = () => {
  return CONTAINER.classList.contains("popped-out");
};

CLIPBOARD_HEADER.onmousedown = function (event) {
  if (event.target.matches("span.clipboard-value")) {
    console.log("We don't move!");
    return;
  }
  const start = {
    left: parseFloat(CONTAINER.style.left),
    top: parseFloat(CONTAINER.style.top),
    X: event.pageX,
    Y: event.pageY,
  };
  function moveAt(event, start) {
    const top = event.pageY - start.Y + start.top + "px";
    const left = event.pageX - start.X + start.left + "px";
    CLIPBOARD_HEADER.style.left = left;
    CONTAINER.style.left = left;
    CONTAINER.style.top = top;
  }

  // move our absolutely positioned ball under the pointer
  moveAt(event, start);
  function onMouseMove(event) {
    moveAt(event, start);
  }

  // We use this to remove the mousemove when clicking outside of the container
  const controller = new AbortController();

  // move the container on mousemove
  document.addEventListener("mousemove", onMouseMove, {
    signal: controller.signal,
  });
  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        cleanUp();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );

  function cleanUp() {
    console.log("cleaning up the plot move listener");
    controller.abort();
    CLIPBOARD_HEADER.onmouseup = null;
  }

  // (3) drop the ball, remove unneeded handlers
  CLIPBOARD_HEADER.onmouseup = cleanUp;
};

function sendToClipboard(blob) {
  if (!navigator.clipboard) {
    alert(
      "The Clipboard API does not seem to be available, make sure the Pluto notebook is being used from either localhost or an https source."
    );
  }
  navigator.clipboard
    .write([
      new ClipboardItem({
        // The key is determined dynamically based on the blob's type.
        [blob.type]: blob,
      }),
    ])
    .then(
      function () {
        console.log("Async: Copying to clipboard was successful!");
      },
      function (err) {
        console.error("Async: Could not copy text: ", err);
      }
    );
}

function copyImageToClipboard() {
  // We extract the image options from the provided parameters (if they exist)
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key. We also ignore format because the clipboard only supports png.
    if (val === undefined || key === "format") {
      continue;
    }
    config[key] = val;
  }
  Plotly.toImage(PLOT, config).then(function (dataUrl) {
    fetch(dataUrl)
      .then((res) => res.blob())
      .then((blob) => {
        const paste_receiver = document.querySelector('paste-receiver.plutoplotly')
        if (paste_receiver) {
          paste_receiver.attachImage(dataUrl, CONTAINER)
        }
        sendToClipboard(blob)
      });
  });
}

function saveImageToFile() {
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key.
    if (val === undefined) {
      continue;
    }
    config[key] = val;
  }
  Plotly.downloadImage(PLOT, config);
}

let container_rect = { width: 0, height: 0, top: 0, left: 0 };
function unpop_container(cl) {
  CONTAINER.classList.toggle("popped-out", false);
  CONTAINER.classList.toggle(cl, false);
  // We fix the height back to the value it had before popout, also setting the flag to signal that upon first resize we remove the fixed inline-style
  CONTAINER.style.height = container_rect.height + "px";
  remove_container_size = true;
  // We set the other fixed inline-styles to null
  CONTAINER.style.width = "";
  CONTAINER.style.top = "";
  CONTAINER.style.left = "";
  // We also remove the CLIPBOARD_HEADER
  CLIPBOARD_HEADER.style.width = "";
  CLIPBOARD_HEADER.style.left = "";
  // Finally we remove the hidden class to the header
  CLIPBOARD_HEADER.classList.toggle("hidden", true);
  return;
}
function popout_container(opts) {
  const cl = opts?.cl;
  const target_container_size = opts?.target_container_size ?? {};
  const target_plot_size = opts?.target_plot_size ?? {};
  if (CONTAINER.isPoppedOut()) {
    return unpop_container(cl);
  }
  CONTAINER.classList.toggle(cl, cl === undefined ? false : true);
  // We extract the current size of the container, save them and fix them
  const { width, height, top, left } = CONTAINER.getBoundingClientRect();
  container_rect = { width, height, top, left };
  // We save the current plot size before we pop as it will fill the screen
  const current_plot_size = {
    width: PLOT._fullLayout.width,
    height: PLOT._fullLayout.height,
  };
  // We have to save the pad data before popping so we can resize precisely
  const pad = {};
  pad.unpopped = getSizeData().container_pad;
  CONTAINER.classList.toggle("popped-out", true);
  pad.popped = getSizeData().container_pad;
  // We do top and left based on the current rect
  for (const key of ["top", "left"]) {
    const start_val = target_container_size[key] ?? container_rect[key];
    let offset = 0;
    for (const kind of ["padding", "border"]) {
      offset += pad.popped[kind][key] - pad.unpopped[kind][key];
    }
    CONTAINER.style[key] = start_val - offset + "px";
    if (key === "left") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  // We compute the width and height depending on eventual config data
  const csz = computeContainerSize({
    width:
      target_plot_size.width ??
      config_spans.width.config_value ??
      current_plot_size.width,
    height:
      target_plot_size.height ??
      config_spans.height.config_value ??
      current_plot_size.height,
  });
  for (const key of ["width", "height"]) {
    const val = target_container_size[key] ?? csz[key];
    CONTAINER.style[key] = val + "px";
    if (key === "width") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  CLIPBOARD_HEADER.classList.toggle("hidden", false);
  const controller = new AbortController();

  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        unpop_container();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );
}

CONTAINER.popOut = popout_container;

function DualClick(single_func, dbl_func) {
  let nclicks = 0;
  return function (...args) {
    nclicks += 1;
    if (nclicks > 1) {
      dbl_func(...args);
      nclicks = 0;
    } else {
      delay(300).then(() => {
        if (nclicks == 1) {
          single_func(...args);
        }
        nclicks = 0;
      });
    }
  };
}

// We remove the default download image button
plot_obj.config.modeBarButtonsToRemove = _.union(
  plot_obj.config.modeBarButtonsToRemove,
  ["toImage"]
);
// We add the custom button to the modebar
plot_obj.config.modeBarButtonsToAdd = _.union(
  plot_obj.config.modeBarButtonsToAdd,
  [
    {
      name: "Copy PNG to Clipboard",
      icon: {
        height: 520,
        width: 520,
        path: "M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z",
      },
      direction: "up",
      click: DualClick(copyImageToClipboard, () => {
        popout_container();
      }),
    },
    {
      name: "Download Image",
      icon: Plotly.Icons.camera,
      direction: "up",
      click: DualClick(saveImageToFile, () => {
        popout_container({ cl: "filesave" });
      }),
    },
  ]
);

function getOffsetData(el) {
  let cs = window.getComputedStyle(el, null);
  const odata = {
    padding: {
      left: parseFloat(cs.paddingLeft),
      right: parseFloat(cs.paddingRight),
      top: parseFloat(cs.paddingTop),
      bottom: parseFloat(cs.paddingBottom),
      width: parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight),
      height: parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom),
    },
    border: {
      left: parseFloat(cs.borderLeftWidth),
      right: parseFloat(cs.borderRightWidth),
      top: parseFloat(cs.borderTopWidth),
      bottom: parseFloat(cs.borderBottomWidth),
      width: parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth),
      height: parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth),
    }
  };
  if (el === PLOT) {
    // For the PLOT we also want to take into account the offset
    odata.offset = {
      top: PLOT.offsetParent == CONTAINER ? PLOT.offsetTop : 0,
      left: PLOT.offsetParent == CONTAINER ? PLOT.offsetLeft : 0,
    }
  }
  return odata;
}
function getSizeData() {
  const data = {
    plot_pad: getOffsetData(PLOT),
    plot_rect: PLOT.getBoundingClientRect(),
    container_pad: getOffsetData(CONTAINER),
    container_rect: CONTAINER.getBoundingClientRect(),
  };
  return data;
}
function computeContainerSize({ width, height }, sizeData = getSizeData()) {
  const computed_size = computePlotSize(sizeData);
  const offsets = computed_size.offsets;

  const plot_data = {
    width: width ?? computed_size.width,
    height: height ?? computed_size.height,
  };

  return {
    width: (width ?? computed_size.width) + offsets.width,
    height: (height ?? computed_size.height) + offsets.height,
    noChange: width == computed_size.width && height == computed_size.height,
  }
}

// This function will change the container size so that the resulting plot will be matching the provided specs
function changeContainerSize({ width, height }, sizeData = getSizeData()) {
  if (!CONTAINER.isPoppedOut()) {
    console.log("Tried to change container size when not popped, ignoring");
    return;
  }

  const csz = computeContainerSize({ width, height }, sizeData);

  if (csz.noChange) {
    console.log("Size is the same as current, ignoring");
    return
  }
  // We are now going to set he width and height of the container
  for (const key of ["width", "height"]) {
    CONTAINER.style[key] = csz[key] + "px";
  }
}
// We now create the function that will update the plot based on the values specified
function updateFromHeader() {
  const header_data = {
    height: config_spans.height.ui_value,
    width: config_spans.width.ui_value,
  };
  changeContainerSize(header_data);
}
// We assign this function to the onblur event of width and height
if (firstRun) {
  for (const container of Object.values(config_spans)) {
    container.ui_span.onblur = (e) => {
      container.ui_value = container.ui_span.textContent;
      updateFromHeader();
    };
  }
}
// This function computes the plot size to use for relayout as a function of the container size
function computePlotSize(data = getSizeData()) {
  // Remove Padding
  const { container_pad, plot_pad, container_rect } = data;
  const offsets = {
    width:
      plot_pad.padding.width +
      plot_pad.border.width +
      plot_pad.offset.left +
      container_pad.padding.width +
      container_pad.border.width,
    height:
      plot_pad.padding.height +
      plot_pad.border.height +
      plot_pad.offset.top +
      container_pad.padding.height +
      container_pad.border.height,
  };
  const sz = {
    width: Math.round(container_rect.width - offsets.width),
    height: Math.round(container_rect.height - offsets.height),
    offsets,
  };
  return sz;
}

// Create the resizeObserver to make the plot even more responsive! :magic:
const resizeObserver = new ResizeObserver((entries) => {
  const sizeData = getSizeData();
  const {container_rect, container_pad} = sizeData;
  let plot_size = computePlotSize(sizeData);
  // We save the height in the PLOT object
  PLOT.container_height = container_rect.height;
  // We deal with some stuff if the container is poppped
  CLIPBOARD_HEADER.style.width = container_rect.width + "px";
  CLIPBOARD_HEADER.style.left = container_rect.left + "px";
  config_spans.height.ui_value = plot_size.height;
  config_spans.width.ui_value = plot_size.width;
  /* 
		The addition of the invalid argument `plutoresize` seems to fix the problem with calling `relayout` simply with `{autosize: true}` as update breaking mouse relayout events tracking. 
		See https://github.com/plotly/plotly.js/issues/6156 for details
		*/
  let config = {
    // If this is popped out, we ignore the original width/height
    width: (CONTAINER.isPoppedOut() ? undefined : original_width) ?? plot_size.width,
    height: (CONTAINER.isPoppedOut() ? undefined : original_height) ?? plot_size.height,
    plutoresize: true,
  };
  Plotly.relayout(PLOT, config).then(() => {
    if (remove_container_size && !CONTAINER.isPoppedOut()) {
      // This is needed to avoid the first resize upon plot creation to already be without a fixed height
      CONTAINER.style.height = "";
      CONTAINER.style.width = "";
      remove_container_size = false;
    }
  });
});

resizeObserver.observe(CONTAINER);


Plotly.react(PLOT, plot_obj).then(() => {
	// Assign the Plotly event listeners
	for (const [key, listener_vec] of Object.entries(plotly_listeners)) {
		for (const listener of listener_vec) {
			PLOT.on(key, listener)
		}
	}
	// Assign the JS event listeners
	for (const [key, listener_vec] of Object.entries(js_listeners)) {
		for (const listener of listener_vec) {
			PLOT.addEventListener(key, listener, {
				signal: controller.signal
			})
		}
	}
}
)


invalidation.then(() => {
	// Remove all plotly listeners
	PLOT.removeAllListeners()
	// Remove all JS listeners
	controller.abort()
	// Remove the resizeObserver
	resizeObserver.disconnect()
})



		return CONTAINER
	</script>
</div> 
	<div>	<script id='plot_4'>
		// We start by putting all the variable interpolation here at the beginning
		// We have to convert all typedarrays in the layout to normal arrays. See Issue #25
		// We use lodash for this for compactness
		function removeTypedArray(o) {
			return _.isTypedArray(o) ? Array.from(o) :
			_.isPlainObject(o) ? _.mapValues(o, removeTypedArray) : 
			o
		}

		// Publish the plot object to JS
		let plot_obj = _.update(/* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("c6e0de0c-3901-11f0-234e-bd09c571f662/d508a1aa913b68d"), "layout", removeTypedArray)
		// Get the plotly listeners
		const plotly_listeners = {}
		// Get the JS listeners
		const js_listeners = {}
		// Deal with eventual custom classes
		let custom_classlist = []


		// Load the plotly library
		let Plotly = undefined
		try {
			let _mod = await import("./plotlyjs/plotlyjs-2.26.2.min.js")
			Plotly = _mod.default
		} catch (e) {
			console.log("Local load failed, trying with the web esm.sh version")
			let _mod = await import("https://esm.sh/plotly.js-dist-min@2.26.2/es2022/plotly.js-dist-min.mjs")
			Plotly = _mod.default
		}

		// Check if we have to force local mathjax font cache
		if (false && window?.MathJax?.config?.svg?.fontCache === 'global') {
			window.MathJax.config.svg.fontCache = 'local'
		}

		// Flag to check if this cell was  manually ran or reactively ran
const firstRun = this ? false : true
const CONTAINER = this ?? html`<div class='plutoplotly-container'>`
const PLOT = CONTAINER.querySelector('.js-plotly-plot') ?? CONTAINER.appendChild(html`<div>`)
const parent = CONTAINER.parentElement
// We use a controller to remove event listeners upon invalidation
const controller = new AbortController()
// We have to add this to keep supporting @bind with the old API using PLOT
PLOT.addEventListener('input', (e) => {
	CONTAINER.value = PLOT.value
	if (e.bubbles) {
		return
	}
	CONTAINER.dispatchEvent(new CustomEvent('input'))
}, { signal: controller.signal })

	// This create the style subdiv on first run
	firstRun && CONTAINER.appendChild(html`
	<style>
	.plutoplotly-container {
		width: 100%;
		height: 100%;
		min-height: 0;
		min-width: 0;
	}
	.plutoplotly-container .js-plotly-plot .plotly div {
		margin: 0 auto; // This centers the plot
	}
	.plutoplotly-container.popped-out {
		overflow: auto;
		z-index: 1000;
		position: fixed;
		resize: both;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		border-top-left-radius: 0px;
		border-top-right-radius: 0px;
	}
	.plutoplotly-clipboard-header {
		display: flex;
		flex-flow: row wrap;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-top-left-radius: 12px;
		border-top-right-radius: 12px;
		position: fixed;
		z-index: 1001;
		cursor: move;
		transform: translate(0px, -100%);
		padding: 5px;
	}
	.plutoplotly-clipboard-header span {
		display: inline-block;
		flex: 1
	}
	.plutoplotly-clipboard-header.hidden {
		display: none;
	}
	.clipboard-span {
		position: relative;
	}
	.clipboard-value {
		padding-right: 5px;
		padding-left: 2px;
		cursor: text;
	}
	.clipboard-span.format {
		display: none;
	}
	.clipboard-span.filename {
		flex: 0 0 100%;
		text-align: center;
		border-top: 3px solid var(--kbd-border-color);
		margin-top: 5px;
		display: none;
	}
	.plutoplotly-container.filesave .clipboard-span.filename {
		display: inline-block;
	}
	.clipboard-value.filename {
		margin-left: 3px;
		text-align: left;
		min-width: min(60%, min-content);
	}
	.plutoplotly-container.filesave .clipboard-span.format {
		display: inline-flex;
	}
	.clipboard-span.format .label {
		flex: 0 0 0;
	}
	.clipboard-value.format {
		position: relative;
		flex: 1 0 auto;
		min-width: 30px;
		margin-right: 10px;
	}
	div.format-options {
		display: inline-flex;
		flex-flow: column;
		position: absolute;
		background: var(--main-bg-color);
		border-radius: 12px;
		padding-left: 3px;
		z-index: 2000;
	}
	div.format-options:hover {
		cursor: pointer;
		border: 3px solid var(--kbd-border-color);
		padding: 3px;
		transform: translate(-3px, -6px);
	}
	div.format-options .format-option {
		display: none;
	}
	div.format-options:hover .format-option {
		display: inline-block;
	}
	.format-option:not(.selected) {
		margin-top: 3px;
	}
	div.format-options .format-option.selected {
		order: -1;
		display: inline-block;
	}
	.format-option:hover {
		background-color: var(--kbd-border-color);
	}
	span.config-value {
		font-weight: normal;
		color: var(--pluto-output-color);
		display: none;
		position: absolute;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		transform: translate(0px, calc(-100% - 10px));
		padding: 5px;
	}
	.label {
		user-select: none;
	}
	.label:hover span.config-value {
		display: inline-block;
		min-width: 150px;
	}
	.clipboard-span.matching-config .label {
		color: var(--cm-macro-color);
		font-weight: bold;
	}
	.clipboard-span.different-config .label {
		color: var(--cm-tag-color);
		font-weight: bold;
	}
</style>
`)

let original_height = plot_obj.layout.height
let original_width = plot_obj.layout.width
// For the height we have to also put a fixed value in case the plot is put on a non-fixed-size container (like the default wrapper)
// We define a variable to check whether we still have to remove the fixed height
let remove_container_size = firstRun
let container_height = original_height ?? PLOT.container_height ?? 400
CONTAINER.style.height = container_height + 'px'

// We create a Promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// We import interact for dragging/resizing
const { default: interact } = await import('https://esm.sh/interactjs@1.10.19')


function getImageOptions() {
  const o = plot_obj.config.toImageButtonOptions ?? {};
  return {
    format: o.format ?? "png",
    width: o.width ?? original_width,
    height: o.height ?? original_height,
    scale: o.scale ?? 1,
    filename: o.filename ?? "newplot",
  };
}

const CLIPBOARD_HEADER =
  CONTAINER.querySelector(".plutoplotly-clipboard-header") ??
  CONTAINER.insertAdjacentElement(
    "afterbegin",
    html`<div class="plutoplotly-clipboard-header hidden">
      <span class="clipboard-span format"
        ><span class="label">Format:</span
        ><span class="clipboard-value format"></span
      ></span>
      <span class="clipboard-span width"
        ><span class="label">Width:</span
        ><span class="clipboard-value width"></span>px</span
      >
      <span class="clipboard-span height"
        ><span class="label">Height:</span
        ><span class="clipboard-value height"></span>px</span
      >
      <span class="clipboard-span scale"
        ><span class="label">Scale:</span
        ><span class="clipboard-value scale"></span
      ></span>
      <button class="clipboard-span set">Set</button>
      <button class="clipboard-span unset">Unset</button>
      <span class="clipboard-span filename"
        ><span class="label">Filename:</span
        ><span class="clipboard-value filename"></span
      ></span>
    </div>`
  );

function checkConfigSync(container) {
  const valid_classes = [
    "missing-config",
    "matching-config",
    "different-config",
  ];
  function setClass(cl) {
    for (const name of valid_classes) {
      container.classList.toggle(name, name == cl);
    }
  }
  // We use the custom getters we'll set up in the container
  const { ui_value, config_value, config_span, key } = container;
  if (config_value === undefined) {
    setClass("missing-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> is not present in the config.`;
  } else if (ui_value == config_value) {
    setClass("matching-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has the same value in the config and in the header.`;
  } else {
    setClass("different-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has a different value (<em>${config_value}</em>) in the config.`;
  }
  // Add info about setting and unsetting
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click on the label <em><b>once</b></em> to set the current UI value in the config.`
  );
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click <em><b>twice</b></em> to remove this key from the config.`
  );
}

const valid_formats = ["png", "svg", "webp", "jpeg", "full-json"];
function initializeUIValueSpan(span, key, value) {
  const container = span.closest(".clipboard-span");
  span.contentEditable = key === "format" ? "false" : "true";
  let parse = (x) => x;
  let update = (x) => (span.textContent = x);
  if (key === "width" || key === "height") {
    parse = (x) => Math.round(parseFloat(x));
  } else if (key === "scale") {
    parse = parseFloat;
  } else if (key === "format") {
    // We remove contentEditable
    span.contentEditable = "false";
    // Here we first add the subspans for each option
    const opts_div = span.appendChild(html`<div class="format-options"></div>`);
    for (const fmt of valid_formats) {
      const opt = opts_div.appendChild(
        html`<span class="format-option ${fmt}">${fmt}</span>`
      );
      opt.onclick = (e) => {
        span.value = opt.textContent;
      };
    }
    parse = (x) => {
      return valid_formats.includes(x) ? x : localValue;
    };
    update = (x) => {
      for (const opt of opts_div.children) {
        opt.classList.toggle("selected", opt.textContent === x);
      }
    };
  } else {
    // We only have filename here
  }
  let localValue;
  Object.defineProperty(span, "value", {
    get: () => {
      return localValue;
    },
    set: (val) => {
      if (val !== "") {
        localValue = parse(val);
      }
      update(localValue);
      checkConfigSync(container);
    },
  });
  // We also assign a listener so that the editable is blurred when enter is pressed
  span.onkeydown = (e) => {
    if (e.keyCode === 13) {
      e.preventDefault();
      span.blur();
    }
  };
  span.value = value;
}

function initializeConfigValueSpan(span, key) {
  // Here we mostly want to define the setter and getter
  const container = span.closest(".clipboard-span");
  Object.defineProperty(span, "value", {
    get: () => {
      return plot_obj.config.toImageButtonOptions[key];
    },
    set: (val) => {
      // if undefined is passed, we remove the entry from the options
      if (val === undefined) {
        delete plot_obj.config.toImageButtonOptions[key];
      } else {
        plot_obj.config.toImageButtonOptions[key] = val;
      }
      checkConfigSync(container);
    },
  });
}

const config_spans = {};
for (const [key, value] of Object.entries(getImageOptions())) {
  const container = CLIPBOARD_HEADER.querySelector(`.clipboard-span.${key}`);
  const label = container.querySelector(".label");
  // We give the label a function that on single click will set the current value and with double click will unset it
  label.onclick = DualClick(
    () => {
      container.config_value = container.ui_value;
    },
    (e) => {
      console.log("e", e);
      e.preventDefault();
      container.config_value = undefined;
    }
  );
  const ui_value_span = container.querySelector(".clipboard-value");
  const config_value_span =
    container.querySelector(".config-value") ??
    label.insertAdjacentElement(
      "afterbegin",
      html`<span class="config-value"></span>`
    );
  // Assing the two spans as properties of the containing span
  container.ui_span = ui_value_span;
  container.config_span = config_value_span;
  container.key = key;
  config_spans[key] = container;
  if (firstRun) {
    plot_obj.config.toImageButtonOptions =
      plot_obj.config.toImageButtonOptions ?? {};
    // We do the initialization of the value span
    initializeUIValueSpan(ui_value_span, key, value);
    // Then we initialize the config value
    initializeConfigValueSpan(config_value_span, key);
    // We put some convenience getters/setters
    // ui_value forward
    Object.defineProperty(container, "ui_value", {
      get: () => ui_value_span.value,
      set: (val) => {
        ui_value_span.value = val;
      },
    });
    // config_value forward
    Object.defineProperty(container, "config_value", {
      get: () => config_value_span.value,
      set: (val) => {
        config_value_span.value = val;
      },
    });
  }
}

// These objects will contain the default value

// This code updates the image options in the PLOT config with the provided ones
function setImageOptions(o) {
  for (const [key, container] of Object.entries(config_spans)) {
    container.config_value = o[key];
  }
}
function unsetImageOptions() {
  setImageOptions({});
}

const set_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.set");
const unset_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.unset");
if (firstRun) {
  set_button.onclick = (e) => {
    for (const container of Object.values(config_spans)) {
      container.config_value = container.ui_value;
    }
  };
  unset_button.onclick = unsetImageOptions;
}

// We add a function to check if the clipboard is popped out
CONTAINER.isPoppedOut = () => {
  return CONTAINER.classList.contains("popped-out");
};

CLIPBOARD_HEADER.onmousedown = function (event) {
  if (event.target.matches("span.clipboard-value")) {
    console.log("We don't move!");
    return;
  }
  const start = {
    left: parseFloat(CONTAINER.style.left),
    top: parseFloat(CONTAINER.style.top),
    X: event.pageX,
    Y: event.pageY,
  };
  function moveAt(event, start) {
    const top = event.pageY - start.Y + start.top + "px";
    const left = event.pageX - start.X + start.left + "px";
    CLIPBOARD_HEADER.style.left = left;
    CONTAINER.style.left = left;
    CONTAINER.style.top = top;
  }

  // move our absolutely positioned ball under the pointer
  moveAt(event, start);
  function onMouseMove(event) {
    moveAt(event, start);
  }

  // We use this to remove the mousemove when clicking outside of the container
  const controller = new AbortController();

  // move the container on mousemove
  document.addEventListener("mousemove", onMouseMove, {
    signal: controller.signal,
  });
  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        cleanUp();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );

  function cleanUp() {
    console.log("cleaning up the plot move listener");
    controller.abort();
    CLIPBOARD_HEADER.onmouseup = null;
  }

  // (3) drop the ball, remove unneeded handlers
  CLIPBOARD_HEADER.onmouseup = cleanUp;
};

function sendToClipboard(blob) {
  if (!navigator.clipboard) {
    alert(
      "The Clipboard API does not seem to be available, make sure the Pluto notebook is being used from either localhost or an https source."
    );
  }
  navigator.clipboard
    .write([
      new ClipboardItem({
        // The key is determined dynamically based on the blob's type.
        [blob.type]: blob,
      }),
    ])
    .then(
      function () {
        console.log("Async: Copying to clipboard was successful!");
      },
      function (err) {
        console.error("Async: Could not copy text: ", err);
      }
    );
}

function copyImageToClipboard() {
  // We extract the image options from the provided parameters (if they exist)
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key. We also ignore format because the clipboard only supports png.
    if (val === undefined || key === "format") {
      continue;
    }
    config[key] = val;
  }
  Plotly.toImage(PLOT, config).then(function (dataUrl) {
    fetch(dataUrl)
      .then((res) => res.blob())
      .then((blob) => {
        const paste_receiver = document.querySelector('paste-receiver.plutoplotly')
        if (paste_receiver) {
          paste_receiver.attachImage(dataUrl, CONTAINER)
        }
        sendToClipboard(blob)
      });
  });
}

function saveImageToFile() {
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key.
    if (val === undefined) {
      continue;
    }
    config[key] = val;
  }
  Plotly.downloadImage(PLOT, config);
}

let container_rect = { width: 0, height: 0, top: 0, left: 0 };
function unpop_container(cl) {
  CONTAINER.classList.toggle("popped-out", false);
  CONTAINER.classList.toggle(cl, false);
  // We fix the height back to the value it had before popout, also setting the flag to signal that upon first resize we remove the fixed inline-style
  CONTAINER.style.height = container_rect.height + "px";
  remove_container_size = true;
  // We set the other fixed inline-styles to null
  CONTAINER.style.width = "";
  CONTAINER.style.top = "";
  CONTAINER.style.left = "";
  // We also remove the CLIPBOARD_HEADER
  CLIPBOARD_HEADER.style.width = "";
  CLIPBOARD_HEADER.style.left = "";
  // Finally we remove the hidden class to the header
  CLIPBOARD_HEADER.classList.toggle("hidden", true);
  return;
}
function popout_container(opts) {
  const cl = opts?.cl;
  const target_container_size = opts?.target_container_size ?? {};
  const target_plot_size = opts?.target_plot_size ?? {};
  if (CONTAINER.isPoppedOut()) {
    return unpop_container(cl);
  }
  CONTAINER.classList.toggle(cl, cl === undefined ? false : true);
  // We extract the current size of the container, save them and fix them
  const { width, height, top, left } = CONTAINER.getBoundingClientRect();
  container_rect = { width, height, top, left };
  // We save the current plot size before we pop as it will fill the screen
  const current_plot_size = {
    width: PLOT._fullLayout.width,
    height: PLOT._fullLayout.height,
  };
  // We have to save the pad data before popping so we can resize precisely
  const pad = {};
  pad.unpopped = getSizeData().container_pad;
  CONTAINER.classList.toggle("popped-out", true);
  pad.popped = getSizeData().container_pad;
  // We do top and left based on the current rect
  for (const key of ["top", "left"]) {
    const start_val = target_container_size[key] ?? container_rect[key];
    let offset = 0;
    for (const kind of ["padding", "border"]) {
      offset += pad.popped[kind][key] - pad.unpopped[kind][key];
    }
    CONTAINER.style[key] = start_val - offset + "px";
    if (key === "left") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  // We compute the width and height depending on eventual config data
  const csz = computeContainerSize({
    width:
      target_plot_size.width ??
      config_spans.width.config_value ??
      current_plot_size.width,
    height:
      target_plot_size.height ??
      config_spans.height.config_value ??
      current_plot_size.height,
  });
  for (const key of ["width", "height"]) {
    const val = target_container_size[key] ?? csz[key];
    CONTAINER.style[key] = val + "px";
    if (key === "width") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  CLIPBOARD_HEADER.classList.toggle("hidden", false);
  const controller = new AbortController();

  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        unpop_container();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );
}

CONTAINER.popOut = popout_container;

function DualClick(single_func, dbl_func) {
  let nclicks = 0;
  return function (...args) {
    nclicks += 1;
    if (nclicks > 1) {
      dbl_func(...args);
      nclicks = 0;
    } else {
      delay(300).then(() => {
        if (nclicks == 1) {
          single_func(...args);
        }
        nclicks = 0;
      });
    }
  };
}

// We remove the default download image button
plot_obj.config.modeBarButtonsToRemove = _.union(
  plot_obj.config.modeBarButtonsToRemove,
  ["toImage"]
);
// We add the custom button to the modebar
plot_obj.config.modeBarButtonsToAdd = _.union(
  plot_obj.config.modeBarButtonsToAdd,
  [
    {
      name: "Copy PNG to Clipboard",
      icon: {
        height: 520,
        width: 520,
        path: "M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z",
      },
      direction: "up",
      click: DualClick(copyImageToClipboard, () => {
        popout_container();
      }),
    },
    {
      name: "Download Image",
      icon: Plotly.Icons.camera,
      direction: "up",
      click: DualClick(saveImageToFile, () => {
        popout_container({ cl: "filesave" });
      }),
    },
  ]
);

function getOffsetData(el) {
  let cs = window.getComputedStyle(el, null);
  const odata = {
    padding: {
      left: parseFloat(cs.paddingLeft),
      right: parseFloat(cs.paddingRight),
      top: parseFloat(cs.paddingTop),
      bottom: parseFloat(cs.paddingBottom),
      width: parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight),
      height: parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom),
    },
    border: {
      left: parseFloat(cs.borderLeftWidth),
      right: parseFloat(cs.borderRightWidth),
      top: parseFloat(cs.borderTopWidth),
      bottom: parseFloat(cs.borderBottomWidth),
      width: parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth),
      height: parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth),
    }
  };
  if (el === PLOT) {
    // For the PLOT we also want to take into account the offset
    odata.offset = {
      top: PLOT.offsetParent == CONTAINER ? PLOT.offsetTop : 0,
      left: PLOT.offsetParent == CONTAINER ? PLOT.offsetLeft : 0,
    }
  }
  return odata;
}
function getSizeData() {
  const data = {
    plot_pad: getOffsetData(PLOT),
    plot_rect: PLOT.getBoundingClientRect(),
    container_pad: getOffsetData(CONTAINER),
    container_rect: CONTAINER.getBoundingClientRect(),
  };
  return data;
}
function computeContainerSize({ width, height }, sizeData = getSizeData()) {
  const computed_size = computePlotSize(sizeData);
  const offsets = computed_size.offsets;

  const plot_data = {
    width: width ?? computed_size.width,
    height: height ?? computed_size.height,
  };

  return {
    width: (width ?? computed_size.width) + offsets.width,
    height: (height ?? computed_size.height) + offsets.height,
    noChange: width == computed_size.width && height == computed_size.height,
  }
}

// This function will change the container size so that the resulting plot will be matching the provided specs
function changeContainerSize({ width, height }, sizeData = getSizeData()) {
  if (!CONTAINER.isPoppedOut()) {
    console.log("Tried to change container size when not popped, ignoring");
    return;
  }

  const csz = computeContainerSize({ width, height }, sizeData);

  if (csz.noChange) {
    console.log("Size is the same as current, ignoring");
    return
  }
  // We are now going to set he width and height of the container
  for (const key of ["width", "height"]) {
    CONTAINER.style[key] = csz[key] + "px";
  }
}
// We now create the function that will update the plot based on the values specified
function updateFromHeader() {
  const header_data = {
    height: config_spans.height.ui_value,
    width: config_spans.width.ui_value,
  };
  changeContainerSize(header_data);
}
// We assign this function to the onblur event of width and height
if (firstRun) {
  for (const container of Object.values(config_spans)) {
    container.ui_span.onblur = (e) => {
      container.ui_value = container.ui_span.textContent;
      updateFromHeader();
    };
  }
}
// This function computes the plot size to use for relayout as a function of the container size
function computePlotSize(data = getSizeData()) {
  // Remove Padding
  const { container_pad, plot_pad, container_rect } = data;
  const offsets = {
    width:
      plot_pad.padding.width +
      plot_pad.border.width +
      plot_pad.offset.left +
      container_pad.padding.width +
      container_pad.border.width,
    height:
      plot_pad.padding.height +
      plot_pad.border.height +
      plot_pad.offset.top +
      container_pad.padding.height +
      container_pad.border.height,
  };
  const sz = {
    width: Math.round(container_rect.width - offsets.width),
    height: Math.round(container_rect.height - offsets.height),
    offsets,
  };
  return sz;
}

// Create the resizeObserver to make the plot even more responsive! :magic:
const resizeObserver = new ResizeObserver((entries) => {
  const sizeData = getSizeData();
  const {container_rect, container_pad} = sizeData;
  let plot_size = computePlotSize(sizeData);
  // We save the height in the PLOT object
  PLOT.container_height = container_rect.height;
  // We deal with some stuff if the container is poppped
  CLIPBOARD_HEADER.style.width = container_rect.width + "px";
  CLIPBOARD_HEADER.style.left = container_rect.left + "px";
  config_spans.height.ui_value = plot_size.height;
  config_spans.width.ui_value = plot_size.width;
  /* 
		The addition of the invalid argument `plutoresize` seems to fix the problem with calling `relayout` simply with `{autosize: true}` as update breaking mouse relayout events tracking. 
		See https://github.com/plotly/plotly.js/issues/6156 for details
		*/
  let config = {
    // If this is popped out, we ignore the original width/height
    width: (CONTAINER.isPoppedOut() ? undefined : original_width) ?? plot_size.width,
    height: (CONTAINER.isPoppedOut() ? undefined : original_height) ?? plot_size.height,
    plutoresize: true,
  };
  Plotly.relayout(PLOT, config).then(() => {
    if (remove_container_size && !CONTAINER.isPoppedOut()) {
      // This is needed to avoid the first resize upon plot creation to already be without a fixed height
      CONTAINER.style.height = "";
      CONTAINER.style.width = "";
      remove_container_size = false;
    }
  });
});

resizeObserver.observe(CONTAINER);


Plotly.react(PLOT, plot_obj).then(() => {
	// Assign the Plotly event listeners
	for (const [key, listener_vec] of Object.entries(plotly_listeners)) {
		for (const listener of listener_vec) {
			PLOT.on(key, listener)
		}
	}
	// Assign the JS event listeners
	for (const [key, listener_vec] of Object.entries(js_listeners)) {
		for (const listener of listener_vec) {
			PLOT.addEventListener(key, listener, {
				signal: controller.signal
			})
		}
	}
}
)


invalidation.then(() => {
	// Remove all plotly listeners
	PLOT.removeAllListeners()
	// Remove all JS listeners
	controller.abort()
	// Remove the resizeObserver
	resizeObserver.disconnect()
})



		return CONTAINER
	</script>
</div>
</div>
¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš)¦NÂ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$82284c63-2306-4469-9b1a-a5ec87037e79¹depends_on_disabled_cellsÂ§runtimeÎ&iµpublished_object_keys”Ù5c6e0de0c-3901-11f0-234e-bd09c571f662/c2f9f46c95453d02Ù4c6e0de0c-3901-11f0-234e-bd09c571f662/d508a1aa913b68dÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/cc789608a7b2df16Ù5c6e0de0c-3901-11f0-234e-bd09c571f662/985b842d3ecfdc58¸depends_on_skipped_cellsÂ§erroredÂÙ$5b32bbc7-dc34-4fc3-bacc-92e55f26a98cŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyª7.860627f0¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš-‡JA°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$5b32bbc7-dc34-4fc3-bacc-92e55f26a98c¹depends_on_disabled_cellsÂ§runtimeÎ &2.µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$c8be6951-b6ec-4444-8c7f-ca5db6681571Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ0makegridsquare (generic function with 2 methods)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš/é ÿ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$c8be6951-b6ec-4444-8c7f-ca5db6681571¹depends_on_disabled_cellsÂ§runtimeÎ ‹gµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$887de995-04e8-4d84-88d7-ad096a5747dfŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙY<div class="markdown"><p>Example trajectories after training for 1000 episodes</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš1(„Z°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$887de995-04e8-4d84-88d7-ad096a5747df¹depends_on_disabled_cellsÂ§runtimeÎ d’µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$3ee31af5-b19c-49dc-8fbf-f07e93d1f0c5Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ¡<div class="markdown"><h3>Figure 5.2b:</h3>
<p>Recreation of Figure 5.2 using an Ïµ-soft MC control with <span class="tex">$\epsilon &#61; 0.1$</span></p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"'j°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$3ee31af5-b19c-49dc-8fbf-f07e93d1f0c5¹depends_on_disabled_cellsÂ§runtimeÎ äµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$ffd1e39d-e66b-40a3-8ad1-c9480d371fe8Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚ<div class="markdown"><h5>Results Summary</h5>
<p>Each environment has 7300 and 12875 states respectively, so Monte Carlo Exploring starts would need to sample at least this many episodes to have a non zero probability of coverage.  Surprisingly, even after just 1000 episodes of training the results are quite an improvement over the random policy with the mean finish time of about 30 steps for both.  Although at the high end, some episodes still take over 100 steps to complete &#40;still much better than the random policy&#41;.  If we allow training for 10-100 million episodes, which is necessary to get a reasonable sample size for each state, then the results are much improved with episode step lengths from 11 to 18 for track 1 and 9 to 16 for track2.</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"+=Õ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$ffd1e39d-e66b-40a3-8ad1-c9480d371fe8¹depends_on_disabled_cellsÂ§runtimeÎ Vµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$13cc524c-d983-44f4-8731-0595249fb888Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ/monte_carlo_ES (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš%ñ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$13cc524c-d983-44f4-8731-0595249fb888¹depends_on_disabled_cellsÂ§runtimeÎ D’~µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$8faca500-b80d-4b50-88b6-683d18a1286bŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyƒ¨elements’’’©-0.254243ªtext/plain’’§0.91244ªtext/plain¤type¥Tuple¨objectid°8788401422089bb3¤mimeÙ!application/vnd.pluto.tree+object¬rootassigneeÀ²last_run_timestampËAÚš*þÉ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$8faca500-b80d-4b50-88b6-683d18a1286b¹depends_on_disabled_cellsÂ§runtimeÎo¿¼Œµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$755be8f1-9d9e-4afd-8a70-07fab78e4333Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ-<div class="markdown"><h5>Track 2</h5>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"+Œ]°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$755be8f1-9d9e-4afd-8a70-07fab78e4333¹depends_on_disabled_cellsÂ§runtimeÎ ÔTµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$01683e11-a368-45bc-abbc-bbd5c94d7b22Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ+plot_value (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš%ÐÙÏ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$01683e11-a368-45bc-abbc-bbd5c94d7b22¹depends_on_disabled_cellsÂ§runtimeÎ /Èµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$5e2420fb-b2cc-49fc-91e3-3de80fba698bŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ(runrace (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš/Ó’ï°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$5e2420fb-b2cc-49fc-91e3-3de80fba698b¹depends_on_disabled_cellsÂ§runtimeÎ ùµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$1e6f7e5e-c5ce-479c-abbb-6c388c254626Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ)updateV! (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš)g‹	°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$1e6f7e5e-c5ce-479c-abbb-6c388c254626¹depends_on_disabled_cellsÂ§runtimeÎ 9 Âµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$5e012ead-b4f9-45a9-979d-88b0b1086263Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyƒ¨elements“’’…¦prefix§Float32¨elements›’’£0.0ªtext/plain’’£0.0ªtext/plain’’£1.0ªtext/plain’’£1.0ªtext/plain’’£1.0ªtext/plain’’£1.0ªtext/plain’’£1.0ªtext/plain’’£1.0ªtext/plain’	’£1.0ªtext/plain¤more’d’£1.0ªtext/plain¤type¥Array¬prefix_short ¨objectid°19fc08302fa52c8bÙ!application/vnd.pluto.tree+object’’¿2Ã—1 Matrix{Float32}:
 1.0
 0.0ªtext/plain’’…¦prefix§Float32¨elements›’’£0.0ªtext/plain’’£0.0ªtext/plain’’£8.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain’	’£0.0ªtext/plain¤more’d’£0.0ªtext/plain¤type¥Array¬prefix_short ¨objectid°28d9ec024d60f38fÙ!application/vnd.pluto.tree+object¤type¥Tuple¨objectid¯41645d3d17ae1bf¤mimeÙ!application/vnd.pluto.tree+object¬rootassigneeÀ²last_run_timestampËAÚš.{aé°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$5e012ead-b4f9-45a9-979d-88b0b1086263¹depends_on_disabled_cellsÂ§runtimeÎà#…µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$a0eb6939-11bb-458d-bee3-9ed763819f62Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙB<div class="markdown"><h4>Racetrack Visualization Code</h4>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"*	¯°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$a0eb6939-11bb-458d-bee3-9ed763819f62¹depends_on_disabled_cellsÂ§runtimeÎ (Œµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$21d248f5-edad-4614-8c1c-ae330f9e5a18Š¦queuedÂ¤logs�§runningÂ¦output†¤body ¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš$Ü¹„°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$21d248f5-edad-4614-8c1c-ae330f9e5a18¹depends_on_disabled_cellsÂ§runtimeÎ /=cµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$a68b4965-c392-47e5-9b29-93e7ada9990aŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ,plot_fig5_1 (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš)znƒ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$a68b4965-c392-47e5-9b29-93e7ada9990a¹depends_on_disabled_cellsÂ§runtimeÎ+´sÇµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$d766d44e-3684-497c-814e-8f71740cb232Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙÌ<div class="markdown"><h3><strong>Figure 5.1</strong>:</h3>
<p>Approximate state-value functions for the blackjack policy that sticks only on 20 or 21, computed by Monte Carlo policy evaluation</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"&I#°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$d766d44e-3684-497c-814e-8f71740cb232¹depends_on_disabled_cellsÂ§runtimeÎ D]µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$0dfd7afb-127c-4afd-8374-3c9a20a9ee76Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ2Ï€_racetrack_rand (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš0EÐW°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$0dfd7afb-127c-4afd-8374-3c9a20a9ee76¹depends_on_disabled_cellsÂ§runtimeÎ ùµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$bf33230e-342b-4486-89ac-9667438de503Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚ©<div class="markdown"><blockquote>
<h3><em>Exercise 5.8</em></h3>
<p>The results with Example 5.5 and shown in Figure 5.4 used a first-visit MC method.  Suppose that instead an every-visit MC method was used on the same problem.  Would the variance of the estimator still be infinite?  Why or why not?</p>
</blockquote>
<p>The state value estimate can be computed by summing terms for all of the episode lengths just like for the first visit method.  Each episode has a reward of &#43;1 from the terminal transition and we only need to consider episodes that take the left action.  <span class="tex">$\frac&#123;\pi&#40;A_t|S_t&#41;&#125;&#123;b&#40;A_t|S_t&#41;&#125; &#61; 2$</span> for all cases, so the importance sampling ratio is just <span class="tex">$2^T$</span> where T is the total length of that episode.  The probabilities for each episode length is unchanged from Example 5.5 and is just 0.1 times 0.9 times the number of steps preceeding the terminal step.  Compared to the calculation in Example 5.5, the expected value calculation must also have the importance sampling ratio terms for all of N visits in the length N episode instead of just the first one:</p>
<p>Length 1 episode</p>
<p class="tex">$$\frac&#123;1&#125;&#123;2&#125; \cdot 0.1 \cdot &#40;2&#41;^2$$</p>
<p>Length 2 episode, the term representing X is now an average of every visit along the trajectory.  The probability of the trajectory is unchanged from before.</p>
<p class="tex">$$\frac&#123;1&#125;&#123;2&#125; \cdot 0.9 \cdot \frac&#123;1&#125;&#123;2&#125; \cdot 0.1 \left &#40; \frac&#123;2^2 &#43; 2&#125;&#123;2&#125; \right&#41;^2$$</p>
<p>Length 3 episode</p>
<p class="tex">$$\frac&#123;1&#125;&#123;2&#125; \cdot 0.9 \cdot \frac&#123;1&#125;&#123;2&#125; \cdot 0.9 \cdot \frac&#123;1&#125;&#123;2&#125; \cdot 0.1 \left &#40; \frac&#123;2^3 &#43; 2^2 &#43; 2&#125;&#123;3&#125; \right&#41;^2$$</p>
<p>Length N episode</p>
<p class="tex">$$&#61;0.1 \left &#40; \frac&#123;1&#125;&#123;2&#125; \right &#41; ^N 0.9^&#123;N-1&#125; \left &#40; \frac&#123;\sum_&#123;i&#61;1&#125;^N 2^i&#125;&#123;N&#125; \right &#41; ^2$$</p>
<p>So the expected value is the sum of these terms for every possible episode length:</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"(…ù°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$bf33230e-342b-4486-89ac-9667438de503¹depends_on_disabled_cellsÂ§runtimeÎ ‚µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$826139cc-b52e-11ec-0d47-25ab689851fdŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚ·<div class="markdown"><h1>Chapter 5: Monte Carlo Methods</h1>
<p>In this chapter we will use a sampling technique that does not require complete knowledge of the environment, only the ability to interact with it.  We will focus on episodic tasks so that the sampled returns are always well defined.  Unlike the dynamic programming methods from before, these techniques will estimate the value functions rather than computing them directly.  With enough samples, these techniques will also converge to the correct solution.</p>
<h2>5.1 Monte Carlo Prediction</h2>
<p>First we consider using Monte Carlo methods to learn the state-value function for a given policy.  The most obvious way to estimate this is to simply average the returns observed after vising a particular state.  If we save the trajectories of an agent interacting with an MDP, we can keep track of how many times an agent visits a state.  In the technique called <em>first visit MC</em> we look at the returns accumulated after the first visit to a state in that episode only making a single update. It is also possible to update the state value for every visit that occurs in an episode, but the theoretical properties for <em>first visit MC</em> are more widely studied.  Both techniques, however, can be shown to converge as the number of visits goes to infinity.  Below is code implementing Monte Carlo prediction using <em>every visit MC</em> and an in place update of the average</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"&9°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$826139cc-b52e-11ec-0d47-25ab689851fd¹depends_on_disabled_cellsÂ§runtimeÎ ½sµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$0bd705cb-ad38-4cbb-b8fc-7e0617635282Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙƒ<div class="markdown"><h3>Optimal Blackjack Policy Found with Off-policy MC control &#40;behavior policy is random&#41;</h3>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš")R¨°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$0bd705cb-ad38-4cbb-b8fc-7e0617635282¹depends_on_disabled_cellsÂ§runtimeÎ Ù$µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$43f9b824-fd56-4d56-84c3-23e2a3a37178Š¦queuedÂ¤logs�§runningÂ¦output†¤body©0.99608f0¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš+qø°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$43f9b824-fd56-4d56-84c3-23e2a3a37178¹depends_on_disabled_cellsÂ§runtimeÎft_µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$b39d1ea0-86a2-4215-ae73-e4492f3f2f00Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙc<div class="markdown"><h3>Example 5.4: Off-policy Estimation of a Blackjack State Value</h3>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"("Ÿ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$b39d1ea0-86a2-4215-ae73-e4492f3f2f00¹depends_on_disabled_cellsÂ§runtimeÎ âÄµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$a307e780-996a-485f-af59-b44982dfceb4Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ,rendertrack (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš/ðD�°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$a307e780-996a-485f-af59-b44982dfceb4¹depends_on_disabled_cellsÂ§runtimeÎ ö¿(µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$b040f245-b2d6-4ec6-aa7f-511c54aabd0dŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÛ «­<div class="markdown"><table><tr><th align="right"></th><th align="center"><span class="tex">$\pi_*$</span> &#40;Black &#61; Stick, White &#61; Hit&#41;</th><th align="center"><span class="tex">$v_*$</span></th></tr><tr><td align="right">Usable ace</td><td align="center">	<script id='plot_1'>
		// We start by putting all the variable interpolation here at the beginning
		// We have to convert all typedarrays in the layout to normal arrays. See Issue #25
		// We use lodash for this for compactness
		function removeTypedArray(o) {
			return _.isTypedArray(o) ? Array.from(o) :
			_.isPlainObject(o) ? _.mapValues(o, removeTypedArray) : 
			o
		}

		// Publish the plot object to JS
		let plot_obj = _.update(/* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("c6e0de0c-3901-11f0-234e-bd09c571f662/70ef6091712c9d41"), "layout", removeTypedArray)
		// Get the plotly listeners
		const plotly_listeners = {}
		// Get the JS listeners
		const js_listeners = {}
		// Deal with eventual custom classes
		let custom_classlist = []


		// Load the plotly library
		let Plotly = undefined
		try {
			let _mod = await import("./plotlyjs/plotlyjs-2.26.2.min.js")
			Plotly = _mod.default
		} catch (e) {
			console.log("Local load failed, trying with the web esm.sh version")
			let _mod = await import("https://esm.sh/plotly.js-dist-min@2.26.2/es2022/plotly.js-dist-min.mjs")
			Plotly = _mod.default
		}

		// Check if we have to force local mathjax font cache
		if (false && window?.MathJax?.config?.svg?.fontCache === 'global') {
			window.MathJax.config.svg.fontCache = 'local'
		}

		// Flag to check if this cell was  manually ran or reactively ran
const firstRun = this ? false : true
const CONTAINER = this ?? html`<div class='plutoplotly-container'>`
const PLOT = CONTAINER.querySelector('.js-plotly-plot') ?? CONTAINER.appendChild(html`<div>`)
const parent = CONTAINER.parentElement
// We use a controller to remove event listeners upon invalidation
const controller = new AbortController()
// We have to add this to keep supporting @bind with the old API using PLOT
PLOT.addEventListener('input', (e) => {
	CONTAINER.value = PLOT.value
	if (e.bubbles) {
		return
	}
	CONTAINER.dispatchEvent(new CustomEvent('input'))
}, { signal: controller.signal })

	// This create the style subdiv on first run
	firstRun && CONTAINER.appendChild(html`
	<style>
	.plutoplotly-container {
		width: 100%;
		height: 100%;
		min-height: 0;
		min-width: 0;
	}
	.plutoplotly-container .js-plotly-plot .plotly div {
		margin: 0 auto; // This centers the plot
	}
	.plutoplotly-container.popped-out {
		overflow: auto;
		z-index: 1000;
		position: fixed;
		resize: both;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		border-top-left-radius: 0px;
		border-top-right-radius: 0px;
	}
	.plutoplotly-clipboard-header {
		display: flex;
		flex-flow: row wrap;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-top-left-radius: 12px;
		border-top-right-radius: 12px;
		position: fixed;
		z-index: 1001;
		cursor: move;
		transform: translate(0px, -100%);
		padding: 5px;
	}
	.plutoplotly-clipboard-header span {
		display: inline-block;
		flex: 1
	}
	.plutoplotly-clipboard-header.hidden {
		display: none;
	}
	.clipboard-span {
		position: relative;
	}
	.clipboard-value {
		padding-right: 5px;
		padding-left: 2px;
		cursor: text;
	}
	.clipboard-span.format {
		display: none;
	}
	.clipboard-span.filename {
		flex: 0 0 100%;
		text-align: center;
		border-top: 3px solid var(--kbd-border-color);
		margin-top: 5px;
		display: none;
	}
	.plutoplotly-container.filesave .clipboard-span.filename {
		display: inline-block;
	}
	.clipboard-value.filename {
		margin-left: 3px;
		text-align: left;
		min-width: min(60%, min-content);
	}
	.plutoplotly-container.filesave .clipboard-span.format {
		display: inline-flex;
	}
	.clipboard-span.format .label {
		flex: 0 0 0;
	}
	.clipboard-value.format {
		position: relative;
		flex: 1 0 auto;
		min-width: 30px;
		margin-right: 10px;
	}
	div.format-options {
		display: inline-flex;
		flex-flow: column;
		position: absolute;
		background: var(--main-bg-color);
		border-radius: 12px;
		padding-left: 3px;
		z-index: 2000;
	}
	div.format-options:hover {
		cursor: pointer;
		border: 3px solid var(--kbd-border-color);
		padding: 3px;
		transform: translate(-3px, -6px);
	}
	div.format-options .format-option {
		display: none;
	}
	div.format-options:hover .format-option {
		display: inline-block;
	}
	.format-option:not(.selected) {
		margin-top: 3px;
	}
	div.format-options .format-option.selected {
		order: -1;
		display: inline-block;
	}
	.format-option:hover {
		background-color: var(--kbd-border-color);
	}
	span.config-value {
		font-weight: normal;
		color: var(--pluto-output-color);
		display: none;
		position: absolute;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		transform: translate(0px, calc(-100% - 10px));
		padding: 5px;
	}
	.label {
		user-select: none;
	}
	.label:hover span.config-value {
		display: inline-block;
		min-width: 150px;
	}
	.clipboard-span.matching-config .label {
		color: var(--cm-macro-color);
		font-weight: bold;
	}
	.clipboard-span.different-config .label {
		color: var(--cm-tag-color);
		font-weight: bold;
	}
</style>
`)

let original_height = plot_obj.layout.height
let original_width = plot_obj.layout.width
// For the height we have to also put a fixed value in case the plot is put on a non-fixed-size container (like the default wrapper)
// We define a variable to check whether we still have to remove the fixed height
let remove_container_size = firstRun
let container_height = original_height ?? PLOT.container_height ?? 400
CONTAINER.style.height = container_height + 'px'

// We create a Promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// We import interact for dragging/resizing
const { default: interact } = await import('https://esm.sh/interactjs@1.10.19')


function getImageOptions() {
  const o = plot_obj.config.toImageButtonOptions ?? {};
  return {
    format: o.format ?? "png",
    width: o.width ?? original_width,
    height: o.height ?? original_height,
    scale: o.scale ?? 1,
    filename: o.filename ?? "newplot",
  };
}

const CLIPBOARD_HEADER =
  CONTAINER.querySelector(".plutoplotly-clipboard-header") ??
  CONTAINER.insertAdjacentElement(
    "afterbegin",
    html`<div class="plutoplotly-clipboard-header hidden">
      <span class="clipboard-span format"
        ><span class="label">Format:</span
        ><span class="clipboard-value format"></span
      ></span>
      <span class="clipboard-span width"
        ><span class="label">Width:</span
        ><span class="clipboard-value width"></span>px</span
      >
      <span class="clipboard-span height"
        ><span class="label">Height:</span
        ><span class="clipboard-value height"></span>px</span
      >
      <span class="clipboard-span scale"
        ><span class="label">Scale:</span
        ><span class="clipboard-value scale"></span
      ></span>
      <button class="clipboard-span set">Set</button>
      <button class="clipboard-span unset">Unset</button>
      <span class="clipboard-span filename"
        ><span class="label">Filename:</span
        ><span class="clipboard-value filename"></span
      ></span>
    </div>`
  );

function checkConfigSync(container) {
  const valid_classes = [
    "missing-config",
    "matching-config",
    "different-config",
  ];
  function setClass(cl) {
    for (const name of valid_classes) {
      container.classList.toggle(name, name == cl);
    }
  }
  // We use the custom getters we'll set up in the container
  const { ui_value, config_value, config_span, key } = container;
  if (config_value === undefined) {
    setClass("missing-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> is not present in the config.`;
  } else if (ui_value == config_value) {
    setClass("matching-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has the same value in the config and in the header.`;
  } else {
    setClass("different-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has a different value (<em>${config_value}</em>) in the config.`;
  }
  // Add info about setting and unsetting
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click on the label <em><b>once</b></em> to set the current UI value in the config.`
  );
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click <em><b>twice</b></em> to remove this key from the config.`
  );
}

const valid_formats = ["png", "svg", "webp", "jpeg", "full-json"];
function initializeUIValueSpan(span, key, value) {
  const container = span.closest(".clipboard-span");
  span.contentEditable = key === "format" ? "false" : "true";
  let parse = (x) => x;
  let update = (x) => (span.textContent = x);
  if (key === "width" || key === "height") {
    parse = (x) => Math.round(parseFloat(x));
  } else if (key === "scale") {
    parse = parseFloat;
  } else if (key === "format") {
    // We remove contentEditable
    span.contentEditable = "false";
    // Here we first add the subspans for each option
    const opts_div = span.appendChild(html`<div class="format-options"></div>`);
    for (const fmt of valid_formats) {
      const opt = opts_div.appendChild(
        html`<span class="format-option ${fmt}">${fmt}</span>`
      );
      opt.onclick = (e) => {
        span.value = opt.textContent;
      };
    }
    parse = (x) => {
      return valid_formats.includes(x) ? x : localValue;
    };
    update = (x) => {
      for (const opt of opts_div.children) {
        opt.classList.toggle("selected", opt.textContent === x);
      }
    };
  } else {
    // We only have filename here
  }
  let localValue;
  Object.defineProperty(span, "value", {
    get: () => {
      return localValue;
    },
    set: (val) => {
      if (val !== "") {
        localValue = parse(val);
      }
      update(localValue);
      checkConfigSync(container);
    },
  });
  // We also assign a listener so that the editable is blurred when enter is pressed
  span.onkeydown = (e) => {
    if (e.keyCode === 13) {
      e.preventDefault();
      span.blur();
    }
  };
  span.value = value;
}

function initializeConfigValueSpan(span, key) {
  // Here we mostly want to define the setter and getter
  const container = span.closest(".clipboard-span");
  Object.defineProperty(span, "value", {
    get: () => {
      return plot_obj.config.toImageButtonOptions[key];
    },
    set: (val) => {
      // if undefined is passed, we remove the entry from the options
      if (val === undefined) {
        delete plot_obj.config.toImageButtonOptions[key];
      } else {
        plot_obj.config.toImageButtonOptions[key] = val;
      }
      checkConfigSync(container);
    },
  });
}

const config_spans = {};
for (const [key, value] of Object.entries(getImageOptions())) {
  const container = CLIPBOARD_HEADER.querySelector(`.clipboard-span.${key}`);
  const label = container.querySelector(".label");
  // We give the label a function that on single click will set the current value and with double click will unset it
  label.onclick = DualClick(
    () => {
      container.config_value = container.ui_value;
    },
    (e) => {
      console.log("e", e);
      e.preventDefault();
      container.config_value = undefined;
    }
  );
  const ui_value_span = container.querySelector(".clipboard-value");
  const config_value_span =
    container.querySelector(".config-value") ??
    label.insertAdjacentElement(
      "afterbegin",
      html`<span class="config-value"></span>`
    );
  // Assing the two spans as properties of the containing span
  container.ui_span = ui_value_span;
  container.config_span = config_value_span;
  container.key = key;
  config_spans[key] = container;
  if (firstRun) {
    plot_obj.config.toImageButtonOptions =
      plot_obj.config.toImageButtonOptions ?? {};
    // We do the initialization of the value span
    initializeUIValueSpan(ui_value_span, key, value);
    // Then we initialize the config value
    initializeConfigValueSpan(config_value_span, key);
    // We put some convenience getters/setters
    // ui_value forward
    Object.defineProperty(container, "ui_value", {
      get: () => ui_value_span.value,
      set: (val) => {
        ui_value_span.value = val;
      },
    });
    // config_value forward
    Object.defineProperty(container, "config_value", {
      get: () => config_value_span.value,
      set: (val) => {
        config_value_span.value = val;
      },
    });
  }
}

// These objects will contain the default value

// This code updates the image options in the PLOT config with the provided ones
function setImageOptions(o) {
  for (const [key, container] of Object.entries(config_spans)) {
    container.config_value = o[key];
  }
}
function unsetImageOptions() {
  setImageOptions({});
}

const set_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.set");
const unset_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.unset");
if (firstRun) {
  set_button.onclick = (e) => {
    for (const container of Object.values(config_spans)) {
      container.config_value = container.ui_value;
    }
  };
  unset_button.onclick = unsetImageOptions;
}

// We add a function to check if the clipboard is popped out
CONTAINER.isPoppedOut = () => {
  return CONTAINER.classList.contains("popped-out");
};

CLIPBOARD_HEADER.onmousedown = function (event) {
  if (event.target.matches("span.clipboard-value")) {
    console.log("We don't move!");
    return;
  }
  const start = {
    left: parseFloat(CONTAINER.style.left),
    top: parseFloat(CONTAINER.style.top),
    X: event.pageX,
    Y: event.pageY,
  };
  function moveAt(event, start) {
    const top = event.pageY - start.Y + start.top + "px";
    const left = event.pageX - start.X + start.left + "px";
    CLIPBOARD_HEADER.style.left = left;
    CONTAINER.style.left = left;
    CONTAINER.style.top = top;
  }

  // move our absolutely positioned ball under the pointer
  moveAt(event, start);
  function onMouseMove(event) {
    moveAt(event, start);
  }

  // We use this to remove the mousemove when clicking outside of the container
  const controller = new AbortController();

  // move the container on mousemove
  document.addEventListener("mousemove", onMouseMove, {
    signal: controller.signal,
  });
  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        cleanUp();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );

  function cleanUp() {
    console.log("cleaning up the plot move listener");
    controller.abort();
    CLIPBOARD_HEADER.onmouseup = null;
  }

  // (3) drop the ball, remove unneeded handlers
  CLIPBOARD_HEADER.onmouseup = cleanUp;
};

function sendToClipboard(blob) {
  if (!navigator.clipboard) {
    alert(
      "The Clipboard API does not seem to be available, make sure the Pluto notebook is being used from either localhost or an https source."
    );
  }
  navigator.clipboard
    .write([
      new ClipboardItem({
        // The key is determined dynamically based on the blob's type.
        [blob.type]: blob,
      }),
    ])
    .then(
      function () {
        console.log("Async: Copying to clipboard was successful!");
      },
      function (err) {
        console.error("Async: Could not copy text: ", err);
      }
    );
}

function copyImageToClipboard() {
  // We extract the image options from the provided parameters (if they exist)
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key. We also ignore format because the clipboard only supports png.
    if (val === undefined || key === "format") {
      continue;
    }
    config[key] = val;
  }
  Plotly.toImage(PLOT, config).then(function (dataUrl) {
    fetch(dataUrl)
      .then((res) => res.blob())
      .then((blob) => {
        const paste_receiver = document.querySelector('paste-receiver.plutoplotly')
        if (paste_receiver) {
          paste_receiver.attachImage(dataUrl, CONTAINER)
        }
        sendToClipboard(blob)
      });
  });
}

function saveImageToFile() {
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key.
    if (val === undefined) {
      continue;
    }
    config[key] = val;
  }
  Plotly.downloadImage(PLOT, config);
}

let container_rect = { width: 0, height: 0, top: 0, left: 0 };
function unpop_container(cl) {
  CONTAINER.classList.toggle("popped-out", false);
  CONTAINER.classList.toggle(cl, false);
  // We fix the height back to the value it had before popout, also setting the flag to signal that upon first resize we remove the fixed inline-style
  CONTAINER.style.height = container_rect.height + "px";
  remove_container_size = true;
  // We set the other fixed inline-styles to null
  CONTAINER.style.width = "";
  CONTAINER.style.top = "";
  CONTAINER.style.left = "";
  // We also remove the CLIPBOARD_HEADER
  CLIPBOARD_HEADER.style.width = "";
  CLIPBOARD_HEADER.style.left = "";
  // Finally we remove the hidden class to the header
  CLIPBOARD_HEADER.classList.toggle("hidden", true);
  return;
}
function popout_container(opts) {
  const cl = opts?.cl;
  const target_container_size = opts?.target_container_size ?? {};
  const target_plot_size = opts?.target_plot_size ?? {};
  if (CONTAINER.isPoppedOut()) {
    return unpop_container(cl);
  }
  CONTAINER.classList.toggle(cl, cl === undefined ? false : true);
  // We extract the current size of the container, save them and fix them
  const { width, height, top, left } = CONTAINER.getBoundingClientRect();
  container_rect = { width, height, top, left };
  // We save the current plot size before we pop as it will fill the screen
  const current_plot_size = {
    width: PLOT._fullLayout.width,
    height: PLOT._fullLayout.height,
  };
  // We have to save the pad data before popping so we can resize precisely
  const pad = {};
  pad.unpopped = getSizeData().container_pad;
  CONTAINER.classList.toggle("popped-out", true);
  pad.popped = getSizeData().container_pad;
  // We do top and left based on the current rect
  for (const key of ["top", "left"]) {
    const start_val = target_container_size[key] ?? container_rect[key];
    let offset = 0;
    for (const kind of ["padding", "border"]) {
      offset += pad.popped[kind][key] - pad.unpopped[kind][key];
    }
    CONTAINER.style[key] = start_val - offset + "px";
    if (key === "left") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  // We compute the width and height depending on eventual config data
  const csz = computeContainerSize({
    width:
      target_plot_size.width ??
      config_spans.width.config_value ??
      current_plot_size.width,
    height:
      target_plot_size.height ??
      config_spans.height.config_value ??
      current_plot_size.height,
  });
  for (const key of ["width", "height"]) {
    const val = target_container_size[key] ?? csz[key];
    CONTAINER.style[key] = val + "px";
    if (key === "width") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  CLIPBOARD_HEADER.classList.toggle("hidden", false);
  const controller = new AbortController();

  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        unpop_container();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );
}

CONTAINER.popOut = popout_container;

function DualClick(single_func, dbl_func) {
  let nclicks = 0;
  return function (...args) {
    nclicks += 1;
    if (nclicks > 1) {
      dbl_func(...args);
      nclicks = 0;
    } else {
      delay(300).then(() => {
        if (nclicks == 1) {
          single_func(...args);
        }
        nclicks = 0;
      });
    }
  };
}

// We remove the default download image button
plot_obj.config.modeBarButtonsToRemove = _.union(
  plot_obj.config.modeBarButtonsToRemove,
  ["toImage"]
);
// We add the custom button to the modebar
plot_obj.config.modeBarButtonsToAdd = _.union(
  plot_obj.config.modeBarButtonsToAdd,
  [
    {
      name: "Copy PNG to Clipboard",
      icon: {
        height: 520,
        width: 520,
        path: "M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z",
      },
      direction: "up",
      click: DualClick(copyImageToClipboard, () => {
        popout_container();
      }),
    },
    {
      name: "Download Image",
      icon: Plotly.Icons.camera,
      direction: "up",
      click: DualClick(saveImageToFile, () => {
        popout_container({ cl: "filesave" });
      }),
    },
  ]
);

function getOffsetData(el) {
  let cs = window.getComputedStyle(el, null);
  const odata = {
    padding: {
      left: parseFloat(cs.paddingLeft),
      right: parseFloat(cs.paddingRight),
      top: parseFloat(cs.paddingTop),
      bottom: parseFloat(cs.paddingBottom),
      width: parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight),
      height: parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom),
    },
    border: {
      left: parseFloat(cs.borderLeftWidth),
      right: parseFloat(cs.borderRightWidth),
      top: parseFloat(cs.borderTopWidth),
      bottom: parseFloat(cs.borderBottomWidth),
      width: parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth),
      height: parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth),
    }
  };
  if (el === PLOT) {
    // For the PLOT we also want to take into account the offset
    odata.offset = {
      top: PLOT.offsetParent == CONTAINER ? PLOT.offsetTop : 0,
      left: PLOT.offsetParent == CONTAINER ? PLOT.offsetLeft : 0,
    }
  }
  return odata;
}
function getSizeData() {
  const data = {
    plot_pad: getOffsetData(PLOT),
    plot_rect: PLOT.getBoundingClientRect(),
    container_pad: getOffsetData(CONTAINER),
    container_rect: CONTAINER.getBoundingClientRect(),
  };
  return data;
}
function computeContainerSize({ width, height }, sizeData = getSizeData()) {
  const computed_size = computePlotSize(sizeData);
  const offsets = computed_size.offsets;

  const plot_data = {
    width: width ?? computed_size.width,
    height: height ?? computed_size.height,
  };

  return {
    width: (width ?? computed_size.width) + offsets.width,
    height: (height ?? computed_size.height) + offsets.height,
    noChange: width == computed_size.width && height == computed_size.height,
  }
}

// This function will change the container size so that the resulting plot will be matching the provided specs
function changeContainerSize({ width, height }, sizeData = getSizeData()) {
  if (!CONTAINER.isPoppedOut()) {
    console.log("Tried to change container size when not popped, ignoring");
    return;
  }

  const csz = computeContainerSize({ width, height }, sizeData);

  if (csz.noChange) {
    console.log("Size is the same as current, ignoring");
    return
  }
  // We are now going to set he width and height of the container
  for (const key of ["width", "height"]) {
    CONTAINER.style[key] = csz[key] + "px";
  }
}
// We now create the function that will update the plot based on the values specified
function updateFromHeader() {
  const header_data = {
    height: config_spans.height.ui_value,
    width: config_spans.width.ui_value,
  };
  changeContainerSize(header_data);
}
// We assign this function to the onblur event of width and height
if (firstRun) {
  for (const container of Object.values(config_spans)) {
    container.ui_span.onblur = (e) => {
      container.ui_value = container.ui_span.textContent;
      updateFromHeader();
    };
  }
}
// This function computes the plot size to use for relayout as a function of the container size
function computePlotSize(data = getSizeData()) {
  // Remove Padding
  const { container_pad, plot_pad, container_rect } = data;
  const offsets = {
    width:
      plot_pad.padding.width +
      plot_pad.border.width +
      plot_pad.offset.left +
      container_pad.padding.width +
      container_pad.border.width,
    height:
      plot_pad.padding.height +
      plot_pad.border.height +
      plot_pad.offset.top +
      container_pad.padding.height +
      container_pad.border.height,
  };
  const sz = {
    width: Math.round(container_rect.width - offsets.width),
    height: Math.round(container_rect.height - offsets.height),
    offsets,
  };
  return sz;
}

// Create the resizeObserver to make the plot even more responsive! :magic:
const resizeObserver = new ResizeObserver((entries) => {
  const sizeData = getSizeData();
  const {container_rect, container_pad} = sizeData;
  let plot_size = computePlotSize(sizeData);
  // We save the height in the PLOT object
  PLOT.container_height = container_rect.height;
  // We deal with some stuff if the container is poppped
  CLIPBOARD_HEADER.style.width = container_rect.width + "px";
  CLIPBOARD_HEADER.style.left = container_rect.left + "px";
  config_spans.height.ui_value = plot_size.height;
  config_spans.width.ui_value = plot_size.width;
  /* 
		The addition of the invalid argument `plutoresize` seems to fix the problem with calling `relayout` simply with `{autosize: true}` as update breaking mouse relayout events tracking. 
		See https://github.com/plotly/plotly.js/issues/6156 for details
		*/
  let config = {
    // If this is popped out, we ignore the original width/height
    width: (CONTAINER.isPoppedOut() ? undefined : original_width) ?? plot_size.width,
    height: (CONTAINER.isPoppedOut() ? undefined : original_height) ?? plot_size.height,
    plutoresize: true,
  };
  Plotly.relayout(PLOT, config).then(() => {
    if (remove_container_size && !CONTAINER.isPoppedOut()) {
      // This is needed to avoid the first resize upon plot creation to already be without a fixed height
      CONTAINER.style.height = "";
      CONTAINER.style.width = "";
      remove_container_size = false;
    }
  });
});

resizeObserver.observe(CONTAINER);


Plotly.react(PLOT, plot_obj).then(() => {
	// Assign the Plotly event listeners
	for (const [key, listener_vec] of Object.entries(plotly_listeners)) {
		for (const listener of listener_vec) {
			PLOT.on(key, listener)
		}
	}
	// Assign the JS event listeners
	for (const [key, listener_vec] of Object.entries(js_listeners)) {
		for (const listener of listener_vec) {
			PLOT.addEventListener(key, listener, {
				signal: controller.signal
			})
		}
	}
}
)


invalidation.then(() => {
	// Remove all plotly listeners
	PLOT.removeAllListeners()
	// Remove all JS listeners
	controller.abort()
	// Remove the resizeObserver
	resizeObserver.disconnect()
})



		return CONTAINER
	</script>
</td><td align="center">	<script id='plot_2'>
		// We start by putting all the variable interpolation here at the beginning
		// We have to convert all typedarrays in the layout to normal arrays. See Issue #25
		// We use lodash for this for compactness
		function removeTypedArray(o) {
			return _.isTypedArray(o) ? Array.from(o) :
			_.isPlainObject(o) ? _.mapValues(o, removeTypedArray) : 
			o
		}

		// Publish the plot object to JS
		let plot_obj = _.update(/* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("c6e0de0c-3901-11f0-234e-bd09c571f662/cfb9dac3af175b34"), "layout", removeTypedArray)
		// Get the plotly listeners
		const plotly_listeners = {}
		// Get the JS listeners
		const js_listeners = {}
		// Deal with eventual custom classes
		let custom_classlist = []


		// Load the plotly library
		let Plotly = undefined
		try {
			let _mod = await import("./plotlyjs/plotlyjs-2.26.2.min.js")
			Plotly = _mod.default
		} catch (e) {
			console.log("Local load failed, trying with the web esm.sh version")
			let _mod = await import("https://esm.sh/plotly.js-dist-min@2.26.2/es2022/plotly.js-dist-min.mjs")
			Plotly = _mod.default
		}

		// Check if we have to force local mathjax font cache
		if (false && window?.MathJax?.config?.svg?.fontCache === 'global') {
			window.MathJax.config.svg.fontCache = 'local'
		}

		// Flag to check if this cell was  manually ran or reactively ran
const firstRun = this ? false : true
const CONTAINER = this ?? html`<div class='plutoplotly-container'>`
const PLOT = CONTAINER.querySelector('.js-plotly-plot') ?? CONTAINER.appendChild(html`<div>`)
const parent = CONTAINER.parentElement
// We use a controller to remove event listeners upon invalidation
const controller = new AbortController()
// We have to add this to keep supporting @bind with the old API using PLOT
PLOT.addEventListener('input', (e) => {
	CONTAINER.value = PLOT.value
	if (e.bubbles) {
		return
	}
	CONTAINER.dispatchEvent(new CustomEvent('input'))
}, { signal: controller.signal })

	// This create the style subdiv on first run
	firstRun && CONTAINER.appendChild(html`
	<style>
	.plutoplotly-container {
		width: 100%;
		height: 100%;
		min-height: 0;
		min-width: 0;
	}
	.plutoplotly-container .js-plotly-plot .plotly div {
		margin: 0 auto; // This centers the plot
	}
	.plutoplotly-container.popped-out {
		overflow: auto;
		z-index: 1000;
		position: fixed;
		resize: both;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		border-top-left-radius: 0px;
		border-top-right-radius: 0px;
	}
	.plutoplotly-clipboard-header {
		display: flex;
		flex-flow: row wrap;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-top-left-radius: 12px;
		border-top-right-radius: 12px;
		position: fixed;
		z-index: 1001;
		cursor: move;
		transform: translate(0px, -100%);
		padding: 5px;
	}
	.plutoplotly-clipboard-header span {
		display: inline-block;
		flex: 1
	}
	.plutoplotly-clipboard-header.hidden {
		display: none;
	}
	.clipboard-span {
		position: relative;
	}
	.clipboard-value {
		padding-right: 5px;
		padding-left: 2px;
		cursor: text;
	}
	.clipboard-span.format {
		display: none;
	}
	.clipboard-span.filename {
		flex: 0 0 100%;
		text-align: center;
		border-top: 3px solid var(--kbd-border-color);
		margin-top: 5px;
		display: none;
	}
	.plutoplotly-container.filesave .clipboard-span.filename {
		display: inline-block;
	}
	.clipboard-value.filename {
		margin-left: 3px;
		text-align: left;
		min-width: min(60%, min-content);
	}
	.plutoplotly-container.filesave .clipboard-span.format {
		display: inline-flex;
	}
	.clipboard-span.format .label {
		flex: 0 0 0;
	}
	.clipboard-value.format {
		position: relative;
		flex: 1 0 auto;
		min-width: 30px;
		margin-right: 10px;
	}
	div.format-options {
		display: inline-flex;
		flex-flow: column;
		position: absolute;
		background: var(--main-bg-color);
		border-radius: 12px;
		padding-left: 3px;
		z-index: 2000;
	}
	div.format-options:hover {
		cursor: pointer;
		border: 3px solid var(--kbd-border-color);
		padding: 3px;
		transform: translate(-3px, -6px);
	}
	div.format-options .format-option {
		display: none;
	}
	div.format-options:hover .format-option {
		display: inline-block;
	}
	.format-option:not(.selected) {
		margin-top: 3px;
	}
	div.format-options .format-option.selected {
		order: -1;
		display: inline-block;
	}
	.format-option:hover {
		background-color: var(--kbd-border-color);
	}
	span.config-value {
		font-weight: normal;
		color: var(--pluto-output-color);
		display: none;
		position: absolute;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		transform: translate(0px, calc(-100% - 10px));
		padding: 5px;
	}
	.label {
		user-select: none;
	}
	.label:hover span.config-value {
		display: inline-block;
		min-width: 150px;
	}
	.clipboard-span.matching-config .label {
		color: var(--cm-macro-color);
		font-weight: bold;
	}
	.clipboard-span.different-config .label {
		color: var(--cm-tag-color);
		font-weight: bold;
	}
</style>
`)

let original_height = plot_obj.layout.height
let original_width = plot_obj.layout.width
// For the height we have to also put a fixed value in case the plot is put on a non-fixed-size container (like the default wrapper)
// We define a variable to check whether we still have to remove the fixed height
let remove_container_size = firstRun
let container_height = original_height ?? PLOT.container_height ?? 400
CONTAINER.style.height = container_height + 'px'

// We create a Promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// We import interact for dragging/resizing
const { default: interact } = await import('https://esm.sh/interactjs@1.10.19')


function getImageOptions() {
  const o = plot_obj.config.toImageButtonOptions ?? {};
  return {
    format: o.format ?? "png",
    width: o.width ?? original_width,
    height: o.height ?? original_height,
    scale: o.scale ?? 1,
    filename: o.filename ?? "newplot",
  };
}

const CLIPBOARD_HEADER =
  CONTAINER.querySelector(".plutoplotly-clipboard-header") ??
  CONTAINER.insertAdjacentElement(
    "afterbegin",
    html`<div class="plutoplotly-clipboard-header hidden">
      <span class="clipboard-span format"
        ><span class="label">Format:</span
        ><span class="clipboard-value format"></span
      ></span>
      <span class="clipboard-span width"
        ><span class="label">Width:</span
        ><span class="clipboard-value width"></span>px</span
      >
      <span class="clipboard-span height"
        ><span class="label">Height:</span
        ><span class="clipboard-value height"></span>px</span
      >
      <span class="clipboard-span scale"
        ><span class="label">Scale:</span
        ><span class="clipboard-value scale"></span
      ></span>
      <button class="clipboard-span set">Set</button>
      <button class="clipboard-span unset">Unset</button>
      <span class="clipboard-span filename"
        ><span class="label">Filename:</span
        ><span class="clipboard-value filename"></span
      ></span>
    </div>`
  );

function checkConfigSync(container) {
  const valid_classes = [
    "missing-config",
    "matching-config",
    "different-config",
  ];
  function setClass(cl) {
    for (const name of valid_classes) {
      container.classList.toggle(name, name == cl);
    }
  }
  // We use the custom getters we'll set up in the container
  const { ui_value, config_value, config_span, key } = container;
  if (config_value === undefined) {
    setClass("missing-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> is not present in the config.`;
  } else if (ui_value == config_value) {
    setClass("matching-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has the same value in the config and in the header.`;
  } else {
    setClass("different-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has a different value (<em>${config_value}</em>) in the config.`;
  }
  // Add info about setting and unsetting
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click on the label <em><b>once</b></em> to set the current UI value in the config.`
  );
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click <em><b>twice</b></em> to remove this key from the config.`
  );
}

const valid_formats = ["png", "svg", "webp", "jpeg", "full-json"];
function initializeUIValueSpan(span, key, value) {
  const container = span.closest(".clipboard-span");
  span.contentEditable = key === "format" ? "false" : "true";
  let parse = (x) => x;
  let update = (x) => (span.textContent = x);
  if (key === "width" || key === "height") {
    parse = (x) => Math.round(parseFloat(x));
  } else if (key === "scale") {
    parse = parseFloat;
  } else if (key === "format") {
    // We remove contentEditable
    span.contentEditable = "false";
    // Here we first add the subspans for each option
    const opts_div = span.appendChild(html`<div class="format-options"></div>`);
    for (const fmt of valid_formats) {
      const opt = opts_div.appendChild(
        html`<span class="format-option ${fmt}">${fmt}</span>`
      );
      opt.onclick = (e) => {
        span.value = opt.textContent;
      };
    }
    parse = (x) => {
      return valid_formats.includes(x) ? x : localValue;
    };
    update = (x) => {
      for (const opt of opts_div.children) {
        opt.classList.toggle("selected", opt.textContent === x);
      }
    };
  } else {
    // We only have filename here
  }
  let localValue;
  Object.defineProperty(span, "value", {
    get: () => {
      return localValue;
    },
    set: (val) => {
      if (val !== "") {
        localValue = parse(val);
      }
      update(localValue);
      checkConfigSync(container);
    },
  });
  // We also assign a listener so that the editable is blurred when enter is pressed
  span.onkeydown = (e) => {
    if (e.keyCode === 13) {
      e.preventDefault();
      span.blur();
    }
  };
  span.value = value;
}

function initializeConfigValueSpan(span, key) {
  // Here we mostly want to define the setter and getter
  const container = span.closest(".clipboard-span");
  Object.defineProperty(span, "value", {
    get: () => {
      return plot_obj.config.toImageButtonOptions[key];
    },
    set: (val) => {
      // if undefined is passed, we remove the entry from the options
      if (val === undefined) {
        delete plot_obj.config.toImageButtonOptions[key];
      } else {
        plot_obj.config.toImageButtonOptions[key] = val;
      }
      checkConfigSync(container);
    },
  });
}

const config_spans = {};
for (const [key, value] of Object.entries(getImageOptions())) {
  const container = CLIPBOARD_HEADER.querySelector(`.clipboard-span.${key}`);
  const label = container.querySelector(".label");
  // We give the label a function that on single click will set the current value and with double click will unset it
  label.onclick = DualClick(
    () => {
      container.config_value = container.ui_value;
    },
    (e) => {
      console.log("e", e);
      e.preventDefault();
      container.config_value = undefined;
    }
  );
  const ui_value_span = container.querySelector(".clipboard-value");
  const config_value_span =
    container.querySelector(".config-value") ??
    label.insertAdjacentElement(
      "afterbegin",
      html`<span class="config-value"></span>`
    );
  // Assing the two spans as properties of the containing span
  container.ui_span = ui_value_span;
  container.config_span = config_value_span;
  container.key = key;
  config_spans[key] = container;
  if (firstRun) {
    plot_obj.config.toImageButtonOptions =
      plot_obj.config.toImageButtonOptions ?? {};
    // We do the initialization of the value span
    initializeUIValueSpan(ui_value_span, key, value);
    // Then we initialize the config value
    initializeConfigValueSpan(config_value_span, key);
    // We put some convenience getters/setters
    // ui_value forward
    Object.defineProperty(container, "ui_value", {
      get: () => ui_value_span.value,
      set: (val) => {
        ui_value_span.value = val;
      },
    });
    // config_value forward
    Object.defineProperty(container, "config_value", {
      get: () => config_value_span.value,
      set: (val) => {
        config_value_span.value = val;
      },
    });
  }
}

// These objects will contain the default value

// This code updates the image options in the PLOT config with the provided ones
function setImageOptions(o) {
  for (const [key, container] of Object.entries(config_spans)) {
    container.config_value = o[key];
  }
}
function unsetImageOptions() {
  setImageOptions({});
}

const set_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.set");
const unset_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.unset");
if (firstRun) {
  set_button.onclick = (e) => {
    for (const container of Object.values(config_spans)) {
      container.config_value = container.ui_value;
    }
  };
  unset_button.onclick = unsetImageOptions;
}

// We add a function to check if the clipboard is popped out
CONTAINER.isPoppedOut = () => {
  return CONTAINER.classList.contains("popped-out");
};

CLIPBOARD_HEADER.onmousedown = function (event) {
  if (event.target.matches("span.clipboard-value")) {
    console.log("We don't move!");
    return;
  }
  const start = {
    left: parseFloat(CONTAINER.style.left),
    top: parseFloat(CONTAINER.style.top),
    X: event.pageX,
    Y: event.pageY,
  };
  function moveAt(event, start) {
    const top = event.pageY - start.Y + start.top + "px";
    const left = event.pageX - start.X + start.left + "px";
    CLIPBOARD_HEADER.style.left = left;
    CONTAINER.style.left = left;
    CONTAINER.style.top = top;
  }

  // move our absolutely positioned ball under the pointer
  moveAt(event, start);
  function onMouseMove(event) {
    moveAt(event, start);
  }

  // We use this to remove the mousemove when clicking outside of the container
  const controller = new AbortController();

  // move the container on mousemove
  document.addEventListener("mousemove", onMouseMove, {
    signal: controller.signal,
  });
  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        cleanUp();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );

  function cleanUp() {
    console.log("cleaning up the plot move listener");
    controller.abort();
    CLIPBOARD_HEADER.onmouseup = null;
  }

  // (3) drop the ball, remove unneeded handlers
  CLIPBOARD_HEADER.onmouseup = cleanUp;
};

function sendToClipboard(blob) {
  if (!navigator.clipboard) {
    alert(
      "The Clipboard API does not seem to be available, make sure the Pluto notebook is being used from either localhost or an https source."
    );
  }
  navigator.clipboard
    .write([
      new ClipboardItem({
        // The key is determined dynamically based on the blob's type.
        [blob.type]: blob,
      }),
    ])
    .then(
      function () {
        console.log("Async: Copying to clipboard was successful!");
      },
      function (err) {
        console.error("Async: Could not copy text: ", err);
      }
    );
}

function copyImageToClipboard() {
  // We extract the image options from the provided parameters (if they exist)
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key. We also ignore format because the clipboard only supports png.
    if (val === undefined || key === "format") {
      continue;
    }
    config[key] = val;
  }
  Plotly.toImage(PLOT, config).then(function (dataUrl) {
    fetch(dataUrl)
      .then((res) => res.blob())
      .then((blob) => {
        const paste_receiver = document.querySelector('paste-receiver.plutoplotly')
        if (paste_receiver) {
          paste_receiver.attachImage(dataUrl, CONTAINER)
        }
        sendToClipboard(blob)
      });
  });
}

function saveImageToFile() {
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key.
    if (val === undefined) {
      continue;
    }
    config[key] = val;
  }
  Plotly.downloadImage(PLOT, config);
}

let container_rect = { width: 0, height: 0, top: 0, left: 0 };
function unpop_container(cl) {
  CONTAINER.classList.toggle("popped-out", false);
  CONTAINER.classList.toggle(cl, false);
  // We fix the height back to the value it had before popout, also setting the flag to signal that upon first resize we remove the fixed inline-style
  CONTAINER.style.height = container_rect.height + "px";
  remove_container_size = true;
  // We set the other fixed inline-styles to null
  CONTAINER.style.width = "";
  CONTAINER.style.top = "";
  CONTAINER.style.left = "";
  // We also remove the CLIPBOARD_HEADER
  CLIPBOARD_HEADER.style.width = "";
  CLIPBOARD_HEADER.style.left = "";
  // Finally we remove the hidden class to the header
  CLIPBOARD_HEADER.classList.toggle("hidden", true);
  return;
}
function popout_container(opts) {
  const cl = opts?.cl;
  const target_container_size = opts?.target_container_size ?? {};
  const target_plot_size = opts?.target_plot_size ?? {};
  if (CONTAINER.isPoppedOut()) {
    return unpop_container(cl);
  }
  CONTAINER.classList.toggle(cl, cl === undefined ? false : true);
  // We extract the current size of the container, save them and fix them
  const { width, height, top, left } = CONTAINER.getBoundingClientRect();
  container_rect = { width, height, top, left };
  // We save the current plot size before we pop as it will fill the screen
  const current_plot_size = {
    width: PLOT._fullLayout.width,
    height: PLOT._fullLayout.height,
  };
  // We have to save the pad data before popping so we can resize precisely
  const pad = {};
  pad.unpopped = getSizeData().container_pad;
  CONTAINER.classList.toggle("popped-out", true);
  pad.popped = getSizeData().container_pad;
  // We do top and left based on the current rect
  for (const key of ["top", "left"]) {
    const start_val = target_container_size[key] ?? container_rect[key];
    let offset = 0;
    for (const kind of ["padding", "border"]) {
      offset += pad.popped[kind][key] - pad.unpopped[kind][key];
    }
    CONTAINER.style[key] = start_val - offset + "px";
    if (key === "left") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  // We compute the width and height depending on eventual config data
  const csz = computeContainerSize({
    width:
      target_plot_size.width ??
      config_spans.width.config_value ??
      current_plot_size.width,
    height:
      target_plot_size.height ??
      config_spans.height.config_value ??
      current_plot_size.height,
  });
  for (const key of ["width", "height"]) {
    const val = target_container_size[key] ?? csz[key];
    CONTAINER.style[key] = val + "px";
    if (key === "width") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  CLIPBOARD_HEADER.classList.toggle("hidden", false);
  const controller = new AbortController();

  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        unpop_container();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );
}

CONTAINER.popOut = popout_container;

function DualClick(single_func, dbl_func) {
  let nclicks = 0;
  return function (...args) {
    nclicks += 1;
    if (nclicks > 1) {
      dbl_func(...args);
      nclicks = 0;
    } else {
      delay(300).then(() => {
        if (nclicks == 1) {
          single_func(...args);
        }
        nclicks = 0;
      });
    }
  };
}

// We remove the default download image button
plot_obj.config.modeBarButtonsToRemove = _.union(
  plot_obj.config.modeBarButtonsToRemove,
  ["toImage"]
);
// We add the custom button to the modebar
plot_obj.config.modeBarButtonsToAdd = _.union(
  plot_obj.config.modeBarButtonsToAdd,
  [
    {
      name: "Copy PNG to Clipboard",
      icon: {
        height: 520,
        width: 520,
        path: "M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z",
      },
      direction: "up",
      click: DualClick(copyImageToClipboard, () => {
        popout_container();
      }),
    },
    {
      name: "Download Image",
      icon: Plotly.Icons.camera,
      direction: "up",
      click: DualClick(saveImageToFile, () => {
        popout_container({ cl: "filesave" });
      }),
    },
  ]
);

function getOffsetData(el) {
  let cs = window.getComputedStyle(el, null);
  const odata = {
    padding: {
      left: parseFloat(cs.paddingLeft),
      right: parseFloat(cs.paddingRight),
      top: parseFloat(cs.paddingTop),
      bottom: parseFloat(cs.paddingBottom),
      width: parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight),
      height: parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom),
    },
    border: {
      left: parseFloat(cs.borderLeftWidth),
      right: parseFloat(cs.borderRightWidth),
      top: parseFloat(cs.borderTopWidth),
      bottom: parseFloat(cs.borderBottomWidth),
      width: parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth),
      height: parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth),
    }
  };
  if (el === PLOT) {
    // For the PLOT we also want to take into account the offset
    odata.offset = {
      top: PLOT.offsetParent == CONTAINER ? PLOT.offsetTop : 0,
      left: PLOT.offsetParent == CONTAINER ? PLOT.offsetLeft : 0,
    }
  }
  return odata;
}
function getSizeData() {
  const data = {
    plot_pad: getOffsetData(PLOT),
    plot_rect: PLOT.getBoundingClientRect(),
    container_pad: getOffsetData(CONTAINER),
    container_rect: CONTAINER.getBoundingClientRect(),
  };
  return data;
}
function computeContainerSize({ width, height }, sizeData = getSizeData()) {
  const computed_size = computePlotSize(sizeData);
  const offsets = computed_size.offsets;

  const plot_data = {
    width: width ?? computed_size.width,
    height: height ?? computed_size.height,
  };

  return {
    width: (width ?? computed_size.width) + offsets.width,
    height: (height ?? computed_size.height) + offsets.height,
    noChange: width == computed_size.width && height == computed_size.height,
  }
}

// This function will change the container size so that the resulting plot will be matching the provided specs
function changeContainerSize({ width, height }, sizeData = getSizeData()) {
  if (!CONTAINER.isPoppedOut()) {
    console.log("Tried to change container size when not popped, ignoring");
    return;
  }

  const csz = computeContainerSize({ width, height }, sizeData);

  if (csz.noChange) {
    console.log("Size is the same as current, ignoring");
    return
  }
  // We are now going to set he width and height of the container
  for (const key of ["width", "height"]) {
    CONTAINER.style[key] = csz[key] + "px";
  }
}
// We now create the function that will update the plot based on the values specified
function updateFromHeader() {
  const header_data = {
    height: config_spans.height.ui_value,
    width: config_spans.width.ui_value,
  };
  changeContainerSize(header_data);
}
// We assign this function to the onblur event of width and height
if (firstRun) {
  for (const container of Object.values(config_spans)) {
    container.ui_span.onblur = (e) => {
      container.ui_value = container.ui_span.textContent;
      updateFromHeader();
    };
  }
}
// This function computes the plot size to use for relayout as a function of the container size
function computePlotSize(data = getSizeData()) {
  // Remove Padding
  const { container_pad, plot_pad, container_rect } = data;
  const offsets = {
    width:
      plot_pad.padding.width +
      plot_pad.border.width +
      plot_pad.offset.left +
      container_pad.padding.width +
      container_pad.border.width,
    height:
      plot_pad.padding.height +
      plot_pad.border.height +
      plot_pad.offset.top +
      container_pad.padding.height +
      container_pad.border.height,
  };
  const sz = {
    width: Math.round(container_rect.width - offsets.width),
    height: Math.round(container_rect.height - offsets.height),
    offsets,
  };
  return sz;
}

// Create the resizeObserver to make the plot even more responsive! :magic:
const resizeObserver = new ResizeObserver((entries) => {
  const sizeData = getSizeData();
  const {container_rect, container_pad} = sizeData;
  let plot_size = computePlotSize(sizeData);
  // We save the height in the PLOT object
  PLOT.container_height = container_rect.height;
  // We deal with some stuff if the container is poppped
  CLIPBOARD_HEADER.style.width = container_rect.width + "px";
  CLIPBOARD_HEADER.style.left = container_rect.left + "px";
  config_spans.height.ui_value = plot_size.height;
  config_spans.width.ui_value = plot_size.width;
  /* 
		The addition of the invalid argument `plutoresize` seems to fix the problem with calling `relayout` simply with `{autosize: true}` as update breaking mouse relayout events tracking. 
		See https://github.com/plotly/plotly.js/issues/6156 for details
		*/
  let config = {
    // If this is popped out, we ignore the original width/height
    width: (CONTAINER.isPoppedOut() ? undefined : original_width) ?? plot_size.width,
    height: (CONTAINER.isPoppedOut() ? undefined : original_height) ?? plot_size.height,
    plutoresize: true,
  };
  Plotly.relayout(PLOT, config).then(() => {
    if (remove_container_size && !CONTAINER.isPoppedOut()) {
      // This is needed to avoid the first resize upon plot creation to already be without a fixed height
      CONTAINER.style.height = "";
      CONTAINER.style.width = "";
      remove_container_size = false;
    }
  });
});

resizeObserver.observe(CONTAINER);


Plotly.react(PLOT, plot_obj).then(() => {
	// Assign the Plotly event listeners
	for (const [key, listener_vec] of Object.entries(plotly_listeners)) {
		for (const listener of listener_vec) {
			PLOT.on(key, listener)
		}
	}
	// Assign the JS event listeners
	for (const [key, listener_vec] of Object.entries(js_listeners)) {
		for (const listener of listener_vec) {
			PLOT.addEventListener(key, listener, {
				signal: controller.signal
			})
		}
	}
}
)


invalidation.then(() => {
	// Remove all plotly listeners
	PLOT.removeAllListeners()
	// Remove all JS listeners
	controller.abort()
	// Remove the resizeObserver
	resizeObserver.disconnect()
})



		return CONTAINER
	</script>
</td></tr><tr><td align="right">No usable ace</td><td align="center">	<script id='plot_3'>
		// We start by putting all the variable interpolation here at the beginning
		// We have to convert all typedarrays in the layout to normal arrays. See Issue #25
		// We use lodash for this for compactness
		function removeTypedArray(o) {
			return _.isTypedArray(o) ? Array.from(o) :
			_.isPlainObject(o) ? _.mapValues(o, removeTypedArray) : 
			o
		}

		// Publish the plot object to JS
		let plot_obj = _.update(/* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("c6e0de0c-3901-11f0-234e-bd09c571f662/4632010f9ca3f26e"), "layout", removeTypedArray)
		// Get the plotly listeners
		const plotly_listeners = {}
		// Get the JS listeners
		const js_listeners = {}
		// Deal with eventual custom classes
		let custom_classlist = []


		// Load the plotly library
		let Plotly = undefined
		try {
			let _mod = await import("./plotlyjs/plotlyjs-2.26.2.min.js")
			Plotly = _mod.default
		} catch (e) {
			console.log("Local load failed, trying with the web esm.sh version")
			let _mod = await import("https://esm.sh/plotly.js-dist-min@2.26.2/es2022/plotly.js-dist-min.mjs")
			Plotly = _mod.default
		}

		// Check if we have to force local mathjax font cache
		if (false && window?.MathJax?.config?.svg?.fontCache === 'global') {
			window.MathJax.config.svg.fontCache = 'local'
		}

		// Flag to check if this cell was  manually ran or reactively ran
const firstRun = this ? false : true
const CONTAINER = this ?? html`<div class='plutoplotly-container'>`
const PLOT = CONTAINER.querySelector('.js-plotly-plot') ?? CONTAINER.appendChild(html`<div>`)
const parent = CONTAINER.parentElement
// We use a controller to remove event listeners upon invalidation
const controller = new AbortController()
// We have to add this to keep supporting @bind with the old API using PLOT
PLOT.addEventListener('input', (e) => {
	CONTAINER.value = PLOT.value
	if (e.bubbles) {
		return
	}
	CONTAINER.dispatchEvent(new CustomEvent('input'))
}, { signal: controller.signal })

	// This create the style subdiv on first run
	firstRun && CONTAINER.appendChild(html`
	<style>
	.plutoplotly-container {
		width: 100%;
		height: 100%;
		min-height: 0;
		min-width: 0;
	}
	.plutoplotly-container .js-plotly-plot .plotly div {
		margin: 0 auto; // This centers the plot
	}
	.plutoplotly-container.popped-out {
		overflow: auto;
		z-index: 1000;
		position: fixed;
		resize: both;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		border-top-left-radius: 0px;
		border-top-right-radius: 0px;
	}
	.plutoplotly-clipboard-header {
		display: flex;
		flex-flow: row wrap;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-top-left-radius: 12px;
		border-top-right-radius: 12px;
		position: fixed;
		z-index: 1001;
		cursor: move;
		transform: translate(0px, -100%);
		padding: 5px;
	}
	.plutoplotly-clipboard-header span {
		display: inline-block;
		flex: 1
	}
	.plutoplotly-clipboard-header.hidden {
		display: none;
	}
	.clipboard-span {
		position: relative;
	}
	.clipboard-value {
		padding-right: 5px;
		padding-left: 2px;
		cursor: text;
	}
	.clipboard-span.format {
		display: none;
	}
	.clipboard-span.filename {
		flex: 0 0 100%;
		text-align: center;
		border-top: 3px solid var(--kbd-border-color);
		margin-top: 5px;
		display: none;
	}
	.plutoplotly-container.filesave .clipboard-span.filename {
		display: inline-block;
	}
	.clipboard-value.filename {
		margin-left: 3px;
		text-align: left;
		min-width: min(60%, min-content);
	}
	.plutoplotly-container.filesave .clipboard-span.format {
		display: inline-flex;
	}
	.clipboard-span.format .label {
		flex: 0 0 0;
	}
	.clipboard-value.format {
		position: relative;
		flex: 1 0 auto;
		min-width: 30px;
		margin-right: 10px;
	}
	div.format-options {
		display: inline-flex;
		flex-flow: column;
		position: absolute;
		background: var(--main-bg-color);
		border-radius: 12px;
		padding-left: 3px;
		z-index: 2000;
	}
	div.format-options:hover {
		cursor: pointer;
		border: 3px solid var(--kbd-border-color);
		padding: 3px;
		transform: translate(-3px, -6px);
	}
	div.format-options .format-option {
		display: none;
	}
	div.format-options:hover .format-option {
		display: inline-block;
	}
	.format-option:not(.selected) {
		margin-top: 3px;
	}
	div.format-options .format-option.selected {
		order: -1;
		display: inline-block;
	}
	.format-option:hover {
		background-color: var(--kbd-border-color);
	}
	span.config-value {
		font-weight: normal;
		color: var(--pluto-output-color);
		display: none;
		position: absolute;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		transform: translate(0px, calc(-100% - 10px));
		padding: 5px;
	}
	.label {
		user-select: none;
	}
	.label:hover span.config-value {
		display: inline-block;
		min-width: 150px;
	}
	.clipboard-span.matching-config .label {
		color: var(--cm-macro-color);
		font-weight: bold;
	}
	.clipboard-span.different-config .label {
		color: var(--cm-tag-color);
		font-weight: bold;
	}
</style>
`)

let original_height = plot_obj.layout.height
let original_width = plot_obj.layout.width
// For the height we have to also put a fixed value in case the plot is put on a non-fixed-size container (like the default wrapper)
// We define a variable to check whether we still have to remove the fixed height
let remove_container_size = firstRun
let container_height = original_height ?? PLOT.container_height ?? 400
CONTAINER.style.height = container_height + 'px'

// We create a Promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// We import interact for dragging/resizing
const { default: interact } = await import('https://esm.sh/interactjs@1.10.19')


function getImageOptions() {
  const o = plot_obj.config.toImageButtonOptions ?? {};
  return {
    format: o.format ?? "png",
    width: o.width ?? original_width,
    height: o.height ?? original_height,
    scale: o.scale ?? 1,
    filename: o.filename ?? "newplot",
  };
}

const CLIPBOARD_HEADER =
  CONTAINER.querySelector(".plutoplotly-clipboard-header") ??
  CONTAINER.insertAdjacentElement(
    "afterbegin",
    html`<div class="plutoplotly-clipboard-header hidden">
      <span class="clipboard-span format"
        ><span class="label">Format:</span
        ><span class="clipboard-value format"></span
      ></span>
      <span class="clipboard-span width"
        ><span class="label">Width:</span
        ><span class="clipboard-value width"></span>px</span
      >
      <span class="clipboard-span height"
        ><span class="label">Height:</span
        ><span class="clipboard-value height"></span>px</span
      >
      <span class="clipboard-span scale"
        ><span class="label">Scale:</span
        ><span class="clipboard-value scale"></span
      ></span>
      <button class="clipboard-span set">Set</button>
      <button class="clipboard-span unset">Unset</button>
      <span class="clipboard-span filename"
        ><span class="label">Filename:</span
        ><span class="clipboard-value filename"></span
      ></span>
    </div>`
  );

function checkConfigSync(container) {
  const valid_classes = [
    "missing-config",
    "matching-config",
    "different-config",
  ];
  function setClass(cl) {
    for (const name of valid_classes) {
      container.classList.toggle(name, name == cl);
    }
  }
  // We use the custom getters we'll set up in the container
  const { ui_value, config_value, config_span, key } = container;
  if (config_value === undefined) {
    setClass("missing-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> is not present in the config.`;
  } else if (ui_value == config_value) {
    setClass("matching-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has the same value in the config and in the header.`;
  } else {
    setClass("different-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has a different value (<em>${config_value}</em>) in the config.`;
  }
  // Add info about setting and unsetting
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click on the label <em><b>once</b></em> to set the current UI value in the config.`
  );
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click <em><b>twice</b></em> to remove this key from the config.`
  );
}

const valid_formats = ["png", "svg", "webp", "jpeg", "full-json"];
function initializeUIValueSpan(span, key, value) {
  const container = span.closest(".clipboard-span");
  span.contentEditable = key === "format" ? "false" : "true";
  let parse = (x) => x;
  let update = (x) => (span.textContent = x);
  if (key === "width" || key === "height") {
    parse = (x) => Math.round(parseFloat(x));
  } else if (key === "scale") {
    parse = parseFloat;
  } else if (key === "format") {
    // We remove contentEditable
    span.contentEditable = "false";
    // Here we first add the subspans for each option
    const opts_div = span.appendChild(html`<div class="format-options"></div>`);
    for (const fmt of valid_formats) {
      const opt = opts_div.appendChild(
        html`<span class="format-option ${fmt}">${fmt}</span>`
      );
      opt.onclick = (e) => {
        span.value = opt.textContent;
      };
    }
    parse = (x) => {
      return valid_formats.includes(x) ? x : localValue;
    };
    update = (x) => {
      for (const opt of opts_div.children) {
        opt.classList.toggle("selected", opt.textContent === x);
      }
    };
  } else {
    // We only have filename here
  }
  let localValue;
  Object.defineProperty(span, "value", {
    get: () => {
      return localValue;
    },
    set: (val) => {
      if (val !== "") {
        localValue = parse(val);
      }
      update(localValue);
      checkConfigSync(container);
    },
  });
  // We also assign a listener so that the editable is blurred when enter is pressed
  span.onkeydown = (e) => {
    if (e.keyCode === 13) {
      e.preventDefault();
      span.blur();
    }
  };
  span.value = value;
}

function initializeConfigValueSpan(span, key) {
  // Here we mostly want to define the setter and getter
  const container = span.closest(".clipboard-span");
  Object.defineProperty(span, "value", {
    get: () => {
      return plot_obj.config.toImageButtonOptions[key];
    },
    set: (val) => {
      // if undefined is passed, we remove the entry from the options
      if (val === undefined) {
        delete plot_obj.config.toImageButtonOptions[key];
      } else {
        plot_obj.config.toImageButtonOptions[key] = val;
      }
      checkConfigSync(container);
    },
  });
}

const config_spans = {};
for (const [key, value] of Object.entries(getImageOptions())) {
  const container = CLIPBOARD_HEADER.querySelector(`.clipboard-span.${key}`);
  const label = container.querySelector(".label");
  // We give the label a function that on single click will set the current value and with double click will unset it
  label.onclick = DualClick(
    () => {
      container.config_value = container.ui_value;
    },
    (e) => {
      console.log("e", e);
      e.preventDefault();
      container.config_value = undefined;
    }
  );
  const ui_value_span = container.querySelector(".clipboard-value");
  const config_value_span =
    container.querySelector(".config-value") ??
    label.insertAdjacentElement(
      "afterbegin",
      html`<span class="config-value"></span>`
    );
  // Assing the two spans as properties of the containing span
  container.ui_span = ui_value_span;
  container.config_span = config_value_span;
  container.key = key;
  config_spans[key] = container;
  if (firstRun) {
    plot_obj.config.toImageButtonOptions =
      plot_obj.config.toImageButtonOptions ?? {};
    // We do the initialization of the value span
    initializeUIValueSpan(ui_value_span, key, value);
    // Then we initialize the config value
    initializeConfigValueSpan(config_value_span, key);
    // We put some convenience getters/setters
    // ui_value forward
    Object.defineProperty(container, "ui_value", {
      get: () => ui_value_span.value,
      set: (val) => {
        ui_value_span.value = val;
      },
    });
    // config_value forward
    Object.defineProperty(container, "config_value", {
      get: () => config_value_span.value,
      set: (val) => {
        config_value_span.value = val;
      },
    });
  }
}

// These objects will contain the default value

// This code updates the image options in the PLOT config with the provided ones
function setImageOptions(o) {
  for (const [key, container] of Object.entries(config_spans)) {
    container.config_value = o[key];
  }
}
function unsetImageOptions() {
  setImageOptions({});
}

const set_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.set");
const unset_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.unset");
if (firstRun) {
  set_button.onclick = (e) => {
    for (const container of Object.values(config_spans)) {
      container.config_value = container.ui_value;
    }
  };
  unset_button.onclick = unsetImageOptions;
}

// We add a function to check if the clipboard is popped out
CONTAINER.isPoppedOut = () => {
  return CONTAINER.classList.contains("popped-out");
};

CLIPBOARD_HEADER.onmousedown = function (event) {
  if (event.target.matches("span.clipboard-value")) {
    console.log("We don't move!");
    return;
  }
  const start = {
    left: parseFloat(CONTAINER.style.left),
    top: parseFloat(CONTAINER.style.top),
    X: event.pageX,
    Y: event.pageY,
  };
  function moveAt(event, start) {
    const top = event.pageY - start.Y + start.top + "px";
    const left = event.pageX - start.X + start.left + "px";
    CLIPBOARD_HEADER.style.left = left;
    CONTAINER.style.left = left;
    CONTAINER.style.top = top;
  }

  // move our absolutely positioned ball under the pointer
  moveAt(event, start);
  function onMouseMove(event) {
    moveAt(event, start);
  }

  // We use this to remove the mousemove when clicking outside of the container
  const controller = new AbortController();

  // move the container on mousemove
  document.addEventListener("mousemove", onMouseMove, {
    signal: controller.signal,
  });
  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        cleanUp();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );

  function cleanUp() {
    console.log("cleaning up the plot move listener");
    controller.abort();
    CLIPBOARD_HEADER.onmouseup = null;
  }

  // (3) drop the ball, remove unneeded handlers
  CLIPBOARD_HEADER.onmouseup = cleanUp;
};

function sendToClipboard(blob) {
  if (!navigator.clipboard) {
    alert(
      "The Clipboard API does not seem to be available, make sure the Pluto notebook is being used from either localhost or an https source."
    );
  }
  navigator.clipboard
    .write([
      new ClipboardItem({
        // The key is determined dynamically based on the blob's type.
        [blob.type]: blob,
      }),
    ])
    .then(
      function () {
        console.log("Async: Copying to clipboard was successful!");
      },
      function (err) {
        console.error("Async: Could not copy text: ", err);
      }
    );
}

function copyImageToClipboard() {
  // We extract the image options from the provided parameters (if they exist)
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key. We also ignore format because the clipboard only supports png.
    if (val === undefined || key === "format") {
      continue;
    }
    config[key] = val;
  }
  Plotly.toImage(PLOT, config).then(function (dataUrl) {
    fetch(dataUrl)
      .then((res) => res.blob())
      .then((blob) => {
        const paste_receiver = document.querySelector('paste-receiver.plutoplotly')
        if (paste_receiver) {
          paste_receiver.attachImage(dataUrl, CONTAINER)
        }
        sendToClipboard(blob)
      });
  });
}

function saveImageToFile() {
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key.
    if (val === undefined) {
      continue;
    }
    config[key] = val;
  }
  Plotly.downloadImage(PLOT, config);
}

let container_rect = { width: 0, height: 0, top: 0, left: 0 };
function unpop_container(cl) {
  CONTAINER.classList.toggle("popped-out", false);
  CONTAINER.classList.toggle(cl, false);
  // We fix the height back to the value it had before popout, also setting the flag to signal that upon first resize we remove the fixed inline-style
  CONTAINER.style.height = container_rect.height + "px";
  remove_container_size = true;
  // We set the other fixed inline-styles to null
  CONTAINER.style.width = "";
  CONTAINER.style.top = "";
  CONTAINER.style.left = "";
  // We also remove the CLIPBOARD_HEADER
  CLIPBOARD_HEADER.style.width = "";
  CLIPBOARD_HEADER.style.left = "";
  // Finally we remove the hidden class to the header
  CLIPBOARD_HEADER.classList.toggle("hidden", true);
  return;
}
function popout_container(opts) {
  const cl = opts?.cl;
  const target_container_size = opts?.target_container_size ?? {};
  const target_plot_size = opts?.target_plot_size ?? {};
  if (CONTAINER.isPoppedOut()) {
    return unpop_container(cl);
  }
  CONTAINER.classList.toggle(cl, cl === undefined ? false : true);
  // We extract the current size of the container, save them and fix them
  const { width, height, top, left } = CONTAINER.getBoundingClientRect();
  container_rect = { width, height, top, left };
  // We save the current plot size before we pop as it will fill the screen
  const current_plot_size = {
    width: PLOT._fullLayout.width,
    height: PLOT._fullLayout.height,
  };
  // We have to save the pad data before popping so we can resize precisely
  const pad = {};
  pad.unpopped = getSizeData().container_pad;
  CONTAINER.classList.toggle("popped-out", true);
  pad.popped = getSizeData().container_pad;
  // We do top and left based on the current rect
  for (const key of ["top", "left"]) {
    const start_val = target_container_size[key] ?? container_rect[key];
    let offset = 0;
    for (const kind of ["padding", "border"]) {
      offset += pad.popped[kind][key] - pad.unpopped[kind][key];
    }
    CONTAINER.style[key] = start_val - offset + "px";
    if (key === "left") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  // We compute the width and height depending on eventual config data
  const csz = computeContainerSize({
    width:
      target_plot_size.width ??
      config_spans.width.config_value ??
      current_plot_size.width,
    height:
      target_plot_size.height ??
      config_spans.height.config_value ??
      current_plot_size.height,
  });
  for (const key of ["width", "height"]) {
    const val = target_container_size[key] ?? csz[key];
    CONTAINER.style[key] = val + "px";
    if (key === "width") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  CLIPBOARD_HEADER.classList.toggle("hidden", false);
  const controller = new AbortController();

  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        unpop_container();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );
}

CONTAINER.popOut = popout_container;

function DualClick(single_func, dbl_func) {
  let nclicks = 0;
  return function (...args) {
    nclicks += 1;
    if (nclicks > 1) {
      dbl_func(...args);
      nclicks = 0;
    } else {
      delay(300).then(() => {
        if (nclicks == 1) {
          single_func(...args);
        }
        nclicks = 0;
      });
    }
  };
}

// We remove the default download image button
plot_obj.config.modeBarButtonsToRemove = _.union(
  plot_obj.config.modeBarButtonsToRemove,
  ["toImage"]
);
// We add the custom button to the modebar
plot_obj.config.modeBarButtonsToAdd = _.union(
  plot_obj.config.modeBarButtonsToAdd,
  [
    {
      name: "Copy PNG to Clipboard",
      icon: {
        height: 520,
        width: 520,
        path: "M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z",
      },
      direction: "up",
      click: DualClick(copyImageToClipboard, () => {
        popout_container();
      }),
    },
    {
      name: "Download Image",
      icon: Plotly.Icons.camera,
      direction: "up",
      click: DualClick(saveImageToFile, () => {
        popout_container({ cl: "filesave" });
      }),
    },
  ]
);

function getOffsetData(el) {
  let cs = window.getComputedStyle(el, null);
  const odata = {
    padding: {
      left: parseFloat(cs.paddingLeft),
      right: parseFloat(cs.paddingRight),
      top: parseFloat(cs.paddingTop),
      bottom: parseFloat(cs.paddingBottom),
      width: parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight),
      height: parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom),
    },
    border: {
      left: parseFloat(cs.borderLeftWidth),
      right: parseFloat(cs.borderRightWidth),
      top: parseFloat(cs.borderTopWidth),
      bottom: parseFloat(cs.borderBottomWidth),
      width: parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth),
      height: parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth),
    }
  };
  if (el === PLOT) {
    // For the PLOT we also want to take into account the offset
    odata.offset = {
      top: PLOT.offsetParent == CONTAINER ? PLOT.offsetTop : 0,
      left: PLOT.offsetParent == CONTAINER ? PLOT.offsetLeft : 0,
    }
  }
  return odata;
}
function getSizeData() {
  const data = {
    plot_pad: getOffsetData(PLOT),
    plot_rect: PLOT.getBoundingClientRect(),
    container_pad: getOffsetData(CONTAINER),
    container_rect: CONTAINER.getBoundingClientRect(),
  };
  return data;
}
function computeContainerSize({ width, height }, sizeData = getSizeData()) {
  const computed_size = computePlotSize(sizeData);
  const offsets = computed_size.offsets;

  const plot_data = {
    width: width ?? computed_size.width,
    height: height ?? computed_size.height,
  };

  return {
    width: (width ?? computed_size.width) + offsets.width,
    height: (height ?? computed_size.height) + offsets.height,
    noChange: width == computed_size.width && height == computed_size.height,
  }
}

// This function will change the container size so that the resulting plot will be matching the provided specs
function changeContainerSize({ width, height }, sizeData = getSizeData()) {
  if (!CONTAINER.isPoppedOut()) {
    console.log("Tried to change container size when not popped, ignoring");
    return;
  }

  const csz = computeContainerSize({ width, height }, sizeData);

  if (csz.noChange) {
    console.log("Size is the same as current, ignoring");
    return
  }
  // We are now going to set he width and height of the container
  for (const key of ["width", "height"]) {
    CONTAINER.style[key] = csz[key] + "px";
  }
}
// We now create the function that will update the plot based on the values specified
function updateFromHeader() {
  const header_data = {
    height: config_spans.height.ui_value,
    width: config_spans.width.ui_value,
  };
  changeContainerSize(header_data);
}
// We assign this function to the onblur event of width and height
if (firstRun) {
  for (const container of Object.values(config_spans)) {
    container.ui_span.onblur = (e) => {
      container.ui_value = container.ui_span.textContent;
      updateFromHeader();
    };
  }
}
// This function computes the plot size to use for relayout as a function of the container size
function computePlotSize(data = getSizeData()) {
  // Remove Padding
  const { container_pad, plot_pad, container_rect } = data;
  const offsets = {
    width:
      plot_pad.padding.width +
      plot_pad.border.width +
      plot_pad.offset.left +
      container_pad.padding.width +
      container_pad.border.width,
    height:
      plot_pad.padding.height +
      plot_pad.border.height +
      plot_pad.offset.top +
      container_pad.padding.height +
      container_pad.border.height,
  };
  const sz = {
    width: Math.round(container_rect.width - offsets.width),
    height: Math.round(container_rect.height - offsets.height),
    offsets,
  };
  return sz;
}

// Create the resizeObserver to make the plot even more responsive! :magic:
const resizeObserver = new ResizeObserver((entries) => {
  const sizeData = getSizeData();
  const {container_rect, container_pad} = sizeData;
  let plot_size = computePlotSize(sizeData);
  // We save the height in the PLOT object
  PLOT.container_height = container_rect.height;
  // We deal with some stuff if the container is poppped
  CLIPBOARD_HEADER.style.width = container_rect.width + "px";
  CLIPBOARD_HEADER.style.left = container_rect.left + "px";
  config_spans.height.ui_value = plot_size.height;
  config_spans.width.ui_value = plot_size.width;
  /* 
		The addition of the invalid argument `plutoresize` seems to fix the problem with calling `relayout` simply with `{autosize: true}` as update breaking mouse relayout events tracking. 
		See https://github.com/plotly/plotly.js/issues/6156 for details
		*/
  let config = {
    // If this is popped out, we ignore the original width/height
    width: (CONTAINER.isPoppedOut() ? undefined : original_width) ?? plot_size.width,
    height: (CONTAINER.isPoppedOut() ? undefined : original_height) ?? plot_size.height,
    plutoresize: true,
  };
  Plotly.relayout(PLOT, config).then(() => {
    if (remove_container_size && !CONTAINER.isPoppedOut()) {
      // This is needed to avoid the first resize upon plot creation to already be without a fixed height
      CONTAINER.style.height = "";
      CONTAINER.style.width = "";
      remove_container_size = false;
    }
  });
});

resizeObserver.observe(CONTAINER);


Plotly.react(PLOT, plot_obj).then(() => {
	// Assign the Plotly event listeners
	for (const [key, listener_vec] of Object.entries(plotly_listeners)) {
		for (const listener of listener_vec) {
			PLOT.on(key, listener)
		}
	}
	// Assign the JS event listeners
	for (const [key, listener_vec] of Object.entries(js_listeners)) {
		for (const listener of listener_vec) {
			PLOT.addEventListener(key, listener, {
				signal: controller.signal
			})
		}
	}
}
)


invalidation.then(() => {
	// Remove all plotly listeners
	PLOT.removeAllListeners()
	// Remove all JS listeners
	controller.abort()
	// Remove the resizeObserver
	resizeObserver.disconnect()
})



		return CONTAINER
	</script>
</td><td align="center">	<script id='plot_4'>
		// We start by putting all the variable interpolation here at the beginning
		// We have to convert all typedarrays in the layout to normal arrays. See Issue #25
		// We use lodash for this for compactness
		function removeTypedArray(o) {
			return _.isTypedArray(o) ? Array.from(o) :
			_.isPlainObject(o) ? _.mapValues(o, removeTypedArray) : 
			o
		}

		// Publish the plot object to JS
		let plot_obj = _.update(/* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("c6e0de0c-3901-11f0-234e-bd09c571f662/369509f17cc5b5a"), "layout", removeTypedArray)
		// Get the plotly listeners
		const plotly_listeners = {}
		// Get the JS listeners
		const js_listeners = {}
		// Deal with eventual custom classes
		let custom_classlist = []


		// Load the plotly library
		let Plotly = undefined
		try {
			let _mod = await import("./plotlyjs/plotlyjs-2.26.2.min.js")
			Plotly = _mod.default
		} catch (e) {
			console.log("Local load failed, trying with the web esm.sh version")
			let _mod = await import("https://esm.sh/plotly.js-dist-min@2.26.2/es2022/plotly.js-dist-min.mjs")
			Plotly = _mod.default
		}

		// Check if we have to force local mathjax font cache
		if (false && window?.MathJax?.config?.svg?.fontCache === 'global') {
			window.MathJax.config.svg.fontCache = 'local'
		}

		// Flag to check if this cell was  manually ran or reactively ran
const firstRun = this ? false : true
const CONTAINER = this ?? html`<div class='plutoplotly-container'>`
const PLOT = CONTAINER.querySelector('.js-plotly-plot') ?? CONTAINER.appendChild(html`<div>`)
const parent = CONTAINER.parentElement
// We use a controller to remove event listeners upon invalidation
const controller = new AbortController()
// We have to add this to keep supporting @bind with the old API using PLOT
PLOT.addEventListener('input', (e) => {
	CONTAINER.value = PLOT.value
	if (e.bubbles) {
		return
	}
	CONTAINER.dispatchEvent(new CustomEvent('input'))
}, { signal: controller.signal })

	// This create the style subdiv on first run
	firstRun && CONTAINER.appendChild(html`
	<style>
	.plutoplotly-container {
		width: 100%;
		height: 100%;
		min-height: 0;
		min-width: 0;
	}
	.plutoplotly-container .js-plotly-plot .plotly div {
		margin: 0 auto; // This centers the plot
	}
	.plutoplotly-container.popped-out {
		overflow: auto;
		z-index: 1000;
		position: fixed;
		resize: both;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		border-top-left-radius: 0px;
		border-top-right-radius: 0px;
	}
	.plutoplotly-clipboard-header {
		display: flex;
		flex-flow: row wrap;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-top-left-radius: 12px;
		border-top-right-radius: 12px;
		position: fixed;
		z-index: 1001;
		cursor: move;
		transform: translate(0px, -100%);
		padding: 5px;
	}
	.plutoplotly-clipboard-header span {
		display: inline-block;
		flex: 1
	}
	.plutoplotly-clipboard-header.hidden {
		display: none;
	}
	.clipboard-span {
		position: relative;
	}
	.clipboard-value {
		padding-right: 5px;
		padding-left: 2px;
		cursor: text;
	}
	.clipboard-span.format {
		display: none;
	}
	.clipboard-span.filename {
		flex: 0 0 100%;
		text-align: center;
		border-top: 3px solid var(--kbd-border-color);
		margin-top: 5px;
		display: none;
	}
	.plutoplotly-container.filesave .clipboard-span.filename {
		display: inline-block;
	}
	.clipboard-value.filename {
		margin-left: 3px;
		text-align: left;
		min-width: min(60%, min-content);
	}
	.plutoplotly-container.filesave .clipboard-span.format {
		display: inline-flex;
	}
	.clipboard-span.format .label {
		flex: 0 0 0;
	}
	.clipboard-value.format {
		position: relative;
		flex: 1 0 auto;
		min-width: 30px;
		margin-right: 10px;
	}
	div.format-options {
		display: inline-flex;
		flex-flow: column;
		position: absolute;
		background: var(--main-bg-color);
		border-radius: 12px;
		padding-left: 3px;
		z-index: 2000;
	}
	div.format-options:hover {
		cursor: pointer;
		border: 3px solid var(--kbd-border-color);
		padding: 3px;
		transform: translate(-3px, -6px);
	}
	div.format-options .format-option {
		display: none;
	}
	div.format-options:hover .format-option {
		display: inline-block;
	}
	.format-option:not(.selected) {
		margin-top: 3px;
	}
	div.format-options .format-option.selected {
		order: -1;
		display: inline-block;
	}
	.format-option:hover {
		background-color: var(--kbd-border-color);
	}
	span.config-value {
		font-weight: normal;
		color: var(--pluto-output-color);
		display: none;
		position: absolute;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		transform: translate(0px, calc(-100% - 10px));
		padding: 5px;
	}
	.label {
		user-select: none;
	}
	.label:hover span.config-value {
		display: inline-block;
		min-width: 150px;
	}
	.clipboard-span.matching-config .label {
		color: var(--cm-macro-color);
		font-weight: bold;
	}
	.clipboard-span.different-config .label {
		color: var(--cm-tag-color);
		font-weight: bold;
	}
</style>
`)

let original_height = plot_obj.layout.height
let original_width = plot_obj.layout.width
// For the height we have to also put a fixed value in case the plot is put on a non-fixed-size container (like the default wrapper)
// We define a variable to check whether we still have to remove the fixed height
let remove_container_size = firstRun
let container_height = original_height ?? PLOT.container_height ?? 400
CONTAINER.style.height = container_height + 'px'

// We create a Promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// We import interact for dragging/resizing
const { default: interact } = await import('https://esm.sh/interactjs@1.10.19')


function getImageOptions() {
  const o = plot_obj.config.toImageButtonOptions ?? {};
  return {
    format: o.format ?? "png",
    width: o.width ?? original_width,
    height: o.height ?? original_height,
    scale: o.scale ?? 1,
    filename: o.filename ?? "newplot",
  };
}

const CLIPBOARD_HEADER =
  CONTAINER.querySelector(".plutoplotly-clipboard-header") ??
  CONTAINER.insertAdjacentElement(
    "afterbegin",
    html`<div class="plutoplotly-clipboard-header hidden">
      <span class="clipboard-span format"
        ><span class="label">Format:</span
        ><span class="clipboard-value format"></span
      ></span>
      <span class="clipboard-span width"
        ><span class="label">Width:</span
        ><span class="clipboard-value width"></span>px</span
      >
      <span class="clipboard-span height"
        ><span class="label">Height:</span
        ><span class="clipboard-value height"></span>px</span
      >
      <span class="clipboard-span scale"
        ><span class="label">Scale:</span
        ><span class="clipboard-value scale"></span
      ></span>
      <button class="clipboard-span set">Set</button>
      <button class="clipboard-span unset">Unset</button>
      <span class="clipboard-span filename"
        ><span class="label">Filename:</span
        ><span class="clipboard-value filename"></span
      ></span>
    </div>`
  );

function checkConfigSync(container) {
  const valid_classes = [
    "missing-config",
    "matching-config",
    "different-config",
  ];
  function setClass(cl) {
    for (const name of valid_classes) {
      container.classList.toggle(name, name == cl);
    }
  }
  // We use the custom getters we'll set up in the container
  const { ui_value, config_value, config_span, key } = container;
  if (config_value === undefined) {
    setClass("missing-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> is not present in the config.`;
  } else if (ui_value == config_value) {
    setClass("matching-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has the same value in the config and in the header.`;
  } else {
    setClass("different-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has a different value (<em>${config_value}</em>) in the config.`;
  }
  // Add info about setting and unsetting
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click on the label <em><b>once</b></em> to set the current UI value in the config.`
  );
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click <em><b>twice</b></em> to remove this key from the config.`
  );
}

const valid_formats = ["png", "svg", "webp", "jpeg", "full-json"];
function initializeUIValueSpan(span, key, value) {
  const container = span.closest(".clipboard-span");
  span.contentEditable = key === "format" ? "false" : "true";
  let parse = (x) => x;
  let update = (x) => (span.textContent = x);
  if (key === "width" || key === "height") {
    parse = (x) => Math.round(parseFloat(x));
  } else if (key === "scale") {
    parse = parseFloat;
  } else if (key === "format") {
    // We remove contentEditable
    span.contentEditable = "false";
    // Here we first add the subspans for each option
    const opts_div = span.appendChild(html`<div class="format-options"></div>`);
    for (const fmt of valid_formats) {
      const opt = opts_div.appendChild(
        html`<span class="format-option ${fmt}">${fmt}</span>`
      );
      opt.onclick = (e) => {
        span.value = opt.textContent;
      };
    }
    parse = (x) => {
      return valid_formats.includes(x) ? x : localValue;
    };
    update = (x) => {
      for (const opt of opts_div.children) {
        opt.classList.toggle("selected", opt.textContent === x);
      }
    };
  } else {
    // We only have filename here
  }
  let localValue;
  Object.defineProperty(span, "value", {
    get: () => {
      return localValue;
    },
    set: (val) => {
      if (val !== "") {
        localValue = parse(val);
      }
      update(localValue);
      checkConfigSync(container);
    },
  });
  // We also assign a listener so that the editable is blurred when enter is pressed
  span.onkeydown = (e) => {
    if (e.keyCode === 13) {
      e.preventDefault();
      span.blur();
    }
  };
  span.value = value;
}

function initializeConfigValueSpan(span, key) {
  // Here we mostly want to define the setter and getter
  const container = span.closest(".clipboard-span");
  Object.defineProperty(span, "value", {
    get: () => {
      return plot_obj.config.toImageButtonOptions[key];
    },
    set: (val) => {
      // if undefined is passed, we remove the entry from the options
      if (val === undefined) {
        delete plot_obj.config.toImageButtonOptions[key];
      } else {
        plot_obj.config.toImageButtonOptions[key] = val;
      }
      checkConfigSync(container);
    },
  });
}

const config_spans = {};
for (const [key, value] of Object.entries(getImageOptions())) {
  const container = CLIPBOARD_HEADER.querySelector(`.clipboard-span.${key}`);
  const label = container.querySelector(".label");
  // We give the label a function that on single click will set the current value and with double click will unset it
  label.onclick = DualClick(
    () => {
      container.config_value = container.ui_value;
    },
    (e) => {
      console.log("e", e);
      e.preventDefault();
      container.config_value = undefined;
    }
  );
  const ui_value_span = container.querySelector(".clipboard-value");
  const config_value_span =
    container.querySelector(".config-value") ??
    label.insertAdjacentElement(
      "afterbegin",
      html`<span class="config-value"></span>`
    );
  // Assing the two spans as properties of the containing span
  container.ui_span = ui_value_span;
  container.config_span = config_value_span;
  container.key = key;
  config_spans[key] = container;
  if (firstRun) {
    plot_obj.config.toImageButtonOptions =
      plot_obj.config.toImageButtonOptions ?? {};
    // We do the initialization of the value span
    initializeUIValueSpan(ui_value_span, key, value);
    // Then we initialize the config value
    initializeConfigValueSpan(config_value_span, key);
    // We put some convenience getters/setters
    // ui_value forward
    Object.defineProperty(container, "ui_value", {
      get: () => ui_value_span.value,
      set: (val) => {
        ui_value_span.value = val;
      },
    });
    // config_value forward
    Object.defineProperty(container, "config_value", {
      get: () => config_value_span.value,
      set: (val) => {
        config_value_span.value = val;
      },
    });
  }
}

// These objects will contain the default value

// This code updates the image options in the PLOT config with the provided ones
function setImageOptions(o) {
  for (const [key, container] of Object.entries(config_spans)) {
    container.config_value = o[key];
  }
}
function unsetImageOptions() {
  setImageOptions({});
}

const set_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.set");
const unset_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.unset");
if (firstRun) {
  set_button.onclick = (e) => {
    for (const container of Object.values(config_spans)) {
      container.config_value = container.ui_value;
    }
  };
  unset_button.onclick = unsetImageOptions;
}

// We add a function to check if the clipboard is popped out
CONTAINER.isPoppedOut = () => {
  return CONTAINER.classList.contains("popped-out");
};

CLIPBOARD_HEADER.onmousedown = function (event) {
  if (event.target.matches("span.clipboard-value")) {
    console.log("We don't move!");
    return;
  }
  const start = {
    left: parseFloat(CONTAINER.style.left),
    top: parseFloat(CONTAINER.style.top),
    X: event.pageX,
    Y: event.pageY,
  };
  function moveAt(event, start) {
    const top = event.pageY - start.Y + start.top + "px";
    const left = event.pageX - start.X + start.left + "px";
    CLIPBOARD_HEADER.style.left = left;
    CONTAINER.style.left = left;
    CONTAINER.style.top = top;
  }

  // move our absolutely positioned ball under the pointer
  moveAt(event, start);
  function onMouseMove(event) {
    moveAt(event, start);
  }

  // We use this to remove the mousemove when clicking outside of the container
  const controller = new AbortController();

  // move the container on mousemove
  document.addEventListener("mousemove", onMouseMove, {
    signal: controller.signal,
  });
  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        cleanUp();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );

  function cleanUp() {
    console.log("cleaning up the plot move listener");
    controller.abort();
    CLIPBOARD_HEADER.onmouseup = null;
  }

  // (3) drop the ball, remove unneeded handlers
  CLIPBOARD_HEADER.onmouseup = cleanUp;
};

function sendToClipboard(blob) {
  if (!navigator.clipboard) {
    alert(
      "The Clipboard API does not seem to be available, make sure the Pluto notebook is being used from either localhost or an https source."
    );
  }
  navigator.clipboard
    .write([
      new ClipboardItem({
        // The key is determined dynamically based on the blob's type.
        [blob.type]: blob,
      }),
    ])
    .then(
      function () {
        console.log("Async: Copying to clipboard was successful!");
      },
      function (err) {
        console.error("Async: Could not copy text: ", err);
      }
    );
}

function copyImageToClipboard() {
  // We extract the image options from the provided parameters (if they exist)
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key. We also ignore format because the clipboard only supports png.
    if (val === undefined || key === "format") {
      continue;
    }
    config[key] = val;
  }
  Plotly.toImage(PLOT, config).then(function (dataUrl) {
    fetch(dataUrl)
      .then((res) => res.blob())
      .then((blob) => {
        const paste_receiver = document.querySelector('paste-receiver.plutoplotly')
        if (paste_receiver) {
          paste_receiver.attachImage(dataUrl, CONTAINER)
        }
        sendToClipboard(blob)
      });
  });
}

function saveImageToFile() {
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key.
    if (val === undefined) {
      continue;
    }
    config[key] = val;
  }
  Plotly.downloadImage(PLOT, config);
}

let container_rect = { width: 0, height: 0, top: 0, left: 0 };
function unpop_container(cl) {
  CONTAINER.classList.toggle("popped-out", false);
  CONTAINER.classList.toggle(cl, false);
  // We fix the height back to the value it had before popout, also setting the flag to signal that upon first resize we remove the fixed inline-style
  CONTAINER.style.height = container_rect.height + "px";
  remove_container_size = true;
  // We set the other fixed inline-styles to null
  CONTAINER.style.width = "";
  CONTAINER.style.top = "";
  CONTAINER.style.left = "";
  // We also remove the CLIPBOARD_HEADER
  CLIPBOARD_HEADER.style.width = "";
  CLIPBOARD_HEADER.style.left = "";
  // Finally we remove the hidden class to the header
  CLIPBOARD_HEADER.classList.toggle("hidden", true);
  return;
}
function popout_container(opts) {
  const cl = opts?.cl;
  const target_container_size = opts?.target_container_size ?? {};
  const target_plot_size = opts?.target_plot_size ?? {};
  if (CONTAINER.isPoppedOut()) {
    return unpop_container(cl);
  }
  CONTAINER.classList.toggle(cl, cl === undefined ? false : true);
  // We extract the current size of the container, save them and fix them
  const { width, height, top, left } = CONTAINER.getBoundingClientRect();
  container_rect = { width, height, top, left };
  // We save the current plot size before we pop as it will fill the screen
  const current_plot_size = {
    width: PLOT._fullLayout.width,
    height: PLOT._fullLayout.height,
  };
  // We have to save the pad data before popping so we can resize precisely
  const pad = {};
  pad.unpopped = getSizeData().container_pad;
  CONTAINER.classList.toggle("popped-out", true);
  pad.popped = getSizeData().container_pad;
  // We do top and left based on the current rect
  for (const key of ["top", "left"]) {
    const start_val = target_container_size[key] ?? container_rect[key];
    let offset = 0;
    for (const kind of ["padding", "border"]) {
      offset += pad.popped[kind][key] - pad.unpopped[kind][key];
    }
    CONTAINER.style[key] = start_val - offset + "px";
    if (key === "left") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  // We compute the width and height depending on eventual config data
  const csz = computeContainerSize({
    width:
      target_plot_size.width ??
      config_spans.width.config_value ??
      current_plot_size.width,
    height:
      target_plot_size.height ??
      config_spans.height.config_value ??
      current_plot_size.height,
  });
  for (const key of ["width", "height"]) {
    const val = target_container_size[key] ?? csz[key];
    CONTAINER.style[key] = val + "px";
    if (key === "width") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  CLIPBOARD_HEADER.classList.toggle("hidden", false);
  const controller = new AbortController();

  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        unpop_container();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );
}

CONTAINER.popOut = popout_container;

function DualClick(single_func, dbl_func) {
  let nclicks = 0;
  return function (...args) {
    nclicks += 1;
    if (nclicks > 1) {
      dbl_func(...args);
      nclicks = 0;
    } else {
      delay(300).then(() => {
        if (nclicks == 1) {
          single_func(...args);
        }
        nclicks = 0;
      });
    }
  };
}

// We remove the default download image button
plot_obj.config.modeBarButtonsToRemove = _.union(
  plot_obj.config.modeBarButtonsToRemove,
  ["toImage"]
);
// We add the custom button to the modebar
plot_obj.config.modeBarButtonsToAdd = _.union(
  plot_obj.config.modeBarButtonsToAdd,
  [
    {
      name: "Copy PNG to Clipboard",
      icon: {
        height: 520,
        width: 520,
        path: "M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z",
      },
      direction: "up",
      click: DualClick(copyImageToClipboard, () => {
        popout_container();
      }),
    },
    {
      name: "Download Image",
      icon: Plotly.Icons.camera,
      direction: "up",
      click: DualClick(saveImageToFile, () => {
        popout_container({ cl: "filesave" });
      }),
    },
  ]
);

function getOffsetData(el) {
  let cs = window.getComputedStyle(el, null);
  const odata = {
    padding: {
      left: parseFloat(cs.paddingLeft),
      right: parseFloat(cs.paddingRight),
      top: parseFloat(cs.paddingTop),
      bottom: parseFloat(cs.paddingBottom),
      width: parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight),
      height: parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom),
    },
    border: {
      left: parseFloat(cs.borderLeftWidth),
      right: parseFloat(cs.borderRightWidth),
      top: parseFloat(cs.borderTopWidth),
      bottom: parseFloat(cs.borderBottomWidth),
      width: parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth),
      height: parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth),
    }
  };
  if (el === PLOT) {
    // For the PLOT we also want to take into account the offset
    odata.offset = {
      top: PLOT.offsetParent == CONTAINER ? PLOT.offsetTop : 0,
      left: PLOT.offsetParent == CONTAINER ? PLOT.offsetLeft : 0,
    }
  }
  return odata;
}
function getSizeData() {
  const data = {
    plot_pad: getOffsetData(PLOT),
    plot_rect: PLOT.getBoundingClientRect(),
    container_pad: getOffsetData(CONTAINER),
    container_rect: CONTAINER.getBoundingClientRect(),
  };
  return data;
}
function computeContainerSize({ width, height }, sizeData = getSizeData()) {
  const computed_size = computePlotSize(sizeData);
  const offsets = computed_size.offsets;

  const plot_data = {
    width: width ?? computed_size.width,
    height: height ?? computed_size.height,
  };

  return {
    width: (width ?? computed_size.width) + offsets.width,
    height: (height ?? computed_size.height) + offsets.height,
    noChange: width == computed_size.width && height == computed_size.height,
  }
}

// This function will change the container size so that the resulting plot will be matching the provided specs
function changeContainerSize({ width, height }, sizeData = getSizeData()) {
  if (!CONTAINER.isPoppedOut()) {
    console.log("Tried to change container size when not popped, ignoring");
    return;
  }

  const csz = computeContainerSize({ width, height }, sizeData);

  if (csz.noChange) {
    console.log("Size is the same as current, ignoring");
    return
  }
  // We are now going to set he width and height of the container
  for (const key of ["width", "height"]) {
    CONTAINER.style[key] = csz[key] + "px";
  }
}
// We now create the function that will update the plot based on the values specified
function updateFromHeader() {
  const header_data = {
    height: config_spans.height.ui_value,
    width: config_spans.width.ui_value,
  };
  changeContainerSize(header_data);
}
// We assign this function to the onblur event of width and height
if (firstRun) {
  for (const container of Object.values(config_spans)) {
    container.ui_span.onblur = (e) => {
      container.ui_value = container.ui_span.textContent;
      updateFromHeader();
    };
  }
}
// This function computes the plot size to use for relayout as a function of the container size
function computePlotSize(data = getSizeData()) {
  // Remove Padding
  const { container_pad, plot_pad, container_rect } = data;
  const offsets = {
    width:
      plot_pad.padding.width +
      plot_pad.border.width +
      plot_pad.offset.left +
      container_pad.padding.width +
      container_pad.border.width,
    height:
      plot_pad.padding.height +
      plot_pad.border.height +
      plot_pad.offset.top +
      container_pad.padding.height +
      container_pad.border.height,
  };
  const sz = {
    width: Math.round(container_rect.width - offsets.width),
    height: Math.round(container_rect.height - offsets.height),
    offsets,
  };
  return sz;
}

// Create the resizeObserver to make the plot even more responsive! :magic:
const resizeObserver = new ResizeObserver((entries) => {
  const sizeData = getSizeData();
  const {container_rect, container_pad} = sizeData;
  let plot_size = computePlotSize(sizeData);
  // We save the height in the PLOT object
  PLOT.container_height = container_rect.height;
  // We deal with some stuff if the container is poppped
  CLIPBOARD_HEADER.style.width = container_rect.width + "px";
  CLIPBOARD_HEADER.style.left = container_rect.left + "px";
  config_spans.height.ui_value = plot_size.height;
  config_spans.width.ui_value = plot_size.width;
  /* 
		The addition of the invalid argument `plutoresize` seems to fix the problem with calling `relayout` simply with `{autosize: true}` as update breaking mouse relayout events tracking. 
		See https://github.com/plotly/plotly.js/issues/6156 for details
		*/
  let config = {
    // If this is popped out, we ignore the original width/height
    width: (CONTAINER.isPoppedOut() ? undefined : original_width) ?? plot_size.width,
    height: (CONTAINER.isPoppedOut() ? undefined : original_height) ?? plot_size.height,
    plutoresize: true,
  };
  Plotly.relayout(PLOT, config).then(() => {
    if (remove_container_size && !CONTAINER.isPoppedOut()) {
      // This is needed to avoid the first resize upon plot creation to already be without a fixed height
      CONTAINER.style.height = "";
      CONTAINER.style.width = "";
      remove_container_size = false;
    }
  });
});

resizeObserver.observe(CONTAINER);


Plotly.react(PLOT, plot_obj).then(() => {
	// Assign the Plotly event listeners
	for (const [key, listener_vec] of Object.entries(plotly_listeners)) {
		for (const listener of listener_vec) {
			PLOT.on(key, listener)
		}
	}
	// Assign the JS event listeners
	for (const [key, listener_vec] of Object.entries(js_listeners)) {
		for (const listener of listener_vec) {
			PLOT.addEventListener(key, listener, {
				signal: controller.signal
			})
		}
	}
}
)


invalidation.then(() => {
	// Remove all plotly listeners
	PLOT.removeAllListeners()
	// Remove all JS listeners
	controller.abort()
	// Remove the resizeObserver
	resizeObserver.disconnect()
})



		return CONTAINER
	</script>
</td></tr></table>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš)Sç¼°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$b040f245-b2d6-4ec6-aa7f-511c54aabd0d¹depends_on_disabled_cellsÂ§runtimeÎ ÂÙµpublished_object_keys”Ù5c6e0de0c-3901-11f0-234e-bd09c571f662/cfb9dac3af175b34Ù5c6e0de0c-3901-11f0-234e-bd09c571f662/4632010f9ca3f26eÙ4c6e0de0c-3901-11f0-234e-bd09c571f662/369509f17cc5b5aÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/70ef6091712c9d41¸depends_on_skipped_cellsÂ§erroredÂÙ$7cdf4142-82fe-4aa6-9665-84a1eef5d038Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ[<bond def="race_1_2" unique_id="IuPL3p1uhwlR"><input type="button" value="Run race"></bond>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš2|C°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$7cdf4142-82fe-4aa6-9665-84a1eef5d038¹depends_on_disabled_cellsÂ§runtimeÎ µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$3d10f89f-876e-4d25-b8d6-34ce5c99eb8cŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚ³—	<div style = "display: flex;">
	<div>
Race finished in 79 steps
<div style="background-color: white; color: black;">
	<div style="display:flex; align-items: flex-start">
	<div class = "track">
		<div class = "start" vx = "0" vy = "0" dvx = "0" dvy = "0" style="grid-column-start: 4; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 8; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "1" dvy = "1" style="grid-column-start: 9; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 6; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 5; grid-row-start: 1;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 11;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 7; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 24;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 32;"></div><div class = "" vx = "0" vy = "4" dvx = "-1" dvy = "0" style="grid-column-start: 7; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 25;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 5; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 26;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "1" style="grid-column-start: 6; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 23;"></div><div class = "" vx = "3" vy = "1" dvx = "1" dvy = "-1" style="grid-column-start: 14; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 31;"></div><div class = "" vx = "1" vy = "3" dvx = "1" dvy = "0" style="grid-column-start: 7; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 13;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 12;"></div><div class = "" vx = "1" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 9; grid-row-start: 27;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 8; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 32;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "-1" style="grid-column-start: 6; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 8;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "1" style="grid-column-start: 7; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 7;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 9; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 32;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 28;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 5; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 28;"></div><div class = "" vx = "1" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 9; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 6;"></div><div class = "" vx = "2" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 11; grid-row-start: 28;"></div><div class = "" vx = "1" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 8; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 14;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 5; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 16;"></div><div class = "" vx = "2" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 9; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 29;"></div><div class = "" vx = "1" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 9; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 28;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 8; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 16;"></div><div class = "" vx = "0" vy = "4" dvx = "0" dvy = "-1" style="grid-column-start: 7; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 24;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "-1" style="grid-column-start: 6; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 19;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 7; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 6;"></div><div class = "" vx = "2" vy = "3" dvx = "1" dvy = "0" style="grid-column-start: 9; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 29;"></div><div class = "" vx = "1" vy = "0" dvx = "0" dvy = "1" style="grid-column-start: 8; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "1" style="grid-column-start: 7; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 28;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 28;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 29;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 31;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 30;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 27;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 32;"></div>
	</div>
	Finish <br> line
	</div>
	<div>Starting line</div>
</div>
</div>

	<div>
Race finished in 32 steps
<div style="background-color: white; color: black;">
	<div style="display:flex; align-items: flex-start">
	<div class = "track">
		<div class = "start" vx = "0" vy = "0" dvx = "0" dvy = "0" style="grid-column-start: 4; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "0" dvy = "1" style="grid-column-start: 8; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 9; grid-row-start: 1;"></div><div class = "start" style="grid-column-start: 6; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 5; grid-row-start: 1;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 11;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 7; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 24;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 32;"></div><div class = "" vx = "0" vy = "4" dvx = "-1" dvy = "0" style="grid-column-start: 7; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 25;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 5; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 26;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "1" style="grid-column-start: 6; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 23;"></div><div class = "" vx = "3" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 14; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 31;"></div><div class = "" vx = "1" vy = "3" dvx = "1" dvy = "0" style="grid-column-start: 7; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 13;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 12;"></div><div class = "" vx = "1" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 9; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 26;"></div><div class = "" vx = "2" vy = "3" dvx = "-1" dvy = "1" style="grid-column-start: 9; grid-row-start: 8;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "1" style="grid-column-start: 7; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 21;"></div><div class = "" vx = "2" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 7; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 32;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 28;"></div><div class = "" vx = "1" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 5; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 28;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 6;"></div><div class = "" vx = "2" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 11; grid-row-start: 28;"></div><div class = "" vx = "1" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 8; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 14;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 5; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 16;"></div><div class = "" vx = "1" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 16;"></div><div class = "" vx = "0" vy = "4" dvx = "0" dvy = "-1" style="grid-column-start: 7; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 24;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "-1" style="grid-column-start: 6; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 19;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 7; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 6;"></div><div class = "" vx = "2" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 9; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 10;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 4; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "1" style="grid-column-start: 7; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 28;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 28;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 29;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 31;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 30;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 27;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 32;"></div>
	</div>
	Finish <br> line
	</div>
	<div>Starting line</div>
</div>
</div>

	</div>
¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš2ÂAö°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$3d10f89f-876e-4d25-b8d6-34ce5c99eb8c¹depends_on_disabled_cellsÂ§runtimeÎ —Qµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$772b4dd6-870c-4a16-937c-701d5bb5da44Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ]<bond def="run3_1" unique_id="fn&#43;oTFKyWHQR"><input type="button" value="Run Race"></bond>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš3|(ö°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$772b4dd6-870c-4a16-937c-701d5bb5da44¹depends_on_disabled_cellsÂ§runtimeÎ 
Þ¤µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$1aaf3827-5851-4156-a7e6-14f5e4d00238Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙA<div class="markdown"><h4>Random Policy Visualization</h4>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"*@B°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$1aaf3827-5851-4156-a7e6-14f5e4d00238¹depends_on_disabled_cellsÂ§runtimeÎ Ùâµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$d6e7cc6d-f397-4bdf-974e-9a16922393ddŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ7create_policy_function (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš/ÙÐÐ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$d6e7cc6d-f397-4bdf-974e-9a16922393dd¹depends_on_disabled_cellsÂ§runtimeÎ +¯µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$1951fc4c-acc4-49a6-a907-7447ff0f430aŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙY<div class="markdown"><p>Example trajectories after training for 1000 episodes</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš2|?)°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$1951fc4c-acc4-49a6-a907-7447ff0f430a¹depends_on_disabled_cellsÂ§runtimeÎ 4Ôµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$660ef59c-205c-44c2-9c46-5a74e09497abŠ¦queuedÂ¤logs�§runningÂ¦output†¤body ¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš)T4¤°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$660ef59c-205c-44c2-9c46-5a74e09497ab¹depends_on_disabled_cellsÂ§runtimeÎ ¿£µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$a47474b0-f262-4453-a116-addc3a09119eŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyƒ¨elements“’’…¦prefix§Float32¨elements›’’£0.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain’	’£0.0ªtext/plain¤more’Î B@’©-0.496586ªtext/plain¤type¥Array¬prefix_short ¨objectid°4786314f961a1d2aÙ!application/vnd.pluto.tree+object’’Ù´2Ã—200 Matrix{Float32}:
 -0.496586  -0.670122  -0.2741    -0.579848  â€¦  -1.0       -0.100602  -1.0
 -0.796052  -0.775505  -0.293124  -0.300296      0.945649   0.897465   0.823866ªtext/plain’’…¦prefix§Float32¨elements›’’£2.0ªtext/plain’’£0.0ªtext/plain’’£2.0ªtext/plain’’£2.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain’	’£2.0ªtext/plain¤more’Î B@’£0.0ªtext/plain¤type¥Array¬prefix_short ¨objectid°a24a12c04ba1deaaÙ!application/vnd.pluto.tree+object¤type¥Tuple¨objectid°be8778fac26ed8e6¤mimeÙ!application/vnd.pluto.tree+object¬rootassignee¨q_offpol²last_run_timestampËAÚš.!¼¾°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$a47474b0-f262-4453-a116-addc3a09119e¹depends_on_disabled_cellsÂ§runtimeÎ2*•�µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$acb270a1-e2b9-46bc-9a52-9f66f1cca17cŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚ‹<bond def="mcÏµs1" unique_id="dJACw8LFTPeE"><span style='display: contents;'>
	<span style='display: contents;'><div class="markdown"><table><tr><th align="center">Number of Episodes</th><th align="center">Ïµ</th><th align="center">Decay Ïµ</th></tr><tr><td align="center"><pl-combined-child key='nfejuiapbp' style='display: contents;'><input type='number' min='1' step='1' max='10000000' value='1000'></pl-combined-child></td><td align="center"><pl-combined-child key='nfejuiapbp' style='display: contents;'><input type='number' min='0.001' step='0.001' max='1.0' value='0.01'></pl-combined-child></td><td align="center"><pl-combined-child key='nfejuiapbp' style='display: contents;'><input type="checkbox"></pl-combined-child></td></tr></table>
</div><script id='nfejuiapbp'>
const div = currentScript.parentElement
let key = "nfejuiapbp"
const inputs = div.querySelectorAll(`pl-combined-child[key='${key}'] > *:first-child`)

const values = Array(inputs.length)

inputs.forEach(async (el,i) => {
	el.oninput = (e) => {
		e.stopPropagation()
	}
	const gen = Generators.input(el)
	while(true) {
		values[i] = await gen.next().value
		div.dispatchEvent(new CustomEvent("input", {}))
	}
})


let set_input_value = (() => {
	let result = null
	try {
	result = setBoundElementValueLikePluto
} catch (e) {
	result = ((input, new_value) => {
	// fallback in case https://github.com/fonsp/Pluto.jl/pull/1755 is not available
    if (new_value == null) {
        //@ts-ignore
        input.value = new_value
        return
    }
    if (input instanceof HTMLInputElement) {
        switch (input.type) {
            case "range":
            case "number": {
                if (input.valueAsNumber !== new_value) {
                    input.valueAsNumber = new_value
                }
                return
            }
            case "date": {
                if (input.valueAsDate == null || Number(input.valueAsDate) !== Number(new_value)) {
                    input.valueAsDate = new_value
                }
                return
            }
            case "checkbox": {
                if (input.checked !== new_value) {
                    input.checked = new_value
                }
                return
            }
            case "file": {
                // Can't set files :(
                return
            }
        }
    } else if (input instanceof HTMLSelectElement && input.multiple) {
        for (let option of Array.from(input.options)) {
            option.selected = new_value.includes(option.value)
        }
        return
    }
    //@ts-ignore
    if (input.value !== new_value) {
        //@ts-ignore
        input.value = new_value
    }
})
}
return result
})()


Object.defineProperty(div, 'value', {
	get: () => values,
	set: (newvals) => {
		if(!newvals) {
			return
		}
		inputs.forEach((el, i) => {
			values[i] = newvals[i]
			set_input_value(el, newvals[i])
		})
},
	configurable: true,
});

</script></span>
	<input type=submit id='mlsojuyloz'>
	<script id='mlsojuyloz'>

let key = "mlsojuyloz"

let div = currentScript.parentElement
let button = currentScript.previousElementSibling
let input = div.firstElementChild
if(input === button) {
	return
}


let set_input_value = (() => {
	let result = null
	try {
	result = setBoundElementValueLikePluto
} catch (e) {
	result = ((input, new_value) => {
	// fallback in case https://github.com/fonsp/Pluto.jl/pull/1755 is not available
    if (new_value == null) {
        //@ts-ignore
        input.value = new_value
        return
    }
    if (input instanceof HTMLInputElement) {
        switch (input.type) {
            case "range":
            case "number": {
                if (input.valueAsNumber !== new_value) {
                    input.valueAsNumber = new_value
                }
                return
            }
            case "date": {
                if (input.valueAsDate == null || Number(input.valueAsDate) !== Number(new_value)) {
                    input.valueAsDate = new_value
                }
                return
            }
            case "checkbox": {
                if (input.checked !== new_value) {
                    input.checked = new_value
                }
                return
            }
            case "file": {
                // Can't set files :(
                return
            }
        }
    } else if (input instanceof HTMLSelectElement && input.multiple) {
        for (let option of Array.from(input.options)) {
            option.selected = new_value.includes(option.value)
        }
        return
    }
    //@ts-ignore
    if (input.value !== new_value) {
        //@ts-ignore
        input.value = new_value
    }
})
}
return result
})()



let private_value = null
let public_value = null




private_value = public_value = div.value
if(private_value != null) {
	set_input_value(input, private_value)
} else {

	// private_value = public_value = input.value
}

input.oninput = (e) => {
	e.stopPropagation()
}
const gen = Generators.input(input)

// If the child does not have an initial value, the `gen.next().value` promise will never resolve. If it does, then it resolves instantly.
let first_value = await Promise.any([
	gen.next().value,
	Promise.resolve(undefined)
])
private_value = public_value = first_value

;(async () => {
	while(true) {
		private_value = await gen.next().value
		// div.dispatchEvent(new CustomEvent("input", {}))
	}
})()

button.addEventListener("click", () => {
	public_value = private_value
	div.dispatchEvent(new CustomEvent("input", {}))
})


Object.defineProperty(div, 'value', {
	get: () => public_value,
	set: (newval) => {
		private_value = newval
		public_value = newval
		
		set_input_value(input, newval)
	},
	configurable: true,
});

</script></span></bond>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš3\íÙ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$acb270a1-e2b9-46bc-9a52-9f66f1cca17c¹depends_on_disabled_cellsÂ§runtimeÎINeµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$334b4d77-8784-46be-b9e8-80c0a2244694Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ3monte_carlo_Ïµsoft (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš)¯W°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$334b4d77-8784-46be-b9e8-80c0a2244694¹depends_on_disabled_cellsÂ§runtimeÎ ?¢Nµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$e5384dd0-fad1-4a24-b011-73b062fcfb1bŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚ}<div class="markdown"><blockquote>
<h3><em>Exercise 5.1</em></h3>
<p>Consider the diagroms on the right in Figure 5.1.  Why does the estimated value function jump for the last two rows in the rear?  Why does it drop off for the whole last row on the left?  Why are the frontmost values higher in the upper diagrams than in the lower?</p>
</blockquote>
<p>The last two rows in the rear are for a player sum equal to 20 or 21.  For a sum of 19 and lower, this policy will hit which is suboptimal for these high sums.  For the sums of 20 or 21 though, sticking is optimal so the value jumps compared to the suboptimal hit at 19.</p>
<p>The far left row represents cases where the dealer is showing an Ace.  Since an Ace is a flexible card, the dealer policy will have more options that result in a win including the possibility of having another face card already &#40;dealer natural&#41;.  It is always worse for the player if the dealer is known to have an Ace.</p>
<p>The frontmost values represent cases where the player sum is 12.  If there is a usable Ace this means that means that the player has two Aces which results in a sum of 12 when the first Ace is counted as 1 and the second is <em>usable</em> and counted as 11.  If there is no usable Ace than a sum of 12 would have to result from some other combination of cards such as 10/2, 9/3, etc...  Since the first case has two Aces, it means that potentially both could count as 1 if needed to avoid a bust.  In the case without a usable Ace, the sum is the same, but there are more opportunities to bust if we draw a card worth 10, so having a sum of 12 with a usable Ace is strictly better.</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"&ma°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$e5384dd0-fad1-4a24-b011-73b062fcfb1b¹depends_on_disabled_cellsÂ§runtimeÎ ¿µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$35914757-6af1-4056-bba4-a9996f65f7f7Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyƒ¨elements“’’…¦prefix§Float32¨elements›’’£0.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain’	’£0.0ªtext/plain¤more’Î B@’¨0.812565ªtext/plain¤type¥Array¬prefix_short ¨objectid°886b20cbcddd915eÙ!application/vnd.pluto.tree+object’’Ù$2Ã—1 Matrix{Float32}:
 0.812565
 0.0ªtext/plain’’…¦prefix§Float32¨elements›’’£0.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain’’£0.0ªtext/plain’	’£0.0ªtext/plain¤more’Î B@’£0.0ªtext/plain¤type¥Array¬prefix_short ¨objectid°955d7fd8e7c24e2cÙ!application/vnd.pluto.tree+object¤type¥Tuple¨objectid°bf7eb1765917781e¤mimeÙ!application/vnd.pluto.tree+object¬rootassigneeÀ²last_run_timestampËAÚš.a‹a°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$35914757-6af1-4056-bba4-a9996f65f7f7¹depends_on_disabled_cellsÂ§runtimeÎp½µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$cde7be85-9344-4526-bcb2-c2c8b3322435Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyƒ¨elements’’’ÚÒ9Ã—12875 Matrix{Float32}:
 0.111111  0.00111111  0.00111111  â€¦  0.111111  0.111111  0.111111  0.111111
 0.111111  0.00111111  0.00111111     0.111111  0.111111  0.111111  0.111111
 0.111111  0.00111111  0.00111111     0.111111  0.111111  0.111111  0.111111
 0.111111  0.00111111  0.991111       0.111111  0.111111  0.111111  0.111111
 0.111111  0.00111111  0.00111111     0.111111  0.111111  0.111111  0.111111
 0.111111  0.00111111  0.00111111  â€¦  0.111111  0.111111  0.111111  0.111111
 0.111111  0.00111111  0.00111111     0.111111  0.111111  0.111111  0.111111
 0.111111  0.00111111  0.00111111     0.111111  0.111111  0.111111  0.111111
 0.111111  0.991111    0.00111111     0.111111  0.111111  0.111111  0.111111ªtext/plain’’Úÿ9Ã—12875 Matrix{Float32}:
 0.0  -525.0   -24.0   -32.0     0.0   -18.0  â€¦      0.0  0.0  0.0  0.0  0.0  0.0
 0.0   -50.0  -119.0   -11.0     0.0  -786.0         0.0  0.0  0.0  0.0  0.0  0.0
 0.0   -29.0   -52.5  -190.0     0.0  -106.0         0.0  0.0  0.0  0.0  0.0  0.0
 0.0  -247.0   -12.0     0.0     0.0   -25.0         0.0  0.0  0.0  0.0  0.0  0.0
 0.0   -43.0   -13.0     0.0     0.0   -11.0     -1098.0  0.0  0.0  0.0  0.0  0.0
 0.0   -65.0  -783.0   -88.0  -288.0   -38.0  â€¦      0.0  0.0  0.0  0.0  0.0  0.0
 0.0   -10.0   -58.0   -16.0     0.0   -43.0         0.0  0.0  0.0  0.0  0.0  0.0
 0.0  -120.0   -18.0  -181.0  -433.0   -29.5         0.0  0.0  0.0  0.0  0.0  0.0
 0.0     0.0  -292.0     0.0     0.0   -98.0      -545.0  0.0  0.0  0.0  0.0  0.0ªtext/plain¤type¥Tuple¨objectid°c9ddb414e83f2974¤mimeÙ!application/vnd.pluto.tree+object¬rootassigneeÀ²last_run_timestampËAÚš3÷*�°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$cde7be85-9344-4526-bcb2-c2c8b3322435¹depends_on_disabled_cellsÂ§runtimeÎvž¿µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$881ba6c3-0e6a-4bb8-bc14-2e0face560f2Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚ½<div class="markdown"><blockquote>
<h3><em>Exercise 5.6</em></h3>
<p>What is the equation analogous to &#40;5.6&#41; for <em>action</em> values <span class="tex">$Q&#40;s,a&#41;$</span> instead of state values <span class="tex">$V&#40;s&#41;$</span>, again given returns generated using <span class="tex">$b$</span>?</p>
</blockquote>
<p>Equation &#40;5.6&#41;:</p>
<p class="tex">$$V&#40;s&#41; &#61; \frac&#123;\sum_&#123;t \in \mathscr&#123;T&#125;&#40;s&#41;&#125;\rho_&#123;t:T&#40;t&#41;-1&#125;G_t&#125;&#123;\sum_&#123;t \in \mathscr&#123;T&#125;&#40;s&#41;&#125; \rho_&#123;t:T&#40;t&#41;-1&#125;&#125;$$</p>
<p>For <span class="tex">$Q&#40;s,a&#41;$</span>, there is no need to calculate the sampling ratio for the first action selected.  Here <span class="tex">$\mathscr&#123;T&#125;&#40;s, a&#41;$</span> is the set of all time steps in which the state action pair <span class="tex">$&#40;s, a&#41;$</span> is visited.</p>
<p class="tex">$$Q&#40;s,a&#41; &#61; \frac&#123;\sum_&#123;t \in \mathscr&#123;T&#125;&#40;s, a&#41;&#125;\rho_&#123;t&#43;1:T&#40;t&#41;-1&#125;G_t&#125;&#123;\sum_&#123;t \in \mathscr&#123;T&#125;&#40;s, a&#41;&#125; \rho_&#123;t&#43;1:T&#40;t&#41;-1&#125;&#125;$$</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"([�°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$881ba6c3-0e6a-4bb8-bc14-2e0face560f2¹depends_on_disabled_cellsÂ§runtimeÎ �¨µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$5c57e4b7-51d6-492d-9fc9-bcdab1dd46f4Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ6plot_blackjack_policy (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš%øÁ×°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$5c57e4b7-51d6-492d-9fc9-bcdab1dd46f4¹depends_on_disabled_cellsÂ§runtimeÎ -�	µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$e0d3d7d1-203f-42fa-8570-8d1d88bf17c2Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ-<div class="markdown"><h5>Track 2</h5>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"*´W°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$e0d3d7d1-203f-42fa-8570-8d1d88bf17c2¹depends_on_disabled_cellsÂ§runtimeÎ Òµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$760c5361-02d4-46b7-a05c-fc2d10d93de6Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ3monte_carlo_pred_V (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš%p¨°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$760c5361-02d4-46b7-a05c-fc2d10d93de6¹depends_on_disabled_cellsÂ§runtimeÎ ‰8Eµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$d55860d1-e4c1-4a79-adbe-b40a6d6283a7Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ>initialize_state_action_value (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš$ñÃç°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$d55860d1-e4c1-4a79-adbe-b40a6d6283a7¹depends_on_disabled_cellsÂ§runtimeÎ Ú-µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$06297d75-121a-4178-b45b-83e167efd90dŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ*joinlines (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš0
A¯°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$06297d75-121a-4178-b45b-83e167efd90d¹depends_on_disabled_cellsÂ§runtimeÎ ¦kµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$abe70666-39f8-4f1d-a285-a3a99f696d10Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚz<div class="markdown"><blockquote>
<h3><em>Exercise 5.13</em></h3>
<p>Show the steps to derive &#40;5.14&#41; from &#40;5.12&#41;</p>
</blockquote>
<p>Starting at &#40;5.12&#41;</p>
<p class="tex">$$\rho_&#123;t:T-1&#125;R_&#123;t&#43;1&#125;&#61;\frac&#123;\pi&#40;A_t|S_t&#41;&#125;&#123;b&#40;A_t|S_t&#41;&#125;\frac&#123;\pi&#40;A_&#123;t&#43;1&#125;|S_&#123;t&#43;1&#125;&#41;&#125;&#123;b&#40;A_&#123;t&#43;1&#125;|S_&#123;t&#43;1&#125;&#41;&#125;\frac&#123;\pi&#40;A_&#123;t&#43;2&#125;|S_&#123;t&#43;2&#125;&#41;&#125;&#123;b&#40;A_&#123;t&#43;2&#125;|S_&#123;t&#43;2&#125;&#41;&#125;\cdots\frac&#123;\pi&#40;A_&#123;T-1&#125;|S_&#123;T-1&#125;&#41;&#125;&#123;b&#40;A_&#123;T-1&#125;|S_&#123;T-1&#125;&#41;&#125;R_&#123;t&#43;1&#125;$$</p>
<p>For &#40;5.14&#41; we need to turn this into an expected value</p>
<p class="tex">$$\mathbb&#123;E&#125;&#91;\rho_&#123;t:T-1&#125;R_&#123;t&#43;1&#125;&#93;$$</p>
<p>Now we know that the reward at time step t&#43;1 is only dependent on the action and state at time t.  Moreover, the later parts of the trajectory are also independent of each other.  So we can separate some of these terms into a product of expected values rather than an expected value of products:</p>
<p class="tex">$$\mathbb&#123;E&#125;&#91;\rho_&#123;t:T-1&#125;R_&#123;t&#43;1&#125;&#93;&#61;\mathbb&#123;E&#125; \left &#91; \frac&#123;\pi&#40;A_t|S_t&#41;&#125;&#123;b&#40;A_t|S_t&#41;&#125;\frac&#123;\pi&#40;A_&#123;t&#43;1&#125;|S_&#123;t&#43;1&#125;&#41;&#125;&#123;b&#40;A_&#123;t&#43;1&#125;|S_&#123;t&#43;1&#125;&#41;&#125;\frac&#123;\pi&#40;A_&#123;t&#43;2&#125;|S_&#123;t&#43;2&#125;&#41;&#125;&#123;b&#40;A_&#123;t&#43;2&#125;|S_&#123;t&#43;2&#125;&#41;&#125;\cdots\frac&#123;\pi&#40;A_&#123;T-1&#125;|S_&#123;T-1&#125;&#41;&#125;&#123;b&#40;A_&#123;T-1&#125;|S_&#123;T-1&#125;&#41;&#125;R_&#123;t&#43;1&#125; \right &#93;$$</p>
<p class="tex">$$&#61;\mathbb&#123;E&#125; \left &#91; \frac&#123;\pi&#40;A_t|S_t&#41;&#125;&#123;b&#40;A_t|S_t&#41;&#125;R_&#123;t&#43;1&#125; \right &#93; \prod_&#123;k&#61;t&#43;1&#125;^&#123;T-1&#125;\mathbb&#123;E&#125; \left &#91; \frac&#123;\pi&#40;A_k|S_k&#41;&#125;&#123;b&#40;A_k|S_k&#41;&#125; \right &#93;$$</p>
<p>We know from &#40;5.13&#41; that <span class="tex">$\mathbb&#123;E&#125; \left &#91; \frac&#123;\pi&#40;A_k|S_k&#41;&#125;&#123;b&#40;A_k|S_k&#41;&#125; \right &#93; &#61; 1$</span> so the above expression simplifies to: <span class="tex">$\mathbb&#123;E&#125; \left &#91; \frac&#123;\pi&#40;A_t|S_t&#41;&#125;&#123;b&#40;A_t|S_t&#41;&#125;R_&#123;t&#43;1&#125; \right &#93;$</span>.  Using the original shorthand with Ï�:</p>
<p class="tex">$$\mathbb&#123;E&#125;&#91;\rho_&#123;t:T-1&#125;R_&#123;t&#43;1&#125;&#93;&#61;\mathbb&#123;E&#125; \left &#91; \frac&#123;\pi&#40;A_t|S_t&#41;&#125;&#123;b&#40;A_t|S_t&#41;&#125;R_&#123;t&#43;1&#125; \right &#93;&#61;\mathbb&#123;E&#125;&#91;\rho_&#123;t:t&#125;R_&#123;t&#43;1&#125;&#93;$$</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš",î°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$abe70666-39f8-4f1d-a285-a3a99f696d10¹depends_on_disabled_cellsÂ§runtimeÎ 	Kµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$7ce6e28e-acd7-46d1-87d6-a25f4656d79dŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ]<bond def="run2_1" unique_id="eRQOtO/kh&#43;OQ"><input type="button" value="Run race"></bond>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš2Á"¼°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$7ce6e28e-acd7-46d1-87d6-a25f4656d79d¹depends_on_disabled_cellsÂ§runtimeÎ 
Ð
µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$a85e7dd3-ea5e-4c77-a18e-f1e190658ae3Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ.sample_action (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš$Òvê°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$a85e7dd3-ea5e-4c77-a18e-f1e190658ae3¹depends_on_disabled_cellsÂ§runtimeÎ È`µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$68f9e0d9-5c9d-4e89-b5ae-f24fd7544a09Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyƒ¨elements’’’ÚÈ9Ã—7300 Matrix{Float32}:
 0.111111  0.142857  0.0          â€¦  0.111111  0.111111  0.111111  0.111111
 0.111111  0.142857  0.0             0.111111  0.111111  0.111111  0.111111
 0.111111  0.142857  0.16652         0.111111  0.111111  0.111111  0.111111
 0.111111  0.0       0.16652         0.111111  0.111111  0.111111  0.111111
 0.111111  0.0       0.16652         0.111111  0.111111  0.111111  0.111111
 0.111111  0.142857  0.000879308  â€¦  0.111111  0.111111  0.111111  0.111111
 0.111111  0.142857  0.16652         0.111111  0.111111  0.111111  0.111111
 0.111111  0.142857  0.16652         0.111111  0.111111  0.111111  0.111111
 0.111111  0.142857  0.16652         0.111111  0.111111  0.111111  0.111111ªtext/plain’’Ú9Ã—7300 Matrix{Float32}:
 0.0     0.0  -5149.0   -84.0   -3379.0  â€¦  0.0  0.0  0.0   0.0  0.0  0.0  0.0  0.0
 0.0     0.0  -1134.0   -25.0     -35.0     0.0  0.0  0.0   0.0  0.0  0.0  0.0  0.0
 0.0     0.0      0.0   -63.0   -3169.0     0.0  0.0  0.0   0.0  0.0  0.0  0.0  0.0
 0.0  -689.0      0.0  -754.0       0.0     0.0  0.0  0.0   0.0  0.0  0.0  0.0  0.0
 0.0  -856.0      0.0     0.0     -67.0     0.0  0.0  0.0   0.0  0.0  0.0  0.0  0.0
 0.0     0.0    -27.0     0.0  -12549.0  â€¦  0.0  0.0  0.0   0.0  0.0  0.0  0.0  0.0
 0.0     0.0      0.0   -37.0  -13470.0     0.0  0.0  0.0  -1.0  0.0  0.0  0.0  0.0
 0.0     0.0      0.0     0.0     -18.0     0.0  0.0  0.0   0.0  0.0  0.0  0.0  0.0
 0.0     0.0      0.0     0.0       0.0     0.0  0.0  0.0   0.0  0.0  0.0  0.0  0.0ªtext/plain¤type¥Tuple¨objectid°2b08379900fff7c1¤mimeÙ!application/vnd.pluto.tree+object¬rootassigneeÀ²last_run_timestampËAÚš2À¾¶°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$68f9e0d9-5c9d-4e89-b5ae-f24fd7544a09¹depends_on_disabled_cellsÂ§runtimeÎ®Ÿ®µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$ec29865f-3ba3-4bb3-84df-c2b472e03ff2Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyƒ¨elements’’’Ù¿2Ã—200 Matrix{Float32}:
 1.0  1.0  1.0  1.0  1.0  1.0  1.0  0.0  â€¦  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  1.0     1.0  1.0  1.0  1.0  1.0  1.0  1.0  1.0ªtext/plain’’Ù´2Ã—200 Matrix{Float32}:
 -0.314661  -0.543897   0.0834141  -0.262767  â€¦  -1.0       0.646746  -1.0
 -0.77313   -0.773448  -0.298548   -0.311517      0.947591  0.873747   0.829768ªtext/plain¤type¥Tuple¨objectid°a6680ebecb2a25cf¤mimeÙ!application/vnd.pluto.tree+object¬rootassigneeÀ²last_run_timestampËAÚš'1�°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$ec29865f-3ba3-4bb3-84df-c2b472e03ff2¹depends_on_disabled_cellsÂ§runtimeÎ·˜Œµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$1d6eccf0-2731-47fc-9a41-ea8649e290efŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyƒ¨elements’’’Ú¿9Ã—7300 Matrix{Float32}:
 0.111111  0.116111    0.111111  â€¦  0.111111  0.111111  0.111111  0.111111
 0.111111  0.116111    0.111111     0.111111  0.111111  0.111111  0.111111
 0.111111  0.116111    0.111111     0.111111  0.111111  0.111111  0.111111
 0.111111  0.116111    0.111111     0.111111  0.111111  0.111111  0.111111
 0.111111  0.00111111  0.111111     0.111111  0.111111  0.111111  0.111111
 0.111111  0.116111    0.111111  â€¦  0.111111  0.111111  0.111111  0.111111
 0.111111  0.116111    0.111111     0.111111  0.111111  0.111111  0.111111
 0.111111  0.116111    0.111111     0.111111  0.111111  0.111111  0.111111
 0.111111  0.116111    0.111111     0.111111  0.111111  0.111111  0.111111ªtext/plain’’Ú9Ã—7300 Matrix{Float32}:
 0.0      0.0  0.0  -5484.0      0.0  0.0  â€¦  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0      0.0  0.0      0.0      0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0      0.0  0.0      0.0      0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0      0.0  0.0      0.0      0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0  -3014.0  0.0      0.0  -7010.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0      0.0  0.0      0.0      0.0  0.0  â€¦  0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0      0.0  0.0      0.0      0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0      0.0  0.0      0.0      0.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0
 0.0      0.0  0.0      0.0  -2901.0  0.0     0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0ªtext/plain¤type¥Tuple¨objectid°fbacd052b48a6dfe¤mimeÙ!application/vnd.pluto.tree+object¬rootassigneeÀ²last_run_timestampËAÚš3{êû°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$1d6eccf0-2731-47fc-9a41-ea8649e290ef¹depends_on_disabled_cellsÂ§runtimeÎî”µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$9ca72278-fff6-4b0f-b72c-e0d3768aff73Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚk:<div class="markdown"><h3>Figure 5.3</h3>
<p>Weighted importance sampling produces lower error estimates of the value of a single blackjack state from off-policy episodes</p>
	<script id='plot_1'>
		// We start by putting all the variable interpolation here at the beginning
		// We have to convert all typedarrays in the layout to normal arrays. See Issue #25
		// We use lodash for this for compactness
		function removeTypedArray(o) {
			return _.isTypedArray(o) ? Array.from(o) :
			_.isPlainObject(o) ? _.mapValues(o, removeTypedArray) : 
			o
		}

		// Publish the plot object to JS
		let plot_obj = _.update(/* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("c6e0de0c-3901-11f0-234e-bd09c571f662/58d51ac87604fe9c"), "layout", removeTypedArray)
		// Get the plotly listeners
		const plotly_listeners = {}
		// Get the JS listeners
		const js_listeners = {}
		// Deal with eventual custom classes
		let custom_classlist = []


		// Load the plotly library
		let Plotly = undefined
		try {
			let _mod = await import("./plotlyjs/plotlyjs-2.26.2.min.js")
			Plotly = _mod.default
		} catch (e) {
			console.log("Local load failed, trying with the web esm.sh version")
			let _mod = await import("https://esm.sh/plotly.js-dist-min@2.26.2/es2022/plotly.js-dist-min.mjs")
			Plotly = _mod.default
		}

		// Check if we have to force local mathjax font cache
		if (false && window?.MathJax?.config?.svg?.fontCache === 'global') {
			window.MathJax.config.svg.fontCache = 'local'
		}

		// Flag to check if this cell was  manually ran or reactively ran
const firstRun = this ? false : true
const CONTAINER = this ?? html`<div class='plutoplotly-container'>`
const PLOT = CONTAINER.querySelector('.js-plotly-plot') ?? CONTAINER.appendChild(html`<div>`)
const parent = CONTAINER.parentElement
// We use a controller to remove event listeners upon invalidation
const controller = new AbortController()
// We have to add this to keep supporting @bind with the old API using PLOT
PLOT.addEventListener('input', (e) => {
	CONTAINER.value = PLOT.value
	if (e.bubbles) {
		return
	}
	CONTAINER.dispatchEvent(new CustomEvent('input'))
}, { signal: controller.signal })

	// This create the style subdiv on first run
	firstRun && CONTAINER.appendChild(html`
	<style>
	.plutoplotly-container {
		width: 100%;
		height: 100%;
		min-height: 0;
		min-width: 0;
	}
	.plutoplotly-container .js-plotly-plot .plotly div {
		margin: 0 auto; // This centers the plot
	}
	.plutoplotly-container.popped-out {
		overflow: auto;
		z-index: 1000;
		position: fixed;
		resize: both;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		border-top-left-radius: 0px;
		border-top-right-radius: 0px;
	}
	.plutoplotly-clipboard-header {
		display: flex;
		flex-flow: row wrap;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-top-left-radius: 12px;
		border-top-right-radius: 12px;
		position: fixed;
		z-index: 1001;
		cursor: move;
		transform: translate(0px, -100%);
		padding: 5px;
	}
	.plutoplotly-clipboard-header span {
		display: inline-block;
		flex: 1
	}
	.plutoplotly-clipboard-header.hidden {
		display: none;
	}
	.clipboard-span {
		position: relative;
	}
	.clipboard-value {
		padding-right: 5px;
		padding-left: 2px;
		cursor: text;
	}
	.clipboard-span.format {
		display: none;
	}
	.clipboard-span.filename {
		flex: 0 0 100%;
		text-align: center;
		border-top: 3px solid var(--kbd-border-color);
		margin-top: 5px;
		display: none;
	}
	.plutoplotly-container.filesave .clipboard-span.filename {
		display: inline-block;
	}
	.clipboard-value.filename {
		margin-left: 3px;
		text-align: left;
		min-width: min(60%, min-content);
	}
	.plutoplotly-container.filesave .clipboard-span.format {
		display: inline-flex;
	}
	.clipboard-span.format .label {
		flex: 0 0 0;
	}
	.clipboard-value.format {
		position: relative;
		flex: 1 0 auto;
		min-width: 30px;
		margin-right: 10px;
	}
	div.format-options {
		display: inline-flex;
		flex-flow: column;
		position: absolute;
		background: var(--main-bg-color);
		border-radius: 12px;
		padding-left: 3px;
		z-index: 2000;
	}
	div.format-options:hover {
		cursor: pointer;
		border: 3px solid var(--kbd-border-color);
		padding: 3px;
		transform: translate(-3px, -6px);
	}
	div.format-options .format-option {
		display: none;
	}
	div.format-options:hover .format-option {
		display: inline-block;
	}
	.format-option:not(.selected) {
		margin-top: 3px;
	}
	div.format-options .format-option.selected {
		order: -1;
		display: inline-block;
	}
	.format-option:hover {
		background-color: var(--kbd-border-color);
	}
	span.config-value {
		font-weight: normal;
		color: var(--pluto-output-color);
		display: none;
		position: absolute;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		transform: translate(0px, calc(-100% - 10px));
		padding: 5px;
	}
	.label {
		user-select: none;
	}
	.label:hover span.config-value {
		display: inline-block;
		min-width: 150px;
	}
	.clipboard-span.matching-config .label {
		color: var(--cm-macro-color);
		font-weight: bold;
	}
	.clipboard-span.different-config .label {
		color: var(--cm-tag-color);
		font-weight: bold;
	}
</style>
`)

let original_height = plot_obj.layout.height
let original_width = plot_obj.layout.width
// For the height we have to also put a fixed value in case the plot is put on a non-fixed-size container (like the default wrapper)
// We define a variable to check whether we still have to remove the fixed height
let remove_container_size = firstRun
let container_height = original_height ?? PLOT.container_height ?? 400
CONTAINER.style.height = container_height + 'px'

// We create a Promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// We import interact for dragging/resizing
const { default: interact } = await import('https://esm.sh/interactjs@1.10.19')


function getImageOptions() {
  const o = plot_obj.config.toImageButtonOptions ?? {};
  return {
    format: o.format ?? "png",
    width: o.width ?? original_width,
    height: o.height ?? original_height,
    scale: o.scale ?? 1,
    filename: o.filename ?? "newplot",
  };
}

const CLIPBOARD_HEADER =
  CONTAINER.querySelector(".plutoplotly-clipboard-header") ??
  CONTAINER.insertAdjacentElement(
    "afterbegin",
    html`<div class="plutoplotly-clipboard-header hidden">
      <span class="clipboard-span format"
        ><span class="label">Format:</span
        ><span class="clipboard-value format"></span
      ></span>
      <span class="clipboard-span width"
        ><span class="label">Width:</span
        ><span class="clipboard-value width"></span>px</span
      >
      <span class="clipboard-span height"
        ><span class="label">Height:</span
        ><span class="clipboard-value height"></span>px</span
      >
      <span class="clipboard-span scale"
        ><span class="label">Scale:</span
        ><span class="clipboard-value scale"></span
      ></span>
      <button class="clipboard-span set">Set</button>
      <button class="clipboard-span unset">Unset</button>
      <span class="clipboard-span filename"
        ><span class="label">Filename:</span
        ><span class="clipboard-value filename"></span
      ></span>
    </div>`
  );

function checkConfigSync(container) {
  const valid_classes = [
    "missing-config",
    "matching-config",
    "different-config",
  ];
  function setClass(cl) {
    for (const name of valid_classes) {
      container.classList.toggle(name, name == cl);
    }
  }
  // We use the custom getters we'll set up in the container
  const { ui_value, config_value, config_span, key } = container;
  if (config_value === undefined) {
    setClass("missing-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> is not present in the config.`;
  } else if (ui_value == config_value) {
    setClass("matching-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has the same value in the config and in the header.`;
  } else {
    setClass("different-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has a different value (<em>${config_value}</em>) in the config.`;
  }
  // Add info about setting and unsetting
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click on the label <em><b>once</b></em> to set the current UI value in the config.`
  );
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click <em><b>twice</b></em> to remove this key from the config.`
  );
}

const valid_formats = ["png", "svg", "webp", "jpeg", "full-json"];
function initializeUIValueSpan(span, key, value) {
  const container = span.closest(".clipboard-span");
  span.contentEditable = key === "format" ? "false" : "true";
  let parse = (x) => x;
  let update = (x) => (span.textContent = x);
  if (key === "width" || key === "height") {
    parse = (x) => Math.round(parseFloat(x));
  } else if (key === "scale") {
    parse = parseFloat;
  } else if (key === "format") {
    // We remove contentEditable
    span.contentEditable = "false";
    // Here we first add the subspans for each option
    const opts_div = span.appendChild(html`<div class="format-options"></div>`);
    for (const fmt of valid_formats) {
      const opt = opts_div.appendChild(
        html`<span class="format-option ${fmt}">${fmt}</span>`
      );
      opt.onclick = (e) => {
        span.value = opt.textContent;
      };
    }
    parse = (x) => {
      return valid_formats.includes(x) ? x : localValue;
    };
    update = (x) => {
      for (const opt of opts_div.children) {
        opt.classList.toggle("selected", opt.textContent === x);
      }
    };
  } else {
    // We only have filename here
  }
  let localValue;
  Object.defineProperty(span, "value", {
    get: () => {
      return localValue;
    },
    set: (val) => {
      if (val !== "") {
        localValue = parse(val);
      }
      update(localValue);
      checkConfigSync(container);
    },
  });
  // We also assign a listener so that the editable is blurred when enter is pressed
  span.onkeydown = (e) => {
    if (e.keyCode === 13) {
      e.preventDefault();
      span.blur();
    }
  };
  span.value = value;
}

function initializeConfigValueSpan(span, key) {
  // Here we mostly want to define the setter and getter
  const container = span.closest(".clipboard-span");
  Object.defineProperty(span, "value", {
    get: () => {
      return plot_obj.config.toImageButtonOptions[key];
    },
    set: (val) => {
      // if undefined is passed, we remove the entry from the options
      if (val === undefined) {
        delete plot_obj.config.toImageButtonOptions[key];
      } else {
        plot_obj.config.toImageButtonOptions[key] = val;
      }
      checkConfigSync(container);
    },
  });
}

const config_spans = {};
for (const [key, value] of Object.entries(getImageOptions())) {
  const container = CLIPBOARD_HEADER.querySelector(`.clipboard-span.${key}`);
  const label = container.querySelector(".label");
  // We give the label a function that on single click will set the current value and with double click will unset it
  label.onclick = DualClick(
    () => {
      container.config_value = container.ui_value;
    },
    (e) => {
      console.log("e", e);
      e.preventDefault();
      container.config_value = undefined;
    }
  );
  const ui_value_span = container.querySelector(".clipboard-value");
  const config_value_span =
    container.querySelector(".config-value") ??
    label.insertAdjacentElement(
      "afterbegin",
      html`<span class="config-value"></span>`
    );
  // Assing the two spans as properties of the containing span
  container.ui_span = ui_value_span;
  container.config_span = config_value_span;
  container.key = key;
  config_spans[key] = container;
  if (firstRun) {
    plot_obj.config.toImageButtonOptions =
      plot_obj.config.toImageButtonOptions ?? {};
    // We do the initialization of the value span
    initializeUIValueSpan(ui_value_span, key, value);
    // Then we initialize the config value
    initializeConfigValueSpan(config_value_span, key);
    // We put some convenience getters/setters
    // ui_value forward
    Object.defineProperty(container, "ui_value", {
      get: () => ui_value_span.value,
      set: (val) => {
        ui_value_span.value = val;
      },
    });
    // config_value forward
    Object.defineProperty(container, "config_value", {
      get: () => config_value_span.value,
      set: (val) => {
        config_value_span.value = val;
      },
    });
  }
}

// These objects will contain the default value

// This code updates the image options in the PLOT config with the provided ones
function setImageOptions(o) {
  for (const [key, container] of Object.entries(config_spans)) {
    container.config_value = o[key];
  }
}
function unsetImageOptions() {
  setImageOptions({});
}

const set_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.set");
const unset_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.unset");
if (firstRun) {
  set_button.onclick = (e) => {
    for (const container of Object.values(config_spans)) {
      container.config_value = container.ui_value;
    }
  };
  unset_button.onclick = unsetImageOptions;
}

// We add a function to check if the clipboard is popped out
CONTAINER.isPoppedOut = () => {
  return CONTAINER.classList.contains("popped-out");
};

CLIPBOARD_HEADER.onmousedown = function (event) {
  if (event.target.matches("span.clipboard-value")) {
    console.log("We don't move!");
    return;
  }
  const start = {
    left: parseFloat(CONTAINER.style.left),
    top: parseFloat(CONTAINER.style.top),
    X: event.pageX,
    Y: event.pageY,
  };
  function moveAt(event, start) {
    const top = event.pageY - start.Y + start.top + "px";
    const left = event.pageX - start.X + start.left + "px";
    CLIPBOARD_HEADER.style.left = left;
    CONTAINER.style.left = left;
    CONTAINER.style.top = top;
  }

  // move our absolutely positioned ball under the pointer
  moveAt(event, start);
  function onMouseMove(event) {
    moveAt(event, start);
  }

  // We use this to remove the mousemove when clicking outside of the container
  const controller = new AbortController();

  // move the container on mousemove
  document.addEventListener("mousemove", onMouseMove, {
    signal: controller.signal,
  });
  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        cleanUp();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );

  function cleanUp() {
    console.log("cleaning up the plot move listener");
    controller.abort();
    CLIPBOARD_HEADER.onmouseup = null;
  }

  // (3) drop the ball, remove unneeded handlers
  CLIPBOARD_HEADER.onmouseup = cleanUp;
};

function sendToClipboard(blob) {
  if (!navigator.clipboard) {
    alert(
      "The Clipboard API does not seem to be available, make sure the Pluto notebook is being used from either localhost or an https source."
    );
  }
  navigator.clipboard
    .write([
      new ClipboardItem({
        // The key is determined dynamically based on the blob's type.
        [blob.type]: blob,
      }),
    ])
    .then(
      function () {
        console.log("Async: Copying to clipboard was successful!");
      },
      function (err) {
        console.error("Async: Could not copy text: ", err);
      }
    );
}

function copyImageToClipboard() {
  // We extract the image options from the provided parameters (if they exist)
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key. We also ignore format because the clipboard only supports png.
    if (val === undefined || key === "format") {
      continue;
    }
    config[key] = val;
  }
  Plotly.toImage(PLOT, config).then(function (dataUrl) {
    fetch(dataUrl)
      .then((res) => res.blob())
      .then((blob) => {
        const paste_receiver = document.querySelector('paste-receiver.plutoplotly')
        if (paste_receiver) {
          paste_receiver.attachImage(dataUrl, CONTAINER)
        }
        sendToClipboard(blob)
      });
  });
}

function saveImageToFile() {
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key.
    if (val === undefined) {
      continue;
    }
    config[key] = val;
  }
  Plotly.downloadImage(PLOT, config);
}

let container_rect = { width: 0, height: 0, top: 0, left: 0 };
function unpop_container(cl) {
  CONTAINER.classList.toggle("popped-out", false);
  CONTAINER.classList.toggle(cl, false);
  // We fix the height back to the value it had before popout, also setting the flag to signal that upon first resize we remove the fixed inline-style
  CONTAINER.style.height = container_rect.height + "px";
  remove_container_size = true;
  // We set the other fixed inline-styles to null
  CONTAINER.style.width = "";
  CONTAINER.style.top = "";
  CONTAINER.style.left = "";
  // We also remove the CLIPBOARD_HEADER
  CLIPBOARD_HEADER.style.width = "";
  CLIPBOARD_HEADER.style.left = "";
  // Finally we remove the hidden class to the header
  CLIPBOARD_HEADER.classList.toggle("hidden", true);
  return;
}
function popout_container(opts) {
  const cl = opts?.cl;
  const target_container_size = opts?.target_container_size ?? {};
  const target_plot_size = opts?.target_plot_size ?? {};
  if (CONTAINER.isPoppedOut()) {
    return unpop_container(cl);
  }
  CONTAINER.classList.toggle(cl, cl === undefined ? false : true);
  // We extract the current size of the container, save them and fix them
  const { width, height, top, left } = CONTAINER.getBoundingClientRect();
  container_rect = { width, height, top, left };
  // We save the current plot size before we pop as it will fill the screen
  const current_plot_size = {
    width: PLOT._fullLayout.width,
    height: PLOT._fullLayout.height,
  };
  // We have to save the pad data before popping so we can resize precisely
  const pad = {};
  pad.unpopped = getSizeData().container_pad;
  CONTAINER.classList.toggle("popped-out", true);
  pad.popped = getSizeData().container_pad;
  // We do top and left based on the current rect
  for (const key of ["top", "left"]) {
    const start_val = target_container_size[key] ?? container_rect[key];
    let offset = 0;
    for (const kind of ["padding", "border"]) {
      offset += pad.popped[kind][key] - pad.unpopped[kind][key];
    }
    CONTAINER.style[key] = start_val - offset + "px";
    if (key === "left") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  // We compute the width and height depending on eventual config data
  const csz = computeContainerSize({
    width:
      target_plot_size.width ??
      config_spans.width.config_value ??
      current_plot_size.width,
    height:
      target_plot_size.height ??
      config_spans.height.config_value ??
      current_plot_size.height,
  });
  for (const key of ["width", "height"]) {
    const val = target_container_size[key] ?? csz[key];
    CONTAINER.style[key] = val + "px";
    if (key === "width") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  CLIPBOARD_HEADER.classList.toggle("hidden", false);
  const controller = new AbortController();

  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        unpop_container();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );
}

CONTAINER.popOut = popout_container;

function DualClick(single_func, dbl_func) {
  let nclicks = 0;
  return function (...args) {
    nclicks += 1;
    if (nclicks > 1) {
      dbl_func(...args);
      nclicks = 0;
    } else {
      delay(300).then(() => {
        if (nclicks == 1) {
          single_func(...args);
        }
        nclicks = 0;
      });
    }
  };
}

// We remove the default download image button
plot_obj.config.modeBarButtonsToRemove = _.union(
  plot_obj.config.modeBarButtonsToRemove,
  ["toImage"]
);
// We add the custom button to the modebar
plot_obj.config.modeBarButtonsToAdd = _.union(
  plot_obj.config.modeBarButtonsToAdd,
  [
    {
      name: "Copy PNG to Clipboard",
      icon: {
        height: 520,
        width: 520,
        path: "M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z",
      },
      direction: "up",
      click: DualClick(copyImageToClipboard, () => {
        popout_container();
      }),
    },
    {
      name: "Download Image",
      icon: Plotly.Icons.camera,
      direction: "up",
      click: DualClick(saveImageToFile, () => {
        popout_container({ cl: "filesave" });
      }),
    },
  ]
);

function getOffsetData(el) {
  let cs = window.getComputedStyle(el, null);
  const odata = {
    padding: {
      left: parseFloat(cs.paddingLeft),
      right: parseFloat(cs.paddingRight),
      top: parseFloat(cs.paddingTop),
      bottom: parseFloat(cs.paddingBottom),
      width: parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight),
      height: parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom),
    },
    border: {
      left: parseFloat(cs.borderLeftWidth),
      right: parseFloat(cs.borderRightWidth),
      top: parseFloat(cs.borderTopWidth),
      bottom: parseFloat(cs.borderBottomWidth),
      width: parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth),
      height: parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth),
    }
  };
  if (el === PLOT) {
    // For the PLOT we also want to take into account the offset
    odata.offset = {
      top: PLOT.offsetParent == CONTAINER ? PLOT.offsetTop : 0,
      left: PLOT.offsetParent == CONTAINER ? PLOT.offsetLeft : 0,
    }
  }
  return odata;
}
function getSizeData() {
  const data = {
    plot_pad: getOffsetData(PLOT),
    plot_rect: PLOT.getBoundingClientRect(),
    container_pad: getOffsetData(CONTAINER),
    container_rect: CONTAINER.getBoundingClientRect(),
  };
  return data;
}
function computeContainerSize({ width, height }, sizeData = getSizeData()) {
  const computed_size = computePlotSize(sizeData);
  const offsets = computed_size.offsets;

  const plot_data = {
    width: width ?? computed_size.width,
    height: height ?? computed_size.height,
  };

  return {
    width: (width ?? computed_size.width) + offsets.width,
    height: (height ?? computed_size.height) + offsets.height,
    noChange: width == computed_size.width && height == computed_size.height,
  }
}

// This function will change the container size so that the resulting plot will be matching the provided specs
function changeContainerSize({ width, height }, sizeData = getSizeData()) {
  if (!CONTAINER.isPoppedOut()) {
    console.log("Tried to change container size when not popped, ignoring");
    return;
  }

  const csz = computeContainerSize({ width, height }, sizeData);

  if (csz.noChange) {
    console.log("Size is the same as current, ignoring");
    return
  }
  // We are now going to set he width and height of the container
  for (const key of ["width", "height"]) {
    CONTAINER.style[key] = csz[key] + "px";
  }
}
// We now create the function that will update the plot based on the values specified
function updateFromHeader() {
  const header_data = {
    height: config_spans.height.ui_value,
    width: config_spans.width.ui_value,
  };
  changeContainerSize(header_data);
}
// We assign this function to the onblur event of width and height
if (firstRun) {
  for (const container of Object.values(config_spans)) {
    container.ui_span.onblur = (e) => {
      container.ui_value = container.ui_span.textContent;
      updateFromHeader();
    };
  }
}
// This function computes the plot size to use for relayout as a function of the container size
function computePlotSize(data = getSizeData()) {
  // Remove Padding
  const { container_pad, plot_pad, container_rect } = data;
  const offsets = {
    width:
      plot_pad.padding.width +
      plot_pad.border.width +
      plot_pad.offset.left +
      container_pad.padding.width +
      container_pad.border.width,
    height:
      plot_pad.padding.height +
      plot_pad.border.height +
      plot_pad.offset.top +
      container_pad.padding.height +
      container_pad.border.height,
  };
  const sz = {
    width: Math.round(container_rect.width - offsets.width),
    height: Math.round(container_rect.height - offsets.height),
    offsets,
  };
  return sz;
}

// Create the resizeObserver to make the plot even more responsive! :magic:
const resizeObserver = new ResizeObserver((entries) => {
  const sizeData = getSizeData();
  const {container_rect, container_pad} = sizeData;
  let plot_size = computePlotSize(sizeData);
  // We save the height in the PLOT object
  PLOT.container_height = container_rect.height;
  // We deal with some stuff if the container is poppped
  CLIPBOARD_HEADER.style.width = container_rect.width + "px";
  CLIPBOARD_HEADER.style.left = container_rect.left + "px";
  config_spans.height.ui_value = plot_size.height;
  config_spans.width.ui_value = plot_size.width;
  /* 
		The addition of the invalid argument `plutoresize` seems to fix the problem with calling `relayout` simply with `{autosize: true}` as update breaking mouse relayout events tracking. 
		See https://github.com/plotly/plotly.js/issues/6156 for details
		*/
  let config = {
    // If this is popped out, we ignore the original width/height
    width: (CONTAINER.isPoppedOut() ? undefined : original_width) ?? plot_size.width,
    height: (CONTAINER.isPoppedOut() ? undefined : original_height) ?? plot_size.height,
    plutoresize: true,
  };
  Plotly.relayout(PLOT, config).then(() => {
    if (remove_container_size && !CONTAINER.isPoppedOut()) {
      // This is needed to avoid the first resize upon plot creation to already be without a fixed height
      CONTAINER.style.height = "";
      CONTAINER.style.width = "";
      remove_container_size = false;
    }
  });
});

resizeObserver.observe(CONTAINER);


Plotly.react(PLOT, plot_obj).then(() => {
	// Assign the Plotly event listeners
	for (const [key, listener_vec] of Object.entries(plotly_listeners)) {
		for (const listener of listener_vec) {
			PLOT.on(key, listener)
		}
	}
	// Assign the JS event listeners
	for (const [key, listener_vec] of Object.entries(js_listeners)) {
		for (const listener of listener_vec) {
			PLOT.addEventListener(key, listener, {
				signal: controller.signal
			})
		}
	}
}
)


invalidation.then(() => {
	// Remove all plotly listeners
	PLOT.removeAllListeners()
	// Remove all JS listeners
	controller.abort()
	// Remove the resizeObserver
	resizeObserver.disconnect()
})



		return CONTAINER
	</script>

</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš+ÌŸo°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$9ca72278-fff6-4b0f-b72c-e0d3768aff73¹depends_on_disabled_cellsÂ§runtimeÎƒ.¢µpublished_object_keys‘Ù5c6e0de0c-3901-11f0-234e-bd09c571f662/58d51ac87604fe9c¸depends_on_skipped_cellsÂ§erroredÂÙ$020131a1-c68b-403a-9c5e-944edb6220e9Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ-updatevalue (generic function with 2 methods)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš)as°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$020131a1-c68b-403a-9c5e-944edb6220e9¹depends_on_disabled_cellsÂ§runtimeÎ 	 µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$c23475f0-c5f0-49ce-a665-f93c8bda0474Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ3make_blackjack_mdp (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš%sž¶°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$c23475f0-c5f0-49ce-a665-f93c8bda0474¹depends_on_disabled_cellsÂ§runtimeÎ 4|µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$15925cc6-9605-4357-9c2a-cdfe54070989Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚ	’<div class="markdown"><p>Consider an implementation or ordinary importance sampling that updates <span class="tex">$V&#40;s&#41;$</span> incrementally every time a <span class="tex">$G$</span> value is observed for that state.  The equations should be similar to the incremental update rule previously derived for <span class="tex">$V&#40;s&#41;$</span> without importance sampling.</p>
<p>Consider a sequence of returns <span class="tex">$G_1, G_2, \dots , G_&#123;n-1&#125;$</span>, all starting in the same state and each with a corresponding weight <span class="tex">$W_i &#61; \rho_&#123;t_i:T&#40;t_i&#41;-1&#125;$</span>.  We wish to form the estimate</p>
<p class="tex">$$V_n \dot&#61; \frac&#123;\sum_&#123;k&#61;1&#125;^&#123;n-1&#125;W_k G_k&#125;&#123;n-1&#125;, n \geq 2$$</p>
<p>and keep it up-to-date as we obtain a single additional return <span class="tex">$G_n$</span>.  Observe that we can increment n by 1 to get an espression for V in terms of itself.</p>
<p class="tex">$$V_&#123;n&#43;1&#125; &#61; \frac&#123;\sum_&#123;k&#61;1&#125;^n W_k G_k&#125;&#123;n&#125; &#61; \frac&#123;W_n G_n &#43; \sum_&#123;k&#61;1&#125;^&#123;n-1&#125; W_k G_k&#125;&#123;n&#125;$$</p>
<p>Using the original formula for <span class="tex">$V_n$</span>, we can make the following substitution:</p>
<p class="tex">$$\sum_&#123;k&#61;1&#125;^&#123;n-1&#125; W_k G_k &#61; &#40;n-1&#41;V_n$$</p>
<p>which results in </p>
<p class="tex">$$V_&#123;n&#43;1&#125; &#61; \frac&#123;W_n G_n &#43; V_n &#40;n-1&#41;&#125;&#123;n&#125; &#61; V_n &#43; \frac&#123;W_n G_n - V_n&#125;&#123;n&#125;$$</p>
<p>So, to calculate the value function, we can simply apply the following update rule after obtaining new values for W and G:</p>
<p class="tex">$$C \leftarrow C &#43; 1$$</p>
<p class="tex">$$V \leftarrow V &#43; \frac&#123;WG-V&#125;&#123;C&#125;$$</p>
<p>which looks very similar to the ordinary average update rule but with the weight multiplied by G.  C just keeps a running total of the times the state was observed.  Note that C needs to be updated even in the case where W is 0 which is not the case for weighted importance sampling.  A similar inremental update rule is derived later for the weighted case as well as an algorithm for updating the action-value estimate using this method.  Below are code examples for calculating the value estimates for both weighted and normal importance sampling using the incremental implementation.</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"'éÑ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$15925cc6-9605-4357-9c2a-cdfe54070989¹depends_on_disabled_cellsÂ§runtimeÎ ¼Ìµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$be7c096c-cc8c-407b-8287-8fb2ee7150a7Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚ<div class="markdown"><blockquote>
<h3><em>Exercise 5.3</em></h3>
<p>What is the backup diagram for Monte Carlo estimation of <span class="tex">$q_\pi$</span></p>
</blockquote>
<p>Similar to the <span class="tex">$v_\pi$</span> diagram except the root is the s,a pair under consideration followed by the new state and the action taken along the trajectory.  The rewards are still accumulated to the end, just the start of the trajectory is a solid filled in circle that would contain the value for that s,a pair.</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"&¼è°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$be7c096c-cc8c-407b-8287-8fb2ee7150a7¹depends_on_disabled_cellsÂ§runtimeÎ }Óµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$9618a093-cdb7-4589-a783-de8e9021b705Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙD<div class="markdown"><h3>Example 5.3: Solving Blackjack</h3>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"&ñ(°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$9618a093-cdb7-4589-a783-de8e9021b705¹depends_on_disabled_cellsÂ§runtimeÎ ÏÔµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$fa49c253-e016-46a7-ba94-0e7448a7e0aeŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚ|<div class="markdown"><blockquote>
<h3><em>Exercise 5.10</em></h3>
<p>Derive the weighted-average update rule &#40;5.8&#41; from &#40;5.7&#41;.  Follow the pattern of the derivation of the unweighted rule &#40;2.3&#41;.</p>
</blockquote>
<p>Equation &#40;5.7&#41;</p>
<p class="tex">$$V_&#123;n&#125; &#61; \frac&#123;\sum_&#123;k&#61;1&#125;^&#123;n-1&#125; W_k G_k&#125;&#123;\sum_&#123;k&#61;1&#125;^&#123;n-1&#125;W_k&#125; \implies \sum_&#123;k&#61;1&#125;^&#123;n-1&#125; W_k G_k &#61; V_n \sum_&#123;k&#61;1&#125;^&#123;n-1&#125; W_k \tag&#123;a&#125;$$</p>
<p>or </p>
<p class="tex">$$V_&#123;n&#43;1&#125; &#61; \frac&#123;\sum_&#123;k&#61;1&#125;^&#123;n&#125; W_k G_k&#125;&#123;\sum_&#123;k&#61;1&#125;^&#123;n&#125;W_k&#125;$$</p>
<p>now we can expand the expresion for <span class="tex">$V_&#123;n&#43;1&#125;$</span> to get an incremental rule</p>
<p class="tex">$$\begin&#123;flalign&#125;
V_&#123;n&#43;1&#125; &amp;&#61; \frac&#123;W_n G_n &#43; \sum_&#123;k&#61;1&#125;^&#123;n-1&#125; W_k G_k&#125;&#123;\sum_&#123;k&#61;1&#125;^&#123;n&#125;W_k&#125; \\
&amp;&#61; \frac&#123;W_n G_n &#43; V_n \sum_&#123;k&#61;1&#125;^&#123;n-1&#125;W_k&#125;&#123;\sum_&#123;k&#61;1&#125;^&#123;n&#125;W_k&#125; \tag&#123;by &#40;a&#41;&#125; \\
&amp;&#61; \frac&#123;W_n G_n &#43; V_n \sum_&#123;k&#61;1&#125;^&#123;n&#125;W_k - V_n W_n&#125;&#123;\sum_&#123;k&#61;1&#125;^&#123;n&#125;W_k&#125; \\
&amp;&#61; V_n &#43; W_n\frac&#123;G_n - V_n&#125;&#123;\sum_&#123;k&#61;1&#125;^&#123;n&#125;W_k&#125;
\end&#123;flalign&#125;$$</p>
<p>For a fully incremental rule we also have to replace the sum over <span class="tex">$W_k$</span> which can simply be a running total.</p>
<p class="tex">$$C_n &#61; \sum_&#123;k&#61;1&#125;^n W_k$$</p>
<p>the following update rule will produce an equivalent <span class="tex">$C_n$</span> assuming we take <span class="tex">$C_0&#61;0$</span></p>
<p class="tex">$$C_n &#61; C_&#123;n-1&#125; &#43; W_n$$</p>
<p>Now we can rewrite our last expression for <span class="tex">$V_&#123;n&#43;1&#125;$</span></p>
<p class="tex">$$V_&#123;n&#43;1&#125; &#61; V_n &#43; \frac&#123;W_n&#125;&#123;C_n&#125;&#40;G_n - V_n&#41;$$</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš")u°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$fa49c253-e016-46a7-ba94-0e7448a7e0ae¹depends_on_disabled_cellsÂ§runtimeÎ ¢µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$f41dd3e6-81bf-43e4-afc2-fc549b77f610Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyƒ¨elements’’’Ú#9Ã—12875 Matrix{Float32}:
 0.111111  0.00234528   0.0          0.0  0.0  â€¦  0.125  0.111111  0.111111  0.111111
 0.111111  0.0          1.0          0.0  0.0     0.125  0.111111  0.111111  0.111111
 0.111111  2.05737f-20  0.0          0.0  0.0     0.125  0.111111  0.111111  0.111111
 0.111111  0.0          4.02486f-31  0.0  0.0     0.125  0.111111  0.111111  0.111111
 0.111111  5.26108f-25  0.0          0.0  0.2     0.125  0.111111  0.111111  0.111111
 0.111111  0.0106226    0.0          0.0  0.2  â€¦  0.125  0.111111  0.111111  0.111111
 0.111111  0.987032     0.0          1.0  0.2     0.125  0.111111  0.111111  0.111111
 0.111111  0.0          0.0          0.0  0.2     0.125  0.111111  0.111111  0.111111
 0.111111  2.21416f-22  0.0          0.0  0.2     0.0    0.111111  0.111111  0.111111ªtext/plain’’Úÿ9Ã—12875 Matrix{Float32}:
 0.0   -30.0   -89.0     -177.0  -167.0  â€¦  0.0  -332.0  0.0   0.0  0.0  0.0  0.0
 0.0   -96.0   -34.0     -144.0  -266.0     0.0  -109.0  0.0   0.0  0.0  0.0  0.0
 0.0   -56.0  -381.0      -60.0  -123.0     0.0  -259.0  0.0   0.0  0.0  0.0  0.0
 0.0  -688.0   -58.2857  -110.0  -341.0     0.0     0.0  0.0   0.0  0.0  0.0  0.0
 0.0   -63.0  -298.0      -89.0     0.0     0.0     0.0  0.0   0.0  0.0  0.0  0.0
 0.0   -29.0  -312.0      -63.0     0.0  â€¦  0.0     0.0  0.0   0.0  0.0  0.0  0.0
 0.0   -26.0   -84.6667    -9.0     0.0     0.0     0.0  0.0   0.0  0.0  0.0  0.0
 0.0  -326.0  -356.0      -91.0     0.0     0.0     0.0  0.0   0.0  0.0  0.0  0.0
 0.0   -59.0  -285.0      -44.0     0.0     0.0     0.0  0.0  -2.0  0.0  0.0  0.0ªtext/plain¤type¥Tuple¨objectid°b4c794a4eba7a0b5¤mimeÙ!application/vnd.pluto.tree+object¬rootassigneeÀ²last_run_timestampËAÚš3(?ò°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$f41dd3e6-81bf-43e4-afc2-fc549b77f610¹depends_on_disabled_cellsÂ§runtimeÎÕpµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$6d765229-2816-4abb-a868-6be919a96530Š¦queuedÂ¤logs�§runningÂ¦output†¤body…¦prefixÙ[MDP_Opaque{BlackjackState, BlackjackAction, var"#blackjackepisode#19", var"#state_init#18"}¨elements–’¦states’…¦prefixÙ$Main.var"workspace#3".BlackjackState¨elements›’’…¦prefix®BlackjackState¨elements“’£sum’¢12ªtext/plain’¦upcard’¡1ªtext/plain’¢ua’¤trueªtext/plain¤type¦struct¬prefix_short®BlackjackState¨objectid°b87ee777eeec7796Ù!application/vnd.pluto.tree+object’’…¦prefix®BlackjackState¨elements“’£sum’¢12ªtext/plain’¦upcard’¡1ªtext/plain’¢ua’¥falseªtext/plain¤type¦struct¬prefix_short®BlackjackState¨objectid°9f1fbc9e814da979Ù!application/vnd.pluto.tree+object’’…¦prefix®BlackjackState¨elements“’£sum’¢12ªtext/plain’¦upcard’¡2ªtext/plain’¢ua’¤trueªtext/plain¤type¦struct¬prefix_short®BlackjackState¨objectid°e2da203ac0f66b10Ù!application/vnd.pluto.tree+object’’…¦prefix®BlackjackState¨elements“’£sum’¢12ªtext/plain’¦upcard’¡2ªtext/plain’¢ua’¥falseªtext/plain¤type¦struct¬prefix_short®BlackjackState¨objectid°d4197f3fbf671862Ù!application/vnd.pluto.tree+object’’…¦prefix®BlackjackState¨elements“’£sum’¢12ªtext/plain’¦upcard’¡3ªtext/plain’¢ua’¤trueªtext/plain¤type¦struct¬prefix_short®BlackjackState¨objectid°c8a811afca9e5748Ù!application/vnd.pluto.tree+object’’…¦prefix®BlackjackState¨elements“’£sum’¢12ªtext/plain’¦upcard’¡3ªtext/plain’¢ua’¥falseªtext/plain¤type¦struct¬prefix_short®BlackjackState¨objectid°bbd574ae4196bf55Ù!application/vnd.pluto.tree+object’’…¦prefix®BlackjackState¨elements“’£sum’¢12ªtext/plain’¦upcard’¡4ªtext/plain’¢ua’¤trueªtext/plain¤type¦struct¬prefix_short®BlackjackState¨objectid°cc503f48c1f0713fÙ!application/vnd.pluto.tree+object’’…¦prefix®BlackjackState¨elements“’£sum’¢12ªtext/plain’¦upcard’¡4ªtext/plain’¢ua’¥falseªtext/plain¤type¦struct¬prefix_short®BlackjackState¨objectid°25bb4ebe5d2823d6Ù!application/vnd.pluto.tree+object’	’…¦prefix®BlackjackState¨elements“’£sum’¢12ªtext/plain’¦upcard’¡5ªtext/plain’¢ua’¤trueªtext/plain¤type¦struct¬prefix_short®BlackjackState¨objectid°6bc1a41868c39279Ù!application/vnd.pluto.tree+object¤more’ÌÈ’…¦prefix®BlackjackState¨elements“’£sum’¢21ªtext/plain’¦upcard’¢10ªtext/plain’¢ua’¥falseªtext/plain¤type¦struct¬prefix_short®BlackjackState¨objectid°e3281242af43beb1Ù!application/vnd.pluto.tree+object¤type¥Array¬prefix_short ¨objectid°46c688b409ef73b3Ù!application/vnd.pluto.tree+object’«statelookup’…¦prefixÙ1Dict{Main.var"workspace#3".BlackjackState, Int64}¨elements›’’…¦prefix®BlackjackState¨elements“’£sum’¢12ªtext/plain’¦upcard’¡1ªtext/plain’¢ua’¥falseªtext/plain¤type¦struct¬prefix_short®BlackjackState¨objectid°9f1fbc9e814da979Ù!application/vnd.pluto.tree+object’¡2ªtext/plain’’…¦prefix®BlackjackState¨elements“’£sum’¢19ªtext/plain’¦upcard’¡2ªtext/plain’¢ua’¤trueªtext/plain¤type¦struct¬prefix_short®BlackjackState¨objectid°69f09af6603ebcffÙ!application/vnd.pluto.tree+object’£143ªtext/plain’’…¦prefix®BlackjackState¨elements“’£sum’¢12ªtext/plain’¦upcard’¡7ªtext/plain’¢ua’¥falseªtext/plain¤type¦struct¬prefix_short®BlackjackState¨objectid°7cd9112ddd4454cdÙ!application/vnd.pluto.tree+object’¢14ªtext/plain’’…¦prefix®BlackjackState¨elements“’£sum’¢20ªtext/plain’¦upcard’¡3ªtext/plain’¢ua’¥falseªtext/plain¤type¦struct¬prefix_short®BlackjackState¨objectid°af49fd3134dee8e1Ù!application/vnd.pluto.tree+object’£166ªtext/plain’’…¦prefix®BlackjackState¨elements“’£sum’¢16ªtext/plain’¦upcard’¡8ªtext/plain’¢ua’¥falseªtext/plain¤type¦struct¬prefix_short®BlackjackState¨objectid°ce13a84aa34e8895Ù!application/vnd.pluto.tree+object’¢96ªtext/plain’’…¦prefix®BlackjackState¨elements“’£sum’¢17ªtext/plain’¦upcard’¡1ªtext/plain’¢ua’¥falseªtext/plain¤type¦struct¬prefix_short®BlackjackState¨objectid°fb60f06e2a8949fbÙ!application/vnd.pluto.tree+object’£102ªtext/plain’’…¦prefix®BlackjackState¨elements“’£sum’¢13ªtext/plain’¦upcard’¡8ªtext/plain’¢ua’¥falseªtext/plain¤type¦struct¬prefix_short®BlackjackState¨objectid°cb2a499a38978337Ù!application/vnd.pluto.tree+object’¢36ªtext/plain’’…¦prefix®BlackjackState¨elements“’£sum’¢14ªtext/plain’¦upcard’¡3ªtext/plain’¢ua’¥falseªtext/plain¤type¦struct¬prefix_short®BlackjackState¨objectid°1f4c401d4d952b98Ù!application/vnd.pluto.tree+object’¢46ªtext/plain’’…¦prefix®BlackjackState¨elements“’£sum’¢21ªtext/plain’¦upcard’¡9ªtext/plain’¢ua’¥falseªtext/plain¤type¦struct¬prefix_short®BlackjackState¨objectid°9136839ae4cc5aa8Ù!application/vnd.pluto.tree+object’£198ªtext/plain’’…¦prefix®BlackjackState¨elements“’£sum’¢13ªtext/plain’¦upcard’¡5ªtext/plain’¢ua’¥falseªtext/plain¤type¦struct¬prefix_short®BlackjackState¨objectid°16c31c16d6e9163cÙ!application/vnd.pluto.tree+object’¢30ªtext/plain¤more¤type¤Dict¬prefix_short¤Dict¨objectid°d6e65cd5f69af451Ù!application/vnd.pluto.tree+object’§actions’…¦prefixÙ%Main.var"workspace#3".BlackjackAction¨elements’’’…¦prefix£Hit¨elements�¤type¦struct¬prefix_short£Hit¨objectid°ffffffff8d1925f5Ù!application/vnd.pluto.tree+object’’…¦prefix¥Stick¨elements�¤type¦struct¬prefix_short¥Stick¨objectid°ffffffff94fa44e5Ù!application/vnd.pluto.tree+object¤type¥Array¬prefix_short ¨objectid°eeef370a95fddb26Ù!application/vnd.pluto.tree+object’¬actionlookup’…¦prefixÙ2Dict{Main.var"workspace#3".BlackjackAction, Int64}¨elements’’’…¦prefix¥Stick¨elements�¤type¦struct¬prefix_short¥Stick¨objectid°ffffffff94fa44e5Ù!application/vnd.pluto.tree+object’¡2ªtext/plain’’…¦prefix£Hit¨elements�¤type¦struct¬prefix_short£Hit¨objectid°ffffffff8d1925f5Ù!application/vnd.pluto.tree+object’¡1ªtext/plain¤type¤Dict¬prefix_short¤Dict¨objectid°7dff6031b670ac66Ù!application/vnd.pluto.tree+object’ªstate_init’ÙN(::Main.var"workspace#3".var"#state_init#18") (generic function with 1 method)ªtext/plain’©simulator’ÙT(::Main.var"workspace#3".var"#blackjackepisode#19") (generic function with 1 method)ªtext/plain¤type¦struct¬prefix_shortªMDP_Opaque¨objectid°8084d455b072a9b0¤mimeÙ!application/vnd.pluto.tree+object¬rootassignee³const blackjack_mdp²last_run_timestampËAÚš%Á²æ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$6d765229-2816-4abb-a868-6be919a96530¹depends_on_disabled_cellsÂ§runtimeÎÆ›µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$e7de31e8-ae95-4616-86a9-a115a5e24330Š¦queuedÂ¤logs�§runningÂ¦output†¤body…¦prefixÚíMDP_Opaque{@NamedTuple{position::Tuple{Int64, Int64}, velocity::Tuple{Int64, Int64}}, Tuple{Int64, Int64}, var"#simulator#140"{Float64, @NamedTuple{start::Set{Tuple{Int64, Int64}}, finish::Set{Tuple{Int64, Int64}}, body::Set{Tuple{Int64, Int64}}}, var"#take_action#139"{Dict{@NamedTuple{position::Tuple{Int64, Int64}, velocity::Tuple{Int64, Int64}}, Int64}}}, var"#state_init#138"{@NamedTuple{start::Set{Tuple{Int64, Int64}}, finish::Set{Tuple{Int64, Int64}}, body::Set{Tuple{Int64, Int64}}}}}¨elements–’¦states’…¦prefixÙI@NamedTuple{position::Tuple{Int64, Int64}, velocity::Tuple{Int64, Int64}}¨elements›’’ƒ¨elements’’¨position’ƒ¨elements’’’¢18ªtext/plain’’¢16ªtext/plain¤type¥Tuple¨objectid°aeb6f295858259dbÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡0ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°9b52efd7a2a08bd5Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°6696fcabed9a1a6fÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¢18ªtext/plain’’¢16ªtext/plain¤type¥Tuple¨objectid°aeb6f295858259dbÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡0ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°86128cc9b5ae8f4aÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid¯ba4e8247f8683beÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¢18ªtext/plain’’¢16ªtext/plain¤type¥Tuple¨objectid°aeb6f295858259dbÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡0ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°fc41ae7a664555b0Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°8b8fb6d35b83f08eÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¢18ªtext/plain’’¢16ªtext/plain¤type¥Tuple¨objectid°aeb6f295858259dbÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡0ªtext/plain’’¡3ªtext/plain¤type¥Tuple¨objectid°5a8d0f981b76571aÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°922bf9ffd7dc2354Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¢18ªtext/plain’’¢16ªtext/plain¤type¥Tuple¨objectid°aeb6f295858259dbÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡0ªtext/plain’’¡4ªtext/plain¤type¥Tuple¨objectid°6ac4b5902680c6bbÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°7d5c2d6eb80fafa3Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¢18ªtext/plain’’¢16ªtext/plain¤type¥Tuple¨objectid°aeb6f295858259dbÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°1539b04621ff8c7dÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°67049892921af984Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¢18ªtext/plain’’¢16ªtext/plain¤type¥Tuple¨objectid°aeb6f295858259dbÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°78e123e4f427692aÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°5edf932a0cdf0393Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¢18ªtext/plain’’¢16ªtext/plain¤type¥Tuple¨objectid°aeb6f295858259dbÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°e3e6b1884080a98dÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°4efbccd93bf6d74fÙ!application/vnd.pluto.tree+object’	’ƒ¨elements’’¨position’ƒ¨elements’’’¢18ªtext/plain’’¢16ªtext/plain¤type¥Tuple¨objectid°aeb6f295858259dbÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡3ªtext/plain¤type¥Tuple¨objectid°7d75a9159c58bddfÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°4953a4eb18088909Ù!application/vnd.pluto.tree+object¤more’Í2K’ƒ¨elements’’¨position’ƒ¨elements’’’¢23ªtext/plain’’¢27ªtext/plain¤type¥Tuple¨objectid°da74d5c39ad37f7dÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡4ªtext/plain’’¡4ªtext/plain¤type¥Tuple¨objectid°a7048b0d6f799239Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°370c8cd9f01597e7Ù!application/vnd.pluto.tree+object¤type¥Array¬prefix_short ¨objectid°2177c00eb2e7467cÙ!application/vnd.pluto.tree+object’«statelookup’…¦prefixÙVDict{@NamedTuple{position::Tuple{Int64, Int64}, velocity::Tuple{Int64, Int64}}, Int64}¨elements›’’ƒ¨elements’’¨position’ƒ¨elements’’’¢22ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid¯cbfc5affbbf7435Ù!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°78e123e4f427692aÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°e4bf0cf747d0ff6cÙ!application/vnd.pluto.tree+object’¢57ªtext/plain’’ƒ¨elements’’¨position’ƒ¨elements’’’¢28ªtext/plain’’¢24ªtext/plain¤type¥Tuple¨objectid°20a1ce308f12ceacÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°78e123e4f427692aÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°7e55961854356963Ù!application/vnd.pluto.tree+object’¢82ªtext/plain’’ƒ¨elements’’¨position’ƒ¨elements’’’¢23ªtext/plain’’¢24ªtext/plain¤type¥Tuple¨objectid°544e9e193cf19bfbÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡4ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°c772df2bb869c6b4Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°c4c4abfe7b05c49dÙ!application/vnd.pluto.tree+object’¥10246ªtext/plain’’ƒ¨elements’’¨position’ƒ¨elements’’’¡5ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°b43f250e13820c5dÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡0ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°fc41ae7a664555b0Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°8140d1c434ea8616Ù!application/vnd.pluto.tree+object’¤2428ªtext/plain’’ƒ¨elements’’¨position’ƒ¨elements’’’¢13ªtext/plain’’¡4ªtext/plain¤type¥Tuple¨objectid°f9849fc4d6ed0a4bÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡2ªtext/plain’’¡4ªtext/plain¤type¥Tuple¨objectid°fe67fb157b710308Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°fb8bac14b00f0c1aÙ!application/vnd.pluto.tree+object’¤9390ªtext/plain’’ƒ¨elements’’¨position’ƒ¨elements’’’¢16ªtext/plain’’¢16ªtext/plain¤type¥Tuple¨objectid°3164689f12bc7404Ù!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°78e123e4f427692aÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°805c6e6b623dc37fÙ!application/vnd.pluto.tree+object’£157ªtext/plain’’ƒ¨elements’’¨position’ƒ¨elements’’’¢11ªtext/plain’’¡8ªtext/plain¤type¥Tuple¨objectid°9b2ceef039544350Ù!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡4ªtext/plain’’¡4ªtext/plain¤type¥Tuple¨objectid°a7048b0d6f799239Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°2e4a05a6c93c1820Ù!application/vnd.pluto.tree+object’¤3525ªtext/plain’’ƒ¨elements’’¨position’ƒ¨elements’’’¡6ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°4d2c7a74e69c74a3Ù!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡2ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°74f4975686c560b8Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°ce6c6a5f7f145ad0Ù!application/vnd.pluto.tree+object’¤6213ªtext/plain’’ƒ¨elements’’¨position’ƒ¨elements’’’¢18ªtext/plain’’¢15ªtext/plain¤type¥Tuple¨objectid°f416ee491fa413beÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡3ªtext/plain¤type¥Tuple¨objectid°7d75a9159c58bddfÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°ba1a83d36318f0eaÙ!application/vnd.pluto.tree+object’¤9434ªtext/plain’’ƒ¨elements’’¨position’ƒ¨elements’’’¡3ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°c1258421771ca213Ù!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡4ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°ab958923df88f7e9Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°e0a57c37bcb0dd81Ù!application/vnd.pluto.tree+object’¥11772ªtext/plain¤more¤type¤Dict¬prefix_short¤Dict¨objectid°4c3cc9fe0afa45e6Ù!application/vnd.pluto.tree+object’§actions’…¦prefix³Tuple{Int64, Int64}¨elements™’’ƒ¨elements’’’¢-1ªtext/plain’’¢-1ªtext/plain¤type¥Tuple¨objectid°a5f5003e88013c47Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢-1ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°29547c053cf46d53Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢-1ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°d7f044f2876f60eaÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡0ªtext/plain’’¢-1ªtext/plain¤type¥Tuple¨objectid°4b2797d2a8e67906Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡0ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°9b52efd7a2a08bd5Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡0ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°86128cc9b5ae8f4aÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡1ªtext/plain’’¢-1ªtext/plain¤type¥Tuple¨objectid°467534c86eaf64c9Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡1ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°1539b04621ff8c7dÙ!application/vnd.pluto.tree+object’	’ƒ¨elements’’’¡1ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°78e123e4f427692aÙ!application/vnd.pluto.tree+object¤type¥Array¬prefix_short ¨objectid°d05a5360a94e8964Ù!application/vnd.pluto.tree+object’¬actionlookup’…¦prefixÙ Dict{Tuple{Int64, Int64}, Int64}¨elements™’’ƒ¨elements’’’¡0ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°9b52efd7a2a08bd5Ù!application/vnd.pluto.tree+object’¡5ªtext/plain’’ƒ¨elements’’’¡1ªtext/plain’’¢-1ªtext/plain¤type¥Tuple¨objectid°467534c86eaf64c9Ù!application/vnd.pluto.tree+object’¡7ªtext/plain’’ƒ¨elements’’’¢-1ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°29547c053cf46d53Ù!application/vnd.pluto.tree+object’¡2ªtext/plain’’ƒ¨elements’’’¡0ªtext/plain’’¢-1ªtext/plain¤type¥Tuple¨objectid°4b2797d2a8e67906Ù!application/vnd.pluto.tree+object’¡4ªtext/plain’’ƒ¨elements’’’¡0ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°86128cc9b5ae8f4aÙ!application/vnd.pluto.tree+object’¡6ªtext/plain’’ƒ¨elements’’’¡1ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°78e123e4f427692aÙ!application/vnd.pluto.tree+object’¡9ªtext/plain’’ƒ¨elements’’’¢-1ªtext/plain’’¢-1ªtext/plain¤type¥Tuple¨objectid°a5f5003e88013c47Ù!application/vnd.pluto.tree+object’¡1ªtext/plain’’ƒ¨elements’’’¢-1ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°d7f044f2876f60eaÙ!application/vnd.pluto.tree+object’¡3ªtext/plain’’ƒ¨elements’’’¡1ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°1539b04621ff8c7dÙ!application/vnd.pluto.tree+object’¡8ªtext/plain¤type¤Dict¬prefix_short¤Dict¨objectid°641a4541bab53459Ù!application/vnd.pluto.tree+object’ªstate_init’Ù¿(::Main.var"workspace#3".var"#state_init#138"{@NamedTuple{start::Set{Tuple{Int64, Int64}}, finish::Set{Tuple{Int64, Int64}}, body::Set{Tuple{Int64, Int64}}}}) (generic function with 1 method)ªtext/plain’©simulator’ÚL(::Main.var"workspace#3".var"#simulator#140"{Float64, @NamedTuple{start::Set{Tuple{Int64, Int64}}, finish::Set{Tuple{Int64, Int64}}, body::Set{Tuple{Int64, Int64}}}, Main.var"workspace#3".var"#take_action#139"{Dict{@NamedTuple{position::Tuple{Int64, Int64}, velocity::Tuple{Int64, Int64}}, Int64}}}) (generic function with 1 method)ªtext/plain¤type¦struct¬prefix_shortªMDP_Opaque¨objectid°fe3759ed2536a85a¤mimeÙ!application/vnd.pluto.tree+object¬rootassignee°const track2_mdp²last_run_timestampËAÚš/ÍH°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$e7de31e8-ae95-4616-86a9-a115a5e24330¹depends_on_disabled_cellsÂ§runtimeÎ ³Qµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$fff54c56-5afe-4d89-9dc5-502d08c89de9Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ-make_col_set (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš/XÕ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$fff54c56-5afe-4d89-9dc5-502d08c89de9¹depends_on_disabled_cellsÂ§runtimeÎ ‚hµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$9793b5c9-d4ec-492d-a72d-8737bb65c8a5Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚþ<div class="markdown"><p>Given a starting state <span class="tex">$S_t$</span>, the probability of the subsequent state-action trajectory, <span class="tex">$A_t, S_&#123;t&#43;1&#125;, A_&#123;t&#43;1&#125;, \ldots ,S_T$</span>, occuring under any policy <span class="tex">$\pi$</span> is:</p>
<p class="tex">$$Pr_&#123;\pi&#125;\&#123;\mathcal&#123;traj&#125;\&#125; &#61; \prod_&#123;k&#61;t&#125;^&#123;T-1&#125; \pi&#40;A_k|S_k&#41;p&#40;S_&#123;k&#43;1&#125;|S_k, A_k&#41;$$</p>
<p>where <span class="tex">$p$</span> here is the state-transition probability function defined by &#40;3.4&#41;.  Thus, the relative probability of the trajectory under the target and behavior policies &#40;the importance-sampling ratio&#41; is</p>
<p class="tex">$$\rho_&#123;t:T-1&#125; \dot&#61; \prod_&#123;k&#61;t&#125;^&#123;T-1&#125;\frac&#123;\pi&#40;A_k|S_k&#41;&#125;&#123;b&#40;A_k|S_k&#41;&#125;$$</p>
<p>To estimate <span class="tex">$v_\pi&#40;s&#41;$</span>, we simply scale the returns by the ratios and average the results:</p>
<p class="tex">$$V&#40;s&#41; \dot&#61; \frac&#123;\sum_&#123;t \in \mathscr&#123;T&#125;&#40;s&#41;&#125; \rho_&#123;t:T&#40;t&#41;-1&#125;G_t&#125;&#123;|\mathscr&#123;T&#125;&#40;s&#41;|&#125;$$</p>
<p>When importance sampling is done as a simple average in this way it is called <em>ordinary importance sampling</em>.</p>
<p>An important alternative is <em>weighted importance sampling</em>, which uses a <em>weighted</em> average, defined as</p>
<p class="tex">$$V&#40;s&#41; \dot&#61; \frac&#123;\sum_&#123;t \in \mathscr&#123;T&#125;&#40;s&#41;&#125; \rho_&#123;t:T&#40;t&#41;-1&#125;G_t&#125;&#123;\sum_&#123;t \in \mathscr&#123;T&#125;&#40;s&#41;&#125; \rho_&#123;t:T&#40;t&#41;-1&#125;&#125;$$</p>
<p>, or zero is the denominator is zero.</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"'´)°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$9793b5c9-d4ec-492d-a72d-8737bb65c8a5¹depends_on_disabled_cellsÂ§runtimeÎ êµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$1117e6c3-2736-46a4-bac2-d3c99c1998b6Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚ‹<bond def="mcÏµs2" unique_id="un/mE9EAmSHf"><span style='display: contents;'>
	<span style='display: contents;'><div class="markdown"><table><tr><th align="center">Number of Episodes</th><th align="center">Ïµ</th><th align="center">Decay Ïµ</th></tr><tr><td align="center"><pl-combined-child key='rhymrreksi' style='display: contents;'><input type='number' min='1' step='1' max='10000000' value='1000'></pl-combined-child></td><td align="center"><pl-combined-child key='rhymrreksi' style='display: contents;'><input type='number' min='0.001' step='0.001' max='1.0' value='0.01'></pl-combined-child></td><td align="center"><pl-combined-child key='rhymrreksi' style='display: contents;'><input type="checkbox"></pl-combined-child></td></tr></table>
</div><script id='rhymrreksi'>
const div = currentScript.parentElement
let key = "rhymrreksi"
const inputs = div.querySelectorAll(`pl-combined-child[key='${key}'] > *:first-child`)

const values = Array(inputs.length)

inputs.forEach(async (el,i) => {
	el.oninput = (e) => {
		e.stopPropagation()
	}
	const gen = Generators.input(el)
	while(true) {
		values[i] = await gen.next().value
		div.dispatchEvent(new CustomEvent("input", {}))
	}
})


let set_input_value = (() => {
	let result = null
	try {
	result = setBoundElementValueLikePluto
} catch (e) {
	result = ((input, new_value) => {
	// fallback in case https://github.com/fonsp/Pluto.jl/pull/1755 is not available
    if (new_value == null) {
        //@ts-ignore
        input.value = new_value
        return
    }
    if (input instanceof HTMLInputElement) {
        switch (input.type) {
            case "range":
            case "number": {
                if (input.valueAsNumber !== new_value) {
                    input.valueAsNumber = new_value
                }
                return
            }
            case "date": {
                if (input.valueAsDate == null || Number(input.valueAsDate) !== Number(new_value)) {
                    input.valueAsDate = new_value
                }
                return
            }
            case "checkbox": {
                if (input.checked !== new_value) {
                    input.checked = new_value
                }
                return
            }
            case "file": {
                // Can't set files :(
                return
            }
        }
    } else if (input instanceof HTMLSelectElement && input.multiple) {
        for (let option of Array.from(input.options)) {
            option.selected = new_value.includes(option.value)
        }
        return
    }
    //@ts-ignore
    if (input.value !== new_value) {
        //@ts-ignore
        input.value = new_value
    }
})
}
return result
})()


Object.defineProperty(div, 'value', {
	get: () => values,
	set: (newvals) => {
		if(!newvals) {
			return
		}
		inputs.forEach((el, i) => {
			values[i] = newvals[i]
			set_input_value(el, newvals[i])
		})
},
	configurable: true,
});

</script></span>
	<input type=submit id='bowhisexvj'>
	<script id='bowhisexvj'>

let key = "bowhisexvj"

let div = currentScript.parentElement
let button = currentScript.previousElementSibling
let input = div.firstElementChild
if(input === button) {
	return
}


let set_input_value = (() => {
	let result = null
	try {
	result = setBoundElementValueLikePluto
} catch (e) {
	result = ((input, new_value) => {
	// fallback in case https://github.com/fonsp/Pluto.jl/pull/1755 is not available
    if (new_value == null) {
        //@ts-ignore
        input.value = new_value
        return
    }
    if (input instanceof HTMLInputElement) {
        switch (input.type) {
            case "range":
            case "number": {
                if (input.valueAsNumber !== new_value) {
                    input.valueAsNumber = new_value
                }
                return
            }
            case "date": {
                if (input.valueAsDate == null || Number(input.valueAsDate) !== Number(new_value)) {
                    input.valueAsDate = new_value
                }
                return
            }
            case "checkbox": {
                if (input.checked !== new_value) {
                    input.checked = new_value
                }
                return
            }
            case "file": {
                // Can't set files :(
                return
            }
        }
    } else if (input instanceof HTMLSelectElement && input.multiple) {
        for (let option of Array.from(input.options)) {
            option.selected = new_value.includes(option.value)
        }
        return
    }
    //@ts-ignore
    if (input.value !== new_value) {
        //@ts-ignore
        input.value = new_value
    }
})
}
return result
})()



let private_value = null
let public_value = null




private_value = public_value = div.value
if(private_value != null) {
	set_input_value(input, private_value)
} else {

	// private_value = public_value = input.value
}

input.oninput = (e) => {
	e.stopPropagation()
}
const gen = Generators.input(input)

// If the child does not have an initial value, the `gen.next().value` promise will never resolve. If it does, then it resolves instantly.
let first_value = await Promise.any([
	gen.next().value,
	Promise.resolve(undefined)
])
private_value = public_value = first_value

;(async () => {
	while(true) {
		private_value = await gen.next().value
		// div.dispatchEvent(new CustomEvent("input", {}))
	}
})()

button.addEventListener("click", () => {
	public_value = private_value
	div.dispatchEvent(new CustomEvent("input", {}))
})


Object.defineProperty(div, 'value', {
	get: () => public_value,
	set: (newval) => {
		private_value = newval
		public_value = newval
		
		set_input_value(input, newval)
	},
	configurable: true,
});

</script></span></bond>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš3î1n°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$1117e6c3-2736-46a4-bac2-d3c99c1998b6¹depends_on_disabled_cellsÂ§runtimeÎ	Øìµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$5948f670-1203-4b75-8517-f8470f5d01aaŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ+figure_5_4 (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš,ªü°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$5948f670-1203-4b75-8517-f8470f5d01aa¹depends_on_disabled_cellsÂ§runtimeÎ7<šµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$2ed88aa5-fc42-4a57-924d-e918805e2208Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ-<div class="markdown"><h5>Track 2</h5>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"+ O°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$2ed88aa5-fc42-4a57-924d-e918805e2208¹depends_on_disabled_cellsÂ§runtimeÎ lµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$c9bd778c-217a-4664-8cde-841beca10307Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚ<div>Reward = +1 on All Transitions</div>
<div style="display: flex; align-items: center; background-color: lightgray; color: black; height: 150px; width: 100px;">
<div class="backup" style="transform: scale(130%)">
	<div class="circlestate"></div>
	<div class="arrow"></div>
	<div class="term"></div>
</div>
<div>
	<div class="loop"></div>
	<div style="transform: translateY(-15px)">1-p</div>
</div>
</div>
<style>
	.loop {
		display: flex;
		border-width: 2px 0px 0px 2px;
		border-style: solid;
		border-color: black;
		width: 38px;
		height: 28px;
		border-radius: 50% 50% 50% 15%;
		transform: translateY(-30px) rotate(45deg);
	}
	.loop::before {
		content: '';
		position: relative;
		width: 5px;
		height: 5px;
		border-width: 0px 0px 3px 3px;
		border-style: solid;
		border-color: black;
		transform: translateX(-4px) translateY(17px) rotate(-45deg)
	}
	.loop::after {
		content: 'p';
		border-width: 0px 2px 2px 0px;
		border-style: solid;
		border-color: black;
		width: 38px;
		height: 28px;
		border-radius: 50% 50% 50% 0%;
	}
</style>
¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš)¦Û¥°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$c9bd778c-217a-4664-8cde-841beca10307¹depends_on_disabled_cellsÂ§runtimeÎ‹©jµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$605b045d-fe5c-426b-9f55-b7dd1d037c50Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙY<div class="markdown"><p>Example trajectories after training for 1000 episodes</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš2Àé2°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$605b045d-fe5c-426b-9f55-b7dd1d037c50¹depends_on_disabled_cellsÂ§runtimeÎ §Îµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$88335fca-fd87-487b-9de2-ea7c779b54cfŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙJ<div class="markdown"><h2>5.9 Per-decision Importance Sampling</h2>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"+Þ˜°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$88335fca-fd87-487b-9de2-ea7c779b54cf¹depends_on_disabled_cellsÂ§runtimeÎ Þµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$fd91d00a-f94f-40ff-88a7-9d85f05acc96Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ-make_row_set (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš/QÒk°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$fd91d00a-f94f-40ff-88a7-9d85f05acc96¹depends_on_disabled_cellsÂ§runtimeÎ ³ µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$a59d9c84-d35f-4a9b-9fb6-13e30cdd7c3aŠ¦queuedÂ¤logs�§runningÂ¦output†¤body©2.01716f0¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš-t›¿°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$a59d9c84-d35f-4a9b-9fb6-13e30cdd7c3a¹depends_on_disabled_cellsÂ§runtimeÎ™yÌµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$df3c4a33-45f1-4cc2-8c06-d500a0eecc8fŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyƒ¨elements“’¥start’…¦prefix¸Set{Tuple{Int64, Int64}}¨elements–’’ƒ¨elements’’’¡0ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°9b52efd7a2a08bd5Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡4ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°c772df2bb869c6b4Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡5ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°973ae957c0c386bdÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡2ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°83bf2aef4031930bÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡3ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°aa4c36dcad24fa29Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡1ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°1539b04621ff8c7dÙ!application/vnd.pluto.tree+object¤type£Set¬prefix_short£Set¨objectid°1d8241165bb36cd8Ù!application/vnd.pluto.tree+object’¦finish’…¦prefix¸Set{Tuple{Int64, Int64}}¨elements–’’ƒ¨elements’’’¢13ªtext/plain’’¢27ªtext/plain¤type¥Tuple¨objectid°54596a77c929eebdÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢13ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°e62a3fcc16b8e2edÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢13ªtext/plain’’¢30ªtext/plain¤type¥Tuple¨objectid°8412ec158a86a5ddÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢13ªtext/plain’’¢29ªtext/plain¤type¥Tuple¨objectid°a412ad26df95fe95Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢13ªtext/plain’’¢26ªtext/plain¤type¥Tuple¨objectid°d220e80edae3ebdbÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢13ªtext/plain’’¢31ªtext/plain¤type¥Tuple¨objectid°dd11b696ef064776Ù!application/vnd.pluto.tree+object¤type£Set¬prefix_short£Set¨objectid°445dadcb9dd2ee11Ù!application/vnd.pluto.tree+object’¤body’…¦prefix¸Set{Tuple{Int64, Int64}}¨elements›’’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢-2ªtext/plain’’¢10ªtext/plain¤type¥Tuple¨objectid°9461b7cf1c0d4966Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢-1ªtext/plain’’¡4ªtext/plain¤type¥Tuple¨objectid°6ab5d2dd7af393ceÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡2ªtext/plain’’¢26ªtext/plain¤type¥Tuple¨objectid°d3f46239e4706803Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡5ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°eb92527562a71cccÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢-1ªtext/plain’’¢22ªtext/plain¤type¥Tuple¨objectid°6f6a11db6a4c9b77Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡0ªtext/plain’’¢17ªtext/plain¤type¥Tuple¨objectid°7be014bd27506452Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡6ªtext/plain’’¢29ªtext/plain¤type¥Tuple¨objectid°bcd5c7e53eb2beafÙ!application/vnd.pluto.tree+object’	’ƒ¨elements’’’¡9ªtext/plain’’¢26ªtext/plain¤type¥Tuple¨objectid°6f8558ee5165148dÙ!application/vnd.pluto.tree+object’
’ƒ¨elements’’’¢-2ªtext/plain’’¢21ªtext/plain¤type¥Tuple¨objectid°a97d298421d9eb40Ù!application/vnd.pluto.tree+object¤more¤type£Set¬prefix_short£Set¨objectid°c62bd8def750e86dÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°60c6d3bae0348446¤mimeÙ!application/vnd.pluto.tree+object¬rootassignee¬const track1²last_run_timestampËAÚš/�GN°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$df3c4a33-45f1-4cc2-8c06-d500a0eecc8f¹depends_on_disabled_cellsÂ§runtimeÎ´�µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$e2fc1d47-2ee9-4844-a6b1-16f76531da86Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙa<bond def="run3_2" unique_id="/2bK&#43;8/fRo4&#43;"><input type="button" value="Run Race"></bond>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš3÷i°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$e2fc1d47-2ee9-4844-a6b1-16f76531da86¹depends_on_disabled_cellsÂ§runtimeÎ 
önµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$2d36ebe3-1a86-4cad-a235-baec726da926Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚñ<div class="markdown"><h4>Example Random Trajectories on Each Track</h4>
<p>The black arrows represent the velocity of the car at that position, and the red arrows show the policy action to change the velocity.  Note that only non-negative values are allowed for velocity to some of the actions have no impact.  Also, the car is not allowed by be stopped so if an action were to reduce the velocity to 0, then a random velocity of &#43;1 will be assigned to either the x or y direction.</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"*]ž°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$2d36ebe3-1a86-4cad-a235-baec726da926¹depends_on_disabled_cellsÂ§runtimeÎ µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$dfc2d648-ec08-49cd-a55f-72a766cad728Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyƒ¨elements’’’Ú9Ã—7300 Matrix{Float32}:
 0.111111  0.111111  0.111111  0.111111  â€¦  0.111111  0.111111  0.111111  0.111111
 0.111111  0.111111  0.111111  0.111111     0.111111  0.111111  0.111111  0.111111
 0.111111  0.111111  0.111111  0.111111     0.111111  0.111111  0.111111  0.111111
 0.111111  0.111111  0.111111  0.111111     0.111111  0.111111  0.111111  0.111111
 0.111111  0.111111  0.111111  0.111111     0.111111  0.111111  0.111111  0.111111
 0.111111  0.111111  0.111111  0.111111  â€¦  0.111111  0.111111  0.111111  0.111111
 0.111111  0.111111  0.111111  0.111111     0.111111  0.111111  0.111111  0.111111
 0.111111  0.111111  0.111111  0.111111     0.111111  0.111111  0.111111  0.111111
 0.111111  0.111111  0.111111  0.111111     0.111111  0.111111  0.111111  0.111111ªtext/plain’’Ú9Ã—7300 Matrix{Float32}:
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  â€¦  0.0  0.0  0.0   0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0   0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0   0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0   0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0   0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0  â€¦  0.0  0.0  0.0   0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0  -1.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0   0.0  0.0  0.0  0.0  0.0
 0.0  0.0  0.0  0.0  0.0  0.0  0.0  0.0     0.0  0.0  0.0   0.0  0.0  0.0  0.0  0.0ªtext/plain¤type¥Tuple¨objectid°5321b0339663132b¤mimeÙ!application/vnd.pluto.tree+object¬rootassigneeÀ²last_run_timestampËAÚš1°’°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$dfc2d648-ec08-49cd-a55f-72a766cad728¹depends_on_disabled_cellsÂ§runtimeÎTµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$7ee4e17e-c1a9-4df0-a014-114bebcb4f52Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ/makegridsquare (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš/èÓg°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$7ee4e17e-c1a9-4df0-a014-114bebcb4f52¹depends_on_disabled_cellsÂ§runtimeÎ #øµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$2d10281a-a4af-4ea8-b63b-e11f2d0893edŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ4make_greedy_policy! (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš%ä:›°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$2d10281a-a4af-4ea8-b63b-e11f2d0893ed¹depends_on_disabled_cellsÂ§runtimeÎ )Ôµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$e87932d9-fbc0-4ea5-a8ee-28eac5eed84fŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ*scoregame (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš%6=.°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$e87932d9-fbc0-4ea5-a8ee-28eac5eed84f¹depends_on_disabled_cellsÂ§runtimeÎ¯ì²µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$1cc46e33-6885-4d6f-805e-9ff928f1cf23Š¦queuedÂ¤logs�§runningÂ¦output†¤body…¦prefix§Float64¨elementsŸ’’£0.0ªtext/plain’’£1.0ªtext/plain’’£2.0ªtext/plain’’£3.0ªtext/plain’’£4.0ªtext/plain’’§1.41421ªtext/plain’’§2.23607ªtext/plain’’§3.16228ªtext/plain’	’§4.12311ªtext/plain’
’§2.82843ªtext/plain’’§3.60555ªtext/plain’’§4.47214ªtext/plain’’§4.24264ªtext/plain’’£5.0ªtext/plain’’§5.65685ªtext/plain¤type¥Array¬prefix_short ¨objectid°92c7ba6aa0ad7162¤mimeÙ!application/vnd.pluto.tree+object¬rootassigneeµconst racetrackspeeds²last_run_timestampËAÚš/*®°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$1cc46e33-6885-4d6f-805e-9ff928f1cf23¹depends_on_disabled_cellsÂ§runtimeÎÄ…µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$f79d97bb-341a-46ad-bdfc-d080af13e2dfŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙI<div class="markdown"><h4>Monte Carlo Ïµ-Soft Solution Method</h4>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"+Wâ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$f79d97bb-341a-46ad-bdfc-d080af13e2df¹depends_on_disabled_cellsÂ§runtimeÎ Øóµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$6a11daf7-2859-41fa-9c3d-d1f3580dbb5fŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ<<div class="markdown"><h3>Example 5.1: Blackjack</h3>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"&)R°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$6a11daf7-2859-41fa-9c3d-d1f3580dbb5f¹depends_on_disabled_cellsÂ§runtimeÎ Þµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$985f0537-2bbe-4dbb-a113-8ac98d2e0a5fŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚm‚<div class="markdown"><p>Statistics for Steps to Finish Race on Track 1</p>

<table><tr><th align="right">Statistic</th><th align="right"><div class="markdown"><p>Monte Carlo Ïµ-Soft</p>
</div></th><th align="right">Random Policy</th></tr><tr><td align="right">Mean</td><td align="right">81</td><td align="right">2557</td></tr><tr><td align="right">Median</td><td align="right">58</td><td align="right">1946</td></tr><tr><td align="right">Std</td><td align="right">70</td><td align="right">2207</td></tr><tr><td align="right">Minimum</td><td align="right">14</td><td align="right">14</td></tr><tr><td align="right">Maximum</td><td align="right">555</td><td align="right">9974</td></tr></table>
<p>Cummulative Distribution Function of Steps to Finish Race 	<script id='plot_1'>
		// We start by putting all the variable interpolation here at the beginning
		// We have to convert all typedarrays in the layout to normal arrays. See Issue #25
		// We use lodash for this for compactness
		function removeTypedArray(o) {
			return _.isTypedArray(o) ? Array.from(o) :
			_.isPlainObject(o) ? _.mapValues(o, removeTypedArray) : 
			o
		}

		// Publish the plot object to JS
		let plot_obj = _.update(/* See the documentation for AbstractPlutoDingetjes.Display.published_to_js */ getPublishedObject("c6e0de0c-3901-11f0-234e-bd09c571f662/6a054f00f0376f57"), "layout", removeTypedArray)
		// Get the plotly listeners
		const plotly_listeners = {}
		// Get the JS listeners
		const js_listeners = {}
		// Deal with eventual custom classes
		let custom_classlist = []


		// Load the plotly library
		let Plotly = undefined
		try {
			let _mod = await import("./plotlyjs/plotlyjs-2.26.2.min.js")
			Plotly = _mod.default
		} catch (e) {
			console.log("Local load failed, trying with the web esm.sh version")
			let _mod = await import("https://esm.sh/plotly.js-dist-min@2.26.2/es2022/plotly.js-dist-min.mjs")
			Plotly = _mod.default
		}

		// Check if we have to force local mathjax font cache
		if (false && window?.MathJax?.config?.svg?.fontCache === 'global') {
			window.MathJax.config.svg.fontCache = 'local'
		}

		// Flag to check if this cell was  manually ran or reactively ran
const firstRun = this ? false : true
const CONTAINER = this ?? html`<div class='plutoplotly-container'>`
const PLOT = CONTAINER.querySelector('.js-plotly-plot') ?? CONTAINER.appendChild(html`<div>`)
const parent = CONTAINER.parentElement
// We use a controller to remove event listeners upon invalidation
const controller = new AbortController()
// We have to add this to keep supporting @bind with the old API using PLOT
PLOT.addEventListener('input', (e) => {
	CONTAINER.value = PLOT.value
	if (e.bubbles) {
		return
	}
	CONTAINER.dispatchEvent(new CustomEvent('input'))
}, { signal: controller.signal })

	// This create the style subdiv on first run
	firstRun && CONTAINER.appendChild(html`
	<style>
	.plutoplotly-container {
		width: 100%;
		height: 100%;
		min-height: 0;
		min-width: 0;
	}
	.plutoplotly-container .js-plotly-plot .plotly div {
		margin: 0 auto; // This centers the plot
	}
	.plutoplotly-container.popped-out {
		overflow: auto;
		z-index: 1000;
		position: fixed;
		resize: both;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		border-top-left-radius: 0px;
		border-top-right-radius: 0px;
	}
	.plutoplotly-clipboard-header {
		display: flex;
		flex-flow: row wrap;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-top-left-radius: 12px;
		border-top-right-radius: 12px;
		position: fixed;
		z-index: 1001;
		cursor: move;
		transform: translate(0px, -100%);
		padding: 5px;
	}
	.plutoplotly-clipboard-header span {
		display: inline-block;
		flex: 1
	}
	.plutoplotly-clipboard-header.hidden {
		display: none;
	}
	.clipboard-span {
		position: relative;
	}
	.clipboard-value {
		padding-right: 5px;
		padding-left: 2px;
		cursor: text;
	}
	.clipboard-span.format {
		display: none;
	}
	.clipboard-span.filename {
		flex: 0 0 100%;
		text-align: center;
		border-top: 3px solid var(--kbd-border-color);
		margin-top: 5px;
		display: none;
	}
	.plutoplotly-container.filesave .clipboard-span.filename {
		display: inline-block;
	}
	.clipboard-value.filename {
		margin-left: 3px;
		text-align: left;
		min-width: min(60%, min-content);
	}
	.plutoplotly-container.filesave .clipboard-span.format {
		display: inline-flex;
	}
	.clipboard-span.format .label {
		flex: 0 0 0;
	}
	.clipboard-value.format {
		position: relative;
		flex: 1 0 auto;
		min-width: 30px;
		margin-right: 10px;
	}
	div.format-options {
		display: inline-flex;
		flex-flow: column;
		position: absolute;
		background: var(--main-bg-color);
		border-radius: 12px;
		padding-left: 3px;
		z-index: 2000;
	}
	div.format-options:hover {
		cursor: pointer;
		border: 3px solid var(--kbd-border-color);
		padding: 3px;
		transform: translate(-3px, -6px);
	}
	div.format-options .format-option {
		display: none;
	}
	div.format-options:hover .format-option {
		display: inline-block;
	}
	.format-option:not(.selected) {
		margin-top: 3px;
	}
	div.format-options .format-option.selected {
		order: -1;
		display: inline-block;
	}
	.format-option:hover {
		background-color: var(--kbd-border-color);
	}
	span.config-value {
		font-weight: normal;
		color: var(--pluto-output-color);
		display: none;
		position: absolute;
		background: var(--main-bg-color);
		border: 3px solid var(--kbd-border-color);
		border-radius: 12px;
		transform: translate(0px, calc(-100% - 10px));
		padding: 5px;
	}
	.label {
		user-select: none;
	}
	.label:hover span.config-value {
		display: inline-block;
		min-width: 150px;
	}
	.clipboard-span.matching-config .label {
		color: var(--cm-macro-color);
		font-weight: bold;
	}
	.clipboard-span.different-config .label {
		color: var(--cm-tag-color);
		font-weight: bold;
	}
</style>
`)

let original_height = plot_obj.layout.height
let original_width = plot_obj.layout.width
// For the height we have to also put a fixed value in case the plot is put on a non-fixed-size container (like the default wrapper)
// We define a variable to check whether we still have to remove the fixed height
let remove_container_size = firstRun
let container_height = original_height ?? PLOT.container_height ?? 400
CONTAINER.style.height = container_height + 'px'

// We create a Promise version of setTimeout
function delay(ms) {
  return new Promise((resolve) => setTimeout(resolve, ms));
}

// We import interact for dragging/resizing
const { default: interact } = await import('https://esm.sh/interactjs@1.10.19')


function getImageOptions() {
  const o = plot_obj.config.toImageButtonOptions ?? {};
  return {
    format: o.format ?? "png",
    width: o.width ?? original_width,
    height: o.height ?? original_height,
    scale: o.scale ?? 1,
    filename: o.filename ?? "newplot",
  };
}

const CLIPBOARD_HEADER =
  CONTAINER.querySelector(".plutoplotly-clipboard-header") ??
  CONTAINER.insertAdjacentElement(
    "afterbegin",
    html`<div class="plutoplotly-clipboard-header hidden">
      <span class="clipboard-span format"
        ><span class="label">Format:</span
        ><span class="clipboard-value format"></span
      ></span>
      <span class="clipboard-span width"
        ><span class="label">Width:</span
        ><span class="clipboard-value width"></span>px</span
      >
      <span class="clipboard-span height"
        ><span class="label">Height:</span
        ><span class="clipboard-value height"></span>px</span
      >
      <span class="clipboard-span scale"
        ><span class="label">Scale:</span
        ><span class="clipboard-value scale"></span
      ></span>
      <button class="clipboard-span set">Set</button>
      <button class="clipboard-span unset">Unset</button>
      <span class="clipboard-span filename"
        ><span class="label">Filename:</span
        ><span class="clipboard-value filename"></span
      ></span>
    </div>`
  );

function checkConfigSync(container) {
  const valid_classes = [
    "missing-config",
    "matching-config",
    "different-config",
  ];
  function setClass(cl) {
    for (const name of valid_classes) {
      container.classList.toggle(name, name == cl);
    }
  }
  // We use the custom getters we'll set up in the container
  const { ui_value, config_value, config_span, key } = container;
  if (config_value === undefined) {
    setClass("missing-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> is not present in the config.`;
  } else if (ui_value == config_value) {
    setClass("matching-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has the same value in the config and in the header.`;
  } else {
    setClass("different-config");
    config_span.innerHTML = `The key <b><em>${key}</em></b> has a different value (<em>${config_value}</em>) in the config.`;
  }
  // Add info about setting and unsetting
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click on the label <em><b>once</b></em> to set the current UI value in the config.`
  );
  config_span.insertAdjacentHTML(
    "beforeend",
    `<br>Click <em><b>twice</b></em> to remove this key from the config.`
  );
}

const valid_formats = ["png", "svg", "webp", "jpeg", "full-json"];
function initializeUIValueSpan(span, key, value) {
  const container = span.closest(".clipboard-span");
  span.contentEditable = key === "format" ? "false" : "true";
  let parse = (x) => x;
  let update = (x) => (span.textContent = x);
  if (key === "width" || key === "height") {
    parse = (x) => Math.round(parseFloat(x));
  } else if (key === "scale") {
    parse = parseFloat;
  } else if (key === "format") {
    // We remove contentEditable
    span.contentEditable = "false";
    // Here we first add the subspans for each option
    const opts_div = span.appendChild(html`<div class="format-options"></div>`);
    for (const fmt of valid_formats) {
      const opt = opts_div.appendChild(
        html`<span class="format-option ${fmt}">${fmt}</span>`
      );
      opt.onclick = (e) => {
        span.value = opt.textContent;
      };
    }
    parse = (x) => {
      return valid_formats.includes(x) ? x : localValue;
    };
    update = (x) => {
      for (const opt of opts_div.children) {
        opt.classList.toggle("selected", opt.textContent === x);
      }
    };
  } else {
    // We only have filename here
  }
  let localValue;
  Object.defineProperty(span, "value", {
    get: () => {
      return localValue;
    },
    set: (val) => {
      if (val !== "") {
        localValue = parse(val);
      }
      update(localValue);
      checkConfigSync(container);
    },
  });
  // We also assign a listener so that the editable is blurred when enter is pressed
  span.onkeydown = (e) => {
    if (e.keyCode === 13) {
      e.preventDefault();
      span.blur();
    }
  };
  span.value = value;
}

function initializeConfigValueSpan(span, key) {
  // Here we mostly want to define the setter and getter
  const container = span.closest(".clipboard-span");
  Object.defineProperty(span, "value", {
    get: () => {
      return plot_obj.config.toImageButtonOptions[key];
    },
    set: (val) => {
      // if undefined is passed, we remove the entry from the options
      if (val === undefined) {
        delete plot_obj.config.toImageButtonOptions[key];
      } else {
        plot_obj.config.toImageButtonOptions[key] = val;
      }
      checkConfigSync(container);
    },
  });
}

const config_spans = {};
for (const [key, value] of Object.entries(getImageOptions())) {
  const container = CLIPBOARD_HEADER.querySelector(`.clipboard-span.${key}`);
  const label = container.querySelector(".label");
  // We give the label a function that on single click will set the current value and with double click will unset it
  label.onclick = DualClick(
    () => {
      container.config_value = container.ui_value;
    },
    (e) => {
      console.log("e", e);
      e.preventDefault();
      container.config_value = undefined;
    }
  );
  const ui_value_span = container.querySelector(".clipboard-value");
  const config_value_span =
    container.querySelector(".config-value") ??
    label.insertAdjacentElement(
      "afterbegin",
      html`<span class="config-value"></span>`
    );
  // Assing the two spans as properties of the containing span
  container.ui_span = ui_value_span;
  container.config_span = config_value_span;
  container.key = key;
  config_spans[key] = container;
  if (firstRun) {
    plot_obj.config.toImageButtonOptions =
      plot_obj.config.toImageButtonOptions ?? {};
    // We do the initialization of the value span
    initializeUIValueSpan(ui_value_span, key, value);
    // Then we initialize the config value
    initializeConfigValueSpan(config_value_span, key);
    // We put some convenience getters/setters
    // ui_value forward
    Object.defineProperty(container, "ui_value", {
      get: () => ui_value_span.value,
      set: (val) => {
        ui_value_span.value = val;
      },
    });
    // config_value forward
    Object.defineProperty(container, "config_value", {
      get: () => config_value_span.value,
      set: (val) => {
        config_value_span.value = val;
      },
    });
  }
}

// These objects will contain the default value

// This code updates the image options in the PLOT config with the provided ones
function setImageOptions(o) {
  for (const [key, container] of Object.entries(config_spans)) {
    container.config_value = o[key];
  }
}
function unsetImageOptions() {
  setImageOptions({});
}

const set_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.set");
const unset_button = CLIPBOARD_HEADER.querySelector(".clipboard-span.unset");
if (firstRun) {
  set_button.onclick = (e) => {
    for (const container of Object.values(config_spans)) {
      container.config_value = container.ui_value;
    }
  };
  unset_button.onclick = unsetImageOptions;
}

// We add a function to check if the clipboard is popped out
CONTAINER.isPoppedOut = () => {
  return CONTAINER.classList.contains("popped-out");
};

CLIPBOARD_HEADER.onmousedown = function (event) {
  if (event.target.matches("span.clipboard-value")) {
    console.log("We don't move!");
    return;
  }
  const start = {
    left: parseFloat(CONTAINER.style.left),
    top: parseFloat(CONTAINER.style.top),
    X: event.pageX,
    Y: event.pageY,
  };
  function moveAt(event, start) {
    const top = event.pageY - start.Y + start.top + "px";
    const left = event.pageX - start.X + start.left + "px";
    CLIPBOARD_HEADER.style.left = left;
    CONTAINER.style.left = left;
    CONTAINER.style.top = top;
  }

  // move our absolutely positioned ball under the pointer
  moveAt(event, start);
  function onMouseMove(event) {
    moveAt(event, start);
  }

  // We use this to remove the mousemove when clicking outside of the container
  const controller = new AbortController();

  // move the container on mousemove
  document.addEventListener("mousemove", onMouseMove, {
    signal: controller.signal,
  });
  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        cleanUp();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );

  function cleanUp() {
    console.log("cleaning up the plot move listener");
    controller.abort();
    CLIPBOARD_HEADER.onmouseup = null;
  }

  // (3) drop the ball, remove unneeded handlers
  CLIPBOARD_HEADER.onmouseup = cleanUp;
};

function sendToClipboard(blob) {
  if (!navigator.clipboard) {
    alert(
      "The Clipboard API does not seem to be available, make sure the Pluto notebook is being used from either localhost or an https source."
    );
  }
  navigator.clipboard
    .write([
      new ClipboardItem({
        // The key is determined dynamically based on the blob's type.
        [blob.type]: blob,
      }),
    ])
    .then(
      function () {
        console.log("Async: Copying to clipboard was successful!");
      },
      function (err) {
        console.error("Async: Could not copy text: ", err);
      }
    );
}

function copyImageToClipboard() {
  // We extract the image options from the provided parameters (if they exist)
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key. We also ignore format because the clipboard only supports png.
    if (val === undefined || key === "format") {
      continue;
    }
    config[key] = val;
  }
  Plotly.toImage(PLOT, config).then(function (dataUrl) {
    fetch(dataUrl)
      .then((res) => res.blob())
      .then((blob) => {
        const paste_receiver = document.querySelector('paste-receiver.plutoplotly')
        if (paste_receiver) {
          paste_receiver.attachImage(dataUrl, CONTAINER)
        }
        sendToClipboard(blob)
      });
  });
}

function saveImageToFile() {
  const config = {};
  for (const [key, container] of Object.entries(config_spans)) {
    let val =
      container.config_value ??
      (CONTAINER.isPoppedOut() ? container.ui_value : undefined);
    // If we have undefined we don't create the key.
    if (val === undefined) {
      continue;
    }
    config[key] = val;
  }
  Plotly.downloadImage(PLOT, config);
}

let container_rect = { width: 0, height: 0, top: 0, left: 0 };
function unpop_container(cl) {
  CONTAINER.classList.toggle("popped-out", false);
  CONTAINER.classList.toggle(cl, false);
  // We fix the height back to the value it had before popout, also setting the flag to signal that upon first resize we remove the fixed inline-style
  CONTAINER.style.height = container_rect.height + "px";
  remove_container_size = true;
  // We set the other fixed inline-styles to null
  CONTAINER.style.width = "";
  CONTAINER.style.top = "";
  CONTAINER.style.left = "";
  // We also remove the CLIPBOARD_HEADER
  CLIPBOARD_HEADER.style.width = "";
  CLIPBOARD_HEADER.style.left = "";
  // Finally we remove the hidden class to the header
  CLIPBOARD_HEADER.classList.toggle("hidden", true);
  return;
}
function popout_container(opts) {
  const cl = opts?.cl;
  const target_container_size = opts?.target_container_size ?? {};
  const target_plot_size = opts?.target_plot_size ?? {};
  if (CONTAINER.isPoppedOut()) {
    return unpop_container(cl);
  }
  CONTAINER.classList.toggle(cl, cl === undefined ? false : true);
  // We extract the current size of the container, save them and fix them
  const { width, height, top, left } = CONTAINER.getBoundingClientRect();
  container_rect = { width, height, top, left };
  // We save the current plot size before we pop as it will fill the screen
  const current_plot_size = {
    width: PLOT._fullLayout.width,
    height: PLOT._fullLayout.height,
  };
  // We have to save the pad data before popping so we can resize precisely
  const pad = {};
  pad.unpopped = getSizeData().container_pad;
  CONTAINER.classList.toggle("popped-out", true);
  pad.popped = getSizeData().container_pad;
  // We do top and left based on the current rect
  for (const key of ["top", "left"]) {
    const start_val = target_container_size[key] ?? container_rect[key];
    let offset = 0;
    for (const kind of ["padding", "border"]) {
      offset += pad.popped[kind][key] - pad.unpopped[kind][key];
    }
    CONTAINER.style[key] = start_val - offset + "px";
    if (key === "left") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  // We compute the width and height depending on eventual config data
  const csz = computeContainerSize({
    width:
      target_plot_size.width ??
      config_spans.width.config_value ??
      current_plot_size.width,
    height:
      target_plot_size.height ??
      config_spans.height.config_value ??
      current_plot_size.height,
  });
  for (const key of ["width", "height"]) {
    const val = target_container_size[key] ?? csz[key];
    CONTAINER.style[key] = val + "px";
    if (key === "width") {
      CLIPBOARD_HEADER.style[key] = CONTAINER.style[key];
    }
  }
  CLIPBOARD_HEADER.classList.toggle("hidden", false);
  const controller = new AbortController();

  document.addEventListener(
    "mousedown",
    (e) => {
      if (e.target.closest(".plutoplotly-container") !== CONTAINER) {
        unpop_container();
        controller.abort();
        return;
      }
    },
    { signal: controller.signal }
  );
}

CONTAINER.popOut = popout_container;

function DualClick(single_func, dbl_func) {
  let nclicks = 0;
  return function (...args) {
    nclicks += 1;
    if (nclicks > 1) {
      dbl_func(...args);
      nclicks = 0;
    } else {
      delay(300).then(() => {
        if (nclicks == 1) {
          single_func(...args);
        }
        nclicks = 0;
      });
    }
  };
}

// We remove the default download image button
plot_obj.config.modeBarButtonsToRemove = _.union(
  plot_obj.config.modeBarButtonsToRemove,
  ["toImage"]
);
// We add the custom button to the modebar
plot_obj.config.modeBarButtonsToAdd = _.union(
  plot_obj.config.modeBarButtonsToAdd,
  [
    {
      name: "Copy PNG to Clipboard",
      icon: {
        height: 520,
        width: 520,
        path: "M280 64h40c35.3 0 64 28.7 64 64V448c0 35.3-28.7 64-64 64H64c-35.3 0-64-28.7-64-64V128C0 92.7 28.7 64 64 64h40 9.6C121 27.5 153.3 0 192 0s71 27.5 78.4 64H280zM64 112c-8.8 0-16 7.2-16 16V448c0 8.8 7.2 16 16 16H320c8.8 0 16-7.2 16-16V128c0-8.8-7.2-16-16-16H304v24c0 13.3-10.7 24-24 24H192 104c-13.3 0-24-10.7-24-24V112H64zm128-8a24 24 0 1 0 0-48 24 24 0 1 0 0 48z",
      },
      direction: "up",
      click: DualClick(copyImageToClipboard, () => {
        popout_container();
      }),
    },
    {
      name: "Download Image",
      icon: Plotly.Icons.camera,
      direction: "up",
      click: DualClick(saveImageToFile, () => {
        popout_container({ cl: "filesave" });
      }),
    },
  ]
);

function getOffsetData(el) {
  let cs = window.getComputedStyle(el, null);
  const odata = {
    padding: {
      left: parseFloat(cs.paddingLeft),
      right: parseFloat(cs.paddingRight),
      top: parseFloat(cs.paddingTop),
      bottom: parseFloat(cs.paddingBottom),
      width: parseFloat(cs.paddingLeft) + parseFloat(cs.paddingRight),
      height: parseFloat(cs.paddingTop) + parseFloat(cs.paddingBottom),
    },
    border: {
      left: parseFloat(cs.borderLeftWidth),
      right: parseFloat(cs.borderRightWidth),
      top: parseFloat(cs.borderTopWidth),
      bottom: parseFloat(cs.borderBottomWidth),
      width: parseFloat(cs.borderLeftWidth) + parseFloat(cs.borderRightWidth),
      height: parseFloat(cs.borderTopWidth) + parseFloat(cs.borderBottomWidth),
    }
  };
  if (el === PLOT) {
    // For the PLOT we also want to take into account the offset
    odata.offset = {
      top: PLOT.offsetParent == CONTAINER ? PLOT.offsetTop : 0,
      left: PLOT.offsetParent == CONTAINER ? PLOT.offsetLeft : 0,
    }
  }
  return odata;
}
function getSizeData() {
  const data = {
    plot_pad: getOffsetData(PLOT),
    plot_rect: PLOT.getBoundingClientRect(),
    container_pad: getOffsetData(CONTAINER),
    container_rect: CONTAINER.getBoundingClientRect(),
  };
  return data;
}
function computeContainerSize({ width, height }, sizeData = getSizeData()) {
  const computed_size = computePlotSize(sizeData);
  const offsets = computed_size.offsets;

  const plot_data = {
    width: width ?? computed_size.width,
    height: height ?? computed_size.height,
  };

  return {
    width: (width ?? computed_size.width) + offsets.width,
    height: (height ?? computed_size.height) + offsets.height,
    noChange: width == computed_size.width && height == computed_size.height,
  }
}

// This function will change the container size so that the resulting plot will be matching the provided specs
function changeContainerSize({ width, height }, sizeData = getSizeData()) {
  if (!CONTAINER.isPoppedOut()) {
    console.log("Tried to change container size when not popped, ignoring");
    return;
  }

  const csz = computeContainerSize({ width, height }, sizeData);

  if (csz.noChange) {
    console.log("Size is the same as current, ignoring");
    return
  }
  // We are now going to set he width and height of the container
  for (const key of ["width", "height"]) {
    CONTAINER.style[key] = csz[key] + "px";
  }
}
// We now create the function that will update the plot based on the values specified
function updateFromHeader() {
  const header_data = {
    height: config_spans.height.ui_value,
    width: config_spans.width.ui_value,
  };
  changeContainerSize(header_data);
}
// We assign this function to the onblur event of width and height
if (firstRun) {
  for (const container of Object.values(config_spans)) {
    container.ui_span.onblur = (e) => {
      container.ui_value = container.ui_span.textContent;
      updateFromHeader();
    };
  }
}
// This function computes the plot size to use for relayout as a function of the container size
function computePlotSize(data = getSizeData()) {
  // Remove Padding
  const { container_pad, plot_pad, container_rect } = data;
  const offsets = {
    width:
      plot_pad.padding.width +
      plot_pad.border.width +
      plot_pad.offset.left +
      container_pad.padding.width +
      container_pad.border.width,
    height:
      plot_pad.padding.height +
      plot_pad.border.height +
      plot_pad.offset.top +
      container_pad.padding.height +
      container_pad.border.height,
  };
  const sz = {
    width: Math.round(container_rect.width - offsets.width),
    height: Math.round(container_rect.height - offsets.height),
    offsets,
  };
  return sz;
}

// Create the resizeObserver to make the plot even more responsive! :magic:
const resizeObserver = new ResizeObserver((entries) => {
  const sizeData = getSizeData();
  const {container_rect, container_pad} = sizeData;
  let plot_size = computePlotSize(sizeData);
  // We save the height in the PLOT object
  PLOT.container_height = container_rect.height;
  // We deal with some stuff if the container is poppped
  CLIPBOARD_HEADER.style.width = container_rect.width + "px";
  CLIPBOARD_HEADER.style.left = container_rect.left + "px";
  config_spans.height.ui_value = plot_size.height;
  config_spans.width.ui_value = plot_size.width;
  /* 
		The addition of the invalid argument `plutoresize` seems to fix the problem with calling `relayout` simply with `{autosize: true}` as update breaking mouse relayout events tracking. 
		See https://github.com/plotly/plotly.js/issues/6156 for details
		*/
  let config = {
    // If this is popped out, we ignore the original width/height
    width: (CONTAINER.isPoppedOut() ? undefined : original_width) ?? plot_size.width,
    height: (CONTAINER.isPoppedOut() ? undefined : original_height) ?? plot_size.height,
    plutoresize: true,
  };
  Plotly.relayout(PLOT, config).then(() => {
    if (remove_container_size && !CONTAINER.isPoppedOut()) {
      // This is needed to avoid the first resize upon plot creation to already be without a fixed height
      CONTAINER.style.height = "";
      CONTAINER.style.width = "";
      remove_container_size = false;
    }
  });
});

resizeObserver.observe(CONTAINER);


Plotly.react(PLOT, plot_obj).then(() => {
	// Assign the Plotly event listeners
	for (const [key, listener_vec] of Object.entries(plotly_listeners)) {
		for (const listener of listener_vec) {
			PLOT.on(key, listener)
		}
	}
	// Assign the JS event listeners
	for (const [key, listener_vec] of Object.entries(js_listeners)) {
		for (const listener of listener_vec) {
			PLOT.addEventListener(key, listener, {
				signal: controller.signal
			})
		}
	}
}
)


invalidation.then(() => {
	// Remove all plotly listeners
	PLOT.removeAllListeners()
	// Remove all JS listeners
	controller.abort()
	// Remove the resizeObserver
	resizeObserver.disconnect()
})



		return CONTAINER
	</script>
</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš3ç_|°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$985f0537-2bbe-4dbb-a113-8ac98d2e0a5f¹depends_on_disabled_cellsÂ§runtimeÎ_µ�Gµpublished_object_keys‘Ù5c6e0de0c-3901-11f0-234e-bd09c571f662/6a054f00f0376f57¸depends_on_skipped_cellsÂ§erroredÂÙ$217ecc59-d6e3-48fa-9d6d-700a3947b805Š¦queuedÂ¤logs�§runningÂ¦output†¤body§1.936f0¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš-z°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$217ecc59-d6e3-48fa-9d6d-700a3947b805¹depends_on_disabled_cellsÂ§runtimeÎ—BÒµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$a35de859-4046-4f6d-9ea9-b523d21cee5dŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ0make_value_grid (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš%Çïc°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$a35de859-4046-4f6d-9ea9-b523d21cee5d¹depends_on_disabled_cellsÂ§runtimeÎ ÂÑµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$12c0cd0b-eb4f-45a0-836b-53b3c5cdafd9Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙW<div class="markdown"><h2>5.5 Off-policy Prediction via Importance Sampling</h2>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"'„+°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$12c0cd0b-eb4f-45a0-836b-53b3c5cdafd9¹depends_on_disabled_cellsÂ§runtimeÎ ×Åµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$aaa9647c-afb6-44d1-ae1e-a2e957064080Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ,updatecount (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš)Z‰°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$aaa9647c-afb6-44d1-ae1e-a2e957064080¹depends_on_disabled_cellsÂ§runtimeÎ Z µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$b57462b6-8f9c-4553-9c05-134ff043b00dŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚ&<div class="markdown"><blockquote>
<h3><em>Exercise 5.9</em></h3>
<p>Modify the algorithm for first-visit MC policy evaluation &#40;section 5.1&#41; to use the incremental implementation for sample averages described in Section 2.4</p>
</blockquote>
<p>Returns&#40;s&#41; will not maintain a list but instead be a list of single values for each state.  Additionally, another list Counts&#40;s&#41; should be initialized at 0 for each state.  When new G values are obtained for state, the Count&#40;s&#41; value should be incremented by 1.  Then Returns&#40;s&#41; can be updated with the following formula: </p>
<p class="tex">$$\begin&#123;flalign&#125;
	\text&#123;Returns&#125;&#40;s&#41; &amp;&#61; \left &#91; \text&#123;Returns&#125;&#40;s&#41; \times &#40;\text&#123;Counts&#125;&#40;s&#41; - 1&#41; &#43; G \right &#93; / \text&#123;Counts&#125;&#40;s&#41; \\ 
	&amp;&#61; \text&#123;Returns&#125;&#40;s&#41; &#43; \frac&#123;G - \text&#123;Returns&#125;&#40;s&#41;&#125;&#123;\text&#123;Counts&#125;&#40;s&#41;&#125;
\end&#123;flalign&#125;$$</p>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"(Úì°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$b57462b6-8f9c-4553-9c05-134ff043b00d¹depends_on_disabled_cellsÂ§runtimeÎ ¸7µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$f506e8ba-b073-4f59-91b4-3fe99822d2a4Š¦queuedÂ¤logs�§runningÂ¦output†¤body…¦prefix´Dict{Float64, Int64}¨elementsŸ’’£5.0ªtext/plain’£133ªtext/plain’’§2.23607ªtext/plain’¢59ªtext/plain’’§4.12311ªtext/plain’£109ªtext/plain’’§4.24264ªtext/plain’£112ªtext/plain’’£1.0ªtext/plain’¢27ªtext/plain’’£0.0ªtext/plain’¡0ªtext/plain’’£4.0ªtext/plain’£106ªtext/plain’’§4.47214ªtext/plain’£119ªtext/plain’’£2.0ªtext/plain’¢53ªtext/plain’’§3.16228ªtext/plain’¢84ªtext/plain’’§1.41421ªtext/plain’¢38ªtext/plain’’§2.82843ªtext/plain’¢75ªtext/plain’’£3.0ªtext/plain’¢80ªtext/plain’’§3.60555ªtext/plain’¢96ªtext/plain’’§5.65685ªtext/plain’£150ªtext/plain¤type¤Dict¬prefix_short¤Dict¨objectid¯79fbf8f1a441aca¤mimeÙ!application/vnd.pluto.tree+object¬rootassignee±const scalelookup²last_run_timestampËAÚš/Aæ›°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$f506e8ba-b073-4f59-91b4-3fe99822d2a4¹depends_on_disabled_cellsÂ§runtimeÎ§Ûcµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$bf19e6cf-1fb5-49c9-974e-1613d90ef4cfŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyƒ¨elements’’’Ù»2Ã—200 Matrix{Float32}:
 0.95  0.95  0.95  0.95  0.95  0.05  0.95  â€¦  0.05  0.05  0.05  0.05  0.05  0.05
 0.05  0.05  0.05  0.05  0.05  0.95  0.05     0.95  0.95  0.95  0.95  0.95  0.95ªtext/plain’’Ù²2Ã—200 Matrix{Float32}:
 -0.349328  -0.587688   0.042062  -0.306492  â€¦  -1.0       0.302885  -1.0
 -0.70339   -0.748792  -0.325779  -0.324561      0.944796  0.875826   0.810059ªtext/plain¤type¥Tuple¨objectid°5248b2b655ffdee9¤mimeÙ!application/vnd.pluto.tree+object¬rootassigneeÀ²last_run_timestampËAÚš)R÷”°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$bf19e6cf-1fb5-49c9-974e-1613d90ef4cf¹depends_on_disabled_cellsÂ§runtimeÎ'@ˆÑµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$77cf7fee-0ad8-4d22-b376-75833307db93Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚMŒ<script>
	
// Load the library for consistent smooth scrolling
const {default: scrollIntoView} = await import("data:text/javascript;base64,dmFyIFE9ZT0+Im9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT1lJiYxPT09ZS5ub2RlVHlwZSxVPShlLHQpPT4oIXR8fCJoaWRkZW4iIT09ZSkmJiJ2aXNpYmxlIiE9PWUmJiJjbGlwIiE9PWUsQT0oZSx0KT0+e2lmKGUuY2xpZW50SGVpZ2h0PGUuc2Nyb2xsSGVpZ2h0fHxlLmNsaWVudFdpZHRoPGUuc2Nyb2xsV2lkdGgpe2xldCBsPWdldENvbXB1dGVkU3R5bGUoZSxudWxsKTtyZXR1cm4gVShsLm92ZXJmbG93WSx0KXx8VShsLm92ZXJmbG93WCx0KXx8KGU9PntsZXQgdD0oZT0+e2lmKCFlLm93bmVyRG9jdW1lbnR8fCFlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcpcmV0dXJuIG51bGw7dHJ5e3JldHVybiBlLm93bmVyRG9jdW1lbnQuZGVmYXVsdFZpZXcuZnJhbWVFbGVtZW50fWNhdGNoe3JldHVybiBudWxsfX0pKGUpO3JldHVybiEhdCYmKHQuY2xpZW50SGVpZ2h0PGUuc2Nyb2xsSGVpZ2h0fHx0LmNsaWVudFdpZHRoPGUuc2Nyb2xsV2lkdGgpfSkoZSl9cmV0dXJuITF9LFg9KGUsdCxsLG8sbixyLGkscyk9PnI8ZSYmaT50fHxyPmUmJmk8dD8wOnI8PWUmJnM8PWx8fGk+PXQmJnM+PWw/ci1lLW86aT50JiZzPGx8fHI8ZSYmcz5sP2ktdCtuOjAsJD1lPT5lLnBhcmVudEVsZW1lbnQ/PyhlLmdldFJvb3ROb2RlKCkuaG9zdHx8bnVsbCksdHQ9KGUsdCk9Pnt2YXIgbCxvLG4scjtpZih0eXBlb2YgZG9jdW1lbnQ+InUiKXJldHVybltdO2xldHtzY3JvbGxNb2RlOmksYmxvY2s6cyxpbmxpbmU6YSxib3VuZGFyeTpoLHNraXBPdmVyZmxvd0hpZGRlbkVsZW1lbnRzOnV9PXQsZz0iZnVuY3Rpb24iPT10eXBlb2YgaD9oOmU9PmUhPT1oO2lmKCFRKGUpKXRocm93IFR5cGVFcnJvcigiSW52YWxpZCB0YXJnZXQiKTtsZXQgdj1kb2N1bWVudC5zY3JvbGxpbmdFbGVtZW50fHxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQsbT1bXSx3PWU7Zm9yKDtRKHcpJiZnKHcpOyl7aWYoKHc9JCh3KSk9PT12KXttLnB1c2godyk7YnJlYWt9bnVsbCE9dyYmdz09PWRvY3VtZW50LmJvZHkmJkEodykmJiFBKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCl8fG51bGwhPXcmJkEodyx1KSYmbS5wdXNoKHcpfWxldCBXPW51bGwhPShvPW51bGw9PShsPXdpbmRvdy52aXN1YWxWaWV3cG9ydCk/dm9pZCAwOmwud2lkdGgpP286aW5uZXJXaWR0aCxIPW51bGwhPShyPW51bGw9PShuPXdpbmRvdy52aXN1YWxWaWV3cG9ydCk/dm9pZCAwOm4uaGVpZ2h0KT9yOmlubmVySGVpZ2h0LHtzY3JvbGxYOl8sc2Nyb2xsWTp4fT13aW5kb3cse2hlaWdodDpFLHdpZHRoOlQsdG9wOk4scmlnaHQ6TCxib3R0b206WSxsZWZ0OkN9PWUuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksUj0ic3RhcnQiPT09c3x8Im5lYXJlc3QiPT09cz9OOiJlbmQiPT09cz9ZOk4rRS8yLFY9ImNlbnRlciI9PT1hP0MrVC8yOiJlbmQiPT09YT9MOkMsQj1bXTtmb3IobGV0IEQ9MDtEPG0ubGVuZ3RoO0QrKyl7bGV0IE89bVtEXSx7aGVpZ2h0Omosd2lkdGg6SSx0b3A6UyxyaWdodDpxLGJvdHRvbTp6LGxlZnQ6Rn09Ty5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtpZigiaWYtbmVlZGVkIj09PWkmJk4+PTAmJkM+PTAmJlk8PUgmJkw8PVcmJk4+PVMmJlk8PXomJkM+PUYmJkw8PXEpYnJlYWs7bGV0IEc9Z2V0Q29tcHV0ZWRTdHlsZShPKSxKPXBhcnNlSW50KEcuYm9yZGVyTGVmdFdpZHRoLDEwKSxLPXBhcnNlSW50KEcuYm9yZGVyVG9wV2lkdGgsMTApLFA9cGFyc2VJbnQoRy5ib3JkZXJSaWdodFdpZHRoLDEwKSxaPXBhcnNlSW50KEcuYm9yZGVyQm90dG9tV2lkdGgsMTApLGVlPTAsZXQ9MCxlbD0ib2Zmc2V0V2lkdGgiaW4gTz9PLm9mZnNldFdpZHRoLU8uY2xpZW50V2lkdGgtSi1QOjAsZW89Im9mZnNldEhlaWdodCJpbiBPP08ub2Zmc2V0SGVpZ2h0LU8uY2xpZW50SGVpZ2h0LUstWjowLGVuPSJvZmZzZXRXaWR0aCJpbiBPPzA9PT1PLm9mZnNldFdpZHRoPzA6SS9PLm9mZnNldFdpZHRoOjAsZXI9Im9mZnNldEhlaWdodCJpbiBPPzA9PT1PLm9mZnNldEhlaWdodD8wOmovTy5vZmZzZXRIZWlnaHQ6MDtpZih2PT09TyllZT0ic3RhcnQiPT09cz9SOiJlbmQiPT09cz9SLUg6Im5lYXJlc3QiPT09cz9YKHgseCtILEgsSyxaLHgrUix4K1IrRSxFKTpSLUgvMixldD0ic3RhcnQiPT09YT9WOiJjZW50ZXIiPT09YT9WLVcvMjoiZW5kIj09PWE/Vi1XOlgoXyxfK1csVyxKLFAsXytWLF8rVitULFQpLGVlPU1hdGgubWF4KDAsZWUreCksZXQ9TWF0aC5tYXgoMCxldCtfKTtlbHNle2VlPSJzdGFydCI9PT1zP1ItUy1LOiJlbmQiPT09cz9SLXorWitlbzoibmVhcmVzdCI9PT1zP1goUyx6LGosSyxaK2VvLFIsUitFLEUpOlItKFMrai8yKStlby8yLGV0PSJzdGFydCI9PT1hP1YtRi1KOiJjZW50ZXIiPT09YT9WLShGK0kvMikrZWwvMjoiZW5kIj09PWE/Vi1xK1ArZWw6WChGLHEsSSxKLFArZWwsVixWK1QsVCk7bGV0e3Njcm9sbExlZnQ6ZWksc2Nyb2xsVG9wOmVkfT1PO2VlPU1hdGgubWF4KDAsTWF0aC5taW4oZWQrZWUvZXIsTy5zY3JvbGxIZWlnaHQtai9lcitlbykpLGV0PU1hdGgubWF4KDAsTWF0aC5taW4oZWkrZXQvZW4sTy5zY3JvbGxXaWR0aC1JL2VuK2VsKSksUis9ZWQtZWUsVis9ZWktZXR9Qi5wdXNoKHtlbDpPLHRvcDplZSxsZWZ0OmV0fSl9cmV0dXJuIEJ9LGY9ZT0+e3ZhciB0O3JldHVybiExPT09ZT97YmxvY2s6ImVuZCIsaW5saW5lOiJuZWFyZXN0In06KHQ9ZSk9PT1PYmplY3QodCkmJjAhPT1PYmplY3Qua2V5cyh0KS5sZW5ndGg/ZTp7YmxvY2s6InN0YXJ0IixpbmxpbmU6Im5lYXJlc3QifX07ZnVuY3Rpb24gYyhlLHQpe3ZhciBsO2lmKCFlLmlzQ29ubmVjdGVkfHwhKGU9PntsZXQgdD1lO2Zvcig7dCYmdC5wYXJlbnROb2RlOyl7aWYodC5wYXJlbnROb2RlPT09ZG9jdW1lbnQpcmV0dXJuITA7dD10LnBhcmVudE5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290P3QucGFyZW50Tm9kZS5ob3N0OnQucGFyZW50Tm9kZX1yZXR1cm4hMX0pKGUpKXJldHVybjtpZigib2JqZWN0Ij09dHlwZW9mKGw9dCkmJiJmdW5jdGlvbiI9PXR5cGVvZiBsLmJlaGF2aW9yKXJldHVybiB0LmJlaGF2aW9yKHR0KGUsdCkpO2xldCBvPSJib29sZWFuIj09dHlwZW9mIHR8fG51bGw9PXQ/dm9pZCAwOnQuYmVoYXZpb3I7Zm9yKGxldHtlbDpuLHRvcDpyLGxlZnQ6aX1vZiB0dChlLGYodCkpKW4uc2Nyb2xsKHt0b3A6cixsZWZ0OmksYmVoYXZpb3I6b30pfXZhciBkLHA9KCk9PihkfHwoZD0icGVyZm9ybWFuY2UiaW4gd2luZG93P3BlcmZvcm1hbmNlLm5vdy5iaW5kKHBlcmZvcm1hbmNlKTpEYXRlLm5vdyksZCgpKTtmdW5jdGlvbiBiKGUpe2xldCB0PU1hdGgubWluKChwKCktZS5zdGFydFRpbWUpL2UuZHVyYXRpb24sMSksbD1lLmVhc2UodCksbz1lLnN0YXJ0WCsoZS54LWUuc3RhcnRYKSpsLG49ZS5zdGFydFkrKGUueS1lLnN0YXJ0WSkqbDtlLm1ldGhvZChvLG4sdCxsKSxvIT09ZS54fHxuIT09ZS55P3JlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+YihlKSk6ZS5jYigpfWZ1bmN0aW9uIHkoZSx0LGwpe2xldCBvPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdP2FyZ3VtZW50c1szXTo2MDAsbj1hcmd1bWVudHMubGVuZ3RoPjQmJnZvaWQgMCE9PWFyZ3VtZW50c1s0XT9hcmd1bWVudHNbNF06ZT0+MSstLWUqZSplKmUqZSxyPWFyZ3VtZW50cy5sZW5ndGg+NT9hcmd1bWVudHNbNV06dm9pZCAwLGk9YXJndW1lbnRzLmxlbmd0aD42P2FyZ3VtZW50c1s2XTp2b2lkIDAscz1lLnNjcm9sbExlZnQsYT1lLnNjcm9sbFRvcDtiKHtzY3JvbGxhYmxlOmUsbWV0aG9kKHQsbCxvLG4pe2xldCByPU1hdGguY2VpbCh0KSxzPU1hdGguY2VpbChsKTtlLnNjcm9sbExlZnQ9cixlLnNjcm9sbFRvcD1zLGk/Lih7dGFyZ2V0OmUsZWxhcHNlZDpvLHZhbHVlOm4sbGVmdDpyLHRvcDpzfSl9LHN0YXJ0VGltZTpwKCksc3RhcnRYOnMsc3RhcnRZOmEseDp0LHk6bCxkdXJhdGlvbjpvLGVhc2U6bixjYjpyfSl9dmFyIE09ZT0+ZSYmIWUuYmVoYXZpb3J8fCJzbW9vdGgiPT09ZS5iZWhhdmlvcixrPWZ1bmN0aW9uKGUsdCl7bGV0IGw9dHx8e307cmV0dXJuIE0obCk/YyhlLHtibG9jazpsLmJsb2NrLGlubGluZTpsLmlubGluZSxzY3JvbGxNb2RlOmwuc2Nyb2xsTW9kZSxib3VuZGFyeTpsLmJvdW5kYXJ5LHNraXBPdmVyZmxvd0hpZGRlbkVsZW1lbnRzOmwuc2tpcE92ZXJmbG93SGlkZGVuRWxlbWVudHMsYmVoYXZpb3I6ZT0+UHJvbWlzZS5hbGwoZS5yZWR1Y2UoKGUsdCk9PntsZXR7ZWw6byxsZWZ0Om4sdG9wOnJ9PXQsaT1vLnNjcm9sbExlZnQscz1vLnNjcm9sbFRvcDtyZXR1cm4gaT09PW4mJnM9PT1yP2U6Wy4uLmUsbmV3IFByb21pc2UoZT0+eShvLG4scixsLmR1cmF0aW9uLGwuZWFzZSwoKT0+ZSh7ZWw6byxsZWZ0OltpLG5dLHRvcDpbcyxyXX0pLGwub25TY3JvbGxDaGFuZ2UpKV19LFtdKSl9KTpQcm9taXNlLnJlc29sdmUoYyhlLHQpKX07ZXhwb3J0e2sgYXMgZGVmYXVsdH07")

const indent = true
const aside = true
const title_text = "Table of Contents"
const include_definitions = false


const tocNode = html`<nav class="plutoui-toc">
	<header>
	 <span class="toc-toggle open-toc"></span>
	 <span class="toc-toggle closed-toc"></span>
	 ${title_text}
	</header>
	<section></section>
</nav>`

tocNode.classList.toggle("aside", aside)
tocNode.classList.toggle("indent", indent)


const getParentCell = el => el.closest("pluto-cell")

const getHeaders = () => {
	const depth = Math.max(1, Math.min(6, 3)) // should be in range 1:6
	const range = Array.from({length: depth}, (x, i) => i+1) // [1, ..., depth]
	
	const selector = [
		...(include_definitions ? [
			`pluto-notebook pluto-cell .pluto-docs-binding`, 
			`pluto-notebook pluto-cell assignee:not(:empty)`, 
		] : []),
		...range.map(i => `pluto-notebook pluto-cell h${i}`)
	].join(",")
	return Array.from(document.querySelectorAll(selector)).filter(el => 
		// exclude headers inside of a pluto-docs-binding block
		!(el.nodeName.startsWith("H") && el.closest(".pluto-docs-binding"))
	)
}


const document_click_handler = (event) => {
	const path = (event.path || event.composedPath())
	const toc = path.find(elem => elem?.classList?.contains?.("toc-toggle"))
	if (toc) {
		event.stopImmediatePropagation()
		toc.closest(".plutoui-toc").classList.toggle("hide")
	}
}

document.addEventListener("click", document_click_handler)


const header_to_index_entry_map = new Map()
const currently_highlighted_set = new Set()

const last_toc_element_click_time = { current: 0 }

const intersection_callback = (ixs) => {
	let on_top = ixs.filter(ix => ix.intersectionRatio > 0 && ix.intersectionRect.y < ix.rootBounds.height / 2)
	if(on_top.length > 0){
		currently_highlighted_set.forEach(a => a.classList.remove("in-view"))
		currently_highlighted_set.clear()
		on_top.slice(0,1).forEach(i => {
			let div = header_to_index_entry_map.get(i.target)
			div.classList.add("in-view")
			currently_highlighted_set.add(div)
			
			/// scroll into view
			/*
			const toc_height = tocNode.offsetHeight
			const div_pos = div.offsetTop
			const div_height = div.offsetHeight
			const current_scroll = tocNode.scrollTop
			const header_height = tocNode.querySelector("header").offsetHeight
			
			const scroll_to_top = div_pos - header_height
			const scroll_to_bottom = div_pos + div_height - toc_height
			
			// if we set a scrollTop, then the browser will stop any currently ongoing smoothscroll animation. So let's only do this if you are not currently in a smoothscroll.
			if(Date.now() - last_toc_element_click_time.current >= 2000)
				if(current_scroll < scroll_to_bottom){
					tocNode.scrollTop = scroll_to_bottom
				} else if(current_scroll > scroll_to_top){
					tocNode.scrollTop = scroll_to_top
				}
			*/
		})
	}
}
let intersection_observer_1 = new IntersectionObserver(intersection_callback, {
	root: null, // i.e. the viewport
  	threshold: 1,
	rootMargin: "-15px", // slightly smaller than the viewport
	// delay: 100,
})
let intersection_observer_2 = new IntersectionObserver(intersection_callback, {
	root: null, // i.e. the viewport
  	threshold: 1,
	rootMargin: "15px", // slightly larger than the viewport
	// delay: 100,
})

const render = (elements) => {
	header_to_index_entry_map.clear()
	currently_highlighted_set.clear()
	intersection_observer_1.disconnect()
	intersection_observer_2.disconnect()

		let last_level = `H1`
	return html`${elements.map(h => {
	const parent_cell = getParentCell(h)

		let [className, title_el] = h.matches(`.pluto-docs-binding`) ? ["pluto-docs-binding-el", h.firstElementChild] : [h.nodeName, h]

	const a = html`<a 
		class="${className}" 
		title="${title_el.innerText}"
		href="#${parent_cell.id}"
	>${title_el.innerHTML}</a>`
	/* a.onmouseover=()=>{
		parent_cell.firstElementChild.classList.add(
			'highlight-pluto-cell-shoulder'
		)
	}
	a.onmouseout=() => {
		parent_cell.firstElementChild.classList.remove(
			'highlight-pluto-cell-shoulder'
		)
	} */
		
		
	a.onclick=(e) => {
		e.preventDefault();
		last_toc_element_click_time.current = Date.now()
		scrollIntoView(h, {
			behavior: 'smooth', 
			block: 'start',
		}).then(() => 
			// sometimes it doesn't scroll to the right place
			// solution: try a second time!
			scrollIntoView(h, {
				behavior: 'smooth', 
				block: 'start',
			})
	   )
	}

	const row =  html`<div class="toc-row ${className} after-${last_level}">${a}</div>`
		intersection_observer_1.observe(title_el)
		intersection_observer_2.observe(title_el)
		header_to_index_entry_map.set(title_el, row)

	if(className.startsWith("H"))
		last_level = className
		
	return row
})}`
}

const invalidated = { current: false }

const updateCallback = () => {
	if (!invalidated.current) {
		tocNode.querySelector("section").replaceWith(
			html`<section>${render(getHeaders())}</section>`
		)
	}
}
updateCallback()
setTimeout(updateCallback, 100)
setTimeout(updateCallback, 1000)
setTimeout(updateCallback, 5000)

const notebook = document.querySelector("pluto-notebook")


// We have a mutationobserver for each cell:
const mut_observers = {
	current: [],
}

const createCellObservers = () => {
	mut_observers.current.forEach((o) => o.disconnect())
	mut_observers.current = Array.from(notebook.querySelectorAll("pluto-cell")).map(el => {
		const o = new MutationObserver(updateCallback)
		o.observe(el, {attributeFilter: ["class"]})
		return o
	})
}
createCellObservers()

// And one for the notebook's child list, which updates our cell observers:
const notebookObserver = new MutationObserver(() => {
	updateCallback()
	createCellObservers()
})
notebookObserver.observe(notebook, {childList: true})

// And finally, an observer for the document.body classList, to make sure that the toc also works when it is loaded during notebook initialization
const bodyClassObserver = new MutationObserver(updateCallback)
bodyClassObserver.observe(document.body, {attributeFilter: ["class"]})

// Hide/show the ToC when the screen gets small
let match_listener = () => 
	tocNode.classList.toggle("hide", (tocNode.closest("pluto-editor") ?? document.body).scrollWidth < 1000)
for(let s of [1000, 1100, 1200, 1300, 1400, 1500, 1600, 1700, 1800, 1900, 2000]) {
	let m = matchMedia(`(max-width: ${s}px)`)
	m.addListener(match_listener)
	invalidation.then(() => m.removeListener(match_listener))
}
match_listener()

invalidation.then(() => {
	invalidated.current = true
	intersection_observer_1.disconnect()
	intersection_observer_2.disconnect()
	notebookObserver.disconnect()
	bodyClassObserver.disconnect()
	mut_observers.current.forEach((o) => o.disconnect())
	document.removeEventListener("click", document_click_handler)
})

return tocNode
</script>
<style>
@media not print {

.plutoui-toc {
	font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Cantarell, "Apple Color Emoji",
		"Segoe UI Emoji", "Segoe UI Symbol", system-ui, sans-serif;
	--main-bg-color: #fafafa;
	--pluto-output-color: hsl(0, 0%, 36%);
	--pluto-output-h-color: hsl(0, 0%, 21%);
	--sidebar-li-active-bg: rgb(235, 235, 235);
	--icon-filter: unset;
}

@media (prefers-color-scheme: dark) {
	.plutoui-toc {
		--main-bg-color: #303030;
		--pluto-output-color: hsl(0, 0%, 90%);
		--pluto-output-h-color: hsl(0, 0%, 97%);
		--sidebar-li-active-bg: rgb(82, 82, 82);
		--icon-filter: invert(1);
	}
}

.plutoui-toc.aside {
	color: var(--pluto-output-color);
	position: fixed;
	right: 1rem;
	top: 5rem;
	width: min(80vw, 300px);
	padding: 0.5rem;
	padding-top: 0em;
	/* border: 3px solid rgba(0, 0, 0, 0.15); */
	border-radius: 10px;
	/* box-shadow: 0 0 11px 0px #00000010; */
	max-height: calc(100vh - 5rem - 90px);
	overflow: auto;
	z-index: 40;
	background-color: var(--main-bg-color);
	transition: transform 300ms cubic-bezier(0.18, 0.89, 0.45, 1.12);
}

.plutoui-toc.aside.hide {
	transform: translateX(calc(100% - 28px));
}
.plutoui-toc.aside.hide section {
	display: none;
}
.plutoui-toc.aside.hide header {
	margin-bottom: 0em;
	padding-bottom: 0em;
	border-bottom: none;
}
}  /* End of Media print query */
.plutoui-toc.aside.hide .open-toc,
.plutoui-toc.aside:not(.hide) .closed-toc,
.plutoui-toc:not(.aside) .closed-toc {
	display: none;
}

@media (prefers-reduced-motion) {
  .plutoui-toc.aside {
	transition-duration: 0s;
  }
}

.toc-toggle {
	cursor: pointer;
    padding: 1em;
    margin: -1em;
    margin-right: -0.7em;
    line-height: 1em;
    display: flex;
}

.toc-toggle::before {
    content: "";
    display: inline-block;
    height: 1em;
    width: 1em;
    background-image: url("https://cdn.jsdelivr.net/gh/ionic-team/ionicons@5.5.1/src/svg/list-outline.svg");
	/* generated using https://dopiaza.org/tools/datauri/index.php */
    background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHRpdGxlPmlvbmljb25zLXY1LW88L3RpdGxlPjxsaW5lIHgxPSIxNjAiIHkxPSIxNDQiIHgyPSI0NDgiIHkyPSIxNDQiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS13aWR0aDozMnB4Ii8+PGxpbmUgeDE9IjE2MCIgeTE9IjI1NiIgeDI9IjQ0OCIgeTI9IjI1NiIgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLXdpZHRoOjMycHgiLz48bGluZSB4MT0iMTYwIiB5MT0iMzY4IiB4Mj0iNDQ4IiB5Mj0iMzY4IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6MzJweCIvPjxjaXJjbGUgY3g9IjgwIiBjeT0iMTQ0IiByPSIxNiIgc3R5bGU9ImZpbGw6bm9uZTtzdHJva2U6IzAwMDtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLXdpZHRoOjMycHgiLz48Y2lyY2xlIGN4PSI4MCIgY3k9IjI1NiIgcj0iMTYiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS13aWR0aDozMnB4Ii8+PGNpcmNsZSBjeD0iODAiIGN5PSIzNjgiIHI9IjE2IiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6MzJweCIvPjwvc3ZnPg==");
    background-size: 1em;
	filter: var(--icon-filter);
}

.aside .toc-toggle.open-toc:hover::before {
    background-image: url("https://cdn.jsdelivr.net/gh/ionic-team/ionicons@5.5.1/src/svg/arrow-forward-outline.svg");
	/* generated using https://dopiaza.org/tools/datauri/index.php */
    background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHRpdGxlPmlvbmljb25zLXY1LWE8L3RpdGxlPjxwb2x5bGluZSBwb2ludHM9IjI2OCAxMTIgNDEyIDI1NiAyNjggNDAwIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6NDhweCIvPjxsaW5lIHgxPSIzOTIiIHkxPSIyNTYiIHgyPSIxMDAiIHkyPSIyNTYiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS13aWR0aDo0OHB4Ii8+PC9zdmc+");
}
.aside .toc-toggle.closed-toc:hover::before {
    background-image: url("https://cdn.jsdelivr.net/gh/ionic-team/ionicons@5.5.1/src/svg/arrow-back-outline.svg");
	/* generated using https://dopiaza.org/tools/datauri/index.php */
    background-image: url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI1MTIiIGhlaWdodD0iNTEyIiB2aWV3Qm94PSIwIDAgNTEyIDUxMiI+PHRpdGxlPmlvbmljb25zLXY1LWE8L3RpdGxlPjxwb2x5bGluZSBwb2ludHM9IjI0NCA0MDAgMTAwIDI1NiAyNDQgMTEyIiBzdHlsZT0iZmlsbDpub25lO3N0cm9rZTojMDAwO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2Utd2lkdGg6NDhweCIvPjxsaW5lIHgxPSIxMjAiIHkxPSIyNTYiIHgyPSI0MTIiIHkyPSIyNTYiIHN0eWxlPSJmaWxsOm5vbmU7c3Ryb2tlOiMwMDA7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS13aWR0aDo0OHB4Ii8+PC9zdmc+");
}



.plutoui-toc header {
	display: flex;
	align-items: center;
	gap: .3em;
	font-size: 1.5em;
	/* margin-top: -0.1em; */
	margin-bottom: 0.4em;
	padding: 0.5rem;
	margin-left: 0;
	margin-right: 0;
	font-weight: bold;
	/* border-bottom: 2px solid rgba(0, 0, 0, 0.15); */
	position: sticky;
	top: 0px;
	background: var(--main-bg-color);
	z-index: 41;
}
.plutoui-toc.aside header {
	padding-left: 0;
	padding-right: 0;
}

.plutoui-toc section .toc-row {
	white-space: nowrap;
	overflow: hidden;
	text-overflow: ellipsis;
	padding: .1em;
	border-radius: .2em;
}

.plutoui-toc section .toc-row.H1 {
	margin-top: 1em;
}


.plutoui-toc.aside section .toc-row.in-view {
	background: var(--sidebar-li-active-bg);
}


	
.highlight-pluto-cell-shoulder {
	background: rgba(0, 0, 0, 0.05);
	background-clip: padding-box;
}

.plutoui-toc section a {
	text-decoration: none;
	font-weight: normal;
	color: var(--pluto-output-color);
}
.plutoui-toc section a:hover {
	color: var(--pluto-output-h-color);
}

.plutoui-toc.indent section a.H1 {
	font-weight: 700;
	line-height: 1em;
}

.plutoui-toc.indent section .after-H2 a { padding-left: 10px; }
.plutoui-toc.indent section .after-H3 a { padding-left: 20px; }
.plutoui-toc.indent section .after-H4 a { padding-left: 30px; }
.plutoui-toc.indent section .after-H5 a { padding-left: 40px; }
.plutoui-toc.indent section .after-H6 a { padding-left: 50px; }

.plutoui-toc.indent section a.H1 { padding-left: 0px; }
.plutoui-toc.indent section a.H2 { padding-left: 10px; }
.plutoui-toc.indent section a.H3 { padding-left: 20px; }
.plutoui-toc.indent section a.H4 { padding-left: 30px; }
.plutoui-toc.indent section a.H5 { padding-left: 40px; }
.plutoui-toc.indent section a.H6 { padding-left: 50px; }


.plutoui-toc.indent section a.pluto-docs-binding-el,
.plutoui-toc.indent section a.ASSIGNEE
	{
	font-family: JuliaMono, monospace;
	font-size: .8em;
	/* background: black; */
	font-weight: 700;
    font-style: italic;
	color: var(--cm-var-color); /* this is stealing a variable from Pluto, but it's fine if that doesnt work */
}
.plutoui-toc.indent section a.pluto-docs-binding-el::before,
.plutoui-toc.indent section a.ASSIGNEE::before
	{
	content: "> ";
	opacity: .3;
}
</style>
¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš$6)°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$77cf7fee-0ad8-4d22-b376-75833307db93¹depends_on_disabled_cellsÂ§runtimeÎ!†•µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$d11bfcf9-b964-4c67-afdc-53d81f051fd5Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ4monte_carlo_pred_V (generic function with 2 methods)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš)k.Ø°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$d11bfcf9-b964-4c67-afdc-53d81f051fd5¹depends_on_disabled_cellsÂ§runtimeÎðÀöµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$19e42f50-5301-41b9-becb-2368c26b6236Š¦queuedÂ¤logs�§runningÂ¦output†¤body¨1.9652f0¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš-}ý¹°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$19e42f50-5301-41b9-becb-2368c26b6236¹depends_on_disabled_cellsÂ§runtimeÎ®PÉµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$924f4e74-e3a0-42eb-89da-1f9836275588Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ6off_policy_MC_control (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš.‚2Â°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$924f4e74-e3a0-42eb-89da-1f9836275588¹depends_on_disabled_cellsÂ§runtimeÎ Rí=µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$6dc0de46-2164-4580-b186-a73cb5b5167dŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ-project_path (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš/K ”°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$6dc0de46-2164-4580-b186-a73cb5b5167d¹depends_on_disabled_cellsÂ§runtimeÎ 1‚˜µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$63814164-f305-49b3-ab51-675c822d7b18Š¦queuedÂ¤logs�§runningÂ¦output†¤body…¦prefix³Tuple{Int64, Int64}¨elementsÜ ’’ƒ¨elements’’’¡0ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°9b52efd7a2a08bd5Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡0ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°86128cc9b5ae8f4aÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡0ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°fc41ae7a664555b0Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡0ªtext/plain’’¡3ªtext/plain¤type¥Tuple¨objectid°5a8d0f981b76571aÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡0ªtext/plain’’¡4ªtext/plain¤type¥Tuple¨objectid°6ac4b5902680c6bbÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡1ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°1539b04621ff8c7dÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡1ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°78e123e4f427692aÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡1ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°e3e6b1884080a98dÙ!application/vnd.pluto.tree+object’	’ƒ¨elements’’’¡1ªtext/plain’’¡3ªtext/plain¤type¥Tuple¨objectid°7d75a9159c58bddfÙ!application/vnd.pluto.tree+object’
’ƒ¨elements’’’¡1ªtext/plain’’¡4ªtext/plain¤type¥Tuple¨objectid°3258627267de1f67Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡2ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°83bf2aef4031930bÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡2ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°ef30e57ac248f6d7Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡2ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°74f4975686c560b8Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡2ªtext/plain’’¡3ªtext/plain¤type¥Tuple¨objectid°166e372c63abd549Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡2ªtext/plain’’¡4ªtext/plain¤type¥Tuple¨objectid°fe67fb157b710308Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡3ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°aa4c36dcad24fa29Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡3ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°ec7c7c340006434bÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡3ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°c1258421771ca213Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡3ªtext/plain’’¡3ªtext/plain¤type¥Tuple¨objectid°3ed622ab32dfec93Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡3ªtext/plain’’¡4ªtext/plain¤type¥Tuple¨objectid°441bcd44d2e6073bÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡4ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°c772df2bb869c6b4Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡4ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°ab958923df88f7e9Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡4ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°27c77ee4a87cee0dÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡4ªtext/plain’’¡3ªtext/plain¤type¥Tuple¨objectid°ed8ab7e3922a8b9fÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡4ªtext/plain’’¡4ªtext/plain¤type¥Tuple¨objectid°a7048b0d6f799239Ù!application/vnd.pluto.tree+object¤type¥Array¬prefix_short ¨objectid°f9ad86173c46f993¤mimeÙ!application/vnd.pluto.tree+object¬rootassigneeºconst racetrack_velocities²last_run_timestampËAÚš/Æ °persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$63814164-f305-49b3-ab51-675c822d7b18¹depends_on_disabled_cellsÂ§runtimeÎÖ]Ïµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$4337b83f-b648-4b55-9d2a-4fffcf701111Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙº<style>
	main {
		margin: 0 auto;
		max-width: min(2000px, 90%);
    	padding-left: max(10px, 5%);
    	padding-right: max(10px, 5%);
		font-size: max(10px, min(18px, 2vw));
	}
</style>
¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš",Yq°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$4337b83f-b648-4b55-9d2a-4fffcf701111¹depends_on_disabled_cellsÂ§runtimeÎ µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$1b78b25d-3942-4a6b-a2bd-7d97242da9feŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ0monte_carlo_ES (generic function with 2 methods)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš%ñ…°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$1b78b25d-3942-4a6b-a2bd-7d97242da9fe¹depends_on_disabled_cellsÂ§runtimeÎ +ŸŒµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$9524a3f5-fca3-4ce9-b04d-0cb6c0cd0c90Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚÕ+	<div style = "display: flex;">
	<div>
Race finished in 6619 steps
<div style="background-color: white; color: black;">
	<div style="display:flex; align-items: flex-start">
	<div class = "track">
		<div class = "start" vx = "0" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 4; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "0" dvy = "-1" style="grid-column-start: 8; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "-1" dvy = "0" style="grid-column-start: 9; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "0" dvy = "-1" style="grid-column-start: 6; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "1" dvy = "1" style="grid-column-start: 5; grid-row-start: 1;"></div><div class = "" vx = "0" vy = "4" dvx = "0" dvy = "0" style="grid-column-start: 5; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 5;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 6; grid-row-start: 27;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 9; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 18;"></div><div class = "" vx = "2" vy = "4" dvx = "1" dvy = "1" style="grid-column-start: 10; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 22;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 8; grid-row-start: 24;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "1" style="grid-column-start: 7; grid-row-start: 14;"></div><div class = "" vx = "1" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 10; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 27;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "1" style="grid-column-start: 5; grid-row-start: 11;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 7; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 31;"></div><div class = "" vx = "2" vy = "0" dvx = "0" dvy = "1" style="grid-column-start: 11; grid-row-start: 29;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 6; grid-row-start: 30;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "1" style="grid-column-start: 6; grid-row-start: 13;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "-1" style="grid-column-start: 8; grid-row-start: 15;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 9; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 24;"></div><div class = "" vx = "1" vy = "2" dvx = "-1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 7;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "-1" style="grid-column-start: 8; grid-row-start: 17;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "-1" style="grid-column-start: 6; grid-row-start: 32;"></div><div class = "" vx = "2" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 13; grid-row-start: 30;"></div><div class = "" vx = "0" vy = "4" dvx = "-1" dvy = "-1" style="grid-column-start: 5; grid-row-start: 22;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "-1" style="grid-column-start: 6; grid-row-start: 20;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 5; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 32;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 8; grid-row-start: 25;"></div><div class = "" vx = "2" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 12; grid-row-start: 30;"></div><div class = "" vx = "2" vy = "0" dvx = "0" dvy = "-1" style="grid-column-start: 10; grid-row-start: 26;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 23;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "-1" style="grid-column-start: 4; grid-row-start: 15;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "1" style="grid-column-start: 9; grid-row-start: 12;"></div><div class = "" vx = "2" vy = "2" dvx = "0" dvy = "-1" style="grid-column-start: 12; grid-row-start: 32;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "0" style="grid-column-start: 7; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 17;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "0" style="grid-column-start: 6; grid-row-start: 19;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 6; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 25;"></div><div class = "" vx = "1" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 5; grid-row-start: 5;"></div><div class = "" vx = "0" vy = "4" dvx = "-1" dvy = "-1" style="grid-column-start: 6; grid-row-start: 26;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 6; grid-row-start: 8;"></div><div class = "" vx = "1" vy = "4" dvx = "0" dvy = "1" style="grid-column-start: 8; grid-row-start: 29;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 5; grid-row-start: 23;"></div><div class = "" vx = "1" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 5;"></div><div class = "" vx = "2" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 15; grid-row-start: 29;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 7; grid-row-start: 18;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 9; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 30;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 6; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 29;"></div><div class = "" vx = "1" vy = "0" dvx = "0" dvy = "-1" style="grid-column-start: 10; grid-row-start: 28;"></div><div class = "" vx = "0" vy = "4" dvx = "-1" dvy = "0" style="grid-column-start: 5; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 13;"></div><div class = "" vx = "1" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 8; grid-row-start: 11;"></div><div class = "" vx = "1" vy = "2" dvx = "-1" dvy = "1" style="grid-column-start: 6; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 24;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 20;"></div><div class = "" vx = "1" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 6; grid-row-start: 21;"></div><div class = "" vx = "1" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 7; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 27;"></div><div class = "" vx = "0" vy = "4" dvx = "-1" dvy = "1" style="grid-column-start: 6; grid-row-start: 28;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 6; grid-row-start: 3;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 8; grid-row-start: 22;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "0" style="grid-column-start: 4; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 9;"></div><div class = "" vx = "1" vy = "2" dvx = "-1" dvy = "1" style="grid-column-start: 8; grid-row-start: 12;"></div><div class = "" vx = "2" vy = "0" dvx = "1" dvy = "0" style="grid-column-start: 13; grid-row-start: 28;"></div><div class = "" vx = "1" vy = "2" dvx = "-1" dvy = "1" style="grid-column-start: 11; grid-row-start: 31;"></div><div class = "" vx = "1" vy = "4" dvx = "-1" dvy = "0" style="grid-column-start: 7; grid-row-start: 15;"></div><div class = "" vx = "1" vy = "4" dvx = "-1" dvy = "1" style="grid-column-start: 7; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 26;"></div><div class = "" vx = "0" vy = "4" dvx = "0" dvy = "1" style="grid-column-start: 5; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 25;"></div><div class = "" vx = "1" vy = "2" dvx = "0" dvy = "-1" style="grid-column-start: 6; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 13;"></div><div class = "" vx = "0" vy = "4" dvx = "-1" dvy = "1" style="grid-column-start: 7; grid-row-start: 25;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "0" style="grid-column-start: 4; grid-row-start: 12;"></div><div class = "" vx = "1" vy = "2" dvx = "1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 27;"></div><div class = "" vx = "1" vy = "0" dvx = "0" dvy = "-1" style="grid-column-start: 8; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 20;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 8; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 10;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 6; grid-row-start: 14;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 5; grid-row-start: 30;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "1" style="grid-column-start: 5; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 19;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 4; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 27;"></div><div class = "" vx = "0" vy = "4" dvx = "0" dvy = "0" style="grid-column-start: 7; grid-row-start: 29;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "0" style="grid-column-start: 5; grid-row-start: 32;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 6; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "-1" style="grid-column-start: 8; grid-row-start: 31;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "0" style="grid-column-start: 9; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 23;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 5; grid-row-start: 20;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 28;"></div><div class = "" vx = "2" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 15; grid-row-start: 31;"></div><div class = "" vx = "1" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 9; grid-row-start: 32;"></div><div class = "" vx = "1" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 6; grid-row-start: 7;"></div><div class = "" vx = "1" vy = "3" dvx = "1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 20;"></div><div class = "" vx = "1" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 14; grid-row-start: 31;"></div><div class = "" vx = "1" vy = "0" dvx = "-1" dvy = "-1" style="grid-column-start: 16; grid-row-start: 29;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "-1" style="grid-column-start: 5; grid-row-start: 19;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 5; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 30;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "1" style="grid-column-start: 7; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 6;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "-1" style="grid-column-start: 6; grid-row-start: 16;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "1" style="grid-column-start: 9; grid-row-start: 9;"></div><div class = "" vx = "2" vy = "3" dvx = "1" dvy = "1" style="grid-column-start: 9; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 32;"></div><div class = "" vx = "0" vy = "4" dvx = "0" dvy = "1" style="grid-column-start: 5; grid-row-start: 26;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 5; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 22;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "1" style="grid-column-start: 7; grid-row-start: 22;"></div><div class = "" vx = "0" vy = "4" dvx = "-1" dvy = "-1" style="grid-column-start: 8; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 9; grid-row-start: 26;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 9; grid-row-start: 8;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 7; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 14;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "0" style="grid-column-start: 5; grid-row-start: 10;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "0" style="grid-column-start: 6; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 27;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 5; grid-row-start: 4;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "-1" style="grid-column-start: 9; grid-row-start: 10;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "-1" style="grid-column-start: 5; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 5;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "-1" style="grid-column-start: 8; grid-row-start: 30;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 8; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 7;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 9; grid-row-start: 4;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 8; grid-row-start: 32;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "1" style="grid-column-start: 7; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 30;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "-1" style="grid-column-start: 5; grid-row-start: 28;"></div><div class = "" vx = "1" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 5; grid-row-start: 3;"></div><div class = "" vx = "1" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 9; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 8; grid-row-start: 20;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "1" style="grid-column-start: 6; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 32;"></div><div class = "" vx = "1" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 9; grid-row-start: 28;"></div><div class = "" vx = "1" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 9; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 30;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 14; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 16;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "1" style="grid-column-start: 7; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 32;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 5; grid-row-start: 6;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 8; grid-row-start: 19;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 8; grid-row-start: 9;"></div><div class = "" vx = "0" vy = "4" dvx = "-1" dvy = "-1" style="grid-column-start: 6; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 20;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 6; grid-row-start: 17;"></div><div class = "" vx = "1" vy = "2" dvx = "-1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 6;"></div><div class = "" vx = "2" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 11; grid-row-start: 28;"></div><div class = "" vx = "1" vy = "4" dvx = "1" dvy = "0" style="grid-column-start: 8; grid-row-start: 26;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "1" style="grid-column-start: 8; grid-row-start: 8;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 6; grid-row-start: 25;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 16; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 19;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "-1" style="grid-column-start: 4; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 18;"></div><div class = "" vx = "2" vy = "2" dvx = "-1" dvy = "0" style="grid-column-start: 10; grid-row-start: 29;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 5; grid-row-start: 14;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "-1" style="grid-column-start: 5; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 27;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "1" style="grid-column-start: 4; grid-row-start: 8;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 8; grid-row-start: 10;"></div><div class = "" vx = "1" vy = "3" dvx = "0" dvy = "0" style="grid-column-start: 9; grid-row-start: 14;"></div><div class = "" vx = "0" vy = "4" dvx = "-1" dvy = "1" style="grid-column-start: 7; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 16;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 9; grid-row-start: 2;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "-1" style="grid-column-start: 6; grid-row-start: 29;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "1" style="grid-column-start: 5; grid-row-start: 7;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 8; grid-row-start: 4;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 8; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 24;"></div><div class = "" vx = "2" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 13; grid-row-start: 29;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 7;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 4; grid-row-start: 10;"></div><div class = "" vx = "1" vy = "4" dvx = "0" dvy = "-1" style="grid-column-start: 8; grid-row-start: 28;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 8; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 18;"></div><div class = "" vx = "1" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 7; grid-row-start: 30;"></div><div class = "" vx = "1" vy = "4" dvx = "1" dvy = "0" style="grid-column-start: 5; grid-row-start: 16;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 4; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 15;"></div><div class = "" vx = "0" vy = "4" dvx = "-1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 17;"></div><div class = "" vx = "0" vy = "4" dvx = "0" dvy = "-1" style="grid-column-start: 6; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 20;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 16;"></div><div class = "" vx = "2" vy = "4" dvx = "-1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 20;"></div><div class = "" vx = "1" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 8; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 28;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 4; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 25;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "-1" style="grid-column-start: 6; grid-row-start: 22;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 16; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 19;"></div><div class = "" vx = "0" vy = "4" dvx = "0" dvy = "0" style="grid-column-start: 5; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 24;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "1" style="grid-column-start: 6; grid-row-start: 12;"></div><div class = "" vx = "0" vy = "4" dvx = "-1" dvy = "0" style="grid-column-start: 7; grid-row-start: 19;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 7; grid-row-start: 9;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 16; grid-row-start: 32;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 4; grid-row-start: 6;"></div><div class = "" vx = "1" vy = "3" dvx = "1" dvy = "0" style="grid-column-start: 9; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 26;"></div><div class = "" vx = "0" vy = "4" dvx = "-1" dvy = "-1" style="grid-column-start: 8; grid-row-start: 14;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 7; grid-row-start: 26;"></div><div class = "" vx = "1" vy = "0" dvx = "1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 29;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 8; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 17;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "1" style="grid-column-start: 6; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 24;"></div><div class = "" vx = "1" vy = "4" dvx = "-1" dvy = "0" style="grid-column-start: 10; grid-row-start: 31;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 8; grid-row-start: 7;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "-1" style="grid-column-start: 4; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 25;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 6; grid-row-start: 23;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 24;"></div><div class = "" vx = "1" vy = "3" dvx = "0" dvy = "-1" style="grid-column-start: 7; grid-row-start: 10;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 4; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 11;"></div><div class = "" vx = "1" vy = "4" dvx = "-1" dvy = "0" style="grid-column-start: 5; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 7; grid-row-start: 4;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "-1" style="grid-column-start: 5; grid-row-start: 17;"></div><div class = "" vx = "0" vy = "4" dvx = "0" dvy = "1" style="grid-column-start: 7; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 31;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "1" style="grid-column-start: 4; grid-row-start: 7;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "-1" style="grid-column-start: 8; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 28;"></div><div class = "" vx = "1" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 9; grid-row-start: 15;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "0" style="grid-column-start: 5; grid-row-start: 25;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "1" style="grid-column-start: 9; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 29;"></div><div class = "" vx = "1" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 13; grid-row-start: 31;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "0" style="grid-column-start: 7; grid-row-start: 28;"></div><div class = "" vx = "1" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 7; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 12;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "1" style="grid-column-start: 9; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 27;"></div><div class = "" vx = "2" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 12; grid-row-start: 31;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "-1" style="grid-column-start: 4; grid-row-start: 16;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 8; grid-row-start: 18;"></div><div class = "" vx = "2" vy = "2" dvx = "0" dvy = "0" style="grid-column-start: 7; grid-row-start: 6;"></div><div class = "" vx = "3" vy = "0" dvx = "1" dvy = "1" style="grid-column-start: 16; grid-row-start: 28;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 28;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 29;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 31;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 30;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 27;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 32;"></div>
	</div>
	Finish <br> line
	</div>
	<div>Starting line</div>
</div>
</div>

	<div>
Race finished in 444 steps
<div style="background-color: white; color: black;">
	<div style="display:flex; align-items: flex-start">
	<div class = "track">
		<div class = "start" vx = "0" vy = "0" dvx = "0" dvy = "1" style="grid-column-start: 4; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "0" dvy = "1" style="grid-column-start: 8; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 9; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "0" dvy = "-1" style="grid-column-start: 6; grid-row-start: 1;"></div><div class = "start" vx = "1" vy = "0" dvx = "-1" dvy = "1" style="grid-column-start: 7; grid-row-start: 1;"></div><div class = "start" vx = "0" vy = "0" dvx = "0" dvy = "1" style="grid-column-start: 5; grid-row-start: 1;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 24;"></div><div class = "" vx = "1" vy = "3" dvx = "1" dvy = "1" style="grid-column-start: 7; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 11;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 7; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 15;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "0" style="grid-column-start: 9; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 24;"></div><div class = "" vx = "0" vy = "3" dvx = "1" dvy = "1" style="grid-column-start: 7; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 26;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 9; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 15;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 9; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 25;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 5; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 26;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 6; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 23;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 18;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "-1" style="grid-column-start: 9; grid-row-start: 23;"></div><div class = "" vx = "2" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 14; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 30;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "-1" style="grid-column-start: 6; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 29;"></div><div class = "" vx = "1" vy = "0" dvx = "0" dvy = "0" style="grid-column-start: 10; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 13;"></div><div class = "" vx = "1" vy = "4" dvx = "0" dvy = "0" style="grid-column-start: 8; grid-row-start: 11;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "1" style="grid-column-start: 6; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 24;"></div><div class = "" vx = "1" vy = "4" dvx = "1" dvy = "0" style="grid-column-start: 9; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 27;"></div><div class = "" vx = "0" vy = "4" dvx = "-1" dvy = "-1" style="grid-column-start: 6; grid-row-start: 28;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "0" style="grid-column-start: 6; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 9;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "1" style="grid-column-start: 8; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 8;"></div><div class = "" vx = "1" vy = "0" dvx = "1" dvy = "1" style="grid-column-start: 12; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 25;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 6; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 12;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "-1" style="grid-column-start: 9; grid-row-start: 27;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 8; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 20;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "1" style="grid-column-start: 8; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 30;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "0" style="grid-column-start: 5; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 32;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "-1" style="grid-column-start: 6; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 31;"></div><div class = "" vx = "0" vy = "4" dvx = "0" dvy = "1" style="grid-column-start: 9; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 23;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "0" style="grid-column-start: 5; grid-row-start: 20;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "1" style="grid-column-start: 9; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 32;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "1" style="grid-column-start: 6; grid-row-start: 7;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 30;"></div><div class = "" vx = "1" vy = "0" dvx = "1" dvy = "0" style="grid-column-start: 7; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 16;"></div><div class = "" vx = "1" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 9; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 11; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 26;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 5; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 22;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "1" style="grid-column-start: 8; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "4" dvx = "-1" dvy = "1" style="grid-column-start: 9; grid-row-start: 26;"></div><div class = "" vx = "1" vy = "3" dvx = "0" dvy = "1" style="grid-column-start: 9; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 14;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "0" style="grid-column-start: 5; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 27;"></div><div class = "" vx = "0" vy = "2" dvx = "-1" dvy = "1" style="grid-column-start: 5; grid-row-start: 4;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 7; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 7;"></div><div class = "" vx = "1" vy = "0" dvx = "0" dvy = "1" style="grid-column-start: 9; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 23;"></div><div class = "" vx = "1" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 15; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 28;"></div><div class = "" vx = "1" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 5; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "4" dvx = "-1" dvy = "-1" style="grid-column-start: 8; grid-row-start: 20;"></div><div class = "" vx = "1" vy = "4" dvx = "-1" dvy = "0" style="grid-column-start: 6; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 32;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 9; grid-row-start: 28;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "1" style="grid-column-start: 9; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 32;"></div><div class = "" vx = "1" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 5; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 19;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 8; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 20;"></div><div class = "" vx = "1" vy = "4" dvx = "0" dvy = "-1" style="grid-column-start: 6; grid-row-start: 17;"></div><div class = "" vx = "2" vy = "2" dvx = "-1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 6;"></div><div class = "" vx = "1" vy = "0" dvx = "0" dvy = "0" style="grid-column-start: 11; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 26;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 8; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 14;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "1" style="grid-column-start: 5; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 8;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "1" style="grid-column-start: 8; grid-row-start: 10;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "1" style="grid-column-start: 9; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 16;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 9; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 29;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 5; grid-row-start: 7;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 8; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 29;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "1" style="grid-column-start: 9; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 10;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 28;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 8; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 15; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 30;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "1" style="grid-column-start: 5; grid-row-start: 16;"></div><div class = "" vx = "0" vy = "2" dvx = "1" dvy = "0" style="grid-column-start: 4; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 13;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 21;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 17;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "-1" style="grid-column-start: 6; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 14; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 20;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 16;"></div><div class = "" vx = "1" vy = "3" dvx = "1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 20;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 8; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 28;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 30;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 12;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 19;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 9;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 32;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 6;"></div><div class = "" vx = "2" vy = "4" dvx = "1" dvy = "1" style="grid-column-start: 9; grid-row-start: 18;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 26;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 26;"></div><div class = "" vx = "2" vy = "2" dvx = "1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 8;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 29;"></div><div class = "" vx = "0" vy = "1" dvx = "0" dvy = "-1" style="grid-column-start: 8; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 17;"></div><div class = "" vx = "1" vy = "1" dvx = "0" dvy = "0" style="grid-column-start: 6; grid-row-start: 5;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 24;"></div><div class = "" vx = "1" vy = "3" dvx = "-1" dvy = "0" style="grid-column-start: 10; grid-row-start: 31;"></div><div class = "" vx = "1" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 8; grid-row-start: 7;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 14;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 6; grid-row-start: 23;"></div><div class = "" style="grid-column-start: 9; grid-row-start: 24;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 10;"></div><div class = "" vx = "0" vy = "1" dvx = "1" dvy = "0" style="grid-column-start: 4; grid-row-start: 2;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 11;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "2" dvx = "0" dvy = "1" style="grid-column-start: 7; grid-row-start: 4;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 21;"></div><div class = "" vx = "0" vy = "3" dvx = "0" dvy = "-1" style="grid-column-start: 6; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 7;"></div><div class = "" vx = "0" vy = "4" dvx = "1" dvy = "1" style="grid-column-start: 8; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 1; grid-row-start: 28;"></div><div class = "" vx = "1" vy = "4" dvx = "1" dvy = "0" style="grid-column-start: 9; grid-row-start: 15;"></div><div class = "" style="grid-column-start: 5; grid-row-start: 25;"></div><div class = "" vx = "0" vy = "4" dvx = "0" dvy = "-1" style="grid-column-start: 9; grid-row-start: 17;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 22;"></div><div class = "" style="grid-column-start: 2; grid-row-start: 29;"></div><div class = "" style="grid-column-start: 13; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 7; grid-row-start: 28;"></div><div class = "" vx = "0" vy = "1" dvx = "-1" dvy = "1" style="grid-column-start: 7; grid-row-start: 3;"></div><div class = "" style="grid-column-start: 3; grid-row-start: 12;"></div><div class = "" vx = "0" vy = "3" dvx = "-1" dvy = "-1" style="grid-column-start: 9; grid-row-start: 25;"></div><div class = "" style="grid-column-start: 10; grid-row-start: 27;"></div><div class = "" style="grid-column-start: 12; grid-row-start: 31;"></div><div class = "" style="grid-column-start: 4; grid-row-start: 16;"></div><div class = "" style="grid-column-start: 8; grid-row-start: 18;"></div><div class = "" vx = "1" vy = "2" dvx = "1" dvy = "-1" style="grid-column-start: 7; grid-row-start: 6;"></div><div class = "" style="grid-column-start: 16; grid-row-start: 28;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 28;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 29;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 31;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 30;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 27;"></div><div class = "finish" style="grid-column-start: 17; grid-row-start: 32;"></div>
	</div>
	Finish <br> line
	</div>
	<div>Starting line</div>
</div>
</div>

	</div>
¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš1.3ð°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$9524a3f5-fca3-4ce9-b04d-0cb6c0cd0c90¹depends_on_disabled_cellsÂ§runtimeÎ ¹Iµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$2ed0d4bb-bb6e-4adf-ad7c-8ddeb8c20b84Š¦queuedÂ¤logs�§runningÂ¦output†¤body…¦prefix§Float32¨elements’’’©-0.283645ªtext/plain’’©-0.283863ªtext/plain¤type¥Array¬prefix_short ¨objectid°15a0fb12b6cc7c7d¤mimeÙ!application/vnd.pluto.tree+object¬rootassigneeÀ²last_run_timestampËAÚš.) ½°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$2ed0d4bb-bb6e-4adf-ad7c-8ddeb8c20b84¹depends_on_disabled_cellsÂ§runtimeÍNEµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$a0d61852-9942-42de-b554-572c4526a3a8Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ/make_track_mdp (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš/ ˜ž°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$a0d61852-9942-42de-b554-572c4526a3a8¹depends_on_disabled_cellsÂ§runtimeÎ Yþrµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$bb617e58-2700-4f0d-b8c8-3a266142fb70Š¦queuedÂ¤logs�§runningÂ¦output†¤body…¦prefix³Tuple{Int64, Int64}¨elements™’’ƒ¨elements’’’¢-1ªtext/plain’’¢-1ªtext/plain¤type¥Tuple¨objectid°a5f5003e88013c47Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢-1ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°29547c053cf46d53Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢-1ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°d7f044f2876f60eaÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡0ªtext/plain’’¢-1ªtext/plain¤type¥Tuple¨objectid°4b2797d2a8e67906Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡0ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°9b52efd7a2a08bd5Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡0ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°86128cc9b5ae8f4aÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡1ªtext/plain’’¢-1ªtext/plain¤type¥Tuple¨objectid°467534c86eaf64c9Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡1ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°1539b04621ff8c7dÙ!application/vnd.pluto.tree+object’	’ƒ¨elements’’’¡1ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°78e123e4f427692aÙ!application/vnd.pluto.tree+object¤type¥Array¬prefix_short ¨objectid°d05a5360a94e8964¤mimeÙ!application/vnd.pluto.tree+object¬rootassignee·const racetrack_actions²last_run_timestampËAÚš/EÉ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$bb617e58-2700-4f0d-b8c8-3a266142fb70¹depends_on_disabled_cellsÂ§runtimeÎ§Úoµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$0d9c5d60-878a-45bb-8707-275cf10be41fŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙY<bond def="run2_2" unique_id="R9Ux3nHe4EhE"><input type="button" value="Run race"></bond>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš3(�4°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$0d9c5d60-878a-45bb-8707-275cf10be41f¹depends_on_disabled_cellsÂ§runtimeÎ 5µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$b6eac49e-6742-4594-87a5-821437846b0dŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ%test (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš-�°°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$b6eac49e-6742-4594-87a5-821437846b0d¹depends_on_disabled_cellsÂ§runtimeÎ ,Xµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$61d8cfc6-a50c-4546-9e1f-dc73d4764bb9Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ)updateQ! (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš-N°Í°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$61d8cfc6-a50c-4546-9e1f-dc73d4764bb9¹depends_on_disabled_cellsÂ§runtimeÎ 7Èãµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$847a074c-1d23-4de3-a039-322aeb9f7613Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyƒ¨elements–’’¦0.5652ªtext/plain’’£0.0ªtext/plain’’¡0ªtext/plain’’¦0.5155ªtext/plain’’¦0.4038ªtext/plain’’¦0.0807ªtext/plain¤type¥Tuple¨objectid°d7544a9cb7c7437b¤mimeÙ!application/vnd.pluto.tree+object¬rootassigneeÀ²last_run_timestampËAÚš-Î||°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$847a074c-1d23-4de3-a039-322aeb9f7613¹depends_on_disabled_cellsÂ§runtimeÎƒC›µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$d2625507-4787-4b1c-9a91-108012e42cc7Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ4make_rotation_style (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš/ýçÍ°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$d2625507-4787-4b1c-9a91-108012e42cc7¹depends_on_disabled_cellsÂ§runtimeÎ 
Šµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$94be5289-bba7-4490-bdcd-0d217a31c665Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ6eval_blackjack_policy (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš)qh°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$94be5289-bba7-4490-bdcd-0d217a31c665¹depends_on_disabled_cellsÂ§runtimeÎ Òµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$f7616806-97ab-4b09-accc-4e047691f879Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyƒ¨elements“’¥start’…¦prefix¸Set{Tuple{Int64, Int64}}¨elements›’’ƒ¨elements’’’¡7ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°627f1c091b0a4b9cÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡4ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°c772df2bb869c6b4Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢13ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°a6181d00e53a5365Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢15ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°816aa1f221e923aaÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¡2ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°83bf2aef4031930bÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢10ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°9923e252784cde82Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢18ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°8306b9cc8232e6d3Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢21ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°60607b9e5a59278cÙ!application/vnd.pluto.tree+object’	’ƒ¨elements’’’¡5ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°973ae957c0c386bdÙ!application/vnd.pluto.tree+object’
’ƒ¨elements’’’¢16ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°b06d4522cf52b585Ù!application/vnd.pluto.tree+object¤more¤type£Set¬prefix_short£Set¨objectid°b6a28855cf29006dÙ!application/vnd.pluto.tree+object’¦finish’…¦prefix¸Set{Tuple{Int64, Int64}}¨elements™’’ƒ¨elements’’’¢31ªtext/plain’’¢29ªtext/plain¤type¥Tuple¨objectid°bddb0ebc69f81014Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢31ªtext/plain’’¢26ªtext/plain¤type¥Tuple¨objectid°7a8f6e121fb0f1dbÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢31ªtext/plain’’¢22ªtext/plain¤type¥Tuple¨objectid°5eac73e27c3431b0Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢31ªtext/plain’’¢27ªtext/plain¤type¥Tuple¨objectid°fb77cb5c89872970Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢31ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°196e8741f643f3a3Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢31ªtext/plain’’¢25ªtext/plain¤type¥Tuple¨objectid°4783b0de51ea20d2Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢31ªtext/plain’’¢24ªtext/plain¤type¥Tuple¨objectid°3a6d5841ee97ba56Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢31ªtext/plain’’¢23ªtext/plain¤type¥Tuple¨objectid°77bb4b7f5f6e79ecÙ!application/vnd.pluto.tree+object’	’ƒ¨elements’’’¢31ªtext/plain’’¢21ªtext/plain¤type¥Tuple¨objectid°e62e5aecdedfbbedÙ!application/vnd.pluto.tree+object¤type£Set¬prefix_short£Set¨objectid°e91180ef62eb64abÙ!application/vnd.pluto.tree+object’¤body’…¦prefix¸Set{Tuple{Int64, Int64}}¨elements›’’ƒ¨elements’’’¢18ªtext/plain’’¢16ªtext/plain¤type¥Tuple¨objectid°aeb6f295858259dbÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢16ªtext/plain’’¢14ªtext/plain¤type¥Tuple¨objectid°d93d095a02371a59Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢23ªtext/plain’’¢27ªtext/plain¤type¥Tuple¨objectid°da74d5c39ad37f7dÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢22ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid¯cbfc5affbbf7435Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢17ªtext/plain’’¢12ªtext/plain¤type¥Tuple¨objectid¯68544eea78f6641Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢28ªtext/plain’’¢24ªtext/plain¤type¥Tuple¨objectid°20a1ce308f12ceacÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢16ªtext/plain’’¢16ªtext/plain¤type¥Tuple¨objectid°3164689f12bc7404Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’’¢19ªtext/plain’’¢14ªtext/plain¤type¥Tuple¨objectid°cb90bf273945b2c8Ù!application/vnd.pluto.tree+object’	’ƒ¨elements’’’¡7ªtext/plain’’¡8ªtext/plain¤type¥Tuple¨objectid°300559d2f34a9666Ù!application/vnd.pluto.tree+object’
’ƒ¨elements’’’¢25ªtext/plain’’¢18ªtext/plain¤type¥Tuple¨objectid°e198c580273e4010Ù!application/vnd.pluto.tree+object¤more¤type£Set¬prefix_short£Set¨objectid°56568ecb5f27cf54Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°f9782d076e3f90a9¤mimeÙ!application/vnd.pluto.tree+object¬rootassignee¬const track2²last_run_timestampËAÚš/™ïA°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$f7616806-97ab-4b09-accc-4e047691f879¹depends_on_disabled_cellsÂ§runtimeÎGîÚµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$70d9d39f-020d-4f25-810c-82a143a3335bŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ¿2Ã—200 Matrix{Float32}:
 0.5  0.5  0.5  0.5  0.5  0.5  0.5  0.5  â€¦  0.5  0.5  0.5  0.5  0.5  0.5  0.5  0.5
 0.5  0.5  0.5  0.5  0.5  0.5  0.5  0.5     0.5  0.5  0.5  0.5  0.5  0.5  0.5  0.5¤mimeªtext/plain¬rootassignee·const Ï€_rand_blackjack²last_run_timestampËAÚš*}J#°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$70d9d39f-020d-4f25-810c-82a143a3335b¹depends_on_disabled_cellsÂ§runtimeÎ .«µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$780f2fd9-49c3-48bc-b790-dde5be1dc81bŠ¦queuedÂ¤logs�§runningÂ¦output†¤body…¦prefixÙI@NamedTuple{position::Tuple{Int64, Int64}, velocity::Tuple{Int64, Int64}}¨elementsÜ ’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡0ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°9b52efd7a2a08bd5Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°e21e0d549cc4c557Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡0ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°86128cc9b5ae8f4aÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°7f58cd1418ac4ecfÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡0ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°fc41ae7a664555b0Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°1c9be938e1978e57Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡0ªtext/plain’’¡3ªtext/plain¤type¥Tuple¨objectid°5a8d0f981b76571aÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°de42b54207e3ed51Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡0ªtext/plain’’¡4ªtext/plain¤type¥Tuple¨objectid°6ac4b5902680c6bbÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°b60bb04f8974fbb6Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°1539b04621ff8c7dÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°811cc4bfed2188eeÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°78e123e4f427692aÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°ba63b0bf4384bfebÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°e3e6b1884080a98dÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°588abfe8835e67f0Ù!application/vnd.pluto.tree+object’	’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡3ªtext/plain¤type¥Tuple¨objectid°7d75a9159c58bddfÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°e0a89afaeeb8cc2aÙ!application/vnd.pluto.tree+object’
’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡1ªtext/plain’’¡4ªtext/plain¤type¥Tuple¨objectid°3258627267de1f67Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid¯5344a49278b1b36Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡2ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°83bf2aef4031930bÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°b06b130db8f7e4fbÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡2ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°ef30e57ac248f6d7Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°9da3b55d9d765f30Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡2ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°74f4975686c560b8Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°4b7334d8b722e4c5Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡2ªtext/plain’’¡3ªtext/plain¤type¥Tuple¨objectid°166e372c63abd549Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°12fd3745d40ded97Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡2ªtext/plain’’¡4ªtext/plain¤type¥Tuple¨objectid°fe67fb157b710308Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°998dce71f304c512Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡3ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°aa4c36dcad24fa29Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°500de2a9e8aa0c4fÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡3ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°ec7c7c340006434bÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°b178cc324ec3226dÙ!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡3ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°c1258421771ca213Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°67ac852156bb7cf5Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡3ªtext/plain’’¡3ªtext/plain¤type¥Tuple¨objectid°3ed622ab32dfec93Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°9eca4fb39061b113Ù!application/vnd.pluto.tree+object’’ƒ¨elements’’¨position’ƒ¨elements’’’¡1ªtext/plain’’¢28ªtext/plain¤type¥Tuple¨objectid°72e21e63940a8feaÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡3ªtext/plain’’¡4ªtext/plain¤type¥Tuple¨objectid°441bcd44d2e6073bÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°ba0183b035192320Ù!application/vnd.pluto.tree+object¤more’Í{’ƒ¨elements’’¨position’ƒ¨elements’’’¢11ªtext/plain’’¢26ªtext/plain¤type¥Tuple¨objectid°1981f96b58fe709eÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡3ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°aa4c36dcad24fa29Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°96134b5d208df030Ù!application/vnd.pluto.tree+object’Í|’ƒ¨elements’’¨position’ƒ¨elements’’’¢11ªtext/plain’’¢26ªtext/plain¤type¥Tuple¨objectid°1981f96b58fe709eÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡3ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°ec7c7c340006434bÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°d14e3d1c0450631dÙ!application/vnd.pluto.tree+object’Í}’ƒ¨elements’’¨position’ƒ¨elements’’’¢11ªtext/plain’’¢26ªtext/plain¤type¥Tuple¨objectid°1981f96b58fe709eÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡3ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°c1258421771ca213Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°aaeb61474279f53fÙ!application/vnd.pluto.tree+object’Í~’ƒ¨elements’’¨position’ƒ¨elements’’’¢11ªtext/plain’’¢26ªtext/plain¤type¥Tuple¨objectid°1981f96b58fe709eÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡3ªtext/plain’’¡3ªtext/plain¤type¥Tuple¨objectid°3ed622ab32dfec93Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°42d4a84a1c23f17cÙ!application/vnd.pluto.tree+object’Í’ƒ¨elements’’¨position’ƒ¨elements’’’¢11ªtext/plain’’¢26ªtext/plain¤type¥Tuple¨objectid°1981f96b58fe709eÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡3ªtext/plain’’¡4ªtext/plain¤type¥Tuple¨objectid°441bcd44d2e6073bÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°a981be40c7182ddbÙ!application/vnd.pluto.tree+object’Í€’ƒ¨elements’’¨position’ƒ¨elements’’’¢11ªtext/plain’’¢26ªtext/plain¤type¥Tuple¨objectid°1981f96b58fe709eÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡4ªtext/plain’’¡0ªtext/plain¤type¥Tuple¨objectid°c772df2bb869c6b4Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°8cfb9adb3d87723fÙ!application/vnd.pluto.tree+object’Í�’ƒ¨elements’’¨position’ƒ¨elements’’’¢11ªtext/plain’’¢26ªtext/plain¤type¥Tuple¨objectid°1981f96b58fe709eÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡4ªtext/plain’’¡1ªtext/plain¤type¥Tuple¨objectid°ab958923df88f7e9Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°bd1004d406ac2ff3Ù!application/vnd.pluto.tree+object’Í‚’ƒ¨elements’’¨position’ƒ¨elements’’’¢11ªtext/plain’’¢26ªtext/plain¤type¥Tuple¨objectid°1981f96b58fe709eÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡4ªtext/plain’’¡2ªtext/plain¤type¥Tuple¨objectid°27c77ee4a87cee0dÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°d173025b56a4b30eÙ!application/vnd.pluto.tree+object’Íƒ’ƒ¨elements’’¨position’ƒ¨elements’’’¢11ªtext/plain’’¢26ªtext/plain¤type¥Tuple¨objectid°1981f96b58fe709eÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡4ªtext/plain’’¡3ªtext/plain¤type¥Tuple¨objectid°ed8ab7e3922a8b9fÙ!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°8cc1b39df9e565dfÙ!application/vnd.pluto.tree+object’Í„’ƒ¨elements’’¨position’ƒ¨elements’’’¢11ªtext/plain’’¢26ªtext/plain¤type¥Tuple¨objectid°1981f96b58fe709eÙ!application/vnd.pluto.tree+object’¨velocity’ƒ¨elements’’’¡4ªtext/plain’’¡4ªtext/plain¤type¥Tuple¨objectid°a7048b0d6f799239Ù!application/vnd.pluto.tree+object¤typeªNamedTuple¨objectid°d3ab164e30a99253Ù!application/vnd.pluto.tree+object¤type¥Array¬prefix_short ¨objectid°e421b5fa4b4d4a53¤mimeÙ!application/vnd.pluto.tree+object¬rootassigneeÀ²last_run_timestampËAÚš3=1M°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$780f2fd9-49c3-48bc-b790-dde5be1dc81b¹depends_on_disabled_cellsÂ§runtimeÍ1	µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$833bb53c-bc2b-47fb-9429-d0f6d92efb42Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙY<bond def="run1_1" unique_id="UOpyOD8JQO8V"><input type="button" value="Run race"></bond>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš1%Î[°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$833bb53c-bc2b-47fb-9429-d0f6d92efb42¹depends_on_disabled_cellsÂ§runtimeÎB ³µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$e370dbb3-3bd9-4dc8-b8ca-8aad8711905cŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÚj<style>
	.track {
		display: grid;
		grid-gap: 0px;
		background-color: white;
		transform: rotateX(180deg);
	}

	.track * {
		width: 15px;
		height: 15px;
		border: 1px solid black;
		box-sizing: content-box;
		display: flex;
		justify-content: center;
		align-items: center;
	}

	[vx][vy][dvx][dvy]::before {
		display: flex;
		align-items: center;
		justify-content: center;
		position: absolute;
	}

	[vx][vy][dvx][dvy]::after {
		display: flex;
		align-items: center;
		justify-content: center;
		position: absolute;
	}

	.start {
		background-color: orange;
	}
	.finish {
		background-color: green;
	}

	[vx='0'][vy='0']::before {
		content: 'â€¢';
	}

	
[vx='0'][vy='1']::before {
	content: 'â†’';
	transform: rotate(90.0deg) scale(27%);
}


[vx='0'][vy='2']::before {
	content: 'â†’';
	transform: rotate(90.0deg) scale(53%);
}


[vx='0'][vy='3']::before {
	content: 'â†’';
	transform: rotate(90.0deg) scale(80%);
}


[vx='0'][vy='4']::before {
	content: 'â†’';
	transform: rotate(90.0deg) scale(106%);
}


[vx='1'][vy='0']::before {
	content: 'â†’';
	transform: rotate(0.0deg) scale(27%);
}


[vx='1'][vy='1']::before {
	content: 'â†’';
	transform: rotate(45.0deg) scale(38%);
}


[vx='1'][vy='2']::before {
	content: 'â†’';
	transform: rotate(63.43494882292201deg) scale(59%);
}


[vx='1'][vy='3']::before {
	content: 'â†’';
	transform: rotate(71.56505117707799deg) scale(84%);
}


[vx='1'][vy='4']::before {
	content: 'â†’';
	transform: rotate(75.96375653207353deg) scale(109%);
}


[vx='2'][vy='0']::before {
	content: 'â†’';
	transform: rotate(0.0deg) scale(53%);
}


[vx='2'][vy='1']::before {
	content: 'â†’';
	transform: rotate(26.56505117707799deg) scale(59%);
}


[vx='2'][vy='2']::before {
	content: 'â†’';
	transform: rotate(45.0deg) scale(75%);
}


[vx='2'][vy='3']::before {
	content: 'â†’';
	transform: rotate(56.309932474020215deg) scale(96%);
}


[vx='2'][vy='4']::before {
	content: 'â†’';
	transform: rotate(63.43494882292201deg) scale(119%);
}


[vx='3'][vy='0']::before {
	content: 'â†’';
	transform: rotate(0.0deg) scale(80%);
}


[vx='3'][vy='1']::before {
	content: 'â†’';
	transform: rotate(18.43494882292201deg) scale(84%);
}


[vx='3'][vy='2']::before {
	content: 'â†’';
	transform: rotate(33.690067525979785deg) scale(96%);
}


[vx='3'][vy='3']::before {
	content: 'â†’';
	transform: rotate(45.0deg) scale(112%);
}


[vx='3'][vy='4']::before {
	content: 'â†’';
	transform: rotate(53.13010235415598deg) scale(133%);
}


[vx='4'][vy='0']::before {
	content: 'â†’';
	transform: rotate(0.0deg) scale(106%);
}


[vx='4'][vy='1']::before {
	content: 'â†’';
	transform: rotate(14.036243467926479deg) scale(109%);
}


[vx='4'][vy='2']::before {
	content: 'â†’';
	transform: rotate(26.56505117707799deg) scale(119%);
}


[vx='4'][vy='3']::before {
	content: 'â†’';
	transform: rotate(36.86989764584402deg) scale(133%);
}


[vx='4'][vy='4']::before {
	content: 'â†’';
	transform: rotate(45.0deg) scale(150%);
}

)
	[dvx='-1'][dvy='-1']::after {
	content: 'â†’';
	color: red;
	transform: rotate(-135.0deg);
}

[dvx='-1'][dvy='0']::after {
	content: 'â†’';
	color: red;
	transform: rotate(180.0deg);
}


[dvx='-1'][dvy='1']::after {
	content: 'â†’';
	color: red;
	transform: rotate(135.0deg);
}


[dvx='0'][dvy='-1']::after {
	content: 'â†’';
	color: red;
	transform: rotate(-90.0deg);
}




[dvx='0'][dvy='1']::after {
	content: 'â†’';
	color: red;
	transform: rotate(90.0deg);
}


[dvx='1'][dvy='-1']::after {
	content: 'â†’';
	color: red;
	transform: rotate(-45.0deg);
}


[dvx='1'][dvy='0']::after {
	content: 'â†’';
	color: red;
	transform: rotate(0.0deg);
}


[dvx='1'][dvy='1']::after {
	content: 'â†’';
	color: red;
	transform: rotate(45.0deg);
}

)
</style>
¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš0 4­°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$e370dbb3-3bd9-4dc8-b8ca-8aad8711905c¹depends_on_disabled_cellsÂ§runtimeÎÔ©µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$2646c9a2-46b1-4700-9290-ddc7dc9a59afŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ-updatecount (generic function with 2 methods)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš)Z´�°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$2646c9a2-46b1-4700-9290-ddc7dc9a59af¹depends_on_disabled_cellsÂ§runtimeÎ šµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$892b5d8e-ac51-48f1-8288-65e9f68acd2dŠ¦queuedÂ¤logs�§runningÂ¦output†¤bodyƒ¨elements’’’¥10.14ªtext/plain’’¥0.224ªtext/plain¤type¥Tuple¨objectid¯54647e13d03e701¤mimeÙ!application/vnd.pluto.tree+object¬rootassigneeÀ²last_run_timestampËAÚš+hì°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$892b5d8e-ac51-48f1-8288-65e9f68acd2d¹depends_on_disabled_cellsÂ§runtimeÎ
n1Vµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$acb08e38-fc87-43f4-ac2d-6c6bf0f2e9e6Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙ3estimate_mdp_state (generic function with 1 method)¤mimeªtext/plain¬rootassigneeÀ²last_run_timestampËAÚš)µà°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$acb08e38-fc87-43f4-ac2d-6c6bf0f2e9e6¹depends_on_disabled_cellsÂ§runtimeÎ m'µpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂÙ$fca388bd-eb8b-41e2-8da0-87b9386629c1Š¦queuedÂ¤logs�§runningÂ¦output†¤bodyÙD<div class="markdown"><h2>5.6 Incremental Implementation</h2>
</div>¤mime©text/html¬rootassigneeÀ²last_run_timestampËAÚš"(¿{°persist_js_stateÂ·has_pluto_hook_featuresÂ§cell_idÙ$fca388bd-eb8b-41e2-8da0-87b9386629c1¹depends_on_disabled_cellsÂ§runtimeÎ Þµpublished_object_keys�¸depends_on_skipped_cellsÂ§erroredÂ±cell_dependenciesÞ ÄÙ$9fe42679-dce3-4ee3-b565-eed4ff7d8e4d„´precedence_heuristic	§cell_idÙ$9fe42679-dce3-4ee3-b565-eed4ff7d8e4d´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$06960937-a87a-4015-bdeb-5d17aa41fe6b„´precedence_heuristic	§cell_idÙ$06960937-a87a-4015-bdeb-5d17aa41fe6b´downstream_cells_map�´plot_blackjack_value‘Ù$627d5aa3-974f-4949-8b65-9500eba1d7cc²upstream_cells_map‚ªplot_value‘Ù$01683e11-a368-45bc-abbc-bbd5c94d7b22¯make_value_grid‘Ù$a35de859-4046-4f6d-9ea9-b523d21cee5dÙ$abdcbbad-747a-41ba-a95d-82404e735793„´precedence_heuristic	§cell_idÙ$abdcbbad-747a-41ba-a95d-82404e735793´downstream_cells_map�³make_Ïµsoft_policy!‘Ù$334b4d77-8784-46be-b9e8-80c0a2244694²upstream_cells_mapŒ¨isapprox�£sum�®AbstractVector�£one�¤Real�¦length�©eachindex�¡-�¡/�¡+�¢==�§maximum�Ù$846ccb44-a18b-4d87-bbf8-fc59eaf87708„´precedence_heuristic	§cell_idÙ$846ccb44-a18b-4d87-bbf8-fc59eaf87708´downstream_cells_map�¥opmc1’Ù$dfc2d648-ec08-49cd-a55f-72a766cad728Ù$887de995-04e8-4d84-88d7-ad096a5747df²upstream_cells_mapŒ§@md_str�¤Core�¡:�¨Base.get�¥@bind�¤Base�«PlutoRunner�·PlutoRunner.create_bond�«NumberField�§confirm�¯Core.applicable�¨getindex�Ù$154edd83-350d-4acf-adfb-6a2d20599b53„´precedence_heuristic	§cell_idÙ$154edd83-350d-4acf-adfb-6a2d20599b53´downstream_cells_map�¨showrace–Ù$9524a3f5-fca3-4ce9-b04d-0cb6c0cd0c90Ù$66645f1a-b591-43e7-b931-8ed0cc7d6898Ù$3d10f89f-876e-4d25-b8d6-34ce5c99eb8cÙ$4481fa33-1ff3-4778-8486-d4d8a15775cdÙ$b7dfc031-6bf6-44cd-b814-05f693a0a27dÙ$6f914006-1d8d-41f5-ae8a-fbe0b336946c²upstream_cells_map‡·HypertextLiteral.Bypass�·HypertextLiteral.Result�°HypertextLiteral‘Ù$77cf7fee-0ad8-4d22-b376-75833307db93¸HypertextLiteral.content�«rendertrack‘Ù$a307e780-996a-485f-af59-b44982dfceb4¤@htl�§runrace‘Ù$5e2420fb-b2cc-49fc-91e3-3de80fba698bÙ$ff9276eb-2151-4a6f-8257-8348047a9f4e„´precedence_heuristic	§cell_idÙ$ff9276eb-2151-4a6f-8257-8348047a9f4e´downstream_cells_map�­race_episode2‘Ù$ba044e4f-e2a6-4f96-8756-5b24b1bb5ca2²upstream_cells_map…²race_track_episode‘Ù$658ceeaa-1b45-47bd-a364-eaa1759d17ac¦track2‘Ù$f7616806-97ab-4b09-accc-4e047691f879±Ï€_racetrack_rand‘Ù$0dfd7afb-127c-4afd-8374-3c9a20a9ee76±racetrack_actions‘Ù$bb617e58-2700-4f0d-b8c8-3a266142fb70¤rand�Ù$6f914006-1d8d-41f5-ae8a-fbe0b336946c„´precedence_heuristic	§cell_idÙ$6f914006-1d8d-41f5-ae8a-fbe0b336946c´downstream_cells_map€²upstream_cells_map†ªtrack2_mdp‘Ù$e7de31e8-ae95-4616-86a9-a115a5e24330¦run3_2‘Ù$e2fc1d47-2ee9-4844-a6b1-16f76531da86²Ï€star3_racetrack2‘Ù$cde7be85-9344-4526-bcb2-c2c8b3322435¦track2‘Ù$f7616806-97ab-4b09-accc-4e047691f879¨showrace‘Ù$154edd83-350d-4acf-adfb-6a2d20599b53¶create_policy_function‘Ù$d6e7cc6d-f397-4bdf-974e-9a16922393ddÙ$4197cc28-b24c-48cb-bd8d-ef998983ad77„´precedence_heuristic	§cell_idÙ$4197cc28-b24c-48cb-bd8d-ef998983ad77´downstream_cells_map�¨OrdinaryœÙ$aaa9647c-afb6-44d1-ae1e-a2e957064080Ù$c8f3f7e3-be7e-4615-a667-d9f789928883Ù$d11bfcf9-b964-4c67-afdc-53d81f051fd5Ù$892b5d8e-ac51-48f1-8288-65e9f68acd2dÙ$43f9b824-fd56-4d56-84c3-23e2a3a37178Ù$a59d9c84-d35f-4a9b-9fb6-13e30cdd7c3aÙ$217ecc59-d6e3-48fa-9d6d-700a3947b805Ù$19e42f50-5301-41b9-becb-2368c26b6236Ù$5b32bbc7-dc34-4fc3-bacc-92e55f26a98cÙ$b6eac49e-6742-4594-87a5-821437846b0dÙ$00cd2194-af13-415a-b725-bb34832e5d9aÙ$e67d9deb-a074-48ba-84db-2e6938ea01f8²upstream_cells_map�°ImportanceMethod‘Ù$d97f693d-27f2-49be-a549-07a290c95b53Ù$e67d9deb-a074-48ba-84db-2e6938ea01f8„´precedence_heuristic	§cell_idÙ$e67d9deb-a074-48ba-84db-2e6938ea01f8´downstream_cells_map�²monte_carlo_pred_Q˜Ù$a59d9c84-d35f-4a9b-9fb6-13e30cdd7c3aÙ$217ecc59-d6e3-48fa-9d6d-700a3947b805Ù$19e42f50-5301-41b9-becb-2368c26b6236Ù$5b32bbc7-dc34-4fc3-bacc-92e55f26a98cÙ$b6eac49e-6742-4594-87a5-821437846b0dÙ$a47474b0-f262-4453-a116-addc3a09119eÙ$35914757-6af1-4056-bba4-a9996f65f7f7Ù$5e012ead-b4f9-45a9-979d-88b0b1086263²upstream_cells_mapÞ ¨updateQ!‘Ù$61d8cfc6-a50c-4546-9e1f-dc73d4764bb9¤zero�£sum�§@assert�¤view�¦length�­sample_action‘Ù$a85e7dd3-ea5e-4c77-a18e-f1e190658ae3¥throw�¦Matrix�®AssertionError�¢!=�¢==�­AbstractFloat�¡:�¨Ordinary‘Ù$4197cc28-b24c-48cb-bd8d-ef998983ad77°ImportanceMethod‘Ù$d97f693d-27f2-49be-a549-07a290c95b53¥zeros�¤ones�¤Bool�§Integer�£all�¡+�¬check_policy‘Ù$11723075-d1db-4512-abf2-3fe494a71a3b¡*�ªMDP_Opaque‘Ù$21d248f5-edad-4614-8c1c-ae330f9e5a18Ù$82a1f11e-b1b3-4c7d-ab9d-9f6136ae8195„´precedence_heuristic	§cell_idÙ$82a1f11e-b1b3-4c7d-ab9d-9f6136ae8195´downstream_cells_map�­onestate_Ï€_b“Ù$5948f670-1203-4b75-8517-f8470f5d01aaÙ$35914757-6af1-4056-bba4-a9996f65f7f7Ù$5e012ead-b4f9-45a9-979d-88b0b1086263²upstream_cells_map‚²make_random_policy‘Ù$b2115f33-f8e2-452e-9b0e-90610f0f09b1¬onestate_mdp‘Ù$f071b7e2-3f78-4132-8b84-f810f178c89dÙ$11f8290f-f589-49ff-9602-99ccc4192884„´precedence_heuristic	§cell_idÙ$11f8290f-f589-49ff-9602-99ccc4192884´downstream_cells_map€²upstream_cells_map…ªtrack2_mdp‘Ù$e7de31e8-ae95-4616-86a9-a115a5e24330¦track2‘Ù$f7616806-97ab-4b09-accc-4e047691f879²Ï€star1_racetrack2‘Ù$da66b3be-1fe2-4edb-9560-71ce7c0bed12°sampleracepolicy‘Ù$8f38a3e9-1872-4ea6-9a03-87112af4bf07¶create_policy_function‘Ù$d6e7cc6d-f397-4bdf-974e-9a16922393ddÙ$7fb4244c-828a-49d6-a15b-178fa3a42e00„´precedence_heuristic	§cell_idÙ$7fb4244c-828a-49d6-a15b-178fa3a42e00´downstream_cells_map�­Ï€_blackjack1œÙ$a68b4965-c392-47e5-9b29-93e7ada9990aÙ$ec29865f-3ba3-4bb3-84df-c2b472e03ff2Ù$d16ac2a8-1a5a-4ded-9285-d2c6cd550066Ù$892b5d8e-ac51-48f1-8288-65e9f68acd2dÙ$43f9b824-fd56-4d56-84c3-23e2a3a37178Ù$a59d9c84-d35f-4a9b-9fb6-13e30cdd7c3aÙ$217ecc59-d6e3-48fa-9d6d-700a3947b805Ù$19e42f50-5301-41b9-becb-2368c26b6236Ù$5b32bbc7-dc34-4fc3-bacc-92e55f26a98cÙ$b6eac49e-6742-4594-87a5-821437846b0dÙ$00cd2194-af13-415a-b725-bb34832e5d9aÙ$a47474b0-f262-4453-a116-addc3a09119e²upstream_cells_map�¼make_simple_blackjack_policy‘Ù$481ad435-cc80-4164-882d-8310b010ca91Ù$0609ad22-0adc-4e4f-afed-b7a46d216576„´precedence_heuristic	§cell_idÙ$0609ad22-0adc-4e4f-afed-b7a46d216576´downstream_cells_map€²upstream_cells_map„ªtrack1_mdp‘Ù$9df79a71-e58a-497b-bb02-debb69144925²Ï€star2_racetrack1‘Ù$68f9e0d9-5c9d-4e89-b5ae-f24fd7544a09°sampleracepolicy‘Ù$8f38a3e9-1872-4ea6-9a03-87112af4bf07¶create_policy_function‘Ù$d6e7cc6d-f397-4bdf-974e-9a16922393ddÙ$61eb74eb-88e0-42e6-a14b-3730a800694d„´precedence_heuristic	§cell_idÙ$61eb74eb-88e0-42e6-a14b-3730a800694d´downstream_cells_map�²onestate_Ï€_target“Ù$5948f670-1203-4b75-8517-f8470f5d01aaÙ$35914757-6af1-4056-bba4-a9996f65f7f7Ù$5e012ead-b4f9-45a9-979d-88b0b1086263²upstream_cells_map�§reshape�Ù$6a96304b-add3-4135-8ccf-46cc23859d53„´precedence_heuristic	§cell_idÙ$6a96304b-add3-4135-8ccf-46cc23859d53´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$c883748c-76b9-4086-8698-b40df51390da„´precedence_heuristic	§cell_idÙ$c883748c-76b9-4086-8698-b40df51390da´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$f071b7e2-3f78-4132-8b84-f810f178c89d„´precedence_heuristic	§cell_idÙ$f071b7e2-3f78-4132-8b84-f810f178c89d´downstream_cells_map‰¥Right‘Ù$f071b7e2-3f78-4132-8b84-f810f178c89d®OneStateAction‘Ù$f071b7e2-3f78-4132-8b84-f810f178c89d¤Left‘Ù$f071b7e2-3f78-4132-8b84-f810f178c89d¨OneState‘Ù$f071b7e2-3f78-4132-8b84-f810f178c89d³one_state_simulator�®one_state_step�·one_state_action_lookup�¬onestate_mdp”Ù$82a1f11e-b1b3-4c7d-ab9d-9f6136ae8195Ù$5948f670-1203-4b75-8517-f8470f5d01aaÙ$35914757-6af1-4056-bba4-a9996f65f7f7Ù$5e012ead-b4f9-45a9-979d-88b0b1086263±one_state_actions�²upstream_cells_map�¤Dict�®OneStateAction‘Ù$f071b7e2-3f78-4132-8b84-f810f178c89d¡!�¢=>�¤rand�¦Vector�­sample_action‘Ù$a85e7dd3-ea5e-4c77-a18e-f1e190658ae3¥Right‘Ù$f071b7e2-3f78-4132-8b84-f810f178c89d¤Left‘Ù$f071b7e2-3f78-4132-8b84-f810f178c89d¨OneState‘Ù$f071b7e2-3f78-4132-8b84-f810f178c89d¥push!�¢<=�ªMDP_Opaque‘Ù$21d248f5-edad-4614-8c1c-ae330f9e5a18Ù$8d7b9826-b52c-4d5a-8c63-e83a1229a0be„´precedence_heuristic	§cell_idÙ$8d7b9826-b52c-4d5a-8c63-e83a1229a0be´downstream_cells_map€²upstream_cells_mapƒ§@md_str�¦mcÏµs2‘Ù$1117e6c3-2736-46a4-bac2-d3c99c1998b6¨getindex�Ù$67e535c7-437a-49ba-b5ab-9dfe63fe4aaa„´precedence_heuristic	§cell_idÙ$67e535c7-437a-49ba-b5ab-9dfe63fe4aaa´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$c8f3f7e3-be7e-4615-a667-d9f789928883„´precedence_heuristic	§cell_idÙ$c8f3f7e3-be7e-4615-a667-d9f789928883´downstream_cells_map�«updatevalue’Ù$1e6f7e5e-c5ce-479c-abbb-6c388c254626Ù$61d8cfc6-a50c-4546-9e1f-dc73d4764bb9²upstream_cells_map…¡-�¨Ordinary‘Ù$4197cc28-b24c-48cb-bd8d-ef998983ad77¡/�¡*�¤Real�Ù$30809344-b4ab-468b-b4b7-5ef3dca5ffc7„´precedence_heuristic	§cell_idÙ$30809344-b4ab-468b-b4b7-5ef3dca5ffc7´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$e2a720b0-a8c4-43a2-bf34-750ff3323004„´precedence_heuristic	§cell_idÙ$e2a720b0-a8c4-43a2-bf34-750ff3323004´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$1067fcc4-cbc6-453c-a996-d420c498619a„´precedence_heuristic	§cell_idÙ$1067fcc4-cbc6-453c-a996-d420c498619a´downstream_cells_map€²upstream_cells_map„ªtrack1_mdp‘Ù$9df79a71-e58a-497b-bb02-debb69144925°sampleracepolicy‘Ù$8f38a3e9-1872-4ea6-9a03-87112af4bf07²Ï€star1_racetrack1‘Ù$dfc2d648-ec08-49cd-a55f-72a766cad728¶create_policy_function‘Ù$d6e7cc6d-f397-4bdf-974e-9a16922393ddÙ$6496c993-6d47-4a6e-a497-2a2de172fbc3„´precedence_heuristic	§cell_idÙ$6496c993-6d47-4a6e-a497-2a2de172fbc3´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$aa647f3e-a4b2-4825-bb2a-1c2469d2c0eb„´precedence_heuristic	§cell_idÙ$aa647f3e-a4b2-4825-bb2a-1c2469d2c0eb´downstream_cells_map€²upstream_cells_map…ªtrack2_mdp‘Ù$e7de31e8-ae95-4616-86a9-a115a5e24330²Ï€star2_racetrack2‘Ù$f41dd3e6-81bf-43e4-afc2-fc549b77f610¦track2‘Ù$f7616806-97ab-4b09-accc-4e047691f879°sampleracepolicy‘Ù$8f38a3e9-1872-4ea6-9a03-87112af4bf07¶create_policy_function‘Ù$d6e7cc6d-f397-4bdf-974e-9a16922393ddÙ$1d3d509c-b11b-4c57-b100-9bcf0489af2b„´precedence_heuristic	§cell_idÙ$1d3d509c-b11b-4c57-b100-9bcf0489af2b´downstream_cells_map�´create_greedy_policy‘Ù$924f4e74-e3a0-42eb-89da-1f9836275588²upstream_cells_map‡¤Real�¡:�¦Matrix�¥zeros�³make_greedy_policy!‘Ù$2d10281a-a4af-4ea8-b63b-e11f2d0893ed¤size�¤copy�Ù$989ccacd-b410-4967-bf6a-9244e3be785d„´precedence_heuristic	§cell_idÙ$989ccacd-b410-4967-bf6a-9244e3be785d´downstream_cells_map�¥mces1’Ù$68f9e0d9-5c9d-4e89-b5ae-f24fd7544a09Ù$605b045d-fe5c-426b-9f55-b7dd1d037c50²upstream_cells_mapŒ§@md_str�¤Core�¡:�¨Base.get�¥@bind�¤Base�«PlutoRunner�·PlutoRunner.create_bond�«NumberField�§confirm�¯Core.applicable�¨getindex�Ù$b352d98e-0854-45e3-ac73-8ef434525563„´precedence_heuristic	§cell_idÙ$b352d98e-0854-45e3-ac73-8ef434525563´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$202eb066-877d-4537-85b2-31b41db8eca0„´precedence_heuristic	§cell_idÙ$202eb066-877d-4537-85b2-31b41db8eca0´downstream_cells_map�¶initialize_state_value�²upstream_cells_map…¦length�¤ones�¡*�ªMDP_Opaque‘Ù$21d248f5-edad-4614-8c1c-ae330f9e5a18­AbstractFloat�Ù$3955d71a-3105-445a-868d-66ba0b3dc515„´precedence_heuristic	§cell_idÙ$3955d71a-3105-445a-868d-66ba0b3dc515´downstream_cells_map�­race_episode1‘Ù$ba044e4f-e2a6-4f96-8756-5b24b1bb5ca2²upstream_cells_map…²race_track_episode‘Ù$658ceeaa-1b45-47bd-a364-eaa1759d17ac¦track1‘Ù$df3c4a33-45f1-4cc2-8c06-d500a0eecc8f±Ï€_racetrack_rand‘Ù$0dfd7afb-127c-4afd-8374-3c9a20a9ee76±racetrack_actions‘Ù$bb617e58-2700-4f0d-b8c8-3a266142fb70¤rand�Ù$f406be9e-3e3f-4b55-99b0-4858c774ed96„´precedence_heuristic	§cell_idÙ$f406be9e-3e3f-4b55-99b0-4858c774ed96´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$648bfc3f-0649-4401-a97f-89e21057f7b7„´precedence_heuristic	§cell_idÙ$648bfc3f-0649-4401-a97f-89e21057f7b7´downstream_cells_map€²upstream_cells_mapƒ§@md_str�¦mcÏµs1‘Ù$acb270a1-e2b9-46bc-9a52-9f66f1cca17c¨getindex�Ù$e10378eb-12b3-4468-9c22-1838107da450„´precedence_heuristic	§cell_idÙ$e10378eb-12b3-4468-9c22-1838107da450´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$2e57e4b5-d228-4ce3-b9d8-cf4375bb7c50„´precedence_heuristic	§cell_idÙ$2e57e4b5-d228-4ce3-b9d8-cf4375bb7c50´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$edb4ad06-5e6e-48c4-9ee4-ae0b92927a91„´precedence_heuristic	§cell_idÙ$edb4ad06-5e6e-48c4-9ee4-ae0b92927a91´downstream_cells_map€²upstream_cells_mapƒ§@md_str�¥mces2‘Ù$059b1c0f-eb21-4a4a-8aed-64e9ac07b541¨getindex�Ù$9df79a71-e58a-497b-bb02-debb69144925„´precedence_heuristic	§cell_idÙ$9df79a71-e58a-497b-bb02-debb69144925´downstream_cells_map�ªtrack1_mdpšÙ$dfc2d648-ec08-49cd-a55f-72a766cad728Ù$9524a3f5-fca3-4ce9-b04d-0cb6c0cd0c90Ù$1067fcc4-cbc6-453c-a996-d420c498619aÙ$68f9e0d9-5c9d-4e89-b5ae-f24fd7544a09Ù$3d10f89f-876e-4d25-b8d6-34ce5c99eb8cÙ$0609ad22-0adc-4e4f-afed-b7a46d216576Ù$780f2fd9-49c3-48bc-b790-dde5be1dc81bÙ$1d6eccf0-2731-47fc-9a41-ea8649e290efÙ$b7dfc031-6bf6-44cd-b814-05f693a0a27dÙ$985f0537-2bbe-4dbb-a113-8ac98d2e0a5f²upstream_cells_map‚®make_track_mdp‘Ù$a0d61852-9942-42de-b554-572c4526a3a8¦track1‘Ù$df3c4a33-45f1-4cc2-8c06-d500a0eecc8fÙ$cebb79b7-c9d6-4b79-ba0e-b2f3c7587724„´precedence_heuristic	§cell_idÙ$cebb79b7-c9d6-4b79-ba0e-b2f3c7587724´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$54f73eb8-dcea-4da0-83af-35720e56ccbc„´precedence_heuristic	§cell_idÙ$54f73eb8-dcea-4da0-83af-35720e56ccbc´downstream_cells_map�²monte_carlo_Ïµsoft“Ù$bf19e6cf-1fb5-49c9-974e-1613d90ef4cfÙ$1d6eccf0-2731-47fc-9a41-ea8649e290efÙ$cde7be85-9344-4526-bcb2-c2c8b3322435²upstream_cells_map‡²make_random_policy‘Ù$b2115f33-f8e2-452e-9b0e-90610f0f09b1¤zero�¦Matrix�ªMDP_Opaque‘Ù$21d248f5-edad-4614-8c1c-ae330f9e5a18½initialize_state_action_value‘Ù$d55860d1-e4c1-4a79-adbe-b40a6d6283a7£one�¤Real�Ù$418c045d-90c7-42d8-9126-90185f7e197b„´precedence_heuristic	§cell_idÙ$418c045d-90c7-42d8-9126-90185f7e197b´downstream_cells_map€²upstream_cells_mapƒ±Ï€star_blackjack3‘Ù$39da4cf9-5265-41bc-83d4-311e86675db7°Qstar_blackjack3‘Ù$39da4cf9-5265-41bc-83d4-311e86675db7ªfigure_5_2‘Ù$627d5aa3-974f-4949-8b65-9500eba1d7ccÙ$6979db32-670d-466a-9a6e-97c2d8527f3d„´precedence_heuristic	§cell_idÙ$6979db32-670d-466a-9a6e-97c2d8527f3d´downstream_cells_map€²upstream_cells_mapƒ§@md_str�©figure5_3‘Ù$00cd2194-af13-415a-b725-bb34832e5d9a¨getindex�Ù$cd928f87-2832-4595-8ce5-79b69cc56bd9„´precedence_heuristic	§cell_idÙ$cd928f87-2832-4595-8ce5-79b69cc56bd9´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$ba044e4f-e2a6-4f96-8756-5b24b1bb5ca2„´precedence_heuristic	§cell_idÙ$ba044e4f-e2a6-4f96-8756-5b24b1bb5ca2´downstream_cells_map€²upstream_cells_mapŠ­race_episode1‘Ù$3955d71a-3105-445a-868d-66ba0b3dc515¦track1‘Ù$df3c4a33-45f1-4cc2-8c06-d500a0eecc8f·HypertextLiteral.Bypass�·HypertextLiteral.Result�°HypertextLiteral‘Ù$77cf7fee-0ad8-4d22-b376-75833307db93­race_episode2‘Ù$ff9276eb-2151-4a6f-8257-8348047a9f4e¦track2‘Ù$f7616806-97ab-4b09-accc-4e047691f879¸HypertextLiteral.content�«rendertrack‘Ù$a307e780-996a-485f-af59-b44982dfceb4¤@htl�Ù$6d6e8916-9b36-4af1-b77d-86cb6a416f88„´precedence_heuristic	§cell_idÙ$6d6e8916-9b36-4af1-b77d-86cb6a416f88´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$cede8090-5b1a-436b-a184-fca5c4d3de48„´precedence_heuristic	§cell_idÙ$cede8090-5b1a-436b-a184-fca5c4d3de48´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$8668ffc3-6c8c-4c25-8d47-9977bef929d2„´precedence_heuristic	§cell_idÙ$8668ffc3-6c8c-4c25-8d47-9977bef929d2´downstream_cells_map�¥opmc2’Ù$da66b3be-1fe2-4edb-9560-71ce7c0bed12Ù$1951fc4c-acc4-49a6-a907-7447ff0f430a²upstream_cells_mapŒ§@md_str�¤Core�¡:�¨Base.get�¥@bind�¤Base�«PlutoRunner�·PlutoRunner.create_bond�«NumberField�§confirm�¯Core.applicable�¨getindex�Ù$5834c5e0-8a04-47ea-aab8-881c73d8fd4f„´precedence_heuristic	§cell_idÙ$5834c5e0-8a04-47ea-aab8-881c73d8fd4f´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$14536b70-35f0-46ba-93fc-3365a1e8c15c„´precedence_heuristic	§cell_idÙ$14536b70-35f0-46ba-93fc-3365a1e8c15c´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$39da4cf9-5265-41bc-83d4-311e86675db7„´precedence_heuristic	§cell_idÙ$39da4cf9-5265-41bc-83d4-311e86675db7´downstream_cells_map‚±Ï€star_blackjack3‘Ù$418c045d-90c7-42d8-9126-90185f7e197b°Qstar_blackjack3‘Ù$418c045d-90c7-42d8-9126-90185f7e197b²upstream_cells_map‚­blackjack_mdp‘Ù$6d765229-2816-4abb-a868-6be919a96530µoff_policy_MC_control‘Ù$924f4e74-e3a0-42eb-89da-1f9836275588Ù$d97f693d-27f2-49be-a549-07a290c95b53„´precedence_heuristic	§cell_idÙ$d97f693d-27f2-49be-a549-07a290c95b53´downstream_cells_map�°ImportanceMethod–Ù$660ef59c-205c-44c2-9c46-5a74e09497abÙ$4197cc28-b24c-48cb-bd8d-ef998983ad77Ù$1e6f7e5e-c5ce-479c-abbb-6c388c254626Ù$d11bfcf9-b964-4c67-afdc-53d81f051fd5Ù$61d8cfc6-a50c-4546-9e1f-dc73d4764bb9Ù$e67d9deb-a074-48ba-84db-2e6938ea01f8²upstream_cells_map€Ù$f9bc84ff-c2f9-4ac2-b2ce-34dfcf837a73„´precedence_heuristic	§cell_idÙ$f9bc84ff-c2f9-4ac2-b2ce-34dfcf837a73´downstream_cells_map€²upstream_cells_mapƒ¯Qstar_blackjack‘Ù$ec29865f-3ba3-4bb3-84df-c2b472e03ff2°Ï€star_blackjack‘Ù$ec29865f-3ba3-4bb3-84df-c2b472e03ff2ªfigure_5_2‘Ù$627d5aa3-974f-4949-8b65-9500eba1d7ccÙ$8f38a3e9-1872-4ea6-9a03-87112af4bf07„´precedence_heuristic	§cell_idÙ$8f38a3e9-1872-4ea6-9a03-87112af4bf07´downstream_cells_map�°sampleracepolicy–Ù$1067fcc4-cbc6-453c-a996-d420c498619aÙ$11f8290f-f589-49ff-9602-99ccc4192884Ù$0609ad22-0adc-4e4f-afed-b7a46d216576Ù$aa647f3e-a4b2-4825-bb2a-1c2469d2c0ebÙ$985f0537-2bbe-4dbb-a113-8ac98d2e0a5fÙ$821ce23a-524b-4203-96d6-4d5b454fe1fd²upstream_cells_mapÞ §@md_str�¤ecdf�¡>�¥isnan�¦isless�¦filter�±racetrack_actions‘Ù$bb617e58-2700-4f0d-b8c8-3a266142fb70¦length�¡<�§scatter�§isempty�¤mean�¥round�¨getindex�§runrace‘Ù$5e2420fb-b2cc-49fc-91e3-3de80fba698b£std�§minimum�¡:�¤rand�¦median�¥Int64�®Markdown.parse�¤plot�£NaN�¨Markdown�§maximum�¦Layout�Ù$627d5aa3-974f-4949-8b65-9500eba1d7cc„´precedence_heuristic	§cell_idÙ$627d5aa3-974f-4949-8b65-9500eba1d7cc´downstream_cells_map�ªfigure_5_2“Ù$f9bc84ff-c2f9-4ac2-b2ce-34dfcf837a73Ù$b040f245-b2d6-4ec6-aa7f-511c54aabd0dÙ$418c045d-90c7-42d8-9126-90185f7e197b²upstream_cells_map‡§@md_str�´plot_blackjack_value‘Ù$06960937-a87a-4015-bdeb-5d17aa41fe6b¡:�£sum�¡*�µplot_blackjack_policy‘Ù$5c57e4b7-51d6-492d-9fc9-bcdab1dd46f4¨getindex�Ù$02dd1e77-2a7e-4123-94db-d17b31a8b15a„´precedence_heuristic	§cell_idÙ$02dd1e77-2a7e-4123-94db-d17b31a8b15a´downstream_cells_map�°blackjack_state1“Ù$04752549-ffca-4e31-869e-714f835d3e85Ù$d16ac2a8-1a5a-4ded-9285-d2c6cd550066Ù$8faca500-b80d-4b50-88b6-683d18a1286b²upstream_cells_map�®BlackjackState‘Ù$e87932d9-fbc0-4ea5-a8ee-28eac5eed84fÙ$09b67730-39e7-4209-8117-6bc3adfb342a„´precedence_heuristic	§cell_idÙ$09b67730-39e7-4209-8117-6bc3adfb342a´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$b7dfc031-6bf6-44cd-b814-05f693a0a27d„´precedence_heuristic	§cell_idÙ$b7dfc031-6bf6-44cd-b814-05f693a0a27d´downstream_cells_map€²upstream_cells_map†¦run3_1‘Ù$772b4dd6-870c-4a16-937c-701d5bb5da44ªtrack1_mdp‘Ù$9df79a71-e58a-497b-bb02-debb69144925¦track1‘Ù$df3c4a33-45f1-4cc2-8c06-d500a0eecc8f¨showrace‘Ù$154edd83-350d-4acf-adfb-6a2d20599b53²Ï€star3_racetrack1‘Ù$1d6eccf0-2731-47fc-9a41-ea8649e290ef¶create_policy_function‘Ù$d6e7cc6d-f397-4bdf-974e-9a16922393ddÙ$2572e35c-e6a3-4562-aa0f-6a5ab32d39ea„´precedence_heuristic	§cell_idÙ$2572e35c-e6a3-4562-aa0f-6a5ab32d39ea´downstream_cells_map€²upstream_cells_map„·HypertextLiteral.Bypass�·HypertextLiteral.Result�°HypertextLiteral‘Ù$77cf7fee-0ad8-4d22-b376-75833307db93¤@htl�Ù$859354fe-7f40-4658-bf12-b5ee20a815a7„´precedence_heuristic	§cell_idÙ$859354fe-7f40-4658-bf12-b5ee20a815a7´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$f9f6c182-62f8-4a5a-8b43-8716db468427„´precedence_heuristic	§cell_idÙ$f9f6c182-62f8-4a5a-8b43-8716db468427´downstream_cells_map�¨maxspeed‘Ù$f506e8ba-b073-4f59-91b4-3fe99822d2a4²upstream_cells_map‚¯racetrackspeeds‘Ù$1cc46e33-6885-4d6f-805e-9ff928f1cf23§maximum�Ù$47daf83b-8fe9-4491-b9ae-84bd269d5546„´precedence_heuristic	§cell_idÙ$47daf83b-8fe9-4491-b9ae-84bd269d5546´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$ba8a5804-4be3-43fe-95d7-c957ce02a1d4„´precedence_heuristic	§cell_idÙ$ba8a5804-4be3-43fe-95d7-c957ce02a1d4´downstream_cells_map�±make_action_style‘Ù$e370dbb3-3bd9-4dc8-b8ca-8aad8711905c²upstream_cells_map‚¥atand�¢==�Ù$481ad435-cc80-4164-882d-8310b010ca91„´precedence_heuristic	§cell_idÙ$481ad435-cc80-4164-882d-8310b010ca91´downstream_cells_map�¼make_simple_blackjack_policy‘Ù$7fb4244c-828a-49d6-a15b-178fa3a42e00²upstream_cells_map†¡<�¯blackjackstates‘Ù$e87932d9-fbc0-4ea5-a8ee-28eac5eed84f¤hcat�¦isless�©mapreduce�§Integer�Ù$8bcaa31b-8caf-43da-83a0-47e0c04c2a30„´precedence_heuristic	§cell_idÙ$8bcaa31b-8caf-43da-83a0-47e0c04c2a30´downstream_cells_map€²upstream_cells_mapˆ¦track1‘Ù$df3c4a33-45f1-4cc2-8c06-d500a0eecc8f·HypertextLiteral.Bypass�·HypertextLiteral.Result�°HypertextLiteral‘Ù$77cf7fee-0ad8-4d22-b376-75833307db93¦track2‘Ù$f7616806-97ab-4b09-accc-4e047691f879¸HypertextLiteral.content�«rendertrack‘Ù$a307e780-996a-485f-af59-b44982dfceb4¤@htl�Ù$7c9486cd-1916-4e13-b415-fb113bd9e04b„´precedence_heuristic	§cell_idÙ$7c9486cd-1916-4e13-b415-fb113bd9e04b´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$821ce23a-524b-4203-96d6-4d5b454fe1fd„´precedence_heuristic	§cell_idÙ$821ce23a-524b-4203-96d6-4d5b454fe1fd´downstream_cells_map€²upstream_cells_map…ªtrack2_mdp‘Ù$e7de31e8-ae95-4616-86a9-a115a5e24330²Ï€star3_racetrack2‘Ù$cde7be85-9344-4526-bcb2-c2c8b3322435¦track2‘Ù$f7616806-97ab-4b09-accc-4e047691f879°sampleracepolicy‘Ù$8f38a3e9-1872-4ea6-9a03-87112af4bf07¶create_policy_function‘Ù$d6e7cc6d-f397-4bdf-974e-9a16922393ddÙ$dc57a71f-e44c-4385-ad2a-e6c14d5e5201„´precedence_heuristic	§cell_idÙ$dc57a71f-e44c-4385-ad2a-e6c14d5e5201´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$00cd2194-af13-415a-b725-bb34832e5d9a„´precedence_heuristic	§cell_idÙ$00cd2194-af13-415a-b725-bb34832e5d9a´downstream_cells_map�©figure5_3’Ù$9ca72278-fff6-4b0f-b72c-e0d3768aff73Ù$6979db32-670d-466a-9a6e-97c2d8527f3d²upstream_cells_mapÞ ¨getindex�§@md_str�£var�­blackjack_mdp‘Ù$6d765229-2816-4abb-a868-6be919a96530¡:�¨Ordinary‘Ù$4197cc28-b24c-48cb-bd8d-ef998983ad77£zip�µblackjack_stateindex1‘Ù$04752549-ffca-4e31-869e-714f835d3e85¨Weighted‘Ù$660ef59c-205c-44c2-9c46-5a74e09497ab²monte_carlo_pred_V’Ù$760c5361-02d4-46b7-a05c-fc2d10d93de6Ù$d11bfcf9-b964-4c67-afdc-53d81f051fd5¶blackjack_state_value1‘Ù$d16ac2a8-1a5a-4ded-9285-d2c6cd550066¡-�§scatter�¤plot�¡^�±Ï€_rand_blackjack‘Ù$70d9d39f-020d-4f25-810c-82a143a3335b¦Layout�¤mean�­Ï€_blackjack1‘Ù$7fb4244c-828a-49d6-a15b-178fa3a42e00Ù$da66b3be-1fe2-4edb-9560-71ce7c0bed12„´precedence_heuristic	§cell_idÙ$da66b3be-1fe2-4edb-9560-71ce7c0bed12´downstream_cells_map‚±Qstar1_racetrack2�²Ï€star1_racetrack2’Ù$66645f1a-b591-43e7-b931-8ed0cc7d6898Ù$11f8290f-f589-49ff-9602-99ccc4192884²upstream_cells_mapƒªtrack2_mdp‘Ù$e7de31e8-ae95-4616-86a9-a115a5e24330µoff_policy_MC_control‘Ù$924f4e74-e3a0-42eb-89da-1f9836275588¥opmc2‘Ù$8668ffc3-6c8c-4c25-8d47-9977bef929d2Ù$d16ac2a8-1a5a-4ded-9285-d2c6cd550066„´precedence_heuristic	§cell_idÙ$d16ac2a8-1a5a-4ded-9285-d2c6cd550066´downstream_cells_map�¶blackjack_state_value1‘Ù$00cd2194-af13-415a-b725-bb34832e5d9a²upstream_cells_map…°blackjack_state1‘Ù$02dd1e77-2a7e-4123-94db-d17b31a8b15a¸estimate_blackjack_state‘Ù$e293e184-5938-40b5-a04b-5306760a06ae¢|>�¤mean�­Ï€_blackjack1‘Ù$7fb4244c-828a-49d6-a15b-178fa3a42e00Ù$830d6d61-7259-43e7-8d6d-09bc81818dd9„´precedence_heuristic	§cell_idÙ$830d6d61-7259-43e7-8d6d-09bc81818dd9´downstream_cells_map€²upstream_cells_map�ªfigure_5_4‘Ù$5948f670-1203-4b75-8517-f8470f5d01aaÙ$e293e184-5938-40b5-a04b-5306760a06ae„´precedence_heuristic	§cell_idÙ$e293e184-5938-40b5-a04b-5306760a06ae´downstream_cells_map�¸estimate_blackjack_state’Ù$d16ac2a8-1a5a-4ded-9285-d2c6cd550066Ù$8faca500-b80d-4b50-88b6-683d18a1286b²upstream_cells_map‚­blackjack_mdp‘Ù$6d765229-2816-4abb-a868-6be919a96530²estimate_mdp_state‘Ù$acb08e38-fc87-43f4-ac2d-6c6bf0f2e9e6Ù$66645f1a-b591-43e7-b931-8ed0cc7d6898„´precedence_heuristic	§cell_idÙ$66645f1a-b591-43e7-b931-8ed0cc7d6898´downstream_cells_map€²upstream_cells_map†ªtrack2_mdp‘Ù$e7de31e8-ae95-4616-86a9-a115a5e24330¨race_1_2‘Ù$7cdf4142-82fe-4aa6-9665-84a1eef5d038¦track2‘Ù$f7616806-97ab-4b09-accc-4e047691f879¨showrace‘Ù$154edd83-350d-4acf-adfb-6a2d20599b53²Ï€star1_racetrack2‘Ù$da66b3be-1fe2-4edb-9560-71ce7c0bed12¶create_policy_function‘Ù$d6e7cc6d-f397-4bdf-974e-9a16922393ddÙ$658ceeaa-1b45-47bd-a364-eaa1759d17ac„´precedence_heuristic	§cell_idÙ$658ceeaa-1b45-47bd-a364-eaa1759d17ac´downstream_cells_map�²race_track_episode”Ù$a0d61852-9942-42de-b554-572c4526a3a8Ù$5e2420fb-b2cc-49fc-91e3-3de80fba698bÙ$3955d71a-3105-445a-868d-66ba0b3dc515Ù$ff9276eb-2151-4a6f-8257-8348047a9f4e²upstream_cells_mapÞ ¨setdiff!�¡!�ªintersect!�£any�¥first�¬project_path‘Ù$6dc0de46-2164-4580-b186-a73cb5b5167d¦isless�¡>�£Inf�¤rand�¦Vector�¦length�¡<�¥push!�§Float32�¢>=�¡+�§isempty�¢in�Ù$04752549-ffca-4e31-869e-714f835d3e85„´precedence_heuristic	§cell_idÙ$04752549-ffca-4e31-869e-714f835d3e85´downstream_cells_map�µblackjack_stateindex1™Ù$892b5d8e-ac51-48f1-8288-65e9f68acd2dÙ$43f9b824-fd56-4d56-84c3-23e2a3a37178Ù$a59d9c84-d35f-4a9b-9fb6-13e30cdd7c3aÙ$217ecc59-d6e3-48fa-9d6d-700a3947b805Ù$19e42f50-5301-41b9-becb-2368c26b6236Ù$5b32bbc7-dc34-4fc3-bacc-92e55f26a98cÙ$b6eac49e-6742-4594-87a5-821437846b0dÙ$00cd2194-af13-415a-b725-bb34832e5d9aÙ$2ed0d4bb-bb6e-4adf-ad7c-8ddeb8c20b84²upstream_cells_map‚°blackjack_state1‘Ù$02dd1e77-2a7e-4123-94db-d17b31a8b15a­blackjack_mdp‘Ù$6d765229-2816-4abb-a868-6be919a96530Ù$e89706f1-0c6a-4da4-82a1-ccf153f2e186„´precedence_heuristic	§cell_idÙ$e89706f1-0c6a-4da4-82a1-ccf153f2e186´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$ab10ccd7-75ba-475c-af26-f8b36daaf880„´precedence_heuristic	§cell_idÙ$ab10ccd7-75ba-475c-af26-f8b36daaf880´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$4481fa33-1ff3-4778-8486-d4d8a15775cd„´precedence_heuristic	§cell_idÙ$4481fa33-1ff3-4778-8486-d4d8a15775cd´downstream_cells_map€²upstream_cells_map†ªtrack2_mdp‘Ù$e7de31e8-ae95-4616-86a9-a115a5e24330²Ï€star2_racetrack2‘Ù$f41dd3e6-81bf-43e4-afc2-fc549b77f610¦track2‘Ù$f7616806-97ab-4b09-accc-4e047691f879¨showrace‘Ù$154edd83-350d-4acf-adfb-6a2d20599b53¦run2_2‘Ù$0d9c5d60-878a-45bb-8707-275cf10be41f¶create_policy_function‘Ù$d6e7cc6d-f397-4bdf-974e-9a16922393ddÙ$1b02e593-d791-424c-b956-62cc480fcf40„´precedence_heuristic	§cell_idÙ$1b02e593-d791-424c-b956-62cc480fcf40´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$72e9721f-ee17-4557-b090-71728e6c22ce„´precedence_heuristic	§cell_idÙ$72e9721f-ee17-4557-b090-71728e6c22ce´downstream_cells_map�ªmakelookup“Ù$21d248f5-edad-4614-8c1c-ae330f9e5a18Ù$e87932d9-fbc0-4ea5-a8ee-28eac5eed84fÙ$a0d61852-9942-42de-b554-572c4526a3a8²upstream_cells_map„¤Dict�©enumerate�¢=>�¦Vector�Ù$11723075-d1db-4512-abf2-3fe494a71a3b„´precedence_heuristic	§cell_idÙ$11723075-d1db-4512-abf2-3fe494a71a3b´downstream_cells_map�¬check_policy“Ù$760c5361-02d4-46b7-a05c-fc2d10d93de6Ù$d11bfcf9-b964-4c67-afdc-53d81f051fd5Ù$e67d9deb-a074-48ba-84db-2e6938ea01f8²upstream_cells_mapŒºMain.Base.inferencebarrier�§@assert�¤size�§nothing�¦length�¤Main�¥throw�®AssertionError�¦Matrix�ªMDP_Opaque‘Ù$21d248f5-edad-4614-8c1c-ae330f9e5a18¢==�­AbstractFloat�Ù$059b1c0f-eb21-4a4a-8aed-64e9ac07b541„´precedence_heuristic	§cell_idÙ$059b1c0f-eb21-4a4a-8aed-64e9ac07b541´downstream_cells_map�¥mces2’Ù$f41dd3e6-81bf-43e4-afc2-fc549b77f610Ù$edb4ad06-5e6e-48c4-9ee4-ae0b92927a91²upstream_cells_mapŒ§@md_str�¤Core�¡:�¨Base.get�¥@bind�¤Base�«PlutoRunner�·PlutoRunner.create_bond�«NumberField�§confirm�¯Core.applicable�¨getindex�Ù$b2115f33-f8e2-452e-9b0e-90610f0f09b1„´precedence_heuristic	§cell_idÙ$b2115f33-f8e2-452e-9b0e-90610f0f09b1´downstream_cells_map�²make_random_policy•Ù$1b78b25d-3942-4a6b-a2bd-7d97242da9feÙ$54f73eb8-dcea-4da0-83af-35720e56ccbcÙ$70d9d39f-020d-4f25-810c-82a143a3335bÙ$82a1f11e-b1b3-4c7d-ab9d-9f6136ae8195Ù$924f4e74-e3a0-42eb-89da-1f9836275588²upstream_cells_map…¦length�¡/�¤ones�ªMDP_Opaque‘Ù$21d248f5-edad-4614-8c1c-ae330f9e5a18­AbstractFloat�Ù$82284c63-2306-4469-9b1a-a5ec87037e79„´precedence_heuristic	§cell_idÙ$82284c63-2306-4469-9b1a-a5ec87037e79´downstream_cells_map€²upstream_cells_map�«plot_fig5_1‘Ù$a68b4965-c392-47e5-9b29-93e7ada9990aÙ$5b32bbc7-dc34-4fc3-bacc-92e55f26a98c„´precedence_heuristic	§cell_idÙ$5b32bbc7-dc34-4fc3-bacc-92e55f26a98c´downstream_cells_map€²upstream_cells_map�²monte_carlo_pred_Q‘Ù$e67d9deb-a074-48ba-84db-2e6938ea01f8­blackjack_mdp‘Ù$6d765229-2816-4abb-a868-6be919a96530¡:�£sum�¨Ordinary‘Ù$4197cc28-b24c-48cb-bd8d-ef998983ad77¢|>�¦filter�µblackjack_stateindex1‘Ù$04752549-ffca-4e31-869e-714f835d3e85¢!=�±Ï€_rand_blackjack‘Ù$70d9d39f-020d-4f25-810c-82a143a3335b¢==�¤mean�­Ï€_blackjack1‘Ù$7fb4244c-828a-49d6-a15b-178fa3a42e00Ù$c8be6951-b6ec-4444-8c7f-ca5db6681571„´precedence_heuristic	§cell_idÙ$c8be6951-b6ec-4444-8c7f-ca5db6681571´downstream_cells_map�®makegridsquare‘Ù$a307e780-996a-485f-af59-b44982dfceb4²upstream_cells_map‚¡-�¡+�Ù$887de995-04e8-4d84-88d7-ad096a5747df„´precedence_heuristic	§cell_idÙ$887de995-04e8-4d84-88d7-ad096a5747df´downstream_cells_map€²upstream_cells_mapƒ§@md_str�¥opmc1‘Ù$846ccb44-a18b-4d87-bbf8-fc59eaf87708¨getindex�Ù$3ee31af5-b19c-49dc-8fbf-f07e93d1f0c5„´precedence_heuristic	§cell_idÙ$3ee31af5-b19c-49dc-8fbf-f07e93d1f0c5´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$ffd1e39d-e66b-40a3-8ad1-c9480d371fe8„´precedence_heuristic	§cell_idÙ$ffd1e39d-e66b-40a3-8ad1-c9480d371fe8´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$13cc524c-d983-44f4-8731-0595249fb888„´precedence_heuristic	§cell_idÙ$13cc524c-d983-44f4-8731-0595249fb888´downstream_cells_map�®monte_carlo_ES“Ù$ec29865f-3ba3-4bb3-84df-c2b472e03ff2Ù$68f9e0d9-5c9d-4e89-b5ae-f24fd7544a09Ù$f41dd3e6-81bf-43e4-afc2-fc549b77f610²upstream_cells_map�¤zero�¡:�¥zeros�¤rand�¤copy�¤Real�¥Int64�¦length�¡-�¡/�¦Matrix�¡+�³make_greedy_policy!‘Ù$2d10281a-a4af-4ea8-b63b-e11f2d0893edªMDP_Opaque‘Ù$21d248f5-edad-4614-8c1c-ae330f9e5a18¡*�Ù$8faca500-b80d-4b50-88b6-683d18a1286b„´precedence_heuristic	§cell_idÙ$8faca500-b80d-4b50-88b6-683d18a1286b´downstream_cells_map€²upstream_cells_map†°blackjack_state1‘Ù$02dd1e77-2a7e-4123-94db-d17b31a8b15a¸estimate_blackjack_state‘Ù$e293e184-5938-40b5-a04b-5306760a06ae¢|>�±Ï€_rand_blackjack‘Ù$70d9d39f-020d-4f25-810c-82a143a3335b¤mean�£var�Ù$755be8f1-9d9e-4afd-8a70-07fab78e4333„´precedence_heuristic	§cell_idÙ$755be8f1-9d9e-4afd-8a70-07fab78e4333´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$01683e11-a368-45bc-abbc-bbd5c94d7b22„´precedence_heuristic	§cell_idÙ$01683e11-a368-45bc-abbc-bbd5c94d7b22´downstream_cells_map�ªplot_value’Ù$a68b4965-c392-47e5-9b29-93e7ada9990aÙ$06960937-a87a-4015-bdeb-5d17aa41fe6b²upstream_cells_map…¡:�¤plot�§heatmap�¤attr�¦Layout�Ù$5e2420fb-b2cc-49fc-91e3-3de80fba698b„´precedence_heuristic	§cell_idÙ$5e2420fb-b2cc-49fc-91e3-3de80fba698b´downstream_cells_map�§runrace’Ù$8f38a3e9-1872-4ea6-9a03-87112af4bf07Ù$154edd83-350d-4acf-adfb-6a2d20599b53²upstream_cells_mapƒ²race_track_episode‘Ù$658ceeaa-1b45-47bd-a364-eaa1759d17ac¦track1‘Ù$df3c4a33-45f1-4cc2-8c06-d500a0eecc8f¤rand�Ù$1e6f7e5e-c5ce-479c-abbb-6c388c254626„´precedence_heuristic	§cell_idÙ$1e6f7e5e-c5ce-479c-abbb-6c388c254626´downstream_cells_map�¨updateV!‘Ù$d11bfcf9-b964-4c67-afdc-53d81f051fd5²upstream_cells_mapÞ ¤zero�°ImportanceMethod‘Ù$d97f693d-27f2-49be-a549-07a290c95b53£one�¨Weighted‘Ù$660ef59c-205c-44c2-9c46-5a74e09497ab¦Vector�¦length�£isa�¤Real�«updatecount’Ù$aaa9647c-afb6-44d1-ae1e-a2e957064080Ù$2646c9a2-46b1-4700-9290-ddc7dc9a59af¡-�«updatevalue’Ù$c8f3f7e3-be7e-4615-a667-d9f789928883Ù$020131a1-c68b-403a-9c5e-944edb6220e9¡/�¦Matrix�¡+�¡*�¢==�Ù$5e012ead-b4f9-45a9-979d-88b0b1086263„´precedence_heuristic	§cell_idÙ$5e012ead-b4f9-45a9-979d-88b0b1086263´downstream_cells_map€²upstream_cells_map…²monte_carlo_pred_Q‘Ù$e67d9deb-a074-48ba-84db-2e6938ea01f8­onestate_Ï€_b‘Ù$82a1f11e-b1b3-4c7d-ab9d-9f6136ae8195¬onestate_mdp‘Ù$f071b7e2-3f78-4132-8b84-f810f178c89d¨Weighted‘Ù$660ef59c-205c-44c2-9c46-5a74e09497ab²onestate_Ï€_target‘Ù$61eb74eb-88e0-42e6-a14b-3730a800694dÙ$a0eb6939-11bb-458d-bee3-9ed763819f62„´precedence_heuristic	§cell_idÙ$a0eb6939-11bb-458d-bee3-9ed763819f62´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$21d248f5-edad-4614-8c1c-ae330f9e5a18„´precedence_heuristic	§cell_idÙ$21d248f5-edad-4614-8c1c-ae330f9e5a18´downstream_cells_map�ªMDP_OpaqueŸÙ$b2115f33-f8e2-452e-9b0e-90610f0f09b1Ù$202eb066-877d-4537-85b2-31b41db8eca0Ù$d55860d1-e4c1-4a79-adbe-b40a6d6283a7Ù$11723075-d1db-4512-abf2-3fe494a71a3bÙ$760c5361-02d4-46b7-a05c-fc2d10d93de6Ù$c23475f0-c5f0-49ce-a665-f93c8bda0474Ù$13cc524c-d983-44f4-8731-0595249fb888Ù$1b78b25d-3942-4a6b-a2bd-7d97242da9feÙ$334b4d77-8784-46be-b9e8-80c0a2244694Ù$54f73eb8-dcea-4da0-83af-35720e56ccbcÙ$d11bfcf9-b964-4c67-afdc-53d81f051fd5Ù$f071b7e2-3f78-4132-8b84-f810f178c89dÙ$e67d9deb-a074-48ba-84db-2e6938ea01f8Ù$924f4e74-e3a0-42eb-89da-1f9836275588Ù$a0d61852-9942-42de-b554-572c4526a3a8²upstream_cells_map†¦Vector�¥Int64�£new�¤Dict�¨Function�ªmakelookup‘Ù$72e9721f-ee17-4557-b090-71728e6c22ceÙ$a68b4965-c392-47e5-9b29-93e7ada9990a„´precedence_heuristic	§cell_idÙ$a68b4965-c392-47e5-9b29-93e7ada9990a´downstream_cells_map�«plot_fig5_1‘Ù$82284c63-2306-4469-9b1a-a5ec87037e79²upstream_cells_mapˆªplot_value‘Ù$01683e11-a368-45bc-abbc-bbd5c94d7b22·HypertextLiteral.Bypass�·HypertextLiteral.Result�°HypertextLiteral‘Ù$77cf7fee-0ad8-4d22-b376-75833307db93¸HypertextLiteral.content�µeval_blackjack_policy‘Ù$94be5289-bba7-4490-bdcd-0d217a31c665¤@htl�­Ï€_blackjack1‘Ù$7fb4244c-828a-49d6-a15b-178fa3a42e00Ù$d766d44e-3684-497c-814e-8f71740cb232„´precedence_heuristic	§cell_idÙ$d766d44e-3684-497c-814e-8f71740cb232´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$0dfd7afb-127c-4afd-8374-3c9a20a9ee76„´precedence_heuristic	§cell_idÙ$0dfd7afb-127c-4afd-8374-3c9a20a9ee76´downstream_cells_map�±Ï€_racetrack_rand’Ù$3955d71a-3105-445a-868d-66ba0b3dc515Ù$ff9276eb-2151-4a6f-8257-8348047a9f4e²upstream_cells_map‚±racetrack_actions‘Ù$bb617e58-2700-4f0d-b8c8-3a266142fb70¤rand�Ù$bf33230e-342b-4486-89ac-9667438de503„´precedence_heuristic	§cell_idÙ$bf33230e-342b-4486-89ac-9667438de503´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$826139cc-b52e-11ec-0d47-25ab689851fd„´precedence_heuristic	§cell_idÙ$826139cc-b52e-11ec-0d47-25ab689851fd´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$0bd705cb-ad38-4cbb-b8fc-7e0617635282„´precedence_heuristic	§cell_idÙ$0bd705cb-ad38-4cbb-b8fc-7e0617635282´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$43f9b824-fd56-4d56-84c3-23e2a3a37178„´precedence_heuristic	§cell_idÙ$43f9b824-fd56-4d56-84c3-23e2a3a37178´downstream_cells_map€²upstream_cells_mapˆ²monte_carlo_pred_V’Ù$760c5361-02d4-46b7-a05c-fc2d10d93de6Ù$d11bfcf9-b964-4c67-afdc-53d81f051fd5­blackjack_mdp‘Ù$6d765229-2816-4abb-a868-6be919a96530¨Ordinary‘Ù$4197cc28-b24c-48cb-bd8d-ef998983ad77¢|>�±Ï€_rand_blackjack‘Ù$70d9d39f-020d-4f25-810c-82a143a3335b¤mean�µblackjack_stateindex1‘Ù$04752549-ffca-4e31-869e-714f835d3e85­Ï€_blackjack1‘Ù$7fb4244c-828a-49d6-a15b-178fa3a42e00Ù$b39d1ea0-86a2-4215-ae73-e4492f3f2f00„´precedence_heuristic	§cell_idÙ$b39d1ea0-86a2-4215-ae73-e4492f3f2f00´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$a307e780-996a-485f-af59-b44982dfceb4„´precedence_heuristic	§cell_idÙ$a307e780-996a-485f-af59-b44982dfceb4´downstream_cells_map�«rendertrack“Ù$154edd83-350d-4acf-adfb-6a2d20599b53Ù$8bcaa31b-8caf-43da-83a0-47e0c04c2a30Ù$ba044e4f-e2a6-4f96-8756-5b24b1bb5ca2²upstream_cells_mapÞ ¤Dict�¤vcat�¡!�¤@htl�¦length�©eachindex�®makegridsquare’Ù$7ee4e17e-c1a9-4df0-a014-114bebcb4f52Ù$c8be6951-b6ec-4444-8c7f-ca5db6681571·HypertextLiteral.Result�§isempty�¤last�§extrema�·HypertextLiteral.Bypass�¥first�¢|>�¥union�¸HypertextLiteral.content�¢=>�¦haskey�¦reduce�¤HTML�°HypertextLiteral‘Ù$77cf7fee-0ad8-4d22-b376-75833307db93¡*�Ù$b040f245-b2d6-4ec6-aa7f-511c54aabd0d„´precedence_heuristic	§cell_idÙ$b040f245-b2d6-4ec6-aa7f-511c54aabd0d´downstream_cells_map€²upstream_cells_mapƒ±Ï€star_blackjack2‘Ù$bf19e6cf-1fb5-49c9-974e-1613d90ef4cfªfigure_5_2‘Ù$627d5aa3-974f-4949-8b65-9500eba1d7cc°Qstar_blackjack2‘Ù$bf19e6cf-1fb5-49c9-974e-1613d90ef4cfÙ$7cdf4142-82fe-4aa6-9665-84a1eef5d038„´precedence_heuristic	§cell_idÙ$7cdf4142-82fe-4aa6-9665-84a1eef5d038´downstream_cells_map�¨race_1_2‘Ù$66645f1a-b591-43e7-b931-8ed0cc7d6898²upstream_cells_mapˆ¤Core�¤Base�·PlutoRunner.create_bond�«PlutoRunner�¯Core.applicable�¥@bind�¨Base.get�¦Button�Ù$3d10f89f-876e-4d25-b8d6-34ce5c99eb8c„´precedence_heuristic	§cell_idÙ$3d10f89f-876e-4d25-b8d6-34ce5c99eb8c´downstream_cells_map€²upstream_cells_map†ªtrack1_mdp‘Ù$9df79a71-e58a-497b-bb02-debb69144925²Ï€star2_racetrack1‘Ù$68f9e0d9-5c9d-4e89-b5ae-f24fd7544a09¦track1‘Ù$df3c4a33-45f1-4cc2-8c06-d500a0eecc8f¨showrace‘Ù$154edd83-350d-4acf-adfb-6a2d20599b53¦run2_1‘Ù$7ce6e28e-acd7-46d1-87d6-a25f4656d79d¶create_policy_function‘Ù$d6e7cc6d-f397-4bdf-974e-9a16922393ddÙ$772b4dd6-870c-4a16-937c-701d5bb5da44„´precedence_heuristic	§cell_idÙ$772b4dd6-870c-4a16-937c-701d5bb5da44´downstream_cells_map�¦run3_1‘Ù$b7dfc031-6bf6-44cd-b814-05f693a0a27d²upstream_cells_mapˆ¤Core�¤Base�·PlutoRunner.create_bond�«PlutoRunner�¯Core.applicable�¥@bind�¨Base.get�¦Button�Ù$1aaf3827-5851-4156-a7e6-14f5e4d00238„´precedence_heuristic	§cell_idÙ$1aaf3827-5851-4156-a7e6-14f5e4d00238´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$d6e7cc6d-f397-4bdf-974e-9a16922393dd„´precedence_heuristic	§cell_idÙ$d6e7cc6d-f397-4bdf-974e-9a16922393dd´downstream_cells_map�¶create_policy_functionœÙ$9524a3f5-fca3-4ce9-b04d-0cb6c0cd0c90Ù$1067fcc4-cbc6-453c-a996-d420c498619aÙ$66645f1a-b591-43e7-b931-8ed0cc7d6898Ù$11f8290f-f589-49ff-9602-99ccc4192884Ù$3d10f89f-876e-4d25-b8d6-34ce5c99eb8cÙ$0609ad22-0adc-4e4f-afed-b7a46d216576Ù$4481fa33-1ff3-4778-8486-d4d8a15775cdÙ$aa647f3e-a4b2-4825-bb2a-1c2469d2c0ebÙ$b7dfc031-6bf6-44cd-b814-05f693a0a27dÙ$985f0537-2bbe-4dbb-a113-8ac98d2e0a5fÙ$6f914006-1d8d-41f5-ae8a-fbe0b336946cÙ$821ce23a-524b-4203-96d6-4d5b454fe1fd²upstream_cells_map�­sample_action‘Ù$a85e7dd3-ea5e-4c77-a18e-f1e190658ae3Ù$1951fc4c-acc4-49a6-a907-7447ff0f430a„´precedence_heuristic	§cell_idÙ$1951fc4c-acc4-49a6-a907-7447ff0f430a´downstream_cells_map€²upstream_cells_mapƒ§@md_str�¨getindex�¥opmc2‘Ù$8668ffc3-6c8c-4c25-8d47-9977bef929d2Ù$660ef59c-205c-44c2-9c46-5a74e09497ab„´precedence_heuristic	§cell_idÙ$660ef59c-205c-44c2-9c46-5a74e09497ab´downstream_cells_map�¨Weighted—Ù$2646c9a2-46b1-4700-9290-ddc7dc9a59afÙ$020131a1-c68b-403a-9c5e-944edb6220e9Ù$1e6f7e5e-c5ce-479c-abbb-6c388c254626Ù$00cd2194-af13-415a-b725-bb34832e5d9aÙ$5948f670-1203-4b75-8517-f8470f5d01aaÙ$61d8cfc6-a50c-4546-9e1f-dc73d4764bb9Ù$5e012ead-b4f9-45a9-979d-88b0b1086263²upstream_cells_map�°ImportanceMethod‘Ù$d97f693d-27f2-49be-a549-07a290c95b53Ù$a47474b0-f262-4453-a116-addc3a09119e„´precedence_heuristic	§cell_idÙ$a47474b0-f262-4453-a116-addc3a09119e´downstream_cells_map�¨q_offpol‘Ù$2ed0d4bb-bb6e-4adf-ad7c-8ddeb8c20b84²upstream_cells_map„²monte_carlo_pred_Q‘Ù$e67d9deb-a074-48ba-84db-2e6938ea01f8­blackjack_mdp‘Ù$6d765229-2816-4abb-a868-6be919a96530±Ï€_rand_blackjack‘Ù$70d9d39f-020d-4f25-810c-82a143a3335b­Ï€_blackjack1‘Ù$7fb4244c-828a-49d6-a15b-178fa3a42e00Ù$acb270a1-e2b9-46bc-9a52-9f66f1cca17c„´precedence_heuristic	§cell_idÙ$acb270a1-e2b9-46bc-9a52-9f66f1cca17c´downstream_cells_map�¦mcÏµs1’Ù$1d6eccf0-2731-47fc-9a41-ea8649e290efÙ$648bfc3f-0649-4401-a97f-89e21057f7b7²upstream_cells_map�§@md_str�¤Core�¡:�§PlutoUI‘Ù$77cf7fee-0ad8-4d22-b376-75833307db93¨Base.get�¥@bind�¤Base�«PlutoRunner�¨CheckBox�·PlutoRunner.create_bond�«NumberField�§confirm�¯Core.applicable�¯PlutoUI.combine�¨getindex�Ù$334b4d77-8784-46be-b9e8-80c0a2244694„´precedence_heuristic	§cell_idÙ$334b4d77-8784-46be-b9e8-80c0a2244694´downstream_cells_map�²monte_carlo_Ïµsoft“Ù$bf19e6cf-1fb5-49c9-974e-1613d90ef4cfÙ$1d6eccf0-2731-47fc-9a41-ea8649e290efÙ$cde7be85-9344-4526-bcb2-c2c8b3322435²upstream_cells_mapÞ ¤zero�¡:�¡>�¥zeros�¦isless�¤Bool�§Integer�¤copy�¤Real�­sample_action‘Ù$a85e7dd3-ea5e-4c77-a18e-f1e190658ae3¡<�¥Int64�¡-�³make_Ïµsoft_policy!‘Ù$abdcbbad-747a-41ba-a95d-82404e735793¦length�¡/�¦Matrix�¡+�³make_greedy_policy!‘Ù$2d10281a-a4af-4ea8-b63b-e11f2d0893edªMDP_Opaque‘Ù$21d248f5-edad-4614-8c1c-ae330f9e5a18¡*�Ù$e5384dd0-fad1-4a24-b011-73b062fcfb1b„´precedence_heuristic	§cell_idÙ$e5384dd0-fad1-4a24-b011-73b062fcfb1b´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$35914757-6af1-4056-bba4-a9996f65f7f7„´precedence_heuristic	§cell_idÙ$35914757-6af1-4056-bba4-a9996f65f7f7´downstream_cells_map€²upstream_cells_map„²monte_carlo_pred_Q‘Ù$e67d9deb-a074-48ba-84db-2e6938ea01f8­onestate_Ï€_b‘Ù$82a1f11e-b1b3-4c7d-ab9d-9f6136ae8195¬onestate_mdp‘Ù$f071b7e2-3f78-4132-8b84-f810f178c89d²onestate_Ï€_target‘Ù$61eb74eb-88e0-42e6-a14b-3730a800694dÙ$cde7be85-9344-4526-bcb2-c2c8b3322435„´precedence_heuristic	§cell_idÙ$cde7be85-9344-4526-bcb2-c2c8b3322435´downstream_cells_map‚²Ï€star3_racetrack2’Ù$6f914006-1d8d-41f5-ae8a-fbe0b336946cÙ$821ce23a-524b-4203-96d6-4d5b454fe1fd±Qstar3_racetrack2�²upstream_cells_map„ªtrack2_mdp‘Ù$e7de31e8-ae95-4616-86a9-a115a5e24330¦mcÏµs2‘Ù$1117e6c3-2736-46a4-bac2-d3c99c1998b6§Float32�²monte_carlo_Ïµsoft’Ù$334b4d77-8784-46be-b9e8-80c0a2244694Ù$54f73eb8-dcea-4da0-83af-35720e56ccbcÙ$881ba6c3-0e6a-4bb8-bc14-2e0face560f2„´precedence_heuristic	§cell_idÙ$881ba6c3-0e6a-4bb8-bc14-2e0face560f2´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$5c57e4b7-51d6-492d-9fc9-bcdab1dd46f4„´precedence_heuristic	§cell_idÙ$5c57e4b7-51d6-492d-9fc9-bcdab1dd46f4´downstream_cells_map�µplot_blackjack_policy‘Ù$627d5aa3-974f-4949-8b65-9500eba1d7cc²upstream_cells_mapŠ­blackjack_mdp‘Ù$6d765229-2816-4abb-a868-6be919a96530¡:�¡-�¯blackjackstates‘Ù$e87932d9-fbc0-4ea5-a8ee-28eac5eed84f¤plot�§heatmap�¤attr�¥zeros�§Float64�¦Layout�Ù$e0d3d7d1-203f-42fa-8570-8d1d88bf17c2„´precedence_heuristic	§cell_idÙ$e0d3d7d1-203f-42fa-8570-8d1d88bf17c2´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$760c5361-02d4-46b7-a05c-fc2d10d93de6„´precedence_heuristic	§cell_idÙ$760c5361-02d4-46b7-a05c-fc2d10d93de6´downstream_cells_map�²monte_carlo_pred_V•Ù$94be5289-bba7-4490-bdcd-0d217a31c665Ù$892b5d8e-ac51-48f1-8288-65e9f68acd2dÙ$43f9b824-fd56-4d56-84c3-23e2a3a37178Ù$00cd2194-af13-415a-b725-bb34832e5d9aÙ$5948f670-1203-4b75-8517-f8470f5d01aa²upstream_cells_mapÞ ¤zero�¡:�¥zeros�¤ones�§Integer�§nothing�¦Vector�­sample_action‘Ù$a85e7dd3-ea5e-4c77-a18e-f1e190658ae3¦length�¡-�¡/�¦Matrix�¡+�¬check_policy‘Ù$11723075-d1db-4512-abf2-3fe494a71a3bªMDP_Opaque‘Ù$21d248f5-edad-4614-8c1c-ae330f9e5a18¢==�¡*�­AbstractFloat�Ù$d55860d1-e4c1-4a79-adbe-b40a6d6283a7„´precedence_heuristic	§cell_idÙ$d55860d1-e4c1-4a79-adbe-b40a6d6283a7´downstream_cells_map�½initialize_state_action_value“Ù$1b78b25d-3942-4a6b-a2bd-7d97242da9feÙ$54f73eb8-dcea-4da0-83af-35720e56ccbcÙ$924f4e74-e3a0-42eb-89da-1f9836275588²upstream_cells_map…¦length�¤ones�¡*�ªMDP_Opaque‘Ù$21d248f5-edad-4614-8c1c-ae330f9e5a18­AbstractFloat�Ù$06297d75-121a-4178-b45b-83e167efd90d„´precedence_heuristic	§cell_idÙ$06297d75-121a-4178-b45b-83e167efd90d´downstream_cells_map�©joinlines‘Ù$e370dbb3-3bd9-4dc8-b8ca-8aad8711905c²upstream_cells_map€Ù$abe70666-39f8-4f1d-a285-a3a99f696d10„´precedence_heuristic	§cell_idÙ$abe70666-39f8-4f1d-a285-a3a99f696d10´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$7ce6e28e-acd7-46d1-87d6-a25f4656d79d„´precedence_heuristic	§cell_idÙ$7ce6e28e-acd7-46d1-87d6-a25f4656d79d´downstream_cells_map�¦run2_1‘Ù$3d10f89f-876e-4d25-b8d6-34ce5c99eb8c²upstream_cells_mapˆ¤Core�¤Base�·PlutoRunner.create_bond�«PlutoRunner�¯Core.applicable�¥@bind�¨Base.get�¦Button�Ù$a85e7dd3-ea5e-4c77-a18e-f1e190658ae3„´precedence_heuristic	§cell_idÙ$a85e7dd3-ea5e-4c77-a18e-f1e190658ae3´downstream_cells_map�­sample_actionšÙ$760c5361-02d4-46b7-a05c-fc2d10d93de6Ù$e87932d9-fbc0-4ea5-a8ee-28eac5eed84fÙ$334b4d77-8784-46be-b9e8-80c0a2244694Ù$d11bfcf9-b964-4c67-afdc-53d81f051fd5Ù$acb08e38-fc87-43f4-ac2d-6c6bf0f2e9e6Ù$f071b7e2-3f78-4132-8b84-f810f178c89dÙ$e67d9deb-a074-48ba-84db-2e6938ea01f8Ù$924f4e74-e3a0-42eb-89da-1f9836275588Ù$a0d61852-9942-42de-b554-572c4526a3a8Ù$d6e7cc6d-f397-4bdf-974e-9a16922393dd²upstream_cells_map‡¡:�§weights�¦Matrix�¤size�¦sample�§Integer�­AbstractFloat�Ù$68f9e0d9-5c9d-4e89-b5ae-f24fd7544a09„´precedence_heuristic	§cell_idÙ$68f9e0d9-5c9d-4e89-b5ae-f24fd7544a09´downstream_cells_map‚±Qstar2_racetrack1�²Ï€star2_racetrack1’Ù$3d10f89f-876e-4d25-b8d6-34ce5c99eb8cÙ$0609ad22-0adc-4e4f-afed-b7a46d216576²upstream_cells_mapƒªtrack1_mdp‘Ù$9df79a71-e58a-497b-bb02-debb69144925¥mces1‘Ù$989ccacd-b410-4967-bf6a-9244e3be785d®monte_carlo_ES’Ù$13cc524c-d983-44f4-8731-0595249fb888Ù$1b78b25d-3942-4a6b-a2bd-7d97242da9feÙ$ec29865f-3ba3-4bb3-84df-c2b472e03ff2„´precedence_heuristic	§cell_idÙ$ec29865f-3ba3-4bb3-84df-c2b472e03ff2´downstream_cells_map‚¯Qstar_blackjack‘Ù$f9bc84ff-c2f9-4ac2-b2ce-34dfcf837a73°Ï€star_blackjack‘Ù$f9bc84ff-c2f9-4ac2-b2ce-34dfcf837a73²upstream_cells_mapƒ­blackjack_mdp‘Ù$6d765229-2816-4abb-a868-6be919a96530®monte_carlo_ES’Ù$13cc524c-d983-44f4-8731-0595249fb888Ù$1b78b25d-3942-4a6b-a2bd-7d97242da9fe­Ï€_blackjack1‘Ù$7fb4244c-828a-49d6-a15b-178fa3a42e00Ù$1d6eccf0-2731-47fc-9a41-ea8649e290ef„´precedence_heuristic	§cell_idÙ$1d6eccf0-2731-47fc-9a41-ea8649e290ef´downstream_cells_map‚±Qstar3_racetrack1�²Ï€star3_racetrack1’Ù$b7dfc031-6bf6-44cd-b814-05f693a0a27dÙ$985f0537-2bbe-4dbb-a113-8ac98d2e0a5f²upstream_cells_map„ªtrack1_mdp‘Ù$9df79a71-e58a-497b-bb02-debb69144925§Float32�²monte_carlo_Ïµsoft’Ù$334b4d77-8784-46be-b9e8-80c0a2244694Ù$54f73eb8-dcea-4da0-83af-35720e56ccbc¦mcÏµs1‘Ù$acb270a1-e2b9-46bc-9a52-9f66f1cca17cÙ$9ca72278-fff6-4b0f-b72c-e0d3768aff73„´precedence_heuristic	§cell_idÙ$9ca72278-fff6-4b0f-b72c-e0d3768aff73´downstream_cells_map€²upstream_cells_map�©figure5_3‘Ù$00cd2194-af13-415a-b725-bb34832e5d9aÙ$020131a1-c68b-403a-9c5e-944edb6220e9„´precedence_heuristic	§cell_idÙ$020131a1-c68b-403a-9c5e-944edb6220e9´downstream_cells_map�«updatevalue’Ù$1e6f7e5e-c5ce-479c-abbb-6c388c254626Ù$61d8cfc6-a50c-4546-9e1f-dc73d4764bb9²upstream_cells_map…¡-�¡/�¡*�¨Weighted‘Ù$660ef59c-205c-44c2-9c46-5a74e09497ab¤Real�Ù$c23475f0-c5f0-49ce-a665-f93c8bda0474„´precedence_heuristic	§cell_idÙ$c23475f0-c5f0-49ce-a665-f93c8bda0474´downstream_cells_map�²make_blackjack_mdp‘Ù$6d765229-2816-4abb-a868-6be919a96530²upstream_cells_mapÞ ±blackjack_actions‘Ù$e87932d9-fbc0-4ea5-a8ee-28eac5eed84f¤deal‘Ù$e87932d9-fbc0-4ea5-a8ee-28eac5eed84f¡>�¡!�¦isless�ªdealer_sim‘Ù$e87932d9-fbc0-4ea5-a8ee-28eac5eed84f¦length�¡<�§Float32�¦Matrix�¢==�®BlackjackState‘Ù$e87932d9-fbc0-4ea5-a8ee-28eac5eed84f¡:�©playersim‘Ù$e87932d9-fbc0-4ea5-a8ee-28eac5eed84f¯blackjackstates‘Ù$e87932d9-fbc0-4ea5-a8ee-28eac5eed84f¯BlackjackAction‘Ù$e87932d9-fbc0-4ea5-a8ee-28eac5eed84f©scoregame‘Ù$e87932d9-fbc0-4ea5-a8ee-28eac5eed84f¥zeros�¤rand�¬unique_cards‘Ù$e87932d9-fbc0-4ea5-a8ee-28eac5eed84f¥push!�¡-�¦addsum‘Ù$e87932d9-fbc0-4ea5-a8ee-28eac5eed84fªMDP_Opaque‘Ù$21d248f5-edad-4614-8c1c-ae330f9e5a18Ù$15925cc6-9605-4357-9c2a-cdfe54070989„´precedence_heuristic	§cell_idÙ$15925cc6-9605-4357-9c2a-cdfe54070989´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$be7c096c-cc8c-407b-8287-8fb2ee7150a7„´precedence_heuristic	§cell_idÙ$be7c096c-cc8c-407b-8287-8fb2ee7150a7´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$9618a093-cdb7-4589-a783-de8e9021b705„´precedence_heuristic	§cell_idÙ$9618a093-cdb7-4589-a783-de8e9021b705´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$fa49c253-e016-46a7-ba94-0e7448a7e0ae„´precedence_heuristic	§cell_idÙ$fa49c253-e016-46a7-ba94-0e7448a7e0ae´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$f41dd3e6-81bf-43e4-afc2-fc549b77f610„´precedence_heuristic	§cell_idÙ$f41dd3e6-81bf-43e4-afc2-fc549b77f610´downstream_cells_map‚²Ï€star2_racetrack2’Ù$4481fa33-1ff3-4778-8486-d4d8a15775cdÙ$aa647f3e-a4b2-4825-bb2a-1c2469d2c0eb±Qstar2_racetrack2�²upstream_cells_mapƒªtrack2_mdp‘Ù$e7de31e8-ae95-4616-86a9-a115a5e24330¥mces2‘Ù$059b1c0f-eb21-4a4a-8aed-64e9ac07b541®monte_carlo_ES’Ù$13cc524c-d983-44f4-8731-0595249fb888Ù$1b78b25d-3942-4a6b-a2bd-7d97242da9feÙ$6d765229-2816-4abb-a868-6be919a96530„´precedence_heuristic	§cell_idÙ$6d765229-2816-4abb-a868-6be919a96530´downstream_cells_map�­blackjack_mdpÜ Ù$94be5289-bba7-4490-bdcd-0d217a31c665Ù$5c57e4b7-51d6-492d-9fc9-bcdab1dd46f4Ù$ec29865f-3ba3-4bb3-84df-c2b472e03ff2Ù$bf19e6cf-1fb5-49c9-974e-1613d90ef4cfÙ$04752549-ffca-4e31-869e-714f835d3e85Ù$e293e184-5938-40b5-a04b-5306760a06aeÙ$70d9d39f-020d-4f25-810c-82a143a3335bÙ$892b5d8e-ac51-48f1-8288-65e9f68acd2dÙ$43f9b824-fd56-4d56-84c3-23e2a3a37178Ù$a59d9c84-d35f-4a9b-9fb6-13e30cdd7c3aÙ$217ecc59-d6e3-48fa-9d6d-700a3947b805Ù$19e42f50-5301-41b9-becb-2368c26b6236Ù$5b32bbc7-dc34-4fc3-bacc-92e55f26a98cÙ$b6eac49e-6742-4594-87a5-821437846b0dÙ$00cd2194-af13-415a-b725-bb34832e5d9aÙ$a47474b0-f262-4453-a116-addc3a09119eÙ$39da4cf9-5265-41bc-83d4-311e86675db7²upstream_cells_map�²make_blackjack_mdp‘Ù$c23475f0-c5f0-49ce-a665-f93c8bda0474Ù$e7de31e8-ae95-4616-86a9-a115a5e24330„´precedence_heuristic	§cell_idÙ$e7de31e8-ae95-4616-86a9-a115a5e24330´downstream_cells_map�ªtrack2_mdp™Ù$da66b3be-1fe2-4edb-9560-71ce7c0bed12Ù$66645f1a-b591-43e7-b931-8ed0cc7d6898Ù$11f8290f-f589-49ff-9602-99ccc4192884Ù$f41dd3e6-81bf-43e4-afc2-fc549b77f610Ù$4481fa33-1ff3-4778-8486-d4d8a15775cdÙ$aa647f3e-a4b2-4825-bb2a-1c2469d2c0ebÙ$cde7be85-9344-4526-bcb2-c2c8b3322435Ù$6f914006-1d8d-41f5-ae8a-fbe0b336946cÙ$821ce23a-524b-4203-96d6-4d5b454fe1fd²upstream_cells_map‚®make_track_mdp‘Ù$a0d61852-9942-42de-b554-572c4526a3a8¦track2‘Ù$f7616806-97ab-4b09-accc-4e047691f879Ù$fff54c56-5afe-4d89-9dc5-502d08c89de9„´precedence_heuristic	§cell_idÙ$fff54c56-5afe-4d89-9dc5-502d08c89de9´downstream_cells_map�¬make_col_set‘Ù$f7616806-97ab-4b09-accc-4e047691f879²upstream_cells_map‚¡:�£Set�Ù$9793b5c9-d4ec-492d-a72d-8737bb65c8a5„´precedence_heuristic	§cell_idÙ$9793b5c9-d4ec-492d-a72d-8737bb65c8a5´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$1117e6c3-2736-46a4-bac2-d3c99c1998b6„´precedence_heuristic	§cell_idÙ$1117e6c3-2736-46a4-bac2-d3c99c1998b6´downstream_cells_map�¦mcÏµs2’Ù$cde7be85-9344-4526-bcb2-c2c8b3322435Ù$8d7b9826-b52c-4d5a-8c63-e83a1229a0be²upstream_cells_map�§@md_str�¤Core�¡:�§PlutoUI‘Ù$77cf7fee-0ad8-4d22-b376-75833307db93¨Base.get�¥@bind�¤Base�«PlutoRunner�¨CheckBox�·PlutoRunner.create_bond�«NumberField�§confirm�¯Core.applicable�¯PlutoUI.combine�¨getindex�Ù$5948f670-1203-4b75-8517-f8470f5d01aa„´precedence_heuristic	§cell_idÙ$5948f670-1203-4b75-8517-f8470f5d01aa´downstream_cells_map�ªfigure_5_4‘Ù$830d6d61-7259-43e7-8d6d-09bc81818dd9²upstream_cells_mapÞ '§@md_str�¯Base.Threads.==�¯Base.Threads.<=�¦Layout�¤vcat�®Base.Threads.*�¦isless�­onestate_Ï€_b‘Ù$82a1f11e-b1b3-4c7d-ab9d-9f6136ae8195»Base.Threads.threadpoolsize�¨Weighted‘Ù$660ef59c-205c-44c2-9c46-5a74e09497ab®Base.Threads.-�¦Vector�®Base.Threads.+�§scatter�£min�®Base.Threads.>�¡^�§Float32�²Base.Threads.error�¯Base.Threads.!=�¨@threads�­Base.getindex�¡:�ºBase.Threads.threading_run�©mapreduce�²onestate_Ï€_target‘Ù$61eb74eb-88e0-42e6-a14b-3730a800694d³Base.Threads.divrem�¤Base�·Base.Threads.firstindex�²monte_carlo_pred_V’Ù$760c5361-02d4-46b7-a05c-fc2d10d93de6Ù$d11bfcf9-b964-4c67-afdc-53d81f051fd5¡-�¤plot�¤attr�¥undef�®Base.Threads.:�¬onestate_mdp‘Ù$f071b7e2-3f78-4132-8b84-f810f178c89d¡*�¥ccall�³Base.Threads.length�Ù$2ed88aa5-fc42-4a57-924d-e918805e2208„´precedence_heuristic	§cell_idÙ$2ed88aa5-fc42-4a57-924d-e918805e2208´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$c9bd778c-217a-4664-8cde-841beca10307„´precedence_heuristic	§cell_idÙ$c9bd778c-217a-4664-8cde-841beca10307´downstream_cells_map€²upstream_cells_map„·HypertextLiteral.Bypass�·HypertextLiteral.Result�°HypertextLiteral‘Ù$77cf7fee-0ad8-4d22-b376-75833307db93¤@htl�Ù$605b045d-fe5c-426b-9f55-b7dd1d037c50„´precedence_heuristic	§cell_idÙ$605b045d-fe5c-426b-9f55-b7dd1d037c50´downstream_cells_map€²upstream_cells_mapƒ§@md_str�¥mces1‘Ù$989ccacd-b410-4967-bf6a-9244e3be785d¨getindex�Ù$88335fca-fd87-487b-9de2-ea7c779b54cf„´precedence_heuristic	§cell_idÙ$88335fca-fd87-487b-9de2-ea7c779b54cf´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$fd91d00a-f94f-40ff-88a7-9d85f05acc96„´precedence_heuristic	§cell_idÙ$fd91d00a-f94f-40ff-88a7-9d85f05acc96´downstream_cells_map�¬make_row_set‘Ù$f7616806-97ab-4b09-accc-4e047691f879²upstream_cells_map‚¡:�£Set�Ù$a59d9c84-d35f-4a9b-9fb6-13e30cdd7c3a„´precedence_heuristic	§cell_idÙ$a59d9c84-d35f-4a9b-9fb6-13e30cdd7c3a´downstream_cells_map€²upstream_cells_mapˆ²monte_carlo_pred_Q‘Ù$e67d9deb-a074-48ba-84db-2e6938ea01f8­blackjack_mdp‘Ù$6d765229-2816-4abb-a868-6be919a96530¨Ordinary‘Ù$4197cc28-b24c-48cb-bd8d-ef998983ad77¢|>�±Ï€_rand_blackjack‘Ù$70d9d39f-020d-4f25-810c-82a143a3335b¤mean�µblackjack_stateindex1‘Ù$04752549-ffca-4e31-869e-714f835d3e85­Ï€_blackjack1‘Ù$7fb4244c-828a-49d6-a15b-178fa3a42e00Ù$df3c4a33-45f1-4cc2-8c06-d500a0eecc8f„´precedence_heuristic	§cell_idÙ$df3c4a33-45f1-4cc2-8c06-d500a0eecc8f´downstream_cells_map�¦track1˜Ù$9df79a71-e58a-497b-bb02-debb69144925Ù$5e2420fb-b2cc-49fc-91e3-3de80fba698bÙ$8bcaa31b-8caf-43da-83a0-47e0c04c2a30Ù$3955d71a-3105-445a-868d-66ba0b3dc515Ù$ba044e4f-e2a6-4f96-8756-5b24b1bb5ca2Ù$9524a3f5-fca3-4ce9-b04d-0cb6c0cd0c90Ù$3d10f89f-876e-4d25-b8d6-34ce5c99eb8cÙ$b7dfc031-6bf6-44cd-b814-05f693a0a27d²upstream_cells_mapƒ¡:�¥union�£Set�Ù$e2fc1d47-2ee9-4844-a6b1-16f76531da86„´precedence_heuristic	§cell_idÙ$e2fc1d47-2ee9-4844-a6b1-16f76531da86´downstream_cells_map�¦run3_2‘Ù$6f914006-1d8d-41f5-ae8a-fbe0b336946c²upstream_cells_mapˆ¤Core�¤Base�·PlutoRunner.create_bond�«PlutoRunner�¯Core.applicable�¥@bind�¨Base.get�¦Button�Ù$2d36ebe3-1a86-4cad-a235-baec726da926„´precedence_heuristic	§cell_idÙ$2d36ebe3-1a86-4cad-a235-baec726da926´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$dfc2d648-ec08-49cd-a55f-72a766cad728„´precedence_heuristic	§cell_idÙ$dfc2d648-ec08-49cd-a55f-72a766cad728´downstream_cells_map‚±Qstar1_racetrack1�²Ï€star1_racetrack1’Ù$9524a3f5-fca3-4ce9-b04d-0cb6c0cd0c90Ù$1067fcc4-cbc6-453c-a996-d420c498619a²upstream_cells_mapƒªtrack1_mdp‘Ù$9df79a71-e58a-497b-bb02-debb69144925¥opmc1‘Ù$846ccb44-a18b-4d87-bbf8-fc59eaf87708µoff_policy_MC_control‘Ù$924f4e74-e3a0-42eb-89da-1f9836275588Ù$7ee4e17e-c1a9-4df0-a014-114bebcb4f52„´precedence_heuristic	§cell_idÙ$7ee4e17e-c1a9-4df0-a014-114bebcb4f52´downstream_cells_map�®makegridsquare‘Ù$a307e780-996a-485f-af59-b44982dfceb4²upstream_cells_map‚¡-�¡+�Ù$2d10281a-a4af-4ea8-b63b-e11f2d0893ed„´precedence_heuristic	§cell_idÙ$2d10281a-a4af-4ea8-b63b-e11f2d0893ed´downstream_cells_map�³make_greedy_policy!”Ù$1d3d509c-b11b-4c57-b100-9bcf0489af2bÙ$13cc524c-d983-44f4-8731-0595249fb888Ù$334b4d77-8784-46be-b9e8-80c0a2244694Ù$924f4e74-e3a0-42eb-89da-1f9836275588²upstream_cells_mapŒ§extrema�£exp�£sum�®AbstractVector�£one�¤Real�¦length�¡-�¡/�¡*�¢==�£abs�Ù$e87932d9-fbc0-4ea5-a8ee-28eac5eed84f„´precedence_heuristic	§cell_idÙ$e87932d9-fbc0-4ea5-a8ee-28eac5eed84f´downstream_cells_mapÞ ®BlackjackState“Ù$e87932d9-fbc0-4ea5-a8ee-28eac5eed84fÙ$c23475f0-c5f0-49ce-a665-f93c8bda0474Ù$02dd1e77-2a7e-4123-94db-d17b31a8b15a±blackjack_actions‘Ù$c23475f0-c5f0-49ce-a665-f93c8bda0474©playersim‘Ù$c23475f0-c5f0-49ce-a665-f93c8bda0474¤deal‘Ù$c23475f0-c5f0-49ce-a665-f93c8bda0474¯BlackjackAction’Ù$e87932d9-fbc0-4ea5-a8ee-28eac5eed84fÙ$c23475f0-c5f0-49ce-a665-f93c8bda0474©scoregame‘Ù$c23475f0-c5f0-49ce-a665-f93c8bda0474¯blackjackstates”Ù$481ad435-cc80-4164-882d-8310b010ca91Ù$c23475f0-c5f0-49ce-a665-f93c8bda0474Ù$a35de859-4046-4f6d-9ea9-b523d21cee5dÙ$5c57e4b7-51d6-492d-9fc9-bcdab1dd46f4ªdealer_sim‘Ù$c23475f0-c5f0-49ce-a665-f93c8bda0474¥Stick‘Ù$e87932d9-fbc0-4ea5-a8ee-28eac5eed84f©addsumace�µblackjack_statelookup�¬unique_cards‘Ù$c23475f0-c5f0-49ce-a665-f93c8bda0474³Ï€_blackjack_random�¥cards�¦addsum‘Ù$c23475f0-c5f0-49ce-a665-f93c8bda0474£Hit‘Ù$e87932d9-fbc0-4ea5-a8ee-28eac5eed84f²upstream_cells_mapÞ ¡!�¡>�¦isless�¦Vector�¦length�­sample_action‘Ù$a85e7dd3-ea5e-4c77-a18e-f1e190658ae3¡<�§Float32�¡/�¦Matrix�¢==�®BlackjackState‘Ù$e87932d9-fbc0-4ea5-a8ee-28eac5eed84f¡:�¥Stick‘Ù$e87932d9-fbc0-4ea5-a8ee-28eac5eed84f¯BlackjackAction‘Ù$e87932d9-fbc0-4ea5-a8ee-28eac5eed84f§collect�¤ones�¤Bool�¤rand�ªmakelookup‘Ù$72e9721f-ee17-4557-b090-71728e6c22ce¥Int64�¥push!�¡-�¢>=�¡+�£Hit‘Ù$e87932d9-fbc0-4ea5-a8ee-28eac5eed84fÙ$1cc46e33-6885-4d6f-805e-9ff928f1cf23„´precedence_heuristic	§cell_idÙ$1cc46e33-6885-4d6f-805e-9ff928f1cf23´downstream_cells_map�¯racetrackspeeds’Ù$f9f6c182-62f8-4a5a-8b43-8716db468427Ù$f506e8ba-b073-4f59-91b4-3fe99822d2a4²upstream_cells_mapƒ¦unique�¤norm�´racetrack_velocities‘Ù$63814164-f305-49b3-ab51-675c822d7b18Ù$f79d97bb-341a-46ad-bdfc-d080af13e2df„´precedence_heuristic	§cell_idÙ$f79d97bb-341a-46ad-bdfc-d080af13e2df´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$6a11daf7-2859-41fa-9c3d-d1f3580dbb5f„´precedence_heuristic	§cell_idÙ$6a11daf7-2859-41fa-9c3d-d1f3580dbb5f´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$985f0537-2bbe-4dbb-a113-8ac98d2e0a5f„´precedence_heuristic	§cell_idÙ$985f0537-2bbe-4dbb-a113-8ac98d2e0a5f´downstream_cells_map€²upstream_cells_map„ªtrack1_mdp‘Ù$9df79a71-e58a-497b-bb02-debb69144925²Ï€star3_racetrack1‘Ù$1d6eccf0-2731-47fc-9a41-ea8649e290ef°sampleracepolicy‘Ù$8f38a3e9-1872-4ea6-9a03-87112af4bf07¶create_policy_function‘Ù$d6e7cc6d-f397-4bdf-974e-9a16922393ddÙ$217ecc59-d6e3-48fa-9d6d-700a3947b805„´precedence_heuristic	§cell_idÙ$217ecc59-d6e3-48fa-9d6d-700a3947b805´downstream_cells_map€²upstream_cells_mapŠ²monte_carlo_pred_Q‘Ù$e67d9deb-a074-48ba-84db-2e6938ea01f8­blackjack_mdp‘Ù$6d765229-2816-4abb-a868-6be919a96530¡:�£sum�¨Ordinary‘Ù$4197cc28-b24c-48cb-bd8d-ef998983ad77¢|>�±Ï€_rand_blackjack‘Ù$70d9d39f-020d-4f25-810c-82a143a3335b¤mean�µblackjack_stateindex1‘Ù$04752549-ffca-4e31-869e-714f835d3e85­Ï€_blackjack1‘Ù$7fb4244c-828a-49d6-a15b-178fa3a42e00Ù$a35de859-4046-4f6d-9ea9-b523d21cee5d„´precedence_heuristic	§cell_idÙ$a35de859-4046-4f6d-9ea9-b523d21cee5d´downstream_cells_map�¯make_value_grid’Ù$94be5289-bba7-4490-bdcd-0d217a31c665Ù$06960937-a87a-4015-bdeb-5d17aa41fe6b²upstream_cells_map…¡-�¯blackjackstates‘Ù$e87932d9-fbc0-4ea5-a8ee-28eac5eed84f§Float32�©enumerate�¥zeros�Ù$12c0cd0b-eb4f-45a0-836b-53b3c5cdafd9„´precedence_heuristic	§cell_idÙ$12c0cd0b-eb4f-45a0-836b-53b3c5cdafd9´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$aaa9647c-afb6-44d1-ae1e-a2e957064080„´precedence_heuristic	§cell_idÙ$aaa9647c-afb6-44d1-ae1e-a2e957064080´downstream_cells_map�«updatecount’Ù$1e6f7e5e-c5ce-479c-abbb-6c388c254626Ù$61d8cfc6-a50c-4546-9e1f-dc73d4764bb9²upstream_cells_mapƒ¨Ordinary‘Ù$4197cc28-b24c-48cb-bd8d-ef998983ad77£one�¤Real�Ù$b57462b6-8f9c-4553-9c05-134ff043b00d„´precedence_heuristic	§cell_idÙ$b57462b6-8f9c-4553-9c05-134ff043b00d´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�Ù$f506e8ba-b073-4f59-91b4-3fe99822d2a4„´precedence_heuristic	§cell_idÙ$f506e8ba-b073-4f59-91b4-3fe99822d2a4´downstream_cells_map�«scalelookup‘Ù$d2625507-4787-4b1c-9a91-108012e42cc7²upstream_cells_mapˆ¤Dict�¥Int64�¯racetrackspeeds‘Ù$1cc46e33-6885-4d6f-805e-9ff928f1cf23¡/�¡*�¨maxspeed‘Ù$f9f6c182-62f8-4a5a-8b43-8716db468427¢=>�¥round�Ù$bf19e6cf-1fb5-49c9-974e-1613d90ef4cf„´precedence_heuristic	§cell_idÙ$bf19e6cf-1fb5-49c9-974e-1613d90ef4cf´downstream_cells_map‚±Ï€star_blackjack2‘Ù$b040f245-b2d6-4ec6-aa7f-511c54aabd0d°Qstar_blackjack2‘Ù$b040f245-b2d6-4ec6-aa7f-511c54aabd0d²upstream_cells_map‚­blackjack_mdp‘Ù$6d765229-2816-4abb-a868-6be919a96530²monte_carlo_Ïµsoft’Ù$334b4d77-8784-46be-b9e8-80c0a2244694Ù$54f73eb8-dcea-4da0-83af-35720e56ccbcÙ$77cf7fee-0ad8-4d22-b376-75833307db93„´precedence_heuristic§cell_idÙ$77cf7fee-0ad8-4d22-b376-75833307db93´downstream_cells_mapˆªStatistics�©StatsBase�­LinearAlgebra�§PlutoUI’Ù$acb270a1-e2b9-46bc-9a52-9f66f1cca17cÙ$1117e6c3-2736-46a4-bac2-d3c99c1998b6°HypertextLiteral˜Ù$a68b4965-c392-47e5-9b29-93e7ada9990aÙ$2572e35c-e6a3-4562-aa0f-6a5ab32d39eaÙ$c9bd778c-217a-4664-8cde-841beca10307Ù$a307e780-996a-485f-af59-b44982dfceb4Ù$154edd83-350d-4acf-adfb-6a2d20599b53Ù$e370dbb3-3bd9-4dc8-b8ca-8aad8711905cÙ$8bcaa31b-8caf-43da-83a0-47e0c04c2a30Ù$ba044e4f-e2a6-4f96-8756-5b24b1bb5ca2§Threads�«PlutoPlotly�¬LaTeXStrings�²upstream_cells_map�¯TableOfContents�Ù$d11bfcf9-b964-4c67-afdc-53d81f051fd5„´precedence_heuristic	§cell_idÙ$d11bfcf9-b964-4c67-afdc-53d81f051fd5´downstream_cells_map�²monte_carlo_pred_V•Ù$94be5289-bba7-4490-bdcd-0d217a31c665Ù$892b5d8e-ac51-48f1-8288-65e9f68acd2dÙ$43f9b824-fd56-4d56-84c3-23e2a3a37178Ù$00cd2194-af13-415a-b725-bb34832e5d9aÙ$5948f670-1203-4b75-8517-f8470f5d01aa²upstream_cells_mapÞ ¤zero�§@assert�¦Vector�¦length�­sample_action‘Ù$a85e7dd3-ea5e-4c77-a18e-f1e190658ae3¥throw�¦Matrix�®AssertionError�¢!=�¢==�­AbstractFloat�¡:�¨Ordinary‘Ù$4197cc28-b24c-48cb-bd8d-ef998983ad77°ImportanceMethod‘Ù$d97f693d-27f2-49be-a549-07a290c95b53¥zeros�¤ones�¤Bool�¨updateV!‘Ù$1e6f7e5e-c5ce-479c-abbb-6c388c254626§Integer�£all�¡+�¬check_policy‘Ù$11723075-d1db-4512-abf2-3fe494a71a3b¡*�ªMDP_Opaque‘Ù$21d248f5-edad-4614-8c1c-ae330f9e5a18Ù$19e42f50-5301-41b9-becb-2368c26b6236„´precedence_heuristic	§cell_idÙ$19e42f50-5301-41b9-becb-2368c26b6236´downstream_cells_map€²upstream_cells_map‰²monte_carlo_pred_Q‘Ù$e67d9deb-a074-48ba-84db-2e6938ea01f8­blackjack_mdp‘Ù$6d765229-2816-4abb-a868-6be919a96530¡:�¨Ordinary‘Ù$4197cc28-b24c-48cb-bd8d-ef998983ad77¢|>�±Ï€_rand_blackjack‘Ù$70d9d39f-020d-4f25-810c-82a143a3335b¤mean�µblackjack_stateindex1‘Ù$04752549-ffca-4e31-869e-714f835d3e85­Ï€_blackjack1‘Ù$7fb4244c-828a-49d6-a15b-178fa3a42e00Ù$924f4e74-e3a0-42eb-89da-1f9836275588„´precedence_heuristic	§cell_idÙ$924f4e74-e3a0-42eb-89da-1f9836275588´downstream_cells_map�µoff_policy_MC_control“Ù$39da4cf9-5265-41bc-83d4-311e86675db7Ù$dfc2d648-ec08-49cd-a55f-72a766cad728Ù$da66b3be-1fe2-4edb-9560-71ce7c0bed12²upstream_cells_mapÞ ¤zero�¡:�¥zeros�£one�§Integer�¦length�­sample_action‘Ù$a85e7dd3-ea5e-4c77-a18e-f1e190658ae3²make_random_policy‘Ù$b2115f33-f8e2-452e-9b0e-90610f0f09b1´create_greedy_policy‘Ù$1d3d509c-b11b-4c57-b100-9bcf0489af2b¡-�¡/�¦Matrix�¡+�³make_greedy_policy!‘Ù$2d10281a-a4af-4ea8-b63b-e11f2d0893edªMDP_Opaque‘Ù$21d248f5-edad-4614-8c1c-ae330f9e5a18¢==�½initialize_state_action_value‘Ù$d55860d1-e4c1-4a79-adbe-b40a6d6283a7¡*�­AbstractFloat�Ù$6dc0de46-2164-4580-b186-a73cb5b5167d„´precedence_heuristic	§cell_idÙ$6dc0de46-2164-4580-b186-a73cb5b5167d´downstream_cells_map�¬project_path‘Ù$658ceeaa-1b45-47bd-a364-eaa1759d17ac²upstream_cells_mapˆ¡<�¡:�¦isless�¡+�¥clamp�¢==�¤rand�£Set�Ù$63814164-f305-49b3-ab51-675c822d7b18„´precedence_heuristic	§cell_idÙ$63814164-f305-49b3-ab51-675c822d7b18´downstream_cells_map�´racetrack_velocities“Ù$1cc46e33-6885-4d6f-805e-9ff928f1cf23Ù$a0d61852-9942-42de-b554-572c4526a3a8Ù$e370dbb3-3bd9-4dc8-b8ca-8aad8711905c²upstream_cells_map�¡:�Ù$4337b83f-b648-4b55-9d2a-4fffcf701111„´precedence_heuristic	§cell_idÙ$4337b83f-b648-4b55-9d2a-4fffcf701111´downstream_cells_map€²upstream_cells_mapƒ¤Base�®Base.Docs.HTML�©@html_str�Ù$1b78b25d-3942-4a6b-a2bd-7d97242da9fe„´precedence_heuristic	§cell_idÙ$1b78b25d-3942-4a6b-a2bd-7d97242da9fe´downstream_cells_map�®monte_carlo_ES“Ù$ec29865f-3ba3-4bb3-84df-c2b472e03ff2Ù$68f9e0d9-5c9d-4e89-b5ae-f24fd7544a09Ù$f41dd3e6-81bf-43e4-afc2-fc549b77f610²upstream_cells_map‡²make_random_policy‘Ù$b2115f33-f8e2-452e-9b0e-90610f0f09b1¤zero�¦Matrix�ªMDP_Opaque‘Ù$21d248f5-edad-4614-8c1c-ae330f9e5a18½initialize_state_action_value‘Ù$d55860d1-e4c1-4a79-adbe-b40a6d6283a7£one�¤Real�Ù$9524a3f5-fca3-4ce9-b04d-0cb6c0cd0c90„´precedence_heuristic	§cell_idÙ$9524a3f5-fca3-4ce9-b04d-0cb6c0cd0c90´downstream_cells_map€²upstream_cells_map†ªtrack1_mdp‘Ù$9df79a71-e58a-497b-bb02-debb69144925¦track1‘Ù$df3c4a33-45f1-4cc2-8c06-d500a0eecc8f¦run1_1‘Ù$833bb53c-bc2b-47fb-9429-d0f6d92efb42¨showrace‘Ù$154edd83-350d-4acf-adfb-6a2d20599b53²Ï€star1_racetrack1‘Ù$dfc2d648-ec08-49cd-a55f-72a766cad728¶create_policy_function‘Ù$d6e7cc6d-f397-4bdf-974e-9a16922393ddÙ$2ed0d4bb-bb6e-4adf-ad7c-8ddeb8c20b84„´precedence_heuristic	§cell_idÙ$2ed0d4bb-bb6e-4adf-ad7c-8ddeb8c20b84´downstream_cells_map€²upstream_cells_mapƒ¡:�¨q_offpol‘Ù$a47474b0-f262-4453-a116-addc3a09119eµblackjack_stateindex1‘Ù$04752549-ffca-4e31-869e-714f835d3e85Ù$a0d61852-9942-42de-b554-572c4526a3a8„´precedence_heuristic	§cell_idÙ$a0d61852-9942-42de-b554-572c4526a3a8´downstream_cells_map�®make_track_mdp’Ù$9df79a71-e58a-497b-bb02-debb69144925Ù$e7de31e8-ae95-4616-86a9-a115a5e24330²upstream_cells_map‰²race_track_episode‘Ù$658ceeaa-1b45-47bd-a364-eaa1759d17ac´racetrack_velocities‘Ù$63814164-f305-49b3-ab51-675c822d7b18­sample_action‘Ù$a85e7dd3-ea5e-4c77-a18e-f1e190658ae3£Inf�¥union�±racetrack_actions‘Ù$bb617e58-2700-4f0d-b8c8-3a266142fb70ªMDP_Opaque‘Ù$21d248f5-edad-4614-8c1c-ae330f9e5a18¤rand�ªmakelookup‘Ù$72e9721f-ee17-4557-b090-71728e6c22ceÙ$bb617e58-2700-4f0d-b8c8-3a266142fb70„´precedence_heuristic	§cell_idÙ$bb617e58-2700-4f0d-b8c8-3a266142fb70´downstream_cells_map�±racetrack_actions–Ù$a0d61852-9942-42de-b554-572c4526a3a8Ù$8f38a3e9-1872-4ea6-9a03-87112af4bf07Ù$e370dbb3-3bd9-4dc8-b8ca-8aad8711905cÙ$0dfd7afb-127c-4afd-8374-3c9a20a9ee76Ù$3955d71a-3105-445a-868d-66ba0b3dc515Ù$ff9276eb-2151-4a6f-8257-8348047a9f4e²upstream_cells_map�¡:�Ù$0d9c5d60-878a-45bb-8707-275cf10be41f„´precedence_heuristic	§cell_idÙ$0d9c5d60-878a-45bb-8707-275cf10be41f´downstream_cells_map�¦run2_2‘Ù$4481fa33-1ff3-4778-8486-d4d8a15775cd²upstream_cells_mapˆ¤Core�¤Base�·PlutoRunner.create_bond�«PlutoRunner�¯Core.applicable�¥@bind�¨Base.get�¦Button�Ù$b6eac49e-6742-4594-87a5-821437846b0d„´precedence_heuristic	§cell_idÙ$b6eac49e-6742-4594-87a5-821437846b0d´downstream_cells_map�¤test‘Ù$847a074c-1d23-4de3-a039-322aeb9f7613²upstream_cells_mapŽ²monte_carlo_pred_Q‘Ù$e67d9deb-a074-48ba-84db-2e6938ea01f8­blackjack_mdp‘Ù$6d765229-2816-4abb-a868-6be919a96530¡:�£sum�¨Ordinary‘Ù$4197cc28-b24c-48cb-bd8d-ef998983ad77¤mode�¢|>�µblackjack_stateindex1‘Ù$04752549-ffca-4e31-869e-714f835d3e85¦median�¡-�±Ï€_rand_blackjack‘Ù$70d9d39f-020d-4f25-810c-82a143a3335b¢==�¤mean�­Ï€_blackjack1‘Ù$7fb4244c-828a-49d6-a15b-178fa3a42e00Ù$61d8cfc6-a50c-4546-9e1f-dc73d4764bb9„´precedence_heuristic	§cell_idÙ$61d8cfc6-a50c-4546-9e1f-dc73d4764bb9´downstream_cells_map�¨updateQ!‘Ù$e67d9deb-a074-48ba-84db-2e6938ea01f8²upstream_cells_mapÞ ¤zero�°ImportanceMethod‘Ù$d97f693d-27f2-49be-a549-07a290c95b53£one�¨Weighted‘Ù$660ef59c-205c-44c2-9c46-5a74e09497ab¦Vector�¦length�£isa�¤Real�«updatecount’Ù$aaa9647c-afb6-44d1-ae1e-a2e957064080Ù$2646c9a2-46b1-4700-9290-ddc7dc9a59af¡-�«updatevalue’Ù$c8f3f7e3-be7e-4615-a667-d9f789928883Ù$020131a1-c68b-403a-9c5e-944edb6220e9¡/�¦Matrix�¡+�¡*�¢==�Ù$847a074c-1d23-4de3-a039-322aeb9f7613„´precedence_heuristic	§cell_idÙ$847a074c-1d23-4de3-a039-322aeb9f7613´downstream_cells_map€²upstream_cells_map�¤test‘Ù$b6eac49e-6742-4594-87a5-821437846b0dÙ$d2625507-4787-4b1c-9a91-108012e42cc7„´precedence_heuristic	§cell_idÙ$d2625507-4787-4b1c-9a91-108012e42cc7´downstream_cells_map�³make_rotation_style‘Ù$e370dbb3-3bd9-4dc8-b8ca-8aad8711905c²upstream_cells_map„¥atand�«scalelookup‘Ù$f506e8ba-b073-4f59-91b4-3fe99822d2a4¤norm�¢==�Ù$94be5289-bba7-4490-bdcd-0d217a31c665„´precedence_heuristic	§cell_idÙ$94be5289-bba7-4490-bdcd-0d217a31c665´downstream_cells_map�µeval_blackjack_policy‘Ù$a68b4965-c392-47e5-9b29-93e7ada9990a²upstream_cells_mapƒ²monte_carlo_pred_V’Ù$760c5361-02d4-46b7-a05c-fc2d10d93de6Ù$d11bfcf9-b964-4c67-afdc-53d81f051fd5­blackjack_mdp‘Ù$6d765229-2816-4abb-a868-6be919a96530¯make_value_grid‘Ù$a35de859-4046-4f6d-9ea9-b523d21cee5dÙ$f7616806-97ab-4b09-accc-4e047691f879„´precedence_heuristic	§cell_idÙ$f7616806-97ab-4b09-accc-4e047691f879´downstream_cells_map�¦track2šÙ$e7de31e8-ae95-4616-86a9-a115a5e24330Ù$8bcaa31b-8caf-43da-83a0-47e0c04c2a30Ù$ff9276eb-2151-4a6f-8257-8348047a9f4eÙ$ba044e4f-e2a6-4f96-8756-5b24b1bb5ca2Ù$66645f1a-b591-43e7-b931-8ed0cc7d6898Ù$11f8290f-f589-49ff-9602-99ccc4192884Ù$4481fa33-1ff3-4778-8486-d4d8a15775cdÙ$aa647f3e-a4b2-4825-bb2a-1c2469d2c0ebÙ$6f914006-1d8d-41f5-ae8a-fbe0b336946cÙ$821ce23a-524b-4203-96d6-4d5b454fe1fd²upstream_cells_map…¡:�¬make_col_set‘Ù$fff54c56-5afe-4d89-9dc5-502d08c89de9£zip�¥union�¬make_row_set‘Ù$fd91d00a-f94f-40ff-88a7-9d85f05acc96Ù$70d9d39f-020d-4f25-810c-82a143a3335b„´precedence_heuristic	§cell_idÙ$70d9d39f-020d-4f25-810c-82a143a3335b´downstream_cells_map�±Ï€_rand_blackjackšÙ$8faca500-b80d-4b50-88b6-683d18a1286bÙ$892b5d8e-ac51-48f1-8288-65e9f68acd2dÙ$43f9b824-fd56-4d56-84c3-23e2a3a37178Ù$a59d9c84-d35f-4a9b-9fb6-13e30cdd7c3aÙ$217ecc59-d6e3-48fa-9d6d-700a3947b805Ù$19e42f50-5301-41b9-becb-2368c26b6236Ù$5b32bbc7-dc34-4fc3-bacc-92e55f26a98cÙ$b6eac49e-6742-4594-87a5-821437846b0dÙ$00cd2194-af13-415a-b725-bb34832e5d9aÙ$a47474b0-f262-4453-a116-addc3a09119e²upstream_cells_map‚²make_random_policy‘Ù$b2115f33-f8e2-452e-9b0e-90610f0f09b1­blackjack_mdp‘Ù$6d765229-2816-4abb-a868-6be919a96530Ù$780f2fd9-49c3-48bc-b790-dde5be1dc81b„´precedence_heuristic	§cell_idÙ$780f2fd9-49c3-48bc-b790-dde5be1dc81b´downstream_cells_map€²upstream_cells_map�ªtrack1_mdp‘Ù$9df79a71-e58a-497b-bb02-debb69144925Ù$833bb53c-bc2b-47fb-9429-d0f6d92efb42„´precedence_heuristic	§cell_idÙ$833bb53c-bc2b-47fb-9429-d0f6d92efb42´downstream_cells_map�¦run1_1‘Ù$9524a3f5-fca3-4ce9-b04d-0cb6c0cd0c90²upstream_cells_mapˆ¤Core�¤Base�·PlutoRunner.create_bond�«PlutoRunner�¯Core.applicable�¥@bind�¨Base.get�¦Button�Ù$e370dbb3-3bd9-4dc8-b8ca-8aad8711905c„´precedence_heuristic	§cell_idÙ$e370dbb3-3bd9-4dc8-b8ca-8aad8711905c´downstream_cells_map€²upstream_cells_map‹³make_rotation_style‘Ù$d2625507-4787-4b1c-9a91-108012e42cc7·HypertextLiteral.Bypass�©mapreduce�±racetrack_actions‘Ù$bb617e58-2700-4f0d-b8c8-3a266142fb70±make_action_style‘Ù$ba8a5804-4be3-43fe-95d7-c957ce02a1d4¤@htl�·HypertextLiteral.Result�°HypertextLiteral‘Ù$77cf7fee-0ad8-4d22-b376-75833307db93©joinlines‘Ù$06297d75-121a-4178-b45b-83e167efd90d¹HypertextLiteral.StyleTag�´racetrack_velocities‘Ù$63814164-f305-49b3-ab51-675c822d7b18Ù$2646c9a2-46b1-4700-9290-ddc7dc9a59af„´precedence_heuristic	§cell_idÙ$2646c9a2-46b1-4700-9290-ddc7dc9a59af´downstream_cells_map�«updatecount’Ù$1e6f7e5e-c5ce-479c-abbb-6c388c254626Ù$61d8cfc6-a50c-4546-9e1f-dc73d4764bb9²upstream_cells_map�¨Weighted‘Ù$660ef59c-205c-44c2-9c46-5a74e09497abÙ$892b5d8e-ac51-48f1-8288-65e9f68acd2d„´precedence_heuristic	§cell_idÙ$892b5d8e-ac51-48f1-8288-65e9f68acd2d´downstream_cells_map€²upstream_cells_map�­blackjack_mdp‘Ù$6d765229-2816-4abb-a868-6be919a96530¡:�£sum�¨Ordinary‘Ù$4197cc28-b24c-48cb-bd8d-ef998983ad77¢|>�µblackjack_stateindex1‘Ù$04752549-ffca-4e31-869e-714f835d3e85²monte_carlo_pred_V’Ù$760c5361-02d4-46b7-a05c-fc2d10d93de6Ù$d11bfcf9-b964-4c67-afdc-53d81f051fd5¡/�¥count�±Ï€_rand_blackjack‘Ù$70d9d39f-020d-4f25-810c-82a143a3335b¢==�¤mean�­Ï€_blackjack1‘Ù$7fb4244c-828a-49d6-a15b-178fa3a42e00Ù$acb08e38-fc87-43f4-ac2d-6c6bf0f2e9e6„´precedence_heuristic	§cell_idÙ$acb08e38-fc87-43f4-ac2d-6c6bf0f2e9e6´downstream_cells_map�²estimate_mdp_state‘Ù$e293e184-5938-40b5-a04b-5306760a06ae²upstream_cells_map†­sample_action‘Ù$a85e7dd3-ea5e-4c77-a18e-f1e190658ae3¡:�¦Matrix�¥zeros�¤last�­AbstractFloat�Ù$fca388bd-eb8b-41e2-8da0-87b9386629c1„´precedence_heuristic	§cell_idÙ$fca388bd-eb8b-41e2-8da0-87b9386629c1´downstream_cells_map€²upstream_cells_map‚§@md_str�¨getindex�´cell_execution_orderÜ ÄÙ$77cf7fee-0ad8-4d22-b376-75833307db93Ù$826139cc-b52e-11ec-0d47-25ab689851fdÙ$a85e7dd3-ea5e-4c77-a18e-f1e190658ae3Ù$72e9721f-ee17-4557-b090-71728e6c22ceÙ$21d248f5-edad-4614-8c1c-ae330f9e5a18Ù$b2115f33-f8e2-452e-9b0e-90610f0f09b1Ù$202eb066-877d-4537-85b2-31b41db8eca0Ù$d55860d1-e4c1-4a79-adbe-b40a6d6283a7Ù$11723075-d1db-4512-abf2-3fe494a71a3bÙ$760c5361-02d4-46b7-a05c-fc2d10d93de6Ù$6a11daf7-2859-41fa-9c3d-d1f3580dbb5fÙ$e87932d9-fbc0-4ea5-a8ee-28eac5eed84fÙ$481ad435-cc80-4164-882d-8310b010ca91Ù$7fb4244c-828a-49d6-a15b-178fa3a42e00Ù$c23475f0-c5f0-49ce-a665-f93c8bda0474Ù$6d765229-2816-4abb-a868-6be919a96530Ù$a35de859-4046-4f6d-9ea9-b523d21cee5dÙ$01683e11-a368-45bc-abbc-bbd5c94d7b22Ù$d766d44e-3684-497c-814e-8f71740cb232Ù$e5384dd0-fad1-4a24-b011-73b062fcfb1bÙ$30809344-b4ab-468b-b4b7-5ef3dca5ffc7Ù$f406be9e-3e3f-4b55-99b0-4858c774ed96Ù$be7c096c-cc8c-407b-8287-8fb2ee7150a7Ù$2572e35c-e6a3-4562-aa0f-6a5ab32d39eaÙ$47daf83b-8fe9-4491-b9ae-84bd269d5546Ù$2d10281a-a4af-4ea8-b63b-e11f2d0893edÙ$1d3d509c-b11b-4c57-b100-9bcf0489af2bÙ$13cc524c-d983-44f4-8731-0595249fb888Ù$1b78b25d-3942-4a6b-a2bd-7d97242da9feÙ$9618a093-cdb7-4589-a783-de8e9021b705Ù$5c57e4b7-51d6-492d-9fc9-bcdab1dd46f4Ù$06960937-a87a-4015-bdeb-5d17aa41fe6bÙ$627d5aa3-974f-4949-8b65-9500eba1d7ccÙ$ec29865f-3ba3-4bb3-84df-c2b472e03ff2Ù$9fe42679-dce3-4ee3-b565-eed4ff7d8e4dÙ$f9bc84ff-c2f9-4ac2-b2ce-34dfcf837a73Ù$c883748c-76b9-4086-8698-b40df51390daÙ$e2a720b0-a8c4-43a2-bf34-750ff3323004Ù$abdcbbad-747a-41ba-a95d-82404e735793Ù$334b4d77-8784-46be-b9e8-80c0a2244694Ù$54f73eb8-dcea-4da0-83af-35720e56ccbcÙ$bf19e6cf-1fb5-49c9-974e-1613d90ef4cfÙ$3ee31af5-b19c-49dc-8fbf-f07e93d1f0c5Ù$b040f245-b2d6-4ec6-aa7f-511c54aabd0dÙ$12c0cd0b-eb4f-45a0-836b-53b3c5cdafd9Ù$9793b5c9-d4ec-492d-a72d-8737bb65c8a5Ù$15925cc6-9605-4357-9c2a-cdfe54070989Ù$d97f693d-27f2-49be-a549-07a290c95b53Ù$660ef59c-205c-44c2-9c46-5a74e09497abÙ$4197cc28-b24c-48cb-bd8d-ef998983ad77Ù$aaa9647c-afb6-44d1-ae1e-a2e957064080Ù$2646c9a2-46b1-4700-9290-ddc7dc9a59afÙ$c8f3f7e3-be7e-4615-a667-d9f789928883Ù$020131a1-c68b-403a-9c5e-944edb6220e9Ù$1e6f7e5e-c5ce-479c-abbb-6c388c254626Ù$d11bfcf9-b964-4c67-afdc-53d81f051fd5Ù$94be5289-bba7-4490-bdcd-0d217a31c665Ù$a68b4965-c392-47e5-9b29-93e7ada9990aÙ$82284c63-2306-4469-9b1a-a5ec87037e79Ù$cede8090-5b1a-436b-a184-fca5c4d3de48Ù$c9bd778c-217a-4664-8cde-841beca10307Ù$b39d1ea0-86a2-4215-ae73-e4492f3f2f00Ù$02dd1e77-2a7e-4123-94db-d17b31a8b15aÙ$04752549-ffca-4e31-869e-714f835d3e85Ù$acb08e38-fc87-43f4-ac2d-6c6bf0f2e9e6Ù$e293e184-5938-40b5-a04b-5306760a06aeÙ$d16ac2a8-1a5a-4ded-9285-d2c6cd550066Ù$70d9d39f-020d-4f25-810c-82a143a3335bÙ$8faca500-b80d-4b50-88b6-683d18a1286bÙ$892b5d8e-ac51-48f1-8288-65e9f68acd2dÙ$43f9b824-fd56-4d56-84c3-23e2a3a37178Ù$00cd2194-af13-415a-b725-bb34832e5d9aÙ$9ca72278-fff6-4b0f-b72c-e0d3768aff73Ù$e10378eb-12b3-4468-9c22-1838107da450Ù$f071b7e2-3f78-4132-8b84-f810f178c89dÙ$61eb74eb-88e0-42e6-a14b-3730a800694dÙ$82a1f11e-b1b3-4c7d-ab9d-9f6136ae8195Ù$5948f670-1203-4b75-8517-f8470f5d01aaÙ$830d6d61-7259-43e7-8d6d-09bc81818dd9Ù$881ba6c3-0e6a-4bb8-bc14-2e0face560f2Ù$6979db32-670d-466a-9a6e-97c2d8527f3dÙ$bf33230e-342b-4486-89ac-9667438de503Ù$09b67730-39e7-4209-8117-6bc3adfb342aÙ$fca388bd-eb8b-41e2-8da0-87b9386629c1Ù$b57462b6-8f9c-4553-9c05-134ff043b00dÙ$fa49c253-e016-46a7-ba94-0e7448a7e0aeÙ$6496c993-6d47-4a6e-a497-2a2de172fbc3Ù$61d8cfc6-a50c-4546-9e1f-dc73d4764bb9Ù$e67d9deb-a074-48ba-84db-2e6938ea01f8Ù$a59d9c84-d35f-4a9b-9fb6-13e30cdd7c3aÙ$217ecc59-d6e3-48fa-9d6d-700a3947b805Ù$19e42f50-5301-41b9-becb-2368c26b6236Ù$5b32bbc7-dc34-4fc3-bacc-92e55f26a98cÙ$b6eac49e-6742-4594-87a5-821437846b0dÙ$847a074c-1d23-4de3-a039-322aeb9f7613Ù$a47474b0-f262-4453-a116-addc3a09119eÙ$2ed0d4bb-bb6e-4adf-ad7c-8ddeb8c20b84Ù$35914757-6af1-4056-bba4-a9996f65f7f7Ù$5e012ead-b4f9-45a9-979d-88b0b1086263Ù$7c9486cd-1916-4e13-b415-fb113bd9e04bÙ$924f4e74-e3a0-42eb-89da-1f9836275588Ù$39da4cf9-5265-41bc-83d4-311e86675db7Ù$0bd705cb-ad38-4cbb-b8fc-7e0617635282Ù$418c045d-90c7-42d8-9126-90185f7e197bÙ$ab10ccd7-75ba-475c-af26-f8b36daaf880Ù$cebb79b7-c9d6-4b79-ba0e-b2f3c7587724Ù$67e535c7-437a-49ba-b5ab-9dfe63fe4aaaÙ$63814164-f305-49b3-ab51-675c822d7b18Ù$1cc46e33-6885-4d6f-805e-9ff928f1cf23Ù$f9f6c182-62f8-4a5a-8b43-8716db468427Ù$f506e8ba-b073-4f59-91b4-3fe99822d2a4Ù$bb617e58-2700-4f0d-b8c8-3a266142fb70Ù$6dc0de46-2164-4580-b186-a73cb5b5167dÙ$fd91d00a-f94f-40ff-88a7-9d85f05acc96Ù$fff54c56-5afe-4d89-9dc5-502d08c89de9Ù$658ceeaa-1b45-47bd-a364-eaa1759d17acÙ$df3c4a33-45f1-4cc2-8c06-d500a0eecc8fÙ$f7616806-97ab-4b09-accc-4e047691f879Ù$a0d61852-9942-42de-b554-572c4526a3a8Ù$9df79a71-e58a-497b-bb02-debb69144925Ù$e7de31e8-ae95-4616-86a9-a115a5e24330Ù$5e2420fb-b2cc-49fc-91e3-3de80fba698bÙ$d6e7cc6d-f397-4bdf-974e-9a16922393ddÙ$8f38a3e9-1872-4ea6-9a03-87112af4bf07Ù$a0eb6939-11bb-458d-bee3-9ed763819f62Ù$7ee4e17e-c1a9-4df0-a014-114bebcb4f52Ù$c8be6951-b6ec-4444-8c7f-ca5db6681571Ù$a307e780-996a-485f-af59-b44982dfceb4Ù$154edd83-350d-4acf-adfb-6a2d20599b53Ù$d2625507-4787-4b1c-9a91-108012e42cc7Ù$ba8a5804-4be3-43fe-95d7-c957ce02a1d4Ù$06297d75-121a-4178-b45b-83e167efd90dÙ$e370dbb3-3bd9-4dc8-b8ca-8aad8711905cÙ$cd928f87-2832-4595-8ce5-79b69cc56bd9Ù$8bcaa31b-8caf-43da-83a0-47e0c04c2a30Ù$1aaf3827-5851-4156-a7e6-14f5e4d00238Ù$0dfd7afb-127c-4afd-8374-3c9a20a9ee76Ù$3955d71a-3105-445a-868d-66ba0b3dc515Ù$ff9276eb-2151-4a6f-8257-8348047a9f4eÙ$2d36ebe3-1a86-4cad-a235-baec726da926Ù$ba044e4f-e2a6-4f96-8756-5b24b1bb5ca2Ù$6a96304b-add3-4135-8ccf-46cc23859d53Ù$b352d98e-0854-45e3-ac73-8ef434525563Ù$846ccb44-a18b-4d87-bbf8-fc59eaf87708Ù$dfc2d648-ec08-49cd-a55f-72a766cad728Ù$833bb53c-bc2b-47fb-9429-d0f6d92efb42Ù$887de995-04e8-4d84-88d7-ad096a5747dfÙ$9524a3f5-fca3-4ce9-b04d-0cb6c0cd0c90Ù$1067fcc4-cbc6-453c-a996-d420c498619aÙ$e0d3d7d1-203f-42fa-8570-8d1d88bf17c2Ù$8668ffc3-6c8c-4c25-8d47-9977bef929d2Ù$da66b3be-1fe2-4edb-9560-71ce7c0bed12Ù$7cdf4142-82fe-4aa6-9665-84a1eef5d038Ù$1951fc4c-acc4-49a6-a907-7447ff0f430aÙ$66645f1a-b591-43e7-b931-8ed0cc7d6898Ù$11f8290f-f589-49ff-9602-99ccc4192884Ù$14536b70-35f0-46ba-93fc-3365a1e8c15cÙ$e89706f1-0c6a-4da4-82a1-ccf153f2e186Ù$5834c5e0-8a04-47ea-aab8-881c73d8fd4fÙ$989ccacd-b410-4967-bf6a-9244e3be785dÙ$68f9e0d9-5c9d-4e89-b5ae-f24fd7544a09Ù$605b045d-fe5c-426b-9f55-b7dd1d037c50Ù$7ce6e28e-acd7-46d1-87d6-a25f4656d79dÙ$3d10f89f-876e-4d25-b8d6-34ce5c99eb8cÙ$0609ad22-0adc-4e4f-afed-b7a46d216576Ù$2ed88aa5-fc42-4a57-924d-e918805e2208Ù$059b1c0f-eb21-4a4a-8aed-64e9ac07b541Ù$f41dd3e6-81bf-43e4-afc2-fc549b77f610Ù$0d9c5d60-878a-45bb-8707-275cf10be41fÙ$edb4ad06-5e6e-48c4-9ee4-ae0b92927a91Ù$4481fa33-1ff3-4778-8486-d4d8a15775cdÙ$aa647f3e-a4b2-4825-bb2a-1c2469d2c0ebÙ$780f2fd9-49c3-48bc-b790-dde5be1dc81bÙ$ffd1e39d-e66b-40a3-8ad1-c9480d371fe8Ù$f79d97bb-341a-46ad-bdfc-d080af13e2dfÙ$6d6e8916-9b36-4af1-b77d-86cb6a416f88Ù$acb270a1-e2b9-46bc-9a52-9f66f1cca17cÙ$1d6eccf0-2731-47fc-9a41-ea8649e290efÙ$772b4dd6-870c-4a16-937c-701d5bb5da44Ù$648bfc3f-0649-4401-a97f-89e21057f7b7Ù$b7dfc031-6bf6-44cd-b814-05f693a0a27dÙ$985f0537-2bbe-4dbb-a113-8ac98d2e0a5fÙ$755be8f1-9d9e-4afd-8a70-07fab78e4333Ù$1117e6c3-2736-46a4-bac2-d3c99c1998b6Ù$cde7be85-9344-4526-bcb2-c2c8b3322435Ù$e2fc1d47-2ee9-4844-a6b1-16f76531da86Ù$8d7b9826-b52c-4d5a-8c63-e83a1229a0beÙ$6f914006-1d8d-41f5-ae8a-fbe0b336946cÙ$821ce23a-524b-4203-96d6-4d5b454fe1fdÙ$1b02e593-d791-424c-b956-62cc480fcf40Ù$859354fe-7f40-4658-bf12-b5ee20a815a7Ù$88335fca-fd87-487b-9de2-ea7c779b54cfÙ$abe70666-39f8-4f1d-a285-a3a99f696d10Ù$dc57a71f-e44c-4385-ad2a-e6c14d5e5201Ù$2e57e4b5-d228-4ce3-b9d8-cf4375bb7c50Ù$4337b83f-b648-4b55-9d2a-4fffcf701111´last_hot_reload_timeË        ©shortpathÙ!Chapter_05_Monte_Carlo_Methods.jl®process_status¥ready¤pathÙ¬/home/runner/work/Reinforcement-Learning-Sutton-Barto-Exercise-Solutions/Reinforcement-Learning-Sutton-Barto-Exercise-Solutions/Chapter-05/Chapter_05_Monte_Carlo_Methods.jl­pluto_version§v0.20.8®last_save_timeËAÚš"Ìyªcell_orderÜ ÄÙ$826139cc-b52e-11ec-0d47-25ab689851fdÙ$a85e7dd3-ea5e-4c77-a18e-f1e190658ae3Ù$72e9721f-ee17-4557-b090-71728e6c22ceÙ$21d248f5-edad-4614-8c1c-ae330f9e5a18Ù$b2115f33-f8e2-452e-9b0e-90610f0f09b1Ù$202eb066-877d-4537-85b2-31b41db8eca0Ù$d55860d1-e4c1-4a79-adbe-b40a6d6283a7Ù$11723075-d1db-4512-abf2-3fe494a71a3bÙ$760c5361-02d4-46b7-a05c-fc2d10d93de6Ù$6a11daf7-2859-41fa-9c3d-d1f3580dbb5fÙ$e87932d9-fbc0-4ea5-a8ee-28eac5eed84fÙ$481ad435-cc80-4164-882d-8310b010ca91Ù$7fb4244c-828a-49d6-a15b-178fa3a42e00Ù$c23475f0-c5f0-49ce-a665-f93c8bda0474Ù$6d765229-2816-4abb-a868-6be919a96530Ù$a35de859-4046-4f6d-9ea9-b523d21cee5dÙ$94be5289-bba7-4490-bdcd-0d217a31c665Ù$01683e11-a368-45bc-abbc-bbd5c94d7b22Ù$a68b4965-c392-47e5-9b29-93e7ada9990aÙ$d766d44e-3684-497c-814e-8f71740cb232Ù$82284c63-2306-4469-9b1a-a5ec87037e79Ù$e5384dd0-fad1-4a24-b011-73b062fcfb1bÙ$30809344-b4ab-468b-b4b7-5ef3dca5ffc7Ù$f406be9e-3e3f-4b55-99b0-4858c774ed96Ù$be7c096c-cc8c-407b-8287-8fb2ee7150a7Ù$2572e35c-e6a3-4562-aa0f-6a5ab32d39eaÙ$47daf83b-8fe9-4491-b9ae-84bd269d5546Ù$2d10281a-a4af-4ea8-b63b-e11f2d0893edÙ$1d3d509c-b11b-4c57-b100-9bcf0489af2bÙ$13cc524c-d983-44f4-8731-0595249fb888Ù$1b78b25d-3942-4a6b-a2bd-7d97242da9feÙ$9618a093-cdb7-4589-a783-de8e9021b705Ù$5c57e4b7-51d6-492d-9fc9-bcdab1dd46f4Ù$06960937-a87a-4015-bdeb-5d17aa41fe6bÙ$627d5aa3-974f-4949-8b65-9500eba1d7ccÙ$ec29865f-3ba3-4bb3-84df-c2b472e03ff2Ù$9fe42679-dce3-4ee3-b565-eed4ff7d8e4dÙ$f9bc84ff-c2f9-4ac2-b2ce-34dfcf837a73Ù$c883748c-76b9-4086-8698-b40df51390daÙ$e2a720b0-a8c4-43a2-bf34-750ff3323004Ù$abdcbbad-747a-41ba-a95d-82404e735793Ù$334b4d77-8784-46be-b9e8-80c0a2244694Ù$54f73eb8-dcea-4da0-83af-35720e56ccbcÙ$bf19e6cf-1fb5-49c9-974e-1613d90ef4cfÙ$3ee31af5-b19c-49dc-8fbf-f07e93d1f0c5Ù$b040f245-b2d6-4ec6-aa7f-511c54aabd0dÙ$12c0cd0b-eb4f-45a0-836b-53b3c5cdafd9Ù$9793b5c9-d4ec-492d-a72d-8737bb65c8a5Ù$15925cc6-9605-4357-9c2a-cdfe54070989Ù$d97f693d-27f2-49be-a549-07a290c95b53Ù$660ef59c-205c-44c2-9c46-5a74e09497abÙ$4197cc28-b24c-48cb-bd8d-ef998983ad77Ù$aaa9647c-afb6-44d1-ae1e-a2e957064080Ù$2646c9a2-46b1-4700-9290-ddc7dc9a59afÙ$c8f3f7e3-be7e-4615-a667-d9f789928883Ù$020131a1-c68b-403a-9c5e-944edb6220e9Ù$1e6f7e5e-c5ce-479c-abbb-6c388c254626Ù$d11bfcf9-b964-4c67-afdc-53d81f051fd5Ù$cede8090-5b1a-436b-a184-fca5c4d3de48Ù$c9bd778c-217a-4664-8cde-841beca10307Ù$b39d1ea0-86a2-4215-ae73-e4492f3f2f00Ù$02dd1e77-2a7e-4123-94db-d17b31a8b15aÙ$04752549-ffca-4e31-869e-714f835d3e85Ù$acb08e38-fc87-43f4-ac2d-6c6bf0f2e9e6Ù$e293e184-5938-40b5-a04b-5306760a06aeÙ$d16ac2a8-1a5a-4ded-9285-d2c6cd550066Ù$70d9d39f-020d-4f25-810c-82a143a3335bÙ$8faca500-b80d-4b50-88b6-683d18a1286bÙ$892b5d8e-ac51-48f1-8288-65e9f68acd2dÙ$43f9b824-fd56-4d56-84c3-23e2a3a37178Ù$a59d9c84-d35f-4a9b-9fb6-13e30cdd7c3aÙ$217ecc59-d6e3-48fa-9d6d-700a3947b805Ù$19e42f50-5301-41b9-becb-2368c26b6236Ù$5b32bbc7-dc34-4fc3-bacc-92e55f26a98cÙ$b6eac49e-6742-4594-87a5-821437846b0dÙ$847a074c-1d23-4de3-a039-322aeb9f7613Ù$00cd2194-af13-415a-b725-bb34832e5d9aÙ$9ca72278-fff6-4b0f-b72c-e0d3768aff73Ù$e10378eb-12b3-4468-9c22-1838107da450Ù$f071b7e2-3f78-4132-8b84-f810f178c89dÙ$61eb74eb-88e0-42e6-a14b-3730a800694dÙ$82a1f11e-b1b3-4c7d-ab9d-9f6136ae8195Ù$5948f670-1203-4b75-8517-f8470f5d01aaÙ$830d6d61-7259-43e7-8d6d-09bc81818dd9Ù$881ba6c3-0e6a-4bb8-bc14-2e0face560f2Ù$6979db32-670d-466a-9a6e-97c2d8527f3dÙ$bf33230e-342b-4486-89ac-9667438de503Ù$09b67730-39e7-4209-8117-6bc3adfb342aÙ$fca388bd-eb8b-41e2-8da0-87b9386629c1Ù$b57462b6-8f9c-4553-9c05-134ff043b00dÙ$fa49c253-e016-46a7-ba94-0e7448a7e0aeÙ$6496c993-6d47-4a6e-a497-2a2de172fbc3Ù$61d8cfc6-a50c-4546-9e1f-dc73d4764bb9Ù$e67d9deb-a074-48ba-84db-2e6938ea01f8Ù$a47474b0-f262-4453-a116-addc3a09119eÙ$2ed0d4bb-bb6e-4adf-ad7c-8ddeb8c20b84Ù$35914757-6af1-4056-bba4-a9996f65f7f7Ù$5e012ead-b4f9-45a9-979d-88b0b1086263Ù$7c9486cd-1916-4e13-b415-fb113bd9e04bÙ$924f4e74-e3a0-42eb-89da-1f9836275588Ù$39da4cf9-5265-41bc-83d4-311e86675db7Ù$0bd705cb-ad38-4cbb-b8fc-7e0617635282Ù$418c045d-90c7-42d8-9126-90185f7e197bÙ$ab10ccd7-75ba-475c-af26-f8b36daaf880Ù$cebb79b7-c9d6-4b79-ba0e-b2f3c7587724Ù$67e535c7-437a-49ba-b5ab-9dfe63fe4aaaÙ$63814164-f305-49b3-ab51-675c822d7b18Ù$1cc46e33-6885-4d6f-805e-9ff928f1cf23Ù$f9f6c182-62f8-4a5a-8b43-8716db468427Ù$f506e8ba-b073-4f59-91b4-3fe99822d2a4Ù$bb617e58-2700-4f0d-b8c8-3a266142fb70Ù$6dc0de46-2164-4580-b186-a73cb5b5167dÙ$fd91d00a-f94f-40ff-88a7-9d85f05acc96Ù$fff54c56-5afe-4d89-9dc5-502d08c89de9Ù$658ceeaa-1b45-47bd-a364-eaa1759d17acÙ$df3c4a33-45f1-4cc2-8c06-d500a0eecc8fÙ$f7616806-97ab-4b09-accc-4e047691f879Ù$a0d61852-9942-42de-b554-572c4526a3a8Ù$9df79a71-e58a-497b-bb02-debb69144925Ù$e7de31e8-ae95-4616-86a9-a115a5e24330Ù$5e2420fb-b2cc-49fc-91e3-3de80fba698bÙ$d6e7cc6d-f397-4bdf-974e-9a16922393ddÙ$8f38a3e9-1872-4ea6-9a03-87112af4bf07Ù$a0eb6939-11bb-458d-bee3-9ed763819f62Ù$7ee4e17e-c1a9-4df0-a014-114bebcb4f52Ù$c8be6951-b6ec-4444-8c7f-ca5db6681571Ù$a307e780-996a-485f-af59-b44982dfceb4Ù$154edd83-350d-4acf-adfb-6a2d20599b53Ù$d2625507-4787-4b1c-9a91-108012e42cc7Ù$ba8a5804-4be3-43fe-95d7-c957ce02a1d4Ù$06297d75-121a-4178-b45b-83e167efd90dÙ$e370dbb3-3bd9-4dc8-b8ca-8aad8711905cÙ$cd928f87-2832-4595-8ce5-79b69cc56bd9Ù$8bcaa31b-8caf-43da-83a0-47e0c04c2a30Ù$1aaf3827-5851-4156-a7e6-14f5e4d00238Ù$0dfd7afb-127c-4afd-8374-3c9a20a9ee76Ù$3955d71a-3105-445a-868d-66ba0b3dc515Ù$ff9276eb-2151-4a6f-8257-8348047a9f4eÙ$2d36ebe3-1a86-4cad-a235-baec726da926Ù$ba044e4f-e2a6-4f96-8756-5b24b1bb5ca2Ù$6a96304b-add3-4135-8ccf-46cc23859d53Ù$b352d98e-0854-45e3-ac73-8ef434525563Ù$dfc2d648-ec08-49cd-a55f-72a766cad728Ù$846ccb44-a18b-4d87-bbf8-fc59eaf87708Ù$833bb53c-bc2b-47fb-9429-d0f6d92efb42Ù$887de995-04e8-4d84-88d7-ad096a5747dfÙ$9524a3f5-fca3-4ce9-b04d-0cb6c0cd0c90Ù$1067fcc4-cbc6-453c-a996-d420c498619aÙ$e0d3d7d1-203f-42fa-8570-8d1d88bf17c2Ù$da66b3be-1fe2-4edb-9560-71ce7c0bed12Ù$8668ffc3-6c8c-4c25-8d47-9977bef929d2Ù$7cdf4142-82fe-4aa6-9665-84a1eef5d038Ù$1951fc4c-acc4-49a6-a907-7447ff0f430aÙ$66645f1a-b591-43e7-b931-8ed0cc7d6898Ù$11f8290f-f589-49ff-9602-99ccc4192884Ù$14536b70-35f0-46ba-93fc-3365a1e8c15cÙ$e89706f1-0c6a-4da4-82a1-ccf153f2e186Ù$5834c5e0-8a04-47ea-aab8-881c73d8fd4fÙ$68f9e0d9-5c9d-4e89-b5ae-f24fd7544a09Ù$989ccacd-b410-4967-bf6a-9244e3be785dÙ$605b045d-fe5c-426b-9f55-b7dd1d037c50Ù$7ce6e28e-acd7-46d1-87d6-a25f4656d79dÙ$3d10f89f-876e-4d25-b8d6-34ce5c99eb8cÙ$0609ad22-0adc-4e4f-afed-b7a46d216576Ù$2ed88aa5-fc42-4a57-924d-e918805e2208Ù$f41dd3e6-81bf-43e4-afc2-fc549b77f610Ù$059b1c0f-eb21-4a4a-8aed-64e9ac07b541Ù$0d9c5d60-878a-45bb-8707-275cf10be41fÙ$edb4ad06-5e6e-48c4-9ee4-ae0b92927a91Ù$4481fa33-1ff3-4778-8486-d4d8a15775cdÙ$aa647f3e-a4b2-4825-bb2a-1c2469d2c0ebÙ$780f2fd9-49c3-48bc-b790-dde5be1dc81bÙ$ffd1e39d-e66b-40a3-8ad1-c9480d371fe8Ù$f79d97bb-341a-46ad-bdfc-d080af13e2dfÙ$6d6e8916-9b36-4af1-b77d-86cb6a416f88Ù$1d6eccf0-2731-47fc-9a41-ea8649e290efÙ$acb270a1-e2b9-46bc-9a52-9f66f1cca17cÙ$772b4dd6-870c-4a16-937c-701d5bb5da44Ù$648bfc3f-0649-4401-a97f-89e21057f7b7Ù$b7dfc031-6bf6-44cd-b814-05f693a0a27dÙ$985f0537-2bbe-4dbb-a113-8ac98d2e0a5fÙ$755be8f1-9d9e-4afd-8a70-07fab78e4333Ù$cde7be85-9344-4526-bcb2-c2c8b3322435Ù$1117e6c3-2736-46a4-bac2-d3c99c1998b6Ù$e2fc1d47-2ee9-4844-a6b1-16f76531da86Ù$8d7b9826-b52c-4d5a-8c63-e83a1229a0beÙ$6f914006-1d8d-41f5-ae8a-fbe0b336946cÙ$821ce23a-524b-4203-96d6-4d5b454fe1fdÙ$1b02e593-d791-424c-b956-62cc480fcf40Ù$859354fe-7f40-4658-bf12-b5ee20a815a7Ù$88335fca-fd87-487b-9de2-ea7c779b54cfÙ$abe70666-39f8-4f1d-a285-a3a99f696d10Ù$dc57a71f-e44c-4385-ad2a-e6c14d5e5201Ù$2e57e4b5-d228-4ce3-b9d8-cf4375bb7c50Ù$77cf7fee-0ad8-4d22-b376-75833307db93Ù$4337b83f-b648-4b55-9d2a-4fffcf701111±published_objectsÞ Ù5c6e0de0c-3901-11f0-234e-bd09c571f662/317eb0286b9488bc„¦layoutˆ¨autosizeÂ¥xaxisƒ¨tickvals×  €?   A¥title�¤text®Dealer showing¨ticktext’¡A¢10¨template‚¦layoutÞ ©coloraxis�¨colorbar‚¥ticks ¬outlinewidthÊ    ¥xaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white©hovermode§closest­paper_bgcolor¥white£geo†©showlakesÃ¨showlandÃ©landcolor§#E5ECF6§bgcolor¥white¬subunitcolor¥white©lakecolor¥whiteªcolorscaleƒªsequentialš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921©diverging›’Ê    §#8e0152’Ê=ÌÌÍ§#c51b7d’Ê>LÌÍ§#de77ae’Ê>™™š§#f1b6da’Ê>ÌÌÍ§#fde0ef’Ê?   §#f7f7f7’Ê?™š§#e6f5d0’Ê?333§#b8e186’Ê?LÌÍ§#7fbc41’Ê?fff§#4d9221’Ê?€  §#276419¯sequentialminusš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921¥yaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white­shapedefaults�¤line�¥color§#2a3f5fªhoverlabel�¥align¤left¦mapbox�¥style¥light¥polarƒ«angularaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6ªradialaxisƒ©gridcolor¥white¥ticks ©linecolor¥white¯autotypenumbers¦strict¤font�¥color§#2a3f5f§ternary„¥aaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6¥caxisƒ©gridcolor¥white¥ticks ©linecolor¥white¥baxisƒ©gridcolor¥white¥ticks ©linecolor¥white²annotationdefaultsƒ©arrowheadÊ    ªarrowwidthÊ?€  ªarrowcolor§#2a3f5f¬plot_bgcolor§#E5ECF6¥title�¡xÊ=LÌÍ¥sceneƒ¥xaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥zaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥yaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¨colorwayš§#636efa§#EF553B§#00cc96§#ab63fa§#FFA15A§#19d3f3§#FF6692§#B6E880§#FF97FF§#FECB52¤dataÞ ®scatterpolargl‘‚¤type®scatterpolargl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦carpet‘ƒ¥baxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¤type¦carpet¥aaxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¬scatterpolar‘‚¤type¬scatterpolar¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©parcoords‘‚¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©parcoords§scatter‘‚¤type§scatter¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ²histogram2dcontour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type²histogram2dcontourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921§contour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§contourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattercarpet‘‚¤type­scattercarpet¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦mesh3d‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type¦mesh3d§surface‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§surfaceªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattermapbox‘‚¤type­scattermapbox¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ªscattergeo‘‚¤typeªscattergeo¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©histogram‘‚¤type©histogram¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    £pie‘‚¤type£pieªautomarginÃªchoropleth‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤typeªchoropleth©heatmapgl‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©heatmapglªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921£bar‘„¤type£bar§error_y�¥color§#2a3f5f§error_x�¥color§#2a3f5f¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   §heatmap‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§heatmapªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­contourcarpet‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type­contourcarpet¥table‘ƒ¤type¥table¦header‚¤line�¥color¥white¤fill�¥color§#C8D4E3¥cells‚¤line�¥color¥white¤fill�¥color§#EBF0F8©scatter3d‘ƒ¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©scatter3d¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¨barpolar‘‚¤type¨barpolar¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   ©scattergl‘‚¤type©scattergl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    «histogram2d‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type«histogram2dªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921®scatterternary‘‚¤type®scatterternary¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦heightÊC–  ¦margin„¡lÊ    ¡bÊ    ¡rÊ    ¡tÊBp  ¥title ¥yaxisƒ¨tickvals×  @A  ¨A¥title�¤textªPlayer sum¨ticktext×  @A  ¨A¥widthÊCÈ  ¦config…¨showLinkÂ¨editableÂªresponsiveÃªstaticPlotÂªscrollZoomÃ¦frames�¤data‘‰¤zmaxÊ?€  ¡yÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¤type§heatmapªcolorscale§Bluered¤zminÊ¿€  ¡zšÇ(¤1¢¾Áç·¾ÕÊÃ¾ì¨Ä¾róÄ¾ÆäÛ¾^•À¾YÞó½¸¸>*»?Ç('²=Uƒ\=i­Ü<®Ÿ‚<Eà½gg ½c¦>­UÁ>B$?&Èv?Ç(‚\Ð=`¿ž=B#ü<ûGÁ<ð�š;bœí<na>m˜×>ÿÑ&?<@x?Ç(ß³>0æÓ=î¶=5ñl=/H=uŒP=È·$>ÚHÜ>Á(?˜=x?Ç(¶Þ8>$Z>Ý8>áà=—L¿=â§è=uàS>á¯à>c$*?t×w?Ç(F7>YÓ9>F¹>©Â>9øû=9äü=¸N“>%?ÿ>y¹1?]æx?Ç(->>: >-®±=$zO=Ý„¼V6=ºfÍ>_r?EÛG? wz?Ç(vÉ=oL¯<ç•;–ò3½â˜G½„‰)½ËÀ=_¥?úÍI?šhz?Ç(\¿3»>ïk½˜ò‚½‰XÇ½©¾.þ¾+»ø½f¸™>ƒ­B?b{?Ç(+tù½yÇ*¾¯¹c¾®)n¾Iˆ¾>a¾PúE¾÷óv¼3õÝ>6¿c?©transposeÃ©showscaleÃ¡xÇ(  €?   @  @@  €@   @  À@  à@   A  A   AÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/298eb806dc8714d9„¦layout†¥xaxisƒ¨tickvalsÇ(  €?   @  @@  €@   @  À@  à@   A  A   A¥title�¤text®Dealer showing¨ticktextš¡AÊ@   Ê@@  Ê@€  Ê@   Ê@À  Ê@à  ÊA   ÊA  ÊA   ¨template‚¦layoutÞ ©coloraxis�¨colorbar‚¥ticks ¬outlinewidthÊ    ¥xaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white©hovermode§closest­paper_bgcolor¥white£geo†©showlakesÃ¨showlandÃ©landcolor§#E5ECF6§bgcolor¥white¬subunitcolor¥white©lakecolor¥whiteªcolorscaleƒªsequentialš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921©diverging›’Ê    §#8e0152’Ê=ÌÌÍ§#c51b7d’Ê>LÌÍ§#de77ae’Ê>™™š§#f1b6da’Ê>ÌÌÍ§#fde0ef’Ê?   §#f7f7f7’Ê?™š§#e6f5d0’Ê?333§#b8e186’Ê?LÌÍ§#7fbc41’Ê?fff§#4d9221’Ê?€  §#276419¯sequentialminusš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921¥yaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white­shapedefaults�¤line�¥color§#2a3f5fªhoverlabel�¥align¤left¦mapbox�¥style¥light¥polarƒ«angularaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6ªradialaxisƒ©gridcolor¥white¥ticks ©linecolor¥white¯autotypenumbers¦strict¤font�¥color§#2a3f5f§ternary„¥aaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6¥caxisƒ©gridcolor¥white¥ticks ©linecolor¥white¥baxisƒ©gridcolor¥white¥ticks ©linecolor¥white²annotationdefaultsƒ©arrowheadÊ    ªarrowwidthÊ?€  ªarrowcolor§#2a3f5f¬plot_bgcolor§#E5ECF6¥title�¡xÊ=LÌÍ¥sceneƒ¥xaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥zaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥yaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¨colorwayš§#636efa§#EF553B§#00cc96§#ab63fa§#FFA15A§#19d3f3§#FF6692§#B6E880§#FF97FF§#FECB52¤dataÞ ®scatterpolargl‘‚¤type®scatterpolargl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦carpet‘ƒ¥baxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¤type¦carpet¥aaxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¬scatterpolar‘‚¤type¬scatterpolar¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©parcoords‘‚¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©parcoords§scatter‘‚¤type§scatter¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ²histogram2dcontour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type²histogram2dcontourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921§contour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§contourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattercarpet‘‚¤type­scattercarpet¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦mesh3d‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type¦mesh3d§surface‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§surfaceªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattermapbox‘‚¤type­scattermapbox¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ªscattergeo‘‚¤typeªscattergeo¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©histogram‘‚¤type©histogram¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    £pie‘‚¤type£pieªautomarginÃªchoropleth‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤typeªchoropleth©heatmapgl‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©heatmapglªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921£bar‘„¤type£bar§error_y�¥color§#2a3f5f§error_x�¥color§#2a3f5f¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   §heatmap‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§heatmapªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­contourcarpet‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type­contourcarpet¥table‘ƒ¤type¥table¦header‚¤line�¥color¥white¤fill�¥color§#C8D4E3¥cells‚¤line�¥color¥white¤fill�¥color§#EBF0F8©scatter3d‘ƒ¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©scatter3d¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¨barpolar‘‚¤type¨barpolar¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   ©scattergl‘‚¤type©scattergl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    «histogram2d‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type«histogram2dªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921®scatterternary‘‚¤type®scatterternary¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦heightÊC–  ¦margin„¡lÊ    ¡bÊ    ¡rÊA   ¡tÊAð  ¥yaxisƒ¨tickvalsÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¥title�¤textªPlayer sum¨ticktextÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¥widthÊC–  ¦config…¨showLinkÂ¨editableÂªresponsiveÃªstaticPlotÂªscrollZoomÃ¦frames�¤data‘‰¤zmaxÊ?€  ¡yÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¤type§heatmapªcolorscale¥Greys¤zminÊ¿€  ¡zšÇ(  €?  €?  €?  €?  €?  €¿  €¿  €¿  €¿  €¿Ç(  €?  €¿  €¿  €¿  €¿  €¿  €¿  €¿  €¿  €¿Ç(  €?  €¿  €¿  €¿  €¿  €¿  €¿  €¿  €¿  €¿Ç(  €¿  €¿  €¿  €¿  €¿  €¿  €¿  €¿  €¿  €¿Ç(  €?  €¿  €¿  €¿  €¿  €¿  €¿  €¿  €¿  €¿Ç(  €¿  €¿  €¿  €¿  €¿  €¿  €¿  €¿  €¿  €¿Ç(  €?  €?  €?  €?  €?  €¿  €¿  €¿  €¿  €¿Ç(  €?  €?  €?  €?  €?  €¿  €¿  €¿  €¿  €¿Ç(  €?  €?  €?  €?  €¿  €¿  €¿  €¿  €¿  €¿Ç(  €?  €?  €?  €?  €¿  €¿  €¿  €¿  €¿  €¿©transposeÃ©showscaleÂ¡xÇ(  €?   @  @@  €@   @  À@  à@   A  A   AÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/c2f9f46c95453d02„¦layoutˆ¨autosizeÂ¥xaxisƒ¨tickvals×  €?   A¥title�¤text ¨ticktext’¡A¢10¨template‚¦layoutÞ ©coloraxis�¨colorbar‚¥ticks ¬outlinewidthÊ    ¥xaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white©hovermode§closest­paper_bgcolor¥white£geo†©showlakesÃ¨showlandÃ©landcolor§#E5ECF6§bgcolor¥white¬subunitcolor¥white©lakecolor¥whiteªcolorscaleƒªsequentialš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921©diverging›’Ê    §#8e0152’Ê=ÌÌÍ§#c51b7d’Ê>LÌÍ§#de77ae’Ê>™™š§#f1b6da’Ê>ÌÌÍ§#fde0ef’Ê?   §#f7f7f7’Ê?™š§#e6f5d0’Ê?333§#b8e186’Ê?LÌÍ§#7fbc41’Ê?fff§#4d9221’Ê?€  §#276419¯sequentialminusš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921¥yaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white­shapedefaults�¤line�¥color§#2a3f5fªhoverlabel�¥align¤left¦mapbox�¥style¥light¥polarƒ«angularaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6ªradialaxisƒ©gridcolor¥white¥ticks ©linecolor¥white¯autotypenumbers¦strict¤font�¥color§#2a3f5f§ternary„¥aaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6¥caxisƒ©gridcolor¥white¥ticks ©linecolor¥white¥baxisƒ©gridcolor¥white¥ticks ©linecolor¥white²annotationdefaultsƒ©arrowheadÊ    ªarrowwidthÊ?€  ªarrowcolor§#2a3f5f¬plot_bgcolor§#E5ECF6¥title�¡xÊ=LÌÍ¥sceneƒ¥xaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥zaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥yaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¨colorwayš§#636efa§#EF553B§#00cc96§#ab63fa§#FFA15A§#19d3f3§#FF6692§#B6E880§#FF97FF§#FECB52¤dataÞ ®scatterpolargl‘‚¤type®scatterpolargl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦carpet‘ƒ¥baxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¤type¦carpet¥aaxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¬scatterpolar‘‚¤type¬scatterpolar¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©parcoords‘‚¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©parcoords§scatter‘‚¤type§scatter¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ²histogram2dcontour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type²histogram2dcontourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921§contour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§contourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattercarpet‘‚¤type­scattercarpet¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦mesh3d‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type¦mesh3d§surface‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§surfaceªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattermapbox‘‚¤type­scattermapbox¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ªscattergeo‘‚¤typeªscattergeo¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©histogram‘‚¤type©histogram¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    £pie‘‚¤type£pieªautomarginÃªchoropleth‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤typeªchoropleth©heatmapgl‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©heatmapglªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921£bar‘„¤type£bar§error_y�¥color§#2a3f5f§error_x�¥color§#2a3f5f¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   §heatmap‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§heatmapªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­contourcarpet‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type­contourcarpet¥table‘ƒ¤type¥table¦header‚¤line�¥color¥white¤fill�¥color§#C8D4E3¥cells‚¤line�¥color¥white¤fill�¥color§#EBF0F8©scatter3d‘ƒ¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©scatter3d¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¨barpolar‘‚¤type¨barpolar¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   ©scattergl‘‚¤type©scattergl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    «histogram2d‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type«histogram2dªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921®scatterternary‘‚¤type®scatterternary¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦heightÊC–  ¦margin„¡lÊ    ¡bÊ    ¡rÊ    ¡tÊBp  ¥titleµAfter 10,000 episodes¥yaxisƒ¨tickvals×  @A  ¨A¥title�¤text ¨ticktext×  @A  ¨A¥widthÊC   ¦config…¨showLinkÂ¨editableÂªresponsiveÃªstaticPlotÂªscrollZoomÃ¦frames�¤data‘‰¤zmaxÊ?€  ¡yÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¤type§heatmapªcolorscale§Bluered¤zminÊ¿€  ¡zšÇ($IÒ¾¾ïû¾zŸâ¾ ø¾²¿$Ìï¾Åo¿­0¿_6=8?Ç(Ø&¾‰VX¾Þ—Ç¾ZøÕ¾.-­¾-Ë²¾!Ò¾r˜Ã¾ÂR ?#,w?Ç(„-Ø¾RßY¾;Žã½¼»»¾Àïû¾Sž¾ùŠ¯¾Ô›¿i/!? �z?Ç(   ¿ @¾‹ŒŒ¾É&¾Rç×¾L‘¾b ¿*ˆÉ¾7µ)?¦_z?Ç(�°Ü¾Ž.º¾6MÓ¾tdO¾è¢‹¾Œ.º¾ŽÂõ¾³�¿PìD?a,y?Ç(¸m›¾gf¦¾  ¿ ¾¶´´¾   ¿�1Æ¾¦È¾×£0?›Þt?Ç(žØ	¾›²¦¾cŒ¾ °¾ÎÌŒ¾Ùü°¾ÅÔÀ¾Qú¤¾çæf?}}?Ç(ªªª¾ƒ‚‚¾?øà¾‰ˆˆ¾zÓ›¾†‰ô¼gf¦¾#Ò¾p=J?�~t?Ç(;1¾$¸�¾¢á¤¾¬ªª¾ßÈ�¾C¤¾ÐÇà¾ÿÿÿ¾«ª2?#,w?Ç(×£¾ ‚¾Ý—Ç¾Ã0¿>x¾Ž�Ø¾ö¿Qé¾þÿÿ>�¦N?©transposeÃ©showscaleÂ¡xÇ(  €?   @  @@  €@   @  À@  à@   A  A   AÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/49c525f145d8c899„¦layout„¥xaxis‚¤type£log¥title�¤text´Steps to Finish Race¨template‚¦layoutÞ ©coloraxis�¨colorbar‚¥ticks ¬outlinewidthÊ    ¥xaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white©hovermode§closest­paper_bgcolor¥white£geo†©showlakesÃ¨showlandÃ©landcolor§#E5ECF6§bgcolor¥white¬subunitcolor¥white©lakecolor¥whiteªcolorscaleƒªsequentialš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921©diverging›’Ê    §#8e0152’Ê=ÌÌÍ§#c51b7d’Ê>LÌÍ§#de77ae’Ê>™™š§#f1b6da’Ê>ÌÌÍ§#fde0ef’Ê?   §#f7f7f7’Ê?™š§#e6f5d0’Ê?333§#b8e186’Ê?LÌÍ§#7fbc41’Ê?fff§#4d9221’Ê?€  §#276419¯sequentialminusš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921¥yaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white­shapedefaults�¤line�¥color§#2a3f5fªhoverlabel�¥align¤left¦mapbox�¥style¥light¥polarƒ«angularaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6ªradialaxisƒ©gridcolor¥white¥ticks ©linecolor¥white¯autotypenumbers¦strict¤font�¥color§#2a3f5f§ternary„¥aaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6¥caxisƒ©gridcolor¥white¥ticks ©linecolor¥white¥baxisƒ©gridcolor¥white¥ticks ©linecolor¥white²annotationdefaultsƒ©arrowheadÊ    ªarrowwidthÊ?€  ªarrowcolor§#2a3f5f¬plot_bgcolor§#E5ECF6¥title�¡xÊ=LÌÍ¥sceneƒ¥xaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥zaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥yaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¨colorwayš§#636efa§#EF553B§#00cc96§#ab63fa§#FFA15A§#19d3f3§#FF6692§#B6E880§#FF97FF§#FECB52¤dataÞ ®scatterpolargl‘‚¤type®scatterpolargl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦carpet‘ƒ¥baxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¤type¦carpet¥aaxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¬scatterpolar‘‚¤type¬scatterpolar¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©parcoords‘‚¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©parcoords§scatter‘‚¤type§scatter¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ²histogram2dcontour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type²histogram2dcontourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921§contour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§contourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattercarpet‘‚¤type­scattercarpet¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦mesh3d‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type¦mesh3d§surface‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§surfaceªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattermapbox‘‚¤type­scattermapbox¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ªscattergeo‘‚¤typeªscattergeo¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©histogram‘‚¤type©histogram¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    £pie‘‚¤type£pieªautomarginÃªchoropleth‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤typeªchoropleth©heatmapgl‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©heatmapglªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921£bar‘„¤type£bar§error_y�¥color§#2a3f5f§error_x�¥color§#2a3f5f¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   §heatmap‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§heatmapªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­contourcarpet‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type­contourcarpet¥table‘ƒ¤type¥table¦header‚¤line�¥color¥white¤fill�¥color§#C8D4E3¥cells‚¤line�¥color¥white¤fill�¥color§#EBF0F8©scatter3d‘ƒ¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©scatter3d¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¨barpolar‘‚¤type¨barpolar¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   ©scattergl‘‚¤type©scattergl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    «histogram2d‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type«histogram2dªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921®scatterternary‘‚¤type®scatterternary¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦margin„¡lÊBH  ¡bÊBH  ¡rÊBH  ¡tÊBp  ¥yaxis�¥title�¤text³Percent of Episodes¦config…¨showLinkÂ¨editableÂªresponsiveÃªstaticPlotÂªscrollZoomÃ¦frames�¤data’„¡yÈÌYhŠ:Yh
;YhŠ;YhŠ;o­;›6ò;›6ò;Yh
<o-<o-<zO><…œO<�é`<›6r<ÓÁ�<YhŠ<dµ›<dµ›<é[¤<o­<zO¾<zO¾<ÿõÆ<…œÏ<CØ<�éà<�é<›6ò<!Ýú<ÓÁ=Yh
=Yh
=›»=Þ=!b=dµ=§ =,¯(=,¯(=o-=²U1=ô¨5=½¢B=½¢B=½¢B=ÿõF=BIK=…œO=ÈïS=CX=�é`=�é`=Ó<e=�i=Xãm=›6r=Þ‰v=!Ýz=c0=ÓÁ�=uëƒ=†=·>ˆ=YhŠ=ú‘Œ=›»Ž==å�=Þ“=€8•=!b—=Â‹™=dµ›=ß�=§ =H2¢=é[¤=‹…¦=,¯¨=ÍØª=o­=,¯=²U±=ô¨µ=ô¨µ=–Ò·=7ü¹=Ù%¼=zO¾=yÀ=½¢Â=^ÌÄ=ÿõÆ=¡É=BIË=ärÍ=…œÏ=ÈïÓ=ÈïÓ=iÖ=¬lÚ=¬lÚ=M–Ü=ï¿Þ=�éà=1ã=Ó<å=tfç=�é=·¹ë=Xãí=úð=›6ò==`ô=Þ‰ö=³ø=!Ýú=c0ÿ=c0ÿ=­ >ÓÁ>¤Ö>uë>E >>ç)>·>>ˆS	>Yh
>)}>ú‘>Ë¦>›»>=å>=å>ú>Þ>¯#>€8>PM>!b>òv>Â‹>“ >dµ>ß>ß>Öó>§ >w!>G#>G#>é[$>‹…&>‹…&>[š'>,¯(>ýÃ)>ÍØ*>ží+>o->@.>,/>²U1>²U1>‚j2>$”4>$”4>ô¨5>Å½6>–Ò7>fç8>7ü9>;>Ù%<>©:=>zO>>Kd?>y@>ì�A>½¢B>^ÌD>^ÌD>/áE>ÿõF>Ð
H>r4J>r4J>^L>^L>ärM>´‡N>…œO>&ÆQ>&ÆQ>÷ÚR>ÈïS>˜U>iV>:.W>CX>ÛWY>¬lZ>}�[>M–\>«]>ï¿^>�é`>�é`>aþa>1c>(d>Ó<e>¤Qf>tfg>E{h>�i>ˆÎl>ˆÎl>ˆÎl>Xãm>)øn>úp>Ê!q>lKs>lKs>=`t>Þ‰v>Þ‰v>¯žw>PÈy>PÈy>!Ýz>ññ{>Â}>“~>c0>­€>­€>k7�>ÓÁ�>;L‚>¤Ö‚>aƒ>uëƒ>Ýu„>®Š…>®Š…>†>~Ÿ†>ç)‡>O´‡>·>ˆ> Éˆ>ˆS‰>ðÝ‰>YhŠ>)}‹>)}‹>’Œ>ú‘Œ>b�>Ë¦�>31Ž>›»Ž>F�>lÐ�>ÔZ�>=å�>¥o‘>v„’>v„’>Þ“>G™“>¯#”>®”>€8•>PM–>PM–>¹×–>!b—>‰ì—>òv˜>Z™>Â‹™>+š>“ š>û*›>dµ›>Ì?œ>4Êœ>ß�>ß�>miž>Öóž>>~Ÿ>§ >“ >w¡>à§¡>H2¢>°¼¢>G£>�Ñ£>é[¤>Ræ¤>ºp¥>"û¥>‹…¦>ó§>[š§>Ä$¨>,¯¨>”9©>ýÃ©>eNª>ÍØª>6c«>ží«>x¬>o­>×Œ­>@®>¨¡®>,¯>y¶¯>á@°>IË°>²U±>à±>‚j²>ëô²>»	´>»	´>$”´>Œµ>ô¨µ>]3¶>Å½¶>-H·>–Ò·>þ\¸>fç¸>Ïq¹>7ü¹>Ÿ†º>»>p›»>Ù%¼>A°¼>©:½>Å½>zO¾>âÙ¾>Kd¿>³î¿>yÀ>„Á>ì�Á>TÂ>½¢Â>%-Ã>öAÄ>öAÄ>^ÌÄ>/áÅ>/áÅ>—kÆ>ÿõÆ>h€Ç>Ð
È>8•È>¡É>	ªÉ>r4Ê>Ú¾Ê>BIË>«ÓË>^Ì>{èÌ>ärÍ>LýÍ>´‡Î>Ï>…œÏ>í&Ð>V±Ð>¾;Ñ>&ÆÑ>�PÒ>÷ÚÒ>_eÓ>ÈïÓ>0zÔ>˜Õ>�Õ>iÖ>Ò£Ö>:.×>¢¸×>CØ>sÍØ>ÛWÙ>DâÙ>¬lÚ>÷Ú>}�Û>åÜ>M–Ü>«Ý>«Ý>†5Þ>ï¿Þ>WJß>¿Ôß>�éà>�éà>øsá>aþá>Éˆâ>1ã>š�ã>(ä>k²ä>Ó<å>;Çå>¤Qæ>Üæ>tfç>Ýðç>E{è>­é>�é>~ê>O/ë>O/ë>·¹ë>Dì>ˆÎì>ðXí>Xãí>Ámî>)øî>‘‚ï>úð>b—ð>Ê!ñ>3¬ñ>›6ò>Áò>lKó>ÔÕó>=`ô>uõ>uõ>vÿõ>Þ‰ö>F÷>¯ž÷>)ø>³ø>PÈù>PÈù>¸Rú>!Ýú>‰gû>ññû>Z|ü>Âý>*‘ý>“þ>û¥þ>Ìºÿ>Ìºÿ>š" ?­ ?­ ?7ò ?k7?Ÿ|?ÓÁ??p‘?p‘?¤Ö?Ø?a?@¦?uë?©0?Ýu?»?yE?yE?®Š???JZ?~Ÿ?²ä?ç)?o?O´?ƒù?·>?ëƒ? É?T	?ˆS	?¼˜	?ðÝ	?$#
?Yh
?Áò
?Áò
?õ7?)}?^Â?’?ÆL?ú‘?.×?b?—a?Ë¦?ÿë?31?gv?›»?Ð ?F?8‹?lÐ? ?ÔZ?	 ?=å?q*?¥o?Ù´?ú?B??v„?ªÉ?Þ?T?G™?{Þ?¯#?ãh?®?Kó?€8?´}?èÂ??PM?„’?í?í?!b?U§?‰ì?½1?òv?&¼?Z?ŽF?Â‹?÷Ð?+?_[?“ ?û*?û*?0p?dµ?Ì??Ì?? …?4Ê?i?�T?Ñ™?ß?9$?mi?¢®?Öó?
9?>~?rÃ?§ ?ÛM ?“ ?CØ ?w!?«b!?à§!?H2"?H2"?|w"?°¼"?ä#?MŒ#?MŒ#?�Ñ#?µ$?é[$?¡$?Ræ$?†+%?ºp%?îµ%?"û%?W@&?‹…&?ó'?ó'?'U'?[š'?�ß'?Ä$(?øi(?,¯(?`ô(?”9)?É~)?ýÃ)?1	*?eN*?™“*?ÍØ*?+?6c+?j¨+?ží+?Ò2,?x,?;½,?o-?£G-?×Œ-?Ò-?@.?t\.?¨¡.?Üæ.?,/?Dq/?y¶/?­û/?á@0?†0?IË0?}1?²U1?æš1?à1?N%2?‚j2?¶¯2?ëô2?:3?S3?‡Ä3?»	4?$”4?$”4?XÙ4?Àc5?Àc5?ô¨5?)î5?]36?‘x6?Å½6?ù7?-H7?b�7?–Ò7?Ê8?þ\8?2¢8?fç8?›,9?Ïq9?·9?7ü9?kA:?Ÿ†:?ÔË:?;?<V;?p›;?¤à;?Ù%<?k<?A°<?uõ<?©:=?Ý=?Å=?zO>?zO>?®”>?âÙ>???Kd??©??³î??ç3@?y@?O¾@?„A?¸HA?ì�A? ÓA?TB?‰]B?½¢B?ñçB?%-C?YrC?�·C?öAD?öAD?*‡D?^ÌD?ÆVE?ÆVE?û›E?/áE?c&F?—kF?Ë°F?ÿõF?4;G?h€G?œÅG?Ð
H?PH?8•H?mÚH?¡I?ÕdI?	ªI?=ïI?r4J?¦yJ?Ú¾J?K?BIK?vŽK?«ÓK?ßL?^L?G£L?{èL?¯-M?ärM?¸M?LýM?€BN?´‡N?èÌN?O?QWO?…œO?¹áO?í&P?"lP?V±P?ŠöP?¾;Q?ò€Q?&ÆQ?[R?�PR?Ã•R?÷ÚR?_eS?_eS?”ªS?ÈïS?ü4T?0zT?d¿T?˜U?ÍIU?�U?5ÔU?iV?�^V?Ò£V?éV?:.W?nsW?¢¸W?ÖýW?CX??ˆX?sÍX?§Y?ÛWY?�Y?DâY?x'Z?¬lZ?à±Z?÷Z?H<[?}�[?±Æ[?å\?Q\?M–\?�Û\?¶ ]?«]?«]?Rð]?†5^?»z^?ï¿^?#_?WJ_?‹�_?¿Ô_?ô`?(_`?\¤`?�é`?Ä.a?øsa?-¹a?aþa?•Cb?Éˆb?ýÍb?1c?fXc?š�c?Îâc?(d?6md?k²d?Ÿ÷d?Ó<e?‚e?;Çe?of?¤Qf?Ø–f?Üf?@!g?tfg?¨«g?Ýðg?6h?E{h?yÀh?­i?áJi?�i?JÕi?~j?²_j?æ¤j?êj?O/k?ƒtk?·¹k?ëþk?Dl?T‰l?ˆÎl?¼m?ðXm?$žm?Xãm?�(n?Ámn?õ²n?)øn?]=o?‘‚o?ÆÇo?úp?.Rp?b—p?–Üp?Ê!q?ÿfq?3¬q?gñq?›6r?Ï{r?Ár?8s?lKs? �s?ÔÕs?t?=`t?q¥t?¥êt?Ù/u?uu?Aºu?vÿu?ªDv?Þ‰v?Ïv?Fw?zYw?¯žw?ããw?)x?Knx?³x?³øx?è=y?ƒy?PÈy?„z?¸Rz?í—z?!Ýz?U"{?‰g{?½¬{?ññ{?&7|?Z||?ŽÁ|?Â}?öK}?*‘}?_Ö}?“~?Ç`~?û¥~?/ë~?c0?˜u?Ìº?  €?¤type§scatter¤nameµOff policy MC Control¡xÈÌ  `A  pA  �A  �A  ¨A  ÐA  ÐA  àA  B  B  $B  <B  HB  TB  lB  „B  ˆB  ˆB  ŽB  ’B  ˜B  ˜B  ¬B  ÄB  ÈB  ÊB  ÐB  æB  êB  ðB  üB  üB  þB   C  C  
C  C  C  C  C  C  C  C  C  C  C   C  &C  'C  /C  1C  1C  6C  7C  8C  9C  :C  DC  GC  JC  NC  aC  iC  mC  qC  tC  uC €�C €„C €ˆC €‹C  ŒC €ŒC  ŽC €ŽC  �C  ”C  •C  ˜C €™C  œC  �C  ŸC  ŸC €ŸC   C € C €£C €¥C €§C  ¨C  ©C  ªC  ­C  ¯C  ´C  ¶C  ¶C €½C  ¿C  ¿C €¿C  ÁC  ÂC €ÂC €ÃC €ÄC €ÅC €ÇC €ËC  ÏC €ÐC €ÓC  ÔC  ÖC  ×C  ØC  ØC €ØC €ÙC  ÚC €ÚC €ãC  äC  îC  òC €òC €ùC  üC €üC  ýC  þC  D  D @D €D @D €D €D ÀD  D €	D @
D  D @D @D @D €D ÀD  D  D €D €D €D @D @D €D  D @D ÀD @D €D €D €D ÀD À D À D À!D À"D €'D €(D À)D @,D @.D À.D @/D À/D @0D €0D €3D À3D À3D À4D À5D À8D À9D À9D @:D @:D €:D  <D @=D @?D @?D À?D €@D À@D €BD ÀBD  CD @ED €ED  FD ÀFD @GD  JD  LD  LD @LD ÀMD  OD €PD  RD  SD €SD  TD ÀUD ÀUD ÀUD €XD ÀXD ÀYD  ZD €]D €]D @_D €_D €_D  `D €`D €`D À`D €aD ÀaD @dD €dD  eD  eD @gD  iD €iD  jD ÀjD €kD  lD €oD €oD  pD ÀpD  tD €tD @vD @yD  zD  {D €}D €D €D à€D `�D €�D  ‚D  ƒD  ƒD àƒD À„D @†D `†D À†D  ‡D  ‡D €ˆD À‰D @ŠD à‹D @ŒD ÀŒD ÀŒD €�D à�D àŽD @�D `�D à�D  �D @‘D €‘D À‘D €”D à”D  •D  •D @•D €•D @–D @—D `™D  ™D à™D @šD ÀšD  ›D  ›D `›D  ›D  œD ÀœD €�D  žD  žD ÀžD  ŸD `ŸD €ŸD àŸD   D  ¡D @¡D @¢D  £D  £D à£D À¥D À¦D  §D `§D €¨D  ©D à©D `«D €«D  ¬D  ¬D  ­D @­D à­D  ®D à®D `¯D €¯D  ¯D À±D  ²D À³D à³D @´D à´D  ¶D à¶D  ·D  ·D €¸D  ¹D  »D  »D `½D €½D @ÀD  ÂD `ÂD  ÃD €ÃD €ÃD  ÄD àÄD àÄD €ÅD  ÆD  ÈD  ÈD  ÉD àÊD  ËD `ËD  ËD  ÌD `ÍD  ÏD àÏD  ÐD  ÑD  ÒD ÀÒD àÒD  ÓD àÓD  ÔD  ÕD  ÕD `ÖD  ×D  ×D €×D àØD @ÙD  ÙD  ÚD  ÚD  ÛD  ÛD `ÛD `ÜD €ÝD  ÝD @ÞD €ßD €àD  àD `áD `áD `âD  ãD @ãD €ãD  ãD  ãD  äD  äD  äD àäD `åD  éD àéD  ëD @ìD  íD @íD €íD àíD  îD @îD €îD @ïD `ïD `ïD `ðD `ñD àñD €øD  ùD @ùD  ýD €ýD p E € E � E  E  E PE PE €E E 0E 0E €E  E �E  E  E `E °E °E ðE °E ÐE  E 0E 0
E @
E `
E À
E Ð
E Ð
E @E €E €E  E ÐE ÐE `E ÐE °E °E E  E ÐE pE °E @E 0E `E pE pE �E pE pE àE E 0E `E ÀE àE E �E PE pE °E E @E PE °E àE €E €E �E ðE 0E pE �E  E  E E  E pE €E °E @E €E ÀE ÐE ð E  !E @!E €!E  !E 0"E `"E €"E  #E p$E  %E  &E `&E p&E °&E Ð&E  'E @'E �'E Ð'E (E )E @)E €)E  *E @*E P*E �+E �+E À+E 0,E `,E 0-E  .E `.E °.E 0/E 0E @0E �0E °0E ð0E  1E  1E €1E Ð1E à2E à2E @3E p3E ð3E 5E  5E P5E À5E 6E  7E `7E �9E @:E p:E �:E °:E @;E P;E `;E �;E  ;E Ð;E Ð;E à;E  =E 0=E À=E À=E €>E  >E @?E `?E p?E €?E `AE pAE �AE àCE  DE �DE �DE àDE ðDE `EE  GE °GE ðGE  HE PHE `HE �HE `IE PJE  JE KE  KE 0KE PKE `KE  ME `ME ÀME °NE @OE POE °OE ðOE �QE  QE ðQE `SE €SE ÀSE ÀTE UE ðVE  WE ÀWE ðWE °YE @[E €[E À[E P\E p\E €\E ]E  ]E @^E �^E �^E  ^E  _E  _E  `E @`E  aE 0aE PaE €aE ÀaE àaE °bE pcE ðcE �dE  dE °eE ÀfE  gE @gE @hE àhE @iE €jE �jE àjE 0kE €kE ÐkE @lE �lE �nE °nE 0pE �pE �pE `qE €qE ÀsE �tE  uE  vE pvE PwE `zE @{E @|E @}E ~E @~E 0E pE ÐE àE €E H€E °€E °€E À€E à€E �E �E @�E P�E €�E ¨�E 8‚E À‚E 8ƒE �ƒE ¸ƒE àƒE øƒE H„E `„E h„E ¸„E Ø„E ø„E ø…E ø†E (‡E P‡E °‡E È‡E ˜ˆE ÀˆE 0‰E HŠE €ŠE  ‹E ˆ‹E ¸‹E Ø‹E °ŒE @�E °�E (ŽE ÈŽE h�E ˜�E  �E ø�E �E È�E @‘E H‘E ˆ‘E  ‘E Ø‘E ð‘E ø‘E “E “E ˆ“E x”E ¨•E 0–E  —E X—E ˜—E ø—E ˜E è˜E  ™E à™E HšE PšE xšE ÀšE ÈšE ¨›E ÐœE øœE P�E ˆ�E ðžE  ŸE hŸE ÈŸE  E P E à E x¡E ø¡E  ¢E X¢E ˜¢E P£E ˆ£E ¤E ¤E 0¤E €¤E Ð¤E ø¤E (¥E ¸¦E À¦E §E ˜§E è§E à¨E ©E ©E @ªE 8«E x«E ­E H­E h­E ˜­E À­E X°E È°E à°E ð°E h±E È±E ²E 8²E ³E @³E €´E h¶E È·E ¸E 8¸E X¸E  ¸E 8¹E à»E ¾E (¾E 0¿E h¿E pÀE ˜ÀE àÀE 0ÁE HÁE °ÁE @ÂE HÂE  ÂE ˆÃE ¨ÃE ¸ÃE ÐÄE 0ÅE @ÆE ÈÆE ÐÈE pÉE ÌE @ÌE ØÌE `ÍE ØÍE (ÎE XÏE 0ÒE àÒE (ÓE pÔE ØÔE pÕE €ÕE ÀÕE XÖE È×E xÙE  ÛE @ÛE èÝE ÐßE (àE áE 8áE 8âE ¸âE ÈäE hæE ¨çE ðéE ˆêE àêE XëE ÀíE @ðE hñE òE XóE ðóE hôE pôE øöE øE HøE hF ìF F HF ¸F ØF PF 
F dF �F F àF ÈF øF F XF dF F °F üF„¡yÈDZ(†:‡<I;‡<I;Z(†;q²§;žÆê;žÆê;Z(<eí<q²'<|w8<‡<I<’Z<žÆj<©‹{<Z(†<àŠŽ<eí–<ëOŸ<q²§<|w¸<|w¸<‡<É<‡<É<ŸÑ<’Ú<dâ<žÆê<#)ó<©‹û<÷=Z(=�Y
=àŠ=#¼=eí=ëO=ëO=.�#=q²'=³ã+=ö0=9F4=|w8=¿¨<=Ú@=DE=‡<I=ÊmM=PÐU=PÐU=’Z=db=db=[•f=žÆj=#)s=#)s=fZw=©‹{=ì¼=÷�=Z(†=Z(†=ü@ˆ=>rŒ=>rŒ=àŠŽ=�£�=#¼’=ÄÔ”=eí–=J7�=J7�=J7�=ëOŸ=Œh¡=.�£=Ï™¥=q²§=Ë©=³ã«=Uü­=ö°=˜-²=9F´=Û^¶=|w¸=¿¨¼=¿¨¼=`Á¾=£òÂ=£òÂ=DÅ=æ#Ç=‡<É=)UË=ÊmÍ=k†Ï=ŸÑ=®·Ó=ñè×=ñè×=’Ú=4Ü=Õ2Þ=wKà=º|ä=º|ä=[•æ=ü­è=?ßì=?ßì=‚ñ=‚ñ=ÅAõ=ÅAõ=fZ÷=sù=©‹û=J¤ý=ì¼ÿ=Çê >÷>h>Z(>Z(>Z(>«4>ü@>LM	>�Y
>îe>>r>�~>0—>0—>�£>Ò¯>#¼>sÈ>ÄÔ>á>eí>¶ù>>X>ù*>ù*>J7>šC><\ ><\ >Ýt">Ýt">.�#>�$>Ï™%> ¦&>q²'>Á¾(>Ë)>³ã+>³ã+>Uü->Uü->¦/>ö0>G!1>˜-2>è93>9F4>ŠR5>Û^6>+k7>|w8>Íƒ9>¿¨<>¿¨<>¿¨<>µ=>`Á>>±Í?>Ú@>RæA>£òB>ôþC>•F>•F>æ#G>70H>‡<I>ØHJ>)UK>yaL>zN>zN>k†O>¼’P>ŸQ>^«R>®·S>ÿÃT>PÐU> ÜV>ñèW>BõX>’Z>ã[>…&]>…&]>Õ2^>&?_>wK`>ÇWa>db>ipc>º|d>
‰e>[•f>¬¡g>ü­h>žÆj>žÆj>îÒk>?ßl>1p>1p>1p>‚q>Ór>#)s>t5t>ÅAu>Nv>fZw>·fx>sy>Xz>©‹{>ú—|>J¤}>ì¼>ì¼>žd€>Çê€>ïp�>÷�>@}‚>hƒ>�‰ƒ>¹„>á•„>2¢…>2¢…>Z(†>Óº‡>Óº‡>Óº‡>$Çˆ>$Çˆ>LM‰>uÓ‰>�YŠ>ÅßŠ>îe‹>ì‹>>rŒ>gøŒ>�~�>·Ž>àŠŽ>�>0—�>Y�>ª)‘>ª)‘>Ò¯‘>ú5’>KB“>KB“>sÈ“>œN”>ìZ•>ìZ•>á•>=g–>eí–>Žs—>¶ù—>Þ˜>™>/Œ™>Xš>€˜š>¨›>Ñ¤›>ù*œ>!±œ>J7�>r½�>šCž>ÃÉž>ëOŸ>ÖŸ><\ >dâ >Œh¡>µî¡>Ýt¢>û¢>.�£>V¤>§¥>§¥>Ï™¥>ø¦>H,§>H,§>q²§>™8¨>Á¾¨>êD©>Ë©>:Qª>c×ª>³ã«>³ã«>Üi¬>ð¬>}‚®>}‚®>}‚®>¦¯>ÎŽ¯>ö°>›°>G!±>o§±>À³²>À³²>è9³>À³>9F´>aÌ´>ŠRµ>Û^¶>Û^¶>å¶>+k·>Tñ·>|w¸>¤ý¸>Íƒ¹>�º>�º>F»>nœ»>–"¼>¿¨¼>ç.½>µ½>8;¾>`Á¾>‰G¿>±Í¿>ÙSÀ>ÚÀ>*`Á>RæÁ>{lÂ>£òÂ>ôþÃ>ôþÃ>…Ä>DÅ>m‘Å>•Æ>½�Æ>ªÇ>ªÇ>‡<É>‡<É>‡<É>°ÂÉ>ØHÊ> ÏÊ>)UË>QÛË>yaÌ>¢çÌ>ÊmÍ>òóÍ>zÎ>C Ï>k†Ï>”Ð>¼’Ð>äÑ>ŸÑ>5%Ò>^«Ò>†1Ó>®·Ó>×=Ô>ÿÃÔ>'JÕ>xVÖ>xVÖ> ÜÖ>ñè×>ñè×>oØ>BõØ>j{Ù>»‡Ú>»‡Ú>ãÛ>”Û>4Ü>\ Ü>…&Ý>Õ2Þ>Õ2Þ>þ¸Þ>&?ß>NÅß>wKà>ŸÑà>ÇWá>ðÝá>@êâ>@êâ>ipã>º|ä>º|ä>âå>
‰å>3æ>[•æ>ƒç>¬¡ç>Ô'è>ü­è>%4é>Mºé>u@ê>žÆê>ÆLë>îÒë>Yì>?ßì>heí>�ëí>¸qî>á÷î>	~ï>1ð>ZŠð>‚ñ>ª–ñ>Óò>û¢ò>#)ó>L¯ó>t5ô>œ»ô>ÅAõ>íÇõ>Nö>>Ôö>fZ÷>�à÷>·fø>ßìø>sù>0ùù>Xú>©‹û>©‹û>Ñü>ú—ü>"ý>J¤ý>s*þ>›°þ>Ã6ÿ>ì¼ÿ>Š! ?žd ?²§ ?Çê ?Û-?ïp?´?+:?+:?@}?TÀ?h?¥Ì?¥Ì?¥Ì?¹?ÍR?á•?õØ?	?_?2¢?Z(?Z(?nk?‚®?—ñ?«4?¿w?Óº?çý?ü@?$Ç?$Ç?8
	?LM	?`�	?uÓ	?‰
?�Y
?±œ
?Åß
?îe?îe?©?*/?*/?Sµ?Sµ?gø?{;?�~?£Á?·?ÌG?àŠ?ôÍ??T?0—?EÚ?Y?m`?�£?•æ?ª)?¾l?Ò¯?æò?ú5?y?#¼?7ÿ?KB?_…?‡?‡?œN?°‘?ÄÔ?Ø?ìZ?ž?á?)$?=g?Qª?z0?z0?¢¶?¢¶?¶ù?Ê<?Þ?óÂ??I?/Œ?CÏ?X?lU?€˜?”Û?¨?¼a?Ñ¤?åç?ù*?n?!±?5ô?J7?r½?r½?† ?šC?¯†?ÃÉ?×?ëO?ÿ’?Ö?( ?<\ ?PŸ ?dâ ?x%!?¡«!?¡«!?µî!?É1"?Ýt"?ñ·"?û"?>#?.�#?BÄ#?V$?jJ$?“Ð$?“Ð$?§%?»V%?Ï™%?ãÜ%?ø&?c&? ¦&?4é&?H,'?\o'?q²'?…õ'?™8(?­{(?Á¾(?Ö)?êD)?Ë)?Ë)?&*?:Q*?O”*?c×*?w+?‹]+?Ÿ +?³ã+?È&,?Üi,?ð¬,?ð,?3-?-v-?A¹-?Uü-?i?.?}‚.?‘Å.?ºK/?ºK/?ÎŽ/?ö0?ö0?
X0?›0?3Þ0?G!1?[d1?o§1?„ê1?˜-2?¬p2?À³2?Ôö2?è93?ý|3?À3?%4?9F4?M‰4?aÌ4?v5?ŠR5?ž•5?²Ø5?Æ6?Û^6?ï¡6?å6?(7?+k7??®7?Tñ7?h48?|w8?�º8?¤ý8?¸@9?Íƒ9?áÆ9?õ	:?	M:?�:?2Ó:?F;?ZY;?nœ;?‚ß;?–"<?«e<?¿¨<?Óë<?ç.=?ûq=?µ=?$ø=?8;>?L~>?`Á>?t??‰G??�Š??±Í??Å@?ÙS@?í–@?Ú@?A?*`A?>£A?RæA?f)B?{lB?�¯B?£òB?·5C?à»C?à»C?ôþC?BD?…D?0ÈD?DE?YNE?m‘E?�ÔE?•F?©ZF?½�F?ÒàF?úfG?úfG?ªG?"íG?70H?KsH?_¶H?sùH?‡<I?›I?°ÂI?ÄJ?ØHJ?ì‹J? ÏJ?K?)UK?=˜K?QÛK?eL?yaL?�¤L?¢çL?¶*M?ÊmM?Þ°M?òóM?7N?zN?/½N?C O?WCO?k†O?€ÉO?”P?¨OP?¼’P?ÐÕP?äQ?ù[Q?ŸQ?!âQ?5%R?IhR?^«R?rîR?†1S?štS?®·S?ÂúS?×=T?ë€T?ÿÃT?U?'JU?;�U?PÐU?dV?xVV?Œ™V? ÜV?µW?ÉbW?Ý¥W?ñèW?,X?oX?.²X?BõX?V8Y?j{Y?~¾Y?’Z?»‡Z?»‡Z?ÏÊZ?ã[?÷P[?”[? ×[?4\?H]\?\ \?pã\?…&]?™i]?­¬]?Áï]?Õ2^?éu^?þ¸^?ü^?&?_?:‚_?NÅ_?c`?wK`?‹Ž`?ŸÑ`?³a?ÇWa?Üša?ðÝa?!b?db?,§b?@êb?U-c?ipc?}³c?‘öc?¥9d?º|d?Î¿d?âe?öEe?
‰e?Ìe?3f?GRf?[•f?oØf?ƒg?—^g?¬¡g?Àäg?Ô'h?èjh?ü­h?ñh?%4i?9wi?Mºi?aýi?u@j?Šƒj?žÆj?²	k?ÆLk?Ú�k?îÒk?l?Yl?+œl??ßl?S"m?hem?|¨m?�ëm?¤.n?¸qn?Ì´n?á÷n?õ:o?	~o?Áo?1p?EGp?ZŠp?nÍp?‚q?–Sq?ª–q?¾Ùq?Ór?ç_r?û¢r?ær?#)s?8ls?L¯s?`òs?t5t?ˆxt?œ»t?±þt?ÅAu?Ù„u?íÇu?v?Nv?*‘v?>Ôv?Rw?fZw?z�w?�àw?£#x?·fx?Ë©x?ßìx?ó/y?sy?¶y?0ùy?D<z?Xz?lÂz?�{?•H{?©‹{?½Î{?Ñ|?æT|?ú—|?Û|?"}?6a}?J¤}?_ç}?s*~?‡m~?›°~?¯ó~?Ã6?Øy?ì¼?  €?¤type§scatter¤name­Random Policy¡xÈD  ˆA  ˜A  ˜A   A  ÈA  ØA  ØA  àA  B  B  $B  (B  0B  PB  lB  xB  |B  „B  ˆB  ŠB  ŒB  ŒB  ¦B  ¦B  ªB  ®B  ²B  ¶B  ¸B  ¼B  ¾B  ÄB  ÆB  ÊB  ØB  ÚB  èB  èB  òB   C  C  C  C  C  C  C  "C  $C  *C  3C  3C  5C  6C  6C  8C  ;C  ?C  ?C  CC  GC  IC  JC  MC  MC  QC  WC  WC  ]C  hC  jC  lC  mC  pC  pC  pC  rC  sC  vC  xC  yC  }C  C  €C €€C  ‚C €‚C  ƒC €†C €ŠC €ŠC  ‹C  �C  �C €�C €�C  ’C €’C  “C  ”C  ™C  œC  žC  žC €žC €ŸC €¡C €¢C  £C  £C €«C  ­C €®C €®C €¯C €¯C €²C €²C €³C €¶C €¹C €»C €¾C  ¿C €¿C €ÀC  ÃC  ÃC  ÃC €ÄC  ÅC  ÇC €ÇC  ÊC  ËC  ÌC  ÏC  ÏC €ÏC  ÔC  ÖC €ØC  ÙC  ÚC €ÚC €ÛC  ÜC €ßC  àC  àC  áC  äC €äC €äC  çC  çC  êC €êC €ëC €îC  ïC €ïC  ñC €ñC €ñC  ÷C  ÷C €÷C  ùC  úC €ûC  ýC €þC  ÿC €ÿC  D  D €D  D  D  D ÀD €D ÀD  	D @	D ÀD €D ÀD ÀD @D ÀD €D ÀD ÀD  D ÀD ÀD  D ÀD  D @D ÀD €D @D  D €D @D @D ÀD €D €D ÀD @D ÀD €D €D ÀD   D @ D € D À D  "D À"D À"D @$D €$D À$D À$D À$D €%D À%D  &D @&D @)D  +D @+D À,D À-D @.D  0D  1D @1D  2D  2D @7D €7D À8D  9D  :D  =D €=D €?D ÀAD €CD €CD @DD €DD €DD €DD  ED  ED @FD €HD ÀHD @ID €ID  KD @KD €KD @LD €LD  MD €MD €ND €OD  SD  SD €SD ÀSD  TD  TD ÀTD  UD @UD @UD @WD  XD  ZD @ZD  ]D €]D €^D  _D @_D €_D @`D À`D  aD @bD ÀcD €eD ÀfD @gD €hD €iD €kD @lD ÀlD @mD @pD €pD ÀrD ÀsD  tD  tD  vD €vD ÀvD ÀvD ÀzD  |D €|D À|D  }D  ~D  €D @�D @�D  ‚D  ƒD  ƒD  ƒD  ƒD  ƒD ÀƒD  „D  …D @…D  ‡D @ˆD @ˆD `ˆD @ŠD €ŠD  ŠD @‹D  ‹D  ‹D à‹D  ŒD  ŒD  �D €�D À�D à�D à�D  ŽD @�D  �D  ‘D @’D À’D à’D @“D €“D  ”D à”D à•D  —D  —D €—D  ˜D À˜D À˜D  ™D `™D  šD @›D  ›D  �D  �D  žD  žD  žD ÀžD  ŸD  ¡D €¡D `¢D  ¢D À¢D  ¤D  ¤D `¥D €¦D à¦D @§D à§D `¨D  ©D  ©D  «D €¬D  ­D  ­D À­D à­D À®D À®D  ¯D €°D €°D  ±D €±D  ²D À²D À²D `³D  ´D  µD ÀµD àµD à·D à·D `¸D `¹D €ºD  »D `»D À»D @¼D `ÁD `ÁD €ÄD àÄD àÄD `ÆD  ÆD  ÇD @ÈD `ÈD €ÈD  ÉD  ÉD €ÉD ÀÉD  ÊD €ÊD  ÊD ÀÊD àÊD  ÌD €ÍD  ÎD @ÎD  ÎD  ÏD @ÏD  ÑD €ÒD ÀÒD ÀÓD àÓD  ÔD €ÔD àÔD @ÕD `ÕD àÕD àÖD  ×D @ØD `ØD  ÚD ÀÚD ÀÜD ÀÝD  ÞD  ÞD  ÞD ÀÞD àÞD  ßD ÀßD  àD @àD `àD ààD  áD €áD ÀáD €âD €åD `çD `èD  èD  èD àéD  êD €ëD  íD  íD  íD àíD  îD ÀîD  ïD @ïD ÀðD  ñD €ñD €ñD àñD @òD @óD `ôD  õD  öD àöD  ÷D  ùD  ùD àùD `úD ÀúD €ûD  þD  ÿD à E ÀE àE àE  E ÀE ÀE ÐE ÐE pE €E °E PE �E €E E ÀE  	E @	E €	E °	E À	E À
E àE `E  E @E ÐE @E €E �E E €E PE €E ÀE ÀE 0E �E °E ÐE  E  E @E  E pE  E ÐE ÐE àE àE àE PE @E �E ðE �E  E E PE `E �E °E E PE �E €E °E àE @E `E €E  E  E ÐE `E €E   E   E 0 E ° E Ð E @!E `!E ð!E `"E €"E À#E À#E Ð#E  $E °$E À$E  %E Ð%E à&E p'E À'E ð'E p(E p(E `)E €)E �)E °)E À)E  *E  *E �*E Ð*E à*E  +E P+E Ð+E ,E 0,E Ð,E °-E Ð-E Ð-E .E €.E  .E 0/E P/E €/E °/E 0E p1E ð1E `2E @3E  4E °4E 05E @5E °5E  6E @7E à8E à8E Ð9E ð9E ð9E P:E p:E  ;E p;E <E  >E  ?E P?E à?E PAE  AE àAE @CE PCE ÐFE 0GE `GE �GE ðGE @HE €HE  HE pIE €IE àJE PKE `KE ÀKE ÐKE @LE °LE ÀLE €ME °ME PNE pNE ðNE �OE ÀOE PQE àQE ðQE @RE €RE �SE ðSE  TE 0TE @TE �TE ÐTE °UE ðUE ÐVE WE pWE 0XE PXE ÀYE ZE 0ZE °ZE �[E 0\E  \E @]E €]E Ð]E à^E ``E €`E  aE  aE �aE �aE àaE  cE �dE  dE àdE �eE  eE ÀeE ðeE ðfE hE  jE kE kE ÀkE ðkE ÀmE ðmE `nE  oE @oE €pE �pE àpE qE °qE ÀrE  sE €sE uE  vE @vE @wE °wE  yE {E ð}E °~E pE ÐE h€E p€E Ð€E ð€E H�E (‚E PƒE pƒE øƒE „E …E 8…E †E ˜†E è†E  ‡E ˆE @ˆE XˆE ˆˆE ÐˆE `‰E à‹E è‹E xŒE €ŒE (�E P�E x�E ŽE 8ŽE øŽE @�E H�E h�E  �E È�E à�E H�E ��E ˜�E (‘E X‘E è‘E  ’E P“E P“E p”E x”E €”E ˆ•E °–E Ð–E —E ˜E ¸˜E 8™E °™E øšE ›E ðœE  �E 8�E žE  žE HžE XžE ¨žE ÀžE èžE ˆŸE   E X E   E Ø E ð¡E  ¢E H¢E h¢E ˜£E H¤E H¦E X¦E §E ˜§E  ¨E 0¨E h©E p©E  ©E 0ªE HªE `ªE ˆ«E ¸«E à²E À³E 8´E H´E  ¶E P¶E è¶E P¸E `¸E  ¸E �¹E (ºE ÐºE  ¼E X¼E ¨¼E h¾E ø¾E (¿E 8¿E �¿E ð¿E ÀE øÅE (ÇE �ÇE àÇE èÇE ÊE øÍE ÎE 0ÎE èÎE ¸ÏE xÐE ˆÑE  ÒE °ÔE èÕE PÖE Ð×E ˆØE HÙE  ÚE øÚE ÛE øÛE PÜE øÝE 8æE ÐìE @ðE ÀðE ðñE ÐòE øôE xõE ÀõE xøE ðøE øøE ˆùE ðúE ûE (ûE øûE �ÿE P F |F ÐF èF ¬F ,F HF ¤F °F ´F xF ÄF äF 8	F ˜
F È
F Ô
F Ø
F è
F DF ÀF ÌF XF F \F ìF ,F FÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/4632010f9ca3f26e„¦layout†¥xaxisƒ¨tickvalsÇ(  €?   @  @@  €@   @  À@  à@   A  A   A¥title�¤text®Dealer showing¨ticktextš¡AÊ@   Ê@@  Ê@€  Ê@   Ê@À  Ê@à  ÊA   ÊA  ÊA   ¨template‚¦layoutÞ ©coloraxis�¨colorbar‚¥ticks ¬outlinewidthÊ    ¥xaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white©hovermode§closest­paper_bgcolor¥white£geo†©showlakesÃ¨showlandÃ©landcolor§#E5ECF6§bgcolor¥white¬subunitcolor¥white©lakecolor¥whiteªcolorscaleƒªsequentialš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921©diverging›’Ê    §#8e0152’Ê=ÌÌÍ§#c51b7d’Ê>LÌÍ§#de77ae’Ê>™™š§#f1b6da’Ê>ÌÌÍ§#fde0ef’Ê?   §#f7f7f7’Ê?™š§#e6f5d0’Ê?333§#b8e186’Ê?LÌÍ§#7fbc41’Ê?fff§#4d9221’Ê?€  §#276419¯sequentialminusš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921¥yaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white­shapedefaults�¤line�¥color§#2a3f5fªhoverlabel�¥align¤left¦mapbox�¥style¥light¥polarƒ«angularaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6ªradialaxisƒ©gridcolor¥white¥ticks ©linecolor¥white¯autotypenumbers¦strict¤font�¥color§#2a3f5f§ternary„¥aaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6¥caxisƒ©gridcolor¥white¥ticks ©linecolor¥white¥baxisƒ©gridcolor¥white¥ticks ©linecolor¥white²annotationdefaultsƒ©arrowheadÊ    ªarrowwidthÊ?€  ªarrowcolor§#2a3f5f¬plot_bgcolor§#E5ECF6¥title�¡xÊ=LÌÍ¥sceneƒ¥xaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥zaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥yaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¨colorwayš§#636efa§#EF553B§#00cc96§#ab63fa§#FFA15A§#19d3f3§#FF6692§#B6E880§#FF97FF§#FECB52¤dataÞ ®scatterpolargl‘‚¤type®scatterpolargl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦carpet‘ƒ¥baxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¤type¦carpet¥aaxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¬scatterpolar‘‚¤type¬scatterpolar¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©parcoords‘‚¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©parcoords§scatter‘‚¤type§scatter¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ²histogram2dcontour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type²histogram2dcontourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921§contour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§contourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattercarpet‘‚¤type­scattercarpet¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦mesh3d‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type¦mesh3d§surface‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§surfaceªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattermapbox‘‚¤type­scattermapbox¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ªscattergeo‘‚¤typeªscattergeo¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©histogram‘‚¤type©histogram¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    £pie‘‚¤type£pieªautomarginÃªchoropleth‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤typeªchoropleth©heatmapgl‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©heatmapglªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921£bar‘„¤type£bar§error_y�¥color§#2a3f5f§error_x�¥color§#2a3f5f¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   §heatmap‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§heatmapªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­contourcarpet‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type­contourcarpet¥table‘ƒ¤type¥table¦header‚¤line�¥color¥white¤fill�¥color§#C8D4E3¥cells‚¤line�¥color¥white¤fill�¥color§#EBF0F8©scatter3d‘ƒ¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©scatter3d¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¨barpolar‘‚¤type¨barpolar¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   ©scattergl‘‚¤type©scattergl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    «histogram2d‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type«histogram2dªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921®scatterternary‘‚¤type®scatterternary¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦heightÊC–  ¦margin„¡lÊ    ¡bÊ    ¡rÊA   ¡tÊAð  ¥yaxisƒ¨tickvalsÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¥title�¤textªPlayer sum¨ticktextÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¥widthÊC–  ¦config…¨showLinkÂ¨editableÂªresponsiveÃªstaticPlotÂªscrollZoomÃ¦frames�¤data‘‰¤zmaxÊ?€  ¡yÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¤type§heatmapªcolorscale¥Greys¤zminÊ¿€  ¡zšÇ(fff?fff?fff?fff?fff?fff¿fff¿fff¿fff¿fff¿Ç(fff?fff¿fff¿fff¿fff¿fff¿fff¿fff¿fff¿fff¿Ç(fff¿fff¿fff¿fff¿fff¿fff¿fff¿fff¿fff¿fff¿Ç(fff¿fff¿fff¿fff¿fff¿fff¿fff¿fff¿fff¿fff¿Ç(fff¿fff¿fff¿fff¿fff¿fff¿fff¿fff¿fff¿fff¿Ç(fff¿fff¿fff¿fff¿fff¿fff¿fff¿fff¿fff¿fff¿Ç(fff?fff?fff?fff?fff?fff¿fff¿fff¿fff¿fff¿Ç(fff?fff?fff?fff?fff?fff¿fff¿fff¿fff¿fff¿Ç(fff?fff?fff?fff?fff¿fff¿fff¿fff¿fff¿fff¿Ç(fff?fff?fff?fff¿fff¿fff¿fff¿fff¿fff¿fff¿©transposeÃ©showscaleÂ¡xÇ(  €?   @  @@  €@   @  À@  à@   A  A   AÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/6a054f00f0376f57„¦layout„¥xaxis‚¤type£log¥title�¤text´Steps to Finish Race¨template‚¦layoutÞ ©coloraxis�¨colorbar‚¥ticks ¬outlinewidthÊ    ¥xaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white©hovermode§closest­paper_bgcolor¥white£geo†©showlakesÃ¨showlandÃ©landcolor§#E5ECF6§bgcolor¥white¬subunitcolor¥white©lakecolor¥whiteªcolorscaleƒªsequentialš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921©diverging›’Ê    §#8e0152’Ê=ÌÌÍ§#c51b7d’Ê>LÌÍ§#de77ae’Ê>™™š§#f1b6da’Ê>ÌÌÍ§#fde0ef’Ê?   §#f7f7f7’Ê?™š§#e6f5d0’Ê?333§#b8e186’Ê?LÌÍ§#7fbc41’Ê?fff§#4d9221’Ê?€  §#276419¯sequentialminusš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921¥yaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white­shapedefaults�¤line�¥color§#2a3f5fªhoverlabel�¥align¤left¦mapbox�¥style¥light¥polarƒ«angularaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6ªradialaxisƒ©gridcolor¥white¥ticks ©linecolor¥white¯autotypenumbers¦strict¤font�¥color§#2a3f5f§ternary„¥aaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6¥caxisƒ©gridcolor¥white¥ticks ©linecolor¥white¥baxisƒ©gridcolor¥white¥ticks ©linecolor¥white²annotationdefaultsƒ©arrowheadÊ    ªarrowwidthÊ?€  ªarrowcolor§#2a3f5f¬plot_bgcolor§#E5ECF6¥title�¡xÊ=LÌÍ¥sceneƒ¥xaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥zaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥yaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¨colorwayš§#636efa§#EF553B§#00cc96§#ab63fa§#FFA15A§#19d3f3§#FF6692§#B6E880§#FF97FF§#FECB52¤dataÞ ®scatterpolargl‘‚¤type®scatterpolargl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦carpet‘ƒ¥baxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¤type¦carpet¥aaxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¬scatterpolar‘‚¤type¬scatterpolar¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©parcoords‘‚¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©parcoords§scatter‘‚¤type§scatter¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ²histogram2dcontour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type²histogram2dcontourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921§contour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§contourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattercarpet‘‚¤type­scattercarpet¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦mesh3d‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type¦mesh3d§surface‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§surfaceªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattermapbox‘‚¤type­scattermapbox¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ªscattergeo‘‚¤typeªscattergeo¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©histogram‘‚¤type©histogram¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    £pie‘‚¤type£pieªautomarginÃªchoropleth‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤typeªchoropleth©heatmapgl‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©heatmapglªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921£bar‘„¤type£bar§error_y�¥color§#2a3f5f§error_x�¥color§#2a3f5f¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   §heatmap‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§heatmapªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­contourcarpet‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type­contourcarpet¥table‘ƒ¤type¥table¦header‚¤line�¥color¥white¤fill�¥color§#C8D4E3¥cells‚¤line�¥color¥white¤fill�¥color§#EBF0F8©scatter3d‘ƒ¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©scatter3d¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¨barpolar‘‚¤type¨barpolar¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   ©scattergl‘‚¤type©scattergl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    «histogram2d‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type«histogram2dªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921®scatterternary‘‚¤type®scatterternary¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦margin„¡lÊBH  ¡bÊBH  ¡rÊBH  ¡tÊBp  ¥yaxis�¥title�¤text³Percent of Episodes¦config…¨showLinkÂ¨editableÂªresponsiveÃªstaticPlotÂªscrollZoomÃ¦frames�¤data’„¡yÈ oƒ:o;\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=\�Â=ôýÔ=ôýÔ=ôýÔ=ôýÔ=ôýÔ=ôýÔ=ôýÔ=ôýÔ=ôýÔ=h‘í=h‘í=h‘í=h‘í=h‘í=h‘í=h‘í=h‘í=h‘í=h‘í=h‘í=h‘í=Nb>Nb>Nb>Nb>Nb>Nb>Nb>Nb>Nb>Nb>Nb>Nb>Nb>Nb>Nb>Nb>Nb>Nb>Nb>Nb>Nb>Nb>Nb>Nb>Nb>P�>P�>P�>P�>P�>P�>P�>
×#>
×#>
×#>
×#>
×#>
×#>
×#>
×#>
×#>
×#>
×#>
×#>ìQ8>ìQ8>ìQ8>ìQ8>ìQ8>ìQ8>ìQ8>ìQ8>ìQ8>ìQ8>ìQ8>ìQ8>ìQ8>ìQ8>ìQ8>ìQ8>ìQ8>ìQ8>ìQ8>ìQ8>7‰A>7‰A>7‰A>7‰A>7‰A>7‰A>7‰A>7‰A>7‰A>ƒÀJ>ƒÀJ>ƒÀJ>ƒÀJ>ƒÀJ>ƒÀJ>ƒÀJ>ƒÀJ>ƒÀJ>ôýT>ôýT>ôýT>ôýT>ôýT>ôýT>ôýT>ôýT>ôýT>ôýT>®Ga>®Ga>®Ga>®Ga>®Ga>®Ga>®Ga>®Ga>®Ga>®Ga>®Ga>®Ga>ü©q>ü©q>ü©q>ü©q>ü©q>ü©q>ü©q>ü©q>ü©q>ü©q>ü©q>ü©q>ü©q>ü©q>ü©q>ü©q>Ház>Ház>Ház>Ház>Ház>Ház>Ház>Ház>Ház>�•ƒ>�•ƒ>�•ƒ>�•ƒ>�•ƒ>�•ƒ>�•ƒ>�•ƒ>�•ƒ>�•ƒ>�•ƒ>�•ƒ>L7‰>L7‰>L7‰>L7‰>L7‰>L7‰>L7‰>L7‰>L7‰>L7‰>L7‰>ßO�>ßO�>ßO�>ßO�>ßO�>ßO�>ßO�>ßO�>áz”>áz”>áz”>áz”>áz”>áz”>áz”>áz”>áz”>áz”>áz”>áz”>áz”>áz”>¬š>¬š>¬š>¬š>¬š>¬š>¬š>¬š>¬š>¬š>¬š>®G¡>®G¡>®G¡>®G¡>®G¡>®G¡>®G¡>®G¡>®G¡>®G¡>®G¡>®G¡>®G¡>®G¡>‹l§>‹l§>‹l§>‹l§>‹l§>‹l§>‹l§>‹l§>‹l§>‹l§>‹l§>‹l§>V­>V­>V­>V­>V­>V­>V­>V­>V­>V­>V­>é&±>é&±>é&±>é&±>é&±>é&±>é&±>é&±>�Âµ>�Âµ>�Âµ>�Âµ>�Âµ>�Âµ>�Âµ>�Âµ>�Âµ>Háº>Háº>Háº>Háº>Háº>Háº>Háº>Háº>Háº>Háº>¶ó½>¶ó½>¶ó½>¶ó½>¶ó½>¶ó½>“Ä>“Ä>“Ä>“Ä>“Ä>“Ä>“Ä>“Ä>“Ä>“Ä>“Ä>“Ä>^ºÉ>^ºÉ>^ºÉ>^ºÉ>^ºÉ>^ºÉ>^ºÉ>^ºÉ>^ºÉ>^ºÉ>^ºÉ>)\Ï>)\Ï>)\Ï>)\Ï>)\Ï>)\Ï>)\Ï>)\Ï>)\Ï>)\Ï>)\Ï>ázÔ>ázÔ>ázÔ>ázÔ>ázÔ>ázÔ>ázÔ>ázÔ>ázÔ>ázÔ>¬Ú>¬Ú>¬Ú>¬Ú>¬Ú>¬Ú>¬Ú>¬Ú>¬Ú>¬Ú>¬Ú>œÄà>œÄà>œÄà>œÄà>œÄà>œÄà>œÄà>œÄà>œÄà>œÄà>œÄà>œÄà>œÄà>yéæ>yéæ>yéæ>yéæ>yéæ>yéæ>yéæ>yéæ>yéæ>yéæ>yéæ>yéæ>Õxé>Õxé>Õxé>Õxé>Õxé>D‹ì>D‹ì>D‹ì>D‹ì>D‹ì>D‹ì>Å ð>Å ð>Å ð>Å ð>Å ð>Å ð>Å ð>j¼ô>j¼ô>j¼ô>j¼ô>j¼ô>j¼ô>j¼ô>j¼ô>j¼ô>¢Eö>¢Eö>¢Eö>#Ûù>#Ûù>#Ûù>#Ûù>#Ûù>#Ûù>#Ûù>‘íü>‘íü>‘íü>‘íü>‘íü>‘íü>ƒ ?ƒ ?ƒ ?ƒ ?ƒ ?ƒ ?ƒ ?ƒ ?�•?�•?�•?�•?�•?�•?�•?�•?�•?�•?�•?�•?¸?¸?¸?¸?¸?¸?yé?yé?yé?yé?yé?yé?yé?žï?žï?žï?žï?L7	?L7	?L7	?L7	?L7	?ƒÀ
?ƒÀ
?ƒÀ
?ƒÀ
?ƒÀ
?ƒÀ
?V?V?V?V?V?V?V?V?V?Ù?Ù?Ù?Ù?Ù?Ù?Ù?²�?²�?²�?`å?`å?`å?`å?`å?33?33?33?33?33?33?33?33?33?ôý?ôý?ôý?ôý?ôý?ôý?ôý?¢E?¢E?¢E?¢E?¢E?ÇK?ÇK?ÇK?ÇK?ìQ?ìQ?ìQ?ìQ?5^?5^?5^?5^?5^?5^?5^?5^?j?j?j?j?j?j?j?j?‘í?‘í?d;?d;?d;?d;?d;?d;?d;?d;?d;?ƒ ?ƒ ?ƒ ?ƒ ?ƒ ?%!?%!?J"?J"?J"?J"?
×#?
×#?
×#?
×#?
×#?
×#?
×#?B`%?B`%?B`%?B`%?B`%?B`%?Ý$&?Ý$&?Ý$&?+'?+'?+'?+'?°r(?°r(?°r(?°r(?°r(?çû)?çû)?çû)?çû)?çû)?çû)?+?+?+?+?–C+?ÍÌ,?ÍÌ,?ÍÌ,?ÍÌ,?ÍÌ,?ÍÌ,?h‘-?h‘-?h‘-?;ß/?;ß/?;ß/?;ß/?;ß/?;ß/?;ß/?;ß/?;ß/?×£0?×£0?×£0?˜n2?˜n2?˜n2?˜n2?˜n2?˜n2?˜n2?333?333?333?F¶3?F¶3?X94?X94?}?5?}?5?}?5?}?5?6?6?6?ÇK7?ÇK7?ÇK7?ÇK7?ÇK7?þÔ8?þÔ8?þÔ8?þÔ8?þÔ8?þÔ8?¾Ÿ:?¾Ÿ:?¾Ÿ:?¾Ÿ:?¾Ÿ:?¾Ÿ:?¾Ÿ:?Ñ";?Ñ";?mç;?mç;?mç;?/=?/=?/=?/=?/=??5>??5>??5>??5>?R¸>?R¸>?d;??d;??w¾??w¾??%A?%A?%A?%A?%A?7‰A?7‰A?JB?JB?øSC?øSC?øSC?øSC?øSC?“D?“D?“D?¸E?¸E?¸E?¸E?ffF?ffF?ffF?ffF?ffF?žïG?žïG?žïG?žïG?žïG?žïG?L7I?L7I?L7I?L7I?L7I?ÕxI?çûI?çûI?ƒÀJ?ƒÀJ?ƒÀJ?ºIL?ºIL?ºIL?ºIL?ºIL?ºIL?ÍÌL?ÍÌL?òÒM?òÒM?òÒM?òÒM?{N?ÙN?ÙN?ÙN?²�O?²�O?²�O?;ßO?NbP?NbP?×£P?`åP?shQ?shQ?…ëQ?…ëQ?!°R?!°R?!°R?33S?33S?¼tS?F¶S?ázT?ázT?ázT?�U?�U?�U?�U?V?V?¢EV?+‡V?ÇKW?ÇKW?ÇKW?u“X?u“X?u“X?u“X?u“X?#ÛY?#ÛY?#ÛY?#ÛY?#ÛY?Zd[?Zd[?Zd[?Zd[?Zd[?Zd[?ã¥[?ö(\?ö(\?/]?/]?/]?/]?¶ó]?¶ó]?¶ó]?Ûù^?Ûù^?Ûù^?Ûù^?î|_?î|_?w¾_?  `?ƒ`?ƒ`?®Ga?®Ga?®Ga?7‰a?Jb?Jb?\�b?\�b?�•c?�•c?�•c?�•c?
×c?Zd?Zd?¦›d?/Ýd?¸e?Ë¡e?Ë¡e?Ý$f?Ý$f?ð§f?ð§f?‹lg?‹lg?‹lg?®g?'1h?'1h?°rh?L7i?L7i?L7i?^ºi?^ºi?çûi?q=j?ú~j?ƒÀj?k?…k?…k?1l?1l?ºIl?ÍÌl?ÍÌl?ßOm?ßOm?h‘m?òÒm?Vn?Vn? o? o? o?)\o?Å p?Å p?Å p?×£p?×£p?`åp?é&q?ü©q?ü©q?…ëq?-r?˜nr?!°r?ªñr?33s?¼ts?ázt?ázt?ázt?ázt?j¼t?ôýt?}?u?�u?�Âu?v?¢Ev?´Èv?´Èv?=
w?ÇKw?P�w?ìQx?ìQx?ìQx?u“x?þÔx?‡y?Xy?š™y?#Ûy?¬z?5^z?¾Ÿz?Ház?Ñ"{?Zd{?ã¥{?mç{?ö(|?j|?¬|?‘í|?/}?¤p}?-²}?¶ó}??5~?Év~?R¸~?Ûù~?d;?î|?w¾?  €?¤type§scatter¤name³Monte Carlo Ïµ-Soft¡xÈ   `A  €A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A   A   A   A   A   A   A   A   A   A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  èA  èA  èA  èA  èA  èA  èA  èA  èA  èA  èA  èA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  øA  øA  øA  øA  øA  øA  øA  øA  øA   B   B   B   B   B   B   B   B   B   B   B   B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B   B   B   B   B   B   B   B   B  $B  $B  $B  $B  $B  $B  $B  $B  $B  (B  (B  (B  (B  (B  (B  (B  (B  (B  (B  ,B  ,B  ,B  ,B  ,B  ,B  0B  0B  0B  0B  0B  0B  0B  0B  0B  0B  0B  0B  4B  4B  4B  4B  4B  4B  4B  4B  4B  4B  4B  8B  8B  8B  8B  8B  8B  8B  8B  8B  8B  8B  <B  <B  <B  <B  <B  <B  <B  <B  <B  <B  @B  @B  @B  @B  @B  @B  @B  @B  @B  @B  @B  DB  DB  DB  DB  DB  DB  DB  DB  DB  DB  DB  DB  DB  HB  HB  HB  HB  HB  HB  HB  HB  HB  HB  HB  HB  LB  LB  LB  LB  LB  PB  PB  PB  PB  PB  PB  TB  TB  TB  TB  TB  TB  TB  XB  XB  XB  XB  XB  XB  XB  XB  XB  \B  \B  \B  `B  `B  `B  `B  `B  `B  `B  dB  dB  dB  dB  dB  dB  hB  hB  hB  hB  hB  hB  hB  hB  lB  lB  lB  lB  lB  lB  lB  lB  lB  lB  lB  lB  pB  pB  pB  pB  pB  pB  tB  tB  tB  tB  tB  tB  tB  xB  xB  xB  xB  |B  |B  |B  |B  |B  €B  €B  €B  €B  €B  €B  ‚B  ‚B  ‚B  ‚B  ‚B  ‚B  ‚B  ‚B  ‚B  „B  „B  „B  „B  „B  „B  „B  †B  †B  †B  ˆB  ˆB  ˆB  ˆB  ˆB  ŠB  ŠB  ŠB  ŠB  ŠB  ŠB  ŠB  ŠB  ŠB  ŒB  ŒB  ŒB  ŒB  ŒB  ŒB  ŒB  ŽB  ŽB  ŽB  ŽB  ŽB  �B  �B  �B  �B  ’B  ’B  ’B  ’B  ”B  ”B  ”B  ”B  ”B  ”B  ”B  ”B  –B  –B  –B  –B  –B  –B  –B  –B  ˜B  ˜B  šB  šB  šB  šB  šB  šB  šB  šB  šB  œB  œB  œB  œB  œB  žB  žB   B   B   B   B  ¢B  ¢B  ¢B  ¢B  ¢B  ¢B  ¢B  ¤B  ¤B  ¤B  ¤B  ¤B  ¤B  ¦B  ¦B  ¦B  ¨B  ¨B  ¨B  ¨B  ªB  ªB  ªB  ªB  ªB  ¬B  ¬B  ¬B  ¬B  ¬B  ¬B  ®B  ®B  ®B  ®B  °B  ²B  ²B  ²B  ²B  ²B  ²B  ´B  ´B  ´B  ¶B  ¶B  ¶B  ¶B  ¶B  ¶B  ¶B  ¶B  ¶B  ¸B  ¸B  ¸B  ºB  ºB  ºB  ºB  ºB  ºB  ºB  ¼B  ¼B  ¼B  ¾B  ¾B  ÀB  ÀB  ÂB  ÂB  ÂB  ÂB  ÄB  ÄB  ÄB  ÆB  ÆB  ÆB  ÆB  ÆB  ÈB  ÈB  ÈB  ÈB  ÈB  ÈB  ÊB  ÊB  ÊB  ÊB  ÊB  ÊB  ÊB  ÌB  ÌB  ÎB  ÎB  ÎB  ÐB  ÐB  ÐB  ÐB  ÐB  ÒB  ÒB  ÒB  ÒB  ÔB  ÔB  ØB  ØB  ÚB  ÚB  ÜB  ÜB  ÜB  ÜB  ÜB  ÞB  ÞB  àB  àB  âB  âB  âB  âB  âB  äB  äB  äB  æB  æB  æB  æB  èB  èB  èB  èB  èB  êB  êB  êB  êB  êB  êB  ìB  ìB  ìB  ìB  ìB  îB  ðB  ðB  òB  òB  òB  ôB  ôB  ôB  ôB  ôB  ôB  öB  öB  øB  øB  øB  øB  úB  üB  üB  üB  þB  þB  þB   C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  	C  
C  
C  
C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C   C  !C  !C  "C  "C  #C  #C  #C  #C  &C  'C  'C  (C  )C  *C  +C  +C  ,C  ,C  .C  .C  /C  /C  /C  0C  1C  1C  4C  6C  6C  6C  8C  8C  9C  ;C  <C  =C  >C  ?C  ?C  @C  @C  AC  BC  BC  CC  CC  DC  FC  GC  GC  HC  HC  HC  JC  LC  LC  LC  MC  MC  OC  PC  QC  QC  RC  UC  XC  YC  [C  ^C  `C  bC  bC  bC  bC  cC  eC  gC  jC  kC  lC  mC  qC  qC  sC  tC  vC  xC  xC  xC  zC  |C  �C  „C €…C  ‡C €‡C €ˆC  ‰C €ŠC €�C  ’C €’C €“C  •C  –C €™C  �C €žC  ¨C €¬C  ±C  ´C  ¹C  ÁC €ÆC €ÉC €ÚC €çC À
D„¡yÈL1â…:1â;1â…;1â…;½Z§;IÓÈ;ÕKê;wž<wž<½Z'<8<��Y<��Y<ÕKj<{<1â…<T@Ž<wž–<šüž<½Z§<à¸¯<¸<&uÀ<²íá<²íá<²íá<²íá<ø©ò<ø©ò<û<³=1â=B
=eo=eo=wž=ˆÍ=šü=«+#=Î‰+=Î‰+=à¸/=ñç3=8=F<=&u@=7¤D=IÓH=ZM=l1Q=~`U=��Y=¡¾]=²ía=Äf=ÕKj=çzn=ø©r=
Ùv=-7=-7=¨Êƒ=¨Êƒ=1â…=¹ù‡=BŠ=Ë(Œ=T@Ž=ÜW�=eo’=î†”=wž–=ÿµ˜=ˆÍš=šüž=šüž=4C¥=4C¥=4C¥=½Z§=Î‰«=Î‰«=W¡­=à¸¯=iÐ±=ñç³=¸=¸=Œ.º=F¼=�]¾=&uÀ=¯ŒÂ=7¤Ä=À»Æ=IÓÈ=ÒêÊ=ZÍ=ãÏ=l1Ñ=õHÓ=x×=x×=��Ù=§Û=¡¾Ý=)Öß=²íá=L4è=L4è=L4è=^cì=^cì=çzî=o’ð=ø©ò=�Áô=
Ùö=’ðø=û=¤ý=-7ÿ=[§ >³>ã¾>¨Ê>1â>1â>¹ù>¹ù>~	>B
>>Ë(>�4>T@>L>ÜW>¡c>eo>*{>î†>²’>wž>;ª>ÄÁ>ÄÁ>ˆÍ>MÙ>Õð>Õð>šü>^ >#!>ç">«+#>p7$>4C%>øN&>½Z'>�f(>Fr)>
~*>Î‰+>“•,>­.>­.>à¸/>¤Ä0>iÐ1>-Ü2>ñç3>¶ó4>zÿ5>>7>8>Ç"9>P:;>P:;>F<>ÙQ=>�]>>bi?>&u@>ê€A>¯ŒB>7¤D>7¤D>ü¯E>À»F>IÓH>IÓH>ßI>ÒêJ>–öK>ZM>N>ãO>¨%P>0=R>0=R>¹TT>¹TT>~`U>BlV>xW>ËƒX>��Y>S›Z>¡¾]>¡¾]>¡¾]>eÊ^>)Ö_>îá`>²ía>vùb>;d>ˆ(g>ˆ(g>ˆ(g>L4h>@i>ÕKj>™Wk>"om>"om>çzn>«†o>ø©r>ø©r>ø©r>½µs>�Át>EÍu>
Ùv>Îäw>’ðx>{>{>à|>¤}>h+~>-7>[§€>[§€>=-�>³�>9‚>ã¾‚>¨Êƒ>¨Êƒ>ŠP„>lÖ„>1â…>1â…>h†>õí†>×s‡>œˆ>œˆ>~‰>`‹‰>$—Š>$—Š>‹>é¢‹>Ë(Œ>­®Œ>�4�>qº�>T@Ž>6ÆŽ>L�>úÑ�>ÜW�>¿Ý�>¡c‘>ƒé‘>eo’>Gõ’>”>”>î†”>Ð•>²’•>•–>Y$—>Y$—>;ª—>0˜>ÿµ˜>â;™>ÄÁ™>¦Gš>ˆÍš>jS›>MÙ›>åœ>åœ>ój�>Õð�>¸vž>šüž>|‚Ÿ>^ >@Ž >#¡>š¡>ç¢>É¥¢>«+£>�±£>p7¤>R½¤>4C¥>É¥>øN¦>ÛÔ¦>½Z§>Ÿà§>�f¨>Fr©>Fr©>(ø©>ì«>ì«>Î‰«>±¬>“•¬>u­>W¡­>9'®>­®>þ2¯>à¸¯>Â>°>¤Ä°>iÐ±>iÐ±>KV²>b³>b³>ñç³>Ôm´>¶ó´>˜yµ>zÿµ>\…¶>!‘·>!‘·>¸>åœ¸>Ç"¹>©¨¹>Œ.º>n´º>P:»>2À»>F¼>÷Ë¼>ÙQ½>�]¾>�]¾>ã¾>Dï¿>Dï¿>&uÀ>ûÀ>ê€Á>ÌÂ>¯ŒÂ>‘Ã>s˜Ã>UÄ>7¤Ä>ü¯Å>ü¯Å>Þ5Æ>À»Æ>¢AÇ>…ÇÇ>gMÈ>IÓÈ>+YÉ>ßÉ>ðdÊ>ÒêÊ>´pË>–öË>x|Ì>ZÍ>=ˆÍ>Î>”Î>ãÏ>ÅŸÏ>¨%Ð>l1Ñ>l1Ñ>N·Ñ>0=Ò>õHÓ>õHÓ>¹TÔ>¹TÔ>›ÚÔ>~`Õ>`æÕ>BlÖ>$òÖ>èý×>èý×>ËƒØ>­	Ù>��Ù>S›Ú>S›Ú>6!Û>§Û>ú,Ü>Ü²Ü>¾8Ý>¡¾Ý>eÊÞ>eÊÞ>GPß>)Öß>îáà>îáà>Ðgá>²íá>”sâ>vùâ>Yã>;ä>‹ä>ÿå>á–å>Äæ>¦¢æ>ˆ(ç>j®ç>L4è>@é>@é>óÅé>ÕKê>·Ñê>™Wë>^cì>^cì>@éì>"oí>õí>çzî>É ï>«†ï>�ð>o’ð>Rñ>4žñ>$ò>ø©ò>Ú/ó>½µó>Ÿ;ô>�Áô>cGõ>EÍõ>'Sö>
Ùö>ì^÷>Îä÷>°jø>’ðø>uvù>Wüù>9‚ú>û>ý�û>àü>¤ý>¤ý>†¥ý>h+þ>K±þ>-7ÿ>½ÿ>y! ?jd ?[§ ?Lê ?=-?.p?³?ö?9?ò{?ã¾?Õ?ÆD?·‡?¨Ê?™?ŠP?{“?lÖ?]?@Ÿ?@Ÿ?"%?"%?h?«?õí?æ0?×s?È¶?¹ù?ª<?œ?�Â?~	?oH	?`‹	?QÎ	?B
?3T
?$—
?Ú
??ø_?é¢?Úå?Ë(?¼k?­®?žñ?�4?€w?qº?cý?T@?Eƒ?6Æ?'	?L?	�?ë?ë?ÜW?Îš?¿Ý?¡c?¡c?’¦?ƒé?t,?V²?V²?Gõ?88?*{?¾??ýC?î†?ßÉ?ÁO?ÁO?£Õ?£Õ?•?†[?wž?há?Y$?Jg?;ª?,í?0?s?ÿµ?ñø?â;?Ó~?ÄÁ?µ?¦G?—Š?y?y?jS?\–?MÙ?/_?/_? ¢?å?(?ój?ä­?Õð?Æ3?©¹?©¹?šü?‹??|‚?mÅ?OK ?OK ?@Ž ?1Ñ ?#!?W!?š!?öÜ!?ç"?Øb"?É¥"?ºè"?«+#?œn#?�±#?ô#?az$?az$?R½$?C %?4C%?%†%?É%?&?øN&?ê‘&?ÛÔ&?Ì'?½Z'?®�'?Ÿà'?�#(?�f(?r©(?cì(?T/)?Fr)?7µ)?(ø)?;*?
~*?ûÀ*?ì+?ÝF+?Î‰+?¿Ì+?±,?¢R,?“•,?„Ø,?u-?f^-?W¡-?Hä-?9'.?*j.?­.?ð.?þ2/?ïu/?à¸/?Ñû/?Â>0?³�0?¤Ä0?•1?†J1?x�1?iÐ1?Z2?KV2?<™2?-Ü2?3?b3? ¥3?ñç3?â*4?Ôm4?Å°4?¶ó4?§65?˜y5?‰¼5?zÿ5?kB6?\…6?MÈ6?>7?0N7?Ô7?Ô7?8?ôY8?åœ8?Öß8?Ç"9?¸e9?©¨9?›ë9?Œ.:?}q:?n´:?_÷:?P:;?A};?2À;?#<?F<?‰<?÷Ë<?è=?Ê”=?Ê”=?»×=?¬>?�]>?Ž >?ã>?p&??bi??S¬??Dï??52@?&u@?¸@?û@?ù=A?ÛÃA?ÛÃA?ÌB?¾IB?¯ŒB? ÏB?‘C?‚UC?s˜C?dÛC?UD?FaD?7¤D?)çD?*E?ü¯E?ü¯E?íòE?Þ5F?ÏxF?À»F?±þF?¢AG?“„G?…ÇG?v
H?gMH?X�H?:I?:I?+YI?œI?ßI?þ!J?ðdJ?á§J?ÒêJ?Ã-K?´pK?¥³K?–öK?‡9L?x|L?i¿L?ZM?LEM?=ˆM?.ËM?N?QN?”N?ãO?ãO?Ô\O?ÅŸO?·âO?¨%P?™hP?Š«P?{îP?l1Q?]tQ?N·Q??úQ?0=R?ÃR?ÃR?S?õHS?æ‹S?×ÎS?ÈT?¹TT?ª—T?›ÚT?ŒU?~`U?o£U?`æU?Q)V?BlV?3¯V?$òV?5W?xW?÷ºW?èýW?Ú@X?ËƒX?¼ÆX?­	Y?žLY?��Y?€ÒY?qZ?bXZ?S›Z?EÞZ?6![?'d[?§[?	ê[?ú,\?ëo\?Ü²\?Íõ\?¾8]?¯{]?¡¾]?’^?t‡^?t‡^?eÊ^?V_?GP_?8“_?)Ö_?`?\`?ýž`?îá`?ß$a?Ðga?Áªa?²ía?£0b?”sb?…¶b?vùb?h<c?Yc?JÂc?;d?,Hd?‹d?Îd?ÿe?ðSe?á–e?ÓÙe?µ_f?µ_f?¦¢f?—åf?ˆ(g?ykg?j®g?[ñg?L4h?=wh?/ºh? ýh?@i?ƒi?óÅi?äj?ÕKj?ÆŽj?·Ñj?¨k?™Wk?‹šk?|Ýk?m l?^cl?O¦l?@él?1,m?"om?²m?õm?ö7n?çzn?Ø½n?É o?ºCo?«†o?œÉo?�p?~Op?o’p?`Õp?Rq?C[q?4žq?%áq?$r?gr?ø©r?éìr?Ú/s?Ërs?½µs?®øs?Ÿ;t?�~t?�Át?ru?cGu?TŠu?EÍu?6v?'Sv?–v?
Ùv?ûw?ì^w?Ý¡w?Îäw?¿'x?°jx?¡­x?’ðx?„3y?uvy?f¹y?Wüy?H?z?9‚z?*Åz?{?K{?ý�{?îÐ{?à|?ÑV|?Â™|?³Ü|?¤}?•b}?†¥}?wè}?h+~?Yn~?K±~?<ô~?-7?z?½?  €?¤type§scatter¤name­Random Policy¡xÈL  `A  ˆA  ˜A  ˜A   A  ÀA   B  B  B  B  (B  <B  <B  PB  XB  `B  tB  ŒB  ŽB  �B  ”B  šB  ¢B  ¦B  ¦B  ¦B  ¦B  ¬B  ¬B  ²B  ºB  ÂB  ÆB  ÌB  ÌB  ÔB  ÞB  âB  äB  èB  èB  úB  üB  C  C  C  C  C  C  C  C  C  C  C  "C  )C  *C  -C  .C  1C  1C  6C  6C  9C  =C  @C  DC  EC  GC  NC  PC  TC  VC  YC  aC  aC  eC  eC  eC  fC  kC  kC  mC  pC  rC  wC  xC  xC  {C  |C  }C  C €ƒC  „C €„C  …C €†C €‡C €‰C €‹C €ŒC  �C  �C €ŽC  �C €�C  ‘C €•C  šC  šC  šC €œC €œC  �C €�C  ŸC € C €£C  ¤C €¤C  ¦C €§C €¨C €­C  ¯C €°C  ±C  ±C  ³C  ³C  ´C  ¹C  »C €»C €½C €¾C  ¿C €¿C €ÃC  ÄC  ÅC  ÆC  ÈC €ÈC €ÊC €ËC €ËC  ÍC  ÐC €ÐC €ÐC €ÑC €ÕC €×C €ØC €ÙC €ÜC  áC  ãC €äC  åC  æC €æC  çC €êC  ëC  ëC  ìC €ìC  ïC  ðC €ñC  öC  ÷C  ýC €ýC  D ÀD ÀD ÀD  D €	D À
D €D  D €D  D  D €D ÀD @D @D  D  D  D @D ÀD @D @D €D €D  D  D @D ÀD ÀD  D @D ÀD @D @D @D €D  D ÀD € D @#D @$D €'D €'D €'D  (D €(D  )D €*D €.D €.D À/D À0D @1D @1D @1D  5D  6D @7D  9D À:D  <D @>D @>D À>D À?D €@D @AD ÀAD ÀAD @DD ÀDD @FD ÀHD €ID €ID €KD ÀLD  ND  ND @ND @OD @QD €RD €RD ÀVD  WD ÀXD ÀXD €ZD @[D @\D  ]D €]D À]D €^D À_D @aD ÀaD €bD ÀcD @dD  hD ÀhD  iD @jD @jD  lD @lD €lD  mD @mD @mD ÀmD €nD @oD @pD €pD @qD  uD €uD €vD ÀyD ÀyD @zD ÀzD  ~D @~D €~D €D `�D €�D À�D à�D  ‚D  ‚D À‚D  ƒD  ƒD @ƒD ÀƒD  „D  …D  †D @†D `‡D À‡D À‡D `ˆD @‰D @‰D À‰D  ŠD @ŠD ÀŠD @ŒD €�D  �D àŽD  �D @�D `�D €‘D €‘D  ’D  ’D  ’D @“D `“D €“D @”D À•D à•D  –D  –D  —D @—D À˜D à™D  šD `šD  šD @œD  œD @�D `�D  žD  žD `žD €žD €žD àžD   D @ D €¡D À¡D €¢D €£D à£D @¤D À¤D À¤D  ¥D  ¥D À¦D  ¨D  ©D À©D €ªD @«D @¬D €¬D à¬D €­D  ®D @¯D  ¯D  ²D €²D à²D  ³D  ´D  µD  µD €µD ÀµD `¶D `¶D À¶D À¶D  ·D À·D  ¸D  ¸D @¹D  ºD  ºD @ºD  »D à»D  ¼D  ¼D `½D À½D €¾D `ÂD ÀÂD àÂD ÀÄD ÀÄD  ÅD @ÅD àÅD àÅD  ÆD  ÆD €ÆD `ÇD @ÈD `ÈD àÈD  ÉD àÉD ÀËD @ÌD €ÌD  ÍD @ÍD €ÍD €ÍD  ÎD €ÎD  ÐD  ÒD €ÓD €ÓD  ÔD €ÕD  ÖD  ÖD  ÖD €×D `ÙD  ÙD  ÚD  ÛD àÝD  ÞD àßD  àD €àD  áD @âD `âD àãD  äD `äD `åD ÀåD  æD `æD àçD  èD  èD  éD ÀéD àéD àéD ÀíD  îD `îD  ñD `òD @óD €ôD  õD `õD `öD àöD  ùD ÀùD  úD àúD ÀûD ÀüD  ýD  þD ÀþD €ÿD  ÿD àÿD Ð E 0E @E @E  E  E @E PE �E  E ÐE  E 0E `E pE €E ÀE  E ÐE 0E @E E @E 	E 0	E À	E Ð	E @
E 0E �E °E ÀE �E °E E @E  E 0E @E °E `E  E €E €E °E  E @E €E €E @E ÐE àE �E �E  E pE �E °E  E `E ðE  E pE pE €E €E ÐE  E àE ðE PE  E àE 0E àE E @ E ` E ° E à E  !E @"E à"E Ð#E Ð$E Ð$E à$E @%E �%E €'E €'E ð'E p(E *E p*E  +E P+E p+E à+E à+E @,E p,E À,E @-E À-E À-E ð-E  .E 0.E `.E  0E @1E p1E @2E À2E `3E �3E °3E 4E P4E p4E p4E  6E P6E À6E  7E à8E 09E  :E �:E Ð:E €;E  ;E �<E  =E 0=E >E 0?E  @E ÐAE àAE ÀBE ðBE  CE  DE pDE ÐDE 0EE  EE ÀEE FE PFE àFE `GE �GE ÐGE  HE @HE `HE €HE ÐHE `IE  JE �JE  JE `LE àLE  NE  OE ÀOE  QE  RE °RE ÐSE @TE pTE ðTE  VE �VE @WE PWE pWE �WE  XE PXE `XE °XE ÀXE 0YE  YE PZE `ZE €ZE ÀZE  [E  [E P]E ð]E À^E P_E p_E €_E  _E P`E ð`E  bE àbE  cE cE 0cE ðcE  dE @dE eE °eE  fE 0fE 0fE 0gE PgE °gE àgE  hE 0kE  kE plE nE àoE ÐpE ÀqE €rE °rE  sE  sE psE PtE  tE ÐtE puE �vE wE PxE €xE PyE �yE ð{E €|E Ð|E Ð|E @}E  }E 0~E  E  E ÀE (€E ˜€E È€E Ø€E (�E ¸�E ¸�E ð�E ø�E H‚E P‚E `‚E °‚E  „E @„E p„E €„E  „E è„E  …E h…E °…E È…E ð…E h†E à†E ø†E ‡E ¸‡E ¸‡E �ˆE øˆE ‰E 8‰E `‰E x‰E è‰E XŠE ¨‹E 8�E P�E p�E HŽE HŽE ðŽE ø�E �E P�E `�E È�E H‘E P‘E ˜‘E ¨‘E è‘E 0’E 0“E ø“E x”E  •E à•E ˆ–E è–E —E p˜E €˜E è˜E ˜›E  ›E °›E XœE ˆœE 8�E X�E à�E  žE `žE ðžE  ŸE ÈŸE   E Ð E Ø E @¡E Ø¡E à¡E  ¢E (¢E (¢E 8¢E ø¢E x¤E Ð¤E ¥E  ¥E ˜¥E (¦E ð§E €¨E  ©E 8©E hªE øªE  «E €«E Ð«E X¬E è¬E ð­E °®E °E p°E h±E °²E ¸²E 0³E °³E à´E à´E HµE  µE ¶E �¶E Ø¶E ø·E p¹E �¹E ¸ºE »E �»E 8¼E Ð¼E x¾E È¾E �¿E ˆÀE ÁE  ÁE XÃE 0ÅE ÈÆE XÈE ðÉE pÊE ¨ÊE `ËE ÈÌE ÍE HÎE HÏE `ÏE hÏE ÈÏE 0ÓE °ÓE ØÓE HÔE ÕE àÕE ¨ÖE  ×E `×E à×E ðØE @ÚE ÀÚE @ÛE èÜE ØÞE `ãE �äE èäE håE ðåE 0æE xæE çE ˆèE ˜èE ðéE ¨êE íE píE €ðE ˜ñE ˜òE ¸óE  öE àöE  þE  þE @ F t F XF `F ÈF F �F tF ¤F �F ¤F ¤F  	F à
F ¼F 8F F DF èF ¬F ÐF F ¼F $F °F ØFÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/7b3f5adc32cbaebf„¦layout†¥xaxisƒ¨tickvalsÇ(  €?   @  @@  €@   @  À@  à@   A  A   A¥title�¤text®Dealer showing¨ticktextš¡AÊ@   Ê@@  Ê@€  Ê@   Ê@À  Ê@à  ÊA   ÊA  ÊA   ¨template‚¦layoutÞ ©coloraxis�¨colorbar‚¥ticks ¬outlinewidthÊ    ¥xaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white©hovermode§closest­paper_bgcolor¥white£geo†©showlakesÃ¨showlandÃ©landcolor§#E5ECF6§bgcolor¥white¬subunitcolor¥white©lakecolor¥whiteªcolorscaleƒªsequentialš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921©diverging›’Ê    §#8e0152’Ê=ÌÌÍ§#c51b7d’Ê>LÌÍ§#de77ae’Ê>™™š§#f1b6da’Ê>ÌÌÍ§#fde0ef’Ê?   §#f7f7f7’Ê?™š§#e6f5d0’Ê?333§#b8e186’Ê?LÌÍ§#7fbc41’Ê?fff§#4d9221’Ê?€  §#276419¯sequentialminusš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921¥yaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white­shapedefaults�¤line�¥color§#2a3f5fªhoverlabel�¥align¤left¦mapbox�¥style¥light¥polarƒ«angularaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6ªradialaxisƒ©gridcolor¥white¥ticks ©linecolor¥white¯autotypenumbers¦strict¤font�¥color§#2a3f5f§ternary„¥aaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6¥caxisƒ©gridcolor¥white¥ticks ©linecolor¥white¥baxisƒ©gridcolor¥white¥ticks ©linecolor¥white²annotationdefaultsƒ©arrowheadÊ    ªarrowwidthÊ?€  ªarrowcolor§#2a3f5f¬plot_bgcolor§#E5ECF6¥title�¡xÊ=LÌÍ¥sceneƒ¥xaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥zaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥yaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¨colorwayš§#636efa§#EF553B§#00cc96§#ab63fa§#FFA15A§#19d3f3§#FF6692§#B6E880§#FF97FF§#FECB52¤dataÞ ®scatterpolargl‘‚¤type®scatterpolargl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦carpet‘ƒ¥baxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¤type¦carpet¥aaxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¬scatterpolar‘‚¤type¬scatterpolar¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©parcoords‘‚¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©parcoords§scatter‘‚¤type§scatter¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ²histogram2dcontour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type²histogram2dcontourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921§contour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§contourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattercarpet‘‚¤type­scattercarpet¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦mesh3d‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type¦mesh3d§surface‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§surfaceªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattermapbox‘‚¤type­scattermapbox¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ªscattergeo‘‚¤typeªscattergeo¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©histogram‘‚¤type©histogram¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    £pie‘‚¤type£pieªautomarginÃªchoropleth‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤typeªchoropleth©heatmapgl‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©heatmapglªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921£bar‘„¤type£bar§error_y�¥color§#2a3f5f§error_x�¥color§#2a3f5f¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   §heatmap‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§heatmapªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­contourcarpet‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type­contourcarpet¥table‘ƒ¤type¥table¦header‚¤line�¥color¥white¤fill�¥color§#C8D4E3¥cells‚¤line�¥color¥white¤fill�¥color§#EBF0F8©scatter3d‘ƒ¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©scatter3d¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¨barpolar‘‚¤type¨barpolar¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   ©scattergl‘‚¤type©scattergl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    «histogram2d‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type«histogram2dªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921®scatterternary‘‚¤type®scatterternary¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦heightÊC–  ¦margin„¡lÊ    ¡bÊ    ¡rÊA   ¡tÊAð  ¥yaxisƒ¨tickvalsÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¥title�¤textªPlayer sum¨ticktextÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¥widthÊC–  ¦config…¨showLinkÂ¨editableÂªresponsiveÃªstaticPlotÂªscrollZoomÃ¦frames�¤data‘‰¤zmaxÊ?€  ¡yÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¤type§heatmapªcolorscale¥Greys¤zminÊ¿€  ¡zšÇ(  €?  €?  €?  €?  €?  €?  €?  €¿  €¿  €¿Ç(  €?  €?  €?  €?  €?  €?  €¿  €¿  €¿  €¿Ç(  €?  €?  €?  €?  €?  €?  €¿  €¿  €¿  €¿Ç(  €?  €?  €?  €?  €?  €?  €¿  €¿  €¿  €¿Ç(  €?  €?  €?  €?  €?  €?  €¿  €¿  €¿  €¿Ç(  €?  €?  €?  €?  €?  €?  €¿  €¿  €¿  €¿Ç(  €?  €?  €?  €?  €?  €?  €¿  €¿  €¿  €¿Ç(  €?  €?  €?  €?  €?  €?  €¿  €¿  €¿  €¿Ç(  €?  €?  €?  €?  €?  €?  €?  €¿  €¿  €¿Ç(  €?  €?  €?  €?  €?  €?  €?  €¿  €¿  €¿©transposeÃ©showscaleÂ¡xÇ(  €?   @  @@  €@   @  À@  à@   A  A   AÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/58d51ac87604fe9c„¦layout†¥xaxis‚¤type£log¥title�¤text¨Episodes¨template‚¦layoutÞ ©coloraxis�¨colorbar‚¥ticks ¬outlinewidthÊ    ¥xaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white©hovermode§closest­paper_bgcolor¥white£geo†©showlakesÃ¨showlandÃ©landcolor§#E5ECF6§bgcolor¥white¬subunitcolor¥white©lakecolor¥whiteªcolorscaleƒªsequentialš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921©diverging›’Ê    §#8e0152’Ê=ÌÌÍ§#c51b7d’Ê>LÌÍ§#de77ae’Ê>™™š§#f1b6da’Ê>ÌÌÍ§#fde0ef’Ê?   §#f7f7f7’Ê?™š§#e6f5d0’Ê?333§#b8e186’Ê?LÌÍ§#7fbc41’Ê?fff§#4d9221’Ê?€  §#276419¯sequentialminusš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921¥yaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white­shapedefaults�¤line�¥color§#2a3f5fªhoverlabel�¥align¤left¦mapbox�¥style¥light¥polarƒ«angularaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6ªradialaxisƒ©gridcolor¥white¥ticks ©linecolor¥white¯autotypenumbers¦strict¤font�¥color§#2a3f5f§ternary„¥aaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6¥caxisƒ©gridcolor¥white¥ticks ©linecolor¥white¥baxisƒ©gridcolor¥white¥ticks ©linecolor¥white²annotationdefaultsƒ©arrowheadÊ    ªarrowwidthÊ?€  ªarrowcolor§#2a3f5f¬plot_bgcolor§#E5ECF6¥title�¡xÊ=LÌÍ¥sceneƒ¥xaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥zaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥yaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¨colorwayš§#636efa§#EF553B§#00cc96§#ab63fa§#FFA15A§#19d3f3§#FF6692§#B6E880§#FF97FF§#FECB52¤dataÞ ®scatterpolargl‘‚¤type®scatterpolargl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦carpet‘ƒ¥baxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¤type¦carpet¥aaxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¬scatterpolar‘‚¤type¬scatterpolar¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©parcoords‘‚¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©parcoords§scatter‘‚¤type§scatter¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ²histogram2dcontour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type²histogram2dcontourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921§contour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§contourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattercarpet‘‚¤type­scattercarpet¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦mesh3d‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type¦mesh3d§surface‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§surfaceªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattermapbox‘‚¤type­scattermapbox¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ªscattergeo‘‚¤typeªscattergeo¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©histogram‘‚¤type©histogram¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    £pie‘‚¤type£pieªautomarginÃªchoropleth‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤typeªchoropleth©heatmapgl‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©heatmapglªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921£bar‘„¤type£bar§error_y�¥color§#2a3f5f§error_x�¥color§#2a3f5f¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   §heatmap‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§heatmapªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­contourcarpet‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type­contourcarpet¥table‘ƒ¤type¥table¦header‚¤line�¥color¥white¤fill�¥color§#C8D4E3¥cells‚¤line�¥color¥white¤fill�¥color§#EBF0F8©scatter3d‘ƒ¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©scatter3d¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¨barpolar‘‚¤type¨barpolar¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   ©scattergl‘‚¤type©scattergl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    «histogram2d‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type«histogram2dªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921®scatterternary‘‚¤type®scatterternary¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦legend‚¡yÊ¾LÌÍ«orientation¡h¦margin„¡lÊBH  ¡bÊBH  ¡rÊBH  ¡tÊBp  ¥yaxis‚¥range×ÍÌÌ½   @¥title�¤textÙ.Mean square error <br> (average over 100 runs)¥title ¦config…¨showLinkÂ¨editableÂªresponsiveÃªstaticPlotÂªscrollZoomÃ¦frames�¤data’„¡yÈœ@ÝL‰@X/å?7:æ? ­Ö?ÁÈ½?l!�?:sŠ?)
e?¢P?’N+??]8?Í^û>t®ç>C#Ï>Ü~Ï>£B¶>Ãº«>©g¨>”•>y‰>Ÿ‹>È‰‡>ƒ’>h�>xk„>ìf€>­‚>ÀÊl>—$r>Ê­c>Ìk_>�U>º[…>3Ÿk>Föd>ö]>s´^>;P[>81X>zåN>A±A>Ý¯;>7e)>QÝ>ôu>dÒ>"Í>ãÖ>ê>ˆW>ò>h>�ï>ýå>,€>ÁV>ÚN>Ó0>œÁ>ï>¹¦>f�>ŽÛ	>ÖV>i¤
>û>q{>=µ>ó}>m
>©.>òW>Åÿ=OIû=êÊû=Tô=ížô=D‘î=�ìç=ý�â=7�Ü=£GÙ=ÑœÙ=Û=Ÿ¸Ó=˜žÒ=)’Ï=Û>Î=!�Ï=Ð=&‹Î=Ã`Ï=©öË=²�Ï=NüÑ=ÆðÍ=É=¡´È=ÊdÉ=|öÁ=·0À= ¾=_–É=J¤À=}XÃ=„¼=º ·=ÆÃ°=c"®=šÀ­=f�§=�_§=ÀÑ¦=ÃÑ§=<¥=< =ß¹Ÿ=àyž=Œ%œ=ã½™=š3“=¿øŽ=:÷”=�&•=
N”=?‚Ž=/[Œ=¶9Š=å©ˆ=Ð†=k†=½6…=L‰=_ Š=_‰=Crˆ=â]†==‘=öŽ=¢|Œ=/Õ•=g˜=™v•=u’=Ì³”=“=±7‘=×/Œ=ª\‰=”^†=#†=tP„=”ƒ=†�ƒ=Ä%†=ÍÖ„=QÇ…=žÜ‡=öÛ„=,6ƒ=¯=hs|=D{=@wx=q=®z=Z¥}=ó«{=-#y=¼ýu=½t=Š:p=Ån=îk=_«k=²hg=›¿f=¸wf=8bj=éi=¨Õf=ã•d=Ø<a=¨7a=$#h=”Çf=f„b=Èš^=…j=(óg=ŽÂj=î}l=ä»i=6ãg=®²d=R8a=Ò\=êµ\=%Ÿ_=}Œ^=?p_=lL]=­Ž[=fZ=ÜÿW= ­S=}	Y=.-W=%+U=ãzR=P=)K=]ºG=¬ÍH=ÎÈM=cãM=œaK=;3K=ÓÀL=W!L=ÉH=6ÿI=d¾J=ÈYJ=½ÉJ=ÇJ=ñvI=ê˜L=#AO=ö{O=êžO=ÚóK=ý-J=ó\D=¯VD=|V@=¼þ?=pA=?í?=“Â==f¥;=ú™>=@Ç;=˜[;=Ê€;=F:=4;=½û7=——:=ô¹7=ýò7=‘Ò6=�4=[ñ6=ÚE5=‘Ì2=�¹8=´‘6=ƒß3=)¿1=–1=8þ2=²2/=Sr1=lS0=É81=Á.=‘&.=SÎ0=½[/=D‰/=/=Ñ¼.=aú-=Æw.=\3.=¨Ñ1=í�1=¶Å.=+-=e:-=M]-=æÞ+=ªO*=@W*=Æ~)=_©'= %=ò{%=˜ê&=%³$=í@%=7e%= '=ŠV$=Ìã$=Óo&=Ì¹&=!Ñ'=30%=Ñ‹$=Â!=\ú=n½=ˆü=_À=mW=," =Ã!=šc=·=¼=ìY=Ó½=L'=­c=í>=š}=?©=KÐ==�=í´=¢=¸ï=4-=TI=½S==-
=Û=!Ï=Ùä=÷=ýË=%=�=¦=�ä=r1=ü‚=Ï£=°Ï=Q>=±á=ÝÍ=W%=øÇ=e=ø=5©=9â=�å=µ=¸=Uz=‘f
=u‡=†Š=@Ï=à`=o~=Ü¨=ñ=Fž=eê=|Ó= D=ªF=]Ó=Í”=–@=Ó=fÝ=Ûü=òT=»z=³Ÿ=TÔ=Dl=>§ =3Gþ<¼ðú<�õú<n3ü<Á?ü<L
ü<:­ú<�7ý<jû<ò(ø< éö<rrö<À‘ö<Àèù<£eû<—xö<
õ< Jö<·Qï<¿íñ<Ô]ð<Ø‰ð<,sí<f‚ì<ê6î<”3ñ<»g÷<QÇ÷<4Où<-éø<dõ<C‹ô<áó<qó<Cñù<sûù<-*ø<¡Qô<q1ò<:ªî<÷ì<ê?ê<»šë<3�é<DÔè<¶£ç<=ç<d®æ<6�å<Ínâ<-rã<Ÿ#â<Ž¬ß<œ¥à<áâ<¯Œã<8Wâ<sÛã<Ô…á<®à<¥]à<ôà<R³à<”šß<–ùÛ<jÂÛ<ª‘Ù<�ÆÙ<ØfÖ<}Þ<8eÝ<!Ú<]Û<Ì�Ü<6LÛ<ÓvØ<.×<Ó<6ÞÓ<³LØ<½Ú<ï-Ø<I”Õ<äÈÓ<FòÓ<<+Ñ<wÿÎ<Î<8µÎ<-JÎ<_°Í<üçË<jÝÌ< Ê<ÖÞÈ<.Æ<×‹Æ<œÔÇ<„È<ìÉÇ<*(È<CmÈ<¦úÇ<eßÅ<vÃ<
S¿<ö™¿<)•Ã<ñ@Ã<(-À<›&À<¿5¿<�½<H;¾<ŽC¾<Ó½<Î«¾<Œñ¿<Î	Á<¥ý¾<Ú¾<�X½<Šm»<\®»<�wº<ÜÑ·<wŸµ<{8´<Ÿµ´<..±<(³<HË´<ó´<ÆØ¶<`¸<öÕ¹<µ·<À·<¦ ¶<m£´<‘¶<4j´<f£µ<³�´<¸\³<LM´<#è²<Sl³<w÷±<ÎÉ²<€¿±<\_±<€s°<-÷®<�Ç­<»¬<m@­<h¬<)R«<\«<}yª<ê³©<|ª<c[ª<»¾¨<rÓ§<m¨<‘§§<ß
¦<3Œ¦<®¦<ˆÐ¦<IÃ¦<-Ú¤<äÇ¤<Q‡¤<ƒ2¤<#0¥<½Q¤<x˜£<M]¤<¾£<Tz¢<S <˜& <†z <2ŸŸ<K#Ÿ<IŸ<²Þ <¾› <;¡ž<7�<”¾›<ôš<Ÿ›<'¦™<“›<Í.›<Tg›<Æ™<Q¿š<š›<“›<Ï×›<¸Åš<á™<rýš<=œ<VD›<Á	�<bªœ<ŠŸ�<Zóœ<˜ž<+\�<Þž<ÔK�<FIœ<()›<íLš<;©—<D¸–<t>•<1–•<À`•<·ë–<ì˜<]™<Oµ˜<}S™<*Í˜<Uy˜<óé—<$¸—<Ìî—<lš•<¬x–< ò”<‹”<dz“<]à‘<9½’<_Z“<ÿ'’<_Ì‘<t>’<‘“<þ“<÷È•<ö)•<t”<±Â’<’¬“<¶Î‘<Ã¿�<¯¹�<Ìó�<ï�‘<’<:†‘<Ë‘<�H�<ð`�<�CŽ<QxŒ<ï Š<#Š<Ü¥‰<¨a‰<‚�ˆ<¡Ä‡<€Î‡<˜´‡<3Ï‰<4Øˆ<VBˆ<]ˆ<èŠ‡<Vr‡<zØˆ<OZ‡<Å‡<(‡<‡<V¼‡<1˜†<ŽU…<å´ƒ<d&ƒ<ùˆ‚<´¥‚<ë‘ƒ<qèƒ<b*ƒ<Ø†„<Ù‚<Ñˆ‚< Â‚<”þ‚<@Ž‚<4ƒ<Çpƒ<œ{ƒ<lB„<7:‚<”Ž‚<ªv�<!ð€<üÞ€<Ý€<&D}<NÝ{<]Vx<,—s<Ú#r<ÍÈq<¼™o<o<½çm<Ml<†l<˜êk<Ûi<à@h<ú¡f<½¯g<ˆŠg<Î×e<Ï9f<R©d<ƒb<‘U`<ûž_<ÖÁ_<–Ä^<ûÛ]<*H^<¨2^<mm]<€l[<:*Z<íˆY<¯ðX<@jY<Í*W<,;W<vÞZ<¼]\<NíZ<‘ÒZ<·Ý[<¦\<¯ÈZ<!SZ<›–[<2X<Ö¤V<ÅHW<@.Y<R0X<QèW<ˆDT<†U<Á×T<ÁìU<[ùU<]=U<¦S<nžS<Û±R<	§Q<!Q<CP<í„S<­R<ì©T<”sR<pR<»TS<§U<Ñ:T<C©T<�XT<sS<ÀT<SQ<èÔO<…ìP<­­O<¨ÄN<fœN<¸L<Ä†J<qþJ<7ÍJ<•K<wL<wK<_jH<¸üD<qC<³C<�ÍE<·ŠD<íìB<¶]C<ÍôA<LÊ@<›RA<à
A<—è@<ºoA<ñTA<õ?<.ƒ?<lâ><Ìt<<Œ»=<Of=<œi=<:<<4°<<l‰<<´©B<³šC<¶éB<ø�C<üNC<ÀÀD<ÛŽE<7³E<é¼I<ï�J<,ˆH<³¬E<ŠhD<ß‡C<ÚB<®üA<2A@<?¹@<�Ü@<*�@<(Q@<ØŸ><»M><ï/></ø=<úú9<ã :<��<<D=<ü¼=<Ãõ<<
ö=<ŽŸ><Ô?<[@<J?<ŽZ><hõ=<w ?<Æ$><ñ‰?<²¡><lK@<®é?<Q]=<; ><F8=<˜S=<ÝU=<÷°<<¯å=<OÐ=<ê]<<“<<o5;<79<ö8<Fê7<zï6<’H7<<58<™7<F©2<$ 2<½K5<ŒÓ4<Û:6<÷š4< À6<e8<o�8<	�9<m)9<|8<áì8<äŸ8<dÉ8<Åñ6<¯(6<f€9<;<¿!<<´/;<ƒz8<:8<á†8<ýÜ7<¿_7<;‡7<Ò7<;/6<¨Â5<`Ò5<£5<Hæ6<Q5<ïc6<:o5<86<Ò“5<±ƒ3<›à1<{T2<À‰4<èx4<ý�3<hº2<A;3<Wä2<
’3<1<�2<_2<rŸ1<¤Ð4<€4<ir5<//7<ñy8<?®6<á¬6<.¤6<7<[<7<ÿ¹6<ù5<Èn4<3š4<�^4<ªp3< 00<ì’.<</<0<ÉŽ.<�Ù,<d�+<¦­+<$£-<“ñ,<4-<–ü-<}Ö.<ƒ�0<?P0<Äý.<ÅÓ,<j¦,<Ê¤.<ÛM.<h-<]Å-<a½/<\,<‘4+<ñ(<#*<ÌÖ*<àò'<Òë'<i™%<‘¬%<Á&<ŒÀ&<ö'<=�'<3¢$<fƒ#<Ô "<†<!<ˆ <Ã\ <fœ <± !<cµ!<%”!<ú!<ˆC<Œ<0Ü<?E<M’<­<z^<Ãó<èæ<·<ÄV<…è<Ÿ^<áA<Èt<a<h¸<²<Ç«<ï<.<¬õ<J<ÓÊ<�¤<ú�<¤<<`<‚Ð<R'<�<æ²<ÁÍ<¯<¬”<ÈÆ<É4<(<âÑ<ô‚<d›<YŒ<EH<ÍC<Á<ˆ,<6<&—<ù:<(,<¬<¨?<fp<™Â<Ià<9M<H<ñ<€l<ú�<Œ¦<Ök<>n<<L<¡.<¬C<Ã©<Æ|<¨<M¶<ÒÞ<‰ê<¸›<$J<vK<I]<Ñ<¬z<ÔÅ<VÞ<›<ù†<Sy<„¯<TÙ<Œí<•<–«<'Ã<Ó[<Ê<^i<Cõ<Mä<7K<VÆ<ÁÕ<rÄ<—”<œ¸<w<�ƒ<5Ž<´<Ýè<š<ÁÃ<XD<§<F2<;<è_<"b<œà<aù<�X<.Ò<Ù‘<l‰<Ù<¬W<�ã<<b<,´<B€<‚ <›1<óq<qV<-ë<â<5J<†É<D}<± <<ûv<N÷<ŸØ<O)<Ý¶<³�<˜í<ÀQ<³¤<˜�<´[<d³<¯<Æ6<¢q<Ã<�<ç{<J.<¢<'…<Œ¶<ÅW<É¹<Ú<XN<‡×<—j<üQ<É¨<i<à‚<c«<Þ6<T<j¢<�¾<´¨<,{<½Ñ<ÁÙ<[r<]X<(~<˜ï<Úÿ<ñy<.þ<k¯<1&<ðH<Fª<[<ý€<ÏÃ<á<²Æ<9Ï<‰<½T<¤<é*<Þ†<¥É<•x<Ä†<(á<£Ô<y÷	<[
<jP
<ÍY
<�
<qO	<¿q
<¯<õ	<»(	<c<¿ë<Œÿ<<ç<Õ<Ôn<T<_<ü@<ƒÑ<$y<ÖD<,<¬<~®<F<O¹<qS<•ù<6÷<Ø<Ð<®N<,ì<Æ~<<Ñ<eÛ<Ö<íŽ< <:<ó<o<µ <t“<ð¥<ðB<A<ø<"<èý<Wq<óq<­<7<é<u¤<„I<-<Ù<œó<ã<4ë<êó<¡r <SÂþ;ºÿý;`Vü;†ü;Ã™ý;‰­ÿ;$ <f <Ï3 <_‡ý;ÓÇû;SMü;r ü;8ü;øü;©²ü;ƒÔý;tùý; �ý;^] <LÞÿ;óc <ÊÂþ;’pü;ouý;Ôüý;—† <3×ÿ;$�ÿ;ä¾ <“<ù,<t¦ <ÔŒ <Q <E <Šâ <#¡ <ã± <Á4<-Ø<ØÂ <Ö <ì¢ <À˜ <7ôÿ;rÂþ;±Áý;tåþ;ÆØþ;²Nÿ;æþ;ßý;ò^û;î²û;VMý;Mfü;#‡ú;(Ÿû;Zû;Aåú;û?û;ìù;@ ü;šPÿ;; <– <¤… <¨¥ <ì½þ;,åý;�`ø;Ìå÷;Nï÷;;Ìõ;Ïgõ;ýó;/ñ;\«ð;�ˆï;Oð;tOñ;n¦ñ;jò;|Àð;³ò;
Fò;Ï†ñ;Ãpð;Eñ;QKð;ížï;¢ð;-ð;„ð;Å…ð;v„ò;#1ó;­7ó;f+ó;ó;XÚó;Ûó;œwñ;wBï;@·ï;ò;‘çï;=ñ;��ð;*ï;Ý’ò;‰3ô;rdò;zVñ;Wò;]Àò;A×ñ;Oñ;¬´ð;ÚÒð;÷Ñò;õð;Ølñ;Iùð;†Íð;¥‰ñ;Åµð;Pñ;º)ñ;V-ó;I&ó;íò;—„ò;½�ð;TÎð;ßØñ;LŸñ;„Îñ;ý#ó;æüô;Àc÷;ã¦ö;€ø;ü›ø;*.ø;àÑõ;lö;¯Ìõ;ŸÒõ;Êvö;ˆ÷;Ú³ö;‘·÷;lLø;�%ù;Lø;Èø;©÷;(,÷;ÿ¶ö;Ãëö;D”ö;òk÷;t¢ö;smö;ÏK÷;(7ù;õø;3ú;ãSø;e”ø;s{ö;X_÷;—>ö;ÝXö;º–õ;Ú9ö;Ÿ~÷;:ø;ÖCù;É5ù;WEø;“a÷;êp÷;Òîù;aýù;¯Iú;jÂù;Aû;Wàù;zù;„.ù;ñËø;­ã÷;Å.ù;Ôï÷;n±÷;64ö;É¼ö;\ºõ;¸Hô;S[ô;¬ô;@ ô;’·ó;Ýô;Z“õ;´Ùö;�‡ö;oüõ;Ëô;)­ó;·?ò;€÷ò;Ñdô;{=ô;n³ô;œJõ;?Õó;mšó;MÎó;`ô;Û7ö;e³ö;àeö;·Xô;@ûô;½+ô;
õ;›ºô;ÚRô;ãbó;˜ƒô;Æó;ôŒð;Zcñ;áƒñ;£ªñ;òVò;ÝSò;Ö›ó;Š°ô;2½ó;ìtô;à!ó;ó;ó;œñ;ãðñ;1ýñ;a$ð;¨ð;¯ýì;SÖê;s»ê;¦üé;øè;:zé;.ˆé;½/ê;4Eê;&‘ê;)í;8ëì;hÎë;:ˆë;Fêê;ë;.Ôì;èì;�Ýì;¬¸ì;è™ì;})ì;Ügê;SÇé;òÆé;ºÿé;Zgë;Êîê;W¯ê; ê;¼rê;¯¢ë;è]ê;ë;ˆ0ê;[�é;ÃŽê;ôéè;pé;Ä ç;¬€ç;—‚ç;èé;Ëè;©ìç;º¨ç;:å;AÕå;È6ç;Näæ;
�ç;qç;Å–ç;…øæ;³ôå;�ç;ü£æ;½Šæ;!	å;?ã;Îã;á~ã;cã;¬á;ú à;ªÚß;¸qß;:pà;¤¯Þ;÷Þ;²6Þ;ÖšÚ;Ú;LâÚ;ÏlÛ;wÍØ;;Q×;ø·Õ;;×;ìwÖ;3×;V²×;R×;d*Ù;8›×;—,Ö;Ø=×;†ôÕ;jÀÕ;C©Õ;L÷Ô;ôtÓ;Ï:Ò;:ëÑ;
°Ó;ˆÓ;w�Ó;Õ;ª’Ò;ãyÒ;.êÒ;‡Ò;¥nÓ;yÔ;ÖqÕ; `Ô;æ™Ó;füÓ;´üÓ;ÛÞÓ;ìÔ;öÕ;±GÕ;ý…Ó;S›Ó;2ŽÕ; Ö;ÒŽÖ;N×;&ô×;(×;$üÕ;!b×;`ðÖ;AÖ;7Ô;´[Ó;¶1Ó;a•Ø;ÄðØ; Ù;F5Ø;›Ø;8ÛÚ;Ÿ=Û;íØÛ;H}Û;Ü‡Û;}1Û;•Ú;¡;Ú;$rØ;²Ø;`­Ù;QÙ;ßVÚ;¶9Û;FÚÛ; Û;h”Û;ˆCÛ;¯‡Ú;<ýÚ;h4Û;#ßÛ;oðÛ;¬ÃÛ;­Ú;¥Ý;@xÜ;“ÐÛ;Ž�Ú;NÚ;_ÜÙ;ÓHÚ;éÙ;6Ú;¿�Ù;s�Ø;ö¶Ø;¼óÙ;ˆÃ×;s×;�©Õ;ëÕ;„,Ö;º;Õ;Ä0Õ;x9Ó;å¬Ò;Ä¦Ò;—>Ò;DžÒ;	›Ð;„ÇÑ;Æ²Ñ;FÃÑ;›¯Î;N
Î;:5Î;´Î;FUÎ;w,Î;ýÒÍ;·Ì;É?Ì;[ËË;Ì	Ë;¦‘Ë;APË;.0Ë;.³Ë;ŽÊÊ;¼Ì;sšÌ;áÍ;Æ|Ì;X_Í;==Ì;0Ì;.†Í;ˆÊ;}[Ë;;Ë;©ßÊ;jèË;Ž~Ë;–œÈ;¡È;»æÇ;Ê]Ç;
´Æ;ÓÇ;O�Æ;4Æ;ÃCÆ;cñÆ;‘dÇ;®ðÆ;åÇ;Š_Æ;e¦Æ;‘iÇ;4ÛÇ;ÀkÇ;®£Æ;X\Æ;&zÅ;jšÆ;¤ÿÄ;OÅ;?¦Ä;,áÂ;­Ã;-€Ã;HËÂ;¼ÉÂ;)Á;¤À;²=¿;¨Â;óbÂ;ø©Â;ú8Â;›…Á;šÁ;Á±À;”Á;TÀ;„÷¿;Ïò¾;C¾;­z¼;’õ»;$®»;ª¤»;|‡»;¼l»;7|º;<âº;Å\º;[¯¹;¨»;Á£¹;º;vL»;í »;4¼;›y»;(×»;L�¼;Z»;3F»;Í·º;tº;»º;)&¹;šLº;Z¹;†‹¹;�À·;·c·;&!·;7/·;äT¶;#a¶;·;E¶;ƒy·;òà·;¯^¸;ú÷¸;ñ·;üX¶;ñ«¶;»º¶;éñµ;wÄ¶;iNµ;Åµ;ßµ;F+¶;`)·;!Y·;ˆp·;·;\z¶;1P·;ÆM·;O9¸;m2¸;,˜·;ò·;–Z¶;Z§·;×ë¶;n¥¶;†‘¶;÷¶;�ê¶; 6µ;!_´;ø¹´;D´;ên³;ÜX³;=·²;ô$³;²ç²;ÒÃ²;‘ï°;aX±;˜H±;©¥°;ú°;êØ¯;<�°;FÅ®;€{®;o#¯;
¯;_:¯;MÔ­;[_®;¸X­;4…­;œz­;Lì­;¬­;h¦­;	­;ï©­;3!®;]&®;<d­;nÂ®;ãº®;[§­;w×­;f¬;¸z¬;#¬;»K«;á�ª;![«;Ûª;ƒ¢©;¿Ú§;F¿¨;ÊM¨;–Ï¨;”"©;Øí©;ºª;H×ª;ÄAª;=´ª;À‰ª;Ò¼©;íW©;I©ª;÷«;_‹ª;äôª;üHª;Äi©;¿ ª;wÿ©;QÎ©;Ì@¨;l%¨;`õ¦;œÚ¦;EŠ§;Î¬§;¥;DÓ¦;¥¨§;íç¦;Jµ¦;ûV¨;äÀ¨;DÍ¨;e‘§;!¨;ÃS¨;DÏ§;83¨;’£§;ÝA¨;{Œ¨;ÆŒ©;k©;A’©;åo©;ˆê©;rû¨;Éƒ¨;w�¨;Lñ¨;6Ö¨;åR¨;ó¹§;Å�¦;óŽ¦;…ù¤;²¤;tŽ£;[¥£;4†£;Á7£;n£;³®£;°`¡;±Ø ;ZZ ;(ÌŸ;H‰Ÿ;xDž;ÏŸ;Á‚Ÿ;’Ÿ;JÒ�;úo�;ˆ˜�;<œœ;}…œ;Öß›;š2�;Þ¸�;]ž;(ž;F‚ž;jŸ�;Gž;ÂL�;ÁDž;Q°Ÿ;,š�;ª±œ;œ;èœ;z·›;H?›;kù›;Dæ›;A	œ;*œ;ä4›;}Ð™;/˜;`Î—;:­™;Þ™;ó™;Ón˜;Ñ9—;˜˜;Ê˜;”'™;í	š;	™;ra˜;}™;´T˜;J³˜;Æ¨˜;�˜;¸˜;¤Ö—;æW—;o˜;Ô#–;ÚØ•;¸+–;ã@—;Ta—;;c—;Ø7˜;>î—;kÝ•;¯Š”;:D”;gõ”;Yš”;<2”;Þ”;œD”;&‘“;îí“;Êœ”;µ†”;_²”;÷Ž“;�d“;øA•;{•;-„”;„Ô”;äã”;¬;”;tÒ’;õ]“;J[“;è”;AÔ“;ìA”;¥u•;·Ñ•;¦Ç–;Ð`•;/1•;Äi–;ï4–;Ùk–;üg–;B–;Z¹•;Ý°•;XF•;ÝÜ”;=••;•;,Œ•;¤ê”;Äï•;÷é•;¡‘”;„?”;ÛÉ“;¼R“;ß ”;Üs“;Æ›”;œD”;®'”;)•;c!•;¶¡”;É –;½Ò•;Ñw–;Öc•;“Ù”;m•;¢2•;à •;Fö”;0Ü”;¢$•;‘D•;Î”;3‚•;O€–;;™•;Î•;ÖÌ”;Ùƒ•;
8–;œ•;®ô•;¸¡•;–|•;äÏ”;cÆ”;ÝC•;Â&•;-¤”;©•;�•;-6•;¤}•;s–;}ž•;¿q•;¬Á•;U@•;öy•;b—–;¸z–;ªÞ–;Ãp—;Cr–;8º–;-&–;Ae–;±�–;Í—;b'—;¤ª—;–‚–;S—;#‚–;ú–;õ†•;É–;VC•;ˆÕ”;{ù”;Ú“;CÃ”;í•;–;ÔP•;s–;	Ò–;ð³–;¬6—;t*–;A�–;�–;°Ä•;ƒi•;�B•;c”;QI”;Mù“;¦“;Ç”;AK”;ÍÞ“;z�“;ØÒ’;x’;ü¶‘;×2‘;üÄ‘;TE‘;íe‘;ßB‘;_â�;²3�;“¬�;'Â�;\™�;?�;Ê�;y^Ž;¿ŽŽ;­ÚŽ;ßÓ�;“…Ž;”Ž;$0�;.°Œ;™Œ;]Ÿ�;CFŽ;FnŽ;„œŽ; y�;�Ž;‡Î�;y«�;1âŒ;ô¿Œ;ó!Œ;ÁTŒ;Œ;Z‹;QôŠ;%3‹;ýÍ‹;Tã‹;ço‹;ÍD‹;Ä¼‹;Jq‹;Ê6‹;SáŠ;¶Õ‹;¼”‹;³JŒ;>{Œ;�ÚŒ;–²Œ;pìŒ;zŒ;œž�;ž�;ZØŒ;‘JŒ;G�;Å˜Œ;‘ÿŒ;šÄ‹;‡ÃŠ;ÈÌŠ;hŠ;ªeŠ;q‹;a6Š;ðŠ;UÞ‰;ô=‰;°v‰;%Š;A,‰;Ý<‰;PF‰;C¥‰;ˆä‰;måŠ;aüŠ;ˆ÷Š;Š;ÿ×Š;ñíŠ;øÂŠ;	MŠ;	5‹;¹ðŠ;`‹;Ø‹;}¥Š;Z1Š;¤z‰;¤º‰;"‹;Lå‹;fŒ;l°‹;D5Œ;¼�Œ;ó*Œ;µý‹;Ëa‹;ÌPŒ;®z‹;­vŠ;q•‰;FÓ‰;TÍ‰;ì³ˆ;]‘ˆ;caˆ;Ýà‡;Jˆ;ÁI‡;]Ø†;?½†;ß·†;Vñ†;ñ†; ¨†;¼x†;Pô…;Í…;î	†;/…;ÑQ…;-­…;…;Ôz„;ý„;�)„;²àƒ;ÜÙƒ;ÚAƒ;¡”ƒ;�*ƒ;.„;íL…;�…;Ï„;e…;=ç„;õ„;Ë„;Í§„;è¢„;÷0…;Vˆ…;ü‹…;å¨…;†;¨4‡;0‡;Iœ‡;a÷‡;·‡;�6‡;êYˆ;8Ðˆ;›ˆ;£Wˆ;lˆ;%Jˆ;#ì‡;B`‡;ù‡†;ðn†;©h†;/ð…;kÙ…;_4†;\s†;- †;9-†;Ø†;`Þ†;±‡;m‚‡;Ù—‡;¼n‡;,­‡;	ˆ;Jˆ;§5ˆ;ˆ;¦3ˆ;!.‰;»-‰;œlˆ;6Ùˆ;_š‰;¤±‰;›k‰;Ï@‰;óT‰;v*‰;Ý‰;Ë‘‰; ‰;h3Š;_Š;D¢‰;È‰;õ®‡;AP‡;Æ=‡;¼‡;�ˆ;½zˆ;ºMˆ;ï¨‡;úö‡;èƒˆ;ïÈ‡;qˆ;\‰;Ñ�‰;˜”‰;¥‰;-©ˆ;þI‡;Æ#‡;üO‡;¼�†;ö†;“@†;í	†;ÏÁ…;º…;0ô…;«O†;î…;Öe†;˜P†;ž"†;(†;Tþ„;ò�„;AÓ…;05…;¶å„;×„;CŒ„;mŸ„;gµƒ;n‚;’Wƒ;Zƒ;Ÿú‚;¬Õƒ;Rhƒ;S¤ƒ; Jƒ;”Æ‚; ¿‚;ƒ;|6ƒ;…Û‚;õ�;Š�;KT�;*"‚;P[‚;ýl‚;¼Í‚;øS‚;ÿ#‚;m‚;�ã�;¢�;!¥�;é"‚;ü�;7I�;¤E�;X$�;aû€;©c�;ÿQ�;=J€;¿o�;è|�;†|�;‰O‚;÷Z�;�¥€;Èz€;|H€;vA€;ˆŒ€;ïv;Wã€;X^€;en€;ê@‚;‚;Ê3�;™¥€;zv€;C`;�Á~;lÂ};};Á¬|;}8|;ØS{;Öqz;¥};²};í`}; d|;S!|;|;F'{;.Íz;A¹{;Jjz;ä‹y;¤‰y;·”x;�’w;ÑTv;¡åv;·>x;¤]y;Dy;¯´y;Ùx;I©w;s€w;’v;ƒ©u;ï¨v;#�v;Ø°v;¦¦v;Ñu;´Òt;rt;¨”t;�&u;su;æþu;$�w;46w;û™w;Z¬v;­ýu;­ˆu;Wäu;<¨t;¦:s;À®r;ˆ˜r;¨q;!p;h%o;ì‰s;{s;û±r;�r;Ôr;¶ûq;7Gr;ar;[¥q;øLq;’Èq;ö-q;fq;ì’o;.Do;¤Èn;VEn;’Ñm;�7m;ƒÏl;—m;ehm;Nl;[Ùk;£3m;Äl;D9m;x m;ê…o;ªˆo;&Io;Wo;{1o;2o;¤n;1Ql;)rm;ün;#m;q0m;Ô¥m;à¾m;n;¤nm;Ÿ®l;Öul;bm;®Mm;Í•l;­ l;ì¢l;ñl;Érk;o—l;—Ÿk;}Ïn;vOo;åbn;QÏn;3†n;/Ãm;)Nm;Fvm;wÒn;hzo;Zño;àÙn;!³n;³Ån;¤—n;no;}-n;[o;¿Fq;AÛp;ÚCq;œ>p;à‘p;:êp;C¸o;$#o;S_p;¨o;º¾m;®�m;[Wm;»�l;Mil;¤¿j;»Çi;…ªj;VÍj;±l;¼úl;û™n;7n;Júm;›¦n;,n;Xur;·wp;|dp;Ò»q;zZr;D¥q;‘½p;…÷q;Ö_p;èTp;èWn;øÍo;ˆún;(Žm;£m;n;r½k;Ãm;*Fl;nµl;”m;1m;*Îk;¨Èk;» k;Šl;V”m;á»m;hÈl;Êñk;
äk;ƒ\l; ?l;&Sk;’‡j;¿Øj;ö\j;xãi;& i;Ng;Ì´f;»›f;rxf;%]e;—Åe;C©f;,Af;ÑÂf;ßf;&ªf;´ïe;±Še; Êc;8|b;²wc;ü=d;aìd;Ôd;Îb;qÜa;ø`;‰³`;oO`;ŒZ_;ð^;½_;lP_;ß-`;�F`;ã\`;Î1`;Ýæ_;ó‡_;h¸_;Í“_;­—_;7~`;Ó†_;t!_;<¯_;Œƒ_;áÿ^;@	^;¯–];šy_;e¿_;A�_;˜`;.C_;ñý^;ÃÕ_;Ôß_;8Z`;¸J_;ŸŸ^;M¼^;Ø’^;<ï];ïo\;Êf];^;Iq_;ƒN_;:_;ƒa;/a;O`;à«_;È8_;¥`;x_;r®_;›�`;ÈÈ`;Øü`;vl`;
C`;Í`;È,_;^_;à>_;Ï„^;Ý];c°];&�];ð];àŠ];Æ\;Ïj\;Á0^;’ü\;|];ßÙ];2ð]; H\;8A];-õ\;ñ…[;ã)[;ÓöY;4ýY;ê[;Ø¬Y;XòX;7%X;=LW;I£V;Š}W;ŒVV;XU;7ŠU;Î U;‘T;®8S;½ƒS;QƒS;ÐR;-S; S;ˆºR;l„R;-$P;!&P;„øO;r…O;eO;Ê(O;ÎZN;[O;ÑÿO;©WP;TzP;LÑO;¨ãQ;j†Q;”²Q;ûÔP;¦OP;(5P;Ø)Q;ÍžQ;)®Q;ƒøP;`íO;HQ;ô÷P;÷ùP;TQ;/¿P;8öO;®ªO;ÒO;³ËO;OZP;–Q;2þO;.èO;rAP;Ó/P;ˆMO;xYM;v6M;†çL;ÔsL;|lL;4¼K;÷ÁL;š©L;À»M;Ø‰N;nóM;v÷K;_—K;¸ŸK;}K;{ÌJ;ÈúJ;}¡L;l„L;SÃL;É£M;¿�L;ÊŠK;ŸdL;ÿÉK;ÒM;®ÄM;WûM;›HM; ÜL;eÃL;QuL;TK;jðJ;¥QL;ølK;sÔJ;¡TJ;CzI;Å9I;ÑH;aI;¤I;²¯J;#³J;r†J;ìfJ;#‡J;)žJ;þJ;Œ¶K;³]L;îL;uL;ï¦M;ÎôM;¿´M;=•M;w M;‘‚M;„iM;LœL;ÌM;AM;z°L;´ML;zaL;‰PL;s´K;ÄœL;
žL;×uL;	JL;vL;±!L;è-L;e§K;�aK;ýXK;1¡L;ÓK;`iJ;T)J;ý7J;Ï
I;ƒH;mK;ã9H; CH;]ÞH;šH;*II;¦�I;:I;[pG;wG;nH;©RH;1šG;M6F;„F;š[F;›vF;]èF;“vE;¨QD;œAD;ÒvD;ŠKE;¨åD;3¡D;ÑùD;Ì5E;H¨E;8©E;ô„D;Ô‹D;¼¤E;n…D;¡,C;DòB;C²B;;µB;±¡A;¬¶A;À³A;ƒ™A;³ÊA;öA;xmA;ÎƒA;ª,B;ØxA;$÷@;·JA;ºA;î-B;Ò;B;�QA;wA;�@;›@@;Ë>;ú•@;š6@;¶|@;O @;&ý?;�?;©¸>;iè<;·¹<;ñJ:;ôs:;½ë9;À¨9;ªd9;Ø9;¥*9;zÐ8;—²9;wí9;‰Ä:;Ñ9;à‹9;ÍŠ9;	y9;=g9;¤d9;c½8;V:;}þ:;=[:;¡¬;;o¿;; Ö:;“w:;[¥:;ò9;È9;_¤9;å):;fÿ:;M|;;C…:;š ;;ý9;T¦:;�“:;O¦:;Ÿ…:;
�9;ñ…:;ÁL:;3À:;Cº:;|è9;øØ:;8;;3‚:;›q:;sÐ:;ºm:;¶à:;Í†9;R"9;““8;êº8;ƒÛ8;˜7;Àã7;É»8;8;/L8;s8;lH8;£8;ÿÈ7;Î¹8;†ú8;CÈ8;dÔ8;iÆ8;rg8;‘K7;xt7;?r6;Wç6;L7;êT6;¬5;z@6;ZL6;ÒÈ5;r¬6;]<7;dI7;[8;®7;3£7;rŸ6;ýÄ5;ö^5;*O6;H+7;¬å6;�N6;Ô|7;wN6;ò7;Y6;½K6;õ6;L×6;æ�6;8?6;Ï(6;€a5;Î75;º’6;N7;7;ø»7;–ž7;wc7;r7;N%7;›H7;ó7;Å™6;€`6;T6;ÀØ5;å5;qØ5;o6;éÝ5;£6;|Ž6;É†6;½Ç3;ŒÞ3;@3;øÅ2;½2;{À2;162;|Ê1;lÒ1;­1;›\1;�1;¹/;Óè.;w0;_/;¬/;%/;Ó¸/;Àx0;{/;ä¯/;²¾/;Üœ/;®a0; ù/;l¦/;³.;ìu/;²4/;Ûs/;? /;sù.;Ê2/;!Ã.;Q	/;Ýi.;@F.;ÌÐ-;cx-;Ïä-;_ð.;¼Ý/;@w1;û11;X1;î_0;“0;”ø0;NS0;{ì/;w/;mY/;f.;(Ù0;…/0;î¼/;„²0;)¯0;ÊÒ1;»54;À3;…Ò2;!2;ºx1;%¹1;óù2;%-3;¼³3;/M3;²T4;�4;®/4;àî3;è|4;º4;Øä3;LÖ3;œ3;½÷3;‰’3;dÐ3;À”4;Lü3;rb3;Äà1;ö91;Ãh0;?ë0;–0;áK/;ãÉ-;
ä-;c0-;.P-;ßH-;½x-;£.;FT-;Û,;4\-;Ãn,;ôP+;`#+;x`+;|+;‡*;*;;P*;Ó™);êû(;˜‡(;}ª);Á€);e‡);ø);Ö6*;àK*;w�*;†+;	�*;¬P*;`ô);x*;of*;aÃ);:Ô);Dh*;@¸*;“Å*;ß…*;ìN+;hº+;®~+;©+;.b+;2º+;—+;Ó*;¼@+;Ó(+;ˆÀ*;Î!*;Ny*;[¬*;©);_);%|);s†);†­(;`);=Ú(;C9);	„(;;}(;áS);±i);±*;sE*;2);[(;&);G(;?(;J,);Ýï(;tÿ(;z);Fu);éÈ*;üË*;,ð*;7+;ó,;Öô+;†î+;Ó©,;Áí+;Ÿæ*;ß+;�#+;ô+;w+;Qè*;×"+;÷+;H—*;òš);V);xN);cê(;>(;ôÆ(;
À';±Ô&;�^';ˆ’';¨Ó&;h';&(';Ç';TÖ&;½£(;©O);-P);­);A);w);œœ(;Í=(;�ß(;#.(;¼';qo';í2';Ý';Iš';›©&;6“&;cº%;¦K%;Öß$;¶$;}­$;&ç$;Ô%;Ìå%;Ýö%;èc%;èè$;¸N%;rÃ%;Hd&;x„&;JÅ&; )&;r‰&;—ÿ&;–';¦';Ìp';ó7';Ûá%;ÖÅ%;ÁŸ%;¤Ý$;[%;?Ï%;A`&;ˆì%;ßÁ%;ÍÅ%;	õ%;Ž%;ÉÈ$;òÚ$;åP%;HÓ$;aü#;ÔÍ#;’#;3ì#;Û$;Þ®#;–þ#;÷$;ò‹$;\ƒ$;À%;´A%;-I%;/u$;ƒi#;!#;,ÿ";âB";ƒe";êª";ä»";…";ˆê";<L#;Ñ($;’x$;Ê=$;$;ýº";Ð™#;Ú�#;Œí#;Å#;?R#;4æ#;Aà#;¼«#;¨Ë#;\—$;×4%;�Å$;»$;Ÿ÷$;ô$;ß$;?Í$;æÓ#;Ús#;
�#;2";™E";y³";i ;6° ;¶Ü;w;…;û;S©;×ö;e;>ú;qª;£Ê;‡Q!;,�!;Ìh!;Š!;³!;O_!;Ðh!;
!;øÀ ;U|!;àP!;ó†!;¶";@¼";8£";ø#;“�#;k˜#;½y#;´Ì#;¿�$;`
%;ry%;ÆÏ%;û¡&;ÈN';4q&;Áy&;M &;×%;	%; E$;$;³Ÿ#;Z2#;y`#;=½#;–ó#;.¾$;$ó$;è}$;ëö!;)";=ñ!;˜!;èx!;Ú!;@x!;–!;Þ ;sÜ ;¬Q!;6`!;üt!;ï´ ;$‚";g@#;V³ ;ù¸;V�;­W;�;œX;:›;c¯;Ï§;Ú˜;ªÉ;s«;ÿÏ;;†j;q@;¸;TW ;”þ;óh;ß{;ºŽ;‰Ÿ;d­;Ið!;ñ¯!;S";Õ";J�";Ê";Öø";.É";÷";Ê/";¹W";Ç=";ŽŽ";
A";:#;R¿";;,";W*";›";„";Äõ ;>Ï ;î ;3¨;gt;¸q;ÿ;;ò';³­ ;f:!;• !;v!;êV!;B¿!;|Â!;©‰";�";‹º!;;G";M";æ";—f#;Ï6$;“ß#;ã$#;Jº";u@#;ñ¨";ÔÃ#;(x#;|~";ó…";:û!;â!;ÍB!;›Û!;£š!;§Ñ ;Ð¥ ;ßY ;}‹ ;€!;¶!;cÛ ;
ˆ!;k!;¦J ;¼ ;²;Ö ;bÜ;,·; ;Œ;íd;œ™;õ§;É;:Ú;Tš;”;.;h=;!ˆ;ò¶;�É;–;†â;N;ïÑ;õU;1$;Í;SE;Š];\ ;d‡;-m;$;Ýé;8…;ÆÀ;w;á>;¤þ;H{;Î—;æ¶;ýÿ;Ì§;ü¹;‰¡;»‘;|ð;ó+;Ì;å;;K;,r;Q;Ê¶;­;ì¶;Óš;%–;¢@;Ò;i[;yö;2›;}Q;o;¯-;³);ìW;;�†;¦›;i;ú];ØK;8k;›®;ïJ;€‰;Ç;�S;(&;˜V;,ß;�;¸L;M;p2;ÃF;Bñ;ÓZ;ü;»;ø;ð&;‘q;Ý};S#;Xp;�r;6;Nè;šQ;ê ;L€;‚ë;ˆÍ; u;=W;o©;Î´;#¬;è;;'Í;X;æ; ª;SM;s;;z;ãè;ø;ô ;mÛ;½Á;l{;–;Èy;&B;¦,;ã\;²ù;�%;+å;¸; u;ØÐ;x«;4;„Z;Ö^;ÖÆ;+ë;¿Í;Hq;Æâ;Fá;5å;}1;Ÿ;W±;k;ÏG;ÉÊ;�Š;ûO;Õñ;);¬/;Qu;k;-;|®;Š9;´c;7$;mS;Ó1;ï;ñÎ;•;¼÷;Þv;8Š;1‚;z;8ž;ç*;’«;9ˆ;û(;#W;<ù;ç¶;”8;/?;©;1-;Ä”;á#;Q	;ÍO;L;–0;,;Œg;å²;ûÔ;ä·;l°;’;ª;ÉÂ;½§;e;d‰;t#;YY;j‚;M-;7;N”;óg;ë;‰[;çg;ñ>;Ú;];a‚;Œ`;TÜ
;&;)µ
;Í
;fv
;Ob
;/§
;
é
;0P
;+;ŽÌ
;Se;º¯;m;K;£„
;ýD
;S½
;�
;V	
;Û	;n•	;?	;„Ü;ñ;Yº;OŸ;”›;˜	;Öÿ;�˜;Gè;W;J;Ñô; ²;oV;ÄÜ;Æ;Ýã	;®¬	;Lð	;]<
;Ž
;ý	;F;XÔ
;‘
;Î¥	;Ÿ´;Ð‚	;ÜÃ	;Ì^
;¾¶
;&¿;Ø‚;¥0;s;6ë;l";¸å;ÍÎ;QÊ;�‰;ø>;á†;ÊÈ;b;rû;êT;Ú’;(½;ý§;k;j;¼7;¸Ê;‚;¬4;Ò;„;;”;Ñê;ê«;aË;£®;_Ì;¶Ý;ô;ÇR;	;];y;(m;Fm;!o
;ñå
;¼
;ø(
;Ô•
;[�
;½<;Ø«;º‡;¬ˆ;Œµ;‚ò;LÛ;xu;l
;*;ÍÞ;sþ;£Ó;û¨;{—;3¶;WD;½:;x3;Gç;ª9;™;Ý«;³»;¼¼;~´;¶Ö;<>;];W\;äk;Z²;ï�;È;�A;�;ÿ;ä1;Ô&;5;ª2;Þÿ;d•;j®;TŽ;WÞ;'Ò;Ó5;Tw;z�;í™;`;-y;Ç;¨É;è”;ë;Ö;•�;_;ø?;å_;9Ž;=];‡Ï;–É;Þg;:;`Ý;æ4;V¼;±;65;§o;Å;=k;ÖE;Ë;÷Ë;°e;jŠ;¦þ;¸=;F;öb;Ì�;!&;í#;¡;Ãï;Æ“;R;½;wN;L‹;œ»;Ã;};•‰;{¶;j;Ô*;\þ;$t;Xi;­:;Œ…;]µ;R¨;Vç;$;œ„;óx;eW;Í2;CR;ý�;ý±;ê¼;1Š;ã¬;�ò;³¹;æ÷;—;ŒÁ;Ú¦;ß¯; p;=õ;´†;ŒŠ;læ; ;; ;ªº;ÑD; .;iþ;¥õ;ño;äË;�;wQ;?;Ç;~«;Èƒ;ý¹;©;†8;MÚ;&›;x);y2;¤t;!;ã³;�þ;”Ç;];U
;¹¼;st;¶[;ôC;!;,{;A];4;ŸÞ;äõ;„;Û5;q‹;VÂ;,«;¶•;YZ;a);ì;.;þ; ;¢;Ö�;5};ƒó; ç;Ûe;—;A;†ü;¿¦;8;:š;ã=;�ý;4�;¶f;ç;ðÓ;Ñ;|y;ßÞ;Ó;ô
;Ÿc;óþ;œÀ;ù‘;è;L8;�B;ô1;O;[};Ff;Z};!W;9å;ï²;l½;
;‘N
;Ø‰
;(
;Cˆ
;¸Q
;m|	;‰ø;Yè;	;9	;¯@
;‹§
;˜Æ
;(¶	;U•	;Ëw	;æ	;f	;&	;kc	;è;…;zÍ;ó­;¦Â;¡È;!’;°º;!O;äY;;Án;¨;è7;–’;Ü—;�;Ý ;Ì;Eé;ß;¼@;µ";‘H;F ;x1;Î_;9b;…;¤;ù^;4%;  ;Êö;,Ü;	;:»;[;™Ó;”;¤9; S;K;;…—;+½;¬6;dÒ;¿;ª¿;àJ;+Ë;^;äø;©“;º;1y;çñ;œÁ;½ß;¤†;±y;¶p;ù~;;´;S;TX;Ï;Ê¢;
‚;
J;ÕT;Ãˆ;‹Ô;�o;ú;Ã;¹§;¿;%;=Š;Þñ;Œ´;é�;dˆ;pÔ;Èw;n;w;²í;Hl;*á;47;(®;ÂT;½Ž;ï–;Ì;¤v;3;êX ;½Š ;ÔÅÿ:ÏÛÿ:=jÿ:_Îþ:¤éþ:¦,ÿ: ;´O ;° ;{ ;.ñ ;Ú‡ ; @ ;F ;r–þ:!0þ:ÓÊý:èý:Íºü:šý:ý:tôü:†�ý:r5þ:àÛü:%iü: û:�Cú:Tšù:è ú:h]ù:r´ø:åø:;2ø:øÿø:ˆªù:Pù:œŸù:ÚQú:(?ú:`²ú:-`þ:Oÿ:OEÿ:Ÿsÿ:í–þ:Áßþ:×ÿ:Ô»ÿ:Æ? ;a: ;Éÿ:V‚ÿ:‰�ÿ:eäÿ:ã: ;æ" ;æ*ÿ:“° ;¿œ ;/ ;ÈY ;¯¿ ;d ;”Û ;Eq ;H ;ŠZ ;$‹ ;“ ;¾Ö ;Ê-;�t;ì�;Ž;Úž;=ž;v#;¿;
;,;Ø¶;«À;¡À;ˆì;!ƒ;-P;úû ;#‡;ß“;«å;d;†ù;AÆ;Ì×;e?;NÜ;µ;½;Ð/;ü÷;zœ;4�;M2;më;O;;¸¾;;/;½þ ;3];[;Ã‘;-ô;óÝ;K;ô;Ùï;ØÛ;†;–õ;Ãì;`,;_v;öY;.�;½];;Ì?;=å;cò;Ôò;sÿ;DÞ;lÃ;.Æ;c¥;B;É;*.;�W;x7;øý;{µ;*;Ÿ;´u;¨á;�;¼®;J;ï);u¢;câ;˜‰;äó;ÇG;2;×;F%;Qä;aà;ÐÏ; Q;ÚÒ ;gÍ ;Î;LY;�­;Äß;‘¥;æ[;Œ;¹;uú ;œÐ ;Üu ;ÝF ; ;(˜ÿ:‡þ:©þ:÷"þ:¨]ü:Ã*ü:¦oý:åUý:ºÝü:ö<ü:—åü:J÷ü:X5û:¦û:ŒÚü:¶–ü:l­ü:ý:D¨ü:£'ü:ülü:s-ü:lÛû:o“ú:Š�ú:6ù:w&ù:ÈJù: ¤ù:¶ú:]�û:|ûý:!öý:ˆÙü:ï\ý:4Ýü:ã¬û:±-ý:}Sý:š(ý:Äyý:tcþ:é4ý:¿òû:›eû:Üšû:d:ü:lý:.ôü:ºYý:»ºý:ÿý:=‰ü:e±û:ìZú:ú:zFú:z9ù:I‚ù:eú:Wâú:)Îú:Ü	ü:û:¦âü:žü:&µû:„äü:r�û:…Ïý:4šý:/_ý:J�ý:²Eü:¡Šú:wø:QÇ÷:ïLø:¸qø:·µ÷:�È÷:ýÔø:�-ø:\Mø:Mâ÷:º‰ø:	…ø:%ø:Ú¢÷:-…ö:HGö:³­ö:ƒõ:W±ô:}õ:}¸÷:¦@÷:m»÷:�yö:æDö:Týõ:àoö:$·õ:¡õ:ãÔõ:FZö:–�ö:.ö:?Âõ:ˆoõ:d«ô:áöô:¬îõ:»ö:TÌ÷:›ó÷:1K÷:MW÷:‘Ÿö: Þõ:œáö:ƒ?÷:s÷:!õö: úö:V÷:wr÷:%&÷:Ÿ÷:“¦ö:¿@÷:”ù:Êø:€Ç÷:	¶÷:vø:6©÷:|Ú÷:w¸÷:@ø:ÈÙ÷:7÷:¬üö:a÷:Mø:æê÷:�_÷: ÷:Äñö:®$ö:–ë÷:Û1÷:O<÷:ï;÷:¶òö:÷t÷:H}÷:eÂö:¿A÷: ø:Ûé÷:Ñö:ø÷:Ä÷:4võ:{oõ:Î	ö:áö:Y÷:ßpö:ÑFö:²Eõ:;»õ:’Põ:¼žõ:Åõ:8iõ:½¼õ:Ddö:ëö:¤‡÷:Æ÷:nSö:0ö: "ö:÷Pö:RÆö:[r÷:z¼÷:=�÷:–Ç÷:ÃF÷:®	÷:c&ö:ÎQö:Jðö:J5ö:
¹õ:®Ôö: ÷: ¶ö:	bö:;áõ:wö:cö:WÅõ:X«õ:4?õ:ƒ(õ:�œó:ªùò:Æ:ó:…*ó:¨=ô:­2õ:Öëó:ézó:i„ò:›„ñ:¿“ñ:Mñ:	ð:¯fî:”0î:î:á›ï:`ï:Uî:,˜î:×î:ß!ï:Zåí:8&î:lÖí:  ì:ì1ì:fì:ªtí:æ¾í:Ãí:ÀEí:v{ì:AXì:Á3ì:èÏì:\Âì:FÄí:`üí:’5î:ñ.ï:=êï:súï:eï:îÊî:Î«ï:Dhï:ôí:ÝÒí:®Nï:<¸ï:ÊFð:Îð:\7ð:²ð:e5î:2ûî:ˆUï:ºð:˜Sñ:C“ñ:!ò:1ó:,Kó:€¾ó:{ó:4qó:Qáò:4mó:áÝó:úô:ûYó:R-ó:cåò:²—ñ:ÛCñ:ñ:³Sð:½Nð:l¯ð:¥cñ:Ouò:Hó:_†ó:Zéó:h²ó:Î€ó:[ó:3(ó:Ÿšò:I3ò:”àó:#Ëó:ó:Ò™ò:÷Ñó:fƒô:Ôö:ö:ƒ]ö:Úvö:éÇö:IŠö:#Úö: yõ:W|õ:õ:sÇö:ïšö:šOö:1Ÿö:c°ö:Úö:,­ö:)âö:öö:‚õ:É]õ:Fqõ:[þõ:}õ:M¨õ:„õ:Ážõ:LËõ:Î÷:Ø÷:M±÷:wù:67ù:	ìù:ñðù:�Cú:·ú:„û:¿ü:¡ƒü:è¹ü:)—ü:hý:¦¤ü:c[ý:|2û:Lú:šÝù:rËù:ìø:ÝŸù:ƒú:w%ú:äú:&ú:£¬ù:Ï?ù:}lù:À'ú:V¢ú:=¡ú:ŒËú:êü:ò"ý:îŸý:(þ:qèý:Àëü:)ý:å¤ü:¸ëü:	[ü:©û:H¬ù:’ù:OTú:D˜ù:fŸù:ˆæû:¡Óû:Žü:=ëû:tÙü:áJü:´û:ákû:âú:[û:R2ú:·äù:’µù:€µù:E•ù:V±ø:ædø:a@ø:Ã‡÷:ZU÷:÷:—%÷:aÍö:†üö:4Ÿö:Ê`÷:
<ù:SÄø:ÌŸø:Æ»ø:ÿIø:?8ù:oHù:±ñù:…/ú:ûý:„¥ý:?ìý:š7þ:4Hÿ:QÐý:Tfý:ýý:dðü:Š û:Ú'û:máú:Zû:“éû:¬šû:�hü:z)ü:m(ü:ŸÐû:­Wü:ñ¢ü:NÑþ:´›ÿ:•9 ;MB ;,Öþ:·ÿ:¬+ ;Æñÿ:íP ; øÿ:Àúÿ:Téþ:Lÿ:xžþ:œþ:á\þ:÷ÿ:2E ;ß° ;Î¡ ;+Ô ;JP;B;¦ ;ØÉÿ:o*ÿ:’^ ;¨Ô ;�d ;
 ;cÿ:Ï\ÿ:ÒFþ:wGÿ:ÑZÿ:êÙþ:úþ:_8 ;3€ÿ:Cÿ:7Pþ:}pþ:×Ýý:}nþ:zùþ:òàþ:¤%ÿ:ÿ:{ýþ:$Dþ:dCþ:¶þ:+ý:h¦ý:Fåþ:sˆþ:Ï¥ý:-•ü:váû:½Ðü:<µû:©@ü:åõú:ÿû:oû:ÿþú:Êû:QÁû:²û:¥ùû:Ìôû:mžü:-ý:œ?þ:„þ:}¿þ:œÙþ:–¿þ:IFý:ø¼ý:Äü:”û:�<û:.¯û:œ±û:˜Ñû:rkû:ÿ²û:³Sû:Mcû:lÃú:¯Òú:©�ü:6ƒþ:t+þ:ÜCþ:n ÿ:
Åþ:I�ý:©ñû:åý:fâú:]þù:ø’ú:‰	ú:
Žù:ØOø:{Hø:ÆBø:8~÷: ø:”É÷: ù:íŽø:Sø:ûHø:ø:ˆø:Ÿ¶ö:.›õ:�õ:óõ:9õ:×²ô:êhô:h5ô:áó:Œ\ò:móò:ýÎò:ôÑò:Ï”ò:´»ò:*²ò:F{ò:(ñ:�áð:r¨ð::Åð:ó%ñ:M†ï:Lð:DNð:¶³ð:3¡ï:M´ï:nÚï:±Àï:TÒï:rð:Š»ï:0ï:@þî::Dî:  í:Ìíí:í&ï:]Þî:ýî::ôî:¬jï:‘¼ï:¶3ñ:¦mð:Åð:àsñ:Åñ:á¼ð:TŠò:O½ó:—oó:ÛVó:·íó:²ó:ì?ñ:-ò:�
ò:~ñ:»fñ:Ñ ó:¼9ò:Uñ:º^ñ:÷ñ:¯ò:ÌÁñ:<ò:,šò:lvô:›{õ:( õ:I�ô:úó:QHó:ÄLô:Jô:…aô:O<ô:²yó:*Íò:ˆªò:Qñò:\Nó:Ö“ó:·Úò:e†ò:r�ò:®«ó:ezó:]Äò:Í:ò:& ñ:|òñ:$¼ñ:}Æñ:	Bò:ÈÙñ:ÿlñ:-­ñ:–ò:÷$ò:©Bò:,œñ:úÀò:÷ò:àŸò:”îñ:„ò:¦ò:üò:¨«ñ:oò:ûsò:£òò:¥{ò:iôñ:‘ñ:°ò:7ò:e?ó:‰·ò:`7ó: fó:‰"ó:Xèò:Í÷ò:¦Éð:œþï:òˆñ:œØñ:7Gò:´'ð:WÐð:Æ$ñ:ãçï:èñï:˜<ï:œüî:q±î:RFï:A	ï:,Yî:ü¯î:óî:$Rî:o®í:Nî:cî:ÿÛî:Î'ï:�™ï:±ñ:{�ï:­„ï:Bï:²<ï: î:Cî:w÷í:!î:Úóí:Üµí:€Pì:Éâë:qì:XHê:ê:å…ê:ÛÌê:Ø7ë::ì:åë:@öë:!âë:Írì:jtë:Œpë:‘#ë:�ë:s¸ë:z‹ë:,ë:æyì:aøê:s"ë:çê:H‰ë:ÑSë:fÝé:	Ëê:×Íê:íhë:³Vë:³qê:n¤é:[;ê:o¥ê:oë:²¦ì:í:|<ì:�?ì:“5í:M7í:_|ì:ÉÏë::‹ë: äê:2ë:+ê:Þê:ÏEê:cüé:ªªé:î!é:;�è:ïzè:aCè:Dè:Zhç:ýgç:¢ç:¡cç:m‹ç:ziç:œç:¸ºç:ÊÃç:[ìç:¶Lè:¼‰è:6¦ç:ìè:¸¿æ:�íæ:F¹æ:”ç:ª*è:ïè:wÅç:£Óè:îðè:ªšç:{@è:²rè:.Íè:Áçè:‰¤è:/Ié:_é:^è:8Âç:É/è:¥»ç:Jƒè:]Åè:a4è:� é:ôûè:Á³é:nÖé:· ê:x;ê:é4ë:Ô¯ê:fÜê:ñ1ê:®œê:Æðê:
Úê:]ë:h¥ê:©½ê:�	ë:Ž¤ê:Doç:šNç:ŽÇæ:Ò©æ:{îå:.æ:&$æ:�iæ:¯æ:›-æ:ÝOå:cÌå:ÿSå:±®ä:®mæ:ê¿å:ÿæ:{æ:Yæ:–Õæ:¯«æ:?aæ:Wpæ:ŽËæ:1Xæ:?>æ:på:à­å:]>å:à½ä:4¸ä:ºbä:ìÿã:ÚYä:öaä:œä:oqã:[[ä:ÿä:xéâ:Ãjâ:é â:ì&â:l¸à:É­à:òÂá:ö.â:qvã:%ä:öŠä:óiä:C€å:ûTå:�¤ä:æã:�mã:ä:jä:O}ä:ää:ÚOå:Öîå:û4å:óå:¬æ:Éå:Ú’å:Û¾å:ÃDæ:Žæ:Q£å:Kå:—Kå:f×å:‰Kå:ßeå:�©ä:³ æ:ˆËæ:
Cç:*æ:è³å:£Dæ:´åæ:ñæ:Ôç:££ç:Àç:ã×ç:Žæè:ô5è:ø'ç:,æ:³9å:Î3å:}rå:4Íä:îã:öòâ:ïÜá:¤â:ˆ�â:$iá:jÒá: ¾à:à·à:¾à:ýÝà:ô¿à:¥(á:CHá:@8á:1±à:ƒ_à:D2á:—
á:Œ;á:˜Êá:V�á:êMá:åvà:Ê	à:Ï*ß:exÞ:Ã.Þ:&7Ý:¼�Ý:ÓBÝ:ûgÝ:ŒÝ:-¹Ý:MÔÝ:EÝ:³–Ý:vtÝ:MjÝ:ÈKÝ:TEÝ:› Þ:ßß:èÍÞ:ºèÞ:3ùÝ:Ü#Þ:ndÝ:AÞ:ÌÝ:¶(Ý:{óÜ:À Ý:ŽíÜ:É‰Ý:èÝ:odÜ:�Ü:Ä™Ü:ö+Ü:øÞÜ:Š(Ý:Q‡Ü:£jÜ:ŒoÜ:ïÿÛ:4ÃÜ:˜Ý:³‡Ü:’cÜ:IèÚ:Ý	Û:w¡Ú:Ä¥Ú:£¿Ú:Å¥Ù:ÑºØ:ãØ:#’Ù:%zÚ:$âÚ:j‹Ú:zìÚ:­�Ú:q%Ú:dðÚ:ØvÚ:¦2Ú:änÙ:(’Ù:ÿþØ:v©×:t»Ö:øÖÖ:1*×:ó’Ø:ÄÝ×:ôæ×::SØ: ?Ø:ÀÁ×:6¥×:…×:¶F×:qÙÖ:¬ÅÖ:¸Ö:}ÎÖ:j«Ö:2×:Ûl×:<l×:‘×:)0×:’ÚÖ:û?×:šB×:Ÿ×:vÑÖ:ªÖ:e×:�9×:˜õ×:¯Ã×:ä×:¸8Ö:–Õ:ÐÕ:ÜÓÕ:Ž‰Õ:_ÐÕ:#Ö:_€×:w¾Õ:XÕ:ðÔ:€ºÔ:eÔ:³ÌÔ:s,Ô:¡pÓ:o�Ó:.Ô:qéÓ:�3Õ:ØèÔ:©°Ô:ƒ*Ô:S#Ô:øàÓ:7�Ó:ÑÓ:4Ó:ä3Ô:®Ó:­sÓ:MFÓ:OgÓ:1lÓ:6úÓ:&Ô:/7Ô:6ÏÓ:íÑÓ:¡€Ó:ÿyÔ:è¬Ó:¼±Ó:?âÓ:_Ô:<>Ó:sVÓ:V¥Ó:wÒ:æÜÑ:ÁmÒ:`lÒ:IƒÒ:$Ó:Ÿ1Ó:
XÓ:—‰Ó:ýàÔ:|@Ô:ØAÔ:fHÔ:8|Ó:ÿÑÒ:R
Ó:/IÓ:¡µÒ:´µÒ:{Ò:DÒ:¬¼Ò:ÝçÒ:ÉoÒ:è@Ò:´òÒ:ƒ^Ò:4zÓ:MËÒ:2.Ò:
•Ñ:D Ñ:”+Ð::³Ï:ÓÖÐ:ýiÑ:ÎÁÐ:N Ñ:AÀÐ:\ÕÐ:	Ñ:HBÒ:ï,Ò:Ò:CñÒ:íÒ:J(Ò:’fÓ:ÖÒ:ÑÓ:²@Ó:ó+Ó:ÃýÒ:F’Ó:j€Ô:3^Ó:édÔ:¯NÔ:DˆÓ:_ßÓ:Ó:œªÓ:CPÓ:IŽÓ:TÝÓ:»KÒ:·Ñ:@�Ñ:SÒ:úÐ:’>Ñ: BÐ:;Ñ:œåÑ:àÐ:e_Ð:DŽÏ:Ñ�Ï:š¶Ï:ÚÐ:ÎDÐ:ŸþÏ:<{Ð:7ÄÐ:äÐ:ºÏ:ºÐ: Ï:é¡Î::ÁÎ:]Ï:ÖnÏ:Ï:q•Î:M€Î:,.Í:D”Ì:©­Ë:³Ê:×Ê:ßúÉ:ä!Ê:·BÉ:Ê‰È:É:	]É:o÷È:àÈÈ:ìÈ:ãcÊ:ŒRÊ:îFË:ø{Ë:¿ãË:,�Ë:	…Ë:“Ë:Ë: âÉ:t™É:JŒÈ:¶WÈ:È†È:“·É:…™Ê:ÅÉ:áWÉ:­œÉ:)Ê:lÞÉ:`¨É:q•Ê:ñ>Ê:ÎÊ:dñÉ:ŠþÉ:|`É:Ý¤É:`É:4;É:Ñ)É:¬ÓÉ:Î«Ê:éÏÊ:è—Ê:)
Ë:Ÿ¶Ê:è¼Ê:Q	Ë:²JÊ:÷‡É:ßÊ:‘É:·OÉ:]_É:|´É:€�É:Ü"Ê:[gÊ:]wÊ:û{Ë:ƒ�Ë:à°Ë:FÉÌ:Ž2Í: ÏÌ:ý�Ì:/¡Í:r_Í:€ºÌ:}nÌ:OüË:ñË:`·Ê:ÍÐÊ:�¬Ê:”OÊ:ÿË:›TÌ:w÷Ë:ÁKË:ÎJË:Å�Ê:á/Ê:¦Ê:¢Ê:DøÊ:llË:�Ë:!ëË:óMÌ:ŸÜË:ô+Ë:2pË:�çÉ:­­É:s•É:œZÉ:öiÉ:ÌÊ:FÊ:!ÏÉ:áŽÉ:Z�É:=ÈÉ:Í;È:šGÈ:	hÇ:H?Ç:óÁÆ:úSÇ:h–Æ:ó{Æ:%ÖÆ:<iÆ:áªÄ:¬iÅ:A�Å:#ÛÅ:�¤Å:OÜÅ:¸¼Å:€´Å:»{Ä:ŒÑÄ:aJÄ:Ø.Ä:sVÂ:„‚Â:�‚Â:WFÂ:ÿÂ:fYÂ:¶ Ä:Å:ævÄ:xXÄ:Ý±Ã:²Ã:*ùÃ:ßMÄ:êòÃ:|ÔÃ:=Ä:øÇÃ:ÊYÅ:!PÅ:(¢Ä:#WÅ:Z‡Å:ŸÀÄ:©­Ä:=ôÄ:;#Å:RVÅ:oöÄ:ÔžÄ:hwÄ:Z§Ä:jcÄ:FÄ:sðÃ:Ê`Ä:„£Å:¡�Å:­AÆ:{vÅ:·cÅ:‘£Å:¼�Å:�•Å:a?Æ: 7Æ:I³Å:XÅ:Ï·Ä:ŽÄ:¥>Ä:o²Ã:ÕÃ:¯«Ã:ºƒÃ:TáÃ: Ä:OPÄ:ê°Ã:nYÃ:èbÃ:Ê·Â:±wÂ:}zÂ:ºÇÂ:Ø•Ã:­*Ä:�Ä:·ðÃ:.ÖÃ:£8Ä:áÄ:€ÙÄ:vOÅ:¨CÆ:©«Æ:%³Æ:�fÇ:¤ûÆ:ßLÆ:úÆ:ß4Æ:/ôÅ:aÍÅ:f$Æ:ríÄ:×Ä:¥Ä:œJÄ:f~Ä:²ÁÃ:lÃ:×âÂ:sÂ:Ü›Â:�ÂÁ:8�Á:mTÂ:ˆGÁ:ÜÄÀ:H²Á:mgÂ:O†Â:rÃ:—ÉÃ:íŒÃ:˜aÄ:ô‹Ã:^Ã:ækÂ:€ÜÂ:%PÄ:QÄ:¯+Ä:×šÅ:±ŒÅ:”ïÄ:’0Å:S¨Ä:dÅ:Q”Å:*óÄ:£§Å:L]Æ:fÕÆ:ÛÎÅ:Û(Æ:O³Æ::ŸÆ:»‚Æ:]Æ:ZOÆ:³QÆ:äEÆ:±¹Å:¬˜Å:Ú_Æ:w�Æ:ý«Å:ô/Å:´Ä:X5Ä:ª`Ä:ÒÄ:á„Ä:ÍÎÃ:r!Ã:#OÂ:©7Â:ÊQÀ:øhÀ:ü•¿:VÀ:æ×¿:ú<¿:@õ¾:ƒ¿:}P¿:ú•¾:ô¾:ƒ¿:(“¿:z¿¿:í2Á:<üÀ:oþ¿:³$À:=„¿: ¿:[þ½:È”½:“½:ã{½:»ý¼:é[¼: {¼:Ü½:Ú¼:Žï¼:&’¼:Äá¼:ý³¼:;»½:ûÞ½:·½:ÁB½:Åo½:èe½:¶½:­K¾:d¾:s6¿:”4¿:È:¿:¿:¿:r5¿:N‘¿:ÄÀ:AÀ:÷ï¿:ÅÒÀ:ƒAÁ:·ŠÁ:éËÁ:ìFÂ:cºÁ:¨fÁ:é6À:jÁ:Ìù¿:j}À:Ý2Á:1âÀ:d"À:BÀ:²NÀ:©3À:“HÀ: â¿:¨/¿:ôô¾:†¿:×“¾:HŒ¾:…�¾:€÷½:”½:Ô¼:/½:,U½:ü9½:†æ¼:7½:¿=½:¶½:å¢¼:Àb¼:.�¼:š•»:©³»:‘=¼:xt¼:¨á»:¬º:Tµº:NDº:èÚ¹:¨/¹:Èj¸:èÖ·:Ã$·:œë·:�ô·:×å·:Ó…·:3n·:G·:Ú3·:CE¶:L¶:ï÷µ:Wßµ:;
¶:Vµ:ûºµ:Ftµ:wR´:ã³:R­³:2‰³:ª÷²:	B³:�T³:<õ²:\÷²:Åè²:—Î²:D=³:,\²:6‹±:²:S±:¶ì°:ÏN²:Z;²:[²:�N±:’±:<]±:º"±:mÀ±:œö±:À²:A°:Ág°:òÌ¯:8×¯:,à¯:Z°:!ô¯:}¯:7À®:
Œ®:c_¯:}œ¯:á°¯:‡°:‹°:Œï°:»…°:Še°:?°:¯y°:ªb°:<b°:�T°:&Z°:}ö¯:Øô¯:š¯:;h¯:¡‚¯:Æ"¯:Hk¯:öq¯:e“¯:$a¯:_@¯:!®:<Ï®:¼«®:~®:{T®:4L®:›�®: z®:&$¯:è½¯:à¯:.î¯: |°:} °:ÃÌ¯:<°:—É¯:zÎ¯:!i¯:Í³¯:`*°:œ½°:ý°:Ò–°:±:46°:·Ž°:ö„°:³	°:ÛÁ°:¶(±:é°:|;°:’x°:D°:H½¯:’M¯:·T¯:|6¯:¿õ®:º2®:fš­:˜J¬:À¬:1¢¬:œ�¬:e±¬:­:/v¬:ñ3¬:#Ø«:ï«:Aí«:X<«:=v«:	šª:¡	ª:Úúª:@¼ª:ÿÞª:ú"¬:‘	¬:Ã‚¬:Mv­:X�­:û¶­:´£­:W®:Êƒ­:Îs­:· ­:….­:2­:ÿG«:óc«:öCª:FSª:Ì`ª:ón©:»ª:&$ª:ß ª:7’ª:zoª:àSª:ïrª:’Õ©:„©:3©:ÔÊ¨:ö†¨:÷©:€…©:ôI©:B©:L©:lÌ¨:o¨:z0¨:_¨:�z¨:¨:¿’¨:©:�â¨:òF¨:3)¨:	¯©:h›¨:Ü�¨:Sõ¨:ý‡¨:$‰¨:ƒ±¨:Oš§:O§:×¦:æ¦:?N§:û˜§:­ì§:²ž§:
°§:€¨:)¨:•¨:t©:S�©:/Õ©:Žª:s ª:(Ê©:ˆ©:Ãv©:ˆT©:·Å©:‘�ª:�áª:éÂ©:’�©:Ô�©:6©:é±©:#Ê©:dª:x�ª:Ö«©:W6©:RË¨:Æ©:/ø¨:¿÷¨:Í‘¨:‘©:×d©:ºÝ©:C©:oÎ¨:ª ©:=÷¨:is¨:Ý‚¨:.d¨:ˆš¨:…â¨:¼�¨:É2¨:èh©:·µª:íìª:ó×ª:£¸ª:##«:7Íª:ª‰«:J±«:;«:|Sª:ƒ~ª:®‚ª:ÜŒª:óÊª:³¤ª:,xª:#oª:Kª:V°ª:•ª:Gª:¦Rª:³¡©:=©:…F©:Á»©:Š©:xâ©:¯ª:  «:/”«:Z°«:JØ«:Ô–«:¬:ªè¬:­:©ú¬:û¬:x–¬:Ñ¥«:%À«:å�«:,š«:cÙª:![ª:]<ª:J£©:Æ�©:ç©:’4ª:Ãª:ÿª:�8©:ˆP©:Ÿ{©:¤+ª:xª:_ø©:!ª:O|ª:}ª:ª:h„©:@©:ø¨:ÿø¨:*x©:v·©:¨e©:d©:ZS©:Žã¨:œ©:.Ô¨:å¨:àM¨:Š‘§:R
§:t§:Êß¦:ú¿¦:èz¦:Ú)§:¤§:n8§:�«¦:Î¦:©‰¥:¥¨¥:2ë¥:¨>¦:R¦:¥:o¥:¼v¥:ï]¥:¶c¥:x9¥:à�¤:ñW¤:¶Y¤:Æp¤:f¥:¡*¥:D»¥:R|¥:¡˜¦:7?¦:ãi¦:Ø`¦:¦:I*¦:Ž°¥:ñÔ¥:»à¥:ì-¦:›¦:eÈ¥:Nü¤:3Ç¤:ü‰¤:Rw¤:� ¤:Ôg¤:2¦¤:$[¤:Ï¥:è‘¤:R¤:Fþ£:Ãk£:EI¤:Ä£:…ƒ£:	d£:0'£:H£:t£:€£:¡[£:h£:øì¢:Ø³¢:-K¢:1G¢:/£¡:ól¡:c¡:ÁÐ¡:i¡:&L¡:S× :e¿ :Ã!¡:I÷ :jo¡:2×¡:X&¡:“f :�› :ßz :zÀ :“ø :gÀ :8ì :ËS¡:rt¡:HG¡:ù¬¡:£î¡:Ôä¡:r¡:è :”¡:”s :¤Ù :Ë‹ :æ ¡:h :¯d :	Y :—vŸ:/% :Ý :4Q :®»Ÿ:hŸ:¤´Ÿ:ô‘Ÿ:í„Ÿ:s&Ÿ:“8Ÿ:ëž:¢~ž:è-ž:jL�:¬üœ:Gæ›:zjœ:ÇWœ:qœ:!U�:Í~�:i�:j�:'p�:íŽ�:½±�:xu�:/�:Xœ:oœ:‰œ:Ó›:‹œ:³Aœ:•›:í~›:f|›:Hœ:gœ:Âùœ:ñ	�:Êöœ:£m�:ØN�:#n�:J�:Ý²œ:?z�:Œ�:ê›œ:Q8œ:¥ô›:Vš›:B›:ä^›:T$›:¦=š:¡Ÿš:	•š:Âš:aIš:Oñ™:´·™:2Ù™:-š™:XR™:±¾™:Lš:¸ë™:Ñ‘š:ýèš:.Üš:Ùš:¶[™:1™:@Ó˜:¹è˜:"™:6Y™:í5™:�û˜:æ·˜:˜::™:OÀ˜:á²˜:fµ˜:.™:¶™:òõ˜:p¸˜:Ÿ_˜:�]˜:õ�˜:ºp˜:uR˜:.ê—:�—:Ó›—:nâ—:�—:Ÿe—:–Y—:dõ–:ŠS–:”%–:¶	–:ñd–:Û
–:G–:¿‡•:¿™•:¥•:ñ•:ê•:ý0”:ˆM”:Z>”:b÷“:âŠ“:é’:Ž“:Æ“:*K“:1î’:sÀ’:�“:ºF“:Ò™“:úö“:¿v“:“±“:²Æ“:‘â“:dô“:Sw”:vÊ’:×"’:
Å‘:[?’:lA’:È"’: ‘:Râ�:B‘:‘:a!‘:íÖ�:Ô‰‘:ªð‘:“£‘:Ã¡‘:sS‘:¸‘:Ø‘:uß�:j�:æe�:XÁ�:K�:x�:,ä�:ú�:ŸÅ�:|�:ëÏŽ:ÅëŽ:L1�:7×Ž:]—Ž:ŸØŽ:ÿI�:÷u�:¤ �:M�:³�:Á«Ž:ìøŽ:G”Ž:½ôŽ:ä3�:·Ž:†|Ž:*¶Ž:AÝŽ:£zŽ:ŸlŽ:r|Ž:Zú�:M
�:ÃÊ�:H�:úwŽ:æ­Ž:á0�:PùŽ:;šŽ:HæŽ:¿:�:#�:M�:ç�:7ª�:Ï¶�:*‘:o‘:»è�:sH‘:ì �:Æ�:Õ�:y~�:£¬Ž:4`�:›Ì�:Jž�:Í•�:­G�:ô4�:#˜Ž:°TŽ:È»Ž:òšŽ:TŽ:òê�:3õ�:Hª�:âp�:f�:GÂ�:îü�:·¨Œ:V„Œ:2×Œ:œ<�:�ëŒ:L×Œ:ÌwŒ:#Œ:òë‹:’Œ:Œ:­¡‹:ƒò‹:­?Œ:¿pŒ:s\‹:dZ‹:#L‹:ŠžŠ:]]Š:½©Š:'0‹:x7‹:r/Š: Š:µý‰:@Š:3Š:êŠ:/ç‰:›­‰:ö›‰:†H‰:–L‰:Vä‰:8©‰:Á‰:æœ‰:\X‰:ôÔˆ:B¨ˆ:m¼ˆ:äþ‡:m÷‡:¾fˆ:ªLˆ:�,ˆ:>?ˆ:“b‡:ºr‡:¶×†:³ö†:çå†:£†:ë†:’õ†:AA‡:È�‡:Ód‡:®‡:=‡:q»†:¨‡:6‡:|w†:›Æ…:Ö†:·�†:¬¶†:î†:´ý†:ÿÅ†:ÑÆ†:}Ë†:ã˜†:zh†:¤ƒ†:“¥†:Ý�†:VÆ†:Zt†:„l†:Üv†:,<†:÷Ê…:tŸ…:mí…:Ÿ…:«{…:™…:å€…:�À…:´œ†:–3‡:„!‡:ü¦†:IÐ†:Ü!‡:$°‡:Žó‡:,Mˆ:À$ˆ:�ú‡:^y‡:X‡:O1‡:ìû†:ÈÆ†:JZ‡:ÚP‡:Äd‡:s¸†:Qå†:)#‡:R‡:áZ‡:,+‡:Ãû†:ß‚†:y†:ù…:ÑA†:}™…:7†:K-†:DI†:ƒ†:Ê_†:jd†:&-†:ú8†:;•‡:3Š‡:—"ˆ:$z‡:ÕŽ‡:š‡:	/‡:¦ù†:9Ï†:}ö†:|‡:š?‡:»F‡:“‰‡:8#‡:Åt‡:´Ó‡:ÿG‡:“?‡:Š8‡:Ö{‡:ú‡:èÛ‡:4d‡:J`‡:¬Z‡:�‡:Þt‡:Ÿ‡:úT‡:¯a‡:è¨‡:V¢†:þ{‡:•Ç‡:¸‡: Ê‡:É‡:�i‡:c[‡:"³‡:µŽ‡:@‡:n‡:™‡:�Ã‡:JÖ‡:¦ˆ:Viˆ:oˆ:—gˆ:¤Lˆ:ìAˆ:Mˆ:Æ_ˆ:êˆ:A6ˆ:5õ‡:±Ï‡:,»‡:	‡:ÐÂ†:¿î†:ò÷‡:d¦‡:€‡:F¡‡:Ã–‡:–‡:Gè†:‡:Èœ†:0Ý†:&Ä†:—X‡:ß²‡:šó‡:Fm‡:Y‡:&†:Ò²†:$r†:ëO†:è™†:D8‡:\Š‡:ö—‡:¬�‡:Ÿ‡:ÄÕ‡:ù¦ˆ:u‰:®†‰:Ÿ&Š:!	Š:>áˆ:l�ˆ:¯ˆ:Úˆ:•‰:Ñ”‰:!rŠ:*]Š:�ÂŠ:�‹:œb‹:Èƒ‹:ˆÜŠ:ô÷Š:(F‹:%j‹:ÉÒ‹:�‹:eY‹:èT‹:w‹:¯îŠ:UÄŠ:OäŠ:ìÁŠ:z7Š:Š:Šm‰:Ð!‰:¯y‰:…«‰:Ëô‰:KŠ:¿N‰:-¬‰:¤Ú‰:éÌ‰:!>‰:¢0‰:|Úˆ:8³ˆ:©Bˆ:îÅ‡:”Ì‡:AÆ‡:æÆ‡:°‡:zí‡:yˆ:°‡:„È‡:ØÉ‡:<½‡:“ñ‡:}d‡:R#‡:ó<‡:�‡:¯'‡:+‡:Z‡:C‡:‡:F‡:ºì†:?q†:q†:Ýi†:g-†:X�†:�'†:�°…:Œû…:2:†:Ò3…:rI…:z@…:Ï|„:â£„:®„:?U„:ú´ƒ:dkƒ:¸‘ƒ:X:ƒ: *ƒ:3´‚:Ï‚:û·‚:ÿç‚:$³ƒ:,l„:ˆV„:ýN„:/ö„:h„:D²„:…Ýƒ:Ë†„:úÁƒ:·ƒ:ÆYƒ:¬ƒ:�„:¨^„:-‹„:j…:'q…:²…:�‰…:áO…:ì„:7$…:¾*…:æÞ„:ºÝ„:bÓ„:–ƒ„: yƒ:æ5ƒ:ÓÃƒ:ÞÅƒ:åøƒ:Ü*ƒ:a/ƒ:Î5ƒ:â6ƒ:ß™ƒ:fƒ:B‚:ÚU‚:]™‚:�ç‚:6ó‚: ë‚:S¨‚:P‚:Es‚:¬‚:+ö�:‚:0G‚:[;‚:É=‚:ó»‚:hà‚:"%‚:½‚:)µ�:aù�:‹‚:9+‚:G‚:ÌP�:[e�:M�:²ì�:ç’�:¯Ö�:Üj‚:C,‚:Â‚:aµ‚:´³‚:Ìç�:r9‚:|‚:>x‚: g‚:–3�:8I�:áî€:U\�:Îº€:C �:çJ�:Ñ �:Yy�:\(�:j�:ì÷€:�`�:Ö3�:;�:A’€:·€:L€:Ô*€:LD€:és€:c•€:Š(€:„€:<±€:*Ÿ€:G�:¬ö€:ÚŽ€:mæ€:4›�:MO�:_3�:3¤€:7Å€:¯�€:qP€:E‰€:­'€:A(€:·<:¿”~:o€:Æê:qá:�L€:ã[€:¶ �:W(�:È�:F�:$»€:½n€:Ì€:•A€:Äe€:�V€:ñÜ€:šŒ:6:=ð~:ª¿}:ák}:l}:´-~:I(:€:T€:S/€:.É:%Á:x€:s¶:Í?:öf:úì~:üF:(Ò:½€:�€:s€:¡P€:…'€:¼z€:±œ€:¦€:¦<:¸~:\é:½È~:S¦~:†+~:t(~:8=~:ø::ª2:Â~:ji~:¤Ø~:::Sf:æó:‘¢~:ªX�: W�:ê€:¤f€:êŽ€:c4€:Al€:øn€:fq€:—€:Ès€:÷H:½~:ŠU:D€:N�~:c	:#{€:¨€:Ë:€:§d€:8‡€:À�:ím�:áU�:ÔH�:õ�:$×€:ü¾€:bŒ€:§Ë€:^Û€:àx€:Ú°€:‹€:¸ˆ€:r¤€:,°€:y³€:]Œ€:Yˆ€:ñ_€:ÁW€:¦¥€:ã]€:Ñ”€:Kß€::ð€:C�:S3�:�:�:":�:c ‚:Á‚:‡(ƒ:ŸÐ‚:1þ‚:Q]ƒ:|ƒƒ:Öåƒ:o.„:Æl„:
 „:Éáƒ:H„:Ïƒ:Xè‚:Äw‚:˜C‚:RZ‚:L¨‚:“‘‚:ë‚:V—�:‚­�:�Ö�:Û¤�:£�:T>�:¸�:§µ�:í¢�:A´€:ï0€:Z·:%¤:�R:;:}~:£~:Q¾}:z~:ò»}:À¾}:ñ|:ˆ�}:…d}:2€|:·|:M}:mý|:Æ7|:)•z:êÔy:¼¬y:|¹y:²y:EAy::sy:ûºx:x:ãu:2'u:C‚v:Zw:¯Îv:û+x:-x:#�w: w:?Ôw:eAw:Z�v:Á`v:]“v:–{v:A�w:]]w:Žv:é„v:Á¡w:›x:[ªx:˜Yx:³Øx:(&y:ez:Šz:¨y:åx:?½z:o{:q {:ø�|:¿R~:]8~:÷F~:½Q}:`·z: †{:$]|:Ó|:¯ø|:Í{:h3|:L~:Ì~:îX~:±ˆ~:óž}:ö
}:·T}:o;}:S‰:ºË~:ÃÉ}:A~:è~:.÷~::Ë~:XÁ~:Ñ~:D€:Ûè:X€:Å.:CZ:!€:Ü~€:™Î€:žÊ€:ˆ�:¡C�:¦²�:Áz�:{ž�:p•�:²�:��:s•€:h»€:Þ€:lý:dÓ:ê[:€:º;€:¶ô:LH€:ö�:v�:C¾€:´ €:É«€:¼�:\ë€:¢�:?B�:Û€�:ÜÉ�:¿U�:Ý�:_ñ€:äÕ€:jß€:ø>�:6‰�:ƒ6�:�:~)�:6r�:Ö–�:¢•�:^r�:pp�:,¦�:Øƒ�:$w�:
p�:t�:°#�:Æ�:â¶€:Z{€:÷£€:6¤€:öÇ€:äO�:]ã�:	ˆ�:øÆ�:\¡�:¢Æ�:‘ã�:=æ�:<‚:Ÿ©�:íË�:“�:”q�:” �:i�:'H�:²­�:¬?‚:‚:-À‚:Ó‡‚:*‚:þd‚:¢j‚:¶‚:3=‚:é9‚:±‚:øQ‚:”‚:Íê�:¯‚:ñè�:›×�:*^�:¯@‚:ý8‚:t�:“Z�:�Ø�:“‚:}:‚:uE‚:¥+‚:”ƒ:�Cƒ:ˆ4ƒ:=Lƒ:î‚:Où‚:´‚:z‚:úE‚:Ïð�:QŠ‚:ú ‚:Ù4‚:?a�:¬y�:fð€:¬R�:M_€:!M€:ü1€:€:aT€:Å€:a•€:]¨€:]°€:UJ€:%ç€:6Ø€:®€:6n€::€:Ä5€:D€:€Ç~:\g€:=Õ€:ºí€:Ñ]�:j�:T*�:iH�:aQ�:œÌ�:w ‚:É‚:ÿ¦�:ˆ²€:(�:/§€:ë€:½[€:Æß€:öž€:=“€:>¬€:°Ø€:Dû€:|#�:Œ�:ëî€:xB�:â€:2P€:V“€:ƒ(€:Å`€:"<€:‹€:õx€:�\€:7w€:±E€:	€:…Æ:ö~:È¼~:¯:¼Ý:I€:Ïi€:ú€:ß;€:ZE~:TJ~:<á|:xp}:;ú}:on}: Ù{:×Ù{:_‚}:éí}:h}:ïG}:]í}:	Ó}:�—}:ñ{|:W¸|:Å‡|:� |:È�|:Åe}:ï(~:»±~:cD:1€:µP€:!T€:ß¶€: ¨€:º€:�[€:È—€:¾z€:Âm€:¿€:»3€:#Z€:¤Ê€:²�:©Î€:¼€:ó€:ÖT�:Ãv�:j�:û�:6�:ŒÚ€:Œÿ€:z3�:A.‚:`°�:.¬�:;g�:ô€:»w�:óì�:‚Z‚:|-‚:TŽ‚:&$‚:ü�:(½�:„ø�:J©�:h_�:˜í�:Æ�:ÌP�:ˆ��:±�:<_�:üe�:‚n�:,�:@�:C�:Ä_�:ZÁ€:Æ½€:?Ù€:†U€:"P�:Px�:=X€:t’€:e€:%€:LF:m™:%6:¿B|:¨¥{:=Ù{:‘{:†z{:³õ{:ý…|:›T|:{:�X{:\îz:ª_{:,}:œõ|:Z9}:Ì|:>}:/P}:¤\}:&|:Í	|:S|:LV|:j¸|:ˆÙ|:s‰~:Æx}:\ä}:}�|:Ù}:Eä|:{p|:¼ö{:<—{:Óòz:$·z:»:z:©{:	z:(y:öãx:àÓx:æ�x:·Œy:@'y:xgy:y:�x:Éñx:2ãy:·e{:*É{:L©|:Öo}:�Ø}:*~:6f:Û ~:|‘~:z~:=~:Ý~:dm~:·b: 2:¨ú~:Ä': Ñ}:Mr~:Ü~:¸Ë~:iÝ}:|=}:(è|:ÛG|:A-|:ój|:hÈ|:Åì|:­|:Z{:7o}:úù|:­õ|:z|:|:%|:’ª|:ÔU{:Ö5{:�ƒ{:¡ûz:øG{:ôžz:º+z:Éiy:Ã©w:º�w:Š¬w:|6x:»Õu:.w: !v:J•v: Òu:êàu:,@v:ï6v:êôu:óu:ñ7u:cët:ãt:2Cv:Q€v:íu:o§t:(�u:AŽu:îÐu:lCv:Zw:N=w:[xw:²Jv:Òv:æ+u:Èhu:ÔÇt:([u:ªu:?ît:Àt:ßt:­³s:_!t:Jr:vŸr:r:(êq:¦÷q:Õp:v^p:|.p:†ßo:,în:è‡n:|‘n:85m:÷{m:’šl:Žzl:o‡k:Ak:,¥k:‰Ük:cXk:¬k:’m:Ÿ¨l:(wl:;ym:#�m:&òm:Ím:vCn:¸>n:Ïþm:Èm:�«n:z“m:Ï n:càn:²(n:Dúm:Òˆn:Nðo:S¢o:œFq:œq:zðn:sàn:3o:—n:—¨n:ôýn:ã®n:&Ùm:s?n:ÊFn:ïcn:›n:»im:Øn:ŒÆn:un:ƒ"o:ö®n:}Þn:3Èo:—ko:±Àp:Fp:Ûp:›+p:zo:!
o:Ö~o:mën:¨ùn:Núo:”Øo:}4q:÷‘q:‰øq:\¢r:jt:HLs:)!t:ï_t:¤s:Ät:2Øs:¿Ås:ås:�	s:A<s:ms:æ¦s:äßr:èr:Ê:s:x¥s:ÑÉs:Às:3q:n¡q:))q:Ìq:	�q:ãp:S�p:Ò¡p:Óÿp:×p:œ9p:ðo:iÅn:=Nn:„¢n:·Rn:$šm:x¦m:Ý˜m:Ým:fOn:(‰m:An:Q3n:Ëm:?8n:wn:OÃn:Ó‡o:ØÒo:n•p:||p:Jˆp:Wo:]o:ã0o:#$n:!“m:S“m:íÊl:Ñ1n:-Ñm:<Ëm:À„l:Ì‰m:ºùm:e±m:e[n:Ê”m:äÇm:­m:ßÌl:ý:m:òn:³•l:x–l:ÓŽk:‘gk:,òk:ª`l:Wðk:äl:ml:ÿ¾l:2¿l:dül:€m:X_k:·çi:Ñ-i:ñi:,i:Éi:¯h:ïh:ˆðg:”Fg:£sg:½h:…h:lh:²g:`uf:)Áf:”¦f:éjf:ˆg:ö]f:-�c:šBe:�äe:êXf: ‰f:/'f:©Ñe:F^e:®Še:…Fe:»Üe:N¡e:vdf:¤þf:o h:jFg:}±f:3g:
h:oµg:rh:6šg:.Ëg:}h:n�g:Zžg:ˆ«f:ãlf:T—f:-Êf:‰Ûf:”õf:Åºe:`ýd:ó‰e:{*e:D'e:}Úe:lf:,ºe:€g:†f:62f:–œf:ò²e:Vf::jf:ÒNg: Zg:´µg:º³g:Œg:vf:ãf:î'f:]g:�Ch:Îng:ì³c:[Êc:�îc:xNd:C¤c:6@c:}b:nëa:
úb:jc:ZÌc:fqd:1hd:Šd:ªÁe:¼Ge:Êe:IÄd:bd:÷Éd:Ê�d:ºe:©¼e:ú‹e:Ú>f:_Nf:Nxf:¿™f:ü^f:Šg:ógg:’hf:šf:;Kf:ïfg:Jág:lœh:Qh:Éh:jh:é¹h:¤êh:�çg:R˜g:s˜g:›1h:Æg:¨Ih:Q“g:dŽg:¤lg:­eg:Cg:$g:´bg:[§f:2f:øMf:s–f:º
g:Œ}g:àCg:#Ûf:Îg:½f:ælf:J8g:íËg:}úg:h:Ph:òQi:–Õh:.vh:¯Oh:qƒi:ûi:éˆi:x3i:Õi:Œ�j:‰æj:sj:Íj:¬ui:Ñ—i:—´i:Ëh:„‚h:x·g:ó÷g:6Ih:±¼g:_ˆg:*<g:±²g:,Eg:?Pf:ÉÕe:Sf:¦ f:ªtg:
Bg:›•g:vþf:@g:O½g:ß×g:h:Êh:ýh:=;h:L“h:	fi:³bi:Àvj:ò+j:\®i:”i:�j:
Si:ìi:(Ši:á°i:ø5j:Öi:–}i:�i:W¡i:$i:Ti:}`i:Fi:Öh:”=g:Óžf:
]f:†Uf:, f:ãêf:Ñíf:´^g:¨�h:æg:ˆ½g:N™g:c½g:Myg:£e:åe:�Âd:dÖd:Še:šâd:ø,e:hRe:$ºe:�fe:É	e:fËd:á+d:ãd:%Id:­d:,_c:c:#»b:Ûhb:ö.c:’Zc:ÿÓc:Íše:( e:·Âd:É¢c:2àc:Šðc:„Uc:Ü_c:·1b:‘Ûb:º	c:ÁÞb:êc: ¬a:|Ë`:c7b:Ì€b:eûa:AÊa:òYa:²|^:È|^:V†]:F˜^:ÆY^:x¬\:’›\:ý[:rž[:ši[:A0[:û[:d�Z:ì^[:;ÄZ:¤Z:\±Y:�EY:&&Y:i–Z:ŸŸZ:)Ÿ[:×j\:ÿø\:(7]:’·\:z�[:è3[:í*[:Ýs[:M\:_\:-À[:mB[:.>\:Ô,\:Ÿ”[:à¼Z:_šY:ƒ¥Z:xEZ:È:Z:ñÐZ:iL[:®·Z:iˆZ:cZ:7ôY:ÛZ:ÃZ:º[Y:‘šX:l‘Y:4ÜY:Ó×Y:¼µY:ü;Z:?¸Z:(†Z:–3Z:SéZ:å2\:ü;\:‘ë\:š™\:4Š[:[[:ØÝZ:–ìZ:¥½Z:e=Z:,>Y:H$Z:zrZ:1\Z:èbZ:‰âZ:sÂZ:¿![:‰[:M”[:_´[:¦Í[:†â[:¯Ä[:X‹\:¤ò\:,‘[:Ú’[:ÎñZ:šÓ[:ß-[:£³Y:ošY:sbY:SY:¡Y:ýMX:IX:7ñV:£"W:¿<X:]]W:*W:æ0W:È�V: \V:ýU:­U:–¤U:ÿ‰U:÷ûV:ÃW:€šW:O.W:šW:lX:sÖW:X:€2X:lÉW:ZX:eY:X:)@Y:(Y:TY:7«Y:ÂY:&¦Y:LÏZ:ZÐ[:Ì=\:éÀ\:»H^:Jˆ]:ï_:øF_:V_:½÷^:¥i_::¾_:#,`:·_:½a:8a: ¢`:›h`:&9`:Á_:¸¯_:1Ð_:n_:ô†^:¨ý]:Û£]:W™]:|ß\:s7]:Ý^:aË]:}‹^:4^:Ó4_:ª*_:»H_:-¥_:V‘_::#`:®Ï_:Œ_:r/_:Ì†_:€¤_:„‘_:ßM_:¶i_:É¦_:ã`:%˜`:4Va:n7a:IBa:·za:£a:Ï a:Èda:þ`:|}a:ßra:¡Mb:=ùa:ý¼b:ec:‰•c:7¼c:Q5d:´!d:{7d:n<d:sYd:´ód:Ÿ8e:¶e:}Te:ìëd:Vºc:†c:ÀÇc:üüd:
e:4d:›e:ß0e:…Íd:{"d:†Dc:Ed:Qåc:”7d:­md:ÉQe:é„e:²·e:$Hf:)’f: g:Íóf:äçf:}g:öšg:ªbg:‰òf:æg:g:I§g:ÝVg:eÕf:€Èf:a)h:¯¾g:…Ãg:O§g:Íh:ƒ/g:£Ùf:1Dg:njg:¨Äf:à`f:.Õf:{þe:Ì¼e:ÅDe:Ô©d:c.e:Z(e:fŸe:Öýd:‘êe:Q»e:ôe:€	f:!˜f:2&f:3^f:NÍe:äd:ÁÁd:�Be:rÏd:Îýg:¬¾g:Iôg:®Úg:Eg:…“g:ªÔg:á�g:©§g:àg:óÂg:(h:…:h:�Bi:o¶h:Ìh:�h:jh:NTi:yi:N\i:¥µh:FÛh:ami:’Yi:F†i:xi:!j:ÃWi:¬0h:©Ðh:³®j:}òj:=j:Ä`j:X�k:`�k::­k:	m:#¤l:[Ñl:rËl:ÍKl:Öm:Ïl:Tãl:Ÿìm:*Ól:û²l:ºJl:ìwl:ÖÅl:.öl:S¯m:ãÏm:Éím:’o:q=o:Ôûn:Ò{n:s»n:–“n:ƒrn:Áo:{ün:Àžn:Ÿ n:z5m:Ô@m:Ãßm:
m:®=m:s8m:­m:t¦m:*Ím:†ãm:qen:X³n:Njn:×In:]ûn:ú*o:´/o:I¶n:OIn:ˆn:Vzm:ï m:‘Ìm:®Un:ékm:.?m:¯m:Fm:ººm:Éìm:ÜÅn:65o:ì o:iòn:÷³o:ªõo:ö?o:†Ìp:ïAq:s;q:Š¥q:Ør:àxr:Êµr:‘s:êt:5t:lt:[Ñt:Z[t:ò·s:Ä_s: èt:�Òt:>u:öšt:	5u:3-v:F‚v:lÙv:Ÿêw:WÌv:äÏv:)Hw:C
w:ßàv:_0x:ó;y:Š>{:W£{:�÷{:,•|:|:|:¬Q{:�:z:3Õy:�Óy:˜šy:?–y:Àz:É�{:Ÿ|{:Å|:
|:¼é{:»+|:V|:l|:ò‚|:À;|:€|:�y|:ƒ}:Ò«|:¥ÿ|:­j}:®*}:·S|:&Ü{:Ïà{:
K|:Î{:ÏE{:å|:”{:H�{:a€{: 	|:Æ|:ó|: ý{:|:ÿ<{:	Èz:lB{:Ò¾{:D†|:¿}:Ñë|:�Ê{:zÐz:ü¥y:†±y:sÔy:ˆy:ê"y:Á•x:vŠx:]ýw:cÖw:z˜w:»uw:1¹w:�„w:è1w:ZWw:%ww:,ùw:väw:Eïw:³v:E¯v:ÏKw:q‚w:Mýw:Åx:…ëx:Mw:Úzv:–u::ét:Qót:v:Í^v:/Ûw:D,x:Rx:{ùx:á y:ßz:ûÒy:Í—y:ûˆy:òôx:yx:< x:ôôx:¼:x:Mzx:xx:Öžx:&úx:Qöx:é„y:…uy:y:Œ}y:½y:ºSy:qßy:äºz:;hz:1o|:]ê{:Ãìz:„øz:Ø {:¿ƒ{:{:ä5{:Ä|:Ÿo}:ä×}:êo}:[)}:š
}:Qm|:3ã|:g|:†Ç{:Ìi{:»×y:N+z:Ñz:&óy:¨ˆy:4y:¬y:›x:Ê§x:,Rx:w~x:²øw:�ox:é y:­Æx:í3x:Ô³w:&x:·÷w:®Ôw:Sw:£x:[Fw:ö#w:ÝMw:Ä”v:)
v:`§u:Qìu:È‹u:ßu:7u:4t:MÉt:qút:Ã©t:,`t:%Ês:Øt:á¶t:Æ<t:è<t:2<t:_þr:4(r:&!s:ªêr:iõr:Äþr:–©r:V%s:­†r:åýr:)Þr:šur:Mr:h€r:½Jr:²Çr:Ñs:ó;s:”Ks:±Ýs:’£s:NËs:×s:šs:€”s:˜»s:�s:ÿ¥r:Æ™r:ïîr:Û s:º6r:¸�r:ˆÒr:ols:Ö¨s:»òs:öXs:ÓÉs:)ôr:­^s:Z—s:és:X¬s:F$s:Å×r:RBs:ø™r:Çr:Ä·r:sär:ãKs:s¹s:Xt::!t:]u:dœu:Ru:DÏv:é[w:Zw:Xsw:]x:£Òx:êLy:hy:ïšy:MUy:N÷x:îŒx:Nz:	Êz:jCz:Óây:”y:Ý@y:OSx: ‚x:î1x:?×w::ðw:·	x:$@x:Èsw:òw:“»v:S„v:JEv:7v:V½u:œrv:ÒÁv:®.y:ß3y:˜Qy:àÉx:o#y:/y:¯y:7Ýx:Wox:dyx:W^y:Ay:×_y:wBz:ìœy:Åby:­Ky:]:y:ú‘y:Œy:øRx:€ýx:Î™x:|…x:Øfx: Ãx:Æx:­)x:lÖw:Ü‡w:Lõv:E¯v:ÖÞv:}v:Êw:ª×v:Ÿ w:±ãv:©v:šOv:ebw:Ô|w:ˆ+x:{Œx:Åøw:6´w:{¨w:Ø‘x:ox:-y:¾y:,by:¥Ry:t¹x:ÛTx:Òw:‘#x:ÓÒw:¦Ow:”ðv:Ïw:¶Áv:›;v:Æ-w:j$w:ü2w:Lw:xv:Ãv:Áôu:ñv:¿}v:ó,v:”ùu:“ßu:æ¦u:…{t:-ˆt:Š�s:Ÿ5s:r>s:fÄr:÷sr:ˆwr:º·r:@Àr:�'r:³¸p:ó…p:€Ûp:Ôp:áÉp:=p:Ÿ¢p:‰/p:nÇo:dào:ý‰o:àp:Ž›p:’Bp:^p:áØq:ª€q:Xq:?Êp:Ãdp:NLp:·Àp:6q:(§p:Á‚p:àp:Nq:üKq:är:4q:Eq:÷ q:Ivq: Vq:ìq:&'q:ûp:
r:Ì·r:…Ls:ÓÔq:;Tr:´·r:©r:Dçq:Õq:Øq:ßòq:î>r:¤Or:­Ìr:$r::¥r:ØÔr:]¹r:Úßr:±hr:€Ôr:¯Ür:-#s:/Yr:ir:as:Üq:q:)�p:†þp:s¸p:—p:4_p:—p:Ü]o:Ïoo:á²o:Hco:Êo:O€o:ãao: <o:®5p:ô³o:%No:ˆ#o:én:±
o:%vo:ú‡o:áªo:¤ûn:2o:ŒÑn:£“n:Îl:l:il:©•k:ñ;k:ŒÌj:–Œj:©‡i:Ã{i:à‘i:3j:œ’j:`tj:Î²j:îwk:ýUk:C;k:M�j:?¿j:¬¼j:ˆ,j:Éöj:¦sk:H›l:¶�l:éil::§l:d›k:ÜØk:Ì;k:íWj:´›j:Ã�j:±rj:´“j:’þj:hûj:¯k:öÅj:Åi:†Ži:ä÷i:?8i:¨£h:h¼h:·h:ÖLh:dÞh:ŠÛh:¨èh:“Öh:£ìh:´Åh:Ôqi:Ê\i:»Åh:@i:aâh:SÎh:³Rh:S.h:Œ~h:êðg:áõf:åf:i~f:úÍe:SBf:Ñ›e:¢e:¿‚e:ÃÏd:,¦d:OŸd:ñåc:/æd:íçe:Ÿf:&Ng:sðf:(f:»íf:¡†g:ªÜg:Û%h:ßLh:Èkg:r�g:î4g:§f:ÀÍf:=”g:S˜g:F+g:øÅf:Äof:ª»f:­g:êJg:ãf:-åe:ô	e:#e:*‚e:�e:Zþf:
Áf:&g:/¿h:ïˆh:œh:Êõg:{7h:£
h:Q¡h:¯{i:cHi:êúh:Jžh:“Œh:óýh:i:Üji:Ži:¦¼h:i:ýi:ŽÓh:lÞh:mÛg:¬žg:öxg:g:€sf:}Ôf:6f:‘!f:=f:ie: e: ¡d:L6e:Êue:÷Õd:d:ª<d:áÉe:ñäe:1Îe:;$f:Èýf:á@f::f:Æ�f:¥Vg:±¥g:�4h:ˆ=h:¥Ñg:ÍFh:£µh:ºg:ÜÃh:êÄh:?mh:üh:]£h:ˆêh:ÿ~h:Ÿeg:Qoh:h: ©h:I3h:@Ñg:�gg:TBg:=h:£Uh:|úg:#˜h:S¼h:ÒÓh:Àh:¤‘h:lŒh:¯¤g:æIg:g:¥rf:Ìof:üþe:ƒhf:#ƒg:�f:w—f:�>e:`?e:
�e:>f:3Çf:R÷e:E;f:ÝUf:WXf:ÍÃf:úg:à|g:À#g:g:Wûf:L&f:üg:
Ug:úg:Ég:<ág:.„g:{gg:$‹g:@7h:ê±h:ØŒh:ri:ñh:ši:Qhi:)i:Æi:Dèh:#ªh:¿th:&,h:Ãh:û©h:�Mh:˜kh:‰òg:([g:Ì]f:
§f:SGf:2f:|€f:à!f:jf:ÃIf:öZf:o1f:{ûe:,f:Ÿ4f: Ëe:­ªe:Hf:”f:Ûçf:[¥f:­Vg:Sig:z‘e:Á e:sQe:Á‹e:EVe:ý@e:šLg:½Dg:¸Ug:„Hg:Öxg:(îh:i:Ûg:ÜOg:sMg:”ãg:L»g:èg:ŠÑf:X4f:nýe:_ge:îd:±ød:Ñ¥e:ÿd:‰�e:ƒ‡e:ý±d:ûÝd:le:¬¦d: kd:¼Dd:F_c:a³c:}Dc:ý˜c:ì c:L†c:ŠXc:Kc:=c:àb:Æmc:ß(c:Ô‚c::c:ª8c:…Bc:}¯c:Nc:ïÜb:ÆÉb:1¿b:¦Tb:Tb:}Hb: Äb:‰Ëb:×(c:íûb:úªb:7Åb:óËb:’~c:`d:cd:æ¦c:4Çc:Žtc:Û;c:ê«c:Ÿ„c:Hc:³c:úb:�ÿb:ÎVc:6Rd:óe:ü!d:
|d:÷²d:‰e:¡õd:ve:%Þd:ge:jÃe:¿že:W7e:ÓÚd:üÃd:)f:Ÿf:Œe:©Æe:ááe:Áúe:¶Üe:ÿ3f:iuf:D«e:Víd:‘Óe:³­e:ONf:ØEf:Srf:Fe:ú¸e:
Õf:�4g:�[h:©Èi:vj:@j:gj:Öj:½ºi:Ji:Î„h:˜–h:=Ÿh:ø¢h:º6j:h%j:½¿j:©k:ìRk:ÁIl:-ãl:Øm:ÒÞl:ël:Z„m:_.n:vn:æzm:².n:l™m:¶3m:`\m:—l:)”l:=l:Oâk:r�j:Qµj:î·j:®Sk:,ˆk:qój:N…j:J2k:»“j:Ú„j:Çj:L³j:˜”i:¼øi:ï—j::2k:�)k:ÏDj:±Nj:*`j:V	j:·j:vƒj:³Šj:
aj:]ïj:HÊj:@ej:­Wj:îæj:ézk:—æj:tÓj:Í¢j:dÁi:ã¨i:Cj:³÷j:ÝØj:Ük:îj:[Åi:Vi:÷‘i:Ìj:7j:šTj:æ;j:/ùm:ã5n:QŸn:ŽAn:3»l:÷Àl:ÜŸl:èôk:6úk:r1l:&©k:ºÔk:å¦k:cèk:ÈÈk:/5l:ª;l:nl:.fl:Ðk:Èl:
¨k:AÆk:H¨k:cPl:e@l:3[l:¼l:I9k:–k:Ü·k:d‚l:¡Nl:šVl:ól:lIk:—ok:Oil:tn:“Ûm::ãm:ƒ<m:(�l:Wýl:”m:l®m:æÎm:�ºm:wªm:ccn:¯äl:L–l:Œ†l:Èñk:&òk:-m:›Îm:�+m:õm:ìËn:¡ln:s˜n:1n:&[n: 7n:»—m:÷8m:¡im:Î!m:„¨m:nn::Ãn:Ú£n:Îqn:,}n:x¿n:HÃm:Èìm: “m:#n:Èwm:jím:F:n:˜dn:
n:È¨m:Xon:Í*o:<Xo:Wko:·Þn:–nn:…¯n:#³n:Òm:³bn:Höm:!˜m:±/m:($n:®³n:Ìyo:{˜o:ÿ•n:EHn:úòn:Can:©n:à&n:—Rm:!¿m:3n:¶›m:Q[m:á~m:ê5m:I¹l:³m:MZm:³bm:²Im:Cim:m:˜+m:{„m:­um:<6m:éºl:&�l:®çk:&Bl:´<l:w\k:1àj:Faj:†Îj:2½j:Œ„j:ƒFj:�i:²_j:³ài:cçi:×{i:=èh:JÉh:œ„g:Ãg:©g:ï#g:ƒPg:è;f:me:êe:Êàe:¬úf:$ñg:’g:w g:wg:ó¨g::Æh:�Dh:-Îg:„f:=*f:”g:*g: ²g:Î g:NÛf:öÃf:³Af:$qf:I½f:)¬f:_Œf:¿Æf:š4g:¦žg:¿ j:¶i:‰¼h:Æœh:¹h:h:.Mh:Æ¯h:¡¡h::ãh:©úh:¬�i:¶¨i:�i:ìg:‰]h:eEh:Iíh:JËi:Ì�i:’‘i:Çi:ÚÕi::%i:Ôh:ŸÞh:Ã˜i:R±i:êRi:ÿ2i:ñwi:àni:�i:™i:‰Fi:È&h:Ÿ	h:ßfh:î^h:	h:dîg:ÁÒg:»ùg:“ßg:I_h:Ï-h:lh:„ãg:È†h:x.h:Gi:úÐi:vŸi:»i:Êøi:!Pj:áëi:¬xh:<Ag:Èäg:Ê>h:“ g:öbf:åóf: g:J£f:íf:wåf:mÉf:\ëf:ÊŠh::yh:ß„h:ih:Ý¾g:ŒÅg: Rh:åh:[@h:!Hh:(h:äg:Fh:__h:Mªh:Ñh:i$h:(h:±Ph:&’h:Ìªg:88h:4¨h:Ý?h: Th:îãg:RFh:3Hh:|4h:AÓg:`�g:‰f:ºe:?1f:z6f:Œvf:¼çd:OKd:Á`d:ÊÝc:²òc:÷¤d:ß¬d:jšd:ø@d:Î³d:“›d:ýùd:¥˜e:Ö•e:·‡e:,Éf:ÁSf:	f:ee:V.e:(Åe:xf:äe:‘
e:f¬d:Ýwd:Øe:ÁLe:àe:úìd:¥e:Ÿe:–Þd:¿îd:n¶d:ñ�d:=¼d:È–d:‰d:;øc:;™c:vîc:×ac:tc:\†c:@Ðc:eÿc:ý„d:Ê«d:šPd:Öd:Ûcd:éOd:täd:Ã¯e:iïe:?f: ëe:Q’e:-e:F“d:Nôb:ÿûb:¨!c:¤c:Óèb:£`b:ˆLb:¾a:úÚa:zäb:Üßb:xc:­c:d:òwc:ìDc:xîb:mTd:h|d:åÞd:˜$e:œ£d:‘Ÿd:ãÔd:Nþc:ÈKc:¯âb:aTb:ba:‰a:?a:¨ï`:Zb:–àa:_Cb:£b:úÅa:(qa:dµa:tka:Sþa:ÈÍa:{fb:Åc:T¥c:c‰b:ª4b:énb:tla:Ý`:+a:£Ja:1�a:\>a:‰ø`:ê0a:Fì`:|!a:²ga:¶\a:àü`:ãF`:``:ÈÑ^:ä'_:ìn_:óÝ_:wŒ_:•_:à#_:‘__:o?_:_:x;_:\B_:èâ^:OÆ^:Ó^:c¥^:W ^:{’_:Ì‰_:s•_:’X`:8š_:e`:ï`:´C`:më^:_n_:”_:(m_:ºq_:cã_:û[_:ÍÉ_:û&`:¸É_:¯G`:Ö`:Né`:Í�`:J¨`:	=a:Žœa:–Ìa:?‚b:w›b:L b:EÝc:�'c:4›b:Cc:¨Uc:2c:¼[b:{“b:(·b:{Cb:Lóa:Êôa:ÝÜa:iôa:�âa:Êa:­_a:/óa:’Ðb:ãÕb:#ïb:{¼b:qåb:±#c:±…b:êc:ã¯b:z†b:Œ–b:-b:vÈb:r´c:lïc:Ò>d:cd:øe:ùe:EÓf:óˆf:ÈTf:ÊDf:©¼f:Ïãf:z�f:¤type§scatter¤name¼Ordinary importance sampling¡xÈœ@  €?   @  @@  €@   @  À@  à@   A  A   A  0A  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A  °A  ¸A  ÀA  ÈA  ÐA  ØA  àA  èA  ðA  øA   B  B  B  B  B  B  B  B   B  $B  (B  ,B  0B  4B  8B  <B  @B  DB  HB  LB  PB  TB  XB  \B  `B  dB  hB  lB  pB  tB  xB  |B  €B  ‚B  „B  †B  ˆB  ŠB  ŒB  ŽB  �B  ’B  ”B  –B  ˜B  šB  œB  žB   B  ¢B  ¤B  ¦B  ¨B  ªB  ¬B  ®B  °B  ²B  ´B  ¶B  ¸B  ºB  ¼B  ¾B  ÀB  ÂB  ÄB  ÆB  ÈB  ÊB  ÌB  ÎB  ÐB  ÒB  ÔB  ÖB  ØB  ÚB  ÜB  ÞB  àB  âB  äB  æB  èB  êB  ìB  îB  ðB  òB  ôB  öB  øB  úB  üB  þB   C  C  C  C  C  C  C  C  C  	C  
C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C   C  !C  "C  #C  $C  %C  &C  'C  (C  )C  *C  +C  ,C  -C  .C  /C  0C  1C  2C  3C  4C  5C  6C  7C  8C  9C  :C  ;C  <C  =C  >C  ?C  @C  AC  BC  CC  DC  EC  FC  GC  HC  IC  JC  KC  LC  MC  NC  OC  PC  QC  RC  SC  TC  UC  VC  WC  XC  YC  ZC  [C  \C  ]C  ^C  _C  `C  aC  bC  cC  dC  eC  fC  gC  hC  iC  jC  kC  lC  mC  nC  oC  pC  qC  rC  sC  tC  uC  vC  wC  xC  yC  zC  {C  |C  }C  ~C  C  €C €€C  �C €�C  ‚C €‚C  ƒC €ƒC  „C €„C  …C €…C  †C €†C  ‡C €‡C  ˆC €ˆC  ‰C €‰C  ŠC €ŠC  ‹C €‹C  ŒC €ŒC  �C €�C  ŽC €ŽC  �C €�C  �C €�C  ‘C €‘C  ’C €’C  “C €“C  ”C €”C  •C €•C  –C €–C  —C €—C  ˜C €˜C  ™C €™C  šC €šC  ›C €›C  œC €œC  �C €�C  žC €žC  ŸC €ŸC   C € C  ¡C €¡C  ¢C €¢C  £C €£C  ¤C €¤C  ¥C €¥C  ¦C €¦C  §C €§C  ¨C €¨C  ©C €©C  ªC €ªC  «C €«C  ¬C €¬C  ­C €­C  ®C €®C  ¯C €¯C  °C €°C  ±C €±C  ²C €²C  ³C €³C  ´C €´C  µC €µC  ¶C €¶C  ·C €·C  ¸C €¸C  ¹C €¹C  ºC €ºC  »C €»C  ¼C €¼C  ½C €½C  ¾C €¾C  ¿C €¿C  ÀC €ÀC  ÁC €ÁC  ÂC €ÂC  ÃC €ÃC  ÄC €ÄC  ÅC €ÅC  ÆC €ÆC  ÇC €ÇC  ÈC €ÈC  ÉC €ÉC  ÊC €ÊC  ËC €ËC  ÌC €ÌC  ÍC €ÍC  ÎC €ÎC  ÏC €ÏC  ÐC €ÐC  ÑC €ÑC  ÒC €ÒC  ÓC €ÓC  ÔC €ÔC  ÕC €ÕC  ÖC €ÖC  ×C €×C  ØC €ØC  ÙC €ÙC  ÚC €ÚC  ÛC €ÛC  ÜC €ÜC  ÝC €ÝC  ÞC €ÞC  ßC €ßC  àC €àC  áC €áC  âC €âC  ãC €ãC  äC €äC  åC €åC  æC €æC  çC €çC  èC €èC  éC €éC  êC €êC  ëC €ëC  ìC €ìC  íC €íC  îC €îC  ïC €ïC  ðC €ðC  ñC €ñC  òC €òC  óC €óC  ôC €ôC  õC €õC  öC €öC  ÷C €÷C  øC €øC  ùC €ùC  úC €úC  ûC €ûC  üC €üC  ýC €ýC  þC €þC  ÿC €ÿC   D @ D € D À D  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  	D @	D €	D À	D  
D @
D €
D À
D  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD   D @ D € D À D  !D @!D €!D À!D  "D @"D €"D À"D  #D @#D €#D À#D  $D @$D €$D À$D  %D @%D €%D À%D  &D @&D €&D À&D  'D @'D €'D À'D  (D @(D €(D À(D  )D @)D €)D À)D  *D @*D €*D À*D  +D @+D €+D À+D  ,D @,D €,D À,D  -D @-D €-D À-D  .D @.D €.D À.D  /D @/D €/D À/D  0D @0D €0D À0D  1D @1D €1D À1D  2D @2D €2D À2D  3D @3D €3D À3D  4D @4D €4D À4D  5D @5D €5D À5D  6D @6D €6D À6D  7D @7D €7D À7D  8D @8D €8D À8D  9D @9D €9D À9D  :D @:D €:D À:D  ;D @;D €;D À;D  <D @<D €<D À<D  =D @=D €=D À=D  >D @>D €>D À>D  ?D @?D €?D À?D  @D @@D €@D À@D  AD @AD €AD ÀAD  BD @BD €BD ÀBD  CD @CD €CD ÀCD  DD @DD €DD ÀDD  ED @ED €ED ÀED  FD @FD €FD ÀFD  GD @GD €GD ÀGD  HD @HD €HD ÀHD  ID @ID €ID ÀID  JD @JD €JD ÀJD  KD @KD €KD ÀKD  LD @LD €LD ÀLD  MD @MD €MD ÀMD  ND @ND €ND ÀND  OD @OD €OD ÀOD  PD @PD €PD ÀPD  QD @QD €QD ÀQD  RD @RD €RD ÀRD  SD @SD €SD ÀSD  TD @TD €TD ÀTD  UD @UD €UD ÀUD  VD @VD €VD ÀVD  WD @WD €WD ÀWD  XD @XD €XD ÀXD  YD @YD €YD ÀYD  ZD @ZD €ZD ÀZD  [D @[D €[D À[D  \D @\D €\D À\D  ]D @]D €]D À]D  ^D @^D €^D À^D  _D @_D €_D À_D  `D @`D €`D À`D  aD @aD €aD ÀaD  bD @bD €bD ÀbD  cD @cD €cD ÀcD  dD @dD €dD ÀdD  eD @eD €eD ÀeD  fD @fD €fD ÀfD  gD @gD €gD ÀgD  hD @hD €hD ÀhD  iD @iD €iD ÀiD  jD @jD €jD ÀjD  kD @kD €kD ÀkD  lD @lD €lD ÀlD  mD @mD €mD ÀmD  nD @nD €nD ÀnD  oD @oD €oD ÀoD  pD @pD €pD ÀpD  qD @qD €qD ÀqD  rD @rD €rD ÀrD  sD @sD €sD ÀsD  tD @tD €tD ÀtD  uD @uD €uD ÀuD  vD @vD €vD ÀvD  wD @wD €wD ÀwD  xD @xD €xD ÀxD  yD @yD €yD ÀyD  zD @zD €zD ÀzD  {D @{D €{D À{D  |D @|D €|D À|D  }D @}D €}D À}D  ~D @~D €~D À~D  D @D €D ÀD  €D  €D @€D `€D €€D  €D À€D à€D  �D  �D @�D `�D €�D  �D À�D à�D  ‚D  ‚D @‚D `‚D €‚D  ‚D À‚D à‚D  ƒD  ƒD @ƒD `ƒD €ƒD  ƒD ÀƒD àƒD  „D  „D @„D `„D €„D  „D À„D à„D  …D  …D @…D `…D €…D  …D À…D à…D  †D  †D @†D `†D €†D  †D À†D à†D  ‡D  ‡D @‡D `‡D €‡D  ‡D À‡D à‡D  ˆD  ˆD @ˆD `ˆD €ˆD  ˆD ÀˆD àˆD  ‰D  ‰D @‰D `‰D €‰D  ‰D À‰D à‰D  ŠD  ŠD @ŠD `ŠD €ŠD  ŠD ÀŠD àŠD  ‹D  ‹D @‹D `‹D €‹D  ‹D À‹D à‹D  ŒD  ŒD @ŒD `ŒD €ŒD  ŒD ÀŒD àŒD  �D  �D @�D `�D €�D  �D À�D à�D  ŽD  ŽD @ŽD `ŽD €ŽD  ŽD ÀŽD àŽD  �D  �D @�D `�D €�D  �D À�D à�D  �D  �D @�D `�D €�D  �D À�D à�D  ‘D  ‘D @‘D `‘D €‘D  ‘D À‘D à‘D  ’D  ’D @’D `’D €’D  ’D À’D à’D  “D  “D @“D `“D €“D  “D À“D à“D  ”D  ”D @”D `”D €”D  ”D À”D à”D  •D  •D @•D `•D €•D  •D À•D à•D  –D  –D @–D `–D €–D  –D À–D à–D  —D  —D @—D `—D €—D  —D À—D à—D  ˜D  ˜D @˜D `˜D €˜D  ˜D À˜D à˜D  ™D  ™D @™D `™D €™D  ™D À™D à™D  šD  šD @šD `šD €šD  šD ÀšD àšD  ›D  ›D @›D `›D €›D  ›D À›D à›D  œD  œD @œD `œD €œD  œD ÀœD àœD  �D  �D @�D `�D €�D  �D À�D à�D  žD  žD @žD `žD €žD  žD ÀžD àžD  ŸD  ŸD @ŸD `ŸD €ŸD  ŸD ÀŸD àŸD   D   D @ D ` D € D   D À D à D  ¡D  ¡D @¡D `¡D €¡D  ¡D À¡D à¡D  ¢D  ¢D @¢D `¢D €¢D  ¢D À¢D à¢D  £D  £D @£D `£D €£D  £D À£D à£D  ¤D  ¤D @¤D `¤D €¤D  ¤D À¤D à¤D  ¥D  ¥D @¥D `¥D €¥D  ¥D À¥D à¥D  ¦D  ¦D @¦D `¦D €¦D  ¦D À¦D à¦D  §D  §D @§D `§D €§D  §D À§D à§D  ¨D  ¨D @¨D `¨D €¨D  ¨D À¨D à¨D  ©D  ©D @©D `©D €©D  ©D À©D à©D  ªD  ªD @ªD `ªD €ªD  ªD ÀªD àªD  «D  «D @«D `«D €«D  «D À«D à«D  ¬D  ¬D @¬D `¬D €¬D  ¬D À¬D à¬D  ­D  ­D @­D `­D €­D  ­D À­D à­D  ®D  ®D @®D `®D €®D  ®D À®D à®D  ¯D  ¯D @¯D `¯D €¯D  ¯D À¯D à¯D  °D  °D @°D `°D €°D  °D À°D à°D  ±D  ±D @±D `±D €±D  ±D À±D à±D  ²D  ²D @²D `²D €²D  ²D À²D à²D  ³D  ³D @³D `³D €³D  ³D À³D à³D  ´D  ´D @´D `´D €´D  ´D À´D à´D  µD  µD @µD `µD €µD  µD ÀµD àµD  ¶D  ¶D @¶D `¶D €¶D  ¶D À¶D à¶D  ·D  ·D @·D `·D €·D  ·D À·D à·D  ¸D  ¸D @¸D `¸D €¸D  ¸D À¸D à¸D  ¹D  ¹D @¹D `¹D €¹D  ¹D À¹D à¹D  ºD  ºD @ºD `ºD €ºD  ºD ÀºD àºD  »D  »D @»D `»D €»D  »D À»D à»D  ¼D  ¼D @¼D `¼D €¼D  ¼D À¼D à¼D  ½D  ½D @½D `½D €½D  ½D À½D à½D  ¾D  ¾D @¾D `¾D €¾D  ¾D À¾D à¾D  ¿D  ¿D @¿D `¿D €¿D  ¿D À¿D à¿D  ÀD  ÀD @ÀD `ÀD €ÀD  ÀD ÀÀD àÀD  ÁD  ÁD @ÁD `ÁD €ÁD  ÁD ÀÁD àÁD  ÂD  ÂD @ÂD `ÂD €ÂD  ÂD ÀÂD àÂD  ÃD  ÃD @ÃD `ÃD €ÃD  ÃD ÀÃD àÃD  ÄD  ÄD @ÄD `ÄD €ÄD  ÄD ÀÄD àÄD  ÅD  ÅD @ÅD `ÅD €ÅD  ÅD ÀÅD àÅD  ÆD  ÆD @ÆD `ÆD €ÆD  ÆD ÀÆD àÆD  ÇD  ÇD @ÇD `ÇD €ÇD  ÇD ÀÇD àÇD  ÈD  ÈD @ÈD `ÈD €ÈD  ÈD ÀÈD àÈD  ÉD  ÉD @ÉD `ÉD €ÉD  ÉD ÀÉD àÉD  ÊD  ÊD @ÊD `ÊD €ÊD  ÊD ÀÊD àÊD  ËD  ËD @ËD `ËD €ËD  ËD ÀËD àËD  ÌD  ÌD @ÌD `ÌD €ÌD  ÌD ÀÌD àÌD  ÍD  ÍD @ÍD `ÍD €ÍD  ÍD ÀÍD àÍD  ÎD  ÎD @ÎD `ÎD €ÎD  ÎD ÀÎD àÎD  ÏD  ÏD @ÏD `ÏD €ÏD  ÏD ÀÏD àÏD  ÐD  ÐD @ÐD `ÐD €ÐD  ÐD ÀÐD àÐD  ÑD  ÑD @ÑD `ÑD €ÑD  ÑD ÀÑD àÑD  ÒD  ÒD @ÒD `ÒD €ÒD  ÒD ÀÒD àÒD  ÓD  ÓD @ÓD `ÓD €ÓD  ÓD ÀÓD àÓD  ÔD  ÔD @ÔD `ÔD €ÔD  ÔD ÀÔD àÔD  ÕD  ÕD @ÕD `ÕD €ÕD  ÕD ÀÕD àÕD  ÖD  ÖD @ÖD `ÖD €ÖD  ÖD ÀÖD àÖD  ×D  ×D @×D `×D €×D  ×D À×D à×D  ØD  ØD @ØD `ØD €ØD  ØD ÀØD àØD  ÙD  ÙD @ÙD `ÙD €ÙD  ÙD ÀÙD àÙD  ÚD  ÚD @ÚD `ÚD €ÚD  ÚD ÀÚD àÚD  ÛD  ÛD @ÛD `ÛD €ÛD  ÛD ÀÛD àÛD  ÜD  ÜD @ÜD `ÜD €ÜD  ÜD ÀÜD àÜD  ÝD  ÝD @ÝD `ÝD €ÝD  ÝD ÀÝD àÝD  ÞD  ÞD @ÞD `ÞD €ÞD  ÞD ÀÞD àÞD  ßD  ßD @ßD `ßD €ßD  ßD ÀßD àßD  àD  àD @àD `àD €àD  àD ÀàD ààD  áD  áD @áD `áD €áD  áD ÀáD àáD  âD  âD @âD `âD €âD  âD ÀâD àâD  ãD  ãD @ãD `ãD €ãD  ãD ÀãD àãD  äD  äD @äD `äD €äD  äD ÀäD àäD  åD  åD @åD `åD €åD  åD ÀåD àåD  æD  æD @æD `æD €æD  æD ÀæD àæD  çD  çD @çD `çD €çD  çD ÀçD àçD  èD  èD @èD `èD €èD  èD ÀèD àèD  éD  éD @éD `éD €éD  éD ÀéD àéD  êD  êD @êD `êD €êD  êD ÀêD àêD  ëD  ëD @ëD `ëD €ëD  ëD ÀëD àëD  ìD  ìD @ìD `ìD €ìD  ìD ÀìD àìD  íD  íD @íD `íD €íD  íD ÀíD àíD  îD  îD @îD `îD €îD  îD ÀîD àîD  ïD  ïD @ïD `ïD €ïD  ïD ÀïD àïD  ðD  ðD @ðD `ðD €ðD  ðD ÀðD àðD  ñD  ñD @ñD `ñD €ñD  ñD ÀñD àñD  òD  òD @òD `òD €òD  òD ÀòD àòD  óD  óD @óD `óD €óD  óD ÀóD àóD  ôD  ôD @ôD `ôD €ôD  ôD ÀôD àôD  õD  õD @õD `õD €õD  õD ÀõD àõD  öD  öD @öD `öD €öD  öD ÀöD àöD  ÷D  ÷D @÷D `÷D €÷D  ÷D À÷D à÷D  øD  øD @øD `øD €øD  øD ÀøD àøD  ùD  ùD @ùD `ùD €ùD  ùD ÀùD àùD  úD  úD @úD `úD €úD  úD ÀúD àúD  ûD  ûD @ûD `ûD €ûD  ûD ÀûD àûD  üD  üD @üD `üD €üD  üD ÀüD àüD  ýD  ýD @ýD `ýD €ýD  ýD ÀýD àýD  þD  þD @þD `þD €þD  þD ÀþD àþD  ÿD  ÿD @ÿD `ÿD €ÿD  ÿD ÀÿD àÿD   E  E   E 0 E @ E P E ` E p E € E � E   E ° E À E Ð E à E ð E  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  	E 	E  	E 0	E @	E P	E `	E p	E €	E �	E  	E °	E À	E Ð	E à	E ð	E  
E 
E  
E 0
E @
E P
E `
E p
E €
E �
E  
E °
E À
E Ð
E à
E ð
E  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE   E  E   E 0 E @ E P E ` E p E € E � E   E ° E À E Ð E à E ð E  !E !E  !E 0!E @!E P!E `!E p!E €!E �!E  !E °!E À!E Ð!E à!E ð!E  "E "E  "E 0"E @"E P"E `"E p"E €"E �"E  "E °"E À"E Ð"E à"E ð"E  #E #E  #E 0#E @#E P#E `#E p#E €#E �#E  #E °#E À#E Ð#E à#E ð#E  $E $E  $E 0$E @$E P$E `$E p$E €$E �$E  $E °$E À$E Ð$E à$E ð$E  %E %E  %E 0%E @%E P%E `%E p%E €%E �%E  %E °%E À%E Ð%E à%E ð%E  &E &E  &E 0&E @&E P&E `&E p&E €&E �&E  &E °&E À&E Ð&E à&E ð&E  'E 'E  'E 0'E @'E P'E `'E p'E €'E �'E  'E °'E À'E Ð'E à'E ð'E  (E (E  (E 0(E @(E P(E `(E p(E €(E �(E  (E °(E À(E Ð(E à(E ð(E  )E )E  )E 0)E @)E P)E `)E p)E €)E �)E  )E °)E À)E Ð)E à)E ð)E  *E *E  *E 0*E @*E P*E `*E p*E €*E �*E  *E °*E À*E Ð*E à*E ð*E  +E +E  +E 0+E @+E P+E `+E p+E €+E �+E  +E °+E À+E Ð+E à+E ð+E  ,E ,E  ,E 0,E @,E P,E `,E p,E €,E �,E  ,E °,E À,E Ð,E à,E ð,E  -E -E  -E 0-E @-E P-E `-E p-E €-E �-E  -E °-E À-E Ð-E à-E ð-E  .E .E  .E 0.E @.E P.E `.E p.E €.E �.E  .E °.E À.E Ð.E à.E ð.E  /E /E  /E 0/E @/E P/E `/E p/E €/E �/E  /E °/E À/E Ð/E à/E ð/E  0E 0E  0E 00E @0E P0E `0E p0E €0E �0E  0E °0E À0E Ð0E à0E ð0E  1E 1E  1E 01E @1E P1E `1E p1E €1E �1E  1E °1E À1E Ð1E à1E ð1E  2E 2E  2E 02E @2E P2E `2E p2E €2E �2E  2E °2E À2E Ð2E à2E ð2E  3E 3E  3E 03E @3E P3E `3E p3E €3E �3E  3E °3E À3E Ð3E à3E ð3E  4E 4E  4E 04E @4E P4E `4E p4E €4E �4E  4E °4E À4E Ð4E à4E ð4E  5E 5E  5E 05E @5E P5E `5E p5E €5E �5E  5E °5E À5E Ð5E à5E ð5E  6E 6E  6E 06E @6E P6E `6E p6E €6E �6E  6E °6E À6E Ð6E à6E ð6E  7E 7E  7E 07E @7E P7E `7E p7E €7E �7E  7E °7E À7E Ð7E à7E ð7E  8E 8E  8E 08E @8E P8E `8E p8E €8E �8E  8E °8E À8E Ð8E à8E ð8E  9E 9E  9E 09E @9E P9E `9E p9E €9E �9E  9E °9E À9E Ð9E à9E ð9E  :E :E  :E 0:E @:E P:E `:E p:E €:E �:E  :E °:E À:E Ð:E à:E ð:E  ;E ;E  ;E 0;E @;E P;E `;E p;E €;E �;E  ;E °;E À;E Ð;E à;E ð;E  <E <E  <E 0<E @<E P<E `<E p<E €<E �<E  <E °<E À<E Ð<E à<E ð<E  =E =E  =E 0=E @=E P=E `=E p=E €=E �=E  =E °=E À=E Ð=E à=E ð=E  >E >E  >E 0>E @>E P>E `>E p>E €>E �>E  >E °>E À>E Ð>E à>E ð>E  ?E ?E  ?E 0?E @?E P?E `?E p?E €?E �?E  ?E °?E À?E Ð?E à?E ð?E  @E @E  @E 0@E @@E P@E `@E p@E €@E �@E  @E °@E À@E Ð@E à@E ð@E  AE AE  AE 0AE @AE PAE `AE pAE €AE �AE  AE °AE ÀAE ÐAE àAE ðAE  BE BE  BE 0BE @BE PBE `BE pBE €BE �BE  BE °BE ÀBE ÐBE àBE ðBE  CE CE  CE 0CE @CE PCE `CE pCE €CE �CE  CE °CE ÀCE ÐCE àCE ðCE  DE DE  DE 0DE @DE PDE `DE pDE €DE �DE  DE °DE ÀDE ÐDE àDE ðDE  EE EE  EE 0EE @EE PEE `EE pEE €EE �EE  EE °EE ÀEE ÐEE àEE ðEE  FE FE  FE 0FE @FE PFE `FE pFE €FE �FE  FE °FE ÀFE ÐFE àFE ðFE  GE GE  GE 0GE @GE PGE `GE pGE €GE �GE  GE °GE ÀGE ÐGE àGE ðGE  HE HE  HE 0HE @HE PHE `HE pHE €HE �HE  HE °HE ÀHE ÐHE àHE ðHE  IE IE  IE 0IE @IE PIE `IE pIE €IE �IE  IE °IE ÀIE ÐIE àIE ðIE  JE JE  JE 0JE @JE PJE `JE pJE €JE �JE  JE °JE ÀJE ÐJE àJE ðJE  KE KE  KE 0KE @KE PKE `KE pKE €KE �KE  KE °KE ÀKE ÐKE àKE ðKE  LE LE  LE 0LE @LE PLE `LE pLE €LE �LE  LE °LE ÀLE ÐLE àLE ðLE  ME ME  ME 0ME @ME PME `ME pME €ME �ME  ME °ME ÀME ÐME àME ðME  NE NE  NE 0NE @NE PNE `NE pNE €NE �NE  NE °NE ÀNE ÐNE àNE ðNE  OE OE  OE 0OE @OE POE `OE pOE €OE �OE  OE °OE ÀOE ÐOE àOE ðOE  PE PE  PE 0PE @PE PPE `PE pPE €PE �PE  PE °PE ÀPE ÐPE àPE ðPE  QE QE  QE 0QE @QE PQE `QE pQE €QE �QE  QE °QE ÀQE ÐQE àQE ðQE  RE RE  RE 0RE @RE PRE `RE pRE €RE �RE  RE °RE ÀRE ÐRE àRE ðRE  SE SE  SE 0SE @SE PSE `SE pSE €SE �SE  SE °SE ÀSE ÐSE àSE ðSE  TE TE  TE 0TE @TE PTE `TE pTE €TE �TE  TE °TE ÀTE ÐTE àTE ðTE  UE UE  UE 0UE @UE PUE `UE pUE €UE �UE  UE °UE ÀUE ÐUE àUE ðUE  VE VE  VE 0VE @VE PVE `VE pVE €VE �VE  VE °VE ÀVE ÐVE àVE ðVE  WE WE  WE 0WE @WE PWE `WE pWE €WE �WE  WE °WE ÀWE ÐWE àWE ðWE  XE XE  XE 0XE @XE PXE `XE pXE €XE �XE  XE °XE ÀXE ÐXE àXE ðXE  YE YE  YE 0YE @YE PYE `YE pYE €YE �YE  YE °YE ÀYE ÐYE àYE ðYE  ZE ZE  ZE 0ZE @ZE PZE `ZE pZE €ZE �ZE  ZE °ZE ÀZE ÐZE àZE ðZE  [E [E  [E 0[E @[E P[E `[E p[E €[E �[E  [E °[E À[E Ð[E à[E ð[E  \E \E  \E 0\E @\E P\E `\E p\E €\E �\E  \E °\E À\E Ð\E à\E ð\E  ]E ]E  ]E 0]E @]E P]E `]E p]E €]E �]E  ]E °]E À]E Ð]E à]E ð]E  ^E ^E  ^E 0^E @^E P^E `^E p^E €^E �^E  ^E °^E À^E Ð^E à^E ð^E  _E _E  _E 0_E @_E P_E `_E p_E €_E �_E  _E °_E À_E Ð_E à_E ð_E  `E `E  `E 0`E @`E P`E ``E p`E €`E �`E  `E °`E À`E Ð`E à`E ð`E  aE aE  aE 0aE @aE PaE `aE paE €aE �aE  aE °aE ÀaE ÐaE àaE ðaE  bE bE  bE 0bE @bE PbE `bE pbE €bE �bE  bE °bE ÀbE ÐbE àbE ðbE  cE cE  cE 0cE @cE PcE `cE pcE €cE �cE  cE °cE ÀcE ÐcE àcE ðcE  dE dE  dE 0dE @dE PdE `dE pdE €dE �dE  dE °dE ÀdE ÐdE àdE ðdE  eE eE  eE 0eE @eE PeE `eE peE €eE �eE  eE °eE ÀeE ÐeE àeE ðeE  fE fE  fE 0fE @fE PfE `fE pfE €fE �fE  fE °fE ÀfE ÐfE àfE ðfE  gE gE  gE 0gE @gE PgE `gE pgE €gE �gE  gE °gE ÀgE ÐgE àgE ðgE  hE hE  hE 0hE @hE PhE `hE phE €hE �hE  hE °hE ÀhE ÐhE àhE ðhE  iE iE  iE 0iE @iE PiE `iE piE €iE �iE  iE °iE ÀiE ÐiE àiE ðiE  jE jE  jE 0jE @jE PjE `jE pjE €jE �jE  jE °jE ÀjE ÐjE àjE ðjE  kE kE  kE 0kE @kE PkE `kE pkE €kE �kE  kE °kE ÀkE ÐkE àkE ðkE  lE lE  lE 0lE @lE PlE `lE plE €lE �lE  lE °lE ÀlE ÐlE àlE ðlE  mE mE  mE 0mE @mE PmE `mE pmE €mE �mE  mE °mE ÀmE ÐmE àmE ðmE  nE nE  nE 0nE @nE PnE `nE pnE €nE �nE  nE °nE ÀnE ÐnE ànE ðnE  oE oE  oE 0oE @oE PoE `oE poE €oE �oE  oE °oE ÀoE ÐoE àoE ðoE  pE pE  pE 0pE @pE PpE `pE ppE €pE �pE  pE °pE ÀpE ÐpE àpE ðpE  qE qE  qE 0qE @qE PqE `qE pqE €qE �qE  qE °qE ÀqE ÐqE àqE ðqE  rE rE  rE 0rE @rE PrE `rE prE €rE �rE  rE °rE ÀrE ÐrE àrE ðrE  sE sE  sE 0sE @sE PsE `sE psE €sE �sE  sE °sE ÀsE ÐsE àsE ðsE  tE tE  tE 0tE @tE PtE `tE ptE €tE �tE  tE °tE ÀtE ÐtE àtE ðtE  uE uE  uE 0uE @uE PuE `uE puE €uE �uE  uE °uE ÀuE ÐuE àuE ðuE  vE vE  vE 0vE @vE PvE `vE pvE €vE �vE  vE °vE ÀvE ÐvE àvE ðvE  wE wE  wE 0wE @wE PwE `wE pwE €wE �wE  wE °wE ÀwE ÐwE àwE ðwE  xE xE  xE 0xE @xE PxE `xE pxE €xE �xE  xE °xE ÀxE ÐxE àxE ðxE  yE yE  yE 0yE @yE PyE `yE pyE €yE �yE  yE °yE ÀyE ÐyE àyE ðyE  zE zE  zE 0zE @zE PzE `zE pzE €zE �zE  zE °zE ÀzE ÐzE àzE ðzE  {E {E  {E 0{E @{E P{E `{E p{E €{E �{E  {E °{E À{E Ð{E à{E ð{E  |E |E  |E 0|E @|E P|E `|E p|E €|E �|E  |E °|E À|E Ð|E à|E ð|E  }E }E  }E 0}E @}E P}E `}E p}E €}E �}E  }E °}E À}E Ð}E à}E ð}E  ~E ~E  ~E 0~E @~E P~E `~E p~E €~E �~E  ~E °~E À~E Ð~E à~E ð~E  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  €E €E €E €E  €E (€E 0€E 8€E @€E H€E P€E X€E `€E h€E p€E x€E €€E ˆ€E �€E ˜€E  €E ¨€E °€E ¸€E À€E È€E Ð€E Ø€E à€E è€E ð€E ø€E  �E �E �E �E  �E (�E 0�E 8�E @�E H�E P�E X�E `�E h�E p�E x�E €�E ˆ�E ��E ˜�E  �E ¨�E °�E ¸�E À�E È�E Ð�E Ø�E à�E è�E ð�E ø�E  ‚E ‚E ‚E ‚E  ‚E (‚E 0‚E 8‚E @‚E H‚E P‚E X‚E `‚E h‚E p‚E x‚E €‚E ˆ‚E �‚E ˜‚E  ‚E ¨‚E °‚E ¸‚E À‚E È‚E Ð‚E Ø‚E à‚E è‚E ð‚E ø‚E  ƒE ƒE ƒE ƒE  ƒE (ƒE 0ƒE 8ƒE @ƒE HƒE PƒE XƒE `ƒE hƒE pƒE xƒE €ƒE ˆƒE �ƒE ˜ƒE  ƒE ¨ƒE °ƒE ¸ƒE ÀƒE ÈƒE ÐƒE ØƒE àƒE èƒE ðƒE øƒE  „E „E „E „E  „E („E 0„E 8„E @„E H„E P„E X„E `„E h„E p„E x„E €„E ˆ„E �„E ˜„E  „E ¨„E °„E ¸„E À„E È„E Ð„E Ø„E à„E è„E ð„E ø„E  …E …E …E …E  …E (…E 0…E 8…E @…E H…E P…E X…E `…E h…E p…E x…E €…E ˆ…E �…E ˜…E  …E ¨…E °…E ¸…E À…E È…E Ð…E Ø…E à…E è…E ð…E ø…E  †E †E †E †E  †E (†E 0†E 8†E @†E H†E P†E X†E `†E h†E p†E x†E €†E ˆ†E �†E ˜†E  †E ¨†E °†E ¸†E À†E È†E Ð†E Ø†E à†E è†E ð†E ø†E  ‡E ‡E ‡E ‡E  ‡E (‡E 0‡E 8‡E @‡E H‡E P‡E X‡E `‡E h‡E p‡E x‡E €‡E ˆ‡E �‡E ˜‡E  ‡E ¨‡E °‡E ¸‡E À‡E È‡E Ð‡E Ø‡E à‡E è‡E ð‡E ø‡E  ˆE ˆE ˆE ˆE  ˆE (ˆE 0ˆE 8ˆE @ˆE HˆE PˆE XˆE `ˆE hˆE pˆE xˆE €ˆE ˆˆE �ˆE ˜ˆE  ˆE ¨ˆE °ˆE ¸ˆE ÀˆE ÈˆE ÐˆE ØˆE àˆE èˆE ðˆE øˆE  ‰E ‰E ‰E ‰E  ‰E (‰E 0‰E 8‰E @‰E H‰E P‰E X‰E `‰E h‰E p‰E x‰E €‰E ˆ‰E �‰E ˜‰E  ‰E ¨‰E °‰E ¸‰E À‰E È‰E Ð‰E Ø‰E à‰E è‰E ð‰E ø‰E  ŠE ŠE ŠE ŠE  ŠE (ŠE 0ŠE 8ŠE @ŠE HŠE PŠE XŠE `ŠE hŠE pŠE xŠE €ŠE ˆŠE �ŠE ˜ŠE  ŠE ¨ŠE °ŠE ¸ŠE ÀŠE ÈŠE ÐŠE ØŠE àŠE èŠE ðŠE øŠE  ‹E ‹E ‹E ‹E  ‹E (‹E 0‹E 8‹E @‹E H‹E P‹E X‹E `‹E h‹E p‹E x‹E €‹E ˆ‹E �‹E ˜‹E  ‹E ¨‹E °‹E ¸‹E À‹E È‹E Ð‹E Ø‹E à‹E è‹E ð‹E ø‹E  ŒE ŒE ŒE ŒE  ŒE (ŒE 0ŒE 8ŒE @ŒE HŒE PŒE XŒE `ŒE hŒE pŒE xŒE €ŒE ˆŒE �ŒE ˜ŒE  ŒE ¨ŒE °ŒE ¸ŒE ÀŒE ÈŒE ÐŒE ØŒE àŒE èŒE ðŒE øŒE  �E �E �E �E  �E (�E 0�E 8�E @�E H�E P�E X�E `�E h�E p�E x�E €�E ˆ�E ��E ˜�E  �E ¨�E °�E ¸�E À�E È�E Ð�E Ø�E à�E è�E ð�E ø�E  ŽE ŽE ŽE ŽE  ŽE (ŽE 0ŽE 8ŽE @ŽE HŽE PŽE XŽE `ŽE hŽE pŽE xŽE €ŽE ˆŽE �ŽE ˜ŽE  ŽE ¨ŽE °ŽE ¸ŽE ÀŽE ÈŽE ÐŽE ØŽE àŽE èŽE ðŽE øŽE  �E �E �E �E  �E (�E 0�E 8�E @�E H�E P�E X�E `�E h�E p�E x�E €�E ˆ�E ��E ˜�E  �E ¨�E °�E ¸�E À�E È�E Ð�E Ø�E à�E è�E ð�E ø�E  �E �E �E �E  �E (�E 0�E 8�E @�E H�E P�E X�E `�E h�E p�E x�E €�E ˆ�E ��E ˜�E  �E ¨�E °�E ¸�E À�E È�E Ð�E Ø�E à�E è�E ð�E ø�E  ‘E ‘E ‘E ‘E  ‘E (‘E 0‘E 8‘E @‘E H‘E P‘E X‘E `‘E h‘E p‘E x‘E €‘E ˆ‘E �‘E ˜‘E  ‘E ¨‘E °‘E ¸‘E À‘E È‘E Ð‘E Ø‘E à‘E è‘E ð‘E ø‘E  ’E ’E ’E ’E  ’E (’E 0’E 8’E @’E H’E P’E X’E `’E h’E p’E x’E €’E ˆ’E �’E ˜’E  ’E ¨’E °’E ¸’E À’E È’E Ð’E Ø’E à’E è’E ð’E ø’E  “E “E “E “E  “E (“E 0“E 8“E @“E H“E P“E X“E `“E h“E p“E x“E €“E ˆ“E �“E ˜“E  “E ¨“E °“E ¸“E À“E È“E Ð“E Ø“E à“E è“E ð“E ø“E  ”E ”E ”E ”E  ”E (”E 0”E 8”E @”E H”E P”E X”E `”E h”E p”E x”E €”E ˆ”E �”E ˜”E  ”E ¨”E °”E ¸”E À”E È”E Ð”E Ø”E à”E è”E ð”E ø”E  •E •E •E •E  •E (•E 0•E 8•E @•E H•E P•E X•E `•E h•E p•E x•E €•E ˆ•E �•E ˜•E  •E ¨•E °•E ¸•E À•E È•E Ð•E Ø•E à•E è•E ð•E ø•E  –E –E –E –E  –E (–E 0–E 8–E @–E H–E P–E X–E `–E h–E p–E x–E €–E ˆ–E �–E ˜–E  –E ¨–E °–E ¸–E À–E È–E Ð–E Ø–E à–E è–E ð–E ø–E  —E —E —E —E  —E (—E 0—E 8—E @—E H—E P—E X—E `—E h—E p—E x—E €—E ˆ—E �—E ˜—E  —E ¨—E °—E ¸—E À—E È—E Ð—E Ø—E à—E è—E ð—E ø—E  ˜E ˜E ˜E ˜E  ˜E (˜E 0˜E 8˜E @˜E H˜E P˜E X˜E `˜E h˜E p˜E x˜E €˜E ˆ˜E �˜E ˜˜E  ˜E ¨˜E °˜E ¸˜E À˜E È˜E Ð˜E Ø˜E à˜E è˜E ð˜E ø˜E  ™E ™E ™E ™E  ™E (™E 0™E 8™E @™E H™E P™E X™E `™E h™E p™E x™E €™E ˆ™E �™E ˜™E  ™E ¨™E °™E ¸™E À™E È™E Ð™E Ø™E à™E è™E ð™E ø™E  šE šE šE šE  šE (šE 0šE 8šE @šE HšE PšE XšE `šE hšE pšE xšE €šE ˆšE �šE ˜šE  šE ¨šE °šE ¸šE ÀšE ÈšE ÐšE ØšE àšE èšE ðšE øšE  ›E ›E ›E ›E  ›E (›E 0›E 8›E @›E H›E P›E X›E `›E h›E p›E x›E €›E ˆ›E �›E ˜›E  ›E ¨›E °›E ¸›E À›E È›E Ð›E Ø›E à›E è›E ð›E ø›E  œE œE œE œE  œE (œE 0œE 8œE @œE HœE PœE XœE `œE hœE pœE xœE €œE ˆœE �œE ˜œE  œE ¨œE °œE ¸œE ÀœE ÈœE ÐœE ØœE àœE èœE ðœE øœE  �E �E �E �E  �E (�E 0�E 8�E @�E H�E P�E X�E `�E h�E p�E x�E €�E ˆ�E ��E ˜�E  �E ¨�E °�E ¸�E À�E È�E Ð�E Ø�E à�E è�E ð�E ø�E  žE žE žE žE  žE (žE 0žE 8žE @žE HžE PžE XžE `žE hžE pžE xžE €žE ˆžE �žE ˜žE  žE ¨žE °žE ¸žE ÀžE ÈžE ÐžE ØžE àžE èžE ðžE øžE  ŸE ŸE ŸE ŸE  ŸE (ŸE 0ŸE 8ŸE @ŸE HŸE PŸE XŸE `ŸE hŸE pŸE xŸE €ŸE ˆŸE �ŸE ˜ŸE  ŸE ¨ŸE °ŸE ¸ŸE ÀŸE ÈŸE ÐŸE ØŸE àŸE èŸE ðŸE øŸE   E  E  E  E   E ( E 0 E 8 E @ E H E P E X E ` E h E p E x E € E ˆ E � E ˜ E   E ¨ E ° E ¸ E À E È E Ð E Ø E à E è E ð E ø E  ¡E ¡E ¡E ¡E  ¡E (¡E 0¡E 8¡E @¡E H¡E P¡E X¡E `¡E h¡E p¡E x¡E €¡E ˆ¡E �¡E ˜¡E  ¡E ¨¡E °¡E ¸¡E À¡E È¡E Ð¡E Ø¡E à¡E è¡E ð¡E ø¡E  ¢E ¢E ¢E ¢E  ¢E (¢E 0¢E 8¢E @¢E H¢E P¢E X¢E `¢E h¢E p¢E x¢E €¢E ˆ¢E �¢E ˜¢E  ¢E ¨¢E °¢E ¸¢E À¢E È¢E Ð¢E Ø¢E à¢E è¢E ð¢E ø¢E  £E £E £E £E  £E (£E 0£E 8£E @£E H£E P£E X£E `£E h£E p£E x£E €£E ˆ£E �£E ˜£E  £E ¨£E °£E ¸£E À£E È£E Ð£E Ø£E à£E è£E ð£E ø£E  ¤E ¤E ¤E ¤E  ¤E (¤E 0¤E 8¤E @¤E H¤E P¤E X¤E `¤E h¤E p¤E x¤E €¤E ˆ¤E �¤E ˜¤E  ¤E ¨¤E °¤E ¸¤E À¤E È¤E Ð¤E Ø¤E à¤E è¤E ð¤E ø¤E  ¥E ¥E ¥E ¥E  ¥E (¥E 0¥E 8¥E @¥E H¥E P¥E X¥E `¥E h¥E p¥E x¥E €¥E ˆ¥E �¥E ˜¥E  ¥E ¨¥E °¥E ¸¥E À¥E È¥E Ð¥E Ø¥E à¥E è¥E ð¥E ø¥E  ¦E ¦E ¦E ¦E  ¦E (¦E 0¦E 8¦E @¦E H¦E P¦E X¦E `¦E h¦E p¦E x¦E €¦E ˆ¦E �¦E ˜¦E  ¦E ¨¦E °¦E ¸¦E À¦E È¦E Ð¦E Ø¦E à¦E è¦E ð¦E ø¦E  §E §E §E §E  §E (§E 0§E 8§E @§E H§E P§E X§E `§E h§E p§E x§E €§E ˆ§E �§E ˜§E  §E ¨§E °§E ¸§E À§E È§E Ð§E Ø§E à§E è§E ð§E ø§E  ¨E ¨E ¨E ¨E  ¨E (¨E 0¨E 8¨E @¨E H¨E P¨E X¨E `¨E h¨E p¨E x¨E €¨E ˆ¨E �¨E ˜¨E  ¨E ¨¨E °¨E ¸¨E À¨E È¨E Ð¨E Ø¨E à¨E è¨E ð¨E ø¨E  ©E ©E ©E ©E  ©E (©E 0©E 8©E @©E H©E P©E X©E `©E h©E p©E x©E €©E ˆ©E �©E ˜©E  ©E ¨©E °©E ¸©E À©E È©E Ð©E Ø©E à©E è©E ð©E ø©E  ªE ªE ªE ªE  ªE (ªE 0ªE 8ªE @ªE HªE PªE XªE `ªE hªE pªE xªE €ªE ˆªE �ªE ˜ªE  ªE ¨ªE °ªE ¸ªE ÀªE ÈªE ÐªE ØªE àªE èªE ðªE øªE  «E «E «E «E  «E («E 0«E 8«E @«E H«E P«E X«E `«E h«E p«E x«E €«E ˆ«E �«E ˜«E  «E ¨«E °«E ¸«E À«E È«E Ð«E Ø«E à«E è«E ð«E ø«E  ¬E ¬E ¬E ¬E  ¬E (¬E 0¬E 8¬E @¬E H¬E P¬E X¬E `¬E h¬E p¬E x¬E €¬E ˆ¬E �¬E ˜¬E  ¬E ¨¬E °¬E ¸¬E À¬E È¬E Ð¬E Ø¬E à¬E è¬E ð¬E ø¬E  ­E ­E ­E ­E  ­E (­E 0­E 8­E @­E H­E P­E X­E `­E h­E p­E x­E €­E ˆ­E �­E ˜­E  ­E ¨­E °­E ¸­E À­E È­E Ð­E Ø­E à­E è­E ð­E ø­E  ®E ®E ®E ®E  ®E (®E 0®E 8®E @®E H®E P®E X®E `®E h®E p®E x®E €®E ˆ®E �®E ˜®E  ®E ¨®E °®E ¸®E À®E È®E Ð®E Ø®E à®E è®E ð®E ø®E  ¯E ¯E ¯E ¯E  ¯E (¯E 0¯E 8¯E @¯E H¯E P¯E X¯E `¯E h¯E p¯E x¯E €¯E ˆ¯E �¯E ˜¯E  ¯E ¨¯E °¯E ¸¯E À¯E È¯E Ð¯E Ø¯E à¯E è¯E ð¯E ø¯E  °E °E °E °E  °E (°E 0°E 8°E @°E H°E P°E X°E `°E h°E p°E x°E €°E ˆ°E �°E ˜°E  °E ¨°E °°E ¸°E À°E È°E Ð°E Ø°E à°E è°E ð°E ø°E  ±E ±E ±E ±E  ±E (±E 0±E 8±E @±E H±E P±E X±E `±E h±E p±E x±E €±E ˆ±E �±E ˜±E  ±E ¨±E °±E ¸±E À±E È±E Ð±E Ø±E à±E è±E ð±E ø±E  ²E ²E ²E ²E  ²E (²E 0²E 8²E @²E H²E P²E X²E `²E h²E p²E x²E €²E ˆ²E �²E ˜²E  ²E ¨²E °²E ¸²E À²E È²E Ð²E Ø²E à²E è²E ð²E ø²E  ³E ³E ³E ³E  ³E (³E 0³E 8³E @³E H³E P³E X³E `³E h³E p³E x³E €³E ˆ³E �³E ˜³E  ³E ¨³E °³E ¸³E À³E È³E Ð³E Ø³E à³E è³E ð³E ø³E  ´E ´E ´E ´E  ´E (´E 0´E 8´E @´E H´E P´E X´E `´E h´E p´E x´E €´E ˆ´E �´E ˜´E  ´E ¨´E °´E ¸´E À´E È´E Ð´E Ø´E à´E è´E ð´E ø´E  µE µE µE µE  µE (µE 0µE 8µE @µE HµE PµE XµE `µE hµE pµE xµE €µE ˆµE �µE ˜µE  µE ¨µE °µE ¸µE ÀµE ÈµE ÐµE ØµE àµE èµE ðµE øµE  ¶E ¶E ¶E ¶E  ¶E (¶E 0¶E 8¶E @¶E H¶E P¶E X¶E `¶E h¶E p¶E x¶E €¶E ˆ¶E �¶E ˜¶E  ¶E ¨¶E °¶E ¸¶E À¶E È¶E Ð¶E Ø¶E à¶E è¶E ð¶E ø¶E  ·E ·E ·E ·E  ·E (·E 0·E 8·E @·E H·E P·E X·E `·E h·E p·E x·E €·E ˆ·E �·E ˜·E  ·E ¨·E °·E ¸·E À·E È·E Ð·E Ø·E à·E è·E ð·E ø·E  ¸E ¸E ¸E ¸E  ¸E (¸E 0¸E 8¸E @¸E H¸E P¸E X¸E `¸E h¸E p¸E x¸E €¸E ˆ¸E �¸E ˜¸E  ¸E ¨¸E °¸E ¸¸E À¸E È¸E Ð¸E Ø¸E à¸E è¸E ð¸E ø¸E  ¹E ¹E ¹E ¹E  ¹E (¹E 0¹E 8¹E @¹E H¹E P¹E X¹E `¹E h¹E p¹E x¹E €¹E ˆ¹E �¹E ˜¹E  ¹E ¨¹E °¹E ¸¹E À¹E È¹E Ð¹E Ø¹E à¹E è¹E ð¹E ø¹E  ºE ºE ºE ºE  ºE (ºE 0ºE 8ºE @ºE HºE PºE XºE `ºE hºE pºE xºE €ºE ˆºE �ºE ˜ºE  ºE ¨ºE °ºE ¸ºE ÀºE ÈºE ÐºE ØºE àºE èºE ðºE øºE  »E »E »E »E  »E (»E 0»E 8»E @»E H»E P»E X»E `»E h»E p»E x»E €»E ˆ»E �»E ˜»E  »E ¨»E °»E ¸»E À»E È»E Ð»E Ø»E à»E è»E ð»E ø»E  ¼E ¼E ¼E ¼E  ¼E (¼E 0¼E 8¼E @¼E H¼E P¼E X¼E `¼E h¼E p¼E x¼E €¼E ˆ¼E �¼E ˜¼E  ¼E ¨¼E °¼E ¸¼E À¼E È¼E Ð¼E Ø¼E à¼E è¼E ð¼E ø¼E  ½E ½E ½E ½E  ½E (½E 0½E 8½E @½E H½E P½E X½E `½E h½E p½E x½E €½E ˆ½E �½E ˜½E  ½E ¨½E °½E ¸½E À½E È½E Ð½E Ø½E à½E è½E ð½E ø½E  ¾E ¾E ¾E ¾E  ¾E (¾E 0¾E 8¾E @¾E H¾E P¾E X¾E `¾E h¾E p¾E x¾E €¾E ˆ¾E �¾E ˜¾E  ¾E ¨¾E °¾E ¸¾E À¾E È¾E Ð¾E Ø¾E à¾E è¾E ð¾E ø¾E  ¿E ¿E ¿E ¿E  ¿E (¿E 0¿E 8¿E @¿E H¿E P¿E X¿E `¿E h¿E p¿E x¿E €¿E ˆ¿E �¿E ˜¿E  ¿E ¨¿E °¿E ¸¿E À¿E È¿E Ð¿E Ø¿E à¿E è¿E ð¿E ø¿E  ÀE ÀE ÀE ÀE  ÀE (ÀE 0ÀE 8ÀE @ÀE HÀE PÀE XÀE `ÀE hÀE pÀE xÀE €ÀE ˆÀE �ÀE ˜ÀE  ÀE ¨ÀE °ÀE ¸ÀE ÀÀE ÈÀE ÐÀE ØÀE àÀE èÀE ðÀE øÀE  ÁE ÁE ÁE ÁE  ÁE (ÁE 0ÁE 8ÁE @ÁE HÁE PÁE XÁE `ÁE hÁE pÁE xÁE €ÁE ˆÁE �ÁE ˜ÁE  ÁE ¨ÁE °ÁE ¸ÁE ÀÁE ÈÁE ÐÁE ØÁE àÁE èÁE ðÁE øÁE  ÂE ÂE ÂE ÂE  ÂE (ÂE 0ÂE 8ÂE @ÂE HÂE PÂE XÂE `ÂE hÂE pÂE xÂE €ÂE ˆÂE �ÂE ˜ÂE  ÂE ¨ÂE °ÂE ¸ÂE ÀÂE ÈÂE ÐÂE ØÂE àÂE èÂE ðÂE øÂE  ÃE ÃE ÃE ÃE  ÃE (ÃE 0ÃE 8ÃE @ÃE HÃE PÃE XÃE `ÃE hÃE pÃE xÃE €ÃE ˆÃE �ÃE ˜ÃE  ÃE ¨ÃE °ÃE ¸ÃE ÀÃE ÈÃE ÐÃE ØÃE àÃE èÃE ðÃE øÃE  ÄE ÄE ÄE ÄE  ÄE (ÄE 0ÄE 8ÄE @ÄE HÄE PÄE XÄE `ÄE hÄE pÄE xÄE €ÄE ˆÄE �ÄE ˜ÄE  ÄE ¨ÄE °ÄE ¸ÄE ÀÄE ÈÄE ÐÄE ØÄE àÄE èÄE ðÄE øÄE  ÅE ÅE ÅE ÅE  ÅE (ÅE 0ÅE 8ÅE @ÅE HÅE PÅE XÅE `ÅE hÅE pÅE xÅE €ÅE ˆÅE �ÅE ˜ÅE  ÅE ¨ÅE °ÅE ¸ÅE ÀÅE ÈÅE ÐÅE ØÅE àÅE èÅE ðÅE øÅE  ÆE ÆE ÆE ÆE  ÆE (ÆE 0ÆE 8ÆE @ÆE HÆE PÆE XÆE `ÆE hÆE pÆE xÆE €ÆE ˆÆE �ÆE ˜ÆE  ÆE ¨ÆE °ÆE ¸ÆE ÀÆE ÈÆE ÐÆE ØÆE àÆE èÆE ðÆE øÆE  ÇE ÇE ÇE ÇE  ÇE (ÇE 0ÇE 8ÇE @ÇE HÇE PÇE XÇE `ÇE hÇE pÇE xÇE €ÇE ˆÇE �ÇE ˜ÇE  ÇE ¨ÇE °ÇE ¸ÇE ÀÇE ÈÇE ÐÇE ØÇE àÇE èÇE ðÇE øÇE  ÈE ÈE ÈE ÈE  ÈE (ÈE 0ÈE 8ÈE @ÈE HÈE PÈE XÈE `ÈE hÈE pÈE xÈE €ÈE ˆÈE �ÈE ˜ÈE  ÈE ¨ÈE °ÈE ¸ÈE ÀÈE ÈÈE ÐÈE ØÈE àÈE èÈE ðÈE øÈE  ÉE ÉE ÉE ÉE  ÉE (ÉE 0ÉE 8ÉE @ÉE HÉE PÉE XÉE `ÉE hÉE pÉE xÉE €ÉE ˆÉE �ÉE ˜ÉE  ÉE ¨ÉE °ÉE ¸ÉE ÀÉE ÈÉE ÐÉE ØÉE àÉE èÉE ðÉE øÉE  ÊE ÊE ÊE ÊE  ÊE (ÊE 0ÊE 8ÊE @ÊE HÊE PÊE XÊE `ÊE hÊE pÊE xÊE €ÊE ˆÊE �ÊE ˜ÊE  ÊE ¨ÊE °ÊE ¸ÊE ÀÊE ÈÊE ÐÊE ØÊE àÊE èÊE ðÊE øÊE  ËE ËE ËE ËE  ËE (ËE 0ËE 8ËE @ËE HËE PËE XËE `ËE hËE pËE xËE €ËE ˆËE �ËE ˜ËE  ËE ¨ËE °ËE ¸ËE ÀËE ÈËE ÐËE ØËE àËE èËE ðËE øËE  ÌE ÌE ÌE ÌE  ÌE (ÌE 0ÌE 8ÌE @ÌE HÌE PÌE XÌE `ÌE hÌE pÌE xÌE €ÌE ˆÌE �ÌE ˜ÌE  ÌE ¨ÌE °ÌE ¸ÌE ÀÌE ÈÌE ÐÌE ØÌE àÌE èÌE ðÌE øÌE  ÍE ÍE ÍE ÍE  ÍE (ÍE 0ÍE 8ÍE @ÍE HÍE PÍE XÍE `ÍE hÍE pÍE xÍE €ÍE ˆÍE �ÍE ˜ÍE  ÍE ¨ÍE °ÍE ¸ÍE ÀÍE ÈÍE ÐÍE ØÍE àÍE èÍE ðÍE øÍE  ÎE ÎE ÎE ÎE  ÎE (ÎE 0ÎE 8ÎE @ÎE HÎE PÎE XÎE `ÎE hÎE pÎE xÎE €ÎE ˆÎE �ÎE ˜ÎE  ÎE ¨ÎE °ÎE ¸ÎE ÀÎE ÈÎE ÐÎE ØÎE àÎE èÎE ðÎE øÎE  ÏE ÏE ÏE ÏE  ÏE (ÏE 0ÏE 8ÏE @ÏE HÏE PÏE XÏE `ÏE hÏE pÏE xÏE €ÏE ˆÏE �ÏE ˜ÏE  ÏE ¨ÏE °ÏE ¸ÏE ÀÏE ÈÏE ÐÏE ØÏE àÏE èÏE ðÏE øÏE  ÐE ÐE ÐE ÐE  ÐE (ÐE 0ÐE 8ÐE @ÐE HÐE PÐE XÐE `ÐE hÐE pÐE xÐE €ÐE ˆÐE �ÐE ˜ÐE  ÐE ¨ÐE °ÐE ¸ÐE ÀÐE ÈÐE ÐÐE ØÐE àÐE èÐE ðÐE øÐE  ÑE ÑE ÑE ÑE  ÑE (ÑE 0ÑE 8ÑE @ÑE HÑE PÑE XÑE `ÑE hÑE pÑE xÑE €ÑE ˆÑE �ÑE ˜ÑE  ÑE ¨ÑE °ÑE ¸ÑE ÀÑE ÈÑE ÐÑE ØÑE àÑE èÑE ðÑE øÑE  ÒE ÒE ÒE ÒE  ÒE (ÒE 0ÒE 8ÒE @ÒE HÒE PÒE XÒE `ÒE hÒE pÒE xÒE €ÒE ˆÒE �ÒE ˜ÒE  ÒE ¨ÒE °ÒE ¸ÒE ÀÒE ÈÒE ÐÒE ØÒE àÒE èÒE ðÒE øÒE  ÓE ÓE ÓE ÓE  ÓE (ÓE 0ÓE 8ÓE @ÓE HÓE PÓE XÓE `ÓE hÓE pÓE xÓE €ÓE ˆÓE �ÓE ˜ÓE  ÓE ¨ÓE °ÓE ¸ÓE ÀÓE ÈÓE ÐÓE ØÓE àÓE èÓE ðÓE øÓE  ÔE ÔE ÔE ÔE  ÔE (ÔE 0ÔE 8ÔE @ÔE HÔE PÔE XÔE `ÔE hÔE pÔE xÔE €ÔE ˆÔE �ÔE ˜ÔE  ÔE ¨ÔE °ÔE ¸ÔE ÀÔE ÈÔE ÐÔE ØÔE àÔE èÔE ðÔE øÔE  ÕE ÕE ÕE ÕE  ÕE (ÕE 0ÕE 8ÕE @ÕE HÕE PÕE XÕE `ÕE hÕE pÕE xÕE €ÕE ˆÕE �ÕE ˜ÕE  ÕE ¨ÕE °ÕE ¸ÕE ÀÕE ÈÕE ÐÕE ØÕE àÕE èÕE ðÕE øÕE  ÖE ÖE ÖE ÖE  ÖE (ÖE 0ÖE 8ÖE @ÖE HÖE PÖE XÖE `ÖE hÖE pÖE xÖE €ÖE ˆÖE �ÖE ˜ÖE  ÖE ¨ÖE °ÖE ¸ÖE ÀÖE ÈÖE ÐÖE ØÖE àÖE èÖE ðÖE øÖE  ×E ×E ×E ×E  ×E (×E 0×E 8×E @×E H×E P×E X×E `×E h×E p×E x×E €×E ˆ×E �×E ˜×E  ×E ¨×E °×E ¸×E À×E È×E Ð×E Ø×E à×E è×E ð×E ø×E  ØE ØE ØE ØE  ØE (ØE 0ØE 8ØE @ØE HØE PØE XØE `ØE hØE pØE xØE €ØE ˆØE �ØE ˜ØE  ØE ¨ØE °ØE ¸ØE ÀØE ÈØE ÐØE ØØE àØE èØE ðØE øØE  ÙE ÙE ÙE ÙE  ÙE (ÙE 0ÙE 8ÙE @ÙE HÙE PÙE XÙE `ÙE hÙE pÙE xÙE €ÙE ˆÙE �ÙE ˜ÙE  ÙE ¨ÙE °ÙE ¸ÙE ÀÙE ÈÙE ÐÙE ØÙE àÙE èÙE ðÙE øÙE  ÚE ÚE ÚE ÚE  ÚE (ÚE 0ÚE 8ÚE @ÚE HÚE PÚE XÚE `ÚE hÚE pÚE xÚE €ÚE ˆÚE �ÚE ˜ÚE  ÚE ¨ÚE °ÚE ¸ÚE ÀÚE ÈÚE ÐÚE ØÚE àÚE èÚE ðÚE øÚE  ÛE ÛE ÛE ÛE  ÛE (ÛE 0ÛE 8ÛE @ÛE HÛE PÛE XÛE `ÛE hÛE pÛE xÛE €ÛE ˆÛE �ÛE ˜ÛE  ÛE ¨ÛE °ÛE ¸ÛE ÀÛE ÈÛE ÐÛE ØÛE àÛE èÛE ðÛE øÛE  ÜE ÜE ÜE ÜE  ÜE (ÜE 0ÜE 8ÜE @ÜE HÜE PÜE XÜE `ÜE hÜE pÜE xÜE €ÜE ˆÜE �ÜE ˜ÜE  ÜE ¨ÜE °ÜE ¸ÜE ÀÜE ÈÜE ÐÜE ØÜE àÜE èÜE ðÜE øÜE  ÝE ÝE ÝE ÝE  ÝE (ÝE 0ÝE 8ÝE @ÝE HÝE PÝE XÝE `ÝE hÝE pÝE xÝE €ÝE ˆÝE �ÝE ˜ÝE  ÝE ¨ÝE °ÝE ¸ÝE ÀÝE ÈÝE ÐÝE ØÝE àÝE èÝE ðÝE øÝE  ÞE ÞE ÞE ÞE  ÞE (ÞE 0ÞE 8ÞE @ÞE HÞE PÞE XÞE `ÞE hÞE pÞE xÞE €ÞE ˆÞE �ÞE ˜ÞE  ÞE ¨ÞE °ÞE ¸ÞE ÀÞE ÈÞE ÐÞE ØÞE àÞE èÞE ðÞE øÞE  ßE ßE ßE ßE  ßE (ßE 0ßE 8ßE @ßE HßE PßE XßE `ßE hßE pßE xßE €ßE ˆßE �ßE ˜ßE  ßE ¨ßE °ßE ¸ßE ÀßE ÈßE ÐßE ØßE àßE èßE ðßE øßE  àE àE àE àE  àE (àE 0àE 8àE @àE HàE PàE XàE `àE hàE pàE xàE €àE ˆàE �àE ˜àE  àE ¨àE °àE ¸àE ÀàE ÈàE ÐàE ØàE ààE èàE ðàE øàE  áE áE áE áE  áE (áE 0áE 8áE @áE HáE PáE XáE `áE háE páE xáE €áE ˆáE �áE ˜áE  áE ¨áE °áE ¸áE ÀáE ÈáE ÐáE ØáE àáE èáE ðáE øáE  âE âE âE âE  âE (âE 0âE 8âE @âE HâE PâE XâE `âE hâE pâE xâE €âE ˆâE �âE ˜âE  âE ¨âE °âE ¸âE ÀâE ÈâE ÐâE ØâE àâE èâE ðâE øâE  ãE ãE ãE ãE  ãE (ãE 0ãE 8ãE @ãE HãE PãE XãE `ãE hãE pãE xãE €ãE ˆãE �ãE ˜ãE  ãE ¨ãE °ãE ¸ãE ÀãE ÈãE ÐãE ØãE àãE èãE ðãE øãE  äE äE äE äE  äE (äE 0äE 8äE @äE HäE PäE XäE `äE häE päE xäE €äE ˆäE �äE ˜äE  äE ¨äE °äE ¸äE ÀäE ÈäE ÐäE ØäE àäE èäE ðäE øäE  åE åE åE åE  åE (åE 0åE 8åE @åE HåE PåE XåE `åE håE påE xåE €åE ˆåE �åE ˜åE  åE ¨åE °åE ¸åE ÀåE ÈåE ÐåE ØåE àåE èåE ðåE øåE  æE æE æE æE  æE (æE 0æE 8æE @æE HæE PæE XæE `æE hæE pæE xæE €æE ˆæE �æE ˜æE  æE ¨æE °æE ¸æE ÀæE ÈæE ÐæE ØæE àæE èæE ðæE øæE  çE çE çE çE  çE (çE 0çE 8çE @çE HçE PçE XçE `çE hçE pçE xçE €çE ˆçE �çE ˜çE  çE ¨çE °çE ¸çE ÀçE ÈçE ÐçE ØçE àçE èçE ðçE øçE  èE èE èE èE  èE (èE 0èE 8èE @èE HèE PèE XèE `èE hèE pèE xèE €èE ˆèE �èE ˜èE  èE ¨èE °èE ¸èE ÀèE ÈèE ÐèE ØèE àèE èèE ðèE øèE  éE éE éE éE  éE (éE 0éE 8éE @éE HéE PéE XéE `éE héE péE xéE €éE ˆéE �éE ˜éE  éE ¨éE °éE ¸éE ÀéE ÈéE ÐéE ØéE àéE èéE ðéE øéE  êE êE êE êE  êE (êE 0êE 8êE @êE HêE PêE XêE `êE hêE pêE xêE €êE ˆêE �êE ˜êE  êE ¨êE °êE ¸êE ÀêE ÈêE ÐêE ØêE àêE èêE ðêE øêE  ëE ëE ëE ëE  ëE (ëE 0ëE 8ëE @ëE HëE PëE XëE `ëE hëE pëE xëE €ëE ˆëE �ëE ˜ëE  ëE ¨ëE °ëE ¸ëE ÀëE ÈëE ÐëE ØëE àëE èëE ðëE øëE  ìE ìE ìE ìE  ìE (ìE 0ìE 8ìE @ìE HìE PìE XìE `ìE hìE pìE xìE €ìE ˆìE �ìE ˜ìE  ìE ¨ìE °ìE ¸ìE ÀìE ÈìE ÐìE ØìE àìE èìE ðìE øìE  íE íE íE íE  íE (íE 0íE 8íE @íE HíE PíE XíE `íE híE píE xíE €íE ˆíE �íE ˜íE  íE ¨íE °íE ¸íE ÀíE ÈíE ÐíE ØíE àíE èíE ðíE øíE  îE îE îE îE  îE (îE 0îE 8îE @îE HîE PîE XîE `îE hîE pîE xîE €îE ˆîE �îE ˜îE  îE ¨îE °îE ¸îE ÀîE ÈîE ÐîE ØîE àîE èîE ðîE øîE  ïE ïE ïE ïE  ïE (ïE 0ïE 8ïE @ïE HïE PïE XïE `ïE hïE pïE xïE €ïE ˆïE �ïE ˜ïE  ïE ¨ïE °ïE ¸ïE ÀïE ÈïE ÐïE ØïE àïE èïE ðïE øïE  ðE ðE ðE ðE  ðE (ðE 0ðE 8ðE @ðE HðE PðE XðE `ðE hðE pðE xðE €ðE ˆðE �ðE ˜ðE  ðE ¨ðE °ðE ¸ðE ÀðE ÈðE ÐðE ØðE àðE èðE ððE øðE  ñE ñE ñE ñE  ñE (ñE 0ñE 8ñE @ñE HñE PñE XñE `ñE hñE pñE xñE €ñE ˆñE �ñE ˜ñE  ñE ¨ñE °ñE ¸ñE ÀñE ÈñE ÐñE ØñE àñE èñE ðñE øñE  òE òE òE òE  òE (òE 0òE 8òE @òE HòE PòE XòE `òE hòE pòE xòE €òE ˆòE �òE ˜òE  òE ¨òE °òE ¸òE ÀòE ÈòE ÐòE ØòE àòE èòE ðòE øòE  óE óE óE óE  óE (óE 0óE 8óE @óE HóE PóE XóE `óE hóE póE xóE €óE ˆóE �óE ˜óE  óE ¨óE °óE ¸óE ÀóE ÈóE ÐóE ØóE àóE èóE ðóE øóE  ôE ôE ôE ôE  ôE (ôE 0ôE 8ôE @ôE HôE PôE XôE `ôE hôE pôE xôE €ôE ˆôE �ôE ˜ôE  ôE ¨ôE °ôE ¸ôE ÀôE ÈôE ÐôE ØôE àôE èôE ðôE øôE  õE õE õE õE  õE (õE 0õE 8õE @õE HõE PõE XõE `õE hõE põE xõE €õE ˆõE �õE ˜õE  õE ¨õE °õE ¸õE ÀõE ÈõE ÐõE ØõE àõE èõE ðõE øõE  öE öE öE öE  öE (öE 0öE 8öE @öE HöE PöE XöE `öE höE pöE xöE €öE ˆöE �öE ˜öE  öE ¨öE °öE ¸öE ÀöE ÈöE ÐöE ØöE àöE èöE ðöE øöE  ÷E ÷E ÷E ÷E  ÷E (÷E 0÷E 8÷E @÷E H÷E P÷E X÷E `÷E h÷E p÷E x÷E €÷E ˆ÷E �÷E ˜÷E  ÷E ¨÷E °÷E ¸÷E À÷E È÷E Ð÷E Ø÷E à÷E è÷E ð÷E ø÷E  øE øE øE øE  øE (øE 0øE 8øE @øE HøE PøE XøE `øE høE pøE xøE €øE ˆøE �øE ˜øE  øE ¨øE °øE ¸øE ÀøE ÈøE ÐøE ØøE àøE èøE ðøE øøE  ùE ùE ùE ùE  ùE (ùE 0ùE 8ùE @ùE HùE PùE XùE `ùE hùE pùE xùE €ùE ˆùE �ùE ˜ùE  ùE ¨ùE °ùE ¸ùE ÀùE ÈùE ÐùE ØùE àùE èùE ðùE øùE  úE úE úE úE  úE (úE 0úE 8úE @úE HúE PúE XúE `úE húE púE xúE €úE ˆúE �úE ˜úE  úE ¨úE °úE ¸úE ÀúE ÈúE ÐúE ØúE àúE èúE ðúE øúE  ûE ûE ûE ûE  ûE (ûE 0ûE 8ûE @ûE HûE PûE XûE `ûE hûE pûE xûE €ûE ˆûE �ûE ˜ûE  ûE ¨ûE °ûE ¸ûE ÀûE ÈûE ÐûE ØûE àûE èûE ðûE øûE  üE üE üE üE  üE (üE 0üE 8üE @üE HüE PüE XüE `üE hüE püE xüE €üE ˆüE �üE ˜üE  üE ¨üE °üE ¸üE ÀüE ÈüE ÐüE ØüE àüE èüE ðüE øüE  ýE ýE ýE ýE  ýE (ýE 0ýE 8ýE @ýE HýE PýE XýE `ýE hýE pýE xýE €ýE ˆýE �ýE ˜ýE  ýE ¨ýE °ýE ¸ýE ÀýE ÈýE ÐýE ØýE àýE èýE ðýE øýE  þE þE þE þE  þE (þE 0þE 8þE @þE HþE PþE XþE `þE hþE pþE xþE €þE ˆþE �þE ˜þE  þE ¨þE °þE ¸þE ÀþE ÈþE ÐþE ØþE àþE èþE ðþE øþE  ÿE ÿE ÿE ÿE  ÿE (ÿE 0ÿE 8ÿE @ÿE HÿE PÿE XÿE `ÿE hÿE pÿE xÿE €ÿE ˆÿE �ÿE ˜ÿE  ÿE ¨ÿE °ÿE ¸ÿE ÀÿE ÈÿE ÐÿE ØÿE àÿE èÿE ðÿE øÿE   F  F  F  F  F  F  F  F   F $ F ( F , F 0 F 4 F 8 F < F @ F D F H F L F P F T F X F \ F ` F d F h F l F p F t F x F | F € F „ F ˆ F Œ F � F ” F ˜ F œ F   F ¤ F ¨ F ¬ F ° F ´ F ¸ F ¼ F À F Ä F È F Ì F Ð F Ô F Ø F Ü F à F ä F è F ì F ð F ô F ø F ü F  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  	F 	F 	F 	F 	F 	F 	F 	F  	F $	F (	F ,	F 0	F 4	F 8	F <	F @	F D	F H	F L	F P	F T	F X	F \	F `	F d	F h	F l	F p	F t	F x	F |	F €	F „	F ˆ	F Œ	F �	F ”	F ˜	F œ	F  	F ¤	F ¨	F ¬	F °	F ´	F ¸	F ¼	F À	F Ä	F È	F Ì	F Ð	F Ô	F Ø	F Ü	F à	F ä	F è	F ì	F ð	F ô	F ø	F ü	F  
F 
F 
F 
F 
F 
F 
F 
F  
F $
F (
F ,
F 0
F 4
F 8
F <
F @
F D
F H
F L
F P
F T
F X
F \
F `
F d
F h
F l
F p
F t
F x
F |
F €
F „
F ˆ
F Œ
F �
F ”
F ˜
F œ
F  
F ¤
F ¨
F ¬
F °
F ´
F ¸
F ¼
F À
F Ä
F È
F Ì
F Ð
F Ô
F Ø
F Ü
F à
F ä
F è
F ì
F ð
F ô
F ø
F ü
F  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F„¡yÈœ@÷®>3[g>•Š>”f�>NŒ§>¡rÕ>Mã>j:ë>´^?Ÿhò>ßãñ>|ªý>ß?æÔù>“î>nKä>†Ô>ßÉÌ>Œ~Á>qY·>»Ù³>?¬·>�¼>–±> J±>Æ‡¯>�±>"£>º�£>ü4 >Oå–>²¾”>³Jˆ>p‡> Ü‚>UÆ‚>ãx>2q>:at>}Ml> 1g>zd>v!V>ŽFH>3©F>RÙ?>8�E>&ìM>.‘O>ï�H>A"F>ÃÑE>6RA>|nF>¥—=>jŒ<>•=>*[C>mã;>Am9>ä™5>MÇ6>Æ€1>’r+>Ûæ(>½&>ŸS%>$À%>ˆ¢>>›Š>†®>Š”>,É>Ê‘>öY>™À>¶`>�*>xÖ>Hþ=a»û=Î^ò=ð=ý@ð=.Áó=Šxâ=M‹Ü=Ö=yÕ=å=Î=£iË=øÏÈ=$…È=wšÇ=à„Æ=_È=ŒÂ=;3¸=vÐ¹=[)¸=¬º=ß�±=ã:³=#’±=åA«=ê;¨=Éðª=±G¤=¦'¦=*@£=×¨=E<¦=öY§=÷ˆ¨=\û¤=í¦ =)ù¡=µ„ =¨ž=÷"œ=!U›=‰	�=Û²�=!—=h–=‚8‘=¥‘=A“�=A²�=¦«‘=JçŒ=/ˆ‰=4õˆ=Æ½‰=°Á†=Ýº…=Ÿ˜‚=’‚=¨ë…=Ñq…=õRƒ=Åí€=šœ=en=ÎK€=A¾w=‰½v=É›u=êÑs=aWr=øm=í r=HÃm=ê÷s=D,s=©Õs=”uv=:s=»)i=d3h=c�e=†ñc=ï1c=[yb=ãEc=1±c=d“b=:`\=½tX=*_W=oöN=ÖàG=HâL=ªG=“B=;´C=›ƒA=t A=†šA={@=1jA=,?=Ô™:=ŒJ:=È<=ªó:=D35=R8=ñ;9=Ö(:=$à5=÷1=€1=]n-=.\/=…@=ü±?=øa9=�8=¼8=e€0=Dß.=3l-=q,/=)0=jÏ.=�).=„Í/=v2=ÜÃ1=ÖÂ-=Ã¹+=ÿ×)=¶À(=C(=éØ&=S–'=®y$=ºÐ=�c=� =®±!=àê"=è/"=æÙ!=@M!=ã%=ý<"=Œ=}‰=€=e°=R�=z»=æS=d=Äg=ÓÊ=†‹=8ð=Á1=§=]1=R
=²Ï=-=�¡==Ü=Â-=ê=��=9=XA=lú =|_=/á=8* =1={ =é=:N =z =$1û<ºëÿ<\ü<;{û<ó,÷<öó<VÇù<Êlú<(ù<.Nö<8x÷<x4ö<scú<iYú<q›ö<vïö<�þ<D:ü<±°û<øóü<hAû<æÑú<3àü<A@þ<`ìÿ<§ÿ<ñ‡=Îfú<Yõ<€òõ<ïVø<K÷<ˆBñ<l²ó<4hó<,Öò<Ïuó<s!õ<¶hõ<à£õ<ø<¤¦ô<˜9ö<\ú÷<nƒö<,
ø<û<sû<’yþ<ONÿ<L¸ÿ<„jÿ<<ñù<o·ú<z¡ú<APô<x4ó<‰nò<€ö<}ô<úØð<±î<·4ê<#‹ç<Êóè<Ž4é<í@ç<Tzè<rÙæ<×±ã<±¹à<JïÞ<­¸Ü<ˆ�Ý<è'Ú<©Ý<�îÛ<8ÞÔ<7ØÑ<mýÑ<¼_Ð< ªË<4ÔÂ<NÃ<©à¾<dÀ<°Ã<l„À<l¨Â<MþÃ<�Å<�ÝÃ<Æ<
cÄ<ŸæÅ<ÔšÅ<Â<OÝÂ<ÎÅ</äÅ<ÝÅ<1âÃ<sÂ<&ÛÃ<œNÂ<ä$Ä<WÅ< ¿Å<Ÿ¨Ã<¥OÃ<ÈÂ<EÎÂ<c„Ã<lÅÂ<ò�Â<Ì«»<SC½<Î*»<rð¹<„„·<´¨¯<Eô°<)÷¯<Û¶¯<s¯<¤ü®<»¶­<[˜®<ô1«<sƒª<¤‘©<NÝ¨<Ãž©<­t§<ÚÛ©<®D¨<{A©<Œy§<q=¦<¥á£<Q•¥<…Ã¦<|ç¦<±Ò¥<T¦<z&¨<à¬¨<2Ì¨<RJ¥<”×£<í½£<¬E£<éÔ <,Ç¡<ºÆ£< £<I©¡<d_ <�º <¹E¡<;–œ<Ô›<‘™<ØŸ—<G4—<ïk˜<î,˜<l)—<äÝ“<à»”<O‘‘<Èö�<U€�<
�<Ó"�<T±Ž<M	�<²Ó�<%T‘<{6‘<Í��<ÕŒ<I­�<&ÒŽ<ßdŽ<ëRŽ<ºŽ<r�<ŸiŒ<N�<Î€‹<òŒ<üÛŒ<óq�<ÃŽ<‘ �<Ä�<zŒ<8’�<´ø�<_©�<=Ž<SMŽ<$ôŒ<Âr‹<Òm‹<•�‹<­\‹<¬‹<Ým‰<þ2Š<¬;‰<mÝ…<àM„<¡ƒ<Êx†<æJ‡<v¼‡<óNˆ<TF‡<!Ý‡<3Îˆ<�Wˆ<êØ‡<”S‰<yš‰<“4‰<Bµ‰<W«‹<HŠ<’Àˆ<Šu†<Z‡<ªi‡<�†<cB†<Ô¢…<vã„<X…<ƒ<×›ƒ<ÔÔ„<›t†<êÏ…<Ïg‡<°/‡<AÝ†<Ä¥†<	‡<Mî‡<u&‰<ˆ	ˆ<%Å‰<ˆãˆ< Aˆ<JÇŠ<2Œ<vuŒ</½‹<u-‹<¡ �<Ç´‹<]‹<Mˆ<OÝˆ<.‡<`?ˆ<éÆ‡<Ü�ˆ<ñÅ†<Í‡<Wä†<jä†<6‡<a‡<”†< M„<¦›„<À!„<@ß�<ªs�<Cé�<´m�<ñô€<~>€<n�<xŒ�<M±�<…‚<¸–€<ÖÈ}<Ø<¡P}<�/<,€<dÈ€<C¥€<+€<·ë<ª.€<Áb|<Åõx<y<÷Tv<Úrv<&¤v<-u<£áv<2t<´�w<ÀÁv<Ô»q<±ko<r¹o<ºëm<èk<ƒ'l<`Hg<€{d<gg</@g<¥f<€Àf<×be<×e<hf<úd<Ïce<zd<Z¤a<S]`< `<ÃÙ^<Î?]<è”\<»êZ<ÝfX<ÞU<XÓT<tgU<=sT<‰-U<=ïP<í5Q<¯N<w9M<¯_O<è¸R<®ŠS<ûSV<ê§Y<“ßZ<ÁÐ[<:ðZ<2fZ<fwY<—/Y<N9W<ÏýW<¦rX<:šY<HÇV<¿T<êOV<6cW<`xT<€ÒV<H»U<öwV<ÃáU<S–W<&X<W)U<ÃÐR<¨¦R<ÝSS<¯ÈQ<‰5Q<ÌQ<…#P<E´M<ÆP<ÁgQ<m×S<D%T<¯˜T<ýøS<QT<AŒS<ûÚR<CiS<éT<“U<ú3T<J=[<{ÈY<ÉµY<ˆÐY<d�Y<n7W<Ï V<¼V<|›U<–hV<ÒU<CÉW<M–W<ÆÙU<aU<,T<{œR<TR<üÔQ<7¼P<Š‘Q<rlQ<(†S<ø*T<Ã4T<¸‰S<n«Q<ìcP<CQ<®O<?‘M<D±N<4‰N< M<z™N<tãM<œON<á°M<ü`M<oM<)K<jK<¸¸L<ŠãM<,ÿK<%qL<2I<@J<XßI<£ÑD<›1D<ÌD<�«B<ÖòB<`
D<ÐA<L¶D<Š³D<²ÐB<cNC<!|C<mäB<›ïD<‘€G<†üF<fèE<ü¨F<˜MF<¡D<ì.C<w{B<L¿A<abB<rØ@<…%C<A]B<ÑxB<?A<ó—A<@<ü?<?<×@<EA<!å?<Vâ><{û=<Ÿ‡=<—=<íñ=<_><W�><L±><“á?<_?<Ly?<nº?<Å><S=<-@<<È@<Lþ=<—d<<|;<q=<û@<<-><)è;<AŽ=<(×><ûÃ><oÔ><EJ><xs<<è<<&;<¨‚8<}Ù8<Ô-8<›ç7<SÀ7<àF7<¾7<-6<ƒ75</M5<Ô4<›G4<X›4<4·2<†;2<NJ2<W…2<e2<ÁC2<j¸0<,²2<—×2<—Þ2<í2<ó/3<1/3<J[2<%‘2<fŠ0<ó\0<”2<Ž½1<&3<<‹2<o2<Ä2<Ev1<Òí/<·I0<ŽŽ0<…Ë2<nJ1<ýu.<xL.<Ýk.<j-<f+<v²*<#¡+<F'*<(e*</Z)<¥N(<\!*<·ü*<;ó(<±ü)<Ò<+<å,<E¼+<,±,<—Ô,<8Ý-<öä-<E+<QÖ)<=*< �*<Ø¦*<c+<a+<”¤+<EŠ*<Æ|*<(‹-<-�-<;.<A:/<�#/<‰.<È},<&@*<ö°(<á©+<|Ñ+<X+<]*<V�)<eY+<òÊ*<Šò+<	+<ñÍ*<¼=+<ï+<¸`,<*c,< -<¦p-<O -<§.<�+<$Ö+<‰+<�+<n-<¶»-<B0<_’/<Ø¾0<£,<”\,<À,<I2.<jð.<xU0< .<Ä1<rŠ1<–54<Ñ34<áL4<% 2<N^1<îÜ0</<_.<É,<®ç*<å´+<%*<|�*<Î¦*<¤+<‘]+<ª¥+<÷ +<Oß+<+<î++<:"+<É*<Š­(<j%*<	‹)<d)<|ë(<Oõ'<�R&<–�&<(µ'<mv(<]M&<?&<È&<{§$<l$<£Ø#<Ûä#<Ö$<fó#<-Ï$<N�%<©R&<:ç&<rÆ&<CØ(<a>(<<'<ß)'<¬�'<@E'<Q\'<ü9'<Óä&<¥â%<?Ÿ$<!ñ%<©O$<f.$<Nü$<ÆP$<ˆ¾$<ö½#<UÌ#<Dm#<ýn"<£"<ä€#<jž#<*ó"<ù"<…û"<†Ø!<ìà<––<_{<ýî<ù<U <Ï– <ß|!<:"<Œû!<~x"<1"<�%"<˜£!<¬K <˜<hË <Y.!<Ø% <lM<Ý]<;<`ú<öN<ä\<Û<zè<ê‹<ì¿<’<Ã¨</•<�<;Ä<²7<åº<¯½<s<³ê<X8<4<±¡<„c<!£<z0<C"<_D<«¨<l�<_Ö<úQ<üæ<J<sy<Ü©<Læ<ñÞ<à©<ø <·J<h!<ü½<n<X;<ÅÔ<�œ<Ã«<{K<VO<N<}Í<=4<èª<mO<¶º<™I<«<ßC<gn<¡J<X„<Xº<Êó<ºÅ<“<¬þ
<A~	<‰�<6?<?<ZÐ<tá<ùå<ãµ<sI<´5	<K€	<VÌ	<'ƒ<a<ÌV<öX
<»J
<;j	<2ð
<'
<œ	<g	<Þ)
<:A
<¯p	<Ý_	<vþ	<¿O	<ÿ€	<ÅØ<©c<îV<¨¬<áL<ÅÀ<ŸÑ<]<Xt<êÌ<íL<éK<sz<¸><¶< ô<y<­ç<�ð<_0<|a<Æo<äÈ<ñÿ;äYÿ;€ÿ;›óý;Æ <wvþ;£Aÿ;–íÿ; Ï<¢ <	<<™Ú<Á~<M¹<EP</<B<<‚</<ß·<¿F<Ä?<:º<¿Ö<Ú1<º�<¨l<`—<†<²<¦<�<Œ <�Æ<Vª<5<é[<áp<”<ÿ< <&Î <7.<Úû<Àß< ,<ÛD<X<:P<ü<÷�<m<³Á<Mv</k<¦<à<u<�‰<Ÿä<×¯<Íõ<Ìù<üP<v><½<‚Ï<Ls<ü8<¸Ú<š <t5<ÜY<IŒ<=p<9T<ôh<ò"<Ýê<Û¤<¬·<@<H´<&¸<”2<¿g<rÀ<a`<Sô<Ò<T!<|<„y<äA<Ü,<½Í<âï<ß+<â<�s<\à<SM<Ã¿ <Y<»Kÿ;ÆØý;¯×ü;àâý;Ôú; hú;?„ø;Æ„ø;H*ø;“éô;ö;Ìåõ;¤´ö;TÜ÷;aUù;Jpù;zø;w÷;rõ;“@ó;ÑDó;ò;àãò;d0ñ;Fò;	Ûð;¤ó;tð;=Ûï;Cbï;ì\ï;²Éî;1èî;Ã™î;r?ê;úê;Óé;“é;….é;Æüæ;úYæ;7wå; ‡å;ä;øýã;44å;Á@ã;iså;.ä;ýæ;d3ä;x�æ;/>æ;Ï§å;ã*ç;Öè;V
å;#ää;¸4ã;½Zâ;m¼â;}5â;üäá;�Öà;<3â;2â;â;’èâ;Ïä;t3â;:Üá;R]â;©Æá;�ìà;š—à;E§à;†à;Ýxá;©Âà;¡‘ã;Iœã;&*ã;û
ä;é‹ã;ékä;RÞâ;s@á;7Eâ;(�á;…²à;$ià;h/á;…Dá;©\ß;4Qà;ÚºÞ;=(ß;zêÞ;àÝ;ªåÝ;1±Ý;dÞ;�Ü;›éÚ;V4Û;¿ñÚ;ÊÚ;ß&Û;�-Û;q¾Û;ðÝ;ÛáÝ;É¡Þ;oàÝ;lFÝ;”vÜ;ýOÞ;»»Ý;½Ý;é¢Þ;&HÞ;3+ß;h?ß;c°Ý;çÜ;ËÛ;YÝ;SÞ;í´Ü;È6Ü;Æöß;yà;» ß;³Þ;Š5Þ;Íà;–¨ß;á;#à;7â;œ>â;òâ;6á;†äà;c*à;Tà;ý�à;<fá;±yà;>Þ;Í¶Þ;ÛÀß;Zß;½á;²[ß;È‘ß;»Ü;”YÜ;føÚ;ÈÍÚ;ÏaÚ;¿âÛ;ÁÕÙ;Ä…Ú;¿-Ü;Hß;30á;¯´ß;†îÞ;mæÞ;X–ß;Œà;[]â;ÁÄã;œ¯ä;· å;·å;²Gå;zŸç;|6ç;�‰ç;ï×å;t9è;Ô9ç;†è;Æè;ãuç;_¦æ;4‰è;æé;Û�è;7Jê;ZÜè;Ý$ç;ÿ1ç;Š–å;¥"ç;;Kç;‘|ç;7é;Z³è;Òzé;n¶é;à„ê;ÜËê;øPê;$Éê;ˆê;Ñ�é;’&ë;Êîç; 8é;¾ê;…Cì;8kë;?Më;Ý6ê;û¤ê;ÁËë;i(ì;fŸë;d¥ì;‘kí;úÚí;Q�í;JŽî;j©î;:hî;óï;;„ð;M	ï;ÿŒî;’Jî;¥î;Okí;í;Øí;� ï;„ï;o�î;ïdï;êçï;Í—ð;V«ð;† ï; ?ï;tñî;åÌð;÷ð;Ö‹ï;Ñwî;hî;Ä×í;ñ=ï;[î;·ï;M5î;ZVí;=í;n.ì;ÑÏë;Vâë;Mì;ïÓì;\`í;¶Hì;ÌLí;:8í;¸×ë;÷ê; Æì;)»ì;1)ì;û£ì;¼Åë;�ë;ètê;4Âë;rêë;¥hì;S±ë;“zë;�-ë;a<ê;tEê;ö€ê;;é;Rè;êæ;ióå; ›ä;œ¨ã;Týá;8Tâ;(á;š‰à;f¨á;Î«á;Mâ;Ž/â;û4â;èöà;tLá;t5á;Ü}à;nÁÞ;Ž€Þ; 4ß;ß8ß;¾â;:\ã;xÅä;¡„â;iVá;,Sâ; Üá;a á;…òà; áÞ;ÔÉà;=ß;¿wß;˜�á;mâ;¦rà;šlà;ß#à;û©ß;”Žá;4ãá;râ;zâ;‰´ã;!_ä;t²ä;T æ;Xç;Åmå;Dêä;¼›ã;¯Çâ;Övã;h»â;m'à;	Îß;´à;Ìûà;(ƒß;šß;Î1à;Ôà;Íá;Fkß;à;’eß;Îà;dß;ŸtÞ;:Ý;�rÛ;Û;ÛzÛ;)ŒÙ;ôÙ;ÔsÙ;J"Ú;ôAÙ;ƒ×;Ã5Ö;ôhØ;@ÊÖ;]úÖ;çÕ;XfÔ;Î#Õ;)÷Ô;¿|Ô;æ÷Ô;ƒžÓ;³Ò; èÑ;H©Ñ;*¦Ð;X¸Ð;`HÐ;qÐ;ãÚÎ;.üÍ;±›Î;¬¾Í;`Í;í`Í;ŒmÌ;¿mË;ãƒË;”üÉ;úrÊ;AôÊ;´ÉÊ;»•Ë;“éÌ;WË;ÒuÊ;PË;ŒôÉ;ö±É;I7Ë;oªË;ØÌ;“Ë;nÊ;J1Ë;üšÊ;Æ$É;æßÈ;JíÈ;Ê¢Å;=iÆ;­Ç;N^Ç;WâÆ;!YÆ;’¤Å;œuÅ;¼ÃÅ;æ¿Ã;@hÃ;\fÁ; æÀ;”À;¿
Á;®eÀ;¥©¿;†í½;ç¼;‰Û¾;·½;ã‹¼;´º¼;A¦º;$�¹;N¹;Ößº;ã¢¹;‘H¸;Ö�¸;jë·;øG¹;­¹;k¸;¼'º;S½º;ANº;Æpº;œp¼;š ¼;HÛ¼;š ½;ad½;ûY»;–º;ýB¹;¸;s&¹;x¦¹;îº;7¶º;\ª»;Ôèº;Œé¼;é¼;÷Ž»;;#¼;/	½;†½;Æ=¾;Ñù¾;Qò½;?º¼;(!¾;÷ÏÀ;Ñ™À;r±À;Ú¼À;<gÀ;\‹À;§À;cvÂ;êÂ;Á²Â;ßdÃ;ý&Â;ëÁ;æ6Â;¦Â;—¦Ã;Ü©Ã;AVÄ;´›Ä;#UÄ;å®Ä;�ÃÄ;÷cÃ;ú½Ã;mÃ;qÃ;ŠÃ;r=Ã;éÂ;÷ÁÀ;II¿;ÿZ¾;´À;³,¿;,è¾;òË¾;F¼¿;¶“¾;D�½;_Z¼;ˆß»;cûº;HŠº;¶�º;C¿·;ìø¶;Su·;ô©¹;÷ä¸;À¥·;Ýº·;1·;mƒ·;‘?¸;¨¸;¸;×�·;Ü¾¶;Ã¶;ª˜¶;ÍÞ¶;š@´;…/³;qI´;zp´;/´;7Þ³;cU´;ò³;Zy³;ÛÌ±; F±;]3±;eÛ°;
‚±;l|±;r“°; T¯;Æ�¯;€±¯;MÑ¯;ñü¯;.ù±;„²;7³;L/³;T]³;	À²;òR±;Vµ±;7>±;n±;¥±;´7±;47±;ºE°;Æè®;ÒC®;Ã ®;	F¯;Ú_¯;wî®;qp¯;”x²;É¢³;ã;²;És²;(E°;e	°;ˆ1°;ŽÆ¯;må¯;ñÜ¯;Ú°;�+²;è²;œ‹±;w±;˜Š±;}}±;N°;Ã_®;ìý­;¦¹®;©É­;(’­;D3­;g­;lú¬;RZ­;ÎR¬;«;a‡«;¦§«;ßË«;$W­;­;®;Sÿ­;ò«­; /®;Œy­;	è­;î®­;´1­;4­;¼á¬;à#¬;ÑÐ«; 1¬;�ª;ûiª;Èmª;vËª;/©«;÷`«;2Ùª;ƒÕ«;F,«;}«;òË¬;ÚÒ¬;ÍG¬;½X¬;ø½«;ãÖ«;Zû¬;‰„­;šÕ¬;å_­;ø ­;¦Ã°;Ø›°;
d°;‹°;(‹±;’1°;Ø³¯;v{¯;š¯;dX¯;|œ­;?­;ÿ¬;¡¬;ì«;	ª;1à¨;)ö§;†ñ§;Ñ1¨;ßþ©;ãæ©;ôÂ©;9©;¦©;ä¿ª;†Š«;8¬;Òê«;W!¬; ¬;¾«;¶á«;»«;<½¬;ýœ¬;iZ­;_>¯;ÒÜ¯;¦ì¯;IÌ¯;^¯;ÚQ¯;ju°;‰°;dŠ¯;jß­;j5­;£×¬;ü6¬;ÿ¬;ÝÑ«;,¬;6¸«;_ï«;[„¬;Wð«; •«;¸«;-|«;ÃI«;z,ª;(»©;ó%ª;L´©;›©;Ø©;ûª;:qª;Pª;²æª;J�ª;ÀWª;ïä©;fê©;Ñ'©;;ì©;Ópª;’³ª;X‹ª;ì)ª;\nª;~ª;xIª;Úë©;„Ñ©;–ÿ§;ý
©;å§¨;Æm¨;·Â§;jŸ§;DÐ¦;Ì!§;wâ¦;C-§;*Š§;d§;ò§;¬Ì¥;�!¦;-/¦;È¦;‹¥;$ß¥;Ýô¥;Û´¥;æ.¦;&�¦;æ†¦;ü¢¦;rT¥;·ÿ¤;à¤;€u£;SÏ¤;]y¤;Fç£;27¥;—¥;*¥;@i¤;½5£;ñ¢;sÙ¢;6B¢;Ír¢;&£;¶­£;ß¤;h„¤;×£;ä½¡;í;¡;ºÞ¡;˜v¡;,V¡;ìh¡;Ñ£¡;U¢;ÈŒ¢;û¹¢;N¢;œû¡;Ô/¢;]~¢;Ó5¢;Ê� ;iÀŸ;
�Ÿ;´3Ÿ;-¨�;k$ž;Qªž;Ÿ;—Xž;‰ž;F…ž;; ;zE ;».Ÿ;ã;ž;'ž;´3�;“�;s/œ;2"œ;�?œ;p}œ;Ýf›;½Uœ;/fœ;œ;u‰›;/9œ;¡–›;ac›;ìÑ™;áß™;E=š;ã·™;ø¨™;¨š;ÿ˜;²Á›;Xçœ;»õœ;m×œ;¶ýœ;íž;ýÝž;JRž;èž;Mê�;Ì0�;zv�;ÚÔ�;?Õ�;�Œ�;[Ôž;,tž;®îž;s|ž;†�;<a�;r�œ;ß)œ;Ž–›;÷‰›;ª¯›;hm›;$b›;öë›;ìXœ;Êdœ;¨�œ;!I›;|°›;M»›;–Þœ;-žœ;¡ž;ßœ;#W�;­Óœ;xçœ;'�;À�;¤k�; „�;É¼œ;S¿œ;¡Æœ;¼�;ëœ;äãœ;ˆ›;/`œ;µ6œ;!œ;Ú¼›;µ›;ô›;Ÿ„�;-wž;^ìž;*¿ž;4ž;ä¶�;/@�;±o�;Ôs�;¿�;]žœ;Ü«œ;mì›;üq›;›lš;aš;Ÿ¿™;ü
š;\ê™;èÞ™;ÌÍ™;Mœ™;Óš;¶7š;v‚™;Sl™;2™;vš;Éq™;sš;ô¨›;É”›;3ñš;ïš;sŒš;Tùš;Ñˆ›;Ð¡›;xi›;�Â›;�´›;[T›;_›;®ýš;=›;½¿š;"òš;ÓÆš;Çƒš;#¤š;32š;o'™;ï±˜;W˜;¿¸—;™t—;@|—;à—;­†—; ƒ—;Œµ—;6˜; 
˜;À˜;ã,—;—;ê¬–;�‰–;và–;ßÍ–;ÄÎ–;ƒs–;Ol–;6N–;-¬–;Ãý–;¤½—;Ç–;Âh–;D»•;£•;|{•;âµ•;ç]•;�+•;Ä”;t6•;™F•;ñ»•;•;ƒ3•;_ù”;¨@”;‹T”;w”;¢À“;û„“;¼Å“;5±”;eO”;d¨”;Fs”;š“;-Ã“;¦“;ÔØ”;Ã”;Ñä”;a/•;ÿŒ”;Kf”;&½”;Š•;S”;í“;(û’;U“;Hæ“;¦”;à’”;f”;W¥”;PY•;ú”;/‚“;ÊÌ“;(Þ“;c”;è:”;ã!”;ÇÎ”;àï•;][–;(í–;è<—;£Ï—;;~—;êh—;å&—;†"—;_û—;³—;¸W–;™•;E–;ó•;Ç�•;ž•;ÑŒ•;�”;†D”;¡e”;”;±S”;i+”;l”;!z”;Ü<”;�ô“;J‰“;e'”;o8”;A£’;£Š’;c´‘;q‡‘;l�‘;”Y‘;q=‘;g‘;5b�;0	�;Fé�;ÞÑ�;$s�;f�;ˆš�;±�‘;ƒJ’;o6’;ÏÞ‘;(`’;³4“;—è’;�¤‘;³¶‘;*’‘;“‘;¶b‘;Q–‘;Èq‘;9‡’;óà’;JÖ’;Nú’;š^“;ï&”;O¸’;ôœ“;Ô½“;4˜“;S�“;Ë¿“;?R”;_š;©¤™;E¿™;&�™;(³˜;¯]™;½s™;wH™;\E™;ü6™;g6›;&Íš;m›;›;Wéš;–›;Ì ›;¬‰š;•¾š;Q­š;½ïš;Jîš;¼•š;ÚFš;�š;‘iš;ïÕ™;xÃ˜;´˜;oÉ—;cn˜;a™;u!š;øýš;«š;&òš;Ú™š;”„š;J§š;rPš;œ›;üš;#¸™;M+™;à½˜;e~™;{Á˜;Ÿc˜;Þa˜;q�™;z™;ñ#™;Yñ—;D2—;ºk—;�ï–;�z—;~ÿ–;>]—;EŽ–;¯#–;2ä–;Ç'–;¨E—;W—;‹—;R—;ês–;
í–;ò–;Ln–;°N–;õF–;q®–;Óø–;çÒ–;'‚—;T>—;F¯—;è˜;þ©—;dn—;øu—;—˜;.4˜;
˜;ÍÊ—;—Ã—;]Ä—;y˜;:ñ—;¶¿—;:ð—;èJ–;Çv–;E<–;ó@–;Ô¨•;â�•;ôO–;¡k•;×.•;|È”;Å•;sÉ”;ˆ•;lº•;<Ž”;Ž~”;Y*“;Œ&’;6’;Kâ‘;·‘;M‰‘;
•‘;Éb‘;ÿþ�;Ed‘;sx‘;¦Æ‘;)A‘;ì�‘;>E‘;4©�;ºÐ�;ï’;1F’;èy’;¤Ò“;–[“;÷„“;L<“;9"“;}+“;í’;Ù¬“;H”;6R”;èÏ“;C“;XÏ’;!�’;Y’;X1’;™~‘;ö5‘;¿Y‘;`�‘;¨~‘;N’;F“;ð’;ïa’;É!’;½“;²€“;„Ž“; ‹“;ôŸ’;"p’;ô“;Vì’;§Õ’;ÿä‘;Ç‘;¥A‘;jS‘;µ‘;ŒH�;¨Ù�;Ng�;Ðx�;¡¦�;³T�;Oç�;ß�;âŽ;®ãŽ;vªŽ;Œî�;ZË�;�Ž;&žŽ;vµŽ;FÄŽ;Õ¯Ž;ÿŽ;
„Ž;?—�;¾û�;kþ�;ß[�;²‹;"I�;f/�;´ÒŒ;™Œ;mú‹;ü}‹;²‹;Vi‹;;Ä‹;6—‹;ve‹;¨U‹;L‹;OŸŠ;}¨Š;Äÿ‰;$ª‰;¯¤‰;îÎ‰;oŠ;J‘Š;”�Š;ÃŠ;d’Š;—²Š;CºŠ;ø¿Š;ìqŠ;\Š;Î°Š;âŽŠ;*Š;…Š;ÜŠ;†¥Š;obŠ;�7‹;R¸‹;çª‹;ûŒ;¤mŒ;¡øŒ;tßŒ; �;…y�;±t�;Ø�;¡¸�;–c�;üRŒ;¤€Œ;^Œ;æç‹;¹zŒ;oŒ;ÿÔ‹;9Œ;7v‹;½YŒ;®ÊŒ;U£Œ;ô6Œ;5SŒ;¬Œ;Á±Œ;\&Œ;¶mŒ;�êŒ;å0�;S¿�;þ÷�;mÝ�;_Ù�;ð:Ž;C�;Ž±Œ;}­Œ;„ÎŒ;B�;,êŒ;UŸŒ;°Ü‹;=‹;Ôg‹;?¡‹;ÖÏ‹;=ý‹;×‹;³DŒ;F¬Œ;«#�;�;ÞfŒ;Ú”Œ;ªŒ;QØŒ;a�;l@�;ßW�;*u�;ÿÇŒ;”Œ;¹�;Ñ€�;Ú•�;“eŽ;¼wŽ;E®�;Cœ�;–Ú�;DŽ;!›�;¡�;,C�;£Œ;qµ‹;”‹;ª‹;Ÿ$‹;Ï~‹;`·‹;ö‹;„á‹;ƒ¿‹;1�‹;\‹;#ÇŠ;mÆŠ;üºŠ;êðŠ;áêŠ;à…Š;'žŠ;‹;t!‹;{šŠ;ûQŠ;£HŠ;¿Š;Mí‹;xã‹;„©‹;®®‹;Ì³‹;0Œ;ˆwŒ;†Œ;ÏdŒ;ÈZŒ;‘ŸŠ;þ@Œ;x­‹;–f‹;FA‹;)8‹;DJ‹;±ßŠ; L‹;ûŠ;¼¼Š;ø�Š;U£Š;žyŠ;f¢Š;ò&Š;ÖUŠ;.PŠ;QBŠ;—Š;Í}Š;³Š;vyŠ;€~Š;lŠ;T1Š;Œ¯‰;d8‰;:!‰;Á�‰;bß‰;_¬Š;œ}Š;Êö‰;‚@Š;øz‰;ÞB‰;Êþˆ;œ;‰;¯«‰;×¶Š;6˜‹; y‹;ü‡‹;-‹;ŠóŠ;L„Š;"�Š;ÿôŠ;H¨Š;,!Š;¶Ÿ‰;	Š;yŠ;}ÊŠ;æŠ;-[‰;]Æˆ;ªSˆ;G?ˆ;bC‡;ó‡;Ã3ˆ;Ìqˆ;Îˆ;8Äˆ;¸;‰;¾ëˆ;&‰;Úˆ;?Šˆ;€…ˆ;eˆ;e­‡;~˜‡;('‡;å6ˆ;¡)ˆ;
‰ˆ;H‰;t‰;—¼ˆ;ß/ˆ;,˜ˆ;ûÐˆ;üCˆ;üê‡;Ñ¬‡;!ˆ‡;%A‡;Ÿ‡†;ÈÕ†;&¯†;ƒx†;í†;ô…;Ú9…;h©„;PÕƒ;�8ƒ;Åxƒ;ƒ;Dž„;’„;ÑË„;ðô„;à…;Î„;î‚„;Í„;|´„;²8„;(èƒ;t ƒ;eðƒ;°„;bª‚;Cb‚;=‚‚;[€‚;9‚;Fï�;?>�;OH�;$É�;dE�;_ �;„m�;fä€;p›‚;l‚;šü‚;¼þƒ;¹&„;kƒ;+ƒ;M~‚;§h‚;˜Ö‚;N9ƒ;÷‚; Ù‚;Pƒ;Æú‚;v:ƒ;¸@ƒ;3‡‚;7â€;ZÕ€;Jp€;þN�;È?�;a�;§Ê�;¤ÿ�;¡í�;Â¦‚;~¼‚;£¦‚;ß®‚;
@‚;EÉ�;îs‚;ÂÎ‚;K‚;ñ�;û‚;Œí�;ÃÄ‚;\0‚;ð‚;<‚;|)‚;#Â�;½�;Üt�;_ÿ€;“²€;W€;®€;X�€;1;‡};U{;_{;æ|;Í|;Gz;Î=z;d[{;={;2n|;²Œ|;
€|;ì|;€ú{;íÙ|;³Ï};ÌÝ|;¯
};ft};»ó};†ˆ};†»|;1+};M|;ªÊy;<y;©¬x;Xýw;Zñw;múv;ñÛw;ºûw;.x;R`v; ‡u;ÈDt;Qt;×u;Šñu;œ{u;vet;u;vt;-*t;­¾s;Zt;%¶t;… u;{½u;÷u;®@u;Eu;£_u;Ø†v;t¨v;í‡v;|´v;†ìu;–ju;7‹u;mv;Óªu;nÑt;{™t;D¸s;D?s;Es;³÷r;þq;nÕq;ß;r;ý�r;:¨q;4|q;,r;;�q;Ñq;‘Dp;o@o;ISo;�¦o;{Óo;¿®p;cép;Zùo;–Ço;[Én;Lo;÷0o;¯‹o;C/p;tqo;ê³o;o;½
o;Ï‘o;;»o;_üo;�¶n;Oóm;ÁÕm;{�l;£l;rrk;ƒ¹j;w€j;Iak;hûj;$°h;¥“g;Øvg;dWg;&\g;û~f;}je;àd;@c;´ˆc;…¢b;¿vb;ÍDb;·öa;ìëa;›¾a;.¢a;œQa;Àza;)Ã`;;™`;”t`;¸ë`;t7b;ü9b;�Rb;Ï^b;è˜b;îSb;±
b;•b;|(a;Ú@b;…Ób;°b;wb;ˆb;{[b;fa`;n:_;’ž_;VÜ^; ±^;ü];¨B];´¥];¨-^;£ ]; €\;
†\;ØU_;-Ã^;n^;c6^;_^;ò$^;1Û];:…];×u];hê\;}ä\;Æ#];^;x];	�];v]; j];vñ\;‘÷\;|¯\;r\;3è[;÷\;�l\;“/\;e�\;áx\;xn\;&g\;T}[;ø½Z;®˜Z;MèZ;ÀpZ;CÊY;„Y;å_Z;MÚZ;··Z;7ØZ; \;n\;ü;\;j\;|g\;?¬\;àM];é>\;ß\;Ž‚[;\ \;àZZ;àY;2êZ;4[;`±Z;2 [;†1[;JÚ[;Mû\;:‚];\<\;Ôø];#Q^;�Ï^;Cÿ^;Îo^;ó§];-„];’J^;ex];$v_;eM_;=Z^;“õ];ÛÝ^;TM^;:ã^;¿±^;m_;É)_;Öÿ];Žy];Û[;(8\;19\;#�\;M–\;‘Ä\;|g\;³\;=]\;ï©];‘b];mJ^;?L^;@�^;@	_;{'_;J¬_;³o`;½p_;ˆ`;	V`;oþ^;,þ^;c^;È];Z²\;ƒ];È3];\”];’O];vò\;„\;QF\;i\;¼q\;¼\;f¹];v¥[;¸K[;aq[;ûE\;Þ[;¸\\;�\;ŽU];¸º\;&J\;®\;—á\;1©\;îÌ\;Xæ\;Õ\;_š\;�a\;)“[;æ![;·‹Z;À¨Z;¶œX;´ÁX;ÛlX;±…X;|0Y;`9X;¦þW;\ØW;{´X;ƒXX;÷ÿW;)ãX;ÈMX;
£X;!-Y;Æ¿Y;pZ;V†X;ziX;4ÄW;ñSW;&X;›IY;÷ZX;�ýW;4X;8
X;åV;?0V;L¾T;.eT;e3T;t�S;ÆXT;W*T;-„S;·½S;÷T;—æT;{¼T;1ÐT;_S;Æ„Q;C R;©.Q;�xP;EfP;X×O;Ô$P;q­O;NéO;ÃP;N^O;7àO;ŸP;ü­Q;’/Q;aQ;Q;­)P;\WQ;vhP;�•O;É9O;³!O;}O;NïN;öO;,ºN;zÈO;tO; O;1N;i'N;
•N;zûN;ÌÕO;# O;�O;ä<O;%¦N;`¦N;:DN;RO;æËN;7äM;ŠŽL;AwL;1ìL;Î;N;©0N;­÷N;wÑN;xËN;ØN;~N;·O;—ÎO;ûKO;ÝO;
UP;\„P;‰_Q;,žQ;�,R;WO; ¾O;»P;�Q;Ø²P;›7Q;ÚÓP;ÁùQ;œP;ÆÕO;ô�O;„mO;sÂP;Q;¡ÛQ;‘èQ;´°P;(P;OøO;ß>P;¦O;ŸJO;] O;v�O;­O;íO;yO;�òN;ŒóN;D"N;"N;ô'N;ŠrM;¬2M;MfM;è1M;€ŒL;qAL;L;å7L;¤%L;ÍñK;LñK;…ìK;
L;à¿K;XNK;ûÉK;�²J;âJ;EJ;$ÀJ;ÓÑJ;ˆ2J;qK;¨K;®˜K;–uK;{²K;ìÿL;€öM;�ÔM;WûN;ÝÌN;ÝÆM;ˆ£M;�tN;ŸéN;ŽŒN; O;“xO;I�O;mO;¨[O;Z*N;†êM;”3N;ŽÜM;2ùM;®üM;YN;zÕM;›QN;c7M;€ùL; L;ƒÞL;?¿L;ÌL;ôÎL;Ž«L;¥šL;ØxM;ŽN;ÿ½M;7èM; N;íŸN;tN;#QM;ÕL;3�L;QML;Ã­K;#K;…ÝK;…^L;ßIK;�TL;³�K;óùJ;$J;œJ;æžI;ˆ#I;igI;ÉJ;-³I;óÛJ;NåJ;Ê¿J;­EJ;$wH;„TH;…UH;ÅJ;z9I;%ÝI;€óI;íÿI;IMJ;TeK;²)L;‘ºL;WL;]L;­ÃK;K;�_K;`qK;RL;ƒOL;a L;ÆL;
 L;t·K;©EL;\L;÷ƒL;–L;¥^L;ÿK;à¯K;	}K;&ÖK;ÔK;hM;¦»L;�M;‘ÒL;-wL;d¾L;m±L;Ä0K;xK;#µJ;.ƒJ;ê7I;ó>I;=J;eRJ;�ŸJ;wK;e#L;$6K;ÏßJ;:K;ÿTK;tÈK;]OM;ÒM;m£J;3ÂJ;j…J;{sJ;tºJ;]�K;VPK;	¤L; M;qÕL;(£L;”ÊK;/‰L;fŠL;M;x5M;¶#M;½0M;ûˆM;JM;ÅM;ŠM;|M;®YN;zN;QO;Ã¸O;¨ O;iFL;LýL;ÔDL;‰áK;ºÛK;7§L;˜üL;Û¸M;)M;ú„N;¿¡P;¯*P;†O;"O;ò;O;šP;Î¹O;»sP;³O;sO;C¯N;x™N;®õN;O P;!´Q;Ø�P;{P;LaO;ªDO;fºN;áN;¼ÐM;s\M;�~L;$šL;L;)ìK;ª}L;7<L;¬mK;Z*J;2ÆJ;e©I;ö@J;ºúI;’lJ;D¦J;Ÿ|J;ß¥L;ÄÞL;Í¢K;ƒ;L;l¯K;üK;€L;’JL;ÈK;ì‚L;ó‡L;WèK;V'L;yJ;£UJ;DêJ; WJ;ØÚI;ÈJ;M–I;±âH;ŠêH;4I;H~H;µG;ÉH;¿gH;8gH;šF;]RF;´G;æ¼F;ïsF;óÆF;Š²G;€NF;;ÛE;.@F;@E;:xD;”C;1«C;7œC;`\D;27E;³ÿD;ï2D;¥²D;îêC;rC;¯@C;ôSC;Ã)C;EC; µB;¶„B;÷ŸE;6vF;	šF;G;CùF;üÆG;PH;í$I;ûÜH;<wH;œvH;qqH;oH;»HH;´H;{EI;î�I;XdH;äOG;)�G;%H;û$H;JãH;ÿ0H;j¥H;¼–H;ŠqH;äªG;³ÁG;üJH;�ÙH;[�H;.H;êŸE;3°D;´E;_ D;ŸÏE;.ÖE;ý\C;ûC;èÂB;wyA;˜zB;B;MB;|°B;¼C;2WC;T¥C;hoD;h,E;s~E;ÈÐE;ôE;”F;±F;Ÿ!F;o¶F;ZÓF;HïF;$F;ÔÕE;“ F;}sF;ÀF;I©E;¼.E;ñ‰E;èD;H‹E;�‚E;ÊôD;†XE;�ME;Ž E;²!E;YE;3«D;ï,D; C;6úB;¸¾B;ñ}B;Æ@;@‡?;ý|?;ÿý>;–¶>;ñS>;Ž}>;¤"?;H2?;Éõ=;(—=;è=;h±=;ø>; E>;×\?;¬[>;.×>;*(>;t>;i¬>;s}?;ÀÙ>;ª>;·Ó=;Á(=;S�=;¿=;±K=;’u=;®Û<;úõ<;{=;g=;¸z=;Òÿ=;dm>;R@>;ª>;w…=;\/=;Ç=;v>;	4?;/|?;�>>;f>;ó&?;Å@;¬?;hü?;e¾?;@;à-@;¼‡?;*Ã@;qŠ@;2L@; y@;a´?;¨A;¡xA;š@;óÎ@;ÆŒ@;’ö@;g?;éx?;@?;-w>;¦!>;q	>;²>;ö¬>;É¼=;,µ=;z$=;*Á<;“ =;NÕ<;¬(=;!/=;´á<;Í=;Ç<;.ã;;h›;;vø:; Ž:;ŽË:;�µ:;#•;;€;;mP;;Ã<;äM;;`Ê;;F<;%=;v!>;|p>;©…>;s>;Ö=;%:?;]d?; ‘?;73>;�±<; ‡<;%P<;Ôö;;Ò˜;;rÍ:;SŽ:;�:;ÈN:;é×9;y9;¶’8;¥S8;³^8;W�8;N9;
8;º}8;÷œ8;€	8;Aº8;æÕ8;ñ08;_8;/S8;;9;D-9;c9;HF:;Š9;;Su;;tÄ;;Ýë;;á6<;(,<;ŸZ;;fC;;};;èÜ;;¶ž:;ƒñ:;îç9;Ïw9;¼{9;Øq9;ƒû8;
Œ8;ò’8;OÙ8;{“8;¨9;É]8;¥û7;³M7;\ð6;ý66;˜96;ÔB6;Ãˆ6;¼6;Ýý6;©²6;”‡6;²7;`±5;6;îf5;L35;Z”4;ÍI4;¦½3;�)4;l4;ên4;íô2;ãÚ3;sã3;Ì3;sY2;J2;8Ã1;N:2;-2;Ñp2;¯2;¥R2;ÍÌ1;1;ôi1;\è1;Ï'2;Fe1;‘2;Œ12;Îi2;*h2;-{2;|g2;—ÿ2;w»2;‚2;}2;Ü2;½:2;ä3;!£2;Wú2;$g2;6p2;±2;x˜1;’å1;ìé1;
î1;v“1;÷`1;ñÔ0;üu0;Ýñ0;=b1;=A1;­'1; 1;£Ž0;†50;Ã 0;?^1;éF1;f}1;óš1;¡1;Óë0;ú/0;ÜÆ0;61;Œx1;n_1;H]2; ª2;ÿÙ1;-£2; 2;î·1;”%1;‘P0;è¨0;Í'1;v0;€J/;/;D˜.;¬/;¢.;ü}.;Å¡.;ca.;è&/;ät-;#6-;iº,;—ú,;M°,;Ée-;·-;
é.;¥¤-;ôï,;Q«,;æ“,;4,;ê´+;[ž,;ãÚ+;òæ+;ÈÏ+;]à+;H´+;`Z+;ÝC+;Žz+;é?+;¼l*;ƒç);O•);»±);&Í);Ýe);v);3);`á(;é”(;¸O(;·�(;¤(;xs(;Sy(;­l(;&�';÷';VÁ';E¨';Ìž&;Öµ&;C';';Oý%;á3&;AH&;]Â%;Ý&;#;';-J&;ØÂ&;ßÖ&;°&;?Ü&;¬•';Ó&;Â&;‚&;3Q&;œ';	š%;›Ì$;ÃÄ&;Ûr';Í(;OZ(;’Ö';ú‘';Ï·';÷'; •';s';èi';?¨(;ÎÌ(;#^(;ºÅ';¬À';4—';€';t5';÷î&;\ÿ&;ÖG&;x&;­&;`"&;”Z&;Ý&;å(';Ú2';}”';”,(;f';h);×ú(;);	¿(;ú¢(;¼);)+);€*);º2);À.); );FÂ(;)Å(;\·';&3(;&¯&;³v&;.p&;m&;%ë&;Î';ná&;øò&;¥E';/ˆ';t';Òb';z÷&;ÈÀ&;y&;I*&;[Ò&;Ná&;¿à&; ¶&;Ú^&;tJ&;á}&;;[&;¦µ&;WÓ&;8¶&;³¸(;j[(;–u(;íG(; $);Œ—);hÉ';@(;�n(;œ(;Ü�(;d0(;·Ü';\D(;áx(;f8(;P(;MŸ(;í
(;C(;”�(;·(;®R(;R9(;‘µ';Vì';h9(;ûk(;8¹);&»);óz);t�);v•);oº); Ø);†S(;2ò';ô@';N';==';¢';@Œ';:­';Ž”';X(;—W';¬';ÅI&;F2';';¬™&;úî';ï:(;g(;Í0(;ad';O˜';œ;(;q(;c(;HQ(;Žy(;ŠP(;“7(;í(;ƒ/); ¬(;fø(;,µ(; y);2m);¶);ê);‰ü);@Á);7*;Fä*;�Ö*;\ˆ*;{*;@2*;Ÿ6*;åÝ*;+;i+;Å@+;Š$+;Ï¬*;æˆ*;ô+;Š+;Ôí*;¤#+;åƒ*;î);Ú½);¤&*;%�);Ûõ);y*;NÊ*;Ð*;
ˆ);Ò);¥ (;D;(;¥´';¼¯';ú”(;tq(;ö•(;†|(;iŒ(;²(;—½);ÖÊ);ÔÑ);ÎÐ);M“);ó );Ó¶);¬ý);È`*;œ*;L�*;€*;?!);Ÿä(;îÊ(;!);m£);ÜŽ);áï);•);¡);-q);Ó);×W);L);iD);êÈ(;ò););ÿä(;0);-);Ì\);Ã);`();M”);–Š);„Š);©y);MÌ); |);Eç(;M);ò(;û);3�(;rZ);-9);´1);l~(;(;é1(;Ü(;¿0);æ%);÷µ);xR);¸Î);½S);±²);¯.*;Á(;û(;æ(;Õ(;ÃR);1);T@);Û);“
);ÏÏ(;œÎ(;¨(;œ(;m7);Ù);Ts*;—Ð*;Ü�*;À);¬G);±Ï(;4¹(;@{(;ÁP(;5(;T&(;›B(;ü›';¶Ì';z';q';ˆ)';¨%';Í²';T;(;)’(;úø';aÈ';ÀÂ&;~&;Ví%;†¬$;L%;È®$;T�%;¤.%;*˜%;È%;læ%;1k&;€I&;ìÅ%;½6&;X¦&;–ï&;˜';cð&;è]';E¯&;Êß&;!å&;t"';È&;mÄ%;${%;ˆu$;“B$;&Î#;Fx#;<Ú#;…ë#;"³#;á–#;Vu#; ç#;Í/$;/´#;Ÿ¯$;r$;3r$;ÎL$;¤Ø$;÷Ñ";�";;#;tk#;Lï";Ôy";Pv";}t";J×";I¶";[¢";žì";CÙ";š#;þ##;ä“#;m²#;d¾#;ŒÊ#;\S$;Ñî#;
*$;O„#;±œ#;\¶#;71$;×$;7($;	»$;ñê$;Å%;j°$;Žá$;�À$;Ñ%;�Y%;Lƒ%;0%;ƒÐ$;š$;C|$;÷$;ræ$;|»$;À›$;ÆK$; \$;l]$;¿B$;Fs$;œ¥#;á±#;ŸZ#;„«";â";8";‰ƒ";_»";˜R";ÖT";–ß!;Ü¡!;:‚!;¨�!;bz!;•{!;J";e#;W#;É³#;6o#;m#;þµ#;¼×#;CÅ#;­¨%;Æ.%;/%;éM%;¶%;æÑ$;n$;˜%;jé$;hM%;Hw%;¯@&;X&;2“&;Õ&;ü®&;—&;ôí&;à·&;Ü±&;`M&;H¯%;ú%;¦)&;¤F&;&×%;÷,&;w';fñ&;#&;üÐ&;þ&; U';�†';=';êU';û';	l(;—š';#ý';Û^);¦(;Ê¡(;Ý�(;áÝ';Rþ';×2(;Ü'(;4Ž(;FX(;ˆð';¯(;!˜(;&(;�);¦Ê(;ƒÞ(;Ú$);Œ�(;±(;„þ(;#);¡);²�(; £(;À‘';àú';(; ù';€t';Æ';îv&;åž&;VL&;¨Ñ%;¶“%;6Õ%;.ÿ%;‡';æ‘';N';S_';€[(;×•(;ñè(;Ã(;‰¾(;IE(;ø‹);*;w*;èð);“p);ä%);qh);˜Ž);DÄ(;Î€(;ê‰(;��(;Ñ)(;mˆ(;¸ß';¦>(;ÁÀ';…Ø';!å';\Ñ';Ò';1(;=Ù(;[á(;øþ(;„&);É³);
µ);É�);Tþ);8*;ì´);]ë);7*;®Ô);8±);‰Á);ŒY);£(;êŠ(;ýÎ(;ß)(;Ûå';÷';L(;£Ã(;C…(;,e(;i¶(;s);‘­);Îî);t•);Œh);$2);JÏ(;r©(;h6(;üŽ(;ï«(;ÑJ(;¡ò';¿Â';›&';4';i3';ŠÐ&;¥%;Åê%;1?&;I±%;¨%;Ü$;¸"%;²X%;QU$;¬ì#;ep$;©e$;[$;7u$;m$;-C$;Øž#;�³#;¿¥#;Sj#;¸Å#;­$;±%$;a#$;þÖ#;“#;O$$;´ü#;‡k#;>T#;…#;”™#;»™#; #;Öÿ";…#;€¨";z±#;÷}$;÷s$;´$;ÔÙ#;Dl#;Ëk#;Í#;r?$;® $;˜{$;29$;%“#;Ø#;îÈ#;Ï$;¶$;öL$;xÆ$;£½$;F$;)Ý$;¶÷#;Ý¿";†#;¼º";#;F!#;¹#;¯ç";ä";æö";ëÛ";`÷#;Ü¸#;eú#;�$#;M©";¡”";q[#;t5#;)#;}£";CÆ";C";«þ!;“!;(m!;íU!;¼>!;=l!;4�!;fY!;ÄÑ ;b¼ ;Þ0 ;Õ8 ;^ ;£h ;N³ ;D“ ;Áž;s;&^;¶ö;Kæ;¶Ê;äÄ;Ï];“Ä;ë¼;¸4;D;!€;KU;C8;X";i¡;ðu;JØ;B–;AÞ;8â;L�;ív;˜®;
;è];xG;Ä;¨ð;1;_þ;»Ì;}b;I/;qæ;]*;‹Ö;î“;ýà;ÅÊ;>;Lt;w’;³f;]l;ƒ&;I0;?q;-;/¨;Œ�;œè;Ð;­Œ;&¿;#7;õx;µŠ;£n;¿z;Ý;üï;uÇ;è ;s;ª\;ÿ»;3�;XS;ç+;'7;„Y;Øú;ˆ\;ôp;Ó4;&l;_Ý;mæ;q/;4V;�";>$;Pÿ;†˜;¤²;³ô;0Ñ; w;ÝÓ;3±;ØG;!;ô;Çí;_;6õ;¦T;L*;zü;<7;ý;s*;7ß;ìž;wé;º ;NÛ;A…;÷î;ýõ;ƒ;Cë;ŒÖ;ü*;­C;Ÿô;>‘;ÅÉ;‡i;2;ºX;œ§;O	;	o;¼º;�F;# ;Qa;�\;qÀ;G;ã ;új;ã&;¯+;o¼;R;”�;èY;Mâ;®Ù;ˆõ;³;d©;
Q;ý=;gî;æö;ÜI;9;ÄM;;Dä;;ÚÎ;¶¢;_å;ýÔ;$>;je;¯6;ó#;Hü;¢Ç;Z;°v;$t;Ðÿ;’þ;ß«;‚y;zÉ;è1;ÍF;ã8;~t;Òv;�‹;¸0; \;ûÇ;ŽD;Ûs;y;zj;	m;d;H<;œ¦;­@;CÙ;šß;4ï;7±;Q
;-=;§;,¼;æ;ã;3H;];¡;
ã;±e;qì;Œy;3•;¦õ;MK;b ;
 ;£;Ò”;p;;Ø6;Ø);Ä>;è;G;@/;d ;l,;;ÈE;Ð“;³;°Æ;”S;Î';'ê;ó; ;ÐL;v^;w};%œ;z†;T¿;�A;1ÿ;ÿ;@o;“C;�V;ÍR;"�;È;š3;YÁ;¿;ª`;)ß;Bá;W;—é;–);èC;¨";„ß;K;ïñ;4�;˜;0;Df;SL;Œj;^>;ØR;š|;™;ß~;Ðª;£;Í²;ªÝ;¬¶;�¦;ƒ•;‘
;“^;Ya;=;;ý3;ƒ;„ÿ;M¾;fE;>k;V;_B;ä;ˆ§;Û�;4²;f$;Ÿ	;Ju;�y;�2;,Ú;Ox;~;÷;;‰[;,A;hÇ;º˜;3U;¿Š;âG;šå; ë;ô;á!;Œp;�';M¸;œ";@ó;ƒË;‰;Ñî;€ü;Ê5;Lm;a&;¶…;z};ºX;„Ð;RÄ;¤Ì;H¬;[;
;-;Ñ$; 7;¿¨;*-;¬;®ð;›–;¦×;<q;;Ë¦;¸-;�C;uN;¼Õ;¯œ;iû;­í;Y ;#h;Î;:3;Â�;|€;xQ;dI;�®;ìb;ÿQ;M>;:j;‘;9¦;Èw;6@;”�;‹‘;¡;Sô;“ë;DØ;š;„ë;|T;¬u;n;-Ÿ;#l;‡;@˜;˜o;—;]Š;ú;�ú;‰);­];Ôp;Æâ;¸R;ƒY;ßâ;Žâ;Œø;ö<;�¥;r.;=;c¤;ª‡;½;ƒ;¦;D.;w;­š;	i;6u;»S;D!;6’;tË;Šù;Ï€;;Ì;¼€;˜k;xÌ;îï;Ä;Mû;Ÿü;†ï;ÿ©;È¯;ßØ; r;é; Ë;®®;2;•";]½;�Y;‰;ôw;Ý¨;†.;È„;b>;Äj;"];
0;@7;!;šá;œ;Õ
;3;×>;Õº;�ù; Ò;¼@;¬I;Ô0;šþ;ã¡;“t;¼ ;Ó;Ó$;á7; ;Âh;Í;Ü/;/";ï<;ê;+;L;T;ÃÖ;È;éË;4Ã;’î;íù;ëp;gK;­œ;Š³;f˜;“s;:;tÁ;¦a;Iw;Þ‹;Çk;ãê;µ³;=³;*Ó;å;+¢;‘;};LN;SÏ;\;O™;÷;ª_;s‹;Ý’;t;Eœ;õ!;ÿ9;�h;îÜ;½‰;ÃÜ;¡�;@ý;Ìö;ÒÍ;8ó;Ó¢;]É;#­;Ü;ßÈ;”§;™N;ñt;…m; `;e;ÚË;Ýñ;Ì;;;4;ó;˜>;ô¥;qk;¯;žî;yŸ;Ä;ŠC;”;+;~;YW;^J;ñ\;P;\;£Ù;P;c±;ÑE;8X;DT;ÄK;­Z;ƒÔ;'Å;VM;vs;8í
;x®;	';?;èY;Ÿú;Ô;ñÑ;2Á;A�;ŒÂ;ßh;Ñ;O<;ÿD;äQ;ô”;œ�;u;U;;‘;4è;£;±§;˜§;#;p;r;;S;¹;*é;Á;"";Sõ;ýO;ª;{L;„u;™…;–É;ÃÑ;²�;m;
s;¸m;4å;V;§¹;WÃ;6ô;;[„;Ú3;Lô;ƒ0;R²;*v;÷B;¦È;H¡;äg;j×;#j;Kh;„‡;mŠ;¤r;ì;Y;”t;Ô�;/-;õ;­ž;½{;º;œÄ;ÔM;õQ;©ø;~­;è<;0;Î;¶×;ê;£ü;Œ";\W;S”;w;öe;M;2Æ;õ;’;jØ
;;LN;z»;9ñ;•¬;üP;ÿ;„;À";-©;7³;3;Vñ;Žo;ú™;ô;ôÈ;3\;}8;Ä;À;ã;ÀÐ;Q‰;ßJ;>ì;<×;*;Mæ;±ð;.;½ ;òë;,œ;+¸;‡©;èÉ;h´;äL;¼!;(=; ,;ŸÂ;Ý0;X0;Tƒ;*K;¼A;X^;–Ó
;ýÅ	;9n	;a,	;ìK;5ô;¬l;Æh;j^;¼.;”B;ÄÎ;sî;*m;§X;Ü¾;�w;L;c;ìW;�:;½F;Æ;x‰;9h;„Ç;ä»;^Å;ˆœ;Sæ;�Ê;JÓ;T”;©Ã;0²;4¶;D³;óÁ;ñö;„1;ö;˜;o�;ß�;§+;!;éþ;y¢;va;ñì;°x;³•;�§;hº;";";Vâ;ß;A;½;Ü;AŸ;h–;üV;-‘;7;“5;ƒJ;¬;ˆ‘;p³;³½;g;_];-L;§;Y‘;Ü›;8;	û;ˆŠ;pf;‡;¨@;‘;ü6;;:E;pK;Ã.;‚Î;ªu;03;”#;�ž;Y¢;��;6ù;·â;3ù;±1;è;ôÁ;Ý;T;ÿ.;m#;ÿü;èÒ;Úu;Ú;(;´•;)d;Ìu;m;-ƒ;„¸;]1;8{;m;ëM;4g;P!;,;¤W;V;Fû;õ*;;æ-;ª";Sè;¥L;ìÜ;Êé;¬x;Ü…;ef;ÈÉ;O;ÍD;¿;Ã€;žµ;îv;#¿;¼£;(:;Si;�Ó;²;”Û;ØŸ;y”;;&2;O;èZ;L7;êZ;Ž;æ»;Ô÷;úD;0ž;¡c;ë™;\Ì;Šr;±~;po;[=;$(;Ž;Q;§;-à;æ²;†°;¿;VÍ;¿;õ;|ä;µ¼;,È;¯;;J;<;˜;êr;Üú;dê;üñ;î®;Ì;h§;Q±;”8;X‡;(‹;xˆ;¯;š;/;„¯;ô&;¡—;f;ºÎ;üÁ;º;¬7;LÔ;z;Ù�;­j;¸;Õ;v¨;�Ý;G¾;m¡;Ü!;
+;× ;WÜ ;ßµ ;°o ;×é ;{è ;¨8;�;Â;~o;ÒŠ;Öq;Bo;=M;Ø®;Q‘;Ôþ;_;¼=;l;œä;¸;á÷;Í!;_+;õÓ;Õ;äñ;òÓ;ÜÂ;F;½ ;¿Ø ;Š';ÜS;½/;­9;ÍÇ;tà;‚;J…;�;7µ;Æ…;<Œ;èÜ;já;–ð;ãK;Î ;% ;\‡ ;_Œ ;ï¥ ;ê9 ;l9 ;¯' ;%³þ:Næÿ:–Êÿ:¤âÿ:ßâÿ:¦ÿ:sªÿ:,m ;´„ ;C ;­b ;2ƒ ;å;É ;÷Ó ;b;=	;(¸ ;Í¯ ;ì ;6Dþ:¿Gý:;ü:Zü:»Àü:rúû:&uû:xû:ýÏú:Êwú:\ú:€˜ú:?uù:Spù:R£ù:ZFû:Iû:˜áú:ºØù:Lù:àìø:Qpø:-áø:W=ú:œú:Ò¤ù:¼•ù:³’ù:w‹ù:=Šù:L±ù:_€ú:JÔù:Awú:ˆÁú:1Ôû:šŒû:Åïù:$åù:î2ú:†'ú:âù:ñ®ù:éù:ýø:ÉKù:–où:øhù:ÿøø:ƒ°ù:T%ú:oaù:\"ù:Å¥ø:-÷÷:¼¹÷:"÷:öö:�!÷:ƒ@÷:cx÷:¦ÿ÷:@Ý÷:©ø:wø:ÿ§ù:¥?û:ÑÝú:¯“ú:Fû:Ì´ú:…Vû:ýîú:1šû:¡Dü:QØû:)ü:­2ø:2^ø:¦3ø:ÚAø:åø:±/ø:èdø:„"ù:·>ù:Í‰÷:¶øö:ˆö:"ö:×ö:®âö:Á÷:7ö:.8ö:cøõ: áõ:×Þõ:<Põ::»ô:ªõ:ûAõ:wðô:Q[ô:
ô:ä�ó:ZQó:îºò:Šuó:ŠÅô:ø�ô:¤ó: Bó:øÅò:Eò:ÿùð:ô9ñ:’ð:ŽÍï:�=ð:&Íï:¨
ð:–€ð:¿Æï:Ýï:&fï:Î²î:¼‘î:Ï¾î:�½î:r î:­ð:}Œð:D0ð:–¨ñ:É†ï:ˆ°ï:ôžï:ºï:×ð:ŠHï: °ï:W‚ï:L$ï:ªï:‰±î:üwï:Ãvî:Å{î:{“í:øäì:ü9ì:gì:¶ãì:ôæì:Ýþì:cî:r\î:#}î:¦8ï:ò0ï:ûï:ÃÌï:‰‰ï:4ï:<Âï:¤„ï:iî:_�í:í:ÜÛì:o™í:ß,í: :î:»sî:W…î:ÛÑí:Ü–í:þí:ûï:Î ï:›�ï:Óð:ñóï:…üï:Sið:¿`ð:ÿVï:�gï:/uï:I€ï:´Iï:ìžï:Dhï:-Âî:N4î:(áí:íÉí:|Sî:zî:xîí:‰Õí:,›í:ˆ˜í:Àí:	\í:˜©î:5ð:–Áï:¦_ï:oRï:†ï:Žnî:{Mî:Ýïí:êîí:ŠGî:.;î:(jî:î:¸2í:üÕì:jWí:¼yî:I¹î:ò4ï:ejð:&ñ:}Hð:ÝÖï:RLï:¸Bð:m2ð:#=ð:�Üï:ï#î:šfî:Ø¬î:|àí:„¤í:¥¸í:|qí:Î)ì:�¥ì:Mì:!³ë:ýë:ÿ�ë:mTë:ø¬ê:3ê:Žeé:sßç:ÿØæ:mÔæ:cQç:vJç:œæ:,Áå:L˜å:&îä:£jä:e¨ä:·ä:³ºä:¥Œå:äå:2;ä:mÏã:éaä:Égä:ûÚâ:#â:O¥á:àóá:¶á:¿â:¡	â:éTâ:ÎÐâ:¼Îâ:´)â:H-á:�ã:ãÛâ:–vâ:;¥â:T‚â:ÆGâ:TNâ:â:·9â:oTá:£ à:ãÇà:`Óà:æà:êEá:èˆá:Î¬á:Ïá:²Ôá:|{á:sªá:6Êà:ø+á:çà:¶á:!á:åMà:ãqà:—Áà:ôà:–®à:R‰á:ÈFá:Œaá:´¼á:óõá:´-â:qmâ:©dã:v»â:F'â:w_á:¯à:e:ß:ŠSÞ:f0Þ:ŒFÞ:šÀÝ:ÉüÝ:ŽÁÝ:39Þ:ÉZÞ:ñRÞ:}ÚÝ:7µÝ:è”Ý:}ÒÜ:# Ý:³cÝ:øÝ:(ýÝ:FoÝ:Å‘Ý:?gÞ:ß:Á»Þ:É�Þ:4ß:È&ß:.7Þ:èQÞ:³ãÝ:”¼Þ:¯Þ:fÊÝ:nHÝ:¡£Ý:’oÞ:oÞ: (Þ:àòÝ:×ìÝ:mÞ:Ü7Ý:SœÜ:A>Ü:¤ãÛ:ÍðÚ:óÛ:ìÛ:»Û:“,Û:¡}Û:/•Û:#qÜ:O^Ü:Ý:(=Ý:ÒMÝ:èÎÜ:mÇÜ:é Ü:×mÝ:†àÜ:ÏïÜ:ºüÜ:ðÝ:ó<Þ:Q2Þ:”eÞ:%	Þ:kÞ:Ó�Þ:ÓjÞ:úØÝ:Þ:”#Þ:aÛÝ:¸VÝ:ŒžÝ:`�Þ:%Ý:ƒªÝ:JçÜ:»Ü:<†Ü:FÜ:Ã%Ü:ƒæÚ:¥hÚ:Á“Ù:oûÙ:A Ù:¼}Ù: ©Ú:óøÚ:²qÚ:˜yÚ:ûWÚ:½hÚ:²RÚ:Ú:Ï‘Û:å¸Û:Ó®Ú:E{Ú:ŒšÚ:¸ Ú:îÇÙ:½¬Ù:I~Ù:Ž(Ù:*åØ:÷1Ø:‰Ø:Z¿Ø:¦xØ:!UØ:º¡Ø:=aØ:	Ø:é‹Ø:m$Ø:vLØ:Vº×:4 ×:–Ø:†˜Ø:¯h×:�×:nU×:m“×:šàÖ:X×:d]×:Vw×:TÐ×:È1×:’)×:`‘Ö:ºuÖ:±ÌÕ:;ýÖ:
•×:ªý×:ÅØ:a×:my×:Ñ"×:aÙÖ:¯wÖ:v‰Ö:�Õ:/ÎÔ: Õ:�§Ô:hÔ:²˜Ó:[ÕÓ:ÈªÔ:4ÆÔ:]…Ó:›Ô:àðÓ:ÔÓ:*ÆÓ:;—Ó:Ñ”Ó:„”Ó:ÒxÔ:ÊÔ:	HÔ:è'Õ:À÷Ô:h Õ:*˜Ô:àÕ:ÿÅÕ:Î)Ö:öÄÕ:CÈÕ:ŠcÖ:²XÖ:œ	Ö:;°Ö:r–Ö:²V×:éHØ:¤°Ù:XçÙ:…'Ú:2›Û:ÀÙÛ:ÈÝÚ:†Û:.ãÚ:e,Û:äbÛ:C�Û:JAÚ:ãZÚ:¨Ú:„XÚ:Ê	Ú:×ØÙ:¸½Ù:×gÙ:ÛUÙ:’Ù:)³Ø:&Ø:FØ:xØ:?Ø:<žØ:ÁsØ:’VØ:Š†Ø:¬}Ø:{ÓØ:@ƒØ:iŒÙ:smÙ:ÛˆÙ:7`Ù:qÐØ:²žÙ:nKÙ: ŠÙ:ãœÙ:í$Ú:c¡Ù:ÈÚ:¶VÚ:aÁÚ:Û:EÅÛ:íýÛ:íÛ:ø×Û:Ý­Û: Û:ÊeÚ:œFÚ:!WÚ:øJÚ:%¬Ù:é˜Ù:È~Ù:úMÙ:Ö|Ù:“Ù:‰õØ:ÝÍØ:ñnØ:m*Ø:)ã×:¥q×: jÖ:Ã.Ö:!E×:E4×:×²×:îHØ:4Ø:Ë×:ÊØ:Œ¢×:n1×:×:…8×:HV×:ZR×:¥×:·#×:ßr×:ƒf×:®q×:© ×:x×:ÃOÖ:,Ö:aÖ:Ô×Õ:àqÖ:f�Ö:‘÷Õ:“ŒÖ:NH×:[‚×:mØ:!Ú:œPÚ:w3Ú:ïÙ:2yÚ:å{Ú:êPÚ:(Ü: Ü:úÛÛ:tyÛ:,ÉÛ:–dÛ:80Ü:D²Ü:ÿðÜ:}¹Ü:dTÝ:³„Ý:i¬Ü:z3Ü:Z}Ü:Ø¦Ü:`1Ü:†\Û:N›Ú:!…Ú:³Ù:¶ðÙ:ÒŽÚ:×zÚ:½zÚ:Á·Ú:#Û:Ö<Û:‰Û:‘©Ú:±Ù:ýkÚ:—àÚ:à$Ú:t<Ú:ó·Ù:ãÙ:÷°Ø:Ï�Ø:ýmØ:OØ:J&Ø:êjØ:ïËØ:@\Ø:¦Ø:òò×:¾×:Oý×:ªKØ:Ø:Ø:²r×:¨\×:Q³Õ:ëÔ:]Ô:—ˆÕ:àÌÕ:È³Õ:ÃmÕ:ô’Õ:m¢Õ:mÚÔ:šuÔ:ô€Ô:�,Õ:&�Ô:(Ô:�>Õ:iPÕ:{þÔ:¸dÕ:v“Ö:CI×:—ËÖ:aåÖ:CFÖ:r•Ö:çÕ:ï­Õ:
VÖ:ø™Ö:·xÖ:ÆÖ:ŽCÖ:ô‡Ó:w¾Ó:œŽÓ:ã^Ó:ÀJÓ:Û§Ô:¤/Ô:÷ïÓ:4ŠÓ:é1Ó:
Ó:¿Ó:t­Ô:nÔ:ÉHÔ:ó¸Ô:;áÔ:Ý<×:wY×:…ÎÖ:¶™Ö:H5Ö:Ö:}<Õ:q–Õ:ÿÕ:ÃÕ:tÕ:}RÕ:c^Õ:s Ö:¯òÕ:<rÖ:÷×:ŸA×:š;×:1½×:6M×:¸Z×:Ø®Ö:®ðÕ: ”Ö:pÖ:¸«Ö:çÕ:%œÕ:­uÕ:�ÐÕ:ÚúÕ:ì«Õ:ÜœÖ:®¬Ö:*~Ö:TÔÖ:ßjÖ:�VÖ: $Ö:–´Õ:IÞÕ:!»Õ:ó·Ô:CŠÔ:¡-Õ:„ZÔ:ÉÔ:’ZÕ:Ÿ0Õ:eúÔ:Ú2Õ:d[Õ:€§Õ:�‘Õ:öXÕ:_uÕ:Õ:wnÕ:áVÕ:²eÕ:7HÕ:ŸvÕ:’¿Õ:=åÔ:jåÔ:d—Ô:AßÔ:�PÕ:#Õ:X¿Ô:O¿Ó:Á¶Ó:º�Ó:„VÔ:¿³Ô:2/Õ:¼Ô:¬ÊÔ:q	Õ:X!Õ:Œ÷Ô:.ÙÓ:o?Ó:#YÓ:hJÓ:*ÎÓ:'Ô:ÎÕ:ø×Õ:z Õ:m¹Õ:ÍîÕ:[ßÕ:àÌÕ:EØÕ: ÒÖ:4VÖ:&ÑÕ:øÖ:*ËÕ:JÕÕ:_!×:ÖÖ: =Ö:(YÖ:ˆKÖ:aZÖ:þÕ:[Ö:Ú!Ö:| Ö:…ˆÖ:ìÕ:ˆÖ:
jÖ:!šÖ:‰UÖ:\Ö:i=Ö:˜%Õ:àxÕ:<âÔ:t-Õ:hÕ:šQÕ:8—Õ:¬©Ö:t¶Ö:/eÕ:`Ö:–LÖ:šÖ:ZßÕ:ÿKÕ:¡òÔ:ÑÒÕ:ÃNÕ:œoÕ:ãXÕ:š¦Ô:í©Õ:´ÊÕ:ªGÖ:uÖ:À¾Ö:ý/×:H;×:’@×: ú×:Žº×:÷×:Û×:Ø:ó×:�r×:÷,×:-×:Ï÷Ö:S�Ö:·Ö:WÖ:šlÖ:[Ö: Ö:þÕ:SÖ:–¤Õ:x#Õ:˜OÔ:[AÔ:ŠoÓ:Ø;Ó:ÒÒ:íÓ:òQÒ:ÜµÑ:îŒÑ:JÑ:czÑ:& Ò:NªÒ:è~Ò:6PÒ:æ Ò:V9Ò:`ëÒ:a:Ò:4�Ñ:¸Ñ:ÿÒÑ:ÀâÑ:Ò:1ÄÑ:RìÑ:]ÝÒ:·}Ò:ºÒ:}kÑ:<�Ñ:3¾Ñ:ìÒ:Ò:÷FÒ:2lÒ:T»Ò:v,Ó:ßzÓ:/µÒ:·Ò:VPÑ:­þÐ:dåÐ:i¹Ð:ìÐ:”Ð:ÝEÏ:-DÏ:.ŽÏ:þÎ:dzÏ:�+Ï:;ðÎ:FvÎ:œÎ:X¡Î:„ÈÎ:³CÏ:³¸Î: wÎ:·Î:\HÎ:_¨Í:	Î:ñ�Î:¥AÎ:%²Î:sÎ:œLÎ:Ï:ßÛÎ:?9Ï:ÌÎ:,€Ï:ýhÏ:séÎ:ÑJÏ:ªÏ:wÎ:¤YÎ:N³Î:¿üÍ:CÇÍ:äãÍ:hƒÍ:ÿÌ:Í:Ñ+Î:eÎ:n™Í:I²Í:Ý¶Í:�Ì: ŽÌ:N‘Ì:½VÍ:,©Í:Ú·Í:…wÍ:å‰Í:ÉLÍ:IïÍ:?ÄÍ:2ÕÍ:åÎ:N4Î:éÿÎ:¸Ï:SÏ:²"Ï:$åÎ:A]Î:"Î:ÈÉÍ:‚Í:I”Í:÷ïÍ:{Î:wªÌ:­­Ì:Í:C&Ì:ÂÌ:¦ÔÌ:ÍuÌ:úGÌ:Û"Ì:­=Ì:ø8Ë:$‚Ë:É·Ê:ZÊ:	Ê:Ó*Ê:ÄÉ: ]Ê:.lÊ:�«É:É:€–É:iŸÊ:?­Ê:€Ê:Ê:Å]Ê:Û0Ê:4ÝÊ:;½Ê:ûuÊ:—.Ë:»RÌ:àjÌ:ä	Ì:HLË:ÝµË:lgË:]ÃÊ:ÛòÉ:/åÉ:€ŠÊ:wÊ:i4Ê:i3É:ûàÉ:ý"É:Œ\É:¼çÉ:;EÊ:ÊpË:»hÊ:&Ê:¥ûÉ:S±É:¿¦É:ÿ4É:M�É:öÏÉ:JÊ:ÑAÉ:É:dWÈ:ŒÈ:-+È:Ò–Ç:ñ¹Ç:)¿Ç:¯DÈ:¿ÙÇ:ˆMÇ:}9Ê:¶ÜÊ:O¢Ê:ä+É:-ÙÈ:7=É:ÈÞÈ:@jÉ:AñÉ:òæÉ:NÜÉ:XpÉ:Ø@É:MæÈ:JÈ:È:ŒnÇ:AŒÇ:$Ç:ÁDÇ:ÒcÇ:[}Ç:	ÅÇ:¶Ç:#Ç:ÈŒÇ:’HÇ:�SÇ:4¾Ç:˜\Ç:ŒÇ:íÇ:ÄëÆ:½‹Æ:åãÆ:¸Ç:ÛëÆ:_ëÆ:-Ç:2DÇ:h¥Æ:ÜÙÆ:�TÆ:×Æ:@­Å: àÅ:&¹Å:#Æ:–Æ:Z‡Å:šÄ:´¦Ä:åÃ:ôXÄ:NNÄ:¼¯Ä:x Å:îrÅ:Æ:@ÞÆ:jèÆ:VÇ:&TÇ:÷nÇ:³Ç:ÍÇ:È:ÆÈ:Í}Ç:ýÇ:AÆ:4=Æ:ÌÆ:—5Æ:?§Æ:ÌÔÆ:øÅ:zÍÅ:`ÊÅ:·äÅ:åjÆ:vrÆ:¬)Æ:üÆ:å(Æ:QÆ:¿Æ:‰Å:¶ÇÄ:©Å:Å*Å:ÖÅ:zÍÄ:èšÅ:á¸Å:aNÇ:†)Ç:½\Ç:ŠDÈ:º”È:LyÈ:›Ç:=ÂÇ:N^Ç:&È:�VÇ:_WÇ:Ç:¡+Ç:ˆÎÆ:*ÖÆ:¶ùÆ:¨ÝÆ:äÆ:Ý·Æ:›‚Æ:Ã8Ç:l6Ç:¥ÒÆ:\ÖÆ:H’Æ:ÊÇ:NÇ:å‚Æ:�çÆ:ÑËÆ:ƒ*Ç:ªPÇ:!tÇ:SÇ:åÝÆ:¯Ç:MÂÆ:iåÆ:ïÅ:”GÆ:ä¹Æ:4ÕÆ:¥ÞÆ:#–Ç:EÒÇ:@Ç:ôIÇ:ÏÇ:–AÇ:A Ç:gÆ:{QÆ:\Æ:_»Æ:ªÜÅ:¨ÂÅ:|Å:&‡Å:ï!Å:\‚Å:Í×Æ:~Ç:½øÆ:Ç:…ŽÇ:.Ç:æLÇ:èUÇ:½PÇ:ÊbÇ:/ÐÇ:{¦Ç:;«Æ:I6Æ:äíÅ:»ZÅ:›žÄ:ò?Å:uÅ:Ó‰Å:(JÅ:ÛÅ:hÅ:;îÄ:îÄ:ê³Å:OÜÅ:Î‰Æ:mÆ:®¢Æ:£"Ç:ÚéÆ:ö	Ç:ÈïÆ:ÖVÆ:ºÄÅ:ŽÆÅ:?Å:¤)Å:@EÄ:ÌÄ:wòÃ:SóÃ:ìÃ:O`Ä:�+Ä:ý7Ä:ò�Ä:sëÃ:WÄ:’^Ä:ãÞÄ:F…Ä:3iÃ:öéÃ:XvÃ:¨Ã:$ŒÂ:†fÂ:[êÁ:àöÁ:ÖÓÁ:,8Â:®Â:‰ÞÁ:˜äÁ:6éÁ:ÉÐÁ:UÁ:nlÁ:!pÁ:ñžÁ:ï:Á:¤Á:Á:%{Á:L�Á:ôÁ:. Â:ÆoÁ:ÈFÁ:ÿZÁ:ÆDÁ:[:Á:ÅÒÁ:‚Á:H&Á:”Â:Ó»Â:ÏÃ:äbÂ:o-Â: ûÁ:½Á:òÍÁ:àÄÁ:Ú°Á:?›Á:ÝÓÁ:OîÁ:]˜Á:¼’Â:äªÂ:¯¸Â:éÁ:i½Á:�jÁ:ÑtÁ:f'Ã:ä*Ã:ÍYÃ:Ã:�SÃ:ÝÂ:SÙÂ:ÎÂ:è<Ã:Ñ‰Â:@CÂ:Ã§Â:‘»Á:÷IÁ:ñ~À:dFÀ:Ë½:¥ê½:ÓÔ½:üì½:
é½:w£½:éì½:Wº½:*O½:Òn½:Œƒ½:Ís½: Ç½:O¬½:Öž½:¼M½:š¼½:†¾:”­¾:Hã¾:´ø¿:¸ò¿:šÎ¿:æ¿:¼Š¿:»â¿:
#À:¯À¿:jÁ¿:®UÀ:òñÀ:ÚçÀ:©	Á:IçÀ:æáÀ:Š£À:ûúÀ:c‘À:ü¯À:ÓùÀ:m`À:;CÀ:ªÀ:§¿: «¿:¥¿:¬¿:£Û¾:í®¾:!Â¾:¼Ê¿:x‡À:‡À:À:_gÀ:@6Á:úÁ:�À:(ÍÀ:È›À:ôÀ:AWÀ:rDÀ:·^À:=Á:½ØÀ:\Á:;×À:ª›À: µÀ:_¸À:{ßÀ:’±À:ÙÀ:OPÀ:ãÇ¿:<}¿:|j¿:¢¿:[±¿:�è¿:ÜV¿:£p¿:ºc¿:æ[¿:ƒâ¾:ô*¿:F¿¾:s²¾:H¾:x	¾:WD¾:”l¾:S¾:x3¾:’9¾:è¾:n¾:q¾:Ö%¾:ô½:x¾:I<¿:Mò¿:º$À:�À:{!À:¶QÀ:|=Á:òÙÀ:f´À:}UÀ:xì¿:I»À:ŸÁ:ŒÁ:†+Á:*:Á:s�Á:`eÂ:àƒÂ:T
Ã:$ÜÂ:äÃ:—WÂ:sMÂ:-Â:óÒÀ: (Á:o1Á:šRÁ:#øÁ:…»Â:µÂ:ô—Â:ÿ(Â:/¨Á:òYÁ::”Á:îaÁ:ü%À:ñÁ:}JÁ:n¯Á:Í¡Á:ŽkÁ:)LÁ:]tÁ:j$Á:ÉQÁ:œ­À:ªËÀ:*ýÀ:ó	Á:ý„À:(hÀ:ªXÀ:\¸À:¯À:$#À:eUÀ:?ÌÀ:mÙÀ: ÒÀ:-~À:m’À:úÀ:,À:¶¿:Ò·¿:)®¿:RY¿:Ï`¿:­h¿:`À:4�À:åäÀ:½ÊÀ:ŠŸÀ:‘ö¿:ÄmÀ:ß�À:TÍÀ:ïÃÀ:EWÁ:)=Á:ìyÀ:_dÀ:_‹À:@¬À:œÁ:éÀ:;ˆÁ:l’Á:RgÁ:»ÍÁ:ŽÇÁ:²äÁ:#ÔÁ:÷ÅÁ:N²À:iSÀ:;cÀ:ÉcÀ:H¼Á:±›Á:QlÁ:;8Â:&¹Â:cÙÁ:îÁ:ã.Ã::šÂ:óÂ:ŠãÂ:¬éÂ:“KÂ:´~Â:ò˜Â:ü8Â:”HÂ:´HÂ:ý Â:ŸqÁ:èyÁ: ŠÁ:“•Á:ÑþÁ:)UÂ:±Â:<ÈÂ:š,Ã:öÄ:7Ä:ºÅÃ:l§Ã:,XÃ:æÃ:à·Ã:ŠyÃ:“óÃ:=`Ã:„ÚÃ:JGÃ:€ÙÂ:ÃŠÂ:—Ã:WùÂ:fsÃ:4SÃ:fÏÃ:ãÄ:Î1Ä:RÄ:
Ä:ƒVÄ:ÈÄ:²/Ä:3Ä:žÄ:…ŒÄ:²œÄ:kÅ:<—Å:ÑÆ:¼ Æ:SîÅ:ì*Æ: +Æ:†	Æ:a Æ:­	Æ:�›Å:úÅ:IÅ:2ÌÄ:	Å:vëÄ::>Ä:ZëÃ:²½Ã:ó~Ã:–éÃ:séÃ:] Ã:ì�Ã:f-Ã:D¤Ã:ÞÃ:=¥Ä:¦®Ä:}Ä:J¸Ä:¬ðÄ:[%Å:åÅ:1$Å:Q¸Ä: ÑÄ:È³Ä:hËÄ:(ƒÄ:…PÅ:Å:@Å: Å:ÌwÅ:ÏDÅ:Ê�Ä:VµÄ:ïËÄ:úÊÄ:CÄ:‘ÎÃ:LÃ:LãÂ:é6Ã:ƒDÃ:LOÃ:ˆuÃ:lLÃ:ÓôÃ:³ÿÃ:ÚãÃ:D²Ã:,-Ä:j Å:ŸÄ:»ÑÄ:…Ä:“?Ã:¼´Â:*öÂ:=7Â:fãÁ:€ªÁ:¶Á:•Á:�Á:–XÁ:nfÁ:¡ŠÁ:�Á:|EÁ:šqÁ:fûÁ:F”Á:7BÁ:ìšÀ:ƒ(À:Mß¿:l¿:¿:Œ¿:òm¿:<³¿:“p¿:’–¿:ØÀ:£÷¿:QÀ:SoÀ:=À:ƒ&À:Lð¿:HTÀ:ÃvÀ:Ï\À:æHÀ:¶¯¿:›G¿:…É¾:a¼¾:	ñ¾:4Ó¾:ñ¾:nv¾:�O¾::¾:x¾:Ê!¾:Úï¾:ž¾:qY¾:7´½:á´¼:½ó¼:ßð»:¼:ºð»::¼:3Ó»:Iß»:úÜ»:ó°»:<”»:Vè»:o»:¼�º:»²º:`Í¹:œº:�ü¹:�ò¹:qº:$ž¹:îM¹:ž¹:Ek¹:Ìô¸: è¸:Q!¹:O
¹:Æ¯¸:,¼¸:Tè¸:„æ¸:Ç¸:NŽ¸:†	¸:³Ù·:¸©·:¯·:Œ8¸: ··:Œi·:™·:O·:zø¶:ªH¶:Ñj¶:-
·:?,·:{·:�W·:z·:Ä¬¶:|ƒ¶:²™¶:¨·:&ö¶:êü¶:‘üµ: '¶:
O¶:2óµ:¢µ:mÈµ:¶:s¶:Øµ:AÕµ:R_µ:)¶:,<¶:X¥µ:t—µ:ÜXµ:É²µ:êÛµ:mßµ:.Ðµ:ôëµ:jèµ:îä¶:Ü[·:?C·:úÍ·:Æ·:À¸:´¸·:×�·:�°¸:MÄ¸:j~¸:W}¸:cm¸:ôø¸:\¹:7Ý¸:‘1¸:Å5¸:®l¸:#Í¸:í"¹:R¹:25¹:8¹:Ä5¹:|Y¹:Á¸:ç¸:åî¸:Ÿª¸:£ß¸:ß¹:†û¸:Vd¸:šB¸:SL¸:�¸:½’·:Q°·:E¸:A¸:ß†¸:ÿA¸:Z@¸:¤T¸:†Ð·:ÃÑ·:[*¸:©•¸:®œ¸:ˆÅ¸:Dõ¸:»˜¸:ô•¸:2d¸:®Z¸:½¸:|Ä¸:v2¸:{¸:%ö·:¸:”Ã¸:ûõ¸:3á¸:?Í¸:jÄ¸:ÊA¸:Œ¸: ^¸:¸:öB¹:Ü¹:æþ¸:—e¹:¤¶¸:j¸:åƒ¸:]_¸:&®¸:eg¸:C¸:±ž·:¬¨·:›·:¼ ·:ï¶:Ú¹¶:Ó·:“·:Ý3·:3Ê¶:é—¶:eÎ¶:f9·:Xx·:e4·:Hô¶:Ü°¶:
›¶:t¶:m¶:<m¶:.¶:nßµ:ýÚµ:ímµ:FBµ:‘ù´:*á´:Íü³:h´:ý ´:6‹´:Â´:hµ:Š:¶:V4¶:ûÏµ:’Áµ:oµ:î(µ:#ö´:@É´:,<µ:ìº´:Z—´:ú‡´:¸8´:è¿³:áÞ³:
0´:Œ-µ:›�µ:ˆ—µ:À–µ:®µ:ê´:ó¿´:tµ:ûµ:ÅU´:Ý³:ÿ ´:�ƒ´:¥ö³:¶´:C\´:Z.´:åN³:Ú³:Š³:š³:š"³:üÿ²:Ï³:?ø²:	Û²:R ³:j!³:;³:!³:Ô©±:ÿ°:�7±:vˆ±:·D±:à°:3°:Œs°:ò\°:Ñr°:�Ž°:áÅ°:Á÷°:×	±:©²±:ú4±:­õ°:è@±:Á±:Z°°:Dí°:ôË°:±:ÖÔ°:¨ž°:O´°:£ý°:\°:O©°:÷§°:n^°:”‰°:Zo°:
á°:qŒ±:�˜±:©ï°:wh±:�±:qÑ°:�b°:ø€°:ó÷¯:,˜°:�[±:
n±:³±:ø6±:i$±:@U±:_%±:\¼°:±ã°:É�°:3Ÿ°:Òã°:o±:AO±:
½±:%l±:£<±:Ó�±:ÀØ°:¾°:z°:Š;°:„Õ¯:‘¯:
‰¯:/³¯:XÖ¯:¶ö¯:IB°:€°:)°:°:–ü¯:ÈÆ¯:X�®:g®:@&®:jÆ®:\æ®: c¯:Ê'¯: ¯:n$¯:W¯:ä®:¢®:ïù®:Ÿ¯:ˆº¯:|°:A°:„¯:×‘¯:Üó¯:#°:å¯:—¯:–I®:.#®:øŠ®:�®:Öæ®:Å®:m–®:/Q¯:ó¯:š©®:æ®:»'®:ÚÀ­:8­:Õ¬: :¬:qe¬:o�¬:¶ä¬:OÖ¬:©D­:Ê’­:vO­:ô¬­:¼£­:¨Ê­:(®::4®:oÈ®:3ä®:46¯:&¯:á¯:Î\¯:öš¯:¡é¯:ÝN°:©o°:Ñ~°:„a°:Áº°:<®°:)”°:Ä\°:ÓW°:s°:èÇ°:å›°:÷þ¯:ñ±:®1±:-±:Ïà°:¬p°:ˆí¯:-î¯:Æã¯:Ø°:ïm°:ÓE°:.\°:)a°:Hˆ°:¯°:9°:°:Ž¨°:f=°:¼Ñ¯:´§¯:©ö¯:�à¯:`ˆ¯:ÏÀ¯:J°:{=°:É=°:°:¡-°:›8°:ã°¯:ä'°:Ÿ°:€�±:·À±:`M±:Ñ°:Ý±:¡°°:·A°:©°:š°:÷9¯:Š¯:’½®:Ä¯:·9¯:jÒ®:¯¯:±î®:P¯:�®:€€®:]�®:ÄÉ®:e®:<š®:Fh®:Ûy®:ƒ°®: è®:MÛ®:D®:7®:aŒ®: ®®:±$®:;Æ¬:üX¬:sI¬:¿V¬:6¬:Új¬:³T¬:Ú"¬:S­:he­:ƒ;­:®R­:³Y­:.e­:vÛ¬:»­:	Ë¬:|W­:Û_­:Ñ`­:³X­:)Š­:Å£­:¶"®:êø­:|®:ò®:®:­:á­:£k­:
ý¬:¼ç¬:ƒE¬:Z¬:Hj¬:É7¬:‘ù«:<¬:�]¬:	f¬:„¬:@Š¬:Ãx¬:$|¬:àO¬:H¬:r¬:i¬:?8«:vôª:QÑª:�Â©:ª:ßÍ©:¥©:ŽÂ©:n*ª:V6ª:†+«:\W«:³7«:…5«:fe«:ØN«:´«:äzª:½Eª:Ú`ª:dfª:o\ª:!«:ýÌª:Ø‹ª:	ªª:®zª:(ª:Æ¬©:\©:Ž<©:xè¨:Û©:­ë¨:t·¨:…á¨:©:ûÜ¨:‰_©:á`©:º®¨:{£¨:aÂ¨:1©:�]©:Ê‡©:ÃO©:—ƒ©:¾¨:ãØ¨:”$©:ø¨:MK©:7 ©:WÏ¨:†œ¨:ƒl¨:}I¨:Šî§:€1¨:ìb¨:¦’¨:ô³¨:Ú¿¨:‘¨:Cî§:ƒ§§:„ó§:‰¨:Š©§:Aõ§:´*¨:Æ§:îÅ§:öá§:&Œ§:d§:ä¬§:x ¨:¥l¨:åB¨:3¨:±°§:T°§:ã§:Ÿ¾¦:ÀÌ¦:¯(§:]Û¦:\»¦:IÒ¦:cX¦:ÔÕ¥:Èº¥:t¥:Ž¡¥:€Õ¥:Êä¥:´
¦:œ¦:p¦:t¦:—ø¥:\»¥:“ù¤:<¥:Sõ¤:“Ô¤:·£¤:49¤:Êr¤:|¢¤:Ì¥¤:­é¤:�¤:ú�¤:id¤:wJ¤:I4¤:�f¤:„Â¤:Dä¤:üm¤:ék¤:˜&¤:­À¤:Z¥:Î¤¥:Ñ­¥:R`¥:,ú¤:7×¤:»à¤:Ô¥:Ì(¥:÷$¥:—›¥:¥`¥:Å�¥:S|¥:…H¥:îÇ¤:½`¤:ÓO¤:í´¤:	“¤:$U¤:3O¤:’\¤:¦µ£:í§£:Ëu£:!£:´£:ã�£:e‚£:¸¢:º£:©Œ£:îÓ¢:.Š¢:|£:;£:±ä¢:�|£:ä6£:©¯¢:R£:‘G£:Ÿ¥£:*o¤:!%¥:Á¡¥:EÓ¥:%¦:6W¦:ø#§:î§:§:Å…¦:%8¦:¥…¥:	Ý¤: è¤:XÞ¤:’¤:š¤:××¤:˜¤:-–¤:%J¤:œ”¥:-¦:ÄC¦:ô,¦:ÚG¦:Ó¦:Ò—¥:AÙ¥:“ƒ¥:J3¥:ª‘¥:¦,¦:S,¦:äz¥:3A¥: ¥:oõ¤:Öº¥:Êº¥:î¬¥:/¥:s¦:æ¦:FÖ¥:ª×¥:ÊÙ¥:ƒC¥:¯G¥: ?¥:O-¥:F¥:6¥:xH¥:¨^¥:G¥:Â¤:�W¤:‘t¤:L¤:…‹¤:.f¤:E™¤:¾¤:‘L¤:z}£:Ÿi£:ïZ£:­%£:nz£:ÀÐ£:s¤:Æ¤:Ìö£:Üä£:”}£:¬™£:ö £:Ãa£:á£:: ¢:€ä¢:[	£:´£:£:òÔ¢:±Ø¢:æÝ¢:ë»¢:j¢:ä/¢:—Ú¡:Ðÿ¡:„0¢:Õ/¢:w_¢:-'¢:ÿ6¢:ö…¢:¶:¢:é¢:ê‚¡:h¡:_C¡:¯1¡:Vf¢:Y5¢:@å¡:£Ë¡:Á­¡:ë:¡:w¡:sj¡:Îc¡:¤F¡:Y¢:¨Ë¡:„3¢:µï¡:×ˆ¡:x¡:f$¡:µ2¡:Î/¡:cN¡:>/¡:žì :Ã :ô	 :†õŸ:±ÎŸ:c :Å½Ÿ:‰�Ÿ:�Ÿ:¥Ÿ:’
 :F :Õa :V¶ :LØ :X’ :Ÿ÷ :^½ :Ýh :g :o¥ :¨} :È� :¡:`D¡:@T¡:Š¸¡:½«¡:ãŽ¡:_š¡:6{¡:#h¡:[y¡:]r¡:Ï´¡:´õ¡:Z÷¡:úE¢:ÍÒ¢:šý¢:£÷¢:vK£:£:«f¢:RÇ¡:$Ý¡:]¢:H¢:×ž¡:ƒ¡:¤¡:�¢:Ür¡:Ês¡:€¡:Gh¡:†­¡:d¾¡:Æ¢:?9¡:T@¡:ÚK¡:B¡:CÒ :{D :® :?¡:¹¡:ê† :úW :*ªŸ:uòŸ:ÉŸ:ÝýŸ:Ô' :ì×Ÿ:péŸ:ëŸ:dâŸ:f :’ :±`Ÿ:»•Ÿ:µŸ:€¹Ÿ:�5 :·ÞŸ:¶áŸ:X0 :mÕŸ:Ó�Ÿ:XãŸ:aBŸ:K(Ÿ:¯¬ž:v¾ž:­ž:3çž:­Øž:·Þž:ßãž:O:Ÿ:²Ÿ:DÅž:íž:¥¬ž:eÔž:Ò›ž:BŸ:­…Ÿ:çQŸ:º&Ÿ:«Ÿ:MŸ:@Ÿ:Ü”Ÿ:)Ÿ:AiŸ:TŸ:j–ž:ëœž:UXž:Lxž:­�:áD�:y�:ÁU�:K­�:Sì�:ÐÔ�:Œb�:Ÿ�:eä�:Íù�:ø�:*ô�:#ž:¼Ê�:õ¤�:Üž:¯§ž:¸ž:Ï-ž:¦Î�:O‚�:n˜�:Šƒž:]×�:¿6�:–)�:M�:¾ùœ:�âœ:Áðœ:Zòœ:ÿöœ:âQ�:üöœ:‡�:N�:´Ë�:cž:·þ�:až:Éõ�:ž:ì‰ž:Ó±ž:äåž:Ÿ:ëž:fˆŸ:ô”Ÿ:R8Ÿ:ÁŸ:Ñ[Ÿ:ÜLŸ:­ÖŸ:á¼Ÿ:'ÊŸ:@„Ÿ:G�Ÿ:µ^Ÿ:sˆŸ:¼¼Ÿ:h˜Ÿ:ª´Ÿ:òËŸ:áØ :ƒÃ :ì :ñ¡:ü¡:K¡:d¡:ãÐ :ü¡:?E¡:9ü :ŸÙ :`� :q :“( :" :Pa :f :“m :-F :”µŸ:¡Ÿ:ÃEŸ:ÊnŸ:nyŸ:ªsŸ:‘ÜŸ:µâŸ:ËüŸ:|ÆŸ:ÐŸ:M_ :Ô� :�Ø :²É :F¢:jg¢:œy¢:Ø9¢:1_¢:Š¢:)¿¢:Å¢:il¢:š¢:3´£:îY¤:D(¤:7“¤:êB¥:£ƒ¥:Ð¤:8q¤:=�¤:Ã}¤:¸›¤:é—¤:?<¤:�?¤:–G¤:¥:;¥:æÒ¤:±ß¤:�¥:w¥:?û¤:˜â¤:Œ£¤:AÕ¤:å¥:å¤:ÁÈ¤:ÛÕ¤:c@¤:
¤:MÁ¤:ÁÌ¤:ôß¤:¼¶¤:ß{¤:sŸ¤:ï©¤:ø˜¤:¼é¤:Aa¤:#2¤:L~¤:ÎN¤:��£:�|£:}]£:º²£:Ûš£:¶¤:OM¤:Ä1¤:Wê¤:	¥:Q…¥:AŒ¥:nt¥:)¥:(ú¤:º¦:Î*¦:ó¦:Ÿ±¦:óú¦:-A§:=ú¦:*&§: §:Ô�¦:4q¦:(–¦:lC¦:Ì~¥:J˜¥:šA¥:èi¤:è)¤:É1¥:Œµ¤:&}¤:6V¤:¤�¤:jÀ¤:ý°¤:]Þ¤:Î¤:¤p¤:¼Ô¤:Œ÷¥: ·¥:éä¥:Ë¥:ì¥:I¥:†¥:w¥:W¥: A¥:q¥:N¥:]¥:Æ©¤:RÓ¤:M¦¤:”�¤:Ä@¤:w=¤:l"¤:@¤:8.¤:tê£:Òñ£:3ø£:ôP¤:3¤:×C¤:c¤:üô£:L¤:yÆ£:³Þ¢:°J¢:ìâ¡:¢:CÝ¡:’¢:º°¡:²¡:ñÉ¡:ZS¡:X¡:–R¡:‰Ì¡:þ¡:g¢:Z¥¢:ì ¢:/ô¢:Ì£:¦ü¢:L£:É#£:«~¢:Ìæ¢:äA¢:¸¡:Ñò :cÊ :z/¡:Å¡:ÁX¡:'ú¡:¾¢:¨_¢:+ £:z£:é-¢:Dñ¡:fÝ¡:M·¡:Ï¡:(ª¡:“ž¡:¡:Cÿ :×.¡:o¡:�¡:†² :Æ‰ :Å¡:Ó2¡:Á?¡:#C¡:¡:ŒD¡:£¡:?ª¡:Dz¢:3�¢:!%¢:‘E¢:×¡:¢:g¢:VÑ¡:o�¡:Óœ¡:>÷¡:T±¡:.[¡:�à :¡:e!¡:M� :³Ô :Ù† :ª;¡:IG¡:‚¡:”À :+9¡:\p¡:6í :€‹ :òçŸ:7ØŸ:¢¥Ÿ:øŸ:â¡Ÿ:ÏJŸ:Üçž:Xž:¼¬�:D�:ùu�:sA�:dƒ�:6Q�:�:ÿöœ:rN�:&‚�:�û�:Þ�:!æ�:fq�:@�:¬õœ:�:ìùœ:Síœ:%	�:7�:¨œ:£œ:pÝœ:Èœ: ´œ:ÉÔœ:/}œ:kœ:ãœ:K€œ:%ú›:cj›:¶Ù›:Ïœ:Në›:)Þ›:­ç›:?û›:Öð›:<ê›:Nÿ›:ö%œ:!ð›:«Gœ:Sçœ:gæœ:£�:Ã�:O¿œ:�:J�:ˆúœ:|>�:�:×+�:ìœ:–"�:>�:TÏœ:1 �:´÷œ:²œ:šÔœ:ë_œ:<Öœ:5�:‡ž:žž:akž:�°ž:1Íž:
�ž:É¬ž:jÁž:í„ž:÷\ž:ž:ž:�'ž:žß�:êÛ�:ÓJ�:nu�:j�:Èž�:ñ—�:}†�:¾|�:v›�:ø†�:j³�:§�:|„�:'4�:Äèœ:%Ùœ:Äœ:ÁP�:¶"�:Ÿ„�:Ì‘�:Cìœ:õßœ:œ¤œ:{³œ:PÕœ:ˆ�:íÚœ:“
�:è �:³\�:†�:,U�:Æ�:Ó �:¤�:n œ:ãÕœ:°sœ:|Þ›:=ó›:ý›:ü}›:tÉ›:[û›:)œ:èË›:<Š›:€œ:y‘›:ü"œ:Ø›:£œ:A›:lF›:Ûr›:hÉ›:»ú›:xÓ›:îÄ›:|ƒ›:–}›::Å›:w ›:ñ†›:s›:å™›:Ñž›:á¶›:\œ:­Ü›:ÅÒ›:Q{›:8 ›:OÕ™:(Í™:~è™:Ì2™:Û�˜:­ˆ˜:õ€˜:Ú¡˜: í˜:ÊÝ˜:Mˆ˜:Ú˜:Í£˜:Q’˜:±i˜:Ëd˜:¬¬˜:He˜:=¢˜:æ[˜:i˜:Ýy˜::€˜:Rq˜:9˜:¼`˜:äG˜:»<˜:Í	˜:Q7˜:4¨˜:A˜:�d˜:H˜:äq˜:þk˜:§˜:©2˜:¼ø—:CV—:ö”—:�-—:|4—:»—:`—: —:³g—:‘�–:ãœ–:¶~–:Œƒ–:Æ£–:¯Ü–:1ç–:C—:½"—:È»—:»¢—:æ&˜:¤×—:šM˜:$Ù—:èý—:O˜:«˜:³ÿ—:æ»—:|š—:´¾—:k—:Å�–:KŠ–:ê:–:¿¡–:IÔ•:ž–:––:§Ù•:�R•:Ö;•:ÈÞ”:^ô”:ÿ£•:‡×•:Äv–:óO–:¬6–:Qà•:œê•:Àÿ•:ü>–:Ú–:xƒ–:ýz–:ÓD–:ld–:¡¢–:d§–:Ç0—:gb—:h—:”f—:2,—:Aû–:.—:7ø—:š˜:JÚ—:ê‚—:´Å—::È—:˜:¯˜:b˜:G÷—:“à—:Có–:Ò÷–:sK—:q1—:
—:dA—:ùÛ–:¶Í–:¿´–:çî•:	£–:”[–:Z6–:Ÿn–:Ør—:QK—:•é—:~Ï—:öD˜:†œ˜:¡@˜:.˜:µ=˜:zL˜:Õ‡˜:P˜:ªb˜:*•˜:D¯˜:Iõ˜:ç˜:6T™:]·˜:A�˜:!¸˜:&ˆ˜:É˜:=ê—:6Ì—:‹ñ—:hQ—:±u—:YŠ—:‘—:³+˜:éE˜:z˜:Ï˜:é×—:Q‘—:¡º—:Òñ—: ã—:äÒ—:À—:°—:|q—:äì—:$Â—:ô˜:¯˜:™0˜:Tn˜:L`˜:Ì€˜:Î4˜:S˜:x*˜:*4˜:Æ ˜:†—:Üu—:ï|—:sÎ—:1]—:Ÿ—:5r—:íë–:’Û–:ÝÚ–:¥…—:;8—:+˜—:Ú‚—:·J—:Ô}—:k¹—:ô——:ß——:¬W—:¥]—:�	—:§3—:…”–:xî–:@Æ–:ƒÂ–:‹ð•:Ðz–:\–: z–:Í²–:Ù¨–:§l–:Ü¬–:Ú‹–:L–:¦J–:yX–:ã–:áC–:–:à•:Ž/–:oû•:á�–:ô–:JH—:°–:Íj—:ƒO—:ƒ—:…z—:•h—:k—:¥ç–:>Õ–:™Á–:C®–:®½–:ŽÞ–:6—:|þ–:¦ö–:~2—:žR—:òš—:?N—:¾Í–:Ö —:jê–:J½–:‰[–:wM–:ƒ€–:+”–:ÕŽ–:s[–:d8–:x–:ø¥–:~ž–:tK–:ù÷•:[••:gN•:Üc•:‰ñ”:�¡”:‡¡”:Á+”:ØK”:–?”:~Q”:ŸS”:i”:Qø“:{¼”:&•:Âþ”:!�•:¡Z•:P4•:ø•:Ö¹•:Ó•:n£•:ƒp•:øY•:Ä°•:TŒ•:3…•:|$•:Á4•:w•:v§•:Gë•:¢>–:*È–:á–:4v—:£º—:”?˜:š*˜:�²—:�8—:¥`—:Ÿ—:?�–:Û³–:'á–:�Ò–:\–:­—:ƒ—:Ø—:§/—:Ü—:c—:ÇJ—:$/—:£þ–:ÉQ—:u;—:sJ—:Là—:?(˜:(�˜:(r˜:h™:
â™:@ï™:hŠ™:$‘™:__™:j™:`™:ãF™:èÅ˜:^˜:p'˜:ª˜:Tð—:F.˜:b ˜:pi˜:±j˜:ãC˜:½š˜:0œ˜:2?™:$!™:?8™:ÈP™:íM™:V*™:µ\™:ö„™:¿Z™:–™:z­™:…Î™:	Á™:ó‘™:}â™:ÄÔ™:“Â™:³¶™:9®™:ˆ±™:–£™:} ™:¾\™:^F™:Èu™:ºM™:Çž™:�Ô™:~ä™:rš:0š:XEš:Ïˆš:Úš:(¶š:ûsš:fš:I'š:‡ý™:r¹™:é4™:™:X™:è™:™:·­˜:Ñr˜:&0˜:-¤˜:R5˜:%'˜:y)˜:±R˜:�˜:øÃ—:¾—:-L—:S—:KÕ—:XÉ—:EÒ—:iõ—:ì—:Â¸—:Ú¡—:Ã—:¼a—:`+—:¨—:CÝ–:H¸–:ü‘–:#v–:JË—:Yð—:†«—:m÷—:=Í—:�è—: +˜:CK˜:áô—:LN—:4P—:H—:!—:ã_—:´—:/(˜:†ü—:Ê7˜:½B˜:9q˜:»z˜:AÆ˜:¹˜:(G˜:©v˜:Y5˜:ò#˜:|˜:�˜:»˜:ƒv˜:K˜:L˜:6O˜:yn˜:qØ˜:OÝ˜:Ãµ˜:¼ã˜:‘¶˜:c“˜:hn˜:ðl˜:|X˜:ô•˜:>k˜:y˜:)º—:÷ñ—:*à—:{Ç–:õ¬–:ž¦–:Ú§–:„–:œa–:ák–:tî•:”F–:�5—:s#˜:Ÿ)˜:˜:Ç}—:;—:‘–:ëº–:I4–:Zg–:Æ–:�Ý•:(¨•:Å«•:CÅ”:L‡”:z”:””:åß”:Q•:Íý”:„•:n,•:E–•:¿ß”:˜¢”:éŒ”:V‘”:ÎØ”:\·”:”�”:ä`”:ôQ”:Cº”:æ”:ŒX•:�C•:Ø•:±”:C‹”:Kœ”:@Þ“:|á“:�ø“:ÚÐ“:ñ^“:‘@“:gT“:Ùš“:m¾“:rÂ“:‚’“:£Î“:Ä“:$¨“:$r“:*g“:m¤“:|x“:-“:)“:Zp“: I“:ŸÃ“:ø”:ºÅ“:&î“:‘+“: %“:¸“:nX“:…~“:d“:?t“:‹_“:€“:ÁF“:5 “:Hã’:¸’:l¨’:/Ü’:¬ô’:‚-“:8E“:©<“:~/“:G
“:Ä“:ï’:d™’:Ô{’:k*’:ñ)’:Íâ‘:·ÿ‘:�Ø‘:ø‘:÷’:aÜ’:l“’:™Ø’:¶’:"Ä’:ä‘:~Î‘:nø‘:&œ‘:J›‘:Hr‘:‘�‘:^‰‘:†ü�:DØ�:*¡�:Ÿ¬�:ÊÌ�:ãÐ�:ÞÙ�:O›�:•”�:–‘:°‘:¡‘:Š‘:ÿƒ‘:|§‘:gä‘:¿²’:á’:Ö0’:n’:æ^’:Å÷‘:òÔ‘:¸x‘: #‘:ÖÎ�:Óœ�:ê=�:§�:
��:oq�:Vg�:0K�:º0�:ªÅŽ:÷ÀŽ:1eŽ:B’Ž:�Ž:­TŽ:sŽ:‰Ž:Å=Ž:Ê%Ž:#ë�:Î«�:ª}�:Þo�:}l�:X�:&\�:BC�:h�:8¡Œ:_ÆŒ:l¥Œ:ÃÝŒ:�:–$�:š�:,"�:]l�:y€�:ÚS�:–�:œH�:Ð9�:“S�:6Î�:U³�:Ì£�:�™�:(b�:©qŒ:+Œ:Ñû�:÷1Ž:pç�:
?�:¡Q�:x�:gL�:ª7�:» Œ:/Œ:öCŒ:äVŒ:Ì’Œ:{Œ:A¯Œ:£ÛŒ:j¿Œ:ç}Œ:¦?�:1�:4�:”ÙŒ:8ßŒ:�nŒ:ñ^Œ:± Œ:ùKŒ:€Œ:™Œ:œÛŒ:\0�:Ä�:�ÃŒ:«XŒ:‘Œ:¬vŒ:º�:—Î�:é§�:|§�:GN�:ÎŒ:5AŒ:$'Œ:N
Œ:6Œ:,þ‹:º%Œ:;Ø‹:~»‹:õ‹:úô‹:½ê‹:vJŒ:„è‹:ªÊ‹:Õœ‹:hª‹:z±‹:—‹:Iä‹:Mñ‹:½HŒ:ßŠŒ:·�:¸�:DÌŒ:ÅŒ:˜ÇŒ:…®Œ:¹;�:~	�:>g�:´‹�:dÒ�:è��:Ž„�:X�:¶v�:~P�:X^�:z‹�:.�:æ9�:&�:È=�:¨@�:t*�:ã�:aE�:ºüŒ:G�:sèŒ:«Œ:Š�:m6�:í�:¤�:¶�:ûŒ:Z&�:O!�:#:�:š¼Œ:b…Œ:ýÌŒ:±wŒ:t«Œ:´Œ:Þ�Œ:ÊÁŒ:U…Œ:nŒ:–³Œ:ÙŒ:J¿Œ:ÛeŒ:Æð‹:›ô‹:ßÇ‹:ôŸ‹:ƒÍ‹:wý‹:·ËŒ:š�Œ:é¨Œ:Š’Œ:�mŒ:ÑwŒ:Œ:Œ:¦
Œ:¶ Œ:ãÁ‹:ý¼‹:`e‹:cY‹:½]‹:|D‹:ó‹:2'‹:ƒ1Š:¤7Š:Là‰:Cæ‰:&Š:Ä
Š:âä‰:¬x‰:Ç1‰:Qðˆ:‚¦ˆ:hàˆ:SÂˆ:úˆ:bW‰:h‘‰:6‰:^b‰:–»‰:t{‰:óN‰:�I‰:tÿˆ:f{‰:´*‰:Da‰:¥y‰:M?‰: =‰:¡³‰:ë‰: uŠ:m©‰:üº‰:HCŠ:Úã‰:ÌT‰:á‰:æ1‰:“"‰:EÚˆ:ßÊˆ:¶¨ˆ:Íqˆ:	Tˆ:sPˆ:¨Fˆ:Ñ]ˆ:¬Ð‡:¼‚‡:³ ‡:4‡:â‡:‡ó†:“æ†:8Å†:Èw†:—†:m;‡:Ü3‡:•‡:}'‡:ÿQ‡:G‡: ¢†:K†:ž#†:8P†:q†:ŒR†:F†:¾†:O†:�†:ºž†:È†:ÞÓ†:ð$‡:èë†:ç‡:T|‡:2‡:V‡:U%‡:ô ‡:íþ†:m`‡:j†‡:÷ó‡:(¬‡:Ö¶‡:ñ‡:ÔÌ‡:Óˆ:Ýà‡:Ô®‡:@Â‡:à|‡:„Õ‡:x›‡:r�‡:N…‡:hú‡:ú|‡:¼¸‡:Ó‡:¹¼‡:ä)ˆ:‚ˆ:�cˆ:ƒ+ˆ:œˆ:vˆ:9&ˆ:hˆ:GÒ‡:EÁ‡:ñ%ˆ:g ˆ:™Lˆ:jˆ:äº‡:ŸÃ‡:¾Å‡:ƒå‡:‘û‡:Ò1ˆ:lCˆ::Oˆ:ô]ˆ:×ˆ:ë¡ˆ:jaˆ:ŽEˆ:+dˆ:(Wˆ:Xˆ:ú“ˆ:º¢ˆ:r°ˆ:@€ˆ:}ˆ:8ˆ:c*ˆ:Qˆˆ:MŠˆ:svˆ:$Oˆ:òSˆ:‰[ˆ:D“ˆ:yžˆ:3¶ˆ:D)‰:Ø
‰:Ñˆ:zÙˆ:1âˆ:dÈˆ:ÌØˆ:ƒˆ:‡­ˆ:0¨ˆ:¼ßˆ:ü£ˆ:Soˆ:Ï;ˆ:Oˆ:Ñ™ˆ:Žˆ:u ˆ:fˆ:q;ˆ:#¹ˆ:È¡‡:•¡‡:¢‡::Æ‡:mf‡:¿S‡:2$‡:t(‡:!?‡:è†:¼¿†:Ô£†:C÷†:ïÁ†:h †:-‡:].‡:r!‡:;‡:}‹‡:�w‡:n×‡:§ˆ:�$ˆ:,ö‡:äü‡:ëü‡:>ˆ:#3ˆ:_'ˆ:Dkˆ:Š‚ˆ:s™ˆ:Ÿ°ˆ:±ãˆ:µüˆ:n2‰:V#‰:Ó*‰:ÄËˆ:+iˆ:îwˆ:oˆ:ícˆ:ð]ˆ:…ˆ:Œ~ˆ:7”ˆ:ØHˆ:òuˆ:†ˆ:±‡:Jþ†:†‡:Fâ†:†¥†:9‡:Þ4‡:…†:z�†:`†:i†:!�†:0k†:–K†:F7†:Qú…:f†:Ø5†:ó!†:6†:3X†:l†:¨ý…:º{†:á†:qÏ†:�‡:¯‡:#‡:ÔT‡:Ú�†:X†:]P†:¨†:Ö±†:85‡:Àü†:º†:Ow†:¾~†:Ín†:ö†:|u…:n4…:î@…:È{…:’u…:xq…:Œ‰…:Ì†:d†:šÆ…:-É…:�¡…:Y­…:Xc…:ª„:å„:Ö„:ÿ�„:„:´K„:ˆùƒ:øƒ:¿Æƒ:ãòƒ:„:F „:£+„:×F„:Wþƒ:ì=„:œ„:/„:×ƒ:Æ±ƒ:8 ƒ:¶Zƒ:¡­ƒ:~¢ƒ:þáƒ:Œˆƒ:Kƒ:|1ƒ:8vƒ:©éƒ:‚„:Øƒ„:ý²„:2Û„:Ž˜„:å•„:Ô¸„:wÀ„:]è„:q/„:þ„:/„:ªp„:–ß„:š}„:s„:]\„:jW„:¿j„:QA„:¿X„:ªéƒ:5ñƒ:Åƒ:á¼ƒ:¸Æƒ:� „:§Ñƒ:\Òƒ:5„:ûÏƒ:‘ƒ:iƒ:!mƒ:óZƒ:ãrƒ:ï*ƒ:ô‚:îˆ‚:£ƒ:·ƒ:ª±‚:©‚:F�‚:ãf‚:#N‚:t^‚:D5‚:a‚:±‚:�y‚:†‚:¶Á‚: 
ƒ:V�‚:‘�‚:+�‚:´Ò‚:‚ä‚:¬Â‚:žâ‚:\Å‚:«ë‚:Sƒ:6ƒ:Zþ‚:då‚:óà‚:¡"ƒ:ñ!ƒ:¤type§scatter¤name¼Weighted importance sampling¡xÈœ@  €?   @  @@  €@   @  À@  à@   A  A   A  0A  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A  °A  ¸A  ÀA  ÈA  ÐA  ØA  àA  èA  ðA  øA   B  B  B  B  B  B  B  B   B  $B  (B  ,B  0B  4B  8B  <B  @B  DB  HB  LB  PB  TB  XB  \B  `B  dB  hB  lB  pB  tB  xB  |B  €B  ‚B  „B  †B  ˆB  ŠB  ŒB  ŽB  �B  ’B  ”B  –B  ˜B  šB  œB  žB   B  ¢B  ¤B  ¦B  ¨B  ªB  ¬B  ®B  °B  ²B  ´B  ¶B  ¸B  ºB  ¼B  ¾B  ÀB  ÂB  ÄB  ÆB  ÈB  ÊB  ÌB  ÎB  ÐB  ÒB  ÔB  ÖB  ØB  ÚB  ÜB  ÞB  àB  âB  äB  æB  èB  êB  ìB  îB  ðB  òB  ôB  öB  øB  úB  üB  þB   C  C  C  C  C  C  C  C  C  	C  
C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C   C  !C  "C  #C  $C  %C  &C  'C  (C  )C  *C  +C  ,C  -C  .C  /C  0C  1C  2C  3C  4C  5C  6C  7C  8C  9C  :C  ;C  <C  =C  >C  ?C  @C  AC  BC  CC  DC  EC  FC  GC  HC  IC  JC  KC  LC  MC  NC  OC  PC  QC  RC  SC  TC  UC  VC  WC  XC  YC  ZC  [C  \C  ]C  ^C  _C  `C  aC  bC  cC  dC  eC  fC  gC  hC  iC  jC  kC  lC  mC  nC  oC  pC  qC  rC  sC  tC  uC  vC  wC  xC  yC  zC  {C  |C  }C  ~C  C  €C €€C  �C €�C  ‚C €‚C  ƒC €ƒC  „C €„C  …C €…C  †C €†C  ‡C €‡C  ˆC €ˆC  ‰C €‰C  ŠC €ŠC  ‹C €‹C  ŒC €ŒC  �C €�C  ŽC €ŽC  �C €�C  �C €�C  ‘C €‘C  ’C €’C  “C €“C  ”C €”C  •C €•C  –C €–C  —C €—C  ˜C €˜C  ™C €™C  šC €šC  ›C €›C  œC €œC  �C €�C  žC €žC  ŸC €ŸC   C € C  ¡C €¡C  ¢C €¢C  £C €£C  ¤C €¤C  ¥C €¥C  ¦C €¦C  §C €§C  ¨C €¨C  ©C €©C  ªC €ªC  «C €«C  ¬C €¬C  ­C €­C  ®C €®C  ¯C €¯C  °C €°C  ±C €±C  ²C €²C  ³C €³C  ´C €´C  µC €µC  ¶C €¶C  ·C €·C  ¸C €¸C  ¹C €¹C  ºC €ºC  »C €»C  ¼C €¼C  ½C €½C  ¾C €¾C  ¿C €¿C  ÀC €ÀC  ÁC €ÁC  ÂC €ÂC  ÃC €ÃC  ÄC €ÄC  ÅC €ÅC  ÆC €ÆC  ÇC €ÇC  ÈC €ÈC  ÉC €ÉC  ÊC €ÊC  ËC €ËC  ÌC €ÌC  ÍC €ÍC  ÎC €ÎC  ÏC €ÏC  ÐC €ÐC  ÑC €ÑC  ÒC €ÒC  ÓC €ÓC  ÔC €ÔC  ÕC €ÕC  ÖC €ÖC  ×C €×C  ØC €ØC  ÙC €ÙC  ÚC €ÚC  ÛC €ÛC  ÜC €ÜC  ÝC €ÝC  ÞC €ÞC  ßC €ßC  àC €àC  áC €áC  âC €âC  ãC €ãC  äC €äC  åC €åC  æC €æC  çC €çC  èC €èC  éC €éC  êC €êC  ëC €ëC  ìC €ìC  íC €íC  îC €îC  ïC €ïC  ðC €ðC  ñC €ñC  òC €òC  óC €óC  ôC €ôC  õC €õC  öC €öC  ÷C €÷C  øC €øC  ùC €ùC  úC €úC  ûC €ûC  üC €üC  ýC €ýC  þC €þC  ÿC €ÿC   D @ D € D À D  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  	D @	D €	D À	D  
D @
D €
D À
D  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD  D @D €D ÀD   D @ D € D À D  !D @!D €!D À!D  "D @"D €"D À"D  #D @#D €#D À#D  $D @$D €$D À$D  %D @%D €%D À%D  &D @&D €&D À&D  'D @'D €'D À'D  (D @(D €(D À(D  )D @)D €)D À)D  *D @*D €*D À*D  +D @+D €+D À+D  ,D @,D €,D À,D  -D @-D €-D À-D  .D @.D €.D À.D  /D @/D €/D À/D  0D @0D €0D À0D  1D @1D €1D À1D  2D @2D €2D À2D  3D @3D €3D À3D  4D @4D €4D À4D  5D @5D €5D À5D  6D @6D €6D À6D  7D @7D €7D À7D  8D @8D €8D À8D  9D @9D €9D À9D  :D @:D €:D À:D  ;D @;D €;D À;D  <D @<D €<D À<D  =D @=D €=D À=D  >D @>D €>D À>D  ?D @?D €?D À?D  @D @@D €@D À@D  AD @AD €AD ÀAD  BD @BD €BD ÀBD  CD @CD €CD ÀCD  DD @DD €DD ÀDD  ED @ED €ED ÀED  FD @FD €FD ÀFD  GD @GD €GD ÀGD  HD @HD €HD ÀHD  ID @ID €ID ÀID  JD @JD €JD ÀJD  KD @KD €KD ÀKD  LD @LD €LD ÀLD  MD @MD €MD ÀMD  ND @ND €ND ÀND  OD @OD €OD ÀOD  PD @PD €PD ÀPD  QD @QD €QD ÀQD  RD @RD €RD ÀRD  SD @SD €SD ÀSD  TD @TD €TD ÀTD  UD @UD €UD ÀUD  VD @VD €VD ÀVD  WD @WD €WD ÀWD  XD @XD €XD ÀXD  YD @YD €YD ÀYD  ZD @ZD €ZD ÀZD  [D @[D €[D À[D  \D @\D €\D À\D  ]D @]D €]D À]D  ^D @^D €^D À^D  _D @_D €_D À_D  `D @`D €`D À`D  aD @aD €aD ÀaD  bD @bD €bD ÀbD  cD @cD €cD ÀcD  dD @dD €dD ÀdD  eD @eD €eD ÀeD  fD @fD €fD ÀfD  gD @gD €gD ÀgD  hD @hD €hD ÀhD  iD @iD €iD ÀiD  jD @jD €jD ÀjD  kD @kD €kD ÀkD  lD @lD €lD ÀlD  mD @mD €mD ÀmD  nD @nD €nD ÀnD  oD @oD €oD ÀoD  pD @pD €pD ÀpD  qD @qD €qD ÀqD  rD @rD €rD ÀrD  sD @sD €sD ÀsD  tD @tD €tD ÀtD  uD @uD €uD ÀuD  vD @vD €vD ÀvD  wD @wD €wD ÀwD  xD @xD €xD ÀxD  yD @yD €yD ÀyD  zD @zD €zD ÀzD  {D @{D €{D À{D  |D @|D €|D À|D  }D @}D €}D À}D  ~D @~D €~D À~D  D @D €D ÀD  €D  €D @€D `€D €€D  €D À€D à€D  �D  �D @�D `�D €�D  �D À�D à�D  ‚D  ‚D @‚D `‚D €‚D  ‚D À‚D à‚D  ƒD  ƒD @ƒD `ƒD €ƒD  ƒD ÀƒD àƒD  „D  „D @„D `„D €„D  „D À„D à„D  …D  …D @…D `…D €…D  …D À…D à…D  †D  †D @†D `†D €†D  †D À†D à†D  ‡D  ‡D @‡D `‡D €‡D  ‡D À‡D à‡D  ˆD  ˆD @ˆD `ˆD €ˆD  ˆD ÀˆD àˆD  ‰D  ‰D @‰D `‰D €‰D  ‰D À‰D à‰D  ŠD  ŠD @ŠD `ŠD €ŠD  ŠD ÀŠD àŠD  ‹D  ‹D @‹D `‹D €‹D  ‹D À‹D à‹D  ŒD  ŒD @ŒD `ŒD €ŒD  ŒD ÀŒD àŒD  �D  �D @�D `�D €�D  �D À�D à�D  ŽD  ŽD @ŽD `ŽD €ŽD  ŽD ÀŽD àŽD  �D  �D @�D `�D €�D  �D À�D à�D  �D  �D @�D `�D €�D  �D À�D à�D  ‘D  ‘D @‘D `‘D €‘D  ‘D À‘D à‘D  ’D  ’D @’D `’D €’D  ’D À’D à’D  “D  “D @“D `“D €“D  “D À“D à“D  ”D  ”D @”D `”D €”D  ”D À”D à”D  •D  •D @•D `•D €•D  •D À•D à•D  –D  –D @–D `–D €–D  –D À–D à–D  —D  —D @—D `—D €—D  —D À—D à—D  ˜D  ˜D @˜D `˜D €˜D  ˜D À˜D à˜D  ™D  ™D @™D `™D €™D  ™D À™D à™D  šD  šD @šD `šD €šD  šD ÀšD àšD  ›D  ›D @›D `›D €›D  ›D À›D à›D  œD  œD @œD `œD €œD  œD ÀœD àœD  �D  �D @�D `�D €�D  �D À�D à�D  žD  žD @žD `žD €žD  žD ÀžD àžD  ŸD  ŸD @ŸD `ŸD €ŸD  ŸD ÀŸD àŸD   D   D @ D ` D € D   D À D à D  ¡D  ¡D @¡D `¡D €¡D  ¡D À¡D à¡D  ¢D  ¢D @¢D `¢D €¢D  ¢D À¢D à¢D  £D  £D @£D `£D €£D  £D À£D à£D  ¤D  ¤D @¤D `¤D €¤D  ¤D À¤D à¤D  ¥D  ¥D @¥D `¥D €¥D  ¥D À¥D à¥D  ¦D  ¦D @¦D `¦D €¦D  ¦D À¦D à¦D  §D  §D @§D `§D €§D  §D À§D à§D  ¨D  ¨D @¨D `¨D €¨D  ¨D À¨D à¨D  ©D  ©D @©D `©D €©D  ©D À©D à©D  ªD  ªD @ªD `ªD €ªD  ªD ÀªD àªD  «D  «D @«D `«D €«D  «D À«D à«D  ¬D  ¬D @¬D `¬D €¬D  ¬D À¬D à¬D  ­D  ­D @­D `­D €­D  ­D À­D à­D  ®D  ®D @®D `®D €®D  ®D À®D à®D  ¯D  ¯D @¯D `¯D €¯D  ¯D À¯D à¯D  °D  °D @°D `°D €°D  °D À°D à°D  ±D  ±D @±D `±D €±D  ±D À±D à±D  ²D  ²D @²D `²D €²D  ²D À²D à²D  ³D  ³D @³D `³D €³D  ³D À³D à³D  ´D  ´D @´D `´D €´D  ´D À´D à´D  µD  µD @µD `µD €µD  µD ÀµD àµD  ¶D  ¶D @¶D `¶D €¶D  ¶D À¶D à¶D  ·D  ·D @·D `·D €·D  ·D À·D à·D  ¸D  ¸D @¸D `¸D €¸D  ¸D À¸D à¸D  ¹D  ¹D @¹D `¹D €¹D  ¹D À¹D à¹D  ºD  ºD @ºD `ºD €ºD  ºD ÀºD àºD  »D  »D @»D `»D €»D  »D À»D à»D  ¼D  ¼D @¼D `¼D €¼D  ¼D À¼D à¼D  ½D  ½D @½D `½D €½D  ½D À½D à½D  ¾D  ¾D @¾D `¾D €¾D  ¾D À¾D à¾D  ¿D  ¿D @¿D `¿D €¿D  ¿D À¿D à¿D  ÀD  ÀD @ÀD `ÀD €ÀD  ÀD ÀÀD àÀD  ÁD  ÁD @ÁD `ÁD €ÁD  ÁD ÀÁD àÁD  ÂD  ÂD @ÂD `ÂD €ÂD  ÂD ÀÂD àÂD  ÃD  ÃD @ÃD `ÃD €ÃD  ÃD ÀÃD àÃD  ÄD  ÄD @ÄD `ÄD €ÄD  ÄD ÀÄD àÄD  ÅD  ÅD @ÅD `ÅD €ÅD  ÅD ÀÅD àÅD  ÆD  ÆD @ÆD `ÆD €ÆD  ÆD ÀÆD àÆD  ÇD  ÇD @ÇD `ÇD €ÇD  ÇD ÀÇD àÇD  ÈD  ÈD @ÈD `ÈD €ÈD  ÈD ÀÈD àÈD  ÉD  ÉD @ÉD `ÉD €ÉD  ÉD ÀÉD àÉD  ÊD  ÊD @ÊD `ÊD €ÊD  ÊD ÀÊD àÊD  ËD  ËD @ËD `ËD €ËD  ËD ÀËD àËD  ÌD  ÌD @ÌD `ÌD €ÌD  ÌD ÀÌD àÌD  ÍD  ÍD @ÍD `ÍD €ÍD  ÍD ÀÍD àÍD  ÎD  ÎD @ÎD `ÎD €ÎD  ÎD ÀÎD àÎD  ÏD  ÏD @ÏD `ÏD €ÏD  ÏD ÀÏD àÏD  ÐD  ÐD @ÐD `ÐD €ÐD  ÐD ÀÐD àÐD  ÑD  ÑD @ÑD `ÑD €ÑD  ÑD ÀÑD àÑD  ÒD  ÒD @ÒD `ÒD €ÒD  ÒD ÀÒD àÒD  ÓD  ÓD @ÓD `ÓD €ÓD  ÓD ÀÓD àÓD  ÔD  ÔD @ÔD `ÔD €ÔD  ÔD ÀÔD àÔD  ÕD  ÕD @ÕD `ÕD €ÕD  ÕD ÀÕD àÕD  ÖD  ÖD @ÖD `ÖD €ÖD  ÖD ÀÖD àÖD  ×D  ×D @×D `×D €×D  ×D À×D à×D  ØD  ØD @ØD `ØD €ØD  ØD ÀØD àØD  ÙD  ÙD @ÙD `ÙD €ÙD  ÙD ÀÙD àÙD  ÚD  ÚD @ÚD `ÚD €ÚD  ÚD ÀÚD àÚD  ÛD  ÛD @ÛD `ÛD €ÛD  ÛD ÀÛD àÛD  ÜD  ÜD @ÜD `ÜD €ÜD  ÜD ÀÜD àÜD  ÝD  ÝD @ÝD `ÝD €ÝD  ÝD ÀÝD àÝD  ÞD  ÞD @ÞD `ÞD €ÞD  ÞD ÀÞD àÞD  ßD  ßD @ßD `ßD €ßD  ßD ÀßD àßD  àD  àD @àD `àD €àD  àD ÀàD ààD  áD  áD @áD `áD €áD  áD ÀáD àáD  âD  âD @âD `âD €âD  âD ÀâD àâD  ãD  ãD @ãD `ãD €ãD  ãD ÀãD àãD  äD  äD @äD `äD €äD  äD ÀäD àäD  åD  åD @åD `åD €åD  åD ÀåD àåD  æD  æD @æD `æD €æD  æD ÀæD àæD  çD  çD @çD `çD €çD  çD ÀçD àçD  èD  èD @èD `èD €èD  èD ÀèD àèD  éD  éD @éD `éD €éD  éD ÀéD àéD  êD  êD @êD `êD €êD  êD ÀêD àêD  ëD  ëD @ëD `ëD €ëD  ëD ÀëD àëD  ìD  ìD @ìD `ìD €ìD  ìD ÀìD àìD  íD  íD @íD `íD €íD  íD ÀíD àíD  îD  îD @îD `îD €îD  îD ÀîD àîD  ïD  ïD @ïD `ïD €ïD  ïD ÀïD àïD  ðD  ðD @ðD `ðD €ðD  ðD ÀðD àðD  ñD  ñD @ñD `ñD €ñD  ñD ÀñD àñD  òD  òD @òD `òD €òD  òD ÀòD àòD  óD  óD @óD `óD €óD  óD ÀóD àóD  ôD  ôD @ôD `ôD €ôD  ôD ÀôD àôD  õD  õD @õD `õD €õD  õD ÀõD àõD  öD  öD @öD `öD €öD  öD ÀöD àöD  ÷D  ÷D @÷D `÷D €÷D  ÷D À÷D à÷D  øD  øD @øD `øD €øD  øD ÀøD àøD  ùD  ùD @ùD `ùD €ùD  ùD ÀùD àùD  úD  úD @úD `úD €úD  úD ÀúD àúD  ûD  ûD @ûD `ûD €ûD  ûD ÀûD àûD  üD  üD @üD `üD €üD  üD ÀüD àüD  ýD  ýD @ýD `ýD €ýD  ýD ÀýD àýD  þD  þD @þD `þD €þD  þD ÀþD àþD  ÿD  ÿD @ÿD `ÿD €ÿD  ÿD ÀÿD àÿD   E  E   E 0 E @ E P E ` E p E € E � E   E ° E À E Ð E à E ð E  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  	E 	E  	E 0	E @	E P	E `	E p	E €	E �	E  	E °	E À	E Ð	E à	E ð	E  
E 
E  
E 0
E @
E P
E `
E p
E €
E �
E  
E °
E À
E Ð
E à
E ð
E  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE   E  E   E 0 E @ E P E ` E p E € E � E   E ° E À E Ð E à E ð E  !E !E  !E 0!E @!E P!E `!E p!E €!E �!E  !E °!E À!E Ð!E à!E ð!E  "E "E  "E 0"E @"E P"E `"E p"E €"E �"E  "E °"E À"E Ð"E à"E ð"E  #E #E  #E 0#E @#E P#E `#E p#E €#E �#E  #E °#E À#E Ð#E à#E ð#E  $E $E  $E 0$E @$E P$E `$E p$E €$E �$E  $E °$E À$E Ð$E à$E ð$E  %E %E  %E 0%E @%E P%E `%E p%E €%E �%E  %E °%E À%E Ð%E à%E ð%E  &E &E  &E 0&E @&E P&E `&E p&E €&E �&E  &E °&E À&E Ð&E à&E ð&E  'E 'E  'E 0'E @'E P'E `'E p'E €'E �'E  'E °'E À'E Ð'E à'E ð'E  (E (E  (E 0(E @(E P(E `(E p(E €(E �(E  (E °(E À(E Ð(E à(E ð(E  )E )E  )E 0)E @)E P)E `)E p)E €)E �)E  )E °)E À)E Ð)E à)E ð)E  *E *E  *E 0*E @*E P*E `*E p*E €*E �*E  *E °*E À*E Ð*E à*E ð*E  +E +E  +E 0+E @+E P+E `+E p+E €+E �+E  +E °+E À+E Ð+E à+E ð+E  ,E ,E  ,E 0,E @,E P,E `,E p,E €,E �,E  ,E °,E À,E Ð,E à,E ð,E  -E -E  -E 0-E @-E P-E `-E p-E €-E �-E  -E °-E À-E Ð-E à-E ð-E  .E .E  .E 0.E @.E P.E `.E p.E €.E �.E  .E °.E À.E Ð.E à.E ð.E  /E /E  /E 0/E @/E P/E `/E p/E €/E �/E  /E °/E À/E Ð/E à/E ð/E  0E 0E  0E 00E @0E P0E `0E p0E €0E �0E  0E °0E À0E Ð0E à0E ð0E  1E 1E  1E 01E @1E P1E `1E p1E €1E �1E  1E °1E À1E Ð1E à1E ð1E  2E 2E  2E 02E @2E P2E `2E p2E €2E �2E  2E °2E À2E Ð2E à2E ð2E  3E 3E  3E 03E @3E P3E `3E p3E €3E �3E  3E °3E À3E Ð3E à3E ð3E  4E 4E  4E 04E @4E P4E `4E p4E €4E �4E  4E °4E À4E Ð4E à4E ð4E  5E 5E  5E 05E @5E P5E `5E p5E €5E �5E  5E °5E À5E Ð5E à5E ð5E  6E 6E  6E 06E @6E P6E `6E p6E €6E �6E  6E °6E À6E Ð6E à6E ð6E  7E 7E  7E 07E @7E P7E `7E p7E €7E �7E  7E °7E À7E Ð7E à7E ð7E  8E 8E  8E 08E @8E P8E `8E p8E €8E �8E  8E °8E À8E Ð8E à8E ð8E  9E 9E  9E 09E @9E P9E `9E p9E €9E �9E  9E °9E À9E Ð9E à9E ð9E  :E :E  :E 0:E @:E P:E `:E p:E €:E �:E  :E °:E À:E Ð:E à:E ð:E  ;E ;E  ;E 0;E @;E P;E `;E p;E €;E �;E  ;E °;E À;E Ð;E à;E ð;E  <E <E  <E 0<E @<E P<E `<E p<E €<E �<E  <E °<E À<E Ð<E à<E ð<E  =E =E  =E 0=E @=E P=E `=E p=E €=E �=E  =E °=E À=E Ð=E à=E ð=E  >E >E  >E 0>E @>E P>E `>E p>E €>E �>E  >E °>E À>E Ð>E à>E ð>E  ?E ?E  ?E 0?E @?E P?E `?E p?E €?E �?E  ?E °?E À?E Ð?E à?E ð?E  @E @E  @E 0@E @@E P@E `@E p@E €@E �@E  @E °@E À@E Ð@E à@E ð@E  AE AE  AE 0AE @AE PAE `AE pAE €AE �AE  AE °AE ÀAE ÐAE àAE ðAE  BE BE  BE 0BE @BE PBE `BE pBE €BE �BE  BE °BE ÀBE ÐBE àBE ðBE  CE CE  CE 0CE @CE PCE `CE pCE €CE �CE  CE °CE ÀCE ÐCE àCE ðCE  DE DE  DE 0DE @DE PDE `DE pDE €DE �DE  DE °DE ÀDE ÐDE àDE ðDE  EE EE  EE 0EE @EE PEE `EE pEE €EE �EE  EE °EE ÀEE ÐEE àEE ðEE  FE FE  FE 0FE @FE PFE `FE pFE €FE �FE  FE °FE ÀFE ÐFE àFE ðFE  GE GE  GE 0GE @GE PGE `GE pGE €GE �GE  GE °GE ÀGE ÐGE àGE ðGE  HE HE  HE 0HE @HE PHE `HE pHE €HE �HE  HE °HE ÀHE ÐHE àHE ðHE  IE IE  IE 0IE @IE PIE `IE pIE €IE �IE  IE °IE ÀIE ÐIE àIE ðIE  JE JE  JE 0JE @JE PJE `JE pJE €JE �JE  JE °JE ÀJE ÐJE àJE ðJE  KE KE  KE 0KE @KE PKE `KE pKE €KE �KE  KE °KE ÀKE ÐKE àKE ðKE  LE LE  LE 0LE @LE PLE `LE pLE €LE �LE  LE °LE ÀLE ÐLE àLE ðLE  ME ME  ME 0ME @ME PME `ME pME €ME �ME  ME °ME ÀME ÐME àME ðME  NE NE  NE 0NE @NE PNE `NE pNE €NE �NE  NE °NE ÀNE ÐNE àNE ðNE  OE OE  OE 0OE @OE POE `OE pOE €OE �OE  OE °OE ÀOE ÐOE àOE ðOE  PE PE  PE 0PE @PE PPE `PE pPE €PE �PE  PE °PE ÀPE ÐPE àPE ðPE  QE QE  QE 0QE @QE PQE `QE pQE €QE �QE  QE °QE ÀQE ÐQE àQE ðQE  RE RE  RE 0RE @RE PRE `RE pRE €RE �RE  RE °RE ÀRE ÐRE àRE ðRE  SE SE  SE 0SE @SE PSE `SE pSE €SE �SE  SE °SE ÀSE ÐSE àSE ðSE  TE TE  TE 0TE @TE PTE `TE pTE €TE �TE  TE °TE ÀTE ÐTE àTE ðTE  UE UE  UE 0UE @UE PUE `UE pUE €UE �UE  UE °UE ÀUE ÐUE àUE ðUE  VE VE  VE 0VE @VE PVE `VE pVE €VE �VE  VE °VE ÀVE ÐVE àVE ðVE  WE WE  WE 0WE @WE PWE `WE pWE €WE �WE  WE °WE ÀWE ÐWE àWE ðWE  XE XE  XE 0XE @XE PXE `XE pXE €XE �XE  XE °XE ÀXE ÐXE àXE ðXE  YE YE  YE 0YE @YE PYE `YE pYE €YE �YE  YE °YE ÀYE ÐYE àYE ðYE  ZE ZE  ZE 0ZE @ZE PZE `ZE pZE €ZE �ZE  ZE °ZE ÀZE ÐZE àZE ðZE  [E [E  [E 0[E @[E P[E `[E p[E €[E �[E  [E °[E À[E Ð[E à[E ð[E  \E \E  \E 0\E @\E P\E `\E p\E €\E �\E  \E °\E À\E Ð\E à\E ð\E  ]E ]E  ]E 0]E @]E P]E `]E p]E €]E �]E  ]E °]E À]E Ð]E à]E ð]E  ^E ^E  ^E 0^E @^E P^E `^E p^E €^E �^E  ^E °^E À^E Ð^E à^E ð^E  _E _E  _E 0_E @_E P_E `_E p_E €_E �_E  _E °_E À_E Ð_E à_E ð_E  `E `E  `E 0`E @`E P`E ``E p`E €`E �`E  `E °`E À`E Ð`E à`E ð`E  aE aE  aE 0aE @aE PaE `aE paE €aE �aE  aE °aE ÀaE ÐaE àaE ðaE  bE bE  bE 0bE @bE PbE `bE pbE €bE �bE  bE °bE ÀbE ÐbE àbE ðbE  cE cE  cE 0cE @cE PcE `cE pcE €cE �cE  cE °cE ÀcE ÐcE àcE ðcE  dE dE  dE 0dE @dE PdE `dE pdE €dE �dE  dE °dE ÀdE ÐdE àdE ðdE  eE eE  eE 0eE @eE PeE `eE peE €eE �eE  eE °eE ÀeE ÐeE àeE ðeE  fE fE  fE 0fE @fE PfE `fE pfE €fE �fE  fE °fE ÀfE ÐfE àfE ðfE  gE gE  gE 0gE @gE PgE `gE pgE €gE �gE  gE °gE ÀgE ÐgE àgE ðgE  hE hE  hE 0hE @hE PhE `hE phE €hE �hE  hE °hE ÀhE ÐhE àhE ðhE  iE iE  iE 0iE @iE PiE `iE piE €iE �iE  iE °iE ÀiE ÐiE àiE ðiE  jE jE  jE 0jE @jE PjE `jE pjE €jE �jE  jE °jE ÀjE ÐjE àjE ðjE  kE kE  kE 0kE @kE PkE `kE pkE €kE �kE  kE °kE ÀkE ÐkE àkE ðkE  lE lE  lE 0lE @lE PlE `lE plE €lE �lE  lE °lE ÀlE ÐlE àlE ðlE  mE mE  mE 0mE @mE PmE `mE pmE €mE �mE  mE °mE ÀmE ÐmE àmE ðmE  nE nE  nE 0nE @nE PnE `nE pnE €nE �nE  nE °nE ÀnE ÐnE ànE ðnE  oE oE  oE 0oE @oE PoE `oE poE €oE �oE  oE °oE ÀoE ÐoE àoE ðoE  pE pE  pE 0pE @pE PpE `pE ppE €pE �pE  pE °pE ÀpE ÐpE àpE ðpE  qE qE  qE 0qE @qE PqE `qE pqE €qE �qE  qE °qE ÀqE ÐqE àqE ðqE  rE rE  rE 0rE @rE PrE `rE prE €rE �rE  rE °rE ÀrE ÐrE àrE ðrE  sE sE  sE 0sE @sE PsE `sE psE €sE �sE  sE °sE ÀsE ÐsE àsE ðsE  tE tE  tE 0tE @tE PtE `tE ptE €tE �tE  tE °tE ÀtE ÐtE àtE ðtE  uE uE  uE 0uE @uE PuE `uE puE €uE �uE  uE °uE ÀuE ÐuE àuE ðuE  vE vE  vE 0vE @vE PvE `vE pvE €vE �vE  vE °vE ÀvE ÐvE àvE ðvE  wE wE  wE 0wE @wE PwE `wE pwE €wE �wE  wE °wE ÀwE ÐwE àwE ðwE  xE xE  xE 0xE @xE PxE `xE pxE €xE �xE  xE °xE ÀxE ÐxE àxE ðxE  yE yE  yE 0yE @yE PyE `yE pyE €yE �yE  yE °yE ÀyE ÐyE àyE ðyE  zE zE  zE 0zE @zE PzE `zE pzE €zE �zE  zE °zE ÀzE ÐzE àzE ðzE  {E {E  {E 0{E @{E P{E `{E p{E €{E �{E  {E °{E À{E Ð{E à{E ð{E  |E |E  |E 0|E @|E P|E `|E p|E €|E �|E  |E °|E À|E Ð|E à|E ð|E  }E }E  }E 0}E @}E P}E `}E p}E €}E �}E  }E °}E À}E Ð}E à}E ð}E  ~E ~E  ~E 0~E @~E P~E `~E p~E €~E �~E  ~E °~E À~E Ð~E à~E ð~E  E E  E 0E @E PE `E pE €E �E  E °E ÀE ÐE àE ðE  €E €E €E €E  €E (€E 0€E 8€E @€E H€E P€E X€E `€E h€E p€E x€E €€E ˆ€E �€E ˜€E  €E ¨€E °€E ¸€E À€E È€E Ð€E Ø€E à€E è€E ð€E ø€E  �E �E �E �E  �E (�E 0�E 8�E @�E H�E P�E X�E `�E h�E p�E x�E €�E ˆ�E ��E ˜�E  �E ¨�E °�E ¸�E À�E È�E Ð�E Ø�E à�E è�E ð�E ø�E  ‚E ‚E ‚E ‚E  ‚E (‚E 0‚E 8‚E @‚E H‚E P‚E X‚E `‚E h‚E p‚E x‚E €‚E ˆ‚E �‚E ˜‚E  ‚E ¨‚E °‚E ¸‚E À‚E È‚E Ð‚E Ø‚E à‚E è‚E ð‚E ø‚E  ƒE ƒE ƒE ƒE  ƒE (ƒE 0ƒE 8ƒE @ƒE HƒE PƒE XƒE `ƒE hƒE pƒE xƒE €ƒE ˆƒE �ƒE ˜ƒE  ƒE ¨ƒE °ƒE ¸ƒE ÀƒE ÈƒE ÐƒE ØƒE àƒE èƒE ðƒE øƒE  „E „E „E „E  „E („E 0„E 8„E @„E H„E P„E X„E `„E h„E p„E x„E €„E ˆ„E �„E ˜„E  „E ¨„E °„E ¸„E À„E È„E Ð„E Ø„E à„E è„E ð„E ø„E  …E …E …E …E  …E (…E 0…E 8…E @…E H…E P…E X…E `…E h…E p…E x…E €…E ˆ…E �…E ˜…E  …E ¨…E °…E ¸…E À…E È…E Ð…E Ø…E à…E è…E ð…E ø…E  †E †E †E †E  †E (†E 0†E 8†E @†E H†E P†E X†E `†E h†E p†E x†E €†E ˆ†E �†E ˜†E  †E ¨†E °†E ¸†E À†E È†E Ð†E Ø†E à†E è†E ð†E ø†E  ‡E ‡E ‡E ‡E  ‡E (‡E 0‡E 8‡E @‡E H‡E P‡E X‡E `‡E h‡E p‡E x‡E €‡E ˆ‡E �‡E ˜‡E  ‡E ¨‡E °‡E ¸‡E À‡E È‡E Ð‡E Ø‡E à‡E è‡E ð‡E ø‡E  ˆE ˆE ˆE ˆE  ˆE (ˆE 0ˆE 8ˆE @ˆE HˆE PˆE XˆE `ˆE hˆE pˆE xˆE €ˆE ˆˆE �ˆE ˜ˆE  ˆE ¨ˆE °ˆE ¸ˆE ÀˆE ÈˆE ÐˆE ØˆE àˆE èˆE ðˆE øˆE  ‰E ‰E ‰E ‰E  ‰E (‰E 0‰E 8‰E @‰E H‰E P‰E X‰E `‰E h‰E p‰E x‰E €‰E ˆ‰E �‰E ˜‰E  ‰E ¨‰E °‰E ¸‰E À‰E È‰E Ð‰E Ø‰E à‰E è‰E ð‰E ø‰E  ŠE ŠE ŠE ŠE  ŠE (ŠE 0ŠE 8ŠE @ŠE HŠE PŠE XŠE `ŠE hŠE pŠE xŠE €ŠE ˆŠE �ŠE ˜ŠE  ŠE ¨ŠE °ŠE ¸ŠE ÀŠE ÈŠE ÐŠE ØŠE àŠE èŠE ðŠE øŠE  ‹E ‹E ‹E ‹E  ‹E (‹E 0‹E 8‹E @‹E H‹E P‹E X‹E `‹E h‹E p‹E x‹E €‹E ˆ‹E �‹E ˜‹E  ‹E ¨‹E °‹E ¸‹E À‹E È‹E Ð‹E Ø‹E à‹E è‹E ð‹E ø‹E  ŒE ŒE ŒE ŒE  ŒE (ŒE 0ŒE 8ŒE @ŒE HŒE PŒE XŒE `ŒE hŒE pŒE xŒE €ŒE ˆŒE �ŒE ˜ŒE  ŒE ¨ŒE °ŒE ¸ŒE ÀŒE ÈŒE ÐŒE ØŒE àŒE èŒE ðŒE øŒE  �E �E �E �E  �E (�E 0�E 8�E @�E H�E P�E X�E `�E h�E p�E x�E €�E ˆ�E ��E ˜�E  �E ¨�E °�E ¸�E À�E È�E Ð�E Ø�E à�E è�E ð�E ø�E  ŽE ŽE ŽE ŽE  ŽE (ŽE 0ŽE 8ŽE @ŽE HŽE PŽE XŽE `ŽE hŽE pŽE xŽE €ŽE ˆŽE �ŽE ˜ŽE  ŽE ¨ŽE °ŽE ¸ŽE ÀŽE ÈŽE ÐŽE ØŽE àŽE èŽE ðŽE øŽE  �E �E �E �E  �E (�E 0�E 8�E @�E H�E P�E X�E `�E h�E p�E x�E €�E ˆ�E ��E ˜�E  �E ¨�E °�E ¸�E À�E È�E Ð�E Ø�E à�E è�E ð�E ø�E  �E �E �E �E  �E (�E 0�E 8�E @�E H�E P�E X�E `�E h�E p�E x�E €�E ˆ�E ��E ˜�E  �E ¨�E °�E ¸�E À�E È�E Ð�E Ø�E à�E è�E ð�E ø�E  ‘E ‘E ‘E ‘E  ‘E (‘E 0‘E 8‘E @‘E H‘E P‘E X‘E `‘E h‘E p‘E x‘E €‘E ˆ‘E �‘E ˜‘E  ‘E ¨‘E °‘E ¸‘E À‘E È‘E Ð‘E Ø‘E à‘E è‘E ð‘E ø‘E  ’E ’E ’E ’E  ’E (’E 0’E 8’E @’E H’E P’E X’E `’E h’E p’E x’E €’E ˆ’E �’E ˜’E  ’E ¨’E °’E ¸’E À’E È’E Ð’E Ø’E à’E è’E ð’E ø’E  “E “E “E “E  “E (“E 0“E 8“E @“E H“E P“E X“E `“E h“E p“E x“E €“E ˆ“E �“E ˜“E  “E ¨“E °“E ¸“E À“E È“E Ð“E Ø“E à“E è“E ð“E ø“E  ”E ”E ”E ”E  ”E (”E 0”E 8”E @”E H”E P”E X”E `”E h”E p”E x”E €”E ˆ”E �”E ˜”E  ”E ¨”E °”E ¸”E À”E È”E Ð”E Ø”E à”E è”E ð”E ø”E  •E •E •E •E  •E (•E 0•E 8•E @•E H•E P•E X•E `•E h•E p•E x•E €•E ˆ•E �•E ˜•E  •E ¨•E °•E ¸•E À•E È•E Ð•E Ø•E à•E è•E ð•E ø•E  –E –E –E –E  –E (–E 0–E 8–E @–E H–E P–E X–E `–E h–E p–E x–E €–E ˆ–E �–E ˜–E  –E ¨–E °–E ¸–E À–E È–E Ð–E Ø–E à–E è–E ð–E ø–E  —E —E —E —E  —E (—E 0—E 8—E @—E H—E P—E X—E `—E h—E p—E x—E €—E ˆ—E �—E ˜—E  —E ¨—E °—E ¸—E À—E È—E Ð—E Ø—E à—E è—E ð—E ø—E  ˜E ˜E ˜E ˜E  ˜E (˜E 0˜E 8˜E @˜E H˜E P˜E X˜E `˜E h˜E p˜E x˜E €˜E ˆ˜E �˜E ˜˜E  ˜E ¨˜E °˜E ¸˜E À˜E È˜E Ð˜E Ø˜E à˜E è˜E ð˜E ø˜E  ™E ™E ™E ™E  ™E (™E 0™E 8™E @™E H™E P™E X™E `™E h™E p™E x™E €™E ˆ™E �™E ˜™E  ™E ¨™E °™E ¸™E À™E È™E Ð™E Ø™E à™E è™E ð™E ø™E  šE šE šE šE  šE (šE 0šE 8šE @šE HšE PšE XšE `šE hšE pšE xšE €šE ˆšE �šE ˜šE  šE ¨šE °šE ¸šE ÀšE ÈšE ÐšE ØšE àšE èšE ðšE øšE  ›E ›E ›E ›E  ›E (›E 0›E 8›E @›E H›E P›E X›E `›E h›E p›E x›E €›E ˆ›E �›E ˜›E  ›E ¨›E °›E ¸›E À›E È›E Ð›E Ø›E à›E è›E ð›E ø›E  œE œE œE œE  œE (œE 0œE 8œE @œE HœE PœE XœE `œE hœE pœE xœE €œE ˆœE �œE ˜œE  œE ¨œE °œE ¸œE ÀœE ÈœE ÐœE ØœE àœE èœE ðœE øœE  �E �E �E �E  �E (�E 0�E 8�E @�E H�E P�E X�E `�E h�E p�E x�E €�E ˆ�E ��E ˜�E  �E ¨�E °�E ¸�E À�E È�E Ð�E Ø�E à�E è�E ð�E ø�E  žE žE žE žE  žE (žE 0žE 8žE @žE HžE PžE XžE `žE hžE pžE xžE €žE ˆžE �žE ˜žE  žE ¨žE °žE ¸žE ÀžE ÈžE ÐžE ØžE àžE èžE ðžE øžE  ŸE ŸE ŸE ŸE  ŸE (ŸE 0ŸE 8ŸE @ŸE HŸE PŸE XŸE `ŸE hŸE pŸE xŸE €ŸE ˆŸE �ŸE ˜ŸE  ŸE ¨ŸE °ŸE ¸ŸE ÀŸE ÈŸE ÐŸE ØŸE àŸE èŸE ðŸE øŸE   E  E  E  E   E ( E 0 E 8 E @ E H E P E X E ` E h E p E x E € E ˆ E � E ˜ E   E ¨ E ° E ¸ E À E È E Ð E Ø E à E è E ð E ø E  ¡E ¡E ¡E ¡E  ¡E (¡E 0¡E 8¡E @¡E H¡E P¡E X¡E `¡E h¡E p¡E x¡E €¡E ˆ¡E �¡E ˜¡E  ¡E ¨¡E °¡E ¸¡E À¡E È¡E Ð¡E Ø¡E à¡E è¡E ð¡E ø¡E  ¢E ¢E ¢E ¢E  ¢E (¢E 0¢E 8¢E @¢E H¢E P¢E X¢E `¢E h¢E p¢E x¢E €¢E ˆ¢E �¢E ˜¢E  ¢E ¨¢E °¢E ¸¢E À¢E È¢E Ð¢E Ø¢E à¢E è¢E ð¢E ø¢E  £E £E £E £E  £E (£E 0£E 8£E @£E H£E P£E X£E `£E h£E p£E x£E €£E ˆ£E �£E ˜£E  £E ¨£E °£E ¸£E À£E È£E Ð£E Ø£E à£E è£E ð£E ø£E  ¤E ¤E ¤E ¤E  ¤E (¤E 0¤E 8¤E @¤E H¤E P¤E X¤E `¤E h¤E p¤E x¤E €¤E ˆ¤E �¤E ˜¤E  ¤E ¨¤E °¤E ¸¤E À¤E È¤E Ð¤E Ø¤E à¤E è¤E ð¤E ø¤E  ¥E ¥E ¥E ¥E  ¥E (¥E 0¥E 8¥E @¥E H¥E P¥E X¥E `¥E h¥E p¥E x¥E €¥E ˆ¥E �¥E ˜¥E  ¥E ¨¥E °¥E ¸¥E À¥E È¥E Ð¥E Ø¥E à¥E è¥E ð¥E ø¥E  ¦E ¦E ¦E ¦E  ¦E (¦E 0¦E 8¦E @¦E H¦E P¦E X¦E `¦E h¦E p¦E x¦E €¦E ˆ¦E �¦E ˜¦E  ¦E ¨¦E °¦E ¸¦E À¦E È¦E Ð¦E Ø¦E à¦E è¦E ð¦E ø¦E  §E §E §E §E  §E (§E 0§E 8§E @§E H§E P§E X§E `§E h§E p§E x§E €§E ˆ§E �§E ˜§E  §E ¨§E °§E ¸§E À§E È§E Ð§E Ø§E à§E è§E ð§E ø§E  ¨E ¨E ¨E ¨E  ¨E (¨E 0¨E 8¨E @¨E H¨E P¨E X¨E `¨E h¨E p¨E x¨E €¨E ˆ¨E �¨E ˜¨E  ¨E ¨¨E °¨E ¸¨E À¨E È¨E Ð¨E Ø¨E à¨E è¨E ð¨E ø¨E  ©E ©E ©E ©E  ©E (©E 0©E 8©E @©E H©E P©E X©E `©E h©E p©E x©E €©E ˆ©E �©E ˜©E  ©E ¨©E °©E ¸©E À©E È©E Ð©E Ø©E à©E è©E ð©E ø©E  ªE ªE ªE ªE  ªE (ªE 0ªE 8ªE @ªE HªE PªE XªE `ªE hªE pªE xªE €ªE ˆªE �ªE ˜ªE  ªE ¨ªE °ªE ¸ªE ÀªE ÈªE ÐªE ØªE àªE èªE ðªE øªE  «E «E «E «E  «E («E 0«E 8«E @«E H«E P«E X«E `«E h«E p«E x«E €«E ˆ«E �«E ˜«E  «E ¨«E °«E ¸«E À«E È«E Ð«E Ø«E à«E è«E ð«E ø«E  ¬E ¬E ¬E ¬E  ¬E (¬E 0¬E 8¬E @¬E H¬E P¬E X¬E `¬E h¬E p¬E x¬E €¬E ˆ¬E �¬E ˜¬E  ¬E ¨¬E °¬E ¸¬E À¬E È¬E Ð¬E Ø¬E à¬E è¬E ð¬E ø¬E  ­E ­E ­E ­E  ­E (­E 0­E 8­E @­E H­E P­E X­E `­E h­E p­E x­E €­E ˆ­E �­E ˜­E  ­E ¨­E °­E ¸­E À­E È­E Ð­E Ø­E à­E è­E ð­E ø­E  ®E ®E ®E ®E  ®E (®E 0®E 8®E @®E H®E P®E X®E `®E h®E p®E x®E €®E ˆ®E �®E ˜®E  ®E ¨®E °®E ¸®E À®E È®E Ð®E Ø®E à®E è®E ð®E ø®E  ¯E ¯E ¯E ¯E  ¯E (¯E 0¯E 8¯E @¯E H¯E P¯E X¯E `¯E h¯E p¯E x¯E €¯E ˆ¯E �¯E ˜¯E  ¯E ¨¯E °¯E ¸¯E À¯E È¯E Ð¯E Ø¯E à¯E è¯E ð¯E ø¯E  °E °E °E °E  °E (°E 0°E 8°E @°E H°E P°E X°E `°E h°E p°E x°E €°E ˆ°E �°E ˜°E  °E ¨°E °°E ¸°E À°E È°E Ð°E Ø°E à°E è°E ð°E ø°E  ±E ±E ±E ±E  ±E (±E 0±E 8±E @±E H±E P±E X±E `±E h±E p±E x±E €±E ˆ±E �±E ˜±E  ±E ¨±E °±E ¸±E À±E È±E Ð±E Ø±E à±E è±E ð±E ø±E  ²E ²E ²E ²E  ²E (²E 0²E 8²E @²E H²E P²E X²E `²E h²E p²E x²E €²E ˆ²E �²E ˜²E  ²E ¨²E °²E ¸²E À²E È²E Ð²E Ø²E à²E è²E ð²E ø²E  ³E ³E ³E ³E  ³E (³E 0³E 8³E @³E H³E P³E X³E `³E h³E p³E x³E €³E ˆ³E �³E ˜³E  ³E ¨³E °³E ¸³E À³E È³E Ð³E Ø³E à³E è³E ð³E ø³E  ´E ´E ´E ´E  ´E (´E 0´E 8´E @´E H´E P´E X´E `´E h´E p´E x´E €´E ˆ´E �´E ˜´E  ´E ¨´E °´E ¸´E À´E È´E Ð´E Ø´E à´E è´E ð´E ø´E  µE µE µE µE  µE (µE 0µE 8µE @µE HµE PµE XµE `µE hµE pµE xµE €µE ˆµE �µE ˜µE  µE ¨µE °µE ¸µE ÀµE ÈµE ÐµE ØµE àµE èµE ðµE øµE  ¶E ¶E ¶E ¶E  ¶E (¶E 0¶E 8¶E @¶E H¶E P¶E X¶E `¶E h¶E p¶E x¶E €¶E ˆ¶E �¶E ˜¶E  ¶E ¨¶E °¶E ¸¶E À¶E È¶E Ð¶E Ø¶E à¶E è¶E ð¶E ø¶E  ·E ·E ·E ·E  ·E (·E 0·E 8·E @·E H·E P·E X·E `·E h·E p·E x·E €·E ˆ·E �·E ˜·E  ·E ¨·E °·E ¸·E À·E È·E Ð·E Ø·E à·E è·E ð·E ø·E  ¸E ¸E ¸E ¸E  ¸E (¸E 0¸E 8¸E @¸E H¸E P¸E X¸E `¸E h¸E p¸E x¸E €¸E ˆ¸E �¸E ˜¸E  ¸E ¨¸E °¸E ¸¸E À¸E È¸E Ð¸E Ø¸E à¸E è¸E ð¸E ø¸E  ¹E ¹E ¹E ¹E  ¹E (¹E 0¹E 8¹E @¹E H¹E P¹E X¹E `¹E h¹E p¹E x¹E €¹E ˆ¹E �¹E ˜¹E  ¹E ¨¹E °¹E ¸¹E À¹E È¹E Ð¹E Ø¹E à¹E è¹E ð¹E ø¹E  ºE ºE ºE ºE  ºE (ºE 0ºE 8ºE @ºE HºE PºE XºE `ºE hºE pºE xºE €ºE ˆºE �ºE ˜ºE  ºE ¨ºE °ºE ¸ºE ÀºE ÈºE ÐºE ØºE àºE èºE ðºE øºE  »E »E »E »E  »E (»E 0»E 8»E @»E H»E P»E X»E `»E h»E p»E x»E €»E ˆ»E �»E ˜»E  »E ¨»E °»E ¸»E À»E È»E Ð»E Ø»E à»E è»E ð»E ø»E  ¼E ¼E ¼E ¼E  ¼E (¼E 0¼E 8¼E @¼E H¼E P¼E X¼E `¼E h¼E p¼E x¼E €¼E ˆ¼E �¼E ˜¼E  ¼E ¨¼E °¼E ¸¼E À¼E È¼E Ð¼E Ø¼E à¼E è¼E ð¼E ø¼E  ½E ½E ½E ½E  ½E (½E 0½E 8½E @½E H½E P½E X½E `½E h½E p½E x½E €½E ˆ½E �½E ˜½E  ½E ¨½E °½E ¸½E À½E È½E Ð½E Ø½E à½E è½E ð½E ø½E  ¾E ¾E ¾E ¾E  ¾E (¾E 0¾E 8¾E @¾E H¾E P¾E X¾E `¾E h¾E p¾E x¾E €¾E ˆ¾E �¾E ˜¾E  ¾E ¨¾E °¾E ¸¾E À¾E È¾E Ð¾E Ø¾E à¾E è¾E ð¾E ø¾E  ¿E ¿E ¿E ¿E  ¿E (¿E 0¿E 8¿E @¿E H¿E P¿E X¿E `¿E h¿E p¿E x¿E €¿E ˆ¿E �¿E ˜¿E  ¿E ¨¿E °¿E ¸¿E À¿E È¿E Ð¿E Ø¿E à¿E è¿E ð¿E ø¿E  ÀE ÀE ÀE ÀE  ÀE (ÀE 0ÀE 8ÀE @ÀE HÀE PÀE XÀE `ÀE hÀE pÀE xÀE €ÀE ˆÀE �ÀE ˜ÀE  ÀE ¨ÀE °ÀE ¸ÀE ÀÀE ÈÀE ÐÀE ØÀE àÀE èÀE ðÀE øÀE  ÁE ÁE ÁE ÁE  ÁE (ÁE 0ÁE 8ÁE @ÁE HÁE PÁE XÁE `ÁE hÁE pÁE xÁE €ÁE ˆÁE �ÁE ˜ÁE  ÁE ¨ÁE °ÁE ¸ÁE ÀÁE ÈÁE ÐÁE ØÁE àÁE èÁE ðÁE øÁE  ÂE ÂE ÂE ÂE  ÂE (ÂE 0ÂE 8ÂE @ÂE HÂE PÂE XÂE `ÂE hÂE pÂE xÂE €ÂE ˆÂE �ÂE ˜ÂE  ÂE ¨ÂE °ÂE ¸ÂE ÀÂE ÈÂE ÐÂE ØÂE àÂE èÂE ðÂE øÂE  ÃE ÃE ÃE ÃE  ÃE (ÃE 0ÃE 8ÃE @ÃE HÃE PÃE XÃE `ÃE hÃE pÃE xÃE €ÃE ˆÃE �ÃE ˜ÃE  ÃE ¨ÃE °ÃE ¸ÃE ÀÃE ÈÃE ÐÃE ØÃE àÃE èÃE ðÃE øÃE  ÄE ÄE ÄE ÄE  ÄE (ÄE 0ÄE 8ÄE @ÄE HÄE PÄE XÄE `ÄE hÄE pÄE xÄE €ÄE ˆÄE �ÄE ˜ÄE  ÄE ¨ÄE °ÄE ¸ÄE ÀÄE ÈÄE ÐÄE ØÄE àÄE èÄE ðÄE øÄE  ÅE ÅE ÅE ÅE  ÅE (ÅE 0ÅE 8ÅE @ÅE HÅE PÅE XÅE `ÅE hÅE pÅE xÅE €ÅE ˆÅE �ÅE ˜ÅE  ÅE ¨ÅE °ÅE ¸ÅE ÀÅE ÈÅE ÐÅE ØÅE àÅE èÅE ðÅE øÅE  ÆE ÆE ÆE ÆE  ÆE (ÆE 0ÆE 8ÆE @ÆE HÆE PÆE XÆE `ÆE hÆE pÆE xÆE €ÆE ˆÆE �ÆE ˜ÆE  ÆE ¨ÆE °ÆE ¸ÆE ÀÆE ÈÆE ÐÆE ØÆE àÆE èÆE ðÆE øÆE  ÇE ÇE ÇE ÇE  ÇE (ÇE 0ÇE 8ÇE @ÇE HÇE PÇE XÇE `ÇE hÇE pÇE xÇE €ÇE ˆÇE �ÇE ˜ÇE  ÇE ¨ÇE °ÇE ¸ÇE ÀÇE ÈÇE ÐÇE ØÇE àÇE èÇE ðÇE øÇE  ÈE ÈE ÈE ÈE  ÈE (ÈE 0ÈE 8ÈE @ÈE HÈE PÈE XÈE `ÈE hÈE pÈE xÈE €ÈE ˆÈE �ÈE ˜ÈE  ÈE ¨ÈE °ÈE ¸ÈE ÀÈE ÈÈE ÐÈE ØÈE àÈE èÈE ðÈE øÈE  ÉE ÉE ÉE ÉE  ÉE (ÉE 0ÉE 8ÉE @ÉE HÉE PÉE XÉE `ÉE hÉE pÉE xÉE €ÉE ˆÉE �ÉE ˜ÉE  ÉE ¨ÉE °ÉE ¸ÉE ÀÉE ÈÉE ÐÉE ØÉE àÉE èÉE ðÉE øÉE  ÊE ÊE ÊE ÊE  ÊE (ÊE 0ÊE 8ÊE @ÊE HÊE PÊE XÊE `ÊE hÊE pÊE xÊE €ÊE ˆÊE �ÊE ˜ÊE  ÊE ¨ÊE °ÊE ¸ÊE ÀÊE ÈÊE ÐÊE ØÊE àÊE èÊE ðÊE øÊE  ËE ËE ËE ËE  ËE (ËE 0ËE 8ËE @ËE HËE PËE XËE `ËE hËE pËE xËE €ËE ˆËE �ËE ˜ËE  ËE ¨ËE °ËE ¸ËE ÀËE ÈËE ÐËE ØËE àËE èËE ðËE øËE  ÌE ÌE ÌE ÌE  ÌE (ÌE 0ÌE 8ÌE @ÌE HÌE PÌE XÌE `ÌE hÌE pÌE xÌE €ÌE ˆÌE �ÌE ˜ÌE  ÌE ¨ÌE °ÌE ¸ÌE ÀÌE ÈÌE ÐÌE ØÌE àÌE èÌE ðÌE øÌE  ÍE ÍE ÍE ÍE  ÍE (ÍE 0ÍE 8ÍE @ÍE HÍE PÍE XÍE `ÍE hÍE pÍE xÍE €ÍE ˆÍE �ÍE ˜ÍE  ÍE ¨ÍE °ÍE ¸ÍE ÀÍE ÈÍE ÐÍE ØÍE àÍE èÍE ðÍE øÍE  ÎE ÎE ÎE ÎE  ÎE (ÎE 0ÎE 8ÎE @ÎE HÎE PÎE XÎE `ÎE hÎE pÎE xÎE €ÎE ˆÎE �ÎE ˜ÎE  ÎE ¨ÎE °ÎE ¸ÎE ÀÎE ÈÎE ÐÎE ØÎE àÎE èÎE ðÎE øÎE  ÏE ÏE ÏE ÏE  ÏE (ÏE 0ÏE 8ÏE @ÏE HÏE PÏE XÏE `ÏE hÏE pÏE xÏE €ÏE ˆÏE �ÏE ˜ÏE  ÏE ¨ÏE °ÏE ¸ÏE ÀÏE ÈÏE ÐÏE ØÏE àÏE èÏE ðÏE øÏE  ÐE ÐE ÐE ÐE  ÐE (ÐE 0ÐE 8ÐE @ÐE HÐE PÐE XÐE `ÐE hÐE pÐE xÐE €ÐE ˆÐE �ÐE ˜ÐE  ÐE ¨ÐE °ÐE ¸ÐE ÀÐE ÈÐE ÐÐE ØÐE àÐE èÐE ðÐE øÐE  ÑE ÑE ÑE ÑE  ÑE (ÑE 0ÑE 8ÑE @ÑE HÑE PÑE XÑE `ÑE hÑE pÑE xÑE €ÑE ˆÑE �ÑE ˜ÑE  ÑE ¨ÑE °ÑE ¸ÑE ÀÑE ÈÑE ÐÑE ØÑE àÑE èÑE ðÑE øÑE  ÒE ÒE ÒE ÒE  ÒE (ÒE 0ÒE 8ÒE @ÒE HÒE PÒE XÒE `ÒE hÒE pÒE xÒE €ÒE ˆÒE �ÒE ˜ÒE  ÒE ¨ÒE °ÒE ¸ÒE ÀÒE ÈÒE ÐÒE ØÒE àÒE èÒE ðÒE øÒE  ÓE ÓE ÓE ÓE  ÓE (ÓE 0ÓE 8ÓE @ÓE HÓE PÓE XÓE `ÓE hÓE pÓE xÓE €ÓE ˆÓE �ÓE ˜ÓE  ÓE ¨ÓE °ÓE ¸ÓE ÀÓE ÈÓE ÐÓE ØÓE àÓE èÓE ðÓE øÓE  ÔE ÔE ÔE ÔE  ÔE (ÔE 0ÔE 8ÔE @ÔE HÔE PÔE XÔE `ÔE hÔE pÔE xÔE €ÔE ˆÔE �ÔE ˜ÔE  ÔE ¨ÔE °ÔE ¸ÔE ÀÔE ÈÔE ÐÔE ØÔE àÔE èÔE ðÔE øÔE  ÕE ÕE ÕE ÕE  ÕE (ÕE 0ÕE 8ÕE @ÕE HÕE PÕE XÕE `ÕE hÕE pÕE xÕE €ÕE ˆÕE �ÕE ˜ÕE  ÕE ¨ÕE °ÕE ¸ÕE ÀÕE ÈÕE ÐÕE ØÕE àÕE èÕE ðÕE øÕE  ÖE ÖE ÖE ÖE  ÖE (ÖE 0ÖE 8ÖE @ÖE HÖE PÖE XÖE `ÖE hÖE pÖE xÖE €ÖE ˆÖE �ÖE ˜ÖE  ÖE ¨ÖE °ÖE ¸ÖE ÀÖE ÈÖE ÐÖE ØÖE àÖE èÖE ðÖE øÖE  ×E ×E ×E ×E  ×E (×E 0×E 8×E @×E H×E P×E X×E `×E h×E p×E x×E €×E ˆ×E �×E ˜×E  ×E ¨×E °×E ¸×E À×E È×E Ð×E Ø×E à×E è×E ð×E ø×E  ØE ØE ØE ØE  ØE (ØE 0ØE 8ØE @ØE HØE PØE XØE `ØE hØE pØE xØE €ØE ˆØE �ØE ˜ØE  ØE ¨ØE °ØE ¸ØE ÀØE ÈØE ÐØE ØØE àØE èØE ðØE øØE  ÙE ÙE ÙE ÙE  ÙE (ÙE 0ÙE 8ÙE @ÙE HÙE PÙE XÙE `ÙE hÙE pÙE xÙE €ÙE ˆÙE �ÙE ˜ÙE  ÙE ¨ÙE °ÙE ¸ÙE ÀÙE ÈÙE ÐÙE ØÙE àÙE èÙE ðÙE øÙE  ÚE ÚE ÚE ÚE  ÚE (ÚE 0ÚE 8ÚE @ÚE HÚE PÚE XÚE `ÚE hÚE pÚE xÚE €ÚE ˆÚE �ÚE ˜ÚE  ÚE ¨ÚE °ÚE ¸ÚE ÀÚE ÈÚE ÐÚE ØÚE àÚE èÚE ðÚE øÚE  ÛE ÛE ÛE ÛE  ÛE (ÛE 0ÛE 8ÛE @ÛE HÛE PÛE XÛE `ÛE hÛE pÛE xÛE €ÛE ˆÛE �ÛE ˜ÛE  ÛE ¨ÛE °ÛE ¸ÛE ÀÛE ÈÛE ÐÛE ØÛE àÛE èÛE ðÛE øÛE  ÜE ÜE ÜE ÜE  ÜE (ÜE 0ÜE 8ÜE @ÜE HÜE PÜE XÜE `ÜE hÜE pÜE xÜE €ÜE ˆÜE �ÜE ˜ÜE  ÜE ¨ÜE °ÜE ¸ÜE ÀÜE ÈÜE ÐÜE ØÜE àÜE èÜE ðÜE øÜE  ÝE ÝE ÝE ÝE  ÝE (ÝE 0ÝE 8ÝE @ÝE HÝE PÝE XÝE `ÝE hÝE pÝE xÝE €ÝE ˆÝE �ÝE ˜ÝE  ÝE ¨ÝE °ÝE ¸ÝE ÀÝE ÈÝE ÐÝE ØÝE àÝE èÝE ðÝE øÝE  ÞE ÞE ÞE ÞE  ÞE (ÞE 0ÞE 8ÞE @ÞE HÞE PÞE XÞE `ÞE hÞE pÞE xÞE €ÞE ˆÞE �ÞE ˜ÞE  ÞE ¨ÞE °ÞE ¸ÞE ÀÞE ÈÞE ÐÞE ØÞE àÞE èÞE ðÞE øÞE  ßE ßE ßE ßE  ßE (ßE 0ßE 8ßE @ßE HßE PßE XßE `ßE hßE pßE xßE €ßE ˆßE �ßE ˜ßE  ßE ¨ßE °ßE ¸ßE ÀßE ÈßE ÐßE ØßE àßE èßE ðßE øßE  àE àE àE àE  àE (àE 0àE 8àE @àE HàE PàE XàE `àE hàE pàE xàE €àE ˆàE �àE ˜àE  àE ¨àE °àE ¸àE ÀàE ÈàE ÐàE ØàE ààE èàE ðàE øàE  áE áE áE áE  áE (áE 0áE 8áE @áE HáE PáE XáE `áE háE páE xáE €áE ˆáE �áE ˜áE  áE ¨áE °áE ¸áE ÀáE ÈáE ÐáE ØáE àáE èáE ðáE øáE  âE âE âE âE  âE (âE 0âE 8âE @âE HâE PâE XâE `âE hâE pâE xâE €âE ˆâE �âE ˜âE  âE ¨âE °âE ¸âE ÀâE ÈâE ÐâE ØâE àâE èâE ðâE øâE  ãE ãE ãE ãE  ãE (ãE 0ãE 8ãE @ãE HãE PãE XãE `ãE hãE pãE xãE €ãE ˆãE �ãE ˜ãE  ãE ¨ãE °ãE ¸ãE ÀãE ÈãE ÐãE ØãE àãE èãE ðãE øãE  äE äE äE äE  äE (äE 0äE 8äE @äE HäE PäE XäE `äE häE päE xäE €äE ˆäE �äE ˜äE  äE ¨äE °äE ¸äE ÀäE ÈäE ÐäE ØäE àäE èäE ðäE øäE  åE åE åE åE  åE (åE 0åE 8åE @åE HåE PåE XåE `åE håE påE xåE €åE ˆåE �åE ˜åE  åE ¨åE °åE ¸åE ÀåE ÈåE ÐåE ØåE àåE èåE ðåE øåE  æE æE æE æE  æE (æE 0æE 8æE @æE HæE PæE XæE `æE hæE pæE xæE €æE ˆæE �æE ˜æE  æE ¨æE °æE ¸æE ÀæE ÈæE ÐæE ØæE àæE èæE ðæE øæE  çE çE çE çE  çE (çE 0çE 8çE @çE HçE PçE XçE `çE hçE pçE xçE €çE ˆçE �çE ˜çE  çE ¨çE °çE ¸çE ÀçE ÈçE ÐçE ØçE àçE èçE ðçE øçE  èE èE èE èE  èE (èE 0èE 8èE @èE HèE PèE XèE `èE hèE pèE xèE €èE ˆèE �èE ˜èE  èE ¨èE °èE ¸èE ÀèE ÈèE ÐèE ØèE àèE èèE ðèE øèE  éE éE éE éE  éE (éE 0éE 8éE @éE HéE PéE XéE `éE héE péE xéE €éE ˆéE �éE ˜éE  éE ¨éE °éE ¸éE ÀéE ÈéE ÐéE ØéE àéE èéE ðéE øéE  êE êE êE êE  êE (êE 0êE 8êE @êE HêE PêE XêE `êE hêE pêE xêE €êE ˆêE �êE ˜êE  êE ¨êE °êE ¸êE ÀêE ÈêE ÐêE ØêE àêE èêE ðêE øêE  ëE ëE ëE ëE  ëE (ëE 0ëE 8ëE @ëE HëE PëE XëE `ëE hëE pëE xëE €ëE ˆëE �ëE ˜ëE  ëE ¨ëE °ëE ¸ëE ÀëE ÈëE ÐëE ØëE àëE èëE ðëE øëE  ìE ìE ìE ìE  ìE (ìE 0ìE 8ìE @ìE HìE PìE XìE `ìE hìE pìE xìE €ìE ˆìE �ìE ˜ìE  ìE ¨ìE °ìE ¸ìE ÀìE ÈìE ÐìE ØìE àìE èìE ðìE øìE  íE íE íE íE  íE (íE 0íE 8íE @íE HíE PíE XíE `íE híE píE xíE €íE ˆíE �íE ˜íE  íE ¨íE °íE ¸íE ÀíE ÈíE ÐíE ØíE àíE èíE ðíE øíE  îE îE îE îE  îE (îE 0îE 8îE @îE HîE PîE XîE `îE hîE pîE xîE €îE ˆîE �îE ˜îE  îE ¨îE °îE ¸îE ÀîE ÈîE ÐîE ØîE àîE èîE ðîE øîE  ïE ïE ïE ïE  ïE (ïE 0ïE 8ïE @ïE HïE PïE XïE `ïE hïE pïE xïE €ïE ˆïE �ïE ˜ïE  ïE ¨ïE °ïE ¸ïE ÀïE ÈïE ÐïE ØïE àïE èïE ðïE øïE  ðE ðE ðE ðE  ðE (ðE 0ðE 8ðE @ðE HðE PðE XðE `ðE hðE pðE xðE €ðE ˆðE �ðE ˜ðE  ðE ¨ðE °ðE ¸ðE ÀðE ÈðE ÐðE ØðE àðE èðE ððE øðE  ñE ñE ñE ñE  ñE (ñE 0ñE 8ñE @ñE HñE PñE XñE `ñE hñE pñE xñE €ñE ˆñE �ñE ˜ñE  ñE ¨ñE °ñE ¸ñE ÀñE ÈñE ÐñE ØñE àñE èñE ðñE øñE  òE òE òE òE  òE (òE 0òE 8òE @òE HòE PòE XòE `òE hòE pòE xòE €òE ˆòE �òE ˜òE  òE ¨òE °òE ¸òE ÀòE ÈòE ÐòE ØòE àòE èòE ðòE øòE  óE óE óE óE  óE (óE 0óE 8óE @óE HóE PóE XóE `óE hóE póE xóE €óE ˆóE �óE ˜óE  óE ¨óE °óE ¸óE ÀóE ÈóE ÐóE ØóE àóE èóE ðóE øóE  ôE ôE ôE ôE  ôE (ôE 0ôE 8ôE @ôE HôE PôE XôE `ôE hôE pôE xôE €ôE ˆôE �ôE ˜ôE  ôE ¨ôE °ôE ¸ôE ÀôE ÈôE ÐôE ØôE àôE èôE ðôE øôE  õE õE õE õE  õE (õE 0õE 8õE @õE HõE PõE XõE `õE hõE põE xõE €õE ˆõE �õE ˜õE  õE ¨õE °õE ¸õE ÀõE ÈõE ÐõE ØõE àõE èõE ðõE øõE  öE öE öE öE  öE (öE 0öE 8öE @öE HöE PöE XöE `öE höE pöE xöE €öE ˆöE �öE ˜öE  öE ¨öE °öE ¸öE ÀöE ÈöE ÐöE ØöE àöE èöE ðöE øöE  ÷E ÷E ÷E ÷E  ÷E (÷E 0÷E 8÷E @÷E H÷E P÷E X÷E `÷E h÷E p÷E x÷E €÷E ˆ÷E �÷E ˜÷E  ÷E ¨÷E °÷E ¸÷E À÷E È÷E Ð÷E Ø÷E à÷E è÷E ð÷E ø÷E  øE øE øE øE  øE (øE 0øE 8øE @øE HøE PøE XøE `øE høE pøE xøE €øE ˆøE �øE ˜øE  øE ¨øE °øE ¸øE ÀøE ÈøE ÐøE ØøE àøE èøE ðøE øøE  ùE ùE ùE ùE  ùE (ùE 0ùE 8ùE @ùE HùE PùE XùE `ùE hùE pùE xùE €ùE ˆùE �ùE ˜ùE  ùE ¨ùE °ùE ¸ùE ÀùE ÈùE ÐùE ØùE àùE èùE ðùE øùE  úE úE úE úE  úE (úE 0úE 8úE @úE HúE PúE XúE `úE húE púE xúE €úE ˆúE �úE ˜úE  úE ¨úE °úE ¸úE ÀúE ÈúE ÐúE ØúE àúE èúE ðúE øúE  ûE ûE ûE ûE  ûE (ûE 0ûE 8ûE @ûE HûE PûE XûE `ûE hûE pûE xûE €ûE ˆûE �ûE ˜ûE  ûE ¨ûE °ûE ¸ûE ÀûE ÈûE ÐûE ØûE àûE èûE ðûE øûE  üE üE üE üE  üE (üE 0üE 8üE @üE HüE PüE XüE `üE hüE püE xüE €üE ˆüE �üE ˜üE  üE ¨üE °üE ¸üE ÀüE ÈüE ÐüE ØüE àüE èüE ðüE øüE  ýE ýE ýE ýE  ýE (ýE 0ýE 8ýE @ýE HýE PýE XýE `ýE hýE pýE xýE €ýE ˆýE �ýE ˜ýE  ýE ¨ýE °ýE ¸ýE ÀýE ÈýE ÐýE ØýE àýE èýE ðýE øýE  þE þE þE þE  þE (þE 0þE 8þE @þE HþE PþE XþE `þE hþE pþE xþE €þE ˆþE �þE ˜þE  þE ¨þE °þE ¸þE ÀþE ÈþE ÐþE ØþE àþE èþE ðþE øþE  ÿE ÿE ÿE ÿE  ÿE (ÿE 0ÿE 8ÿE @ÿE HÿE PÿE XÿE `ÿE hÿE pÿE xÿE €ÿE ˆÿE �ÿE ˜ÿE  ÿE ¨ÿE °ÿE ¸ÿE ÀÿE ÈÿE ÐÿE ØÿE àÿE èÿE ðÿE øÿE   F  F  F  F  F  F  F  F   F $ F ( F , F 0 F 4 F 8 F < F @ F D F H F L F P F T F X F \ F ` F d F h F l F p F t F x F | F € F „ F ˆ F Œ F � F ” F ˜ F œ F   F ¤ F ¨ F ¬ F ° F ´ F ¸ F ¼ F À F Ä F È F Ì F Ð F Ô F Ø F Ü F à F ä F è F ì F ð F ô F ø F ü F  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  	F 	F 	F 	F 	F 	F 	F 	F  	F $	F (	F ,	F 0	F 4	F 8	F <	F @	F D	F H	F L	F P	F T	F X	F \	F `	F d	F h	F l	F p	F t	F x	F |	F €	F „	F ˆ	F Œ	F �	F ”	F ˜	F œ	F  	F ¤	F ¨	F ¬	F °	F ´	F ¸	F ¼	F À	F Ä	F È	F Ì	F Ð	F Ô	F Ø	F Ü	F à	F ä	F è	F ì	F ð	F ô	F ø	F ü	F  
F 
F 
F 
F 
F 
F 
F 
F  
F $
F (
F ,
F 0
F 4
F 8
F <
F @
F D
F H
F L
F P
F T
F X
F \
F `
F d
F h
F l
F p
F t
F x
F |
F €
F „
F ˆ
F Œ
F �
F ”
F ˜
F œ
F  
F ¤
F ¨
F ¬
F °
F ´
F ¸
F ¼
F À
F Ä
F È
F Ì
F Ð
F Ô
F Ø
F Ü
F à
F ä
F è
F ì
F ð
F ô
F ø
F ü
F  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @F DF HF LF PF TF XF \F `F dF hF lF pF tF xF |F €F „F ˆF ŒF �F ”F ˜F œF  F ¤F ¨F ¬F °F ´F ¸F ¼F ÀF ÄF ÈF ÌF ÐF ÔF ØF ÜF àF äF èF ìF ðF ôF øF üF  F F F F F F F F  F $F (F ,F 0F 4F 8F <F @FÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/cfb9dac3af175b34„¦layoutˆ¨autosizeÂ¥xaxisƒ¨tickvals×  €?   A¥title�¤text®Dealer showing¨ticktext’¡A¢10¨template‚¦layoutÞ ©coloraxis�¨colorbar‚¥ticks ¬outlinewidthÊ    ¥xaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white©hovermode§closest­paper_bgcolor¥white£geo†©showlakesÃ¨showlandÃ©landcolor§#E5ECF6§bgcolor¥white¬subunitcolor¥white©lakecolor¥whiteªcolorscaleƒªsequentialš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921©diverging›’Ê    §#8e0152’Ê=ÌÌÍ§#c51b7d’Ê>LÌÍ§#de77ae’Ê>™™š§#f1b6da’Ê>ÌÌÍ§#fde0ef’Ê?   §#f7f7f7’Ê?™š§#e6f5d0’Ê?333§#b8e186’Ê?LÌÍ§#7fbc41’Ê?fff§#4d9221’Ê?€  §#276419¯sequentialminusš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921¥yaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white­shapedefaults�¤line�¥color§#2a3f5fªhoverlabel�¥align¤left¦mapbox�¥style¥light¥polarƒ«angularaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6ªradialaxisƒ©gridcolor¥white¥ticks ©linecolor¥white¯autotypenumbers¦strict¤font�¥color§#2a3f5f§ternary„¥aaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6¥caxisƒ©gridcolor¥white¥ticks ©linecolor¥white¥baxisƒ©gridcolor¥white¥ticks ©linecolor¥white²annotationdefaultsƒ©arrowheadÊ    ªarrowwidthÊ?€  ªarrowcolor§#2a3f5f¬plot_bgcolor§#E5ECF6¥title�¡xÊ=LÌÍ¥sceneƒ¥xaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥zaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥yaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¨colorwayš§#636efa§#EF553B§#00cc96§#ab63fa§#FFA15A§#19d3f3§#FF6692§#B6E880§#FF97FF§#FECB52¤dataÞ ®scatterpolargl‘‚¤type®scatterpolargl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦carpet‘ƒ¥baxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¤type¦carpet¥aaxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¬scatterpolar‘‚¤type¬scatterpolar¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©parcoords‘‚¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©parcoords§scatter‘‚¤type§scatter¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ²histogram2dcontour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type²histogram2dcontourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921§contour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§contourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattercarpet‘‚¤type­scattercarpet¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦mesh3d‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type¦mesh3d§surface‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§surfaceªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattermapbox‘‚¤type­scattermapbox¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ªscattergeo‘‚¤typeªscattergeo¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©histogram‘‚¤type©histogram¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    £pie‘‚¤type£pieªautomarginÃªchoropleth‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤typeªchoropleth©heatmapgl‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©heatmapglªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921£bar‘„¤type£bar§error_y�¥color§#2a3f5f§error_x�¥color§#2a3f5f¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   §heatmap‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§heatmapªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­contourcarpet‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type­contourcarpet¥table‘ƒ¤type¥table¦header‚¤line�¥color¥white¤fill�¥color§#C8D4E3¥cells‚¤line�¥color¥white¤fill�¥color§#EBF0F8©scatter3d‘ƒ¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©scatter3d¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¨barpolar‘‚¤type¨barpolar¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   ©scattergl‘‚¤type©scattergl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    «histogram2d‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type«histogram2dªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921®scatterternary‘‚¤type®scatterternary¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦heightÊC–  ¦margin„¡lÊ    ¡bÊ    ¡rÊ    ¡tÊBp  ¥title ¥yaxisƒ¨tickvals×  @A  ¨A¥title�¤textªPlayer sum¨ticktext×  @A  ¨A¥widthÊCÈ  ¦config…¨showLinkÂ¨editableÂªresponsiveÃªstaticPlotÂªscrollZoomÃ¦frames�¤data‘‰¤zmaxÊ?€  ¡yÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¤type§heatmapªcolorscale§Bluered¤zminÊ¿€  ¡zšÇ(€ë»¾]8Ì¾ÎÊ¾
ÓÝ¾Xˆà¾hTð¾ÇÇ¾VÅé½3Ÿ>µö?Ç(ŽçÁ<ÒwŒ»G¤2¼N†½õ+�½²ÄÛ¼V/è=xÌ>ˆo?S9p?Ç(2¼r=Ê�C<ztæ<Ä\l»^oÄ¼V@D<ç>–Â>’A!?Ÿ™p?Ç(˜±=~íž=,‘O= ­I=IË^<n Ñ<À*>è×>D�%?„©q?Ç(Ûò=PÖ={=È”#=³¸º<ˆ=®$H>àCÜ>ß$?Âp?Ç(…í	>”Þ= ø×=Wœ‹=ì£ƒ=0>·=U‹”>¦Ýï>;G,?K£r?Ç('ˆ¢=¶ê`=#Z‘<€p(:K½gm<mÈ>S?ã??VUq?Ç(Zm<À·I»šXO½*²”½Ÿõõ½á(æ½gáá=ÚL?¦r??flq?Ç(*ñÂ½4&ñ½@-¾ÿæ7¾TþI¾ØJ¾¨`B¾ÞöŽ>áC8?és?Ç(äqC¾²îT¾gé�¾5Ì�¾=š¾ul”¾|×^¾$½#,Õ>·àX?©transposeÃ©showscaleÃ¡xÇ(  €?   @  @@  €@   @  À@  à@   A  A   AÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/1c437dfc407d8916„¦layout†¥xaxisƒ¨tickvalsÇ(  €?   @  @@  €@   @  À@  à@   A  A   A¥title�¤text®Dealer showing¨ticktextš¡AÊ@   Ê@@  Ê@€  Ê@   Ê@À  Ê@à  ÊA   ÊA  ÊA   ¨template‚¦layoutÞ ©coloraxis�¨colorbar‚¥ticks ¬outlinewidthÊ    ¥xaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white©hovermode§closest­paper_bgcolor¥white£geo†©showlakesÃ¨showlandÃ©landcolor§#E5ECF6§bgcolor¥white¬subunitcolor¥white©lakecolor¥whiteªcolorscaleƒªsequentialš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921©diverging›’Ê    §#8e0152’Ê=ÌÌÍ§#c51b7d’Ê>LÌÍ§#de77ae’Ê>™™š§#f1b6da’Ê>ÌÌÍ§#fde0ef’Ê?   §#f7f7f7’Ê?™š§#e6f5d0’Ê?333§#b8e186’Ê?LÌÍ§#7fbc41’Ê?fff§#4d9221’Ê?€  §#276419¯sequentialminusš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921¥yaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white­shapedefaults�¤line�¥color§#2a3f5fªhoverlabel�¥align¤left¦mapbox�¥style¥light¥polarƒ«angularaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6ªradialaxisƒ©gridcolor¥white¥ticks ©linecolor¥white¯autotypenumbers¦strict¤font�¥color§#2a3f5f§ternary„¥aaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6¥caxisƒ©gridcolor¥white¥ticks ©linecolor¥white¥baxisƒ©gridcolor¥white¥ticks ©linecolor¥white²annotationdefaultsƒ©arrowheadÊ    ªarrowwidthÊ?€  ªarrowcolor§#2a3f5f¬plot_bgcolor§#E5ECF6¥title�¡xÊ=LÌÍ¥sceneƒ¥xaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥zaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥yaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¨colorwayš§#636efa§#EF553B§#00cc96§#ab63fa§#FFA15A§#19d3f3§#FF6692§#B6E880§#FF97FF§#FECB52¤dataÞ ®scatterpolargl‘‚¤type®scatterpolargl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦carpet‘ƒ¥baxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¤type¦carpet¥aaxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¬scatterpolar‘‚¤type¬scatterpolar¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©parcoords‘‚¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©parcoords§scatter‘‚¤type§scatter¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ²histogram2dcontour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type²histogram2dcontourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921§contour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§contourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattercarpet‘‚¤type­scattercarpet¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦mesh3d‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type¦mesh3d§surface‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§surfaceªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattermapbox‘‚¤type­scattermapbox¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ªscattergeo‘‚¤typeªscattergeo¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©histogram‘‚¤type©histogram¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    £pie‘‚¤type£pieªautomarginÃªchoropleth‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤typeªchoropleth©heatmapgl‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©heatmapglªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921£bar‘„¤type£bar§error_y�¥color§#2a3f5f§error_x�¥color§#2a3f5f¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   §heatmap‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§heatmapªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­contourcarpet‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type­contourcarpet¥table‘ƒ¤type¥table¦header‚¤line�¥color¥white¤fill�¥color§#C8D4E3¥cells‚¤line�¥color¥white¤fill�¥color§#EBF0F8©scatter3d‘ƒ¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©scatter3d¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¨barpolar‘‚¤type¨barpolar¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   ©scattergl‘‚¤type©scattergl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    «histogram2d‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type«histogram2dªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921®scatterternary‘‚¤type®scatterternary¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦heightÊC–  ¦margin„¡lÊ    ¡bÊ    ¡rÊA   ¡tÊAð  ¥yaxisƒ¨tickvalsÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¥title�¤textªPlayer sum¨ticktextÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¥widthÊC–  ¦config…¨showLinkÂ¨editableÂªresponsiveÃªstaticPlotÂªscrollZoomÃ¦frames�¤data‘‰¤zmaxÊ?€  ¡yÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¤type§heatmapªcolorscale¥Greys¤zminÊ¿€  ¡zšÇ(  €?  €?  €?  €?  €?  €¿  €¿  €¿  €¿  €¿Ç(  €?  €¿  €¿  €¿  €¿  €¿  €¿  €¿  €¿  €¿Ç(  €?  €¿  €¿  €¿  €¿  €¿  €¿  €¿  €¿  €¿Ç(  €¿  €¿  €¿  €¿  €¿  €¿  €¿  €¿  €¿  €¿Ç(  €¿  €¿  €¿  €¿  €¿  €¿  €¿  €¿  €¿  €¿Ç(  €¿  €¿  €¿  €¿  €¿  €¿  €¿  €¿  €¿  €¿Ç(  €?  €?  €?  €?  €?  €¿  €¿  €¿  €¿  €¿Ç(  €?  €?  €?  €?  €?  €¿  €¿  €¿  €¿  €¿Ç(  €?  €?  €?  €?  €?  €¿  €¿  €¿  €¿  €¿Ç(  €?  €?  €?  €¿  €¿  €¿  €¿  €¿  €¿  €¿©transposeÃ©showscaleÂ¡xÇ(  €?   @  @@  €@   @  À@  à@   A  A   AÙ4c6e0de0c-3901-11f0-234e-bd09c571f662/aebe9ff9bf4a3c7„¦layout…¥xaxis‚¤type£log¥title�¤text´Episodes (log scale)¨template‚¦layoutÞ ©coloraxis�¨colorbar‚¥ticks ¬outlinewidthÊ    ¥xaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white©hovermode§closest­paper_bgcolor¥white£geo†©showlakesÃ¨showlandÃ©landcolor§#E5ECF6§bgcolor¥white¬subunitcolor¥white©lakecolor¥whiteªcolorscaleƒªsequentialš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921©diverging›’Ê    §#8e0152’Ê=ÌÌÍ§#c51b7d’Ê>LÌÍ§#de77ae’Ê>™™š§#f1b6da’Ê>ÌÌÍ§#fde0ef’Ê?   §#f7f7f7’Ê?™š§#e6f5d0’Ê?333§#b8e186’Ê?LÌÍ§#7fbc41’Ê?fff§#4d9221’Ê?€  §#276419¯sequentialminusš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921¥yaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white­shapedefaults�¤line�¥color§#2a3f5fªhoverlabel�¥align¤left¦mapbox�¥style¥light¥polarƒ«angularaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6ªradialaxisƒ©gridcolor¥white¥ticks ©linecolor¥white¯autotypenumbers¦strict¤font�¥color§#2a3f5f§ternary„¥aaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6¥caxisƒ©gridcolor¥white¥ticks ©linecolor¥white¥baxisƒ©gridcolor¥white¥ticks ©linecolor¥white²annotationdefaultsƒ©arrowheadÊ    ªarrowwidthÊ?€  ªarrowcolor§#2a3f5f¬plot_bgcolor§#E5ECF6¥title�¡xÊ=LÌÍ¥sceneƒ¥xaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥zaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥yaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¨colorwayš§#636efa§#EF553B§#00cc96§#ab63fa§#FFA15A§#19d3f3§#FF6692§#B6E880§#FF97FF§#FECB52¤dataÞ ®scatterpolargl‘‚¤type®scatterpolargl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦carpet‘ƒ¥baxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¤type¦carpet¥aaxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¬scatterpolar‘‚¤type¬scatterpolar¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©parcoords‘‚¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©parcoords§scatter‘‚¤type§scatter¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ²histogram2dcontour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type²histogram2dcontourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921§contour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§contourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattercarpet‘‚¤type­scattercarpet¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦mesh3d‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type¦mesh3d§surface‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§surfaceªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattermapbox‘‚¤type­scattermapbox¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ªscattergeo‘‚¤typeªscattergeo¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©histogram‘‚¤type©histogram¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    £pie‘‚¤type£pieªautomarginÃªchoropleth‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤typeªchoropleth©heatmapgl‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©heatmapglªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921£bar‘„¤type£bar§error_y�¥color§#2a3f5f§error_x�¥color§#2a3f5f¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   §heatmap‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§heatmapªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­contourcarpet‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type­contourcarpet¥table‘ƒ¤type¥table¦header‚¤line�¥color¥white¤fill�¥color§#C8D4E3¥cells‚¤line�¥color¥white¤fill�¥color§#EBF0F8©scatter3d‘ƒ¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©scatter3d¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¨barpolar‘‚¤type¨barpolar¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   ©scattergl‘‚¤type©scattergl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    «histogram2d‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type«histogram2dªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921®scatterternary‘‚¤type®scatterternary¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦legend�«orientation¡h¦margin„¡lÊBH  ¡bÊBH  ¡rÊBH  ¡tÊBp  ¥yaxis‚¥range×      @@¥title‚¨rotationÊB´  ¤textÙYMonte-Carlo estimate of <br> state value with <br> ordinary importance sampling (10 runs)¦config…¨showLinkÂ¨editableÂªresponsiveÃªstaticPlotÂªscrollZoomÃ¦frames�¤data›„ªshowlegendÂ¡yÈ\   @  €?   @ÍÌÌ?%I’?  €?Œ.:?%I?«ª*?   ?™™?ŠÆú>ÏÌÌ>×£>Ë=�>¡j>  P>K~1>ßæ/>·mÛ>KäW?çy.?\0/?z@5?Ô™$?M,%?¢t?ÔÍ?):Ý>Z³Í>¿h?Ù?l	?8Ë?6?èÖ?Š‡?=f?e;?¤â¢?Içš?ñ”?Á“?W�?ËÆ‰?è�?¿�?P÷‹?a³ˆ?‰†?“Ý�?ƒ�?,|?�†?®yƒ?¶®�?2f~?»á€?Ø}?®\y?t0�?è.Œ?+CŠ?GAŠ?Ø·Š?Þ`ˆ?(e†?Ä[ˆ?‹©†?*Dˆ?òA†?Ï€Œ?{�Š?ÿ"‰?r©‡?Á�†?“¾„?&ƒ?£�?··�?Õœ€?£O?·³|?Â{?ôèy?¢Æx?±w?v?*»t?Ër?Ñ$q?Üxo?6Õ~?ö}?¸‡z?D­y?�@w?k	u?ßs?]âq?Lt?_­s?¤r?Èªq?“u?™8u?¢Üs?Yòr?DMs?týr?‹	r?¦p?ô¶o?vn?Ö¼l?r›l?p-k?ý¶a?õ¯f?xje?pÍd?&‹c?:cb?}a?cå_?dç^?œ’`?*ƒ_?ÀË^?¼y^?SÊ]?]?]?•¯]?ßä_?Bô^?¹¡]?Ð\?!g\??{[?`§Z?ÃY?WZ?î/Y?l¸X?‰½W?‘®V?PMV?[nU?Ž[T?ÔˆS?ÔûR?*R?]–Q?–âP?jPQ?JQ?MgP?¤P?K+O?ßÑN?bWN?©öM?xUM?—ôL?C,M?#fL?L?†bL?²K?“†K?Ÿ	K?á|J?U=J?9J?ïÆJ?1)J?:�I?ŒúI?âEI?¾üH?aI?xÊJ?®hJ?(ÈI?å?I?m H?zNH?ÛÞG?J±H?ƒ#H?6¤G?yñF?ƒ[F?jÀE?{E?þüD?)¾D?ajD?¾4D?ÆC?C?1uB?N/B?V…A?PA?°¡A?B?"ÅA?…B?ñÿA?MA?0Í@?¢Ë@?¬†@?»/@?{w@?Ž^@?¼2@?n¸??DR??úß>?c>?×V>?dÝ=?X=?×_=?z>=?JÒ<?»K<?®<?/ß;?2°;?z'<?¦3<?Òü;?ö«;?Œj;?KH;?æÎ:?Çt:?Q):?Ü9?ä�9?&9?Ï¼8?´8?ß:?–š:?²Ò:?a‘:?c2:? :?îÙ9?$3:?�Ð9?½©9?O9?Å9?Ñ9?©°9?á˜9?XÕ9?–Ê9?1´9?……9?Jª9?b²;?OL;?ï@;?R;?Œã:?Ïµ:?¾±:?F¢:?Ž|:?˜:?›‚:?Ž:?wú9?Ø:? ±9?v_9?®L9?|í8?.4:?»þ9?M:?,.:?å:?FÇ9?�ä:?  ;?£à:?¥‘:?‡[:?R	:?Âá9?Uƒ9?¼e9?ö?9?Q2;?—Ð:?[{:?t“:?¨}:?¤y:?E:?à9?Ù{9?)9?ä×8?q‡8?Ÿ8?8?Ë8?Ç8?3´8?‚8?ú*8?ë<8?ý÷7?AÌ7?wˆ7?±Œ7?}n7?ü«7?‘^8?58?Ö‡8?è‚8?ÿž8?De8?à;8?P,8?õj8?18?8,8?$8?jÞ7?‘ˆ8?;E8?õ-8?o8?58?¦8?d8?ºÙ7?
’7?êS7?È7?ŸÏ6?Ýœ6?a6?ÿQ6?o6?;ê5?Ç5?í§5?¼¤5?ê|5?ôt5? +5?V9B?cîA?ôA?pïA?µÎA?Æ½A?D{A?ÈgA?¤BA?A? Â@?”}@?ÉŸ@?,r@?‡5@?èE@?j@?Ð¢@?œ�@?µ{@?½b@?Y<@?!@?‘î??Ž¶??zk?? /??Y$??7Ô>?‚¸>?úx>?Y;>?Ö>?Ö=?GÔ=?Ò�=?Ë>?åÞ=?¡=?U~=?0=?D =?nü<?—ÿ<?JÓ<?Ù½<?á†<?g‰<?äh<?¹O<?[*<?Oþ;?d)<?W!<?q<?q¹<?Bo<?|S<?‘+<?*é;?¯;?‰;?]G;?:;?›î:?;Ä:?|:?ÄÅ:?Š�:?�x:?/ã:?Ç:?V”:?>T:?!:?gP:?ï#:?Eç9?5 9?]w9?K_9?Ì“9?ël9?RK9?»f9?º@9?ª9?)í8?‹´8?F�8?DÐ8?­¶8?×À8?†8?>`8?GJ8?©E8?\8?Üù7?Ëð7?h¹7?èt7?E7?ÐX7?6<7?4r7?¨17?à7?¼Õ6?½Ã6?2Ü6?ë6?oØ6?Wª6?_l6?Ô²6?Ð²6?=Ô6?©Ã6?¯Ù6?Ø¶6?Ï•6?mÓ7?g¿7?^œ7?K‹7?#´7?x•7?V8?c#8?—ø7?.Ý7?Îµ7?§ž7?Ye7?Ï=7?7?~Ö6?¶6?Q´6?n”6?he6?òB6?u46?€16?H²6?Ê,7?þý6?u7?Ó"9?Wý8?¦ù8?>Ö8?Æ�8?Ûx8?½k8?VV8?“+8?f8?©+8?i’8?	j8?,\8?¢78?tN8?Î;8?Ö8?O58?t88?P8?Ÿ"8?U!8?í8?Ãò7?eÁ7?ðŽ7?dŠ7?lv7?˜7?g7?.–7?0p7??è7?í9?a¾9?;ˆ9?.‹9?Lm9?\V9?¬H9?{F9?ð29?Ÿ!9?ò÷8?"Ó8?Ž-9?ÿ­9?‰–9?ýf9?0\9?¼C9?�œ:?g;?”ä:?ßû:?Bß:?‘·:?»”:?Ù�:?x_:?„H:?%a<?Q>?!>?†>?ðæ=?úá=?ä½=?�=?Zn=?÷J=?t.=?	=?=?d=?¸=?–"=?%è<?ÿ<?·â<?`ú<?�Ù<?¨Ä<?kÉ<?ðË<?…Ð<?m£<?‡l<?ýB<?>?æ>?2ð=?œÌ=?ÃÙ=?ûä=?a½=?ï³=?H~>?¥a>?÷o>?Â?>?C�>?æ_>?ë@>?u>?±>?û>?7>?XÖ=?*®=?¾=?8·=?š=?Èå>?4Ý>?w»>?ñŽ>?N‚>??a>?L>?c4>?@>?ß;>?µ'>?Þ>?>?«è=?r¾=?'Ÿ=?‚Œ=?BŒ=?‡_=?ée=?=A=?Ñ6=?"=?ø<?š=?ü<?ýä<?Á<?±±<?áÎ<?÷¡<?ç†<?�…<?Ów<?Ìk<?p<?/><?­#<?Ýû;?YÝ;?¢¿;?Ø¯;?¹;?ß<?*î;?¿Ü;?rá;?X×;?~7<?n6<?H<?ü;?Aè;?Èþ;?®ä;?ÚÄ;?\¥;?ª—;?!Œ;?á$=?ü<?;á<?>¹<?ü¬<?#È<?a¯<?˜†<?a]<?7<?Ù <?•<?fó;?ÌÕ;?#»;?Î•;?vq;?ÃZ;?zg;?ly;?{;?#Œ;?Ìq;?ß{;?W;?.D;?f;?†;?/;?ƒ ;?tø:?É9;?ã;?�;?éy;?äŸ;?™�;?Öp;?mE;?q;?AH;?¹1;?ù;?´ô:?;Ö:?6Å:?';?Éý:?Òÿ:?m;?�;?)ÿ:?8;?éÿ:?ië:?„Ë:?d²:?h™:?óu:?¿\:?$G:?„*:?*:?`:?úT:?y˜:?ª‹:?üj:?9\:?}S:?î<:?.:?Ï:?Sì9?%Ý9?¸È9?Té9?w×9?ßÈ9?bÐ9?Y°9?µ9?ª 9?Àz9?‹l9?ÿV9?°@9?*K9?ê79?Û(9?f9?d9?
ü8?ÈÞ8?ýÌ8?
ª8?ˆ8?†l8?¯Â8?Z—8?Ø8?&Ñ8?ê·8?³¬8?ÿ­8?-¡8?H¯8?¡–8?ûŠ8?—|8?r8?•i8?àw8?
b8?t[8?w?8?$=8?$8?#8?6á8?@È8?ã¾8?¡8?ï¬8?·–8?§œ8?ù„8?Ym8?¡8?P�8?Öš8?�~8?	Y8?»<8?Í28?ñA8?78?o-8?T8?Âj8?�Q8?óU8?ýù8?æå8?Kì8?>Õ8?ÈÇ8?!­8?š8?y�8?n„8?œm8?V8?«M8?š:8?“N8?
18?8?wþ7?á7?;ì7?ñ38?'*8?áp8?íY8?³98?E"8?38?£8?8P8?ÝA8?Œ58?7#8?Ó8?Í8?ÿ8?Ùí7?Ôâ7?»Ô7?:æ7? ×7?¿à7?P¿7?Àj8?Êk8?ŸR8?@8?á'8?'8?|ì7?zÒ7?SÈ7?Í7?�±7?¨˜7?‰7?z7?BV7?T7?š;7?œ-7?k7?Çù6?Kç6?ÙÓ6?ˆ´6?f«6?”6?§6?:‰6?—l6?]�6?=n6?÷g6?Â\6?A6?ŠZ6?ÍE6?Q'6?R6?6?ðþ5?ðé5?NÓ5?hÌ5?`¸5?e—5?Yz5?^5?$W5?Š5?§‚5?òl5?3\5?2öG?¤type§scatter¡xÈ\  €?   @  @@  €@   @  À@  à@   A  A   A   A  ðA   B  HB  pB  ŒB   B  ´B  ÈB  HC  –C  ÈC  úC  D  /D  HD  aD  zD  úD €;E  zE @œE €»E ÀÚE  úE  F @F à+F €;F  KF ÀZF `jF  zF Ð„F  ŒF p”F @œF ¤F à«F °³F €»F PÃF  ËF ðÒF ÀÚF �âF `êF 0òF  úF è G ÐG ¸G  G ˆG pG XG @G ( G $G ø'G à+G È/G °3G ˜7G €;G h?G PCG 8GG  KG OG ðRG ØVG ÀZG ¨^G �bG xfG `jG HnG 0rG vG  zG è}G è€G Ü‚G Ð„G Ä†G ¸ˆG ¬ŠG  ŒG ”ŽG ˆ�G |’G p”G d–G X˜G LšG @œG 4žG ( G ¢G ¤G ¦G ø§G ì©G à«G Ô­G È¯G PÃG DÅG 8ÇG ,ÉG  ËG ÍG ÏG üÐG ðÒG äÔG ØÖG ÌØG ÀÚG ´ÜG ¨ÞG œàG �âG „äG xæG lèG `êG TìG HîG <ðG 0òG $ôG öG øG  úG ôûG èýG ÜÿG è H âH ÜH ÖH ÐH ÊH ÄH ¾H ¸H ²	H ¬
H ¦H  H šH ”H ŽH ˆH ‚H |H vH pH jH dH ^H XH RH LH FH @H :H 4H .H ( H "!H "H #H $H 
%H &H þ&H ø'H ò(H ì)H æ*H à+H Ú,H Ô-H Î.H È/H Â0H ¼1H ¶2H °3H ª4H ¤5H ž6H ˜7H ’8H Œ9H †:H €;H z<H t=H n>H h?H b@H \AH VBH PCH JDH DEH >FH 8GH 2HH ,IH &JH  KH LH MH NH OH PH üPH öQH ðRH êSH äTH ÞUH ØVH ÒWH ÌXH ÆYH ÀZH º[H ´\H ®]H ¨^H ¢_H œ`H –aH �bH ŠcH „dH ~eH xfH rgH lhH fiH `jH ZkH TlH NmH HnH BoH <pH 6qH 0rH *sH $tH uH vH wH xH yH  zH úzH ô{H î|H è}H â~H ÜH k€H è€H e�H â�H _‚H Ü‚H YƒH ÖƒH S„H Ð„H M…H Ê…H G†H Ä†H A‡H ¾‡H ;ˆH ¸ˆH 5‰H ²‰H /ŠH ¬ŠH )‹H ¦‹H #ŒH  ŒH �H š�H ŽH ”ŽH �H Ž�H �H ˆ�H ‘H ‚‘H ÿ‘H |’H ù’H v“H ó“H p”H í”H j•H ç•H d–H á–H ^—H Û—H X˜H Õ˜H R™H Ï™H LšH ÉšH F›H Ã›H @œH ½œH :�H ·�H 4žH ±žH .ŸH «ŸH ( H ¥ H "¡H Ÿ¡H ¢H ™¢H £H “£H ¤H �¤H 
¥H ‡¥H ¦H �¦H þ¦H {§H ø§H u¨H ò¨H o©H ì©H iªH æªH c«H à«H ]¬H Ú¬H W­H Ô­H Q®H Î®H K¯H È¯H E°H Â°H ?±H ¼±H 9²H ¶²H 3³H °³H -´H ª´H 'µH ¤µH !¶H ž¶H ·H ˜·H ¸H ’¸H ¹H Œ¹H 	ºH †ºH »H €»H ý»H z¼H ÷¼H t½H ñ½H n¾H ë¾H h¿H å¿H bÀH ßÀH \ÁH ÙÁH VÂH ÓÂH PÃH ÍÃH JÄH ÇÄH DÅH ÁÅH >ÆH »ÆH 8ÇH µÇH 2ÈH ¯ÈH ,ÉH ©ÉH &ÊH £ÊH  ËH �ËH ÌH —ÌH ÍH ‘ÍH ÎH ‹ÎH ÏH …ÏH ÐH ÐH üÐH yÑH öÑH sÒH ðÒH mÓH êÓH gÔH äÔH aÕH ÞÕH [ÖH ØÖH U×H Ò×H OØH ÌØH IÙH ÆÙH CÚH ÀÚH =ÛH ºÛH 7ÜH ´ÜH 1ÝH ®ÝH +ÞH ¨ÞH %ßH ¢ßH àH œàH áH –áH âH �âH ãH ŠãH äH „äH åH ~åH ûåH xæH õæH rçH ïçH lèH éèH féH ãéH `êH ÝêH ZëH ×ëH TìH ÑìH NíH ËíH HîH ÅîH BïH ¿ïH <ðH ¹ðH 6ñH ³ñH 0òH ­òH *óH §óH $ôH ¡ôH õH ›õH öH •öH ÷H �÷H øH ‰øH ùH ƒùH  úH }úH úúH wûH ôûH qüH îüH kýH èýH eþH âþH _ÿH ÜÿH€, I k I€© I è I€&I eI€£I âI€ I _I€�I ÜI€I YI€—I ÖI€I SI€‘I ÐI€I MI€‹I ÊI€I GI€…I ÄI€I AI€I ¾I€üI ;I€yI ¸I€öI 5	I€s	I ²	I€ð	I /
I€m
I ¬
I€ê
I )I€gI ¦I€äI #I€aI  I€ÞI I€[I šI€ØI I€UI ”I€ÒI I€OI ŽI€ÌI I€II ˆI€ÆI I€CI ‚I€ÀI ÿI€=I |I€ºI ùI€7I vI€´I óI€1I pI€®I íI€+I jI€¨I çI€%I dI€¢I áI€I ^I€œI ÛI€I XI€–I ÕI€I RI€�I ÏI€I LI€ŠI ÉI€I FI€„I ÃI€I @I€~I ½I€ûI :I€xI ·I€õI 4I€rI ±I€ïI .I€lI «I€éI ( I€f I ¥ I€ã I "!I€`!I Ÿ!I€Ý!I "I€Z"I ™"I€×"I #I€T#I “#I€Ñ#I $I€N$I �$I€Ë$I 
%I€H%I ‡%I€Å%I &I€B&I �&I€¿&I þ&I€<'I {'I€¹'I ø'I€6(I u(I€³(I ò(I€0)I o)I€­)I ì)I€**I i*I€§*I æ*I€$+I c+I€¡+I à+I€,I ],I€›,I Ú,I€-I W-I€•-I Ô-I€.I Q.I€�.I Î.I€/I K/I€‰/I È/I€0I E0I€ƒ0I Â0I€ 1I ?1I€}1I ¼1I€ú1I 92I€w2I ¶2I€ô2I 33I€q3I °3I€î3I -4I€k4I ª4I€è4I '5I€e5I ¤5I€â5I !6I€_6I ž6I€Ü6I 7I€Y7I ˜7I€Ö7I 8I€S8I ’8I€Ð8I 9I€M9I Œ9I€Ê9I 	:I€G:I †:I€Ä:I ;I€A;I €;I€¾;I ý;I€;<I z<I€¸<I ÷<I€5=I t=I€²=I ñ=I€/>I n>I€¬>I ë>I€)?I h?I€¦?I å?I€#@I b@I€ @I ß@I€AI \AI€šAI ÙAI€BI VBI€”BI ÓBI€CI PCI€ŽCI ÍCI€DI JDI€ˆDI ÇDI€EI DEI€‚EI ÁEI€ÿEI >FI€|FI »FI€ùFI 8GI€vGI µGI€óGI 2HI€pHI ¯HI€íHI ,II€jII ©II€çII &JI€dJI £JI€áJI  KI€^KI �KI€ÛKI LI€XLI —LI€ÕLI MI€RMI ‘MI€ÏMI NI€LNI ‹NI€ÉNI OI€FOI …OI€ÃOI PI€@PI PI€½PI üPI€:QI yQI€·QI öQI€4RI sRI€±RI ðRI€.SI mSI€«SI êSI€(TI gTI€¥TI äTI€"UI aUI€ŸUI ÞUI€VI [VI€™VI ØVI€WI UWI€“WI ÒWI€XI OXI€�XI ÌXI€
YI IYI€‡YI ÆYI€ZI CZI€�ZI ÀZI€þZI =[I€{[I º[I $tI„ªshowlegendÂ¡yÈ\      €?ÿÿÿ>ªªª>ÿÿ>8Žc>‹.:>Ø‰>$I>ˆˆ>Ê=�>ÈÈH>‹.:>"I>íðð=3x>ÄNl>Çg]>¹äA>ÃÌÌ=KìD>™Q†>{q>qES>7Q>µrT>d²>¼RÁ>BsÞ>D\Ý>Ö<Ì>"·Î>ÙÒ>œfè>}ûä>¾™í>~è>‰Óí>1¸ø>’ ?^y?íf�?ÚoŒ?€X‰?Iý„?¾‰€?zùw?.r?Œ¾j?š=e?ŠÛa?¥^?ðY?z%X?;ÓT?‘S?�O?GVN?CïJ?Á·K?º*I?èG?GsE?QÇD?ªE?'ºC?WÉA?	??o=?]·;?n~<?]¯=?,@?Åè>?uCC?êÑ@?:]A?çt??¶¾>?5/=?øD;?Ö‚9?Å=?�Œ>?R=?ñè;?Ìò:?Ù¸9?‰H=?üÇ<?p;?œ¿:?„ÿ<?¼=<?m	<?Æ;?\™9?ó’9?IÑ9?Ø¢<?¤¸=?jY<?M;?€[;?€':?;m:?b£9?×$9?Ae8?S7?
6?ðX5?Èa5?åQ4?›H3?ÿÏ2?1¹3?d?;,c?ŒPb?V,a?`?h‘_?lÀ^?¡]?:Œ\?4]?¹#\?ì'[?ÏÓY?ý X?*ªX?$ŒZ?Ÿ­Y?½ÚX?UtX?ü[W?Ã�W?€°[?#�Z?.êZ?r^^?„O]?£e\?%Q[?;~Z?�kZ?�øY?ÙˆY?2^X?úfW?MÝV?‡ÇX?æAX?×¤W?,W?ì¬W?,,W?MfX?¥™W?aÁV?Y‹V?ÒlV?ÁW?'V?ÃFW?º¾V?ÔcV?]GW?€‘V?±U?ûÜT?¸-T?ò`S?†ÖR?i�R?¬-R?HQ?ƒQ?€ºP?ñCP?d�O?~:P?!gO?ÌæN?y[N?'×M?ß¯M?]$O?â{N?ÑPN?`ËN?¸FN?�{M?Ú<M?àªL?M?_^L?ï©K?s^K?(K?­?K?‘ÂJ?Û¡J??bJ?ð´I?_GI?ÛH?w¨H?0H?zþG?ÏoG?èG?›TG?:ÜF?ð’G?.QG?ÿÂF?G?îÚG?!ÉG?’âG?Ÿ}G?^úG?äÐG?§ÃG?ìWG?¯;G?!¸F?5F?AÖE?&WE?òFE?*E?¯¯D?{·D?Ï D?�ÚC?³C?5C?pÔB?ê¼B?7žB?¦`B?�ÚA?ä²U?ezV?¹V?Ÿ¦Z?©©Z?¤YZ?¥Z?zÈY?BBY?ƒiY?BUY?éX?¹’X?W8X?)ùW?² W?Ö=W?f8X?iX?h²W?YTX?%.X?HéX?6wX?�sX?îEX?}SX?HÚW?X?'ŸW?ÜW?¶$W?íV?„V?Ü*V?‹§U?¼cU?	U?'©T?ôTT?XT?i«S?pùS?,�S?èIS?S?ÆS?ÍŸR?Þ R?­R?OÄQ?p’Q?ÀQ?žÕP?«¹P?é^R?ÄR?8·R?[JR?â'R?	ÐQ?È`Q?>Q?·êP?Ê¶P?£eP?nP?“úO?G­O?[6P?§ìO?,‘O?¿O?9cO?ÃkO?à?O?O?šÚN?v¤N?iN?E+N?6ûM?®¶M?‡XM?¶RM?AçL?—�L?¯™L?'SL?ŸÿK?@»K?·ÕK?%ÇK?€rK?œ#K?ñ'K?ÊJ?�UK?GK?CUK?VK?áJ?×ÆJ?yJ?ó+J?ÖãI?òÂI?=‰I?#>I?ÔñH?¢>I?NôH?vI?ÊH?}ªH?WH?2YH?³#H?FJH?CH?Ã4H?FðG?×ÂG?ËyG?“YG?BG?ôîF?Ð¤F?YF?äF?;ÍE?
F?,ÊE?CL?×ÇK?.fK?û[K?ÎK?DÃJ?&›J?ð[J?±J?N
J?ÎÄI?5vI?éYI?u;I?ª_I?ëEI?bI?”ÑH?.§H?…cH?€OH?¿H?‚ H?yÑG?çÑG?åÈG?��G?‹rG?*:G?Æ†G?©YG?~šG?¨|G?�CG?îG?ýºF?‘F?ß4F? øE?F?õßE?ÔÃE?ã�E?²QE?a)E?%ôD?]ÇD?i„D?’ÅD?‹D?RˆD?ÅKD?aD?yéC?ÞE?m˜E?DF?$JF?ù„F?‰úF?šöF?'ÇF?ì‰F?ÊžF?”tF?ÊRF?rðF?–ÏF?Ì‹F? AF?kF?ž3F?5:[?J#[?ÍÌZ?;‚Z?'iZ?47Z?õ'Z?¹ÙY? ŠY?Š@Y?ÿ [?›K[?gN[?+[?\üZ??¸Z?±ÉZ?T†Z?l_Z?ÉZ?sËY?[ÎY?Ô•Y?f]Y?ñCY?þ7Y?4ûX?;hZ?ýIZ?Z*Z?¢çY??ÐY?”ŽY?[Y?î5Y?Ï
Y?/%Y?
ïX?ÞŸX? dX?ä!X?ùW?@çW?�¼W?,“W?XdW?R.W?ŠW?BÏV?ÞžV?˜VV?ž-V?•5V?�"V?`‹V?EAV?¡UV?UV?V?UàU? ¡U?ÂµU?>‰U?oU?åCU? ÿT?©ÐT?°>U?!U?4íT?ÑªT?›�T?�rT?2IT?oLT?Þ2T?uT?WÒS?¬ÅS?|­S?©zS?oSS?øS?LèR?èR?À±R?LÝT?NÐT?¬žT?ÜõT?ÆT?¸T?²?T?á
T? ìS?jâS?u«S?#‰S?ÌáS?/´S?ªˆS?ðNS?kS?¥<S?}S?¼4S?ðþR?ÎR?CÕR?àÏR?¨—R?ægR?åBR?R?ËÙQ?½›Q?ÍzQ?›MQ?¶#Q?™Q?'#Q?’úP?VÝP?RÒP?V¨P?'{P?_OP?µP?¿æO?\9P?H/P?xJP?2P?-+P?óP?�ÖO?R¡O?ÍzO?@[O?iHO?&O?KûN?IâN?j±N?þ‹N?†N?ìXN?óFN?ýBN?§•N?xN?kN?›VN?Û(N?ÜìM?d¼M?û–M?NvM?\\M?]zM?kZM?è<M?^
M?×ÖL?Ð±L?…†L?ægL?ŠKL?àL?üýK?íL?fêK?gÉK?C§K?ÈŠK?—aK?²CK?[K?®FK?"IK?(8K?§K?îK?ØÞJ?uäJ?J¿J?�J?UUJ?_ZJ?&%J?,ÿI?ÏÜI?j§I?T…I?CMI?eI?¸(I?+÷H?ŒÌH?Þ«H?íÍH?]¯H?\‹H?ÿ^H?!8H?ÆH?¾H?cÞG?ñßG?ŽH?ÒH?°òG?zGH?ÎeH?žÒH?åSL??8L?UL?ÌùK?ÜÕK?ÏîK?‰»K?²�K?E|K?³IK?ý0K?eK?£ÞJ?àJ?‡*K?_;K?E,K? K?»sK?ÎmK?ÒWK?°FK?Ü0K?úK?…åJ?¢ÖJ?4©J?¯yJ?z^J?íQJ?*CJ?ž(J?[J?[øI?rÈI?”¯I?Ä…I?‹P?^3Q?g6Q?’Q??Q?×&Q? Q?`ÓP?œP?ÿÇP?¢P?þ~P?÷”P?ågP?	?P?x)P?ùO?ÕO?Ÿ©O?=O?æSO?Û,O?äLO?iCO?+O?·O?PùN?‘äN?�$O?c2O?0jO?¦bO?8QO?d?O?8O?O=O?Ä6O?åO?¢åN?FçN?XÀN?ö¶N?'�N?s N?ÎWO?[3O?\O?XO?œòN?míN?ÌßN?�ðN?\ÎN?~¹N?ÑN?ÆN?3¶N?—N?ÛwN?RN?ô:N?SN?0 N?¦ÚM?´M?qŒM?L_M?ñ7M?ÈM?ï&M?½)M?M?s×L?SäL?ì¸L?ï’L?�L?½ÑL?0ãL?HÀL?¥L?xŒL?VsL?�KL?¶*L?”L?ðQL?u=L?“"L?#L?WL?åòK?îøK?òÛK?šµK?f›K?AŸK?²�K?kØK?eÅK?Ö¨K?ÕˆK?ªgK?|QK?¤(K?ÖK?÷J?eÚJ?HÊJ?ÁÕJ?ÈÆJ?z¼J?ò J?¬šJ?ŒuJ?<`J?ÚRJ?@?J?0,J?Ý
J?^ëI?ôÑI?œJ?NêI?8ÕI?¾I?ãrJ?ØZJ?>aJ?¯yJ?Â^J?qiJ?Q?J?,J?åJ?Ô÷I?ÞÑI?n¸I?p¶I?å·I?t¥I? …I?¹‹I?ÈkI?o«I?|ìJ?ÉüJ?ÒîJ?éJ?ÍÅJ?vÕJ?ãàJ?ììJ?åÃJ?·­J?‰¹J?D–J?cqJ?%NJ?%)J?äJ?vJ?éJ?ÁäI?øÌI?i¹I?E˜I?ˆ‚I?†_I?ïÎI?Î¶I? šI?i•I?}IL?æ#L?8L?ÖûK?_íK?ÏK?y²K?OÆK?9]N?EN?h+N?ÌN?ïM?8ñM?¤áM?XÂM?0«M?#”M?®–M?ÈyM?ŠkM?_VM?VPM?L<M?á M?O¡O?Õ¤O?jŽO?‡yO?ð€O?$vO?›UO?	cO?óCO?zAO?¤-O?G)O?&O?òO?-þN?uöN?_÷N?Ú÷N?ð¬L?¤type§scatter¡xÈ\  €?   @  @@  €@   @  À@  à@   A  A   A   A  ðA   B  HB  pB  ŒB   B  ´B  ÈB  HC  –C  ÈC  úC  D  /D  HD  aD  zD  úD €;E  zE @œE €»E ÀÚE  úE  F @F à+F €;F  KF ÀZF `jF  zF Ð„F  ŒF p”F @œF ¤F à«F °³F €»F PÃF  ËF ðÒF ÀÚF �âF `êF 0òF  úF è G ÐG ¸G  G ˆG pG XG @G ( G $G ø'G à+G È/G °3G ˜7G €;G h?G PCG 8GG  KG OG ðRG ØVG ÀZG ¨^G �bG xfG `jG HnG 0rG vG  zG è}G è€G Ü‚G Ð„G Ä†G ¸ˆG ¬ŠG  ŒG ”ŽG ˆ�G |’G p”G d–G X˜G LšG @œG 4žG ( G ¢G ¤G ¦G ø§G ì©G à«G Ô­G È¯G PÃG DÅG 8ÇG ,ÉG  ËG ÍG ÏG üÐG ðÒG äÔG ØÖG ÌØG ÀÚG ´ÜG ¨ÞG œàG �âG „äG xæG lèG `êG TìG HîG <ðG 0òG $ôG öG øG  úG ôûG èýG ÜÿG è H âH ÜH ÖH ÐH ÊH ÄH ¾H ¸H ²	H ¬
H ¦H  H šH ”H ŽH ˆH ‚H |H vH pH jH dH ^H XH RH LH FH @H :H 4H .H ( H "!H "H #H $H 
%H &H þ&H ø'H ò(H ì)H æ*H à+H Ú,H Ô-H Î.H È/H Â0H ¼1H ¶2H °3H ª4H ¤5H ž6H ˜7H ’8H Œ9H †:H €;H z<H t=H n>H h?H b@H \AH VBH PCH JDH DEH >FH 8GH 2HH ,IH &JH  KH LH MH NH OH PH üPH öQH ðRH êSH äTH ÞUH ØVH ÒWH ÌXH ÆYH ÀZH º[H ´\H ®]H ¨^H ¢_H œ`H –aH �bH ŠcH „dH ~eH xfH rgH lhH fiH `jH ZkH TlH NmH HnH BoH <pH 6qH 0rH *sH $tH uH vH wH xH yH  zH úzH ô{H î|H è}H â~H ÜH k€H è€H e�H â�H _‚H Ü‚H YƒH ÖƒH S„H Ð„H M…H Ê…H G†H Ä†H A‡H ¾‡H ;ˆH ¸ˆH 5‰H ²‰H /ŠH ¬ŠH )‹H ¦‹H #ŒH  ŒH �H š�H ŽH ”ŽH �H Ž�H �H ˆ�H ‘H ‚‘H ÿ‘H |’H ù’H v“H ó“H p”H í”H j•H ç•H d–H á–H ^—H Û—H X˜H Õ˜H R™H Ï™H LšH ÉšH F›H Ã›H @œH ½œH :�H ·�H 4žH ±žH .ŸH «ŸH ( H ¥ H "¡H Ÿ¡H ¢H ™¢H £H “£H ¤H �¤H 
¥H ‡¥H ¦H �¦H þ¦H {§H ø§H u¨H ò¨H o©H ì©H iªH æªH c«H à«H ]¬H Ú¬H W­H Ô­H Q®H Î®H K¯H È¯H E°H Â°H ?±H ¼±H 9²H ¶²H 3³H °³H -´H ª´H 'µH ¤µH !¶H ž¶H ·H ˜·H ¸H ’¸H ¹H Œ¹H 	ºH †ºH »H €»H ý»H z¼H ÷¼H t½H ñ½H n¾H ë¾H h¿H å¿H bÀH ßÀH \ÁH ÙÁH VÂH ÓÂH PÃH ÍÃH JÄH ÇÄH DÅH ÁÅH >ÆH »ÆH 8ÇH µÇH 2ÈH ¯ÈH ,ÉH ©ÉH &ÊH £ÊH  ËH �ËH ÌH —ÌH ÍH ‘ÍH ÎH ‹ÎH ÏH …ÏH ÐH ÐH üÐH yÑH öÑH sÒH ðÒH mÓH êÓH gÔH äÔH aÕH ÞÕH [ÖH ØÖH U×H Ò×H OØH ÌØH IÙH ÆÙH CÚH ÀÚH =ÛH ºÛH 7ÜH ´ÜH 1ÝH ®ÝH +ÞH ¨ÞH %ßH ¢ßH àH œàH áH –áH âH �âH ãH ŠãH äH „äH åH ~åH ûåH xæH õæH rçH ïçH lèH éèH féH ãéH `êH ÝêH ZëH ×ëH TìH ÑìH NíH ËíH HîH ÅîH BïH ¿ïH <ðH ¹ðH 6ñH ³ñH 0òH ­òH *óH §óH $ôH ¡ôH õH ›õH öH •öH ÷H �÷H øH ‰øH ùH ƒùH  úH }úH úúH wûH ôûH qüH îüH kýH èýH eþH âþH _ÿH ÜÿH€, I k I€© I è I€&I eI€£I âI€ I _I€�I ÜI€I YI€—I ÖI€I SI€‘I ÐI€I MI€‹I ÊI€I GI€…I ÄI€I AI€I ¾I€üI ;I€yI ¸I€öI 5	I€s	I ²	I€ð	I /
I€m
I ¬
I€ê
I )I€gI ¦I€äI #I€aI  I€ÞI I€[I šI€ØI I€UI ”I€ÒI I€OI ŽI€ÌI I€II ˆI€ÆI I€CI ‚I€ÀI ÿI€=I |I€ºI ùI€7I vI€´I óI€1I pI€®I íI€+I jI€¨I çI€%I dI€¢I áI€I ^I€œI ÛI€I XI€–I ÕI€I RI€�I ÏI€I LI€ŠI ÉI€I FI€„I ÃI€I @I€~I ½I€ûI :I€xI ·I€õI 4I€rI ±I€ïI .I€lI «I€éI ( I€f I ¥ I€ã I "!I€`!I Ÿ!I€Ý!I "I€Z"I ™"I€×"I #I€T#I “#I€Ñ#I $I€N$I �$I€Ë$I 
%I€H%I ‡%I€Å%I &I€B&I �&I€¿&I þ&I€<'I {'I€¹'I ø'I€6(I u(I€³(I ò(I€0)I o)I€­)I ì)I€**I i*I€§*I æ*I€$+I c+I€¡+I à+I€,I ],I€›,I Ú,I€-I W-I€•-I Ô-I€.I Q.I€�.I Î.I€/I K/I€‰/I È/I€0I E0I€ƒ0I Â0I€ 1I ?1I€}1I ¼1I€ú1I 92I€w2I ¶2I€ô2I 33I€q3I °3I€î3I -4I€k4I ª4I€è4I '5I€e5I ¤5I€â5I !6I€_6I ž6I€Ü6I 7I€Y7I ˜7I€Ö7I 8I€S8I ’8I€Ð8I 9I€M9I Œ9I€Ê9I 	:I€G:I †:I€Ä:I ;I€A;I €;I€¾;I ý;I€;<I z<I€¸<I ÷<I€5=I t=I€²=I ñ=I€/>I n>I€¬>I ë>I€)?I h?I€¦?I å?I€#@I b@I€ @I ß@I€AI \AI€šAI ÙAI€BI VBI€”BI ÓBI€CI PCI€ŽCI ÍCI€DI JDI€ˆDI ÇDI€EI DEI€‚EI ÁEI€ÿEI >FI€|FI »FI€ùFI 8GI€vGI µGI€óGI 2HI€pHI ¯HI€íHI ,II€jII ©II€çII &JI€dJI £JI€áJI  KI€^KI �KI€ÛKI LI€XLI —LI€ÕLI MI€RMI ‘MI€ÏMI NI€LNI ‹NI€ÉNI OI€FOI …OI€ÃOI PI€@PI PI€½PI üPI€:QI yQI€·QI öQI€4RI sRI€±RI ðRI€.SI mSI€«SI êSI€(TI gTI€¥TI äTI€"UI aUI€ŸUI ÞUI€VI [VI€™VI ØVI€WI UWI€“WI ÒWI€XI OXI€�XI ÌXI€
YI IYI€‡YI ÆYI€ZI CZI€�ZI ÀZI€þZI =[I€{[I º[I $tI„ªshowlegendÂ¡yÈ\        ÍÌÌ>«ªª>  €>ÍÌL>Œ.:>ªªª>Ø‰�>$I’>¯ÜS>�Âu>Ž1F>(¯!>õK¿>}©>‘>¾Ž>!„>b\>±qE>UT‰>3B�>Ú@œ>nVÝ>€îç>>|Ó>“BÍ>.»F?pÛ*?õ?¢Ø5?]µ?–B´?þß¢?dB–?`l‹?à¹ƒ?á |?u~? 5?ñy?›Õu?Rþn?›<n?óxl?³µi?Šët?ß�n?Kj?g[h?Çd?n–^?ûžq?•,q?‰­l?%j?5¾f?b�c?*ß^?ïM^?Ÿ�^?«�\?zàY?+–V?ÚíS?¥ïX?w¨W?ªU?(Åb?]6a?m„_?¥]?Á<^?d½\?¼’Z?-O\?äºZ?‡öW?'ªU?!cT?ÓþR?À†Q?<RP?O?M?—uL?qØJ?yàJ?·øH?Ï–G?B)F?�åD?�³D?Œ‡C?ÀáA?¬kA?ú@?E(??nY??[‹@?ß—???¡@?w(??Aj@?”??°k??d�>??k=?<Å<?#E<?e
;?P~:?Cd=?˜§<?¼ˆ;?² ;?ÿ4?�Õ3?–Y3?QÝ2?18?€å8?®åC?œHC?|šB?ùoD?½§D?p\D?Œ—D?ðîC?fBC?(—B?°*B?	B?’TA?;A?IU@?Û??”ï??–Ú??m¸C?#£C?RÓB?„VB?=QM?‰L?É³K?¹žK?S¯J?‘L??‹K?*ÒK?o¹K?ÐPK?¾×J?xDK?`7K?ö¯J?ºI?I0I?v÷H?ØOJ?¾†J? ÉI?î]J?8-J?ˆïI?TmI?cÆH?ŽI?¼˜I?I?‰ÁH?`7J?^Q?k”P?‚¬P?qP?#RP?ðzO?ÆÓN?ä N?J]M?]&M?—þL?[PL?B¯K?CÝK?”“K?5�K?ŒçJ?LmJ?›oJ?i&K?M˜J?žJ?~:J?{ðI?plI?ãßH?äÀH?Ð}I?…ÁJ?ålJ?`óJ?cßJ?ùVJ?õßI?yzI?Á.I?/I?îñH?þ°H?Î‹H?´ãS?°JS?^#S?*ŠR?DPR?
ÄQ?¿îQ?ŸjQ?“áP?©oP?ó!P?O½Q?±pQ?%Q?(€P?P?æŠO?ÂõN?ð°N?4˜N?_N?‹N?‰VN?JòM?
°M?ÈQM?„ÖM?¸¡M?¤hM?À£M?Þ;M?–uN?ÄVN?•ÛM?ãdM?æùL?qL?h%L?¥©K?Ë…K?°MK?íÍJ?ê]J?DJ?ÜŠI?	I?]ÒH?'DH?ôG?­ÈG?ŒtG?3G?JxG?1G?‹±F? �F?7pF?¯8H?7ìG?µªG?xßG?—§G?xpG?´/G?çÐF?ž€F?ï{F?†F?©E?& E?€%E?³âE?[¨E?|E?å¢E?`WE?ÞØD?†D?©@D?°óC?ó›C?[JC?/C?ñÝB?HéB?ÉÊB?•B?íCB?ýÔA?W¸A?ÂA?¯¥A?wA?A?RÖ@?’A?—Ç@?�{@?aì@?Ç¦@?w@?ïi@?
F@?±ö??áµ??×z??°X??òh??=/??7€??³Y??â??‚¥>?W>?†ÉA?±ÜA?Ê~A?í…A?.UA?Bú@?”–B?]B?;B?LïA?tàA?¥A?lA?(A?3ä@?lª@?1¿@?–}@?„s@?Ô@?½�A?EjA?šuA?ÑA?Ç�A?fYA?¯A?Ý¼@?xt@?Vm@?+t@?d\@?ª&@?†@?—Ò??l¼??}??[ž??I??Æþ>?#??¥ý>?Úõ>?Á>?!"??×à>?*¡>?™`>?E¡>?à`>?lY>?c>?Ç1>?‹9>?!W>?‹>?Pà=?þ>?D >?9ö=?…>?pÈ=?VK>?È>?íë=?Æä=?7Ï=? =?w=?Àx=?°¹=?ß=>?ÄE>?–>?ØË=?�©=?ìˆ=?(j=?äÇ=?dø=?@
>?°×=?ªˆ=?±@=?”€=?s]=?$º>?+??$&??´ý>?"??f??9ç>?’Ì>?o´>?ªÜ>?)«>?Ff>?f4>?¨)>?´ã=?®é=? Ö=?zÅ=?Y§=?`¯=?A†=?»ª>?Î»>?j§>?y]>?«%>?Á>?¥Í=?ªÀ=?�Ð=?¹–=?DÍB?ZC?áôB?C)C?I!C?dC?¸3C?"C?C?1C?±ÙB? B?�B?ÿpB?xmB?\B?ˆ[B?à@B?ë÷A?+ÙA?µA?+ÜA?}«A?Š¡A?Ý�A?ÌTA?Þ1A?nA?Bô@?öÔ@?8Ò@?Ù @?ùc@?#M@?o@?Ç??IÈ??G¿??Rœ??z•??¤??È|??{R??¯/????Êó>?åÔ>?j»>?‘ˆ>?+t>?j€>?›>?-v>?GE>?ï
>?5î=?bÒ=?³'>?‚>?­õ=?À=?›=?Dv=?õ^=?÷,=?L=?à=?¦=?/å<?%é<?	¸<?`z<?1\<?B<?Y@<?d"<?ÿ;?Õ<?å;?§	<?Wê;?”ù;?<?8ý;?7Þ;?HÕ;?Ã ;?:©;?ÅÜ;?²ª;?Ùy;?ú>;?þ;?¯P;?�7;?7/;?$;?ç:?9ë:?:Ö:?Â½:?�Ÿ:?W‡:?�]:?­\:?È,:?5A:?Ô:?™þ9?2ß9?Î­9?Û|9?:b9?†99?qC9?z.9?¤"9?µ9?Çû8?•ã8?Ø²8?‚–8?Ít8?¦`8?jE8?*-8?ÛB8?8$8?S8?f78?B8?„-8?î8?Óñ7?GÓ7?ü8?ß7?8Ý7?D´7?9£7?7?xc7?î@7?ã+7?éW7?È47?D7?X7?±ô6?Âí6?!à6?Ä6?Ó¦6?Ò6?3²6?o�6?r‡6?`i6?–@6?ç6?\6?>ø5?%Í5?žÅ5?­°5?%¤5?ó“5?“5?¶n5?p”5?¦~5?àe5?¯85?¾5?à5?¹ú4?‚Ø4?m½4?¦«4?º…4?Êf4?»D4?Ù4??ó3?x×3?+À3?t—3?xŒ3? p3?Žq3?R{3?ÀQ3?=h3?·‚3?]i3?>A3?ü.3?¨^3?�T5?ê:5?ç5?¢	5?§Û4?±À4?™4?®}4?¾v4?4?„e4?®B4?,4?Ä4?Œø3?ò�4?¿†4?"{4?Ns4?£n4?Z4?w@4? #4?¸$4?y4?
4?Wa4?÷=4?f�4?.t4?'r4?-u4?ÑU4?&]4?AS4?ÔE4?ê@4?“]4??4?Ó*4?#4? é3?BÂ3?e«3?ƒ–3?‰3?4Š3?WY4?œ«4?C4?êu4?DZ4?ÓP4?f.4?ùÿ3?¥ð3?;Ú3?¬Ú3?¨Â3?�«3?§Õ3?tà3?nà3?NÄ3?äÇ5?Þ§5?È\6?òÂ6?º6?Ã¹6?™ž6?Ø7?017?Ó*7?Ö7?s7?4é6?hÐ6?óÏ6?Ó¯6?³¢6?þŒ6?"}6?Õa6?ò^6?ry6?tf6?OR6?úT6?¡6?[6?ÙK6?¹86?ýC?yÖB?ö.C?@	C?îB?þÊB?*«B?è†B??zB?ûgB?åOB?Š?B?B?LB?lÜA?	¾A?6ÈA?³ A?{“A?ÐnA?‚kA?8wA?ƒuA?<XA?MA?2A?ÍMA?eA?fFA?)1A?ÕA?wA?ÃA?×A?é?A?Õ<A?©)A?GA?�qB?ÇZB?ùC?íúB?ÍóB?‹äB?;îB?ŸÙB?–C?GìB?jÜB?ñØB?¥ÃB?c®B?¤B?ò‚B?‘tB?OaB?pB?ìZB?ÞLB?´6B?ú%B?/B?3"B?î1B?f(B?B?èB?iýA?íîA?òÈA?W¶A?œA?^‰A?¢iA?uNA?Ä=A?(A?6A?¬ó@?Ù@?«±@?ž”@?Rs@?½]@?öA@?D@?äõ??I@?Œó??Åß??ŒÍ??¢º??g¤??Œš??éá??ÞÖ??Ð??uÆ??3¦??‘‡??âs??0p??CZ??¶n??àO??„@??–'??[@??’-??ÈL??a[??fU??ó7??KU??Ü@??Jè??Ú??âË??�@?çw@?§‰@?;i@?áw@?ž~@?!�@?íÄ@?R³@?ë˜@?·�@?Ær@?‡…@?Þ}@?"�@?B…@?ûv@?ÅZ@?ûI@?ë1@?€@?b@?Æú??ßù??ºß??ºÄ??r@?‘@?©ë??ZÒ??-Ò??‹Ì??¹??Iº??•??¿…??†|??vx??A\??]??ˆ;??�$??E"??z??Ì??Ù??í??Øå>?	Û>? D?)D?­gN?øON?£DN?„*N?£dN?IDN?¸@N?8,N?;"N?"N?*ïM?™N?¹R?¤type§scatter¡xÈ\  €?   @  @@  €@   @  À@  à@   A  A   A   A  ðA   B  HB  pB  ŒB   B  ´B  ÈB  HC  –C  ÈC  úC  D  /D  HD  aD  zD  úD €;E  zE @œE €»E ÀÚE  úE  F @F à+F €;F  KF ÀZF `jF  zF Ð„F  ŒF p”F @œF ¤F à«F °³F €»F PÃF  ËF ðÒF ÀÚF �âF `êF 0òF  úF è G ÐG ¸G  G ˆG pG XG @G ( G $G ø'G à+G È/G °3G ˜7G €;G h?G PCG 8GG  KG OG ðRG ØVG ÀZG ¨^G �bG xfG `jG HnG 0rG vG  zG è}G è€G Ü‚G Ð„G Ä†G ¸ˆG ¬ŠG  ŒG ”ŽG ˆ�G |’G p”G d–G X˜G LšG @œG 4žG ( G ¢G ¤G ¦G ø§G ì©G à«G Ô­G È¯G PÃG DÅG 8ÇG ,ÉG  ËG ÍG ÏG üÐG ðÒG äÔG ØÖG ÌØG ÀÚG ´ÜG ¨ÞG œàG �âG „äG xæG lèG `êG TìG HîG <ðG 0òG $ôG öG øG  úG ôûG èýG ÜÿG è H âH ÜH ÖH ÐH ÊH ÄH ¾H ¸H ²	H ¬
H ¦H  H šH ”H ŽH ˆH ‚H |H vH pH jH dH ^H XH RH LH FH @H :H 4H .H ( H "!H "H #H $H 
%H &H þ&H ø'H ò(H ì)H æ*H à+H Ú,H Ô-H Î.H È/H Â0H ¼1H ¶2H °3H ª4H ¤5H ž6H ˜7H ’8H Œ9H †:H €;H z<H t=H n>H h?H b@H \AH VBH PCH JDH DEH >FH 8GH 2HH ,IH &JH  KH LH MH NH OH PH üPH öQH ðRH êSH äTH ÞUH ØVH ÒWH ÌXH ÆYH ÀZH º[H ´\H ®]H ¨^H ¢_H œ`H –aH �bH ŠcH „dH ~eH xfH rgH lhH fiH `jH ZkH TlH NmH HnH BoH <pH 6qH 0rH *sH $tH uH vH wH xH yH  zH úzH ô{H î|H è}H â~H ÜH k€H è€H e�H â�H _‚H Ü‚H YƒH ÖƒH S„H Ð„H M…H Ê…H G†H Ä†H A‡H ¾‡H ;ˆH ¸ˆH 5‰H ²‰H /ŠH ¬ŠH )‹H ¦‹H #ŒH  ŒH �H š�H ŽH ”ŽH �H Ž�H �H ˆ�H ‘H ‚‘H ÿ‘H |’H ù’H v“H ó“H p”H í”H j•H ç•H d–H á–H ^—H Û—H X˜H Õ˜H R™H Ï™H LšH ÉšH F›H Ã›H @œH ½œH :�H ·�H 4žH ±žH .ŸH «ŸH ( H ¥ H "¡H Ÿ¡H ¢H ™¢H £H “£H ¤H �¤H 
¥H ‡¥H ¦H �¦H þ¦H {§H ø§H u¨H ò¨H o©H ì©H iªH æªH c«H à«H ]¬H Ú¬H W­H Ô­H Q®H Î®H K¯H È¯H E°H Â°H ?±H ¼±H 9²H ¶²H 3³H °³H -´H ª´H 'µH ¤µH !¶H ž¶H ·H ˜·H ¸H ’¸H ¹H Œ¹H 	ºH †ºH »H €»H ý»H z¼H ÷¼H t½H ñ½H n¾H ë¾H h¿H å¿H bÀH ßÀH \ÁH ÙÁH VÂH ÓÂH PÃH ÍÃH JÄH ÇÄH DÅH ÁÅH >ÆH »ÆH 8ÇH µÇH 2ÈH ¯ÈH ,ÉH ©ÉH &ÊH £ÊH  ËH �ËH ÌH —ÌH ÍH ‘ÍH ÎH ‹ÎH ÏH …ÏH ÐH ÐH üÐH yÑH öÑH sÒH ðÒH mÓH êÓH gÔH äÔH aÕH ÞÕH [ÖH ØÖH U×H Ò×H OØH ÌØH IÙH ÆÙH CÚH ÀÚH =ÛH ºÛH 7ÜH ´ÜH 1ÝH ®ÝH +ÞH ¨ÞH %ßH ¢ßH àH œàH áH –áH âH �âH ãH ŠãH äH „äH åH ~åH ûåH xæH õæH rçH ïçH lèH éèH féH ãéH `êH ÝêH ZëH ×ëH TìH ÑìH NíH ËíH HîH ÅîH BïH ¿ïH <ðH ¹ðH 6ñH ³ñH 0òH ­òH *óH §óH $ôH ¡ôH õH ›õH öH •öH ÷H �÷H øH ‰øH ùH ƒùH  úH }úH úúH wûH ôûH qüH îüH kýH èýH eþH âþH _ÿH ÜÿH€, I k I€© I è I€&I eI€£I âI€ I _I€�I ÜI€I YI€—I ÖI€I SI€‘I ÐI€I MI€‹I ÊI€I GI€…I ÄI€I AI€I ¾I€üI ;I€yI ¸I€öI 5	I€s	I ²	I€ð	I /
I€m
I ¬
I€ê
I )I€gI ¦I€äI #I€aI  I€ÞI I€[I šI€ØI I€UI ”I€ÒI I€OI ŽI€ÌI I€II ˆI€ÆI I€CI ‚I€ÀI ÿI€=I |I€ºI ùI€7I vI€´I óI€1I pI€®I íI€+I jI€¨I çI€%I dI€¢I áI€I ^I€œI ÛI€I XI€–I ÕI€I RI€�I ÏI€I LI€ŠI ÉI€I FI€„I ÃI€I @I€~I ½I€ûI :I€xI ·I€õI 4I€rI ±I€ïI .I€lI «I€éI ( I€f I ¥ I€ã I "!I€`!I Ÿ!I€Ý!I "I€Z"I ™"I€×"I #I€T#I “#I€Ñ#I $I€N$I �$I€Ë$I 
%I€H%I ‡%I€Å%I &I€B&I �&I€¿&I þ&I€<'I {'I€¹'I ø'I€6(I u(I€³(I ò(I€0)I o)I€­)I ì)I€**I i*I€§*I æ*I€$+I c+I€¡+I à+I€,I ],I€›,I Ú,I€-I W-I€•-I Ô-I€.I Q.I€�.I Î.I€/I K/I€‰/I È/I€0I E0I€ƒ0I Â0I€ 1I ?1I€}1I ¼1I€ú1I 92I€w2I ¶2I€ô2I 33I€q3I °3I€î3I -4I€k4I ª4I€è4I '5I€e5I ¤5I€â5I !6I€_6I ž6I€Ü6I 7I€Y7I ˜7I€Ö7I 8I€S8I ’8I€Ð8I 9I€M9I Œ9I€Ê9I 	:I€G:I †:I€Ä:I ;I€A;I €;I€¾;I ý;I€;<I z<I€¸<I ÷<I€5=I t=I€²=I ñ=I€/>I n>I€¬>I ë>I€)?I h?I€¦?I å?I€#@I b@I€ @I ß@I€AI \AI€šAI ÙAI€BI VBI€”BI ÓBI€CI PCI€ŽCI ÍCI€DI JDI€ˆDI ÇDI€EI DEI€‚EI ÁEI€ÿEI >FI€|FI »FI€ùFI 8GI€vGI µGI€óGI 2HI€pHI ¯HI€íHI ,II€jII ©II€çII &JI€dJI £JI€áJI  KI€^KI �KI€ÛKI LI€XLI —LI€ÕLI MI€RMI ‘MI€ÏMI NI€LNI ‹NI€ÉNI OI€FOI …OI€ÃOI PI€@PI PI€½PI üPI€:QI yQI€·QI öQI€4RI sRI€±RI ðRI€.SI mSI€«SI êSI€(TI gTI€¥TI äTI€"UI aUI€ŸUI ÞUI€VI [VI€™VI ØVI€WI UWI€“WI ÒWI€XI OXI€�XI ÌXI€
YI IYI€‡YI ÆYI€ZI CZI€�ZI ÀZI€þZI =[I€{[I º[I $tI„ªshowlegendÂ¡yÈ\                                        ×£=ú‚>?·m?|å>Ð.»>.¯¡>€Âž>³M”>¸�…>ýÕ…>ˆ~>ô»“>t˜�>e!Æ>ùýá>7YØ>êOÊ>*o½>Ááí>ïH>?k¾2?W¹*?�Ý$?úô'?f†?r?Ó?Î*?ñ;?®�;?NF?Í·??M\7?µ4?¸0?5¬N?mÆf?Hïc?Ø`?.®a?z`?$‘\?; d?:øc?±?d?¦à_?-W[?’òV?(T?)­P?tíM?ˆPK?ÜöK?�†P?º¨R?¼R?ÝØS?c]Q?haO?��Q?‰CN?‘ÐL?ùÈJ?k_I?NŽH?ÛRG?ÿ€E?,¡C?nFC?(áA?¡ÌU?üâT?{tT?LgU?ÜES?è#S?h*Q?ÉÇT?­²R?êyQ?lgQ?NP?ž$O?^oQ?f@O?ä"P?sN?ôL?Á�L?ÉY[?{3Z?‚-Y?
'X?Š>W?zhU?Ë+T?<-S?^zS?r�R?|gQ?‰P?«O?¡2Q?ÛP?#†O?¤»N?€~N?@¹U?q¦T?Á—S?’R?&IR?õ*Q?VR?ŸQ?é�P?ËP?ûáP?'úQ?ãQ?8	P?@8O?K�N?ZˆM?™µL?'áK?Œ=K?84J?|½R?wR?9iQ?»¬P?�‡O?ÀÄO?ûO?Ñ¸N?lØM?z|M?5…M?êL?MCL?`ÿK?Ÿ?K?·ªJ?nJ?"«I?{$I?Å¥J?OûI?¦ÙM?äSN?ñŸM?GâN?WÊN?ÁãO?|O?]•O?êN?óN?tgM?AÀL?
EL?ü†L?µÞK?“£M?!MM?®L?À#L?lK?\ëM?�uM?­ÔL?hM?¹bL?{¾M?”“M?$ÕL?àxL?¢õL?X�L?*L?MÝK?:ÇK?�8K?¯K?CòJ?7lJ?2¾I?OI?êºH?zLH?N§G?Ê‚G?KþF?¿‡F?>ÿE?{‘E?ì¦E?È¤E?F,E?ZF?–„F?5UF?Ú±E?…
E?ø“D?R‰D?î,D?_³C?eÇC?^DC?ËC?öªB?ãB?®‡B?‹LB?~¿A?FA?µã@?„¿@?R‚@?D×@?’S@?gî??	A?ãA?÷Ò@?{d@?{A?î’@?Ü@?C@?gË??ôÑ??<‚??¥@??%U??‹÷>?ø??Y%??ò»>?ûå>?_>?e>?ÉË=?ik=?ö<?¸¤<?é=<?
<?	<?y>?[¼=?Mû=?‘·=?)€=?b=?ñ6=?ä2>?—Þ=?L{=?q->?M„>?Z*>?yì=?ƒ‡=?âü=?›F>?³(>?=zB?B?j¹A?§¼A?ÁbA?žA? �A?«ˆB?Æ(B?iøA?U•A?²OA?%A?®)A?‹â@?ÓA?KrA?xTB?uB?P\B?PB?ßiB?›AB?½÷C?�ÇC?ŠC?™eC?Å|C?™vC?’˜C?pC?Þ?C?»ïB?�©B?}TB?‚¬B?S”B?`žB?u“B?Ñ_B?VB?÷B?¼ÂA?xŠA?96A?tA?#Ð@?À·B?âVB?G/B?%õA?ª£A?˜ˆA?GwA?<A?ôA?†æ@?yè@?…gB?ÏfB?ë„B? àB?µ—B?ÌfB?WdB?éSB?Ÿ&B?˜ÆA?ùËA?}‰A?ÕEA?Ê:A?Õ
A?ßÓ@?#²@?q™@?ŽR@??@?µ@?¿¹??Du??!Y??¾=??­ö>?¥`??Ñç??Ý´??/›A?p$B?
B?ÿµB?LsB?ÁCB?¨^B?8B?C¼A?ó·A?¦}A?™OA?…½A?LB?TñB?ÈB?ËÇB?ª¤B?7{B?«1B?põA?Y²A?nA?ŠA?"Ò@?Š@?e@?°5@?3@?,Ò??¤??L‘??_Œ??ÁF??s??¡Ì??â­??ãl??±A????ÊÔ>?† >?dR>?3J>?ÁÛ>?QÔ>?¡’>?%>?Œ˜>?]‰>?AT>?ú>?>ì=?Ø=?v>?c	>?T#>?å=?zË=? >?¯¿>?Š>?ÌD>?z>?�â=?UÃ=?Ò˜=?ÑŸ=?p=?Á>?Æ¯>?f¤>?ìƒ>?dF>?›ú=?´¿>?ý—>?\R>?X>?'¤>?j>?~>?&j>?îS>?DL>?>?Iì=?WÆ=?ëž=?šX=?6)=?´=?3õ<?Èt=?!¦=?žË=?ý¸=?¦=?¦‚=?w�=?òz=?oæ=?@??Ûê>?Ä>?*‰>?­V>??3>?!>?*Å=?ìœ=?”¨=?ÂÝ=?œ=?ß´=?š=?˜v=?âG=?„*=?Ö=?¡ô<?RÄ<?œ<?y<?IX??"??ý??3??[â>?²¯>?™>?Ñ]>?;.>??7>?Á>?yë=?CÔ=?öª=?È=?öÞ=?ÈÛ=?Æ=?é >?œá=?ß¦=?�g=?d†=?™~=?_=?¶p=?ïF=?œ+=?¥4=?«=?lë<?5ñ<?o¾<?Þ•<?'v<?Â<?¡µ<?Ó°<?@Ÿ<?æ}<?Þy<?u:<?u
<?"Õ;?¨;?™m;?‹r;?5<;?c;?Nì:?GÇ:?›«:?¡Ž:?å{:?Xl:?[:?.C:?!:?¿(:?—:?‡:?kV:?i:?¢:?]
:?›å9?@í9?ë<?hí;?Ô;?ã;?¤Ì;?©;?¥­;?ÏŒ;?s‚;?-p;?ÊU;?JW;?0;?ï;?«ø:??Î:?O¬:?·©:?x|Ÿ?lgŸ?}dŸ?UGŸ?ð,Ÿ?ïŸ?iùž?åÆž?­¶ ?-ˆ ?¤ ?èo ?` ?¦9 ?7 ?7Ù ?p¼ ?¿” ?Ìu ?|W ?* ?×! ?³øŸ?ðÍŸ?á¬Ÿ?¶¡?U‘¡?ùb¡?´4¡?²¡?ÜÍ ?8¡ ?†� ?˜j ?Ä= ?– ?<ÿŸ?YÒŸ?Ä Ÿ?änŸ?=Ÿ?ÖŸ?áž?òÀž?5Ÿ?Òîž?îËž?¨²ž?iÃž?§¢ž?SŠž?až?™0ž?Ç%ž?vž?üÐ�?•¢�?¢��?`]�?=5�?	�?¨ãœ?ßÞœ?ÐÉœ?Á¥œ?Cvœ?¦Iœ?÷œ?’ò›?¼ã›?ÅÀ›?0—›?K”›?g›?D9›?¯†›?Ø_›?Ž;›?°›?ñš?ÀÀš?Õ�š?¯}š?±hš?í\š?QCš?wš?û™?£Ù™?4´™?Ýœ™?Ô}™?O™?Õ)™? ™?¶â˜?)Ã˜?�¦˜? ‚˜?Yd˜?¥J˜?L1˜?Y4˜?{˜?ñ—?jó—?¹Ò—?²Â—?Š¡—?—?”]—?iA—?&—?õ–?ÁØ–?cº–?p¸–?'‘–?†e–?ç–?™Y–?•4–?ˆ–? æ•?+À•?­›•?åz•?#¡•?‹•??k•?®=•?N7•?•?�ÿ”?ÏÙ”?ø½”?:š”?è§”?«È”?Ñª”?Ý©”?R‡”?og”?"_”?%K”?�U”?Ü•?î!•?ö•?=•?”ê”?NÍ”?„¯”?�˜”?w|”?ÅQ”?•?�ß”?Uô”?•Û”?»»”? ”?óŒ”?y�”?Òi”?–K”?-”?›”?Wò“?ÙÕ“?®¹“?" “?n•“?us“?zW“?9“?£ “?	“?Rô’?3è’?’õ’?}“?*
“?ì’?Ì’?—¯’?÷ž’?B�’?n^’?h?’?¤1’?‹$’?à’?Ïï‘?PÖ‘?‰¼‘?à¯‘?€˜‘?…u‘?Íj‘?÷N‘?z7‘?z‘?5ü�?5Ý�?‹¿�?¶ž�?0ƒ�?+`�?I@�?K$�?Ž
�?:ê�?×÷�?Wä�?ô¾�?l£�?A†�?5†�?Œp�?×\�?²Q�?`0�?o�?öŽ?¹ÛŽ?(äŽ?êÄŽ?YŸŽ?‡ŽŽ?‘yŽ?jYŽ?MŽ?.Ž?ûŽ?HŽ?{>Ž?F2Ž?Ž?ºŽ?žê�?¤Î�?å¹�?Ú¡�?W„�?_m�?´M�?<F�?0�?ù&�?!�?þ�?ö÷Œ?ëâŒ?!ÛŒ?ÀŒ?l¡Œ?F‚Œ?~rŒ?�`Œ?¸LŒ?3Œ?I%Œ?½
Œ?Pñ‹?×‹?°¹‹?i³‹?T–‹?4„‹?æh‹?t\‹?mO‹?Ç6‹?ç+‹?U‹?è ‹?XïŠ?ôÐŠ?m¾Š?.ªŠ?S’Š?ËrŠ?idŠ?cJŠ?œ<Š?³Š?Š?/è‰?Ì‰?d²‰?—‰?á‡‰?Ùo‰?¶f‰?P‰?s6‰?f@‰?.‰?;qŠ?ÏTŠ?¦IŠ?Ï(Š?Š?¼ Š?èæ‰?&Ú‰?ë¿‰?…¨‰?ÍŒ‰?n‚‰?Ne‰?9H‰?Œ:‰?›0‰?þ‰?5‰?qñˆ?�Ðˆ?VÂˆ?Ò®ˆ?‚œˆ?ˆ?Úeˆ?wHˆ?¯1ˆ?›>ˆ?/ˆ?2ˆ?~ù‡?Fé‡?Ö‡?*Æ‡?«¶‡?¥‡?!š‡?Â˜‡?Z�‡?h}‡?h‡?V‡?4J‡?q�‡?+»†?¤type§scatter¡xÈ\  €?   @  @@  €@   @  À@  à@   A  A   A   A  ðA   B  HB  pB  ŒB   B  ´B  ÈB  HC  –C  ÈC  úC  D  /D  HD  aD  zD  úD €;E  zE @œE €»E ÀÚE  úE  F @F à+F €;F  KF ÀZF `jF  zF Ð„F  ŒF p”F @œF ¤F à«F °³F €»F PÃF  ËF ðÒF ÀÚF �âF `êF 0òF  úF è G ÐG ¸G  G ˆG pG XG @G ( G $G ø'G à+G È/G °3G ˜7G €;G h?G PCG 8GG  KG OG ðRG ØVG ÀZG ¨^G �bG xfG `jG HnG 0rG vG  zG è}G è€G Ü‚G Ð„G Ä†G ¸ˆG ¬ŠG  ŒG ”ŽG ˆ�G |’G p”G d–G X˜G LšG @œG 4žG ( G ¢G ¤G ¦G ø§G ì©G à«G Ô­G È¯G PÃG DÅG 8ÇG ,ÉG  ËG ÍG ÏG üÐG ðÒG äÔG ØÖG ÌØG ÀÚG ´ÜG ¨ÞG œàG �âG „äG xæG lèG `êG TìG HîG <ðG 0òG $ôG öG øG  úG ôûG èýG ÜÿG è H âH ÜH ÖH ÐH ÊH ÄH ¾H ¸H ²	H ¬
H ¦H  H šH ”H ŽH ˆH ‚H |H vH pH jH dH ^H XH RH LH FH @H :H 4H .H ( H "!H "H #H $H 
%H &H þ&H ø'H ò(H ì)H æ*H à+H Ú,H Ô-H Î.H È/H Â0H ¼1H ¶2H °3H ª4H ¤5H ž6H ˜7H ’8H Œ9H †:H €;H z<H t=H n>H h?H b@H \AH VBH PCH JDH DEH >FH 8GH 2HH ,IH &JH  KH LH MH NH OH PH üPH öQH ðRH êSH äTH ÞUH ØVH ÒWH ÌXH ÆYH ÀZH º[H ´\H ®]H ¨^H ¢_H œ`H –aH �bH ŠcH „dH ~eH xfH rgH lhH fiH `jH ZkH TlH NmH HnH BoH <pH 6qH 0rH *sH $tH uH vH wH xH yH  zH úzH ô{H î|H è}H â~H ÜH k€H è€H e�H â�H _‚H Ü‚H YƒH ÖƒH S„H Ð„H M…H Ê…H G†H Ä†H A‡H ¾‡H ;ˆH ¸ˆH 5‰H ²‰H /ŠH ¬ŠH )‹H ¦‹H #ŒH  ŒH �H š�H ŽH ”ŽH �H Ž�H �H ˆ�H ‘H ‚‘H ÿ‘H |’H ù’H v“H ó“H p”H í”H j•H ç•H d–H á–H ^—H Û—H X˜H Õ˜H R™H Ï™H LšH ÉšH F›H Ã›H @œH ½œH :�H ·�H 4žH ±žH .ŸH «ŸH ( H ¥ H "¡H Ÿ¡H ¢H ™¢H £H “£H ¤H �¤H 
¥H ‡¥H ¦H �¦H þ¦H {§H ø§H u¨H ò¨H o©H ì©H iªH æªH c«H à«H ]¬H Ú¬H W­H Ô­H Q®H Î®H K¯H È¯H E°H Â°H ?±H ¼±H 9²H ¶²H 3³H °³H -´H ª´H 'µH ¤µH !¶H ž¶H ·H ˜·H ¸H ’¸H ¹H Œ¹H 	ºH †ºH »H €»H ý»H z¼H ÷¼H t½H ñ½H n¾H ë¾H h¿H å¿H bÀH ßÀH \ÁH ÙÁH VÂH ÓÂH PÃH ÍÃH JÄH ÇÄH DÅH ÁÅH >ÆH »ÆH 8ÇH µÇH 2ÈH ¯ÈH ,ÉH ©ÉH &ÊH £ÊH  ËH �ËH ÌH —ÌH ÍH ‘ÍH ÎH ‹ÎH ÏH …ÏH ÐH ÐH üÐH yÑH öÑH sÒH ðÒH mÓH êÓH gÔH äÔH aÕH ÞÕH [ÖH ØÖH U×H Ò×H OØH ÌØH IÙH ÆÙH CÚH ÀÚH =ÛH ºÛH 7ÜH ´ÜH 1ÝH ®ÝH +ÞH ¨ÞH %ßH ¢ßH àH œàH áH –áH âH �âH ãH ŠãH äH „äH åH ~åH ûåH xæH õæH rçH ïçH lèH éèH féH ãéH `êH ÝêH ZëH ×ëH TìH ÑìH NíH ËíH HîH ÅîH BïH ¿ïH <ðH ¹ðH 6ñH ³ñH 0òH ­òH *óH §óH $ôH ¡ôH õH ›õH öH •öH ÷H �÷H øH ‰øH ùH ƒùH  úH }úH úúH wûH ôûH qüH îüH kýH èýH eþH âþH _ÿH ÜÿH€, I k I€© I è I€&I eI€£I âI€ I _I€�I ÜI€I YI€—I ÖI€I SI€‘I ÐI€I MI€‹I ÊI€I GI€…I ÄI€I AI€I ¾I€üI ;I€yI ¸I€öI 5	I€s	I ²	I€ð	I /
I€m
I ¬
I€ê
I )I€gI ¦I€äI #I€aI  I€ÞI I€[I šI€ØI I€UI ”I€ÒI I€OI ŽI€ÌI I€II ˆI€ÆI I€CI ‚I€ÀI ÿI€=I |I€ºI ùI€7I vI€´I óI€1I pI€®I íI€+I jI€¨I çI€%I dI€¢I áI€I ^I€œI ÛI€I XI€–I ÕI€I RI€�I ÏI€I LI€ŠI ÉI€I FI€„I ÃI€I @I€~I ½I€ûI :I€xI ·I€õI 4I€rI ±I€ïI .I€lI «I€éI ( I€f I ¥ I€ã I "!I€`!I Ÿ!I€Ý!I "I€Z"I ™"I€×"I #I€T#I “#I€Ñ#I $I€N$I �$I€Ë$I 
%I€H%I ‡%I€Å%I &I€B&I �&I€¿&I þ&I€<'I {'I€¹'I ø'I€6(I u(I€³(I ò(I€0)I o)I€­)I ì)I€**I i*I€§*I æ*I€$+I c+I€¡+I à+I€,I ],I€›,I Ú,I€-I W-I€•-I Ô-I€.I Q.I€�.I Î.I€/I K/I€‰/I È/I€0I E0I€ƒ0I Â0I€ 1I ?1I€}1I ¼1I€ú1I 92I€w2I ¶2I€ô2I 33I€q3I °3I€î3I -4I€k4I ª4I€è4I '5I€e5I ¤5I€â5I !6I€_6I ž6I€Ü6I 7I€Y7I ˜7I€Ö7I 8I€S8I ’8I€Ð8I 9I€M9I Œ9I€Ê9I 	:I€G:I †:I€Ä:I ;I€A;I €;I€¾;I ý;I€;<I z<I€¸<I ÷<I€5=I t=I€²=I ñ=I€/>I n>I€¬>I ë>I€)?I h?I€¦?I å?I€#@I b@I€ @I ß@I€AI \AI€šAI ÙAI€BI VBI€”BI ÓBI€CI PCI€ŽCI ÍCI€DI JDI€ˆDI ÇDI€EI DEI€‚EI ÁEI€ÿEI >FI€|FI »FI€ùFI 8GI€vGI µGI€óGI 2HI€pHI ¯HI€íHI ,II€jII ©II€çII &JI€dJI £JI€áJI  KI€^KI �KI€ÛKI LI€XLI —LI€ÕLI MI€RMI ‘MI€ÏMI NI€LNI ‹NI€ÉNI OI€FOI …OI€ÃOI PI€@PI PI€½PI üPI€:QI yQI€·QI öQI€4RI sRI€±RI ðRI€.SI mSI€«SI êSI€(TI gTI€¥TI äTI€"UI aUI€ŸUI ÞUI€VI [VI€™VI ØVI€WI UWI€“WI ÒWI€XI OXI€�XI ÌXI€
YI IYI€‡YI ÆYI€ZI CZI€�ZI ÀZI€þZI =[I€{[I º[I $tI„ªshowlegendÂ¡yÈ\                    žØ‰?  €?Ã0LAºèBANo:A¾åÛ@­£�@S^c@£Ö/@]k-@°M@µ�@ôîî?¤Qâ?žÇd@ð2&@ð´@Çä?ï]Ç?f�¬?¤E�? Ø•?2Ûˆ?DyM?�,R?ûç0?‡!?ˆÕ5?¿ùN?¯Ç?? x9?Ïß0?2?¸¦*?K0?Ï’*?ò5$?>c!?¬G$?²†+?¶Š(?2Ï$?&±)?ƒ|3?Ë2?Ò28?È€4?Í¹8?‚5?Qð2?–Á1?±ð.?Hq,?o�+?p*?È¯'?»“&?%$?º®%?†Â#?ÂL"?¤$?·#?ƒ2"?`Å"?ÄP"?@�!?4á ?\*"?Až&?Òú$?¢1$?®$#?ØY"?K6!?­ñ!?ÿÐ ?K÷4?ß�3?2?4á1?2Ò0?¿³/?ëõ.?ý,/?î0?m0?Íç/?i®.?Õ??Ó­>?K>?Qª@?)ñB?}PB?ëA?¨Ù@?ùvA?èžA?N™B?ã'B?rÕA?ˆàC?ÙÓB?	)D?¹èC?q
F?Î¹D?‹WD?ÂC?ÓþB?”‡B?ePA?°…@?dÕ@?²£A?¹LA?rÜ@?ÙD?{�C?áC?�|B?�C?0B?YA?e€@?3�@?Œ@?÷X???e??‚á>???W>?ÊO=?ø�<?e<?üa;?Ú½:? S:?Â:?A†9?c#B?»äB?¯üA?TeA?ÃêB?%AB?^ŽA?øA?DW@?CH@?gA?�A?Jû@?š³@?4C?9¡B?SÒA?t¼A?ýAA?B?(ïA?Ë®A?ŸtA?��B?1AB?–-B?xûA?ÚXC?šÔB?tÎB?÷
B?©kA?Œý@?”Â@?N¬@?óV@?	1@?R§??º*??¢d??$@?‡ì??^n??q·??&ù??J©??¯4??%7??ô7??<ß>?ý;>?ßâ=?Ýõ=?Ìl=?ç7=?émA?Fö@?ÚX@?ò°??WC??Gq??îú>?qÁ>?-u>?çô=?/¾=?T==?¨i=?d	=?Ç£<?‡=?ôIH?fH?Š÷G?×G?j�G?,RG?ùäF?ÙrG?­%J?®ÁI?UI?
ÏH?®}H?T H?z	H?´—G?å@G?IØF?|WF?oðE?„’E?þDE?HåD?ÉŠD?–)D?µHE?öäD?y­D?‰&D?ãÁH?ô(H?°êG?iÒG?òoG?hG?—ŸF?©iF?7F?›®E?ä¦E?€9E?JìD?oŠD?O…D?@MD?£ñC?á¢C?FC?9øB?›B?$[B?B?ƒÕA?¹³B?ûàB?{B?ö2B?	ÉA?ûA?ÁÜA?…¤A?*A?Žá@?øx@?‚@?Y©??l@?^¤@?æ@?;3@?ÛÂ??_�??o??G5??{ä>?É§>?²³@?èw@?AÒ@?�‹@?äd@?$8@?U@?>0@?yé??mÃA?Ù„A?lA?c<A?J#A?Ùò@? A?3­@?eš@? u@?ì«@?+n@?°¬@?‹¶@?Šœ@?‰ªB?æfD?î`D? D?0ôC?SþC?ÿÀD?§dD?,JD? D?Ý×C?ž�C?°]C?mFC?5JC?8æB?èŠB?1B?¿B?H=B?¸ïA?y
B?ÁA? ‚A?9vA?½žA?äRA?»þ@?¾@?³˜A?aYA?&‰A?­A??÷A?Ã°A?N�A?nA?ÇA?ÄoA?!ÂA?È}A?ñTA?XA?è8A?gõ@?:Ÿ@?óKA?œ”A?ÊnA?dkA?�HA?nù@?†ë@?„A?ÍÊ@?1Ù@?)A?‹D?†ÀC?`¯C?�ÚC?äªC?ÊC?
PC?guC? $C?›‡D?|ÀD? ¨D?`…D?cD?žqD?$+D?\<D?íD?&ÈC?¡C?õE?bÐD?…ÓP?þ‰P?‰CP?T;P?,P?åAP?0UP?2P?@ÒO?‹ŠO?Ê<O?ôCO?0OO?ƒuO?c>O?âO?E¿N?y„N?ñHN?9N?<kN?¼EN?-sN?ŸN?¦èM?I¨M?0fM?+M?ÎŠM?ù{M?X‰M?cM?F!M?ÖL?ë~L?¸YL?L?›ÐK?˜œK?óŠK?HK?VeK?”nK?õ4K?ŒúJ?uK?
K?ÐÔJ?°ËJ?i J?ŒJ?3<J?J?GðI?$J?õÖI?ä˜I?ádI?¸GI?�I?tæH?æþH?¯îH?ô¨H?ÿnH?q<H?ÚõG?êºG??~G?‚wG?¥JG?RIG?^BG? G?ÝÁF?ã‡F?Ä8F?BùE?¸YF?úeF?•§F?°oF?~F?èOF?Û4F?–õE?ð
F?±óE?áåE?‘ÐE?dìE?$»E?g}E?ûOE?\0E?ŒWE?¡&E?‘ìD?'¾D?�’D?ãoD?Ä=D?
 D?ÌlD?ª?D?0D?%åC?µC?ítC?‘WC?!ÇC?£–C?lpC?c?C?C?áB?ºB?8—B?ö†B?qB?:‡B?¤hB?ïIB? .B?Ú9B?œB?€$B?1OB?ƒ&B?áB?oêA?ÅA?�A?®A?3¼A?‡ÃA?|“A?xgA?è5A?¥	A?°×@?GÂ@?_ @?${@?]Ž@?p�@?¾@?Óš@?�@?K¢@?§@?tq@?¯S@?>+@?[ý??Ôà??¡Â??„©??¾Ó??c½??—�??Ñ„??hV??1(??²??ú>?yÒ>?3??¾÷>?O6??dý>?Ý ??$á>?ÇÂ>?8«>?^‡>?ßv>?T]>?Ú8>?ç>?Þë=?�Õ=?yñ=?uî=?È>?§;>?]->?$µ>?Êä>?"K??	$??o??R	??úä>?À>?ø¹>?jœ>?y�>?¹™>?X>?<X>?Ñ8>?ÒF>?É1>?`>?I>?Ó>?yå=? Ã=?˜>?fÅ=?²>?óé=?9¶=?pÚ=?î«=?—=?·‘=?U¨=?à�=?Úb=?˜=?ˆˆ=?T=?O=?Ë0=?8=?™ =?Š8=?ô=?Qï<?°Ê<?Eß<?9»<?×<?´à<?È<?Ó¬<?vÂ<?d”<?Du<?ó�<?ºz<?˜Ó<?=?ªý<?¡¼=?Ú•=?“m=?ØO=?l2=?2�=?Šˆ=?ê¢=?Ú�=?ö�=?Í=?Þ=?e²=?­=?£=?£ =?>? >?Kó>?í>?®ï>?ªÎ>?'W??ÓF??Ø!??­??H??9é>?�Ã>?`†??øŒ??Õh??>J??Sš??„??·??Â¥??�Ž??™×??²??Ñ•??‘u??ì{??®Z??—7??Ÿ8??¬9??� ??Žd??m9??Ùï??oð??ùÝ??F½??Î·??[•??;w??[??ò§??N¼??n�??k�??j??ÅW??B�??«t??±†??æd??C??´d??V??ÀM??Í%??b??Ø??èò>?Í ??t"?? ??jñ>?´Ë>?iÉ>?7À>? ­>?
‘>?p>?bX>?+>?ò>?OÎ>?É>?2´>?GÇ>?àž>?†}>?Ýa>?šO>?93>?)>?J>?•û=?ì=?Ìë=?Ì=?ôË=?–½=?å@?‚»@?k�@?£u@?K_@?®O@?ë^@?jS@?f0@?Ë@?™ñ??Ì??Z«??SŠ??¾r??iU??F??T???ã%??£??VÛ>?8??ì??{è>?VÖ>?öÂ>?×›>?ë³>?Ö’>?†ˆ>?Åƒ>?¨v>?=S>?M`>?;B>?{>?{>?ða>?þS>?†,>?Õn>?Ÿa>?ec>?ÛO>?�@>?P>?R>?ï=?šØ=?eµ=?°=?R¥=?žŒ=?Ú{=?¬V=?¶I=?ß(=?’(=?/=?"=?r==?“D=?é+=?¦=?s=?%=?áç<?’Â<?#°<?jž<?º–<?}…<?To<?CT<?><?À/<?µJ<?YR<?T:<?m5<?(<?–0<?F*<?Ä<?í<?}ô;?3L<?UE<?¯:<?]F<?Ôè<?Õ<?¥Ò<?WÖ<?'=?Á=?"ê<?ËØ<?Ì<?9ê<?CÜ<?ðè<?†ó<?á<?áæ<?«î<?¢Ð<?K²<?Ž<?|Œ<?�}<?Ìm<?YN<?¾S<?µD<?ò<<?œ<?¶<?®î;?çÒ;?°¾;?a°;?ûé;?ÊÕ;?Äó;?à;?ÌÌ;?uÖ;?¿Ë;?Ì´;?dš;?ˆ;?à¡;?*};?‡l;?O;?iE;?²6;?!;?>õ:?‹×:?Ü:?EÇ:?Û’;?m;?H;?.H;?Ø3;?~&;?4;?÷:?2Ü:?ú·:?�:??€:?Z_:?O:?¡O:?°Ž:?b‰:?•c:?Y:?…Y:?S:?G:?
+:?�J:?´0:?):?! :?+];?¤type§scatter¡xÈ\  €?   @  @@  €@   @  À@  à@   A  A   A   A  ðA   B  HB  pB  ŒB   B  ´B  ÈB  HC  –C  ÈC  úC  D  /D  HD  aD  zD  úD €;E  zE @œE €»E ÀÚE  úE  F @F à+F €;F  KF ÀZF `jF  zF Ð„F  ŒF p”F @œF ¤F à«F °³F €»F PÃF  ËF ðÒF ÀÚF �âF `êF 0òF  úF è G ÐG ¸G  G ˆG pG XG @G ( G $G ø'G à+G È/G °3G ˜7G €;G h?G PCG 8GG  KG OG ðRG ØVG ÀZG ¨^G �bG xfG `jG HnG 0rG vG  zG è}G è€G Ü‚G Ð„G Ä†G ¸ˆG ¬ŠG  ŒG ”ŽG ˆ�G |’G p”G d–G X˜G LšG @œG 4žG ( G ¢G ¤G ¦G ø§G ì©G à«G Ô­G È¯G PÃG DÅG 8ÇG ,ÉG  ËG ÍG ÏG üÐG ðÒG äÔG ØÖG ÌØG ÀÚG ´ÜG ¨ÞG œàG �âG „äG xæG lèG `êG TìG HîG <ðG 0òG $ôG öG øG  úG ôûG èýG ÜÿG è H âH ÜH ÖH ÐH ÊH ÄH ¾H ¸H ²	H ¬
H ¦H  H šH ”H ŽH ˆH ‚H |H vH pH jH dH ^H XH RH LH FH @H :H 4H .H ( H "!H "H #H $H 
%H &H þ&H ø'H ò(H ì)H æ*H à+H Ú,H Ô-H Î.H È/H Â0H ¼1H ¶2H °3H ª4H ¤5H ž6H ˜7H ’8H Œ9H †:H €;H z<H t=H n>H h?H b@H \AH VBH PCH JDH DEH >FH 8GH 2HH ,IH &JH  KH LH MH NH OH PH üPH öQH ðRH êSH äTH ÞUH ØVH ÒWH ÌXH ÆYH ÀZH º[H ´\H ®]H ¨^H ¢_H œ`H –aH �bH ŠcH „dH ~eH xfH rgH lhH fiH `jH ZkH TlH NmH HnH BoH <pH 6qH 0rH *sH $tH uH vH wH xH yH  zH úzH ô{H î|H è}H â~H ÜH k€H è€H e�H â�H _‚H Ü‚H YƒH ÖƒH S„H Ð„H M…H Ê…H G†H Ä†H A‡H ¾‡H ;ˆH ¸ˆH 5‰H ²‰H /ŠH ¬ŠH )‹H ¦‹H #ŒH  ŒH �H š�H ŽH ”ŽH �H Ž�H �H ˆ�H ‘H ‚‘H ÿ‘H |’H ù’H v“H ó“H p”H í”H j•H ç•H d–H á–H ^—H Û—H X˜H Õ˜H R™H Ï™H LšH ÉšH F›H Ã›H @œH ½œH :�H ·�H 4žH ±žH .ŸH «ŸH ( H ¥ H "¡H Ÿ¡H ¢H ™¢H £H “£H ¤H �¤H 
¥H ‡¥H ¦H �¦H þ¦H {§H ø§H u¨H ò¨H o©H ì©H iªH æªH c«H à«H ]¬H Ú¬H W­H Ô­H Q®H Î®H K¯H È¯H E°H Â°H ?±H ¼±H 9²H ¶²H 3³H °³H -´H ª´H 'µH ¤µH !¶H ž¶H ·H ˜·H ¸H ’¸H ¹H Œ¹H 	ºH †ºH »H €»H ý»H z¼H ÷¼H t½H ñ½H n¾H ë¾H h¿H å¿H bÀH ßÀH \ÁH ÙÁH VÂH ÓÂH PÃH ÍÃH JÄH ÇÄH DÅH ÁÅH >ÆH »ÆH 8ÇH µÇH 2ÈH ¯ÈH ,ÉH ©ÉH &ÊH £ÊH  ËH �ËH ÌH —ÌH ÍH ‘ÍH ÎH ‹ÎH ÏH …ÏH ÐH ÐH üÐH yÑH öÑH sÒH ðÒH mÓH êÓH gÔH äÔH aÕH ÞÕH [ÖH ØÖH U×H Ò×H OØH ÌØH IÙH ÆÙH CÚH ÀÚH =ÛH ºÛH 7ÜH ´ÜH 1ÝH ®ÝH +ÞH ¨ÞH %ßH ¢ßH àH œàH áH –áH âH �âH ãH ŠãH äH „äH åH ~åH ûåH xæH õæH rçH ïçH lèH éèH féH ãéH `êH ÝêH ZëH ×ëH TìH ÑìH NíH ËíH HîH ÅîH BïH ¿ïH <ðH ¹ðH 6ñH ³ñH 0òH ­òH *óH §óH $ôH ¡ôH õH ›õH öH •öH ÷H �÷H øH ‰øH ùH ƒùH  úH }úH úúH wûH ôûH qüH îüH kýH èýH eþH âþH _ÿH ÜÿH€, I k I€© I è I€&I eI€£I âI€ I _I€�I ÜI€I YI€—I ÖI€I SI€‘I ÐI€I MI€‹I ÊI€I GI€…I ÄI€I AI€I ¾I€üI ;I€yI ¸I€öI 5	I€s	I ²	I€ð	I /
I€m
I ¬
I€ê
I )I€gI ¦I€äI #I€aI  I€ÞI I€[I šI€ØI I€UI ”I€ÒI I€OI ŽI€ÌI I€II ˆI€ÆI I€CI ‚I€ÀI ÿI€=I |I€ºI ùI€7I vI€´I óI€1I pI€®I íI€+I jI€¨I çI€%I dI€¢I áI€I ^I€œI ÛI€I XI€–I ÕI€I RI€�I ÏI€I LI€ŠI ÉI€I FI€„I ÃI€I @I€~I ½I€ûI :I€xI ·I€õI 4I€rI ±I€ïI .I€lI «I€éI ( I€f I ¥ I€ã I "!I€`!I Ÿ!I€Ý!I "I€Z"I ™"I€×"I #I€T#I “#I€Ñ#I $I€N$I �$I€Ë$I 
%I€H%I ‡%I€Å%I &I€B&I �&I€¿&I þ&I€<'I {'I€¹'I ø'I€6(I u(I€³(I ò(I€0)I o)I€­)I ì)I€**I i*I€§*I æ*I€$+I c+I€¡+I à+I€,I ],I€›,I Ú,I€-I W-I€•-I Ô-I€.I Q.I€�.I Î.I€/I K/I€‰/I È/I€0I E0I€ƒ0I Â0I€ 1I ?1I€}1I ¼1I€ú1I 92I€w2I ¶2I€ô2I 33I€q3I °3I€î3I -4I€k4I ª4I€è4I '5I€e5I ¤5I€â5I !6I€_6I ž6I€Ü6I 7I€Y7I ˜7I€Ö7I 8I€S8I ’8I€Ð8I 9I€M9I Œ9I€Ê9I 	:I€G:I †:I€Ä:I ;I€A;I €;I€¾;I ý;I€;<I z<I€¸<I ÷<I€5=I t=I€²=I ñ=I€/>I n>I€¬>I ë>I€)?I h?I€¦?I å?I€#@I b@I€ @I ß@I€AI \AI€šAI ÙAI€BI VBI€”BI ÓBI€CI PCI€ŽCI ÍCI€DI JDI€ˆDI ÇDI€EI DEI€‚EI ÁEI€ÿEI >FI€|FI »FI€ùFI 8GI€vGI µGI€óGI 2HI€pHI ¯HI€íHI ,II€jII ©II€çII &JI€dJI £JI€áJI  KI€^KI �KI€ÛKI LI€XLI —LI€ÕLI MI€RMI ‘MI€ÏMI NI€LNI ‹NI€ÉNI OI€FOI …OI€ÃOI PI€@PI PI€½PI üPI€:QI yQI€·QI öQI€4RI sRI€±RI ðRI€.SI mSI€«SI êSI€(TI gTI€¥TI äTI€"UI aUI€ŸUI ÞUI€VI [VI€™VI ØVI€WI UWI€“WI ÒWI€XI OXI€�XI ÌXI€
YI IYI€‡YI ÆYI€ZI CZI€�ZI ÀZI€þZI =[I€{[I º[I $tI„ªshowlegendÂ¡yÈ\                                        9Žc="¸�>dff>U?h>Ê­N>›²&?¡Õ?33?Œo?q
Ÿ>¦q±>§£Í>ð#¸>”|°>eØÚ>Q´Ú>³mÛ>ŽLÉ>aPÞ>“mÂ>}†Ñ>ã= ?‘X?Þëg?N?Y?EÃL?Çœb?“U?Æ`N?È�F?†U?hÕN?20J?mÒC? tE?j²@?ßÒ:?‰²7?¿z9?ÑN>?WÑj?ªIs?e±m?»�h?v„c?«k?�(k?�ñg?qˆx?~Ys?ro?—]k?Ämg?cüd?f§c?�`?mp]?…	Z?nùV?›(T?fQ?ˆ?O?æM?ƒ¤L?4,J?BÂI?ñYH?2SF?ý¿D?jC?ŒœC?¼B?
?A?9A?­¾??`ôA?Ã0A?aÄ??g??^ªB?4áB?/ÔA?FQ@?¾Ã>?{=?¥<?ü<?¥ò;?*¾:?4½9?!89?L_8?ò¹7?žÓ8?6T:?BX;?…ð9?åÖ9?Vÿ8?Õ�9?ŠØ8?�2;?´C<?²ç:?£ú:?ç¤:?‚:?»†7?Ö7?ùH6?÷65?‹­4?³^4? r4?j»4?3x6?'É5?™Þ4?½½4?iD5?¤j5?ê5?‹‡6?97?QK7?DU7?¼{7?']7?as6?îÂ5?Å95?(¬5?D6?Ç27?‚±6?ý86?2°5?÷5?^i4?Á 4?Íj4?cÛ3?»¡3?¾Ø3?j|3?,T7?à6?z’6?Ú6? h5?;Ñ4??�4?_÷3?³‹;?[ò<?JK<?îe<?˜#K?½ÖL?W[L??ÐM?U/M?¨î[?7[?F«Z?8æZ? žZ?:åY?	§Y?Ó(Y?‹wX?ŒHX?´4X?þ!X?mPW?óUW?r—V?Š1V?ÌU?/U?¤ÅT?½þS?ã³S?QsS?
5S?‹S?ŽS?¨—R?dëQ?µ•Q?<Q?–ðP?¦½P?ÇP?À P?ÉœP?	P?xO?…!O?ŠP?ýŽO?n²O?ÅO?5ËN?¤N?×)N?!VN?bN?_¡M?7-M?BsM?ÿL?‡ðL?ÝeM?m3M?N?³”M?ƒnM?\%M?Ã¬L?HšL?H‰M?©OM?ÜIM?ËÒL?9[L?ùèK?Ï–K?¡/K?<ÄJ?sGJ?ÒûI?\¨I?`I?? I?ÙýH?2 I?$¹H?<[H?;hH?…H?�#H?±•G?Ÿ7G?Ý+G?å�Z?PZ?=ÈY?}vY?7åX?úîX?v÷X?®·X?A-X?aãW?w�W?àW?näV?œ{V?ä4V?±ÉU?@IU?r6U?ßT?òQU?éÞT?QbT?ÈþS?øŠS?Ò*S?½ÁR?·¸R?åIS?ÀèR?¡sR?½ºR?uR?~±R?àMR?ðjR?œHR?”öQ?ì¸Q?ô?Q?é¶Q?*„Q?N‘Q?$VQ?ÎQ?ÊP?	¿P?°P?0ÉP?k<Q?4åP?Û�P?¯ŒP?mP?<P?]5P?ÅÔO?R¥O?®»O?~žQ?„OQ?!Q?ã	Q?ÁP?O~P?�°P?.nQ?µhQ?íùP?]¡Q?VHQ?¥Q?¯´P?;rP?—:P?ÒtP?ê-Q?`ÑP?ƒ	Q?o”P?»OT?/ìS?¢S?ß€S?“S?¤YS?4ûR?nÁR?îÆR?gtR?G4R?R?§µQ?zâQ?’¥Q?4TQ?©Q?gºP?°P?žpP?ÕP?\P?ÍP?ÈP?ÿÚO?,°O?”¾O?^O?[2O?(ëN?þ
O?½²N?BqN?n)N?ÕsN?ÅN?ËÆM?0�M?ÙM?6¿M?„“M?‘*M?å/M?M?¥¶L?¼¥L?Š§L?	öL?ÏžL?×zL?§BL?i&L?AìK?¾�K?ýçK?î‘K?;aK?QK?yûJ?dÃJ?›RK?TK?.ÜJ?®�J?OCJ?—J?YìI?ã£I?gI?.I?$eI?� I?XêH?¨I?^6I?‚4I?·=I?f9I?¹I?G´H?{K?å£K?6nK?Ø K?ããJ?«J?m“J?~TJ?pHJ?‰šJ?‰UJ?7J?*þI?J?!J?§éI?RÊI?	ÈI?ËœI? [I?ÈFI?†,I?ˆI?s×H?å­H?�yH?´oH?ÿDH?:MH?H?ØG?_wH?`XH?`&H?ùG?$H?œêG?£ÕG?§G?þzG?ÄŠG?_PG?–7G?‹8G?e©G?%{G?ð4H?DH?ZýG?ŒÉG?çŠG?ÈqG?XG?‡G?âãF?œ§F?±±F?p€F?$xF?g?F?/<F?×%F?Á€F?JŒF?9TF?ƒ?F?Õ!F?ÏòE?OÉE?,˜E?F�E?hTE?S<E?E?FÝD?¾¾D?òÅD?É£D?˜xD?£NE?ÔHE?Z E?úíD?ªÂD?B…D?JûD?®ÓD?{ªD?GŽD?É]D?jéD?ÀD?|·D?‰‰D?ö[D?Î5D?èøC?’÷C?¡D?ÛC?—'D?´D?xáC?‰±C?’ŒC?p¨C?ê~C?*JC?R C?ZùB?6åB?¬B?ê~B?¨zB?³“B?:žB?¤B?›}B?rSB?T+B?£B?5"B?áB?@F?¬*F?çøE?&ÿE?ÌE?¿«F?§ÓF?mÐF?	âF?æ¾F?Ë˜F?òîF?ÀF?G?,êF?}H?õI?äÙH?wµH? „H?MjH?Ï3H?lH?žÚG?äÇG?iœG?‚pG?ø@G?ÜG?é0G?G?%ÞF?ÌF?ZšF?K¾N?Ô�N?=‹N?©ƒN?-‘N?pN?^SN?)!N?ùM?†åM?wÆM?z¡M?@ÂM?4¾M?Z�M?êŒM?HXM?Ç(M?aM?9æL?(ØL?5½L?ÆL?ëL?‹zM?5mM?‚vM?ŽGM?rM?1OM?èM?	êM?€ÚM?QÌM?K¯Q?g”Q?|TQ?AMQ?YQ?OQ?UÜP?@´P?¤P?â†P?™…P?ŠmP?øJP?„P?¦P?ðP?_ÑO?yÏO?S§O?*®O?÷‚O?Ú^O??4O?'|O?;”O?þ…O?ÁoO?4O?:&O?U+O?&O?�)O?VO?]O?èëN?ŽÞN?äO?ÑîN?ÆO?žòN?ÈÜN?Ã»N?…´N?“šN?ÄrN?±MN?2N?aûM?hÅM?¼´M?õ�M?z~M?�iM?EM?¹,M?æ¨M?ßzM?\IM?„N?ZN?"AN?ÔN?ùM?ÄN?Œ÷M?×ßM?<ÔM?Ó¬M?=M?§fM? O?ÙN?¿¼N? ›N?øŸN?VˆN?ï\N?¡1N?¼N??åM?ºM?…«M?[‡M?!rM?–ZM?“iM?ð4N?LN?hûM?ÒM?÷M?¥ÚM?Ó¿M?µ§M?bƒM?¡™M?/bM?äFM?T!M?»?M?­çN?ÁN?q‹N?÷P?8æO?òÇO?¶§O?Æ‡O?|O?TXO?:IO?O?yðN?@üN?ßO?päN?Ã¶N?5�N?ÈtN?QmN??<N?ÆiN?iHN?�7N?åN? ìM?ÏîM?ÚpO?¸IO?–4O?w O?úO?¢ûN?ÒìN?6O?;ãN?çžO?{ÖO?°O?–…O?{eO? JO?<.P?wP?l P?mP?�4P?k)P?þ
P?CP?†P?cP?CúO?`ÖO?2·O?°O?å˜O?%pO?vGO?V—O?ëO?Y×O?CºO?8µO?ˆ¡O?$€O?‰šO?Š�O?ôÀO?uËO?¿¤O?„O?,YO?¸\O?žCO?öO?èùN?àþN?âN?Ù1O?ªýN?þO?jöN?ûåN?ÈN?úvO?�VO?1‚O?—nO?RO?)O?DO?*O?VÝN?æ¼N?’²N?ì˜N?}yN?:›N?MƒN?¤›N?ÀwN?qXN?26N?iÿP?+ðP?èïP?yàP?þ»P?Ù£P?×xP?|eP?›GP?c=P?|'P?ì!P?©P?öP?fNP?#PP?ãCP?F P?ˆP?#úO?ÆáO?"»O?“³O?BP?P?P?îýO?KãO? tP?bYP?DMP?åGP?;.P?cP?êO?CôO?ëÙO?ÇO? ¨O?¼´O?O O?y‹O?QmO?æMO?2O?mO?A®O?ÕÊO?¡·O?ž¤O?Ò�O?iƒO?ÖwO?E•O?àsO?fO?ŸEO?1%O?ËO?È:O?#ßQ?‰àQ?ìÏQ?¥²Q?ê£Q?,ŒQ?YbQ?Â<Q?q"Q?ÙQ?PüP?÷ÛP?Î¿P?¸˜P?6qP?<JP?©.P? ÀP?£¦P?²‰P?MuP?I`P?�=P?rP?åüO?åP?�ñO??ôO?>ÝO?½µO?W­O?Ö™O?J}O?Ü`O?2MO?Ÿ?O?ªAO?º\O?ëLO?:O?~O?ûÿN?(þN?ÎáN?1ÂN?R°N?¢N?„™N?5pN?»2o?¤type§scatter¡xÈ\  €?   @  @@  €@   @  À@  à@   A  A   A   A  ðA   B  HB  pB  ŒB   B  ´B  ÈB  HC  –C  ÈC  úC  D  /D  HD  aD  zD  úD €;E  zE @œE €»E ÀÚE  úE  F @F à+F €;F  KF ÀZF `jF  zF Ð„F  ŒF p”F @œF ¤F à«F °³F €»F PÃF  ËF ðÒF ÀÚF �âF `êF 0òF  úF è G ÐG ¸G  G ˆG pG XG @G ( G $G ø'G à+G È/G °3G ˜7G €;G h?G PCG 8GG  KG OG ðRG ØVG ÀZG ¨^G �bG xfG `jG HnG 0rG vG  zG è}G è€G Ü‚G Ð„G Ä†G ¸ˆG ¬ŠG  ŒG ”ŽG ˆ�G |’G p”G d–G X˜G LšG @œG 4žG ( G ¢G ¤G ¦G ø§G ì©G à«G Ô­G È¯G PÃG DÅG 8ÇG ,ÉG  ËG ÍG ÏG üÐG ðÒG äÔG ØÖG ÌØG ÀÚG ´ÜG ¨ÞG œàG �âG „äG xæG lèG `êG TìG HîG <ðG 0òG $ôG öG øG  úG ôûG èýG ÜÿG è H âH ÜH ÖH ÐH ÊH ÄH ¾H ¸H ²	H ¬
H ¦H  H šH ”H ŽH ˆH ‚H |H vH pH jH dH ^H XH RH LH FH @H :H 4H .H ( H "!H "H #H $H 
%H &H þ&H ø'H ò(H ì)H æ*H à+H Ú,H Ô-H Î.H È/H Â0H ¼1H ¶2H °3H ª4H ¤5H ž6H ˜7H ’8H Œ9H †:H €;H z<H t=H n>H h?H b@H \AH VBH PCH JDH DEH >FH 8GH 2HH ,IH &JH  KH LH MH NH OH PH üPH öQH ðRH êSH äTH ÞUH ØVH ÒWH ÌXH ÆYH ÀZH º[H ´\H ®]H ¨^H ¢_H œ`H –aH �bH ŠcH „dH ~eH xfH rgH lhH fiH `jH ZkH TlH NmH HnH BoH <pH 6qH 0rH *sH $tH uH vH wH xH yH  zH úzH ô{H î|H è}H â~H ÜH k€H è€H e�H â�H _‚H Ü‚H YƒH ÖƒH S„H Ð„H M…H Ê…H G†H Ä†H A‡H ¾‡H ;ˆH ¸ˆH 5‰H ²‰H /ŠH ¬ŠH )‹H ¦‹H #ŒH  ŒH �H š�H ŽH ”ŽH �H Ž�H �H ˆ�H ‘H ‚‘H ÿ‘H |’H ù’H v“H ó“H p”H í”H j•H ç•H d–H á–H ^—H Û—H X˜H Õ˜H R™H Ï™H LšH ÉšH F›H Ã›H @œH ½œH :�H ·�H 4žH ±žH .ŸH «ŸH ( H ¥ H "¡H Ÿ¡H ¢H ™¢H £H “£H ¤H �¤H 
¥H ‡¥H ¦H �¦H þ¦H {§H ø§H u¨H ò¨H o©H ì©H iªH æªH c«H à«H ]¬H Ú¬H W­H Ô­H Q®H Î®H K¯H È¯H E°H Â°H ?±H ¼±H 9²H ¶²H 3³H °³H -´H ª´H 'µH ¤µH !¶H ž¶H ·H ˜·H ¸H ’¸H ¹H Œ¹H 	ºH †ºH »H €»H ý»H z¼H ÷¼H t½H ñ½H n¾H ë¾H h¿H å¿H bÀH ßÀH \ÁH ÙÁH VÂH ÓÂH PÃH ÍÃH JÄH ÇÄH DÅH ÁÅH >ÆH »ÆH 8ÇH µÇH 2ÈH ¯ÈH ,ÉH ©ÉH &ÊH £ÊH  ËH �ËH ÌH —ÌH ÍH ‘ÍH ÎH ‹ÎH ÏH …ÏH ÐH ÐH üÐH yÑH öÑH sÒH ðÒH mÓH êÓH gÔH äÔH aÕH ÞÕH [ÖH ØÖH U×H Ò×H OØH ÌØH IÙH ÆÙH CÚH ÀÚH =ÛH ºÛH 7ÜH ´ÜH 1ÝH ®ÝH +ÞH ¨ÞH %ßH ¢ßH àH œàH áH –áH âH �âH ãH ŠãH äH „äH åH ~åH ûåH xæH õæH rçH ïçH lèH éèH féH ãéH `êH ÝêH ZëH ×ëH TìH ÑìH NíH ËíH HîH ÅîH BïH ¿ïH <ðH ¹ðH 6ñH ³ñH 0òH ­òH *óH §óH $ôH ¡ôH õH ›õH öH •öH ÷H �÷H øH ‰øH ùH ƒùH  úH }úH úúH wûH ôûH qüH îüH kýH èýH eþH âþH _ÿH ÜÿH€, I k I€© I è I€&I eI€£I âI€ I _I€�I ÜI€I YI€—I ÖI€I SI€‘I ÐI€I MI€‹I ÊI€I GI€…I ÄI€I AI€I ¾I€üI ;I€yI ¸I€öI 5	I€s	I ²	I€ð	I /
I€m
I ¬
I€ê
I )I€gI ¦I€äI #I€aI  I€ÞI I€[I šI€ØI I€UI ”I€ÒI I€OI ŽI€ÌI I€II ˆI€ÆI I€CI ‚I€ÀI ÿI€=I |I€ºI ùI€7I vI€´I óI€1I pI€®I íI€+I jI€¨I çI€%I dI€¢I áI€I ^I€œI ÛI€I XI€–I ÕI€I RI€�I ÏI€I LI€ŠI ÉI€I FI€„I ÃI€I @I€~I ½I€ûI :I€xI ·I€õI 4I€rI ±I€ïI .I€lI «I€éI ( I€f I ¥ I€ã I "!I€`!I Ÿ!I€Ý!I "I€Z"I ™"I€×"I #I€T#I “#I€Ñ#I $I€N$I �$I€Ë$I 
%I€H%I ‡%I€Å%I &I€B&I �&I€¿&I þ&I€<'I {'I€¹'I ø'I€6(I u(I€³(I ò(I€0)I o)I€­)I ì)I€**I i*I€§*I æ*I€$+I c+I€¡+I à+I€,I ],I€›,I Ú,I€-I W-I€•-I Ô-I€.I Q.I€�.I Î.I€/I K/I€‰/I È/I€0I E0I€ƒ0I Â0I€ 1I ?1I€}1I ¼1I€ú1I 92I€w2I ¶2I€ô2I 33I€q3I °3I€î3I -4I€k4I ª4I€è4I '5I€e5I ¤5I€â5I !6I€_6I ž6I€Ü6I 7I€Y7I ˜7I€Ö7I 8I€S8I ’8I€Ð8I 9I€M9I Œ9I€Ê9I 	:I€G:I †:I€Ä:I ;I€A;I €;I€¾;I ý;I€;<I z<I€¸<I ÷<I€5=I t=I€²=I ñ=I€/>I n>I€¬>I ë>I€)?I h?I€¦?I å?I€#@I b@I€ @I ß@I€AI \AI€šAI ÙAI€BI VBI€”BI ÓBI€CI PCI€ŽCI ÍCI€DI JDI€ˆDI ÇDI€EI DEI€‚EI ÁEI€ÿEI >FI€|FI »FI€ùFI 8GI€vGI µGI€óGI 2HI€pHI ¯HI€íHI ,II€jII ©II€çII &JI€dJI £JI€áJI  KI€^KI �KI€ÛKI LI€XLI —LI€ÕLI MI€RMI ‘MI€ÏMI NI€LNI ‹NI€ÉNI OI€FOI …OI€ÃOI PI€@PI PI€½PI üPI€:QI yQI€·QI öQI€4RI sRI€±RI ðRI€.SI mSI€«SI êSI€(TI gTI€¥TI äTI€"UI aUI€ŸUI ÞUI€VI [VI€™VI ØVI€WI UWI€“WI ÒWI€XI OXI€�XI ÌXI€
YI IYI€‡YI ÆYI€ZI CZI€�ZI ÀZI€þZI =[I€{[I º[I $tI„ªshowlegendÂ¡yÈ\                                        ä+¾?L’„?¦H?3*#?Ä?Ëãñ>
Sä>bãÑ>`Lâ>¢‹Î>úo»>dÎ¶>¤Ûª>³g?ê€?·û>,‚?;iû>tvÓ?nX¿?vŸ?-Õ‹?«‚?f°n?¶’f?&vh?Ïh?[?Ø£W?U\Q?ÏN?Uþ?—´ó?aùé?VXà?dæ×?Ž’Ò?óˆË?YÜÆ?¼äÁ?â¼?� ·?;µ?òí´?òI±?äº¬?VM¨?:¦?V0¥?�¡?BÑ�?"¸š?Õm—?ÏY”?�4”?q²“?Óˆ’?È²—?Cã•?¾×•?]Ê•?¨P”?íB“?‘?5�?šàŽ?ª0�?ÙÏ‹?`Š?A‰?vˆ‡?�H‡?ÑG†?Šo…?°N„?$ƒ?¹j‚?‚V�?ˆ�?B€?>}?Ç„|?5©z?PQ}?Ò{?Íky?©^w?\iu?VÁs?Ö­s?Ø¢q?`xq?¾ao?ÕNo?òXn?…¼m?]›k?û:k?¸Œj?ýÆh?õ�z?7Hy?qx?ø§v?´e�?‚?À0�?Ý®�?M�?ˆl€?”	€?´¯€?Ìû?˜‰~?D}?ôÃ{?/›{?ói{?Tây?å§x??˜w? Ôw?ÿ‘y?€)x?Q�?›“Ž?¢Þ�?H�?H �?ïŒ?15‹?�ÖŠ?óFŠ?^ïŠ?,Š?Î‰?ê‰?Ã÷ˆ?#^ˆ?’¶‡?m0‡?Š‡?ÑU†?¤Ø…?’=…?…?@û…?R…?‰=…?;®„?5„?Í–ƒ?Aƒ?%2ƒ?DÔ‚?Ñ8‚?£½�?¥“�?K\�?lŒ�?5�?�ö€?Îu€?‰Ç?ËÅ~?.†?Ê~?›~?eÂ}?!É?Q€?1Z? ù~?ˆZ~?ªl}?õ�|?éý{?
){?Zj{?J\z?a’y?”x?8Âx?^ðw?ªw?…v?Úv?ŸXu?Ðˆt?¬ès?5	s?‚_r?i§q?Äur?Ñq?œ•q?8q?s}p?ð¡o?ª�o?«æn?ŠØn?ü}n?VRn?I m?� m?áwl?ô§k?�(k?µ•j?àj?«`j?‚ j?ü+i?àÄj?‘j?Ìíi?P‡i?îôh?ÛWh?A³h?ŽKh?nÄg?‹g?Ùyf?7uf?Ý¿e?]-e?\™d?,Ed?+¤c?¬	c?Yc?’éb?jec?4Øb?Æ3b?½Ab?üþa?B¡a?‘ú`?”`?©¢`?˜`?`?û¥_?õ^?±ó`?Î`?Ví_?¼b_?‰õ^?Õ®^?ÒÀ^?@^?Ó]?° ^?Ö'b?KSb?þÏa?ûfa?ËQb?�Ãa?­ya?Aqa?
Œa?¤a?e…`?ÍQ`?ð_?D…_?O`?_:`?Ö–`?;
`?™_?:_?ùÞ^?ò·^?$S^?_Q^?è5^?d×]?ýÅ]?­Ö]? ˜]?‹—]?–]?pJ^?õx^?^? ¿]?¦]?iÉ]?%O]?Ò¦]?´*]?ˆ,]?|ü\?ŒÁ\?Õ˜\?’3\?8Ù[?$\[?ŠåZ?®‘Z? LZ?g2Z?1ôY?­rY?!HY?Z?úY?g�Z?žZ?  Y?ð]Y?ý/Y? ÈY?5sY?vY?ŠãX?-oZ?fBZ?è­[?¦¢[?¦_[?ðq[?d*[?Bb?—a?�Oa?S-a?;ê`?î…`?Ù¿c?Çe?»¯d?‰d?Pd?%sd?X&d?³Åc?[c?0Hc?@(c?‚d?ÿ,d?uèc?ƒ“c?Þ;c?0õb?…¦b?ŠNb?äb?ðÊa?za?la?ÊË`?Þ¯`?}†`?Øa?ÿ¡`?H4`?«í_?º¤_?·]_?Ì _?ÌB_?ý^?›ø^?+—^?·w^?j;^??^?z^?~»]?l]?qÛ]?“‰]?’]?B2]?2]?Ë²]?Z]?”@]?˜)]?øÉ]?ì]?íª]?«}]?ø3]?cô\?•¢\?ÓJ\?ÿ\?Žò\?Í¾\?Ì¡\?åú\?rå\?ý¥\?hm\?É@\?S«\?��\?yS\?q\?kÁ[?ƒt[?ñB[?b
[?[?·ÚZ?M�Z?;Z?s4Z?VZ?L¾Y?�¼Y?²¦Y? fY?1CY?=Y?Y?rÙX?œX?£ÕX?Î�X?õŸX?«ÙX?›X?9€X?ºƒX?ËLX?œ!X?œÐW?Q¼W?ÿW?�ßW?ÂŸW?7‰W?ŒVW?@W?ÝºV?sV?wLV?Þ<V?ƒV?ÞU?|¢U?�~U?0PU?ðU?ëîT?LaU?,U?çôT?<¶T?«öT?ñÎT?3—T?m<U?RêT?s¶T?GU?TùT?w¼T?LoT?j]U?¸,U?d U?8»T?•¡T?�_T?7(T?ÏåS?0ßS?éÃS?C·S?ætS?‚[S?E)S?/S?<´R? ÓR?Ð¢R?•kR?(3R?ñQ?»ãQ?¯UR?¬:R?R?‘ìQ?R?lôQ?}³Q?f¼Q?ƒ¨Q?&‘Q?tQ?‘NQ? <Q?D4Q?ÄQ?R?VèQ?9°Q?FØQ?lÏQ?n®Q?9zQ?í5Q?%UQ?ºVQ?õPQ?Q?OQ?©vQ?taQ?gxQ?‰ƒQ?CTQ?ÛTQ?=FQ?Q?£Q?ñÖP?
¨P?µ”P?¾^P?g2P?÷KP?v1P?áP?þúO?aÃO?)P?BsP?šJP?|P?—ýO?ÔO?ˆÁO?�ðO?9RP?žP?xÜO?
ÔO?ž˜O?ËxO?3VO?O?dìN?«·N?ã–N?ÑrN?É>N?ÃN?úO?™ëN?KµN?�N?cIN?¬©N? |N?ON?êVN?&KN?7N?õÞM?µM?4µM?Ù‘M?¾aM?°>M?ÇM?Ú M?ÒéL?J¶L?]vL?DL?·L?¬ïK?ÐÐK?ÛÑK?šN?]ŠN?mQN?c=N?N?“ÞN?sÂN?ó¬N?VŠN?bN?9N?›+N?,N?‚ N?�ÙM?”÷M?˜ÈM?!¶M?¿ M?ÄM?§^M?5;M?ØsM?FVM?vOM?….M?eM?þÝL?-ÊL?ÓœL?ï–L?rL?zUL?ï?L?ŽL?qõK?PL?›êK?J	L?¶ÜK?c«K?|K?
OK?%K?aòJ?3K?ùàJ?ÈJ?ü®J?yŽJ?¬sJ?!ÅJ?%—J?öèJ?YìJ?ZK?† K?˜äJ?"½J?v¸J?´J?ñJ?OVJ?•MJ?ï?J?J?uüI?*ÖI?ÃI?O•I?˜vI?î?I?Õ.I?I?ÅI?9íH?§ôH?xéH?½úH?A!I?©I?3ÚH?5¾H?È¢H?oyH?âªH?h£H?{H?ÐlH?á^H?Á^H?Y<H?ãH?eH?¯äG?8ÝG?¸G?I¯G?'ŠG?•fG?È>G?ëUG?CG?x+G?eG?XûF?øíF?”ÜF?ûÂF?®F?¨±F?ö”F?`uF?eYF?.DF?«F?+ùE?qóE?ÐðE?ÂãE?ÇÈE?¯E?àÜE?‹ÈE?o¤E?ô{E?Â`E?È]E?9AE?xE?öHE?†&E? ñD?«äD?ÅÍD?ÐáD?ý¸D?ðšD?ûD?.fD?gpD?FUD?Ç<D?qqD?þ“D?H’D?´nD?/’D?®“D?yD?£dD?(hD?j§D?ì{D?ñSD?lLD?ÌPD?`/D?½(D?…	D?4þC?Ô÷C?×3D?¥D?jðC?ÐD?¬üC?˜åC?ÐC?NÛC?lÂC?øŸC?ƒ€C?x_C?>cC?<lC?9YC?;5C?ä#C?C?¹÷B?¹ÓB?‹¹B?R¶B?D–B?ŽB?ô½B?£B?Ü”B?P~B?Þ}B?9\B?�_B?ÓEB?º4B?’B?ßøA?iÝA?v¿A?Ã©A?å¾A?ŸA?'ŒA?ÑmA?ýhA?¨”A?	”A?OsA?XdA?1SA?3:A?RDA?ýFA?ª=A?A?sA?‚¥A?•A?<pA?—tA?ŸeA?éŠA?©|A?öA?<ÜA?7B?	âA?8ÒA?£µA?–A?£ƒA?½oA?}bA?¤>A?7A?gA?ÃA?ií@?Î@?†Ü@?%¿@?ª²@?µ@?²­@?ø°@?ÔEA?@A?a#A?¨sB?ÊuB?`iB?¥EB?7+B?B?žöA?èïA?¡áA?À"C?VsC?hC?wC?ÿlC?—ZC?�4C?î)C?gC?ññB?âØB?0ÂB?F¯B?*ŽB?VsB?%WB?¥8B?(B?¯8B?ƒB?¬B?ä•B?–„B?ä�B?<pB?CbB?²AB?ø9B?ƒ(B?B?§÷A?ÚA?´ÀA?u¢A?ø–A?¢šA?º©A?Q—A?±…A?ç¦A?˜ŒA?p|A?ÝŠA?yzA?}�A?œA?åžA?A?­oA?ÈWA?¥lA?aRA?!TA?JA?1A?z$A?IA?.QA?±IA?
?A?(%A?6A?�ö@?í@?ÃcD?¤type§scatter¡xÈ\  €?   @  @@  €@   @  À@  à@   A  A   A   A  ðA   B  HB  pB  ŒB   B  ´B  ÈB  HC  –C  ÈC  úC  D  /D  HD  aD  zD  úD €;E  zE @œE €»E ÀÚE  úE  F @F à+F €;F  KF ÀZF `jF  zF Ð„F  ŒF p”F @œF ¤F à«F °³F €»F PÃF  ËF ðÒF ÀÚF �âF `êF 0òF  úF è G ÐG ¸G  G ˆG pG XG @G ( G $G ø'G à+G È/G °3G ˜7G €;G h?G PCG 8GG  KG OG ðRG ØVG ÀZG ¨^G �bG xfG `jG HnG 0rG vG  zG è}G è€G Ü‚G Ð„G Ä†G ¸ˆG ¬ŠG  ŒG ”ŽG ˆ�G |’G p”G d–G X˜G LšG @œG 4žG ( G ¢G ¤G ¦G ø§G ì©G à«G Ô­G È¯G PÃG DÅG 8ÇG ,ÉG  ËG ÍG ÏG üÐG ðÒG äÔG ØÖG ÌØG ÀÚG ´ÜG ¨ÞG œàG �âG „äG xæG lèG `êG TìG HîG <ðG 0òG $ôG öG øG  úG ôûG èýG ÜÿG è H âH ÜH ÖH ÐH ÊH ÄH ¾H ¸H ²	H ¬
H ¦H  H šH ”H ŽH ˆH ‚H |H vH pH jH dH ^H XH RH LH FH @H :H 4H .H ( H "!H "H #H $H 
%H &H þ&H ø'H ò(H ì)H æ*H à+H Ú,H Ô-H Î.H È/H Â0H ¼1H ¶2H °3H ª4H ¤5H ž6H ˜7H ’8H Œ9H †:H €;H z<H t=H n>H h?H b@H \AH VBH PCH JDH DEH >FH 8GH 2HH ,IH &JH  KH LH MH NH OH PH üPH öQH ðRH êSH äTH ÞUH ØVH ÒWH ÌXH ÆYH ÀZH º[H ´\H ®]H ¨^H ¢_H œ`H –aH �bH ŠcH „dH ~eH xfH rgH lhH fiH `jH ZkH TlH NmH HnH BoH <pH 6qH 0rH *sH $tH uH vH wH xH yH  zH úzH ô{H î|H è}H â~H ÜH k€H è€H e�H â�H _‚H Ü‚H YƒH ÖƒH S„H Ð„H M…H Ê…H G†H Ä†H A‡H ¾‡H ;ˆH ¸ˆH 5‰H ²‰H /ŠH ¬ŠH )‹H ¦‹H #ŒH  ŒH �H š�H ŽH ”ŽH �H Ž�H �H ˆ�H ‘H ‚‘H ÿ‘H |’H ù’H v“H ó“H p”H í”H j•H ç•H d–H á–H ^—H Û—H X˜H Õ˜H R™H Ï™H LšH ÉšH F›H Ã›H @œH ½œH :�H ·�H 4žH ±žH .ŸH «ŸH ( H ¥ H "¡H Ÿ¡H ¢H ™¢H £H “£H ¤H �¤H 
¥H ‡¥H ¦H �¦H þ¦H {§H ø§H u¨H ò¨H o©H ì©H iªH æªH c«H à«H ]¬H Ú¬H W­H Ô­H Q®H Î®H K¯H È¯H E°H Â°H ?±H ¼±H 9²H ¶²H 3³H °³H -´H ª´H 'µH ¤µH !¶H ž¶H ·H ˜·H ¸H ’¸H ¹H Œ¹H 	ºH †ºH »H €»H ý»H z¼H ÷¼H t½H ñ½H n¾H ë¾H h¿H å¿H bÀH ßÀH \ÁH ÙÁH VÂH ÓÂH PÃH ÍÃH JÄH ÇÄH DÅH ÁÅH >ÆH »ÆH 8ÇH µÇH 2ÈH ¯ÈH ,ÉH ©ÉH &ÊH £ÊH  ËH �ËH ÌH —ÌH ÍH ‘ÍH ÎH ‹ÎH ÏH …ÏH ÐH ÐH üÐH yÑH öÑH sÒH ðÒH mÓH êÓH gÔH äÔH aÕH ÞÕH [ÖH ØÖH U×H Ò×H OØH ÌØH IÙH ÆÙH CÚH ÀÚH =ÛH ºÛH 7ÜH ´ÜH 1ÝH ®ÝH +ÞH ¨ÞH %ßH ¢ßH àH œàH áH –áH âH �âH ãH ŠãH äH „äH åH ~åH ûåH xæH õæH rçH ïçH lèH éèH féH ãéH `êH ÝêH ZëH ×ëH TìH ÑìH NíH ËíH HîH ÅîH BïH ¿ïH <ðH ¹ðH 6ñH ³ñH 0òH ­òH *óH §óH $ôH ¡ôH õH ›õH öH •öH ÷H �÷H øH ‰øH ùH ƒùH  úH }úH úúH wûH ôûH qüH îüH kýH èýH eþH âþH _ÿH ÜÿH€, I k I€© I è I€&I eI€£I âI€ I _I€�I ÜI€I YI€—I ÖI€I SI€‘I ÐI€I MI€‹I ÊI€I GI€…I ÄI€I AI€I ¾I€üI ;I€yI ¸I€öI 5	I€s	I ²	I€ð	I /
I€m
I ¬
I€ê
I )I€gI ¦I€äI #I€aI  I€ÞI I€[I šI€ØI I€UI ”I€ÒI I€OI ŽI€ÌI I€II ˆI€ÆI I€CI ‚I€ÀI ÿI€=I |I€ºI ùI€7I vI€´I óI€1I pI€®I íI€+I jI€¨I çI€%I dI€¢I áI€I ^I€œI ÛI€I XI€–I ÕI€I RI€�I ÏI€I LI€ŠI ÉI€I FI€„I ÃI€I @I€~I ½I€ûI :I€xI ·I€õI 4I€rI ±I€ïI .I€lI «I€éI ( I€f I ¥ I€ã I "!I€`!I Ÿ!I€Ý!I "I€Z"I ™"I€×"I #I€T#I “#I€Ñ#I $I€N$I �$I€Ë$I 
%I€H%I ‡%I€Å%I &I€B&I �&I€¿&I þ&I€<'I {'I€¹'I ø'I€6(I u(I€³(I ò(I€0)I o)I€­)I ì)I€**I i*I€§*I æ*I€$+I c+I€¡+I à+I€,I ],I€›,I Ú,I€-I W-I€•-I Ô-I€.I Q.I€�.I Î.I€/I K/I€‰/I È/I€0I E0I€ƒ0I Â0I€ 1I ?1I€}1I ¼1I€ú1I 92I€w2I ¶2I€ô2I 33I€q3I °3I€î3I -4I€k4I ª4I€è4I '5I€e5I ¤5I€â5I !6I€_6I ž6I€Ü6I 7I€Y7I ˜7I€Ö7I 8I€S8I ’8I€Ð8I 9I€M9I Œ9I€Ê9I 	:I€G:I †:I€Ä:I ;I€A;I €;I€¾;I ý;I€;<I z<I€¸<I ÷<I€5=I t=I€²=I ñ=I€/>I n>I€¬>I ë>I€)?I h?I€¦?I å?I€#@I b@I€ @I ß@I€AI \AI€šAI ÙAI€BI VBI€”BI ÓBI€CI PCI€ŽCI ÍCI€DI JDI€ˆDI ÇDI€EI DEI€‚EI ÁEI€ÿEI >FI€|FI »FI€ùFI 8GI€vGI µGI€óGI 2HI€pHI ¯HI€íHI ,II€jII ©II€çII &JI€dJI £JI€áJI  KI€^KI �KI€ÛKI LI€XLI —LI€ÕLI MI€RMI ‘MI€ÏMI NI€LNI ‹NI€ÉNI OI€FOI …OI€ÃOI PI€@PI PI€½PI üPI€:QI yQI€·QI öQI€4RI sRI€±RI ðRI€.SI mSI€«SI êSI€(TI gTI€¥TI äTI€"UI aUI€ŸUI ÞUI€VI [VI€™VI ØVI€WI UWI€“WI ÒWI€XI OXI€�XI ÌXI€
YI IYI€‡YI ÆYI€ZI CZI€�ZI ÀZI€þZI =[I€{[I º[I $tI„ªshowlegendÂ¡yÈ\                                        °¡¼>“$I?tZ?¯µV?r¡f?w]W?ÎºA?H°+?H¹)?ö‚þ?ÒÆÐ?OÏ—?	m‚?MÃ?ô h?Ó³e?¸¦P?	¶H?]^µ?Ç—®?É¥Ž?ÄÙ³?à®¡?¿�?*Jƒ?r5‡?Ôü€?–­u?øHo?¤e?€C_?�ˆY?àìU?ráT?žÿ`?qµ]?,a?¬•¤?.‰¢?ÓÇ�?Yž?·‡ž?×›?}Ò–?^“?Í�?†±Ž?`_Œ?nõŠ?6·ˆ?Œ�†?|i„?ƒ?•”€?§a|?px?�ïu?½ðr?4òo?£q?€¨r?øOp?òêm?ßk?+Ïi?—4h?Áf?|pf?‘Îd?Ôb?l×`?
�^?Šú\?Žº^?Ž]?v%`?ÓÅ`?º¾a?P¾a?×na?âA_?»Q]?¬q[?ÃY?GTX?·tV?cT?j.S?üªQ?5¯P?îIO?©N?eM?•ÚK?+“J?F‰I?ZrH?h¬G?P“F?¶F?üF?¬†F?ágE?×nD?ÎÞD?Y$D?š°C?m‘?¯’?F1‘?aÿ�?�?Éj�?OŠŽ?qŽ?ý›�?¼O�?ånŒ?³‹?mäŠ?Ð)Š?÷i‰?Óäˆ?®*ˆ?Ö‡?µI‡?TÕ†?Ã†?ás…?æ…?Âµ„?%„?XÍƒ?Ùƒ?²e‚?Åç�?×Ã�?<�?½È€?ö$€?y?�È~?a~?µ}?…£|?ì|?z9{?ƒ6z?óz?óÿy?:þx?Zïw?fTy?Çz?Ë±y?OÔx?­Dx??Èw?¾=w?üWv?"Éu?ÂÆt?ÑEv?Àry?J¶x?üÛw?1‹w?[äv?”Þu?—Gu?=«t?æäs?et?>iu?ÎÛt?+#t?Yis?-•r?¿Áq?±+q?Ép?hKp?FÆo?@o?Bpn?5µm?:él?�@l? l?]Qk?u©j?è-j?8Äi?™Gi?á~h?GÔg?œ(g?TLh?E°g?ˆrg?íéf?þNf?®Ñe?ò3e?Ge?+ãd?.€d?ƒ.d?t�c?îGc?Ð­b?Üb?ûXb?^ïa?¾Ãa?Êja?.a?=¼`?dD`?Ž­_?*_?‰^?^>^?ÔÐ]?¥ã_?zÖ_?×g_?‚Î^?ó]^?<Õ]?ä2]?Fª\?£\?I¥[??F[?áD[?|×Z?›•Z?òÃZ? IZ?£ªZ?¦!Z?DÙY?X[Y?¯-Y?¯¾X?s?X?X?£X?‡W?ÆíV?j–V?)V?d¬U?EZU?˜ÒU?#†U?ŸÌU?ŽU?¶µU?®]U?/ÄT?Ù”U?šÖU?™ÃU?dˆU?ÙqU?ØïT?ÚžT?(T?>9V?aÆU?ÕjV?¤UZ?Š4Z?A+Z?
ÛZ??ØZ?~îZ?š£Z?-$[?×¡Z?€?Z?8ëY?ÛÖY?ÚzY?�Y? mY?FZ?Ð¹Y?Y3Y?=ÎX?%gX?�
X?ÌªW?�<W?øáV?ŸpV?ŠGV?ÛV?›§U?dU?U?.ÄT?/YU?³óU?|´U?h±U?ÆAU?÷	U?7÷T?.™T?�8T?ƒñT?èœT?eT?gT?¦ÌV?]V?7V?ÏU?RÀU?Í”U?û+U?_ÑT?ãxU?†#U?Œ:U?,	U?/ÜT?£±T?‰T?�T?#èS?ƒS?‚dS?€þS?¾£S?ÆjS?ö S?d©R?–LR?R?:ñQ?ùR?”ÉQ?«ãQ?—óQ?ö¡Q?ßZQ?¯JQ?“$Q?Q?ÿQ?ôµQ?×‘Q?ÚpQ?rQ?\Q?Ý\Q?NRQ?DQ?“àP?ÃpQ?ž:Q?º´Q?pžQ?<:Q?»Q?0ÏP?3†P?¸°P?DQP?Š÷O?÷¹O?ÐÑO?K¯O?L–O?ÔYO?fO?u­N?¬N?uN?œCN?óN?SØM?äJN?ûN?{¹M?�­M?¸{M?´{M?Ø6M?åoM?M?¡ÛL?}µL?½vL?+5L?ïK?°K?ø5L?cøK?ŒàK?I²K?eK?L4K?0K?ïK?|VK?ÃK?øJ?�pK?�9K?ŠèJ?W”K?’JK?´ŠK?YcK?�K?CäJ?ä“J?Ò½K?¡qK?
'K?,EL?]ÖL?—L?æiL?ã*L?9L?ËëK?QšK?_K?­K?ÌÞJ?!�J?¡mJ?îYM?/'M?ê×L?¸¡L?F}L?ó=L?‘FL?›@L? ›L?œ�M?»”M?¤`M?"JM?P?`üO?‰êO?!P?3ÕO?­ÚO?òP?M¿O?Ô”O?’O?{O?TO?wO? O?GïN?q¸N?™’N?¿PN?0N?%N?„ØM?ì“M?ÒŒM?PM?òM?cM?.PM?ã#M?·ðL?¼²L?OjL?g8L?lL?ú	L?£*L?I
L?ÉäK?BÇK?·’K?ãZK?örK?©AK?˜*K?øJ?ÝJ?–J?z^J?ð3J?;J?×ÓI?ÀJ?pËI?îÛI?^ÏI?G˜I?�oI?*TI?k,I?Ž%I?ôI?MI?çéH?Á²H?ótH?ÔDH?ÿÝH?„âH?æùH?÷ÚH?¹¡H?usH?7H?ˆH?‘õG?*H?­øG?é¿G?‘G?ÅÓG?¬G?æH?yØG? ¬G?Š‡G?6zG?ƒsG?k?G?nG?eãF?ÏÌF?m²F?¢„F?ûRF?ô'F?;F?éÍE?“ÚE?hÃE?œ¤E? ¡E?'sE?TE?—#E?õE?ïD?øêD?ï¿D?BÉD?Ø¦D?Ù¸D?þ¦D?×ÞD?[¬D?û¥D?ÖnD?ÂFD?–.D?ïC?êËC?{§C?v}C?(KC?ÝkC?šõC?HúC? D?êeD?CHD?nUD?²4D?ñD?‡D?–#D?¤D?{!D?<õC?­D?]ìC?éÔC?’²C?]“C?Õ…C?A±C?YŽC?�C?]zC?ÏVC?‚¨C?<„D?GxD??eD?„nD?gXD?¿´D?v‡D?%LE?k-E?E#E?¢E?ÇE?ôæD?iÀD?
£D?¹�D?¶TD?o+D?bòC?nòC?jD?“ëC?~æC?ÝÍC?!ßC?ÏD?J"D?rD?D?èæC?LÐC?¦C?�”C?¿wD?èhD?AUD?-D?Þ,D?·D?üC?�ÒC?|·C?Ÿ’C?ö‰C?ÚbC?GKC?s)C?
C?½ÜB?~êB?öÊB?•ŸB?´…B?„C?*’C?MàC?M·C?Þ¢C?³…C?†uC?ÁNC?°RC?k9C?à2C?×áC?tÎC?S>G?•G? G?®ßF?|ÊF?7ÀF?<™F?lvF?¾eF?ÕAF?I/F?[F?�ìE?¬èE?ý×E?}§E?vE?NjE?@E?¤'E?„)E?ÈE?ŽE?¯:E?È E?DE?øD?àD?œÈD?´ŸD?�D?“mD?�œD?AyD?¯}D?OoD?M¬D?[ïD?ÑD?�®D?ÆD?È¥D?˜D?ãvD?«cD?¹E?CîD?¹ÅD?ó’D?rD??QD?ë1D?ÎòD?víD?çÛD?qÂD?• D??�D?¬aD?HD?æ=D?j8D?¨%D?&ÿC?œñC?ŸÈC?ÈªC?²«C?gŒC?�C?4\C?–4C?Í@C?! C?Ô C?kãB?íÛB?“^I??8I?'I?õL?L?JöK?ÀÊK?µ¶K?ÉK?*¹K?‰ L?ûëK?æÔK?“ýK?ÅÙK?ã»K?´£K?`”K?}ÏK?ý±K?´›K?à}K?ÖqK?ðWK?ÁPK?<K?œIK?dAK?(K?GK?ùJ?ìJ?d¸J?~›J?v‰J?�qJ?©`J?èGJ?ÿXJ?GFJ?Ç=J?	*J?©J?èìI?ËI?G¨I?$£I?¯�I?K…I?“tI?NI?J2I?|I?TúH?ŒÔH?½H?ôÛH?ð½H?§H?í˜H?y—H?æuH?i|H?þiH?vƒH?JjH?ò`H?’ªH?~H?kH?ÝHH?
2H?ãH?©öG?çËG?T¿G?K—G?u�G?ÓÓG?f¬G?©¨G?ƒ G?`€G?lG?|PG?”›G?� G?f�G?K|G?xG?	rG?ÃMG?Q5G?f*G?’G?ªG?2‡G?r}G?4…G?ø^G?¿‰G?kG?nG?]�G?_G?µJG?•,G?¹.G?ñG?vG?HêF?¬ÍF?ÁÁF?˜¦F?D˜F?ÊyF?UF?DF?ã0F?¸F?¹F?bF?œùE?ÛäE?«yF?°XF?/ƒF?:¶F?-¡F?L‰F?ÐzF?1uF?gF?)NF?Ç>F?w:F?3@F?(,F?98F?nF?ËSF?;JF?^.F?�F?F?õE?ÿæE?”ÉE?µQF?I?F?OrG?£ZG?¦AG?	G?dG?ØF?Ð¿F?Â£F?ŽH?d*H?2%H?-H?ŒH?… H?½H?8ëG?žÚE?¤type§scatter¡xÈ\  €?   @  @@  €@   @  À@  à@   A  A   A   A  ðA   B  HB  pB  ŒB   B  ´B  ÈB  HC  –C  ÈC  úC  D  /D  HD  aD  zD  úD €;E  zE @œE €»E ÀÚE  úE  F @F à+F €;F  KF ÀZF `jF  zF Ð„F  ŒF p”F @œF ¤F à«F °³F €»F PÃF  ËF ðÒF ÀÚF �âF `êF 0òF  úF è G ÐG ¸G  G ˆG pG XG @G ( G $G ø'G à+G È/G °3G ˜7G €;G h?G PCG 8GG  KG OG ðRG ØVG ÀZG ¨^G �bG xfG `jG HnG 0rG vG  zG è}G è€G Ü‚G Ð„G Ä†G ¸ˆG ¬ŠG  ŒG ”ŽG ˆ�G |’G p”G d–G X˜G LšG @œG 4žG ( G ¢G ¤G ¦G ø§G ì©G à«G Ô­G È¯G PÃG DÅG 8ÇG ,ÉG  ËG ÍG ÏG üÐG ðÒG äÔG ØÖG ÌØG ÀÚG ´ÜG ¨ÞG œàG �âG „äG xæG lèG `êG TìG HîG <ðG 0òG $ôG öG øG  úG ôûG èýG ÜÿG è H âH ÜH ÖH ÐH ÊH ÄH ¾H ¸H ²	H ¬
H ¦H  H šH ”H ŽH ˆH ‚H |H vH pH jH dH ^H XH RH LH FH @H :H 4H .H ( H "!H "H #H $H 
%H &H þ&H ø'H ò(H ì)H æ*H à+H Ú,H Ô-H Î.H È/H Â0H ¼1H ¶2H °3H ª4H ¤5H ž6H ˜7H ’8H Œ9H †:H €;H z<H t=H n>H h?H b@H \AH VBH PCH JDH DEH >FH 8GH 2HH ,IH &JH  KH LH MH NH OH PH üPH öQH ðRH êSH äTH ÞUH ØVH ÒWH ÌXH ÆYH ÀZH º[H ´\H ®]H ¨^H ¢_H œ`H –aH �bH ŠcH „dH ~eH xfH rgH lhH fiH `jH ZkH TlH NmH HnH BoH <pH 6qH 0rH *sH $tH uH vH wH xH yH  zH úzH ô{H î|H è}H â~H ÜH k€H è€H e�H â�H _‚H Ü‚H YƒH ÖƒH S„H Ð„H M…H Ê…H G†H Ä†H A‡H ¾‡H ;ˆH ¸ˆH 5‰H ²‰H /ŠH ¬ŠH )‹H ¦‹H #ŒH  ŒH �H š�H ŽH ”ŽH �H Ž�H �H ˆ�H ‘H ‚‘H ÿ‘H |’H ù’H v“H ó“H p”H í”H j•H ç•H d–H á–H ^—H Û—H X˜H Õ˜H R™H Ï™H LšH ÉšH F›H Ã›H @œH ½œH :�H ·�H 4žH ±žH .ŸH «ŸH ( H ¥ H "¡H Ÿ¡H ¢H ™¢H £H “£H ¤H �¤H 
¥H ‡¥H ¦H �¦H þ¦H {§H ø§H u¨H ò¨H o©H ì©H iªH æªH c«H à«H ]¬H Ú¬H W­H Ô­H Q®H Î®H K¯H È¯H E°H Â°H ?±H ¼±H 9²H ¶²H 3³H °³H -´H ª´H 'µH ¤µH !¶H ž¶H ·H ˜·H ¸H ’¸H ¹H Œ¹H 	ºH †ºH »H €»H ý»H z¼H ÷¼H t½H ñ½H n¾H ë¾H h¿H å¿H bÀH ßÀH \ÁH ÙÁH VÂH ÓÂH PÃH ÍÃH JÄH ÇÄH DÅH ÁÅH >ÆH »ÆH 8ÇH µÇH 2ÈH ¯ÈH ,ÉH ©ÉH &ÊH £ÊH  ËH �ËH ÌH —ÌH ÍH ‘ÍH ÎH ‹ÎH ÏH …ÏH ÐH ÐH üÐH yÑH öÑH sÒH ðÒH mÓH êÓH gÔH äÔH aÕH ÞÕH [ÖH ØÖH U×H Ò×H OØH ÌØH IÙH ÆÙH CÚH ÀÚH =ÛH ºÛH 7ÜH ´ÜH 1ÝH ®ÝH +ÞH ¨ÞH %ßH ¢ßH àH œàH áH –áH âH �âH ãH ŠãH äH „äH åH ~åH ûåH xæH õæH rçH ïçH lèH éèH féH ãéH `êH ÝêH ZëH ×ëH TìH ÑìH NíH ËíH HîH ÅîH BïH ¿ïH <ðH ¹ðH 6ñH ³ñH 0òH ­òH *óH §óH $ôH ¡ôH õH ›õH öH •öH ÷H �÷H øH ‰øH ùH ƒùH  úH }úH úúH wûH ôûH qüH îüH kýH èýH eþH âþH _ÿH ÜÿH€, I k I€© I è I€&I eI€£I âI€ I _I€�I ÜI€I YI€—I ÖI€I SI€‘I ÐI€I MI€‹I ÊI€I GI€…I ÄI€I AI€I ¾I€üI ;I€yI ¸I€öI 5	I€s	I ²	I€ð	I /
I€m
I ¬
I€ê
I )I€gI ¦I€äI #I€aI  I€ÞI I€[I šI€ØI I€UI ”I€ÒI I€OI ŽI€ÌI I€II ˆI€ÆI I€CI ‚I€ÀI ÿI€=I |I€ºI ùI€7I vI€´I óI€1I pI€®I íI€+I jI€¨I çI€%I dI€¢I áI€I ^I€œI ÛI€I XI€–I ÕI€I RI€�I ÏI€I LI€ŠI ÉI€I FI€„I ÃI€I @I€~I ½I€ûI :I€xI ·I€õI 4I€rI ±I€ïI .I€lI «I€éI ( I€f I ¥ I€ã I "!I€`!I Ÿ!I€Ý!I "I€Z"I ™"I€×"I #I€T#I “#I€Ñ#I $I€N$I �$I€Ë$I 
%I€H%I ‡%I€Å%I &I€B&I �&I€¿&I þ&I€<'I {'I€¹'I ø'I€6(I u(I€³(I ò(I€0)I o)I€­)I ì)I€**I i*I€§*I æ*I€$+I c+I€¡+I à+I€,I ],I€›,I Ú,I€-I W-I€•-I Ô-I€.I Q.I€�.I Î.I€/I K/I€‰/I È/I€0I E0I€ƒ0I Â0I€ 1I ?1I€}1I ¼1I€ú1I 92I€w2I ¶2I€ô2I 33I€q3I °3I€î3I -4I€k4I ª4I€è4I '5I€e5I ¤5I€â5I !6I€_6I ž6I€Ü6I 7I€Y7I ˜7I€Ö7I 8I€S8I ’8I€Ð8I 9I€M9I Œ9I€Ê9I 	:I€G:I †:I€Ä:I ;I€A;I €;I€¾;I ý;I€;<I z<I€¸<I ÷<I€5=I t=I€²=I ñ=I€/>I n>I€¬>I ë>I€)?I h?I€¦?I å?I€#@I b@I€ @I ß@I€AI \AI€šAI ÙAI€BI VBI€”BI ÓBI€CI PCI€ŽCI ÍCI€DI JDI€ˆDI ÇDI€EI DEI€‚EI ÁEI€ÿEI >FI€|FI »FI€ùFI 8GI€vGI µGI€óGI 2HI€pHI ¯HI€íHI ,II€jII ©II€çII &JI€dJI £JI€áJI  KI€^KI �KI€ÛKI LI€XLI —LI€ÕLI MI€RMI ‘MI€ÏMI NI€LNI ‹NI€ÉNI OI€FOI …OI€ÃOI PI€@PI PI€½PI üPI€:QI yQI€·QI öQI€4RI sRI€±RI ðRI€.SI mSI€«SI êSI€(TI gTI€¥TI äTI€"UI aUI€ŸUI ÞUI€VI [VI€™VI ØVI€WI UWI€“WI ÒWI€XI OXI€�XI ÌXI€
YI IYI€‡YI ÆYI€ZI CZI€�ZI ÀZI€þZI =[I€{[I º[I $tI„ªshowlegendÂ¡yÈ\          À?š™™?  €?  @?š™?é¢?   ?)¯¡>žØ‰?°¡<?Š%??ßÙ(?u
?Eåì>ê´?–2ð>`ÍÕ>Aùè>-ˆI?!Ü{?¿ñ`?’sX?9A?Ôe¶?sæ¤?r|™?ññs?„<W?óãE?¾È8?`"B?¹Ìi?ã§X?bTY?(ÜO?C’H?ö!D?p¾Z?Ã T?¡­M?žvV?n]?!‚`?uY?u/T?-{k?«vh?žCb?D¿w?'ïx?Ót?vìz?fžu?ÄDw?MŽq?�•t?Œ�o?Áxm?·àh?¿k?^h?[ f?/¶e?èc?³a?]Tf?r=c?¯ú_?fßa?8Ïa?h`?æ†_?×m^?#	]?E[?ÝÜX?îV?N¿U?·ËS?ñ˜R?WmS? æP?`7O?×N?ª�U?5õS?2hW?œ£V?ûU?ûœX?d‚W?0‚V?v®T?R`S? ØQ?};P?#0N?Á0M?w„M?Ù„M?Ô¹U?\¤T? âR?ÀR?(�Q?˜òO?’ýN?;jM?³cM?¡SL?Ö;K?+K?nP?
$O?€O?¹¾F?‚(F?µ:F?aaE?}�D?cD?QC?p±B?0(B?ßkA?1a@?Ú@?‹??Ž>?ÃO=?s‚<?ú@B?ýàB?|‘B?¥øA?ÚTA?|Ð@?#@?m´??‚@?á:??w??1W>?JD??áÊ>?žø=?Ý%>?œ=?_¥=?tÇ=?ä©=?ñ=?éý<?Žl<?Ôª;?ãê:?-Q:?’:?,�9?ñà8?Ò58?£r8?øÁ7?í67?\ 7?úš6?¬46?öT6?LÒ5?µ²5?»”5?&!5?lz4?Ô½5?¬h6?x¬6?}86?ãˆ5?&%5?™Ý4?T8?òX7?Ï.7?/î6?ß6?�b6?cØ5?=m5?35?GŸ4?î•4?“4?Ó	5?ÈM5?
Ô4?xv5?N5?•4?î7?¾ó7?�ƒ7?9È8?Uµ8?/Å8?–p8?î)8?&Ô7??]7?(Æ6?D™6?¢26?Ëò5?pn5?˜¥5?·F5?Æ95?ø-5?Qü4?€�4?†Ñ4?[4?Õã3?0t3?]3?¸¡4?öX4?[á3?8„3?¢É3?:‰3?•^3?-3?¥«2?7F2?‘)2?%ñ1?VB2?Fÿ1?Æ³1?÷`1?»+1?Þ0?DP3?Ž4?½Œ4?ä44?s4?4š3?¿L3?Ï2?2É2?×p2?è2?7Å1?‰1?óu1?é21?\Î0?àÃ0?‡�0?™N0?Wù/?Šµ/?ªŽ/?{/?Qˆ/?}�/?O/?Ê"/?r/?£à.?¯C/?^´/?%”/?.Õ/?00?¿0?¬ï/?Ãµ/?¸q/?Ã0/?;ø.?žÛ.?<¡.?™c.?x`.?iV.?€.?o-.?[.?_g.?@I.?”	.?—ª-?Mz-?D-?‰�-?ëÍ=?O>?‚¥=?íà=?¨å=?e¼=?®�=?ÅÍ=?4€=?Ã>?
Ô=?E�=?õU=?òï>?D??
ò@?ñ¡@?@Ð@?›Ü@?¸¸@?xs@?Õ¼@?.›@?=u@?ž@?—é??¦ˆ??¢:??Þÿ>?·£>?ï>?ºÇ>?Š£>?ð\??É2??ðn??*!??ñü>?‹¯>?.Œ>?àv>?^_>?gü=?ó
>?šü=?eþ=?×=?‰=?žO=?ˆ=?=?t‹>?¹q>?ä>?Bñ=?<²=?-†=?L8=?%ù<?â¸<?£+>?Â'>?Ùñ=?uº=?ók=?<&=?ãæ<?©<?]�<?Qu<?ÇB<?˜><?v<?hj<?œ$<?åj<?Q<?«<?rÓ;?¦µ;?šœ;?åw;?øº;?¯�;?¿‹;?íˆ;?±F;?­	;?MÜ:?‘±:?$j:?€;:?ùý9?	Ü9?Ý¢9?&:?4Ö9?Ü9?5å9?­9?
Õ9?ž§9?³Í9?®Ã9?U­9?9œ9?^‰9?>R9?aÑ9?F‡9?!T9?„c9?ì69?+&9?ƒë8?÷Ä8?ú†8?†^8?G;8?*J8?<8?px9?ì89?D@9?Þ¿9?0ö9?CÑ9?+ž9?Rl9?ª39?Í+9?nò8?9±8?ü€8?'�8?ÌR8?ž&8?¥8?S8?ü•:?~e:?85:?QI:?J&:?^ø9?˜K:?¶:?gÒ9?Í9?ìô9?¾¿9?©‰9?<Š9?¯a9?ú29?Û9?áÊ9?, 9?ˆ9?3T9?d-9?’
9?àÚ8? ±8?K´8?Å—8?ØX8?Ü“8? a8?I8?ã58?-¹8?+‡8?Ëz8?ËM8?ó38?´)8?C	8?Ê8?j¹:?�~:?U:?š,:?::?JÛ>?ð°>?Â>?B½@?Ì*A?JZB?˜B?ùB?,ÛA?KÆA?UóA?öÍA?•A??}A?ó›A?^ÓB?È¦B?µŒB?mhB?gB?ÝB?B?ˆæA?tñA?A=B?åB?¾ßA?åÌA?Ì°A?	~A?`OA?9lA?\›B?9~B?�åF?§ªF?°€F?J?F?NF?ùF?UäE?NF?�þE?'æE?ò°E?.‰E?ÁUE?‹?E?ôE?%SE?æ7F?²*F?TF?~6F?ØF?ÜE?©®E?€|E?ÕME?x%E?�øD?LêD?ÕE?ôèD?gÐD?iêD?Ö¿D?
¹D?L2E?ÄGE?ëE?PèD?XÅD?2£D?ý�D?ÄaD?ZD?±TD?S¢D?3�D?yD?XÛD?ÌØD?åÆD?(œD?(€D?ÚZD?ã2D?Ð�D?7qD?•ND?Y)D?YD?Ü0D?X#D?ÅøC?dÈC?í�C?Ž›C?X…C?)‚C?$qC?¼FC?R"C?1C?øÎB?uC?NC?ÆøB?ÔÏB?b­B?\€B?JB?¾FB?%B?B'B?¿ÿA?�CB?¬«B?•‰B?JoB?åkB?§gB?¢]B?þFB?é*B?î!B?:C?çC?&C?\C?êB?
¿B?C¦B?)C?ÐáB?´B?»“B?�B?ð�B? wB?3CB?iB?åÏB?ƒ”B?sB?¨cB?pJB?ü(B?úB?÷åA?¶ÈA?'óA?^>B?Ñ6B?B?1B?B?tñA? B?ÅmB?SLB?4FB?{"B?ÅõA?uÚA?]˜B?ÎmB?ÁfB?)BB?¼B?¹÷A?ÇÜA?„°A?…A?eA?ÃYA?G:A?œA?<#A?.A?µ(A?Æ2A?äA?ßå@?Í»@?@Ö@?ä·@?	�@?no@?zG@?ê*@?yë@?4Ó@?…¹@?ª¢@?v@?�]@?õ¢@?jA?2ñ@?¸Õ@?Ã@?ã³@?
A?äYA?Æ;A?«=A?—A?ˆA?(kA?C]A?‰JA?Z1A?í1A?¤A?Gë@?ª½@?±›@?n}@?f]@?%6@?ç.@?Z&@? @?ä*@?¢H@?ý$@?ö@?	Ô??òÅ??)·??{’??C‚??Mp??AZ??ËE?Í¤E?Ë�E?‘TE?3IE?=E?E?ÞýD?ýÜD?ÂÓD?±ÒD?øÂD?¯D?�D?éuD?þ‰D?pvD?äyD?shD?�WD?DnD?¥F?8F?_PF?:/F?v0F?›F? F?WØE?ºE?µ¢E?ÉæE?Ÿ¾E?aF?ÒòE?ÀÖE?HñE?#ÆE?�¦E?Õ…E?{E?5OE?Œ,E?ø#E?b
E?réD?ðÌD?Z¼D?É·D?Ø‘D?Õ›D?G¢D?Y¢D?�<E?4E?E E?Å	E?„XE?Ã`E?Œ@E?ú)E?îE?|üD?ëE?„2E?Y~E?<ƒE?‡nE?–dE?VAE?" E?Þ#E?­LE?£.E?�%E?£E?MëD?ÜèD?• E?¬E?`úD?¨üD?tåD?‹ÌD?QgE?ASE?¤;E?ª(E?·E?ŒE?ÐêD?ÆD?[ÁD?˜¨D? ƒD?ÔlD?öVD?‡:D?;D?RþC?D?9ØC?ÅC?øD?—úC?eÿC?VÝC?ÎÂC?ƒ¡C?O�C?IxC?2iC?YHC?ØC?ÀC?
¥C?è‰C?ž�C?YpC?½uC?°VC?0C?¼C?f¥C?ê›C?ñ~C?9hC?ÚKC?É/C?e4C?Ä)C?ÚC?CC?þC?@áB?ÁB?C?©òB?˜ðB?ûòB?ôäB?jÔB?^ÄB?gtE?`ZE?{AE?6'E?nE?‚E?¬ûD?µáD?€ÂD?š¢D?½“D?FwD?Í}D?«vD?hQD?…BD?6(D?Õ,D?+D?e D?Ó
D?.òC?�òC?LðC?züC?àC?6ÎC?lÀC?UæH?DëH?‚ÍH?W²H?4ÇH?HªH?”H?ÙÊI?Ÿ¼I?ü¤I?�õI?<äI?×I?»ºI?u¥I??J?
+J?{(J?ãJ?VîI?ˆØI?ÊÆI?m§I?j”I?$¹I?›˜I?ø�I?œ�I?wN?¤type§scatter¡xÈ\  €?   @  @@  €@   @  À@  à@   A  A   A   A  ðA   B  HB  pB  ŒB   B  ´B  ÈB  HC  –C  ÈC  úC  D  /D  HD  aD  zD  úD €;E  zE @œE €»E ÀÚE  úE  F @F à+F €;F  KF ÀZF `jF  zF Ð„F  ŒF p”F @œF ¤F à«F °³F €»F PÃF  ËF ðÒF ÀÚF �âF `êF 0òF  úF è G ÐG ¸G  G ˆG pG XG @G ( G $G ø'G à+G È/G °3G ˜7G €;G h?G PCG 8GG  KG OG ðRG ØVG ÀZG ¨^G �bG xfG `jG HnG 0rG vG  zG è}G è€G Ü‚G Ð„G Ä†G ¸ˆG ¬ŠG  ŒG ”ŽG ˆ�G |’G p”G d–G X˜G LšG @œG 4žG ( G ¢G ¤G ¦G ø§G ì©G à«G Ô­G È¯G PÃG DÅG 8ÇG ,ÉG  ËG ÍG ÏG üÐG ðÒG äÔG ØÖG ÌØG ÀÚG ´ÜG ¨ÞG œàG �âG „äG xæG lèG `êG TìG HîG <ðG 0òG $ôG öG øG  úG ôûG èýG ÜÿG è H âH ÜH ÖH ÐH ÊH ÄH ¾H ¸H ²	H ¬
H ¦H  H šH ”H ŽH ˆH ‚H |H vH pH jH dH ^H XH RH LH FH @H :H 4H .H ( H "!H "H #H $H 
%H &H þ&H ø'H ò(H ì)H æ*H à+H Ú,H Ô-H Î.H È/H Â0H ¼1H ¶2H °3H ª4H ¤5H ž6H ˜7H ’8H Œ9H †:H €;H z<H t=H n>H h?H b@H \AH VBH PCH JDH DEH >FH 8GH 2HH ,IH &JH  KH LH MH NH OH PH üPH öQH ðRH êSH äTH ÞUH ØVH ÒWH ÌXH ÆYH ÀZH º[H ´\H ®]H ¨^H ¢_H œ`H –aH �bH ŠcH „dH ~eH xfH rgH lhH fiH `jH ZkH TlH NmH HnH BoH <pH 6qH 0rH *sH $tH uH vH wH xH yH  zH úzH ô{H î|H è}H â~H ÜH k€H è€H e�H â�H _‚H Ü‚H YƒH ÖƒH S„H Ð„H M…H Ê…H G†H Ä†H A‡H ¾‡H ;ˆH ¸ˆH 5‰H ²‰H /ŠH ¬ŠH )‹H ¦‹H #ŒH  ŒH �H š�H ŽH ”ŽH �H Ž�H �H ˆ�H ‘H ‚‘H ÿ‘H |’H ù’H v“H ó“H p”H í”H j•H ç•H d–H á–H ^—H Û—H X˜H Õ˜H R™H Ï™H LšH ÉšH F›H Ã›H @œH ½œH :�H ·�H 4žH ±žH .ŸH «ŸH ( H ¥ H "¡H Ÿ¡H ¢H ™¢H £H “£H ¤H �¤H 
¥H ‡¥H ¦H �¦H þ¦H {§H ø§H u¨H ò¨H o©H ì©H iªH æªH c«H à«H ]¬H Ú¬H W­H Ô­H Q®H Î®H K¯H È¯H E°H Â°H ?±H ¼±H 9²H ¶²H 3³H °³H -´H ª´H 'µH ¤µH !¶H ž¶H ·H ˜·H ¸H ’¸H ¹H Œ¹H 	ºH †ºH »H €»H ý»H z¼H ÷¼H t½H ñ½H n¾H ë¾H h¿H å¿H bÀH ßÀH \ÁH ÙÁH VÂH ÓÂH PÃH ÍÃH JÄH ÇÄH DÅH ÁÅH >ÆH »ÆH 8ÇH µÇH 2ÈH ¯ÈH ,ÉH ©ÉH &ÊH £ÊH  ËH �ËH ÌH —ÌH ÍH ‘ÍH ÎH ‹ÎH ÏH …ÏH ÐH ÐH üÐH yÑH öÑH sÒH ðÒH mÓH êÓH gÔH äÔH aÕH ÞÕH [ÖH ØÖH U×H Ò×H OØH ÌØH IÙH ÆÙH CÚH ÀÚH =ÛH ºÛH 7ÜH ´ÜH 1ÝH ®ÝH +ÞH ¨ÞH %ßH ¢ßH àH œàH áH –áH âH �âH ãH ŠãH äH „äH åH ~åH ûåH xæH õæH rçH ïçH lèH éèH féH ãéH `êH ÝêH ZëH ×ëH TìH ÑìH NíH ËíH HîH ÅîH BïH ¿ïH <ðH ¹ðH 6ñH ³ñH 0òH ­òH *óH §óH $ôH ¡ôH õH ›õH öH •öH ÷H �÷H øH ‰øH ùH ƒùH  úH }úH úúH wûH ôûH qüH îüH kýH èýH eþH âþH _ÿH ÜÿH€, I k I€© I è I€&I eI€£I âI€ I _I€�I ÜI€I YI€—I ÖI€I SI€‘I ÐI€I MI€‹I ÊI€I GI€…I ÄI€I AI€I ¾I€üI ;I€yI ¸I€öI 5	I€s	I ²	I€ð	I /
I€m
I ¬
I€ê
I )I€gI ¦I€äI #I€aI  I€ÞI I€[I šI€ØI I€UI ”I€ÒI I€OI ŽI€ÌI I€II ˆI€ÆI I€CI ‚I€ÀI ÿI€=I |I€ºI ùI€7I vI€´I óI€1I pI€®I íI€+I jI€¨I çI€%I dI€¢I áI€I ^I€œI ÛI€I XI€–I ÕI€I RI€�I ÏI€I LI€ŠI ÉI€I FI€„I ÃI€I @I€~I ½I€ûI :I€xI ·I€õI 4I€rI ±I€ïI .I€lI «I€éI ( I€f I ¥ I€ã I "!I€`!I Ÿ!I€Ý!I "I€Z"I ™"I€×"I #I€T#I “#I€Ñ#I $I€N$I �$I€Ë$I 
%I€H%I ‡%I€Å%I &I€B&I �&I€¿&I þ&I€<'I {'I€¹'I ø'I€6(I u(I€³(I ò(I€0)I o)I€­)I ì)I€**I i*I€§*I æ*I€$+I c+I€¡+I à+I€,I ],I€›,I Ú,I€-I W-I€•-I Ô-I€.I Q.I€�.I Î.I€/I K/I€‰/I È/I€0I E0I€ƒ0I Â0I€ 1I ?1I€}1I ¼1I€ú1I 92I€w2I ¶2I€ô2I 33I€q3I °3I€î3I -4I€k4I ª4I€è4I '5I€e5I ¤5I€â5I !6I€_6I ž6I€Ü6I 7I€Y7I ˜7I€Ö7I 8I€S8I ’8I€Ð8I 9I€M9I Œ9I€Ê9I 	:I€G:I †:I€Ä:I ;I€A;I €;I€¾;I ý;I€;<I z<I€¸<I ÷<I€5=I t=I€²=I ñ=I€/>I n>I€¬>I ë>I€)?I h?I€¦?I å?I€#@I b@I€ @I ß@I€AI \AI€šAI ÙAI€BI VBI€”BI ÓBI€CI PCI€ŽCI ÍCI€DI JDI€ˆDI ÇDI€EI DEI€‚EI ÁEI€ÿEI >FI€|FI »FI€ùFI 8GI€vGI µGI€óGI 2HI€pHI ¯HI€íHI ,II€jII ©II€çII &JI€dJI £JI€áJI  KI€^KI �KI€ÛKI LI€XLI —LI€ÕLI MI€RMI ‘MI€ÏMI NI€LNI ‹NI€ÉNI OI€FOI …OI€ÃOI PI€@PI PI€½PI üPI€:QI yQI€·QI öQI€4RI sRI€±RI ðRI€.SI mSI€«SI êSI€(TI gTI€¥TI äTI€"UI aUI€ŸUI ÞUI€VI [VI€™VI ØVI€WI UWI€“WI ÒWI€XI OXI€�XI ÌXI€
YI IYI€‡YI ÆYI€ZI CZI€�ZI ÀZI€þZI =[I€{[I º[I $tI„ªshowlegendÂ¡yÈ\                                        ÍÌÌ>Ú‰�>*¥”>ÐÇ`>¼~6>
Œ@>c3>Sr'>&N}?,[?Ÿ­ñ>ªa›?�ìˆ?tJs?yd?aT?ÄÇ°?¨¢?ŠÄ?^ž�?7}u?nBV?Í×v?`Oi?�lc?y†U?%‚L?ƒ€F?kÖC?]5Š?q3„?[lƒ?hÂ€?¸5y?t?ôÁo?
{?ø®r?Îm?�i?‘e?âÇc?ÆŠ`?øg?å°e?Àzb?x(a?è\?ú¦X?ÞV?þ)c?ß`?#^?�2\?m¦Y?úW?viU?• S?»Q?I=P?0ËO?ÊM?ÞàJ?•oH?ÀÞF?vE?÷ÉC?•NA?ûÞ??œ??-#A?äš??|ç=?™Æ=?ÉÕ;?ƒR:?ý9?Ö3:?Q¸8?­b7?!�6?Ž5?bî3?½/3?kl2?ÕÂ4?b44?&è2?wm1?5_0?v>0?ñ`/?pÍ.?©J.? /?Æ/? (3?(h2?þM1?P­0?Úº0?Sy0?¸'2?¾Í2?‰7??�Á>?Ä=?xª;?ã_<?W]<?S<?|#;?YC:?Ïc9?ád8?§Ã7?7?™6?6? Ú5?Åý4?õ"7?^6?ÜŸ5?íê4?Ê–4?¸4?…3?ŒÂ2?>2?U”1?Ï®1?E1?^r1?î2?%v1?Öí0?õg0?740?�/??¯/?ž/?�1?Å>9?L´8?Ñ=?z¹<?ë<?º*=?›[<?ð@<?aÏ;?Q;?þé:?o²:?ö4;?Kq:?š¼9?€Ë9?Üú9?-‹9?¤Â9?q:?™‚A?û9A?«¤@?a!@?Z@?³îF?‘àF?
|F?}ßE?d=E?ÒóD?âE?3?D?,§C?ƒ]C?¬B?2B?ˆ¶A?«EA?_A?ÇÎ@?ö†@? .@?›µ??†X??Îè>?¤3@?Aì??!t??,ó>?yi>?¢	>??¤=?X^=?-è<?z<?�<?3ý;?oÜ;?8j;?¾â:?‡:?h­:?ô_:?“K:?„:? J:?ëÔ9?cn9?Få9?µÑ9?Ç�:?kG:?Þ:?Òr:?g6:?7:? :?@Œ9?qd:?	ä9?È0:?e;?r•:?P:?t&:?†¸9?þå9?£æ:?¦:?¸«:?v³:?åT:?å
:?+ü9?˜Ü9?ÿ£9?J9?þò8?}z9?)9?T×8? W8?mù7?Ï•7?e7?’7?ª£6?±U6?©6?šÑ;?b„;?àG;?ðô:?&ç:?;n:?¿:?tä9?×á:?®:?ŸZ:?#F:?q×:?$“:?T:?w:?Å6:?2Û9?j²9?¦[9?ƒn9?Ã09?NÌ8?e‹8?Ym8?Ô8?¹}8?‡-8?H8?S8?°Ñ7?ñi7?›Ù7?÷©7?:}8?Ÿ58?è7?¡8?Y9?I9?7à8?h¬8?_8?�—8?&º8?®g9?¯9?„Û8?ÌË8?¬‘8?DV8?Ä8?Êå7?2Á7?e©7?´y7?Ö�8?]¡8?K8?|8?Ø´7?ÿ¾7?Qî7?Y·7?¢K8?œ8?	½7?Æy7?[:7??î7?±§8?©9?O	9?�·8?‚x8?Åv8?b8?=ß7?=¿7?f¡7?ÃÞ7?ºÍ7?3“7?#Z7?m,7?Ãø6?Kµ6?­6?p6?²+6?�ó5?Ý5?Â§5?¢‹5?óU5?e5?:ù4?8¶4?Xš4?Šw4?‡54?À4?Ýå3?�»3?.g3?©$3?cî2?4Ý2?[œ2?¥g2?èÛ2?@º2? ¢2?¥l2?uq2?¹D2?ªÈ4?¥{4?c‰4?Iu4?‡{4?ø‰7?D7?ïq7?¶78?Ò)8?¾ù7?·¾7?£e7? F7?„z7?âR7?çO7?É<7?Ó7?é6?õÊ6?“¢6?Ë¸6?J’6?�R6?_6?Z6?Óç5?nÓ5?S§5?Éâ5?V;6?6?û6?”Ã5?£‰5?‰½5?Nà5?’C6?^6?Á56?‚6?ƒJ6?/.6?M€<?²`<?i»<?¿â<?~´<?ù¥<?B¯<?£½<?Œ~<?Wc<?G<?Ã<?w<?~ô;?å3<?<?¦ý;?nÕ;?	Ÿ;?'—;?À…;?
v;?~p;?Ã.;?¸õ:?˜¼:?ç…:?{Œ:?/Ž:?·‚:?òo:?«_:?:l:?Û“:?¥–:?3~:?<[:?P:?W3:?¸4:?»(:?2þ9?ƒî9?%ä9?ù²9?Ï9?Ÿ¼9?AŠ9?k9?ßb9?'£9?¯:?¾Ü9?¹»9?Ëu:?ç{:?”X:?-0:?i,:?E\:?M):?J:?•:?ïæ9?Æ;?P6;?]–;?7_;?p$;?K;?su;?V›;?/š;?[©;?é²;? ¸;?æª;?ûš;?ëº;?¸²;?å—;?1c;?K;?é+;?>;?W;?òÜ:?\÷:?GÇ:?w’:?Õ_:?Â,:?‹ù9?Œç9?«Õ9?”¹9?†±9?Êˆ9?ìO9?„)9?©9?õ8?‘Æ8?ÖÞ8?Œ¤8?Du8?û`8?
_8?A88?18?708?¯8?•"8?Ã8?Vè7?„'8?øõ7?¹Ë7?G°7?ÜŸ7?n7?xR7?p7?©`7?’C7?@h7?<7?ÂC7?÷>7?ÿ=9?”69?¯9?S9? 9?{Ð8?®·8?™ª8?º¤8?ù‰8?5v8?K 8?@~8?ü‰8?�Z8?×D8?î8?â7?›8?�Ù7?–ð7?ÅÓ7? ¬7?­7?ìƒ7?ºf7?°97?êB7?ì"7?«7?‘ü6?wá6?®´6?Qœ6?á†6?ëe6?|:6?i86?TY6?•36?©6?±’6?Çg7?‰]7?kM7?I‚7?^š7?æ†7?6‚7?pU7?	47?E87?’h7?dc7?ìO7?Ù\7?áW7?Z7?±x7?Ú°7?\ 7?)m7?W7?q9?{ð8?Àô8?‹W9?vh9?¸t9?³a9?Ëa9?ãD9?î09?9?a59?c49?#9?�9?Ìå8?òº8?Í8?]³8?›8?¦m8?$H8?†)8?�8?	>:?­’:?Sg:?WO:??:?â�:?Q}:?]:?A;:?;:?ü9?É:?Wò9?|ñ9?Ù9?†±9?ÔŒ9?æv9?Èr9?ñk9?c9?¨E9?Ã¡9?»ˆ9?;�9?îr9?@Y9?lV9?q89?¶,9?wO9?ý>9?)D9?=99?)ì9?i:?�ó9?¢Ì9?\7:?Œ:?':?ó:?Dã9?²Õ9?»Ç9?‰ª9?$=?1=?rð<?…É<?‚æ=?ÂÖ=?(¾=?%”=?’®=?Íö=?ûÜ=?Cî>?Âä>?Ê>?u¨>?”>?îˆ>?%v>?Æ“>?H�>?Rn>?^>?€^>?¬P>?Ö@>?!>?u>?£þ=?ÐÜ=?’À=?�ý=?;Ó=?0®=?ù�=?¹t=?ÁN=?AU=?J8=?q=?tï<?aq=?¢ @?ñ@?–à@?`ò@?'Ò@?ü¿@?Ã¡@?Ÿ�@?æm@?Üi@?Ã<@?k@?ü@?âí??žÌ??°ê??1
@?î??¤+@?[@?Íí??ÑÒ??ñÖ??þÇ??}í??Áß??2@?©½@?/Ÿ@?š£@?¯µ@?ý—@?<�@?�x@?'c@?§Y?BåX?«öX?ÑX?˜Y?¡÷X?ŸÑX?Â¼X?—X?ƒJY?‰4Y?œ	Y?ÊáX?Q¶X?Æ•X?omX?<[X?m•X?&~X?VX?î)X?3ýW?æËW?£¢W?+zW?è_W?BVW?ã+W?7W?5W?âÞV?XÖV?;¿V?Q½V?1ÅV? ›V?%ÐV?ô®V?�V?önV?¡PV?û'V?©V?<áU?á>V?UV?‘óU?Þ÷U?�ZV?y2V?MV?•"V?c~V?neV?8oV?‹^V?µ7V?hV?	V?àÝU?(ìU?sÞU?6´U?ìŠU?äoU?-KU?2.U?k$U?Ó9U?íCU?š]U?óFU?·.U?!-U?eU?“ýT?©æT?\ëT?‡ÖT?´ÉT?ä¨T?Z†T?‘tT? \T?Ý?T?BMT?ï@T?õ"T?T?=ùS?ÁóS?[ÚS? ÐS?3ªS?){S?maS?VS?aBS?Q)S?‚S?ùöR?UäR?ÎR?¸R?g¦R?5…R?ðWR?†\R?ü<R?R?ßõQ?RãQ?ñàQ?·Q?Ä–Q?qQ?	\Q?„RQ?‚GQ?Å"Q?�Q?ŽëP?ÏÔP?1±P?ËŽP?§¦P?ŠP?pP?ãIP?®=P?•9P?ŠP?†öO?UàO?UÜO?®¹O?ÌO?«O?ì›O?MÜO?žÊO?�¬O?^�O?�O?eO?íHO?j(O?ÊiO?˜JO?0+O?ê$O?)'O?òO?ÑO?JèN? èN?ÐN?¦"L?¤type§scatter¡xÈ\  €?   @  @@  €@   @  À@  à@   A  A   A   A  ðA   B  HB  pB  ŒB   B  ´B  ÈB  HC  –C  ÈC  úC  D  /D  HD  aD  zD  úD €;E  zE @œE €»E ÀÚE  úE  F @F à+F €;F  KF ÀZF `jF  zF Ð„F  ŒF p”F @œF ¤F à«F °³F €»F PÃF  ËF ðÒF ÀÚF �âF `êF 0òF  úF è G ÐG ¸G  G ˆG pG XG @G ( G $G ø'G à+G È/G °3G ˜7G €;G h?G PCG 8GG  KG OG ðRG ØVG ÀZG ¨^G �bG xfG `jG HnG 0rG vG  zG è}G è€G Ü‚G Ð„G Ä†G ¸ˆG ¬ŠG  ŒG ”ŽG ˆ�G |’G p”G d–G X˜G LšG @œG 4žG ( G ¢G ¤G ¦G ø§G ì©G à«G Ô­G È¯G PÃG DÅG 8ÇG ,ÉG  ËG ÍG ÏG üÐG ðÒG äÔG ØÖG ÌØG ÀÚG ´ÜG ¨ÞG œàG �âG „äG xæG lèG `êG TìG HîG <ðG 0òG $ôG öG øG  úG ôûG èýG ÜÿG è H âH ÜH ÖH ÐH ÊH ÄH ¾H ¸H ²	H ¬
H ¦H  H šH ”H ŽH ˆH ‚H |H vH pH jH dH ^H XH RH LH FH @H :H 4H .H ( H "!H "H #H $H 
%H &H þ&H ø'H ò(H ì)H æ*H à+H Ú,H Ô-H Î.H È/H Â0H ¼1H ¶2H °3H ª4H ¤5H ž6H ˜7H ’8H Œ9H †:H €;H z<H t=H n>H h?H b@H \AH VBH PCH JDH DEH >FH 8GH 2HH ,IH &JH  KH LH MH NH OH PH üPH öQH ðRH êSH äTH ÞUH ØVH ÒWH ÌXH ÆYH ÀZH º[H ´\H ®]H ¨^H ¢_H œ`H –aH �bH ŠcH „dH ~eH xfH rgH lhH fiH `jH ZkH TlH NmH HnH BoH <pH 6qH 0rH *sH $tH uH vH wH xH yH  zH úzH ô{H î|H è}H â~H ÜH k€H è€H e�H â�H _‚H Ü‚H YƒH ÖƒH S„H Ð„H M…H Ê…H G†H Ä†H A‡H ¾‡H ;ˆH ¸ˆH 5‰H ²‰H /ŠH ¬ŠH )‹H ¦‹H #ŒH  ŒH �H š�H ŽH ”ŽH �H Ž�H �H ˆ�H ‘H ‚‘H ÿ‘H |’H ù’H v“H ó“H p”H í”H j•H ç•H d–H á–H ^—H Û—H X˜H Õ˜H R™H Ï™H LšH ÉšH F›H Ã›H @œH ½œH :�H ·�H 4žH ±žH .ŸH «ŸH ( H ¥ H "¡H Ÿ¡H ¢H ™¢H £H “£H ¤H �¤H 
¥H ‡¥H ¦H �¦H þ¦H {§H ø§H u¨H ò¨H o©H ì©H iªH æªH c«H à«H ]¬H Ú¬H W­H Ô­H Q®H Î®H K¯H È¯H E°H Â°H ?±H ¼±H 9²H ¶²H 3³H °³H -´H ª´H 'µH ¤µH !¶H ž¶H ·H ˜·H ¸H ’¸H ¹H Œ¹H 	ºH †ºH »H €»H ý»H z¼H ÷¼H t½H ñ½H n¾H ë¾H h¿H å¿H bÀH ßÀH \ÁH ÙÁH VÂH ÓÂH PÃH ÍÃH JÄH ÇÄH DÅH ÁÅH >ÆH »ÆH 8ÇH µÇH 2ÈH ¯ÈH ,ÉH ©ÉH &ÊH £ÊH  ËH �ËH ÌH —ÌH ÍH ‘ÍH ÎH ‹ÎH ÏH …ÏH ÐH ÐH üÐH yÑH öÑH sÒH ðÒH mÓH êÓH gÔH äÔH aÕH ÞÕH [ÖH ØÖH U×H Ò×H OØH ÌØH IÙH ÆÙH CÚH ÀÚH =ÛH ºÛH 7ÜH ´ÜH 1ÝH ®ÝH +ÞH ¨ÞH %ßH ¢ßH àH œàH áH –áH âH �âH ãH ŠãH äH „äH åH ~åH ûåH xæH õæH rçH ïçH lèH éèH féH ãéH `êH ÝêH ZëH ×ëH TìH ÑìH NíH ËíH HîH ÅîH BïH ¿ïH <ðH ¹ðH 6ñH ³ñH 0òH ­òH *óH §óH $ôH ¡ôH õH ›õH öH •öH ÷H �÷H øH ‰øH ùH ƒùH  úH }úH úúH wûH ôûH qüH îüH kýH èýH eþH âþH _ÿH ÜÿH€, I k I€© I è I€&I eI€£I âI€ I _I€�I ÜI€I YI€—I ÖI€I SI€‘I ÐI€I MI€‹I ÊI€I GI€…I ÄI€I AI€I ¾I€üI ;I€yI ¸I€öI 5	I€s	I ²	I€ð	I /
I€m
I ¬
I€ê
I )I€gI ¦I€äI #I€aI  I€ÞI I€[I šI€ØI I€UI ”I€ÒI I€OI ŽI€ÌI I€II ˆI€ÆI I€CI ‚I€ÀI ÿI€=I |I€ºI ùI€7I vI€´I óI€1I pI€®I íI€+I jI€¨I çI€%I dI€¢I áI€I ^I€œI ÛI€I XI€–I ÕI€I RI€�I ÏI€I LI€ŠI ÉI€I FI€„I ÃI€I @I€~I ½I€ûI :I€xI ·I€õI 4I€rI ±I€ïI .I€lI «I€éI ( I€f I ¥ I€ã I "!I€`!I Ÿ!I€Ý!I "I€Z"I ™"I€×"I #I€T#I “#I€Ñ#I $I€N$I �$I€Ë$I 
%I€H%I ‡%I€Å%I &I€B&I �&I€¿&I þ&I€<'I {'I€¹'I ø'I€6(I u(I€³(I ò(I€0)I o)I€­)I ì)I€**I i*I€§*I æ*I€$+I c+I€¡+I à+I€,I ],I€›,I Ú,I€-I W-I€•-I Ô-I€.I Q.I€�.I Î.I€/I K/I€‰/I È/I€0I E0I€ƒ0I Â0I€ 1I ?1I€}1I ¼1I€ú1I 92I€w2I ¶2I€ô2I 33I€q3I °3I€î3I -4I€k4I ª4I€è4I '5I€e5I ¤5I€â5I !6I€_6I ž6I€Ü6I 7I€Y7I ˜7I€Ö7I 8I€S8I ’8I€Ð8I 9I€M9I Œ9I€Ê9I 	:I€G:I †:I€Ä:I ;I€A;I €;I€¾;I ý;I€;<I z<I€¸<I ÷<I€5=I t=I€²=I ñ=I€/>I n>I€¬>I ë>I€)?I h?I€¦?I å?I€#@I b@I€ @I ß@I€AI \AI€šAI ÙAI€BI VBI€”BI ÓBI€CI PCI€ŽCI ÍCI€DI JDI€ˆDI ÇDI€EI DEI€‚EI ÁEI€ÿEI >FI€|FI »FI€ùFI 8GI€vGI µGI€óGI 2HI€pHI ¯HI€íHI ,II€jII ©II€çII &JI€dJI £JI€áJI  KI€^KI �KI€ÛKI LI€XLI —LI€ÕLI MI€RMI ‘MI€ÏMI NI€LNI ‹NI€ÉNI OI€FOI …OI€ÃOI PI€@PI PI€½PI üPI€:QI yQI€·QI öQI€4RI sRI€±RI ðRI€.SI mSI€«SI êSI€(TI gTI€¥TI äTI€"UI aUI€ŸUI ÞUI€VI [VI€™VI ØVI€WI UWI€“WI ÒWI€XI OXI€�XI ÌXI€
YI IYI€‡YI ÆYI€ZI CZI€�ZI ÀZI€þZI =[I€{[I º[I $tI…¤line‚¤dash¤dash¥widthÊ@€  ¡yÈ\  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?  €?¤type§scatter¤name¼Weighted Importance Sampling¡xÈ\  €?   @  @@  €@   @  À@  à@   A  A   A   A  ðA   B  HB  pB  ŒB   B  ´B  ÈB  HC  –C  ÈC  úC  D  /D  HD  aD  zD  úD €;E  zE @œE €»E ÀÚE  úE  F @F à+F €;F  KF ÀZF `jF  zF Ð„F  ŒF p”F @œF ¤F à«F °³F €»F PÃF  ËF ðÒF ÀÚF �âF `êF 0òF  úF è G ÐG ¸G  G ˆG pG XG @G ( G $G ø'G à+G È/G °3G ˜7G €;G h?G PCG 8GG  KG OG ðRG ØVG ÀZG ¨^G �bG xfG `jG HnG 0rG vG  zG è}G è€G Ü‚G Ð„G Ä†G ¸ˆG ¬ŠG  ŒG ”ŽG ˆ�G |’G p”G d–G X˜G LšG @œG 4žG ( G ¢G ¤G ¦G ø§G ì©G à«G Ô­G È¯G PÃG DÅG 8ÇG ,ÉG  ËG ÍG ÏG üÐG ðÒG äÔG ØÖG ÌØG ÀÚG ´ÜG ¨ÞG œàG �âG „äG xæG lèG `êG TìG HîG <ðG 0òG $ôG öG øG  úG ôûG èýG ÜÿG è H âH ÜH ÖH ÐH ÊH ÄH ¾H ¸H ²	H ¬
H ¦H  H šH ”H ŽH ˆH ‚H |H vH pH jH dH ^H XH RH LH FH @H :H 4H .H ( H "!H "H #H $H 
%H &H þ&H ø'H ò(H ì)H æ*H à+H Ú,H Ô-H Î.H È/H Â0H ¼1H ¶2H °3H ª4H ¤5H ž6H ˜7H ’8H Œ9H †:H €;H z<H t=H n>H h?H b@H \AH VBH PCH JDH DEH >FH 8GH 2HH ,IH &JH  KH LH MH NH OH PH üPH öQH ðRH êSH äTH ÞUH ØVH ÒWH ÌXH ÆYH ÀZH º[H ´\H ®]H ¨^H ¢_H œ`H –aH �bH ŠcH „dH ~eH xfH rgH lhH fiH `jH ZkH TlH NmH HnH BoH <pH 6qH 0rH *sH $tH uH vH wH xH yH  zH úzH ô{H î|H è}H â~H ÜH k€H è€H e�H â�H _‚H Ü‚H YƒH ÖƒH S„H Ð„H M…H Ê…H G†H Ä†H A‡H ¾‡H ;ˆH ¸ˆH 5‰H ²‰H /ŠH ¬ŠH )‹H ¦‹H #ŒH  ŒH �H š�H ŽH ”ŽH �H Ž�H �H ˆ�H ‘H ‚‘H ÿ‘H |’H ù’H v“H ó“H p”H í”H j•H ç•H d–H á–H ^—H Û—H X˜H Õ˜H R™H Ï™H LšH ÉšH F›H Ã›H @œH ½œH :�H ·�H 4žH ±žH .ŸH «ŸH ( H ¥ H "¡H Ÿ¡H ¢H ™¢H £H “£H ¤H �¤H 
¥H ‡¥H ¦H �¦H þ¦H {§H ø§H u¨H ò¨H o©H ì©H iªH æªH c«H à«H ]¬H Ú¬H W­H Ô­H Q®H Î®H K¯H È¯H E°H Â°H ?±H ¼±H 9²H ¶²H 3³H °³H -´H ª´H 'µH ¤µH !¶H ž¶H ·H ˜·H ¸H ’¸H ¹H Œ¹H 	ºH †ºH »H €»H ý»H z¼H ÷¼H t½H ñ½H n¾H ë¾H h¿H å¿H bÀH ßÀH \ÁH ÙÁH VÂH ÓÂH PÃH ÍÃH JÄH ÇÄH DÅH ÁÅH >ÆH »ÆH 8ÇH µÇH 2ÈH ¯ÈH ,ÉH ©ÉH &ÊH £ÊH  ËH �ËH ÌH —ÌH ÍH ‘ÍH ÎH ‹ÎH ÏH …ÏH ÐH ÐH üÐH yÑH öÑH sÒH ðÒH mÓH êÓH gÔH äÔH aÕH ÞÕH [ÖH ØÖH U×H Ò×H OØH ÌØH IÙH ÆÙH CÚH ÀÚH =ÛH ºÛH 7ÜH ´ÜH 1ÝH ®ÝH +ÞH ¨ÞH %ßH ¢ßH àH œàH áH –áH âH �âH ãH ŠãH äH „äH åH ~åH ûåH xæH õæH rçH ïçH lèH éèH féH ãéH `êH ÝêH ZëH ×ëH TìH ÑìH NíH ËíH HîH ÅîH BïH ¿ïH <ðH ¹ðH 6ñH ³ñH 0òH ­òH *óH §óH $ôH ¡ôH õH ›õH öH •öH ÷H �÷H øH ‰øH ùH ƒùH  úH }úH úúH wûH ôûH qüH îüH kýH èýH eþH âþH _ÿH ÜÿH€, I k I€© I è I€&I eI€£I âI€ I _I€�I ÜI€I YI€—I ÖI€I SI€‘I ÐI€I MI€‹I ÊI€I GI€…I ÄI€I AI€I ¾I€üI ;I€yI ¸I€öI 5	I€s	I ²	I€ð	I /
I€m
I ¬
I€ê
I )I€gI ¦I€äI #I€aI  I€ÞI I€[I šI€ØI I€UI ”I€ÒI I€OI ŽI€ÌI I€II ˆI€ÆI I€CI ‚I€ÀI ÿI€=I |I€ºI ùI€7I vI€´I óI€1I pI€®I íI€+I jI€¨I çI€%I dI€¢I áI€I ^I€œI ÛI€I XI€–I ÕI€I RI€�I ÏI€I LI€ŠI ÉI€I FI€„I ÃI€I @I€~I ½I€ûI :I€xI ·I€õI 4I€rI ±I€ïI .I€lI «I€éI ( I€f I ¥ I€ã I "!I€`!I Ÿ!I€Ý!I "I€Z"I ™"I€×"I #I€T#I “#I€Ñ#I $I€N$I �$I€Ë$I 
%I€H%I ‡%I€Å%I &I€B&I �&I€¿&I þ&I€<'I {'I€¹'I ø'I€6(I u(I€³(I ò(I€0)I o)I€­)I ì)I€**I i*I€§*I æ*I€$+I c+I€¡+I à+I€,I ],I€›,I Ú,I€-I W-I€•-I Ô-I€.I Q.I€�.I Î.I€/I K/I€‰/I È/I€0I E0I€ƒ0I Â0I€ 1I ?1I€}1I ¼1I€ú1I 92I€w2I ¶2I€ô2I 33I€q3I °3I€î3I -4I€k4I ª4I€è4I '5I€e5I ¤5I€â5I !6I€_6I ž6I€Ü6I 7I€Y7I ˜7I€Ö7I 8I€S8I ’8I€Ð8I 9I€M9I Œ9I€Ê9I 	:I€G:I †:I€Ä:I ;I€A;I €;I€¾;I ý;I€;<I z<I€¸<I ÷<I€5=I t=I€²=I ñ=I€/>I n>I€¬>I ë>I€)?I h?I€¦?I å?I€#@I b@I€ @I ß@I€AI \AI€šAI ÙAI€BI VBI€”BI ÓBI€CI PCI€ŽCI ÍCI€DI JDI€ˆDI ÇDI€EI DEI€‚EI ÁEI€ÿEI >FI€|FI »FI€ùFI 8GI€vGI µGI€óGI 2HI€pHI ¯HI€íHI ,II€jII ©II€çII &JI€dJI £JI€áJI  KI€^KI �KI€ÛKI LI€XLI —LI€ÕLI MI€RMI ‘MI€ÏMI NI€LNI ‹NI€ÉNI OI€FOI …OI€ÃOI PI€@PI PI€½PI üPI€:QI yQI€·QI öQI€4RI sRI€±RI ðRI€.SI mSI€«SI êSI€(TI gTI€¥TI äTI€"UI aUI€ŸUI ÞUI€VI [VI€™VI ØVI€WI UWI€“WI ÒWI€XI OXI€�XI ÌXI€
YI IYI€‡YI ÆYI€ZI CZI€�ZI ÀZI€þZI =[I€{[I º[I $tIÙ4c6e0de0c-3901-11f0-234e-bd09c571f662/d508a1aa913b68d„¦layoutˆ¨autosizeÂ¥xaxisƒ¨tickvals×  €?   A¥title�¤text®Dealer showing¨ticktext’¡A¢10¨template‚¦layoutÞ ©coloraxis�¨colorbar‚¥ticks ¬outlinewidthÊ    ¥xaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white©hovermode§closest­paper_bgcolor¥white£geo†©showlakesÃ¨showlandÃ©landcolor§#E5ECF6§bgcolor¥white¬subunitcolor¥white©lakecolor¥whiteªcolorscaleƒªsequentialš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921©diverging›’Ê    §#8e0152’Ê=ÌÌÍ§#c51b7d’Ê>LÌÍ§#de77ae’Ê>™™š§#f1b6da’Ê>ÌÌÍ§#fde0ef’Ê?   §#f7f7f7’Ê?™š§#e6f5d0’Ê?333§#b8e186’Ê?LÌÍ§#7fbc41’Ê?fff§#4d9221’Ê?€  §#276419¯sequentialminusš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921¥yaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white­shapedefaults�¤line�¥color§#2a3f5fªhoverlabel�¥align¤left¦mapbox�¥style¥light¥polarƒ«angularaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6ªradialaxisƒ©gridcolor¥white¥ticks ©linecolor¥white¯autotypenumbers¦strict¤font�¥color§#2a3f5f§ternary„¥aaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6¥caxisƒ©gridcolor¥white¥ticks ©linecolor¥white¥baxisƒ©gridcolor¥white¥ticks ©linecolor¥white²annotationdefaultsƒ©arrowheadÊ    ªarrowwidthÊ?€  ªarrowcolor§#2a3f5f¬plot_bgcolor§#E5ECF6¥title�¡xÊ=LÌÍ¥sceneƒ¥xaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥zaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥yaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¨colorwayš§#636efa§#EF553B§#00cc96§#ab63fa§#FFA15A§#19d3f3§#FF6692§#B6E880§#FF97FF§#FECB52¤dataÞ ®scatterpolargl‘‚¤type®scatterpolargl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦carpet‘ƒ¥baxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¤type¦carpet¥aaxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¬scatterpolar‘‚¤type¬scatterpolar¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©parcoords‘‚¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©parcoords§scatter‘‚¤type§scatter¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ²histogram2dcontour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type²histogram2dcontourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921§contour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§contourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattercarpet‘‚¤type­scattercarpet¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦mesh3d‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type¦mesh3d§surface‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§surfaceªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattermapbox‘‚¤type­scattermapbox¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ªscattergeo‘‚¤typeªscattergeo¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©histogram‘‚¤type©histogram¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    £pie‘‚¤type£pieªautomarginÃªchoropleth‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤typeªchoropleth©heatmapgl‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©heatmapglªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921£bar‘„¤type£bar§error_y�¥color§#2a3f5f§error_x�¥color§#2a3f5f¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   §heatmap‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§heatmapªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­contourcarpet‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type­contourcarpet¥table‘ƒ¤type¥table¦header‚¤line�¥color¥white¤fill�¥color§#C8D4E3¥cells‚¤line�¥color¥white¤fill�¥color§#EBF0F8©scatter3d‘ƒ¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©scatter3d¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¨barpolar‘‚¤type¨barpolar¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   ©scattergl‘‚¤type©scattergl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    «histogram2d‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type«histogram2dªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921®scatterternary‘‚¤type®scatterternary¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦heightÊC–  ¦margin„¡lÊ    ¡bÊ    ¡rÊ    ¡tÊBp  ¥title ¥yaxisƒ¨tickvals×  @A  ¨A¥title�¤textªPlayer sum¨ticktext×  @A  ¨A¥widthÊCÈ  ¦config…¨showLinkÂ¨editableÂªresponsiveÃªstaticPlotÂªscrollZoomÃ¦frames�¤data‘‰¤zmaxÊ?€  ¡yÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¤type§heatmapªcolorscale§Bluered¤zminÊ¿€  ¡zšÇ(„Œ-¿x7¿À¼8¿
Þ?¿ßuD¿�`E¿¡¿O¿ÏM¿aR>¸c >Ç(º·¿ÊÖ¿©z¿’|"¿ÅÞ%¿í†/¿MÚ3¿ûž6¿Xö$?Bqa?Ç(êF
¿WU¿Öu¿!—¿k'¿‘,¿XB6¿�>=¿‰"?Øa?Ç(8q¿’ë¿†¿6»#¿ð)¿P90¿"Ž4¿9C;¿ü¯(?hMb?Ç(;¿p”¿WU¿¥X!¿pƒ)¿R�0¿äõ3¿$s8¿7¶.?,f?Ç(£¿|o¿´¿Úþ!¿%&¿¬'¿À3¿—™7¿qp6?€h?Ç(ÆB¿Ô­¿”ý¿�E¿!à#¿œ,¿@i0¿55¿«G?\Ôl?Ç(8¿ø÷¿Àª¿´š¿­&¿½'¿{‡-¿ìY8¿J?�èl?Ç(žY¿¢¿8Þ¿œ¿«t#¿JÙ,¿Š3¿Ò8¿pÙA?mqp?Ç(Òß¿/À¿GA#¿0�+¿ö¿-¿ªâ3¿Ÿ7¿á¬?¿�¹Þ>¨%Q?©transposeÃ©showscaleÃ¡xÇ(  €?   @  @@  €@   @  À@  à@   A  A   AÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/b6b6df0af3e3a8ae„¦layout„¥xaxis‚¤type£log¥title�¤text´Steps to Finish Race¨template‚¦layoutÞ ©coloraxis�¨colorbar‚¥ticks ¬outlinewidthÊ    ¥xaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white©hovermode§closest­paper_bgcolor¥white£geo†©showlakesÃ¨showlandÃ©landcolor§#E5ECF6§bgcolor¥white¬subunitcolor¥white©lakecolor¥whiteªcolorscaleƒªsequentialš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921©diverging›’Ê    §#8e0152’Ê=ÌÌÍ§#c51b7d’Ê>LÌÍ§#de77ae’Ê>™™š§#f1b6da’Ê>ÌÌÍ§#fde0ef’Ê?   §#f7f7f7’Ê?™š§#e6f5d0’Ê?333§#b8e186’Ê?LÌÍ§#7fbc41’Ê?fff§#4d9221’Ê?€  §#276419¯sequentialminusš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921¥yaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white­shapedefaults�¤line�¥color§#2a3f5fªhoverlabel�¥align¤left¦mapbox�¥style¥light¥polarƒ«angularaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6ªradialaxisƒ©gridcolor¥white¥ticks ©linecolor¥white¯autotypenumbers¦strict¤font�¥color§#2a3f5f§ternary„¥aaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6¥caxisƒ©gridcolor¥white¥ticks ©linecolor¥white¥baxisƒ©gridcolor¥white¥ticks ©linecolor¥white²annotationdefaultsƒ©arrowheadÊ    ªarrowwidthÊ?€  ªarrowcolor§#2a3f5f¬plot_bgcolor§#E5ECF6¥title�¡xÊ=LÌÍ¥sceneƒ¥xaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥zaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥yaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¨colorwayš§#636efa§#EF553B§#00cc96§#ab63fa§#FFA15A§#19d3f3§#FF6692§#B6E880§#FF97FF§#FECB52¤dataÞ ®scatterpolargl‘‚¤type®scatterpolargl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦carpet‘ƒ¥baxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¤type¦carpet¥aaxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¬scatterpolar‘‚¤type¬scatterpolar¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©parcoords‘‚¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©parcoords§scatter‘‚¤type§scatter¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ²histogram2dcontour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type²histogram2dcontourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921§contour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§contourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattercarpet‘‚¤type­scattercarpet¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦mesh3d‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type¦mesh3d§surface‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§surfaceªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattermapbox‘‚¤type­scattermapbox¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ªscattergeo‘‚¤typeªscattergeo¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©histogram‘‚¤type©histogram¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    £pie‘‚¤type£pieªautomarginÃªchoropleth‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤typeªchoropleth©heatmapgl‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©heatmapglªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921£bar‘„¤type£bar§error_y�¥color§#2a3f5f§error_x�¥color§#2a3f5f¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   §heatmap‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§heatmapªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­contourcarpet‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type­contourcarpet¥table‘ƒ¤type¥table¦header‚¤line�¥color¥white¤fill�¥color§#C8D4E3¥cells‚¤line�¥color¥white¤fill�¥color§#EBF0F8©scatter3d‘ƒ¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©scatter3d¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¨barpolar‘‚¤type¨barpolar¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   ©scattergl‘‚¤type©scattergl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    «histogram2d‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type«histogram2dªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921®scatterternary‘‚¤type®scatterternary¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦margin„¡lÊBH  ¡bÊBH  ¡rÊBH  ¡tÊBp  ¥yaxis�¥title�¤text³Percent of Episodes¦config…¨showLinkÂ¨editableÂªresponsiveÃªstaticPlotÂªscrollZoomÃ¦frames�¤data’„¡yÈ -²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=-²�=Å °=Å °=Å °=Å °=Å °=Å °=Å °=Å °=Å °=-²=ð§Æ=ð§Æ=ð§Æ=ð§Æ=ð§Æ=ð§Æ=ð§Æ=ð§Æ=ð§Æ=ð§Æ=Ñ"Û=Ñ"Û=Ñ"Û=Ñ"Û=Ñ"Û=Ñ"Û=Ñ"Û=Ñ"Û=Ñ"Û=Ñ"Û=J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>J>�>�>�>�>�>�>�>�>�>�>�>�>�>�>�>�>�>�>�>çû)>çû)>çû)>çû)>çû)>çû)>çû)>çû)>çû)>çû)>çû)>çû)>çû)>çû)>çû)>çû)>çû)>çû)>çû)>çû)>j<>j<>j<>j<>j<>j<>j<>j<>j<>j<>j<>j<>j<>j<>j<>j<>j<>j<>…ëQ>…ëQ>…ëQ>…ëQ>…ëQ>…ëQ>…ëQ>…ëQ>…ëQ>…ëQ>…ëQ>…ëQ>…ëQ>…ëQ>…ëQ>…ëQ>…ëQ>…ëQ>…ëQ>…ëQ>…ëQ>ÓMb>ÓMb>ÓMb>ÓMb>ÓMb>ÓMb>ÓMb>ÓMb>ÓMb>ÓMb>ÓMb>ÓMb>ÓMb>ÓMb>ÓMb>ÓMb>×£p>×£p>×£p>×£p>×£p>×£p>×£p>×£p>×£p>×£p>×£p>×£p>×£p>×£p>Ház>Ház>Ház>Ház>Ház>Ház>Ház>Ház>Ház>Ház>“„>“„>“„>“„>“„>“„>“„>“„>“„>“„>“„>“„>“„>–C‹>–C‹>–C‹>–C‹>–C‹>–C‹>–C‹>–C‹>–C‹>–C‹>–C‹>–C‹>–C‹>–C‹>…ë‘>…ë‘>…ë‘>…ë‘>…ë‘>…ë‘>…ë‘>…ë‘>…ë‘>…ë‘>…ë‘>…ë‘>…ë‘>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>Z¤>Z¤>Z¤>Z¤>Z¤>Z¤>Z¤>Z¤>Z¤>Z¤>Z¤>Z¤>Z¤>Z¤>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>‘í¼>‘í¼>‘í¼>‘í¼>‘í¼>‘í¼>‘í¼>‘í¼>‘í¼>‘í¼>‘í¼>‘í¼>‘í¼>‘í¼>‘í¼>‘í¼>‘í¼>  À>  À>  À>  À>  À>  À>Ë¡Å>Ë¡Å>Ë¡Å>Ë¡Å>Ë¡Å>Ë¡Å>Ë¡Å>Ë¡Å>Ë¡Å>Ë¡Å>Ë¡Å>ºIÌ>ºIÌ>ºIÌ>ºIÌ>ºIÌ>ºIÌ>ºIÌ>ºIÌ>ºIÌ>ºIÌ>ºIÌ>ºIÌ>ºIÌ>ázÔ>ázÔ>ázÔ>ázÔ>ázÔ>ázÔ>ázÔ>ázÔ>ázÔ>ázÔ>ázÔ>ázÔ>ázÔ>ázÔ>ázÔ>ázÔ>=
×>=
×>=
×>=
×>=
×>Ñ"Û>Ñ"Û>Ñ"Û>Ñ"Û>Ñ"Û>Ñ"Û>Ñ"Û>Ñ"Û>œÄà>œÄà>œÄà>œÄà>œÄà>œÄà>œÄà>œÄà>œÄà>œÄà>œÄà>B`å>B`å>B`å>B`å>B`å>B`å>B`å>B`å>B`å>Õxé>Õxé>Õxé>Õxé>Õxé>Õxé>Õxé>Õxé>{î>{î>{î>{î>{î>{î>{î>{î>{î>33ó>33ó>33ó>33ó>33ó>33ó>33ó>33ó>33ó>33ó>ÙÎ÷>ÙÎ÷>ÙÎ÷>ÙÎ÷>ÙÎ÷>ÙÎ÷>ÙÎ÷>ÙÎ÷>ÙÎ÷>jü>jü>jü>jü>jü>jü>jü>jü>jü>ƒ ?ƒ ?ƒ ?ƒ ?ƒ ?ƒ ?ƒ ?ƒ ?ƒ ?øS?øS?øS?øS?øS?øS?øS?øS?øS?øS?øS?yé?yé?yé?yé?yé?yé?yé?yé?yé?yé?yé?yé?yé?yé?9´?9´?9´?9´?9´?9´?9´?q=
?q=
?q=
?q=
?q=
?q=
?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?�—?�—?�—?�—?�—?�—?�—?�—?�—?é&?é&?é&?é&?é&?é&?é&?é&?é&?é&?ªñ?ªñ?ªñ?ªñ?ªñ?ªñ?ªñ?áz?áz?áz?áz?áz?áz?¢E?¢E?¢E?¢E?¢E?¢E?¢E?b?b?b?b?b?b?b?#Û?#Û?#Û?#Û?#Û?#Û?#Û?j?j?j?j?j?j?j?j?j?j?Év?Év?Év?Év?Év?Év?Év?Év?%!?%!?%!?%!?%!?%!?%!?%!?%!?%!?o#?o#?o#?o#?o#?o#?o#?o#?�•#?�•#?B`%?B`%?B`%?B`%?B`%?B`%?B`%?‹l'?‹l'?‹l'?‹l'?‹l'?‹l'?‹l'?‹l'?9´(?9´(?9´(?9´(?9´(?q=*?q=*?q=*?q=*?q=*?q=*?¨Æ+?¨Æ+?¨Æ+?¨Æ+?¨Æ+?¨Æ+?ÍÌ,?ÍÌ,?ÍÌ,?ÍÌ,?òÒ-?òÒ-?òÒ-?òÒ-? /? /? /? /? /?Å 0?Å 0?Å 0?Å 0?-2?-2?-2?-2?-2?-2?-2?-2?¼t3?¼t3?¼t3?¼t3?¼t3?�5?�5?�5?�5?�5?�5?�5?�5?+‡6?+‡6?+‡6?+‡6?ìQ8?ìQ8?ìQ8?ìQ8?ìQ8?ìQ8?ìQ8?‡9?‡9?‡9?¬:?¬:?¬:?¬:?ã¥;?ã¥;?ã¥;?ã¥;?ã¥;?ã¥;?j<?j<?j<??5>??5>??5>??5>??5>??5>??5>?‰A@?‰A@?‰A@?‰A@?‰A@?‰A@?‰A@?‰A@?®GA?®GA?®GA?®GA?\�B?\�B?\�B?\�B?\�B?“D?“D?“D?“D?“D?“D?ZD?TãE?TãE?TãE?TãE?TãE?TãE?‹lG?‹lG?‹lG?‹lG?‹lG?‹lG?L7I?L7I?L7I?L7I?L7I?L7I?L7I?^ºI?^ºI?K?K?K?K?K?1L?1L?1L?1L?VM?VM?VM?VM?{N?{N?{N?{N?ÙN?ÙN?ÙN?²�O?²�O?²�O?×£P?×£P?×£P?×£P?é&Q?é&Q?…ëQ?…ëQ?…ëQ?!°R?!°R?!°R?33S?33S?Ï÷S?Ï÷S?Ï÷S?ázT?ázT?}?U?}?U?}?U?�ÂU?�ÂU?V?=
W?=
W?=
W?=
W?ÙÎW?ÙÎW?ÙÎW?þÔX?þÔX?þÔX?þÔX?XY?XY?HáZ?HáZ?HáZ?HáZ?HáZ?HáZ?Ñ"[?¬\?¬\?¬\?¬\?¬\?¬\?¤p]?¤p]?¤p]?¶ó]?¶ó]??5^?î|_?î|_?î|_?î|_?î|_?w¾_?œÄ`?œÄ`?œÄ`?œÄ`?Jb?Jb?Jb?Jb?Jb?\�b?\�b?åÐb?�•c?�•c?�•c?“d?“d?/Ýd?/Ýd?/Ýd?¸e?B`e?Ë¡e?Tãe?Ý$f?ð§f?ð§f?yéf?+g?®g?®g?žïg?'1h?9´h?9´h?Ãõh?L7i?Õxi?q=j?q=j?q=j?…k?…k?…k?…k?…k?1l?1l?D‹l?D‹l?ÍÌl?Vm?òÒm?òÒm?òÒm?�—n?�—n?�—n? o? o?)\o?²�o?;ßo?Å p?Nbp?shq?shq?shq?shq?ü©q?…ëq?˜nr?˜nr?!°r?ªñr?33s?¼ts?F¶s?Ï÷s?j¼t?j¼t?j¼t?ôýt?}?u?�u?�Âu?v?¢Ev?=
w?=
w?=
w?ÇKw?P�w?bx?bx?ìQx?u“x?þÔx?Xy?Xy?š™y?#Ûy?¬z?5^z?¾Ÿz?Ñ"{?Ñ"{?Zd{?ã¥{?mç{?j|?j|?¬|?‘í|?/}?¤p}?-²}??5~??5~?Év~?R¸~?Ûù~?d;?î|?w¾?  €?¤type§scatter¤name¼Monte Carlo Exploring Starts¡xÈ   `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  pA  pA  pA  pA  pA  pA  pA  pA  pA  €A  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  èA  èA  èA  èA  èA  èA  èA  èA  èA  èA  èA  èA  èA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA   B   B   B   B   B   B   B   B   B   B   B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B   B   B   B   B   B   B   B   B  $B  $B  $B  $B  $B  $B  $B  $B  $B  $B  $B  (B  (B  (B  (B  (B  (B  (B  (B  (B  ,B  ,B  ,B  ,B  ,B  ,B  ,B  ,B  0B  0B  0B  0B  0B  0B  0B  0B  0B  4B  4B  4B  4B  4B  4B  4B  4B  4B  4B  8B  8B  8B  8B  8B  8B  8B  8B  8B  <B  <B  <B  <B  <B  <B  <B  <B  <B  @B  @B  @B  @B  @B  @B  @B  @B  @B  DB  DB  DB  DB  DB  DB  DB  DB  DB  DB  DB  HB  HB  HB  HB  HB  HB  HB  HB  HB  HB  HB  HB  HB  HB  LB  LB  LB  LB  LB  LB  LB  PB  PB  PB  PB  PB  PB  TB  TB  TB  TB  TB  TB  TB  TB  XB  XB  XB  XB  XB  XB  XB  XB  XB  \B  \B  \B  \B  \B  \B  \B  \B  \B  \B  `B  `B  `B  `B  `B  `B  `B  dB  dB  dB  dB  dB  dB  hB  hB  hB  hB  hB  hB  hB  lB  lB  lB  lB  lB  lB  lB  pB  pB  pB  pB  pB  pB  pB  tB  tB  tB  tB  tB  tB  tB  tB  tB  tB  xB  xB  xB  xB  xB  xB  xB  xB  |B  |B  |B  |B  |B  |B  |B  |B  |B  |B  €B  €B  €B  €B  €B  €B  €B  €B  ‚B  ‚B  „B  „B  „B  „B  „B  „B  „B  †B  †B  †B  †B  †B  †B  †B  †B  ˆB  ˆB  ˆB  ˆB  ˆB  ŠB  ŠB  ŠB  ŠB  ŠB  ŠB  ŒB  ŒB  ŒB  ŒB  ŒB  ŒB  ŽB  ŽB  ŽB  ŽB  �B  �B  �B  �B  ’B  ’B  ’B  ’B  ’B  ”B  ”B  ”B  ”B  –B  –B  –B  –B  –B  –B  –B  –B  ˜B  ˜B  ˜B  ˜B  ˜B  šB  šB  šB  šB  šB  šB  šB  šB  œB  œB  œB  œB  žB  žB  žB  žB  žB  žB  žB   B   B   B  ¢B  ¢B  ¢B  ¢B  ¤B  ¤B  ¤B  ¤B  ¤B  ¤B  ¦B  ¦B  ¦B  ¨B  ¨B  ¨B  ¨B  ¨B  ¨B  ¨B  ªB  ªB  ªB  ªB  ªB  ªB  ªB  ªB  ¬B  ¬B  ¬B  ¬B  ®B  ®B  ®B  ®B  ®B  °B  °B  °B  °B  °B  °B  ²B  ´B  ´B  ´B  ´B  ´B  ´B  ¶B  ¶B  ¶B  ¶B  ¶B  ¶B  ¸B  ¸B  ¸B  ¸B  ¸B  ¸B  ¸B  ¼B  ¼B  ¾B  ¾B  ¾B  ¾B  ¾B  ÀB  ÀB  ÀB  ÀB  ÂB  ÂB  ÂB  ÂB  ÄB  ÄB  ÄB  ÄB  ÆB  ÆB  ÆB  ÈB  ÈB  ÈB  ÊB  ÊB  ÊB  ÊB  ÌB  ÌB  ÎB  ÎB  ÎB  ÐB  ÐB  ÐB  ÒB  ÒB  ÔB  ÔB  ÔB  ÖB  ÖB  ØB  ØB  ØB  ÚB  ÚB  ÜB  ÞB  ÞB  ÞB  ÞB  àB  àB  àB  âB  âB  âB  âB  äB  äB  æB  æB  æB  æB  æB  æB  èB  êB  êB  êB  êB  êB  êB  ìB  ìB  ìB  îB  îB  ðB  òB  òB  òB  òB  òB  öB  øB  øB  øB  øB  úB  úB  úB  úB  úB  üB  üB  þB   C   C   C  C  C  C  C  C  C  C  C  C  	C  
C  
C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C   C   C  !C  $C  %C  'C  (C  )C  )C  )C  )C  *C  +C  ,C  ,C  -C  .C  /C  1C  3C  5C  7C  7C  7C  9C  :C  <C  AC  DC  FC  KC  KC  KC  LC  NC  OC  OC  PC  QC  RC  SC  SC  \C  cC  kC  mC  nC  oC  oC  qC  sC  tC  xC  xC  yC €€C €…C €‰C  �C  –C  –C €—C  šC  ¡C  £C  «C  ¸C  ºC„¡yÈ@ŠK†:ŠK;PqI;ŠK†;mÞ§;2ë;2ë;ŠK<ü<Þ§8<Þ§8<PqI<Á:Z<2k<¤Í{<ŠK†<C°Ž<ü—<´yŸ<mÞ§<&C°<Þ§¸<—Á<PqÉ<ÖÑ<Á:Ú<ëhó<ëhó<ëhó<¤Íû<ŠK=ŠK=C°=C°=ü=ü=XG=´y=¬#=É,=É,=‚u4=‚u4=Þ§8=;Ú<=—A=ó>E=Á:Z=Á:Z=Á:Z=Á:Z=Á:Z=m^=zŸb=ÖÑf=�6o=�6o=G›w=G›w=¤Í{=  €=\2„=\2„=ŠK†=¹dˆ=ç}Š=—Œ=C°Ž=qÉ�=Ÿâ’=Îû”=ü—=*.™=XG›=†`�=´yŸ=ã’¡=¬£=?Å¥=mÞ§=›÷©=ø)®=ø)®=T\²=T\²=°Ž¶=°Ž¶=Þ§¸=Áº=;Ú¼=ió¾=—Á=Å%Ã=ó>Å=PqÉ=PqÉ=~ŠË=¬£Í=Ú¼Ï=ÖÑ=eÖ=eÖ=Á:Ú=Á:Ú=ïSÜ=mÞ=L†à=zŸâ=¨¸ä=ÖÑæ=2ë=2ë=aí=�6ï=½Oñ=ëhó=‚õ=G›÷=v´ù=¤Íû=Òæý=   >.>.>Å%>\2>ó>>ŠK>¹d>¹d>Pq	>ç}
>~Š>¬£>¬£>C°>Ú¼>qÉ>Ÿâ>Ÿâ>7ï>Îû>e>ü>“!>Á:>Á:>XG>ïS>†`>m>´y>L† >ã’!>zŸ">¬#>¨¸$>?Å%>mÞ'>mÞ'>ë(>›÷)>2+>É,>a->�6/>�6/>&C0>½O1>T\2>‚u4>‚u4>‚5>°Ž6>G›7>Þ§8>v´9>Á:>¤Í;>;Ú<>Òæ=>ió>>  @>—A>.B>Å%C>ó>E>ó>E>"XG>"XG>¹dH>PqI>—L>—L>—L>C°N>C°N>Ú¼O>qÉP>ŸâR>ŸâR>7ïS>ÎûT>eV>üW>“!X>*.Y>Á:Z>XG[>ïS\>†`]>m^>´y_>ã’a>ã’a>zŸb>¬c>¨¸d>?Åe>ÖÑf>mÞg>ëh>2k>2k>Él>am>ø)n>�6o>&Cp>½Oq>T\r>ëhs>‚ut>‚u>G›w>G›w>Þ§x>v´y>Áz>¤Í{>;Ú|>Òæ}>ió~>  €>L†€>—�>ã’�>.‚>zŸ‚>Å%ƒ>¬ƒ>\2„>¨¸„>ó>…>?Å…>ŠK†>ÖÑ†>"X‡>mÞ‡>¹dˆ>Pq‰>Pq‰>›÷‰>ç}Š>2‹>ÉŒ>ÉŒ>—Œ>a�>¬£�>ø)Ž>C°Ž>�6�>Ú¼�>&C�>qÉ�>½O‘>Ö‘>T\’>Ÿâ’>ëh“>‚u”>‚u”>Îû”>‚•>°Ž–>°Ž–>ü—>G›—>“!˜>Þ§˜>*.™>Áš>Áš>Áš>XG›>¤Í›>ïSœ>;Úœ>mž>mž>mž>ióž>   >   >L† >—¡>ã’¡>.¢>zŸ¢>Å%£>¬£>\2¤>¨¸¤>ó>¥>?Å¥>ŠK¦>ÖÑ¦>"X§>mÞ§>¹d¨>ë¨>Pq©>›÷©>ç}ª>2«>~Š«>—¬>—¬>a­>¬£­>ø)®>C°®>�6¯>Ú¼¯>&C°>½O±>½O±>Ö±>T\²>Ÿâ²>ëh³>‚u´>‚u´>Îû´>‚µ>e¶>°Ž¶>ü·>G›·>“!¸>Þ§¸>*.¹>v´¹>Á:º>Áº>XG»>¤Í»>ïS¼>;Ú¼>m¾>m¾>m¾>ió¾>´y¿>  À>L†À>—Á>ã’Á>.Â>zŸÂ>Å%Ã>¬Ã>\2Ä>?ÅÅ>?ÅÅ>?ÅÅ>ŠKÆ>ÖÑÆ>"XÇ>mÞÇ>¹dÈ>ëÈ>PqÉ>›÷É>ç}Ê>2Ë>~ŠË>ÉÌ>—Ì>aÍ>¬£Í>ø)Î>C°Î>�6Ï>Ú¼Ï>&CÐ>qÉÐ>½OÑ>ÖÑ>T\Ò>ŸâÒ>ëhÓ>7ïÓ>‚uÔ>ÎûÔ>°ŽÖ>°ŽÖ>°ŽÖ>ü×>G›×>“!Ø>Þ§Ø>v´Ù>v´Ù>Á:Ú>ÁÚ>XGÛ>¤ÍÛ>ïSÜ>;ÚÜ>†`Ý>mÞ>mÞ>ióÞ>  à>  à>L†à>—á>ã’á>.â>zŸâ>Å%ã>¬ã>\2ä>ó>å>ó>å>?Åå>ŠKæ>ÖÑæ>"Xç>mÞç>ëè>ëè>Pqé>›÷é>ç}ê>2ë>Éì>Éì>—ì>aí>¬£í>ø)î>�6ï>�6ï>Ú¼ï>&Cð>½Oñ>½Oñ>Öñ>T\ò>Ÿâò>ëhó>7ïó>Îûô>Îûô>‚õ>eö>°Žö>ü÷>G›÷>“!ø>Þ§ø>*.ù>v´ù>Á:ú>XGû>XGû>¤Íû>ïSü>;Úü>†`ý>mþ>mþ>ióþ>   ?   ?L† ?L† ?qÉ ?—?½O?ã’?Ö?.?T\?zŸ?Ÿâ?Å%?ëh?¬?7ï?\2?‚u?¨¸?Îû?ó>?‚??Å?e?ŠK?°Ž?ÖÑ?ü?G›?G›?mÞ?“!?¹d?Þ§?ë?*.	?Pq	?v´	?›÷	?Á:
?ç}
?Á
?2?XG?~Š?¤Í?É?ïS?—?;Ú?a?†`?¬£?Òæ?ø)?m?C°?ió?�6?´y?Ú¼?  ?&C?L†?qÉ?—?½O?ã’?Ö?.?T\?zŸ?Ÿâ?Å%?ëh?¬?7ï?\2?‚u?¨¸?Îû?ó>?‚??Å?e?ŠK?°Ž?ÖÑ?"X?"X?G›?mÞ?“!?¹d?Þ§?ë?*.?Pq?v´?›÷?Á:?ç}?Á?2?XG?~Š?¤Í?É?ïS?—?;Ú?a?†`?¬£?Òæ?m?m?C°?ió?�6?´y?Ú¼?   ?&C ?L† ?qÉ ?—!?½O!?ã’!?Ö!?."?T\"?zŸ"?Ÿâ"?Å%#?ëh#?¬#?7ï#?\2$?‚u$?¨¸$?Îû$?ó>%?‚%??Å%?e&?ŠK&?°Ž&?ÖÑ&?"X'?"X'?G›'?mÞ'?“!(?Þ§(?Þ§(?ë(?*.)?Pq)?v´)?›÷)?Á:*?ç}*?Á*?XG+?XG+?~Š+?¤Í+?É,?ïS,?—,?;Ú,?a-?†`-?¬£-?Òæ-?ø).?m.?C°.?ió.?�6/?´y/?Ú¼/?  0?&C0?L†0?qÉ0?—1?½O1?ã’1?.2?.2?T\2?zŸ2?Ÿâ2?Å%3?ëh3?¬3?7ï3?\24?‚u4?¨¸4?Îû4?‚5?‚5??Å5?e6?°Ž6?°Ž6?ÖÑ6?ü7?"X7?G›7?mÞ7?“!8?¹d8?Þ§8?ë8?*.9?Pq9?v´9?›÷9?Á::?ç}:?Á:?2;?~Š;?~Š;?¤Í;?É<?ïS<?—<?;Ú<?a=?†`=?¬£=?Òæ=?ø)>?m>?C°>?ió>?�6??´y??Ú¼??  @?&C@?L†@?qÉ@?—A?½OA?ã’A?ÖA?.B?T\B?zŸB?ŸâB?Å%C?ëhC?¬C?7ïC?\2D?‚uD?¨¸D?ÎûD?ó>E?‚E??ÅE?eF?ŠKF?°ŽF?ÖÑF?"XG?"XG?G›G?mÞG?“!H?¹dH?Þ§H?ëH?*.I?PqI?v´I?›÷I?Á:J?ÁJ?ÁJ?2K?XGK?~ŠK?¤ÍK?ÉL?ïSL?—L?;ÚL?aM?†`M?¬£M?ÒæM?ø)N?mN?C°N?ióN?�6O?´yO?Ú¼O?  P?&CP?L†P?qÉP?—Q?½OQ?ã’Q?ÖQ?.R?T\R?ŸâR?ŸâR?Å%S?ëhS?¬S?7ïS?\2T?‚uT?¨¸T?ÎûT?ó>U?‚U??ÅU?eV?ŠKV?°ŽV?ÖÑV?üW?"XW?G›W?mÞW?“!X?¹dX?Þ§X?ëX?*.Y?PqY?v´Y?›÷Y?Á:Z?ç}Z?ÁZ?2[?XG[?~Š[?¤Í[?É\?ïS\?—\?;Ú\?a]?†`]?¬£]?Òæ]?ø)^?m^?C°^?ió^?�6_?´y_?Ú¼_?  `?&C`?L†`?qÉ`?—a?½Oa?ã’a?Öa?.b?T\b?zŸb?Ÿâb?Å%c?ëhc?¬c?7ïc?\2d?‚ud?¨¸d?Îûd?ó>e?‚e??Åe?ef?ŠKf?°Žf?ÖÑf?üg?"Xg?G›g?mÞg?“!h?¹dh?ëh?ëh?*.i?Pqi?v´i?›÷i?Á:j?ç}j?Áj?2k?XGk?~Šk?¤Ík?Él?ïSl?—l?;Úl?am?†`m?¬£m?Òæm?ø)n?mn?C°n?ión?�6o?´yo?Ú¼o?  p?&Cp?L†p?qÉp?—q?½Oq?ã’q?Öq?.r?T\r?zŸr?Ÿâr?Å%s?ëhs?¬s?7ïs?\2t?‚ut?¨¸t?Îût?ó>u?‚u??Åu?ev?ŠKv?°Žv?ÖÑv?üw?"Xw?G›w?mÞw?“!x?¹dx?Þ§x?ëx?*.y?Pqy?v´y?›÷y?Á:z?ç}z?Áz?2{?XG{?~Š{?¤Í{?É|?ïS|?—|?;Ú|?a}?†`}?¬£}?Òæ}?ø)~?m~?C°~?ió~?�6?´y?Ú¼?  €?¤type§scatter¤name­Random Policy¡xÈ@  ˆA   A  ØA  àA  B  B  B  B  $B  0B  0B  <B  @B  HB  TB  dB  pB  ‚B  ŒB  ªB  ¬B  °B  ´B  ¸B  ºB  ÆB  ÌB  ÌB  ÌB  ÞB  äB  äB  ìB  ìB  ðB  ðB  øB  úB   C  C  C  C  C  C  C  
C  C  C  C  C  C  C  C  C  C  C  C  C  C   C  !C  %C  %C  *C  .C  /C  1C  2C  4C  5C  9C  ?C  AC  BC  CC  HC  JC  QC  UC  XC  ZC  aC  aC  eC  eC  fC  fC  iC  oC  wC  xC  zC  C  �C  ‚C  ‚C  ƒC  †C €‡C €ˆC €‹C €‹C €ŒC €ŒC €ŽC  �C  ‘C €”C  –C  —C €˜C €˜C  ™C  ›C  ŸC € C  ¢C  ¥C €§C €«C  ­C  ®C  ¯C  ¯C  ²C  ³C €³C €´C €µC €µC  ¶C  ¹C  ¼C  ½C  ½C  ¾C  ÂC €ÃC €ÄC €ÄC  ÌC  ÍC €ÏC  ÓC  ÔC €ÔC €ÔC  ÕC €ØC €ÙC  ÚC €ÚC €ÛC  ÜC €ÜC €àC €áC  åC  æC  æC  èC €éC €êC  ìC €íC €ïC €ïC  ðC €ðC €ôC  õC  õC  ÷C €øC  úC  ýC  þC  ÿC €ÿC @D @D ÀD  D ÀD €D À	D  
D  
D €
D €
D €D  D €D €D €D  D  D €D ÀD  D  D @D ÀD €D ÀD @D  D  D ÀD €D  D @D @D @D @D   D @ D À!D @"D €"D À"D À#D À%D À%D €&D @'D À'D @)D @*D €+D @,D À.D  /D @/D €/D €/D À/D À0D  1D €1D  2D À2D @3D  4D €:D À:D  ;D €;D  <D @<D €<D €=D @>D  ?D  @D €@D ÀBD  CD @GD  HD ÀHD ÀHD €ID @JD €JD  KD  KD €KD ÀKD  LD ÀMD €OD €PD ÀRD  SD €SD  TD @WD @YD €YD ÀYD  [D  [D  \D @\D À\D À\D À_D @aD €aD ÀbD  cD €cD €cD €cD ÀeD €hD  jD @lD  nD  nD  nD ÀnD  oD  oD €qD ÀqD ÀrD  sD ÀsD  tD €uD @vD €vD ÀvD  wD €wD ÀwD €xD ÀzD  {D @|D  }D @}D  ~D @D ÀD `€D `€D à€D  „D  „D à„D  …D À†D ÀˆD  ‰D  ‰D à‰D  ‹D àŒD `�D àŽD àŽD €�D €�D  ’D  “D  “D @“D `“D à“D  ”D `•D  —D @˜D €˜D À˜D  ™D `™D ÀšD ÀšD ÀšD €›D ÀœD  žD €žD  ŸD  ŸD ÀŸD   D À D  ¡D €¡D à¡D à¡D à¡D À¢D à¢D @£D À£D €¤D  ¥D À¥D  ¦D  ¦D €¦D  ¦D `§D  ¨D  ªD @ªD `ªD ÀªD àªD €«D  «D @¬D @­D À­D à­D @¯D  ±D  ²D `²D  ²D  ³D  ³D  ³D @³D  ´D  µD @µD @·D @·D à·D  ¸D À¸D @¹D  ¹D À¹D  ºD @ºD @ºD ÀºD  »D  »D @»D `¼D  ¼D À½D €¾D à¾D  ¿D @¿D à¿D à¿D  ÀD @ÀD @ÁD `ÁD @ÂD àÂD àÂD €ÆD  ÆD àÆD  ÇD `ÈD `ÈD  ÈD  ÉD  ÉD àÉD  ÊD  ÊD  ÊD @ÊD €ÊD €ÊD àËD `ÌD €ÌD  ÍD  ÎD  ÏD  ÏD `ÏD ÀÏD  ÐD  ÑD  ÒD ÀÒD àÒD @ÓD `ÓD  ÓD  ÔD  ÔD €ÔD  ÔD  ×D  ÙD €ÙD €ÙD @ÚD €ÚD €ÚD àÛD àÛD ÀÞD àßD @áD  âD ÀâD  ãD ÀãD  äD  åD `åD àåD €æD àæD  çD  çD €çD  èD ÀèD  éD  êD  êD ÀêD @ëD `ìD @íD `íD `íD  íD ÀïD àðD  ñD àñD €òD ÀòD @óD `óD  óD €ôD @õD  öD ÀöD À÷D @ùD €ùD àùD  úD ÀûD @üD  üD ÀüD  ýD @þD `þD àþD @ÿD @ E ` E ° E €E ÐE pE E pE ÀE  E 0E pE �E  E àE E @E 0E PE pE `	E �	E à	E ð	E à
E E  E �E  E  E  E  E àE  E 0E  E  E pE  E @E ÐE  E PE �E  E  E E  E PE �E ÐE  E 0E PE PE PE €E ÐE ÐE ðE PE pE €E àE  E E PE ÐE °E 0E ÀE   E P!E €!E @#E $E @$E P%E `%E �%E Ð%E  &E 'E  'E P'E `'E ð(E P)E À)E  *E €*E ð*E ð*E p+E °+E ð+E 0,E 0,E  ,E °,E À,E °-E ð-E  .E ð.E p/E °1E °1E P2E p2E À3E  4E `4E P5E p5E €5E  5E  6E P9E °9E :E  :E à:E 0;E  ;E 0=E 0>E p>E  ?E p?E  @E @@E  @E  @E  BE `BE àBE 0CE @CE `CE àCE  DE PDE `DE @EE `EE `EE €EE �EE ÐEE ÐEE àEE GE  GE €GE àGE ÀIE @JE àJE @KE €KE ÀKE pLE ÀLE PNE 0OE °OE  PE PE PE 0PE àQE €SE TE @TE PTE ðUE @VE pVE  VE ÐWE ÐXE ðYE PZE ÐZE  [E à\E  ]E  _E €_E 0`E àaE @bE  bE ðcE  dE  eE PfE `fE 0gE PgE °gE àgE hE `hE  hE ÀiE ÐjE kE 0kE ÀkE  lE  mE pmE pmE oE €oE ÀoE @pE `qE �qE @tE PtE  uE ÀuE `vE 0xE 0xE  yE @yE pyE  zE  {E {E |E @|E  }E À}E 0~E ð~E €E ÐE P€E X€E ˜€E �E  �E H�E ˆ�E ø�E ‚E ¸‚E È‚E ƒE 8ƒE @ƒE àƒE `„E `„E p„E €„E è„E …E Ø…E x†E ¨†E €‡E à‡E  ˆE  ˆE °ˆE €‰E  ŠE ŠE ÀŠE ØŠE àŠE ‹E ‹E è‹E ð‹E ø‹E ˜ŒE ¸ŒE @�E x�E ˆ�E  �E ˆŽE ¸ŽE `�E ð�E `�E h�E °�E Ø�E à�E À‘E ø‘E ˜’E h”E  ”E ¨–E  —E ð—E P˜E �™E  ™E ˆšE  ›E h›E ˆ›E PœE ¸œE  �E  �E x�E  žE  E ð E 0¢E H¢E p¢E P£E  ¤E Ø¥E à¥E ø¥E `¦E �¦E 0§E `©E  «E  ¬E ¬E p­E À­E H®E ø®E ð°E @±E ²E ²E ²E ³E p³E 8´E H´E à´E �µE ˆ¶E @¸E p¸E à¹E à»E ð»E ¼E  ¼E à½E ¾E X¾E `¾E ˆ¾E À¾E `ÀE øÀE 8ÁE HÁE  ÁE ÂE ÂE HÂE XÂE `ÂE øÂE HÃE  ÄE €ÆE ¨ÆE ÇE  ÉE HÉE ÀËE ÀÌE pÐE @ÑE 0ÖE ×E @×E ˆÜE HáE hâE `ãE päE èæE `çE pìE ÈîE  ïE  ðE ÈóE  ùE  þE pþE ¨þE  ÿE �F ÌF ”F XF ˜F tF  F ÐF ÜF F x	F 4
F tF ÐF  F tF  F ÈF ˜F ¬F <F dF äF xF FÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/acf9294267fab534„¦layoutˆ¨autosizeÂ¥xaxisƒ¨tickvals×  €?   A¥title�¤text®Dealer showing¨ticktext’¡A¢10¨template‚¦layoutÞ ©coloraxis�¨colorbar‚¥ticks ¬outlinewidthÊ    ¥xaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white©hovermode§closest­paper_bgcolor¥white£geo†©showlakesÃ¨showlandÃ©landcolor§#E5ECF6§bgcolor¥white¬subunitcolor¥white©lakecolor¥whiteªcolorscaleƒªsequentialš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921©diverging›’Ê    §#8e0152’Ê=ÌÌÍ§#c51b7d’Ê>LÌÍ§#de77ae’Ê>™™š§#f1b6da’Ê>ÌÌÍ§#fde0ef’Ê?   §#f7f7f7’Ê?™š§#e6f5d0’Ê?333§#b8e186’Ê?LÌÍ§#7fbc41’Ê?fff§#4d9221’Ê?€  §#276419¯sequentialminusš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921¥yaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white­shapedefaults�¤line�¥color§#2a3f5fªhoverlabel�¥align¤left¦mapbox�¥style¥light¥polarƒ«angularaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6ªradialaxisƒ©gridcolor¥white¥ticks ©linecolor¥white¯autotypenumbers¦strict¤font�¥color§#2a3f5f§ternary„¥aaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6¥caxisƒ©gridcolor¥white¥ticks ©linecolor¥white¥baxisƒ©gridcolor¥white¥ticks ©linecolor¥white²annotationdefaultsƒ©arrowheadÊ    ªarrowwidthÊ?€  ªarrowcolor§#2a3f5f¬plot_bgcolor§#E5ECF6¥title�¡xÊ=LÌÍ¥sceneƒ¥xaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥zaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥yaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¨colorwayš§#636efa§#EF553B§#00cc96§#ab63fa§#FFA15A§#19d3f3§#FF6692§#B6E880§#FF97FF§#FECB52¤dataÞ ®scatterpolargl‘‚¤type®scatterpolargl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦carpet‘ƒ¥baxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¤type¦carpet¥aaxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¬scatterpolar‘‚¤type¬scatterpolar¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©parcoords‘‚¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©parcoords§scatter‘‚¤type§scatter¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ²histogram2dcontour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type²histogram2dcontourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921§contour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§contourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattercarpet‘‚¤type­scattercarpet¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦mesh3d‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type¦mesh3d§surface‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§surfaceªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattermapbox‘‚¤type­scattermapbox¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ªscattergeo‘‚¤typeªscattergeo¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©histogram‘‚¤type©histogram¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    £pie‘‚¤type£pieªautomarginÃªchoropleth‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤typeªchoropleth©heatmapgl‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©heatmapglªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921£bar‘„¤type£bar§error_y�¥color§#2a3f5f§error_x�¥color§#2a3f5f¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   §heatmap‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§heatmapªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­contourcarpet‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type­contourcarpet¥table‘ƒ¤type¥table¦header‚¤line�¥color¥white¤fill�¥color§#C8D4E3¥cells‚¤line�¥color¥white¤fill�¥color§#EBF0F8©scatter3d‘ƒ¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©scatter3d¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¨barpolar‘‚¤type¨barpolar¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   ©scattergl‘‚¤type©scattergl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    «histogram2d‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type«histogram2dªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921®scatterternary‘‚¤type®scatterternary¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦heightÊC–  ¦margin„¡lÊ    ¡bÊ    ¡rÊ    ¡tÊBp  ¥title ¥yaxisƒ¨tickvals×  @A  ¨A¥title�¤textªPlayer sum¨ticktext×  @A  ¨A¥widthÊCÈ  ¦config…¨showLinkÂ¨editableÂªresponsiveÃªstaticPlotÂªscrollZoomÃ¦frames�¤data‘‰¤zmaxÊ?€  ¡yÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¤type§heatmapªcolorscale§Bluered¤zminÊ¿€  ¡zšÇ(K¡¾Q4¯¾òx¸¾ÿÈË¾JŠ×¾ —Ü¾üÂ¶¾Ô1â½pA!>î¢?Ç(Õª=\ =*Ù‹<õ³ž<ºÈ™¼ê;Ý;Â¤ñ=î‚Ê>f8"?Ã<s?Ç(¾Ö¾=ˆ”=Š8m=Ü1É<†ŠF<4Ž <Uæ>Ž;Ð>@�'?†mr?Ç()Ò>±Ð×=j˜’=· �=B$=…¥i=5â5>tòÙ>á(?†Ps?Ç(õ">ÿ\>\å=É5Â=1š=Ë²Ì=õCI>0¬ã>Ô@+?ºùs?Ç(2û9>û>	.>Èïç=ù_Ï=-æé=­+‘>¡žú>ë4?ð?u?Ç(%6$><á=•›=€=ì
¼¶£z=ŒÌ>çô?­ÀG?}~w?Ç(!üÂ=3»S=4_<Špâ»I ‘½ø±Ÿ½R•æ=½ ?_¹K?GXx?Ç(7›N;/±½h¤˜½ÂQí½Òç(¾|¾Â½`”>0NA?þy?Ç(&¾w·-¾Œ–d¾³y¾Â¸�¾;îˆ¾FÝY¾cî�¼êûß>ã­_?©transposeÃ©showscaleÃ¡xÇ(  €?   @  @@  €@   @  À@  à@   A  A   AÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/e97923405a5e6801„¦layout†¥xaxisƒ¨tickvalsÇ(  €?   @  @@  €@   @  À@  à@   A  A   A¥title�¤text®Dealer showing¨ticktextš¡AÊ@   Ê@@  Ê@€  Ê@   Ê@À  Ê@à  ÊA   ÊA  ÊA   ¨template‚¦layoutÞ ©coloraxis�¨colorbar‚¥ticks ¬outlinewidthÊ    ¥xaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white©hovermode§closest­paper_bgcolor¥white£geo†©showlakesÃ¨showlandÃ©landcolor§#E5ECF6§bgcolor¥white¬subunitcolor¥white©lakecolor¥whiteªcolorscaleƒªsequentialš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921©diverging›’Ê    §#8e0152’Ê=ÌÌÍ§#c51b7d’Ê>LÌÍ§#de77ae’Ê>™™š§#f1b6da’Ê>ÌÌÍ§#fde0ef’Ê?   §#f7f7f7’Ê?™š§#e6f5d0’Ê?333§#b8e186’Ê?LÌÍ§#7fbc41’Ê?fff§#4d9221’Ê?€  §#276419¯sequentialminusš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921¥yaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white­shapedefaults�¤line�¥color§#2a3f5fªhoverlabel�¥align¤left¦mapbox�¥style¥light¥polarƒ«angularaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6ªradialaxisƒ©gridcolor¥white¥ticks ©linecolor¥white¯autotypenumbers¦strict¤font�¥color§#2a3f5f§ternary„¥aaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6¥caxisƒ©gridcolor¥white¥ticks ©linecolor¥white¥baxisƒ©gridcolor¥white¥ticks ©linecolor¥white²annotationdefaultsƒ©arrowheadÊ    ªarrowwidthÊ?€  ªarrowcolor§#2a3f5f¬plot_bgcolor§#E5ECF6¥title�¡xÊ=LÌÍ¥sceneƒ¥xaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥zaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥yaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¨colorwayš§#636efa§#EF553B§#00cc96§#ab63fa§#FFA15A§#19d3f3§#FF6692§#B6E880§#FF97FF§#FECB52¤dataÞ ®scatterpolargl‘‚¤type®scatterpolargl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦carpet‘ƒ¥baxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¤type¦carpet¥aaxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¬scatterpolar‘‚¤type¬scatterpolar¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©parcoords‘‚¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©parcoords§scatter‘‚¤type§scatter¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ²histogram2dcontour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type²histogram2dcontourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921§contour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§contourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattercarpet‘‚¤type­scattercarpet¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦mesh3d‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type¦mesh3d§surface‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§surfaceªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattermapbox‘‚¤type­scattermapbox¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ªscattergeo‘‚¤typeªscattergeo¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©histogram‘‚¤type©histogram¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    £pie‘‚¤type£pieªautomarginÃªchoropleth‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤typeªchoropleth©heatmapgl‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©heatmapglªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921£bar‘„¤type£bar§error_y�¥color§#2a3f5f§error_x�¥color§#2a3f5f¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   §heatmap‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§heatmapªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­contourcarpet‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type­contourcarpet¥table‘ƒ¤type¥table¦header‚¤line�¥color¥white¤fill�¥color§#C8D4E3¥cells‚¤line�¥color¥white¤fill�¥color§#EBF0F8©scatter3d‘ƒ¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©scatter3d¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¨barpolar‘‚¤type¨barpolar¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   ©scattergl‘‚¤type©scattergl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    «histogram2d‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type«histogram2dªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921®scatterternary‘‚¤type®scatterternary¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦heightÊC–  ¦margin„¡lÊ    ¡bÊ    ¡rÊA   ¡tÊAð  ¥yaxisƒ¨tickvalsÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¥title�¤textªPlayer sum¨ticktextÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¥widthÊC–  ¦config…¨showLinkÂ¨editableÂªresponsiveÃªstaticPlotÂªscrollZoomÃ¦frames�¤data‘‰¤zmaxÊ?€  ¡yÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¤type§heatmapªcolorscale¥Greys¤zminÊ¿€  ¡zšÇ(  €?  €?  €?  €?  €?  €?  €?  €¿  €¿  €¿Ç(  €?  €?  €?  €?  €?  €?  €¿  €¿  €¿  €¿Ç(  €?  €?  €?  €?  €?  €?  €¿  €¿  €¿  €¿Ç(  €?  €?  €?  €?  €?  €?  €¿  €¿  €¿  €¿Ç(  €?  €?  €?  €?  €?  €?  €¿  €¿  €¿  €¿Ç(  €?  €?  €?  €?  €?  €?  €¿  €¿  €¿  €¿Ç(  €?  €?  €?  €?  €?  €?  €¿  €¿  €¿  €¿Ç(  €?  €?  €?  €?  €?  €?  €¿  €¿  €¿  €¿Ç(  €?  €?  €?  €?  €?  €?  €?  €¿  €¿  €¿Ç(  €?  €?  €?  €?  €?  €?  €?  €¿  €¿  €¿©transposeÃ©showscaleÂ¡xÇ(  €?   @  @@  €@   @  À@  à@   A  A   AÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/dd4bace5c1b653a4„¦layoutˆ¨autosizeÂ¥xaxisƒ¨tickvals×  €?   A¥title�¤text®Dealer showing¨ticktext’¡A¢10¨template‚¦layoutÞ ©coloraxis�¨colorbar‚¥ticks ¬outlinewidthÊ    ¥xaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white©hovermode§closest­paper_bgcolor¥white£geo†©showlakesÃ¨showlandÃ©landcolor§#E5ECF6§bgcolor¥white¬subunitcolor¥white©lakecolor¥whiteªcolorscaleƒªsequentialš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921©diverging›’Ê    §#8e0152’Ê=ÌÌÍ§#c51b7d’Ê>LÌÍ§#de77ae’Ê>™™š§#f1b6da’Ê>ÌÌÍ§#fde0ef’Ê?   §#f7f7f7’Ê?™š§#e6f5d0’Ê?333§#b8e186’Ê?LÌÍ§#7fbc41’Ê?fff§#4d9221’Ê?€  §#276419¯sequentialminusš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921¥yaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white­shapedefaults�¤line�¥color§#2a3f5fªhoverlabel�¥align¤left¦mapbox�¥style¥light¥polarƒ«angularaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6ªradialaxisƒ©gridcolor¥white¥ticks ©linecolor¥white¯autotypenumbers¦strict¤font�¥color§#2a3f5f§ternary„¥aaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6¥caxisƒ©gridcolor¥white¥ticks ©linecolor¥white¥baxisƒ©gridcolor¥white¥ticks ©linecolor¥white²annotationdefaultsƒ©arrowheadÊ    ªarrowwidthÊ?€  ªarrowcolor§#2a3f5f¬plot_bgcolor§#E5ECF6¥title�¡xÊ=LÌÍ¥sceneƒ¥xaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥zaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥yaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¨colorwayš§#636efa§#EF553B§#00cc96§#ab63fa§#FFA15A§#19d3f3§#FF6692§#B6E880§#FF97FF§#FECB52¤dataÞ ®scatterpolargl‘‚¤type®scatterpolargl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦carpet‘ƒ¥baxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¤type¦carpet¥aaxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¬scatterpolar‘‚¤type¬scatterpolar¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©parcoords‘‚¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©parcoords§scatter‘‚¤type§scatter¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ²histogram2dcontour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type²histogram2dcontourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921§contour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§contourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattercarpet‘‚¤type­scattercarpet¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦mesh3d‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type¦mesh3d§surface‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§surfaceªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattermapbox‘‚¤type­scattermapbox¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ªscattergeo‘‚¤typeªscattergeo¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©histogram‘‚¤type©histogram¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    £pie‘‚¤type£pieªautomarginÃªchoropleth‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤typeªchoropleth©heatmapgl‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©heatmapglªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921£bar‘„¤type£bar§error_y�¥color§#2a3f5f§error_x�¥color§#2a3f5f¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   §heatmap‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§heatmapªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­contourcarpet‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type­contourcarpet¥table‘ƒ¤type¥table¦header‚¤line�¥color¥white¤fill�¥color§#C8D4E3¥cells‚¤line�¥color¥white¤fill�¥color§#EBF0F8©scatter3d‘ƒ¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©scatter3d¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¨barpolar‘‚¤type¨barpolar¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   ©scattergl‘‚¤type©scattergl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    «histogram2d‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type«histogram2dªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921®scatterternary‘‚¤type®scatterternary¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦heightÊC–  ¦margin„¡lÊ    ¡bÊ    ¡rÊ    ¡tÊBp  ¥title ¥yaxisƒ¨tickvals×  @A  ¨A¥title�¤textªPlayer sum¨ticktext×  @A  ¨A¥widthÊCÈ  ¦config…¨showLinkÂ¨editableÂªresponsiveÃªstaticPlotÂªscrollZoomÃ¦frames�¤data‘‰¤zmaxÊ?€  ¡yÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¤type§heatmapªcolorscale§Bluered¤zminÊ¿€  ¡zšÇ(šŸ¿G¿lz¿0P ¿"f%¿qÞ¿“’±¾¾³½€,>Ìº>Ç(=Ÿ{¾»³‰¾ßƒ¾ºŠu¾8cˆ¾¯¾o$>iíÎ>£&?�|d?Ç(ßWf¾õXf¾�m¾„Þ`¾û+i¾ªFª½ýÆ0>–'Ø>ƒ˜*?Re?Ç(ÇœI¾Ì,¾KÉ=¾íF¾TÿL¾€%x½F+V>¸êÛ>ØÏ)?N›e?Ç(IÓ)¾Õq¾¸¾Â ¾Úi ¾¢Å§¼?&\>vê>ä-?Ög?Ç(º¾5Å
¾O0 ¾‹à½t¾¾X	=ôª›>°n??B7?4ÿi?Ç(7ÓJ¾x¾žï—¾³®¾¯1Ó¾Ññ¨½§–Õ>c"?7H?´]o?Ç(X ‰¾Mw¦¾e´¸¾õ“Ù¾ucè¾Œ†´¾p!õ=`n?'K?Q«o?Ç(¯-¥¾ñ•»¾¨Ó¾ù”ó¾–þ¾;È¾2É¾sT£>DTD?ˆñq?Ç(ªÞÓ¾I¥ì¾„ç ¿.Æ¿e¿�Õ¾*dV¾ÙRŒ: Ýè>îS?©transposeÃ©showscaleÃ¡xÇ(  €?   @  @@  €@   @  À@  à@   A  A   AÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/8b2f6661ab801d2c„¦layout„¥xaxis‚¤type£log¥title�¤text´Steps to Finish Race¨template‚¦layoutÞ ©coloraxis�¨colorbar‚¥ticks ¬outlinewidthÊ    ¥xaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white©hovermode§closest­paper_bgcolor¥white£geo†©showlakesÃ¨showlandÃ©landcolor§#E5ECF6§bgcolor¥white¬subunitcolor¥white©lakecolor¥whiteªcolorscaleƒªsequentialš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921©diverging›’Ê    §#8e0152’Ê=ÌÌÍ§#c51b7d’Ê>LÌÍ§#de77ae’Ê>™™š§#f1b6da’Ê>ÌÌÍ§#fde0ef’Ê?   §#f7f7f7’Ê?™š§#e6f5d0’Ê?333§#b8e186’Ê?LÌÍ§#7fbc41’Ê?fff§#4d9221’Ê?€  §#276419¯sequentialminusš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921¥yaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white­shapedefaults�¤line�¥color§#2a3f5fªhoverlabel�¥align¤left¦mapbox�¥style¥light¥polarƒ«angularaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6ªradialaxisƒ©gridcolor¥white¥ticks ©linecolor¥white¯autotypenumbers¦strict¤font�¥color§#2a3f5f§ternary„¥aaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6¥caxisƒ©gridcolor¥white¥ticks ©linecolor¥white¥baxisƒ©gridcolor¥white¥ticks ©linecolor¥white²annotationdefaultsƒ©arrowheadÊ    ªarrowwidthÊ?€  ªarrowcolor§#2a3f5f¬plot_bgcolor§#E5ECF6¥title�¡xÊ=LÌÍ¥sceneƒ¥xaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥zaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥yaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¨colorwayš§#636efa§#EF553B§#00cc96§#ab63fa§#FFA15A§#19d3f3§#FF6692§#B6E880§#FF97FF§#FECB52¤dataÞ ®scatterpolargl‘‚¤type®scatterpolargl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦carpet‘ƒ¥baxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¤type¦carpet¥aaxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¬scatterpolar‘‚¤type¬scatterpolar¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©parcoords‘‚¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©parcoords§scatter‘‚¤type§scatter¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ²histogram2dcontour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type²histogram2dcontourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921§contour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§contourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattercarpet‘‚¤type­scattercarpet¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦mesh3d‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type¦mesh3d§surface‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§surfaceªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattermapbox‘‚¤type­scattermapbox¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ªscattergeo‘‚¤typeªscattergeo¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©histogram‘‚¤type©histogram¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    £pie‘‚¤type£pieªautomarginÃªchoropleth‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤typeªchoropleth©heatmapgl‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©heatmapglªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921£bar‘„¤type£bar§error_y�¥color§#2a3f5f§error_x�¥color§#2a3f5f¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   §heatmap‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§heatmapªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­contourcarpet‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type­contourcarpet¥table‘ƒ¤type¥table¦header‚¤line�¥color¥white¤fill�¥color§#C8D4E3¥cells‚¤line�¥color¥white¤fill�¥color§#EBF0F8©scatter3d‘ƒ¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©scatter3d¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¨barpolar‘‚¤type¨barpolar¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   ©scattergl‘‚¤type©scattergl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    «histogram2d‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type«histogram2dªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921®scatterternary‘‚¤type®scatterternary¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦margin„¡lÊBH  ¡bÊBH  ¡rÊBH  ¡tÊBp  ¥yaxis�¥title�¤text³Percent of Episodes¦config…¨showLinkÂ¨editableÂªresponsiveÃªstaticPlotÂªscrollZoomÃ¦frames�¤data’„¡yÈ o;o;B`å;B`å;B`å;B`å;B`å;
×#<
×#<
×#<¦›D<¦›D<oƒ<oƒ<oƒ<oƒ<–C‹<1¬<1¬<1¬<1¬<j¼<j¼<h‘í<h‘í<h‘í<h‘í<h‘í<h‘í<¶óý<¶óý<o=–C=–C=žï'=žï'=žï'=žï'=žï'=žï'=žï'=X94=X94=X94=j<=j<=`åP=`åP=`åP=`åP=`åP=ôýT=®Ga=®Ga=®Ga=h‘m=h‘m=h‘m=#Ûy=#Ûy=#Ûy=¶ó}=L7‰=L7‰=L7‰=L7‰=L7‰=¼t“=¼t“=¼t“=¼t“=¼t“=P�—=P�—=-²�=-²�=-²�=
×£=
×£=
×£=Tã¥=1¬=1¬=1¬={®=-²=-²=ìQ¸=ìQ¸=ìQ¸=Év¾=Év¾=Év¾=¦›Ä=¦›Ä=¦›Ä=ôýÔ=ôýÔ=ôýÔ=ôýÔ=ôýÔ=ôýÔ=ôýÔ=ôýÔ=d;ß=d;ß=d;ß=d;ß=d;ß=øSã=øSã=Õxé=Õxé=Õxé=…ë=ü©ñ=ü©ñ=ü©ñ=F¶ó=�Âõ=   >   >   >   >   >Ý$>Ý$>Ý$>Ý$>Ý$>Ý$>L7	>L7	>L7	>Nb>Nb>Nb>Nb>Nb>Nb>Nb>˜n>˜n>�>�>�>u“>u“>u“>-²>-²>-²>-²>-²>ÁÊ!>ÁÊ!>ÁÊ!>ÁÊ!>/Ý$>/Ý$>/Ý$>Ãõ(>Ãõ(>Ãõ(>Ãõ(>+>+>{.>{.>{.> />-2>-2>-2>X94>X94>ìQ8>ìQ8>ìQ8>ìQ8>j<>j<>j<>j<>î|?>î|?>î|?>7‰A>7‰A>�•C>�•C>9´H>9´H>9´H>9´H>9´H>ÙN>ÙN>ÙN>ÙN>ÙN>ÙN>Ï÷S>Ï÷S>Ï÷S>Ï÷S>Ï÷S>V>V>?5^>?5^>?5^>?5^>?5^>?5^>?5^>?5^>d;_>Zd>Zd>Zd>Zd>Zd>°rh>°rh>°rh>°rh>…k>…k>…k>×£p>×£p>×£p>×£p>×£p>!°r>!°r>�Âu>�Âu>�Âu>#Ûy>#Ûy>#Ûy>#Ûy>‘í|>‘í|>‘í|>¶ó}>Ûù~>  €>\�‚>\�‚>\�‚>\�‚>\�‚>�•ƒ>�•ƒ>“„>Ý$†>Ý$†>Ý$†>Ý$†>®‡>®‡>®‡>'1ˆ>^º‰>^º‰>^º‰>q=Š>¨Æ‹>¨Æ‹>¨Æ‹>ºIŒ>VŽ>VŽ>VŽ>VŽ>)\�>)\�>ªñ’>ªñ’>ªñ’>ªñ’>ªñ’>ªñ’>ªñ’>Ï÷“>Ï÷“>áz”>–>–>–>š™™>š™™>š™™>š™™>š™™>š™™>š™™>¬š>Ñ"›>Ñ"›>ö(œ>ö(œ>-²�>-²�>-²�>?5ž>œÄ >œÄ >œÄ >œÄ >œÄ >ÁÊ¡>ÁÊ¡>åÐ¢>åÐ¢>/Ý¤>/Ý¤>/Ý¤>/Ý¤>B`¥>yé¦>yé¦>yé¦>‹l§>°r¨>°r¨>Ãõ¨>ú~ª>ú~ª>ú~ª>V­>V­>V­>V­>V­>{®>{®>Å °>Å °>Å °>Å °>33³>33³>33³>33³>33³>33³>X9´>X9´>j¼´>´È¶>´È¶>´È¶>´È¶>ìQ¸>ìQ¸>ìQ¸>#Û¹>#Û¹>#Û¹>5^º>Zd»>Zd»>‘í¼>‘í¼>‘í¼>¤p½>Ûù¾>Ûù¾>Ûù¾>  À>  À>7‰Á>7‰Á>7‰Á>oÃ>oÃ>oÃ>¸Å>¸Å>¸Å>¸Å>Ë¡Å>Ý$Æ>ð§Æ>q=Ê>q=Ê>q=Ê>q=Ê>q=Ê>q=Ê>q=Ê>–CË>–CË>ºIÌ>ºIÌ>ÍÌÌ>ßOÍ>VÎ>VÎ>NbÐ>NbÐ>NbÐ>NbÐ>˜nÒ>˜nÒ>˜nÒ>˜nÒ>¼tÓ>¼tÓ>ôýÔ>ôýÔ>ôýÔ>�Õ>=
×>=
×>=
×>bØ>bØ>‡Ù>‡Ù>¾ŸÚ>¾ŸÚ>¾ŸÚ>Ñ"Û>ö(Ü>ö(Ü>-²Ý>-²Ý>-²Ý>œÄà>œÄà>œÄà>œÄà>œÄà>œÄà>®Gá>ÓMâ>ÓMâ>åÐâ>øSã>/Ýä>/Ýä>/Ýä>B`å>Tãå>ffæ>‹lç>‹lç>°rè>°rè>Ãõè>çûé>çûé>ú~ê>D‹ì>D‹ì>D‹ì>D‹ì>{î>{î>{î> ï> ï>²�ï>Å ð>ü©ñ>ü©ñ>ü©ñ>33ó>33ó>33ó>X9ô>X9ô>�Âõ>�Âõ>�Âõ>´Èö>´Èö>ÙÎ÷>ÙÎ÷>ìQø>þÔø>5^ú>5^ú>5^ú>mçû>mçû>mçû>‘íü>‘íü>Évþ>Évþ>Évþ>î|ÿ>î|ÿ>ƒ ?ƒ ?ƒ ?%?%?ÁÊ?ÁÊ?ÁÊ?ÓM?ÓM?o?o?o?�•?�•?/Ý?/Ý?/Ý?/Ý?/Ý?Ë¡?Ë¡?Ë¡?Tã?Ý$?ff?yé?yé?+?'1?'1?'1?'1?°r?9´?Ãõ?L7	?Õx	?q=
?q=
?q=
?ú~
???…?…?ºI?ºI?ºI?D‹?ÍÌ?h‘?h‘?h‘?òÒ?{?V?�—? ? ?)\?;ß?;ß?×£?×£?×£?`å?é&?sh?…ë?…ë?-?˜n?ªñ?ªñ?áz?áz?áz?áz?áz?áz?}??}??}??�?�Â??+‡?+‡?ÇK?ÇK?ÇK?ÙÎ?ÙÎ?b?u“?u“?þÔ?š™?š™?š™?¬?¬?5^?¾Ÿ?Zd?Zd?Zd?ã¥?ö(?ö(?j?/?/?/?-²?-²?¶ó??5?Év?R¸?Ûù?w¾?w¾?w¾?‰A ?‰A ?ƒ ?œÄ ?%!?®G!?ÁÊ!?ÁÊ!?ÓM"?ÓM"?\�"?o#?o#?øS#?
×#?
×#?/Ý$?/Ý$?/Ý$?/Ý$?¸%?Ë¡%?Ë¡%?Ý$&?Ý$&?ff&?+'?+'?+'?žï'?žï'?žï'?°r(?°r(?9´(?Ãõ(?Õx)?Õx)?^º)?çû)?+?+?+?+?…+?…+?¨Æ+?ºI,?ºI,?D‹,?V-?V-?ßO-?V.?V.?V.?V.?�—.?Ù.? /?²�/?²�/?Å 0?Å 0?sh1?sh1?sh1?sh1?sh1?…ë1?…ë1?˜n2?˜n2?ªñ2?ªñ2?333?¼t3?Ï÷3?Ï÷3?X94?áz4?j¼4?}?5?}?5?�Â5?�Â5?¢E6?¢E6?´È6?´È6?=
7?ÇK7?P�7?ÙÎ7?ìQ8?ìQ8?u“8?þÔ8?‡9?š™9?š™9?#Û9?5^:?5^:?¾Ÿ:?Ñ";?Ñ";?Zd;?ã¥;?mç;?j<?j<?‘í<?‘í<?/=?-²=?-²=??5>??5>?Év>?R¸>?Ûù>?î|??î|??  @?  @?‰A@?ƒ@?%A?%A?®GA?ÁÊA?ÁÊA?JB?ÓMB?\�B?åÐB?oC?øSC?�•C?“D?“D?¦›D?¦›D?/ÝD?¸E?Ë¡E?Ë¡E?TãE?Ý$F?ð§F?ð§F?yéF?+G?®G?®G?žïG?'1H?ÃõH?ÃõH?ÃõH?L7I?^ºI?^ºI?q=J?q=J?ƒÀJ?ƒÀJ?–CK?–CK?…K?1L?1L?D‹L?D‹L?ÍÌL?ßOM?ßOM?h‘M?òÒM?VN?VN?�—N?ÙN? O?²�O?²�O?Å P?Å P?×£P?×£P?`åP?shQ?shQ?…ëQ?…ëQ?˜nR?˜nR?ªñR?ªñR?33S?¼tS?F¶S?Ï÷S?X9T?ázT?ôýT?ôýT?}?U?�ÂU?�ÂU?V?+‡V?+‡V?´ÈV?=
W?ÇKW?ÙÎW?ÙÎW?ìQX?ìQX?þÔX?þÔX?‡Y?XY?#ÛY?#ÛY?¬Z?5^Z?¾ŸZ?HáZ?Ñ"[?Zd[?ã¥[?mç[?ö(\?j\?¬\?‘í\?/]?¤p]?-²]?¶ó]??5^?Év^?R¸^?d;_?d;_?î|_?  `?  `?‰A`?œÄ`?œÄ`?%a?®Ga?7‰a?ÁÊa?Jb?ÓMb?\�b?åÐb?oc?øSc?
×c?
×c?“d?Zd?¦›d?/Ýd?¸e?B`e?Ë¡e?Tãe?Ý$f?fff?ð§f?yéf?+g?‹lg?žïg?žïg?'1h?°rh?L7i?L7i?L7i?Õxi?^ºi?çûi?q=j?ú~j?ƒÀj?k?–Ck?…k?¨Æk?1l?ºIl?ÍÌl?ÍÌl?Vm?ßOm?h‘m?òÒm?{n?Vn?�—n?Ùn?)\o?)\o?²�o?;ßo?Nbp?Nbp?×£p?`åp?é&q?shq?ü©q?…ëq?-r?˜nr?!°r?ªñr?33s?¼ts?Ï÷s?Ï÷s?X9t?ázt?j¼t?ôýt?}?u?�u?v?v?¢Ev?´Èv?´Èv?=
w?ÇKw?P�w?ÙÎw?bx?ìQx?u“x?þÔx?‡y?Xy?š™y?#Ûy?¬z?5^z?¾Ÿz?Ház?Ñ"{?Zd{?ã¥{?mç{?ö(|?j|?¬|?‘í|?/}?¤p}?-²}?¶ó}??5~?Év~?R¸~?Ûù~?d;?î|?w¾?  €?¤type§scatter¤nameµOff policy MC Control¡xÈ    A   A  0A  0A  0A  0A  0A  @A  @A  @A  PA  PA  `A  `A  `A  `A  pA  €A  €A  €A  €A  ˆA  ˆA  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A   A   A  ¨A  °A  °A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ÀA  ÀA  ÀA  ÈA  ÈA  ÐA  ÐA  ÐA  ÐA  ÐA  ØA  àA  àA  àA  èA  èA  èA  ðA  ðA  ðA  øA   B   B   B   B   B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B   B   B  $B  $B  $B  (B  (B  (B  ,B  ,B  ,B  4B  4B  4B  4B  4B  4B  4B  4B  8B  8B  8B  8B  8B  <B  <B  @B  @B  @B  DB  HB  HB  HB  LB  PB  TB  TB  TB  TB  TB  XB  XB  XB  XB  XB  XB  \B  \B  \B  `B  `B  `B  `B  `B  `B  `B  dB  dB  hB  hB  hB  lB  lB  lB  pB  pB  pB  pB  pB  tB  tB  tB  tB  |B  |B  |B  €B  €B  €B  €B  ‚B  ‚B  †B  †B  †B  ˆB  ŠB  ŠB  ŠB  ŒB  ŒB  ŽB  ŽB  ŽB  ŽB  �B  �B  �B  �B  ’B  ’B  ’B  ”B  ”B  –B  –B  ˜B  ˜B  ˜B  ˜B  ˜B  šB  šB  šB  šB  šB  šB  œB  œB  œB  œB  œB  žB  žB   B   B   B   B   B   B   B   B  ¢B  ¤B  ¤B  ¤B  ¤B  ¤B  ¦B  ¦B  ¦B  ¦B  ¨B  ¨B  ¨B  ªB  ªB  ªB  ªB  ªB  ¬B  ¬B  ®B  ®B  ®B  °B  °B  °B  °B  ²B  ²B  ²B  ´B  ¶B  ¸B  ºB  ºB  ºB  ºB  ºB  ¼B  ¼B  ÀB  ÂB  ÂB  ÂB  ÂB  ÄB  ÄB  ÄB  ÆB  ÈB  ÈB  ÈB  ÊB  ÌB  ÌB  ÌB  ÎB  ÐB  ÐB  ÐB  ÐB  ÒB  ÒB  ÔB  ÔB  ÔB  ÔB  ÔB  ÔB  ÔB  ÖB  ÖB  ØB  ÚB  ÚB  ÚB  ÜB  ÜB  ÜB  ÜB  ÜB  ÜB  ÜB  ÞB  àB  àB  âB  âB  äB  äB  äB  æB  èB  èB  èB  èB  èB  êB  êB  ìB  ìB  îB  îB  îB  îB  ôB  öB  öB  öB  øB  úB  úB  üB  þB  þB  þB   C   C   C   C   C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  	C  
C  
C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C   C   C  !C  !C  !C  #C  $C  $C  $C  %C  %C  'C  'C  (C  (C  (C  )C  *C  *C  +C  +C  +C  ,C  ,C  ,C  ,C  ,C  ,C  /C  0C  0C  1C  2C  3C  3C  3C  4C  5C  6C  7C  7C  8C  8C  9C  :C  :C  ;C  >C  >C  >C  >C  ?C  ?C  ?C  AC  AC  BC  CC  DC  DC  DC  FC  FC  FC  GC  GC  MC  MC  MC  NC  NC  PC  PC  QC  SC  TC  TC  TC  VC  VC  VC  WC  WC  XC  XC  XC  YC  YC  ZC  ZC  ZC  [C  [C  ]C  ]C  ]C  ^C  ^C  _C  _C  _C  `C  `C  aC  aC  aC  aC  aC  bC  bC  bC  cC  dC  eC  fC  fC  gC  hC  hC  hC  hC  iC  jC  lC  mC  nC  oC  oC  oC  pC  qC  qC  rC  rC  sC  sC  sC  tC  uC  vC  vC  vC  xC  yC  zC  |C  }C  }C  ~C  C  C  €C  €C  €C €€C  �C €�C  ‚C  ‚C €‚C  ƒC €ƒC €ƒC  „C  „C  „C  „C  „C  „C €„C €„C €„C  …C €…C  †C €†C €†C  ‡C  ‡C  ‡C €‡C €‡C  ˆC  ‰C  ‰C €‰C  ŠC  ŠC  ŠC €ŠC €ŠC €‹C  ŒC €ŒC €ŒC €ŒC  �C €�C €�C  ŽC €ŽC €ŽC €ŽC  �C  �C €�C  ‘C €’C  “C  ”C €”C €”C €”C  •C  •C €•C €–C  —C €—C  ˜C  ˜C €˜C €˜C  ™C €™C €™C €šC  ›C  ›C  œC  œC  œC  œC  �C €�C €�C  žC  žC €žC  ŸC  ŸC  ŸC €ŸC €ŸC €ŸC  ¡C  ¡C €¢C  £C €£C €£C  ¤C €¤C  ¥C  ¥C  ¥C  ¥C €¥C €¥C  ¦C €¦C €¦C €§C  ¨C  ¨C  ©C €©C €©C €©C €©C  ªC €ªC €«C €¬C €¬C €­C €­C €®C €®C €®C €®C €®C €°C €°C  ±C  ±C  ²C  ²C €²C  ³C €³C €³C €´C €µC  ¶C €¶C €¶C €¸C €¸C  ¹C  ¹C €¹C €¹C  ºC €ºC  »C €»C  ¼C  ¼C €¼C  ¾C €¾C €¿C €¿C €ÀC  ÁC  ÁC €ÁC €ÂC €ÂC  ÃC  ÄC  ÅC €ÅC €ÅC  ÆC  ÆC €ÇC  ÈC  ÈC  ÉC  ÉC €ÉC €ÊC  ËC  ÍC  ÍC €ÎC €ÎC  ÏC €ÏC  ÐC  ÐC  ÑC €ÑC €ÑC €ÒC  ÓC  ÔC €ÔC  ÕC €ÕC  ÖC €ÖC €ÖC  ×C  ×C €×C  ÙC  ÚC  ÚC  ÛC €ÛC  ÜC  ÜC  ÝC €ÝC €ÞC €ÞC €ßC  àC €àC €àC €àC  áC €áC €áC  ãC  ãC €ãC €ãC  äC  äC €äC  åC  åC  æC  æC €æC  çC  çC €çC €èC  éC  éC €éC €êC €ëC  ìC  ìC  íC  íC €îC €îC  ïC  ðC  ðC €ñC €ñC  óC  óC €óC €óC  õC €õC  öC  ÷C  øC €ùC €ûC €ûC €ýC  þC  þC  ÿC €ÿC €ÿC   D @ D ÀD @D @D €D €D ÀD ÀD  D ÀD €D €D  D €D @D €D  D @D €D ÀD  	D @
D €
D @D ÀD  D ÀD €D  D @D ÀD @D @D €D @D @D  D €D €D ÀD  D @D €D ÀD  D €D @D €D  D @D @D ÀD ÀD @D  D €D  !D €!D €"D À"D À#D  $D @$D €$D À$D  %D  %D À)D  *D À*D À*D À*D  +D À,D  -D @-D @.D €/D €3D @5D À5D €6D @7D  9D €:D €:D €;D À;D  <D @=D  @D  AD  BD €CD €DD €DD @ED  ID ÀID ÀID €KD @LD @MD ÀMD @ND ÀND €OD  QD €QD €RD  SD ÀSD  TD  TD ÀTD ÀUD @VD ÀVD  XD À[D @^D @^D €_D  bD  bD ÀbD €cD ÀcD  dD ÀdD  eD €eD €fD €iD @jD @mD @nD ÀnD @pD ÀpD €qD ÀqD  rD ÀzD  ƒD  …D `ŠD  ŽD  �D  �D  ’D  ’D  “D `”D à—D @›D `›D €›D àÒD  ÝD  çD„¡yÈ o;o;¦›Ä;¦›Ä;¦›Ä;¦›Ä;
×#<
×#<
×#<
×#<X94<B`e<B`e<B`e<�Âu<¼t“<¼t“<¼t“<
×£<
×£<h‘í<h‘í<h‘í<h‘í<h‘í<h‘í<h‘í<h‘í<h‘í<o=o=o=w¾=w¾=w¾=w¾=w¾=w¾=w¾=1,=1,=1,=ìQ8=ìQ8=ìQ8=¦›D=¦›D=¦›D=ôýT=ôýT=ôýT=ôýT=Õxi=Õxi=Õxi=Õxi=Õxi=�Âu=�Âu=�Âu=%�=%�=%�=L7‰=L7‰=L7‰=L7‰=ßO�=ßO�=�•=�•=�•=�•=P�—=-²�=-²�=-²�=w¾Ÿ=
×£=
×£=Å °=Å °=Å °=Å °=Å °=Å °=X9´=X9´=ƒÀ=ƒÀ=ƒÀ=ƒÀ=ƒÀ=ƒÀ=ƒÀÊ=ƒÀÊ=ƒÀÊ=ƒÀÊ=ƒÀÊ=ôýÔ=ôýÔ=ôýÔ=ôýÔ=ôýÔ=d;ß=d;ß=d;ß=d;ß=d;ß=Õxé=Õxé=Õxé=Õxé=Õxé=²�ï=²�ï=²�ï=�Âõ=�Âõ=�Âõ=%>%>%>%>%>%>“>“>“>+>+>+>'1>–C>–C>–C>V>V>V>˜n>˜n>˜n>˜n>áz>áz>ã¥>ã¥>ã¥>ã¥>ã¥>ã¥>ã¥>¬>w¾>w¾>w¾>
×#>
×#>
×#>
×#>Tã%>Tã%>Ãõ(>Ãõ(>Ãõ(>{.>{.>{.>{.>{.>-2>-2>-2>-2>ìQ8>ìQ8>ìQ8>ìQ8>ìQ8>ìQ8>5^:>5^:>î|?>î|?>î|?>î|?>î|?>7‰A>7‰A>�•C>�•C>¦›D>Ë¡E>9´H>9´H>9´H>ÍÌL>ÍÌL>ÍÌL>ÍÌL>òÒM>ªñR>ªñR>ªñR>ªñR>ªñR>ôýT>ôýT>¬Z>¬Z>¬Z>¬Z>¬Z>?5^>?5^>?5^>?5^>d;_>®Ga>®Ga>Zd>Zd>Zd>ú~j>ú~j>ú~j>ú~j>ú~j>ú~j>D‹l>D‹l>�—n>�—n>×£p>×£p>�Âu>�Âu>�Âu>�Âu>�Âu>ÙÎw>ÙÎw>mç{>mç{>mç{>mç{>¶ó}>¶ó}>ƒ€>ƒ€>ƒ€>%�>J‚>J‚>¦›„>¦›„>¦›„>¦›„>¦›„>+‡>+‡>+‡>+‡>+‡>L7‰>L7‰>L7‰>L7‰>q=Š>q=Š>ºIŒ>ºIŒ>ºIŒ>ºIŒ>òÒ�>òÒ�>òÒ�>VŽ>ÙŽ>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>áz”>áz”>áz”>áz”>+‡–>+‡–>+‡–>+‡–>P�—>P�—>b˜>š™™>š™™>š™™>¾Ÿš>¾Ÿš>ã¥›>ã¥›>ö(œ>¬œ>-²�>-²�>R¸ž>R¸ž>w¾Ÿ>w¾Ÿ>ÁÊ¡>ÁÊ¡>ÁÊ¡>ÁÊ¡>øS£>øS£>øS£>Tã¥>Tã¥>Tã¥>Tã¥>Tã¥>°r¨>°r¨>°r¨>°r¨>°r¨>Ãõ¨>Õx©>1¬>1¬>1¬>1¬>1¬>h‘­>h‘­>h‘­>{®> ¯> ¯>Å °>Å °>é&±>é&±>-²>-²>33³>33³>X9´>X9´>¢E¶>¢E¶>¢E¶>¢E¶>ÙÎ·>ÙÎ·>ÙÎ·>#Û¹>#Û¹>#Û¹>#Û¹>Zd»>Zd»>Zd»>¶ó½>¶ó½>¶ó½>¶ó½>¶ó½>Ûù¾>Ûù¾>ƒÀ>ƒÀ>ƒÀ>7‰Á>7‰Á>�•Ã>�•Ã>�•Ã>�•Ã>¦›Ä>¦›Ä>Ý$Æ>Ý$Æ>Ý$Æ>®Ç>®Ç>®Ç>9´È>9´È>ƒÀÊ>ƒÀÊ>ƒÀÊ>ƒÀÊ>¨ÆË>¨ÆË>ºIÌ>VÎ>VÎ>VÎ>VÎ>;ßÏ>;ßÏ>;ßÏ>NbÐ>`åÐ>…ëÑ>…ëÑ>¼tÓ>¼tÓ>¼tÓ>Ö>Ö>Ö>Ö>Ö>+‡Ö>=
×>u“Ø>u“Ø>u“Ø>¬Ú>¬Ú>¬Ú>ö(Ü>ö(Ü>ö(Ü>ö(Ü>/Ý>/Ý>d;ß>d;ß>d;ß>d;ß>w¾ß>‰Aà>ÁÊá>ÁÊá>ÁÊá>åÐâ>åÐâ>
×ã>
×ã>B`å>B`å>B`å>Tãå>‹lç>‹lç>‹lç>çûé>çûé>çûé>çûé>çûé>ë>ë>1ì>1ì>{î>{î>{î>{î> ï> ï>×£ð>×£ð>×£ð>-ò>-ò>-ò>F¶ó>F¶ó>F¶ó>X9ô>}?õ>}?õ>�Âõ>´Èö>´Èö>ÙÎ÷>ÙÎ÷>#Ûù>#Ûù>#Ûù>#Ûù>Zdû>Zdû>Zdû>mçû>¤pý>¤pý>¤pý>¶óý>Ûùþ>Ûùþ>‰A ?‰A ?‰A ?ƒ ?%?%?ÁÊ?ÁÊ?ÁÊ?ÓM?ÓM?\�?o?o?
×?
×?
×?Z?Z?Ë¡?Ë¡?Ë¡?Ë¡?Ë¡?Ý$?Ý$?yé?yé?yé?+?‹l?'1?'1?'1?9´?9´?Ãõ?L7	?^º	?^º	?ƒÀ
?ƒÀ
?ƒÀ
?ƒÀ
?–C?–C?¨Æ?¨Æ?ºI?ºI?ßO?ßO?ßO?ßO?òÒ?òÒ?V?V? ? ? ?)\?²�?Å ?Å ?Nb?×£?`å?ü©?ü©?ü©?-?-?33?33?33?33?¼t?F¶?Ï÷?j¼?j¼?j¼?�?�?�?¢E?¢E?¢E?+‡?=
?=
?ÇK?ÙÎ?ÙÎ?b?u“?u“?‡?‡?#Û?#Û?#Û?¬?¾Ÿ?¾Ÿ?Há?Zd?Zd?ã¥?mç?j?j?¤p?¤p?¤p?¤p??5??5??5?w¾?w¾?w¾?w¾?w¾?w¾?ƒ ?ƒ ?ƒ ?%!?%!?7‰!?7‰!?ÁÊ!?ÓM"?ÓM"?\�"?o#?o#?�•#?�•#?
×#?“$?Z$?¸%?¸%?¸%?Ë¡%?Ë¡%?Tã%?ð§&?ð§&?ð§&?yé&?‹l'?‹l'?®'?'1(?'1(?°r(?L7)?L7)?L7)?çû)?çû)?çû)?q=*?ú~*?ƒÀ*?+?–C+?¨Æ+?¨Æ+?1,?ºI,?D‹,?h‘-?h‘-?h‘-?h‘-?�—.?�—.?�—.?�—.?Ù.? /?)\/?Å 0?Å 0?Å 0?Nb0?×£0?`å0?é&1?sh1?˜n2?˜n2?˜n2?˜n2?ªñ2?ªñ2?333?F¶3?F¶3?Ï÷3?j¼4?j¼4?j¼4?}?5?}?5?�Â5?�Â5?6?¢E6?´È6?´È6?ÇK7?ÇK7?ÙÎ7?ÙÎ7?b8?u“8?u“8?X9?X9?X9?#Û9?#Û9?¬:?¾Ÿ:?¾Ÿ:?Há:?Ñ";?Zd;?ã¥;?mç;?ö(<?¬<?¬<?‘í<?¤p=?¤p=?-²=?¶ó=??5>?Év>?Ûù>?Ûù>?î|??î|??  @?  @?œÄ@?œÄ@?œÄ@?®GA?®GA?7‰A?JB?JB?åÐB?åÐB?åÐB?oC?øSC?�•C?
×C?“D?ZD?¦›D?/ÝD?B`E?B`E?Ë¡E?ffF?ffF?ffF?ð§F?yéF?+G?‹lG?®G?'1H?'1H?9´H?9´H?ÃõH?L7I?^ºI?^ºI?çûI?q=J?ƒÀJ?ƒÀJ?…K?…K?…K?¨ÆK?1L?ºIL?D‹L?ÍÌL?VM?ßOM?h‘M?{N?{N?VN?ÙN?ÙN? O?)\O?²�O?NbP?NbP?NbP?×£P?`åP?é&Q?shQ?ü©Q?-R?-R?!°R?!°R?33S?33S?¼tS?X9T?X9T?X9T?ôýT?ôýT?ôýT?}?U?�ÂU?�ÂU?V?´ÈV?´ÈV?´ÈV?ÇKW?ÇKW?P�W?bX?bX?ìQX?u“X?‡Y?‡Y?XY?š™Y?#ÛY?¬Z?5^Z?¾ŸZ?HáZ?Ñ"[?Zd[?mç[?mç[?j\?j\?/]?/]?/]?¤p]?-²]?¶ó]?Év^?Év^?R¸^?d;_?d;_?î|_?w¾_?  `?‰A`?ƒ`?œÄ`?%a?®Ga?7‰a?ÁÊa?Jb?\�b?\�b?åÐb?oc?øSc?�•c?“d?“d?¦›d?¦›d?/Ýd?¸e?B`e?Ë¡e?Tãe?Ý$f?fff?yéf?yéf?+g?‹lg?®g?žïg?'1h?°rh?9´h?Ãõh?L7i?Õxi?^ºi?çûi?ú~j?ú~j?ƒÀj?k?–Ck?…k?¨Æk?ºIl?ºIl?D‹l?ÍÌl?Vm?ßOm?h‘m?òÒm?{n?Vn?�—n?Ùn? o?)\o?²�o?;ßo?Å p?Nbp?×£p?`åp?é&q?shq?ü©q?…ëq?˜nr?˜nr?!°r?ªñr?33s?¼ts?F¶s?Ï÷s?X9t?ázt?j¼t?ôýt?}?u?�u?�Âu?v?¢Ev?+‡v?´Èv?=
w?ÇKw?P�w?ÙÎw?ìQx?ìQx?u“x?þÔx?‡y?Xy?#Ûy?#Ûy?¬z?5^z?¾Ÿz?Ház?Ñ"{?Zd{?ã¥{?ö(|?ö(|?j|?¬|?‘í|?/}?¤p}?-²}?¶ó}??5~?Év~?R¸~?Ûù~?d;?î|?w¾?  €?¤type§scatter¤name­Random Policy¡xÈ    A   A  @A  @A  @A  @A  PA  PA  PA  PA  `A  pA  pA  pA  €A  ˆA  ˆA  ˆA  �A  �A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A   A   A   A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  °A  °A  °A  ¸A  ¸A  ¸A  ÀA  ÀA  ÀA  ÈA  ÈA  ÈA  ÈA  ÐA  ÐA  ÐA  ÐA  ÐA  ØA  ØA  ØA  àA  àA  àA  èA  èA  èA  èA  ðA  ðA  øA  øA  øA  øA   B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B   B   B   B   B   B  $B  $B  $B  $B  $B  (B  (B  (B  (B  (B  ,B  ,B  ,B  0B  0B  0B  4B  4B  4B  4B  4B  4B  8B  8B  8B  <B  <B  <B  @B  DB  DB  DB  HB  HB  HB  LB  LB  LB  LB  PB  PB  TB  TB  TB  TB  TB  TB  TB  XB  \B  \B  \B  `B  `B  `B  `B  dB  dB  hB  hB  hB  lB  lB  lB  lB  lB  pB  pB  pB  pB  tB  tB  tB  tB  tB  tB  xB  xB  |B  |B  |B  |B  |B  ‚B  ‚B  „B  „B  †B  ˆB  ŠB  ŠB  ŠB  ŒB  ŒB  ŒB  ŒB  ŽB  �B  �B  �B  �B  �B  ’B  ’B  ”B  ”B  ”B  ”B  ”B  –B  –B  –B  –B  ˜B  šB  šB  œB  œB  œB  žB  žB  žB  žB  žB  žB   B   B  ¢B  ¢B  ¤B  ¤B  ¨B  ¨B  ¨B  ¨B  ¨B  ªB  ªB  ¬B  ¬B  ¬B  ¬B  ®B  ®B  °B  °B  °B  ²B  ´B  ´B  ¶B  ¶B  ¶B  ¶B  ¶B  ¸B  ¸B  ¸B  ¸B  ¸B  ºB  ºB  ºB  ºB  ¼B  ¼B  ¾B  ¾B  ¾B  ¾B  ÀB  ÀB  ÀB  ÂB  ÄB  ÆB  ÆB  ÆB  ÆB  ÆB  ÆB  ÆB  ÈB  ÈB  ÈB  ÈB  ÊB  ÊB  ÊB  ÊB  ÎB  ÎB  ÐB  ÒB  ÒB  ÒB  ÔB  ÔB  ÖB  ÖB  ØB  ÚB  ÜB  ÜB  ÞB  ÞB  àB  àB  âB  âB  âB  âB  äB  äB  äB  êB  êB  êB  êB  êB  ìB  ìB  ìB  ìB  ìB  îB  ðB  òB  òB  òB  òB  òB  ôB  ôB  ôB  öB  øB  øB  úB  úB  þB  þB   C   C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  	C  	C  
C  
C  
C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C   C   C   C   C  !C  !C  "C  "C  "C  "C  #C  $C  %C  %C  %C  'C  'C  (C  (C  )C  )C  )C  *C  +C  +C  +C  ,C  ,C  ,C  ,C  ,C  -C  -C  .C  .C  /C  /C  /C  /C  0C  0C  1C  1C  1C  2C  2C  2C  3C  3C  3C  4C  6C  6C  7C  8C  8C  9C  9C  :C  :C  :C  :C  ;C  ;C  ;C  <C  =C  =C  =C  >C  @C  @C  BC  BC  BC  CC  DC  DC  GC  GC  GC  HC  HC  IC  JC  JC  KC  KC  KC  LC  LC  NC  NC  NC  NC  NC  PC  PC  QC  QC  QC  RC  SC  TC  TC  TC  VC  VC  WC  XC  YC  YC  [C  [C  [C  [C  \C  \C  ]C  ]C  _C  _C  `C  `C  `C  `C  aC  aC  bC  bC  cC  cC  cC  dC  eC  gC  gC  hC  iC  jC  kC  kC  kC  nC  nC  oC  oC  oC  oC  pC  rC  tC  uC  uC  uC  vC  vC  vC  xC  xC  xC  {C  |C  |C  ~C €€C €€C  �C  ‚C  ‚C €‚C €‚C  ƒC  ƒC  ƒC €ƒC  „C  „C €„C  …C  …C €…C  †C €†C €†C €‡C €‡C €‡C €‡C  ˆC  ˆC  ˆC €ˆC €ˆC €ˆC €ˆC €ˆC €ˆC €‰C €‰C €‰C  ŠC  ŠC €ŠC €ŠC  ‹C €ŒC €ŒC  �C €�C €�C  ŽC  ŽC  �C €�C €�C €‘C €‘C €‘C  ’C  ’C €’C  “C  “C  “C  ”C €”C €”C  •C €•C €•C  –C  —C  —C  —C €—C €—C €—C €˜C €™C  šC  ›C  œC €œC €œC  �C €�C  žC €žC €žC €žC €žC  ŸC  ŸC  ŸC  ŸC €ŸC   C € C  ¢C  ¢C  ¢C €¢C €¤C  ¥C €¥C  ¦C €¦C €¦C €¦C €¦C  §C  §C €§C €¨C €¨C  ©C €©C €©C €©C €«C €«C  ¬C  ¬C €¬C  ­C €­C €­C  ®C  ®C €®C €®C €¯C  °C  °C  ±C  ±C  ±C €²C €²C  ³C €³C €³C  ´C  µC €µC  ·C €·C €¸C  ¹C  ¹C  ºC €ºC €ºC  »C  ½C  ¾C €¿C €ÀC €ÀC €ÁC €ÁC  ÂC  ÂC €ÂC €ÂC €ÂC  ÃC  ÃC  ÄC  ÅC  ÅC €ÅC €ÅC €ÅC  ÆC  ÇC €ÇC  ÈC €ÈC €ÉC  ÊC €ËC  ÌC  ÌC €ÌC €ÍC €ÍC €ÍC €ÎC €ÏC  ÐC €ÐC  ÑC  ÒC  ÒC  ÓC  ÓC €ÓC  ÔC €ÔC €ÔC  ÕC €ÕC  ØC  ØC €ØC €ØC €ØC €ÙC  ÚC  ÛC €ÛC €ÜC  ÝC €ÝC €áC €âC €âC  äC €æC €æC €çC  éC €ìC €íC €íC €íC  îC  ðC  ñC €ñC  òC €òC €òC  ôC  ôC €ôC €ôC €õC  ÷C  ÷C  ÷C €ùC €ùC €ùC  úC €úC €úC  ýC €þC €þC €þC  ÿC  ÿC @ D À D À D ÀD €D  D  D €D  D €D  D ÀD  D ÀD  D @	D  
D  
D À
D À
D  D  D  D @D @D ÀD €D €D  D €D €D  D @D ÀD  D  D ÀD ÀD  D ÀD ÀD ÀD €D €D @D €D ÀD  D ÀD ÀD €D €D @ D  !D @!D À!D  "D €#D À#D  %D  %D €%D @'D À'D @(D  )D À*D @+D  ,D À,D À.D À/D €0D  1D  1D À1D À5D À6D À8D @9D À:D À:D @<D €=D €>D  ?D €?D €@D À@D ÀAD  BD @CD €CD ÀDD @ED ÀED @FD €GD  HD  ID  JD  KD  ND ÀOD €SD €SD  TD  VD €VD ÀWD @YD À\D €_D À`D ÀaD €bD €eD  gD @gD €hD €lD ÀoD  qD @qD ÀtD ÀuD  vD @yD @yD  {D @|D  €D à€D €ƒD €ƒD €…D @ˆD  ‰D À‹D  �D  �D  ŽD  �D  �D  ‘D @”D à•D  œD  œD  ¢D  ¬D À°D @´D À¾D €ÉD  ÍD €äD ÀíD àùDÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/47097f3aa74a6daf„¦layout„¥xaxis‚¤type£log¥title�¤text´Steps to Finish Race¨template‚¦layoutÞ ©coloraxis�¨colorbar‚¥ticks ¬outlinewidthÊ    ¥xaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white©hovermode§closest­paper_bgcolor¥white£geo†©showlakesÃ¨showlandÃ©landcolor§#E5ECF6§bgcolor¥white¬subunitcolor¥white©lakecolor¥whiteªcolorscaleƒªsequentialš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921©diverging›’Ê    §#8e0152’Ê=ÌÌÍ§#c51b7d’Ê>LÌÍ§#de77ae’Ê>™™š§#f1b6da’Ê>ÌÌÍ§#fde0ef’Ê?   §#f7f7f7’Ê?™š§#e6f5d0’Ê?333§#b8e186’Ê?LÌÍ§#7fbc41’Ê?fff§#4d9221’Ê?€  §#276419¯sequentialminusš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921¥yaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white­shapedefaults�¤line�¥color§#2a3f5fªhoverlabel�¥align¤left¦mapbox�¥style¥light¥polarƒ«angularaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6ªradialaxisƒ©gridcolor¥white¥ticks ©linecolor¥white¯autotypenumbers¦strict¤font�¥color§#2a3f5f§ternary„¥aaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6¥caxisƒ©gridcolor¥white¥ticks ©linecolor¥white¥baxisƒ©gridcolor¥white¥ticks ©linecolor¥white²annotationdefaultsƒ©arrowheadÊ    ªarrowwidthÊ?€  ªarrowcolor§#2a3f5f¬plot_bgcolor§#E5ECF6¥title�¡xÊ=LÌÍ¥sceneƒ¥xaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥zaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥yaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¨colorwayš§#636efa§#EF553B§#00cc96§#ab63fa§#FFA15A§#19d3f3§#FF6692§#B6E880§#FF97FF§#FECB52¤dataÞ ®scatterpolargl‘‚¤type®scatterpolargl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦carpet‘ƒ¥baxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¤type¦carpet¥aaxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¬scatterpolar‘‚¤type¬scatterpolar¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©parcoords‘‚¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©parcoords§scatter‘‚¤type§scatter¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ²histogram2dcontour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type²histogram2dcontourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921§contour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§contourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattercarpet‘‚¤type­scattercarpet¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦mesh3d‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type¦mesh3d§surface‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§surfaceªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattermapbox‘‚¤type­scattermapbox¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ªscattergeo‘‚¤typeªscattergeo¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©histogram‘‚¤type©histogram¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    £pie‘‚¤type£pieªautomarginÃªchoropleth‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤typeªchoropleth©heatmapgl‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©heatmapglªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921£bar‘„¤type£bar§error_y�¥color§#2a3f5f§error_x�¥color§#2a3f5f¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   §heatmap‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§heatmapªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­contourcarpet‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type­contourcarpet¥table‘ƒ¤type¥table¦header‚¤line�¥color¥white¤fill�¥color§#C8D4E3¥cells‚¤line�¥color¥white¤fill�¥color§#EBF0F8©scatter3d‘ƒ¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©scatter3d¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¨barpolar‘‚¤type¨barpolar¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   ©scattergl‘‚¤type©scattergl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    «histogram2d‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type«histogram2dªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921®scatterternary‘‚¤type®scatterternary¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦margin„¡lÊBH  ¡bÊBH  ¡rÊBH  ¡tÊBp  ¥yaxis�¥title�¤text³Percent of Episodes¦config…¨showLinkÂ¨editableÂªresponsiveÃªstaticPlotÂªscrollZoomÃ¦frames�¤data’„¡yÈ ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=ìQ8=“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“>“> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> /> />)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>)\�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>/�>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>X9´>7‰Á>7‰Á>7‰Á>7‰Á>7‰Á>7‰Á>7‰Á>7‰Á>7‰Á>7‰Á>7‰Á>7‰Á>7‰Á>7‰Á>7‰Á>7‰Á>7‰Á>7‰Á>7‰Á>7‰Á>7‰Á>7‰Á>7‰Á>7‰Á>7‰Á>7‰Á>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>+‡Ö>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>{î>o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?o?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?33?+‡?+‡?+‡?+‡?+‡?+‡?+‡?+‡?+‡?+‡?+‡?+‡?+‡?ö(?ö(?ö(?ö(?ö(?ö(?ö(?ö(?ö(?ö(?ö(?ö(?ö(?ö(?ö(?ö(?ö(?ö(?ö(?ö(?ö(?ö(?7‰!?7‰!?7‰!?7‰!?7‰!?7‰!?7‰!?7‰!?7‰!?7‰!?7‰!?7‰!?7‰!?7‰!?7‰!?7‰!?7‰!?7‰!?7‰!?7‰!?7‰!?Z$?Z$?Z$?Z$?Z$?Z$?Z$?Z$?Z$?Z$?Z$?–C+?–C+?–C+?–C+?–C+?–C+?–C+?–C+?–C+?–C+?–C+?–C+?–C+?–C+?–C+?–C+?–C+?–C+?–C+?–C+?–C+?–C+?–C+?–C+?–C+?–C+?–C+?Å 0?Å 0?Å 0?Å 0?Å 0?Å 0?Å 0?Å 0?Å 0?Å 0?Å 0?Å 0?Å 0?Å 0?Å 0?Å 0?Å 0?Å 0?Å 0?=
7?=
7?=
7?=
7?=
7?=
7?=
7?=
7?=
7?=
7?=
7?=
7?=
7?=
7?=
7?=
7?=
7?=
7?=
7?=
7?=
7?=
7?=
7?=
7?=
7?=
7?=
7?Zd;?Zd;?Zd;?Zd;?Zd;?Zd;?Zd;?Zd;?Zd;?Zd;?Zd;?Zd;?Zd;?Zd;?Zd;?Zd;?Zd;?®GA?®GA?®GA?®GA?®GA?®GA?®GA?®GA?®GA?®GA?®GA?®GA?®GA?®GA?®GA?®GA?®GA?®GA?®GA?®GA?®GA?®GA?®GA?ZD?ZD?ZD?ZD?ZD?ZD?ZD?ZD?ZD?ZD?ZD?ZD?^ºI?^ºI?^ºI?^ºI?^ºI?^ºI?^ºI?^ºI?^ºI?^ºI?^ºI?^ºI?^ºI?^ºI?^ºI?^ºI?^ºI?^ºI?^ºI?^ºI?^ºI?ºIL?ºIL?ºIL?ºIL?ºIL?ºIL?ºIL?ºIL?ºIL?ºIL?²�O?²�O?²�O?²�O?²�O?²�O?²�O?²�O?²�O?²�O?²�O?²�O?²�O?ªñR?ªñR?ªñR?ªñR?ªñR?ªñR?ªñR?ªñR?ªñR?ªñR?ªñR?ªñR?ªñR?ázT?ázT?ázT?ázT?ázT?ázT?=
W?=
W?=
W?=
W?=
W?=
W?=
W?=
W?=
W?=
W?þÔX?þÔX?þÔX?þÔX?þÔX?þÔX?þÔX?5^Z?5^Z?5^Z?5^Z?5^Z?5^Z?ö(\?ö(\?ö(\?ö(\?ö(\?ö(\?ö(\?R¸^?R¸^?R¸^?R¸^?R¸^?R¸^?R¸^?R¸^?R¸^?R¸^?‰A`?‰A`?‰A`?‰A`?‰A`?‰A`?ÁÊa?ÁÊa?ÁÊa?ÁÊa?ÁÊa?ÁÊa?øSc?øSc?øSc?øSc?øSc?øSc?/Ýd?/Ýd?/Ýd?/Ýd?/Ýd?/Ýd?+g?+g?+g?+g?+g?+g?+g?+g?+g?9´h?9´h?9´h?9´h?9´h?9´h?^ºi?^ºi?^ºi?^ºi?ƒÀj?ƒÀj?ƒÀj?ƒÀj?¨Æk?¨Æk?¨Æk?¨Æk?ºIl?ºIl?òÒm?òÒm?òÒm?òÒm?òÒm?òÒm?)\o?)\o?)\o?)\o?)\o?)\o?Nbp?Nbp?Nbp?Nbp?shq?shq?shq?shq?˜nr?˜nr?˜nr?˜nr?33s?33s?33s?F¶s?F¶s?ázt?ázt?ázt?j¼t?}?u?}?u?�Âu?�Âu?¢Ev?¢Ev?=
w?=
w?=
w?P�w?P�w?ìQx?ìQx?ìQx?‡y?‡y?‡y?Xy?#Ûy?#Ûy?¾Ÿz?¾Ÿz?¾Ÿz?Ház?Zd{?Zd{?ã¥{?mç{?ö(|?j|?¬|?‘í|?/}?-²}?-²}?¶ó}?Év~?Év~?R¸~?Ûù~?î|?î|?w¾?  €?¤type§scatter¤name³Monte Carlo Ïµ-Soft¡xÈ   A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  0A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  èA  èA  èA  èA  èA  èA  èA  èA  èA  èA  èA  èA  èA  èA  èA  èA  èA  èA  èA  èA  èA  èA  èA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA   B   B   B   B   B   B   B   B   B   B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B   B   B   B   B   B   B   B   B   B   B  $B  $B  $B  $B  $B  $B  (B  (B  (B  (B  (B  (B  ,B  ,B  ,B  ,B  ,B  ,B  0B  0B  0B  0B  0B  0B  4B  4B  4B  4B  4B  4B  4B  4B  4B  8B  8B  8B  8B  8B  8B  <B  <B  <B  <B  @B  @B  @B  @B  DB  DB  DB  DB  HB  HB  LB  LB  LB  LB  LB  LB  PB  PB  PB  PB  PB  PB  TB  TB  TB  TB  XB  XB  XB  XB  \B  \B  \B  \B  `B  `B  `B  dB  dB  hB  hB  hB  lB  pB  pB  tB  tB  xB  xB  |B  |B  |B  €B  €B  ‚B  ‚B  ‚B  „B  „B  „B  ŽB  �B  �B  ’B  ’B  ’B  –B  ˜B  ˜B  šB  žB  ¢B  ¦B  ¨B  ªB  °B  ²B  ²B  ´B  ºB  ºB  ¼B  ¾B  ÀB  ÀB  ÖB  âB„¡yÈ o;o;oƒ;oƒ;
×#<
×#<
×#<
×#<
×#<
×#<oƒ<oƒ<oƒ<oƒ<oƒ<oƒ<¼t“<¼t“<¦›Ä<¦›Ä<¦›Ä<¦›Ä<¦›Ä<¦›Ä<ôýÔ<ôýÔ<h‘í<h‘í<h‘í<+=+=+=+=w¾=w¾=w¾=w¾=w¾=w¾=
×#=žï'=Å 0=Å 0=X94=¦›D=¦›D=¦›D=¦›D=®Ga=®Ga=®Ga=®Ga=®Ga=®Ga=®Ga=h‘m=h‘m=h‘m=¶ó}=¶ó}=¶ó}=¶ó}=L7‰=L7‰=L7‰=L7‰=L7‰=sh‘=sh‘=sh‘=sh‘=¼t“=š™™=š™™=š™™=ÁÊ¡=ÁÊ¡=ÁÊ¡=ÁÊ¡=çû©=çû©=çû©=çû©=Å °=Å °=Å °=X9´=X9´=j¼=j¼=j¼=j¼=ÙÎ=ÙÎ=ÙÎ=ÙÎ=ÙÎ=ÙÎ=ÙÎ=ÙÎ=ÙÎ=`åÐ=ôýÔ=ôýÔ=Ñ"Û=Ñ"Û=Ñ"Û=‹lç=‹lç=‹lç=‹lç=‹lç=‹lç=…ë=…ë=²�ï=²�ï=¶óý=¶óý=¶óý=¶óý=¶óý=¶óý=¶óý=J>J>J>¸>¸>¸>+>+>L7	>L7	>ßO>ßO>ßO>ßO>˜n>˜n>˜n>˜n>˜n>áz>áz>u“>u“>u“>u“>¾Ÿ>¾Ÿ>-²>-²>-²>ÁÊ!>ÁÊ!>ÁÊ!>ÁÊ!>Ãõ(>Ãõ(>Ãõ(>Ãõ(>Ãõ(>Ãõ(>Ãõ(>V->V->V->V->{.>-2>-2>-2>-2>X94>X94>j<>j<>j<>j<>j<>j<>j<>j<>î|?>î|?>î|?>\�B>\�B>\�B>Ë¡E>Ë¡E>Ë¡E>^ºI>^ºI>^ºI>^ºI>ÍÌL>ÍÌL>ÍÌL>òÒM>`åP>`åP>`åP>ªñR>ªñR>V>V>V>bX>bX>Ñ"[>Ñ"[>Ñ"[>/]>/]>®Ga>®Ga>®Ga>®Ga>øSc>øSc>fff>fff>fff>…k>…k>…k>…k>…k>×£p>×£p>×£p>×£p>×£p>!°r>!°r>�Âu>�Âu>�Âu>ÙÎw>ÙÎw>þÔx>‘í|>‘í|>‘í|>‘í|>Ûù~>Ûù~>ƒ€>ƒ€>oƒ>oƒ>oƒ>oƒ>oƒ>�•ƒ>+‡>+‡>+‡>+‡>+‡>+‡>+‡>'1ˆ>'1ˆ>^º‰>^º‰>^º‰>ƒÀŠ>ƒÀŠ>ßO�>ßO�>ßO�>ßO�>ßO�>)\�>)\�>)\�>)\�>Nb�>Nb�>…ë‘>…ë‘>…ë‘>¼t“>¼t“>¼t“>áz”>áz”>–>–>–>b˜>b˜>b˜>b˜>¬š>¬š>¬š>¬š>¬œ>¬œ>¬œ>¬œ>¬œ>d;Ÿ>d;Ÿ>d;Ÿ>d;Ÿ>d;Ÿ>œÄ >œÄ >œÄ >ÁÊ¡>ÁÊ¡>
×£>
×£>
×£>
×£>Z¤>/Ý¤>ff¦>ff¦>ff¦>‹l§>‹l§>žï§>°r¨>Ãõ¨>ú~ª>ú~ª>ú~ª>1¬>1¬>1¬>V­>V­>²�¯>²�¯>²�¯>²�¯>²�¯>ü©±>ü©±>ü©±>ü©±>!°²>!°²>33³>j¼´>j¼´>j¼´>}?µ>ÇK·>ÇK·>ÇK·>ÇK·>þÔ¸>þÔ¸>þÔ¸>X¹>5^º>5^º>Zd»>Zd»>¤p½>¤p½>¤p½>¤p½>Év¾>Év¾>  À>  À>  À>“Ä>“Ä>“Ä>“Ä>“Ä>“Ä>“Ä>“Ä>Ë¡Å>Ë¡Å>Ë¡Å>+Ç>+Ç>+Ç>'1È>'1È>L7É>L7É>^ºÉ>–CË>–CË>–CË>¨ÆË>ºIÌ>ßOÍ>ßOÍ>VÎ>VÎ>ÙÎ>;ßÏ>;ßÏ>`åÐ>`åÐ>shÑ>˜nÒ>˜nÒ>ªñÒ>Ï÷Ó>Ï÷Ó>�Õ>�Õ>�Õ>+‡Ö>+‡Ö>P�×>P�×>š™Ù>š™Ù>š™Ù>š™Ù>¾ŸÚ>¾ŸÚ>ö(Ü>ö(Ü>ö(Ü>¬Ü>-²Ý>-²Ý>R¸Þ>R¸Þ>‰Aà>‰Aà>‰Aà>®Gá>®Gá>ÁÊá>Zä>Zä>Zä>Zä>Zä>yéæ>yéæ>yéæ>yéæ>yéæ>žïç>žïç>Ãõè>Ãõè>Õxé>1ì>1ì>1ì>1ì>1ì>Ví>Ví>h‘í>{î>�—î>²�ï>²�ï>ü©ñ>ü©ñ>ü©ñ>ü©ñ>-ò>X9ô>X9ô>X9ô>X9ô>�Âõ>�Âõ>�Âõ>¢Eö>´Èö>ìQø>ìQø>ìQø>#Ûù>#Ûù>#Ûù>5^ú>Háú>mçû>mçû>jü>Évþ>Évþ>Évþ>Évþ>   ?   ?   ?‰A ?7‰?7‰?7‰?7‰?7‰?ÓM?ÓM?ÓM?åÐ?åÐ?�•?�•?�•?/Ý?/Ý?/Ý?/Ý?/Ý?¸?Ë¡?Ë¡?Tã?Ý$?yé?yé?yé?‹l?‹l?®?žï?'1?Ãõ?Ãõ?Ãõ?L7	?ƒÀ
?ƒÀ
?ƒÀ
?ƒÀ
?ƒÀ
?ƒÀ
?–C?–C?…?D‹?D‹?D‹?D‹?ÍÌ?V?òÒ?òÒ?òÒ?�—?�—?�—?Ù?²�?²�?²�?;ß?×£?×£?×£?`å?ü©?ü©?ü©?-?-?˜n?¼t?¼t?¼t?¼t?Ï÷?Ï÷?X9?áz?�?�?�?�?�Â?´È?´È?´È?´È?ÙÎ?ÙÎ?ÙÎ?ÙÎ?ìQ?ìQ?þÔ?þÔ?X?X?#Û?#Û?¬?5^?Há?Há?Ñ"?Zd?ã¥?mç?j?j?‘í?‘í?¤p?¤p?¶ó?¶ó?Év?Év?d;?d;?d;?î|?w¾?   ?‰A ?ƒ ?œÄ ?%!?ÁÊ!?ÁÊ!?ÁÊ!?J"?åÐ"?åÐ"?åÐ"?
×#?
×#?
×#?
×#?“$?Z$?/Ý$?/Ý$?Ý$&?Ý$&?Ý$&?Ý$&?Ý$&?ff&?yé&?yé&?+'?‹l'?žï'?žï'?°r(?°r(?Ãõ(?Ãõ(?L7)?Õx)?q=*?q=*?q=*?ú~*?+?+?¨Æ+?¨Æ+?¨Æ+?1,?ºI,?ßO-?ßO-?ßO-?ßO-?V.?V.?V.?V.?Ù.?Ù.?)\/?)\/?²�/?;ß/?Å 0?Nb0?`å0?`å0?sh1?sh1?ü©1?-2?-2?!°2?!°2?ªñ2?333?¼t3?Ï÷3?Ï÷3?áz4?áz4?j¼4?ôý4?}?5?�5?6?6?¢E6?ÇK7?ÇK7?ÇK7?ÇK7?P�7?b8?b8?ìQ8?u“8?þÔ8?‡9?#Û9?#Û9?#Û9?¬:?5^:?¾Ÿ:?Há:?Ñ";?ã¥;?ã¥;?mç;?ö(<?j<?‘í<?‘í<?/=?¤p=?¶ó=?¶ó=??5>?Év>?R¸>?Ûù>?d;??î|??w¾??  @?ƒ@?ƒ@?%A?%A?®GA?7‰A?ÁÊA?JB?\�B?\�B?åÐB?øSC?øSC?“D?“D?“D?¦›D?¦›D?¸E?¸E?B`E?Ë¡E?TãE?Ý$F?ffF?yéF?yéF?+G?žïG?žïG?žïG?'1H?°rH?9´H?ÃõH?ÕxI?ÕxI?^ºI?çûI?q=J?ú~J?ƒÀJ?K?–CK?1L?1L?1L?D‹L?D‹L?ÍÌL?h‘M?h‘M?h‘M?òÒM?VN?VN?ÙN?ÙN?)\O?)\O?²�O?;ßO?NbP?NbP?é&Q?é&Q?é&Q?shQ?…ëQ?…ëQ?˜nR?˜nR?!°R?ªñR?33S?¼tS?Ï÷S?Ï÷S?X9T?ázT?j¼T?}?U?}?U?�U?�ÂU?V?¢EV?=
W?=
W?=
W?ÇKW?P�W?bX?bX?þÔX?þÔX?þÔX?‡Y?XY?š™Y?#ÛY?¬Z?¾ŸZ?¾ŸZ?HáZ?Ñ"[?Zd[?ã¥[?mç[?j\?j\?¬\?‘í\?/]?¤p]?-²]?¶ó]??5^?Év^?R¸^?Ûù^?d;_?w¾_?w¾_?  `?ƒ`?ƒ`?œÄ`?%a?®Ga?ÁÊa?ÁÊa?Jb?ÓMb?\�b?åÐb?øSc?øSc?�•c?“d?“d?Zd?¦›d?¸e?¸e?Ë¡e?Ë¡e?Tãe?Ý$f?fff?ð§f?yéf?‹lg?‹lg?®g?'1h?'1h?9´h?9´h?Ãõh?L7i?Õxi?^ºi?çûi?ú~j?ú~j?ƒÀj?k?–Ck?…k?¨Æk?1l?ºIl?D‹l?ÍÌl?Vm?ßOm?h‘m?òÒm?{n?Vn?�—n?Ùn? o?)\o?²�o?;ßo?Å p?Nbp?×£p?`åp?é&q?shq?ü©q?-r?-r?˜nr?!°r?ªñr?33s?¼ts?F¶s?Ï÷s?X9t?ázt?j¼t?ôýt?}?u?�u?�Âu?v?¢Ev?+‡v?´Èv?ÇKw?ÇKw?P�w?ÙÎw?bx?ìQx?u“x?þÔx?Xy?Xy?š™y?#Ûy?¬z?5^z?¾Ÿz?Ház?Ñ"{?Zd{?ã¥{?mç{?ö(|?j|?¬|?‘í|?/}?¤p}?-²}?¶ó}??5~?Év~?R¸~?Ûù~?d;?î|?w¾?  €?¤type§scatter¤name­Random Policy¡xÈ   @A  @A  PA  PA  `A  `A  `A  `A  `A  `A  pA  pA  pA  pA  pA  pA  €A  €A  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  �A  �A  ˜A  ˜A  ˜A   A   A   A   A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  °A  ¸A  ÀA  ÀA  ÈA  ÐA  ÐA  ÐA  ÐA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  àA  àA  àA  èA  èA  èA  èA  ðA  ðA  ðA  ðA  ðA  øA  øA  øA  øA   B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B   B  $B  $B  (B  (B  (B  ,B  ,B  ,B  ,B  ,B  ,B  0B  0B  4B  4B  8B  8B  8B  8B  8B  8B  8B  <B  <B  <B  @B  @B  @B  DB  DB  HB  HB  LB  LB  LB  LB  PB  PB  PB  PB  PB  TB  TB  XB  XB  XB  XB  \B  \B  `B  `B  `B  dB  dB  dB  dB  hB  hB  hB  hB  hB  hB  hB  lB  lB  lB  lB  pB  tB  tB  tB  tB  xB  xB  |B  |B  |B  |B  |B  |B  |B  |B  €B  €B  €B  ‚B  ‚B  ‚B  „B  „B  „B  †B  †B  †B  †B  ˆB  ˆB  ˆB  ŠB  ŒB  ŒB  ŒB  ŽB  ŽB  �B  �B  �B  ”B  ”B  –B  –B  –B  ˜B  ˜B  šB  šB  šB  šB  œB  œB  žB  žB  žB   B   B   B   B   B  ¢B  ¢B  ¢B  ¢B  ¢B  ¤B  ¤B  ¦B  ¦B  ¦B  ¨B  ¨B  ªB  ¬B  ¬B  ¬B  ¬B  ®B  ®B  °B  °B  ²B  ²B  ²B  ²B  ²B  ´B  ¶B  ¶B  ¶B  ¶B  ¶B  ¶B  ¶B  ¸B  ¸B  ºB  ºB  ºB  ¼B  ¼B  ¾B  ¾B  ¾B  ¾B  ¾B  ÀB  ÀB  ÀB  ÀB  ÂB  ÂB  ÆB  ÆB  ÆB  ÈB  ÈB  ÈB  ÊB  ÊB  ÌB  ÌB  ÌB  ÎB  ÎB  ÎB  ÎB  ÐB  ÐB  ÐB  ÐB  ÒB  ÒB  ÒB  ÒB  ÒB  ÔB  ÔB  ÔB  ÔB  ÔB  ÖB  ÖB  ÖB  ØB  ØB  ÚB  ÚB  ÚB  ÚB  ÜB  ÞB  àB  àB  àB  âB  âB  äB  èB  êB  ìB  ìB  ìB  ðB  ðB  ðB  òB  òB  ôB  ôB  ôB  ôB  ôB  öB  öB  öB  öB  øB  øB  úB  üB  üB  üB  þB   C   C   C   C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  	C  	C  	C  
C  
C  
C  
C  
C  
C  
C  
C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C   C   C  !C  !C  !C  !C  "C  "C  #C  #C  #C  $C  %C  %C  (C  (C  )C  )C  )C  +C  +C  .C  /C  /C  /C  /C  /C  0C  0C  0C  0C  0C  1C  1C  2C  2C  4C  5C  5C  5C  5C  5C  7C  7C  8C  9C  :C  ;C  ;C  <C  <C  <C  <C  =C  >C  >C  >C  >C  ?C  ?C  ?C  @C  AC  BC  BC  BC  CC  CC  CC  DC  EC  GC  GC  HC  IC  IC  IC  IC  JC  JC  JC  KC  MC  MC  MC  MC  MC  OC  OC  OC  PC  PC  QC  QC  QC  RC  RC  RC  RC  RC  SC  TC  TC  VC  XC  ZC  ZC  ZC  [C  [C  \C  ]C  ^C  _C  _C  _C  `C  aC  aC  aC  aC  aC  aC  cC  cC  dC  eC  eC  eC  eC  gC  hC  iC  iC  iC  jC  jC  jC  kC  lC  lC  lC  nC  oC  oC  oC  pC  qC  qC  qC  sC  sC  tC  wC  wC  wC  wC  {C  {C  |C  ~C  C  C  C  C €€C  �C  �C  �C  �C €�C €�C €�C €�C €‚C €‚C  ƒC  ƒC  „C  „C  …C  …C  †C €†C €ˆC €ˆC  ŠC €ŠC €‹C  ŒC €ŒC €ŒC  �C  �C €�C €�C  ŽC  ŽC  �C  �C €�C €�C €�C  �C €�C  ‘C €‘C  “C €“C  ”C  •C  •C  •C €•C  –C  –C  –C €–C €–C €–C €–C  —C €—C  ˜C  ˜C €˜C €˜C €˜C €˜C €˜C  ™C €™C €™C  šC €šC  œC  œC €œC €œC  �C  �C €žC   C € C € C € C  ¡C €¢C €¢C  £C  £C  £C  ¤C  ¥C €¥C €¥C €¥C €¥C  ¦C  ¦C  ¦C  ¦C €¦C €¦C  §C  §C €§C €©C  ªC €ªC  «C  «C €«C €«C  ¬C €¬C €¬C  ­C  ­C €­C  ®C  ¯C €¯C €¯C  °C  °C €°C  ±C  ²C €²C €³C €³C €´C  µC  µC  µC  µC €µC €¶C €¶C  ·C €¸C  ¹C €¹C  ºC  ºC  ºC  »C €»C  ¼C €¼C  ½C €½C €½C  ¾C €¾C  ¿C €¿C €¿C  ÂC €ÂC  ÃC  ÃC  ÄC  ÅC €ÆC  ÇC  ÈC €ÈC  ÊC €ËC  ÍC  ÍC €ÍC €ÍC  ÎC €ÎC  ÏC €ÏC  ÐC  ÐC €ÒC  ÓC  ÓC €ÓC €ÓC €ÓC  ÔC  ÔC €ÔC €ÔC  ×C €×C  ØC  ÙC  ÚC €ÛC €ÛC  ÜC €ÝC €ÝC €ÝC  ÞC €ÞC €ßC  àC €àC €àC  áC  ãC €ãC €äC  åC €åC €æC  çC  çC  çC €çC €çC  éC €éC €éC €éC  êC €ëC €ëC €ìC €ìC €íC €íC €îC  ïC €ïC €ïC €ñC €ñC €ñC  óC  ôC  ôC  öC  öC €öC  ÷C €÷C  ùC €ùC €ùC €úC  ûC €ûC €üC €üC  ýC €ýC  ÿC €ÿC @ D @ D @ D € D @D  D  D @D @D @D ÀD  D €D ÀD  D @D @D €D €D ÀD  	D @	D €
D €
D ÀD @D  D @D  D €D ÀD ÀD  D @D €D €D €D €D  D  D €D  D ÀD €D €D  D @D ÀD €D @D @D €D  "D  "D  #D  $D @$D @$D €$D €$D À&D @'D  (D €(D  *D @*D @*D €*D  +D  +D @+D @+D @,D À,D €-D  .D À.D  /D  /D  0D  1D À2D @4D À4D  6D À6D  7D À7D @9D  ;D €;D À;D @<D €=D À>D €?D  @D @BD €DD  ED ÀED €GD €HD ÀID €LD  MD €MD ÀMD ÀMD @ND  PD  TD @VD  WD @YD À]D €^D  `D ÀaD  bD €bD €eD @gD  hD @hD  jD €jD ÀjD ÀjD @mD €mD  nD @qD @rD @uD ÀvD ÀvD  yD `�D  ‚D `„D `†D  †D @‡D €‡D  ˆD `‰D €ŒD  �D à�D  �D  •D @œD  �D  žD  ŸD  ¤D  ®D À²D à¼D `ÄD €ØD ÀÞDÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/e01572e8e76890cd„¦layout„¥xaxis‚¤type£log¥title�¤text´Steps to Finish Race¨template‚¦layoutÞ ©coloraxis�¨colorbar‚¥ticks ¬outlinewidthÊ    ¥xaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white©hovermode§closest­paper_bgcolor¥white£geo†©showlakesÃ¨showlandÃ©landcolor§#E5ECF6§bgcolor¥white¬subunitcolor¥white©lakecolor¥whiteªcolorscaleƒªsequentialš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921©diverging›’Ê    §#8e0152’Ê=ÌÌÍ§#c51b7d’Ê>LÌÍ§#de77ae’Ê>™™š§#f1b6da’Ê>ÌÌÍ§#fde0ef’Ê?   §#f7f7f7’Ê?™š§#e6f5d0’Ê?333§#b8e186’Ê?LÌÍ§#7fbc41’Ê?fff§#4d9221’Ê?€  §#276419¯sequentialminusš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921¥yaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white­shapedefaults�¤line�¥color§#2a3f5fªhoverlabel�¥align¤left¦mapbox�¥style¥light¥polarƒ«angularaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6ªradialaxisƒ©gridcolor¥white¥ticks ©linecolor¥white¯autotypenumbers¦strict¤font�¥color§#2a3f5f§ternary„¥aaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6¥caxisƒ©gridcolor¥white¥ticks ©linecolor¥white¥baxisƒ©gridcolor¥white¥ticks ©linecolor¥white²annotationdefaultsƒ©arrowheadÊ    ªarrowwidthÊ?€  ªarrowcolor§#2a3f5f¬plot_bgcolor§#E5ECF6¥title�¡xÊ=LÌÍ¥sceneƒ¥xaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥zaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥yaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¨colorwayš§#636efa§#EF553B§#00cc96§#ab63fa§#FFA15A§#19d3f3§#FF6692§#B6E880§#FF97FF§#FECB52¤dataÞ ®scatterpolargl‘‚¤type®scatterpolargl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦carpet‘ƒ¥baxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¤type¦carpet¥aaxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¬scatterpolar‘‚¤type¬scatterpolar¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©parcoords‘‚¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©parcoords§scatter‘‚¤type§scatter¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ²histogram2dcontour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type²histogram2dcontourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921§contour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§contourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattercarpet‘‚¤type­scattercarpet¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦mesh3d‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type¦mesh3d§surface‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§surfaceªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattermapbox‘‚¤type­scattermapbox¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ªscattergeo‘‚¤typeªscattergeo¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©histogram‘‚¤type©histogram¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    £pie‘‚¤type£pieªautomarginÃªchoropleth‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤typeªchoropleth©heatmapgl‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©heatmapglªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921£bar‘„¤type£bar§error_y�¥color§#2a3f5f§error_x�¥color§#2a3f5f¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   §heatmap‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§heatmapªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­contourcarpet‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type­contourcarpet¥table‘ƒ¤type¥table¦header‚¤line�¥color¥white¤fill�¥color§#C8D4E3¥cells‚¤line�¥color¥white¤fill�¥color§#EBF0F8©scatter3d‘ƒ¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©scatter3d¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¨barpolar‘‚¤type¨barpolar¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   ©scattergl‘‚¤type©scattergl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    «histogram2d‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type«histogram2dªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921®scatterternary‘‚¤type®scatterternary¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦margin„¡lÊBH  ¡bÊBH  ¡rÊBH  ¡tÊBp  ¥yaxis�¥title�¤text³Percent of Episodes¦config…¨showLinkÂ¨editableÂªresponsiveÃªstaticPlotÂªscrollZoomÃ¦frames�¤data’„¡yÈ �•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=�•=òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>òÒM>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>  €>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>˜n’>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>çû©>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>\�Â>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>…ëÑ>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>žïç>!°ò>!°ò>!°ò>!°ò>!°ò>!°ò>!°ò>!°ò>!°ò>!°ò>!°ò>!°ò>!°ò>!°ò>!°ò>!°ò>!°ò>!°ò>!°ò>!°ò>!°ò>œÄ ?œÄ ?œÄ ?œÄ ?œÄ ?œÄ ?œÄ ?œÄ ?œÄ ?œÄ ?œÄ ?œÄ ?œÄ ?œÄ ?œÄ ?œÄ ?œÄ ?œÄ ?œÄ ?œÄ ?œÄ ?œÄ ?œÄ ?œÄ ?œÄ ?œÄ ?œÄ ?œÄ ?œÄ ?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?ºI?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?¢E?j?j?j?j?j?j?j?j?j?j?j?j?j?j?j?j?j?j?j?j?j?j?j?j?%!?%!?%!?%!?%!?%!?%!?%!?%!?%!?%!?%!?%!?%!?%!?%!?%!?%!?Tã%?Tã%?Tã%?Tã%?Tã%?Tã%?Tã%?Tã%?Tã%?Tã%?Tã%?Tã%?Tã%?Tã%?Tã%?Tã%?Tã%?Tã%?Tã%?…+?…+?…+?…+?…+?…+?…+?…+?…+?…+?…+?…+?…+?…+?…+?…+?…+?…+?…+?…+?…+?…+?ü©1?ü©1?ü©1?ü©1?ü©1?ü©1?ü©1?ü©1?ü©1?ü©1?ü©1?ü©1?ü©1?ü©1?ü©1?ü©1?ü©1?ü©1?ü©1?ü©1?ü©1?ü©1?ü©1?ü©1?ôý4?ôý4?ôý4?ôý4?ôý4?ôý4?ôý4?ôý4?ôý4?ôý4?ôý4?ôý4?ôý4?5^:?5^:?5^:?5^:?5^:?5^:?5^:?5^:?5^:?5^:?5^:?5^:?5^:?5^:?5^:?5^:?5^:?5^:?5^:?5^:?5^:?d;??d;??d;??d;??d;??d;??d;??d;??d;??d;??d;??d;??d;??d;??d;??d;??d;??d;??d;??
×C?
×C?
×C?
×C?
×C?
×C?
×C?
×C?
×C?
×C?
×C?
×C?
×C?
×C?
×C?
×C?
×C?
×C?‹lG?‹lG?‹lG?‹lG?‹lG?‹lG?‹lG?‹lG?‹lG?‹lG?‹lG?‹lG?‹lG?‹lG?…K?…K?…K?…K?…K?…K?…K?…K?…K?…K?…K?…K?…K?…K?…K?…K?{N?{N?{N?{N?{N?{N?{N?{N?{N?{N?NbP?NbP?NbP?NbP?NbP?NbP?NbP?NbP?NbP?Ï÷S?Ï÷S?Ï÷S?Ï÷S?Ï÷S?Ï÷S?Ï÷S?Ï÷S?Ï÷S?Ï÷S?Ï÷S?Ï÷S?Ï÷S?Ï÷S?¢EV?¢EV?¢EV?¢EV?¢EV?¢EV?¢EV?¢EV?¢EV?XY?XY?XY?XY?XY?XY?XY?XY?XY?XY?XY?XY?HáZ?HáZ?HáZ?HáZ?HáZ?HáZ?‘í\?‘í\?‘í\?‘í\?‘í\?‘í\?‘í\?‘í\?Ûù^?Ûù^?Ûù^?Ûù^?Ûù^?Ûù^?Ûù^?Ûù^?ÁÊa?ÁÊa?ÁÊa?ÁÊa?ÁÊa?ÁÊa?ÁÊa?ÁÊa?ÁÊa?ÁÊa?ÁÊa?Jb?�•c?�•c?�•c?�•c?�•c?�•c?¦›d?¦›d?¦›d?¦›d?fff?fff?fff?fff?fff?fff?fff?°rh?°rh?°rh?°rh?°rh?°rh?°rh?°rh?L7i?L7i?L7i?ú~j?ú~j?ú~j?ú~j?ú~j?…k?…k?…k?…k?h‘m?h‘m?h‘m?h‘m?h‘m?h‘m?h‘m?h‘m?{n?{n?²�o?²�o?²�o?²�o?²�o?²�o?Nbp?Nbp?Nbp?ü©q?ü©q?ü©q?ü©q?ü©q?ªñr?ªñr?ªñr?ªñr?ªñr?F¶s?F¶s?F¶s?j¼t?j¼t?j¼t?j¼t?}?u?}?u?¢Ev?¢Ev?¢Ev?¢Ev?=
w?=
w?=
w?ÇKw?ìQx?ìQx?ìQx?ìQx?u“x?Xy?Xy?Xy?¬z?¬z?¬z?¾Ÿz?¾Ÿz?Ñ"{?Ñ"{?Zd{?mç{?mç{?ö(|?j|?¬|?‘í|?¤p}?¤p}?-²}?¶ó}??5~?Ûù~?Ûù~?Ûù~?î|?î|?w¾?  €?¤type§scatter¤name¼Monte Carlo Exploring Starts¡xÈ   @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  @A  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  PA  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  `A  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  pA  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  €A  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  ˆA  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  �A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A  ˜A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A   A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  ¨A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  °A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ¸A  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÈA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ÐA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  ØA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  àA  èA  èA  èA  èA  èA  èA  èA  èA  èA  èA  èA  èA  èA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA  øA   B   B   B   B   B   B   B   B   B   B   B   B   B   B   B   B   B   B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B   B   B   B   B   B   B  $B  $B  $B  $B  $B  $B  $B  $B  (B  (B  (B  (B  (B  (B  (B  (B  ,B  ,B  ,B  ,B  ,B  ,B  ,B  ,B  ,B  ,B  ,B  0B  4B  4B  4B  4B  4B  4B  8B  8B  8B  8B  <B  <B  <B  <B  <B  <B  <B  @B  @B  @B  @B  @B  @B  @B  @B  DB  DB  DB  HB  HB  HB  HB  HB  LB  LB  LB  LB  PB  PB  PB  PB  PB  PB  PB  PB  TB  TB  XB  XB  XB  XB  XB  XB  \B  \B  \B  `B  `B  `B  `B  `B  dB  dB  dB  dB  dB  hB  hB  hB  lB  lB  lB  lB  pB  pB  tB  tB  tB  tB  xB  xB  xB  |B  €B  €B  €B  €B  ‚B  †B  †B  †B  ˆB  ˆB  ˆB  ŠB  ŠB  ŽB  ŽB  �B  ’B  ’B  ”B  –B  žB   B  ¤B  ¤B  ªB  ¬B  ®B  ²B  ²B  ²B  ¼B  ¼B  ÞB  àB„¡yÈ ¦›D;¦›D;¦›D;¦›Ä;¦›Ä;¦›Ä;B`å;�Âu<�Âu<�Âu<�Âu<�Âu<�Âu<�Âu<�Âu<ã¥›<ã¥›<ã¥›<ã¥›<1¬<1¬<j¼<j¼<ÍÌÌ<ÍÌÌ<ôýÔ<¶óý<¶óý<¶óý<¶óý<¶óý<+=+=P�=P�=P�=P�=j<=j<=j<=j<=j<=j<=j<=j<=j<=`åP=`åP=`åP=`åP=`åP=‡Y=‡Y=ü©q=ü©q=ü©q=ü©q=ü©q=ü©q=+‡=+‡=+‡=+‡=+‡=+‡=+‡=)\�=)\�=)\�=)\�=P�—=P�—=P�—=P�—=-²�=-²�=-²�=žï§=žï§=žï§=žï§=žï§={®={®={®=¢E¶=¢E¶=¢E¶=¢E¶=j¼=j¼=j¼=ƒÀ=ƒÀ=\�Â=9´È=9´È=9´È=ÍÌÌ=ÍÌÌ=ÙÎ=Ñ"Û=Ñ"Û=Ñ"Û=Ñ"Û=Ñ"Û=Ñ"Û=®Gá=®Gá=®Gá=øSã=B`å=�Âõ=�Âõ=�Âõ=�Âõ=�Âõ=�Âõ=�Âõ=�Âõ=ÙÎ÷=¶óý=¶óý=¶óý=J>J>J>¸>¸>¸>+>+>ßO>ßO>ßO>ßO>ßO>ßO>Nb>Nb>Nb>¼t>¼t>¼t>+‡>+‡>+‡>¬>¬>¬>¬>¬>¬>R¸>R¸>w¾>ÁÊ!>ÁÊ!>/Ý$>/Ý$>/Ý$>yé&>yé&>1,>1,>1,>1,>1,> /> /> />¢E6>¢E6>¢E6>¢E6>¢E6>¢E6>¢E6>ìQ8>ìQ8>¤p=>¤p=>¤p=>¤p=>¤p=>7‰A>7‰A>7‰A>7‰A>�•C>�•C>Ë¡E>Ë¡E>^ºI>^ºI>^ºI>^ºI>¨ÆK>¨ÆK>`åP>`åP>`åP>`åP>`åP>V>V>V>V>V>=
W>bX>¬Z>¬Z>Ñ"[>?5^>?5^>?5^>‰A`>‰A`>øSc>øSc>øSc>B`e>B`e>fff>°rh>°rh>D‹l>D‹l>D‹l>D‹l>�—n>�—n>ü©q>ü©q>ü©q>F¶s>F¶s>þÔx>þÔx>þÔx>þÔx>þÔx>mç{>mç{>mç{>¶ó}>¶ó}>%�>%�>%�>%�>\�‚>\�‚>\�‚>�•ƒ>�•ƒ>¦›„>¦›„>¸…>Ý$†>Ý$†>ð§†>9´ˆ>9´ˆ>9´ˆ>9´ˆ>–C‹>–C‹>–C‹>–C‹>–C‹>ÍÌŒ>ÍÌŒ>ÍÌŒ>sh‘>sh‘>sh‘>sh‘>sh‘>sh‘>sh‘>sh‘>sh‘>áz”>áz”>áz”>áz”>áz”>áz”>�•>�•>+‡–>+‡–>P�—>P�—>b˜>‡™>‡™>š™™>Ñ"›>Ñ"›>Ñ"›>ö(œ>ö(œ>R¸ž>R¸ž>R¸ž>R¸ž>R¸ž>w¾Ÿ>w¾Ÿ>œÄ >œÄ >®G¡>ÁÊ¡>åÐ¢>åÐ¢>
×£>
×£>B`¥>B`¥>B`¥>‹l§>‹l§>‹l§>‹l§>Ãõ¨>Ãõ¨>Ãõ¨>çû©>çû©>ú~ª>…«>…«>V­>V­>V­>{®>{®> ¯> ¯>²�¯>×£°>×£°>é&±>ü©±>33³>33³>33³>j¼´>j¼´>j¼´>}?µ>ÙÎ·>ÙÎ·>ÙÎ·>ÙÎ·>ÙÎ·>ìQ¸>X¹>X¹>Zd»>Zd»>Zd»>Zd»>‘í¼>‘í¼>‘í¼>¶ó½>¶ó½>Ûù¾>Ûù¾>ƒÀ>ƒÀ>ƒÀ>JÂ>JÂ>JÂ>oÃ>oÃ>“Ä>“Ä>Ý$Æ>Ý$Æ>Ý$Æ>Ý$Æ>ð§Æ>'1È>'1È>'1È>L7É>L7É>q=Ê>q=Ê>–CË>–CË>ºIÌ>ºIÌ>ÍÌÌ>òÒÍ>òÒÍ>;ßÏ>;ßÏ>;ßÏ>;ßÏ>NbÐ>`åÐ>…ëÑ>…ëÑ>¼tÓ>¼tÓ>¼tÓ>ázÔ>ázÔ>�Õ>�Õ>+‡Ö>+‡Ö>=
×>P�×>u“Ø>u“Ø>‡Ù>¬Ú>¬Ú>¾ŸÚ>¬Ü>¬Ü>¬Ü>¬Ü>/Ý>?5Þ>?5Þ>d;ß>d;ß>‰Aà>‰Aà>œÄà>åÐâ>åÐâ>åÐâ>åÐâ>
×ã>
×ã>/Ýä>/Ýä>ffæ>ffæ>ffæ>‹lç>‹lç>Ãõè>Ãõè>Ãõè>çûé>çûé>ú~ê>1ì>1ì>1ì>D‹ì>Ví>�—î>�—î>�—î>é&ñ>é&ñ>é&ñ>é&ñ>é&ñ>ü©ñ>!°ò>!°ò>F¶ó>F¶ó>X9ô>j¼ô>}?õ>¢Eö>¢Eö>ÇK÷>ÇK÷>ÙÎ÷>þÔø>þÔø>5^ú>5^ú>5^ú>mçû>mçû>mçû>‘íü>‘íü>¶óý>¶óý>î|ÿ>î|ÿ>î|ÿ>   ?ƒ ?ƒ ?œÄ ?®G?®G?7‰?ÓM?ÓM?ÓM?øS?øS?øS?øS?�•?
×?“?¦›?¦›?/Ý?Ë¡?Ë¡?Ë¡?ff?ff?ff?ð§?yé?‹l?‹l?®?žï?°r?°r?9´?L7	?L7	?çû	?çû	?çû	?q=
?–C?–C?–C?–C?…?ºI?ºI?ºI?ßO?ßO?ßO?ßO?òÒ?òÒ?�—?�—?�—?)\?)\?)\?²�?;ß?Nb?Nb?é&?é&?é&?ü©?ü©?…ë?!°?!°?!°?F¶?F¶?F¶?F¶?X9?X9?j¼?j¼?}??}??�?�Â?¢E?¢E?´È?´È?=
?ÇK?b?b?b?þÔ?þÔ?þÔ?š™?š™?š™?¬?¬?5^?Há?Há?ã¥?ã¥?ã¥?j?j?j?‘í?‘í?¶ó?¶ó?¶ó?¶ó?R¸?R¸?R¸?Ûù?w¾?w¾?w¾?‰A ?‰A ?%!?%!?%!?7‰!?7‰!?ÁÊ!?ÓM"?ÓM"?\�"?o#?o#?øS#?�•#?
×#?“$?Z$?¦›$?/Ý$?¸%?B`%?Ë¡%?Tã%?Ý$&?ff&?yé&?yé&?‹l'?‹l'?žï'?žï'?'1(?9´(?9´(?Ãõ(?L7)?Õx)?^º)?çû)?q=*?ƒÀ*?ƒÀ*?–C+?–C+?…+?1,?1,?D‹,?D‹,?V-?V-?h‘-?h‘-?{.?{.?V.?�—.? /? /?)\/?²�/?;ß/?Å 0?Nb0?`å0?`å0?é&1?sh1?ü©1?…ë1?˜n2?˜n2?!°2?333?333?¼t3?X94?X94?X94?áz4?j¼4?}?5?}?5?�Â5?�Â5?+‡6?+‡6?+‡6?´È6?=
7?ÇK7?ÙÎ7?ÙÎ7?b8?u“8?u“8?X9?X9?X9?#Û9?#Û9?¾Ÿ:?¾Ÿ:?¾Ÿ:?Ñ";?Ñ";?mç;?mç;?mç;?j<?j<?¬<?/=?/=?¤p=?¶ó=?¶ó=??5>?R¸>?R¸>?Ûù>?î|??î|??w¾??  @?ƒ@?ƒ@?œÄ@?®GA?®GA?7‰A?ÁÊA?JB?\�B?\�B?åÐB?oC?�•C?�•C?ZD?ZD?ZD?¦›D?/ÝD?B`E?B`E?Ë¡E?Ý$F?Ý$F?ffF?ð§F?+G?+G?‹lG?®G?žïG?'1H?9´H?9´H?L7I?L7I?ÕxI?^ºI?çûI?q=J?ú~J?ƒÀJ?K?–CK?…K?¨ÆK?ºIL?ºIL?ÍÌL?ÍÌL?ßOM?ßOM?h‘M?{N?{N?VN?�—N? O? O?²�O?²�O?;ßO?Å P?NbP?×£P?`åP?shQ?shQ?ü©Q?-R?-R?!°R?!°R?ªñR?33S?F¶S?F¶S?Ï÷S?ázT?ázT?j¼T?ôýT?}?U?�U?�ÂU?¢EV?¢EV?+‡V?´ÈV?=
W?ÇKW?ÙÎW?ÙÎW?bX?ìQX?u“X?þÔX?‡Y?š™Y?š™Y?¬Z?¬Z?¾ŸZ?¾ŸZ?Ñ"[?Ñ"[?Zd[?mç[?mç[?j\?j\?¬\?‘í\?¤p]?¤p]?-²]??5^??5^?Év^?R¸^?Ûù^?d;_?î|_?w¾_?  `?‰A`?ƒ`?œÄ`?®Ga?®Ga?7‰a?ÁÊa?Jb?ÓMb?\�b?åÐb?oc?�•c?�•c?“d?“d?Zd?¦›d?Ë¡e?Ë¡e?Ë¡e?Ë¡e?Tãe?fff?fff?yéf?yéf?+g?žïg?žïg?žïg?'1h?°rh?9´h?L7i?L7i?Õxi?^ºi?q=j?q=j?ú~j?ƒÀj?k?–Ck?…k?1l?1l?ºIl?D‹l?ÍÌl?ßOm?ßOm?h‘m?òÒm?{n?Vn?�—n?Ùn? o?)\o?²�o?;ßo?Å p?Nbp?×£p?`åp?é&q?shq?ü©q?…ëq?-r?˜nr?ªñr?ªñr?33s?¼ts?F¶s?Ï÷s?X9t?j¼t?j¼t?ôýt?}?u?�u?�Âu?v?¢Ev?+‡v?´Èv?=
w?ÇKw?P�w?ÙÎw?bx?ìQx?þÔx?þÔx?‡y?Xy?š™y?#Ûy?¬z?5^z?¾Ÿz?Ház?Ñ"{?Zd{?ã¥{?mç{?ö(|?j|?¬|?‘í|?/}?¤p}?-²}?¶ó}??5~?Év~?R¸~?Ûù~?d;?î|?w¾?  €?¤type§scatter¤name­Random Policy¡xÈ   0A  0A  0A  PA  PA  PA  `A  pA  pA  pA  pA  pA  pA  pA  pA  €A  €A  €A  €A  ˆA  ˆA  �A  �A  ˜A  ˜A   A  ¨A  ¨A  ¨A  ¨A  ¨A  °A  °A  ¸A  ¸A  ¸A  ¸A  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÀA  ÈA  ÈA  ÈA  ÈA  ÈA  ØA  ØA  èA  èA  èA  èA  èA  èA  ðA  ðA  ðA  ðA  ðA  ðA  ðA  øA  øA  øA  øA   B   B   B   B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B  B   B   B   B  $B  $B  (B  ,B  ,B  ,B  ,B  ,B  ,B  0B  0B  0B  4B  8B  <B  <B  <B  <B  <B  <B  <B  <B  @B  DB  DB  DB  HB  HB  HB  LB  LB  LB  PB  PB  TB  TB  TB  TB  TB  TB  \B  \B  \B  `B  `B  `B  dB  dB  dB  hB  hB  hB  hB  hB  hB  lB  lB  pB  tB  tB  xB  xB  xB  |B  |B  €B  €B  €B  €B  €B  ‚B  ‚B  ‚B  „B  „B  „B  „B  „B  „B  „B  †B  †B  ˆB  ˆB  ˆB  ˆB  ˆB  ŠB  ŠB  ŠB  ŠB  ŒB  ŒB  ŽB  ŽB  �B  �B  �B  �B  ’B  ’B  ”B  ”B  ”B  ”B  ”B  –B  –B  –B  –B  –B  šB  œB  žB  žB   B  ¢B  ¢B  ¢B  ¤B  ¤B  ¨B  ¨B  ¨B  ªB  ªB  ¬B  ®B  ®B  °B  °B  °B  °B  ²B  ²B  ´B  ´B  ´B  ¶B  ¶B  ¸B  ¸B  ¸B  ¸B  ¸B  ºB  ºB  ºB  ¼B  ¼B  ¾B  ¾B  ¾B  ¾B  ÀB  ÀB  ÀB  ÂB  ÂB  ÄB  ÄB  ÆB  ÈB  ÈB  ÊB  ÌB  ÌB  ÌB  ÌB  ÐB  ÐB  ÐB  ÐB  ÐB  ÒB  ÒB  ÒB  ÔB  ÔB  ÔB  ÔB  ÔB  ÔB  ÔB  ÔB  ÔB  ÖB  ÖB  ÖB  ÖB  ÖB  ÖB  ØB  ØB  ÚB  ÚB  ÜB  ÜB  ÞB  àB  àB  âB  æB  æB  æB  èB  èB  ìB  ìB  ìB  ìB  ìB  îB  îB  ðB  ðB  òB  ôB  öB  öB  øB  øB  úB  úB  úB  üB  üB  üB  üB  þB  þB  þB   C   C  C  C  C  C  C  C  C  C  C  C  C  C  C  	C  
C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C  C   C   C  !C  !C  "C  #C  #C  $C  $C  $C  $C  %C  &C  'C  'C  )C  )C  )C  *C  *C  +C  +C  ,C  ,C  -C  .C  0C  0C  1C  3C  3C  4C  5C  5C  5C  5C  6C  7C  7C  8C  8C  9C  9C  :C  ;C  ;C  ;C  ;C  <C  <C  =C  =C  >C  >C  >C  ?C  ?C  @C  @C  @C  AC  AC  BC  CC  CC  CC  DC  FC  GC  GC  GC  HC  HC  HC  HC  HC  IC  JC  JC  KC  KC  LC  MC  OC  PC  PC  QC  QC  RC  UC  UC  VC  VC  VC  XC  XC  XC  YC  YC  ZC  ZC  [C  [C  [C  \C  ]C  ]C  ^C  _C  _C  `C  aC  aC  aC  bC  bC  bC  bC  cC  eC  fC  iC  iC  jC  kC  kC  kC  lC  lC  lC  mC  oC  pC  pC  qC  sC  tC  tC  vC  wC  wC  xC  xC  xC  zC  |C  |C  |C  |C  }C  ~C  ~C  ~C  C  C  C  C  �C  �C €�C €�C €�C  ‚C  ‚C  ‚C €‚C  ƒC €ƒC €ƒC  „C  „C  „C €„C €„C  …C €…C €…C €…C  †C  †C  †C  †C €†C €†C  ‡C  ‡C  ˆC  ˆC  ŠC €ŠC  ‹C  ‹C €‹C €‹C  ŒC €ŒC  �C  �C  �C €�C €�C €�C €ŽC €ŽC €ŽC  �C  �C €�C  �C  �C €�C €�C €�C  ‘C  ‘C  ‘C €‘C €‘C  ’C  ’C  ’C  ’C €’C €’C €’C  “C  ”C  ”C  ”C €”C €”C  •C  •C  •C €•C €•C  –C €–C €–C  —C €—C €—C  ˜C €˜C  ›C €›C  œC  �C €žC € C  ¡C €¡C  ¢C €¢C  £C  ¤C  ¤C €¤C €¤C  ¥C  ¥C €¥C  ¦C  ¦C €¦C  §C €§C  ¨C €¨C €©C €ªC €ªC  «C  «C €«C  ¬C  ¬C €¬C €¬C €­C €­C €®C €®C  ¯C  ¯C €¯C  °C €°C €°C  ±C €±C  ²C  ³C €³C  ´C  ´C  µC  ¶C €¶C  ·C €·C €·C €¸C  ¹C  ¹C €ºC  »C  »C  »C  ¼C €¼C  ½C  ½C €½C €½C  ¾C  ¾C  ¾C €¾C  ¿C  ÀC €ÀC €ÀC €ÁC  ÂC  ÂC €ÂC €ÂC €ÂC €ÃC €ÃC  ÄC  ÄC  ÄC  ÅC  ÅC €ÅC €ÅC €ÅC €ÆC €ÆC  ÇC  ÈC  ÈC  ÉC €ÉC €ÉC  ÊC €ÊC €ÊC  ËC €ËC €ËC  ÌC €ÌC  ÍC  ÍC  ÎC €ÎC €ÎC  ÏC €ÏC  ÐC €ÐC €ÐC €ÑC  ÒC €ÒC €ÒC  ÓC  ÓC  ÓC €ÓC  ÔC €ÔC €ÔC  ÕC €ÕC €ÕC  ÖC  ×C €×C €×C  ØC  ÙC €ÙC  ÚC  ÛC  ÛC  ÜC  ÜC €ÜC  ÝC €ÝC €ßC  àC €áC €âC  ãC  äC €äC  åC  åC €åC €åC €æC €æC  çC €èC €èC  éC €éC  ëC  ëC  ìC  ìC €ìC €îC  ñC €ñC  òC  óC  óC €ôC  õC  õC  ÷C  ÷C €øC  ùC €ùC €ùC  úC  ûC  ûC  üC €ýC  þC € D @D €D €D ÀD ÀD €D €D @D @D €D @D  D €D @	D  
D  
D À
D À
D  D  D @D @D €D @D @D €D €D  D @D €D €D ÀD @D @D €D €D €D ÀD  D @D €D @D ÀD  D @D @D €D ÀD €D @D @D ÀD @D  D  D €D €D @D €D ÀD ÀD ÀD ÀD € D  !D  !D @!D @!D @#D  %D  %D  %D €%D À%D €(D  )D  )D €)D  +D €+D €+D À+D  -D  .D À.D À/D  1D  1D €2D @4D  5D À5D À5D  6D @6D €6D À:D €;D €<D  =D À=D À?D @AD ÀBD @DD €DD €ED @GD  HD @HD  KD @KD ÀKD  ND  ND ÀND @OD @PD  RD  UD  VD  VD ÀWD  XD @XD  YD ÀYD €ZD €[D  \D €^D À^D @_D €bD @cD @fD ÀlD ÀlD €oD ÀsD  tD @xD €xD  {D @{D ÀD €€D €�D  �D  ‚D àƒD  …D `ˆD à‰D €”D `–D  ˜D `˜D €›D @¤D  ¬D À­D  ¯D À±D À¹D ÀìDÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/10b6971fa80c859d„¦layoutˆ¨autosizeÂ¥xaxisƒ¨tickvals×  €?   A¥title�¤text®Dealer showing¨ticktext’¡A¢10¨template‚¦layoutÞ ©coloraxis�¨colorbar‚¥ticks ¬outlinewidthÊ    ¥xaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white©hovermode§closest­paper_bgcolor¥white£geo†©showlakesÃ¨showlandÃ©landcolor§#E5ECF6§bgcolor¥white¬subunitcolor¥white©lakecolor¥whiteªcolorscaleƒªsequentialš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921©diverging›’Ê    §#8e0152’Ê=ÌÌÍ§#c51b7d’Ê>LÌÍ§#de77ae’Ê>™™š§#f1b6da’Ê>ÌÌÍ§#fde0ef’Ê?   §#f7f7f7’Ê?™š§#e6f5d0’Ê?333§#b8e186’Ê?LÌÍ§#7fbc41’Ê?fff§#4d9221’Ê?€  §#276419¯sequentialminusš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921¥yaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white­shapedefaults�¤line�¥color§#2a3f5fªhoverlabel�¥align¤left¦mapbox�¥style¥light¥polarƒ«angularaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6ªradialaxisƒ©gridcolor¥white¥ticks ©linecolor¥white¯autotypenumbers¦strict¤font�¥color§#2a3f5f§ternary„¥aaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6¥caxisƒ©gridcolor¥white¥ticks ©linecolor¥white¥baxisƒ©gridcolor¥white¥ticks ©linecolor¥white²annotationdefaultsƒ©arrowheadÊ    ªarrowwidthÊ?€  ªarrowcolor§#2a3f5f¬plot_bgcolor§#E5ECF6¥title�¡xÊ=LÌÍ¥sceneƒ¥xaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥zaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥yaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¨colorwayš§#636efa§#EF553B§#00cc96§#ab63fa§#FFA15A§#19d3f3§#FF6692§#B6E880§#FF97FF§#FECB52¤dataÞ ®scatterpolargl‘‚¤type®scatterpolargl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦carpet‘ƒ¥baxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¤type¦carpet¥aaxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¬scatterpolar‘‚¤type¬scatterpolar¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©parcoords‘‚¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©parcoords§scatter‘‚¤type§scatter¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ²histogram2dcontour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type²histogram2dcontourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921§contour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§contourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattercarpet‘‚¤type­scattercarpet¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦mesh3d‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type¦mesh3d§surface‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§surfaceªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattermapbox‘‚¤type­scattermapbox¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ªscattergeo‘‚¤typeªscattergeo¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©histogram‘‚¤type©histogram¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    £pie‘‚¤type£pieªautomarginÃªchoropleth‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤typeªchoropleth©heatmapgl‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©heatmapglªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921£bar‘„¤type£bar§error_y�¥color§#2a3f5f§error_x�¥color§#2a3f5f¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   §heatmap‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§heatmapªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­contourcarpet‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type­contourcarpet¥table‘ƒ¤type¥table¦header‚¤line�¥color¥white¤fill�¥color§#C8D4E3¥cells‚¤line�¥color¥white¤fill�¥color§#EBF0F8©scatter3d‘ƒ¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©scatter3d¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¨barpolar‘‚¤type¨barpolar¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   ©scattergl‘‚¤type©scattergl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    «histogram2d‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type«histogram2dªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921®scatterternary‘‚¤type®scatterternary¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦heightÊC–  ¦margin„¡lÊ    ¡bÊ    ¡rÊ    ¡tÊBp  ¥title ¥yaxisƒ¨tickvals×  @A  ¨A¥title�¤textªPlayer sum¨ticktext×  @A  ¨A¥widthÊCÈ  ¦config…¨showLinkÂ¨editableÂªresponsiveÃªstaticPlotÂªscrollZoomÃ¦frames�¤data‘‰¤zmaxÊ?€  ¡yÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¤type§heatmapªcolorscale§Bluered¤zminÊ¿€  ¡zšÇ(Ø<¿è.¿#¿oq ¿(¿õ8¿gÄ­¾ì1¶½žD'>á9¿>Ç(b‰†¾¼ø€¾M?�¾çMƒ¾ñ$x¾DHÛ½Uf>­;Ð>¿÷'?ï=f?Ç(ýÿo¾¶R¾ì¸T¾þT¾–ÃI¾‘´�½F4>@eÜ>¥•)?|Êg?Ç(U¾Ÿ—%¾’0¾¤Â0¾b>-¾¢^8½×mP> éç>Çã+?�g?Ç(Ým"¾…³ ¾�úù½–Ž¾Âû½ä'ÚºJžq>Šë>ÇÀ.?†¥h?Ç(+¾Ýð½j›ã½uÅù½åªî½Gó>=vŸ>ÔÉ?}G4?d*k?Ç(I‰Y¾•„¾óë¡¾Ë¹¹¾»JÔ¾C|k½˜´Ù>jÂ"?$·G?Ë³o?Ç(n��¾5‹Ÿ¾‹¾¸¾˜šÐ¾^„å¾A¦¾{Ö>Y�?óM?„àp?Ç(Ô	«¾O‘À¾ŽØ¾­_ë¾›ÿ¾(ù¼¾±¶¾j3¢>ÊC?O•r?Ç(:ÞÝ¾‹ê¾ Âü¾™ö¿k ¿»Ö¾“ÇL¾_'¯<äÜå>®kT?©transposeÃ©showscaleÃ¡xÇ(  €?   @  @@  €@   @  À@  à@   A  A   AÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/8998d22fe9cbcd7d„¦layout†¥xaxis‚¤type£log¥title�¤text¨Episodes¨template‚¦layoutÞ ©coloraxis�¨colorbar‚¥ticks ¬outlinewidthÊ    ¥xaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white©hovermode§closest­paper_bgcolor¥white£geo†©showlakesÃ¨showlandÃ©landcolor§#E5ECF6§bgcolor¥white¬subunitcolor¥white©lakecolor¥whiteªcolorscaleƒªsequentialš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921©diverging›’Ê    §#8e0152’Ê=ÌÌÍ§#c51b7d’Ê>LÌÍ§#de77ae’Ê>™™š§#f1b6da’Ê>ÌÌÍ§#fde0ef’Ê?   §#f7f7f7’Ê?™š§#e6f5d0’Ê?333§#b8e186’Ê?LÌÍ§#7fbc41’Ê?fff§#4d9221’Ê?€  §#276419¯sequentialminusš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921¥yaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white­shapedefaults�¤line�¥color§#2a3f5fªhoverlabel�¥align¤left¦mapbox�¥style¥light¥polarƒ«angularaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6ªradialaxisƒ©gridcolor¥white¥ticks ©linecolor¥white¯autotypenumbers¦strict¤font�¥color§#2a3f5f§ternary„¥aaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6¥caxisƒ©gridcolor¥white¥ticks ©linecolor¥white¥baxisƒ©gridcolor¥white¥ticks ©linecolor¥white²annotationdefaultsƒ©arrowheadÊ    ªarrowwidthÊ?€  ªarrowcolor§#2a3f5f¬plot_bgcolor§#E5ECF6¥title�¡xÊ=LÌÍ¥sceneƒ¥xaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥zaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥yaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¨colorwayš§#636efa§#EF553B§#00cc96§#ab63fa§#FFA15A§#19d3f3§#FF6692§#B6E880§#FF97FF§#FECB52¤dataÞ ®scatterpolargl‘‚¤type®scatterpolargl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦carpet‘ƒ¥baxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¤type¦carpet¥aaxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¬scatterpolar‘‚¤type¬scatterpolar¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©parcoords‘‚¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©parcoords§scatter‘‚¤type§scatter¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ²histogram2dcontour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type²histogram2dcontourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921§contour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§contourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattercarpet‘‚¤type­scattercarpet¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦mesh3d‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type¦mesh3d§surface‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§surfaceªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattermapbox‘‚¤type­scattermapbox¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ªscattergeo‘‚¤typeªscattergeo¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©histogram‘‚¤type©histogram¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    £pie‘‚¤type£pieªautomarginÃªchoropleth‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤typeªchoropleth©heatmapgl‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©heatmapglªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921£bar‘„¤type£bar§error_y�¥color§#2a3f5f§error_x�¥color§#2a3f5f¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   §heatmap‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§heatmapªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­contourcarpet‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type­contourcarpet¥table‘ƒ¤type¥table¦header‚¤line�¥color¥white¤fill�¥color§#C8D4E3¥cells‚¤line�¥color¥white¤fill�¥color§#EBF0F8©scatter3d‘ƒ¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©scatter3d¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¨barpolar‘‚¤type¨barpolar¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   ©scattergl‘‚¤type©scattergl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    «histogram2d‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type«histogram2dªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921®scatterternary‘‚¤type®scatterternary¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦legend‚¡yÊ¾LÌÍ«orientation¡h¦margin„¡lÊBH  ¡bÊBH  ¡rÊBH  ¡tÊBp  ¥yaxis‚¥range×ÍÌÌ½   @¥title�¤textÙ/Mean square error <br> (average over 1000 runs)¥title³Initial Value = 1.0¦config…¨showLinkÂ¨editableÂªresponsiveÃªstaticPlotÂªscrollZoomÃ¦frames�¤data’„¡yÈ�=|A+UŒ@Î~D@ @¸Ìñ?}sÒ?„µº?*¥?¿�?ô%u?
Ëj?qÛP?¹ÔC?Ó+9?²Y+?G”$?)Ú?â‚?ÝE?¢± ?!¶ï>Iƒí>zËß>¿êÔ>	5Î>ûßÇ>NÊ½>5µ>·C¯>=q¨>xÜ¡>6´›>QŒœ>•>?“>©Ê�>çOŽ>¤ú‰>–¾ˆ>>Ï†>Ã?�>^ex>Û[p>û‡j>ò¹g>£yd>Û}_>cx[>ã±V>æQ>¦×J>œJ>¹¨G>(E>M*A>.Õ<>�h7>þ¢4>’•.>ìz(>m&>(>†$>-‘#>
9">� >0Œ>r{>Å[>-A>ÜW>Ö8>2>Qz>Âõ	>‰¥>‘ª>�ù>+>y >0Úû=Øù=yÓö=�õ=Òëï=siì=$è=Ò¶ä=þ1ã=i3á=¡ß=ÏÜ=«ÛØ=­Ö=>DÕ='Ñ=êWÐ=ˆË=ÇmÈ=e˜Ç=¤type§scatter¤name¼Ordinary importance sampling¡xÈ�  €?   @  @@  €@   @  À@  à@   A  A   A  0A  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A  °A  ¸A  ÀA  ÈA  ÐA  ØA  àA  èA  ðA  øA   B  B  B  B  B  B  B  B   B  $B  (B  ,B  0B  4B  8B  <B  @B  DB  HB  LB  PB  TB  XB  \B  `B  dB  hB  lB  pB  tB  xB  |B  €B  ‚B  „B  †B  ˆB  ŠB  ŒB  ŽB  �B  ’B  ”B  –B  ˜B  šB  œB  žB   B  ¢B  ¤B  ¦B  ¨B  ªB  ¬B  ®B  °B  ²B  ´B  ¶B  ¸B  ºB  ¼B  ¾B  ÀB  ÂB  ÄB  ÆB  ÈB„¡yÈ�¸/Â?Êoµ?Ø«?„‘¡?ÿ•?Œ?²ƒ?ÿv?Ñæf?– W?L??‚B?v�8?–+-?ÌÒ$?	?€5?�ó
?ˆç?�…þ>ØGï>ãÏæ>5Û>)ÅÐ>ýÆ>…ò¼>ú°>Ê�§>R�>N0–>×:�>ò-Œ>á}‰>…>k7�>4|>Zr>ù h>£�a>sm\>’X>«ÌQ>a{K>žrH>+E>Z™B>jW=>/?;>Ÿn5>ú?5>fi2>«3>K•2>ÁF/>Š³*>W…*>¤m&>s’!>#] >s@>K¡>I>ä>ƒø>Ð7>õó>ÁZ>w>ü÷>˜[>2ñ>;�>"à>Þ5 >P$þ=†šü=g°÷=R¸ò=²²ò=^4ó=[ò=N#ñ=Ëtì=ûHè=Ø½ä=”;â=ZEâ=œ0à=h#Þ=1®Ú=ˆÞØ=lÙ=WÖ=&ìÔ='Ó=~=Ò= dÑ=+Ï=÷Ì=gÎÉ=¤type§scatter¤name¼Weighted importance sampling¡xÈ�  €?   @  @@  €@   @  À@  à@   A  A   A  0A  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A  °A  ¸A  ÀA  ÈA  ÐA  ØA  àA  èA  ðA  øA   B  B  B  B  B  B  B  B   B  $B  (B  ,B  0B  4B  8B  <B  @B  DB  HB  LB  PB  TB  XB  \B  `B  dB  hB  lB  pB  tB  xB  |B  €B  ‚B  „B  †B  ˆB  ŠB  ŒB  ŽB  �B  ’B  ”B  –B  ˜B  šB  œB  žB   B  ¢B  ¤B  ¦B  ¨B  ªB  ¬B  ®B  °B  ²B  ´B  ¶B  ¸B  ºB  ¼B  ¾B  ÀB  ÂB  ÄB  ÆB  ÈBÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/cc789608a7b2df16„¦layoutˆ¨autosizeÂ¥xaxisƒ¨tickvals×  €?   A¥title�¤text ¨ticktext’¡A¢10¨template‚¦layoutÞ ©coloraxis�¨colorbar‚¥ticks ¬outlinewidthÊ    ¥xaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white©hovermode§closest­paper_bgcolor¥white£geo†©showlakesÃ¨showlandÃ©landcolor§#E5ECF6§bgcolor¥white¬subunitcolor¥white©lakecolor¥whiteªcolorscaleƒªsequentialš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921©diverging›’Ê    §#8e0152’Ê=ÌÌÍ§#c51b7d’Ê>LÌÍ§#de77ae’Ê>™™š§#f1b6da’Ê>ÌÌÍ§#fde0ef’Ê?   §#f7f7f7’Ê?™š§#e6f5d0’Ê?333§#b8e186’Ê?LÌÍ§#7fbc41’Ê?fff§#4d9221’Ê?€  §#276419¯sequentialminusš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921¥yaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white­shapedefaults�¤line�¥color§#2a3f5fªhoverlabel�¥align¤left¦mapbox�¥style¥light¥polarƒ«angularaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6ªradialaxisƒ©gridcolor¥white¥ticks ©linecolor¥white¯autotypenumbers¦strict¤font�¥color§#2a3f5f§ternary„¥aaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6¥caxisƒ©gridcolor¥white¥ticks ©linecolor¥white¥baxisƒ©gridcolor¥white¥ticks ©linecolor¥white²annotationdefaultsƒ©arrowheadÊ    ªarrowwidthÊ?€  ªarrowcolor§#2a3f5f¬plot_bgcolor§#E5ECF6¥title�¡xÊ=LÌÍ¥sceneƒ¥xaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥zaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥yaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¨colorwayš§#636efa§#EF553B§#00cc96§#ab63fa§#FFA15A§#19d3f3§#FF6692§#B6E880§#FF97FF§#FECB52¤dataÞ ®scatterpolargl‘‚¤type®scatterpolargl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦carpet‘ƒ¥baxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¤type¦carpet¥aaxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¬scatterpolar‘‚¤type¬scatterpolar¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©parcoords‘‚¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©parcoords§scatter‘‚¤type§scatter¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ²histogram2dcontour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type²histogram2dcontourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921§contour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§contourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattercarpet‘‚¤type­scattercarpet¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦mesh3d‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type¦mesh3d§surface‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§surfaceªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattermapbox‘‚¤type­scattermapbox¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ªscattergeo‘‚¤typeªscattergeo¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©histogram‘‚¤type©histogram¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    £pie‘‚¤type£pieªautomarginÃªchoropleth‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤typeªchoropleth©heatmapgl‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©heatmapglªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921£bar‘„¤type£bar§error_y�¥color§#2a3f5f§error_x�¥color§#2a3f5f¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   §heatmap‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§heatmapªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­contourcarpet‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type­contourcarpet¥table‘ƒ¤type¥table¦header‚¤line�¥color¥white¤fill�¥color§#C8D4E3¥cells‚¤line�¥color¥white¤fill�¥color§#EBF0F8©scatter3d‘ƒ¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©scatter3d¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¨barpolar‘‚¤type¨barpolar¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   ©scattergl‘‚¤type©scattergl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    «histogram2d‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type«histogram2dªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921®scatterternary‘‚¤type®scatterternary¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦heightÊC–  ¦margin„¡lÊ    ¡bÊ    ¡rÊ    ¡tÊBp  ¥title¶After 500,000 episodes¥yaxisƒ¨tickvals×  @A  ¨A¥title�¤textªPlayer sum¨ticktext×  @A  ¨A¥widthÊCÈ  ¦config…¨showLinkÂ¨editableÂªresponsiveÃªstaticPlotÂªscrollZoomÃ¦frames�¤data‘‰¤zmaxÊ?€  ¡yÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¤type§heatmapªcolorscale§Bluered¤zminÊ¿€  ¡zšÇ(Àí¾òÿ¾>9 ¿f"¿Vo¿Ý ¿SÙ¿Â¶¿c.>é„	?Ç(ÉÌr¾Ìd’¾²”¾ ¦¡¾B_®¾ÚÑ¾!•Ð¾‡oé¾›g$?V[s?Ç(0«“¾%”¾¼�¢¾©²©¾ é¶¾�Ÿ¸¾bwÖ¾ì¾¼8&?f§s?Ç(,N¾Ë;†¾@Åœ¾j>¥¾©œ·¾©øÃ¾™gÙ¾ïç¾%?�{r?Ç(ha_¾Z‘�¾¬8‘¾r¸ª¾b2´¾ÕäÆ¾ÜøÕ¾cöÔ¾¯*?#Œt?Ç(lqG¾iwu¾V§Ž¾vè�¾’±¾ '¹¾¥eÐ¾�=Ý¾+J7?ív?Ç(i¡V¾b‹¾Iœ¾"/�¾).°¾y£»¾	|Û¾f�Ï¾ä_C?µx?Ç(NéH¾åV…¾¥‚¾~¥°¾Ð3¢¾Z¾¾@
Æ¾LˆÛ¾š$I?Äw?Ç(x_]¾w\u¾@»�¾KŸ¾°»¥¾ª
©¾Ì½Ï¾Œ€×¾ºÉ@?T`y?Ç(×þ¢¾|µ¸¾R°¾äFÆ¾†o×¾ÄZè¾OÐã¾™Kü¾­Ü>øÑ^?©transposeÃ©showscaleÃ¡xÇ(  €?   @  @@  €@   @  À@  à@   A  A   AÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/985b842d3ecfdc58„¦layoutˆ¨autosizeÂ¥xaxisƒ¨tickvals×  €?   A¥title�¤text®Dealer showing¨ticktext’¡A¢10¨template‚¦layoutÞ ©coloraxis�¨colorbar‚¥ticks ¬outlinewidthÊ    ¥xaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white©hovermode§closest­paper_bgcolor¥white£geo†©showlakesÃ¨showlandÃ©landcolor§#E5ECF6§bgcolor¥white¬subunitcolor¥white©lakecolor¥whiteªcolorscaleƒªsequentialš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921©diverging›’Ê    §#8e0152’Ê=ÌÌÍ§#c51b7d’Ê>LÌÍ§#de77ae’Ê>™™š§#f1b6da’Ê>ÌÌÍ§#fde0ef’Ê?   §#f7f7f7’Ê?™š§#e6f5d0’Ê?333§#b8e186’Ê?LÌÍ§#7fbc41’Ê?fff§#4d9221’Ê?€  §#276419¯sequentialminusš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921¥yaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white­shapedefaults�¤line�¥color§#2a3f5fªhoverlabel�¥align¤left¦mapbox�¥style¥light¥polarƒ«angularaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6ªradialaxisƒ©gridcolor¥white¥ticks ©linecolor¥white¯autotypenumbers¦strict¤font�¥color§#2a3f5f§ternary„¥aaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6¥caxisƒ©gridcolor¥white¥ticks ©linecolor¥white¥baxisƒ©gridcolor¥white¥ticks ©linecolor¥white²annotationdefaultsƒ©arrowheadÊ    ªarrowwidthÊ?€  ªarrowcolor§#2a3f5f¬plot_bgcolor§#E5ECF6¥title�¡xÊ=LÌÍ¥sceneƒ¥xaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥zaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥yaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¨colorwayš§#636efa§#EF553B§#00cc96§#ab63fa§#FFA15A§#19d3f3§#FF6692§#B6E880§#FF97FF§#FECB52¤dataÞ ®scatterpolargl‘‚¤type®scatterpolargl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦carpet‘ƒ¥baxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¤type¦carpet¥aaxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¬scatterpolar‘‚¤type¬scatterpolar¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©parcoords‘‚¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©parcoords§scatter‘‚¤type§scatter¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ²histogram2dcontour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type²histogram2dcontourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921§contour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§contourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattercarpet‘‚¤type­scattercarpet¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦mesh3d‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type¦mesh3d§surface‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§surfaceªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattermapbox‘‚¤type­scattermapbox¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ªscattergeo‘‚¤typeªscattergeo¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©histogram‘‚¤type©histogram¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    £pie‘‚¤type£pieªautomarginÃªchoropleth‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤typeªchoropleth©heatmapgl‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©heatmapglªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921£bar‘„¤type£bar§error_y�¥color§#2a3f5f§error_x�¥color§#2a3f5f¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   §heatmap‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§heatmapªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­contourcarpet‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type­contourcarpet¥table‘ƒ¤type¥table¦header‚¤line�¥color¥white¤fill�¥color§#C8D4E3¥cells‚¤line�¥color¥white¤fill�¥color§#EBF0F8©scatter3d‘ƒ¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©scatter3d¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¨barpolar‘‚¤type¨barpolar¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   ©scattergl‘‚¤type©scattergl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    «histogram2d‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type«histogram2dªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921®scatterternary‘‚¤type®scatterternary¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦heightÊC–  ¦margin„¡lÊ    ¡bÊ    ¡rÊ    ¡tÊBp  ¥title ¥yaxisƒ¨tickvals×  @A  ¨A¥title�¤text ¨ticktext×  @A  ¨A¥widthÊC   ¦config…¨showLinkÂ¨editableÂªresponsiveÃªstaticPlotÂªscrollZoomÃ¦frames�¤data‘‰¤zmaxÊ?€  ¡yÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¤type§heatmapªcolorscale§Bluered¤zminÊ¿€  ¡zšÇ(122¿Œõ!¿«ª:¿H&P¿°:¿ïÁG¿––6¿ªôT¿¾»;>ð
¯>Ç(  ¿¬6¿ÅÚ7¿  ¿4X!¿­;-¿  J¿�%?¿ð«1?­ÍZ?Ç(’Ê¿8¿ À¾&##¿Íf3¿(¯!¿‚u4¿‡‡G¿Ãž0?Bål?Ç(Õ°Ý¾¹_¿Ä7"¿7¿fË¿IÖ9¿pà@¿/E>¿­ë:?1k?Ç(f:¿$¸¿»†ò¾‹é,¿ ¿ßn7¿Êv>¿P§S¿{g#?sT`?Ç(Ó°Ý¾V?è¾G¯¿�Âõ¾¸m;¿�N'¿(¯!¿£*¿a"=?ÄNl?Ç( â¾Š¿·Y¿�&¿ @¿'C0¿ .¿  :¿ :?ˆ^h?Ç(à>¿›™¿²Ž6¿`¹'¿-b)¿–Z)¿„B¿  >¿mÐd?Ù¶m?Ç(òâ¾ÜÜÜ¾¿ÿÿÿ¾$I¿‹º"¿ÿÿ=¿÷¬¿Éi>?[ão?Ç(Ù‰¿·¿–J%¿�°¿Í9'¿©ª*¿$9¿{ÅW¿8¨?Çq\?©transposeÃ©showscaleÂ¡xÇ(  €?   @  @@  €@   @  À@  à@   A  A   AÙ4c6e0de0c-3901-11f0-234e-bd09c571f662/369509f17cc5b5a„¦layoutˆ¨autosizeÂ¥xaxisƒ¨tickvals×  €?   A¥title�¤text®Dealer showing¨ticktext’¡A¢10¨template‚¦layoutÞ ©coloraxis�¨colorbar‚¥ticks ¬outlinewidthÊ    ¥xaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white©hovermode§closest­paper_bgcolor¥white£geo†©showlakesÃ¨showlandÃ©landcolor§#E5ECF6§bgcolor¥white¬subunitcolor¥white©lakecolor¥whiteªcolorscaleƒªsequentialš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921©diverging›’Ê    §#8e0152’Ê=ÌÌÍ§#c51b7d’Ê>LÌÍ§#de77ae’Ê>™™š§#f1b6da’Ê>ÌÌÍ§#fde0ef’Ê?   §#f7f7f7’Ê?™š§#e6f5d0’Ê?333§#b8e186’Ê?LÌÍ§#7fbc41’Ê?fff§#4d9221’Ê?€  §#276419¯sequentialminusš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921¥yaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white­shapedefaults�¤line�¥color§#2a3f5fªhoverlabel�¥align¤left¦mapbox�¥style¥light¥polarƒ«angularaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6ªradialaxisƒ©gridcolor¥white¥ticks ©linecolor¥white¯autotypenumbers¦strict¤font�¥color§#2a3f5f§ternary„¥aaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6¥caxisƒ©gridcolor¥white¥ticks ©linecolor¥white¥baxisƒ©gridcolor¥white¥ticks ©linecolor¥white²annotationdefaultsƒ©arrowheadÊ    ªarrowwidthÊ?€  ªarrowcolor§#2a3f5f¬plot_bgcolor§#E5ECF6¥title�¡xÊ=LÌÍ¥sceneƒ¥xaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥zaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥yaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¨colorwayš§#636efa§#EF553B§#00cc96§#ab63fa§#FFA15A§#19d3f3§#FF6692§#B6E880§#FF97FF§#FECB52¤dataÞ ®scatterpolargl‘‚¤type®scatterpolargl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦carpet‘ƒ¥baxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¤type¦carpet¥aaxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¬scatterpolar‘‚¤type¬scatterpolar¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©parcoords‘‚¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©parcoords§scatter‘‚¤type§scatter¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ²histogram2dcontour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type²histogram2dcontourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921§contour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§contourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattercarpet‘‚¤type­scattercarpet¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦mesh3d‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type¦mesh3d§surface‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§surfaceªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattermapbox‘‚¤type­scattermapbox¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ªscattergeo‘‚¤typeªscattergeo¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©histogram‘‚¤type©histogram¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    £pie‘‚¤type£pieªautomarginÃªchoropleth‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤typeªchoropleth©heatmapgl‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©heatmapglªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921£bar‘„¤type£bar§error_y�¥color§#2a3f5f§error_x�¥color§#2a3f5f¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   §heatmap‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§heatmapªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­contourcarpet‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type­contourcarpet¥table‘ƒ¤type¥table¦header‚¤line�¥color¥white¤fill�¥color§#C8D4E3¥cells‚¤line�¥color¥white¤fill�¥color§#EBF0F8©scatter3d‘ƒ¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©scatter3d¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¨barpolar‘‚¤type¨barpolar¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   ©scattergl‘‚¤type©scattergl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    «histogram2d‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type«histogram2dªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921®scatterternary‘‚¤type®scatterternary¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦heightÊC–  ¦margin„¡lÊ    ¡bÊ    ¡rÊ    ¡tÊBp  ¥title ¥yaxisƒ¨tickvals×  @A  ¨A¥title�¤textªPlayer sum¨ticktext×  @A  ¨A¥widthÊCÈ  ¦config…¨showLinkÂ¨editableÂªresponsiveÃªstaticPlotÂªscrollZoomÃ¦frames�¤data‘‰¤zmaxÊ?€  ¡yÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¤type§heatmapªcolorscale§Bluered¤zminÊ¿€  ¡zšÇ(Ÿ‚¿iŒ¿©!¿²ô(¿ƒc/¿’'¿3ŽÆ¾\¾TkÇ=Ÿ'•>Ç(ìb�¾Ã¡•¾jÁ”¾º’˜¾Î¿›¾„‡8¾f¼=Ø¡©>þ¹?Â•K?Ç(D�¾"<€¾sâx¾÷€¾Ü‡¾ÕE¾‘¶Ó=šú¹>$Q?ËîK?Ç(¼û`¾�0V¾y;E¾ñ’[¾¾$j¾x”Ý½M“>µi²>à?ñJ?Ç(Ð6¾¡þ(¾žO<¾R�@¾¤DA¾•½�Ñ0>á È>kj?NšK?Ç(TË'¾�“&¾Ûl'¾�M)¾�ß3¾**8¼NÜt>Ô´Û>,A ?KžM?Ç(V­‚¾OI ¾ç—±¾}ÏÐ¾6ß¾‹P¾�E¶>Ò??ÍÙ0?«�S?Ç(2Ä«¾Mä±¾L~Æ¾¯Óá¾7ò¾+cÀ¾v! =ƒÊ?ºh5?Ã™T?Ç(g»¾Ü¶Ô¾—é¾_¤¿j‘¿nQá¾¢ÍD¾zÒx>i·,?uùX?Ç(Æ(æ¾ZQ÷¾å­¿É�¿L÷¿úsï¾·€†¾šP½Š•À>Î48?©transposeÃ©showscaleÃ¡xÇ(  €?   @  @@  €@   @  À@  à@   A  A   AÙ5c6e0de0c-3901-11f0-234e-bd09c571f662/70ef6091712c9d41„¦layout†¥xaxisƒ¨tickvalsÇ(  €?   @  @@  €@   @  À@  à@   A  A   A¥title�¤text®Dealer showing¨ticktextš¡AÊ@   Ê@@  Ê@€  Ê@   Ê@À  Ê@à  ÊA   ÊA  ÊA   ¨template‚¦layoutÞ ©coloraxis�¨colorbar‚¥ticks ¬outlinewidthÊ    ¥xaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white©hovermode§closest­paper_bgcolor¥white£geo†©showlakesÃ¨showlandÃ©landcolor§#E5ECF6§bgcolor¥white¬subunitcolor¥white©lakecolor¥whiteªcolorscaleƒªsequentialš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921©diverging›’Ê    §#8e0152’Ê=ÌÌÍ§#c51b7d’Ê>LÌÍ§#de77ae’Ê>™™š§#f1b6da’Ê>ÌÌÍ§#fde0ef’Ê?   §#f7f7f7’Ê?™š§#e6f5d0’Ê?333§#b8e186’Ê?LÌÍ§#7fbc41’Ê?fff§#4d9221’Ê?€  §#276419¯sequentialminusš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921¥yaxis‡©gridcolor¥white­zerolinewidthÊ@   ¥title�¨standoffÊAp  ¥ticks ­zerolinecolor¥whiteªautomarginÃ©linecolor¥white­shapedefaults�¤line�¥color§#2a3f5fªhoverlabel�¥align¤left¦mapbox�¥style¥light¥polarƒ«angularaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6ªradialaxisƒ©gridcolor¥white¥ticks ©linecolor¥white¯autotypenumbers¦strict¤font�¥color§#2a3f5f§ternary„¥aaxisƒ©gridcolor¥white¥ticks ©linecolor¥white§bgcolor§#E5ECF6¥caxisƒ©gridcolor¥white¥ticks ©linecolor¥white¥baxisƒ©gridcolor¥white¥ticks ©linecolor¥white²annotationdefaultsƒ©arrowheadÊ    ªarrowwidthÊ?€  ªarrowcolor§#2a3f5f¬plot_bgcolor§#E5ECF6¥title�¡xÊ=LÌÍ¥sceneƒ¥xaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥zaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¥yaxis‡©gridcolor¥white©gridwidthÊ@   ¯backgroundcolor§#E5ECF6¥ticks ®showbackgroundÃ­zerolinecolor¥white©linecolor¥white¨colorwayš§#636efa§#EF553B§#00cc96§#ab63fa§#FFA15A§#19d3f3§#FF6692§#B6E880§#FF97FF§#FECB52¤dataÞ ®scatterpolargl‘‚¤type®scatterpolargl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦carpet‘ƒ¥baxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¤type¦carpet¥aaxis…©gridcolor¥white¬endlinecolor§#2a3f5f®minorgridcolor¥white®startlinecolor§#2a3f5f©linecolor¥white¬scatterpolar‘‚¤type¬scatterpolar¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©parcoords‘‚¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©parcoords§scatter‘‚¤type§scatter¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ²histogram2dcontour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type²histogram2dcontourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921§contour‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§contourªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattercarpet‘‚¤type­scattercarpet¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦mesh3d‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type¦mesh3d§surface‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§surfaceªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­scattermapbox‘‚¤type­scattermapbox¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ªscattergeo‘‚¤typeªscattergeo¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ©histogram‘‚¤type©histogram¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    £pie‘‚¤type£pieªautomarginÃªchoropleth‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤typeªchoropleth©heatmapgl‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©heatmapglªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921£bar‘„¤type£bar§error_y�¥color§#2a3f5f§error_x�¥color§#2a3f5f¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   §heatmap‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type§heatmapªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921­contourcarpet‘‚¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type­contourcarpet¥table‘ƒ¤type¥table¦header‚¤line�¥color¥white¤fill�¥color§#C8D4E3¥cells‚¤line�¥color¥white¤fill�¥color§#EBF0F8©scatter3d‘ƒ¤line�¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type©scatter3d¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¨barpolar‘‚¤type¨barpolar¦marker�¤line‚¥color§#E5ECF6¥widthÊ?   ©scattergl‘‚¤type©scattergl¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    «histogram2d‘ƒ¨colorbar‚¥ticks ¬outlinewidthÊ    ¤type«histogram2dªcolorscaleš’Ê    §#0d0887’Ê=ãŽ9§#46039f’Ê>cŽ9§#7201a8’Ê>ªª«§#9c179e’Ê>ãŽ9§#bd3786’Ê?8ä§#d8576b’Ê?*ª«§#ed7953’Ê?Gr§#fb9f3a’Ê?cŽ9§#fdca26’Ê?€  §#f0f921®scatterternary‘‚¤type®scatterternary¦marker�¨colorbar‚¥ticks ¬outlinewidthÊ    ¦heightÊC–  ¦margin„¡lÊ    ¡bÊ    ¡rÊA   ¡tÊAð  ¥yaxisƒ¨tickvalsÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¥title�¤textªPlayer sum¨ticktextÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¥widthÊC–  ¦config…¨showLinkÂ¨editableÂªresponsiveÃªstaticPlotÂªscrollZoomÃ¦frames�¤data‘‰¤zmaxÊ?€  ¡yÇ(  @A  PA  `A  pA  €A  ˆA  �A  ˜A   A  ¨A¤type§heatmapªcolorscale¥Greys¤zminÊ¿€  ¡zšÇ(fff?fff?fff?fff?fff?fff?fff¿fff¿fff¿fff¿Ç(fff?fff?fff?fff?fff?fff?fff¿fff¿fff¿fff¿Ç(fff?fff?fff?fff?fff?fff?fff¿fff¿fff¿fff¿Ç(fff?fff?fff?fff?fff?fff?fff¿fff¿fff¿fff¿Ç(fff?fff?fff?fff?fff?fff?fff¿fff¿fff¿fff¿Ç(fff?fff?fff?fff?fff?fff?fff¿fff¿fff¿fff¿Ç(fff?fff?fff?fff?fff?fff?fff¿fff¿fff¿fff¿Ç(fff?fff?fff?fff?fff?fff?fff¿fff¿fff¿fff¿Ç(fff?fff?fff?fff?fff?fff?fff¿fff¿fff¿fff¿Ç(fff?fff?fff?fff?fff?fff?fff?fff¿fff¿fff¿©transposeÃ©showscaleÂ¡xÇ(  €?   @  @@  €@   @  À@  à@   A  A   A¥nbpkgŠ¯install_time_nsÎíG:[¬instantiatedÃ²installed_versions‡ªStatistics¦stdlib©StatsBase§0.33.21­LinearAlgebra¦stdlib§PlutoUI¦0.7.60°HypertextLiteral¥0.9.5¬LaTeXStrings¥1.3.1«PlutoPlotly¥0.4.6°terminal_outputs‰ªStatisticsÚ@
[0m[1mResolving...[22m
[90m===[39m
[32m[1m  No Changes[22m[39m to `/tmp/jl_k1LQyO/Project.toml`
[32m[1m  No Changes[22m[39m to `/tmp/jl_k1LQyO/Manifest.toml`

[0m[1mInstantiating...[22m
[90m===[39m

[0m[1mPrecompiling...[22m
[90m===[39m
[32m[1m  Activating[22m[39m project at `/tmp/jl_k1LQyO`©StatsBaseÚ@
[0m[1mResolving...[22m
[90m===[39m
[32m[1m  No Changes[22m[39m to `/tmp/jl_k1LQyO/Project.toml`
[32m[1m  No Changes[22m[39m to `/tmp/jl_k1LQyO/Manifest.toml`

[0m[1mInstantiating...[22m
[90m===[39m

[0m[1mPrecompiling...[22m
[90m===[39m
[32m[1m  Activating[22m[39m project at `/tmp/jl_k1LQyO`¤BaseÚ@
[0m[1mResolving...[22m
[90m===[39m
[32m[1m  No Changes[22m[39m to `/tmp/jl_k1LQyO/Project.toml`
[32m[1m  No Changes[22m[39m to `/tmp/jl_k1LQyO/Manifest.toml`

[0m[1mInstantiating...[22m
[90m===[39m

[0m[1mPrecompiling...[22m
[90m===[39m
[32m[1m  Activating[22m[39m project at `/tmp/jl_k1LQyO`ªnbpkg_syncÚ@
[0m[1mResolving...[22m
[90m===[39m
[32m[1m  No Changes[22m[39m to `/tmp/jl_k1LQyO/Project.toml`
[32m[1m  No Changes[22m[39m to `/tmp/jl_k1LQyO/Manifest.toml`

[0m[1mInstantiating...[22m
[90m===[39m

[0m[1mPrecompiling...[22m
[90m===[39m
[32m[1m  Activating[22m[39m project at `/tmp/jl_k1LQyO`­LinearAlgebraÚ@
[0m[1mResolving...[22m
[90m===[39m
[32m[1m  No Changes[22m[39m to `/tmp/jl_k1LQyO/Project.toml`
[32m[1m  No Changes[22m[39m to `/tmp/jl_k1LQyO/Manifest.toml`

[0m[1mInstantiating...[22m
[90m===[39m

[0m[1mPrecompiling...[22m
[90m===[39m
[32m[1m  Activating[22m[39m project at `/tmp/jl_k1LQyO`§PlutoUIÚ@
[0m[1mResolving...[22m
[90m===[39m
[32m[1m  No Changes[22m[39m to `/tmp/jl_k1LQyO/Project.toml`
[32m[1m  No Changes[22m[39m to `/tmp/jl_k1LQyO/Manifest.toml`

[0m[1mInstantiating...[22m
[90m===[39m

[0m[1mPrecompiling...[22m
[90m===[39m
[32m[1m  Activating[22m[39m project at `/tmp/jl_k1LQyO`°HypertextLiteralÚ@
[0m[1mResolving...[22m
[90m===[39m
[32m[1m  No Changes[22m[39m to `/tmp/jl_k1LQyO/Project.toml`
[32m[1m  No Changes[22m[39m to `/tmp/jl_k1LQyO/Manifest.toml`

[0m[1mInstantiating...[22m
[90m===[39m

[0m[1mPrecompiling...[22m
[90m===[39m
[32m[1m  Activating[22m[39m project at `/tmp/jl_k1LQyO`«PlutoPlotlyÚ@
[0m[1mResolving...[22m
[90m===[39m
[32m[1m  No Changes[22m[39m to `/tmp/jl_k1LQyO/Project.toml`
[32m[1m  No Changes[22m[39m to `/tmp/jl_k1LQyO/Manifest.toml`

[0m[1mInstantiating...[22m
[90m===[39m

[0m[1mPrecompiling...[22m
[90m===[39m
[32m[1m  Activating[22m[39m project at `/tmp/jl_k1LQyO`¬LaTeXStringsÚ@
[0m[1mResolving...[22m
[90m===[39m
[32m[1m  No Changes[22m[39m to `/tmp/jl_k1LQyO/Project.toml`
[32m[1m  No Changes[22m[39m to `/tmp/jl_k1LQyO/Manifest.toml`

[0m[1mInstantiating...[22m
[90m===[39m

[0m[1mPrecompiling...[22m
[90m===[39m
[32m[1m  Activating[22m[39m project at `/tmp/jl_k1LQyO`§enabledÃ·restart_recommended_msgÀ´restart_required_msgÀ­busy_packages�¶waiting_for_permissionÂÙ,waiting_for_permission_but_probably_disabledÂ«cell_inputsÞ ÄÙ$9fe42679-dce3-4ee3-b565-eed4ff7d8e4d„§cell_idÙ$9fe42679-dce3-4ee3-b565-eed4ff7d8e4d¤codeÙÑmd"""
### Figure 5.2:

The optimal policy and state-value function for blackjack found by Monte Carlo ES.  The state value function shown was computed from the action-value function found by Monte Carlo ES
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$06960937-a87a-4015-bdeb-5d17aa41fe6b„§cell_idÙ$06960937-a87a-4015-bdeb-5d17aa41fe6b¤codeÙÃfunction plot_blackjack_value(v)
	uagrid, nuagrid = make_value_grid(v)
	p1 = plot_value(uagrid, showscale=true, width = 400)
	p2 = plot_value(nuagrid, showscale=true, width = 400)
	
	(p1, p2)
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$abdcbbad-747a-41ba-a95d-82404e735793„§cell_idÙ$abdcbbad-747a-41ba-a95d-82404e735793¤codeÚ;function make_Ïµsoft_policy!(v::AbstractVector{T}, Ïµ::T) where T <: Real
	vmax = maximum(v)
	v .= T.(isapprox.(v, vmax))
	s = sum(v)
	c = Ïµ / length(v)
	d = one(T)/s - Ïµ #value to add to actions that are maximizing
	for i in eachindex(v)
		if v[i] == 1
			v[i] = d + c
		else
			v[i] = c
		end
	end
	return v
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$846ccb44-a18b-4d87-bbf8-fc59eaf87708„§cell_idÙ$846ccb44-a18b-4d87-bbf8-fc59eaf87708¤codeÙ`md"""
Number of Episodes: $(@bind opmc1 confirm(NumberField(1:10_000_000, default = 1_000)))
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$154edd83-350d-4acf-adfb-6a2d20599b53„§cell_idÙ$154edd83-350d-4acf-adfb-6a2d20599b53¤codeÙÖfunction showrace(track, Ï€)
	@htl("""
		<div style = "display: flex;">
		$(rendertrack(track; episode = runrace(Ï€; track = track)))
		$(rendertrack(track; episode = runrace(Ï€; track = track)))
		</div>
	""")
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$ff9276eb-2151-4a6f-8257-8348047a9f4e„§cell_idÙ$ff9276eb-2151-4a6f-8257-8348047a9f4e¤codeÙŠrace_episode2 = race_track_episode((position = rand(track2.start), velocity = (0, 0)), rand(racetrack_actions), Ï€_racetrack_rand, track2)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$6f914006-1d8d-41f5-ae8a-fbe0b336946c„§cell_idÙ$6f914006-1d8d-41f5-ae8a-fbe0b336946c¤codeÙ[begin
	run3_2
	showrace(track2, create_policy_function(Ï€star3_racetrack2, track2_mdp))
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$4197cc28-b24c-48cb-bd8d-ef998983ad77„§cell_idÙ$4197cc28-b24c-48cb-bd8d-ef998983ad77¤codeÙ'struct Ordinary <: ImportanceMethod end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$e67d9deb-a074-48ba-84db-2e6938ea01f8„§cell_idÙ$e67d9deb-a074-48ba-84db-2e6938ea01f8¤codeÚMfunction monte_carlo_pred_Q(Ï€_target::Matrix{T}, Ï€_behavior::Matrix{T}, mdp::MDP_Opaque{S, A, F, G}, Î³::T; num_episodes::Integer = 1000, qinit::T = zero(T), Q::Matrix{T} = ones(T, length(mdp.actions), length(mdp.states)) .* qinit, historystateindex::Integer = 1, samplemethod::ImportanceMethod = Ordinary(), override_state_init::Bool = false, use_target_initial_action::Bool = false, sampleinds = 1:num_episodes) where {T <: AbstractFloat, S, A, F, G}
	
	check_policy(Ï€_target, mdp)
	check_policy(Ï€_behavior, mdp)
	@assert all(x -> x != 0, Ï€_behavior) #behavior policy must have full coverage
	
	#initialize
	counts = zeros(T, length(mdp.actions), length(mdp.states))
	valuehistory = zeros(T, length(sampleinds))
	weighthistory = ones(T, length(sampleinds))
	sampleind = 1

	for i in 1:num_episodes
		#if only interested in one state then always initialize there
		s0 = override_state_init ? mdp.states[historystateindex] : mdp.state_init()
		Ï€_init = use_target_initial_action ? Ï€_target : Ï€_behavior
		i_a0 = sample_action(Ï€_init, mdp.statelookup[s0])
		a0 = mdp.actions[i_a0]
		# (s0, a0) = initialize_episode()
		(states, actions, rewards) = mdp.simulator(s0, a0, Ï€_behavior)
	
		#update value function for each trajectory
		w = updateQ!(mdp, Q, counts, Ï€_target, Ï€_behavior, states, actions, rewards, Î³, samplemethod)

		#for selected state check value
		if i == sampleinds[sampleind]
			valuehistory[sampleind] = sum(view(Q, :, historystateindex) .* view(Ï€_target, :, historystateindex))
			weighthistory[sampleind] = w
			sampleind += 1
		end
	end
	return valuehistory, Q, weighthistory 
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$82a1f11e-b1b3-4c7d-ab9d-9f6136ae8195„§cell_idÙ$82a1f11e-b1b3-4c7d-ab9d-9f6136ae8195¤codeÙ6const onestate_Ï€_b = make_random_policy(onestate_mdp)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$11f8290f-f589-49ff-9602-99ccc4192884„§cell_idÙ$11f8290f-f589-49ff-9602-99ccc4192884¤codeÙ•sampleracepolicy(create_policy_function(Ï€star1_racetrack2, track2_mdp); track = track2, trackname = "Track 2", policyname = "Off policy MC Control")¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$7fb4244c-828a-49d6-a15b-178fa3a42e00„§cell_idÙ$7fb4244c-828a-49d6-a15b-178fa3a42e00¤codeÙv#policy defined in Example 5.1 which sticks on sums of 20 or 21
const Ï€_blackjack1 = make_simple_blackjack_policy(20)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$0609ad22-0adc-4e4f-afed-b7a46d216576„§cell_idÙ$0609ad22-0adc-4e4f-afed-b7a46d216576¤codeÙusampleracepolicy(create_policy_function(Ï€star2_racetrack1, track1_mdp); policyname = "Monte Carlo Exploring Starts")¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$61eb74eb-88e0-42e6-a14b-3730a800694d„§cell_idÙ$61eb74eb-88e0-42e6-a14b-3730a800694d¤codeÙ8const onestate_Ï€_target = reshape([1.0f0; 0.0f0], 2, 1)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$6a96304b-add3-4135-8ccf-46cc23859d53„§cell_idÙ$6a96304b-add3-4135-8ccf-46cc23859d53¤codeÙ7md"""
#### Off-policy MC Control Racetrack Solution
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$c883748c-76b9-4086-8698-b40df51390da„§cell_idÙ$c883748c-76b9-4086-8698-b40df51390da¤codeÚÛmd"""
> ### *Exercise 5.4* 
> The pseudocode for Monte Carlo ES is inefficient because, for each state-action pair, it maintains a list of all returns and repeatedly calculates their mean.  It would be more dfficient to use techniques similar to those explained in Section 2.4 to maintain just the mean and a count (for each state-action pair) and update them incrementally.  Describe how the pseudocode would be altered to achieve this.

Returns(s,a) will not maintain a list but instead be a list of single values for each state-action pair.  Additionally, another list Counts(s,a) should be initialized at 0 for each pair.  When new G values are obtained for state-action pairs, the Count(s,a) value should be incremented by 1.  Then Returns(s,a) can be updated with the following formula: 

$\text{Returns}(s,a) = \frac{\text{Returns}(s,a) \times (\text{Count}(s,a) - 1) + G(s,a)}{\text{Count}(s,a)} = \text{Returns}(s,a) + \frac{G(s,a) - \text{Returns}(s,a)}{\text{Count}(s,a)}$
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$f071b7e2-3f78-4132-8b84-f810f178c89d„§cell_idÙ$f071b7e2-3f78-4132-8b84-f810f178c89d¤codeÚ£begin 
	abstract type OneStateAction end
	struct Left <: OneStateAction end
	struct Right <: OneStateAction end
	struct OneState end

	const one_state_actions = [Left(), Right()]
	const one_state_action_lookup = Dict([Left() => 1, Right() => 2])
	
	one_state_step(::Right) = (0.0f0, true)
	one_state_step(::Left) = rand() <= 0.1 ? (1.0f0, true) : (0.0f0, false)

	

	function one_state_simulator(s0, a0::OneStateAction, Ï€)
		state_history = [s0]
		action_history = Vector{OneStateAction}([a0])

		(r, term) = one_state_step(a0)
		reward_history = [r]
		
		while !term
			i_a = sample_action(Ï€, 1)
			a = one_state_actions[i_a]
			push!(state_history, OneState())
			push!(action_history, a)
			(r, term) = one_state_step(a)
			push!(reward_history, r)
		end
		return (state_history, action_history, reward_history)	
	end
	const onestate_mdp = MDP_Opaque([OneState()], [Left(), Right()], () -> OneState(), one_state_simulator)
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$8d7b9826-b52c-4d5a-8c63-e83a1229a0be„§cell_idÙ$8d7b9826-b52c-4d5a-8c63-e83a1229a0be¤codeÙcmd"""
Example trajectories after training for $(mcÏµs2.episodes) episodes with Ïµ= $(mcÏµs2.Ïµ)
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$67e535c7-437a-49ba-b5ab-9dfe63fe4aaa„§cell_idÙ$67e535c7-437a-49ba-b5ab-9dfe63fe4aaa¤codeÙ*md"""
#### Racetrack Environment Setup
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$c8f3f7e3-be7e-4615-a667-d9f789928883„§cell_idÙ$c8f3f7e3-be7e-4615-a667-d9f789928883¤codeÙ¾#updates the value estimates at a given state using the future discounted return and the importance-sampling ratio
updatevalue(::Ordinary, q::T, g::T, w::T, c::T) where T<:Real = (w*g - q)/c¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$30809344-b4ab-468b-b4b7-5ef3dca5ffc7„§cell_idÙ$30809344-b4ab-468b-b4b7-5ef3dca5ffc7¤codeÚÙmd"""
> ### *Exercise 5.2* 
> Suppose every-visit MC was used instead of first-visit MC on the blackjack task.  Would you expect the results to be very different?  Why or why not?

As an episode proceeds in blackjack the states will not repeat since every time a card is dealt the player sum changes, or the usable Ace flag changes.  Thus the check ensuring that only the first visit to a state is counted in the return average will have no effect on the MC evaluation.
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$e2a720b0-a8c4-43a2-bf34-750ff3323004„§cell_idÙ$e2a720b0-a8c4-43a2-bf34-750ff3323004¤codeÚšmd"""
## 5.4 Monte Carlo Control without Exploring Starts

To only way to ensure all state-action pairs are visited without exploring starts is to use a policy with a non-zero probability of visiting all such states.  One policy that meets this criterion is an *Ïµ-soft* policy meaning that $\pi(a \vert s) > 0 \: \forall \: s \in \mathcal{S}$.  To achieve this with Monte Carlo Control, we simply update the policy to be $\epsilon$-greedy for every Q update, so the maximizing (greedy) action is given a probability $1 - \epsilon + \frac{\epsilon}{\vert \mathcal{A}(s) \vert}$ and all other actions are given the probability $\frac{\epsilon}{\vert \mathcal{A}(s) \vert}$.

Below is code implementing MC control for Ïµ-soft policies.  It is mostly identical to the every visit method except the policy is always used to select the initial action and the policy update uses an Ïµ-greedy update rather than a greedy one.
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$1067fcc4-cbc6-453c-a996-d420c498619a„§cell_idÙ$1067fcc4-cbc6-453c-a996-d420c498619a¤codeÙnsampleracepolicy(create_policy_function(Ï€star1_racetrack1, track1_mdp); policyname = "Off policy MC Control")¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$6496c993-6d47-4a6e-a497-2a2de172fbc3„§cell_idÙ$6496c993-6d47-4a6e-a497-2a2de172fbc3¤codeÙYmd"""
### Off-policy Monte-Carlo Prediction Algorithm for Estimating $Q \approx q_Ï€$
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$aa647f3e-a4b2-4825-bb2a-1c2469d2c0eb„§cell_idÙ$aa647f3e-a4b2-4825-bb2a-1c2469d2c0eb¤codeÙœsampleracepolicy(create_policy_function(Ï€star2_racetrack2, track2_mdp); track = track2, trackname = "Track 2", policyname = "Monte Carlo Exploring Starts")¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$1d3d509c-b11b-4c57-b100-9bcf0489af2b„§cell_idÙ$1d3d509c-b11b-4c57-b100-9bcf0489af2b¤codeÙåfunction create_greedy_policy(Q::Matrix{T}; c = 1000, Ï€ = copy(Q)) where T<:Real
	vhold = zeros(T, size(Q, 1))
	for j in 1:size(Q, 2)
		vhold .= Q[:, j]
		make_greedy_policy!(vhold; c = c)
		Ï€[:, j] .= vhold
	end
	return Ï€
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$989ccacd-b410-4967-bf6a-9244e3be785d„§cell_idÙ$989ccacd-b410-4967-bf6a-9244e3be785d¤codeÙ`md"""
Number of Episodes: $(@bind mces1 confirm(NumberField(1:10_000_000, default = 1_000)))
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$b352d98e-0854-45e3-ac73-8ef434525563„§cell_idÙ$b352d98e-0854-45e3-ac73-8ef434525563¤code·md"""
##### Track 1
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$202eb066-877d-4537-85b2-31b41db8eca0„§cell_idÙ$202eb066-877d-4537-85b2-31b41db8eca0¤codeÙtinitialize_state_value(mdp::MDP_Opaque; vinit::T = 0.0f0) where T<:AbstractFloat = ones(length(mdp.states)) .* vinit¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$3955d71a-3105-445a-868d-66ba0b3dc515„§cell_idÙ$3955d71a-3105-445a-868d-66ba0b3dc515¤codeÙŠrace_episode1 = race_track_episode((position = rand(track1.start), velocity = (0, 0)), rand(racetrack_actions), Ï€_racetrack_rand, track1)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$f406be9e-3e3f-4b55-99b0-4858c774ed96„§cell_idÙ$f406be9e-3e3f-4b55-99b0-4858c774ed96¤codeÙ8md"""
## 5.2 Monte Carlo Estimation of Action Values
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$648bfc3f-0649-4401-a97f-89e21057f7b7„§cell_idÙ$648bfc3f-0649-4401-a97f-89e21057f7b7¤codeÙcmd"""
Example trajectories after training for $(mcÏµs1.episodes) episodes with Ïµ= $(mcÏµs1.Ïµ)
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$e10378eb-12b3-4468-9c22-1838107da450„§cell_idÙ$e10378eb-12b3-4468-9c22-1838107da450¤codeÙ,md"""
### Example 5.5: Infinite Variance
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$2e57e4b5-d228-4ce3-b9d8-cf4375bb7c50„§cell_idÙ$2e57e4b5-d228-4ce3-b9d8-cf4375bb7c50¤codeÙ%md"""
# Dependencies and Settings
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$edb4ad06-5e6e-48c4-9ee4-ae0b92927a91„§cell_idÙ$edb4ad06-5e6e-48c4-9ee4-ae0b92927a91¤codeÙ@md"""
Example trajectories after $mces2 episodes of training
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$9df79a71-e58a-497b-bb02-debb69144925„§cell_idÙ$9df79a71-e58a-497b-bb02-debb69144925¤codeÙ)const track1_mdp = make_track_mdp(track1)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$cebb79b7-c9d6-4b79-ba0e-b2f3c7587724„§cell_idÙ$cebb79b7-c9d6-4b79-ba0e-b2f3c7587724¤codeÚémd"""
> ### *Exercise 5.12: Racetrack (programming)*  
> Consider driving a race car around a turn like those shown in Figure 5.5.  You want to go as fast as possible, but not so fast as to run off the track.  In our simplified racetrack, the car is at one of a discrete set of grid positions, the cells in the diagram.  The velocity is also discrete, a number of grid cells moved horizontally and vertically per time step.  The actions are increments to the velocity components.  Each may be changed by +1, -1, or 0 in each step, for a total of nine (3x3) actions.  Both velocity components are restricted to be nonnegative and less than 5, and they cannot both be zero except at the starting line.  Each episode begins in one of the randomly selected start states with both velocity components zero and ends when the car crosses the finish line.  The rewards are -1 for each step until the car crosses the finish line.  If the car hits the track boundry, it is moved back to a random position on the starting line, both velocity components are reduced to zero, and the episode continues.  Before updating the car's location at each time step, check to see if the projected path of the car intersects the track boundary.  If it intersects the finish line, the episode ends; if it intersects anywhere else, the car is considered to have hit the track boundary and is sent back to the starting line.  To make the task more challenging, with probality 0.1 at each time step the velocity increments are both zero, independently of the intended increments.  Apply a Monte Carlo control method to this task to compute the optimal policy from each starting state.  Exhibit several trajectories following the optimal policy (but turn the noise off for these trajectories).
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$54f73eb8-dcea-4da0-83af-35720e56ccbc„§cell_idÙ$54f73eb8-dcea-4da0-83af-35720e56ccbc¤codeÚbmonte_carlo_Ïµsoft(mdp::MDP_Opaque, Ïµ::T, Î³::T, num_episodes; Q_init::Matrix{T} = initialize_state_action_value(mdp; qinit = zero(T)), Ï€_init::Matrix{T} = make_random_policy(mdp; init = one(T)), quench_episode = num_episodes, decay_Ïµ = false) where T <: Real = monte_carlo_Ïµsoft(mdp, Ïµ, Ï€_init, Q_init, Î³, num_episodes, quench_episode, decay_Ïµ) ¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$418c045d-90c7-42d8-9126-90185f7e197b„§cell_idÙ$418c045d-90c7-42d8-9126-90185f7e197b¤codeÙ/figure_5_2(Ï€star_blackjack3, Qstar_blackjack3)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$6979db32-670d-466a-9a6e-97c2d8527f3d„§cell_idÙ$6979db32-670d-466a-9a6e-97c2d8527f3d¤codeÚºmd"""
> ### *Exercise 5.7* 
> In learning curves such as those shown in Figure 5.3 error generally decreases with training, as indeed happened for the ordinary importance-sampling method.  But for the weighted importance-sampling method error first increased and then decreased.  Why do you think this happened?

In figure 5.3, the true value is about -.277 and we initialized the value function at zero.  For any given episode it is likely that the observed return will be -1.0 or 1.0 for a win or a loss.  Weighted importance sampling won't update the state value for trajectories which cannot occur in the target policy, so for some of the runs at this early state the state value is unchanged at the 0 initial value.  It is only after a certain number of episodes have occured that all of the values will be updated and produce an estimate which is worse than the initial value.  Once many samples with non zero weight are collected for each run, then the estimate starts to approach the true value again.  If instead we initialized the state value far away from the true value, then you would not see the initial increase in estimate error.  See below for an example using an initial value of 1.  In this case, no update from weighted importance sampling would produce an error larger than the initial value.

$(figure5_3(;n = 1000, vinit = 1.0f0, episodes = 100, title = "Initial Value = 1.0", caption = "Blackjack State Estimate with Bad Initialization"))
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$cd928f87-2832-4595-8ce5-79b69cc56bd9„§cell_idÙ$cd928f87-2832-4595-8ce5-79b69cc56bd9¤codeÙImd"""
#### Figure 5.5
A couple of right turns for the racetrack task.
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$ba044e4f-e2a6-4f96-8756-5b24b1bb5ca2„§cell_idÙ$ba044e4f-e2a6-4f96-8756-5b24b1bb5ca2¤codeÚy#trajectory of a random episode, arrows indicate the velocity at each step
@htl("""
<div style = "display: flex; align-items: flex-end;">
$(rendertrack(track1; episode = race_episode1))
$(rendertrack(track2; episode = race_episode2))
</div>
""")
#using a random policy on track 1, the mean time to finish on track 1 is ~2800 steps.  The best possible time when we get "lucky" with random decisions is ~12 steps with worst times ~15-30k steps

#using a random policy on track 2, the mean time to finish on track 1 is ~300 steps.  The best possible time when we get "lucky" with random decisions is ~10 steps with worst times ~2k steps¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$6d6e8916-9b36-4af1-b77d-86cb6a416f88„§cell_idÙ$6d6e8916-9b36-4af1-b77d-86cb6a416f88¤code·md"""
##### Track 1
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$cede8090-5b1a-436b-a184-fca5c4d3de48„§cell_idÙ$cede8090-5b1a-436b-a184-fca5c4d3de48¤codeÚ÷md"""
> ### *Exercise 5.5* 
> Consider an MDP with a single nonterminal state and a single action that transitions back to the nonterminal state with probability $p$ and transitions to the terminal state with probability $1-p$.  Let the reward be +1 on all transitions, and let $\gamma=1$.  Suppose you observe one episode that lasts 10 steps, with a return of 10.  What are the first-visit and every-visit estimators of the value of the nonterminal state?

For the first-visit estimator, we only consider the single future reward from the starting state which would be 10.  There is nothing to average since we just have the single value of 10 for the episode.

For the every-visit estimator, we need to average together all 10 visits to the non-terminal state.  For the first visit, the future reward is 10.  For the second visit it is 9, third 8, and so forth.  The final visit has a reward of 1, so the value estimate is the average of 10, 9, ..., 1 which is $\frac{(1+10) \times 5}{10}=\frac{55}{10} = 5.5$
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$8668ffc3-6c8c-4c25-8d47-9977bef929d2„§cell_idÙ$8668ffc3-6c8c-4c25-8d47-9977bef929d2¤codeÙ`md"""
Number of Episodes: $(@bind opmc2 confirm(NumberField(1:10_000_000, default = 1_000)))
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$5834c5e0-8a04-47ea-aab8-881c73d8fd4f„§cell_idÙ$5834c5e0-8a04-47ea-aab8-881c73d8fd4f¤code·md"""
##### Track 1
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$14536b70-35f0-46ba-93fc-3365a1e8c15c„§cell_idÙ$14536b70-35f0-46ba-93fc-3365a1e8c15c¤codeÙýmd"""
##### Results Summary
Off policy MC control training is slow because the random behavior policy takes a very long time to complete a race (~2500 or ~300 steps).  Even after 1000 episodes performance is indistinguishable from the random policy.
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$39da4cf9-5265-41bc-83d4-311e86675db7„§cell_idÙ$39da4cf9-5265-41bc-83d4-311e86675db7¤codeÙm(Ï€star_blackjack3, Qstar_blackjack3) = off_policy_MC_control(blackjack_mdp, 1.0f0; num_episodes = 3_000_000)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$d97f693d-27f2-49be-a549-07a290c95b53„§cell_idÙ$d97f693d-27f2-49be-a549-07a290c95b53¤codeÙ}#types allow dispatch for each sampling method based on different incremental update rules
abstract type ImportanceMethod end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$f9bc84ff-c2f9-4ac2-b2ce-34dfcf837a73„§cell_idÙ$f9bc84ff-c2f9-4ac2-b2ce-34dfcf837a73¤codeÙ-figure_5_2(Ï€star_blackjack, Qstar_blackjack)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$8f38a3e9-1872-4ea6-9a03-87112af4bf07„§cell_idÙ$8f38a3e9-1872-4ea6-9a03-87112af4bf07¤codeÚ(#run n episodes of a race and measure the statistics of the time required to finish
function sampleracepolicy(Ï€; n = 1000, trackname = "Track 1", policyname = "", kwargs...)
	trajs = [runrace(Ï€; kwargs...)[1] for _ in 1:n]
	randomtrajs = [runrace(s -> rand(racetrack_actions); kwargs...)[1] for _ in 1:n]
	ls = filter(x -> x > 0, length.(trajs))
	randomls = filter(x -> x > 0, length.(randomtrajs))
	f1 = ecdf(ls)
	f2 = ecdf(randomls)
	t1 = scatter(x = f1.sorted_values, y = f1.(f1.sorted_values), name = "$policyname")
	t2 = scatter(x = f2.sorted_values, y = f2.(f2.sorted_values), name = "Random Policy")
	p = plot([t1, t2], Layout(xaxis_title = "Steps to Finish Race", yaxis_title = "Percent of Episodes", xaxis_type = "log"))
	# p1 = plot(histogram(x = ls, showlegend=false), Layout(title = "$policyname", xaxis_title = "Steps to Finish Race", yaxis_title = "Number of Episodes", showlegend = false))
	# p2 = plot(histogram(x = randomls, showlegend=false), Layout(title = "Random Policy", xaxis_title = "Steps to Finish Race", yaxis_title = "Number of Episodes", showlegend = false))

	isempty(randomls) && return md"""Policy Unable to Complete race within 10,000 steps"""

	parsestd(v) = isnan(std(v)) ? NaN : round(Int64, std(v))
	
	md"""
	$(Markdown.parse("Statistics for Steps to Finish Race on $trackname"))
	
	| Statistic | $(Markdown.parse(policyname)) | Random Policy |
	| --- | --- | --- |
	|Mean | $(round(Int64, mean(ls))) | $(round(Int64, mean(randomls))) |
	|Median | $(round(Int64, median(ls))) | $(round(Int64, median(randomls))) |
	|Std| $(parsestd(ls)) | $(parsestd(randomls)) |
	|Minimum| $(round(Int64, minimum(ls))) | $(round(Int64, minimum(randomls))) |
	|Maximum| $(round(Int64, maximum(ls))) | $(round(Int64, maximum(randomls))) |

	Cummulative Distribution Function of Steps to Finish Race
	$p
	"""
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$627d5aa3-974f-4949-8b65-9500eba1d7cc„§cell_idÙ$627d5aa3-974f-4949-8b65-9500eba1d7cc¤codeÚd#recreation of figure 5.2
function figure_5_2(Ï€star_blackjack, Qstar_blackjack)
	policyplot = plot_blackjack_policy(Ï€star_blackjack)
	vstar = sum(Qstar_blackjack .* Ï€star_blackjack, dims = 1)[:]
	# vhit = Qstar_blackjack[1, :][:]
	# vstick = Qstar_blackjack[2, :][:]
	# vdiff = (vhit .- vstick)
	valueplot = plot_blackjack_value(vstar)
	# policyplot = plot_blackjack_value(vdiff)
	vtitle = md"""$v_*$"""
	ptitle = md"""$Ï€_*$"""

	md"""
	| |$\pi_*$ (Black = Stick, White = Hit)|$v_*$|
	|---|:---:|:---:|
	|Usable ace|$(policyplot[1])|$(valueplot[1])|
	|No usable ace|$(policyplot[2])|$(valueplot[2])|
	"""
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$02dd1e77-2a7e-4123-94db-d17b31a8b15a„§cell_idÙ$02dd1e77-2a7e-4123-94db-d17b31a8b15a¤codeÙ4const blackjack_state1 = BlackjackState(13, 2, true)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$09b67730-39e7-4209-8117-6bc3adfb342a„§cell_idÙ$09b67730-39e7-4209-8117-6bc3adfb342a¤codeÚKmd"""
$\begin{flalign}
	&=0.1 \sum_{N=1}^\infty \left ( \frac{1}{2} \right ) ^N 0.9^{N-1} \left ( \frac{\sum_{i=1}^N 2^i}{N} \right ) ^2 \\
	&=\frac{0.1}{0.9} \sum_{N=1}^\infty 0.45^{N} N^{-2} \left ( \sum_{i=1}^N 2^i \right ) ^2 \\
\end{flalign}$

Consider the term: $\left ( \sum_{i=1}^N 2^i \right ) ^2 = (2 + 2^2 + 2^3 + \cdots + 2^N)^2 \gt 2^{2N}$ since all the other terms in the parentheses are positive.

$\begin{flalign}
	&\gt\frac{0.1}{0.9} \sum_{N=1}^\infty 0.45^{N} N^{-2} 2^{2N} \\
	&= \frac{0.1}{0.9} \sum_{N=1}^\infty 0.45^{N} N^{-2} 4^{N} \\
	&= \frac{0.1}{0.9} \sum_{N=1}^\infty \frac{1.8^{N}}{N^{2}} \\
\end{flalign}$

The question is then reduced to whether the following infinite sum diverges: $\sum_{N=1}^\infty \frac{1.8^{N}}{N^{2}}$.  Consider the logarithm of each term in the series $\log {\frac{1.8^N}{N^2}} = \log{1.8^N} - \log{N^2} = N \log{1.8} - 2 \log{N}$.  As N approaches infinity $N \gt \log{N}$ so the log of each term diverges as do the terms individually as does the series.  Therefore the variance diverges with ever-visit MC as it does with first visit MC.
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$b7dfc031-6bf6-44cd-b814-05f693a0a27d„§cell_idÙ$b7dfc031-6bf6-44cd-b814-05f693a0a27d¤codeÚ<#Ïµ-soft training also produces a policy that can finish the race but results heavily depend on the value of Ïµ.  A small Ïµ around 2% seems to produce the best results that exceed that of even the exploring starts algorithm
begin
	run3_1
	showrace(track1, create_policy_function(Ï€star3_racetrack1, track1_mdp))
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$2572e35c-e6a3-4562-aa0f-6a5ab32d39ea„§cell_idÙ$2572e35c-e6a3-4562-aa0f-6a5ab32d39ea¤codeÚ	@htl("""
<div style="display: flex; flex-direction: row; align-items: flex-start; justify-content: center; background-color: rgb(100, 100, 100)">
	
	<div class="backup">
		<div>State Value Function</div>
		<div class="circlestate"></div>
		<div class="arrow"></div>
		<div class="circleaction"></div>
		<div class="arrow"></div>
		<div class="circlestate"></div>
		<div class="arrow"></div>
		<div class="circleaction"></div>
		<div style = "color: black; font-size: 30px;">&#8942;</div>
		<div class="circleaction"></div>
		<div class="arrow"></div>
		<div class="term"></div>
	</div>
	<div class="backup">
		<div>State Action Value Function</div>
		<div class="circleaction"></div>
		<div class="arrow"></div>
		<div class="circlestate"></div>
		<div class="arrow"></div>
		<div class="circleaction"></div>
		<div class="arrow"></div>
		<div class="circlestate"></div>
		<div style = "color: black; font-size: 30px;">&#8942;</div>
		<div class="circlestate"></div>
		<div class="arrow"></div>
		<div class="circleaction"></div>
		<div class="arrow"></div>
		<div class="term"></div>
	</div>
	<div>
		<div class="q_backup"></div>
	</div>
</div>

<style>

	.backup {
		margin: 5px;
	}
	.backup, .backup * {
		display: flex;
		flex-direction: column;
		align-items: center;
		justify-content: center;
		color: black;
	}
	.circlestate, .circleaction {
		margin: 0;
	}
	.circlestate::before {
		content: '';
		display: inline-block;
		border: 1px solid black;
		border-radius: 50%;
		height: 20px;
		width: 20px;
		background-color: white;
	}
	.circleaction::before {
		content: '';
		display: inline-block;
		border: 1px solid black;
		border-radius: 50%;
		height: 10px;
		width: 10px;
		background-color: black;
	}
	.arrow {
		display: flex;
		justify-content: center;
		align-items: center;
	}
	.arrow::before {
		content: '';
		display: inline-block;
		width: 2px;
		height: 30px;
		background-color: black;
		margin-bottom: 0px;
	}
	.arrow::after {
		content: '';
		display: inline-block;
		width: 4px;
		height: 4px;
		border-bottom: 3px solid black;
		border-right: 3px solid black;
		transform: translateY(-5px) rotate(45deg);
		position: relative;
	}
	.term::before {
		content: '';
		display: inline-block;
		width: 20px;
		height: 20px;
		border: 2px solid black;
		background-color: rgb(50, 50, 50);
	}
</style>
""")¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$859354fe-7f40-4658-bf12-b5ee20a815a7„§cell_idÙ$859354fe-7f40-4658-bf12-b5ee20a815a7¤codeÙ6md"""
## 5.8 Discounting-aware Importance Sampling
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$f9f6c182-62f8-4a5a-8b43-8716db468427„§cell_idÙ$f9f6c182-62f8-4a5a-8b43-8716db468427¤codeÙ)const maxspeed = maximum(racetrackspeeds)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$47daf83b-8fe9-4491-b9ae-84bd269d5546„§cell_idÙ$47daf83b-8fe9-4491-b9ae-84bd269d5546¤codeÙ$md"""
## 5.3 Monte Carlo Control
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$ba8a5804-4be3-43fe-95d7-c957ce02a1d4„§cell_idÙ$ba8a5804-4be3-43fe-95d7-c957ce02a1d4¤codeÙÍfunction make_action_style(dvx, dvy)
	((dvx==0) && (dvy==0)) && return """"""
	"""
	[dvx='$dvx'][dvy='$dvy']::after {
		content: 'â†’';
		color: red;
		transform: rotate($(atand(dvy, dvx))deg);
	}
	"""
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$481ad435-cc80-4164-882d-8310b010ca91„§cell_idÙ$481ad435-cc80-4164-882d-8310b010ca91¤codeÙ¶function make_simple_blackjack_policy(stick_sum::Integer)
	mapreduce(hcat, blackjackstates) do state
		state.sum < stick_sum && return [1.0f0, 0.0f0]
		return [0.0f0, 1.0f0]
	end
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$8bcaa31b-8caf-43da-83a0-47e0c04c2a30„§cell_idÙ$8bcaa31b-8caf-43da-83a0-47e0c04c2a30¤codeÚ@htl("""
<div style="display: flex; justify-content: space-around;">
<div>Track 1</div>
<div>Track 2</div>
</div>
<div style="display: flex; justify-content: space-between; align-items: flex-end; background-color: gray;">
$(rendertrack(track1))
$(rendertrack(track2))
</div>
""")¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$7c9486cd-1916-4e13-b415-fb113bd9e04b„§cell_idÙ$7c9486cd-1916-4e13-b415-fb113bd9e04b¤codeÙ/md"""
## 5.7 Off-policy Monte Carlo Control
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$821ce23a-524b-4203-96d6-4d5b454fe1fd„§cell_idÙ$821ce23a-524b-4203-96d6-4d5b454fe1fd¤codeÙ“sampleracepolicy(create_policy_function(Ï€star3_racetrack2, track2_mdp); track = track2, trackname = "Track 2", policyname = "Monte Carlo Ïµ-Soft")¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$dc57a71f-e44c-4385-ad2a-e6c14d5e5201„§cell_idÙ$dc57a71f-e44c-4385-ad2a-e6c14d5e5201¤codeÚômd"""
> ### *Exercise 5.14* 
> Modify the algorithm for off-policy Monte Carlo control (page 111) to use the idea of the truncated weighted-average estimator (5.10).  Note that you will first need to convert this equation to action values.

Equation (5.10)

$V(s) = \frac{\sum_{t \in \mathscr{T}(s)}\left((1-\gamma)\sum_{h=t+1}^{T(t)-1}\gamma^{h-t-1} \rho_{t:h-1} \bar{G}_{t:h} + \gamma^{T(t)-t-1} \rho_{t:T(t)-1} \bar{G}_{t:T(t)} \right)}{\sum_{t \in \mathscr{T}(s)} \left( (1-\gamma) \sum_{h=t+1}^{T(t)-1} \gamma^{h-t-1} \rho_{t:h-1} + \gamma^{T(t)-t-1} \rho_{t:T(t)-1} \right)}$

Converting this to action-value estimates:

$Q(s,a) = \frac{\sum_{t \in \mathscr{T}(s,a)}\left( R_{t+1} + (1-\gamma)\sum_{h=t+2}^{T(t)-1}\gamma^{h-t-1} \rho_{t+1:h-1} \bar{G}_{t+1:h} + \gamma^{T(t)-t-1} \rho_{t+1:T(t)-1} \bar{G}_{t+1:T(t)} \right)}{\sum_{t \in \mathscr{T}(s,a)} \left( 1 + (1-\gamma) \sum_{h=t+2}^{T(t)-1} \gamma^{h-t-1} \rho_{t+1:h-1} + \gamma^{T(t)-t-1} \rho_{t+1:T(t)-1} \right)}$

For the algorithm on page 111, need to add a variable in the loop to keep track of $\bar{G}$ both from the start of the episode forwards.  The inner loop should also start from the beginning of each episode and go forwards rather than starting at the end going backwards.  The term added to the numerator and denominator will be ready including $\bar{G}$ and $\rho$ once the end of the episode is reached.  A $\gamma$ accumulator can be initiazed at 1 and kept track of in the inner loop by repeatedly multiplying by Î³ each iteration.
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$00cd2194-af13-415a-b725-bb34832e5d9a„§cell_idÙ$00cd2194-af13-415a-b725-bb34832e5d9a¤codeÚfunction figure5_3(;n = 100, vinit = 0.0f0, targetstart = true, episodes = 10_000, title = "", caption = "Figure 5.3")
	#note that with targetstart = true, the episode will always begin with the action selected by the target policy.  Since we only care about the value estimate for this state, we only need the q value for actions taken by the target policy.  This way, every episode will produce relevant sample updates
	runsim(importancemethod) = monte_carlo_pred_V(Ï€_blackjack1, Ï€_rand_blackjack, blackjack_mdp, 1.0f0; num_episodes =  episodes, historystateindex = blackjack_stateindex1, vinit = vinit, override_state_init = true, samplemethod=importancemethod)[1]
	vhists = [[runsim(importancemethod) for _ in 1:n] for importancemethod in [Ordinary(), Weighted()]]
	errors = [[(v .- blackjack_state_value1) .^2 for v in vhists] for vhists in vhists]
	traces1 = [scatter(x = 1:episodes, y = mean(error), name = name) for (error, name) in zip(errors, ["Ordinary importance sampling", "Weighted importance sampling"])]
	p1 = plot(traces1, Layout(xaxis_type = "log", yaxis_range = [-0.1,5], legend_orientation = "h", legend_y = -0.2, xaxis_title = "Episodes", yaxis_title = "Mean square error <br> (average over $n runs)", title = title))
	
	traces2 = [scatter(x = 1:episodes, y = mean(vhist), name = name) for (vhist, name) in zip(vhists, ["Ordinary importance sampling", "Weighted importance sampling"])]
	
	p2 = plot(traces2, Layout(xaxis_type = "log", legend_orientation = "h", xaxis_title = "Episodes", yaxis_title = "State Value Estimate (average over $n runs)"))

	traces3 = [scatter(x = 1:episodes, y = var(vhist), name = name) for (vhist, name) in zip(vhists, ["Ordinary importance sampling", "Weighted importance sampling"])]
	p3 = plot(traces3, Layout(xaxis_type = "log", legend_orientation = "h", xaxis_title = "Episodes", yaxis_title = "State Value Estimate Variance Over $n runs"))
	md"""
	### $caption
	Weighted importance sampling produces lower error estimates of the value of a single blackjack state from off-policy episodes

	$p1
	"""
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$da66b3be-1fe2-4edb-9560-71ce7c0bed12„§cell_idÙ$da66b3be-1fe2-4edb-9560-71ce7c0bed12¤codeÙh(Ï€star1_racetrack2, Qstar1_racetrack2) = off_policy_MC_control(track2_mdp, 1.0f0; num_episodes = opmc2)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$d16ac2a8-1a5a-4ded-9285-d2c6cd550066„§cell_idÙ$d16ac2a8-1a5a-4ded-9285-d2c6cd550066¤codeÚ�#target policy state value estimate and variance, why is the mean squared error after 1 episode for weighted importance sampling less than the variance of the state values?  The reason is after 1 episode of weighted importance sampling, there is a greater than 50% chance of a 0% decision being made resulting in the value estimate not updating from its initial value.  Since that initial value is 0 and episodes are likely to terminate with rewards of -1 or 1, the variance is moved closer to 0 than for truly sampling the target policy rewards
const blackjack_state_value1 = estimate_blackjack_state(blackjack_state1, Ï€_blackjack1, 5_000_000) |> mean¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$830d6d61-7259-43e7-8d6d-09bc81818dd9„§cell_idÙ$830d6d61-7259-43e7-8d6d-09bc81818dd9¤code±figure_5_4(6, 10)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$e293e184-5938-40b5-a04b-5306760a06ae„§cell_idÙ$e293e184-5938-40b5-a04b-5306760a06ae¤codeÙÔfunction estimate_blackjack_state(blackjackstate, Ï€_blackjack, num_episodes)
	stateindex = blackjack_mdp.statelookup[blackjackstate]
	estimate_mdp_state(blackjack_mdp, Ï€_blackjack, stateindex, num_episodes)
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$66645f1a-b591-43e7-b931-8ed0cc7d6898„§cell_idÙ$66645f1a-b591-43e7-b931-8ed0cc7d6898¤codeÙ]begin
	race_1_2
	showrace(track2, create_policy_function(Ï€star1_racetrack2, track2_mdp))
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$658ceeaa-1b45-47bd-a364-eaa1759d17ac„§cell_idÙ$658ceeaa-1b45-47bd-a364-eaa1759d17ac¤codeÚÊ#starting in state s0 and with policy Ï€, complete a single episode on given track returning the trajectory and rewards
function race_track_episode(s0::S, a0::A, Ï€, track; maxsteps = Inf, failchance = 0.1) where {S, A}
    # @assert in(s0.position, track.start)
    # @assert s0.velocity == (0, 0)

    #take a forward step from current state returning new state and whether or not the episode is over
    function step(s, a)
        pnew, vnew, psquare = project_path(s.position, s.velocity, a)
		# setdiff!(psquare, track.body, track.start)
        # fsquares = intersect(psquare, track.finish)
		finish = any(square -> in(square, track.finish), psquare)
        # outsquares = setdiff!(psquare, track.body, track.start)
        # if !isempty(fsquares) #car finished race
		if finish # care finished race
            ((position = first(intersect!(psquare, track.finish)), velocity = (0, 0)), true)
        elseif !isempty(setdiff!(psquare, track.body, track.start)) #car path went outside of track
            ((position = rand(track.start), velocity = (0, 0)), false)
        else
            ((position = pnew, velocity = vnew), false)
        end
    end

	states = [s0]
	actions = [a0]
    rewards = Vector{Float32}()

    function get_traj(s, a, nstep = 1)
        (snew, isdone) = step(s, a)
		push!(rewards, -1.0f0)
		while !isdone && (nstep < maxsteps)
        	anew = Ï€(snew)
			push!(states, snew)
			push!(actions, anew)
			(snew, isdone) = step(snew, rand() > failchance ? anew : (0, 0))
			push!(rewards, -1.0f0)
			nstep += 1
		end
		return isdone
    end

    isdone = get_traj(s0, a0)
	!isdone && length(states) >= maxsteps && return Vector{S}(), Vector{A}(), Vector{Float32}()

    return states, actions, rewards
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$04752549-ffca-4e31-869e-714f835d3e85„§cell_idÙ$04752549-ffca-4e31-869e-714f835d3e85¤codeÙIconst blackjack_stateindex1 = blackjack_mdp.statelookup[blackjack_state1]¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$e89706f1-0c6a-4da4-82a1-ccf153f2e186„§cell_idÙ$e89706f1-0c6a-4da4-82a1-ccf153f2e186¤codeÙ;md"""
#### Monte Carlo Exploring Starts Solution Method
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$ab10ccd7-75ba-475c-af26-f8b36daaf880„§cell_idÙ$ab10ccd7-75ba-475c-af26-f8b36daaf880¤codeÚlmd"""
> ### *Exercise 5.11* 
> In the boxed algorithm for off-policy MC control, you may have been expecting the $W$ update to have involved the importance-sampling ratio $\frac{\pi(A_t|S_t)}{b(A_t|S_T)}$, but instead it involves $\frac{1}{b(A_t|S_t)}$.  Why is this nevertheless correct?

The target policy $\pi(s)$ is always deterministic, only selecting a single action according to $\pi(s)=\text{argmax}_a Q(s,a)$.  Therefore the numerator in importance-sampling ratio will either be 1 when the trajectory action matches the one given by $\pi(s)$ or it will be 0.  The inner loop will exit if such as action is selected as it will result in zero values of W for the rest of the trajectory and thus no further updates to $Q(s,a)$ or $\pi(s)$.  The only value of $\pi(s)$ that would be encountered in the equation is therefore 1 which is why the numerator is a constant.
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$4481fa33-1ff3-4778-8486-d4d8a15775cd„§cell_idÙ$4481fa33-1ff3-4778-8486-d4d8a15775cd¤codeÙ\begin 
	run2_2
	showrace(track2, create_policy_function(Ï€star2_racetrack2, track2_mdp))
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$1b02e593-d791-424c-b956-62cc480fcf40„§cell_idÙ$1b02e593-d791-424c-b956-62cc480fcf40¤codeÚ‚md"""
##### Results Summary
Unlike the other techniques, Monte Carlo Ïµ-Soft requires selecting the parameter Ïµ and the performance of each algorithm varies a lot with this parameter and the number of training episodes.  For a short training time of 1,000 episodes, small values of Ïµ seem to perform better such as 0.01 or 0.02.  Under those conditions, performance of the policies is far better than random with mean episode lengths of 32 and 24 respectively.  Longer training improves the results but also requires changing Ïµ and possibly introducing a decay rate so it can start high and approach 0 after a large number of episodes.
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$72e9721f-ee17-4557-b090-71728e6c22ce„§cell_idÙ$72e9721f-ee17-4557-b090-71728e6c22ce¤codeÙ?makelookup(v::Vector) = Dict(x => i for (i, x) in enumerate(v))¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$11723075-d1db-4512-abf2-3fe494a71a3b„§cell_idÙ$11723075-d1db-4512-abf2-3fe494a71a3b¤codeÚfunction check_policy(Ï€::Matrix{T}, mdp::MDP_Opaque{S, A, F}) where {T <: AbstractFloat, S, A, F}
#checks to make sure that a policy is defined over the same space as an MDP
	(n, m) = size(Ï€)
	num_actions = length(mdp.actions)
	num_states = length(mdp.states)
	@assert n == num_actions "The policy distribution length $n does not match the number of actions in the mdp of $(num_actions)"
	@assert m == num_states "The policy is defined over $m states which does not match the mdp state count of $num_states"
	return nothing
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$059b1c0f-eb21-4a4a-8aed-64e9ac07b541„§cell_idÙ$059b1c0f-eb21-4a4a-8aed-64e9ac07b541¤codeÙ`md"""
Number of Episodes: $(@bind mces2 confirm(NumberField(1:10_000_000, default = 1_000)))
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$b2115f33-f8e2-452e-9b0e-90610f0f09b1„§cell_idÙ$b2115f33-f8e2-452e-9b0e-90610f0f09b1¤codeÙ£function make_random_policy(mdp::MDP_Opaque; init::T = 1.0f0) where T <: AbstractFloat
	ones(T, length(mdp.actions), length(mdp.states)) ./ length(mdp.actions)
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$82284c63-2306-4469-9b1a-a5ec87037e79„§cell_idÙ$82284c63-2306-4469-9b1a-a5ec87037e79¤code­plot_fig5_1()¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$5b32bbc7-dc34-4fc3-bacc-92e55f26a98c„§cell_idÙ$5b32bbc7-dc34-4fc3-bacc-92e55f26a98c¤codeÚ4[monte_carlo_pred_Q(Ï€_blackjack1, Ï€_rand_blackjack, blackjack_mdp, 1.0f0; num_episodes =  1, historystateindex = blackjack_stateindex1, qinit = 0.0f0, override_state_init = true, samplemethod=Ordinary(), use_target_initial_action = true)[3][1:1] |> sum for i in 1:1000] |> v -> mean(filter(x -> x != 0, v))¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$c8be6951-b6ec-4444-8c7f-ca5db6681571„§cell_idÙ$c8be6951-b6ec-4444-8c7f-ca5db6681571¤codeÙ makegridsquare(x, y; class="", xmin=0, ymin=0) = """<div class = "$class" style="grid-column-start: $(x - xmin + 1); grid-row-start: $(y - ymin + 1);"></div>"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$887de995-04e8-4d84-88d7-ad096a5747df„§cell_idÙ$887de995-04e8-4d84-88d7-ad096a5747df¤codeÙAmd"""
Example trajectories after training for $opmc1 episodes
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$3ee31af5-b19c-49dc-8fbf-f07e93d1f0c5„§cell_idÙ$3ee31af5-b19c-49dc-8fbf-f07e93d1f0c5¤codeÙgmd"""
### Figure 5.2b:
Recreation of Figure 5.2 using an Ïµ-soft MC control with $$\epsilon = 0.1$$
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$ffd1e39d-e66b-40a3-8ad1-c9480d371fe8„§cell_idÙ$ffd1e39d-e66b-40a3-8ad1-c9480d371fe8¤codeÚàmd"""
##### Results Summary
Each environment has 7300 and 12875 states respectively, so Monte Carlo Exploring starts would need to sample at least this many episodes to have a non zero probability of coverage.  Surprisingly, even after just 1000 episodes of training the results are quite an improvement over the random policy with the mean finish time of about 30 steps for both.  Although at the high end, some episodes still take over 100 steps to complete (still much better than the random policy).  If we allow training for 10-100 million episodes, which is necessary to get a reasonable sample size for each state, then the results are much improved with episode step lengths from 11 to 18 for track 1 and 9 to 16 for track2.
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$13cc524c-d983-44f4-8731-0595249fb888„§cell_idÙ$13cc524c-d983-44f4-8731-0595249fb888¤codeÚØfunction monte_carlo_ES(mdp::MDP_Opaque, Ï€_init::Matrix{T}, Q_init::Matrix{T}, Î³, num_episodes; override_state_init = false) where T <: Real
	#initialize
	Ï€ = copy(Ï€_init)
	Q = copy(Q_init)
	counts = zeros(Int64, length(mdp.actions), length(mdp.states))
	vhold = zeros(T, length(mdp.actions))
	for i in 1:num_episodes
		s0 = override_state_init ? rand(mdp.states) : mdp.state_init()
		a0 = rand(mdp.actions)
		(states, actions, rewards) = mdp.simulator(s0, a0, Ï€)

		#there's no check here so this is equivalent to every-visit estimation
		t = length(states)
		g = zero(T)
		for t in length(states):-1:1
			#accumulate future discounted returns
			g = Î³*g + rewards[t]
			i_s = mdp.statelookup[states[t]]
			i_a = mdp.actionlookup[actions[t]]
			#increment count by 1
			counts[i_a, i_s] += 1
			Q[i_a, i_s] += (g - Q[i_a, i_s])/counts[i_a, i_s] #update running average of Q
			vhold .= Q[:, i_s]
			make_greedy_policy!(vhold)
			Ï€[:, i_s] .= vhold
		end
	end
	return Ï€, Q
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$8faca500-b80d-4b50-88b6-683d18a1286b„§cell_idÙ$8faca500-b80d-4b50-88b6-683d18a1286b¤codeÙ•#behavior policy state value estimate and variance
estimate_blackjack_state(blackjack_state1, Ï€_rand_blackjack, 5_000_000) |> v -> (mean(v), var(v))¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$755be8f1-9d9e-4afd-8a70-07fab78e4333„§cell_idÙ$755be8f1-9d9e-4afd-8a70-07fab78e4333¤code·md"""
##### Track 2
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$01683e11-a368-45bc-abbc-bbd5c94d7b22„§cell_idÙ$01683e11-a368-45bc-abbc-bbd5c94d7b22¤codeÚ&plot_value(grid; title = "", xtitle = "Dealer showing", ytitle = "Player sum", xticktext = ["A", "10"], yticktext = [12, 21], showscale = false, width = 350, height = 300) = plot(heatmap(x = 1:10, y = 12:21, z = grid, showscale=showscale, colorscale = "Bluered", zmin = -1.0, zmax = 1.0), Layout(title = title, yaxis_title = ytitle, yaxis_tickvals = [12, 21], xaxis_title = xtitle, yaxis_ticktext = yticktext, xaxis_tickvals = [1, 10], xaxis_ticktext = xticktext, width = width, height = height, autosize = false, margin = attr(l = 0, b = 0, r = 0)))¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$5e2420fb-b2cc-49fc-91e3-3de80fba698b„§cell_idÙ$5e2420fb-b2cc-49fc-91e3-3de80fba698b¤codeÚ&#run a single race episode from a valid starting position with a given policy and track
function runrace(Ï€; track = track1, maxsteps = 10_000)
	s0 = (position = rand(track.start), velocity = (0, 0))
	a0 = Ï€(s0)
	race_track_episode(s0, a0, Ï€, track, maxsteps = maxsteps, failchance = 0.0)
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$1e6f7e5e-c5ce-479c-abbb-6c388c254626„§cell_idÙ$1e6f7e5e-c5ce-479c-abbb-6c388c254626¤codeÚ2#there's no check here so this is equivalent to every-visit estimation
function updateV!(mdp, V::Vector{T}, counts::Vector{T}, Ï€_target::Matrix{T}, Ï€_behavior::Matrix{T}, states, actions, rewards::Vector{T}, Î³::T, samplemethod::ImportanceMethod; t = length(states), g_old = zero(T), w = one(T)) where T<:Real		

	#terminate at the end of a trajectory
	(t == 0) && return w

	i_s = mdp.statelookup[states[t]]
	i_a = mdp.actionlookup[actions[t]]

	#since this is the value estimate, every action must update the importance-sampling weight before the update to that state is calculated. In contrast, for the action-value estimate the weight is only the actions made after the current step are relevant to the weight
	w = w * Ï€_target[i_a, i_s] / Ï€_behavior[i_a, i_s]

	counts[i_s] += updatecount(samplemethod, w)

	#terminate when w = 0 if the weighted sample method is being used.  under ordinary sampling, the updates to the count and value will still occur because the denominator will still increment
	if (w == zero(T)) && isa(samplemethod, Weighted) 
		return w
	end
	
	#accumulate future discounted returns
	g = Î³*g_old + rewards[t]
	V[i_s] += updatevalue(samplemethod, V[i_s], g, w, counts[i_s])
	updateV!(mdp, V, counts, Ï€_target, Ï€_behavior, states, actions, rewards, Î³, samplemethod; t = t-1, g_old = g, w = w)
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$5e012ead-b4f9-45a9-979d-88b0b1086263„§cell_idÙ$5e012ead-b4f9-45a9-979d-88b0b1086263¤codeÙÔ#weighted importance sampling produces the correct value estimate even after 100 episodes
monte_carlo_pred_Q(onestate_Ï€_target, onestate_Ï€_b, onestate_mdp, 1.0f0; num_episodes =  100, samplemethod = Weighted())¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$a0eb6939-11bb-458d-bee3-9ed763819f62„§cell_idÙ$a0eb6939-11bb-458d-bee3-9ed763819f62¤codeÙ+md"""
#### Racetrack Visualization Code
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$21d248f5-edad-4614-8c1c-ae330f9e5a18„§cell_idÙ$21d248f5-edad-4614-8c1c-ae330f9e5a18¤codeÚËstruct MDP_Opaque{S, A, F<:Function, G<:Function}
	states::Vector{S}
	statelookup::Dict{S, Int64}
	actions::Vector{A}
	actionlookup::Dict{A, Int64}
	state_init::G #function that produces an initial state for an episode
	simulator::F #function that takes as input an initial state action pair as well as the policy to be simulated.  Should return a trajectory as a vector of states, actions and rewards all of equal length
	function MDP_Opaque(states::Vector{S}, actions::Vector{A}, state_init::G, simulator::F) where {S, A, F<:Function, G<:Function}
		statelookup = makelookup(states)
		actionlookup = makelookup(actions)
		new{S, A, F, G}(states, statelookup, actions, actionlookup, state_init, simulator)
	end
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$a68b4965-c392-47e5-9b29-93e7ada9990a„§cell_idÙ$a68b4965-c392-47e5-9b29-93e7ada9990a¤codeÚofunction plot_fig5_1()
	(uagrid10k, nuagrid10k) = eval_blackjack_policy(Ï€_blackjack1, 10_000)
	(uagrid500k, nuagrid500k) = eval_blackjack_policy(Ï€_blackjack1, 500_000)
	p1 = plot_value(uagrid10k; title = "After 10,000 episodes", width = 320, ytitle = "", xtitle = "") 
	p2 = plot_value(nuagrid10k, width = 320, ytitle = "")
	# p2 = plot(heatmap(z = nuagrid10k, showscale = false, colorscale = "Bluered", zmin = -1.0, zmax = 1.0), Layout(width = 300, height = 300, margin = attr(b = 0, r = 0, t=0, l = 0), autosize = false, yaxis_title = "No usable ace"))
	p3 = plot_value(uagrid500k, title = "After 500,000 episodes", showscale=true, width = 400, xtitle = "")
	# p3 = plot(heatmap(z = uagrid500k, showscale = false, colorscale = "Bluered", zmin = -1.0, zmax = 1.0), Layout(margin = attr(b = 0, r = 0, t=0, l = 0), autosize = false, width = 350, height = 300, title = "After 500,000 episodes"))
	p4 = plot_value(nuagrid500k; showscale = true, width = 400)
	# p4 = plot(heatmap(z = nuagrid500k, colorscale = "Bluered", zmin = -1.0, zmax = 1.0), Layout(width = 300, height = 300, yaxis_ticks = (1:10, 12:21), xaxis_ticks = (1:10, ["A", "", "", "", "", "", "", "", "", "10"]), legend = false, xaxis_title = "Dealer Showing"))

	# plot(p1, p3, p2, p4, layout = (2, 2))
	@htl("""
	<div style = "display: flex; flex-wrap: wrap; flex-direction: row; width: 800px; background-color: white; color: black; align-items: center; justify-content: center;">
		<div style = "width: 50px;">Usable ace</div>
		<div>$p1</div> 
		<div>$p3</div>
		<div style = "width: 50px;">No usable ace</div>
		<div>$p2</div> 
		<div>$p4</div>
	</div>
	""")
	# [p1 p3; p2 p4]
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$d766d44e-3684-497c-814e-8f71740cb232„§cell_idÙ$d766d44e-3684-497c-814e-8f71740cb232¤codeÙ¢md"""
### **Figure 5.1**:  
Approximate state-value functions for the blackjack policy that sticks only on 20 or 21, computed by Monte Carlo policy evaluation
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$0dfd7afb-127c-4afd-8374-3c9a20a9ee76„§cell_idÙ$0dfd7afb-127c-4afd-8374-3c9a20a9ee76¤codeÙ.Ï€_racetrack_rand(s) = rand(racetrack_actions)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$bf33230e-342b-4486-89ac-9667438de503„§cell_idÙ$bf33230e-342b-4486-89ac-9667438de503¤codeÚƒmd"""
> ### *Exercise 5.8* 
> The results with Example 5.5 and shown in Figure 5.4 used a first-visit MC method.  Suppose that instead an every-visit MC method was used on the same problem.  Would the variance of the estimator still be infinite?  Why or why not?

The state value estimate can be computed by summing terms for all of the episode lengths just like for the first visit method.  Each episode has a reward of +1 from the terminal transition and we only need to consider episodes that take the left action.  $\frac{\pi(A_t|S_t)}{b(A_t|S_t)} = 2$ for all cases, so the importance sampling ratio is just $2^T$ where T is the total length of that episode.  The probabilities for each episode length is unchanged from Example 5.5 and is just 0.1 times 0.9 times the number of steps preceeding the terminal step.  Compared to the calculation in Example 5.5, the expected value calculation must also have the importance sampling ratio terms for all of N visits in the length N episode instead of just the first one:

Length 1 episode

$\frac{1}{2} \cdot 0.1 \cdot (2)^2$

Length 2 episode, the term representing X is now an average of every visit along the trajectory.  The probability of the trajectory is unchanged from before.

$\frac{1}{2} \cdot 0.9 \cdot \frac{1}{2} \cdot 0.1 \left ( \frac{2^2 + 2}{2} \right)^2$

Length 3 episode

$\frac{1}{2} \cdot 0.9 \cdot \frac{1}{2} \cdot 0.9 \cdot \frac{1}{2} \cdot 0.1 \left ( \frac{2^3 + 2^2 + 2}{3} \right)^2$

Length N episode

$=0.1 \left ( \frac{1}{2} \right ) ^N 0.9^{N-1} \left ( \frac{\sum_{i=1}^N 2^i}{N} \right ) ^2$

So the expected value is the sum of these terms for every possible episode length:
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$826139cc-b52e-11ec-0d47-25ab689851fd„§cell_idÙ$826139cc-b52e-11ec-0d47-25ab689851fd¤codeÚwmd"""
# Chapter 5: Monte Carlo Methods

In this chapter we will use a sampling technique that does not require complete knowledge of the environment, only the ability to interact with it.  We will focus on episodic tasks so that the sampled returns are always well defined.  Unlike the dynamic programming methods from before, these techniques will estimate the value functions rather than computing them directly.  With enough samples, these techniques will also converge to the correct solution.

## 5.1 Monte Carlo Prediction

First we consider using Monte Carlo methods to learn the state-value function for a given policy.  The most obvious way to estimate this is to simply average the returns observed after vising a particular state.  If we save the trajectories of an agent interacting with an MDP, we can keep track of how many times an agent visits a state.  In the technique called *first visit MC* we look at the returns accumulated after the first visit to a state in that episode only making a single update. It is also possible to update the state value for every visit that occurs in an episode, but the theoretical properties for *first visit MC* are more widely studied.  Both techniques, however, can be shown to converge as the number of visits goes to infinity.  Below is code implementing Monte Carlo prediction using *every visit MC* and an in place update of the average
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$0bd705cb-ad38-4cbb-b8fc-7e0617635282„§cell_idÙ$0bd705cb-ad38-4cbb-b8fc-7e0617635282¤codeÙcmd"""
### Optimal Blackjack Policy Found with Off-policy MC control (behavior policy is random)
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$43f9b824-fd56-4d56-84c3-23e2a3a37178„§cell_idÙ$43f9b824-fd56-4d56-84c3-23e2a3a37178¤codeÚ‰monte_carlo_pred_V(Ï€_blackjack1, Ï€_rand_blackjack, blackjack_mdp, 1.0f0; num_episodes =  100000, historystateindex = blackjack_stateindex1, vinit = 0.0f0, override_state_init = true, samplemethod=Ordinary())[3] |> mean #mean weight is 2 and it stays this way as the number of episodes increases so the returns that are seen by the behavior are roughtly doubled and counted with the 0 returns¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$b39d1ea0-86a2-4215-ae73-e4492f3f2f00„§cell_idÙ$b39d1ea0-86a2-4215-ae73-e4492f3f2f00¤codeÙKmd"""
### Example 5.4: Off-policy Estimation of a Blackjack State Value
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$a307e780-996a-485f-af59-b44982dfceb4„§cell_idÙ$a307e780-996a-485f-af59-b44982dfceb4¤codeÚ/function rendertrack(track; episode = ())
	trajectory = if isempty(episode)
		Dict()
	else
		states, actions, rewards = episode
		Dict(begin
			position, velocity = states[i]
			action = actions[i]
			position => (velocity = velocity, action = action)
		end
		for i in eachindex(first(episode)))
	end
	
	function getvelocities(position)
		!haskey(trajectory, position) && return ()
		(vx, vy) = trajectory[position].velocity
		(dvx, dvy) = trajectory[position].action
		(vx = vx, vy = vy, dvx = dvx, dvy = dvy)
	end
	trackpoints = union(track...)
    xmin, xmax = extrema(p -> p[1], trackpoints)
    ymin, ymax = extrema(p -> p[2], trackpoints)
	function makesquare(a; kwargs...) 
		velocities = getvelocities(a)
		isempty(velocities) && return makegridsquare(first(a), last(a); xmin = xmin, ymin = ymin, kwargs...)
		makegridsquare(first(a), last(a), velocities.vx, velocities.vy, velocities.dvx, velocities.dvy; xmin = xmin, ymin = ymin, kwargs...)
	end
	startsquares = [makesquare(a; class="start") for a in track.start]
	tracksquares = [makesquare(a) for a in track.body]
	finishsquares = [makesquare(a; class = "finish") for a in track.finish]
	squares = reduce(*, vcat(startsquares, tracksquares, finishsquares)) |> HTML

	racemessage = isempty(episode) ? "" : "Race finished in $(length(first(episode))) steps"

	@htl("""
	<div>
	$racemessage
	<div style="background-color: white; color: black;">
		<div style="display:flex; align-items: flex-start">
		<div class = "track">
			$squares
		</div>
		Finish <br> line
		</div>
		<div>Starting line</div>
	</div>
	</div>
	""")
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$b040f245-b2d6-4ec6-aa7f-511c54aabd0d„§cell_idÙ$b040f245-b2d6-4ec6-aa7f-511c54aabd0d¤codeÙ^#recreation of figure 5.2 using Ïµ-soft method
figure_5_2(Ï€star_blackjack2, Qstar_blackjack2)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$7cdf4142-82fe-4aa6-9665-84a1eef5d038„§cell_idÙ$7cdf4142-82fe-4aa6-9665-84a1eef5d038¤codeÙ!@bind race_1_2 Button("Run race")¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$3d10f89f-876e-4d25-b8d6-34ce5c99eb8c„§cell_idÙ$3d10f89f-876e-4d25-b8d6-34ce5c99eb8c¤codeÚ£#Given there are 7300 states to the problem with track1, exploring starts would need to sample at least this many times to even explore all of them.  Using 100_000 episodes, it produces a policy that finishes the race between 16 and 100 steps usually, but the technique works with higher variance even as low as 1000 episodes.
begin 
	run2_1
	showrace(track1, create_policy_function(Ï€star2_racetrack1, track1_mdp))
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$772b4dd6-870c-4a16-937c-701d5bb5da44„§cell_idÙ$772b4dd6-870c-4a16-937c-701d5bb5da44¤code¿@bind run3_1 Button("Run Race")¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$1aaf3827-5851-4156-a7e6-14f5e4d00238„§cell_idÙ$1aaf3827-5851-4156-a7e6-14f5e4d00238¤codeÙ*md"""
#### Random Policy Visualization
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$d6e7cc6d-f397-4bdf-974e-9a16922393dd„§cell_idÙ$d6e7cc6d-f397-4bdf-974e-9a16922393dd¤codeÙ�function create_policy_function(Ï€, mdp)
	function f(s)
		i_s = mdp.statelookup[s]
		i_a = sample_action(Ï€, i_s)
		mdp.actions[i_a]
	end
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$1951fc4c-acc4-49a6-a907-7447ff0f430a„§cell_idÙ$1951fc4c-acc4-49a6-a907-7447ff0f430a¤codeÙAmd"""
Example trajectories after training for $opmc2 episodes
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$660ef59c-205c-44c2-9c46-5a74e09497ab„§cell_idÙ$660ef59c-205c-44c2-9c46-5a74e09497ab¤codeÙ'struct Weighted <: ImportanceMethod end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$a47474b0-f262-4453-a116-addc3a09119e„§cell_idÙ$a47474b0-f262-4453-a116-addc3a09119e¤codeÙoq_offpol = monte_carlo_pred_Q(Ï€_blackjack1, Ï€_rand_blackjack, blackjack_mdp, 1.0f0; num_episodes = 1_000_000)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$acb270a1-e2b9-46bc-9a52-9f66f1cca17c„§cell_idÙ$acb270a1-e2b9-46bc-9a52-9f66f1cca17c¤codeÚ@bind mcÏµs1 confirm(PlutoUI.combine() do Child
	md"""
	| Number of Episodes | Ïµ | Decay Ïµ |
	| :-: | :-: | :-: |
	|$(Child(:episodes, NumberField(1:10_000_000, default = 1_000))) | $(Child(:Ïµ, NumberField(0.001:0.001:1.0; default = 0.01))) | $(Child(:decay, CheckBox())) |
	"""
end)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$334b4d77-8784-46be-b9e8-80c0a2244694„§cell_idÙ$334b4d77-8784-46be-b9e8-80c0a2244694¤codeÚŸfunction monte_carlo_Ïµsoft(mdp::MDP_Opaque, Ïµ::T, Ï€_init::Matrix{T}, Q_init::Matrix{T}, Î³, num_episodes::Integer, quench_episode::Integer, decay_Ïµ::Bool) where T <: Real
	#initialize
	Ï€ = copy(Ï€_init)
	Q = copy(Q_init)
	counts = zeros(Int64, length(mdp.actions), length(mdp.states))
	vhold = zeros(T, length(mdp.actions))
	decayrate = decay_Ïµ ? Ïµ / num_episodes : zero(T)
	for i in 1:num_episodes
		s0 = mdp.state_init()
		i_a0 = sample_action(Ï€, mdp.statelookup[s0])
		a0 = mdp.actions[i_a0]
		(states, actions, rewards) = mdp.simulator(s0, a0, Ï€)

		g = zero(T)
		for t in length(states):-1:1
			#accumulate future discounted returns
			g = Î³*g + rewards[t]
			i_s = mdp.statelookup[states[t]]
			i_a = mdp.actionlookup[actions[t]]
			#increment count by 1
			counts[i_a, i_s] += 1
			Q[i_a, i_s] += (g - Q[i_a, i_s])/counts[i_a, i_s] #update running average of Q
			vhold .= Q[:, i_s]
			#if desired at some point prior to the final episode the training can revert to using the greedy policy
			if i > quench_episode
				make_greedy_policy!(vhold)
			else
				make_Ïµsoft_policy!(vhold, Ïµ)
			end
			Ï€[:, i_s] .= vhold
			Ïµ -= decayrate
		end
	end
	return Ï€, Q
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$e5384dd0-fad1-4a24-b011-73b062fcfb1b„§cell_idÙ$e5384dd0-fad1-4a24-b011-73b062fcfb1b¤codeÚ md"""
> ### *Exercise 5.1* 
> Consider the diagroms on the right in Figure 5.1.  Why does the estimated value function jump for the last two rows in the rear?  Why does it drop off for the whole last row on the left?  Why are the frontmost values higher in the upper diagrams than in the lower?

The last two rows in the rear are for a player sum equal to 20 or 21.  For a sum of 19 and lower, this policy will hit which is suboptimal for these high sums.  For the sums of 20 or 21 though, sticking is optimal so the value jumps compared to the suboptimal hit at 19.

The far left row represents cases where the dealer is showing an Ace.  Since an Ace is a flexible card, the dealer policy will have more options that result in a win including the possibility of having another face card already (dealer natural).  It is always worse for the player if the dealer is known to have an Ace.

The frontmost values represent cases where the player sum is 12.  If there is a usable Ace this means that means that the player has two Aces which results in a sum of 12 when the first Ace is counted as 1 and the second is *usable* and counted as 11.  If there is no usable Ace than a sum of 12 would have to result from some other combination of cards such as 10/2, 9/3, etc...  Since the first case has two Aces, it means that potentially both could count as 1 if needed to avoid a bust.  In the case without a usable Ace, the sum is the same, but there are more opportunities to bust if we draw a card worth 10, so having a sum of 12 with a usable Ace is strictly better.
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$35914757-6af1-4056-bba4-a9996f65f7f7„§cell_idÙ$35914757-6af1-4056-bba4-a9996f65f7f7¤codeÙð#normal importance sampling for one state MDP produces state-action value estimates that fail to converge to [1, 0] even after 1M episodes
monte_carlo_pred_Q(onestate_Ï€_target, onestate_Ï€_b, onestate_mdp, 1.0f0; num_episodes =  1_000_000)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$cde7be85-9344-4526-bcb2-c2c8b3322435„§cell_idÙ$cde7be85-9344-4526-bcb2-c2c8b3322435¤codeÙ�(Ï€star3_racetrack2, Qstar3_racetrack2) = monte_carlo_Ïµsoft(track2_mdp, Float32(mcÏµs2.Ïµ), 1.0f0, mcÏµs2.episodes; decay_Ïµ = mcÏµs2.decay)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$881ba6c3-0e6a-4bb8-bc14-2e0face560f2„§cell_idÙ$881ba6c3-0e6a-4bb8-bc14-2e0face560f2¤codeÚnmd"""
> ### *Exercise 5.6* 
> What is the equation analogous to (5.6) for *action* values $Q(s,a)$ instead of state values $V(s)$, again given returns generated using $b$?

Equation (5.6):

$V(s) = \frac{\sum_{t \in \mathscr{T}(s)}\rho_{t:T(t)-1}G_t}{\sum_{t \in \mathscr{T}(s)} \rho_{t:T(t)-1}}$

For $Q(s,a)$, there is no need to calculate the sampling ratio for the first action selected.  Here $\mathscr{T}(s, a)$ is the set of all time steps in which the state action pair $(s, a)$ is visited.

$Q(s,a) = \frac{\sum_{t \in \mathscr{T}(s, a)}\rho_{t+1:T(t)-1}G_t}{\sum_{t \in \mathscr{T}(s, a)} \rho_{t+1:T(t)-1}}$
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$5c57e4b7-51d6-492d-9fc9-bcdab1dd46f4„§cell_idÙ$5c57e4b7-51d6-492d-9fc9-bcdab1dd46f4¤codeÚÔfunction plot_blackjack_policy(Ï€)
	Ï€stargridua = zeros(Float64, 10, 10)
	Ï€stargridnua = zeros(Float64, 10, 10)
	for state in blackjackstates
		i_s = blackjack_mdp.statelookup[state]
		v = Ï€[1, i_s] - Ï€[2, i_s]
		if state.ua
			Ï€stargridua[state.sum-11, state.upcard] = v
		else
			Ï€stargridnua[state.sum-11, state.upcard] = v
		end
	end

	function plot_policy_grid(grid)
		plot(heatmap(x = 1:10, y = 12:21, z = grid, showscale=false, colorscale = "Greys", zmin = -1, zmax = 1), Layout(xaxis_title = "Dealer showing", yaxis_title = "Player sum", margin = attr(t = 30, b = 0, l = 0, r = 10), width = 300, height = 300, xaxis_tickvals = 1:10, yaxis_tickvals = 12:21, yaxis_ticktext = 12:21, xaxis_ticktext = ["A"; 2:10]))
	end

	p1 = plot_policy_grid(Ï€stargridua)
	p2 = plot_policy_grid(Ï€stargridnua)
	# vstar = eval_blackjack_policy(Dict(s => Ï€[s] == :hit ? [1.0, 0.0] : [0.0, 1.0] for s in blackjackstates), 500_000)
	# p1 = heatmap(Ï€stargridua, xticks = (1:10, ["A", 2, 3, 4, 5, 6, 7, 8, 9, 10]), yticks = (1:10, 12:21), legend = false, title = "Usable Ace Policy, Black=Stick, White = Hit")
	# p2 = heatmap(Ï€stargridnua, xticks = (1:10, ["A", 2, 3, 4, 5, 6, 7, 8, 9, 10]), yticks = (1:10, 12:21), legend = false, title = "No usable Ace Policy", xlabel = "Dealer Showing", ylabel = "Player sum")

	# p3 = heatmap(vstar[1], legend = false, yticks = (1:10, 12:21), title = "V*")
	# p4 = heatmap(vstar[2], yticks = (1:10, 12:21))
	# plot(p1, p3, p2, p4, layout = (2,2))
	(p1, p2)
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$e0d3d7d1-203f-42fa-8570-8d1d88bf17c2„§cell_idÙ$e0d3d7d1-203f-42fa-8570-8d1d88bf17c2¤code·md"""
##### Track 2
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$760c5361-02d4-46b7-a05c-fc2d10d93de6„§cell_idÙ$760c5361-02d4-46b7-a05c-fc2d10d93de6¤codeÚ}function monte_carlo_pred_V(Ï€::Matrix{T}, mdp::MDP_Opaque{S, A, F, G}, Î³::T; num_episodes::Integer = 1000, vinit::T = zero(T), V::Vector{T} = ones(T, length(mdp.states)) .* vinit) where {T <: AbstractFloat, S, A, F, G}
	
	check_policy(Ï€, mdp)
	
	#initialize
	counts = zeros(Integer, length(mdp.states))

	#there's no check here so this is equivalent to every-visit estimation
	function updateV!(states, actions, rewards; t = length(states), g = zero(T))		
		#terminate at the end of a trajectory
		t == 0 && return nothing
		#accumulate future discounted returns
		g = Î³*g + rewards[t]
		i_s = mdp.statelookup[states[t]]
		i_a = mdp.actionlookup[actions[t]]
		#increment count by 1
		counts[i_s] += 1
		V[i_s] += (g - V[i_s])/counts[i_s] #update running average of V
		updateV!(states, actions, rewards; t = t-1, g = g)
	end

	
	for i in 1:num_episodes
		s0 = mdp.state_init()
		i_a0 = sample_action(Ï€, mdp.statelookup[s0])
		a0 = mdp.actions[i_a0]
		# (s0, a0) = initialize_episode()
		(states, actions, rewards) = mdp.simulator(s0, a0, Ï€)
	
		#update value function for each trajectory
		updateV!(states, actions, rewards)
	end
	return V
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$d55860d1-e4c1-4a79-adbe-b40a6d6283a7„§cell_idÙ$d55860d1-e4c1-4a79-adbe-b40a6d6283a7¤codeÙ“initialize_state_action_value(mdp::MDP_Opaque; qinit::T = 0.0f0) where T<:AbstractFloat = ones(T, length(mdp.actions), length(mdp.states)) .* qinit¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$06297d75-121a-4178-b45b-83e167efd90d„§cell_idÙ$06297d75-121a-4178-b45b-83e167efd90d¤code¿joinlines(x, y) = """
$x
$y
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$abe70666-39f8-4f1d-a285-a3a99f696d10„§cell_idÙ$abe70666-39f8-4f1d-a285-a3a99f696d10¤codeÚºmd"""
> ### *Exercise 5.13* 
> Show the steps to derive (5.14) from (5.12)

Starting at (5.12)

$\rho_{t:T-1}R_{t+1}=\frac{\pi(A_t|S_t)}{b(A_t|S_t)}\frac{\pi(A_{t+1}|S_{t+1})}{b(A_{t+1}|S_{t+1})}\frac{\pi(A_{t+2}|S_{t+2})}{b(A_{t+2}|S_{t+2})}\cdots\frac{\pi(A_{T-1}|S_{T-1})}{b(A_{T-1}|S_{T-1})}R_{t+1}$

For (5.14) we need to turn this into an expected value

$\mathbb{E}[\rho_{t:T-1}R_{t+1}]$

Now we know that the reward at time step t+1 is only dependent on the action and state at time t.  Moreover, the later parts of the trajectory are also independent of each other.  So we can separate some of these terms into a product of expected values rather than an expected value of products:

$\mathbb{E}[\rho_{t:T-1}R_{t+1}]=\mathbb{E} \left [ \frac{\pi(A_t|S_t)}{b(A_t|S_t)}\frac{\pi(A_{t+1}|S_{t+1})}{b(A_{t+1}|S_{t+1})}\frac{\pi(A_{t+2}|S_{t+2})}{b(A_{t+2}|S_{t+2})}\cdots\frac{\pi(A_{T-1}|S_{T-1})}{b(A_{T-1}|S_{T-1})}R_{t+1} \right ]$

$=\mathbb{E} \left [ \frac{\pi(A_t|S_t)}{b(A_t|S_t)}R_{t+1} \right ] \prod_{k=t+1}^{T-1}\mathbb{E} \left [ \frac{\pi(A_k|S_k)}{b(A_k|S_k)} \right ]$

We know from (5.13) that $\mathbb{E} \left [ \frac{\pi(A_k|S_k)}{b(A_k|S_k)} \right ] = 1$ so the above expression simplifies to: $\mathbb{E} \left [ \frac{\pi(A_t|S_t)}{b(A_t|S_t)}R_{t+1} \right ]$.  Using the original shorthand with Ï�:

$\mathbb{E}[\rho_{t:T-1}R_{t+1}]=\mathbb{E} \left [ \frac{\pi(A_t|S_t)}{b(A_t|S_t)}R_{t+1} \right ]=\mathbb{E}[\rho_{t:t}R_{t+1}]$
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$7ce6e28e-acd7-46d1-87d6-a25f4656d79d„§cell_idÙ$7ce6e28e-acd7-46d1-87d6-a25f4656d79d¤code¿@bind run2_1 Button("Run race")¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$a85e7dd3-ea5e-4c77-a18e-f1e190658ae3„§cell_idÙ$a85e7dd3-ea5e-4c77-a18e-f1e190658ae3¤codeÙƒfunction sample_action(Ï€::Matrix{T}, i_s::Integer) where T<:AbstractFloat
	(n, m) = size(Ï€)
	sample(1:n, weights(Ï€[:, i_s]))
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$68f9e0d9-5c9d-4e89-b5ae-f24fd7544a09„§cell_idÙ$68f9e0d9-5c9d-4e89-b5ae-f24fd7544a09¤codeÙn(Ï€star2_racetrack1, Qstar2_racetrack1) = monte_carlo_ES(track1_mdp, 1.0f0, mces1; override_state_init = true)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$ec29865f-3ba3-4bb3-84df-c2b472e03ff2„§cell_idÙ$ec29865f-3ba3-4bb3-84df-c2b472e03ff2¤codeÙn(Ï€star_blackjack, Qstar_blackjack) = monte_carlo_ES(blackjack_mdp, 1.0f0, 5_000_000; Ï€_init = Ï€_blackjack1)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$1d6eccf0-2731-47fc-9a41-ea8649e290ef„§cell_idÙ$1d6eccf0-2731-47fc-9a41-ea8649e290ef¤codeÙ�(Ï€star3_racetrack1, Qstar3_racetrack1) = monte_carlo_Ïµsoft(track1_mdp, Float32(mcÏµs1.Ïµ), 1.0f0, mcÏµs1.episodes; decay_Ïµ = mcÏµs1.decay)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$9ca72278-fff6-4b0f-b72c-e0d3768aff73„§cell_idÙ$9ca72278-fff6-4b0f-b72c-e0d3768aff73¤codeÙ"figure5_3(;n = 100, vinit = 0.0f0)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$020131a1-c68b-403a-9c5e-944edb6220e9„§cell_idÙ$020131a1-c68b-403a-9c5e-944edb6220e9¤codeÙKupdatevalue(::Weighted, q::T, g::T, w::T, c::T) where T<:Real = (g - q)*w/c¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$c23475f0-c5f0-49ce-a665-f93c8bda0474„§cell_idÙ$c23475f0-c5f0-49ce-a665-f93c8bda0474¤codeÚàfunction make_blackjack_mdp()
	state_init() = BlackjackState(rand(12:21), rand(unique_cards), rand() > 0.5)

	#starting with an initial state, action, and policy, generate a trajectory for blackjack returning that and the reward
	function blackjackepisode(s0::BlackjackState, a0::BlackjackAction, Ï€::Matrix{Float32})
		#given any valid state, the simulation results will be affected by whether or not the player has a natural.  This can only be the case when the player sum is 21 and the player has a usable ace.  However, even if this is the case, it is not necessarily a natural.  A natural would occur with (A, 10), (A, J), (A, Q), (A, K).  But the player could also have (A, A, 9), (A, A, 7, 2), (A, A, A, 8), (A, A, A, A, 7) and so forth.  Also, if the starting state has a sum less than 21 and a usable ace, then after further dealing the player could arrive at the state with a sum of 21 and a usable ace.  In that situation, the player would never have a natural, but state value will be updated nonetheless.  So the probabilities must match for sampling purposes meaning the reward sampled from the (sum=21, ua=true) player state must reflect the true probabilities.  This would be the case if the simulation is always started with zero cards and dealt, but how to do that when we pass the starting state into it?  Since the game can go on past this point, this starting state should be handled for initial card draws where the sum is less than 12.  All of the situations with a usuable ace, a sum of 21, and not having a player natural require the player having two or more aces without a face/10 card.  If the first two cards dealt are the aces, then this would be a sum of 12 and the player would need to hit for a subsequent state.  If the first two cards result in a sum of less than 12 such as 7,2 then the player would automatically receive an additional card with zero probability of a bust, so no policy is needed.  Once the first ace is dealt, the policy would be required to hit to draw a second ace.  So if we treat s0 as the initial deal, then the remainder of the simulation will cover all of the other cases where we arrive at a sum of 21 with a usable ace
		playernatural = (s0.sum == 21) && s0.ua
		splayer, statehistory, actionhistory = playersim(s0, a0, Ï€)
		rewardbase = zeros(Float32, length(statehistory) - 1)
		finalr = if splayer > 21 
			#if the player goes bust, the game is lost regardless of the dealers actions
			-1.0f0
		else
			#generate hidden dealer card and final state
			(ds, dua) = addsum(0, false, deal())
			(ds, dua) = addsum(ds, dua, s0.upcard)
			dealernatural = ds == 21
			if playernatural
				Float32(!dealernatural)
			elseif dealernatural #not stated in book but used by authors in their code and matches actual blackjack rules
				-1.0f0
			else
				sdealer = dealer_sim(ds, dua)
				scoregame(splayer, sdealer)
			end
		end
		return (statehistory, actionhistory, push!(rewardbase, finalr))
	end

	
	MDP_Opaque(blackjackstates, blackjack_actions, state_init, blackjackepisode)
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$15925cc6-9605-4357-9c2a-cdfe54070989„§cell_idÙ$15925cc6-9605-4357-9c2a-cdfe54070989¤codeÚÖmd"""
Consider an implementation or ordinary importance sampling that updates $V(s)$ incrementally every time a $G$ value is observed for that state.  The equations should be similar to the incremental update rule previously derived for $V(s)$ without importance sampling.

Consider a sequence of returns $G_1, G_2, \dots , G_{n-1}$, all starting in the same state and each with a corresponding weight $W_i = \rho_{t_i:T(t_i)-1}$.  We wish to form the estimate

$V_n \dot= \frac{\sum_{k=1}^{n-1}W_k G_k}{n-1}, n \geq 2$

and keep it up-to-date as we obtain a single additional return $G_n$.  Observe that we can increment n by 1 to get an espression for V in terms of itself.

$V_{n+1} = \frac{\sum_{k=1}^n W_k G_k}{n} = \frac{W_n G_n + \sum_{k=1}^{n-1} W_k G_k}{n}$

Using the original formula for $V_n$, we can make the following substitution:

$\sum_{k=1}^{n-1} W_k G_k = (n-1)V_n$

which results in 

$V_{n+1} = \frac{W_n G_n + V_n (n-1)}{n} = V_n + \frac{W_n G_n - V_n}{n}$

So, to calculate the value function, we can simply apply the following update rule after obtaining new values for W and G:

$C \leftarrow C + 1$
$V \leftarrow V + \frac{WG-V}{C}$

which looks very similar to the ordinary average update rule but with the weight multiplied by G.  C just keeps a running total of the times the state was observed.  Note that C needs to be updated even in the case where W is 0 which is not the case for weighted importance sampling.  A similar inremental update rule is derived later for the weighted case as well as an algorithm for updating the action-value estimate using this method.  Below are code examples for calculating the value estimates for both weighted and normal importance sampling using the incremental implementation.
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$be7c096c-cc8c-407b-8287-8fb2ee7150a7„§cell_idÙ$be7c096c-cc8c-407b-8287-8fb2ee7150a7¤codeÚ—md"""
> ### *Exercise 5.3* 
> What is the backup diagram for Monte Carlo estimation of $q_\pi$

Similar to the $v_\pi$ diagram except the root is the s,a pair under consideration followed by the new state and the action taken along the trajectory.  The rewards are still accumulated to the end, just the start of the trajectory is a solid filled in circle that would contain the value for that s,a pair.
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$9618a093-cdb7-4589-a783-de8e9021b705„§cell_idÙ$9618a093-cdb7-4589-a783-de8e9021b705¤codeÙ,md"""
### Example 5.3: Solving Blackjack
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$fa49c253-e016-46a7-ba94-0e7448a7e0ae„§cell_idÙ$fa49c253-e016-46a7-ba94-0e7448a7e0ae¤codeÚOmd"""
> ### *Exercise 5.10* 
> Derive the weighted-average update rule (5.8) from (5.7).  Follow the pattern of the derivation of the unweighted rule (2.3).

Equation (5.7)

$V_{n} = \frac{\sum_{k=1}^{n-1} W_k G_k}{\sum_{k=1}^{n-1}W_k} \implies \sum_{k=1}^{n-1} W_k G_k = V_n \sum_{k=1}^{n-1} W_k \tag{a}$

or 

$V_{n+1} = \frac{\sum_{k=1}^{n} W_k G_k}{\sum_{k=1}^{n}W_k}$

now we can expand the expresion for $V_{n+1}$ to get an incremental rule

$\begin{flalign}
V_{n+1} &= \frac{W_n G_n + \sum_{k=1}^{n-1} W_k G_k}{\sum_{k=1}^{n}W_k} \\
&= \frac{W_n G_n + V_n \sum_{k=1}^{n-1}W_k}{\sum_{k=1}^{n}W_k} \tag{by (a)} \\
&= \frac{W_n G_n + V_n \sum_{k=1}^{n}W_k - V_n W_n}{\sum_{k=1}^{n}W_k} \\
&= V_n + W_n\frac{G_n - V_n}{\sum_{k=1}^{n}W_k}
\end{flalign}$

For a fully incremental rule we also have to replace the sum over $W_k$ which can simply be a running total.

$C_n = \sum_{k=1}^n W_k$

the following update rule will produce an equivalent $C_n$ assuming we take $C_0=0$

$C_n = C_{n-1} + W_n$

Now we can rewrite our last expression for $V_{n+1}$

$V_{n+1} = V_n + \frac{W_n}{C_n}(G_n - V_n)$
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$f41dd3e6-81bf-43e4-afc2-fc549b77f610„§cell_idÙ$f41dd3e6-81bf-43e4-afc2-fc549b77f610¤codeÙn(Ï€star2_racetrack2, Qstar2_racetrack2) = monte_carlo_ES(track2_mdp, 1.0f0, mces2; override_state_init = true)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$6d765229-2816-4abb-a868-6be919a96530„§cell_idÙ$6d765229-2816-4abb-a868-6be919a96530¤codeÙ*const blackjack_mdp = make_blackjack_mdp()¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$e7de31e8-ae95-4616-86a9-a115a5e24330„§cell_idÙ$e7de31e8-ae95-4616-86a9-a115a5e24330¤codeÙ)const track2_mdp = make_track_mdp(track2)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$fff54c56-5afe-4d89-9dc5-502d08c89de9„§cell_idÙ$fff54c56-5afe-4d89-9dc5-502d08c89de9¤codeÙ<make_col_set(x, ymin, ymax) = Set((x, y) for y in ymin:ymax)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$9793b5c9-d4ec-492d-a72d-8737bb65c8a5„§cell_idÙ$9793b5c9-d4ec-492d-a72d-8737bb65c8a5¤codeÚ0md"""
Given a starting state $S_t$, the probability of the subsequent state-action trajectory, $A_t, S_{t+1}, A_{t+1}, \ldots ,S_T$, occuring under any policy $\pi$ is:

$Pr_{\pi}\{\mathcal{traj}\} = \prod_{k=t}^{T-1} \pi(A_k|S_k)p(S_{k+1}|S_k, A_k)$

where $p$ here is the state-transition probability function defined by (3.4).  Thus, the relative probability of the trajectory under the target and behavior policies (the importance-sampling ratio) is

$\rho_{t:T-1} \dot= \prod_{k=t}^{T-1}\frac{\pi(A_k|S_k)}{b(A_k|S_k)}$
To estimate $v_\pi(s)$, we simply scale the returns by the ratios and average the results:

$V(s) \dot= \frac{\sum_{t \in \mathscr{T}(s)} \rho_{t:T(t)-1}G_t}{|\mathscr{T}(s)|}$ 

When importance sampling is done as a simple average in this way it is called *ordinary importance sampling*.

An important alternative is *weighted importance sampling*, which uses a *weighted* average, defined as

$V(s) \dot= \frac{\sum_{t \in \mathscr{T}(s)} \rho_{t:T(t)-1}G_t}{\sum_{t \in \mathscr{T}(s)} \rho_{t:T(t)-1}}$,
or zero is the denominator is zero.
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$1117e6c3-2736-46a4-bac2-d3c99c1998b6„§cell_idÙ$1117e6c3-2736-46a4-bac2-d3c99c1998b6¤codeÚ@bind mcÏµs2 confirm(PlutoUI.combine() do Child
	md"""
	| Number of Episodes | Ïµ | Decay Ïµ |
	| :-: | :-: | :-: |
	|$(Child(:episodes, NumberField(1:10_000_000, default = 1_000))) | $(Child(:Ïµ, NumberField(0.001:0.001:1.0; default = 0.01))) | $(Child(:decay, CheckBox())) |
	"""
end)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$5948f670-1203-4b75-8517-f8470f5d01aa„§cell_idÙ$5948f670-1203-4b75-8517-f8470f5d01aa¤codeÚåfunction figure_5_4(expmax, nsims)
	nmax = 10^expmax
	function makeplotinds(expmax)
		plotinds = mapreduce(i -> i:min(i, 1000):i*9, vcat, 10 .^(0:expmax-1))
		vcat(plotinds, 10^(expmax))
	end

	plotinds = makeplotinds(expmax)

	vhistnormal = Vector{Vector{Float32}}(undef, nsims)
	@threads for i in 1:nsims
		vhistnormal[i] = monte_carlo_pred_V(onestate_Ï€_target, onestate_Ï€_b, onestate_mdp, 1.0f0; num_episodes = nmax, sampleinds = plotinds)[1]
	end
	# vhistnormal = [monte_carlo_pred(onestate_Ï€_target, onestate_Ï€_b, onestate_mdp, 1.0f0; num_episodes = nmax)[1][plotinds] for _ in 1:nsims]

	vhistweighted = monte_carlo_pred_V(onestate_Ï€_target, onestate_Ï€_b, onestate_mdp, 1.0f0; num_episodes = nmax, samplemethod = Weighted(), sampleinds = plotinds)[1]

	
	traces1 = [scatter(x = plotinds, y = vhist, showlegend = false) for vhist in vhistnormal]
	trace2 = scatter(x = plotinds, y = vhistweighted, name = "Weighted Importance Sampling", line_dash = "dash", line_width = 4)
	p = plot([traces1; trace2], Layout(yaxis_range = [0, 3], xaxis_type = "log", legend_orientation = "h", xaxis_title = "Episodes (log scale)", yaxis_title = attr(text = "Monte-Carlo estimate of <br> state value with <br> ordinary importance sampling ($nsims runs)", rotation = 90)))
	md"""
	### Figure 5.4
	Ordinary importance sampling produces surprisingly unstable estimates on the one-state MDP shown in Example 5.5.  The correct estimate here is 1 ($\gamma = 1$), and, even through this is the expected value of a sample return (after importance sampling), the variance of the samples is infinite, and the estimates do not converge to this value.  In contrast weighted importance samping produces the correct value of 1 after the first episode that ends with the left action.
	$p
	"""
	
	# p2 = plot(histogram(x = [v[end] for v in vhistnormal], showlegend = false))

	# [p p2]
	# traces2 = [scatter(x = plotinds, y = vhist) for vhist in vhistweighted]
	# p2 = plot(traces2, Layout(showlegend = false))
	# md"""
	# $p1
	# $p2
	# """
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$2ed88aa5-fc42-4a57-924d-e918805e2208„§cell_idÙ$2ed88aa5-fc42-4a57-924d-e918805e2208¤code·md"""
##### Track 2
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$c9bd778c-217a-4664-8cde-841beca10307„§cell_idÙ$c9bd778c-217a-4664-8cde-841beca10307¤codeÚ&@htl("""
<div>Reward = +1 on All Transitions</div>
<div style="display: flex; align-items: center; background-color: lightgray; color: black; height: 150px; width: 100px;">
<div class="backup" style="transform: scale(130%)">
	<div class="circlestate"></div>
	<div class="arrow"></div>
	<div class="term"></div>
</div>
<div>
	<div class="loop"></div>
	<div style="transform: translateY(-15px)">1-p</div>
</div>
</div>
<style>
	.loop {
		display: flex;
		border-width: 2px 0px 0px 2px;
		border-style: solid;
		border-color: black;
		width: 38px;
		height: 28px;
		border-radius: 50% 50% 50% 15%;
		transform: translateY(-30px) rotate(45deg);
	}
	.loop::before {
		content: '';
		position: relative;
		width: 5px;
		height: 5px;
		border-width: 0px 0px 3px 3px;
		border-style: solid;
		border-color: black;
		transform: translateX(-4px) translateY(17px) rotate(-45deg)
	}
	.loop::after {
		content: 'p';
		border-width: 0px 2px 2px 0px;
		border-style: solid;
		border-color: black;
		width: 38px;
		height: 28px;
		border-radius: 50% 50% 50% 0%;
	}
</style>
""")¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$605b045d-fe5c-426b-9f55-b7dd1d037c50„§cell_idÙ$605b045d-fe5c-426b-9f55-b7dd1d037c50¤codeÙAmd"""
Example trajectories after training for $mces1 episodes
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$88335fca-fd87-487b-9de2-ea7c779b54cf„§cell_idÙ$88335fca-fd87-487b-9de2-ea7c779b54cf¤codeÙ1md"""
## 5.9 Per-decision Importance Sampling
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$fd91d00a-f94f-40ff-88a7-9d85f05acc96„§cell_idÙ$fd91d00a-f94f-40ff-88a7-9d85f05acc96¤codeÙ<make_row_set(xmin, xmax, y) = Set((x, y) for x in xmin:xmax)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$a59d9c84-d35f-4a9b-9fb6-13e30cdd7c3a„§cell_idÙ$a59d9c84-d35f-4a9b-9fb6-13e30cdd7c3a¤codeÚ«monte_carlo_pred_Q(Ï€_blackjack1, Ï€_rand_blackjack, blackjack_mdp, 1.0f0; num_episodes =  100000, historystateindex = blackjack_stateindex1, qinit = 0.0f0, override_state_init = true, samplemethod=Ordinary(), use_target_initial_action = true)[3] |> mean #mean weight is 2 and it stays this way as the number of episodes increases so the returns that are seen by the behavior are roughtly doubled and counted with the 0 returns¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$df3c4a33-45f1-4cc2-8c06-d500a0eecc8f„§cell_idÙ$df3c4a33-45f1-4cc2-8c06-d500a0eecc8f¤codeÚ	#track is defined as a set of points for each of the start, body, and finish
const track1 = (  start = Set((x, 0) for x in 0:5), 
            finish = Set((13, y) for y in 26:31), 
            body = union(   Set((x, y) for x in 0:5 for y in 1:2),
                            Set((x, y) for x in -1:5 for y in 3:9),
                            Set((x, y) for x in -2:5 for y in 10:17),
                            Set((x, y) for x in -3:5 for y in 18:24),
                            Set((x, 25) for x in -3:6),
                            Set((x, y) for x in -3:12 for y in 26:27),
                            Set((x, 28) for x in -2:12),
                            Set((x, y) for x in -1:12 for y in 29:30),
                            Set((x, 31) for x in 0:12)),
        )¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$e2fc1d47-2ee9-4844-a6b1-16f76531da86„§cell_idÙ$e2fc1d47-2ee9-4844-a6b1-16f76531da86¤code¿@bind run3_2 Button("Run Race")¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$2d36ebe3-1a86-4cad-a235-baec726da926„§cell_idÙ$2d36ebe3-1a86-4cad-a235-baec726da926¤codeÚÏmd"""
#### Example Random Trajectories on Each Track
The black arrows represent the velocity of the car at that position, and the red arrows show the policy action to change the velocity.  Note that only non-negative values are allowed for velocity to some of the actions have no impact.  Also, the car is not allowed by be stopped so if an action were to reduce the velocity to 0, then a random velocity of +1 will be assigned to either the x or y direction.
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$dfc2d648-ec08-49cd-a55f-72a766cad728„§cell_idÙ$dfc2d648-ec08-49cd-a55f-72a766cad728¤codeÙh(Ï€star1_racetrack1, Qstar1_racetrack1) = off_policy_MC_control(track1_mdp, 1.0f0; num_episodes = opmc1)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$7ee4e17e-c1a9-4df0-a014-114bebcb4f52„§cell_idÙ$7ee4e17e-c1a9-4df0-a014-114bebcb4f52¤codeÙämakegridsquare(x, y, vx, vy, dvx, dvy; class = "", xmin=0, ymin=0) = """<div class = "$class" vx = "$vx" vy = "$vy" dvx = "$dvx" dvy = "$dvy" style="grid-column-start: $(x - xmin + 1); grid-row-start: $(y - ymin + 1);"></div>"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$2d10281a-a4af-4ea8-b63b-e11f2d0893ed„§cell_idÙ$2d10281a-a4af-4ea8-b63b-e11f2d0893ed¤codeÙ÷function make_greedy_policy!(v::AbstractVector{T}; c = 1000) where T<:Real
	(vmin, vmax) = extrema(v)
	if vmin == vmax
		v .= one(T) / length(v)
	else
		v .= (v .- vmax) ./ abs(vmin - vmax)
		v .= exp.(c .* v)
		v .= v ./ sum(v)
	end
	return v
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$e87932d9-fbc0-4ea5-a8ee-28eac5eed84f„§cell_idÙ$e87932d9-fbc0-4ea5-a8ee-28eac5eed84f¤codeÚ	{begin
	abstract type BlackjackAction end
	struct Hit <: BlackjackAction end
	struct Stick <: BlackjackAction end
	struct BlackjackState
		sum::Int64
		upcard::Int64
		ua::Bool
	end
	const cards = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]
	const unique_cards = collect(1:10)
	const blackjack_actions = [Hit(), Stick()]
	const blackjackstates = [BlackjackState(s, c, ua) for s in 12:21 for c in unique_cards for ua in (true, false)]
	const blackjack_statelookup = makelookup(blackjackstates)
	const Ï€_blackjack_random = ones(Float32, 2, length(blackjackstates)) /2
	#deal a card from an infinite deck and return either the value of that card or an ace
	deal() = rand(cards)
	
	#takes a previous sum, usable ace indicator, and a card to be added to the sum.  Returns the updated sum and whether an ace is still usable
	function addsumace(s::Int64, ua::Bool)
		if !ua
			s >= 11 ? (s+1, false) : (s+11, true)
		else
			(s+1, true)
		end
	end

	function addsum(s::Int64, ua::Bool, c::Int64)
		c == 1 && return addsumace(s, ua)
		if !ua
			(s + c, false)
		else
			if (s + c) > 21
				(s + c - 10, false)
			else
				(s + c, true)
			end
		end
	end

	function dealer_sim(dealer_sum::Int64, dua::Bool)
		(dealer_sum >= 17) && return dealer_sum
		(new_sum, ua) = addsum(dealer_sum, dua, deal())
		dealer_sim(new_sum, ua)
	end

	playersim(state, ::Stick, Ï€, statehistory, actionhistory) = (state.sum, statehistory, actionhistory)
	function playersim(state, ::Hit, Ï€, statehistory, actionhistory)
		(s, ua) = addsum(state.sum, state.ua, deal())
		(s > 21) && return (s, statehistory, actionhistory)
		newstate = BlackjackState(s, state.upcard, ua)
		i_s = blackjack_statelookup[newstate]
		i_a = sample_action(Ï€, i_s)
		newaction = blackjack_actions[i_a]
		playersim(newstate, newaction, Ï€, push!(statehistory, newstate), push!(actionhistory, newaction))
	end
	playersim(state::BlackjackState, action::BlackjackAction, Ï€::Matrix{Float32}) = playersim(state, action, Ï€, [state], Vector{BlackjackAction}([action]))

	#score a game in which the player didn't go bust
	function scoregame(playersum, dealersum)
		#if the dealer goes bust, the player wins
		dealersum > 21 && return 1.0f0

		#if the player is closer to 21 the player wins
		playersum > dealersum && return 1.0f0

		#if the dealer sum is closer to 21 the player loses
		playersum < dealersum && return -1.0f0

		#otherwise the outcome is a draw
		return 0.0f0
	end
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$1cc46e33-6885-4d6f-805e-9ff928f1cf23„§cell_idÙ$1cc46e33-6885-4d6f-805e-9ff928f1cf23¤codeÙ;const racetrackspeeds = unique(norm.(racetrack_velocities))¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$f79d97bb-341a-46ad-bdfc-d080af13e2df„§cell_idÙ$f79d97bb-341a-46ad-bdfc-d080af13e2df¤codeÙ2md"""
#### Monte Carlo Ïµ-Soft Solution Method
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$6a11daf7-2859-41fa-9c3d-d1f3580dbb5f„§cell_idÙ$6a11daf7-2859-41fa-9c3d-d1f3580dbb5f¤codeÙ$md"""
### Example 5.1: Blackjack
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$985f0537-2bbe-4dbb-a113-8ac98d2e0a5f„§cell_idÙ$985f0537-2bbe-4dbb-a113-8ac98d2e0a5f¤codeÙlsampleracepolicy(create_policy_function(Ï€star3_racetrack1, track1_mdp); policyname = "Monte Carlo Ïµ-Soft")¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$217ecc59-d6e3-48fa-9d6d-700a3947b805„§cell_idÙ$217ecc59-d6e3-48fa-9d6d-700a3947b805¤codeÚ[monte_carlo_pred_Q(Ï€_blackjack1, Ï€_rand_blackjack, blackjack_mdp, 1.0f0; num_episodes =  1, historystateindex = blackjack_stateindex1, qinit = 0.0f0, override_state_init = true, samplemethod=Ordinary(), use_target_initial_action = true)[3][1:1] |> sum for i in 1:1000] |> v -> mean(v)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$a35de859-4046-4f6d-9ea9-b523d21cee5d„§cell_idÙ$a35de859-4046-4f6d-9ea9-b523d21cee5d¤codeÚ function make_value_grid(v_Ï€)
	vgridua = zeros(Float32, 10, 10)
	vgridnua = zeros(Float32, 10, 10)
	for (i_s, s) in enumerate(blackjackstates)
		if s.ua
			vgridua[s.sum-11, s.upcard] = v_Ï€[i_s]
		else
			vgridnua[s.sum-11, s.upcard] = v_Ï€[i_s]
		end
	end
	return vgridua, vgridnua
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$12c0cd0b-eb4f-45a0-836b-53b3c5cdafd9„§cell_idÙ$12c0cd0b-eb4f-45a0-836b-53b3c5cdafd9¤codeÙ>md"""
## 5.5 Off-policy Prediction via Importance Sampling
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$aaa9647c-afb6-44d1-ae1e-a2e957064080„§cell_idÙ$aaa9647c-afb6-44d1-ae1e-a2e957064080¤codeÚ#updates the denominator used in the value update.  For ordinary sampling, this is just the count of visits to that state.  For weighted sampling, this is the sum of all importance-sampling ratios at that state
updatecount(::Ordinary, w::T) where T<:Real = one(T)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$b57462b6-8f9c-4553-9c05-134ff043b00d„§cell_idÙ$b57462b6-8f9c-4553-9c05-134ff043b00d¤codeÚÚmd"""
> ### *Exercise 5.9* 
> Modify the algorithm for first-visit MC policy evaluation (section 5.1) to use the incremental implementation for sample averages described in Section 2.4

Returns(s) will not maintain a list but instead be a list of single values for each state.  Additionally, another list Counts(s) should be initialized at 0 for each state.  When new G values are obtained for state, the Count(s) value should be incremented by 1.  Then Returns(s) can be updated with the following formula: 

$\begin{flalign}
	\text{Returns}(s) &= \left [ \text{Returns}(s) \times (\text{Counts}(s) - 1) + G \right ] / \text{Counts}(s) \\ 
	&= \text{Returns}(s) + \frac{G - \text{Returns}(s)}{\text{Counts}(s)}
\end{flalign}$
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$f506e8ba-b073-4f59-91b4-3fe99822d2a4„§cell_idÙ$f506e8ba-b073-4f59-91b4-3fe99822d2a4¤codeÙXconst scalelookup = Dict(s => round(Int64, 150*(s / maxspeed)) for s in racetrackspeeds)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$bf19e6cf-1fb5-49c9-974e-1613d90ef4cf„§cell_idÙ$bf19e6cf-1fb5-49c9-974e-1613d90ef4cf¤codeÙb(Ï€star_blackjack2, Qstar_blackjack2) = monte_carlo_Ïµsoft(blackjack_mdp, 0.1f0, 1.0f0, 1_000_000)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$77cf7fee-0ad8-4d22-b376-75833307db93„§cell_idÙ$77cf7fee-0ad8-4d22-b376-75833307db93¤codeÙŒbegin
	using StatsBase, Statistics, PlutoUI, HypertextLiteral, LaTeXStrings, PlutoPlotly, Base.Threads, LinearAlgebra
	TableOfContents()
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$d11bfcf9-b964-4c67-afdc-53d81f051fd5„§cell_idÙ$d11bfcf9-b964-4c67-afdc-53d81f051fd5¤codeÚ_function monte_carlo_pred_V(Ï€_target::Matrix{T}, Ï€_behavior::Matrix{T}, mdp::MDP_Opaque{S, A, F, G}, Î³::T; num_episodes::Integer = 1000, vinit::T = zero(T), V::Vector{T} = ones(T, length(mdp.states)) .* vinit, historystateindex::Integer = 1, samplemethod::ImportanceMethod = Ordinary(), override_state_init::Bool = false, sampleinds = 1:num_episodes) where {T <: AbstractFloat, S, A, F, G}
	check_policy(Ï€_target, mdp)
	check_policy(Ï€_behavior, mdp)
	@assert all(x -> x != 0, Ï€_behavior) #behavior policy must have full coverage
	
	#initialize
	counts = zeros(T, length(mdp.states))
	valuehistory = zeros(T, length(sampleinds))
	weighthistory = ones(T, length(sampleinds))
	sampleind = 1

	for i in 1:num_episodes
		#if only interested in one state then always initialize there
		s0 = override_state_init ? mdp.states[historystateindex] : mdp.state_init()
		i_a0 = sample_action(Ï€_behavior, mdp.statelookup[s0])
		a0 = mdp.actions[i_a0]
		(states, actions, rewards) = mdp.simulator(s0, a0, Ï€_behavior)
		#update value function for each trajectory
		w = updateV!(mdp, V, counts, Ï€_target, Ï€_behavior, states, actions, rewards, Î³, samplemethod)

		#for selected state check value
		if i == sampleinds[sampleind]
			valuehistory[sampleind] = V[historystateindex]
			weighthistory[sampleind] = w
			sampleind += 1
		end
	end
	return valuehistory, V, weighthistory 
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$19e42f50-5301-41b9-becb-2368c26b6236„§cell_idÙ$19e42f50-5301-41b9-becb-2368c26b6236¤codeÚ[monte_carlo_pred_Q(Ï€_blackjack1, Ï€_rand_blackjack, blackjack_mdp, 1.0f0; num_episodes =  10, historystateindex = blackjack_stateindex1, qinit = 0.0f0, override_state_init = true, samplemethod=Ordinary(), use_target_initial_action = true)[3] |> mean for i in 1:1000] |> v -> mean(v)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$924f4e74-e3a0-42eb-89da-1f9836275588„§cell_idÙ$924f4e74-e3a0-42eb-89da-1f9836275588¤codeÚÙfunction off_policy_MC_control(mdp::MDP_Opaque, Î³::T; Ï€_b::Matrix{T} = make_random_policy(mdp), num_episodes::Integer = 1000, qinit::T = zero(T)) where T<: AbstractFloat
	Q = initialize_state_action_value(mdp; qinit = qinit)
	counts = initialize_state_action_value(mdp; qinit = zero(T))
	Ï€_star = create_greedy_policy(Q)
	vhold = zeros(T, length(mdp.actions))
	for i in 1:num_episodes
		s0 = mdp.state_init()
		i_a0 = sample_action(Ï€_b, mdp.statelookup[s0])
		a0 = mdp.actions[i_a0]
		(states, actions, rewards) = mdp.simulator(s0, a0, Ï€_b)

		g = zero(T)
		w = one(T)
		t = length(states)
		for t = length(states):-1:1
			g = Î³*g + rewards[t]
			i_s = mdp.statelookup[states[t]]
			i_a = mdp.actionlookup[actions[t]]
			counts[i_a, i_s] += w
			Q[i_a, i_s] += (w/counts[i_a, i_s])*(g - Q[i_a, i_s])
			
			#update the target policy to be greedy at state s
			vhold .= Q[:, i_s]
			make_greedy_policy!(vhold)
			Ï€_star[:, i_s] .= vhold
			
			#end episode if trajectory is no longer possible under target policy
			Ï€_star[i_a, i_s] == 0 && break
			#note that here I replace the numerator with the probability under the target policy instead of 1.  That is because Ï€_star here may be stochastic in the case of a tie
			w *= (Ï€_star[i_a, i_s] / Ï€_b[i_a, i_s])
		end
		# #there's no check here so this is equivalent to every-visit estimation
		# function update!(t = length(states); g = zero(T), w = one(T))
		# 	t == 0 && return nothing
		# 	g = Î³*g + rewards[t]
		# 	i_s = mdp.statelookup[states[t]]
		# 	i_a = mdp.actionlookup[actions[t]]
		# 	counts[i_a, i_s] += w
		# 	Q[i_a, i_s] += (w/counts[i_a, i_s])*(g - Q[i_a, i_s])
			
		# 	#update the target policy to be greedy at state s
		# 	vhold .= Q[:, i_s]
		# 	make_greedy_policy!(vhold)
		# 	Ï€_star[:, i_s] .= vhold
			
		# 	#end episode if trajectory is no longer possible under target policy
		# 	Ï€_star[i_a, i_s] == 0 && return nothing
		# 	w /= Ï€_b[i_a, i_s]
		# 	update!(t-1, g=g, w=w)
		# end
		# update!()
	end
	return Ï€_star, Q
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$6dc0de46-2164-4580-b186-a73cb5b5167d„§cell_idÙ$6dc0de46-2164-4580-b186-a73cb5b5167d¤codeÚw#given a position, velocity, and action takes a forward step in time and returns the new position, new velocity, and a set of points that represent the space covered in between
function project_path(p, v, a)
	(vx, vy) = v
    (dx, dy) = a

    vxnew = clamp(vx + dx, 0, 4)
    vynew = clamp(vy + dy, 0, 4)

    #both velocity components cannot be zero except when the race starts
    if (vxnew + vynew) == 0
        if rand() < 0.5
            vxnew += 1
        else
            vynew += 1
        end
    end

    #position the car ends up at
    pnew = (p[1] + vxnew, p[2] + vynew)

    #how to check if the path intersects the finish line or the boundary?  Form a square from vxnew and vynew and see if the off-track area or finish line is contained in that square
    pathsquares = Set((x, y) for x in p[1]:pnew[1] for y in p[2]:pnew[2])

    (pnew, (vxnew, vynew), pathsquares)
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$63814164-f305-49b3-ab51-675c822d7b18„§cell_idÙ$63814164-f305-49b3-ab51-675c822d7b18¤codeÙCconst racetrack_velocities = [(vx, vy) for vx in 0:4 for vy in 0:4]¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$4337b83f-b648-4b55-9d2a-4fffcf701111„§cell_idÙ$4337b83f-b648-4b55-9d2a-4fffcf701111¤codeÙÏhtml"""
	<style>
		main {
			margin: 0 auto;
			max-width: min(2000px, 90%);
	    	padding-left: max(10px, 5%);
	    	padding-right: max(10px, 5%);
			font-size: max(10px, min(18px, 2vw));
		}
	</style>
	"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$1b78b25d-3942-4a6b-a2bd-7d97242da9fe„§cell_idÙ$1b78b25d-3942-4a6b-a2bd-7d97242da9fe¤codeÚLmonte_carlo_ES(mdp::MDP_Opaque, Î³::T, num_episodes; Q_init::Matrix{T} = initialize_state_action_value(mdp; qinit = zero(T)), Ï€_init::Matrix{T} = make_random_policy(mdp; init = one(T)), override_state_init = false) where T <: Real = monte_carlo_ES(mdp, Ï€_init, Q_init, Î³, num_episodes; override_state_init = override_state_init) ¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$9524a3f5-fca3-4ce9-b04d-0cb6c0cd0c90„§cell_idÙ$9524a3f5-fca3-4ce9-b04d-0cb6c0cd0c90¤codeÚ#off policy control learns very slowly because each episode from the random policy takes thousands of steps to even finish the race.  Even after 1_000 episodes almost no learning has occured. 
begin
	run1_1
	showrace(track1, create_policy_function(Ï€star1_racetrack1, track1_mdp))
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$2ed0d4bb-bb6e-4adf-ad7c-8ddeb8c20b84„§cell_idÙ$2ed0d4bb-bb6e-4adf-ad7c-8ddeb8c20b84¤codeÙÿq_offpol[2][:, blackjack_stateindex1] #the second value should converge to -0.27726 same as the value function for the policy that hits on this state.  The first value is the value of sticking on this state which should be lower since it is a worse action¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$a0d61852-9942-42de-b554-572c4526a3a8„§cell_idÙ$a0d61852-9942-42de-b554-572c4526a3a8¤codeÚ function make_track_mdp(track; maxsteps = Inf)
	states = [(position = p, velocity = v) for p in union(track.start, track.body) for v in racetrack_velocities]
	state_init() = (position = rand(track.start), velocity = (0, 0))

	statelookup = makelookup(states)
	function take_action(Ï€, s)
		i_s = statelookup[s]
		i_a = sample_action(Ï€, i_s)
		racetrack_actions[i_a]
	end
	
	simulator(s0, a0, Ï€) = race_track_episode(s0, a0, s -> take_action(Ï€, s), track, maxsteps = maxsteps)
	MDP_Opaque(states, racetrack_actions, state_init, simulator)
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$bb617e58-2700-4f0d-b8c8-3a266142fb70„§cell_idÙ$bb617e58-2700-4f0d-b8c8-3a266142fb70¤codeÙBconst racetrack_actions = [(dx, dy) for dx in -1:1 for dy in -1:1]¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$0d9c5d60-878a-45bb-8707-275cf10be41f„§cell_idÙ$0d9c5d60-878a-45bb-8707-275cf10be41f¤code¿@bind run2_2 Button("Run race")¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$b6eac49e-6742-4594-87a5-821437846b0d„§cell_idÙ$b6eac49e-6742-4594-87a5-821437846b0d¤codeÚ.#using ordinary importance sampling calculates statistics on weights observed after n episodes of training including what percentage of weights are 0, 1, 2 etc...
function test(n)
	[monte_carlo_pred_Q(Ï€_blackjack1, Ï€_rand_blackjack, blackjack_mdp, 1.0f0; num_episodes =  n, historystateindex = blackjack_stateindex1, qinit = 0.0f0, override_state_init = true, samplemethod=Ordinary(), use_target_initial_action = true)[3][1:n] |> v -> n - sum(v .== 0) for _ in 1:10000] |> v -> (mean(v), median(v), mode(v), mean(v .== 0), mean(v .== 1), mean(v .== 2))
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$61d8cfc6-a50c-4546-9e1f-dc73d4764bb9„§cell_idÙ$61d8cfc6-a50c-4546-9e1f-dc73d4764bb9¤codeÚ\#there's no check here so this is equivalent to every-visit estimation
function updateQ!(mdp, Q, counts, Ï€_target::Matrix{T}, Ï€_behavior::Matrix{T}, states, actions, rewards::Vector{T}, Î³::T, samplemethod::ImportanceMethod; t = length(states), g_old = zero(T), w = one(T)) where T<:Real		

	#terminate at the end of a trajectory
	(t == 0) && return w
	
	if (w == zero(T)) && isa(samplemethod, Weighted) 
		return w
	end
	
	#accumulate future discounted returns
	g = Î³*g_old + rewards[t]
	i_s = mdp.statelookup[states[t]]
	i_a = mdp.actionlookup[actions[t]]
	counts[i_a, i_s] += updatecount(samplemethod, w)
	Q[i_a, i_s] += updatevalue(samplemethod, Q[i_a, i_s], g, w, counts[i_a, i_s])
	updateQ!(mdp, Q, counts, Ï€_target, Ï€_behavior, states, actions, rewards, Î³, samplemethod; t = t-1, g_old = g, w = w * Ï€_target[i_a, i_s] / Ï€_behavior[i_a, i_s])
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$847a074c-1d23-4de3-a039-322aeb9f7613„§cell_idÙ$847a074c-1d23-4de3-a039-322aeb9f7613¤code§test(2)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$d2625507-4787-4b1c-9a91-108012e42cc7„§cell_idÙ$d2625507-4787-4b1c-9a91-108012e42cc7¤codeÙßfunction make_rotation_style(vx, vy)
	((vx==0) && (vy==0)) && return """"""
	"""
	[vx='$vx'][vy='$vy']::before {
		content: 'â†’';
		transform: rotate($(atand(vy, vx))deg) scale($(scalelookup[norm([vx, vy])])%);
	}
	"""
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$94be5289-bba7-4490-bdcd-0d217a31c665„§cell_idÙ$94be5289-bba7-4490-bdcd-0d217a31c665¤codeÙõ#calculate value function for blackjack policy Ï€ and save results in plot-ready grid form
function eval_blackjack_policy(Ï€, episodes; Î³=1f0)
	v_Ï€ = monte_carlo_pred_V(Ï€, blackjack_mdp, Î³; num_episodes = episodes)
	make_value_grid(v_Ï€)
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$f7616806-97ab-4b09-accc-4e047691f879„§cell_idÙ$f7616806-97ab-4b09-accc-4e047691f879¤codeÚ\#track is defined as a set of points for each of the start, body, and finish
const track2 = (  start = make_row_set(0, 22, 0), 
            finish = make_col_set(31, 21, 29), 
            body = union(   union((make_row_set(0, 22, y) for y in 1:2)...),
                            union((make_row_set(i, 22, y) for (i, y) in zip(1:14, 3:16))...),
							make_row_set(14, 23, 17),
							make_row_set(14, 25, 18),
							make_row_set(14, 26, 19),
							make_row_set(14, 29, 20),
							union((make_row_set(xstart, 31, y) for (xstart, y) in zip([13, 12, 11, 11, 11, 11, 12, 13, 16], 21:29))...))
        )¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$70d9d39f-020d-4f25-810c-82a143a3335b„§cell_idÙ$70d9d39f-020d-4f25-810c-82a143a3335b¤codeÙ;const Ï€_rand_blackjack = make_random_policy(blackjack_mdp)¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$780f2fd9-49c3-48bc-b790-dde5be1dc81b„§cell_idÙ$780f2fd9-49c3-48bc-b790-dde5be1dc81b¤code±track1_mdp.states¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$833bb53c-bc2b-47fb-9429-d0f6d92efb42„§cell_idÙ$833bb53c-bc2b-47fb-9429-d0f6d92efb42¤code¿@bind run1_1 Button("Run race")¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$e370dbb3-3bd9-4dc8-b8ca-8aad8711905c„§cell_idÙ$e370dbb3-3bd9-4dc8-b8ca-8aad8711905c¤codeÚD@htl("""
<style>
	.track {
		display: grid;
		grid-gap: 0px;
		background-color: white;
		transform: rotateX(180deg);
	}

	.track * {
		width: 15px;
		height: 15px;
		border: 1px solid black;
		box-sizing: content-box;
		display: flex;
		justify-content: center;
		align-items: center;
	}

	[vx][vy][dvx][dvy]::before {
		display: flex;
		align-items: center;
		justify-content: center;
		position: absolute;
	}

	[vx][vy][dvx][dvy]::after {
		display: flex;
		align-items: center;
		justify-content: center;
		position: absolute;
	}

	.start {
		background-color: orange;
	}
	.finish {
		background-color: green;
	}

	[vx='0'][vy='0']::before {
		content: 'â€¢';
	}

	$(mapreduce(a -> make_rotation_style(a...), joinlines, racetrack_velocities)))
	$(mapreduce(a -> make_action_style(a...), joinlines, racetrack_actions)))
</style>
""")¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃÙ$2646c9a2-46b1-4700-9290-ddc7dc9a59af„§cell_idÙ$2646c9a2-46b1-4700-9290-ddc7dc9a59af¤code¾updatecount(::Weighted, w) = w¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$892b5d8e-ac51-48f1-8288-65e9f68acd2d„§cell_idÙ$892b5d8e-ac51-48f1-8288-65e9f68acd2d¤codeÚÄ[monte_carlo_pred_V(Ï€_blackjack1, Ï€_rand_blackjack, blackjack_mdp, 1.0f0; num_episodes =  10, historystateindex = blackjack_stateindex1, vinit = 0.0f0, override_state_init = true, samplemethod=Ordinary())[3][1:10] |> sum for i in 1:1000] |> v -> (mean(v), count(v .== 0)/1000)
#for the target vs behavior policy, after one episode the mean weight including hte 0 values is about 2, let's say that all of these terminate in either 1 or -1.  Then we'd have a mean reward value of 2 or -2 which has a squared error of ~5 and 3 respectively depending on whether a win or loss is more likely since the denominator will be 1.  This is with ordinary importance sampling.  In contrast with weighted importance sampling the divisor will be 2 on average too and each estimate will be an actual return value experienced by the behavior policy or 0 for impossible trajectories.  Each of these will be worse than the 0 estimate.  About 72% of the episodes will have a 0 weight after the first episode but only 3.5% will not have any update after 10 episodes.  So for weighted importance sampling we have 72% 0 values and 28% the normal values.  The key difference is that for ordinary importance sampling the 28% of values that aren't zero have a weight of about 7 whereas for weighted sampling all the weights are 1 for the value estimate after normalization.  With an initial value estimate of 0, the squared error would be about 0.077.  Seeing the error for the weighted results after 1 episode on average, it is about 0.25 which is consistent with about 28% of the runs having error values of 0.52 or 1.63 instead of 0.77.  One thing I'm wondering though is why doesn't the error go up for Ordinary importance sampling after more of the episodes have non zero weighting.  Key point is that the initial value of V doesn't matter.  Some of the values are 0 just because the weighting is 0 and the corresponding denominator is still 1.  Remember that as the second episode is added it is likely that most of those values will get cut in half due to a 0 weight trajectory and the count going up.  Whereas for weighted sampling, all the 0's that get replaced will get worse while the others that have a new estimate won't be changed at all if they get a 0 weight trajectory.  This behavior policy seems to on average product a trajectory that is possible with the target policy only 28% of the time so the most likely thing is just replacing existing 0's and not changing the other estimates.  With normal importance sampling though, all those existing estimates will get cut in half and then some new ones will come in.  Also it is likely that each run would need 4 non zero samples before that estimate is better than the initial 0 value, so that explains why the weighted sampling error doesn't drop until after 10 episodes where the average number of non zero samples is higher than that. After 7 episodes the average number of non zero weight trajectories is 2.  At 10 episodes the median and mode non zero weights is 3¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$acb08e38-fc87-43f4-ac2d-6c6bf0f2e9e6„§cell_idÙ$acb08e38-fc87-43f4-ac2d-6c6bf0f2e9e6¤codeÚvfunction estimate_mdp_state(mdp, Ï€::Matrix{T}, stateindex, num_episodes) where T<:AbstractFloat
	staterewards = zeros(T, num_episodes)
	s0 = mdp.states[stateindex]
	for i in 1:num_episodes
		i_a0 = sample_action(Ï€, stateindex)
		a0 = mdp.actions[i_a0]
		(states, actions, rewards) = mdp.simulator(s0, a0, Ï€)
		staterewards[i] = last(rewards)
	end
	return staterewards
end¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÂÙ$fca388bd-eb8b-41e2-8da0-87b9386629c1„§cell_idÙ$fca388bd-eb8b-41e2-8da0-87b9386629c1¤codeÙ+md"""
## 5.6 Incremental Implementation
"""¨metadataƒ©show_logsÃ¨disabledÂ®skip_as_scriptÂ«code_foldedÃ«notebook_idÙ$c6e0de0c-3901-11f0-234e-bd09c571f662«in_temp_dirÂ¨metadata€