[INFO] fetching crate odbc-futures 0.2.2... [INFO] checking odbc-futures-0.2.2 against try#9c1dcf141bc0875407c4eb36972857bd3db713e2 for pr-81863 [INFO] extracting crate odbc-futures 0.2.2 into /workspace/builds/worker-4/source [INFO] validating manifest of crates.io crate odbc-futures 0.2.2 on toolchain 9c1dcf141bc0875407c4eb36972857bd3db713e2 [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+9c1dcf141bc0875407c4eb36972857bd3db713e2" "metadata" "--manifest-path" "Cargo.toml" "--no-deps", kill_on_drop: false }` [INFO] started tweaking crates.io crate odbc-futures 0.2.2 [INFO] finished tweaking crates.io crate odbc-futures 0.2.2 [INFO] tweaked toml for crates.io crate odbc-futures 0.2.2 written to /workspace/builds/worker-4/source/Cargo.toml [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+9c1dcf141bc0875407c4eb36972857bd3db713e2" "generate-lockfile" "--manifest-path" "Cargo.toml" "-Zno-index-update", kill_on_drop: false }` [INFO] running `Command { std: "/workspace/cargo-home/bin/cargo" "+9c1dcf141bc0875407c4eb36972857bd3db713e2" "fetch" "--locked" "--manifest-path" "Cargo.toml", kill_on_drop: false }` [INFO] [stderr] Downloading crates ... [INFO] [stderr] Downloaded smallvec v0.6.14 [INFO] [stderr] Downloaded maybe-uninit v2.0.0 [INFO] [stderr] Downloaded bytes v0.4.12 [INFO] [stderr] Downloaded tokio-threadpool v0.1.18 [INFO] [stderr] Downloaded failure v0.1.8 [INFO] [stderr] Downloaded tokio-current-thread v0.1.7 [INFO] [stderr] Downloaded futures v0.1.30 [INFO] [stderr] Downloaded tokio-uds v0.2.7 [INFO] [stderr] Downloaded tokio-sync v0.1.8 [INFO] [stderr] Downloaded tokio v0.1.22 [INFO] [stderr] Downloaded futures-state-stream v0.2.0 [INFO] [stderr] Downloaded tokio-reactor v0.1.12 [INFO] [stderr] Downloaded tokio-fs v0.1.7 [INFO] [stderr] Downloaded tokio-tcp v0.1.4 [INFO] [stderr] Downloaded failure_derive v0.1.8 [INFO] [stderr] Downloaded memoffset v0.5.6 [INFO] [stderr] Downloaded crossbeam-epoch v0.8.2 [INFO] [stderr] Downloaded crossbeam-deque v0.7.3 [INFO] [stderr] Downloaded crossbeam-queue v0.2.3 [INFO] [stderr] Downloaded tokio-codec v0.1.2 [INFO] [stderr] Downloaded lock_api v0.3.4 [INFO] [stderr] Downloaded parking_lot_core v0.6.2 [INFO] [stderr] Downloaded tokio-executor v0.1.10 [INFO] [stderr] Downloaded tokio-timer v0.2.13 [INFO] [stderr] Downloaded tokio-udp v0.1.6 [INFO] [stderr] Downloaded parking_lot v0.9.0 [INFO] [stderr] Downloaded tokio-io v0.1.13 [INFO] [stderr] Downloaded crossbeam-utils v0.7.2 [INFO] [stderr] Downloaded odbc-futures-derive v0.1.1 [INFO] [stderr] Downloaded odbc-sys v0.7.0 [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "rustops/crates-build-env@sha256:21f1ed92105a0ef9b0d27ad8bdeb7f36f9f01ac17fffe3a3f3dc5241fc25d8f4" "/opt/rustwide/cargo-home/bin/cargo" "+9c1dcf141bc0875407c4eb36972857bd3db713e2" "metadata" "--no-deps" "--format-version=1", kill_on_drop: false }` [INFO] [stdout] 02253e04720efba8fbaafc6705668d87db08d3d16990ac84b207598e48069aeb [INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. [INFO] running `Command { std: "docker" "start" "-a" "02253e04720efba8fbaafc6705668d87db08d3d16990ac84b207598e48069aeb", kill_on_drop: false }` [INFO] running `Command { std: "docker" "inspect" "02253e04720efba8fbaafc6705668d87db08d3d16990ac84b207598e48069aeb", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "02253e04720efba8fbaafc6705668d87db08d3d16990ac84b207598e48069aeb", kill_on_drop: false }` [INFO] [stdout] 02253e04720efba8fbaafc6705668d87db08d3d16990ac84b207598e48069aeb [INFO] running `Command { std: "docker" "create" "-v" "/var/lib/crater-agent-workspace/builds/worker-4/target:/opt/rustwide/target:rw,Z" "-v" "/var/lib/crater-agent-workspace/builds/worker-4/source:/opt/rustwide/workdir:ro,Z" "-v" "/var/lib/crater-agent-workspace/cargo-home:/opt/rustwide/cargo-home:ro,Z" "-v" "/var/lib/crater-agent-workspace/rustup-home:/opt/rustwide/rustup-home:ro,Z" "-e" "SOURCE_DIR=/opt/rustwide/workdir" "-e" "CARGO_TARGET_DIR=/opt/rustwide/target" "-e" "CARGO_INCREMENTAL=0" "-e" "RUST_BACKTRACE=full" "-e" "RUSTFLAGS=--cap-lints=forbid" "-e" "CARGO_HOME=/opt/rustwide/cargo-home" "-e" "RUSTUP_HOME=/opt/rustwide/rustup-home" "-w" "/opt/rustwide/workdir" "-m" "1610612736" "--user" "0:0" "--network" "none" "rustops/crates-build-env@sha256:21f1ed92105a0ef9b0d27ad8bdeb7f36f9f01ac17fffe3a3f3dc5241fc25d8f4" "/opt/rustwide/cargo-home/bin/cargo" "+9c1dcf141bc0875407c4eb36972857bd3db713e2" "check" "--frozen" "--all" "--all-targets" "--message-format=json", kill_on_drop: false }` [INFO] [stderr] WARNING: Your kernel does not support swap limit capabilities or the cgroup is not mounted. Memory limited without swap. [INFO] [stdout] 63a8db5464b73d3b07b392fa6da093452b6c1691c8f80fc9b0a3309518091f17 [INFO] running `Command { std: "docker" "start" "-a" "63a8db5464b73d3b07b392fa6da093452b6c1691c8f80fc9b0a3309518091f17", kill_on_drop: false }` [INFO] [stderr] Compiling autocfg v1.0.1 [INFO] [stderr] Compiling libc v0.2.85 [INFO] [stderr] Checking cfg-if v1.0.0 [INFO] [stderr] Compiling maybe-uninit v2.0.0 [INFO] [stderr] Checking lazy_static v1.4.0 [INFO] [stderr] Compiling log v0.4.14 [INFO] [stderr] Compiling semver-parser v0.7.0 [INFO] [stderr] Checking scopeguard v1.1.0 [INFO] [stderr] Checking slab v0.4.2 [INFO] [stderr] Checking byteorder v1.4.2 [INFO] [stderr] Compiling memchr v2.3.4 [INFO] [stderr] Checking fnv v1.0.7 [INFO] [stderr] Compiling syn v0.15.44 [INFO] [stderr] Compiling once_cell v1.5.2 [INFO] [stderr] Compiling regex-syntax v0.6.22 [INFO] [stderr] Checking gimli v0.23.0 [INFO] [stderr] Compiling failure_derive v0.1.8 [INFO] [stderr] Checking adler v0.2.3 [INFO] [stderr] Compiling odbc-sys v0.7.0 [INFO] [stderr] Checking rustc-demangle v0.1.18 [INFO] [stderr] Checking object v0.23.0 [INFO] [stderr] Checking uuid v0.7.4 [INFO] [stderr] Checking futures-state-stream v0.2.0 [INFO] [stderr] Checking lock_api v0.3.4 [INFO] [stderr] Checking tokio-sync v0.1.8 [INFO] [stderr] Compiling thread_local v1.1.3 [INFO] [stderr] Compiling semver v0.9.0 [INFO] [stderr] Compiling syn v1.0.60 [INFO] [stderr] Checking smallvec v0.6.14 [INFO] [stderr] Compiling rustc_version v0.2.3 [INFO] [stderr] Compiling crossbeam-utils v0.7.2 [INFO] [stderr] Compiling memoffset v0.5.6 [INFO] [stderr] Compiling crossbeam-epoch v0.8.2 [INFO] [stderr] Compiling num-traits v0.2.14 [INFO] [stderr] Compiling miniz_oxide v0.4.3 [INFO] [stderr] Compiling num-integer v0.1.44 [INFO] [stderr] Compiling aho-corasick v0.7.15 [INFO] [stderr] Compiling parking_lot_core v0.6.2 [INFO] [stderr] Compiling parking_lot v0.9.0 [INFO] [stderr] Checking iovec v0.1.4 [INFO] [stderr] Checking num_cpus v1.13.0 [INFO] [stderr] Checking net2 v0.2.37 [INFO] [stderr] Checking time v0.1.44 [INFO] [stderr] Checking bytes v0.4.12 [INFO] [stderr] Checking tokio-executor v0.1.10 [INFO] [stderr] Checking crossbeam-queue v0.2.3 [INFO] [stderr] Checking mio v0.6.23 [INFO] [stderr] Checking tokio-current-thread v0.1.7 [INFO] [stderr] Checking tokio-timer v0.2.13 [INFO] [stderr] Checking crossbeam-deque v0.7.3 [INFO] [stderr] Checking tokio-io v0.1.13 [INFO] [stderr] Checking tokio-threadpool v0.1.18 [INFO] [stderr] Checking tokio-codec v0.1.2 [INFO] [stderr] Checking tokio-reactor v0.1.12 [INFO] [stderr] Checking mio-uds v0.6.8 [INFO] [stderr] Checking chrono v0.4.19 [INFO] [stderr] Checking tokio-fs v0.1.7 [INFO] [stderr] Checking tokio-uds v0.2.7 [INFO] [stderr] Checking tokio-tcp v0.1.4 [INFO] [stderr] Checking tokio-udp v0.1.6 [INFO] [stderr] Checking addr2line v0.14.1 [INFO] [stderr] Checking tokio v0.1.22 [INFO] [stderr] Compiling regex v1.4.3 [INFO] [stderr] Compiling synstructure v0.12.4 [INFO] [stderr] Checking backtrace v0.3.56 [INFO] [stderr] Compiling synstructure v0.10.2 [INFO] [stderr] Compiling Inflector v0.11.4 [INFO] [stderr] Compiling odbc-futures-derive v0.1.1 [INFO] [stderr] Checking failure v0.1.8 [INFO] [stderr] Checking odbc-futures v0.2.2 (/opt/rustwide/workdir) [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/stmt.rs:19:25 [INFO] [stdout] | [INFO] [stdout] 19 | parameters: Vec>, [INFO] [stdout] | ^^^ help: use `dyn`: `dyn Any` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(bare_trait_objects)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/stmt.rs:221:55 [INFO] [stdout] | [INFO] [stdout] 221 | lock.parameters[index] = value as Box; [INFO] [stdout] | ^^^ help: use `dyn`: `dyn Any` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/stmt.rs:235:47 [INFO] [stdout] | [INFO] [stdout] 235 | lock.parameters.push(value as Box); [INFO] [stdout] | ^^^ help: use `dyn`: `dyn Any` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/stmt.rs:501:17 [INFO] [stdout] | [INFO] [stdout] 501 | / Future>, SqlStatement), Error = (SqlError, SqlStatement)> [INFO] [stdout] 502 | | + Send, [INFO] [stdout] | |__________________________^ [INFO] [stdout] | [INFO] [stdout] help: use `dyn` [INFO] [stdout] | [INFO] [stdout] 501 | dyn Future>, SqlStatement), Error = (SqlError, SqlStatement)> [INFO] [stdout] 502 | + Send, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the item `SqlVisitor` is imported redundantly [INFO] [stdout] --> src/stream.rs:105:9 [INFO] [stdout] | [INFO] [stdout] 1 | use crate::bind::*; [INFO] [stdout] | -------------- the item `SqlVisitor` is already imported here [INFO] [stdout] ... [INFO] [stdout] 105 | use crate::bind::SqlVisitor; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated function `std::mem::uninitialized`: use `mem::MaybeUninit` instead [INFO] [stdout] --> src/attr.rs:113:24 [INFO] [stdout] | [INFO] [stdout] 113 | let mut value: T = std::mem::uninitialized(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated function `std::mem::uninitialized`: use `mem::MaybeUninit` instead [INFO] [stdout] --> src/conn.rs:378:26 [INFO] [stdout] | [INFO] [stdout] 378 | environment: std::mem::uninitialized(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated function `std::mem::uninitialized`: use `mem::MaybeUninit` instead [INFO] [stdout] --> src/conn.rs:428:28 [INFO] [stdout] | [INFO] [stdout] 428 | let mut value: T = std::mem::uninitialized(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/stmt.rs:19:25 [INFO] [stdout] | [INFO] [stdout] 19 | parameters: Vec>, [INFO] [stdout] | ^^^ help: use `dyn`: `dyn Any` [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(bare_trait_objects)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/stmt.rs:221:55 [INFO] [stdout] | [INFO] [stdout] 221 | lock.parameters[index] = value as Box; [INFO] [stdout] | ^^^ help: use `dyn`: `dyn Any` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/stmt.rs:235:47 [INFO] [stdout] | [INFO] [stdout] 235 | lock.parameters.push(value as Box); [INFO] [stdout] | ^^^ help: use `dyn`: `dyn Any` [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: trait objects without an explicit `dyn` are deprecated [INFO] [stdout] --> src/stmt.rs:501:17 [INFO] [stdout] | [INFO] [stdout] 501 | / Future>, SqlStatement), Error = (SqlError, SqlStatement)> [INFO] [stdout] 502 | | + Send, [INFO] [stdout] | |__________________________^ [INFO] [stdout] | [INFO] [stdout] help: use `dyn` [INFO] [stdout] | [INFO] [stdout] 501 | dyn Future>, SqlStatement), Error = (SqlError, SqlStatement)> [INFO] [stdout] 502 | + Send, [INFO] [stdout] | [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the item `SqlVisitor` is imported redundantly [INFO] [stdout] --> src/stream.rs:105:9 [INFO] [stdout] | [INFO] [stdout] 1 | use crate::bind::*; [INFO] [stdout] | -------------- the item `SqlVisitor` is already imported here [INFO] [stdout] ... [INFO] [stdout] 105 | use crate::bind::SqlVisitor; [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(unused_imports)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated function `std::mem::uninitialized`: use `mem::MaybeUninit` instead [INFO] [stdout] --> src/attr.rs:113:24 [INFO] [stdout] | [INFO] [stdout] 113 | let mut value: T = std::mem::uninitialized(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(deprecated)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated function `std::mem::uninitialized`: use `mem::MaybeUninit` instead [INFO] [stdout] --> src/conn.rs:378:26 [INFO] [stdout] | [INFO] [stdout] 378 | environment: std::mem::uninitialized(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: use of deprecated function `std::mem::uninitialized`: use `mem::MaybeUninit` instead [INFO] [stdout] --> src/conn.rs:428:28 [INFO] [stdout] | [INFO] [stdout] 428 | let mut value: T = std::mem::uninitialized(); [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `not_ready` [INFO] [stdout] --> src/poll.rs:29:5 [INFO] [stdout] | [INFO] [stdout] 29 | not_ready: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `not_ready` [INFO] [stdout] --> src/poll.rs:125:5 [INFO] [stdout] | [INFO] [stdout] 125 | not_ready: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: bounds on `Self: Drop` are useless, consider instead using `std::mem::needs_drop` to detect if a type has a destructor [INFO] [stdout] --> src/handle.rs:6:22 [INFO] [stdout] | [INFO] [stdout] 6 | pub trait SqlHandle: Drop + Send + Sync + Sized + 'static { [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(drop_bounds)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the type `Arc>` does not permit being left uninitialized [INFO] [stdout] --> src/conn.rs:378:26 [INFO] [stdout] | [INFO] [stdout] 378 | environment: std::mem::uninitialized(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | this code causes undefined behavior when executed [INFO] [stdout] | help: use `MaybeUninit` instead, and only call `assume_init` after initialization is done [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(invalid_value)]` on by default [INFO] [stdout] note: `std::ptr::NonNull>>` must be non-null (in this struct field) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 12 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: unnecessary trailing semicolon [INFO] [stdout] --> tests/common.rs:118:53 [INFO] [stdout] | [INFO] [stdout] 118 | let c_string = "1".repeat(LONG_DATA_LENGTH);; [INFO] [stdout] | ^ help: remove this semicolon [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(redundant_semicolons)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `not_ready` [INFO] [stdout] --> src/poll.rs:29:5 [INFO] [stdout] | [INFO] [stdout] 29 | not_ready: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(dead_code)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: field is never read: `not_ready` [INFO] [stdout] --> src/poll.rs:125:5 [INFO] [stdout] | [INFO] [stdout] 125 | not_ready: bool, [INFO] [stdout] | ^^^^^^^^^^^^^^^ [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: bounds on `Self: Drop` are useless, consider instead using `std::mem::needs_drop` to detect if a type has a destructor [INFO] [stdout] --> src/handle.rs:6:22 [INFO] [stdout] | [INFO] [stdout] 6 | pub trait SqlHandle: Drop + Send + Sync + Sized + 'static { [INFO] [stdout] | ^^^^ [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(drop_bounds)]` on by default [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: the type `std::sync::Arc>` does not permit being left uninitialized [INFO] [stdout] --> src/conn.rs:378:26 [INFO] [stdout] | [INFO] [stdout] 378 | environment: std::mem::uninitialized(), [INFO] [stdout] | ^^^^^^^^^^^^^^^^^^^^^^^^^ [INFO] [stdout] | | [INFO] [stdout] | this code causes undefined behavior when executed [INFO] [stdout] | help: use `MaybeUninit` instead, and only call `assume_init` after initialization is done [INFO] [stdout] | [INFO] [stdout] = note: `#[warn(invalid_value)]` on by default [INFO] [stdout] note: `std::ptr::NonNull>>` must be non-null (in this struct field) [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 1 warning emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stdout] warning: 12 warnings emitted [INFO] [stdout] [INFO] [stdout] [INFO] [stderr] Finished dev [unoptimized + debuginfo] target(s) in 1m 15s [INFO] running `Command { std: "docker" "inspect" "63a8db5464b73d3b07b392fa6da093452b6c1691c8f80fc9b0a3309518091f17", kill_on_drop: false }` [INFO] running `Command { std: "docker" "rm" "-f" "63a8db5464b73d3b07b392fa6da093452b6c1691c8f80fc9b0a3309518091f17", kill_on_drop: false }` [INFO] [stdout] 63a8db5464b73d3b07b392fa6da093452b6c1691c8f80fc9b0a3309518091f17