[INFO] updating cached repository nybblesio/rusty-kong [INFO] running `"git" "fetch" "--all"` [INFO] [stdout] Fetching origin [INFO] [stderr] From git://github.com/nybblesio/rusty-kong [INFO] [stderr] * branch HEAD -> FETCH_HEAD [INFO] running `"git" "clone" "work/cache/sources/gh/nybblesio/rusty-kong" "work/ex/beta-1.37-6/sources/1.36.0/gh/nybblesio/rusty-kong"` [INFO] [stderr] Cloning into 'work/ex/beta-1.37-6/sources/1.36.0/gh/nybblesio/rusty-kong'... [INFO] [stderr] done. [INFO] running `"git" "clone" "work/cache/sources/gh/nybblesio/rusty-kong" "work/ex/beta-1.37-6/sources/beta-2019-07-23/gh/nybblesio/rusty-kong"` [INFO] [stderr] Cloning into 'work/ex/beta-1.37-6/sources/beta-2019-07-23/gh/nybblesio/rusty-kong'... [INFO] [stderr] done. [INFO] running `"git" "rev-parse" "HEAD"` [INFO] [stdout] 265a2d3ddf443063ae59c21060ba61c37b363a3e [INFO] sha for GitHub repo nybblesio/rusty-kong: 265a2d3ddf443063ae59c21060ba61c37b363a3e [INFO] validating manifest of nybblesio/rusty-kong on toolchain 1.36.0 [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+1.36.0" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] validating manifest of nybblesio/rusty-kong on toolchain beta-2019-07-23 [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+beta-2019-07-23" "read-manifest" "--manifest-path" "Cargo.toml"` [INFO] started frobbing nybblesio/rusty-kong [INFO] finished frobbing nybblesio/rusty-kong [INFO] frobbed toml for nybblesio/rusty-kong written to work/ex/beta-1.37-6/sources/1.36.0/gh/nybblesio/rusty-kong/Cargo.toml [INFO] started frobbing nybblesio/rusty-kong [INFO] finished frobbing nybblesio/rusty-kong [INFO] frobbed toml for nybblesio/rusty-kong written to work/ex/beta-1.37-6/sources/beta-2019-07-23/gh/nybblesio/rusty-kong/Cargo.toml [INFO] crate nybblesio/rusty-kong already has a lockfile, it will not be regenerated [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+1.36.0" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] running `"/mnt/big/crater/work/local/cargo-home/bin/cargo" "+beta-2019-07-23" "fetch" "--locked" "--manifest-path" "Cargo.toml"` [INFO] testing nybblesio/rusty-kong against 1.36.0 for beta-1.37-6 [INFO] running `"docker" "create" "-v" "/mnt/big/crater/work/local/target-dirs/beta-1.37-6/worker-3/1.36.0:/opt/crater/target:rw,Z" "-v" "/mnt/big/crater/work/ex/beta-1.37-6/sources/1.36.0/gh/nybblesio/rusty-kong:/opt/crater/workdir:ro,Z" "-v" "/mnt/big/crater/work/local/cargo-home:/opt/crater/cargo-home:ro,Z" "-v" "/mnt/big/crater/work/local/rustup-home:/opt/crater/rustup-home:ro,Z" "-e" "USER_ID=1000" "-e" "SOURCE_DIR=/opt/crater/workdir" "-e" "MAP_USER_ID=1000" "-e" "CARGO_TARGET_DIR=/opt/crater/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=warn" "-e" "CARGO_HOME=/opt/crater/cargo-home" "-e" "RUSTUP_HOME=/opt/crater/rustup-home" "-w" "/opt/crater/workdir" "-m" "1536M" "--network" "none" "rustops/crates-build-env" "/opt/crater/cargo-home/bin/cargo" "+1.36.0" "build" "--frozen"` [INFO] [stdout] 57e40420022f1f3b987d718df293832ab53d7129f1a989ec241d21d31b224bf2 [INFO] running `"docker" "start" "-a" "57e40420022f1f3b987d718df293832ab53d7129f1a989ec241d21d31b224bf2"` [INFO] [stderr] Compiling c_vec v1.3.0 [INFO] [stderr] Compiling sdl2-sys v0.31.0 [INFO] [stderr] Compiling simple_logger v0.5.0 [INFO] [stderr] Compiling sdl2 v0.31.0 [INFO] [stderr] Compiling rusty-kong v0.1.0 (/opt/crater/workdir) [INFO] [stderr] warning: unused import: `self::palettes::get_palette` [INFO] [stderr] --> src/game/rusty_kong/video/mod.rs:20:5 [INFO] [stderr] | [INFO] [stderr] 20 | use self::palettes::get_palette; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_imports)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused import: `self::sprites::get_sprite_bitmap` [INFO] [stderr] --> src/game/rusty_kong/video/mod.rs:24:5 [INFO] [stderr] | [INFO] [stderr] 24 | use self::sprites::get_sprite_bitmap; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `self::tiles::get_tile_bitmap` [INFO] [stderr] --> src/game/rusty_kong/video/mod.rs:27:5 [INFO] [stderr] | [INFO] [stderr] 27 | use self::tiles::get_tile_bitmap; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `sdl2::timer::Timer` [INFO] [stderr] --> src/game/rusty_kong/video/actor.rs:18:5 [INFO] [stderr] | [INFO] [stderr] 18 | use sdl2::timer::Timer; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: unused import: `std::rc::Rc` [INFO] [stderr] --> src/game/rusty_kong/video/mod.rs:34:5 [INFO] [stderr] | [INFO] [stderr] 34 | use std::rc::Rc; [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/ripper/main.rs:286:17 [INFO] [stderr] | [INFO] [stderr] 286 | let mut match_palette: Palette = Palette {entries: [ [INFO] [stderr] | ----^^^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/ripper/main.rs:351:17 [INFO] [stderr] | [INFO] [stderr] 351 | let mut match_palette: Palette = Palette {entries: [ [INFO] [stderr] | ----^^^^^^^^^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `timer` [INFO] [stderr] --> src/game/rusty_kong/video/actor.rs:75:13 [INFO] [stderr] | [INFO] [stderr] 75 | let timer = match anim_frame.timer { [INFO] [stderr] | ^^^^^ help: consider prefixing with an underscore: `_timer` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_variables)] on by default [INFO] [stderr] [INFO] [stderr] warning: unused variable: `t` [INFO] [stderr] --> src/game/rusty_kong/video/actor.rs:82:22 [INFO] [stderr] | [INFO] [stderr] 82 | Some(ref t) => return [INFO] [stderr] | ^ help: consider prefixing with an underscore: `_t` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `sprite_control` [INFO] [stderr] --> src/game/rusty_kong/video/actor.rs:69:13 [INFO] [stderr] | [INFO] [stderr] 69 | sprite_control:&mut SpriteControlTable, [INFO] [stderr] | ^^^^^^^^^^^^^^ help: consider prefixing with an underscore: `_sprite_control` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `context` [INFO] [stderr] --> src/game/rusty_kong/state_machine/boot.rs:20:19 [INFO] [stderr] | [INFO] [stderr] 20 | pub fn boot_leave(context:&GameStateContext) { [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_context` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `context` [INFO] [stderr] --> src/game/rusty_kong/state_machine/boot.rs:23:20 [INFO] [stderr] | [INFO] [stderr] 23 | pub fn boot_update(context:&GameStateContext) { [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_context` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `context` [INFO] [stderr] --> src/game/rusty_kong/state_machine/attract.rs:15:22 [INFO] [stderr] | [INFO] [stderr] 15 | pub fn attract_enter(context:&GameStateContext) { [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_context` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `context` [INFO] [stderr] --> src/game/rusty_kong/state_machine/attract.rs:18:22 [INFO] [stderr] | [INFO] [stderr] 18 | pub fn attract_leave(context:&GameStateContext) { [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_context` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `context` [INFO] [stderr] --> src/game/rusty_kong/state_machine/attract.rs:21:23 [INFO] [stderr] | [INFO] [stderr] 21 | pub fn attract_update(context:&GameStateContext) { [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_context` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `context` [INFO] [stderr] --> src/game/rusty_kong/state_machine/long_introduction.rs:25:25 [INFO] [stderr] | [INFO] [stderr] 25 | pub fn long_intro_leave(context:&GameStateContext) { [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_context` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `context` [INFO] [stderr] --> src/game/rusty_kong/state_machine/long_introduction.rs:29:26 [INFO] [stderr] | [INFO] [stderr] 29 | pub fn long_intro_update(context:&GameStateContext) { [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_context` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `context` [INFO] [stderr] --> src/game/rusty_kong/state_machine/how_high.rs:15:23 [INFO] [stderr] | [INFO] [stderr] 15 | pub fn how_high_enter(context:&GameStateContext) { [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_context` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `context` [INFO] [stderr] --> src/game/rusty_kong/state_machine/how_high.rs:19:23 [INFO] [stderr] | [INFO] [stderr] 19 | pub fn how_high_leave(context:&GameStateContext) { [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_context` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `context` [INFO] [stderr] --> src/game/rusty_kong/state_machine/how_high.rs:23:24 [INFO] [stderr] | [INFO] [stderr] 23 | pub fn how_high_update(context:&GameStateContext) { [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_context` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `context` [INFO] [stderr] --> src/game/rusty_kong/state_machine/game_play.rs:15:24 [INFO] [stderr] | [INFO] [stderr] 15 | pub fn game_play_enter(context:&GameStateContext) { [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_context` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `context` [INFO] [stderr] --> src/game/rusty_kong/state_machine/game_play.rs:19:24 [INFO] [stderr] | [INFO] [stderr] 19 | pub fn game_play_leave(context:&GameStateContext) { [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_context` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `context` [INFO] [stderr] --> src/game/rusty_kong/state_machine/game_play.rs:23:25 [INFO] [stderr] | [INFO] [stderr] 23 | pub fn game_play_update(context:&GameStateContext) { [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_context` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `context` [INFO] [stderr] --> src/game/rusty_kong/state_machine/player_dies.rs:15:26 [INFO] [stderr] | [INFO] [stderr] 15 | pub fn player_dies_enter(context:&GameStateContext) { [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_context` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `context` [INFO] [stderr] --> src/game/rusty_kong/state_machine/player_dies.rs:19:26 [INFO] [stderr] | [INFO] [stderr] 19 | pub fn player_dies_leave(context:&GameStateContext) { [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_context` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `context` [INFO] [stderr] --> src/game/rusty_kong/state_machine/player_dies.rs:23:27 [INFO] [stderr] | [INFO] [stderr] 23 | pub fn player_dies_update(context:&GameStateContext) { [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_context` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `context` [INFO] [stderr] --> src/game/rusty_kong/state_machine/player_wins.rs:15:26 [INFO] [stderr] | [INFO] [stderr] 15 | pub fn player_wins_enter(context:&GameStateContext) { [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_context` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `context` [INFO] [stderr] --> src/game/rusty_kong/state_machine/player_wins.rs:19:26 [INFO] [stderr] | [INFO] [stderr] 19 | pub fn player_wins_leave(context:&GameStateContext) { [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_context` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `context` [INFO] [stderr] --> src/game/rusty_kong/state_machine/player_wins.rs:23:27 [INFO] [stderr] | [INFO] [stderr] 23 | pub fn player_wins_update(context:&GameStateContext) { [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_context` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `context` [INFO] [stderr] --> src/game/rusty_kong/state_machine/kong_retreats.rs:15:28 [INFO] [stderr] | [INFO] [stderr] 15 | pub fn kong_retreats_enter(context:&GameStateContext) { [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_context` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `context` [INFO] [stderr] --> src/game/rusty_kong/state_machine/kong_retreats.rs:19:28 [INFO] [stderr] | [INFO] [stderr] 19 | pub fn kong_retreats_leave(context:&GameStateContext) { [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_context` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `context` [INFO] [stderr] --> src/game/rusty_kong/state_machine/kong_retreats.rs:23:29 [INFO] [stderr] | [INFO] [stderr] 23 | pub fn kong_retreats_update(context:&GameStateContext) { [INFO] [stderr] | ^^^^^^^ help: consider prefixing with an underscore: `_context` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `system` [INFO] [stderr] --> src/game/rusty_kong/state_machine/commands.rs:38:50 [INFO] [stderr] | [INFO] [stderr] 38 | fn execute(&self, game_state:&mut GameState, system:&mut SystemInterfaces) { [INFO] [stderr] | ^^^^^^ help: consider prefixing with an underscore: `_system` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `game_state` [INFO] [stderr] --> src/game/rusty_kong/state_machine/commands.rs:59:23 [INFO] [stderr] | [INFO] [stderr] 59 | fn execute(&self, game_state:&mut GameState, system:&mut SystemInterfaces) { [INFO] [stderr] | ^^^^^^^^^^ help: consider prefixing with an underscore: `_game_state` [INFO] [stderr] [INFO] [stderr] warning: unused variable: `game_state` [INFO] [stderr] --> src/game/rusty_kong/state_machine/commands.rs:88:23 [INFO] [stderr] | [INFO] [stderr] 88 | fn execute(&self, game_state:&mut GameState, system:&mut SystemInterfaces) { [INFO] [stderr] | ^^^^^^^^^^ help: consider prefixing with an underscore: `_game_state` [INFO] [stderr] [INFO] [stderr] warning: variable does not need to be mutable [INFO] [stderr] --> src/game/rusty_kong/video/common.rs:370:25 [INFO] [stderr] | [INFO] [stderr] 370 | let mut block = &mut self.table[index]; [INFO] [stderr] | ----^^^^^ [INFO] [stderr] | | [INFO] [stderr] | help: remove this `mut` [INFO] [stderr] | [INFO] [stderr] = note: #[warn(unused_mut)] on by default [INFO] [stderr] [INFO] [stderr] error: linking with `cc` failed: exit code: 1 [INFO] [stderr] | [INFO] [stderr] = note: "cc" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-m64" "-L" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "/opt/crater/target/debug/deps/ripper-4b0d9a08bab05c89.ripper.csjtasac-cgu.0.rcgu.o" "/opt/crater/target/debug/deps/ripper-4b0d9a08bab05c89.ripper.csjtasac-cgu.1.rcgu.o" "/opt/crater/target/debug/deps/ripper-4b0d9a08bab05c89.ripper.csjtasac-cgu.10.rcgu.o" "/opt/crater/target/debug/deps/ripper-4b0d9a08bab05c89.ripper.csjtasac-cgu.11.rcgu.o" "/opt/crater/target/debug/deps/ripper-4b0d9a08bab05c89.ripper.csjtasac-cgu.12.rcgu.o" "/opt/crater/target/debug/deps/ripper-4b0d9a08bab05c89.ripper.csjtasac-cgu.13.rcgu.o" "/opt/crater/target/debug/deps/ripper-4b0d9a08bab05c89.ripper.csjtasac-cgu.14.rcgu.o" "/opt/crater/target/debug/deps/ripper-4b0d9a08bab05c89.ripper.csjtasac-cgu.15.rcgu.o" "/opt/crater/target/debug/deps/ripper-4b0d9a08bab05c89.ripper.csjtasac-cgu.2.rcgu.o" "/opt/crater/target/debug/deps/ripper-4b0d9a08bab05c89.ripper.csjtasac-cgu.3.rcgu.o" "/opt/crater/target/debug/deps/ripper-4b0d9a08bab05c89.ripper.csjtasac-cgu.4.rcgu.o" "/opt/crater/target/debug/deps/ripper-4b0d9a08bab05c89.ripper.csjtasac-cgu.5.rcgu.o" "/opt/crater/target/debug/deps/ripper-4b0d9a08bab05c89.ripper.csjtasac-cgu.6.rcgu.o" "/opt/crater/target/debug/deps/ripper-4b0d9a08bab05c89.ripper.csjtasac-cgu.7.rcgu.o" "/opt/crater/target/debug/deps/ripper-4b0d9a08bab05c89.ripper.csjtasac-cgu.8.rcgu.o" "/opt/crater/target/debug/deps/ripper-4b0d9a08bab05c89.ripper.csjtasac-cgu.9.rcgu.o" "-o" "/opt/crater/target/debug/deps/ripper-4b0d9a08bab05c89" "/opt/crater/target/debug/deps/ripper-4b0d9a08bab05c89.1cxv7qj2dkxptbcu.rcgu.o" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-nodefaultlibs" "-L" "/opt/crater/target/debug/deps" "-L" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/opt/crater/target/debug/deps/libsdl2-eb7fd93cdf9e0df9.rlib" "/opt/crater/target/debug/deps/librand-8f0a32ccf9cf4819.rlib" "/opt/crater/target/debug/deps/librand-03c23d22d3e9361a.rlib" "/opt/crater/target/debug/deps/libc_vec-6a81bd8ed2e6a808.rlib" "/opt/crater/target/debug/deps/libsdl2_sys-9ab70eb93ef3ca05.rlib" "/opt/crater/target/debug/deps/libbitflags-df219a1ec24cdf3b.rlib" "/opt/crater/target/debug/deps/liblazy_static-318544a807a94655.rlib" "/opt/crater/target/debug/deps/liblibc-69fb33ee0a761606.rlib" "/opt/crater/target/debug/deps/libnum-6eafce8a2d158592.rlib" "/opt/crater/target/debug/deps/libnum_iter-413fc8aed7a29cdd.rlib" "/opt/crater/target/debug/deps/libnum_integer-c211a6b345647b2f.rlib" "/opt/crater/target/debug/deps/libnum_traits-f6e389a0e412a9fa.rlib" "/opt/crater/target/debug/deps/liblazy_static-2b2ddc91fce7b550.rlib" "-Wl,--start-group" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-9895e8982b0a79e7.rlib" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-57306b8ed3378a0e.rlib" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libbacktrace_sys-54463ae5adae3649.rlib" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-d99667b199a9875a.rlib" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-51f4300e102199f5.rlib" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-b3ccf1f7737a6a91.rlib" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-157c37a3ceb78853.rlib" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-505bcee45aafb736.rlib" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-c29abd529ba4452b.rlib" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-895383a3232f6572.rlib" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-5594cb4f559bc761.rlib" "-Wl,--end-group" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-38e90baf978bc428.rlib" "-Wl,-Bdynamic" "-lSDL2_ttf" "-lSDL2_image" "-lSDL2_mixer" "-lSDL2_gfx" "-lSDL2" "-lutil" "-lutil" "-ldl" "-lrt" "-lpthread" "-lgcc_s" "-lc" "-lm" "-lrt" "-lpthread" "-lutil" "-lutil" [INFO] [stderr] = note: /usr/bin/ld: cannot find -lSDL2_ttf [INFO] [stderr] /usr/bin/ld: cannot find -lSDL2_image [INFO] [stderr] /usr/bin/ld: cannot find -lSDL2_mixer [INFO] [stderr] /usr/bin/ld: cannot find -lSDL2_gfx [INFO] [stderr] collect2: error: ld returned 1 exit status [INFO] [stderr] [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `F_SPR_COLLIDED` [INFO] [stderr] --> src/game/rusty_kong/video/common.rs:42:1 [INFO] [stderr] | [INFO] [stderr] 42 | pub const F_SPR_COLLIDED:u8 = 0b00000010; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] | [INFO] [stderr] = note: #[warn(dead_code)] on by default [INFO] [stderr] [INFO] [stderr] warning: variant is never constructed: `Level1` [INFO] [stderr] --> src/game/rusty_kong/video/common.rs:56:5 [INFO] [stderr] | [INFO] [stderr] 56 | Level1, [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `user_data1` [INFO] [stderr] --> src/game/rusty_kong/video/common.rs:87:5 [INFO] [stderr] | [INFO] [stderr] 87 | user_data1: u32, [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `user_data2` [INFO] [stderr] --> src/game/rusty_kong/video/common.rs:88:5 [INFO] [stderr] | [INFO] [stderr] 88 | user_data2: u32 [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `tile` [INFO] [stderr] --> src/game/rusty_kong/video/common.rs:213:5 [INFO] [stderr] | [INFO] [stderr] 213 | pub fn tile(&mut self, number:u16) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `is_collided` [INFO] [stderr] --> src/game/rusty_kong/video/common.rs:225:5 [INFO] [stderr] | [INFO] [stderr] 225 | pub fn is_collided(&self) -> bool { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `enable` [INFO] [stderr] --> src/game/rusty_kong/video/common.rs:229:5 [INFO] [stderr] | [INFO] [stderr] 229 | pub fn enable(&mut self, flag:bool) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `collided` [INFO] [stderr] --> src/game/rusty_kong/video/common.rs:245:5 [INFO] [stderr] | [INFO] [stderr] 245 | pub fn collided(&mut self, flag:bool) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `palette` [INFO] [stderr] --> src/game/rusty_kong/video/common.rs:253:5 [INFO] [stderr] | [INFO] [stderr] 253 | pub fn palette(&mut self, number:u8) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `get_position` [INFO] [stderr] --> src/game/rusty_kong/video/common.rs:257:5 [INFO] [stderr] | [INFO] [stderr] 257 | pub fn get_position(&self) -> (u16, u16) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `position` [INFO] [stderr] --> src/game/rusty_kong/video/common.rs:261:5 [INFO] [stderr] | [INFO] [stderr] 261 | pub fn position(&mut self, x:u16, y:u16) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `vertical_flip` [INFO] [stderr] --> src/game/rusty_kong/video/common.rs:266:5 [INFO] [stderr] | [INFO] [stderr] 266 | pub fn vertical_flip(&mut self, flag:bool) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `horizontal_flip` [INFO] [stderr] --> src/game/rusty_kong/video/common.rs:278:5 [INFO] [stderr] | [INFO] [stderr] 278 | pub fn horizontal_flip(&mut self, flag:bool) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `user_data1` [INFO] [stderr] --> src/game/rusty_kong/video/common.rs:296:5 [INFO] [stderr] | [INFO] [stderr] 296 | user_data1: u32, [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `user_data2` [INFO] [stderr] --> src/game/rusty_kong/video/common.rs:297:5 [INFO] [stderr] | [INFO] [stderr] 297 | user_data2: u32 [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: function is never used: `get_palette` [INFO] [stderr] --> src/game/rusty_kong/video/palettes.rs:26:1 [INFO] [stderr] | [INFO] [stderr] 26 | pub fn get_palette(number:u8) -> &'static Palette { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `F_ACTOR_NONE` [INFO] [stderr] --> src/game/rusty_kong/video/actor.rs:24:1 [INFO] [stderr] | [INFO] [stderr] 24 | pub const F_ACTOR_NONE:u8 = 0b00000000; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `F_ACTOR_ENABLED` [INFO] [stderr] --> src/game/rusty_kong/video/actor.rs:25:1 [INFO] [stderr] | [INFO] [stderr] 25 | pub const F_ACTOR_ENABLED:u8 = 0b00000001; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `F_ACTOR_COLLIDED` [INFO] [stderr] --> src/game/rusty_kong/video/actor.rs:26:1 [INFO] [stderr] | [INFO] [stderr] 26 | pub const F_ACTOR_COLLIDED:u8 = 0b00000010; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `F_ACTOR_HFLIP` [INFO] [stderr] --> src/game/rusty_kong/video/actor.rs:27:1 [INFO] [stderr] | [INFO] [stderr] 27 | pub const F_ACTOR_HFLIP:u8 = 0b00000100; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: constant item is never used: `F_ACTOR_VFLIP` [INFO] [stderr] --> src/game/rusty_kong/video/actor.rs:28:1 [INFO] [stderr] | [INFO] [stderr] 28 | pub const F_ACTOR_VFLIP:u8 = 0b00001000; [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `tile` [INFO] [stderr] --> src/game/rusty_kong/video/actor.rs:32:5 [INFO] [stderr] | [INFO] [stderr] 32 | tile: u16, [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `flags` [INFO] [stderr] --> src/game/rusty_kong/video/actor.rs:33:5 [INFO] [stderr] | [INFO] [stderr] 33 | flags: u8, [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `palette` [INFO] [stderr] --> src/game/rusty_kong/video/actor.rs:34:5 [INFO] [stderr] | [INFO] [stderr] 34 | palette: u8, [INFO] [stderr] | ^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `x_offset` [INFO] [stderr] --> src/game/rusty_kong/video/actor.rs:35:5 [INFO] [stderr] | [INFO] [stderr] 35 | x_offset: u16, [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `y_offset` [INFO] [stderr] --> src/game/rusty_kong/video/actor.rs:36:5 [INFO] [stderr] | [INFO] [stderr] 36 | y_offset: u16, [INFO] [stderr] | ^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `sprites` [INFO] [stderr] --> src/game/rusty_kong/video/actor.rs:41:5 [INFO] [stderr] | [INFO] [stderr] 41 | sprites: Vec, [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/game/rusty_kong/video/actor.rs:54:5 [INFO] [stderr] | [INFO] [stderr] 54 | pub fn new(frames:Vec) -> Animation { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `reset` [INFO] [stderr] --> src/game/rusty_kong/video/actor.rs:58:5 [INFO] [stderr] | [INFO] [stderr] 58 | pub fn reset(&mut self) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `y` [INFO] [stderr] --> src/game/rusty_kong/video/actor.rs:98:5 [INFO] [stderr] | [INFO] [stderr] 98 | y: u16, [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `x` [INFO] [stderr] --> src/game/rusty_kong/video/actor.rs:99:5 [INFO] [stderr] | [INFO] [stderr] 99 | x: u16, [INFO] [stderr] | ^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `flags` [INFO] [stderr] --> src/game/rusty_kong/video/actor.rs:100:5 [INFO] [stderr] | [INFO] [stderr] 100 | flags: u8, [INFO] [stderr] | ^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `new` [INFO] [stderr] --> src/game/rusty_kong/video/actor.rs:105:5 [INFO] [stderr] | [INFO] [stderr] 105 | pub fn new(x: u16, y: u16, flags: u8) -> Actor { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `animation` [INFO] [stderr] --> src/game/rusty_kong/video/actor.rs:109:5 [INFO] [stderr] | [INFO] [stderr] 109 | pub fn animation(&mut self, anim:Animation) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: method is never used: `position` [INFO] [stderr] --> src/game/rusty_kong/video/actor.rs:113:5 [INFO] [stderr] | [INFO] [stderr] 113 | pub fn position(&mut self, x: u16, y: u16) { [INFO] [stderr] | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `level` [INFO] [stderr] --> src/game/rusty_kong/state_machine/mod.rs:150:5 [INFO] [stderr] | [INFO] [stderr] 150 | level: Level, [INFO] [stderr] | ^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] warning: field is never used: `player` [INFO] [stderr] --> src/game/rusty_kong/state_machine/mod.rs:151:5 [INFO] [stderr] | [INFO] [stderr] 151 | player: JumpMan, [INFO] [stderr] | ^^^^^^^^^^^^^^^ [INFO] [stderr] [INFO] [stderr] error: Could not compile `rusty-kong`. [INFO] [stderr] warning: build failed, waiting for other jobs to finish... [INFO] [stderr] error: linking with `cc` failed: exit code: 1 [INFO] [stderr] | [INFO] [stderr] = note: "cc" "-Wl,--as-needed" "-Wl,-z,noexecstack" "-m64" "-L" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "/opt/crater/target/debug/deps/rusty_kong-1826d7b2661fb113.rusty_kong.3lwi42gm-cgu.0.rcgu.o" "/opt/crater/target/debug/deps/rusty_kong-1826d7b2661fb113.rusty_kong.3lwi42gm-cgu.1.rcgu.o" "/opt/crater/target/debug/deps/rusty_kong-1826d7b2661fb113.rusty_kong.3lwi42gm-cgu.10.rcgu.o" "/opt/crater/target/debug/deps/rusty_kong-1826d7b2661fb113.rusty_kong.3lwi42gm-cgu.11.rcgu.o" "/opt/crater/target/debug/deps/rusty_kong-1826d7b2661fb113.rusty_kong.3lwi42gm-cgu.12.rcgu.o" "/opt/crater/target/debug/deps/rusty_kong-1826d7b2661fb113.rusty_kong.3lwi42gm-cgu.13.rcgu.o" "/opt/crater/target/debug/deps/rusty_kong-1826d7b2661fb113.rusty_kong.3lwi42gm-cgu.14.rcgu.o" "/opt/crater/target/debug/deps/rusty_kong-1826d7b2661fb113.rusty_kong.3lwi42gm-cgu.15.rcgu.o" "/opt/crater/target/debug/deps/rusty_kong-1826d7b2661fb113.rusty_kong.3lwi42gm-cgu.2.rcgu.o" "/opt/crater/target/debug/deps/rusty_kong-1826d7b2661fb113.rusty_kong.3lwi42gm-cgu.3.rcgu.o" "/opt/crater/target/debug/deps/rusty_kong-1826d7b2661fb113.rusty_kong.3lwi42gm-cgu.4.rcgu.o" "/opt/crater/target/debug/deps/rusty_kong-1826d7b2661fb113.rusty_kong.3lwi42gm-cgu.5.rcgu.o" "/opt/crater/target/debug/deps/rusty_kong-1826d7b2661fb113.rusty_kong.3lwi42gm-cgu.6.rcgu.o" "/opt/crater/target/debug/deps/rusty_kong-1826d7b2661fb113.rusty_kong.3lwi42gm-cgu.7.rcgu.o" "/opt/crater/target/debug/deps/rusty_kong-1826d7b2661fb113.rusty_kong.3lwi42gm-cgu.8.rcgu.o" "/opt/crater/target/debug/deps/rusty_kong-1826d7b2661fb113.rusty_kong.3lwi42gm-cgu.9.rcgu.o" "-o" "/opt/crater/target/debug/deps/rusty_kong-1826d7b2661fb113" "/opt/crater/target/debug/deps/rusty_kong-1826d7b2661fb113.42bodl46vheoa4a4.rcgu.o" "-Wl,--gc-sections" "-pie" "-Wl,-zrelro" "-Wl,-znow" "-nodefaultlibs" "-L" "/opt/crater/target/debug/deps" "-L" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib" "-Wl,-Bstatic" "/opt/crater/target/debug/deps/libsimple_logger-9be8b8f6010f9fb5.rlib" "/opt/crater/target/debug/deps/libtime-a88e2853488f2a2d.rlib" "/opt/crater/target/debug/deps/liblazy_static-2b2ddc91fce7b550.rlib" "/opt/crater/target/debug/deps/liblog-e993413252190225.rlib" "/opt/crater/target/debug/deps/libcfg_if-d91c3b4a47d9636f.rlib" "/opt/crater/target/debug/deps/libsdl2-eb7fd93cdf9e0df9.rlib" "/opt/crater/target/debug/deps/librand-8f0a32ccf9cf4819.rlib" "/opt/crater/target/debug/deps/librand-03c23d22d3e9361a.rlib" "/opt/crater/target/debug/deps/libc_vec-6a81bd8ed2e6a808.rlib" "/opt/crater/target/debug/deps/libsdl2_sys-9ab70eb93ef3ca05.rlib" "/opt/crater/target/debug/deps/libbitflags-df219a1ec24cdf3b.rlib" "/opt/crater/target/debug/deps/liblazy_static-318544a807a94655.rlib" "/opt/crater/target/debug/deps/liblibc-69fb33ee0a761606.rlib" "/opt/crater/target/debug/deps/libnum-6eafce8a2d158592.rlib" "/opt/crater/target/debug/deps/libnum_iter-413fc8aed7a29cdd.rlib" "/opt/crater/target/debug/deps/libnum_integer-c211a6b345647b2f.rlib" "/opt/crater/target/debug/deps/libnum_traits-f6e389a0e412a9fa.rlib" "-Wl,--start-group" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libstd-9895e8982b0a79e7.rlib" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libpanic_unwind-57306b8ed3378a0e.rlib" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libbacktrace_sys-54463ae5adae3649.rlib" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_demangle-d99667b199a9875a.rlib" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libhashbrown-51f4300e102199f5.rlib" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_alloc-b3ccf1f7737a6a91.rlib" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libunwind-157c37a3ceb78853.rlib" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liblibc-505bcee45aafb736.rlib" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/liballoc-c29abd529ba4452b.rlib" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/librustc_std_workspace_core-895383a3232f6572.rlib" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcore-5594cb4f559bc761.rlib" "-Wl,--end-group" "/opt/crater/rustup-home/toolchains/1.36.0-x86_64-unknown-linux-gnu/lib/rustlib/x86_64-unknown-linux-gnu/lib/libcompiler_builtins-38e90baf978bc428.rlib" "-Wl,-Bdynamic" "-lSDL2_ttf" "-lSDL2_image" "-lSDL2_mixer" "-lSDL2_gfx" "-lSDL2" "-lutil" "-lutil" "-ldl" "-lrt" "-lpthread" "-lgcc_s" "-lc" "-lm" "-lrt" "-lpthread" "-lutil" "-lutil" [INFO] [stderr] = note: /usr/bin/ld: cannot find -lSDL2_ttf [INFO] [stderr] /usr/bin/ld: cannot find -lSDL2_image [INFO] [stderr] /usr/bin/ld: cannot find -lSDL2_mixer [INFO] [stderr] /usr/bin/ld: cannot find -lSDL2_gfx [INFO] [stderr] collect2: error: ld returned 1 exit status [INFO] [stderr] [INFO] [stderr] [INFO] [stderr] error: aborting due to previous error [INFO] [stderr] [INFO] [stderr] error: Could not compile `rusty-kong`. [INFO] [stderr] [INFO] [stderr] To learn more, run the command again with --verbose. [INFO] running `"docker" "inspect" "57e40420022f1f3b987d718df293832ab53d7129f1a989ec241d21d31b224bf2"` [INFO] running `"docker" "rm" "-f" "57e40420022f1f3b987d718df293832ab53d7129f1a989ec241d21d31b224bf2"` [INFO] [stdout] 57e40420022f1f3b987d718df293832ab53d7129f1a989ec241d21d31b224bf2